From 2aec78db7e45c973b27bef5153e436ff468b1814 Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Tue, 14 May 2024 13:26:13 +1000 Subject: [PATCH 01/17] Use new incomplete field in WSMessage for breaking up large messages --- data-formats | 2 +- generated-protos/detector-config-msgs.pb.go | 4 ++-- generated-protos/detector-config.pb.go | 4 ++-- generated-protos/diffraction-data.pb.go | 4 ++-- .../diffraction-detected-peak-msgs.pb.go | 4 ++-- .../diffraction-manual-msgs.pb.go | 4 ++-- .../diffraction-status-msgs.pb.go | 4 ++-- generated-protos/diffraction.pb.go | 4 ++-- generated-protos/doi-msgs.pb.go | 4 ++-- generated-protos/doi.pb.go | 4 ++-- generated-protos/element-set-msgs.pb.go | 4 ++-- generated-protos/element-set.pb.go | 4 ++-- generated-protos/experiment.pb.go | 4 ++-- generated-protos/export-msgs.pb.go | 4 ++-- generated-protos/export.pb.go | 4 ++-- generated-protos/expression-group-msgs.pb.go | 4 ++-- generated-protos/expression-group.pb.go | 4 ++-- generated-protos/expression-msgs.pb.go | 4 ++-- generated-protos/expressions.pb.go | 4 ++-- .../image-beam-location-msgs.pb.go | 4 ++-- generated-protos/image-beam-location.pb.go | 4 ++-- generated-protos/image-coreg-msgs.pb.go | 4 ++-- generated-protos/image-coreg.pb.go | 4 ++-- generated-protos/image-msgs.pb.go | 4 ++-- generated-protos/image.pb.go | 4 ++-- generated-protos/job-msgs.pb.go | 4 ++-- generated-protos/job.pb.go | 4 ++-- generated-protos/log-msgs.pb.go | 4 ++-- generated-protos/log.pb.go | 4 ++-- generated-protos/memoisation-msgs.pb.go | 4 ++-- generated-protos/memoisation.pb.go | 4 ++-- generated-protos/module-msgs.pb.go | 4 ++-- generated-protos/modules.pb.go | 4 ++-- generated-protos/notification-msgs.pb.go | 4 ++-- generated-protos/notification.pb.go | 4 ++-- generated-protos/ownership-access-msgs.pb.go | 4 ++-- generated-protos/ownership-access.pb.go | 4 ++-- generated-protos/permissions.pb.go | 4 ++-- generated-protos/piquant-config.pb.go | 4 ++-- generated-protos/piquant-msgs.pb.go | 4 ++-- .../pseudo-intensities-msgs.pb.go | 4 ++-- generated-protos/pseudo-intensities.pb.go | 4 ++-- generated-protos/quantification-create.pb.go | 4 ++-- .../quantification-management-msgs.pb.go | 4 ++-- generated-protos/quantification-meta.pb.go | 4 ++-- .../quantification-multi-msgs.pb.go | 4 ++-- generated-protos/quantification-multi.pb.go | 4 ++-- .../quantification-retrieval-msgs.pb.go | 4 ++-- .../quantification-upload-msgs.pb.go | 4 ++-- generated-protos/quantification.pb.go | 4 ++-- generated-protos/restmsgs.pb.go | 4 ++-- generated-protos/roi-msgs.pb.go | 4 ++-- generated-protos/roi.pb.go | 4 ++-- .../scan-beam-location-msgs.pb.go | 4 ++-- generated-protos/scan-beam-location.pb.go | 4 ++-- .../scan-entry-metadata-msgs.pb.go | 4 ++-- generated-protos/scan-entry-metadata.pb.go | 4 ++-- generated-protos/scan-entry-msgs.pb.go | 4 ++-- generated-protos/scan-entry.pb.go | 4 ++-- generated-protos/scan-msgs.pb.go | 4 ++-- generated-protos/scan.pb.go | 4 ++-- .../screen-configuration-msgs.pb.go | 4 ++-- generated-protos/screen-configuration.pb.go | 4 ++-- generated-protos/search-params.pb.go | 4 ++-- generated-protos/selection-entry-msgs.pb.go | 4 ++-- generated-protos/selection-pixel-msgs.pb.go | 4 ++-- generated-protos/spectrum-msgs.pb.go | 4 ++-- generated-protos/spectrum.pb.go | 4 ++-- generated-protos/tag-msgs.pb.go | 4 ++-- generated-protos/tags.pb.go | 4 ++-- generated-protos/test-msgs.pb.go | 4 ++-- generated-protos/user-db-items.pb.go | 4 ++-- generated-protos/user-group-admins-msgs.pb.go | 4 ++-- .../user-group-joining-msgs.pb.go | 4 ++-- .../user-group-management-msgs.pb.go | 4 ++-- .../user-group-membership-msgs.pb.go | 4 ++-- .../user-group-retrieval-msgs.pb.go | 4 ++-- generated-protos/user-group.pb.go | 4 ++-- generated-protos/user-management-msgs.pb.go | 4 ++-- generated-protos/user-msgs.pb.go | 4 ++-- .../user-notification-setting-msgs.pb.go | 4 ++-- .../user-notification-settings.pb.go | 4 ++-- generated-protos/user.pb.go | 4 ++-- generated-protos/version.pb.go | 4 ++-- generated-protos/websocket.pb.go | 19 +++++++++++++++---- generated-protos/widget-data-msgs.pb.go | 4 ++-- generated-protos/widget-data.pb.go | 4 ++-- 87 files changed, 186 insertions(+), 175 deletions(-) diff --git a/data-formats b/data-formats index 616b73c4..c37dd2d9 160000 --- a/data-formats +++ b/data-formats @@ -1 +1 @@ -Subproject commit 616b73c482c02d0ff67d3283dd8acb7d8ce34ad1 +Subproject commit c37dd2d94a6564c613c11906cc47ff71ad09ab65 diff --git a/generated-protos/detector-config-msgs.pb.go b/generated-protos/detector-config-msgs.pb.go index 594ad16b..e1d80b24 100644 --- a/generated-protos/detector-config-msgs.pb.go +++ b/generated-protos/detector-config-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: detector-config-msgs.proto package protos diff --git a/generated-protos/detector-config.pb.go b/generated-protos/detector-config.pb.go index 7dddbd9d..5d5b19c5 100644 --- a/generated-protos/detector-config.pb.go +++ b/generated-protos/detector-config.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: detector-config.proto package protos diff --git a/generated-protos/diffraction-data.pb.go b/generated-protos/diffraction-data.pb.go index a16350e0..58ce0764 100644 --- a/generated-protos/diffraction-data.pb.go +++ b/generated-protos/diffraction-data.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: diffraction-data.proto package protos diff --git a/generated-protos/diffraction-detected-peak-msgs.pb.go b/generated-protos/diffraction-detected-peak-msgs.pb.go index 17a2234c..250ee0d2 100644 --- a/generated-protos/diffraction-detected-peak-msgs.pb.go +++ b/generated-protos/diffraction-detected-peak-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: diffraction-detected-peak-msgs.proto package protos diff --git a/generated-protos/diffraction-manual-msgs.pb.go b/generated-protos/diffraction-manual-msgs.pb.go index 6683e807..f20cb474 100644 --- a/generated-protos/diffraction-manual-msgs.pb.go +++ b/generated-protos/diffraction-manual-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: diffraction-manual-msgs.proto package protos diff --git a/generated-protos/diffraction-status-msgs.pb.go b/generated-protos/diffraction-status-msgs.pb.go index 710eee91..966801f2 100644 --- a/generated-protos/diffraction-status-msgs.pb.go +++ b/generated-protos/diffraction-status-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: diffraction-status-msgs.proto package protos diff --git a/generated-protos/diffraction.pb.go b/generated-protos/diffraction.pb.go index 77ca2271..281a37a9 100644 --- a/generated-protos/diffraction.pb.go +++ b/generated-protos/diffraction.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: data-formats/file-formats/diffraction.proto package protos diff --git a/generated-protos/doi-msgs.pb.go b/generated-protos/doi-msgs.pb.go index 8542205e..13f76db2 100644 --- a/generated-protos/doi-msgs.pb.go +++ b/generated-protos/doi-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: doi-msgs.proto package protos diff --git a/generated-protos/doi.pb.go b/generated-protos/doi.pb.go index 893a7e80..7d5bd02f 100644 --- a/generated-protos/doi.pb.go +++ b/generated-protos/doi.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: doi.proto package protos diff --git a/generated-protos/element-set-msgs.pb.go b/generated-protos/element-set-msgs.pb.go index 9e3b01d3..2d58e2db 100644 --- a/generated-protos/element-set-msgs.pb.go +++ b/generated-protos/element-set-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: element-set-msgs.proto package protos diff --git a/generated-protos/element-set.pb.go b/generated-protos/element-set.pb.go index b96c3637..37d9bd0e 100644 --- a/generated-protos/element-set.pb.go +++ b/generated-protos/element-set.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: element-set.proto package protos diff --git a/generated-protos/experiment.pb.go b/generated-protos/experiment.pb.go index 1bde8d45..6092e776 100644 --- a/generated-protos/experiment.pb.go +++ b/generated-protos/experiment.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: data-formats/file-formats/experiment.proto package protos diff --git a/generated-protos/export-msgs.pb.go b/generated-protos/export-msgs.pb.go index f3161de7..dc06af3e 100644 --- a/generated-protos/export-msgs.pb.go +++ b/generated-protos/export-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: export-msgs.proto package protos diff --git a/generated-protos/export.pb.go b/generated-protos/export.pb.go index 2b6d309d..833b227e 100644 --- a/generated-protos/export.pb.go +++ b/generated-protos/export.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: export.proto package protos diff --git a/generated-protos/expression-group-msgs.pb.go b/generated-protos/expression-group-msgs.pb.go index f867bfa9..d7975d7e 100644 --- a/generated-protos/expression-group-msgs.pb.go +++ b/generated-protos/expression-group-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: expression-group-msgs.proto package protos diff --git a/generated-protos/expression-group.pb.go b/generated-protos/expression-group.pb.go index f71ded8f..90f1716b 100644 --- a/generated-protos/expression-group.pb.go +++ b/generated-protos/expression-group.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: expression-group.proto package protos diff --git a/generated-protos/expression-msgs.pb.go b/generated-protos/expression-msgs.pb.go index b681ed9e..4e6b94e9 100644 --- a/generated-protos/expression-msgs.pb.go +++ b/generated-protos/expression-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: expression-msgs.proto package protos diff --git a/generated-protos/expressions.pb.go b/generated-protos/expressions.pb.go index f1e19fbf..db902dcb 100644 --- a/generated-protos/expressions.pb.go +++ b/generated-protos/expressions.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: expressions.proto package protos diff --git a/generated-protos/image-beam-location-msgs.pb.go b/generated-protos/image-beam-location-msgs.pb.go index 325c1c4e..18c3d37d 100644 --- a/generated-protos/image-beam-location-msgs.pb.go +++ b/generated-protos/image-beam-location-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: image-beam-location-msgs.proto package protos diff --git a/generated-protos/image-beam-location.pb.go b/generated-protos/image-beam-location.pb.go index 7a7b0344..6e8ae2ab 100644 --- a/generated-protos/image-beam-location.pb.go +++ b/generated-protos/image-beam-location.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: image-beam-location.proto package protos diff --git a/generated-protos/image-coreg-msgs.pb.go b/generated-protos/image-coreg-msgs.pb.go index d736058a..a2cbb23d 100644 --- a/generated-protos/image-coreg-msgs.pb.go +++ b/generated-protos/image-coreg-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: image-coreg-msgs.proto package protos diff --git a/generated-protos/image-coreg.pb.go b/generated-protos/image-coreg.pb.go index edf35579..7f636355 100644 --- a/generated-protos/image-coreg.pb.go +++ b/generated-protos/image-coreg.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: image-coreg.proto package protos diff --git a/generated-protos/image-msgs.pb.go b/generated-protos/image-msgs.pb.go index 2c5974fb..5784f9b5 100644 --- a/generated-protos/image-msgs.pb.go +++ b/generated-protos/image-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: image-msgs.proto package protos diff --git a/generated-protos/image.pb.go b/generated-protos/image.pb.go index df12738d..a8316b61 100644 --- a/generated-protos/image.pb.go +++ b/generated-protos/image.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: image.proto package protos diff --git a/generated-protos/job-msgs.pb.go b/generated-protos/job-msgs.pb.go index 344a7e94..63a874bd 100644 --- a/generated-protos/job-msgs.pb.go +++ b/generated-protos/job-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: job-msgs.proto package protos diff --git a/generated-protos/job.pb.go b/generated-protos/job.pb.go index 7686c5ff..91edb26c 100644 --- a/generated-protos/job.pb.go +++ b/generated-protos/job.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: job.proto package protos diff --git a/generated-protos/log-msgs.pb.go b/generated-protos/log-msgs.pb.go index b741e1d5..1b490026 100644 --- a/generated-protos/log-msgs.pb.go +++ b/generated-protos/log-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: log-msgs.proto package protos diff --git a/generated-protos/log.pb.go b/generated-protos/log.pb.go index 82e2509f..ac5666d3 100644 --- a/generated-protos/log.pb.go +++ b/generated-protos/log.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: log.proto package protos diff --git a/generated-protos/memoisation-msgs.pb.go b/generated-protos/memoisation-msgs.pb.go index b34b5fcb..3b40cbad 100644 --- a/generated-protos/memoisation-msgs.pb.go +++ b/generated-protos/memoisation-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: memoisation-msgs.proto package protos diff --git a/generated-protos/memoisation.pb.go b/generated-protos/memoisation.pb.go index 07349006..b01797d2 100644 --- a/generated-protos/memoisation.pb.go +++ b/generated-protos/memoisation.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: memoisation.proto package protos diff --git a/generated-protos/module-msgs.pb.go b/generated-protos/module-msgs.pb.go index b6b752da..bc17fe28 100644 --- a/generated-protos/module-msgs.pb.go +++ b/generated-protos/module-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: module-msgs.proto package protos diff --git a/generated-protos/modules.pb.go b/generated-protos/modules.pb.go index 21b3054a..fd1124d4 100644 --- a/generated-protos/modules.pb.go +++ b/generated-protos/modules.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: modules.proto package protos diff --git a/generated-protos/notification-msgs.pb.go b/generated-protos/notification-msgs.pb.go index 200f5230..ef76689d 100644 --- a/generated-protos/notification-msgs.pb.go +++ b/generated-protos/notification-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: notification-msgs.proto package protos diff --git a/generated-protos/notification.pb.go b/generated-protos/notification.pb.go index ec0f2890..48d4c45a 100644 --- a/generated-protos/notification.pb.go +++ b/generated-protos/notification.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: notification.proto package protos diff --git a/generated-protos/ownership-access-msgs.pb.go b/generated-protos/ownership-access-msgs.pb.go index 679277e4..36d54a65 100644 --- a/generated-protos/ownership-access-msgs.pb.go +++ b/generated-protos/ownership-access-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: ownership-access-msgs.proto package protos diff --git a/generated-protos/ownership-access.pb.go b/generated-protos/ownership-access.pb.go index 9fa2e2a4..730662a0 100644 --- a/generated-protos/ownership-access.pb.go +++ b/generated-protos/ownership-access.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: ownership-access.proto package protos diff --git a/generated-protos/permissions.pb.go b/generated-protos/permissions.pb.go index 676e6fe1..6ab98ee6 100644 --- a/generated-protos/permissions.pb.go +++ b/generated-protos/permissions.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: permissions.proto package protos diff --git a/generated-protos/piquant-config.pb.go b/generated-protos/piquant-config.pb.go index 67854fde..0c3e38cf 100644 --- a/generated-protos/piquant-config.pb.go +++ b/generated-protos/piquant-config.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: piquant-config.proto package protos diff --git a/generated-protos/piquant-msgs.pb.go b/generated-protos/piquant-msgs.pb.go index 91f97ad1..474254bd 100644 --- a/generated-protos/piquant-msgs.pb.go +++ b/generated-protos/piquant-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: piquant-msgs.proto package protos diff --git a/generated-protos/pseudo-intensities-msgs.pb.go b/generated-protos/pseudo-intensities-msgs.pb.go index 4fc6fc1a..bf12ad6d 100644 --- a/generated-protos/pseudo-intensities-msgs.pb.go +++ b/generated-protos/pseudo-intensities-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: pseudo-intensities-msgs.proto package protos diff --git a/generated-protos/pseudo-intensities.pb.go b/generated-protos/pseudo-intensities.pb.go index 141c3b8f..549fa381 100644 --- a/generated-protos/pseudo-intensities.pb.go +++ b/generated-protos/pseudo-intensities.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: pseudo-intensities.proto package protos diff --git a/generated-protos/quantification-create.pb.go b/generated-protos/quantification-create.pb.go index cb6b40e7..7ae937f0 100644 --- a/generated-protos/quantification-create.pb.go +++ b/generated-protos/quantification-create.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-create.proto package protos diff --git a/generated-protos/quantification-management-msgs.pb.go b/generated-protos/quantification-management-msgs.pb.go index dde9e2bc..9f77418f 100644 --- a/generated-protos/quantification-management-msgs.pb.go +++ b/generated-protos/quantification-management-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-management-msgs.proto package protos diff --git a/generated-protos/quantification-meta.pb.go b/generated-protos/quantification-meta.pb.go index 5625f11e..50f3cab7 100644 --- a/generated-protos/quantification-meta.pb.go +++ b/generated-protos/quantification-meta.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-meta.proto package protos diff --git a/generated-protos/quantification-multi-msgs.pb.go b/generated-protos/quantification-multi-msgs.pb.go index 615831f1..b40544b4 100644 --- a/generated-protos/quantification-multi-msgs.pb.go +++ b/generated-protos/quantification-multi-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-multi-msgs.proto package protos diff --git a/generated-protos/quantification-multi.pb.go b/generated-protos/quantification-multi.pb.go index 3dfc1203..a7c08ac4 100644 --- a/generated-protos/quantification-multi.pb.go +++ b/generated-protos/quantification-multi.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-multi.proto package protos diff --git a/generated-protos/quantification-retrieval-msgs.pb.go b/generated-protos/quantification-retrieval-msgs.pb.go index e6cd4da8..2effc136 100644 --- a/generated-protos/quantification-retrieval-msgs.pb.go +++ b/generated-protos/quantification-retrieval-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-retrieval-msgs.proto package protos diff --git a/generated-protos/quantification-upload-msgs.pb.go b/generated-protos/quantification-upload-msgs.pb.go index 580d28b6..9408dce0 100644 --- a/generated-protos/quantification-upload-msgs.pb.go +++ b/generated-protos/quantification-upload-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-upload-msgs.proto package protos diff --git a/generated-protos/quantification.pb.go b/generated-protos/quantification.pb.go index 333fc858..d5737b8f 100644 --- a/generated-protos/quantification.pb.go +++ b/generated-protos/quantification.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification.proto package protos diff --git a/generated-protos/restmsgs.pb.go b/generated-protos/restmsgs.pb.go index 3c69f5dc..077d2be9 100644 --- a/generated-protos/restmsgs.pb.go +++ b/generated-protos/restmsgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: restmsgs.proto package protos diff --git a/generated-protos/roi-msgs.pb.go b/generated-protos/roi-msgs.pb.go index e4600026..ea6c68c7 100644 --- a/generated-protos/roi-msgs.pb.go +++ b/generated-protos/roi-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: roi-msgs.proto package protos diff --git a/generated-protos/roi.pb.go b/generated-protos/roi.pb.go index c8e3a69b..50e24b29 100644 --- a/generated-protos/roi.pb.go +++ b/generated-protos/roi.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: roi.proto package protos diff --git a/generated-protos/scan-beam-location-msgs.pb.go b/generated-protos/scan-beam-location-msgs.pb.go index 482c2696..e0163691 100644 --- a/generated-protos/scan-beam-location-msgs.pb.go +++ b/generated-protos/scan-beam-location-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-beam-location-msgs.proto package protos diff --git a/generated-protos/scan-beam-location.pb.go b/generated-protos/scan-beam-location.pb.go index f6531300..22773ca8 100644 --- a/generated-protos/scan-beam-location.pb.go +++ b/generated-protos/scan-beam-location.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-beam-location.proto package protos diff --git a/generated-protos/scan-entry-metadata-msgs.pb.go b/generated-protos/scan-entry-metadata-msgs.pb.go index 037c7947..5e748e1b 100644 --- a/generated-protos/scan-entry-metadata-msgs.pb.go +++ b/generated-protos/scan-entry-metadata-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-entry-metadata-msgs.proto package protos diff --git a/generated-protos/scan-entry-metadata.pb.go b/generated-protos/scan-entry-metadata.pb.go index 65cd4ebb..05565a9e 100644 --- a/generated-protos/scan-entry-metadata.pb.go +++ b/generated-protos/scan-entry-metadata.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-entry-metadata.proto package protos diff --git a/generated-protos/scan-entry-msgs.pb.go b/generated-protos/scan-entry-msgs.pb.go index 8c15ab1e..d4cda4ad 100644 --- a/generated-protos/scan-entry-msgs.pb.go +++ b/generated-protos/scan-entry-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-entry-msgs.proto package protos diff --git a/generated-protos/scan-entry.pb.go b/generated-protos/scan-entry.pb.go index 1a8f62cd..6f0c3d57 100644 --- a/generated-protos/scan-entry.pb.go +++ b/generated-protos/scan-entry.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-entry.proto package protos diff --git a/generated-protos/scan-msgs.pb.go b/generated-protos/scan-msgs.pb.go index b74bef41..ea0a46bc 100644 --- a/generated-protos/scan-msgs.pb.go +++ b/generated-protos/scan-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-msgs.proto package protos diff --git a/generated-protos/scan.pb.go b/generated-protos/scan.pb.go index 99d3c1ae..a9198a5b 100644 --- a/generated-protos/scan.pb.go +++ b/generated-protos/scan.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan.proto package protos diff --git a/generated-protos/screen-configuration-msgs.pb.go b/generated-protos/screen-configuration-msgs.pb.go index b58d8e1f..0586c064 100644 --- a/generated-protos/screen-configuration-msgs.pb.go +++ b/generated-protos/screen-configuration-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: screen-configuration-msgs.proto package protos diff --git a/generated-protos/screen-configuration.pb.go b/generated-protos/screen-configuration.pb.go index 0a7352c7..d2ebb60d 100644 --- a/generated-protos/screen-configuration.pb.go +++ b/generated-protos/screen-configuration.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: screen-configuration.proto package protos diff --git a/generated-protos/search-params.pb.go b/generated-protos/search-params.pb.go index c00313fa..309b142f 100644 --- a/generated-protos/search-params.pb.go +++ b/generated-protos/search-params.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: search-params.proto package protos diff --git a/generated-protos/selection-entry-msgs.pb.go b/generated-protos/selection-entry-msgs.pb.go index 8a0e9cc8..1c5c18f1 100644 --- a/generated-protos/selection-entry-msgs.pb.go +++ b/generated-protos/selection-entry-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: selection-entry-msgs.proto package protos diff --git a/generated-protos/selection-pixel-msgs.pb.go b/generated-protos/selection-pixel-msgs.pb.go index fda4be2d..8bad0215 100644 --- a/generated-protos/selection-pixel-msgs.pb.go +++ b/generated-protos/selection-pixel-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: selection-pixel-msgs.proto package protos diff --git a/generated-protos/spectrum-msgs.pb.go b/generated-protos/spectrum-msgs.pb.go index faf94fac..72ef5fbe 100644 --- a/generated-protos/spectrum-msgs.pb.go +++ b/generated-protos/spectrum-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: spectrum-msgs.proto package protos diff --git a/generated-protos/spectrum.pb.go b/generated-protos/spectrum.pb.go index 6913d8fb..18f5adef 100644 --- a/generated-protos/spectrum.pb.go +++ b/generated-protos/spectrum.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: spectrum.proto package protos diff --git a/generated-protos/tag-msgs.pb.go b/generated-protos/tag-msgs.pb.go index 39f47461..79946b98 100644 --- a/generated-protos/tag-msgs.pb.go +++ b/generated-protos/tag-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: tag-msgs.proto package protos diff --git a/generated-protos/tags.pb.go b/generated-protos/tags.pb.go index a233f8c2..6fcc8ebb 100644 --- a/generated-protos/tags.pb.go +++ b/generated-protos/tags.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: tags.proto package protos diff --git a/generated-protos/test-msgs.pb.go b/generated-protos/test-msgs.pb.go index 44f5de72..c6e2e75a 100644 --- a/generated-protos/test-msgs.pb.go +++ b/generated-protos/test-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: test-msgs.proto package protos diff --git a/generated-protos/user-db-items.pb.go b/generated-protos/user-db-items.pb.go index a30f4e4b..5e0fd88e 100644 --- a/generated-protos/user-db-items.pb.go +++ b/generated-protos/user-db-items.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-db-items.proto package protos diff --git a/generated-protos/user-group-admins-msgs.pb.go b/generated-protos/user-group-admins-msgs.pb.go index 98a63b86..4d0062ab 100644 --- a/generated-protos/user-group-admins-msgs.pb.go +++ b/generated-protos/user-group-admins-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-group-admins-msgs.proto package protos diff --git a/generated-protos/user-group-joining-msgs.pb.go b/generated-protos/user-group-joining-msgs.pb.go index 2af8766b..80731bba 100644 --- a/generated-protos/user-group-joining-msgs.pb.go +++ b/generated-protos/user-group-joining-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-group-joining-msgs.proto package protos diff --git a/generated-protos/user-group-management-msgs.pb.go b/generated-protos/user-group-management-msgs.pb.go index c3a480fa..fec608b2 100644 --- a/generated-protos/user-group-management-msgs.pb.go +++ b/generated-protos/user-group-management-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-group-management-msgs.proto package protos diff --git a/generated-protos/user-group-membership-msgs.pb.go b/generated-protos/user-group-membership-msgs.pb.go index 5b48e29c..0679f2f4 100644 --- a/generated-protos/user-group-membership-msgs.pb.go +++ b/generated-protos/user-group-membership-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-group-membership-msgs.proto package protos diff --git a/generated-protos/user-group-retrieval-msgs.pb.go b/generated-protos/user-group-retrieval-msgs.pb.go index e6e1d7db..37b865a9 100644 --- a/generated-protos/user-group-retrieval-msgs.pb.go +++ b/generated-protos/user-group-retrieval-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-group-retrieval-msgs.proto package protos diff --git a/generated-protos/user-group.pb.go b/generated-protos/user-group.pb.go index 44f8bf32..dbbd9876 100644 --- a/generated-protos/user-group.pb.go +++ b/generated-protos/user-group.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-group.proto package protos diff --git a/generated-protos/user-management-msgs.pb.go b/generated-protos/user-management-msgs.pb.go index 49c0d317..1d76081d 100644 --- a/generated-protos/user-management-msgs.pb.go +++ b/generated-protos/user-management-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-management-msgs.proto package protos diff --git a/generated-protos/user-msgs.pb.go b/generated-protos/user-msgs.pb.go index 4ec68913..6bb811e8 100644 --- a/generated-protos/user-msgs.pb.go +++ b/generated-protos/user-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-msgs.proto package protos diff --git a/generated-protos/user-notification-setting-msgs.pb.go b/generated-protos/user-notification-setting-msgs.pb.go index d83fe206..28249f5e 100644 --- a/generated-protos/user-notification-setting-msgs.pb.go +++ b/generated-protos/user-notification-setting-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-notification-setting-msgs.proto package protos diff --git a/generated-protos/user-notification-settings.pb.go b/generated-protos/user-notification-settings.pb.go index caf4b6ae..76a55c97 100644 --- a/generated-protos/user-notification-settings.pb.go +++ b/generated-protos/user-notification-settings.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-notification-settings.proto package protos diff --git a/generated-protos/user.pb.go b/generated-protos/user.pb.go index 82598223..fc680e5b 100644 --- a/generated-protos/user.pb.go +++ b/generated-protos/user.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user.proto package protos diff --git a/generated-protos/version.pb.go b/generated-protos/version.pb.go index 3f1a73d4..58100287 100644 --- a/generated-protos/version.pb.go +++ b/generated-protos/version.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: version.proto package protos diff --git a/generated-protos/websocket.pb.go b/generated-protos/websocket.pb.go index 06bd0e7b..f980dd57 100644 --- a/generated-protos/websocket.pb.go +++ b/generated-protos/websocket.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: websocket.proto package protos @@ -97,6 +97,8 @@ type WSMessage struct { Status ResponseStatus `protobuf:"varint,2,opt,name=status,proto3,enum=ResponseStatus" json:"status,omitempty"` // Error text - if the response status is not WS_OK, this can contain any error string we want to send back ErrorText string `protobuf:"bytes,3,opt,name=errorText,proto3" json:"errorText,omitempty"` + // Signalling this message is not yet complete, more will be sent + Incomplete bool `protobuf:"varint,4,opt,name=incomplete,proto3" json:"incomplete,omitempty"` // Types that are assignable to Contents: // // *WSMessage_DataModuleAddVersionReq @@ -421,6 +423,13 @@ func (x *WSMessage) GetErrorText() string { return "" } +func (x *WSMessage) GetIncomplete() bool { + if x != nil { + return x.Incomplete + } + return false +} + func (m *WSMessage) GetContents() isWSMessage_Contents { if m != nil { return m.Contents @@ -3967,14 +3976,16 @@ var file_websocket_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2d, 0x64, 0x61, 0x74, - 0x61, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0xa3, 0x01, + 0x61, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x93, 0xa4, 0x01, 0x0a, 0x09, 0x57, 0x53, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x55, 0x0a, 0x17, 0x64, 0x61, 0x74, 0x61, + 0x72, 0x72, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x63, 0x6f, + 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x6e, + 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x17, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xc6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, diff --git a/generated-protos/widget-data-msgs.pb.go b/generated-protos/widget-data-msgs.pb.go index cc100e37..8438a1a9 100644 --- a/generated-protos/widget-data-msgs.pb.go +++ b/generated-protos/widget-data-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: widget-data-msgs.proto package protos diff --git a/generated-protos/widget-data.pb.go b/generated-protos/widget-data.pb.go index c6733761..e57747d9 100644 --- a/generated-protos/widget-data.pb.go +++ b/generated-protos/widget-data.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: widget-data.proto package protos From bbe9db117a4d1f5809af33263b7b5a2f45b591d5 Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Wed, 15 May 2024 14:22:01 +1000 Subject: [PATCH 02/17] Using new code gen, sending arrays of responses from each handler function, not just limiting to one. This allows spectrum to be broken into multiple response messages --- api/ws/handlers/detector-config.go | 12 +++--- api/ws/handlers/diffraction-detected-peak.go | 6 +-- api/ws/handlers/diffraction-manual.go | 18 ++++---- api/ws/handlers/diffraction-status.go | 18 ++++---- api/ws/handlers/doi.go | 12 +++--- api/ws/handlers/element-set.go | 20 ++++----- api/ws/handlers/export.go | 4 +- api/ws/handlers/expression-group.go | 20 ++++----- api/ws/handlers/expression.go | 40 +++++++++--------- api/ws/handlers/image-beam-location.go | 6 +-- api/ws/handlers/image-coreg.go | 6 +-- api/ws/handlers/image.go | 38 ++++++++--------- api/ws/handlers/log.go | 16 +++---- api/ws/handlers/memoisation.go | 12 +++--- api/ws/handlers/module.go | 24 +++++------ api/ws/handlers/notification.go | 14 +++---- api/ws/handlers/ownership-access.go | 12 +++--- api/ws/handlers/piquant.go | 26 ++++++------ api/ws/handlers/pseudo-intensities.go | 6 +-- api/ws/handlers/quantification-create.go | 6 +-- api/ws/handlers/quantification-management.go | 8 ++-- api/ws/handlers/quantification-multi.go | 26 ++++++------ api/ws/handlers/quantification-retrieval.go | 16 +++---- api/ws/handlers/quantification-upload.go | 4 +- api/ws/handlers/roi.go | 44 ++++++++++---------- api/ws/handlers/scan-beam-location.go | 6 +-- api/ws/handlers/scan-entry-metadata.go | 6 +-- api/ws/handlers/scan-entry.go | 6 +-- api/ws/handlers/scan.go | 44 ++++++++++---------- api/ws/handlers/screen-configuration.go | 24 +++++------ api/ws/handlers/selection-entry.go | 10 ++--- api/ws/handlers/selection-pixel.go | 10 ++--- api/ws/handlers/spectrum.go | 38 ++++++++++++++--- api/ws/handlers/tag.go | 14 +++---- api/ws/handlers/test.go | 2 +- api/ws/handlers/user-group-admins.go | 12 +++--- api/ws/handlers/user-group-joining.go | 14 +++---- api/ws/handlers/user-group-management.go | 12 +++--- api/ws/handlers/user-group-membership.go | 24 +++++------ api/ws/handlers/user-group-retrieval.go | 18 ++++---- api/ws/handlers/user-management.go | 30 +++++++------ api/ws/handlers/user-notification-setting.go | 10 ++--- api/ws/handlers/user.go | 20 ++++----- api/ws/handlers/widget-data.go | 12 +++--- api/ws/ws.go | 26 +++++++----- api/ws/wsHelpers/db.go | 4 +- data-formats | 2 +- 47 files changed, 396 insertions(+), 362 deletions(-) diff --git a/api/ws/handlers/detector-config.go b/api/ws/handlers/detector-config.go index 370fad30..e71c7cae 100644 --- a/api/ws/handlers/detector-config.go +++ b/api/ws/handlers/detector-config.go @@ -11,7 +11,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleDetectorConfigReq(req *protos.DetectorConfigReq, hctx wsHelpers.HandlerContext) (*protos.DetectorConfigResp, error) { +func HandleDetectorConfigReq(req *protos.DetectorConfigReq, hctx wsHelpers.HandlerContext) ([]*protos.DetectorConfigResp, error) { if err := wsHelpers.CheckStringField(&req.Id, "Id", 1, 255); err != nil { return nil, err } @@ -21,13 +21,13 @@ func HandleDetectorConfigReq(req *protos.DetectorConfigReq, hctx wsHelpers.Handl return nil, err } - return &protos.DetectorConfigResp{ + return []*protos.DetectorConfigResp{&protos.DetectorConfigResp{ Config: cfg, PiquantConfigVersions: piquant.GetPiquantConfigVersions(hctx.Svcs, req.Id), - }, nil + }}, nil } -func HandleDetectorConfigListReq(req *protos.DetectorConfigListReq, hctx wsHelpers.HandlerContext) (*protos.DetectorConfigListResp, error) { +func HandleDetectorConfigListReq(req *protos.DetectorConfigListReq, hctx wsHelpers.HandlerContext) ([]*protos.DetectorConfigListResp, error) { coll := hctx.Svcs.MongoDB.Collection(dbCollections.DetectorConfigsName) filter := bson.D{} @@ -51,7 +51,7 @@ func HandleDetectorConfigListReq(req *protos.DetectorConfigListReq, hctx wsHelpe configList = append(configList, cfg.Id) } - return &protos.DetectorConfigListResp{ + return []*protos.DetectorConfigListResp{&protos.DetectorConfigListResp{ Configs: configList, - }, nil + }}, nil } diff --git a/api/ws/handlers/diffraction-detected-peak.go b/api/ws/handlers/diffraction-detected-peak.go index 545549e5..3e10b12c 100644 --- a/api/ws/handlers/diffraction-detected-peak.go +++ b/api/ws/handlers/diffraction-detected-peak.go @@ -8,7 +8,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleDetectedDiffractionPeaksReq(req *protos.DetectedDiffractionPeaksReq, hctx wsHelpers.HandlerContext) (*protos.DetectedDiffractionPeaksResp, error) { +func HandleDetectedDiffractionPeaksReq(req *protos.DetectedDiffractionPeaksReq, hctx wsHelpers.HandlerContext) ([]*protos.DetectedDiffractionPeaksResp, error) { // Because we're dealing in entry indexes (relative to the scan), we download the dataset.bin file here too // to get the totals, and to look up PMCs from diffraction DB exprPB, err := beginDatasetFileReq(req.ScanId, hctx) @@ -64,7 +64,7 @@ func HandleDetectedDiffractionPeaksReq(req *protos.DetectedDiffractionPeaksReq, } } - return &protos.DetectedDiffractionPeaksResp{ + return []*protos.DetectedDiffractionPeaksResp{&protos.DetectedDiffractionPeaksResp{ PeaksPerLocation: diffPerLoc, - }, nil + }}, nil } diff --git a/api/ws/handlers/diffraction-manual.go b/api/ws/handlers/diffraction-manual.go index 7a480438..cc485ef5 100644 --- a/api/ws/handlers/diffraction-manual.go +++ b/api/ws/handlers/diffraction-manual.go @@ -14,7 +14,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleDiffractionPeakManualListReq(req *protos.DiffractionPeakManualListReq, hctx wsHelpers.HandlerContext) (*protos.DiffractionPeakManualListResp, error) { +func HandleDiffractionPeakManualListReq(req *protos.DiffractionPeakManualListReq, hctx wsHelpers.HandlerContext) ([]*protos.DiffractionPeakManualListResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -30,9 +30,9 @@ func HandleDiffractionPeakManualListReq(req *protos.DiffractionPeakManualListReq if err != nil { if err == mongo.ErrNoDocuments { // Silent error, just return empty - return &protos.DiffractionPeakManualListResp{ + return []*protos.DiffractionPeakManualListResp{&protos.DiffractionPeakManualListResp{ Peaks: map[string]*protos.ManualDiffractionPeak{}, - }, nil + }}, nil } return nil, err @@ -51,15 +51,15 @@ func HandleDiffractionPeakManualListReq(req *protos.DiffractionPeakManualListReq item.ScanId = "" // Also no point keeping this around, it was part of the request params } - return &protos.DiffractionPeakManualListResp{ + return []*protos.DiffractionPeakManualListResp{&protos.DiffractionPeakManualListResp{ Peaks: resultMap, - }, nil + }}, nil } // NOTE: ScanId isn't checked to see if it's a real scan upon insertion! // NOTE2: Insert ONLY! We generate an ID and insert into DB -func HandleDiffractionPeakManualInsertReq(req *protos.DiffractionPeakManualInsertReq, hctx wsHelpers.HandlerContext) (*protos.DiffractionPeakManualInsertResp, error) { +func HandleDiffractionPeakManualInsertReq(req *protos.DiffractionPeakManualInsertReq, hctx wsHelpers.HandlerContext) ([]*protos.DiffractionPeakManualInsertResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -91,10 +91,10 @@ func HandleDiffractionPeakManualInsertReq(req *protos.DiffractionPeakManualInser hctx.Svcs.Log.Errorf("Manual diffraction insertion expected InsertedID of %v, got %v", id, result.InsertedID) } - return &protos.DiffractionPeakManualInsertResp{CreatedId: id}, nil + return []*protos.DiffractionPeakManualInsertResp{&protos.DiffractionPeakManualInsertResp{CreatedId: id}}, nil } -func HandleDiffractionPeakManualDeleteReq(req *protos.DiffractionPeakManualDeleteReq, hctx wsHelpers.HandlerContext) (*protos.DiffractionPeakManualDeleteResp, error) { +func HandleDiffractionPeakManualDeleteReq(req *protos.DiffractionPeakManualDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.DiffractionPeakManualDeleteResp, error) { if err := wsHelpers.CheckStringField(&req.Id, "Id", 1, wsHelpers.IdFieldMaxLength*2+1); err != nil { return nil, err } @@ -114,5 +114,5 @@ func HandleDiffractionPeakManualDeleteReq(req *protos.DiffractionPeakManualDelet return nil, errorwithstatus.MakeNotFoundError(req.Id) } - return &protos.DiffractionPeakManualDeleteResp{}, nil + return []*protos.DiffractionPeakManualDeleteResp{&protos.DiffractionPeakManualDeleteResp{}}, nil } diff --git a/api/ws/handlers/diffraction-status.go b/api/ws/handlers/diffraction-status.go index 87f46b4a..d86d9efa 100644 --- a/api/ws/handlers/diffraction-status.go +++ b/api/ws/handlers/diffraction-status.go @@ -12,7 +12,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleDiffractionPeakStatusListReq(req *protos.DiffractionPeakStatusListReq, hctx wsHelpers.HandlerContext) (*protos.DiffractionPeakStatusListResp, error) { +func HandleDiffractionPeakStatusListReq(req *protos.DiffractionPeakStatusListReq, hctx wsHelpers.HandlerContext) ([]*protos.DiffractionPeakStatusListResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -27,13 +27,13 @@ func HandleDiffractionPeakStatusListReq(req *protos.DiffractionPeakStatusListReq if dbResult.Err() != nil { if dbResult.Err() == mongo.ErrNoDocuments { // Silent error, just return empty - return &protos.DiffractionPeakStatusListResp{ + return []*protos.DiffractionPeakStatusListResp{&protos.DiffractionPeakStatusListResp{ PeakStatuses: &protos.DetectedDiffractionPeakStatuses{ Id: req.ScanId, ScanId: req.ScanId, Statuses: map[string]*protos.DetectedDiffractionPeakStatuses_PeakStatus{}, }, - }, nil + }}, nil } return nil, dbResult.Err() } @@ -44,14 +44,14 @@ func HandleDiffractionPeakStatusListReq(req *protos.DiffractionPeakStatusListReq return nil, err } - return &protos.DiffractionPeakStatusListResp{ + return []*protos.DiffractionPeakStatusListResp{&protos.DiffractionPeakStatusListResp{ PeakStatuses: &result, - }, nil + }}, nil } // NOTE: ScanId isn't checked to see if it's a real scan upon insertion! -func HandleDiffractionPeakStatusWriteReq(req *protos.DiffractionPeakStatusWriteReq, hctx wsHelpers.HandlerContext) (*protos.DiffractionPeakStatusWriteResp, error) { +func HandleDiffractionPeakStatusWriteReq(req *protos.DiffractionPeakStatusWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.DiffractionPeakStatusWriteResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -83,10 +83,10 @@ func HandleDiffractionPeakStatusWriteReq(req *protos.DiffractionPeakStatusWriteR hctx.Svcs.Log.Errorf("DiffractionPeakStatusWriteReq UpdateByID result had unexpected counts %+v", dbResult) } - return &protos.DiffractionPeakStatusWriteResp{}, nil + return []*protos.DiffractionPeakStatusWriteResp{&protos.DiffractionPeakStatusWriteResp{}}, nil } -func HandleDiffractionPeakStatusDeleteReq(req *protos.DiffractionPeakStatusDeleteReq, hctx wsHelpers.HandlerContext) (*protos.DiffractionPeakStatusDeleteResp, error) { +func HandleDiffractionPeakStatusDeleteReq(req *protos.DiffractionPeakStatusDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.DiffractionPeakStatusDeleteResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -110,5 +110,5 @@ func HandleDiffractionPeakStatusDeleteReq(req *protos.DiffractionPeakStatusDelet //hctx.Svcs.Log.Errorf("DiffractionPeakStatusDeleteReq UpdateByID result had unexpected counts %+v", dbResult) } - return &protos.DiffractionPeakStatusDeleteResp{}, nil + return []*protos.DiffractionPeakStatusDeleteResp{&protos.DiffractionPeakStatusDeleteResp{}}, nil } diff --git a/api/ws/handlers/doi.go b/api/ws/handlers/doi.go index d4fbaa13..e6ee2034 100644 --- a/api/ws/handlers/doi.go +++ b/api/ws/handlers/doi.go @@ -317,7 +317,7 @@ func PublishExpressionToZenodo(id string, output string, metadata *protos.DOIMet return publishResponse, nil } -func HandlePublishExpressionToZenodoReq(req *protos.PublishExpressionToZenodoReq, hctx wsHelpers.HandlerContext) (*protos.PublishExpressionToZenodoResp, error) { +func HandlePublishExpressionToZenodoReq(req *protos.PublishExpressionToZenodoReq, hctx wsHelpers.HandlerContext) ([]*protos.PublishExpressionToZenodoResp, error) { if hctx.Svcs.Config.EnvironmentName == "unittest" || hctx.Svcs.Config.EnvironmentName == "local" { http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true} } @@ -360,19 +360,19 @@ func HandlePublishExpressionToZenodoReq(req *protos.PublishExpressionToZenodoReq return nil, err } - return &protos.PublishExpressionToZenodoResp{ + return []*protos.PublishExpressionToZenodoResp{&protos.PublishExpressionToZenodoResp{ Doi: &metadata, - }, nil + }}, nil } -func HandleZenodoDOIGetReq(req *protos.ZenodoDOIGetReq, hctx wsHelpers.HandlerContext) (*protos.ZenodoDOIGetResp, error) { +func HandleZenodoDOIGetReq(req *protos.ZenodoDOIGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ZenodoDOIGetResp, error) { metadata := &protos.DOIMetadata{} err := hctx.Svcs.MongoDB.Collection(dbCollections.DOIName).FindOne(context.TODO(), bson.D{{Key: "_id", Value: req.Id}}).Decode(&metadata) if err != nil { return nil, err } - return &protos.ZenodoDOIGetResp{ + return []*protos.ZenodoDOIGetResp{&protos.ZenodoDOIGetResp{ Doi: metadata, - }, nil + }}, nil } diff --git a/api/ws/handlers/element-set.go b/api/ws/handlers/element-set.go index b8aa244d..a7dde07f 100644 --- a/api/ws/handlers/element-set.go +++ b/api/ws/handlers/element-set.go @@ -16,23 +16,23 @@ import ( "go.mongodb.org/mongo-driver/mongo/writeconcern" ) -func HandleElementSetDeleteReq(req *protos.ElementSetDeleteReq, hctx wsHelpers.HandlerContext) (*protos.ElementSetDeleteResp, error) { +func HandleElementSetDeleteReq(req *protos.ElementSetDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.ElementSetDeleteResp, error) { return wsHelpers.DeleteUserObject[protos.ElementSetDeleteResp](req.Id, protos.ObjectType_OT_ELEMENT_SET, dbCollections.ElementSetsName, hctx) } -func HandleElementSetGetReq(req *protos.ElementSetGetReq, hctx wsHelpers.HandlerContext) (*protos.ElementSetGetResp, error) { +func HandleElementSetGetReq(req *protos.ElementSetGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ElementSetGetResp, error) { dbItem, owner, err := wsHelpers.GetUserObjectById[protos.ElementSet](false, req.Id, protos.ObjectType_OT_ELEMENT_SET, dbCollections.ElementSetsName, hctx) if err != nil { return nil, err } dbItem.Owner = wsHelpers.MakeOwnerSummary(owner, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) - return &protos.ElementSetGetResp{ + return []*protos.ElementSetGetResp{&protos.ElementSetGetResp{ ElementSet: dbItem, - }, nil + }}, nil } -func HandleElementSetListReq(req *protos.ElementSetListReq, hctx wsHelpers.HandlerContext) (*protos.ElementSetListResp, error) { +func HandleElementSetListReq(req *protos.ElementSetListReq, hctx wsHelpers.HandlerContext) ([]*protos.ElementSetListResp, error) { idToOwner, err := wsHelpers.ListAccessibleIDs(false, protos.ObjectType_OT_ELEMENT_SET, hctx.Svcs, hctx.SessUser) if err != nil { return nil, err @@ -75,9 +75,9 @@ func HandleElementSetListReq(req *protos.ElementSetListReq, hctx wsHelpers.Handl itemMap[item.Id] = summary } - return &protos.ElementSetListResp{ + return []*protos.ElementSetListResp{&protos.ElementSetListResp{ ElementSets: itemMap, - }, nil + }}, nil } func validateElementSet(elementSet *protos.ElementSet) error { @@ -183,7 +183,7 @@ func updateElementSet(elementSet *protos.ElementSet, hctx wsHelpers.HandlerConte return dbItem, nil } -func HandleElementSetWriteReq(req *protos.ElementSetWriteReq, hctx wsHelpers.HandlerContext) (*protos.ElementSetWriteResp, error) { +func HandleElementSetWriteReq(req *protos.ElementSetWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ElementSetWriteResp, error) { // Owner should never be accepted from API if req.ElementSet.Owner != nil { return nil, errorwithstatus.MakeBadRequestError(errors.New("Owner must be empty for write messages")) @@ -201,7 +201,7 @@ func HandleElementSetWriteReq(req *protos.ElementSetWriteReq, hctx wsHelpers.Han return nil, err } - return &protos.ElementSetWriteResp{ + return []*protos.ElementSetWriteResp{&protos.ElementSetWriteResp{ ElementSet: item, - }, nil + }}, nil } diff --git a/api/ws/handlers/export.go b/api/ws/handlers/export.go index 4c336496..d342c374 100644 --- a/api/ws/handlers/export.go +++ b/api/ws/handlers/export.go @@ -12,7 +12,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleExportFilesReq(req *protos.ExportFilesReq, hctx wsHelpers.HandlerContext) (*protos.ExportFilesResp, error) { +func HandleExportFilesReq(req *protos.ExportFilesReq, hctx wsHelpers.HandlerContext) ([]*protos.ExportFilesResp, error) { if len(req.ExportTypes) <= 0 { return nil, errors.New("no export types specified") } @@ -62,5 +62,5 @@ func HandleExportFilesReq(req *protos.ExportFilesReq, hctx wsHelpers.HandlerCont } } - return &protos.ExportFilesResp{Files: files}, nil + return []*protos.ExportFilesResp{&protos.ExportFilesResp{Files: files}}, nil } diff --git a/api/ws/handlers/expression-group.go b/api/ws/handlers/expression-group.go index 69fec35d..c89faa98 100644 --- a/api/ws/handlers/expression-group.go +++ b/api/ws/handlers/expression-group.go @@ -16,11 +16,11 @@ import ( "go.mongodb.org/mongo-driver/mongo/writeconcern" ) -func HandleExpressionGroupDeleteReq(req *protos.ExpressionGroupDeleteReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionGroupDeleteResp, error) { +func HandleExpressionGroupDeleteReq(req *protos.ExpressionGroupDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionGroupDeleteResp, error) { return wsHelpers.DeleteUserObject[protos.ExpressionGroupDeleteResp](req.Id, protos.ObjectType_OT_EXPRESSION_GROUP, dbCollections.ExpressionGroupsName, hctx) } -func HandleExpressionGroupListReq(req *protos.ExpressionGroupListReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionGroupListResp, error) { +func HandleExpressionGroupListReq(req *protos.ExpressionGroupListReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionGroupListResp, error) { filter, idToOwner, err := wsHelpers.MakeFilter(req.SearchParams, false, protos.ObjectType_OT_EXPRESSION_GROUP, hctx) if err != nil { return nil, err @@ -47,21 +47,21 @@ func HandleExpressionGroupListReq(req *protos.ExpressionGroupListReq, hctx wsHel itemMap[item.Id] = item } - return &protos.ExpressionGroupListResp{ + return []*protos.ExpressionGroupListResp{&protos.ExpressionGroupListResp{ Groups: itemMap, - }, nil + }}, nil } -func HandleExpressionGroupGetReq(req *protos.ExpressionGroupGetReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionGroupGetResp, error) { +func HandleExpressionGroupGetReq(req *protos.ExpressionGroupGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionGroupGetResp, error) { dbItem, owner, err := wsHelpers.GetUserObjectById[protos.ExpressionGroup](false, req.Id, protos.ObjectType_OT_EXPRESSION_GROUP, dbCollections.ExpressionGroupsName, hctx) if err != nil { return nil, err } dbItem.Owner = wsHelpers.MakeOwnerSummary(owner, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) - return &protos.ExpressionGroupGetResp{ + return []*protos.ExpressionGroupGetResp{&protos.ExpressionGroupGetResp{ Group: dbItem, - }, nil + }}, nil } func validateExpressionGroup(egroup *protos.ExpressionGroup) error { @@ -198,7 +198,7 @@ func updateExpressionGroup(egroup *protos.ExpressionGroup, hctx wsHelpers.Handle return dbItem, nil } -func HandleExpressionGroupWriteReq(req *protos.ExpressionGroupWriteReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionGroupWriteResp, error) { +func HandleExpressionGroupWriteReq(req *protos.ExpressionGroupWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionGroupWriteResp, error) { // Owner should never be accepted from API if req.Group.Owner != nil { return nil, errorwithstatus.MakeBadRequestError(errors.New("Owner must be empty for write messages")) @@ -216,7 +216,7 @@ func HandleExpressionGroupWriteReq(req *protos.ExpressionGroupWriteReq, hctx wsH return nil, err } - return &protos.ExpressionGroupWriteResp{ + return []*protos.ExpressionGroupWriteResp{&protos.ExpressionGroupWriteResp{ Group: item, - }, nil + }}, nil } diff --git a/api/ws/handlers/expression.go b/api/ws/handlers/expression.go index cf36cdf1..6b6ae35f 100644 --- a/api/ws/handlers/expression.go +++ b/api/ws/handlers/expression.go @@ -15,23 +15,23 @@ import ( "go.mongodb.org/mongo-driver/mongo/writeconcern" ) -func HandleExpressionGetReq(req *protos.ExpressionGetReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionGetResp, error) { +func HandleExpressionGetReq(req *protos.ExpressionGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionGetResp, error) { dbItem, owner, err := wsHelpers.GetUserObjectById[protos.DataExpression](false, req.Id, protos.ObjectType_OT_EXPRESSION, dbCollections.ExpressionsName, hctx) if err != nil { return nil, err } dbItem.Owner = wsHelpers.MakeOwnerSummary(owner, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) - return &protos.ExpressionGetResp{ + return []*protos.ExpressionGetResp{&protos.ExpressionGetResp{ Expression: dbItem, - }, nil + }}, nil } -func HandleExpressionDeleteReq(req *protos.ExpressionDeleteReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionDeleteResp, error) { +func HandleExpressionDeleteReq(req *protos.ExpressionDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionDeleteResp, error) { return wsHelpers.DeleteUserObject[protos.ExpressionDeleteResp](req.Id, protos.ObjectType_OT_EXPRESSION, dbCollections.ExpressionsName, hctx) } -func HandleExpressionListReq(req *protos.ExpressionListReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionListResp, error) { +func HandleExpressionListReq(req *protos.ExpressionListReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionListResp, error) { filter, idToOwner, err := wsHelpers.MakeFilter(req.SearchParams, false, protos.ObjectType_OT_EXPRESSION, hctx) if err != nil { return nil, err @@ -68,9 +68,9 @@ func HandleExpressionListReq(req *protos.ExpressionListReq, hctx wsHelpers.Handl itemMap[item.Id] = item } - return &protos.ExpressionListResp{ + return []*protos.ExpressionListResp{&protos.ExpressionListResp{ Expressions: itemMap, - }, nil + }}, nil } func validateExpression(expr *protos.DataExpression) error { @@ -211,7 +211,7 @@ func updateExpression(expr *protos.DataExpression, hctx wsHelpers.HandlerContext return dbItem, nil } -func HandleExpressionWriteReq(req *protos.ExpressionWriteReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionWriteResp, error) { +func HandleExpressionWriteReq(req *protos.ExpressionWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionWriteResp, error) { // Owner should never be accepted from API if req.Expression.Owner != nil { return nil, errorwithstatus.MakeBadRequestError(errors.New("Owner must be empty for write messages")) @@ -229,12 +229,12 @@ func HandleExpressionWriteReq(req *protos.ExpressionWriteReq, hctx wsHelpers.Han return nil, err } - return &protos.ExpressionWriteResp{ + return []*protos.ExpressionWriteResp{&protos.ExpressionWriteResp{ Expression: item, - }, nil + }}, nil } -func HandleExpressionWriteExecStatReq(req *protos.ExpressionWriteExecStatReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionWriteExecStatResp, error) { +func HandleExpressionWriteExecStatReq(req *protos.ExpressionWriteExecStatReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionWriteExecStatResp, error) { // Validate request if err := wsHelpers.CheckStringField(&req.Id, "Id", 0, wsHelpers.IdFieldMaxLength); err != nil { return nil, err @@ -270,14 +270,14 @@ func HandleExpressionWriteExecStatReq(req *protos.ExpressionWriteExecStatReq, hc hctx.Svcs.Log.Errorf("DataExpression ExecStatWrite UpdateByID result had unexpected counts %+v id: %v", result, req.Id) } - return &protos.ExpressionWriteExecStatResp{}, nil + return []*protos.ExpressionWriteExecStatResp{&protos.ExpressionWriteExecStatResp{}}, nil } func formExpressionDisplaySettingsID(user *protos.UserInfo, expressionId string) string { return user.Id + "-" + expressionId } -func HandleExpressionDisplaySettingsGetReq(req *protos.ExpressionDisplaySettingsGetReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionDisplaySettingsGetResp, error) { +func HandleExpressionDisplaySettingsGetReq(req *protos.ExpressionDisplaySettingsGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionDisplaySettingsGetResp, error) { // Validate request if len(req.Id) <= 0 { return nil, errorwithstatus.MakeBadRequestError(errors.New("Expression ID must be specified")) @@ -294,19 +294,19 @@ func HandleExpressionDisplaySettingsGetReq(req *protos.ExpressionDisplaySettings err := hctx.Svcs.MongoDB.Collection(dbCollections.UserExpressionDisplaySettings).FindOne(context.Background(), bson.M{"_id": displaySettingsId}).Decode(&displaySettings) if err != nil { // We don't care about errors. If it doesn't exist, we just return a blank one - return &protos.ExpressionDisplaySettingsGetResp{ + return []*protos.ExpressionDisplaySettingsGetResp{&protos.ExpressionDisplaySettingsGetResp{ DisplaySettings: &protos.ExpressionDisplaySettings{Id: req.Id}, - }, nil + }}, nil } // Set the ID back before returning it displaySettings.Id = req.Id - return &protos.ExpressionDisplaySettingsGetResp{ + return []*protos.ExpressionDisplaySettingsGetResp{&protos.ExpressionDisplaySettingsGetResp{ DisplaySettings: displaySettings, - }, nil + }}, nil } -func HandleExpressionDisplaySettingsWriteReq(req *protos.ExpressionDisplaySettingsWriteReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionDisplaySettingsWriteResp, error) { +func HandleExpressionDisplaySettingsWriteReq(req *protos.ExpressionDisplaySettingsWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionDisplaySettingsWriteResp, error) { if len(req.Id) <= 0 { return nil, errorwithstatus.MakeBadRequestError(errors.New("Expression ID must be specified")) } @@ -376,7 +376,7 @@ func HandleExpressionDisplaySettingsWriteReq(req *protos.ExpressionDisplaySettin return nil, err } - return &protos.ExpressionDisplaySettingsWriteResp{ + return []*protos.ExpressionDisplaySettingsWriteResp{&protos.ExpressionDisplaySettingsWriteResp{ DisplaySettings: req.DisplaySettings, - }, nil + }}, nil } diff --git a/api/ws/handlers/image-beam-location.go b/api/ws/handlers/image-beam-location.go index 6e001aa9..680b46ab 100644 --- a/api/ws/handlers/image-beam-location.go +++ b/api/ws/handlers/image-beam-location.go @@ -14,7 +14,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleImageBeamLocationsReq(req *protos.ImageBeamLocationsReq, hctx wsHelpers.HandlerContext) (*protos.ImageBeamLocationsResp, error) { +func HandleImageBeamLocationsReq(req *protos.ImageBeamLocationsReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageBeamLocationsResp, error) { ctx := context.TODO() var locs *protos.ImageLocations @@ -83,9 +83,9 @@ func HandleImageBeamLocationsReq(req *protos.ImageBeamLocationsReq, hctx wsHelpe } // Return the coordinates from DB record - return &protos.ImageBeamLocationsResp{ + return []*protos.ImageBeamLocationsResp{&protos.ImageBeamLocationsResp{ Locations: locs, - }, nil + }}, nil } func generateIJs(imageName string, scanId string, instrument protos.ScanInstrument, hctx wsHelpers.HandlerContext) (*protos.ImageLocations, error) { diff --git a/api/ws/handlers/image-coreg.go b/api/ws/handlers/image-coreg.go index 597a9737..bba2ea45 100644 --- a/api/ws/handlers/image-coreg.go +++ b/api/ws/handlers/image-coreg.go @@ -6,7 +6,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleImportMarsViewerImageReq(req *protos.ImportMarsViewerImageReq, hctx wsHelpers.HandlerContext) (*protos.ImportMarsViewerImageResp, error) { +func HandleImportMarsViewerImageReq(req *protos.ImportMarsViewerImageReq, hctx wsHelpers.HandlerContext) ([]*protos.ImportMarsViewerImageResp, error) { jobId := "" var err error @@ -15,7 +15,7 @@ func HandleImportMarsViewerImageReq(req *protos.ImportMarsViewerImageReq, hctx w return nil, err } - return &protos.ImportMarsViewerImageResp{ + return []*protos.ImportMarsViewerImageResp{&protos.ImportMarsViewerImageResp{ JobId: jobId, - }, nil + }}, nil } diff --git a/api/ws/handlers/image.go b/api/ws/handlers/image.go index 6ed4d35b..85b3753c 100644 --- a/api/ws/handlers/image.go +++ b/api/ws/handlers/image.go @@ -19,7 +19,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleImageListReq(req *protos.ImageListReq, hctx wsHelpers.HandlerContext) (*protos.ImageListResp, error) { +func HandleImageListReq(req *protos.ImageListReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageListResp, error) { if err := wsHelpers.CheckFieldLength(req.ScanIds, "ScanIds", 1, 10); err != nil { return nil, err } @@ -54,12 +54,12 @@ func HandleImageListReq(req *protos.ImageListReq, hctx wsHelpers.HandlerContext) return nil, err } - return &protos.ImageListResp{ + return []*protos.ImageListResp{&protos.ImageListResp{ Images: items, - }, nil + }}, nil } -func HandleImageGetReq(req *protos.ImageGetReq, hctx wsHelpers.HandlerContext) (*protos.ImageGetResp, error) { +func HandleImageGetReq(req *protos.ImageGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageGetResp, error) { if err := wsHelpers.CheckStringField(&req.ImageName, "ImageName", 1, 255); err != nil { return nil, err } @@ -107,19 +107,19 @@ func HandleImageGetReq(req *protos.ImageGetReq, hctx wsHelpers.HandlerContext) ( } } - return &protos.ImageGetResp{ + return []*protos.ImageGetResp{&protos.ImageGetResp{ Image: &img, - }, nil + }}, nil } -func HandleImageGetDefaultReq(req *protos.ImageGetDefaultReq, hctx wsHelpers.HandlerContext) (*protos.ImageGetDefaultResp, error) { +func HandleImageGetDefaultReq(req *protos.ImageGetDefaultReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageGetDefaultResp, error) { /*if err := wsHelpers.CheckFieldLength(req.ScanIds, "ScanIds", 1, 10); err != nil { return nil, err }*/ if len(req.ScanIds) <= 0 { - return &protos.ImageGetDefaultResp{ + return []*protos.ImageGetDefaultResp{&protos.ImageGetDefaultResp{ DefaultImagesPerScanId: map[string]string{}, - }, nil + }}, nil } // Check that the user has access to all the scans in question @@ -152,12 +152,12 @@ func HandleImageGetDefaultReq(req *protos.ImageGetDefaultReq, hctx wsHelpers.Han result[item.ScanId] = item.DefaultImageFileName } - return &protos.ImageGetDefaultResp{ + return []*protos.ImageGetDefaultResp{&protos.ImageGetDefaultResp{ DefaultImagesPerScanId: result, - }, nil + }}, nil } -func HandleImageSetDefaultReq(req *protos.ImageSetDefaultReq, hctx wsHelpers.HandlerContext) (*protos.ImageSetDefaultResp, error) { +func HandleImageSetDefaultReq(req *protos.ImageSetDefaultReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageSetDefaultResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -198,10 +198,10 @@ func HandleImageSetDefaultReq(req *protos.ImageSetDefaultReq, hctx wsHelpers.Han // Send out notifications so caches can be cleared hctx.Svcs.Notifier.SysNotifyScanImagesChanged([]string{req.ScanId}) - return &protos.ImageSetDefaultResp{}, nil + return []*protos.ImageSetDefaultResp{&protos.ImageSetDefaultResp{}}, nil } -func HandleImageDeleteReq(req *protos.ImageDeleteReq, hctx wsHelpers.HandlerContext) (*protos.ImageDeleteResp, error) { +func HandleImageDeleteReq(req *protos.ImageDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageDeleteResp, error) { if err := wsHelpers.CheckStringField(&req.Name, "Name", 1, 255); err != nil { return nil, err } @@ -291,10 +291,10 @@ func HandleImageDeleteReq(req *protos.ImageDeleteReq, hctx wsHelpers.HandlerCont hctx.Svcs.Notifier.SysNotifyScanImagesChanged(scanIds) - return &protos.ImageDeleteResp{}, nil + return []*protos.ImageDeleteResp{&protos.ImageDeleteResp{}}, nil } -func HandleImageUploadReq(req *protos.ImageUploadReq, hctx wsHelpers.HandlerContext) (*protos.ImageUploadResp, error) { +func HandleImageUploadReq(req *protos.ImageUploadReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageUploadResp, error) { if err := wsHelpers.CheckStringField(&req.Name, "Name", 1, 255); err != nil { return nil, err } @@ -428,10 +428,10 @@ func HandleImageUploadReq(req *protos.ImageUploadReq, hctx wsHelpers.HandlerCont hctx.Svcs.Notifier.NotifyNewScanImage(req.OriginScanId, req.OriginScanId, scanImage.ImagePath) hctx.Svcs.Notifier.SysNotifyScanImagesChanged([]string{req.OriginScanId}) - return &protos.ImageUploadResp{}, nil + return []*protos.ImageUploadResp{&protos.ImageUploadResp{}}, nil } -func HandleImageSetMatchTransformReq(req *protos.ImageSetMatchTransformReq, hctx wsHelpers.HandlerContext) (*protos.ImageSetMatchTransformResp, error) { +func HandleImageSetMatchTransformReq(req *protos.ImageSetMatchTransformReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageSetMatchTransformResp, error) { if err := wsHelpers.CheckStringField(&req.ImageName, "ImageName", 1, 255); err != nil { return nil, err } @@ -503,5 +503,5 @@ func HandleImageSetMatchTransformReq(req *protos.ImageSetMatchTransformReq, hctx hctx.Svcs.Log.Errorf("ImageSetMatchTransformReq update result had unexpected match count %+v imageName: %v", updResult, req.ImageName) } - return &protos.ImageSetMatchTransformResp{}, nil + return []*protos.ImageSetMatchTransformResp{&protos.ImageSetMatchTransformResp{}}, nil } diff --git a/api/ws/handlers/log.go b/api/ws/handlers/log.go index 993b43a8..d556208c 100644 --- a/api/ws/handlers/log.go +++ b/api/ws/handlers/log.go @@ -16,7 +16,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleLogReadReq(req *protos.LogReadReq, hctx wsHelpers.HandlerContext) (*protos.LogReadResp, error) { +func HandleLogReadReq(req *protos.LogReadReq, hctx wsHelpers.HandlerContext) ([]*protos.LogReadResp, error) { if err := wsHelpers.CheckStringField(&req.LogStreamId, "LogStreamId", 1, 512); err != nil { return nil, err } @@ -35,23 +35,23 @@ func HandleLogReadReq(req *protos.LogReadReq, hctx wsHelpers.HandlerContext) (*p } } - return &protos.LogReadResp{ + return []*protos.LogReadResp{&protos.LogReadResp{ Entries: logs, - }, nil + }}, nil } -func HandleLogGetLevelReq(req *protos.LogGetLevelReq, hctx wsHelpers.HandlerContext) (*protos.LogGetLevelResp, error) { +func HandleLogGetLevelReq(req *protos.LogGetLevelReq, hctx wsHelpers.HandlerContext) ([]*protos.LogGetLevelResp, error) { name, err := logger.GetLogLevelName(hctx.Svcs.Log.GetLogLevel()) if err != nil { return nil, err } - return &protos.LogGetLevelResp{ + return []*protos.LogGetLevelResp{&protos.LogGetLevelResp{ LogLevelId: name, - }, nil + }}, nil } -func HandleLogSetLevelReq(req *protos.LogSetLevelReq, hctx wsHelpers.HandlerContext) (*protos.LogSetLevelResp, error) { +func HandleLogSetLevelReq(req *protos.LogSetLevelReq, hctx wsHelpers.HandlerContext) ([]*protos.LogSetLevelResp, error) { if err := wsHelpers.CheckStringField(&req.LogLevelId, "LogLevelId", 1, 10); err != nil { return nil, err } @@ -67,7 +67,7 @@ func HandleLogSetLevelReq(req *protos.LogSetLevelReq, hctx wsHelpers.HandlerCont // Not really an error, but we log in this level to ensure it always gets printed hctx.Svcs.Log.Errorf("User %v request changed log level to: %v", hctx.SessUser.User.Id, req.LogLevelId) - return &protos.LogSetLevelResp{LogLevelId: req.LogLevelId}, nil + return []*protos.LogSetLevelResp{&protos.LogSetLevelResp{LogLevelId: req.LogLevelId}}, nil } var cloudwatchSvc *cloudwatchlogs.CloudWatchLogs = nil diff --git a/api/ws/handlers/memoisation.go b/api/ws/handlers/memoisation.go index 4cd61f76..cc33f60d 100644 --- a/api/ws/handlers/memoisation.go +++ b/api/ws/handlers/memoisation.go @@ -13,7 +13,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleMemoiseGetReq(req *protos.MemoiseGetReq, hctx wsHelpers.HandlerContext) (*protos.MemoiseGetResp, error) { +func HandleMemoiseGetReq(req *protos.MemoiseGetReq, hctx wsHelpers.HandlerContext) ([]*protos.MemoiseGetResp, error) { // Read from DB, if not there, fail. We do limit key sizes though if err := wsHelpers.CheckStringField(&req.Key, "Key", 1, 1024); err != nil { return nil, err @@ -36,12 +36,12 @@ func HandleMemoiseGetReq(req *protos.MemoiseGetReq, hctx wsHelpers.HandlerContex return nil, err } - return &protos.MemoiseGetResp{ + return []*protos.MemoiseGetResp{&protos.MemoiseGetResp{ Item: item, - }, nil + }}, nil } -func HandleMemoiseWriteReq(req *protos.MemoiseWriteReq, hctx wsHelpers.HandlerContext) (*protos.MemoiseWriteResp, error) { +func HandleMemoiseWriteReq(req *protos.MemoiseWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.MemoiseWriteResp, error) { // Here we overwrite freely, but we do limit key sizes though if err := wsHelpers.CheckStringField(&req.Key, "Key", 1, 1024); err != nil { return nil, err @@ -70,7 +70,7 @@ func HandleMemoiseWriteReq(req *protos.MemoiseWriteReq, hctx wsHelpers.HandlerCo hctx.Svcs.Log.Errorf("MemoiseWriteReq for: %v got unexpected DB write result: %+v", req.Key, result) } - return &protos.MemoiseWriteResp{ + return []*protos.MemoiseWriteResp{&protos.MemoiseWriteResp{ MemoTimeUnixSec: timestamp, - }, nil + }}, nil } diff --git a/api/ws/handlers/module.go b/api/ws/handlers/module.go index 87346ffb..445e450f 100644 --- a/api/ws/handlers/module.go +++ b/api/ws/handlers/module.go @@ -19,7 +19,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/writeconcern" ) -func HandleDataModuleGetReq(req *protos.DataModuleGetReq, hctx wsHelpers.HandlerContext) (*protos.DataModuleGetResp, error) { +func HandleDataModuleGetReq(req *protos.DataModuleGetReq, hctx wsHelpers.HandlerContext) ([]*protos.DataModuleGetResp, error) { dbItem, owner, err := wsHelpers.GetUserObjectById[protos.DataModuleDB](false, req.Id, protos.ObjectType_OT_DATA_MODULE, dbCollections.ModulesName, hctx) if err != nil { return nil, err @@ -78,12 +78,12 @@ func HandleDataModuleGetReq(req *protos.DataModuleGetReq, hctx wsHelpers.Handler module.Versions = append(module.Versions, moduleVersion) } - return &protos.DataModuleGetResp{ + return []*protos.DataModuleGetResp{&protos.DataModuleGetResp{ Module: module, - }, nil + }}, nil } -func HandleDataModuleListReq(req *protos.DataModuleListReq, hctx wsHelpers.HandlerContext) (*protos.DataModuleListResp, error) { +func HandleDataModuleListReq(req *protos.DataModuleListReq, hctx wsHelpers.HandlerContext) ([]*protos.DataModuleListResp, error) { idToOwner, err := wsHelpers.ListAccessibleIDs(false, protos.ObjectType_OT_DATA_MODULE, hctx.Svcs, hctx.SessUser) if err != nil { return nil, err @@ -137,9 +137,9 @@ func HandleDataModuleListReq(req *protos.DataModuleListReq, hctx wsHelpers.Handl itemMap[item.Id] = itemWire } - return &protos.DataModuleListResp{ + return []*protos.DataModuleListResp{&protos.DataModuleListResp{ Modules: itemMap, - }, nil + }}, nil } func getModuleVersion(moduleID string, version *protos.SemanticVersion, db *mongo.Database) (*protos.DataModuleVersion, error) { @@ -386,7 +386,7 @@ func updateModule(id string, name string, comments string, hctx wsHelpers.Handle return result, nil } -func HandleDataModuleWriteReq(req *protos.DataModuleWriteReq, hctx wsHelpers.HandlerContext) (*protos.DataModuleWriteResp, error) { +func HandleDataModuleWriteReq(req *protos.DataModuleWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.DataModuleWriteResp, error) { var item *protos.DataModule var err error @@ -403,9 +403,9 @@ func HandleDataModuleWriteReq(req *protos.DataModuleWriteReq, hctx wsHelpers.Han return nil, err } - return &protos.DataModuleWriteResp{ + return []*protos.DataModuleWriteResp{&protos.DataModuleWriteResp{ Module: item, - }, nil + }}, nil } // Some validation functions @@ -423,7 +423,7 @@ func isValidModuleName(name string) bool { return match } -func HandleDataModuleAddVersionReq(req *protos.DataModuleAddVersionReq, hctx wsHelpers.HandlerContext) (*protos.DataModuleAddVersionResp, error) { +func HandleDataModuleAddVersionReq(req *protos.DataModuleAddVersionReq, hctx wsHelpers.HandlerContext) ([]*protos.DataModuleAddVersionResp, error) { // Check that the version update field is a valid value if !utils.ItemInSlice(req.VersionUpdate, []protos.VersionField{protos.VersionField_MV_MAJOR, protos.VersionField_MV_MINOR, protos.VersionField_MV_PATCH}) { return nil, fmt.Errorf("Invalid version update field: %v", req.VersionUpdate) @@ -533,7 +533,7 @@ func HandleDataModuleAddVersionReq(req *protos.DataModuleAddVersionReq, hctx wsH module.Versions = append(module.Versions, returnVersion) } - return &protos.DataModuleAddVersionResp{ + return []*protos.DataModuleAddVersionResp{&protos.DataModuleAddVersionResp{ Module: module, - }, nil + }}, nil } diff --git a/api/ws/handlers/notification.go b/api/ws/handlers/notification.go index 59a83408..94118348 100644 --- a/api/ws/handlers/notification.go +++ b/api/ws/handlers/notification.go @@ -12,7 +12,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleNotificationReq(req *protos.NotificationReq, hctx wsHelpers.HandlerContext) (*protos.NotificationResp, error) { +func HandleNotificationReq(req *protos.NotificationReq, hctx wsHelpers.HandlerContext) ([]*protos.NotificationResp, error) { // Triggers a "subscription" to receive updates containing notifications for the session user // Could implement a "silent" mode, specify param in request, tell API to not send notifications for a certain period @@ -36,12 +36,12 @@ func HandleNotificationReq(req *protos.NotificationReq, hctx wsHelpers.HandlerCo } // Return the outstanding notifications - return &protos.NotificationResp{ + return []*protos.NotificationResp{&protos.NotificationResp{ Notification: notifications, - }, nil + }}, nil } -func HandleNotificationDismissReq(req *protos.NotificationDismissReq, hctx wsHelpers.HandlerContext) (*protos.NotificationDismissResp, error) { +func HandleNotificationDismissReq(req *protos.NotificationDismissReq, hctx wsHelpers.HandlerContext) ([]*protos.NotificationDismissResp, error) { // Find this in the DB and clear it if err := wsHelpers.CheckStringField(&req.Id, "Id", 1, wsHelpers.IdFieldMaxLength*2); err != nil { return nil, err @@ -56,10 +56,10 @@ func HandleNotificationDismissReq(req *protos.NotificationDismissReq, hctx wsHel return nil, err } - return &protos.NotificationDismissResp{}, nil + return []*protos.NotificationDismissResp{&protos.NotificationDismissResp{}}, nil } -func HandleSendUserNotificationReq(req *protos.SendUserNotificationReq, hctx wsHelpers.HandlerContext) (*protos.SendUserNotificationResp, error) { +func HandleSendUserNotificationReq(req *protos.SendUserNotificationReq, hctx wsHelpers.HandlerContext) ([]*protos.SendUserNotificationResp, error) { // Send from a user, need to define destination, could be group/user ids? // Probably messaging, subject+content, can send as email if not connected? // Think of load balance issue with multiple APIs running @@ -109,5 +109,5 @@ func HandleSendUserNotificationReq(req *protos.SendUserNotificationReq, hctx wsH ) } - return &protos.SendUserNotificationResp{}, nil + return []*protos.SendUserNotificationResp{&protos.SendUserNotificationResp{}}, nil } diff --git a/api/ws/handlers/ownership-access.go b/api/ws/handlers/ownership-access.go index 95db9f13..c2f3be23 100644 --- a/api/ws/handlers/ownership-access.go +++ b/api/ws/handlers/ownership-access.go @@ -10,7 +10,7 @@ import ( "go.mongodb.org/mongo-driver/bson" ) -func HandleGetOwnershipReq(req *protos.GetOwnershipReq, hctx wsHelpers.HandlerContext) (*protos.GetOwnershipResp, error) { +func HandleGetOwnershipReq(req *protos.GetOwnershipReq, hctx wsHelpers.HandlerContext) ([]*protos.GetOwnershipResp, error) { if err := wsHelpers.CheckStringField(&req.ObjectId, "ObjectId", 1, wsHelpers.IdFieldMaxLength*2 /* Tests have longer ids anyway... */); err != nil { return nil, err } @@ -20,9 +20,9 @@ func HandleGetOwnershipReq(req *protos.GetOwnershipReq, hctx wsHelpers.HandlerCo return nil, err } - return &protos.GetOwnershipResp{ + return []*protos.GetOwnershipResp{&protos.GetOwnershipResp{ Ownership: owner, - }, nil + }}, nil } func readToMap(ids []string, theMap *map[string]bool) { @@ -45,7 +45,7 @@ func deleteFromMap(ids []string, theMap *map[string]bool) { } } -func HandleObjectEditAccessReq(req *protos.ObjectEditAccessReq, hctx wsHelpers.HandlerContext) (*protos.ObjectEditAccessResp, error) { +func HandleObjectEditAccessReq(req *protos.ObjectEditAccessReq, hctx wsHelpers.HandlerContext) ([]*protos.ObjectEditAccessResp, error) { if err := wsHelpers.CheckStringField(&req.ObjectId, "ObjectId", 1, wsHelpers.IdFieldMaxLength*2 /* Tests have longer ids anyway... */); err != nil { return nil, err } @@ -138,7 +138,7 @@ func HandleObjectEditAccessReq(req *protos.ObjectEditAccessReq, hctx wsHelpers.H owner.Viewers.UserIds = viewerUserIds owner.Viewers.GroupIds = viewerGroupsIds - return &protos.ObjectEditAccessResp{ + return []*protos.ObjectEditAccessResp{&protos.ObjectEditAccessResp{ Ownership: owner, - }, nil + }}, nil } diff --git a/api/ws/handlers/piquant.go b/api/ws/handlers/piquant.go index 9432a771..83c75f1e 100644 --- a/api/ws/handlers/piquant.go +++ b/api/ws/handlers/piquant.go @@ -16,7 +16,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandlePiquantConfigListReq(req *protos.PiquantConfigListReq, hctx wsHelpers.HandlerContext) (*protos.PiquantConfigListResp, error) { +func HandlePiquantConfigListReq(req *protos.PiquantConfigListReq, hctx wsHelpers.HandlerContext) ([]*protos.PiquantConfigListResp, error) { // Return a list of all piquant configs we have stored // TODO: Handle paging... this could eventually be > 1000 files, but that's a while away! paths, err := hctx.Svcs.FS.ListObjects(hctx.Svcs.Config.ConfigBucket, filepaths.RootDetectorConfig+"/") @@ -38,10 +38,10 @@ func HandlePiquantConfigListReq(req *protos.PiquantConfigListReq, hctx wsHelpers names := utils.GetMapKeys(configNamesFiltered) sort.Strings(names) - return &protos.PiquantConfigListResp{ConfigNames: names}, err + return []*protos.PiquantConfigListResp{&protos.PiquantConfigListResp{ConfigNames: names}}, err } -func HandlePiquantConfigVersionsListReq(req *protos.PiquantConfigVersionsListReq, hctx wsHelpers.HandlerContext) (*protos.PiquantConfigVersionsListResp, error) { +func HandlePiquantConfigVersionsListReq(req *protos.PiquantConfigVersionsListReq, hctx wsHelpers.HandlerContext) ([]*protos.PiquantConfigVersionsListResp, error) { if err := wsHelpers.CheckStringField(&req.ConfigId, "ConfigId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -49,12 +49,12 @@ func HandlePiquantConfigVersionsListReq(req *protos.PiquantConfigVersionsListReq // Get a list of PIQUANT config versions too versions := piquant.GetPiquantConfigVersions(hctx.Svcs, req.ConfigId) - return &protos.PiquantConfigVersionsListResp{ + return []*protos.PiquantConfigVersionsListResp{&protos.PiquantConfigVersionsListResp{ Versions: versions, - }, nil + }}, nil } -func HandlePiquantConfigVersionReq(req *protos.PiquantConfigVersionReq, hctx wsHelpers.HandlerContext) (*protos.PiquantConfigVersionResp, error) { +func HandlePiquantConfigVersionReq(req *protos.PiquantConfigVersionReq, hctx wsHelpers.HandlerContext) ([]*protos.PiquantConfigVersionResp, error) { if err := wsHelpers.CheckStringField(&req.Version, "Version", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -67,25 +67,25 @@ func HandlePiquantConfigVersionReq(req *protos.PiquantConfigVersionReq, hctx wsH return nil, err } - return &protos.PiquantConfigVersionResp{ + return []*protos.PiquantConfigVersionResp{&protos.PiquantConfigVersionResp{ PiquantConfig: cfg, - }, nil + }}, nil } // TODO: need to query versions from github container registry or something similar??? -func HandlePiquantVersionListReq(req *protos.PiquantVersionListReq, hctx wsHelpers.HandlerContext) (*protos.PiquantVersionListResp, error) { +func HandlePiquantVersionListReq(req *protos.PiquantVersionListReq, hctx wsHelpers.HandlerContext) ([]*protos.PiquantVersionListResp, error) { return nil, errors.New("HandlePiquantVersionListReq not implemented yet") } -func HandlePiquantCurrentVersionReq(req *protos.PiquantCurrentVersionReq, hctx wsHelpers.HandlerContext) (*protos.PiquantCurrentVersionResp, error) { +func HandlePiquantCurrentVersionReq(req *protos.PiquantCurrentVersionReq, hctx wsHelpers.HandlerContext) ([]*protos.PiquantCurrentVersionResp, error) { ver, err := piquant.GetPiquantVersion(hctx.Svcs) if err != nil { return nil, err } - return &protos.PiquantCurrentVersionResp{PiquantVersion: ver}, nil + return []*protos.PiquantCurrentVersionResp{&protos.PiquantCurrentVersionResp{PiquantVersion: ver}}, nil } -func HandlePiquantWriteCurrentVersionReq(req *protos.PiquantWriteCurrentVersionReq, hctx wsHelpers.HandlerContext) (*protos.PiquantWriteCurrentVersionResp, error) { +func HandlePiquantWriteCurrentVersionReq(req *protos.PiquantWriteCurrentVersionReq, hctx wsHelpers.HandlerContext) ([]*protos.PiquantWriteCurrentVersionResp, error) { if err := wsHelpers.CheckStringField(&req.PiquantVersion, "PiquantVersion", 1, 100); err != nil { return nil, err } @@ -107,5 +107,5 @@ func HandlePiquantWriteCurrentVersionReq(req *protos.PiquantWriteCurrentVersionR hctx.Svcs.Log.Errorf("PiquantWriteCurrentVersionReq UpdateByID result had unexpected counts %+v", result) } - return &protos.PiquantWriteCurrentVersionResp{}, nil + return []*protos.PiquantWriteCurrentVersionResp{&protos.PiquantWriteCurrentVersionResp{}}, nil } diff --git a/api/ws/handlers/pseudo-intensities.go b/api/ws/handlers/pseudo-intensities.go index ac789fb6..6a96eb81 100644 --- a/api/ws/handlers/pseudo-intensities.go +++ b/api/ws/handlers/pseudo-intensities.go @@ -8,7 +8,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandlePseudoIntensityReq(req *protos.PseudoIntensityReq, hctx wsHelpers.HandlerContext) (*protos.PseudoIntensityResp, error) { +func HandlePseudoIntensityReq(req *protos.PseudoIntensityReq, hctx wsHelpers.HandlerContext) ([]*protos.PseudoIntensityResp, error) { exprPB, indexes, err := beginDatasetFileReqForRange(req.ScanId, req.Entries, hctx) if err != nil { return nil, err @@ -48,8 +48,8 @@ func HandlePseudoIntensityReq(req *protos.PseudoIntensityReq, hctx wsHelpers.Han hctx.Svcs.Log.Errorf("Reading pseudointensities for scan %v: found more than 1 set of pseudos in %v PMCs", req.ScanId, tooManyPseudosLocations) } - return &protos.PseudoIntensityResp{ + return []*protos.PseudoIntensityResp{&protos.PseudoIntensityResp{ IntensityLabels: labels, Data: pseudoIntensities, - }, nil + }}, nil } diff --git a/api/ws/handlers/quantification-create.go b/api/ws/handlers/quantification-create.go index 45d86fff..4d23c49a 100644 --- a/api/ws/handlers/quantification-create.go +++ b/api/ws/handlers/quantification-create.go @@ -13,7 +13,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleQuantCreateReq(req *protos.QuantCreateReq, hctx wsHelpers.HandlerContext) (*protos.QuantCreateResp, error) { +func HandleQuantCreateReq(req *protos.QuantCreateReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantCreateResp, error) { err := quantification.IsValidCreateParam(req.Params, hctx) if err != nil { return nil, errorwithstatus.MakeBadRequestError(err) @@ -46,7 +46,7 @@ func HandleQuantCreateReq(req *protos.QuantCreateReq, hctx wsHelpers.HandlerCont // If it's NOT a map command, we wait around for the result and pass it back in the response // but for map commands, we just pass back the generated job status if req.Params.Command == "map" { - return &protos.QuantCreateResp{Status: status}, nil + return []*protos.QuantCreateResp{&protos.QuantCreateResp{Status: status}}, nil } // Wait around for the output file to appear, or for the job to end up in an error state @@ -59,5 +59,5 @@ func HandleQuantCreateReq(req *protos.QuantCreateReq, hctx wsHelpers.HandlerCont return nil, errors.New("PIQUANT command: " + req.Params.Command + " failed.") } - return &protos.QuantCreateResp{ResultData: bytes}, nil + return []*protos.QuantCreateResp{&protos.QuantCreateResp{ResultData: bytes}}, nil } diff --git a/api/ws/handlers/quantification-management.go b/api/ws/handlers/quantification-management.go index 4546c741..8cf038e1 100644 --- a/api/ws/handlers/quantification-management.go +++ b/api/ws/handlers/quantification-management.go @@ -12,11 +12,11 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleQuantBlessReq(req *protos.QuantBlessReq, hctx wsHelpers.HandlerContext) (*protos.QuantBlessResp, error) { +func HandleQuantBlessReq(req *protos.QuantBlessReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantBlessResp, error) { return nil, errors.New("HandleQuantBlessReq not implemented yet") } -func HandleQuantDeleteReq(req *protos.QuantDeleteReq, hctx wsHelpers.HandlerContext) (*protos.QuantDeleteResp, error) { +func HandleQuantDeleteReq(req *protos.QuantDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantDeleteResp, error) { // Can't use the helper: DeleteUserObject because we also have to delete stuff from S3 and we need the scanId associated to find // the path. So here we do a get first, with edit priviledges required dbItem, _, err := wsHelpers.GetUserObjectById[protos.QuantificationSummary](true, req.QuantId, protos.ObjectType_OT_QUANTIFICATION, dbCollections.QuantificationsName, hctx) @@ -57,9 +57,9 @@ func HandleQuantDeleteReq(req *protos.QuantDeleteReq, hctx wsHelpers.HandlerCont // Notify of the change hctx.Svcs.Notifier.SysNotifyQuantChanged(req.QuantId) - return &protos.QuantDeleteResp{}, nil + return []*protos.QuantDeleteResp{&protos.QuantDeleteResp{}}, nil } -func HandleQuantPublishReq(req *protos.QuantPublishReq, hctx wsHelpers.HandlerContext) (*protos.QuantPublishResp, error) { +func HandleQuantPublishReq(req *protos.QuantPublishReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantPublishResp, error) { return nil, errors.New("HandleQuantPublishReq not implemented yet") } diff --git a/api/ws/handlers/quantification-multi.go b/api/ws/handlers/quantification-multi.go index aea54ce3..c2b29bfd 100644 --- a/api/ws/handlers/quantification-multi.go +++ b/api/ws/handlers/quantification-multi.go @@ -14,7 +14,7 @@ import ( ) // Anyone can retrieve a quant z-stack if they have quant messaging permissions -func HandleQuantCombineListGetReq(req *protos.QuantCombineListGetReq, hctx wsHelpers.HandlerContext) (*protos.QuantCombineListGetResp, error) { +func HandleQuantCombineListGetReq(req *protos.QuantCombineListGetReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantCombineListGetResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -39,13 +39,13 @@ func HandleQuantCombineListGetReq(req *protos.QuantCombineListGetReq, hctx wsHel return nil, err } - return &protos.QuantCombineListGetResp{ + return []*protos.QuantCombineListGetResp{&protos.QuantCombineListGetResp{ List: resultItem.List, - }, nil + }}, nil } // Anyone can save a quant z-stack if they have quant messaging permissions -func HandleQuantCombineListWriteReq(req *protos.QuantCombineListWriteReq, hctx wsHelpers.HandlerContext) (*protos.QuantCombineListWriteResp, error) { +func HandleQuantCombineListWriteReq(req *protos.QuantCombineListWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantCombineListWriteResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -74,10 +74,10 @@ func HandleQuantCombineListWriteReq(req *protos.QuantCombineListWriteReq, hctx w hctx.Svcs.Log.Errorf("MultiQuant Z-Stack insert %v inserted different id %v", zId, result.InsertedID) } - return &protos.QuantCombineListWriteResp{}, nil + return []*protos.QuantCombineListWriteResp{&protos.QuantCombineListWriteResp{}}, nil } -func HandleMultiQuantCompareReq(req *protos.MultiQuantCompareReq, hctx wsHelpers.HandlerContext) (*protos.MultiQuantCompareResp, error) { +func HandleMultiQuantCompareReq(req *protos.MultiQuantCompareReq, hctx wsHelpers.HandlerContext) ([]*protos.MultiQuantCompareResp, error) { // req.ScanId is checked in beginDatasetFileReq if len(req.QuantIds) <= 0 { @@ -101,13 +101,13 @@ func HandleMultiQuantCompareReq(req *protos.MultiQuantCompareReq, hctx wsHelpers return nil, err } - return &protos.MultiQuantCompareResp{ + return []*protos.MultiQuantCompareResp{&protos.MultiQuantCompareResp{ RoiId: req.ReqRoiId, QuantTables: tables, - }, nil + }}, nil } -func HandleQuantCombineReq(req *protos.QuantCombineReq, hctx wsHelpers.HandlerContext) (*protos.QuantCombineResp, error) { +func HandleQuantCombineReq(req *protos.QuantCombineReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantCombineResp, error) { // Simple validation // NOTE: if only asking for a summary, we don't care about name being empty @@ -132,11 +132,11 @@ func HandleQuantCombineReq(req *protos.QuantCombineReq, hctx wsHelpers.HandlerCo if req.SummaryOnly { // We return a summary instead of forming a CSV summary := quantification.FormMultiQuantSummary(multiQuantData.DataPerDetectorPerPMC, multiQuantData.AllColumns, multiQuantData.PMCCount) - return &protos.QuantCombineResp{ + return []*protos.QuantCombineResp{&protos.QuantCombineResp{ CombineResult: &protos.QuantCombineResp_Summary{ Summary: summary, }, - }, nil + }}, nil } // Form a CSV @@ -152,9 +152,9 @@ func HandleQuantCombineReq(req *protos.QuantCombineReq, hctx wsHelpers.HandlerCo return nil, err } - return &protos.QuantCombineResp{ + return []*protos.QuantCombineResp{&protos.QuantCombineResp{ CombineResult: &protos.QuantCombineResp_JobId{ JobId: quantId, }, - }, nil + }}, nil } diff --git a/api/ws/handlers/quantification-retrieval.go b/api/ws/handlers/quantification-retrieval.go index 5af6fb39..27805f4a 100644 --- a/api/ws/handlers/quantification-retrieval.go +++ b/api/ws/handlers/quantification-retrieval.go @@ -11,7 +11,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleQuantListReq(req *protos.QuantListReq, hctx wsHelpers.HandlerContext) (*protos.QuantListResp, error) { +func HandleQuantListReq(req *protos.QuantListReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantListResp, error) { items, idToOwner, err := quantification.ListUserQuants(req.SearchParams, hctx) if err != nil { return nil, err @@ -25,12 +25,12 @@ func HandleQuantListReq(req *protos.QuantListReq, hctx wsHelpers.HandlerContext) quants = append(quants, item) } - return &protos.QuantListResp{ + return []*protos.QuantListResp{&protos.QuantListResp{ Quants: quants, - }, nil + }}, nil } -func HandleQuantGetReq(req *protos.QuantGetReq, hctx wsHelpers.HandlerContext) (*protos.QuantGetResp, error) { +func HandleQuantGetReq(req *protos.QuantGetReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantGetResp, error) { dbItem, ownerItem, err := wsHelpers.GetUserObjectById[protos.QuantificationSummary](false, req.QuantId, protos.ObjectType_OT_QUANTIFICATION, dbCollections.QuantificationsName, hctx) if err != nil { return nil, err @@ -51,13 +51,13 @@ func HandleQuantGetReq(req *protos.QuantGetReq, hctx wsHelpers.HandlerContext) ( dbItem.Owner = wsHelpers.MakeOwnerSummary(ownerItem, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) - return &protos.QuantGetResp{ + return []*protos.QuantGetResp{&protos.QuantGetResp{ Summary: dbItem, Data: quant, - }, nil + }}, nil } -func HandleQuantLastOutputGetReq(req *protos.QuantLastOutputGetReq, hctx wsHelpers.HandlerContext) (*protos.QuantLastOutputGetResp, error) { +func HandleQuantLastOutputGetReq(req *protos.QuantLastOutputGetReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantLastOutputGetResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -92,6 +92,6 @@ func HandleQuantLastOutputGetReq(req *protos.QuantLastOutputGetReq, hctx wsHelpe } } - return &protos.QuantLastOutputGetResp{Output: string(result)}, nil + return []*protos.QuantLastOutputGetResp{&protos.QuantLastOutputGetResp{Output: string(result)}}, nil } diff --git a/api/ws/handlers/quantification-upload.go b/api/ws/handlers/quantification-upload.go index 0af194c8..7c71cfe8 100644 --- a/api/ws/handlers/quantification-upload.go +++ b/api/ws/handlers/quantification-upload.go @@ -22,7 +22,7 @@ import ( // ... // -func HandleQuantUploadReq(req *protos.QuantUploadReq, hctx wsHelpers.HandlerContext) (*protos.QuantUploadResp, error) { +func HandleQuantUploadReq(req *protos.QuantUploadReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantUploadResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -53,7 +53,7 @@ func HandleQuantUploadReq(req *protos.QuantUploadReq, hctx wsHelpers.HandlerCont if err != nil { return nil, err } - return &protos.QuantUploadResp{CreatedQuantId: quantId}, nil + return []*protos.QuantUploadResp{&protos.QuantUploadResp{CreatedQuantId: quantId}}, nil } func parseQuantCSVColumns(csvRows []string) (map[string]int, error) { diff --git a/api/ws/handlers/roi.go b/api/ws/handlers/roi.go index eb31adab..5c446c3f 100644 --- a/api/ws/handlers/roi.go +++ b/api/ws/handlers/roi.go @@ -22,7 +22,7 @@ type IdOnly struct { Id string `bson:"_id"` } -func HandleRegionOfInterestGetReq(req *protos.RegionOfInterestGetReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestGetResp, error) { +func HandleRegionOfInterestGetReq(req *protos.RegionOfInterestGetReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestGetResp, error) { dbItem, owner, err := wsHelpers.GetUserObjectById[protos.ROIItem](false, req.Id, protos.ObjectType_OT_ROI, dbCollections.RegionsOfInterestName, hctx) if err != nil { return nil, err @@ -41,12 +41,12 @@ func HandleRegionOfInterestGetReq(req *protos.RegionOfInterestGetReq, hctx wsHel dbItem.MistROIItem = mistItem } - return &protos.RegionOfInterestGetResp{ + return []*protos.RegionOfInterestGetResp{&protos.RegionOfInterestGetResp{ RegionOfInterest: dbItem, - }, nil + }}, nil } -func HandleRegionOfInterestDeleteReq(req *protos.RegionOfInterestDeleteReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestDeleteResp, error) { +func HandleRegionOfInterestDeleteReq(req *protos.RegionOfInterestDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestDeleteResp, error) { if req.IsMIST { // Delete from MIST table _, err := hctx.Svcs.MongoDB.Collection(dbCollections.MistROIsName).DeleteOne(context.TODO(), bson.D{{Key: "_id", Value: req.Id}}) @@ -58,7 +58,7 @@ func HandleRegionOfInterestDeleteReq(req *protos.RegionOfInterestDeleteReq, hctx return wsHelpers.DeleteUserObject[protos.RegionOfInterestDeleteResp](req.Id, protos.ObjectType_OT_ROI, dbCollections.RegionsOfInterestName, hctx) } -func HandleRegionOfInterestListReq(req *protos.RegionOfInterestListReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestListResp, error) { +func HandleRegionOfInterestListReq(req *protos.RegionOfInterestListReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestListResp, error) { filter, idToOwner, err := wsHelpers.MakeFilter(req.SearchParams, false, protos.ObjectType_OT_ROI, hctx) if err != nil { return nil, err @@ -127,9 +127,9 @@ func HandleRegionOfInterestListReq(req *protos.RegionOfInterestListReq, hctx wsH rois[item.Id] = item } - return &protos.RegionOfInterestListResp{ + return []*protos.RegionOfInterestListResp{&protos.RegionOfInterestListResp{ RegionsOfInterest: rois, - }, nil + }}, nil } func validateROI(roi *protos.ROIItem) error { @@ -361,7 +361,7 @@ func updateROI(roi *protos.ROIItem, hctx wsHelpers.HandlerContext, editors *prot return dbItem, nil } -func HandleRegionOfInterestWriteReq(req *protos.RegionOfInterestWriteReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestWriteResp, error) { +func HandleRegionOfInterestWriteReq(req *protos.RegionOfInterestWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestWriteResp, error) { // Owner should never be accepted from API if req.RegionOfInterest.Owner != nil { return nil, errorwithstatus.MakeBadRequestError(errors.New("Owner must be empty for write messages")) @@ -386,12 +386,12 @@ func HandleRegionOfInterestWriteReq(req *protos.RegionOfInterestWriteReq, hctx w return nil, err } - return &protos.RegionOfInterestWriteResp{ + return []*protos.RegionOfInterestWriteResp{&protos.RegionOfInterestWriteResp{ RegionOfInterest: item, - }, nil + }}, nil } -func HandleRegionOfInterestBulkWriteReq(req *protos.RegionOfInterestBulkWriteReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestBulkWriteResp, error) { +func HandleRegionOfInterestBulkWriteReq(req *protos.RegionOfInterestBulkWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestBulkWriteResp, error) { if req.IsMIST && req.MistROIScanIdsToDelete != nil && len(req.MistROIScanIdsToDelete) > 0 { ctx := context.TODO() coll := hctx.Svcs.MongoDB.Collection(dbCollections.MistROIsName) @@ -541,12 +541,12 @@ func HandleRegionOfInterestBulkWriteReq(req *protos.RegionOfInterestBulkWriteReq writtenROIs = append(writtenROIs, item) } - return &protos.RegionOfInterestBulkWriteResp{ + return []*protos.RegionOfInterestBulkWriteResp{&protos.RegionOfInterestBulkWriteResp{ RegionsOfInterest: writtenROIs, - }, nil + }}, nil } -func HandleRegionOfInterestBulkDuplicateReq(req *protos.RegionOfInterestBulkDuplicateReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestBulkDuplicateResp, error) { +func HandleRegionOfInterestBulkDuplicateReq(req *protos.RegionOfInterestBulkDuplicateReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestBulkDuplicateResp, error) { // Get the ROIs to duplicate filter := bson.M{"_id": bson.M{"$in": req.Ids}} opts := options.Find() @@ -587,16 +587,16 @@ func HandleRegionOfInterestBulkDuplicateReq(req *protos.RegionOfInterestBulkDupl } } - return &protos.RegionOfInterestBulkDuplicateResp{ + return []*protos.RegionOfInterestBulkDuplicateResp{&protos.RegionOfInterestBulkDuplicateResp{ RegionsOfInterest: roiSummaries, - }, nil + }}, nil } func formROIUserConfigID(user *protos.UserInfo, roiId string) string { return user.Id + "-" + roiId } -func HandleRegionOfInterestDisplaySettingsWriteReq(req *protos.RegionOfInterestDisplaySettingsWriteReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestDisplaySettingsWriteResp, error) { +func HandleRegionOfInterestDisplaySettingsWriteReq(req *protos.RegionOfInterestDisplaySettingsWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestDisplaySettingsWriteResp, error) { // Check that we have an id, current user, and display settings if len(req.Id) <= 0 { return nil, errorwithstatus.MakeBadRequestError(errors.New("ROI ID must be specified")) @@ -669,12 +669,12 @@ func HandleRegionOfInterestDisplaySettingsWriteReq(req *protos.RegionOfInterestD return nil, err } - return &protos.RegionOfInterestDisplaySettingsWriteResp{ + return []*protos.RegionOfInterestDisplaySettingsWriteResp{&protos.RegionOfInterestDisplaySettingsWriteResp{ DisplaySettings: req.DisplaySettings, - }, nil + }}, nil } -func HandleRegionOfInterestDisplaySettingsGetReq(req *protos.RegionOfInterestDisplaySettingsGetReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestDisplaySettingsGetResp, error) { +func HandleRegionOfInterestDisplaySettingsGetReq(req *protos.RegionOfInterestDisplaySettingsGetReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestDisplaySettingsGetResp, error) { // Check that we have an id, current user, and display settings if len(req.Id) <= 0 { return nil, errorwithstatus.MakeBadRequestError(errors.New("ROI ID must be specified")) @@ -692,7 +692,7 @@ func HandleRegionOfInterestDisplaySettingsGetReq(req *protos.RegionOfInterestDis return nil, err } - return &protos.RegionOfInterestDisplaySettingsGetResp{ + return []*protos.RegionOfInterestDisplaySettingsGetResp{&protos.RegionOfInterestDisplaySettingsGetResp{ DisplaySettings: displaySettings, - }, nil + }}, nil } diff --git a/api/ws/handlers/scan-beam-location.go b/api/ws/handlers/scan-beam-location.go index 7fac2c40..6b156a39 100644 --- a/api/ws/handlers/scan-beam-location.go +++ b/api/ws/handlers/scan-beam-location.go @@ -5,7 +5,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleScanBeamLocationsReq(req *protos.ScanBeamLocationsReq, hctx wsHelpers.HandlerContext) (*protos.ScanBeamLocationsResp, error) { +func HandleScanBeamLocationsReq(req *protos.ScanBeamLocationsReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanBeamLocationsResp, error) { exprPB, indexes, err := beginDatasetFileReqForRange(req.ScanId, req.Entries, hctx) if err != nil { return nil, err @@ -28,7 +28,7 @@ func HandleScanBeamLocationsReq(req *protos.ScanBeamLocationsReq, hctx wsHelpers beams = append(beams, beamSave) } - return &protos.ScanBeamLocationsResp{ + return []*protos.ScanBeamLocationsResp{&protos.ScanBeamLocationsResp{ BeamLocations: beams, - }, nil + }}, nil } diff --git a/api/ws/handlers/scan-entry-metadata.go b/api/ws/handlers/scan-entry-metadata.go index a52f717d..bce5a948 100644 --- a/api/ws/handlers/scan-entry-metadata.go +++ b/api/ws/handlers/scan-entry-metadata.go @@ -7,7 +7,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleScanEntryMetadataReq(req *protos.ScanEntryMetadataReq, hctx wsHelpers.HandlerContext) (*protos.ScanEntryMetadataResp, error) { +func HandleScanEntryMetadataReq(req *protos.ScanEntryMetadataReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanEntryMetadataResp, error) { exprPB, indexes, err := beginDatasetFileReqForRange(req.ScanId, req.Entries, hctx) if err != nil { return nil, err @@ -62,7 +62,7 @@ func HandleScanEntryMetadataReq(req *protos.ScanEntryMetadataReq, hctx wsHelpers entryMetas = append(entryMetas, metaSave) } - return &protos.ScanEntryMetadataResp{ + return []*protos.ScanEntryMetadataResp{&protos.ScanEntryMetadataResp{ Entries: entryMetas, - }, nil + }}, nil } diff --git a/api/ws/handlers/scan-entry.go b/api/ws/handlers/scan-entry.go index 3c93f26b..b47691ca 100644 --- a/api/ws/handlers/scan-entry.go +++ b/api/ws/handlers/scan-entry.go @@ -8,7 +8,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleScanEntryReq(req *protos.ScanEntryReq, hctx wsHelpers.HandlerContext) (*protos.ScanEntryResp, error) { +func HandleScanEntryReq(req *protos.ScanEntryReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanEntryResp, error) { exprPB, indexes, err := beginDatasetFileReqForRange(req.ScanId, req.Entries, hctx) if err != nil { return nil, err @@ -95,7 +95,7 @@ func HandleScanEntryReq(req *protos.ScanEntryReq, hctx wsHelpers.HandlerContext) entries = append(entries, locSave) } - return &protos.ScanEntryResp{ + return []*protos.ScanEntryResp{&protos.ScanEntryResp{ Entries: entries, - }, nil + }}, nil } diff --git a/api/ws/handlers/scan.go b/api/ws/handlers/scan.go index 9d0fe002..e602c1f0 100644 --- a/api/ws/handlers/scan.go +++ b/api/ws/handlers/scan.go @@ -29,7 +29,7 @@ import ( "google.golang.org/protobuf/proto" ) -func HandleScanListReq(req *protos.ScanListReq, hctx wsHelpers.HandlerContext) (*protos.ScanListResp, error) { +func HandleScanListReq(req *protos.ScanListReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanListResp, error) { idToOwner, err := wsHelpers.ListAccessibleIDs(false, protos.ObjectType_OT_SCAN, hctx.Svcs, hctx.SessUser) if err != nil { return nil, err @@ -105,12 +105,12 @@ func HandleScanListReq(req *protos.ScanListReq, hctx wsHelpers.HandlerContext) ( return nil, err } - return &protos.ScanListResp{ + return []*protos.ScanListResp{&protos.ScanListResp{ Scans: scans, - }, nil + }}, nil } -func HandleScanGetReq(req *protos.ScanGetReq, hctx wsHelpers.HandlerContext) (*protos.ScanGetResp, error) { +func HandleScanGetReq(req *protos.ScanGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanGetResp, error) { // Check that we have an id, current user, and display settings if len(req.Id) <= 0 { return nil, errorwithstatus.MakeBadRequestError(errors.New("Scan ID must be specified")) @@ -128,12 +128,12 @@ func HandleScanGetReq(req *protos.ScanGetReq, hctx wsHelpers.HandlerContext) (*p dbItem.Owner = wsHelpers.MakeOwnerSummary(owner, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) - return &protos.ScanGetResp{ + return []*protos.ScanGetResp{&protos.ScanGetResp{ Scan: dbItem, - }, nil + }}, nil } -func HandleScanMetaLabelsAndTypesReq(req *protos.ScanMetaLabelsAndTypesReq, hctx wsHelpers.HandlerContext) (*protos.ScanMetaLabelsAndTypesResp, error) { +func HandleScanMetaLabelsAndTypesReq(req *protos.ScanMetaLabelsAndTypesReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanMetaLabelsAndTypesResp, error) { exprPB, err := beginDatasetFileReq(req.ScanId, hctx) if err != nil { return nil, err @@ -151,10 +151,10 @@ func HandleScanMetaLabelsAndTypesReq(req *protos.ScanMetaLabelsAndTypesReq, hctx types = append(types, tScan) } - return &protos.ScanMetaLabelsAndTypesResp{ + return []*protos.ScanMetaLabelsAndTypesResp{&protos.ScanMetaLabelsAndTypesResp{ MetaLabels: exprPB.MetaLabels, MetaTypes: types, - }, nil + }}, nil } // Utility to call for any Req message that involves serving data out of a dataset.bin file @@ -201,7 +201,7 @@ func beginDatasetFileReq(scanId string, hctx wsHelpers.HandlerContext) (*protos. return exprPB, nil } -func HandleScanDeleteReq(req *protos.ScanDeleteReq, hctx wsHelpers.HandlerContext) (*protos.ScanDeleteResp, error) { +func HandleScanDeleteReq(req *protos.ScanDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanDeleteResp, error) { // Check user has access dbItem, _, err := wsHelpers.GetUserObjectById[protos.ScanItem](true, req.ScanId, protos.ObjectType_OT_SCAN, dbCollections.ScansName, hctx) if err != nil { @@ -246,10 +246,10 @@ func HandleScanDeleteReq(req *protos.ScanDeleteReq, hctx wsHelpers.HandlerContex // Notify of our scan change hctx.Svcs.Notifier.SysNotifyScanChanged(req.ScanId) - return &protos.ScanDeleteResp{}, nil + return []*protos.ScanDeleteResp{&protos.ScanDeleteResp{}}, nil } -func HandleScanMetaWriteReq(req *protos.ScanMetaWriteReq, hctx wsHelpers.HandlerContext) (*protos.ScanMetaWriteResp, error) { +func HandleScanMetaWriteReq(req *protos.ScanMetaWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanMetaWriteResp, error) { if err := wsHelpers.CheckStringField(&req.Title, "Title", 1, 100); err != nil { return nil, err } @@ -288,10 +288,10 @@ func HandleScanMetaWriteReq(req *protos.ScanMetaWriteReq, hctx wsHelpers.Handler // Notify of our scan change hctx.Svcs.Notifier.SysNotifyScanChanged(req.ScanId) - return &protos.ScanMetaWriteResp{}, nil + return []*protos.ScanMetaWriteResp{&protos.ScanMetaWriteResp{}}, nil } -func HandleScanTriggerReImportReq(req *protos.ScanTriggerReImportReq, hctx wsHelpers.HandlerContext) (*protos.ScanTriggerReImportResp, error) { +func HandleScanTriggerReImportReq(req *protos.ScanTriggerReImportReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanTriggerReImportResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, 50); err != nil { return nil, err } @@ -319,14 +319,14 @@ func HandleScanTriggerReImportReq(req *protos.ScanTriggerReImportReq, hctx wsHel result, err := dataimport.TriggerDatasetReprocessViaSNS(hctx.Svcs.SNS, jobId, req.ScanId, hctx.Svcs.Config.DataSourceSNSTopic) hctx.Svcs.Log.Infof("Triggered dataset reprocess via SNS topic. Result: %v. Job ID: %v", result, jobId) - return &protos.ScanTriggerReImportResp{JobId: jobId}, err + return []*protos.ScanTriggerReImportResp{&protos.ScanTriggerReImportResp{JobId: jobId}}, err } // NOTE: before this is sent, we expect the PUT /scan endpoint to have been called and a zip uploaded already // // The same parameters passed there (scan id & file name) must be used with this request otherwise we // won't look up the zip correctly and fail. -func HandleScanUploadReq(req *protos.ScanUploadReq, hctx wsHelpers.HandlerContext) (*protos.ScanUploadResp, error) { +func HandleScanUploadReq(req *protos.ScanUploadReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanUploadResp, error) { if err := wsHelpers.CheckStringField(&req.Id, "Id", 1, 50); err != nil { return nil, err } @@ -563,7 +563,7 @@ func HandleScanUploadReq(req *protos.ScanUploadReq, hctx wsHelpers.HandlerContex logger.Infof("Triggered dataset reprocess via SNS topic. Result: %v. Job ID: %v", result, jobId) - return &protos.ScanUploadResp{JobId: jobId}, nil + return []*protos.ScanUploadResp{&protos.ScanUploadResp{JobId: jobId}}, nil } type importUpdater struct { @@ -641,7 +641,7 @@ func (i *importUpdater) sendImportUpdate(status *protos.JobStatus) { } } -func HandleScanAutoShareReq(req *protos.ScanAutoShareReq, hctx wsHelpers.HandlerContext) (*protos.ScanAutoShareResp, error) { +func HandleScanAutoShareReq(req *protos.ScanAutoShareReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanAutoShareResp, error) { if err := wsHelpers.CheckStringField(&req.Id, "Id", 1, 50); err != nil { return nil, err } @@ -667,12 +667,12 @@ func HandleScanAutoShareReq(req *protos.ScanAutoShareReq, hctx wsHelpers.Handler return nil, err } - return &protos.ScanAutoShareResp{ + return []*protos.ScanAutoShareResp{&protos.ScanAutoShareResp{ Entry: item, - }, nil + }}, nil } -func HandleScanAutoShareWriteReq(req *protos.ScanAutoShareWriteReq, hctx wsHelpers.HandlerContext) (*protos.ScanAutoShareWriteResp, error) { +func HandleScanAutoShareWriteReq(req *protos.ScanAutoShareWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanAutoShareWriteResp, error) { if err := wsHelpers.CheckStringField(&req.Entry.Id, "Id", 1, 50); err != nil { return nil, err } @@ -706,5 +706,5 @@ func HandleScanAutoShareWriteReq(req *protos.ScanAutoShareWriteReq, hctx wsHelpe } } - return &protos.ScanAutoShareWriteResp{}, nil + return []*protos.ScanAutoShareWriteResp{&protos.ScanAutoShareWriteResp{}}, nil } diff --git a/api/ws/handlers/screen-configuration.go b/api/ws/handlers/screen-configuration.go index 96e9625e..72433846 100644 --- a/api/ws/handlers/screen-configuration.go +++ b/api/ws/handlers/screen-configuration.go @@ -26,7 +26,7 @@ func formWidgetId(widget *protos.WidgetLayoutConfiguration, screenConfigId strin return screenConfigId + "-" + fmt.Sprint(layoutIndex) + "-" + positionId } -func HandleScreenConfigurationGetReq(req *protos.ScreenConfigurationGetReq, hctx wsHelpers.HandlerContext) (*protos.ScreenConfigurationGetResp, error) { +func HandleScreenConfigurationGetReq(req *protos.ScreenConfigurationGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ScreenConfigurationGetResp, error) { configId := "" if req.Id != "" { configId = req.Id @@ -46,12 +46,12 @@ func HandleScreenConfigurationGetReq(req *protos.ScreenConfigurationGetReq, hctx screenConfig.Owner = wsHelpers.MakeOwnerSummary(owner, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) - return &protos.ScreenConfigurationGetResp{ + return []*protos.ScreenConfigurationGetResp{&protos.ScreenConfigurationGetResp{ ScreenConfiguration: screenConfig, - }, nil + }}, nil } -func HandleScreenConfigurationListReq(req *protos.ScreenConfigurationListReq, hctx wsHelpers.HandlerContext) (*protos.ScreenConfigurationListResp, error) { +func HandleScreenConfigurationListReq(req *protos.ScreenConfigurationListReq, hctx wsHelpers.HandlerContext) ([]*protos.ScreenConfigurationListResp, error) { filter, idToOwner, err := wsHelpers.MakeFilter(req.SearchParams, false, protos.ObjectType_OT_SCREEN_CONFIG, hctx) if err != nil { return nil, err @@ -80,9 +80,9 @@ func HandleScreenConfigurationListReq(req *protos.ScreenConfigurationListReq, hc screenConfig.Owner = wsHelpers.MakeOwnerSummary(owner, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) } - return &protos.ScreenConfigurationListResp{ + return []*protos.ScreenConfigurationListResp{&protos.ScreenConfigurationListResp{ ScreenConfigurations: result, - }, nil + }}, nil } func writeScreenConfiguration(screenConfig *protos.ScreenConfiguration, hctx wsHelpers.HandlerContext, updateExisting bool) (*protos.ScreenConfiguration, error) { @@ -268,7 +268,7 @@ func loadWidgetsForScreenConfiguration(screenConfig *protos.ScreenConfiguration, return screenConfig, nil } -func HandleScreenConfigurationWriteReq(req *protos.ScreenConfigurationWriteReq, hctx wsHelpers.HandlerContext) (*protos.ScreenConfigurationWriteResp, error) { +func HandleScreenConfigurationWriteReq(req *protos.ScreenConfigurationWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ScreenConfigurationWriteResp, error) { if req.ScreenConfiguration == nil { return nil, errors.New("screen configuration must be specified") } @@ -307,12 +307,12 @@ func HandleScreenConfigurationWriteReq(req *protos.ScreenConfigurationWriteReq, return nil, err } - return &protos.ScreenConfigurationWriteResp{ + return []*protos.ScreenConfigurationWriteResp{&protos.ScreenConfigurationWriteResp{ ScreenConfiguration: screenConfig, - }, nil + }}, nil } -func HandleScreenConfigurationDeleteReq(req *protos.ScreenConfigurationDeleteReq, hctx wsHelpers.HandlerContext) (*protos.ScreenConfigurationDeleteResp, error) { +func HandleScreenConfigurationDeleteReq(req *protos.ScreenConfigurationDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.ScreenConfigurationDeleteResp, error) { if req.Id == "" { return nil, errors.New("screen configuration id must be specified") } @@ -373,7 +373,7 @@ func HandleScreenConfigurationDeleteReq(req *protos.ScreenConfigurationDeleteReq return nil, err } - return &protos.ScreenConfigurationDeleteResp{ + return []*protos.ScreenConfigurationDeleteResp{&protos.ScreenConfigurationDeleteResp{ Id: req.Id, - }, nil + }}, nil } diff --git a/api/ws/handlers/selection-entry.go b/api/ws/handlers/selection-entry.go index 95ec31b7..e2a52368 100644 --- a/api/ws/handlers/selection-entry.go +++ b/api/ws/handlers/selection-entry.go @@ -13,7 +13,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleSelectedScanEntriesReq(req *protos.SelectedScanEntriesReq, hctx wsHelpers.HandlerContext) (*protos.SelectedScanEntriesResp, error) { +func HandleSelectedScanEntriesReq(req *protos.SelectedScanEntriesReq, hctx wsHelpers.HandlerContext) ([]*protos.SelectedScanEntriesResp, error) { // We read multiple scans and assemble a single response // If any have an error, we error the whole thing out @@ -37,13 +37,13 @@ func HandleSelectedScanEntriesReq(req *protos.SelectedScanEntriesReq, hctx wsHel result[scanId] = idxs } - return &protos.SelectedScanEntriesResp{ + return []*protos.SelectedScanEntriesResp{&protos.SelectedScanEntriesResp{ ScanIdEntryIndexes: result, - }, nil + }}, nil } // Allowing user to save multiple scans worth of entry indexes in one message -func HandleSelectedScanEntriesWriteReq(req *protos.SelectedScanEntriesWriteReq, hctx wsHelpers.HandlerContext) (*protos.SelectedScanEntriesWriteResp, error) { +func HandleSelectedScanEntriesWriteReq(req *protos.SelectedScanEntriesWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.SelectedScanEntriesWriteResp, error) { // Cap it though for performance... if len(req.ScanIdEntryIndexes) > 10 { return nil, errors.New("Too many ScanIds written") @@ -56,7 +56,7 @@ func HandleSelectedScanEntriesWriteReq(req *protos.SelectedScanEntriesWriteReq, } } - return &protos.SelectedScanEntriesWriteResp{}, nil + return []*protos.SelectedScanEntriesWriteResp{&protos.SelectedScanEntriesWriteResp{}}, nil } func readSelection(id string, db *mongo.Database) (*protos.ScanEntryRange, error) { diff --git a/api/ws/handlers/selection-pixel.go b/api/ws/handlers/selection-pixel.go index a27af25e..5fea6f78 100644 --- a/api/ws/handlers/selection-pixel.go +++ b/api/ws/handlers/selection-pixel.go @@ -5,22 +5,22 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleSelectedImagePixelsReq(req *protos.SelectedImagePixelsReq, hctx wsHelpers.HandlerContext) (*protos.SelectedImagePixelsResp, error) { +func HandleSelectedImagePixelsReq(req *protos.SelectedImagePixelsReq, hctx wsHelpers.HandlerContext) ([]*protos.SelectedImagePixelsResp, error) { idxs, err := readSelection("pix_"+req.Image+"_"+hctx.SessUser.User.Id, hctx.Svcs.MongoDB) if err != nil { return nil, err } - return &protos.SelectedImagePixelsResp{ + return []*protos.SelectedImagePixelsResp{&protos.SelectedImagePixelsResp{ PixelIndexes: idxs, - }, nil + }}, nil } -func HandleSelectedImagePixelsWriteReq(req *protos.SelectedImagePixelsWriteReq, hctx wsHelpers.HandlerContext) (*protos.SelectedImagePixelsWriteResp, error) { +func HandleSelectedImagePixelsWriteReq(req *protos.SelectedImagePixelsWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.SelectedImagePixelsWriteResp, error) { err := writeSelection("pix_"+req.Image+"_"+hctx.SessUser.User.Id, req.PixelIndexes, hctx.Svcs.MongoDB, hctx.Svcs.Log) if err != nil { return nil, err } - return &protos.SelectedImagePixelsWriteResp{}, nil + return []*protos.SelectedImagePixelsWriteResp{&protos.SelectedImagePixelsWriteResp{}}, nil } diff --git a/api/ws/handlers/spectrum.go b/api/ws/handlers/spectrum.go index 2f378f52..501b5c09 100644 --- a/api/ws/handlers/spectrum.go +++ b/api/ws/handlers/spectrum.go @@ -9,7 +9,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleSpectrumReq(req *protos.SpectrumReq, hctx wsHelpers.HandlerContext) (*protos.SpectrumResp, error) { +func HandleSpectrumReq(req *protos.SpectrumReq, hctx wsHelpers.HandlerContext) ([]*protos.SpectrumResp, error) { exprPB, indexes, err := beginDatasetFileReqForRange(req.ScanId, req.Entries, hctx) if err != nil { return nil, err @@ -48,7 +48,7 @@ func HandleSpectrumReq(req *protos.SpectrumReq, hctx wsHelpers.HandlerContext) ( // the channel count based on the detector here... channelCount := uint32(4096) - result := &protos.SpectrumResp{ + firstResponse := &protos.SpectrumResp{ SpectraPerLocation: spectra, ChannelCount: channelCount, NormalSpectraForScan: uint32(exprPB.NormalSpectra), @@ -57,7 +57,7 @@ func HandleSpectrumReq(req *protos.SpectrumReq, hctx wsHelpers.HandlerContext) ( for c, label := range exprPB.MetaLabels { if label == "LIVETIME" { - result.LiveTimeMetaIndex = uint32(c) + firstResponse.LiveTimeMetaIndex = uint32(c) break } } @@ -69,11 +69,37 @@ func HandleSpectrumReq(req *protos.SpectrumReq, hctx wsHelpers.HandlerContext) ( return nil, err } - result.BulkSpectra = bulkSpectra - result.MaxSpectra = maxSpectra + firstResponse.BulkSpectra = bulkSpectra + firstResponse.MaxSpectra = maxSpectra } - return result, nil + resps := []*protos.SpectrumResp{firstResponse} + + // If we have too many spectra in one message, break it up + maxSpectraPerMessage := 10 + if len(spectra) > maxSpectraPerMessage { + // Only add the first X to the first message + firstResponse.SpectraPerLocation = spectra[0:maxSpectraPerMessage] + + // Make more messages + for c := maxSpectraPerMessage; c < len(spectra); c += maxSpectraPerMessage { + end := c + maxSpectraPerMessage + if end > len(spectra) { + end = len(spectra) + } + + subsequentResp := &protos.SpectrumResp{ + SpectraPerLocation: spectra[c:end], + ChannelCount: firstResponse.ChannelCount, + NormalSpectraForScan: firstResponse.NormalSpectraForScan, + DwellSpectraForScan: firstResponse.DwellSpectraForScan, + LiveTimeMetaIndex: firstResponse.LiveTimeMetaIndex, + } + resps = append(resps, subsequentResp) + } + } + + return resps, nil } // Returns array of bulk, array of max, error diff --git a/api/ws/handlers/tag.go b/api/ws/handlers/tag.go index db37a1c9..4ec73aa5 100644 --- a/api/ws/handlers/tag.go +++ b/api/ws/handlers/tag.go @@ -62,7 +62,7 @@ func decorateTag(tag *protos.TagDB, db *mongo.Database, log logger.ILogger) (*pr return decoratedTag, nil } -func HandleTagCreateReq(req *protos.TagCreateReq, hctx wsHelpers.HandlerContext) (*protos.TagCreateResp, error) { +func HandleTagCreateReq(req *protos.TagCreateReq, hctx wsHelpers.HandlerContext) ([]*protos.TagCreateResp, error) { // Limit tags to 50 characters if err := wsHelpers.CheckStringField(&req.Name, "Name", 1, 50); err != nil { return nil, err @@ -99,10 +99,10 @@ func HandleTagCreateReq(req *protos.TagCreateReq, hctx wsHelpers.HandlerContext) return nil, err } - return &protos.TagCreateResp{Tag: resolvedTag}, nil + return []*protos.TagCreateResp{&protos.TagCreateResp{Tag: resolvedTag}}, nil } -func HandleTagDeleteReq(req *protos.TagDeleteReq, hctx wsHelpers.HandlerContext) (*protos.TagDeleteResp, error) { +func HandleTagDeleteReq(req *protos.TagDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.TagDeleteResp, error) { ctx := context.TODO() coll := hctx.Svcs.MongoDB.Collection(dbCollections.TagsName) @@ -127,10 +127,10 @@ func HandleTagDeleteReq(req *protos.TagDeleteReq, hctx wsHelpers.HandlerContext) return nil, err } - return &protos.TagDeleteResp{}, nil + return []*protos.TagDeleteResp{&protos.TagDeleteResp{}}, nil } -func HandleTagListReq(req *protos.TagListReq, hctx wsHelpers.HandlerContext) (*protos.TagListResp, error) { +func HandleTagListReq(req *protos.TagListReq, hctx wsHelpers.HandlerContext) ([]*protos.TagListResp, error) { ctx := context.TODO() coll := hctx.Svcs.MongoDB.Collection(dbCollections.TagsName) @@ -153,7 +153,5 @@ func HandleTagListReq(req *protos.TagListReq, hctx wsHelpers.HandlerContext) (*p decoratedTags = append(decoratedTags, decoratedTag) } - tagResponse := &protos.TagListResp{Tags: decoratedTags} - - return tagResponse, nil + return []*protos.TagListResp{&protos.TagListResp{Tags: decoratedTags}}, nil } diff --git a/api/ws/handlers/test.go b/api/ws/handlers/test.go index 72eb6cd8..c429d53e 100644 --- a/api/ws/handlers/test.go +++ b/api/ws/handlers/test.go @@ -7,6 +7,6 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleRunTestReq(req *protos.RunTestReq, hctx wsHelpers.HandlerContext) (*protos.RunTestResp, error) { +func HandleRunTestReq(req *protos.RunTestReq, hctx wsHelpers.HandlerContext) ([]*protos.RunTestResp, error) { return nil, errors.New("HandleRunTestReq not implemented yet") } diff --git a/api/ws/handlers/user-group-admins.go b/api/ws/handlers/user-group-admins.go index 99bb34eb..3572504a 100644 --- a/api/ws/handlers/user-group-admins.go +++ b/api/ws/handlers/user-group-admins.go @@ -12,26 +12,26 @@ import ( "go.mongodb.org/mongo-driver/bson" ) -func HandleUserGroupAddAdminReq(req *protos.UserGroupAddAdminReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupAddAdminResp, error) { +func HandleUserGroupAddAdminReq(req *protos.UserGroupAddAdminReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupAddAdminResp, error) { group, err := modifyGroupAdminList(req.GroupId, req.AdminUserId, true, hctx) if err != nil { return nil, err } - return &protos.UserGroupAddAdminResp{ + return []*protos.UserGroupAddAdminResp{&protos.UserGroupAddAdminResp{ Group: group, - }, nil + }}, nil } -func HandleUserGroupDeleteAdminReq(req *protos.UserGroupDeleteAdminReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupDeleteAdminResp, error) { +func HandleUserGroupDeleteAdminReq(req *protos.UserGroupDeleteAdminReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupDeleteAdminResp, error) { group, err := modifyGroupAdminList(req.GroupId, req.AdminUserId, false, hctx) if err != nil { return nil, err } - return &protos.UserGroupDeleteAdminResp{ + return []*protos.UserGroupDeleteAdminResp{&protos.UserGroupDeleteAdminResp{ Group: group, - }, nil + }}, nil } func modifyGroupAdminList(groupId string, adminUserId string, add bool, hctx wsHelpers.HandlerContext) (*protos.UserGroup, error) { diff --git a/api/ws/handlers/user-group-joining.go b/api/ws/handlers/user-group-joining.go index 0af86c06..91810d64 100644 --- a/api/ws/handlers/user-group-joining.go +++ b/api/ws/handlers/user-group-joining.go @@ -14,7 +14,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleUserGroupJoinReq(req *protos.UserGroupJoinReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupJoinResp, error) { +func HandleUserGroupJoinReq(req *protos.UserGroupJoinReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupJoinResp, error) { if err := wsHelpers.CheckStringField(&req.GroupId, "GroupId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -67,10 +67,10 @@ A user named %v has just requested to join the group as a %v`, group.Name, hctx. "PIXLISE API", ) - return &protos.UserGroupJoinResp{}, nil + return []*protos.UserGroupJoinResp{&protos.UserGroupJoinResp{}}, nil } -func HandleUserGroupIgnoreJoinReq(req *protos.UserGroupIgnoreJoinReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupIgnoreJoinResp, error) { +func HandleUserGroupIgnoreJoinReq(req *protos.UserGroupIgnoreJoinReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupIgnoreJoinResp, error) { if err := wsHelpers.CheckStringField(&req.GroupId, "GroupId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -100,10 +100,10 @@ func HandleUserGroupIgnoreJoinReq(req *protos.UserGroupIgnoreJoinReq, hctx wsHel hctx.Svcs.Log.Errorf("UserGroup Join Request Delete result had unexpected counts %+v id: %v", result, req.RequestId) } - return &protos.UserGroupIgnoreJoinResp{}, nil + return []*protos.UserGroupIgnoreJoinResp{&protos.UserGroupIgnoreJoinResp{}}, nil } -func HandleUserGroupJoinListReq(req *protos.UserGroupJoinListReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupJoinListResp, error) { +func HandleUserGroupJoinListReq(req *protos.UserGroupJoinListReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupJoinListResp, error) { if err := wsHelpers.CheckStringField(&req.GroupId, "GroupId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -142,7 +142,7 @@ func HandleUserGroupJoinListReq(req *protos.UserGroupJoinListReq, hctx wsHelpers item.Details = userDBItem.Info } - return &protos.UserGroupJoinListResp{ + return []*protos.UserGroupJoinListResp{&protos.UserGroupJoinListResp{ Requests: items, - }, nil + }}, nil } diff --git a/api/ws/handlers/user-group-management.go b/api/ws/handlers/user-group-management.go index cd1290a8..adfc49ff 100644 --- a/api/ws/handlers/user-group-management.go +++ b/api/ws/handlers/user-group-management.go @@ -13,7 +13,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleUserGroupCreateReq(req *protos.UserGroupCreateReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupCreateResp, error) { +func HandleUserGroupCreateReq(req *protos.UserGroupCreateReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupCreateResp, error) { // Should only be called if we have admin rights, no other permission issues here if err := wsHelpers.CheckStringField(&req.Name, "Name", 1, 50); err != nil { return nil, err @@ -64,10 +64,10 @@ func HandleUserGroupCreateReq(req *protos.UserGroupCreateReq, hctx wsHelpers.Han return nil, err } - return &protos.UserGroupCreateResp{Group: groupSend}, nil + return []*protos.UserGroupCreateResp{&protos.UserGroupCreateResp{Group: groupSend}}, nil } -func HandleUserGroupDeleteReq(req *protos.UserGroupDeleteReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupDeleteResp, error) { +func HandleUserGroupDeleteReq(req *protos.UserGroupDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupDeleteResp, error) { // Should only be called if we have admin rights, no other permission issues here if err := wsHelpers.CheckStringField(&req.GroupId, "GroupId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err @@ -111,10 +111,10 @@ func HandleUserGroupDeleteReq(req *protos.UserGroupDeleteReq, hctx wsHelpers.Han hctx.Svcs.Log.Errorf("UserGroup Delete result had unexpected counts %+v id: %v", result, req.GroupId) } - return &protos.UserGroupDeleteResp{}, nil + return []*protos.UserGroupDeleteResp{&protos.UserGroupDeleteResp{}}, nil } -func HandleUserGroupSetNameReq(req *protos.UserGroupSetNameReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupSetNameResp, error) { +func HandleUserGroupSetNameReq(req *protos.UserGroupSetNameReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupSetNameResp, error) { // Should only be called if we have admin rights, no other permission issues here if err := wsHelpers.CheckStringField(&req.GroupId, "GroupId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err @@ -157,7 +157,7 @@ func HandleUserGroupSetNameReq(req *protos.UserGroupSetNameReq, hctx wsHelpers.H return nil, err } - return &protos.UserGroupSetNameResp{Group: groupSend}, nil + return []*protos.UserGroupSetNameResp{&protos.UserGroupSetNameResp{Group: groupSend}}, nil } func checkUserGroupNameExists(name string, ctx context.Context, coll *mongo.Collection) (bool, error, *mongo.SingleResult) { diff --git a/api/ws/handlers/user-group-membership.go b/api/ws/handlers/user-group-membership.go index 24869a63..c6509d18 100644 --- a/api/ws/handlers/user-group-membership.go +++ b/api/ws/handlers/user-group-membership.go @@ -16,48 +16,48 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleUserGroupAddViewerReq(req *protos.UserGroupAddViewerReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupAddViewerResp, error) { +func HandleUserGroupAddViewerReq(req *protos.UserGroupAddViewerReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupAddViewerResp, error) { group, err := modifyGroupMembershipList(req.GroupId, req.GetGroupViewerId(), req.GetUserViewerId(), true, true, hctx) if err != nil { return nil, err } - return &protos.UserGroupAddViewerResp{ + return []*protos.UserGroupAddViewerResp{&protos.UserGroupAddViewerResp{ Group: group, - }, nil + }}, nil } -func HandleUserGroupDeleteViewerReq(req *protos.UserGroupDeleteViewerReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupDeleteViewerResp, error) { +func HandleUserGroupDeleteViewerReq(req *protos.UserGroupDeleteViewerReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupDeleteViewerResp, error) { group, err := modifyGroupMembershipList(req.GroupId, req.GetGroupViewerId(), req.GetUserViewerId(), true, false, hctx) if err != nil { return nil, err } - return &protos.UserGroupDeleteViewerResp{ + return []*protos.UserGroupDeleteViewerResp{&protos.UserGroupDeleteViewerResp{ Group: group, - }, nil + }}, nil } -func HandleUserGroupAddMemberReq(req *protos.UserGroupAddMemberReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupAddMemberResp, error) { +func HandleUserGroupAddMemberReq(req *protos.UserGroupAddMemberReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupAddMemberResp, error) { group, err := modifyGroupMembershipList(req.GroupId, req.GetGroupMemberId(), req.GetUserMemberId(), false, true, hctx) if err != nil { return nil, err } - return &protos.UserGroupAddMemberResp{ + return []*protos.UserGroupAddMemberResp{&protos.UserGroupAddMemberResp{ Group: group, - }, nil + }}, nil } -func HandleUserGroupDeleteMemberReq(req *protos.UserGroupDeleteMemberReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupDeleteMemberResp, error) { +func HandleUserGroupDeleteMemberReq(req *protos.UserGroupDeleteMemberReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupDeleteMemberResp, error) { group, err := modifyGroupMembershipList(req.GroupId, req.GetGroupMemberId(), req.GetUserMemberId(), false, false, hctx) if err != nil { return nil, err } - return &protos.UserGroupDeleteMemberResp{ + return []*protos.UserGroupDeleteMemberResp{&protos.UserGroupDeleteMemberResp{ Group: group, - }, nil + }}, nil } // Does the job of the above... diff --git a/api/ws/handlers/user-group-retrieval.go b/api/ws/handlers/user-group-retrieval.go index 15960105..493ed2ad 100644 --- a/api/ws/handlers/user-group-retrieval.go +++ b/api/ws/handlers/user-group-retrieval.go @@ -13,7 +13,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleUserGroupListReq(req *protos.UserGroupListReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupListResp, error) { +func HandleUserGroupListReq(req *protos.UserGroupListReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupListResp, error) { // Should only be called if we have admin rights, so other permission issues here ctx := context.TODO() coll := hctx.Svcs.MongoDB.Collection(dbCollections.UserGroupsName) @@ -53,13 +53,13 @@ func HandleUserGroupListReq(req *protos.UserGroupListReq, hctx wsHelpers.Handler }) } - return &protos.UserGroupListResp{ + return []*protos.UserGroupListResp{&protos.UserGroupListResp{ GroupInfos: groupInfos, - }, nil + }}, nil } // Getting an individual user group - this should only be allowed for PIXLISE_ADMIN permissioned users, or group admins -func HandleUserGroupReq(req *protos.UserGroupReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupResp, error) { +func HandleUserGroupReq(req *protos.UserGroupReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupResp, error) { if err := wsHelpers.CheckStringField(&req.GroupId, "GroupId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -89,12 +89,12 @@ func HandleUserGroupReq(req *protos.UserGroupReq, hctx wsHelpers.HandlerContext) return nil, err } - return &protos.UserGroupResp{ + return []*protos.UserGroupResp{&protos.UserGroupResp{ Group: decGroup, - }, nil + }}, nil } -func HandleUserGroupListJoinableReq(req *protos.UserGroupListJoinableReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupListJoinableResp, error) { +func HandleUserGroupListJoinableReq(req *protos.UserGroupListJoinableReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupListJoinableResp, error) { // Should only be called if we have admin rights, so other permission issues here ctx := context.TODO() coll := hctx.Svcs.MongoDB.Collection(dbCollections.UserGroupsName) @@ -175,7 +175,7 @@ func HandleUserGroupListJoinableReq(req *protos.UserGroupListJoinableReq, hctx w }) } - return &protos.UserGroupListJoinableResp{ + return []*protos.UserGroupListJoinableResp{&protos.UserGroupListJoinableResp{ Groups: groupSummaries, - }, nil + }}, nil } diff --git a/api/ws/handlers/user-management.go b/api/ws/handlers/user-management.go index adf9c1bb..21b9cbb1 100644 --- a/api/ws/handlers/user-management.go +++ b/api/ws/handlers/user-management.go @@ -13,7 +13,7 @@ import ( // ///////////////////////////////////////////////////////////////////// // Listing users from Auth0 -func HandleUserListReq(req *protos.UserListReq, hctx wsHelpers.HandlerContext) (*protos.UserListResp, error) { +func HandleUserListReq(req *protos.UserListReq, hctx wsHelpers.HandlerContext) ([]*protos.UserListResp, error) { auth0API, err := auth0login.InitAuth0ManagementAPI(hctx.Svcs.Config) if err != nil { return nil, err @@ -40,12 +40,12 @@ func HandleUserListReq(req *protos.UserListReq, hctx wsHelpers.HandlerContext) ( page++ } - return &protos.UserListResp{Details: users}, err + return []*protos.UserListResp{&protos.UserListResp{Details: users}}, err } // ///////////////////////////////////////////////////////////////////// // Getting a users roles -func HandleUserRolesListReq(req *protos.UserRolesListReq, hctx wsHelpers.HandlerContext) (*protos.UserRolesListResp, error) { +func HandleUserRolesListReq(req *protos.UserRolesListReq, hctx wsHelpers.HandlerContext) ([]*protos.UserRolesListResp, error) { if err := wsHelpers.CheckStringField(&req.UserId, "UserId", 5, wsHelpers.Auth0UserIdFieldMaxLength); err != nil { return nil, err } @@ -60,14 +60,14 @@ func HandleUserRolesListReq(req *protos.UserRolesListReq, hctx wsHelpers.Handler return nil, err } - return &protos.UserRolesListResp{ + return []*protos.UserRolesListResp{&protos.UserRolesListResp{ Roles: makeRoleList(gotRoles), - }, nil + }}, nil } // ///////////////////////////////////////////////////////////////////// // Managing a users roles -func HandleUserAddRoleReq(req *protos.UserAddRoleReq, hctx wsHelpers.HandlerContext) (*protos.UserAddRoleResp, error) { +func HandleUserAddRoleReq(req *protos.UserAddRoleReq, hctx wsHelpers.HandlerContext) ([]*protos.UserAddRoleResp, error) { if err := wsHelpers.CheckStringField(&req.UserId, "UserId", 5, wsHelpers.Auth0UserIdFieldMaxLength); err != nil { return nil, err } @@ -119,10 +119,13 @@ func HandleUserAddRoleReq(req *protos.UserAddRoleReq, hctx wsHelpers.HandlerCont } err = auth0API.User.AssignRoles(userID, &management.Role{ID: &roleID}) - return nil, err + if err != nil { + return nil, err + } + return []*protos.UserAddRoleResp{&protos.UserAddRoleResp{}}, nil } -func HandleUserDeleteRoleReq(req *protos.UserDeleteRoleReq, hctx wsHelpers.HandlerContext) (*protos.UserDeleteRoleResp, error) { +func HandleUserDeleteRoleReq(req *protos.UserDeleteRoleReq, hctx wsHelpers.HandlerContext) ([]*protos.UserDeleteRoleResp, error) { if err := wsHelpers.CheckStringField(&req.UserId, "UserId", 5, wsHelpers.Auth0UserIdFieldMaxLength); err != nil { return nil, err } @@ -136,12 +139,15 @@ func HandleUserDeleteRoleReq(req *protos.UserDeleteRoleReq, hctx wsHelpers.Handl } err = auth0API.User.RemoveRoles(req.UserId, &management.Role{ID: &req.RoleId}) - return nil, err + if err != nil { + return nil, err + } + return []*protos.UserDeleteRoleResp{&protos.UserDeleteRoleResp{}}, err } // ///////////////////////////////////////////////////////////////////// // Getting all user roles -func HandleUserRoleListReq(req *protos.UserRoleListReq, hctx wsHelpers.HandlerContext) (*protos.UserRoleListResp, error) { +func HandleUserRoleListReq(req *protos.UserRoleListReq, hctx wsHelpers.HandlerContext) ([]*protos.UserRoleListResp, error) { auth0API, err := auth0login.InitAuth0ManagementAPI(hctx.Svcs.Config) if err != nil { return nil, err @@ -153,9 +159,9 @@ func HandleUserRoleListReq(req *protos.UserRoleListReq, hctx wsHelpers.HandlerCo return nil, err } - return &protos.UserRoleListResp{ + return []*protos.UserRoleListResp{&protos.UserRoleListResp{ Roles: makeRoleList(gotRoles), - }, nil + }}, nil } // ///////////////////////////////////////////////////////////////////// diff --git a/api/ws/handlers/user-notification-setting.go b/api/ws/handlers/user-notification-setting.go index b2d00a8d..55b58c87 100644 --- a/api/ws/handlers/user-notification-setting.go +++ b/api/ws/handlers/user-notification-setting.go @@ -11,18 +11,18 @@ import ( "go.mongodb.org/mongo-driver/bson" ) -func HandleUserNotificationSettingsReq(req *protos.UserNotificationSettingsReq, hctx wsHelpers.HandlerContext) (*protos.UserNotificationSettingsResp, error) { +func HandleUserNotificationSettingsReq(req *protos.UserNotificationSettingsReq, hctx wsHelpers.HandlerContext) ([]*protos.UserNotificationSettingsResp, error) { userDBItem, err := wsHelpers.GetDBUser(hctx.SessUser.User.Id, hctx.Svcs.MongoDB) if err != nil { return nil, err } - return &protos.UserNotificationSettingsResp{ + return []*protos.UserNotificationSettingsResp{&protos.UserNotificationSettingsResp{ Notifications: userDBItem.NotificationSettings, - }, nil + }}, nil } -func HandleUserNotificationSettingsWriteReq(req *protos.UserNotificationSettingsWriteReq, hctx wsHelpers.HandlerContext) (*protos.UserNotificationSettingsWriteResp, error) { +func HandleUserNotificationSettingsWriteReq(req *protos.UserNotificationSettingsWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.UserNotificationSettingsWriteResp, error) { if req.Notifications == nil || req.Notifications.TopicSettings == nil { return nil, errorwithstatus.MakeBadRequestError(errors.New("Notifications must be set")) } @@ -40,5 +40,5 @@ func HandleUserNotificationSettingsWriteReq(req *protos.UserNotificationSettings return nil, err } - return &protos.UserNotificationSettingsWriteResp{}, nil + return []*protos.UserNotificationSettingsWriteResp{&protos.UserNotificationSettingsWriteResp{}}, nil } diff --git a/api/ws/handlers/user.go b/api/ws/handlers/user.go index 05ffb0bc..15d70a9e 100644 --- a/api/ws/handlers/user.go +++ b/api/ws/handlers/user.go @@ -14,7 +14,7 @@ import ( "go.mongodb.org/mongo-driver/mongo" ) -func HandleUserDetailsReq(req *protos.UserDetailsReq, hctx wsHelpers.HandlerContext) (*protos.UserDetailsResp, error) { +func HandleUserDetailsReq(req *protos.UserDetailsReq, hctx wsHelpers.HandlerContext) ([]*protos.UserDetailsResp, error) { userDBItem, err := wsHelpers.GetDBUser(hctx.SessUser.User.Id, hctx.Svcs.MongoDB) if err != nil { return nil, err @@ -26,16 +26,16 @@ func HandleUserDetailsReq(req *protos.UserDetailsReq, hctx wsHelpers.HandlerCont // map doesn't help either! sort.Strings(perms) - return &protos.UserDetailsResp{ + return []*protos.UserDetailsResp{&protos.UserDetailsResp{ Details: &protos.UserDetails{ Info: userDBItem.Info, DataCollectionVersion: userDBItem.DataCollectionVersion, Permissions: perms, }, - }, nil + }}, nil } -func HandleUserDetailsWriteReq(req *protos.UserDetailsWriteReq, hctx wsHelpers.HandlerContext) (*protos.UserDetailsWriteResp, error) { +func HandleUserDetailsWriteReq(req *protos.UserDetailsWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.UserDetailsWriteResp, error) { if &req.Name != nil && req.Name != "" { if err := wsHelpers.CheckStringField(&req.Name, "Name", 1, 50); err != nil { return nil, err @@ -94,10 +94,10 @@ func HandleUserDetailsWriteReq(req *protos.UserDetailsWriteReq, hctx wsHelpers.H // TODO: Trigger user details update (?) - return &protos.UserDetailsWriteResp{}, nil + return []*protos.UserDetailsWriteResp{&protos.UserDetailsWriteResp{}}, nil } -func HandleUserSearchReq(req *protos.UserSearchReq, hctx wsHelpers.HandlerContext) (*protos.UserSearchResp, error) { +func HandleUserSearchReq(req *protos.UserSearchReq, hctx wsHelpers.HandlerContext) ([]*protos.UserSearchResp, error) { if err := wsHelpers.CheckStringField(&req.SearchString, "SearchString", 0, 100); err != nil { return nil, err } @@ -115,9 +115,9 @@ func HandleUserSearchReq(req *protos.UserSearchReq, hctx wsHelpers.HandlerContex if err != nil { if err == mongo.ErrNoDocuments { // Silent error, just return empty - return &protos.UserSearchResp{ + return []*protos.UserSearchResp{&protos.UserSearchResp{ Users: []*protos.UserInfo{}, - }, nil + }}, nil } return nil, err @@ -134,7 +134,7 @@ func HandleUserSearchReq(req *protos.UserSearchReq, hctx wsHelpers.HandlerContex users = append(users, user.Info) } - return &protos.UserSearchResp{ + return []*protos.UserSearchResp{&protos.UserSearchResp{ Users: users, - }, nil + }}, nil } diff --git a/api/ws/handlers/widget-data.go b/api/ws/handlers/widget-data.go index 538a7762..1af4662e 100644 --- a/api/ws/handlers/widget-data.go +++ b/api/ws/handlers/widget-data.go @@ -10,7 +10,7 @@ import ( "go.mongodb.org/mongo-driver/bson" ) -func HandleWidgetDataGetReq(req *protos.WidgetDataGetReq, hctx wsHelpers.HandlerContext) (*protos.WidgetDataGetResp, error) { +func HandleWidgetDataGetReq(req *protos.WidgetDataGetReq, hctx wsHelpers.HandlerContext) ([]*protos.WidgetDataGetResp, error) { result := hctx.Svcs.MongoDB.Collection(dbCollections.WidgetDataName).FindOne(context.TODO(), bson.M{ "_id": req.Id, }) @@ -25,12 +25,12 @@ func HandleWidgetDataGetReq(req *protos.WidgetDataGetReq, hctx wsHelpers.Handler return nil, err } - return &protos.WidgetDataGetResp{ + return []*protos.WidgetDataGetResp{&protos.WidgetDataGetResp{ WidgetData: widgetData, - }, nil + }}, nil } -func HandleWidgetDataWriteReq(req *protos.WidgetDataWriteReq, hctx wsHelpers.HandlerContext) (*protos.WidgetDataWriteResp, error) { +func HandleWidgetDataWriteReq(req *protos.WidgetDataWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.WidgetDataWriteResp, error) { if req.WidgetData.Id == "" { return nil, errors.New("widget data must have a predefined id to write to") } @@ -56,7 +56,7 @@ func HandleWidgetDataWriteReq(req *protos.WidgetDataWriteReq, hctx wsHelpers.Han return nil, err } - return &protos.WidgetDataWriteResp{ + return []*protos.WidgetDataWriteResp{&protos.WidgetDataWriteResp{ WidgetData: req.WidgetData, - }, nil + }}, nil } diff --git a/api/ws/ws.go b/api/ws/ws.go index 78031ec5..07be5bb0 100644 --- a/api/ws/ws.go +++ b/api/ws/ws.go @@ -165,24 +165,28 @@ func (ws *WSHandler) HandleMessage(s *melody.Session, msg []byte) { Svcs: ws.svcs, } - resp, err := ws.dispatchWSMessage(&wsmsg, ctx) + resps, err := ws.dispatchWSMessage(&wsmsg, ctx) if err != nil { fmt.Printf("HandleMessage: %v\n", err) } - if resp != nil { - // Set incoming message ID on the outgoing one - resp.MsgId = wsmsg.MsgId + if resps != nil && len(resps) > 0 { + for _, resp := range resps { + if resp != nil { + // Set incoming message ID on the outgoing one + resp.MsgId = wsmsg.MsgId - // Print out errors - if len(resp.ErrorText) > 0 { - fmt.Printf("Sending Response Error for msg id %v:\n %v\n", resp.MsgId-1, resp.ErrorText) - } + // Print out errors + if len(resp.ErrorText) > 0 { + fmt.Printf("Sending Response Error for msg id %v:\n %v\n", resp.MsgId-1, resp.ErrorText) + } - // Send - wsHelpers.SendForSession(s, resp) + // Send + wsHelpers.SendForSession(s, resp) + } + } } else { - fmt.Printf("WARNING: No response generated for request: %+v\n", resp) + fmt.Printf("WARNING: No response generated for request: %+v\n", wsmsg) } } diff --git a/api/ws/wsHelpers/db.go b/api/ws/wsHelpers/db.go index f4d52bf1..0138d6c0 100644 --- a/api/ws/wsHelpers/db.go +++ b/api/ws/wsHelpers/db.go @@ -14,7 +14,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/writeconcern" ) -func DeleteUserObject[T any](objectId string, objectType protos.ObjectType, collectionName string, hctx HandlerContext) (*T, error) { +func DeleteUserObject[T any](objectId string, objectType protos.ObjectType, collectionName string, hctx HandlerContext) ([]*T, error) { ctx := context.TODO() _, err := CheckObjectAccess(true, objectId, objectType, hctx) @@ -63,7 +63,7 @@ func DeleteUserObject[T any](objectId string, objectType protos.ObjectType, coll // Delete responses are just empty msgs var resp T - return &resp, nil + return []*T{&resp}, nil } func GetUserObjectById[T any](forEditing bool, objectId string, objectType protos.ObjectType, collectionName string, hctx HandlerContext) (*T, *protos.OwnershipItem, error) { diff --git a/data-formats b/data-formats index c37dd2d9..0c1eb61d 160000 --- a/data-formats +++ b/data-formats @@ -1 +1 @@ -Subproject commit c37dd2d94a6564c613c11906cc47ff71ad09ab65 +Subproject commit 0c1eb61d24cad830d9932b8222f90583eb9f3aaa From 9daa363a9dfe2e45f29dd922b4df8c43f33f2b74 Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Thu, 16 May 2024 13:59:30 +1000 Subject: [PATCH 03/17] Revert "Using new code gen, sending arrays of responses from each handler function, not just limiting to one. This allows spectrum to be broken into multiple response messages" This reverts commit bbe9db117a4d1f5809af33263b7b5a2f45b591d5. --- api/ws/handlers/detector-config.go | 12 +++--- api/ws/handlers/diffraction-detected-peak.go | 6 +-- api/ws/handlers/diffraction-manual.go | 18 ++++---- api/ws/handlers/diffraction-status.go | 18 ++++---- api/ws/handlers/doi.go | 12 +++--- api/ws/handlers/element-set.go | 20 ++++----- api/ws/handlers/export.go | 4 +- api/ws/handlers/expression-group.go | 20 ++++----- api/ws/handlers/expression.go | 40 +++++++++--------- api/ws/handlers/image-beam-location.go | 6 +-- api/ws/handlers/image-coreg.go | 6 +-- api/ws/handlers/image.go | 38 ++++++++--------- api/ws/handlers/log.go | 16 +++---- api/ws/handlers/memoisation.go | 12 +++--- api/ws/handlers/module.go | 24 +++++------ api/ws/handlers/notification.go | 14 +++---- api/ws/handlers/ownership-access.go | 12 +++--- api/ws/handlers/piquant.go | 26 ++++++------ api/ws/handlers/pseudo-intensities.go | 6 +-- api/ws/handlers/quantification-create.go | 6 +-- api/ws/handlers/quantification-management.go | 8 ++-- api/ws/handlers/quantification-multi.go | 26 ++++++------ api/ws/handlers/quantification-retrieval.go | 16 +++---- api/ws/handlers/quantification-upload.go | 4 +- api/ws/handlers/roi.go | 44 ++++++++++---------- api/ws/handlers/scan-beam-location.go | 6 +-- api/ws/handlers/scan-entry-metadata.go | 6 +-- api/ws/handlers/scan-entry.go | 6 +-- api/ws/handlers/scan.go | 44 ++++++++++---------- api/ws/handlers/screen-configuration.go | 24 +++++------ api/ws/handlers/selection-entry.go | 10 ++--- api/ws/handlers/selection-pixel.go | 10 ++--- api/ws/handlers/spectrum.go | 38 +++-------------- api/ws/handlers/tag.go | 14 ++++--- api/ws/handlers/test.go | 2 +- api/ws/handlers/user-group-admins.go | 12 +++--- api/ws/handlers/user-group-joining.go | 14 +++---- api/ws/handlers/user-group-management.go | 12 +++--- api/ws/handlers/user-group-membership.go | 24 +++++------ api/ws/handlers/user-group-retrieval.go | 18 ++++---- api/ws/handlers/user-management.go | 30 ++++++------- api/ws/handlers/user-notification-setting.go | 10 ++--- api/ws/handlers/user.go | 20 ++++----- api/ws/handlers/widget-data.go | 12 +++--- api/ws/ws.go | 26 +++++------- api/ws/wsHelpers/db.go | 4 +- data-formats | 2 +- 47 files changed, 362 insertions(+), 396 deletions(-) diff --git a/api/ws/handlers/detector-config.go b/api/ws/handlers/detector-config.go index e71c7cae..370fad30 100644 --- a/api/ws/handlers/detector-config.go +++ b/api/ws/handlers/detector-config.go @@ -11,7 +11,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleDetectorConfigReq(req *protos.DetectorConfigReq, hctx wsHelpers.HandlerContext) ([]*protos.DetectorConfigResp, error) { +func HandleDetectorConfigReq(req *protos.DetectorConfigReq, hctx wsHelpers.HandlerContext) (*protos.DetectorConfigResp, error) { if err := wsHelpers.CheckStringField(&req.Id, "Id", 1, 255); err != nil { return nil, err } @@ -21,13 +21,13 @@ func HandleDetectorConfigReq(req *protos.DetectorConfigReq, hctx wsHelpers.Handl return nil, err } - return []*protos.DetectorConfigResp{&protos.DetectorConfigResp{ + return &protos.DetectorConfigResp{ Config: cfg, PiquantConfigVersions: piquant.GetPiquantConfigVersions(hctx.Svcs, req.Id), - }}, nil + }, nil } -func HandleDetectorConfigListReq(req *protos.DetectorConfigListReq, hctx wsHelpers.HandlerContext) ([]*protos.DetectorConfigListResp, error) { +func HandleDetectorConfigListReq(req *protos.DetectorConfigListReq, hctx wsHelpers.HandlerContext) (*protos.DetectorConfigListResp, error) { coll := hctx.Svcs.MongoDB.Collection(dbCollections.DetectorConfigsName) filter := bson.D{} @@ -51,7 +51,7 @@ func HandleDetectorConfigListReq(req *protos.DetectorConfigListReq, hctx wsHelpe configList = append(configList, cfg.Id) } - return []*protos.DetectorConfigListResp{&protos.DetectorConfigListResp{ + return &protos.DetectorConfigListResp{ Configs: configList, - }}, nil + }, nil } diff --git a/api/ws/handlers/diffraction-detected-peak.go b/api/ws/handlers/diffraction-detected-peak.go index 3e10b12c..545549e5 100644 --- a/api/ws/handlers/diffraction-detected-peak.go +++ b/api/ws/handlers/diffraction-detected-peak.go @@ -8,7 +8,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleDetectedDiffractionPeaksReq(req *protos.DetectedDiffractionPeaksReq, hctx wsHelpers.HandlerContext) ([]*protos.DetectedDiffractionPeaksResp, error) { +func HandleDetectedDiffractionPeaksReq(req *protos.DetectedDiffractionPeaksReq, hctx wsHelpers.HandlerContext) (*protos.DetectedDiffractionPeaksResp, error) { // Because we're dealing in entry indexes (relative to the scan), we download the dataset.bin file here too // to get the totals, and to look up PMCs from diffraction DB exprPB, err := beginDatasetFileReq(req.ScanId, hctx) @@ -64,7 +64,7 @@ func HandleDetectedDiffractionPeaksReq(req *protos.DetectedDiffractionPeaksReq, } } - return []*protos.DetectedDiffractionPeaksResp{&protos.DetectedDiffractionPeaksResp{ + return &protos.DetectedDiffractionPeaksResp{ PeaksPerLocation: diffPerLoc, - }}, nil + }, nil } diff --git a/api/ws/handlers/diffraction-manual.go b/api/ws/handlers/diffraction-manual.go index cc485ef5..7a480438 100644 --- a/api/ws/handlers/diffraction-manual.go +++ b/api/ws/handlers/diffraction-manual.go @@ -14,7 +14,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleDiffractionPeakManualListReq(req *protos.DiffractionPeakManualListReq, hctx wsHelpers.HandlerContext) ([]*protos.DiffractionPeakManualListResp, error) { +func HandleDiffractionPeakManualListReq(req *protos.DiffractionPeakManualListReq, hctx wsHelpers.HandlerContext) (*protos.DiffractionPeakManualListResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -30,9 +30,9 @@ func HandleDiffractionPeakManualListReq(req *protos.DiffractionPeakManualListReq if err != nil { if err == mongo.ErrNoDocuments { // Silent error, just return empty - return []*protos.DiffractionPeakManualListResp{&protos.DiffractionPeakManualListResp{ + return &protos.DiffractionPeakManualListResp{ Peaks: map[string]*protos.ManualDiffractionPeak{}, - }}, nil + }, nil } return nil, err @@ -51,15 +51,15 @@ func HandleDiffractionPeakManualListReq(req *protos.DiffractionPeakManualListReq item.ScanId = "" // Also no point keeping this around, it was part of the request params } - return []*protos.DiffractionPeakManualListResp{&protos.DiffractionPeakManualListResp{ + return &protos.DiffractionPeakManualListResp{ Peaks: resultMap, - }}, nil + }, nil } // NOTE: ScanId isn't checked to see if it's a real scan upon insertion! // NOTE2: Insert ONLY! We generate an ID and insert into DB -func HandleDiffractionPeakManualInsertReq(req *protos.DiffractionPeakManualInsertReq, hctx wsHelpers.HandlerContext) ([]*protos.DiffractionPeakManualInsertResp, error) { +func HandleDiffractionPeakManualInsertReq(req *protos.DiffractionPeakManualInsertReq, hctx wsHelpers.HandlerContext) (*protos.DiffractionPeakManualInsertResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -91,10 +91,10 @@ func HandleDiffractionPeakManualInsertReq(req *protos.DiffractionPeakManualInser hctx.Svcs.Log.Errorf("Manual diffraction insertion expected InsertedID of %v, got %v", id, result.InsertedID) } - return []*protos.DiffractionPeakManualInsertResp{&protos.DiffractionPeakManualInsertResp{CreatedId: id}}, nil + return &protos.DiffractionPeakManualInsertResp{CreatedId: id}, nil } -func HandleDiffractionPeakManualDeleteReq(req *protos.DiffractionPeakManualDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.DiffractionPeakManualDeleteResp, error) { +func HandleDiffractionPeakManualDeleteReq(req *protos.DiffractionPeakManualDeleteReq, hctx wsHelpers.HandlerContext) (*protos.DiffractionPeakManualDeleteResp, error) { if err := wsHelpers.CheckStringField(&req.Id, "Id", 1, wsHelpers.IdFieldMaxLength*2+1); err != nil { return nil, err } @@ -114,5 +114,5 @@ func HandleDiffractionPeakManualDeleteReq(req *protos.DiffractionPeakManualDelet return nil, errorwithstatus.MakeNotFoundError(req.Id) } - return []*protos.DiffractionPeakManualDeleteResp{&protos.DiffractionPeakManualDeleteResp{}}, nil + return &protos.DiffractionPeakManualDeleteResp{}, nil } diff --git a/api/ws/handlers/diffraction-status.go b/api/ws/handlers/diffraction-status.go index d86d9efa..87f46b4a 100644 --- a/api/ws/handlers/diffraction-status.go +++ b/api/ws/handlers/diffraction-status.go @@ -12,7 +12,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleDiffractionPeakStatusListReq(req *protos.DiffractionPeakStatusListReq, hctx wsHelpers.HandlerContext) ([]*protos.DiffractionPeakStatusListResp, error) { +func HandleDiffractionPeakStatusListReq(req *protos.DiffractionPeakStatusListReq, hctx wsHelpers.HandlerContext) (*protos.DiffractionPeakStatusListResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -27,13 +27,13 @@ func HandleDiffractionPeakStatusListReq(req *protos.DiffractionPeakStatusListReq if dbResult.Err() != nil { if dbResult.Err() == mongo.ErrNoDocuments { // Silent error, just return empty - return []*protos.DiffractionPeakStatusListResp{&protos.DiffractionPeakStatusListResp{ + return &protos.DiffractionPeakStatusListResp{ PeakStatuses: &protos.DetectedDiffractionPeakStatuses{ Id: req.ScanId, ScanId: req.ScanId, Statuses: map[string]*protos.DetectedDiffractionPeakStatuses_PeakStatus{}, }, - }}, nil + }, nil } return nil, dbResult.Err() } @@ -44,14 +44,14 @@ func HandleDiffractionPeakStatusListReq(req *protos.DiffractionPeakStatusListReq return nil, err } - return []*protos.DiffractionPeakStatusListResp{&protos.DiffractionPeakStatusListResp{ + return &protos.DiffractionPeakStatusListResp{ PeakStatuses: &result, - }}, nil + }, nil } // NOTE: ScanId isn't checked to see if it's a real scan upon insertion! -func HandleDiffractionPeakStatusWriteReq(req *protos.DiffractionPeakStatusWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.DiffractionPeakStatusWriteResp, error) { +func HandleDiffractionPeakStatusWriteReq(req *protos.DiffractionPeakStatusWriteReq, hctx wsHelpers.HandlerContext) (*protos.DiffractionPeakStatusWriteResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -83,10 +83,10 @@ func HandleDiffractionPeakStatusWriteReq(req *protos.DiffractionPeakStatusWriteR hctx.Svcs.Log.Errorf("DiffractionPeakStatusWriteReq UpdateByID result had unexpected counts %+v", dbResult) } - return []*protos.DiffractionPeakStatusWriteResp{&protos.DiffractionPeakStatusWriteResp{}}, nil + return &protos.DiffractionPeakStatusWriteResp{}, nil } -func HandleDiffractionPeakStatusDeleteReq(req *protos.DiffractionPeakStatusDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.DiffractionPeakStatusDeleteResp, error) { +func HandleDiffractionPeakStatusDeleteReq(req *protos.DiffractionPeakStatusDeleteReq, hctx wsHelpers.HandlerContext) (*protos.DiffractionPeakStatusDeleteResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -110,5 +110,5 @@ func HandleDiffractionPeakStatusDeleteReq(req *protos.DiffractionPeakStatusDelet //hctx.Svcs.Log.Errorf("DiffractionPeakStatusDeleteReq UpdateByID result had unexpected counts %+v", dbResult) } - return []*protos.DiffractionPeakStatusDeleteResp{&protos.DiffractionPeakStatusDeleteResp{}}, nil + return &protos.DiffractionPeakStatusDeleteResp{}, nil } diff --git a/api/ws/handlers/doi.go b/api/ws/handlers/doi.go index e6ee2034..d4fbaa13 100644 --- a/api/ws/handlers/doi.go +++ b/api/ws/handlers/doi.go @@ -317,7 +317,7 @@ func PublishExpressionToZenodo(id string, output string, metadata *protos.DOIMet return publishResponse, nil } -func HandlePublishExpressionToZenodoReq(req *protos.PublishExpressionToZenodoReq, hctx wsHelpers.HandlerContext) ([]*protos.PublishExpressionToZenodoResp, error) { +func HandlePublishExpressionToZenodoReq(req *protos.PublishExpressionToZenodoReq, hctx wsHelpers.HandlerContext) (*protos.PublishExpressionToZenodoResp, error) { if hctx.Svcs.Config.EnvironmentName == "unittest" || hctx.Svcs.Config.EnvironmentName == "local" { http.DefaultTransport.(*http.Transport).TLSClientConfig = &tls.Config{InsecureSkipVerify: true} } @@ -360,19 +360,19 @@ func HandlePublishExpressionToZenodoReq(req *protos.PublishExpressionToZenodoReq return nil, err } - return []*protos.PublishExpressionToZenodoResp{&protos.PublishExpressionToZenodoResp{ + return &protos.PublishExpressionToZenodoResp{ Doi: &metadata, - }}, nil + }, nil } -func HandleZenodoDOIGetReq(req *protos.ZenodoDOIGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ZenodoDOIGetResp, error) { +func HandleZenodoDOIGetReq(req *protos.ZenodoDOIGetReq, hctx wsHelpers.HandlerContext) (*protos.ZenodoDOIGetResp, error) { metadata := &protos.DOIMetadata{} err := hctx.Svcs.MongoDB.Collection(dbCollections.DOIName).FindOne(context.TODO(), bson.D{{Key: "_id", Value: req.Id}}).Decode(&metadata) if err != nil { return nil, err } - return []*protos.ZenodoDOIGetResp{&protos.ZenodoDOIGetResp{ + return &protos.ZenodoDOIGetResp{ Doi: metadata, - }}, nil + }, nil } diff --git a/api/ws/handlers/element-set.go b/api/ws/handlers/element-set.go index a7dde07f..b8aa244d 100644 --- a/api/ws/handlers/element-set.go +++ b/api/ws/handlers/element-set.go @@ -16,23 +16,23 @@ import ( "go.mongodb.org/mongo-driver/mongo/writeconcern" ) -func HandleElementSetDeleteReq(req *protos.ElementSetDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.ElementSetDeleteResp, error) { +func HandleElementSetDeleteReq(req *protos.ElementSetDeleteReq, hctx wsHelpers.HandlerContext) (*protos.ElementSetDeleteResp, error) { return wsHelpers.DeleteUserObject[protos.ElementSetDeleteResp](req.Id, protos.ObjectType_OT_ELEMENT_SET, dbCollections.ElementSetsName, hctx) } -func HandleElementSetGetReq(req *protos.ElementSetGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ElementSetGetResp, error) { +func HandleElementSetGetReq(req *protos.ElementSetGetReq, hctx wsHelpers.HandlerContext) (*protos.ElementSetGetResp, error) { dbItem, owner, err := wsHelpers.GetUserObjectById[protos.ElementSet](false, req.Id, protos.ObjectType_OT_ELEMENT_SET, dbCollections.ElementSetsName, hctx) if err != nil { return nil, err } dbItem.Owner = wsHelpers.MakeOwnerSummary(owner, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) - return []*protos.ElementSetGetResp{&protos.ElementSetGetResp{ + return &protos.ElementSetGetResp{ ElementSet: dbItem, - }}, nil + }, nil } -func HandleElementSetListReq(req *protos.ElementSetListReq, hctx wsHelpers.HandlerContext) ([]*protos.ElementSetListResp, error) { +func HandleElementSetListReq(req *protos.ElementSetListReq, hctx wsHelpers.HandlerContext) (*protos.ElementSetListResp, error) { idToOwner, err := wsHelpers.ListAccessibleIDs(false, protos.ObjectType_OT_ELEMENT_SET, hctx.Svcs, hctx.SessUser) if err != nil { return nil, err @@ -75,9 +75,9 @@ func HandleElementSetListReq(req *protos.ElementSetListReq, hctx wsHelpers.Handl itemMap[item.Id] = summary } - return []*protos.ElementSetListResp{&protos.ElementSetListResp{ + return &protos.ElementSetListResp{ ElementSets: itemMap, - }}, nil + }, nil } func validateElementSet(elementSet *protos.ElementSet) error { @@ -183,7 +183,7 @@ func updateElementSet(elementSet *protos.ElementSet, hctx wsHelpers.HandlerConte return dbItem, nil } -func HandleElementSetWriteReq(req *protos.ElementSetWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ElementSetWriteResp, error) { +func HandleElementSetWriteReq(req *protos.ElementSetWriteReq, hctx wsHelpers.HandlerContext) (*protos.ElementSetWriteResp, error) { // Owner should never be accepted from API if req.ElementSet.Owner != nil { return nil, errorwithstatus.MakeBadRequestError(errors.New("Owner must be empty for write messages")) @@ -201,7 +201,7 @@ func HandleElementSetWriteReq(req *protos.ElementSetWriteReq, hctx wsHelpers.Han return nil, err } - return []*protos.ElementSetWriteResp{&protos.ElementSetWriteResp{ + return &protos.ElementSetWriteResp{ ElementSet: item, - }}, nil + }, nil } diff --git a/api/ws/handlers/export.go b/api/ws/handlers/export.go index d342c374..4c336496 100644 --- a/api/ws/handlers/export.go +++ b/api/ws/handlers/export.go @@ -12,7 +12,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleExportFilesReq(req *protos.ExportFilesReq, hctx wsHelpers.HandlerContext) ([]*protos.ExportFilesResp, error) { +func HandleExportFilesReq(req *protos.ExportFilesReq, hctx wsHelpers.HandlerContext) (*protos.ExportFilesResp, error) { if len(req.ExportTypes) <= 0 { return nil, errors.New("no export types specified") } @@ -62,5 +62,5 @@ func HandleExportFilesReq(req *protos.ExportFilesReq, hctx wsHelpers.HandlerCont } } - return []*protos.ExportFilesResp{&protos.ExportFilesResp{Files: files}}, nil + return &protos.ExportFilesResp{Files: files}, nil } diff --git a/api/ws/handlers/expression-group.go b/api/ws/handlers/expression-group.go index c89faa98..69fec35d 100644 --- a/api/ws/handlers/expression-group.go +++ b/api/ws/handlers/expression-group.go @@ -16,11 +16,11 @@ import ( "go.mongodb.org/mongo-driver/mongo/writeconcern" ) -func HandleExpressionGroupDeleteReq(req *protos.ExpressionGroupDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionGroupDeleteResp, error) { +func HandleExpressionGroupDeleteReq(req *protos.ExpressionGroupDeleteReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionGroupDeleteResp, error) { return wsHelpers.DeleteUserObject[protos.ExpressionGroupDeleteResp](req.Id, protos.ObjectType_OT_EXPRESSION_GROUP, dbCollections.ExpressionGroupsName, hctx) } -func HandleExpressionGroupListReq(req *protos.ExpressionGroupListReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionGroupListResp, error) { +func HandleExpressionGroupListReq(req *protos.ExpressionGroupListReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionGroupListResp, error) { filter, idToOwner, err := wsHelpers.MakeFilter(req.SearchParams, false, protos.ObjectType_OT_EXPRESSION_GROUP, hctx) if err != nil { return nil, err @@ -47,21 +47,21 @@ func HandleExpressionGroupListReq(req *protos.ExpressionGroupListReq, hctx wsHel itemMap[item.Id] = item } - return []*protos.ExpressionGroupListResp{&protos.ExpressionGroupListResp{ + return &protos.ExpressionGroupListResp{ Groups: itemMap, - }}, nil + }, nil } -func HandleExpressionGroupGetReq(req *protos.ExpressionGroupGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionGroupGetResp, error) { +func HandleExpressionGroupGetReq(req *protos.ExpressionGroupGetReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionGroupGetResp, error) { dbItem, owner, err := wsHelpers.GetUserObjectById[protos.ExpressionGroup](false, req.Id, protos.ObjectType_OT_EXPRESSION_GROUP, dbCollections.ExpressionGroupsName, hctx) if err != nil { return nil, err } dbItem.Owner = wsHelpers.MakeOwnerSummary(owner, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) - return []*protos.ExpressionGroupGetResp{&protos.ExpressionGroupGetResp{ + return &protos.ExpressionGroupGetResp{ Group: dbItem, - }}, nil + }, nil } func validateExpressionGroup(egroup *protos.ExpressionGroup) error { @@ -198,7 +198,7 @@ func updateExpressionGroup(egroup *protos.ExpressionGroup, hctx wsHelpers.Handle return dbItem, nil } -func HandleExpressionGroupWriteReq(req *protos.ExpressionGroupWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionGroupWriteResp, error) { +func HandleExpressionGroupWriteReq(req *protos.ExpressionGroupWriteReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionGroupWriteResp, error) { // Owner should never be accepted from API if req.Group.Owner != nil { return nil, errorwithstatus.MakeBadRequestError(errors.New("Owner must be empty for write messages")) @@ -216,7 +216,7 @@ func HandleExpressionGroupWriteReq(req *protos.ExpressionGroupWriteReq, hctx wsH return nil, err } - return []*protos.ExpressionGroupWriteResp{&protos.ExpressionGroupWriteResp{ + return &protos.ExpressionGroupWriteResp{ Group: item, - }}, nil + }, nil } diff --git a/api/ws/handlers/expression.go b/api/ws/handlers/expression.go index 6b6ae35f..cf36cdf1 100644 --- a/api/ws/handlers/expression.go +++ b/api/ws/handlers/expression.go @@ -15,23 +15,23 @@ import ( "go.mongodb.org/mongo-driver/mongo/writeconcern" ) -func HandleExpressionGetReq(req *protos.ExpressionGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionGetResp, error) { +func HandleExpressionGetReq(req *protos.ExpressionGetReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionGetResp, error) { dbItem, owner, err := wsHelpers.GetUserObjectById[protos.DataExpression](false, req.Id, protos.ObjectType_OT_EXPRESSION, dbCollections.ExpressionsName, hctx) if err != nil { return nil, err } dbItem.Owner = wsHelpers.MakeOwnerSummary(owner, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) - return []*protos.ExpressionGetResp{&protos.ExpressionGetResp{ + return &protos.ExpressionGetResp{ Expression: dbItem, - }}, nil + }, nil } -func HandleExpressionDeleteReq(req *protos.ExpressionDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionDeleteResp, error) { +func HandleExpressionDeleteReq(req *protos.ExpressionDeleteReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionDeleteResp, error) { return wsHelpers.DeleteUserObject[protos.ExpressionDeleteResp](req.Id, protos.ObjectType_OT_EXPRESSION, dbCollections.ExpressionsName, hctx) } -func HandleExpressionListReq(req *protos.ExpressionListReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionListResp, error) { +func HandleExpressionListReq(req *protos.ExpressionListReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionListResp, error) { filter, idToOwner, err := wsHelpers.MakeFilter(req.SearchParams, false, protos.ObjectType_OT_EXPRESSION, hctx) if err != nil { return nil, err @@ -68,9 +68,9 @@ func HandleExpressionListReq(req *protos.ExpressionListReq, hctx wsHelpers.Handl itemMap[item.Id] = item } - return []*protos.ExpressionListResp{&protos.ExpressionListResp{ + return &protos.ExpressionListResp{ Expressions: itemMap, - }}, nil + }, nil } func validateExpression(expr *protos.DataExpression) error { @@ -211,7 +211,7 @@ func updateExpression(expr *protos.DataExpression, hctx wsHelpers.HandlerContext return dbItem, nil } -func HandleExpressionWriteReq(req *protos.ExpressionWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionWriteResp, error) { +func HandleExpressionWriteReq(req *protos.ExpressionWriteReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionWriteResp, error) { // Owner should never be accepted from API if req.Expression.Owner != nil { return nil, errorwithstatus.MakeBadRequestError(errors.New("Owner must be empty for write messages")) @@ -229,12 +229,12 @@ func HandleExpressionWriteReq(req *protos.ExpressionWriteReq, hctx wsHelpers.Han return nil, err } - return []*protos.ExpressionWriteResp{&protos.ExpressionWriteResp{ + return &protos.ExpressionWriteResp{ Expression: item, - }}, nil + }, nil } -func HandleExpressionWriteExecStatReq(req *protos.ExpressionWriteExecStatReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionWriteExecStatResp, error) { +func HandleExpressionWriteExecStatReq(req *protos.ExpressionWriteExecStatReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionWriteExecStatResp, error) { // Validate request if err := wsHelpers.CheckStringField(&req.Id, "Id", 0, wsHelpers.IdFieldMaxLength); err != nil { return nil, err @@ -270,14 +270,14 @@ func HandleExpressionWriteExecStatReq(req *protos.ExpressionWriteExecStatReq, hc hctx.Svcs.Log.Errorf("DataExpression ExecStatWrite UpdateByID result had unexpected counts %+v id: %v", result, req.Id) } - return []*protos.ExpressionWriteExecStatResp{&protos.ExpressionWriteExecStatResp{}}, nil + return &protos.ExpressionWriteExecStatResp{}, nil } func formExpressionDisplaySettingsID(user *protos.UserInfo, expressionId string) string { return user.Id + "-" + expressionId } -func HandleExpressionDisplaySettingsGetReq(req *protos.ExpressionDisplaySettingsGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionDisplaySettingsGetResp, error) { +func HandleExpressionDisplaySettingsGetReq(req *protos.ExpressionDisplaySettingsGetReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionDisplaySettingsGetResp, error) { // Validate request if len(req.Id) <= 0 { return nil, errorwithstatus.MakeBadRequestError(errors.New("Expression ID must be specified")) @@ -294,19 +294,19 @@ func HandleExpressionDisplaySettingsGetReq(req *protos.ExpressionDisplaySettings err := hctx.Svcs.MongoDB.Collection(dbCollections.UserExpressionDisplaySettings).FindOne(context.Background(), bson.M{"_id": displaySettingsId}).Decode(&displaySettings) if err != nil { // We don't care about errors. If it doesn't exist, we just return a blank one - return []*protos.ExpressionDisplaySettingsGetResp{&protos.ExpressionDisplaySettingsGetResp{ + return &protos.ExpressionDisplaySettingsGetResp{ DisplaySettings: &protos.ExpressionDisplaySettings{Id: req.Id}, - }}, nil + }, nil } // Set the ID back before returning it displaySettings.Id = req.Id - return []*protos.ExpressionDisplaySettingsGetResp{&protos.ExpressionDisplaySettingsGetResp{ + return &protos.ExpressionDisplaySettingsGetResp{ DisplaySettings: displaySettings, - }}, nil + }, nil } -func HandleExpressionDisplaySettingsWriteReq(req *protos.ExpressionDisplaySettingsWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ExpressionDisplaySettingsWriteResp, error) { +func HandleExpressionDisplaySettingsWriteReq(req *protos.ExpressionDisplaySettingsWriteReq, hctx wsHelpers.HandlerContext) (*protos.ExpressionDisplaySettingsWriteResp, error) { if len(req.Id) <= 0 { return nil, errorwithstatus.MakeBadRequestError(errors.New("Expression ID must be specified")) } @@ -376,7 +376,7 @@ func HandleExpressionDisplaySettingsWriteReq(req *protos.ExpressionDisplaySettin return nil, err } - return []*protos.ExpressionDisplaySettingsWriteResp{&protos.ExpressionDisplaySettingsWriteResp{ + return &protos.ExpressionDisplaySettingsWriteResp{ DisplaySettings: req.DisplaySettings, - }}, nil + }, nil } diff --git a/api/ws/handlers/image-beam-location.go b/api/ws/handlers/image-beam-location.go index 680b46ab..6e001aa9 100644 --- a/api/ws/handlers/image-beam-location.go +++ b/api/ws/handlers/image-beam-location.go @@ -14,7 +14,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleImageBeamLocationsReq(req *protos.ImageBeamLocationsReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageBeamLocationsResp, error) { +func HandleImageBeamLocationsReq(req *protos.ImageBeamLocationsReq, hctx wsHelpers.HandlerContext) (*protos.ImageBeamLocationsResp, error) { ctx := context.TODO() var locs *protos.ImageLocations @@ -83,9 +83,9 @@ func HandleImageBeamLocationsReq(req *protos.ImageBeamLocationsReq, hctx wsHelpe } // Return the coordinates from DB record - return []*protos.ImageBeamLocationsResp{&protos.ImageBeamLocationsResp{ + return &protos.ImageBeamLocationsResp{ Locations: locs, - }}, nil + }, nil } func generateIJs(imageName string, scanId string, instrument protos.ScanInstrument, hctx wsHelpers.HandlerContext) (*protos.ImageLocations, error) { diff --git a/api/ws/handlers/image-coreg.go b/api/ws/handlers/image-coreg.go index bba2ea45..597a9737 100644 --- a/api/ws/handlers/image-coreg.go +++ b/api/ws/handlers/image-coreg.go @@ -6,7 +6,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleImportMarsViewerImageReq(req *protos.ImportMarsViewerImageReq, hctx wsHelpers.HandlerContext) ([]*protos.ImportMarsViewerImageResp, error) { +func HandleImportMarsViewerImageReq(req *protos.ImportMarsViewerImageReq, hctx wsHelpers.HandlerContext) (*protos.ImportMarsViewerImageResp, error) { jobId := "" var err error @@ -15,7 +15,7 @@ func HandleImportMarsViewerImageReq(req *protos.ImportMarsViewerImageReq, hctx w return nil, err } - return []*protos.ImportMarsViewerImageResp{&protos.ImportMarsViewerImageResp{ + return &protos.ImportMarsViewerImageResp{ JobId: jobId, - }}, nil + }, nil } diff --git a/api/ws/handlers/image.go b/api/ws/handlers/image.go index 85b3753c..6ed4d35b 100644 --- a/api/ws/handlers/image.go +++ b/api/ws/handlers/image.go @@ -19,7 +19,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleImageListReq(req *protos.ImageListReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageListResp, error) { +func HandleImageListReq(req *protos.ImageListReq, hctx wsHelpers.HandlerContext) (*protos.ImageListResp, error) { if err := wsHelpers.CheckFieldLength(req.ScanIds, "ScanIds", 1, 10); err != nil { return nil, err } @@ -54,12 +54,12 @@ func HandleImageListReq(req *protos.ImageListReq, hctx wsHelpers.HandlerContext) return nil, err } - return []*protos.ImageListResp{&protos.ImageListResp{ + return &protos.ImageListResp{ Images: items, - }}, nil + }, nil } -func HandleImageGetReq(req *protos.ImageGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageGetResp, error) { +func HandleImageGetReq(req *protos.ImageGetReq, hctx wsHelpers.HandlerContext) (*protos.ImageGetResp, error) { if err := wsHelpers.CheckStringField(&req.ImageName, "ImageName", 1, 255); err != nil { return nil, err } @@ -107,19 +107,19 @@ func HandleImageGetReq(req *protos.ImageGetReq, hctx wsHelpers.HandlerContext) ( } } - return []*protos.ImageGetResp{&protos.ImageGetResp{ + return &protos.ImageGetResp{ Image: &img, - }}, nil + }, nil } -func HandleImageGetDefaultReq(req *protos.ImageGetDefaultReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageGetDefaultResp, error) { +func HandleImageGetDefaultReq(req *protos.ImageGetDefaultReq, hctx wsHelpers.HandlerContext) (*protos.ImageGetDefaultResp, error) { /*if err := wsHelpers.CheckFieldLength(req.ScanIds, "ScanIds", 1, 10); err != nil { return nil, err }*/ if len(req.ScanIds) <= 0 { - return []*protos.ImageGetDefaultResp{&protos.ImageGetDefaultResp{ + return &protos.ImageGetDefaultResp{ DefaultImagesPerScanId: map[string]string{}, - }}, nil + }, nil } // Check that the user has access to all the scans in question @@ -152,12 +152,12 @@ func HandleImageGetDefaultReq(req *protos.ImageGetDefaultReq, hctx wsHelpers.Han result[item.ScanId] = item.DefaultImageFileName } - return []*protos.ImageGetDefaultResp{&protos.ImageGetDefaultResp{ + return &protos.ImageGetDefaultResp{ DefaultImagesPerScanId: result, - }}, nil + }, nil } -func HandleImageSetDefaultReq(req *protos.ImageSetDefaultReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageSetDefaultResp, error) { +func HandleImageSetDefaultReq(req *protos.ImageSetDefaultReq, hctx wsHelpers.HandlerContext) (*protos.ImageSetDefaultResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -198,10 +198,10 @@ func HandleImageSetDefaultReq(req *protos.ImageSetDefaultReq, hctx wsHelpers.Han // Send out notifications so caches can be cleared hctx.Svcs.Notifier.SysNotifyScanImagesChanged([]string{req.ScanId}) - return []*protos.ImageSetDefaultResp{&protos.ImageSetDefaultResp{}}, nil + return &protos.ImageSetDefaultResp{}, nil } -func HandleImageDeleteReq(req *protos.ImageDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageDeleteResp, error) { +func HandleImageDeleteReq(req *protos.ImageDeleteReq, hctx wsHelpers.HandlerContext) (*protos.ImageDeleteResp, error) { if err := wsHelpers.CheckStringField(&req.Name, "Name", 1, 255); err != nil { return nil, err } @@ -291,10 +291,10 @@ func HandleImageDeleteReq(req *protos.ImageDeleteReq, hctx wsHelpers.HandlerCont hctx.Svcs.Notifier.SysNotifyScanImagesChanged(scanIds) - return []*protos.ImageDeleteResp{&protos.ImageDeleteResp{}}, nil + return &protos.ImageDeleteResp{}, nil } -func HandleImageUploadReq(req *protos.ImageUploadReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageUploadResp, error) { +func HandleImageUploadReq(req *protos.ImageUploadReq, hctx wsHelpers.HandlerContext) (*protos.ImageUploadResp, error) { if err := wsHelpers.CheckStringField(&req.Name, "Name", 1, 255); err != nil { return nil, err } @@ -428,10 +428,10 @@ func HandleImageUploadReq(req *protos.ImageUploadReq, hctx wsHelpers.HandlerCont hctx.Svcs.Notifier.NotifyNewScanImage(req.OriginScanId, req.OriginScanId, scanImage.ImagePath) hctx.Svcs.Notifier.SysNotifyScanImagesChanged([]string{req.OriginScanId}) - return []*protos.ImageUploadResp{&protos.ImageUploadResp{}}, nil + return &protos.ImageUploadResp{}, nil } -func HandleImageSetMatchTransformReq(req *protos.ImageSetMatchTransformReq, hctx wsHelpers.HandlerContext) ([]*protos.ImageSetMatchTransformResp, error) { +func HandleImageSetMatchTransformReq(req *protos.ImageSetMatchTransformReq, hctx wsHelpers.HandlerContext) (*protos.ImageSetMatchTransformResp, error) { if err := wsHelpers.CheckStringField(&req.ImageName, "ImageName", 1, 255); err != nil { return nil, err } @@ -503,5 +503,5 @@ func HandleImageSetMatchTransformReq(req *protos.ImageSetMatchTransformReq, hctx hctx.Svcs.Log.Errorf("ImageSetMatchTransformReq update result had unexpected match count %+v imageName: %v", updResult, req.ImageName) } - return []*protos.ImageSetMatchTransformResp{&protos.ImageSetMatchTransformResp{}}, nil + return &protos.ImageSetMatchTransformResp{}, nil } diff --git a/api/ws/handlers/log.go b/api/ws/handlers/log.go index d556208c..993b43a8 100644 --- a/api/ws/handlers/log.go +++ b/api/ws/handlers/log.go @@ -16,7 +16,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleLogReadReq(req *protos.LogReadReq, hctx wsHelpers.HandlerContext) ([]*protos.LogReadResp, error) { +func HandleLogReadReq(req *protos.LogReadReq, hctx wsHelpers.HandlerContext) (*protos.LogReadResp, error) { if err := wsHelpers.CheckStringField(&req.LogStreamId, "LogStreamId", 1, 512); err != nil { return nil, err } @@ -35,23 +35,23 @@ func HandleLogReadReq(req *protos.LogReadReq, hctx wsHelpers.HandlerContext) ([] } } - return []*protos.LogReadResp{&protos.LogReadResp{ + return &protos.LogReadResp{ Entries: logs, - }}, nil + }, nil } -func HandleLogGetLevelReq(req *protos.LogGetLevelReq, hctx wsHelpers.HandlerContext) ([]*protos.LogGetLevelResp, error) { +func HandleLogGetLevelReq(req *protos.LogGetLevelReq, hctx wsHelpers.HandlerContext) (*protos.LogGetLevelResp, error) { name, err := logger.GetLogLevelName(hctx.Svcs.Log.GetLogLevel()) if err != nil { return nil, err } - return []*protos.LogGetLevelResp{&protos.LogGetLevelResp{ + return &protos.LogGetLevelResp{ LogLevelId: name, - }}, nil + }, nil } -func HandleLogSetLevelReq(req *protos.LogSetLevelReq, hctx wsHelpers.HandlerContext) ([]*protos.LogSetLevelResp, error) { +func HandleLogSetLevelReq(req *protos.LogSetLevelReq, hctx wsHelpers.HandlerContext) (*protos.LogSetLevelResp, error) { if err := wsHelpers.CheckStringField(&req.LogLevelId, "LogLevelId", 1, 10); err != nil { return nil, err } @@ -67,7 +67,7 @@ func HandleLogSetLevelReq(req *protos.LogSetLevelReq, hctx wsHelpers.HandlerCont // Not really an error, but we log in this level to ensure it always gets printed hctx.Svcs.Log.Errorf("User %v request changed log level to: %v", hctx.SessUser.User.Id, req.LogLevelId) - return []*protos.LogSetLevelResp{&protos.LogSetLevelResp{LogLevelId: req.LogLevelId}}, nil + return &protos.LogSetLevelResp{LogLevelId: req.LogLevelId}, nil } var cloudwatchSvc *cloudwatchlogs.CloudWatchLogs = nil diff --git a/api/ws/handlers/memoisation.go b/api/ws/handlers/memoisation.go index cc33f60d..4cd61f76 100644 --- a/api/ws/handlers/memoisation.go +++ b/api/ws/handlers/memoisation.go @@ -13,7 +13,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleMemoiseGetReq(req *protos.MemoiseGetReq, hctx wsHelpers.HandlerContext) ([]*protos.MemoiseGetResp, error) { +func HandleMemoiseGetReq(req *protos.MemoiseGetReq, hctx wsHelpers.HandlerContext) (*protos.MemoiseGetResp, error) { // Read from DB, if not there, fail. We do limit key sizes though if err := wsHelpers.CheckStringField(&req.Key, "Key", 1, 1024); err != nil { return nil, err @@ -36,12 +36,12 @@ func HandleMemoiseGetReq(req *protos.MemoiseGetReq, hctx wsHelpers.HandlerContex return nil, err } - return []*protos.MemoiseGetResp{&protos.MemoiseGetResp{ + return &protos.MemoiseGetResp{ Item: item, - }}, nil + }, nil } -func HandleMemoiseWriteReq(req *protos.MemoiseWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.MemoiseWriteResp, error) { +func HandleMemoiseWriteReq(req *protos.MemoiseWriteReq, hctx wsHelpers.HandlerContext) (*protos.MemoiseWriteResp, error) { // Here we overwrite freely, but we do limit key sizes though if err := wsHelpers.CheckStringField(&req.Key, "Key", 1, 1024); err != nil { return nil, err @@ -70,7 +70,7 @@ func HandleMemoiseWriteReq(req *protos.MemoiseWriteReq, hctx wsHelpers.HandlerCo hctx.Svcs.Log.Errorf("MemoiseWriteReq for: %v got unexpected DB write result: %+v", req.Key, result) } - return []*protos.MemoiseWriteResp{&protos.MemoiseWriteResp{ + return &protos.MemoiseWriteResp{ MemoTimeUnixSec: timestamp, - }}, nil + }, nil } diff --git a/api/ws/handlers/module.go b/api/ws/handlers/module.go index 445e450f..87346ffb 100644 --- a/api/ws/handlers/module.go +++ b/api/ws/handlers/module.go @@ -19,7 +19,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/writeconcern" ) -func HandleDataModuleGetReq(req *protos.DataModuleGetReq, hctx wsHelpers.HandlerContext) ([]*protos.DataModuleGetResp, error) { +func HandleDataModuleGetReq(req *protos.DataModuleGetReq, hctx wsHelpers.HandlerContext) (*protos.DataModuleGetResp, error) { dbItem, owner, err := wsHelpers.GetUserObjectById[protos.DataModuleDB](false, req.Id, protos.ObjectType_OT_DATA_MODULE, dbCollections.ModulesName, hctx) if err != nil { return nil, err @@ -78,12 +78,12 @@ func HandleDataModuleGetReq(req *protos.DataModuleGetReq, hctx wsHelpers.Handler module.Versions = append(module.Versions, moduleVersion) } - return []*protos.DataModuleGetResp{&protos.DataModuleGetResp{ + return &protos.DataModuleGetResp{ Module: module, - }}, nil + }, nil } -func HandleDataModuleListReq(req *protos.DataModuleListReq, hctx wsHelpers.HandlerContext) ([]*protos.DataModuleListResp, error) { +func HandleDataModuleListReq(req *protos.DataModuleListReq, hctx wsHelpers.HandlerContext) (*protos.DataModuleListResp, error) { idToOwner, err := wsHelpers.ListAccessibleIDs(false, protos.ObjectType_OT_DATA_MODULE, hctx.Svcs, hctx.SessUser) if err != nil { return nil, err @@ -137,9 +137,9 @@ func HandleDataModuleListReq(req *protos.DataModuleListReq, hctx wsHelpers.Handl itemMap[item.Id] = itemWire } - return []*protos.DataModuleListResp{&protos.DataModuleListResp{ + return &protos.DataModuleListResp{ Modules: itemMap, - }}, nil + }, nil } func getModuleVersion(moduleID string, version *protos.SemanticVersion, db *mongo.Database) (*protos.DataModuleVersion, error) { @@ -386,7 +386,7 @@ func updateModule(id string, name string, comments string, hctx wsHelpers.Handle return result, nil } -func HandleDataModuleWriteReq(req *protos.DataModuleWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.DataModuleWriteResp, error) { +func HandleDataModuleWriteReq(req *protos.DataModuleWriteReq, hctx wsHelpers.HandlerContext) (*protos.DataModuleWriteResp, error) { var item *protos.DataModule var err error @@ -403,9 +403,9 @@ func HandleDataModuleWriteReq(req *protos.DataModuleWriteReq, hctx wsHelpers.Han return nil, err } - return []*protos.DataModuleWriteResp{&protos.DataModuleWriteResp{ + return &protos.DataModuleWriteResp{ Module: item, - }}, nil + }, nil } // Some validation functions @@ -423,7 +423,7 @@ func isValidModuleName(name string) bool { return match } -func HandleDataModuleAddVersionReq(req *protos.DataModuleAddVersionReq, hctx wsHelpers.HandlerContext) ([]*protos.DataModuleAddVersionResp, error) { +func HandleDataModuleAddVersionReq(req *protos.DataModuleAddVersionReq, hctx wsHelpers.HandlerContext) (*protos.DataModuleAddVersionResp, error) { // Check that the version update field is a valid value if !utils.ItemInSlice(req.VersionUpdate, []protos.VersionField{protos.VersionField_MV_MAJOR, protos.VersionField_MV_MINOR, protos.VersionField_MV_PATCH}) { return nil, fmt.Errorf("Invalid version update field: %v", req.VersionUpdate) @@ -533,7 +533,7 @@ func HandleDataModuleAddVersionReq(req *protos.DataModuleAddVersionReq, hctx wsH module.Versions = append(module.Versions, returnVersion) } - return []*protos.DataModuleAddVersionResp{&protos.DataModuleAddVersionResp{ + return &protos.DataModuleAddVersionResp{ Module: module, - }}, nil + }, nil } diff --git a/api/ws/handlers/notification.go b/api/ws/handlers/notification.go index 94118348..59a83408 100644 --- a/api/ws/handlers/notification.go +++ b/api/ws/handlers/notification.go @@ -12,7 +12,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleNotificationReq(req *protos.NotificationReq, hctx wsHelpers.HandlerContext) ([]*protos.NotificationResp, error) { +func HandleNotificationReq(req *protos.NotificationReq, hctx wsHelpers.HandlerContext) (*protos.NotificationResp, error) { // Triggers a "subscription" to receive updates containing notifications for the session user // Could implement a "silent" mode, specify param in request, tell API to not send notifications for a certain period @@ -36,12 +36,12 @@ func HandleNotificationReq(req *protos.NotificationReq, hctx wsHelpers.HandlerCo } // Return the outstanding notifications - return []*protos.NotificationResp{&protos.NotificationResp{ + return &protos.NotificationResp{ Notification: notifications, - }}, nil + }, nil } -func HandleNotificationDismissReq(req *protos.NotificationDismissReq, hctx wsHelpers.HandlerContext) ([]*protos.NotificationDismissResp, error) { +func HandleNotificationDismissReq(req *protos.NotificationDismissReq, hctx wsHelpers.HandlerContext) (*protos.NotificationDismissResp, error) { // Find this in the DB and clear it if err := wsHelpers.CheckStringField(&req.Id, "Id", 1, wsHelpers.IdFieldMaxLength*2); err != nil { return nil, err @@ -56,10 +56,10 @@ func HandleNotificationDismissReq(req *protos.NotificationDismissReq, hctx wsHel return nil, err } - return []*protos.NotificationDismissResp{&protos.NotificationDismissResp{}}, nil + return &protos.NotificationDismissResp{}, nil } -func HandleSendUserNotificationReq(req *protos.SendUserNotificationReq, hctx wsHelpers.HandlerContext) ([]*protos.SendUserNotificationResp, error) { +func HandleSendUserNotificationReq(req *protos.SendUserNotificationReq, hctx wsHelpers.HandlerContext) (*protos.SendUserNotificationResp, error) { // Send from a user, need to define destination, could be group/user ids? // Probably messaging, subject+content, can send as email if not connected? // Think of load balance issue with multiple APIs running @@ -109,5 +109,5 @@ func HandleSendUserNotificationReq(req *protos.SendUserNotificationReq, hctx wsH ) } - return []*protos.SendUserNotificationResp{&protos.SendUserNotificationResp{}}, nil + return &protos.SendUserNotificationResp{}, nil } diff --git a/api/ws/handlers/ownership-access.go b/api/ws/handlers/ownership-access.go index c2f3be23..95db9f13 100644 --- a/api/ws/handlers/ownership-access.go +++ b/api/ws/handlers/ownership-access.go @@ -10,7 +10,7 @@ import ( "go.mongodb.org/mongo-driver/bson" ) -func HandleGetOwnershipReq(req *protos.GetOwnershipReq, hctx wsHelpers.HandlerContext) ([]*protos.GetOwnershipResp, error) { +func HandleGetOwnershipReq(req *protos.GetOwnershipReq, hctx wsHelpers.HandlerContext) (*protos.GetOwnershipResp, error) { if err := wsHelpers.CheckStringField(&req.ObjectId, "ObjectId", 1, wsHelpers.IdFieldMaxLength*2 /* Tests have longer ids anyway... */); err != nil { return nil, err } @@ -20,9 +20,9 @@ func HandleGetOwnershipReq(req *protos.GetOwnershipReq, hctx wsHelpers.HandlerCo return nil, err } - return []*protos.GetOwnershipResp{&protos.GetOwnershipResp{ + return &protos.GetOwnershipResp{ Ownership: owner, - }}, nil + }, nil } func readToMap(ids []string, theMap *map[string]bool) { @@ -45,7 +45,7 @@ func deleteFromMap(ids []string, theMap *map[string]bool) { } } -func HandleObjectEditAccessReq(req *protos.ObjectEditAccessReq, hctx wsHelpers.HandlerContext) ([]*protos.ObjectEditAccessResp, error) { +func HandleObjectEditAccessReq(req *protos.ObjectEditAccessReq, hctx wsHelpers.HandlerContext) (*protos.ObjectEditAccessResp, error) { if err := wsHelpers.CheckStringField(&req.ObjectId, "ObjectId", 1, wsHelpers.IdFieldMaxLength*2 /* Tests have longer ids anyway... */); err != nil { return nil, err } @@ -138,7 +138,7 @@ func HandleObjectEditAccessReq(req *protos.ObjectEditAccessReq, hctx wsHelpers.H owner.Viewers.UserIds = viewerUserIds owner.Viewers.GroupIds = viewerGroupsIds - return []*protos.ObjectEditAccessResp{&protos.ObjectEditAccessResp{ + return &protos.ObjectEditAccessResp{ Ownership: owner, - }}, nil + }, nil } diff --git a/api/ws/handlers/piquant.go b/api/ws/handlers/piquant.go index 83c75f1e..9432a771 100644 --- a/api/ws/handlers/piquant.go +++ b/api/ws/handlers/piquant.go @@ -16,7 +16,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandlePiquantConfigListReq(req *protos.PiquantConfigListReq, hctx wsHelpers.HandlerContext) ([]*protos.PiquantConfigListResp, error) { +func HandlePiquantConfigListReq(req *protos.PiquantConfigListReq, hctx wsHelpers.HandlerContext) (*protos.PiquantConfigListResp, error) { // Return a list of all piquant configs we have stored // TODO: Handle paging... this could eventually be > 1000 files, but that's a while away! paths, err := hctx.Svcs.FS.ListObjects(hctx.Svcs.Config.ConfigBucket, filepaths.RootDetectorConfig+"/") @@ -38,10 +38,10 @@ func HandlePiquantConfigListReq(req *protos.PiquantConfigListReq, hctx wsHelpers names := utils.GetMapKeys(configNamesFiltered) sort.Strings(names) - return []*protos.PiquantConfigListResp{&protos.PiquantConfigListResp{ConfigNames: names}}, err + return &protos.PiquantConfigListResp{ConfigNames: names}, err } -func HandlePiquantConfigVersionsListReq(req *protos.PiquantConfigVersionsListReq, hctx wsHelpers.HandlerContext) ([]*protos.PiquantConfigVersionsListResp, error) { +func HandlePiquantConfigVersionsListReq(req *protos.PiquantConfigVersionsListReq, hctx wsHelpers.HandlerContext) (*protos.PiquantConfigVersionsListResp, error) { if err := wsHelpers.CheckStringField(&req.ConfigId, "ConfigId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -49,12 +49,12 @@ func HandlePiquantConfigVersionsListReq(req *protos.PiquantConfigVersionsListReq // Get a list of PIQUANT config versions too versions := piquant.GetPiquantConfigVersions(hctx.Svcs, req.ConfigId) - return []*protos.PiquantConfigVersionsListResp{&protos.PiquantConfigVersionsListResp{ + return &protos.PiquantConfigVersionsListResp{ Versions: versions, - }}, nil + }, nil } -func HandlePiquantConfigVersionReq(req *protos.PiquantConfigVersionReq, hctx wsHelpers.HandlerContext) ([]*protos.PiquantConfigVersionResp, error) { +func HandlePiquantConfigVersionReq(req *protos.PiquantConfigVersionReq, hctx wsHelpers.HandlerContext) (*protos.PiquantConfigVersionResp, error) { if err := wsHelpers.CheckStringField(&req.Version, "Version", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -67,25 +67,25 @@ func HandlePiquantConfigVersionReq(req *protos.PiquantConfigVersionReq, hctx wsH return nil, err } - return []*protos.PiquantConfigVersionResp{&protos.PiquantConfigVersionResp{ + return &protos.PiquantConfigVersionResp{ PiquantConfig: cfg, - }}, nil + }, nil } // TODO: need to query versions from github container registry or something similar??? -func HandlePiquantVersionListReq(req *protos.PiquantVersionListReq, hctx wsHelpers.HandlerContext) ([]*protos.PiquantVersionListResp, error) { +func HandlePiquantVersionListReq(req *protos.PiquantVersionListReq, hctx wsHelpers.HandlerContext) (*protos.PiquantVersionListResp, error) { return nil, errors.New("HandlePiquantVersionListReq not implemented yet") } -func HandlePiquantCurrentVersionReq(req *protos.PiquantCurrentVersionReq, hctx wsHelpers.HandlerContext) ([]*protos.PiquantCurrentVersionResp, error) { +func HandlePiquantCurrentVersionReq(req *protos.PiquantCurrentVersionReq, hctx wsHelpers.HandlerContext) (*protos.PiquantCurrentVersionResp, error) { ver, err := piquant.GetPiquantVersion(hctx.Svcs) if err != nil { return nil, err } - return []*protos.PiquantCurrentVersionResp{&protos.PiquantCurrentVersionResp{PiquantVersion: ver}}, nil + return &protos.PiquantCurrentVersionResp{PiquantVersion: ver}, nil } -func HandlePiquantWriteCurrentVersionReq(req *protos.PiquantWriteCurrentVersionReq, hctx wsHelpers.HandlerContext) ([]*protos.PiquantWriteCurrentVersionResp, error) { +func HandlePiquantWriteCurrentVersionReq(req *protos.PiquantWriteCurrentVersionReq, hctx wsHelpers.HandlerContext) (*protos.PiquantWriteCurrentVersionResp, error) { if err := wsHelpers.CheckStringField(&req.PiquantVersion, "PiquantVersion", 1, 100); err != nil { return nil, err } @@ -107,5 +107,5 @@ func HandlePiquantWriteCurrentVersionReq(req *protos.PiquantWriteCurrentVersionR hctx.Svcs.Log.Errorf("PiquantWriteCurrentVersionReq UpdateByID result had unexpected counts %+v", result) } - return []*protos.PiquantWriteCurrentVersionResp{&protos.PiquantWriteCurrentVersionResp{}}, nil + return &protos.PiquantWriteCurrentVersionResp{}, nil } diff --git a/api/ws/handlers/pseudo-intensities.go b/api/ws/handlers/pseudo-intensities.go index 6a96eb81..ac789fb6 100644 --- a/api/ws/handlers/pseudo-intensities.go +++ b/api/ws/handlers/pseudo-intensities.go @@ -8,7 +8,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandlePseudoIntensityReq(req *protos.PseudoIntensityReq, hctx wsHelpers.HandlerContext) ([]*protos.PseudoIntensityResp, error) { +func HandlePseudoIntensityReq(req *protos.PseudoIntensityReq, hctx wsHelpers.HandlerContext) (*protos.PseudoIntensityResp, error) { exprPB, indexes, err := beginDatasetFileReqForRange(req.ScanId, req.Entries, hctx) if err != nil { return nil, err @@ -48,8 +48,8 @@ func HandlePseudoIntensityReq(req *protos.PseudoIntensityReq, hctx wsHelpers.Han hctx.Svcs.Log.Errorf("Reading pseudointensities for scan %v: found more than 1 set of pseudos in %v PMCs", req.ScanId, tooManyPseudosLocations) } - return []*protos.PseudoIntensityResp{&protos.PseudoIntensityResp{ + return &protos.PseudoIntensityResp{ IntensityLabels: labels, Data: pseudoIntensities, - }}, nil + }, nil } diff --git a/api/ws/handlers/quantification-create.go b/api/ws/handlers/quantification-create.go index 4d23c49a..45d86fff 100644 --- a/api/ws/handlers/quantification-create.go +++ b/api/ws/handlers/quantification-create.go @@ -13,7 +13,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleQuantCreateReq(req *protos.QuantCreateReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantCreateResp, error) { +func HandleQuantCreateReq(req *protos.QuantCreateReq, hctx wsHelpers.HandlerContext) (*protos.QuantCreateResp, error) { err := quantification.IsValidCreateParam(req.Params, hctx) if err != nil { return nil, errorwithstatus.MakeBadRequestError(err) @@ -46,7 +46,7 @@ func HandleQuantCreateReq(req *protos.QuantCreateReq, hctx wsHelpers.HandlerCont // If it's NOT a map command, we wait around for the result and pass it back in the response // but for map commands, we just pass back the generated job status if req.Params.Command == "map" { - return []*protos.QuantCreateResp{&protos.QuantCreateResp{Status: status}}, nil + return &protos.QuantCreateResp{Status: status}, nil } // Wait around for the output file to appear, or for the job to end up in an error state @@ -59,5 +59,5 @@ func HandleQuantCreateReq(req *protos.QuantCreateReq, hctx wsHelpers.HandlerCont return nil, errors.New("PIQUANT command: " + req.Params.Command + " failed.") } - return []*protos.QuantCreateResp{&protos.QuantCreateResp{ResultData: bytes}}, nil + return &protos.QuantCreateResp{ResultData: bytes}, nil } diff --git a/api/ws/handlers/quantification-management.go b/api/ws/handlers/quantification-management.go index 8cf038e1..4546c741 100644 --- a/api/ws/handlers/quantification-management.go +++ b/api/ws/handlers/quantification-management.go @@ -12,11 +12,11 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleQuantBlessReq(req *protos.QuantBlessReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantBlessResp, error) { +func HandleQuantBlessReq(req *protos.QuantBlessReq, hctx wsHelpers.HandlerContext) (*protos.QuantBlessResp, error) { return nil, errors.New("HandleQuantBlessReq not implemented yet") } -func HandleQuantDeleteReq(req *protos.QuantDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantDeleteResp, error) { +func HandleQuantDeleteReq(req *protos.QuantDeleteReq, hctx wsHelpers.HandlerContext) (*protos.QuantDeleteResp, error) { // Can't use the helper: DeleteUserObject because we also have to delete stuff from S3 and we need the scanId associated to find // the path. So here we do a get first, with edit priviledges required dbItem, _, err := wsHelpers.GetUserObjectById[protos.QuantificationSummary](true, req.QuantId, protos.ObjectType_OT_QUANTIFICATION, dbCollections.QuantificationsName, hctx) @@ -57,9 +57,9 @@ func HandleQuantDeleteReq(req *protos.QuantDeleteReq, hctx wsHelpers.HandlerCont // Notify of the change hctx.Svcs.Notifier.SysNotifyQuantChanged(req.QuantId) - return []*protos.QuantDeleteResp{&protos.QuantDeleteResp{}}, nil + return &protos.QuantDeleteResp{}, nil } -func HandleQuantPublishReq(req *protos.QuantPublishReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantPublishResp, error) { +func HandleQuantPublishReq(req *protos.QuantPublishReq, hctx wsHelpers.HandlerContext) (*protos.QuantPublishResp, error) { return nil, errors.New("HandleQuantPublishReq not implemented yet") } diff --git a/api/ws/handlers/quantification-multi.go b/api/ws/handlers/quantification-multi.go index c2b29bfd..aea54ce3 100644 --- a/api/ws/handlers/quantification-multi.go +++ b/api/ws/handlers/quantification-multi.go @@ -14,7 +14,7 @@ import ( ) // Anyone can retrieve a quant z-stack if they have quant messaging permissions -func HandleQuantCombineListGetReq(req *protos.QuantCombineListGetReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantCombineListGetResp, error) { +func HandleQuantCombineListGetReq(req *protos.QuantCombineListGetReq, hctx wsHelpers.HandlerContext) (*protos.QuantCombineListGetResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -39,13 +39,13 @@ func HandleQuantCombineListGetReq(req *protos.QuantCombineListGetReq, hctx wsHel return nil, err } - return []*protos.QuantCombineListGetResp{&protos.QuantCombineListGetResp{ + return &protos.QuantCombineListGetResp{ List: resultItem.List, - }}, nil + }, nil } // Anyone can save a quant z-stack if they have quant messaging permissions -func HandleQuantCombineListWriteReq(req *protos.QuantCombineListWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantCombineListWriteResp, error) { +func HandleQuantCombineListWriteReq(req *protos.QuantCombineListWriteReq, hctx wsHelpers.HandlerContext) (*protos.QuantCombineListWriteResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -74,10 +74,10 @@ func HandleQuantCombineListWriteReq(req *protos.QuantCombineListWriteReq, hctx w hctx.Svcs.Log.Errorf("MultiQuant Z-Stack insert %v inserted different id %v", zId, result.InsertedID) } - return []*protos.QuantCombineListWriteResp{&protos.QuantCombineListWriteResp{}}, nil + return &protos.QuantCombineListWriteResp{}, nil } -func HandleMultiQuantCompareReq(req *protos.MultiQuantCompareReq, hctx wsHelpers.HandlerContext) ([]*protos.MultiQuantCompareResp, error) { +func HandleMultiQuantCompareReq(req *protos.MultiQuantCompareReq, hctx wsHelpers.HandlerContext) (*protos.MultiQuantCompareResp, error) { // req.ScanId is checked in beginDatasetFileReq if len(req.QuantIds) <= 0 { @@ -101,13 +101,13 @@ func HandleMultiQuantCompareReq(req *protos.MultiQuantCompareReq, hctx wsHelpers return nil, err } - return []*protos.MultiQuantCompareResp{&protos.MultiQuantCompareResp{ + return &protos.MultiQuantCompareResp{ RoiId: req.ReqRoiId, QuantTables: tables, - }}, nil + }, nil } -func HandleQuantCombineReq(req *protos.QuantCombineReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantCombineResp, error) { +func HandleQuantCombineReq(req *protos.QuantCombineReq, hctx wsHelpers.HandlerContext) (*protos.QuantCombineResp, error) { // Simple validation // NOTE: if only asking for a summary, we don't care about name being empty @@ -132,11 +132,11 @@ func HandleQuantCombineReq(req *protos.QuantCombineReq, hctx wsHelpers.HandlerCo if req.SummaryOnly { // We return a summary instead of forming a CSV summary := quantification.FormMultiQuantSummary(multiQuantData.DataPerDetectorPerPMC, multiQuantData.AllColumns, multiQuantData.PMCCount) - return []*protos.QuantCombineResp{&protos.QuantCombineResp{ + return &protos.QuantCombineResp{ CombineResult: &protos.QuantCombineResp_Summary{ Summary: summary, }, - }}, nil + }, nil } // Form a CSV @@ -152,9 +152,9 @@ func HandleQuantCombineReq(req *protos.QuantCombineReq, hctx wsHelpers.HandlerCo return nil, err } - return []*protos.QuantCombineResp{&protos.QuantCombineResp{ + return &protos.QuantCombineResp{ CombineResult: &protos.QuantCombineResp_JobId{ JobId: quantId, }, - }}, nil + }, nil } diff --git a/api/ws/handlers/quantification-retrieval.go b/api/ws/handlers/quantification-retrieval.go index 27805f4a..5af6fb39 100644 --- a/api/ws/handlers/quantification-retrieval.go +++ b/api/ws/handlers/quantification-retrieval.go @@ -11,7 +11,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleQuantListReq(req *protos.QuantListReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantListResp, error) { +func HandleQuantListReq(req *protos.QuantListReq, hctx wsHelpers.HandlerContext) (*protos.QuantListResp, error) { items, idToOwner, err := quantification.ListUserQuants(req.SearchParams, hctx) if err != nil { return nil, err @@ -25,12 +25,12 @@ func HandleQuantListReq(req *protos.QuantListReq, hctx wsHelpers.HandlerContext) quants = append(quants, item) } - return []*protos.QuantListResp{&protos.QuantListResp{ + return &protos.QuantListResp{ Quants: quants, - }}, nil + }, nil } -func HandleQuantGetReq(req *protos.QuantGetReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantGetResp, error) { +func HandleQuantGetReq(req *protos.QuantGetReq, hctx wsHelpers.HandlerContext) (*protos.QuantGetResp, error) { dbItem, ownerItem, err := wsHelpers.GetUserObjectById[protos.QuantificationSummary](false, req.QuantId, protos.ObjectType_OT_QUANTIFICATION, dbCollections.QuantificationsName, hctx) if err != nil { return nil, err @@ -51,13 +51,13 @@ func HandleQuantGetReq(req *protos.QuantGetReq, hctx wsHelpers.HandlerContext) ( dbItem.Owner = wsHelpers.MakeOwnerSummary(ownerItem, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) - return []*protos.QuantGetResp{&protos.QuantGetResp{ + return &protos.QuantGetResp{ Summary: dbItem, Data: quant, - }}, nil + }, nil } -func HandleQuantLastOutputGetReq(req *protos.QuantLastOutputGetReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantLastOutputGetResp, error) { +func HandleQuantLastOutputGetReq(req *protos.QuantLastOutputGetReq, hctx wsHelpers.HandlerContext) (*protos.QuantLastOutputGetResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -92,6 +92,6 @@ func HandleQuantLastOutputGetReq(req *protos.QuantLastOutputGetReq, hctx wsHelpe } } - return []*protos.QuantLastOutputGetResp{&protos.QuantLastOutputGetResp{Output: string(result)}}, nil + return &protos.QuantLastOutputGetResp{Output: string(result)}, nil } diff --git a/api/ws/handlers/quantification-upload.go b/api/ws/handlers/quantification-upload.go index 7c71cfe8..0af194c8 100644 --- a/api/ws/handlers/quantification-upload.go +++ b/api/ws/handlers/quantification-upload.go @@ -22,7 +22,7 @@ import ( // ... // -func HandleQuantUploadReq(req *protos.QuantUploadReq, hctx wsHelpers.HandlerContext) ([]*protos.QuantUploadResp, error) { +func HandleQuantUploadReq(req *protos.QuantUploadReq, hctx wsHelpers.HandlerContext) (*protos.QuantUploadResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -53,7 +53,7 @@ func HandleQuantUploadReq(req *protos.QuantUploadReq, hctx wsHelpers.HandlerCont if err != nil { return nil, err } - return []*protos.QuantUploadResp{&protos.QuantUploadResp{CreatedQuantId: quantId}}, nil + return &protos.QuantUploadResp{CreatedQuantId: quantId}, nil } func parseQuantCSVColumns(csvRows []string) (map[string]int, error) { diff --git a/api/ws/handlers/roi.go b/api/ws/handlers/roi.go index 5c446c3f..eb31adab 100644 --- a/api/ws/handlers/roi.go +++ b/api/ws/handlers/roi.go @@ -22,7 +22,7 @@ type IdOnly struct { Id string `bson:"_id"` } -func HandleRegionOfInterestGetReq(req *protos.RegionOfInterestGetReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestGetResp, error) { +func HandleRegionOfInterestGetReq(req *protos.RegionOfInterestGetReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestGetResp, error) { dbItem, owner, err := wsHelpers.GetUserObjectById[protos.ROIItem](false, req.Id, protos.ObjectType_OT_ROI, dbCollections.RegionsOfInterestName, hctx) if err != nil { return nil, err @@ -41,12 +41,12 @@ func HandleRegionOfInterestGetReq(req *protos.RegionOfInterestGetReq, hctx wsHel dbItem.MistROIItem = mistItem } - return []*protos.RegionOfInterestGetResp{&protos.RegionOfInterestGetResp{ + return &protos.RegionOfInterestGetResp{ RegionOfInterest: dbItem, - }}, nil + }, nil } -func HandleRegionOfInterestDeleteReq(req *protos.RegionOfInterestDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestDeleteResp, error) { +func HandleRegionOfInterestDeleteReq(req *protos.RegionOfInterestDeleteReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestDeleteResp, error) { if req.IsMIST { // Delete from MIST table _, err := hctx.Svcs.MongoDB.Collection(dbCollections.MistROIsName).DeleteOne(context.TODO(), bson.D{{Key: "_id", Value: req.Id}}) @@ -58,7 +58,7 @@ func HandleRegionOfInterestDeleteReq(req *protos.RegionOfInterestDeleteReq, hctx return wsHelpers.DeleteUserObject[protos.RegionOfInterestDeleteResp](req.Id, protos.ObjectType_OT_ROI, dbCollections.RegionsOfInterestName, hctx) } -func HandleRegionOfInterestListReq(req *protos.RegionOfInterestListReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestListResp, error) { +func HandleRegionOfInterestListReq(req *protos.RegionOfInterestListReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestListResp, error) { filter, idToOwner, err := wsHelpers.MakeFilter(req.SearchParams, false, protos.ObjectType_OT_ROI, hctx) if err != nil { return nil, err @@ -127,9 +127,9 @@ func HandleRegionOfInterestListReq(req *protos.RegionOfInterestListReq, hctx wsH rois[item.Id] = item } - return []*protos.RegionOfInterestListResp{&protos.RegionOfInterestListResp{ + return &protos.RegionOfInterestListResp{ RegionsOfInterest: rois, - }}, nil + }, nil } func validateROI(roi *protos.ROIItem) error { @@ -361,7 +361,7 @@ func updateROI(roi *protos.ROIItem, hctx wsHelpers.HandlerContext, editors *prot return dbItem, nil } -func HandleRegionOfInterestWriteReq(req *protos.RegionOfInterestWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestWriteResp, error) { +func HandleRegionOfInterestWriteReq(req *protos.RegionOfInterestWriteReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestWriteResp, error) { // Owner should never be accepted from API if req.RegionOfInterest.Owner != nil { return nil, errorwithstatus.MakeBadRequestError(errors.New("Owner must be empty for write messages")) @@ -386,12 +386,12 @@ func HandleRegionOfInterestWriteReq(req *protos.RegionOfInterestWriteReq, hctx w return nil, err } - return []*protos.RegionOfInterestWriteResp{&protos.RegionOfInterestWriteResp{ + return &protos.RegionOfInterestWriteResp{ RegionOfInterest: item, - }}, nil + }, nil } -func HandleRegionOfInterestBulkWriteReq(req *protos.RegionOfInterestBulkWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestBulkWriteResp, error) { +func HandleRegionOfInterestBulkWriteReq(req *protos.RegionOfInterestBulkWriteReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestBulkWriteResp, error) { if req.IsMIST && req.MistROIScanIdsToDelete != nil && len(req.MistROIScanIdsToDelete) > 0 { ctx := context.TODO() coll := hctx.Svcs.MongoDB.Collection(dbCollections.MistROIsName) @@ -541,12 +541,12 @@ func HandleRegionOfInterestBulkWriteReq(req *protos.RegionOfInterestBulkWriteReq writtenROIs = append(writtenROIs, item) } - return []*protos.RegionOfInterestBulkWriteResp{&protos.RegionOfInterestBulkWriteResp{ + return &protos.RegionOfInterestBulkWriteResp{ RegionsOfInterest: writtenROIs, - }}, nil + }, nil } -func HandleRegionOfInterestBulkDuplicateReq(req *protos.RegionOfInterestBulkDuplicateReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestBulkDuplicateResp, error) { +func HandleRegionOfInterestBulkDuplicateReq(req *protos.RegionOfInterestBulkDuplicateReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestBulkDuplicateResp, error) { // Get the ROIs to duplicate filter := bson.M{"_id": bson.M{"$in": req.Ids}} opts := options.Find() @@ -587,16 +587,16 @@ func HandleRegionOfInterestBulkDuplicateReq(req *protos.RegionOfInterestBulkDupl } } - return []*protos.RegionOfInterestBulkDuplicateResp{&protos.RegionOfInterestBulkDuplicateResp{ + return &protos.RegionOfInterestBulkDuplicateResp{ RegionsOfInterest: roiSummaries, - }}, nil + }, nil } func formROIUserConfigID(user *protos.UserInfo, roiId string) string { return user.Id + "-" + roiId } -func HandleRegionOfInterestDisplaySettingsWriteReq(req *protos.RegionOfInterestDisplaySettingsWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestDisplaySettingsWriteResp, error) { +func HandleRegionOfInterestDisplaySettingsWriteReq(req *protos.RegionOfInterestDisplaySettingsWriteReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestDisplaySettingsWriteResp, error) { // Check that we have an id, current user, and display settings if len(req.Id) <= 0 { return nil, errorwithstatus.MakeBadRequestError(errors.New("ROI ID must be specified")) @@ -669,12 +669,12 @@ func HandleRegionOfInterestDisplaySettingsWriteReq(req *protos.RegionOfInterestD return nil, err } - return []*protos.RegionOfInterestDisplaySettingsWriteResp{&protos.RegionOfInterestDisplaySettingsWriteResp{ + return &protos.RegionOfInterestDisplaySettingsWriteResp{ DisplaySettings: req.DisplaySettings, - }}, nil + }, nil } -func HandleRegionOfInterestDisplaySettingsGetReq(req *protos.RegionOfInterestDisplaySettingsGetReq, hctx wsHelpers.HandlerContext) ([]*protos.RegionOfInterestDisplaySettingsGetResp, error) { +func HandleRegionOfInterestDisplaySettingsGetReq(req *protos.RegionOfInterestDisplaySettingsGetReq, hctx wsHelpers.HandlerContext) (*protos.RegionOfInterestDisplaySettingsGetResp, error) { // Check that we have an id, current user, and display settings if len(req.Id) <= 0 { return nil, errorwithstatus.MakeBadRequestError(errors.New("ROI ID must be specified")) @@ -692,7 +692,7 @@ func HandleRegionOfInterestDisplaySettingsGetReq(req *protos.RegionOfInterestDis return nil, err } - return []*protos.RegionOfInterestDisplaySettingsGetResp{&protos.RegionOfInterestDisplaySettingsGetResp{ + return &protos.RegionOfInterestDisplaySettingsGetResp{ DisplaySettings: displaySettings, - }}, nil + }, nil } diff --git a/api/ws/handlers/scan-beam-location.go b/api/ws/handlers/scan-beam-location.go index 6b156a39..7fac2c40 100644 --- a/api/ws/handlers/scan-beam-location.go +++ b/api/ws/handlers/scan-beam-location.go @@ -5,7 +5,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleScanBeamLocationsReq(req *protos.ScanBeamLocationsReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanBeamLocationsResp, error) { +func HandleScanBeamLocationsReq(req *protos.ScanBeamLocationsReq, hctx wsHelpers.HandlerContext) (*protos.ScanBeamLocationsResp, error) { exprPB, indexes, err := beginDatasetFileReqForRange(req.ScanId, req.Entries, hctx) if err != nil { return nil, err @@ -28,7 +28,7 @@ func HandleScanBeamLocationsReq(req *protos.ScanBeamLocationsReq, hctx wsHelpers beams = append(beams, beamSave) } - return []*protos.ScanBeamLocationsResp{&protos.ScanBeamLocationsResp{ + return &protos.ScanBeamLocationsResp{ BeamLocations: beams, - }}, nil + }, nil } diff --git a/api/ws/handlers/scan-entry-metadata.go b/api/ws/handlers/scan-entry-metadata.go index bce5a948..a52f717d 100644 --- a/api/ws/handlers/scan-entry-metadata.go +++ b/api/ws/handlers/scan-entry-metadata.go @@ -7,7 +7,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleScanEntryMetadataReq(req *protos.ScanEntryMetadataReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanEntryMetadataResp, error) { +func HandleScanEntryMetadataReq(req *protos.ScanEntryMetadataReq, hctx wsHelpers.HandlerContext) (*protos.ScanEntryMetadataResp, error) { exprPB, indexes, err := beginDatasetFileReqForRange(req.ScanId, req.Entries, hctx) if err != nil { return nil, err @@ -62,7 +62,7 @@ func HandleScanEntryMetadataReq(req *protos.ScanEntryMetadataReq, hctx wsHelpers entryMetas = append(entryMetas, metaSave) } - return []*protos.ScanEntryMetadataResp{&protos.ScanEntryMetadataResp{ + return &protos.ScanEntryMetadataResp{ Entries: entryMetas, - }}, nil + }, nil } diff --git a/api/ws/handlers/scan-entry.go b/api/ws/handlers/scan-entry.go index b47691ca..3c93f26b 100644 --- a/api/ws/handlers/scan-entry.go +++ b/api/ws/handlers/scan-entry.go @@ -8,7 +8,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleScanEntryReq(req *protos.ScanEntryReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanEntryResp, error) { +func HandleScanEntryReq(req *protos.ScanEntryReq, hctx wsHelpers.HandlerContext) (*protos.ScanEntryResp, error) { exprPB, indexes, err := beginDatasetFileReqForRange(req.ScanId, req.Entries, hctx) if err != nil { return nil, err @@ -95,7 +95,7 @@ func HandleScanEntryReq(req *protos.ScanEntryReq, hctx wsHelpers.HandlerContext) entries = append(entries, locSave) } - return []*protos.ScanEntryResp{&protos.ScanEntryResp{ + return &protos.ScanEntryResp{ Entries: entries, - }}, nil + }, nil } diff --git a/api/ws/handlers/scan.go b/api/ws/handlers/scan.go index e602c1f0..9d0fe002 100644 --- a/api/ws/handlers/scan.go +++ b/api/ws/handlers/scan.go @@ -29,7 +29,7 @@ import ( "google.golang.org/protobuf/proto" ) -func HandleScanListReq(req *protos.ScanListReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanListResp, error) { +func HandleScanListReq(req *protos.ScanListReq, hctx wsHelpers.HandlerContext) (*protos.ScanListResp, error) { idToOwner, err := wsHelpers.ListAccessibleIDs(false, protos.ObjectType_OT_SCAN, hctx.Svcs, hctx.SessUser) if err != nil { return nil, err @@ -105,12 +105,12 @@ func HandleScanListReq(req *protos.ScanListReq, hctx wsHelpers.HandlerContext) ( return nil, err } - return []*protos.ScanListResp{&protos.ScanListResp{ + return &protos.ScanListResp{ Scans: scans, - }}, nil + }, nil } -func HandleScanGetReq(req *protos.ScanGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanGetResp, error) { +func HandleScanGetReq(req *protos.ScanGetReq, hctx wsHelpers.HandlerContext) (*protos.ScanGetResp, error) { // Check that we have an id, current user, and display settings if len(req.Id) <= 0 { return nil, errorwithstatus.MakeBadRequestError(errors.New("Scan ID must be specified")) @@ -128,12 +128,12 @@ func HandleScanGetReq(req *protos.ScanGetReq, hctx wsHelpers.HandlerContext) ([] dbItem.Owner = wsHelpers.MakeOwnerSummary(owner, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) - return []*protos.ScanGetResp{&protos.ScanGetResp{ + return &protos.ScanGetResp{ Scan: dbItem, - }}, nil + }, nil } -func HandleScanMetaLabelsAndTypesReq(req *protos.ScanMetaLabelsAndTypesReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanMetaLabelsAndTypesResp, error) { +func HandleScanMetaLabelsAndTypesReq(req *protos.ScanMetaLabelsAndTypesReq, hctx wsHelpers.HandlerContext) (*protos.ScanMetaLabelsAndTypesResp, error) { exprPB, err := beginDatasetFileReq(req.ScanId, hctx) if err != nil { return nil, err @@ -151,10 +151,10 @@ func HandleScanMetaLabelsAndTypesReq(req *protos.ScanMetaLabelsAndTypesReq, hctx types = append(types, tScan) } - return []*protos.ScanMetaLabelsAndTypesResp{&protos.ScanMetaLabelsAndTypesResp{ + return &protos.ScanMetaLabelsAndTypesResp{ MetaLabels: exprPB.MetaLabels, MetaTypes: types, - }}, nil + }, nil } // Utility to call for any Req message that involves serving data out of a dataset.bin file @@ -201,7 +201,7 @@ func beginDatasetFileReq(scanId string, hctx wsHelpers.HandlerContext) (*protos. return exprPB, nil } -func HandleScanDeleteReq(req *protos.ScanDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanDeleteResp, error) { +func HandleScanDeleteReq(req *protos.ScanDeleteReq, hctx wsHelpers.HandlerContext) (*protos.ScanDeleteResp, error) { // Check user has access dbItem, _, err := wsHelpers.GetUserObjectById[protos.ScanItem](true, req.ScanId, protos.ObjectType_OT_SCAN, dbCollections.ScansName, hctx) if err != nil { @@ -246,10 +246,10 @@ func HandleScanDeleteReq(req *protos.ScanDeleteReq, hctx wsHelpers.HandlerContex // Notify of our scan change hctx.Svcs.Notifier.SysNotifyScanChanged(req.ScanId) - return []*protos.ScanDeleteResp{&protos.ScanDeleteResp{}}, nil + return &protos.ScanDeleteResp{}, nil } -func HandleScanMetaWriteReq(req *protos.ScanMetaWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanMetaWriteResp, error) { +func HandleScanMetaWriteReq(req *protos.ScanMetaWriteReq, hctx wsHelpers.HandlerContext) (*protos.ScanMetaWriteResp, error) { if err := wsHelpers.CheckStringField(&req.Title, "Title", 1, 100); err != nil { return nil, err } @@ -288,10 +288,10 @@ func HandleScanMetaWriteReq(req *protos.ScanMetaWriteReq, hctx wsHelpers.Handler // Notify of our scan change hctx.Svcs.Notifier.SysNotifyScanChanged(req.ScanId) - return []*protos.ScanMetaWriteResp{&protos.ScanMetaWriteResp{}}, nil + return &protos.ScanMetaWriteResp{}, nil } -func HandleScanTriggerReImportReq(req *protos.ScanTriggerReImportReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanTriggerReImportResp, error) { +func HandleScanTriggerReImportReq(req *protos.ScanTriggerReImportReq, hctx wsHelpers.HandlerContext) (*protos.ScanTriggerReImportResp, error) { if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, 50); err != nil { return nil, err } @@ -319,14 +319,14 @@ func HandleScanTriggerReImportReq(req *protos.ScanTriggerReImportReq, hctx wsHel result, err := dataimport.TriggerDatasetReprocessViaSNS(hctx.Svcs.SNS, jobId, req.ScanId, hctx.Svcs.Config.DataSourceSNSTopic) hctx.Svcs.Log.Infof("Triggered dataset reprocess via SNS topic. Result: %v. Job ID: %v", result, jobId) - return []*protos.ScanTriggerReImportResp{&protos.ScanTriggerReImportResp{JobId: jobId}}, err + return &protos.ScanTriggerReImportResp{JobId: jobId}, err } // NOTE: before this is sent, we expect the PUT /scan endpoint to have been called and a zip uploaded already // // The same parameters passed there (scan id & file name) must be used with this request otherwise we // won't look up the zip correctly and fail. -func HandleScanUploadReq(req *protos.ScanUploadReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanUploadResp, error) { +func HandleScanUploadReq(req *protos.ScanUploadReq, hctx wsHelpers.HandlerContext) (*protos.ScanUploadResp, error) { if err := wsHelpers.CheckStringField(&req.Id, "Id", 1, 50); err != nil { return nil, err } @@ -563,7 +563,7 @@ func HandleScanUploadReq(req *protos.ScanUploadReq, hctx wsHelpers.HandlerContex logger.Infof("Triggered dataset reprocess via SNS topic. Result: %v. Job ID: %v", result, jobId) - return []*protos.ScanUploadResp{&protos.ScanUploadResp{JobId: jobId}}, nil + return &protos.ScanUploadResp{JobId: jobId}, nil } type importUpdater struct { @@ -641,7 +641,7 @@ func (i *importUpdater) sendImportUpdate(status *protos.JobStatus) { } } -func HandleScanAutoShareReq(req *protos.ScanAutoShareReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanAutoShareResp, error) { +func HandleScanAutoShareReq(req *protos.ScanAutoShareReq, hctx wsHelpers.HandlerContext) (*protos.ScanAutoShareResp, error) { if err := wsHelpers.CheckStringField(&req.Id, "Id", 1, 50); err != nil { return nil, err } @@ -667,12 +667,12 @@ func HandleScanAutoShareReq(req *protos.ScanAutoShareReq, hctx wsHelpers.Handler return nil, err } - return []*protos.ScanAutoShareResp{&protos.ScanAutoShareResp{ + return &protos.ScanAutoShareResp{ Entry: item, - }}, nil + }, nil } -func HandleScanAutoShareWriteReq(req *protos.ScanAutoShareWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ScanAutoShareWriteResp, error) { +func HandleScanAutoShareWriteReq(req *protos.ScanAutoShareWriteReq, hctx wsHelpers.HandlerContext) (*protos.ScanAutoShareWriteResp, error) { if err := wsHelpers.CheckStringField(&req.Entry.Id, "Id", 1, 50); err != nil { return nil, err } @@ -706,5 +706,5 @@ func HandleScanAutoShareWriteReq(req *protos.ScanAutoShareWriteReq, hctx wsHelpe } } - return []*protos.ScanAutoShareWriteResp{&protos.ScanAutoShareWriteResp{}}, nil + return &protos.ScanAutoShareWriteResp{}, nil } diff --git a/api/ws/handlers/screen-configuration.go b/api/ws/handlers/screen-configuration.go index 72433846..96e9625e 100644 --- a/api/ws/handlers/screen-configuration.go +++ b/api/ws/handlers/screen-configuration.go @@ -26,7 +26,7 @@ func formWidgetId(widget *protos.WidgetLayoutConfiguration, screenConfigId strin return screenConfigId + "-" + fmt.Sprint(layoutIndex) + "-" + positionId } -func HandleScreenConfigurationGetReq(req *protos.ScreenConfigurationGetReq, hctx wsHelpers.HandlerContext) ([]*protos.ScreenConfigurationGetResp, error) { +func HandleScreenConfigurationGetReq(req *protos.ScreenConfigurationGetReq, hctx wsHelpers.HandlerContext) (*protos.ScreenConfigurationGetResp, error) { configId := "" if req.Id != "" { configId = req.Id @@ -46,12 +46,12 @@ func HandleScreenConfigurationGetReq(req *protos.ScreenConfigurationGetReq, hctx screenConfig.Owner = wsHelpers.MakeOwnerSummary(owner, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) - return []*protos.ScreenConfigurationGetResp{&protos.ScreenConfigurationGetResp{ + return &protos.ScreenConfigurationGetResp{ ScreenConfiguration: screenConfig, - }}, nil + }, nil } -func HandleScreenConfigurationListReq(req *protos.ScreenConfigurationListReq, hctx wsHelpers.HandlerContext) ([]*protos.ScreenConfigurationListResp, error) { +func HandleScreenConfigurationListReq(req *protos.ScreenConfigurationListReq, hctx wsHelpers.HandlerContext) (*protos.ScreenConfigurationListResp, error) { filter, idToOwner, err := wsHelpers.MakeFilter(req.SearchParams, false, protos.ObjectType_OT_SCREEN_CONFIG, hctx) if err != nil { return nil, err @@ -80,9 +80,9 @@ func HandleScreenConfigurationListReq(req *protos.ScreenConfigurationListReq, hc screenConfig.Owner = wsHelpers.MakeOwnerSummary(owner, hctx.SessUser, hctx.Svcs.MongoDB, hctx.Svcs.TimeStamper) } - return []*protos.ScreenConfigurationListResp{&protos.ScreenConfigurationListResp{ + return &protos.ScreenConfigurationListResp{ ScreenConfigurations: result, - }}, nil + }, nil } func writeScreenConfiguration(screenConfig *protos.ScreenConfiguration, hctx wsHelpers.HandlerContext, updateExisting bool) (*protos.ScreenConfiguration, error) { @@ -268,7 +268,7 @@ func loadWidgetsForScreenConfiguration(screenConfig *protos.ScreenConfiguration, return screenConfig, nil } -func HandleScreenConfigurationWriteReq(req *protos.ScreenConfigurationWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.ScreenConfigurationWriteResp, error) { +func HandleScreenConfigurationWriteReq(req *protos.ScreenConfigurationWriteReq, hctx wsHelpers.HandlerContext) (*protos.ScreenConfigurationWriteResp, error) { if req.ScreenConfiguration == nil { return nil, errors.New("screen configuration must be specified") } @@ -307,12 +307,12 @@ func HandleScreenConfigurationWriteReq(req *protos.ScreenConfigurationWriteReq, return nil, err } - return []*protos.ScreenConfigurationWriteResp{&protos.ScreenConfigurationWriteResp{ + return &protos.ScreenConfigurationWriteResp{ ScreenConfiguration: screenConfig, - }}, nil + }, nil } -func HandleScreenConfigurationDeleteReq(req *protos.ScreenConfigurationDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.ScreenConfigurationDeleteResp, error) { +func HandleScreenConfigurationDeleteReq(req *protos.ScreenConfigurationDeleteReq, hctx wsHelpers.HandlerContext) (*protos.ScreenConfigurationDeleteResp, error) { if req.Id == "" { return nil, errors.New("screen configuration id must be specified") } @@ -373,7 +373,7 @@ func HandleScreenConfigurationDeleteReq(req *protos.ScreenConfigurationDeleteReq return nil, err } - return []*protos.ScreenConfigurationDeleteResp{&protos.ScreenConfigurationDeleteResp{ + return &protos.ScreenConfigurationDeleteResp{ Id: req.Id, - }}, nil + }, nil } diff --git a/api/ws/handlers/selection-entry.go b/api/ws/handlers/selection-entry.go index e2a52368..95ec31b7 100644 --- a/api/ws/handlers/selection-entry.go +++ b/api/ws/handlers/selection-entry.go @@ -13,7 +13,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleSelectedScanEntriesReq(req *protos.SelectedScanEntriesReq, hctx wsHelpers.HandlerContext) ([]*protos.SelectedScanEntriesResp, error) { +func HandleSelectedScanEntriesReq(req *protos.SelectedScanEntriesReq, hctx wsHelpers.HandlerContext) (*protos.SelectedScanEntriesResp, error) { // We read multiple scans and assemble a single response // If any have an error, we error the whole thing out @@ -37,13 +37,13 @@ func HandleSelectedScanEntriesReq(req *protos.SelectedScanEntriesReq, hctx wsHel result[scanId] = idxs } - return []*protos.SelectedScanEntriesResp{&protos.SelectedScanEntriesResp{ + return &protos.SelectedScanEntriesResp{ ScanIdEntryIndexes: result, - }}, nil + }, nil } // Allowing user to save multiple scans worth of entry indexes in one message -func HandleSelectedScanEntriesWriteReq(req *protos.SelectedScanEntriesWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.SelectedScanEntriesWriteResp, error) { +func HandleSelectedScanEntriesWriteReq(req *protos.SelectedScanEntriesWriteReq, hctx wsHelpers.HandlerContext) (*protos.SelectedScanEntriesWriteResp, error) { // Cap it though for performance... if len(req.ScanIdEntryIndexes) > 10 { return nil, errors.New("Too many ScanIds written") @@ -56,7 +56,7 @@ func HandleSelectedScanEntriesWriteReq(req *protos.SelectedScanEntriesWriteReq, } } - return []*protos.SelectedScanEntriesWriteResp{&protos.SelectedScanEntriesWriteResp{}}, nil + return &protos.SelectedScanEntriesWriteResp{}, nil } func readSelection(id string, db *mongo.Database) (*protos.ScanEntryRange, error) { diff --git a/api/ws/handlers/selection-pixel.go b/api/ws/handlers/selection-pixel.go index 5fea6f78..a27af25e 100644 --- a/api/ws/handlers/selection-pixel.go +++ b/api/ws/handlers/selection-pixel.go @@ -5,22 +5,22 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleSelectedImagePixelsReq(req *protos.SelectedImagePixelsReq, hctx wsHelpers.HandlerContext) ([]*protos.SelectedImagePixelsResp, error) { +func HandleSelectedImagePixelsReq(req *protos.SelectedImagePixelsReq, hctx wsHelpers.HandlerContext) (*protos.SelectedImagePixelsResp, error) { idxs, err := readSelection("pix_"+req.Image+"_"+hctx.SessUser.User.Id, hctx.Svcs.MongoDB) if err != nil { return nil, err } - return []*protos.SelectedImagePixelsResp{&protos.SelectedImagePixelsResp{ + return &protos.SelectedImagePixelsResp{ PixelIndexes: idxs, - }}, nil + }, nil } -func HandleSelectedImagePixelsWriteReq(req *protos.SelectedImagePixelsWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.SelectedImagePixelsWriteResp, error) { +func HandleSelectedImagePixelsWriteReq(req *protos.SelectedImagePixelsWriteReq, hctx wsHelpers.HandlerContext) (*protos.SelectedImagePixelsWriteResp, error) { err := writeSelection("pix_"+req.Image+"_"+hctx.SessUser.User.Id, req.PixelIndexes, hctx.Svcs.MongoDB, hctx.Svcs.Log) if err != nil { return nil, err } - return []*protos.SelectedImagePixelsWriteResp{&protos.SelectedImagePixelsWriteResp{}}, nil + return &protos.SelectedImagePixelsWriteResp{}, nil } diff --git a/api/ws/handlers/spectrum.go b/api/ws/handlers/spectrum.go index 501b5c09..2f378f52 100644 --- a/api/ws/handlers/spectrum.go +++ b/api/ws/handlers/spectrum.go @@ -9,7 +9,7 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleSpectrumReq(req *protos.SpectrumReq, hctx wsHelpers.HandlerContext) ([]*protos.SpectrumResp, error) { +func HandleSpectrumReq(req *protos.SpectrumReq, hctx wsHelpers.HandlerContext) (*protos.SpectrumResp, error) { exprPB, indexes, err := beginDatasetFileReqForRange(req.ScanId, req.Entries, hctx) if err != nil { return nil, err @@ -48,7 +48,7 @@ func HandleSpectrumReq(req *protos.SpectrumReq, hctx wsHelpers.HandlerContext) ( // the channel count based on the detector here... channelCount := uint32(4096) - firstResponse := &protos.SpectrumResp{ + result := &protos.SpectrumResp{ SpectraPerLocation: spectra, ChannelCount: channelCount, NormalSpectraForScan: uint32(exprPB.NormalSpectra), @@ -57,7 +57,7 @@ func HandleSpectrumReq(req *protos.SpectrumReq, hctx wsHelpers.HandlerContext) ( for c, label := range exprPB.MetaLabels { if label == "LIVETIME" { - firstResponse.LiveTimeMetaIndex = uint32(c) + result.LiveTimeMetaIndex = uint32(c) break } } @@ -69,37 +69,11 @@ func HandleSpectrumReq(req *protos.SpectrumReq, hctx wsHelpers.HandlerContext) ( return nil, err } - firstResponse.BulkSpectra = bulkSpectra - firstResponse.MaxSpectra = maxSpectra + result.BulkSpectra = bulkSpectra + result.MaxSpectra = maxSpectra } - resps := []*protos.SpectrumResp{firstResponse} - - // If we have too many spectra in one message, break it up - maxSpectraPerMessage := 10 - if len(spectra) > maxSpectraPerMessage { - // Only add the first X to the first message - firstResponse.SpectraPerLocation = spectra[0:maxSpectraPerMessage] - - // Make more messages - for c := maxSpectraPerMessage; c < len(spectra); c += maxSpectraPerMessage { - end := c + maxSpectraPerMessage - if end > len(spectra) { - end = len(spectra) - } - - subsequentResp := &protos.SpectrumResp{ - SpectraPerLocation: spectra[c:end], - ChannelCount: firstResponse.ChannelCount, - NormalSpectraForScan: firstResponse.NormalSpectraForScan, - DwellSpectraForScan: firstResponse.DwellSpectraForScan, - LiveTimeMetaIndex: firstResponse.LiveTimeMetaIndex, - } - resps = append(resps, subsequentResp) - } - } - - return resps, nil + return result, nil } // Returns array of bulk, array of max, error diff --git a/api/ws/handlers/tag.go b/api/ws/handlers/tag.go index 4ec73aa5..db37a1c9 100644 --- a/api/ws/handlers/tag.go +++ b/api/ws/handlers/tag.go @@ -62,7 +62,7 @@ func decorateTag(tag *protos.TagDB, db *mongo.Database, log logger.ILogger) (*pr return decoratedTag, nil } -func HandleTagCreateReq(req *protos.TagCreateReq, hctx wsHelpers.HandlerContext) ([]*protos.TagCreateResp, error) { +func HandleTagCreateReq(req *protos.TagCreateReq, hctx wsHelpers.HandlerContext) (*protos.TagCreateResp, error) { // Limit tags to 50 characters if err := wsHelpers.CheckStringField(&req.Name, "Name", 1, 50); err != nil { return nil, err @@ -99,10 +99,10 @@ func HandleTagCreateReq(req *protos.TagCreateReq, hctx wsHelpers.HandlerContext) return nil, err } - return []*protos.TagCreateResp{&protos.TagCreateResp{Tag: resolvedTag}}, nil + return &protos.TagCreateResp{Tag: resolvedTag}, nil } -func HandleTagDeleteReq(req *protos.TagDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.TagDeleteResp, error) { +func HandleTagDeleteReq(req *protos.TagDeleteReq, hctx wsHelpers.HandlerContext) (*protos.TagDeleteResp, error) { ctx := context.TODO() coll := hctx.Svcs.MongoDB.Collection(dbCollections.TagsName) @@ -127,10 +127,10 @@ func HandleTagDeleteReq(req *protos.TagDeleteReq, hctx wsHelpers.HandlerContext) return nil, err } - return []*protos.TagDeleteResp{&protos.TagDeleteResp{}}, nil + return &protos.TagDeleteResp{}, nil } -func HandleTagListReq(req *protos.TagListReq, hctx wsHelpers.HandlerContext) ([]*protos.TagListResp, error) { +func HandleTagListReq(req *protos.TagListReq, hctx wsHelpers.HandlerContext) (*protos.TagListResp, error) { ctx := context.TODO() coll := hctx.Svcs.MongoDB.Collection(dbCollections.TagsName) @@ -153,5 +153,7 @@ func HandleTagListReq(req *protos.TagListReq, hctx wsHelpers.HandlerContext) ([] decoratedTags = append(decoratedTags, decoratedTag) } - return []*protos.TagListResp{&protos.TagListResp{Tags: decoratedTags}}, nil + tagResponse := &protos.TagListResp{Tags: decoratedTags} + + return tagResponse, nil } diff --git a/api/ws/handlers/test.go b/api/ws/handlers/test.go index c429d53e..72eb6cd8 100644 --- a/api/ws/handlers/test.go +++ b/api/ws/handlers/test.go @@ -7,6 +7,6 @@ import ( protos "github.com/pixlise/core/v4/generated-protos" ) -func HandleRunTestReq(req *protos.RunTestReq, hctx wsHelpers.HandlerContext) ([]*protos.RunTestResp, error) { +func HandleRunTestReq(req *protos.RunTestReq, hctx wsHelpers.HandlerContext) (*protos.RunTestResp, error) { return nil, errors.New("HandleRunTestReq not implemented yet") } diff --git a/api/ws/handlers/user-group-admins.go b/api/ws/handlers/user-group-admins.go index 3572504a..99bb34eb 100644 --- a/api/ws/handlers/user-group-admins.go +++ b/api/ws/handlers/user-group-admins.go @@ -12,26 +12,26 @@ import ( "go.mongodb.org/mongo-driver/bson" ) -func HandleUserGroupAddAdminReq(req *protos.UserGroupAddAdminReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupAddAdminResp, error) { +func HandleUserGroupAddAdminReq(req *protos.UserGroupAddAdminReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupAddAdminResp, error) { group, err := modifyGroupAdminList(req.GroupId, req.AdminUserId, true, hctx) if err != nil { return nil, err } - return []*protos.UserGroupAddAdminResp{&protos.UserGroupAddAdminResp{ + return &protos.UserGroupAddAdminResp{ Group: group, - }}, nil + }, nil } -func HandleUserGroupDeleteAdminReq(req *protos.UserGroupDeleteAdminReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupDeleteAdminResp, error) { +func HandleUserGroupDeleteAdminReq(req *protos.UserGroupDeleteAdminReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupDeleteAdminResp, error) { group, err := modifyGroupAdminList(req.GroupId, req.AdminUserId, false, hctx) if err != nil { return nil, err } - return []*protos.UserGroupDeleteAdminResp{&protos.UserGroupDeleteAdminResp{ + return &protos.UserGroupDeleteAdminResp{ Group: group, - }}, nil + }, nil } func modifyGroupAdminList(groupId string, adminUserId string, add bool, hctx wsHelpers.HandlerContext) (*protos.UserGroup, error) { diff --git a/api/ws/handlers/user-group-joining.go b/api/ws/handlers/user-group-joining.go index 91810d64..0af86c06 100644 --- a/api/ws/handlers/user-group-joining.go +++ b/api/ws/handlers/user-group-joining.go @@ -14,7 +14,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleUserGroupJoinReq(req *protos.UserGroupJoinReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupJoinResp, error) { +func HandleUserGroupJoinReq(req *protos.UserGroupJoinReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupJoinResp, error) { if err := wsHelpers.CheckStringField(&req.GroupId, "GroupId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -67,10 +67,10 @@ A user named %v has just requested to join the group as a %v`, group.Name, hctx. "PIXLISE API", ) - return []*protos.UserGroupJoinResp{&protos.UserGroupJoinResp{}}, nil + return &protos.UserGroupJoinResp{}, nil } -func HandleUserGroupIgnoreJoinReq(req *protos.UserGroupIgnoreJoinReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupIgnoreJoinResp, error) { +func HandleUserGroupIgnoreJoinReq(req *protos.UserGroupIgnoreJoinReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupIgnoreJoinResp, error) { if err := wsHelpers.CheckStringField(&req.GroupId, "GroupId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -100,10 +100,10 @@ func HandleUserGroupIgnoreJoinReq(req *protos.UserGroupIgnoreJoinReq, hctx wsHel hctx.Svcs.Log.Errorf("UserGroup Join Request Delete result had unexpected counts %+v id: %v", result, req.RequestId) } - return []*protos.UserGroupIgnoreJoinResp{&protos.UserGroupIgnoreJoinResp{}}, nil + return &protos.UserGroupIgnoreJoinResp{}, nil } -func HandleUserGroupJoinListReq(req *protos.UserGroupJoinListReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupJoinListResp, error) { +func HandleUserGroupJoinListReq(req *protos.UserGroupJoinListReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupJoinListResp, error) { if err := wsHelpers.CheckStringField(&req.GroupId, "GroupId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -142,7 +142,7 @@ func HandleUserGroupJoinListReq(req *protos.UserGroupJoinListReq, hctx wsHelpers item.Details = userDBItem.Info } - return []*protos.UserGroupJoinListResp{&protos.UserGroupJoinListResp{ + return &protos.UserGroupJoinListResp{ Requests: items, - }}, nil + }, nil } diff --git a/api/ws/handlers/user-group-management.go b/api/ws/handlers/user-group-management.go index adfc49ff..cd1290a8 100644 --- a/api/ws/handlers/user-group-management.go +++ b/api/ws/handlers/user-group-management.go @@ -13,7 +13,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleUserGroupCreateReq(req *protos.UserGroupCreateReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupCreateResp, error) { +func HandleUserGroupCreateReq(req *protos.UserGroupCreateReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupCreateResp, error) { // Should only be called if we have admin rights, no other permission issues here if err := wsHelpers.CheckStringField(&req.Name, "Name", 1, 50); err != nil { return nil, err @@ -64,10 +64,10 @@ func HandleUserGroupCreateReq(req *protos.UserGroupCreateReq, hctx wsHelpers.Han return nil, err } - return []*protos.UserGroupCreateResp{&protos.UserGroupCreateResp{Group: groupSend}}, nil + return &protos.UserGroupCreateResp{Group: groupSend}, nil } -func HandleUserGroupDeleteReq(req *protos.UserGroupDeleteReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupDeleteResp, error) { +func HandleUserGroupDeleteReq(req *protos.UserGroupDeleteReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupDeleteResp, error) { // Should only be called if we have admin rights, no other permission issues here if err := wsHelpers.CheckStringField(&req.GroupId, "GroupId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err @@ -111,10 +111,10 @@ func HandleUserGroupDeleteReq(req *protos.UserGroupDeleteReq, hctx wsHelpers.Han hctx.Svcs.Log.Errorf("UserGroup Delete result had unexpected counts %+v id: %v", result, req.GroupId) } - return []*protos.UserGroupDeleteResp{&protos.UserGroupDeleteResp{}}, nil + return &protos.UserGroupDeleteResp{}, nil } -func HandleUserGroupSetNameReq(req *protos.UserGroupSetNameReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupSetNameResp, error) { +func HandleUserGroupSetNameReq(req *protos.UserGroupSetNameReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupSetNameResp, error) { // Should only be called if we have admin rights, no other permission issues here if err := wsHelpers.CheckStringField(&req.GroupId, "GroupId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err @@ -157,7 +157,7 @@ func HandleUserGroupSetNameReq(req *protos.UserGroupSetNameReq, hctx wsHelpers.H return nil, err } - return []*protos.UserGroupSetNameResp{&protos.UserGroupSetNameResp{Group: groupSend}}, nil + return &protos.UserGroupSetNameResp{Group: groupSend}, nil } func checkUserGroupNameExists(name string, ctx context.Context, coll *mongo.Collection) (bool, error, *mongo.SingleResult) { diff --git a/api/ws/handlers/user-group-membership.go b/api/ws/handlers/user-group-membership.go index c6509d18..24869a63 100644 --- a/api/ws/handlers/user-group-membership.go +++ b/api/ws/handlers/user-group-membership.go @@ -16,48 +16,48 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleUserGroupAddViewerReq(req *protos.UserGroupAddViewerReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupAddViewerResp, error) { +func HandleUserGroupAddViewerReq(req *protos.UserGroupAddViewerReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupAddViewerResp, error) { group, err := modifyGroupMembershipList(req.GroupId, req.GetGroupViewerId(), req.GetUserViewerId(), true, true, hctx) if err != nil { return nil, err } - return []*protos.UserGroupAddViewerResp{&protos.UserGroupAddViewerResp{ + return &protos.UserGroupAddViewerResp{ Group: group, - }}, nil + }, nil } -func HandleUserGroupDeleteViewerReq(req *protos.UserGroupDeleteViewerReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupDeleteViewerResp, error) { +func HandleUserGroupDeleteViewerReq(req *protos.UserGroupDeleteViewerReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupDeleteViewerResp, error) { group, err := modifyGroupMembershipList(req.GroupId, req.GetGroupViewerId(), req.GetUserViewerId(), true, false, hctx) if err != nil { return nil, err } - return []*protos.UserGroupDeleteViewerResp{&protos.UserGroupDeleteViewerResp{ + return &protos.UserGroupDeleteViewerResp{ Group: group, - }}, nil + }, nil } -func HandleUserGroupAddMemberReq(req *protos.UserGroupAddMemberReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupAddMemberResp, error) { +func HandleUserGroupAddMemberReq(req *protos.UserGroupAddMemberReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupAddMemberResp, error) { group, err := modifyGroupMembershipList(req.GroupId, req.GetGroupMemberId(), req.GetUserMemberId(), false, true, hctx) if err != nil { return nil, err } - return []*protos.UserGroupAddMemberResp{&protos.UserGroupAddMemberResp{ + return &protos.UserGroupAddMemberResp{ Group: group, - }}, nil + }, nil } -func HandleUserGroupDeleteMemberReq(req *protos.UserGroupDeleteMemberReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupDeleteMemberResp, error) { +func HandleUserGroupDeleteMemberReq(req *protos.UserGroupDeleteMemberReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupDeleteMemberResp, error) { group, err := modifyGroupMembershipList(req.GroupId, req.GetGroupMemberId(), req.GetUserMemberId(), false, false, hctx) if err != nil { return nil, err } - return []*protos.UserGroupDeleteMemberResp{&protos.UserGroupDeleteMemberResp{ + return &protos.UserGroupDeleteMemberResp{ Group: group, - }}, nil + }, nil } // Does the job of the above... diff --git a/api/ws/handlers/user-group-retrieval.go b/api/ws/handlers/user-group-retrieval.go index 493ed2ad..15960105 100644 --- a/api/ws/handlers/user-group-retrieval.go +++ b/api/ws/handlers/user-group-retrieval.go @@ -13,7 +13,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/options" ) -func HandleUserGroupListReq(req *protos.UserGroupListReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupListResp, error) { +func HandleUserGroupListReq(req *protos.UserGroupListReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupListResp, error) { // Should only be called if we have admin rights, so other permission issues here ctx := context.TODO() coll := hctx.Svcs.MongoDB.Collection(dbCollections.UserGroupsName) @@ -53,13 +53,13 @@ func HandleUserGroupListReq(req *protos.UserGroupListReq, hctx wsHelpers.Handler }) } - return []*protos.UserGroupListResp{&protos.UserGroupListResp{ + return &protos.UserGroupListResp{ GroupInfos: groupInfos, - }}, nil + }, nil } // Getting an individual user group - this should only be allowed for PIXLISE_ADMIN permissioned users, or group admins -func HandleUserGroupReq(req *protos.UserGroupReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupResp, error) { +func HandleUserGroupReq(req *protos.UserGroupReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupResp, error) { if err := wsHelpers.CheckStringField(&req.GroupId, "GroupId", 1, wsHelpers.IdFieldMaxLength); err != nil { return nil, err } @@ -89,12 +89,12 @@ func HandleUserGroupReq(req *protos.UserGroupReq, hctx wsHelpers.HandlerContext) return nil, err } - return []*protos.UserGroupResp{&protos.UserGroupResp{ + return &protos.UserGroupResp{ Group: decGroup, - }}, nil + }, nil } -func HandleUserGroupListJoinableReq(req *protos.UserGroupListJoinableReq, hctx wsHelpers.HandlerContext) ([]*protos.UserGroupListJoinableResp, error) { +func HandleUserGroupListJoinableReq(req *protos.UserGroupListJoinableReq, hctx wsHelpers.HandlerContext) (*protos.UserGroupListJoinableResp, error) { // Should only be called if we have admin rights, so other permission issues here ctx := context.TODO() coll := hctx.Svcs.MongoDB.Collection(dbCollections.UserGroupsName) @@ -175,7 +175,7 @@ func HandleUserGroupListJoinableReq(req *protos.UserGroupListJoinableReq, hctx w }) } - return []*protos.UserGroupListJoinableResp{&protos.UserGroupListJoinableResp{ + return &protos.UserGroupListJoinableResp{ Groups: groupSummaries, - }}, nil + }, nil } diff --git a/api/ws/handlers/user-management.go b/api/ws/handlers/user-management.go index 21b9cbb1..adf9c1bb 100644 --- a/api/ws/handlers/user-management.go +++ b/api/ws/handlers/user-management.go @@ -13,7 +13,7 @@ import ( // ///////////////////////////////////////////////////////////////////// // Listing users from Auth0 -func HandleUserListReq(req *protos.UserListReq, hctx wsHelpers.HandlerContext) ([]*protos.UserListResp, error) { +func HandleUserListReq(req *protos.UserListReq, hctx wsHelpers.HandlerContext) (*protos.UserListResp, error) { auth0API, err := auth0login.InitAuth0ManagementAPI(hctx.Svcs.Config) if err != nil { return nil, err @@ -40,12 +40,12 @@ func HandleUserListReq(req *protos.UserListReq, hctx wsHelpers.HandlerContext) ( page++ } - return []*protos.UserListResp{&protos.UserListResp{Details: users}}, err + return &protos.UserListResp{Details: users}, err } // ///////////////////////////////////////////////////////////////////// // Getting a users roles -func HandleUserRolesListReq(req *protos.UserRolesListReq, hctx wsHelpers.HandlerContext) ([]*protos.UserRolesListResp, error) { +func HandleUserRolesListReq(req *protos.UserRolesListReq, hctx wsHelpers.HandlerContext) (*protos.UserRolesListResp, error) { if err := wsHelpers.CheckStringField(&req.UserId, "UserId", 5, wsHelpers.Auth0UserIdFieldMaxLength); err != nil { return nil, err } @@ -60,14 +60,14 @@ func HandleUserRolesListReq(req *protos.UserRolesListReq, hctx wsHelpers.Handler return nil, err } - return []*protos.UserRolesListResp{&protos.UserRolesListResp{ + return &protos.UserRolesListResp{ Roles: makeRoleList(gotRoles), - }}, nil + }, nil } // ///////////////////////////////////////////////////////////////////// // Managing a users roles -func HandleUserAddRoleReq(req *protos.UserAddRoleReq, hctx wsHelpers.HandlerContext) ([]*protos.UserAddRoleResp, error) { +func HandleUserAddRoleReq(req *protos.UserAddRoleReq, hctx wsHelpers.HandlerContext) (*protos.UserAddRoleResp, error) { if err := wsHelpers.CheckStringField(&req.UserId, "UserId", 5, wsHelpers.Auth0UserIdFieldMaxLength); err != nil { return nil, err } @@ -119,13 +119,10 @@ func HandleUserAddRoleReq(req *protos.UserAddRoleReq, hctx wsHelpers.HandlerCont } err = auth0API.User.AssignRoles(userID, &management.Role{ID: &roleID}) - if err != nil { - return nil, err - } - return []*protos.UserAddRoleResp{&protos.UserAddRoleResp{}}, nil + return nil, err } -func HandleUserDeleteRoleReq(req *protos.UserDeleteRoleReq, hctx wsHelpers.HandlerContext) ([]*protos.UserDeleteRoleResp, error) { +func HandleUserDeleteRoleReq(req *protos.UserDeleteRoleReq, hctx wsHelpers.HandlerContext) (*protos.UserDeleteRoleResp, error) { if err := wsHelpers.CheckStringField(&req.UserId, "UserId", 5, wsHelpers.Auth0UserIdFieldMaxLength); err != nil { return nil, err } @@ -139,15 +136,12 @@ func HandleUserDeleteRoleReq(req *protos.UserDeleteRoleReq, hctx wsHelpers.Handl } err = auth0API.User.RemoveRoles(req.UserId, &management.Role{ID: &req.RoleId}) - if err != nil { - return nil, err - } - return []*protos.UserDeleteRoleResp{&protos.UserDeleteRoleResp{}}, err + return nil, err } // ///////////////////////////////////////////////////////////////////// // Getting all user roles -func HandleUserRoleListReq(req *protos.UserRoleListReq, hctx wsHelpers.HandlerContext) ([]*protos.UserRoleListResp, error) { +func HandleUserRoleListReq(req *protos.UserRoleListReq, hctx wsHelpers.HandlerContext) (*protos.UserRoleListResp, error) { auth0API, err := auth0login.InitAuth0ManagementAPI(hctx.Svcs.Config) if err != nil { return nil, err @@ -159,9 +153,9 @@ func HandleUserRoleListReq(req *protos.UserRoleListReq, hctx wsHelpers.HandlerCo return nil, err } - return []*protos.UserRoleListResp{&protos.UserRoleListResp{ + return &protos.UserRoleListResp{ Roles: makeRoleList(gotRoles), - }}, nil + }, nil } // ///////////////////////////////////////////////////////////////////// diff --git a/api/ws/handlers/user-notification-setting.go b/api/ws/handlers/user-notification-setting.go index 55b58c87..b2d00a8d 100644 --- a/api/ws/handlers/user-notification-setting.go +++ b/api/ws/handlers/user-notification-setting.go @@ -11,18 +11,18 @@ import ( "go.mongodb.org/mongo-driver/bson" ) -func HandleUserNotificationSettingsReq(req *protos.UserNotificationSettingsReq, hctx wsHelpers.HandlerContext) ([]*protos.UserNotificationSettingsResp, error) { +func HandleUserNotificationSettingsReq(req *protos.UserNotificationSettingsReq, hctx wsHelpers.HandlerContext) (*protos.UserNotificationSettingsResp, error) { userDBItem, err := wsHelpers.GetDBUser(hctx.SessUser.User.Id, hctx.Svcs.MongoDB) if err != nil { return nil, err } - return []*protos.UserNotificationSettingsResp{&protos.UserNotificationSettingsResp{ + return &protos.UserNotificationSettingsResp{ Notifications: userDBItem.NotificationSettings, - }}, nil + }, nil } -func HandleUserNotificationSettingsWriteReq(req *protos.UserNotificationSettingsWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.UserNotificationSettingsWriteResp, error) { +func HandleUserNotificationSettingsWriteReq(req *protos.UserNotificationSettingsWriteReq, hctx wsHelpers.HandlerContext) (*protos.UserNotificationSettingsWriteResp, error) { if req.Notifications == nil || req.Notifications.TopicSettings == nil { return nil, errorwithstatus.MakeBadRequestError(errors.New("Notifications must be set")) } @@ -40,5 +40,5 @@ func HandleUserNotificationSettingsWriteReq(req *protos.UserNotificationSettings return nil, err } - return []*protos.UserNotificationSettingsWriteResp{&protos.UserNotificationSettingsWriteResp{}}, nil + return &protos.UserNotificationSettingsWriteResp{}, nil } diff --git a/api/ws/handlers/user.go b/api/ws/handlers/user.go index 15d70a9e..05ffb0bc 100644 --- a/api/ws/handlers/user.go +++ b/api/ws/handlers/user.go @@ -14,7 +14,7 @@ import ( "go.mongodb.org/mongo-driver/mongo" ) -func HandleUserDetailsReq(req *protos.UserDetailsReq, hctx wsHelpers.HandlerContext) ([]*protos.UserDetailsResp, error) { +func HandleUserDetailsReq(req *protos.UserDetailsReq, hctx wsHelpers.HandlerContext) (*protos.UserDetailsResp, error) { userDBItem, err := wsHelpers.GetDBUser(hctx.SessUser.User.Id, hctx.Svcs.MongoDB) if err != nil { return nil, err @@ -26,16 +26,16 @@ func HandleUserDetailsReq(req *protos.UserDetailsReq, hctx wsHelpers.HandlerCont // map doesn't help either! sort.Strings(perms) - return []*protos.UserDetailsResp{&protos.UserDetailsResp{ + return &protos.UserDetailsResp{ Details: &protos.UserDetails{ Info: userDBItem.Info, DataCollectionVersion: userDBItem.DataCollectionVersion, Permissions: perms, }, - }}, nil + }, nil } -func HandleUserDetailsWriteReq(req *protos.UserDetailsWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.UserDetailsWriteResp, error) { +func HandleUserDetailsWriteReq(req *protos.UserDetailsWriteReq, hctx wsHelpers.HandlerContext) (*protos.UserDetailsWriteResp, error) { if &req.Name != nil && req.Name != "" { if err := wsHelpers.CheckStringField(&req.Name, "Name", 1, 50); err != nil { return nil, err @@ -94,10 +94,10 @@ func HandleUserDetailsWriteReq(req *protos.UserDetailsWriteReq, hctx wsHelpers.H // TODO: Trigger user details update (?) - return []*protos.UserDetailsWriteResp{&protos.UserDetailsWriteResp{}}, nil + return &protos.UserDetailsWriteResp{}, nil } -func HandleUserSearchReq(req *protos.UserSearchReq, hctx wsHelpers.HandlerContext) ([]*protos.UserSearchResp, error) { +func HandleUserSearchReq(req *protos.UserSearchReq, hctx wsHelpers.HandlerContext) (*protos.UserSearchResp, error) { if err := wsHelpers.CheckStringField(&req.SearchString, "SearchString", 0, 100); err != nil { return nil, err } @@ -115,9 +115,9 @@ func HandleUserSearchReq(req *protos.UserSearchReq, hctx wsHelpers.HandlerContex if err != nil { if err == mongo.ErrNoDocuments { // Silent error, just return empty - return []*protos.UserSearchResp{&protos.UserSearchResp{ + return &protos.UserSearchResp{ Users: []*protos.UserInfo{}, - }}, nil + }, nil } return nil, err @@ -134,7 +134,7 @@ func HandleUserSearchReq(req *protos.UserSearchReq, hctx wsHelpers.HandlerContex users = append(users, user.Info) } - return []*protos.UserSearchResp{&protos.UserSearchResp{ + return &protos.UserSearchResp{ Users: users, - }}, nil + }, nil } diff --git a/api/ws/handlers/widget-data.go b/api/ws/handlers/widget-data.go index 1af4662e..538a7762 100644 --- a/api/ws/handlers/widget-data.go +++ b/api/ws/handlers/widget-data.go @@ -10,7 +10,7 @@ import ( "go.mongodb.org/mongo-driver/bson" ) -func HandleWidgetDataGetReq(req *protos.WidgetDataGetReq, hctx wsHelpers.HandlerContext) ([]*protos.WidgetDataGetResp, error) { +func HandleWidgetDataGetReq(req *protos.WidgetDataGetReq, hctx wsHelpers.HandlerContext) (*protos.WidgetDataGetResp, error) { result := hctx.Svcs.MongoDB.Collection(dbCollections.WidgetDataName).FindOne(context.TODO(), bson.M{ "_id": req.Id, }) @@ -25,12 +25,12 @@ func HandleWidgetDataGetReq(req *protos.WidgetDataGetReq, hctx wsHelpers.Handler return nil, err } - return []*protos.WidgetDataGetResp{&protos.WidgetDataGetResp{ + return &protos.WidgetDataGetResp{ WidgetData: widgetData, - }}, nil + }, nil } -func HandleWidgetDataWriteReq(req *protos.WidgetDataWriteReq, hctx wsHelpers.HandlerContext) ([]*protos.WidgetDataWriteResp, error) { +func HandleWidgetDataWriteReq(req *protos.WidgetDataWriteReq, hctx wsHelpers.HandlerContext) (*protos.WidgetDataWriteResp, error) { if req.WidgetData.Id == "" { return nil, errors.New("widget data must have a predefined id to write to") } @@ -56,7 +56,7 @@ func HandleWidgetDataWriteReq(req *protos.WidgetDataWriteReq, hctx wsHelpers.Han return nil, err } - return []*protos.WidgetDataWriteResp{&protos.WidgetDataWriteResp{ + return &protos.WidgetDataWriteResp{ WidgetData: req.WidgetData, - }}, nil + }, nil } diff --git a/api/ws/ws.go b/api/ws/ws.go index 07be5bb0..78031ec5 100644 --- a/api/ws/ws.go +++ b/api/ws/ws.go @@ -165,28 +165,24 @@ func (ws *WSHandler) HandleMessage(s *melody.Session, msg []byte) { Svcs: ws.svcs, } - resps, err := ws.dispatchWSMessage(&wsmsg, ctx) + resp, err := ws.dispatchWSMessage(&wsmsg, ctx) if err != nil { fmt.Printf("HandleMessage: %v\n", err) } - if resps != nil && len(resps) > 0 { - for _, resp := range resps { - if resp != nil { - // Set incoming message ID on the outgoing one - resp.MsgId = wsmsg.MsgId + if resp != nil { + // Set incoming message ID on the outgoing one + resp.MsgId = wsmsg.MsgId - // Print out errors - if len(resp.ErrorText) > 0 { - fmt.Printf("Sending Response Error for msg id %v:\n %v\n", resp.MsgId-1, resp.ErrorText) - } - - // Send - wsHelpers.SendForSession(s, resp) - } + // Print out errors + if len(resp.ErrorText) > 0 { + fmt.Printf("Sending Response Error for msg id %v:\n %v\n", resp.MsgId-1, resp.ErrorText) } + + // Send + wsHelpers.SendForSession(s, resp) } else { - fmt.Printf("WARNING: No response generated for request: %+v\n", wsmsg) + fmt.Printf("WARNING: No response generated for request: %+v\n", resp) } } diff --git a/api/ws/wsHelpers/db.go b/api/ws/wsHelpers/db.go index 0138d6c0..f4d52bf1 100644 --- a/api/ws/wsHelpers/db.go +++ b/api/ws/wsHelpers/db.go @@ -14,7 +14,7 @@ import ( "go.mongodb.org/mongo-driver/mongo/writeconcern" ) -func DeleteUserObject[T any](objectId string, objectType protos.ObjectType, collectionName string, hctx HandlerContext) ([]*T, error) { +func DeleteUserObject[T any](objectId string, objectType protos.ObjectType, collectionName string, hctx HandlerContext) (*T, error) { ctx := context.TODO() _, err := CheckObjectAccess(true, objectId, objectType, hctx) @@ -63,7 +63,7 @@ func DeleteUserObject[T any](objectId string, objectType protos.ObjectType, coll // Delete responses are just empty msgs var resp T - return []*T{&resp}, nil + return &resp, nil } func GetUserObjectById[T any](forEditing bool, objectId string, objectType protos.ObjectType, collectionName string, hctx HandlerContext) (*T, *protos.OwnershipItem, error) { diff --git a/data-formats b/data-formats index 0c1eb61d..c37dd2d9 160000 --- a/data-formats +++ b/data-formats @@ -1 +1 @@ -Subproject commit 0c1eb61d24cad830d9932b8222f90583eb9f3aaa +Subproject commit c37dd2d94a6564c613c11906cc47ff71ad09ab65 From 368f1f1a2f06461829d7a20ed8975dfcd701408d Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Tue, 21 May 2024 16:07:19 +1000 Subject: [PATCH 04/17] Use latest data-formats --- data-formats | 2 +- generated-protos/websocket.pb.go | 41 ++++++++++++++------------------ 2 files changed, 19 insertions(+), 24 deletions(-) diff --git a/data-formats b/data-formats index c37dd2d9..366bd842 160000 --- a/data-formats +++ b/data-formats @@ -1 +1 @@ -Subproject commit c37dd2d94a6564c613c11906cc47ff71ad09ab65 +Subproject commit 366bd8422108ec962c8d9d0cbf63478a35c38cca diff --git a/generated-protos/websocket.pb.go b/generated-protos/websocket.pb.go index f980dd57..a5d3a437 100644 --- a/generated-protos/websocket.pb.go +++ b/generated-protos/websocket.pb.go @@ -31,6 +31,9 @@ const ( ResponseStatus_WS_BAD_REQUEST ResponseStatus = 3 ResponseStatus_WS_NO_PERMISSION ResponseStatus = 4 ResponseStatus_WS_SERVER_ERROR ResponseStatus = 5 + // Really, this is likely a client-side error but included here + // so it's in the enum + ResponseStatus_WS_TIMEOUT ResponseStatus = 6 ) // Enum value maps for ResponseStatus. @@ -42,6 +45,7 @@ var ( 3: "WS_BAD_REQUEST", 4: "WS_NO_PERMISSION", 5: "WS_SERVER_ERROR", + 6: "WS_TIMEOUT", } ResponseStatus_value = map[string]int32{ "WS_UNDEFINED": 0, @@ -50,6 +54,7 @@ var ( "WS_BAD_REQUEST": 3, "WS_NO_PERMISSION": 4, "WS_SERVER_ERROR": 5, + "WS_TIMEOUT": 6, } ) @@ -97,8 +102,6 @@ type WSMessage struct { Status ResponseStatus `protobuf:"varint,2,opt,name=status,proto3,enum=ResponseStatus" json:"status,omitempty"` // Error text - if the response status is not WS_OK, this can contain any error string we want to send back ErrorText string `protobuf:"bytes,3,opt,name=errorText,proto3" json:"errorText,omitempty"` - // Signalling this message is not yet complete, more will be sent - Incomplete bool `protobuf:"varint,4,opt,name=incomplete,proto3" json:"incomplete,omitempty"` // Types that are assignable to Contents: // // *WSMessage_DataModuleAddVersionReq @@ -423,13 +426,6 @@ func (x *WSMessage) GetErrorText() string { return "" } -func (x *WSMessage) GetIncomplete() bool { - if x != nil { - return x.Incomplete - } - return false -} - func (m *WSMessage) GetContents() isWSMessage_Contents { if m != nil { return m.Contents @@ -3976,16 +3972,14 @@ var file_websocket_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2d, 0x64, 0x61, 0x74, - 0x61, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x93, 0xa4, 0x01, + 0x61, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0xa3, 0x01, 0x0a, 0x09, 0x57, 0x53, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0f, 0x2e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x52, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x65, - 0x72, 0x72, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x1e, 0x0a, 0x0a, 0x69, 0x6e, 0x63, 0x6f, - 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x69, 0x6e, - 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x55, 0x0a, 0x17, 0x64, 0x61, 0x74, 0x61, + 0x72, 0x72, 0x6f, 0x72, 0x54, 0x65, 0x78, 0x74, 0x12, 0x55, 0x0a, 0x17, 0x64, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xc6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x44, 0x61, 0x74, 0x61, 0x4d, 0x6f, 0x64, 0x75, 0x6c, 0x65, 0x41, 0x64, 0x64, 0x56, 0x65, 0x72, 0x73, 0x69, 0x6f, @@ -5290,16 +5284,17 @@ var file_websocket_proto_rawDesc = []byte{ 0x32, 0x11, 0x2e, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x10, 0x7a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0a, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x73, 0x2a, 0x7e, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x53, 0x5f, 0x55, 0x4e, 0x44, 0x45, - 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x53, 0x5f, 0x4f, 0x4b, - 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, 0x55, - 0x4e, 0x44, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x57, 0x53, 0x5f, 0x42, 0x41, 0x44, 0x5f, 0x52, - 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x57, 0x53, 0x5f, 0x4e, - 0x4f, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, 0x13, - 0x0a, 0x0f, 0x57, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, 0x4f, - 0x52, 0x10, 0x05, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6e, 0x74, 0x73, 0x2a, 0x8e, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x53, 0x5f, 0x55, 0x4e, 0x44, + 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x53, 0x5f, 0x4f, + 0x4b, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, + 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x57, 0x53, 0x5f, 0x42, 0x41, 0x44, 0x5f, + 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x57, 0x53, 0x5f, + 0x4e, 0x4f, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, + 0x13, 0x0a, 0x0f, 0x57, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, + 0x4f, 0x52, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x57, 0x53, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, + 0x55, 0x54, 0x10, 0x06, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( From d0cd06e108cbb8d2d06af784faf9edb28b03eabb Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Fri, 24 May 2024 06:34:38 +1000 Subject: [PATCH 05/17] Fixing scan notifications - correctly identifies new vs updates, and only runs auto-quants the first time scan is detected to be complete --- api/dataimport/internal/output/output.go | 9 +- api/dataimport/internal/output/summary.go | 48 +++++++-- data-formats | 2 +- generated-protos/scan.pb.go | 122 +++++++++++++--------- internal/api/main.go | 25 +++-- 5 files changed, 138 insertions(+), 68 deletions(-) diff --git a/api/dataimport/internal/output/output.go b/api/dataimport/internal/output/output.go index e67d6e2a..07757757 100644 --- a/api/dataimport/internal/output/output.go +++ b/api/dataimport/internal/output/output.go @@ -38,6 +38,7 @@ import ( "github.com/pixlise/core/v4/core/fileaccess" "github.com/pixlise/core/v4/core/gdsfilename" "github.com/pixlise/core/v4/core/logger" + "github.com/pixlise/core/v4/core/scan" "github.com/pixlise/core/v4/core/utils" protos "github.com/pixlise/core/v4/generated-protos" "go.mongodb.org/mongo-driver/bson" @@ -361,7 +362,13 @@ func (s *PIXLISEDataSaver) Save( return fmt.Errorf("Failed to get dataset file size for: %v", outFilePath) } - summaryData := makeSummaryFileContent(&exp, data.DatasetID, data.Instrument, data.Meta, int(fi.Size()), creationUnixTimeSec, data.CreatorUserId) + var prevSavedScan *protos.ScanItem + if prevSavedScan, err = scan.ReadScanItem(data.DatasetID, db); err != nil { + // NOTE: this is largely paranoia, in case ReadScanItem changes and returns errors even on read + prevSavedScan = nil + } + + summaryData := makeSummaryFileContent(&exp, prevSavedScan, data.DatasetID, data.Instrument, data.Meta /*int(fi.Size()),*/, creationUnixTimeSec, data.CreatorUserId) jobLog.Infof("Writing summary to DB for %v...", summaryData.Id) diff --git a/api/dataimport/internal/output/summary.go b/api/dataimport/internal/output/summary.go index 10721293..cc90f6c7 100644 --- a/api/dataimport/internal/output/summary.go +++ b/api/dataimport/internal/output/summary.go @@ -27,10 +27,11 @@ import ( func makeSummaryFileContent( exp *protos.Experiment, + prevSavedScan *protos.ScanItem, datasetID string, sourceInstrument protos.ScanInstrument, meta dataConvertModels.FileMetaData, - fileSize int, + //fileSize int, creationUnixTimeSec int64, creatorUserId string) *protos.ScanItem { contextImgCount := len(exp.AlignedContextImages) + len(exp.UnalignedContextImages) + len(exp.MatchedAlignedContextImages) @@ -93,16 +94,41 @@ func makeSummaryFileContent( // what it's displaying s := &protos.ScanItem{ - Id: datasetID, - Title: meta.Title, - Description: "", - DataTypes: dataTypes, - Instrument: sourceInstrument, - InstrumentConfig: exp.DetectorConfig, - TimestampUnixSec: uint32(creationUnixTimeSec), - Meta: saveMeta, - ContentCounts: contentCounts, - CreatorUserId: creatorUserId, + Id: datasetID, + Title: meta.Title, + Description: "", + DataTypes: dataTypes, + Instrument: sourceInstrument, + InstrumentConfig: exp.DetectorConfig, + TimestampUnixSec: uint32(creationUnixTimeSec), + Meta: saveMeta, + ContentCounts: contentCounts, + CreatorUserId: creatorUserId, + PreviousImportTimesUnixSec: []uint32{}, } + + // If we've got a previously stored ScanItem, we are updating it, so read its time stamp into the array of previous time stamps + isComplete := exp.NormalSpectra == exp.PseudoIntensities*2 + + if prevSavedScan != nil { + // Build the list of previous import times + // Preserve the previous list... + s.PreviousImportTimesUnixSec = append(s.PreviousImportTimesUnixSec, prevSavedScan.PreviousImportTimesUnixSec...) + + // Add new time at the end + s.PreviousImportTimesUnixSec = append(s.PreviousImportTimesUnixSec, prevSavedScan.TimestampUnixSec) + } + + // Save a time stamp for completion + if isComplete { + // If previous scan was also complete, DON'T update the time stamp, just preserve it + if prevSavedScan != nil && prevSavedScan.CompleteTimeStampUnixSec > 0 { + s.CompleteTimeStampUnixSec = prevSavedScan.CompleteTimeStampUnixSec + } else { + // We must've just completed now, so save the time + s.CompleteTimeStampUnixSec = uint32(creationUnixTimeSec) + } + } + return s } diff --git a/data-formats b/data-formats index 366bd842..25df9b4e 160000 --- a/data-formats +++ b/data-formats @@ -1 +1 @@ -Subproject commit 366bd8422108ec962c8d9d0cbf63478a35c38cca +Subproject commit 25df9b4e61640f1bcbd3aaf22844cff84fe5f438 diff --git a/generated-protos/scan.pb.go b/generated-protos/scan.pb.go index a9198a5b..49441601 100644 --- a/generated-protos/scan.pb.go +++ b/generated-protos/scan.pb.go @@ -218,6 +218,10 @@ type ScanItem struct { CreatorUserId string `protobuf:"bytes,10,opt,name=creatorUserId,proto3" json:"creatorUserId,omitempty"` // Optional, but dataset may have been uploaded by a given user Owner *OwnershipSummary `protobuf:"bytes,11,opt,name=owner,proto3" json:"owner,omitempty" bson:"-"` Tags []string `protobuf:"bytes,12,rep,name=tags,proto3" json:"tags,omitempty"` + // If we import multiple times, we save the import time in our scan item + PreviousImportTimesUnixSec []uint32 `protobuf:"varint,13,rep,packed,name=previousImportTimesUnixSec,proto3" json:"previousImportTimesUnixSec,omitempty"` + // Time stamp when we had a complete scan (have all normal spectra) + CompleteTimeStampUnixSec uint32 `protobuf:"varint,14,opt,name=completeTimeStampUnixSec,proto3" json:"completeTimeStampUnixSec,omitempty"` } func (x *ScanItem) Reset() { @@ -336,6 +340,20 @@ func (x *ScanItem) GetTags() []string { return nil } +func (x *ScanItem) GetPreviousImportTimesUnixSec() []uint32 { + if x != nil { + return x.PreviousImportTimesUnixSec + } + return nil +} + +func (x *ScanItem) GetCompleteTimeStampUnixSec() uint32 { + if x != nil { + return x.CompleteTimeStampUnixSec + } + return 0 +} + type ScanMetaDataItem struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -618,7 +636,7 @@ var File_scan_proto protoreflect.FileDescriptor var file_scan_proto_rawDesc = []byte{ 0x0a, 0x0a, 0x73, 0x63, 0x61, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x2d, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xaf, 0x05, 0x0a, 0x08, 0x53, 0x63, 0x61, 0x6e, 0x49, 0x74, 0x65, + 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xab, 0x06, 0x0a, 0x08, 0x53, 0x63, 0x61, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x69, 0x74, 0x6c, 0x65, 0x12, 0x20, 0x0a, 0x0b, 0x64, 0x65, 0x73, 0x63, 0x72, @@ -648,53 +666,61 @@ var file_scan_proto_rawDesc = []byte{ 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x53, 0x75, 0x6d, 0x6d, 0x61, 0x72, 0x79, 0x52, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x61, 0x67, 0x73, 0x18, 0x0c, 0x20, - 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x1a, 0x50, 0x0a, 0x0d, 0x53, 0x63, 0x61, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x08, 0x64, 0x61, - 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x53, - 0x63, 0x61, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x64, 0x61, 0x74, - 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x37, 0x0a, 0x09, 0x4d, - 0x65, 0x74, 0x61, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, - 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x40, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x43, - 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, - 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, - 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0x69, 0x0a, 0x10, 0x53, 0x63, 0x61, 0x6e, 0x4d, 0x65, - 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x06, 0x66, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x06, 0x66, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x06, 0x69, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x48, 0x00, 0x52, 0x06, 0x69, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, - 0x0a, 0x06, 0x73, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, - 0x52, 0x06, 0x73, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x22, 0x2a, 0x0a, 0x0e, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x05, 0x52, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x22, 0x78, 0x0a, - 0x12, 0x53, 0x63, 0x61, 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x45, 0x6e, - 0x74, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x28, 0x0a, 0x07, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x07, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x12, 0x28, 0x0a, - 0x07, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x07, - 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x73, 0x2a, 0x45, 0x0a, 0x0c, 0x53, 0x63, 0x61, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x5f, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x5f, 0x49, 0x4d, - 0x41, 0x47, 0x45, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, 0x5f, 0x58, 0x52, 0x46, 0x10, - 0x02, 0x12, 0x0b, 0x0a, 0x07, 0x53, 0x44, 0x5f, 0x52, 0x47, 0x42, 0x55, 0x10, 0x03, 0x2a, 0x6a, - 0x0a, 0x0e, 0x53, 0x63, 0x61, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, - 0x12, 0x16, 0x0a, 0x12, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x49, 0x4e, 0x53, 0x54, - 0x52, 0x55, 0x4d, 0x45, 0x4e, 0x54, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x49, 0x58, 0x4c, - 0x5f, 0x46, 0x4d, 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x49, 0x58, 0x4c, 0x5f, 0x45, 0x4d, - 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x4a, 0x50, 0x4c, 0x5f, 0x42, 0x52, 0x45, 0x41, 0x44, 0x42, - 0x4f, 0x41, 0x52, 0x44, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x42, 0x55, 0x5f, 0x42, 0x52, - 0x45, 0x41, 0x44, 0x42, 0x4f, 0x41, 0x52, 0x44, 0x10, 0x04, 0x2a, 0x3b, 0x0a, 0x10, 0x53, 0x63, - 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, - 0x0a, 0x08, 0x4d, 0x54, 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, - 0x4d, 0x54, 0x5f, 0x49, 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x54, 0x5f, 0x53, - 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x02, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x03, 0x28, 0x09, 0x52, 0x04, 0x74, 0x61, 0x67, 0x73, 0x12, 0x3e, 0x0a, 0x1a, 0x70, 0x72, 0x65, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, 0x65, 0x73, + 0x55, 0x6e, 0x69, 0x78, 0x53, 0x65, 0x63, 0x18, 0x0d, 0x20, 0x03, 0x28, 0x0d, 0x52, 0x1a, 0x70, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x54, 0x69, 0x6d, + 0x65, 0x73, 0x55, 0x6e, 0x69, 0x78, 0x53, 0x65, 0x63, 0x12, 0x3a, 0x0a, 0x18, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x55, 0x6e, + 0x69, 0x78, 0x53, 0x65, 0x63, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x18, 0x63, 0x6f, 0x6d, + 0x70, 0x6c, 0x65, 0x74, 0x65, 0x54, 0x69, 0x6d, 0x65, 0x53, 0x74, 0x61, 0x6d, 0x70, 0x55, 0x6e, + 0x69, 0x78, 0x53, 0x65, 0x63, 0x1a, 0x50, 0x0a, 0x0d, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x79, 0x70, + 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x29, 0x0a, 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, + 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0d, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x44, + 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x52, 0x08, 0x64, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x37, 0x0a, 0x09, 0x4d, 0x65, 0x74, 0x61, 0x45, + 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, + 0x1a, 0x40, 0x0a, 0x12, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x43, 0x6f, 0x75, 0x6e, 0x74, + 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, + 0x38, 0x01, 0x22, 0x69, 0x0a, 0x10, 0x53, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, + 0x74, 0x61, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x18, 0x0a, 0x06, 0x66, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x48, 0x00, 0x52, 0x06, 0x66, 0x76, 0x61, 0x6c, 0x75, 0x65, + 0x12, 0x18, 0x0a, 0x06, 0x69, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, + 0x48, 0x00, 0x52, 0x06, 0x69, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x06, 0x73, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x06, 0x73, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x22, 0x2a, 0x0a, + 0x0e, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, + 0x52, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0x22, 0x78, 0x0a, 0x12, 0x53, 0x63, 0x61, + 0x6e, 0x41, 0x75, 0x74, 0x6f, 0x53, 0x68, 0x61, 0x72, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, + 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, + 0x28, 0x0a, 0x07, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x07, 0x76, 0x69, 0x65, 0x77, 0x65, 0x72, 0x73, 0x12, 0x28, 0x0a, 0x07, 0x65, 0x64, 0x69, + 0x74, 0x6f, 0x72, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x07, 0x65, 0x64, 0x69, 0x74, + 0x6f, 0x72, 0x73, 0x2a, 0x45, 0x0a, 0x0c, 0x53, 0x63, 0x61, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x54, + 0x79, 0x70, 0x65, 0x12, 0x0e, 0x0a, 0x0a, 0x53, 0x44, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, + 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x53, 0x44, 0x5f, 0x49, 0x4d, 0x41, 0x47, 0x45, 0x10, + 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x53, 0x44, 0x5f, 0x58, 0x52, 0x46, 0x10, 0x02, 0x12, 0x0b, 0x0a, + 0x07, 0x53, 0x44, 0x5f, 0x52, 0x47, 0x42, 0x55, 0x10, 0x03, 0x2a, 0x6a, 0x0a, 0x0e, 0x53, 0x63, + 0x61, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x16, 0x0a, 0x12, + 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x5f, 0x49, 0x4e, 0x53, 0x54, 0x52, 0x55, 0x4d, 0x45, + 0x4e, 0x54, 0x10, 0x00, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x49, 0x58, 0x4c, 0x5f, 0x46, 0x4d, 0x10, + 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x50, 0x49, 0x58, 0x4c, 0x5f, 0x45, 0x4d, 0x10, 0x02, 0x12, 0x12, + 0x0a, 0x0e, 0x4a, 0x50, 0x4c, 0x5f, 0x42, 0x52, 0x45, 0x41, 0x44, 0x42, 0x4f, 0x41, 0x52, 0x44, + 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x53, 0x42, 0x55, 0x5f, 0x42, 0x52, 0x45, 0x41, 0x44, 0x42, + 0x4f, 0x41, 0x52, 0x44, 0x10, 0x04, 0x2a, 0x3b, 0x0a, 0x10, 0x53, 0x63, 0x61, 0x6e, 0x4d, 0x65, + 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0c, 0x0a, 0x08, 0x4d, 0x54, + 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x4d, 0x54, 0x5f, 0x49, + 0x4e, 0x54, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x4d, 0x54, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, + 0x47, 0x10, 0x02, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, + 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/internal/api/main.go b/internal/api/main.go index a8146643..8b141739 100644 --- a/internal/api/main.go +++ b/internal/api/main.go @@ -320,14 +320,25 @@ func (h autoImportHandler) handleAutoImportJobStatus(status *protos.JobStatus) { // Determine if it's a new scan or an update if status.JobType == protos.JobStatus_JT_IMPORT_SCAN { - h.svcs.Notifier.NotifyNewScan(scan.Title, scan.Id) - - // At this point, we can run a new quantification. Note however that we have to ensure this is only done by 1 active - // API instance, so we don't end up running the quant on each instance! - singleinstance.HandleOnce(scan.Id+"-quant", h.instanceId, func(sourceId string) { - quantification.RunAutoQuantifications(scan.Id, h.svcs) - }, h.svcs.MongoDB, h.svcs.TimeStamper, h.svcs.Log) + // Is this an updated scan? + if len(scan.PreviousImportTimesUnixSec) == 0 { + // No previous times, must be new + h.svcs.Notifier.NotifyNewScan(scan.Title, scan.Id) + } else { + // There are previous times, must be an update + h.svcs.Notifier.NotifyUpdatedScan(scan.Title, scan.Id) + } + // If this is the first time the scan was found to be complete (we have all spectra), run auto quants + // NOTE: We have to ensure this is only done by 1 active API instance, so we don't end up running the quant on each instance! + if scan.CompleteTimeStampUnixSec == scan.TimestampUnixSec { + h.svcs.Log.Infof("Scan complete detected, running auto-quantifications...") + singleinstance.HandleOnce(scan.Id+"-quant", h.instanceId, func(sourceId string) { + quantification.RunAutoQuantifications(scan.Id, h.svcs) + }, h.svcs.MongoDB, h.svcs.TimeStamper, h.svcs.Log) + } else { + h.svcs.Log.Infof("Scan complete time doesn't match current time, assuming auto-quantification not required.") + } } else if status.JobType == protos.JobStatus_JT_REIMPORT_SCAN { h.svcs.Notifier.NotifyUpdatedScan(scan.Title, scan.Id) } From 227639570b30f6637b7072a3153fe400218fd01f Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Fri, 24 May 2024 07:04:21 +1000 Subject: [PATCH 06/17] Add all PMCs to auto-quant requests --- api/quantification/autoQuantification.go | 24 +++++++++++++++++++++++- api/ws/handlers/selection-entry.go | 2 +- 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/api/quantification/autoQuantification.go b/api/quantification/autoQuantification.go index bb5cecbc..5fadaedb 100644 --- a/api/quantification/autoQuantification.go +++ b/api/quantification/autoQuantification.go @@ -3,10 +3,12 @@ package quantification import ( "context" "fmt" + "strconv" "github.com/pixlise/core/v4/api/dbCollections" "github.com/pixlise/core/v4/api/services" "github.com/pixlise/core/v4/api/specialUserIds" + "github.com/pixlise/core/v4/api/ws/wsHelpers" protos "github.com/pixlise/core/v4/generated-protos" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo/options" @@ -52,6 +54,26 @@ func RunAutoQuantifications(scanId string, svcs *services.APIServices) { return } + exprPB, err := wsHelpers.ReadDatasetFile(scanId, svcs) + if err != nil { + svcs.Log.Errorf("AutoQuant failed to read scan %v to determine PMC list: %v", scanId, err) + return + } + + pmcs := []int32{} + for _, loc := range exprPB.Locations { + pmc, err := strconv.Atoi(loc.Id) + if err != nil { + svcs.Log.Errorf("AutoQuant: Failed to read PMC %v from scan %v. Skipping...", loc.Id, scanId) + continue + } + + if len(loc.PseudoIntensities) > 0 && len(loc.PseudoIntensities[0].ElementIntensities) > 0 { + // We have quantifiable data for this + pmcs = append(pmcs, int32(pmc)) + } + } + // Start all the quants for c, name := range quantNames { for _, m := range quantModes { @@ -59,7 +81,7 @@ func RunAutoQuantifications(scanId string, svcs *services.APIServices) { Command: "map", Name: makeAutoQuantName(name, m), ScanId: scanId, - Pmcs: []int32{}, + Pmcs: pmcs, Elements: quantElements[c], DetectorConfig: detector, Parameters: "", diff --git a/api/ws/handlers/selection-entry.go b/api/ws/handlers/selection-entry.go index 95ec31b7..e3de23b2 100644 --- a/api/ws/handlers/selection-entry.go +++ b/api/ws/handlers/selection-entry.go @@ -94,7 +94,7 @@ func writeSelection(id string, idxs *protos.ScanEntryRange, db *mongo.Database, } // Modified and Upsert counts will be 0 if the selection hasn't changed, so we just check matched - if dbResult.MatchedCount != 1 { + if dbResult.MatchedCount != 1 && dbResult.UpsertedCount != 1 { logger.Errorf("writeSelection (%v) UpdateByID result had unexpected counts %+v", id, dbResult) } From e83be10ad88179e216f61f096fcb7a2ed4c448c0 Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Fri, 24 May 2024 07:08:28 +1000 Subject: [PATCH 07/17] Fixing unit tests for importer (ignore time stamps which vary every run) --- api/dataimport/for-trigger_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/api/dataimport/for-trigger_test.go b/api/dataimport/for-trigger_test.go index 81d49531..9aa4d058 100644 --- a/api/dataimport/for-trigger_test.go +++ b/api/dataimport/for-trigger_test.go @@ -234,6 +234,7 @@ func printArchiveOKLogOutput(logger *logger.StdOutLoggerForTest, db *mongo.Datab } // Clear the time stamp so it doesn't change next time we run test summary.TimestampUnixSec = 0 + summary.CompleteTimeStampUnixSec = 0 b, err := protojson.Marshal(summary) if err != nil { From c4815b3cf7a7d19ddb5d9094f65d7bfb25794061 Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Fri, 24 May 2024 07:16:13 +1000 Subject: [PATCH 08/17] Fixing unit tests for importer (ignore time stamps which vary every run) --- api/dataimport/for-trigger_test.go | 1 + 1 file changed, 1 insertion(+) diff --git a/api/dataimport/for-trigger_test.go b/api/dataimport/for-trigger_test.go index 9aa4d058..fb9eeda7 100644 --- a/api/dataimport/for-trigger_test.go +++ b/api/dataimport/for-trigger_test.go @@ -391,6 +391,7 @@ func printManualOKLogOutput(log *logger.StdOutLoggerForTest, db *mongo.Database, } else { // Clear the time stamp so it doesn't change next time we run test summary.TimestampUnixSec = 0 + summary.CompleteTimeStampUnixSec = 0 } b, err := protojson.Marshal(summary) From 9f48a4b06e6610f36272c18fd04d576daaf860c1 Mon Sep 17 00:00:00 2001 From: Ryan Stonebraker Date: Thu, 23 May 2024 15:01:39 -0700 Subject: [PATCH 09/17] Adds new variogram state data --- data-formats | 2 +- generated-protos/detector-config-msgs.pb.go | 4 +- generated-protos/detector-config.pb.go | 4 +- generated-protos/diffraction-data.pb.go | 4 +- .../diffraction-detected-peak-msgs.pb.go | 4 +- .../diffraction-manual-msgs.pb.go | 4 +- .../diffraction-status-msgs.pb.go | 4 +- generated-protos/diffraction.pb.go | 4 +- generated-protos/doi-msgs.pb.go | 4 +- generated-protos/doi.pb.go | 4 +- generated-protos/element-set-msgs.pb.go | 4 +- generated-protos/element-set.pb.go | 4 +- generated-protos/experiment.pb.go | 4 +- generated-protos/export-msgs.pb.go | 4 +- generated-protos/export.pb.go | 4 +- generated-protos/expression-group-msgs.pb.go | 4 +- generated-protos/expression-group.pb.go | 4 +- generated-protos/expression-msgs.pb.go | 4 +- generated-protos/expressions.pb.go | 4 +- .../image-beam-location-msgs.pb.go | 4 +- generated-protos/image-beam-location.pb.go | 4 +- generated-protos/image-coreg-msgs.pb.go | 4 +- generated-protos/image-coreg.pb.go | 4 +- generated-protos/image-msgs.pb.go | 4 +- generated-protos/image.pb.go | 4 +- generated-protos/job-msgs.pb.go | 4 +- generated-protos/job.pb.go | 4 +- generated-protos/log-msgs.pb.go | 4 +- generated-protos/log.pb.go | 4 +- generated-protos/memoisation-msgs.pb.go | 4 +- generated-protos/memoisation.pb.go | 4 +- generated-protos/module-msgs.pb.go | 4 +- generated-protos/modules.pb.go | 4 +- generated-protos/notification-msgs.pb.go | 4 +- generated-protos/notification.pb.go | 4 +- generated-protos/ownership-access-msgs.pb.go | 4 +- generated-protos/ownership-access.pb.go | 4 +- generated-protos/permissions.pb.go | 4 +- generated-protos/piquant-config.pb.go | 4 +- generated-protos/piquant-msgs.pb.go | 4 +- .../pseudo-intensities-msgs.pb.go | 4 +- generated-protos/pseudo-intensities.pb.go | 4 +- generated-protos/quantification-create.pb.go | 4 +- .../quantification-management-msgs.pb.go | 4 +- generated-protos/quantification-meta.pb.go | 4 +- .../quantification-multi-msgs.pb.go | 4 +- generated-protos/quantification-multi.pb.go | 4 +- .../quantification-retrieval-msgs.pb.go | 4 +- .../quantification-upload-msgs.pb.go | 4 +- generated-protos/quantification.pb.go | 4 +- generated-protos/restmsgs.pb.go | 4 +- generated-protos/roi-msgs.pb.go | 4 +- generated-protos/roi.pb.go | 4 +- .../scan-beam-location-msgs.pb.go | 4 +- generated-protos/scan-beam-location.pb.go | 4 +- .../scan-entry-metadata-msgs.pb.go | 4 +- generated-protos/scan-entry-metadata.pb.go | 4 +- generated-protos/scan-entry-msgs.pb.go | 4 +- generated-protos/scan-entry.pb.go | 4 +- generated-protos/scan-msgs.pb.go | 4 +- generated-protos/scan.pb.go | 4 +- .../screen-configuration-msgs.pb.go | 4 +- generated-protos/screen-configuration.pb.go | 4 +- generated-protos/search-params.pb.go | 4 +- generated-protos/selection-entry-msgs.pb.go | 4 +- generated-protos/selection-pixel-msgs.pb.go | 4 +- generated-protos/spectrum-msgs.pb.go | 4 +- generated-protos/spectrum.pb.go | 4 +- generated-protos/tag-msgs.pb.go | 4 +- generated-protos/tags.pb.go | 4 +- generated-protos/test-msgs.pb.go | 4 +- generated-protos/user-db-items.pb.go | 4 +- generated-protos/user-group-admins-msgs.pb.go | 4 +- .../user-group-joining-msgs.pb.go | 4 +- .../user-group-management-msgs.pb.go | 4 +- .../user-group-membership-msgs.pb.go | 4 +- .../user-group-retrieval-msgs.pb.go | 4 +- generated-protos/user-group.pb.go | 4 +- generated-protos/user-management-msgs.pb.go | 4 +- generated-protos/user-msgs.pb.go | 4 +- .../user-notification-setting-msgs.pb.go | 4 +- .../user-notification-settings.pb.go | 4 +- generated-protos/user.pb.go | 4 +- generated-protos/version.pb.go | 4 +- generated-protos/websocket.pb.go | 4 +- generated-protos/widget-data-msgs.pb.go | 4 +- generated-protos/widget-data.pb.go | 489 +++++++++--------- 87 files changed, 426 insertions(+), 405 deletions(-) diff --git a/data-formats b/data-formats index 25df9b4e..f3b0525b 160000 --- a/data-formats +++ b/data-formats @@ -1 +1 @@ -Subproject commit 25df9b4e61640f1bcbd3aaf22844cff84fe5f438 +Subproject commit f3b0525b831b7d693dfb71b5e2e3e18612fc18e3 diff --git a/generated-protos/detector-config-msgs.pb.go b/generated-protos/detector-config-msgs.pb.go index e1d80b24..594ad16b 100644 --- a/generated-protos/detector-config-msgs.pb.go +++ b/generated-protos/detector-config-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: detector-config-msgs.proto package protos diff --git a/generated-protos/detector-config.pb.go b/generated-protos/detector-config.pb.go index 5d5b19c5..7dddbd9d 100644 --- a/generated-protos/detector-config.pb.go +++ b/generated-protos/detector-config.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: detector-config.proto package protos diff --git a/generated-protos/diffraction-data.pb.go b/generated-protos/diffraction-data.pb.go index 58ce0764..a16350e0 100644 --- a/generated-protos/diffraction-data.pb.go +++ b/generated-protos/diffraction-data.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: diffraction-data.proto package protos diff --git a/generated-protos/diffraction-detected-peak-msgs.pb.go b/generated-protos/diffraction-detected-peak-msgs.pb.go index 250ee0d2..17a2234c 100644 --- a/generated-protos/diffraction-detected-peak-msgs.pb.go +++ b/generated-protos/diffraction-detected-peak-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: diffraction-detected-peak-msgs.proto package protos diff --git a/generated-protos/diffraction-manual-msgs.pb.go b/generated-protos/diffraction-manual-msgs.pb.go index f20cb474..6683e807 100644 --- a/generated-protos/diffraction-manual-msgs.pb.go +++ b/generated-protos/diffraction-manual-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: diffraction-manual-msgs.proto package protos diff --git a/generated-protos/diffraction-status-msgs.pb.go b/generated-protos/diffraction-status-msgs.pb.go index 966801f2..710eee91 100644 --- a/generated-protos/diffraction-status-msgs.pb.go +++ b/generated-protos/diffraction-status-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: diffraction-status-msgs.proto package protos diff --git a/generated-protos/diffraction.pb.go b/generated-protos/diffraction.pb.go index 281a37a9..77ca2271 100644 --- a/generated-protos/diffraction.pb.go +++ b/generated-protos/diffraction.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: data-formats/file-formats/diffraction.proto package protos diff --git a/generated-protos/doi-msgs.pb.go b/generated-protos/doi-msgs.pb.go index 13f76db2..8542205e 100644 --- a/generated-protos/doi-msgs.pb.go +++ b/generated-protos/doi-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: doi-msgs.proto package protos diff --git a/generated-protos/doi.pb.go b/generated-protos/doi.pb.go index 7d5bd02f..893a7e80 100644 --- a/generated-protos/doi.pb.go +++ b/generated-protos/doi.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: doi.proto package protos diff --git a/generated-protos/element-set-msgs.pb.go b/generated-protos/element-set-msgs.pb.go index 2d58e2db..9e3b01d3 100644 --- a/generated-protos/element-set-msgs.pb.go +++ b/generated-protos/element-set-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: element-set-msgs.proto package protos diff --git a/generated-protos/element-set.pb.go b/generated-protos/element-set.pb.go index 37d9bd0e..b96c3637 100644 --- a/generated-protos/element-set.pb.go +++ b/generated-protos/element-set.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: element-set.proto package protos diff --git a/generated-protos/experiment.pb.go b/generated-protos/experiment.pb.go index 6092e776..1bde8d45 100644 --- a/generated-protos/experiment.pb.go +++ b/generated-protos/experiment.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: data-formats/file-formats/experiment.proto package protos diff --git a/generated-protos/export-msgs.pb.go b/generated-protos/export-msgs.pb.go index dc06af3e..f3161de7 100644 --- a/generated-protos/export-msgs.pb.go +++ b/generated-protos/export-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: export-msgs.proto package protos diff --git a/generated-protos/export.pb.go b/generated-protos/export.pb.go index 833b227e..2b6d309d 100644 --- a/generated-protos/export.pb.go +++ b/generated-protos/export.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: export.proto package protos diff --git a/generated-protos/expression-group-msgs.pb.go b/generated-protos/expression-group-msgs.pb.go index d7975d7e..f867bfa9 100644 --- a/generated-protos/expression-group-msgs.pb.go +++ b/generated-protos/expression-group-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: expression-group-msgs.proto package protos diff --git a/generated-protos/expression-group.pb.go b/generated-protos/expression-group.pb.go index 90f1716b..f71ded8f 100644 --- a/generated-protos/expression-group.pb.go +++ b/generated-protos/expression-group.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: expression-group.proto package protos diff --git a/generated-protos/expression-msgs.pb.go b/generated-protos/expression-msgs.pb.go index 4e6b94e9..b681ed9e 100644 --- a/generated-protos/expression-msgs.pb.go +++ b/generated-protos/expression-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: expression-msgs.proto package protos diff --git a/generated-protos/expressions.pb.go b/generated-protos/expressions.pb.go index db902dcb..f1e19fbf 100644 --- a/generated-protos/expressions.pb.go +++ b/generated-protos/expressions.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: expressions.proto package protos diff --git a/generated-protos/image-beam-location-msgs.pb.go b/generated-protos/image-beam-location-msgs.pb.go index 18c3d37d..325c1c4e 100644 --- a/generated-protos/image-beam-location-msgs.pb.go +++ b/generated-protos/image-beam-location-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: image-beam-location-msgs.proto package protos diff --git a/generated-protos/image-beam-location.pb.go b/generated-protos/image-beam-location.pb.go index 6e8ae2ab..7a7b0344 100644 --- a/generated-protos/image-beam-location.pb.go +++ b/generated-protos/image-beam-location.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: image-beam-location.proto package protos diff --git a/generated-protos/image-coreg-msgs.pb.go b/generated-protos/image-coreg-msgs.pb.go index a2cbb23d..d736058a 100644 --- a/generated-protos/image-coreg-msgs.pb.go +++ b/generated-protos/image-coreg-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: image-coreg-msgs.proto package protos diff --git a/generated-protos/image-coreg.pb.go b/generated-protos/image-coreg.pb.go index 7f636355..edf35579 100644 --- a/generated-protos/image-coreg.pb.go +++ b/generated-protos/image-coreg.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: image-coreg.proto package protos diff --git a/generated-protos/image-msgs.pb.go b/generated-protos/image-msgs.pb.go index 5784f9b5..2c5974fb 100644 --- a/generated-protos/image-msgs.pb.go +++ b/generated-protos/image-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: image-msgs.proto package protos diff --git a/generated-protos/image.pb.go b/generated-protos/image.pb.go index a8316b61..df12738d 100644 --- a/generated-protos/image.pb.go +++ b/generated-protos/image.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: image.proto package protos diff --git a/generated-protos/job-msgs.pb.go b/generated-protos/job-msgs.pb.go index 63a874bd..344a7e94 100644 --- a/generated-protos/job-msgs.pb.go +++ b/generated-protos/job-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: job-msgs.proto package protos diff --git a/generated-protos/job.pb.go b/generated-protos/job.pb.go index 91edb26c..7686c5ff 100644 --- a/generated-protos/job.pb.go +++ b/generated-protos/job.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: job.proto package protos diff --git a/generated-protos/log-msgs.pb.go b/generated-protos/log-msgs.pb.go index 1b490026..b741e1d5 100644 --- a/generated-protos/log-msgs.pb.go +++ b/generated-protos/log-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: log-msgs.proto package protos diff --git a/generated-protos/log.pb.go b/generated-protos/log.pb.go index ac5666d3..82e2509f 100644 --- a/generated-protos/log.pb.go +++ b/generated-protos/log.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: log.proto package protos diff --git a/generated-protos/memoisation-msgs.pb.go b/generated-protos/memoisation-msgs.pb.go index 3b40cbad..b34b5fcb 100644 --- a/generated-protos/memoisation-msgs.pb.go +++ b/generated-protos/memoisation-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: memoisation-msgs.proto package protos diff --git a/generated-protos/memoisation.pb.go b/generated-protos/memoisation.pb.go index b01797d2..07349006 100644 --- a/generated-protos/memoisation.pb.go +++ b/generated-protos/memoisation.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: memoisation.proto package protos diff --git a/generated-protos/module-msgs.pb.go b/generated-protos/module-msgs.pb.go index bc17fe28..b6b752da 100644 --- a/generated-protos/module-msgs.pb.go +++ b/generated-protos/module-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: module-msgs.proto package protos diff --git a/generated-protos/modules.pb.go b/generated-protos/modules.pb.go index fd1124d4..21b3054a 100644 --- a/generated-protos/modules.pb.go +++ b/generated-protos/modules.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: modules.proto package protos diff --git a/generated-protos/notification-msgs.pb.go b/generated-protos/notification-msgs.pb.go index ef76689d..200f5230 100644 --- a/generated-protos/notification-msgs.pb.go +++ b/generated-protos/notification-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: notification-msgs.proto package protos diff --git a/generated-protos/notification.pb.go b/generated-protos/notification.pb.go index 48d4c45a..ec0f2890 100644 --- a/generated-protos/notification.pb.go +++ b/generated-protos/notification.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: notification.proto package protos diff --git a/generated-protos/ownership-access-msgs.pb.go b/generated-protos/ownership-access-msgs.pb.go index 36d54a65..679277e4 100644 --- a/generated-protos/ownership-access-msgs.pb.go +++ b/generated-protos/ownership-access-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: ownership-access-msgs.proto package protos diff --git a/generated-protos/ownership-access.pb.go b/generated-protos/ownership-access.pb.go index 730662a0..9fa2e2a4 100644 --- a/generated-protos/ownership-access.pb.go +++ b/generated-protos/ownership-access.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: ownership-access.proto package protos diff --git a/generated-protos/permissions.pb.go b/generated-protos/permissions.pb.go index 6ab98ee6..676e6fe1 100644 --- a/generated-protos/permissions.pb.go +++ b/generated-protos/permissions.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: permissions.proto package protos diff --git a/generated-protos/piquant-config.pb.go b/generated-protos/piquant-config.pb.go index 0c3e38cf..67854fde 100644 --- a/generated-protos/piquant-config.pb.go +++ b/generated-protos/piquant-config.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: piquant-config.proto package protos diff --git a/generated-protos/piquant-msgs.pb.go b/generated-protos/piquant-msgs.pb.go index 474254bd..91f97ad1 100644 --- a/generated-protos/piquant-msgs.pb.go +++ b/generated-protos/piquant-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: piquant-msgs.proto package protos diff --git a/generated-protos/pseudo-intensities-msgs.pb.go b/generated-protos/pseudo-intensities-msgs.pb.go index bf12ad6d..4fc6fc1a 100644 --- a/generated-protos/pseudo-intensities-msgs.pb.go +++ b/generated-protos/pseudo-intensities-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: pseudo-intensities-msgs.proto package protos diff --git a/generated-protos/pseudo-intensities.pb.go b/generated-protos/pseudo-intensities.pb.go index 549fa381..141c3b8f 100644 --- a/generated-protos/pseudo-intensities.pb.go +++ b/generated-protos/pseudo-intensities.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: pseudo-intensities.proto package protos diff --git a/generated-protos/quantification-create.pb.go b/generated-protos/quantification-create.pb.go index 7ae937f0..cb6b40e7 100644 --- a/generated-protos/quantification-create.pb.go +++ b/generated-protos/quantification-create.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: quantification-create.proto package protos diff --git a/generated-protos/quantification-management-msgs.pb.go b/generated-protos/quantification-management-msgs.pb.go index 9f77418f..dde9e2bc 100644 --- a/generated-protos/quantification-management-msgs.pb.go +++ b/generated-protos/quantification-management-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: quantification-management-msgs.proto package protos diff --git a/generated-protos/quantification-meta.pb.go b/generated-protos/quantification-meta.pb.go index 50f3cab7..5625f11e 100644 --- a/generated-protos/quantification-meta.pb.go +++ b/generated-protos/quantification-meta.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: quantification-meta.proto package protos diff --git a/generated-protos/quantification-multi-msgs.pb.go b/generated-protos/quantification-multi-msgs.pb.go index b40544b4..615831f1 100644 --- a/generated-protos/quantification-multi-msgs.pb.go +++ b/generated-protos/quantification-multi-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: quantification-multi-msgs.proto package protos diff --git a/generated-protos/quantification-multi.pb.go b/generated-protos/quantification-multi.pb.go index a7c08ac4..3dfc1203 100644 --- a/generated-protos/quantification-multi.pb.go +++ b/generated-protos/quantification-multi.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: quantification-multi.proto package protos diff --git a/generated-protos/quantification-retrieval-msgs.pb.go b/generated-protos/quantification-retrieval-msgs.pb.go index 2effc136..e6cd4da8 100644 --- a/generated-protos/quantification-retrieval-msgs.pb.go +++ b/generated-protos/quantification-retrieval-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: quantification-retrieval-msgs.proto package protos diff --git a/generated-protos/quantification-upload-msgs.pb.go b/generated-protos/quantification-upload-msgs.pb.go index 9408dce0..580d28b6 100644 --- a/generated-protos/quantification-upload-msgs.pb.go +++ b/generated-protos/quantification-upload-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: quantification-upload-msgs.proto package protos diff --git a/generated-protos/quantification.pb.go b/generated-protos/quantification.pb.go index d5737b8f..333fc858 100644 --- a/generated-protos/quantification.pb.go +++ b/generated-protos/quantification.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: quantification.proto package protos diff --git a/generated-protos/restmsgs.pb.go b/generated-protos/restmsgs.pb.go index 077d2be9..3c69f5dc 100644 --- a/generated-protos/restmsgs.pb.go +++ b/generated-protos/restmsgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: restmsgs.proto package protos diff --git a/generated-protos/roi-msgs.pb.go b/generated-protos/roi-msgs.pb.go index ea6c68c7..e4600026 100644 --- a/generated-protos/roi-msgs.pb.go +++ b/generated-protos/roi-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: roi-msgs.proto package protos diff --git a/generated-protos/roi.pb.go b/generated-protos/roi.pb.go index 50e24b29..c8e3a69b 100644 --- a/generated-protos/roi.pb.go +++ b/generated-protos/roi.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: roi.proto package protos diff --git a/generated-protos/scan-beam-location-msgs.pb.go b/generated-protos/scan-beam-location-msgs.pb.go index e0163691..482c2696 100644 --- a/generated-protos/scan-beam-location-msgs.pb.go +++ b/generated-protos/scan-beam-location-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: scan-beam-location-msgs.proto package protos diff --git a/generated-protos/scan-beam-location.pb.go b/generated-protos/scan-beam-location.pb.go index 22773ca8..f6531300 100644 --- a/generated-protos/scan-beam-location.pb.go +++ b/generated-protos/scan-beam-location.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: scan-beam-location.proto package protos diff --git a/generated-protos/scan-entry-metadata-msgs.pb.go b/generated-protos/scan-entry-metadata-msgs.pb.go index 5e748e1b..037c7947 100644 --- a/generated-protos/scan-entry-metadata-msgs.pb.go +++ b/generated-protos/scan-entry-metadata-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: scan-entry-metadata-msgs.proto package protos diff --git a/generated-protos/scan-entry-metadata.pb.go b/generated-protos/scan-entry-metadata.pb.go index 05565a9e..65cd4ebb 100644 --- a/generated-protos/scan-entry-metadata.pb.go +++ b/generated-protos/scan-entry-metadata.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: scan-entry-metadata.proto package protos diff --git a/generated-protos/scan-entry-msgs.pb.go b/generated-protos/scan-entry-msgs.pb.go index d4cda4ad..8c15ab1e 100644 --- a/generated-protos/scan-entry-msgs.pb.go +++ b/generated-protos/scan-entry-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: scan-entry-msgs.proto package protos diff --git a/generated-protos/scan-entry.pb.go b/generated-protos/scan-entry.pb.go index 6f0c3d57..1a8f62cd 100644 --- a/generated-protos/scan-entry.pb.go +++ b/generated-protos/scan-entry.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: scan-entry.proto package protos diff --git a/generated-protos/scan-msgs.pb.go b/generated-protos/scan-msgs.pb.go index ea0a46bc..b74bef41 100644 --- a/generated-protos/scan-msgs.pb.go +++ b/generated-protos/scan-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: scan-msgs.proto package protos diff --git a/generated-protos/scan.pb.go b/generated-protos/scan.pb.go index 49441601..0ae71605 100644 --- a/generated-protos/scan.pb.go +++ b/generated-protos/scan.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: scan.proto package protos diff --git a/generated-protos/screen-configuration-msgs.pb.go b/generated-protos/screen-configuration-msgs.pb.go index 0586c064..b58d8e1f 100644 --- a/generated-protos/screen-configuration-msgs.pb.go +++ b/generated-protos/screen-configuration-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: screen-configuration-msgs.proto package protos diff --git a/generated-protos/screen-configuration.pb.go b/generated-protos/screen-configuration.pb.go index d2ebb60d..0a7352c7 100644 --- a/generated-protos/screen-configuration.pb.go +++ b/generated-protos/screen-configuration.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: screen-configuration.proto package protos diff --git a/generated-protos/search-params.pb.go b/generated-protos/search-params.pb.go index 309b142f..c00313fa 100644 --- a/generated-protos/search-params.pb.go +++ b/generated-protos/search-params.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: search-params.proto package protos diff --git a/generated-protos/selection-entry-msgs.pb.go b/generated-protos/selection-entry-msgs.pb.go index 1c5c18f1..8a0e9cc8 100644 --- a/generated-protos/selection-entry-msgs.pb.go +++ b/generated-protos/selection-entry-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: selection-entry-msgs.proto package protos diff --git a/generated-protos/selection-pixel-msgs.pb.go b/generated-protos/selection-pixel-msgs.pb.go index 8bad0215..fda4be2d 100644 --- a/generated-protos/selection-pixel-msgs.pb.go +++ b/generated-protos/selection-pixel-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: selection-pixel-msgs.proto package protos diff --git a/generated-protos/spectrum-msgs.pb.go b/generated-protos/spectrum-msgs.pb.go index 72ef5fbe..faf94fac 100644 --- a/generated-protos/spectrum-msgs.pb.go +++ b/generated-protos/spectrum-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: spectrum-msgs.proto package protos diff --git a/generated-protos/spectrum.pb.go b/generated-protos/spectrum.pb.go index 18f5adef..6913d8fb 100644 --- a/generated-protos/spectrum.pb.go +++ b/generated-protos/spectrum.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: spectrum.proto package protos diff --git a/generated-protos/tag-msgs.pb.go b/generated-protos/tag-msgs.pb.go index 79946b98..39f47461 100644 --- a/generated-protos/tag-msgs.pb.go +++ b/generated-protos/tag-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: tag-msgs.proto package protos diff --git a/generated-protos/tags.pb.go b/generated-protos/tags.pb.go index 6fcc8ebb..a233f8c2 100644 --- a/generated-protos/tags.pb.go +++ b/generated-protos/tags.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: tags.proto package protos diff --git a/generated-protos/test-msgs.pb.go b/generated-protos/test-msgs.pb.go index c6e2e75a..44f5de72 100644 --- a/generated-protos/test-msgs.pb.go +++ b/generated-protos/test-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: test-msgs.proto package protos diff --git a/generated-protos/user-db-items.pb.go b/generated-protos/user-db-items.pb.go index 5e0fd88e..a30f4e4b 100644 --- a/generated-protos/user-db-items.pb.go +++ b/generated-protos/user-db-items.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: user-db-items.proto package protos diff --git a/generated-protos/user-group-admins-msgs.pb.go b/generated-protos/user-group-admins-msgs.pb.go index 4d0062ab..98a63b86 100644 --- a/generated-protos/user-group-admins-msgs.pb.go +++ b/generated-protos/user-group-admins-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: user-group-admins-msgs.proto package protos diff --git a/generated-protos/user-group-joining-msgs.pb.go b/generated-protos/user-group-joining-msgs.pb.go index 80731bba..2af8766b 100644 --- a/generated-protos/user-group-joining-msgs.pb.go +++ b/generated-protos/user-group-joining-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: user-group-joining-msgs.proto package protos diff --git a/generated-protos/user-group-management-msgs.pb.go b/generated-protos/user-group-management-msgs.pb.go index fec608b2..c3a480fa 100644 --- a/generated-protos/user-group-management-msgs.pb.go +++ b/generated-protos/user-group-management-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: user-group-management-msgs.proto package protos diff --git a/generated-protos/user-group-membership-msgs.pb.go b/generated-protos/user-group-membership-msgs.pb.go index 0679f2f4..5b48e29c 100644 --- a/generated-protos/user-group-membership-msgs.pb.go +++ b/generated-protos/user-group-membership-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: user-group-membership-msgs.proto package protos diff --git a/generated-protos/user-group-retrieval-msgs.pb.go b/generated-protos/user-group-retrieval-msgs.pb.go index 37b865a9..e6e1d7db 100644 --- a/generated-protos/user-group-retrieval-msgs.pb.go +++ b/generated-protos/user-group-retrieval-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: user-group-retrieval-msgs.proto package protos diff --git a/generated-protos/user-group.pb.go b/generated-protos/user-group.pb.go index dbbd9876..44f8bf32 100644 --- a/generated-protos/user-group.pb.go +++ b/generated-protos/user-group.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: user-group.proto package protos diff --git a/generated-protos/user-management-msgs.pb.go b/generated-protos/user-management-msgs.pb.go index 1d76081d..49c0d317 100644 --- a/generated-protos/user-management-msgs.pb.go +++ b/generated-protos/user-management-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: user-management-msgs.proto package protos diff --git a/generated-protos/user-msgs.pb.go b/generated-protos/user-msgs.pb.go index 6bb811e8..4ec68913 100644 --- a/generated-protos/user-msgs.pb.go +++ b/generated-protos/user-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: user-msgs.proto package protos diff --git a/generated-protos/user-notification-setting-msgs.pb.go b/generated-protos/user-notification-setting-msgs.pb.go index 28249f5e..d83fe206 100644 --- a/generated-protos/user-notification-setting-msgs.pb.go +++ b/generated-protos/user-notification-setting-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: user-notification-setting-msgs.proto package protos diff --git a/generated-protos/user-notification-settings.pb.go b/generated-protos/user-notification-settings.pb.go index 76a55c97..caf4b6ae 100644 --- a/generated-protos/user-notification-settings.pb.go +++ b/generated-protos/user-notification-settings.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: user-notification-settings.proto package protos diff --git a/generated-protos/user.pb.go b/generated-protos/user.pb.go index fc680e5b..82598223 100644 --- a/generated-protos/user.pb.go +++ b/generated-protos/user.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: user.proto package protos diff --git a/generated-protos/version.pb.go b/generated-protos/version.pb.go index 58100287..3f1a73d4 100644 --- a/generated-protos/version.pb.go +++ b/generated-protos/version.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: version.proto package protos diff --git a/generated-protos/websocket.pb.go b/generated-protos/websocket.pb.go index a5d3a437..3576ce33 100644 --- a/generated-protos/websocket.pb.go +++ b/generated-protos/websocket.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: websocket.proto package protos diff --git a/generated-protos/widget-data-msgs.pb.go b/generated-protos/widget-data-msgs.pb.go index 8438a1a9..cc100e37 100644 --- a/generated-protos/widget-data-msgs.pb.go +++ b/generated-protos/widget-data-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: widget-data-msgs.proto package protos diff --git a/generated-protos/widget-data.pb.go b/generated-protos/widget-data.pb.go index e57747d9..9bd51867 100644 --- a/generated-protos/widget-data.pb.go +++ b/generated-protos/widget-data.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.30.0 -// protoc v3.19.4 +// protoc-gen-go v1.28.1 +// protoc v3.20.3 // source: widget-data.proto package protos @@ -768,12 +768,14 @@ type VariogramState struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ExpressionIDs []string `protobuf:"bytes,1,rep,name=expressionIDs,proto3" json:"expressionIDs,omitempty"` - VisibleROIs []*VisibleROI `protobuf:"bytes,2,rep,name=visibleROIs,proto3" json:"visibleROIs,omitempty"` - VarioModel string `protobuf:"bytes,3,opt,name=varioModel,proto3" json:"varioModel,omitempty"` // valid: "exponential", "spherical", "gaussian" - MaxDistance float32 `protobuf:"fixed32,4,opt,name=maxDistance,proto3" json:"maxDistance,omitempty"` - BinCount int32 `protobuf:"varint,5,opt,name=binCount,proto3" json:"binCount,omitempty"` - DrawModeVector bool `protobuf:"varint,6,opt,name=drawModeVector,proto3" json:"drawModeVector,omitempty"` // vector or isotropic + ExpressionIDs []string `protobuf:"bytes,1,rep,name=expressionIDs,proto3" json:"expressionIDs,omitempty"` + VisibleROIs []*VisibleROI `protobuf:"bytes,2,rep,name=visibleROIs,proto3" json:"visibleROIs,omitempty"` + VarioModel string `protobuf:"bytes,3,opt,name=varioModel,proto3" json:"varioModel,omitempty"` // valid: "exponential", "spherical", "gaussian" + MaxDistance float32 `protobuf:"fixed32,4,opt,name=maxDistance,proto3" json:"maxDistance,omitempty"` + BinCount int32 `protobuf:"varint,5,opt,name=binCount,proto3" json:"binCount,omitempty"` + DrawModeVector bool `protobuf:"varint,6,opt,name=drawModeVector,proto3" json:"drawModeVector,omitempty"` // vector or isotropic + ComparisonAlgorithms []string `protobuf:"bytes,7,rep,name=comparisonAlgorithms,proto3" json:"comparisonAlgorithms,omitempty"` // "Subtract", "XOR-Sum", + LiveUpdate bool `protobuf:"varint,8,opt,name=liveUpdate,proto3" json:"liveUpdate,omitempty"` } func (x *VariogramState) Reset() { @@ -850,6 +852,20 @@ func (x *VariogramState) GetDrawModeVector() bool { return false } +func (x *VariogramState) GetComparisonAlgorithms() []string { + if x != nil { + return x.ComparisonAlgorithms + } + return nil +} + +func (x *VariogramState) GetLiveUpdate() bool { + if x != nil { + return x.LiveUpdate + } + return false +} + type MapLayerVisibility struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2090,7 +2106,7 @@ var file_widget_data_proto_rawDesc = []byte{ 0x61, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x6f, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x6f, 0x69, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x22, 0xeb, 0x01, 0x0a, 0x0e, + 0x09, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x22, 0xbf, 0x02, 0x0a, 0x0e, 0x56, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, @@ -2105,235 +2121,240 @@ var file_widget_data_proto_rawDesc = []byte{ 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x72, 0x61, 0x77, 0x4d, 0x6f, 0x64, 0x65, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x72, 0x61, 0x77, 0x4d, - 0x6f, 0x64, 0x65, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x86, 0x02, 0x0a, 0x12, 0x4d, 0x61, - 0x70, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x44, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, 0x12, 0x32, 0x0a, 0x14, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x4d, 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x78, - 0x12, 0x30, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x53, 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x68, 0x61, 0x64, 0x69, - 0x6e, 0x67, 0x22, 0x70, 0x0a, 0x12, 0x52, 0x4f, 0x49, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x56, 0x69, - 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x61, 0x63, + 0x6f, 0x64, 0x65, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x14, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, + 0x73, 0x6f, 0x6e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, 0x12, 0x1e, 0x0a, + 0x0a, 0x6c, 0x69, 0x76, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x6c, 0x69, 0x76, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x86, 0x02, + 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x63, 0x61, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, - 0x61, 0x6e, 0x49, 0x64, 0x22, 0x83, 0x07, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, - 0x6e, 0x58, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x70, 0x61, 0x6e, 0x58, 0x12, 0x12, - 0x0a, 0x04, 0x70, 0x61, 0x6e, 0x59, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x70, 0x61, - 0x6e, 0x59, 0x12, 0x14, 0x0a, 0x05, 0x7a, 0x6f, 0x6f, 0x6d, 0x58, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x05, 0x7a, 0x6f, 0x6f, 0x6d, 0x58, 0x12, 0x14, 0x0a, 0x05, 0x7a, 0x6f, 0x6f, 0x6d, - 0x59, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x7a, 0x6f, 0x6f, 0x6d, 0x59, 0x12, 0x1e, - 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x24, - 0x0a, 0x0d, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x42, 0x6f, 0x78, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x42, 0x42, 0x6f, 0x78, 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6c, - 0x6f, 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x11, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x42, 0x6f, 0x78, 0x43, - 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x15, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x6c, 0x6f, - 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x6d, 0x6f, 0x6f, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x6d, 0x6f, 0x6f, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, - 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x4d, 0x61, 0x70, 0x4c, 0x61, 0x79, 0x65, 0x72, - 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x4c, - 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x31, 0x0a, 0x09, 0x72, 0x6f, 0x69, 0x4c, 0x61, 0x79, 0x65, - 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x52, 0x4f, 0x49, 0x4c, 0x61, - 0x79, 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x09, 0x72, - 0x6f, 0x69, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x68, 0x61, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, - 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, - 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x67, 0x62, 0x75, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x67, 0x62, 0x75, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x4f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x11, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x61, 0x63, 0x69, - 0x74, 0x79, 0x12, 0x30, 0x0a, 0x13, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x47, 0x72, 0x61, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x13, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x79, 0x73, - 0x63, 0x61, 0x6c, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x52, 0x61, - 0x74, 0x69, 0x6f, 0x4d, 0x69, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x63, 0x6f, - 0x6c, 0x6f, 0x75, 0x72, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x4d, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0e, - 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x4d, 0x61, 0x78, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x52, 0x61, 0x74, 0x69, - 0x6f, 0x4d, 0x61, 0x78, 0x12, 0x3e, 0x0a, 0x1a, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x6f, - 0x70, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x54, 0x6f, 0x70, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x1d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6f, - 0x74, 0x74, 0x6f, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, - 0x72, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x73, 0x0a, 0x0f, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0c, 0x0a, - 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x78, 0x12, 0x0c, 0x0a, 0x01, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x63, 0x72, - 0x65, 0x65, 0x6e, 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0b, - 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x22, 0x0a, 0x0c, 0x73, - 0x63, 0x72, 0x65, 0x65, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, - 0xcc, 0x01, 0x0a, 0x18, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x28, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, - 0x6c, 0x6f, 0x75, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x6f, - 0x75, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, - 0x78, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x6f, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x6f, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5f, - 0x0a, 0x16, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x10, 0x73, 0x61, 0x76, 0x65, - 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x41, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x10, 0x73, - 0x61, 0x76, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x8f, 0x02, 0x0a, 0x0f, 0x52, 0x4f, 0x49, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, 0x0a, 0x72, 0x6f, 0x69, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x52, 0x4f, 0x49, 0x44, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x6f, 0x69, 0x43, 0x6f, 0x6c, - 0x6f, 0x75, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x72, 0x6f, 0x69, 0x43, 0x6f, - 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x3d, 0x0a, 0x09, 0x72, 0x6f, 0x69, 0x53, 0x68, 0x61, 0x70, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x52, 0x4f, 0x49, 0x44, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x6f, 0x69, 0x53, 0x68, - 0x61, 0x70, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x6f, 0x69, 0x53, 0x68, - 0x61, 0x70, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x52, 0x6f, 0x69, 0x43, 0x6f, 0x6c, 0x6f, 0x75, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, 0x6f, 0x69, 0x53, 0x68, 0x61, 0x70, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xa7, 0x03, 0x0a, 0x13, 0x52, 0x47, 0x42, 0x55, 0x50, 0x6c, 0x6f, 0x74, 0x57, 0x69, - 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x69, 0x6e, - 0x65, 0x72, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6e, - 0x65, 0x72, 0x61, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x41, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x41, 0x12, 0x1c, 0x0a, 0x09, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x42, 0x12, 0x1c, 0x0a, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x12, - 0x1c, 0x0a, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x12, 0x26, 0x0a, - 0x0e, 0x64, 0x72, 0x61, 0x77, 0x4d, 0x6f, 0x6e, 0x6f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x72, 0x61, 0x77, 0x4d, 0x6f, 0x6e, 0x6f, 0x63, - 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x4d, 0x69, 0x6e, 0x58, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x58, 0x56, 0x61, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x14, + 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x4d, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, + 0x12, 0x32, 0x0a, 0x14, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, + 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x4d, 0x61, 0x78, 0x12, 0x30, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x53, 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x13, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, + 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x70, 0x0a, 0x12, 0x52, 0x4f, 0x49, 0x4c, 0x61, 0x79, + 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x6f, + 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x61, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x63, 0x61, 0x6e, 0x49, 0x64, 0x22, 0x83, 0x07, 0x0a, 0x11, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x61, 0x6e, 0x58, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x70, 0x61, + 0x6e, 0x58, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x6e, 0x59, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x04, 0x70, 0x61, 0x6e, 0x59, 0x12, 0x14, 0x0a, 0x05, 0x7a, 0x6f, 0x6f, 0x6d, 0x58, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x7a, 0x6f, 0x6f, 0x6d, 0x58, 0x12, 0x14, 0x0a, 0x05, + 0x7a, 0x6f, 0x6f, 0x6d, 0x59, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x7a, 0x6f, 0x6f, + 0x6d, 0x59, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x42, + 0x42, 0x6f, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x68, 0x6f, 0x77, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x42, 0x6f, 0x78, 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, + 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x42, 0x6f, 0x78, + 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x12, 0x34, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x53, 0x6d, 0x6f, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x6d, 0x6f, + 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x4c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x4d, 0x61, 0x70, 0x4c, + 0x61, 0x79, 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x09, + 0x6d, 0x61, 0x70, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x31, 0x0a, 0x09, 0x72, 0x6f, 0x69, + 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x52, + 0x4f, 0x49, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x52, 0x09, 0x72, 0x6f, 0x69, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x36, 0x0a, 0x16, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, + 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x68, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, + 0x73, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x6e, 0x65, 0x73, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x67, 0x62, 0x75, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x67, 0x62, 0x75, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x75, 0x6e, 0x73, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x11, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4f, + 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x30, 0x0a, 0x13, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x13, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x47, + 0x72, 0x61, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x6f, + 0x75, 0x72, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x4d, 0x69, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x4d, 0x69, 0x6e, + 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x4d, + 0x61, 0x78, 0x18, 0x13, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, + 0x52, 0x61, 0x74, 0x69, 0x6f, 0x4d, 0x61, 0x78, 0x12, 0x3e, 0x0a, 0x1a, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x54, 0x6f, 0x70, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x72, 0x74, + 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x72, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x70, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x1d, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x42, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, + 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x1d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x53, 0x70, 0x65, + 0x63, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x73, + 0x0a, 0x0f, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x78, 0x12, + 0x0c, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x79, 0x12, 0x20, 0x0a, + 0x0b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x0b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, + 0x22, 0x0a, 0x0c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x22, 0xcc, 0x01, 0x0a, 0x18, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x72, 0x65, + 0x65, 0x6e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x6f, 0x6e, 0x74, 0x53, 0x69, + 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x6f, 0x6e, 0x74, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x5f, 0x0a, 0x16, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x10, + 0x73, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x72, + 0x65, 0x65, 0x6e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, + 0x6d, 0x52, 0x10, 0x73, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x8f, 0x02, 0x0a, 0x0f, 0x52, 0x4f, 0x49, 0x44, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, 0x0a, 0x72, 0x6f, 0x69, 0x43, 0x6f, + 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x52, 0x4f, + 0x49, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x6f, + 0x69, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x72, + 0x6f, 0x69, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x3d, 0x0a, 0x09, 0x72, 0x6f, 0x69, + 0x53, 0x68, 0x61, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x52, + 0x4f, 0x49, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, + 0x6f, 0x69, 0x53, 0x68, 0x61, 0x70, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, + 0x6f, 0x69, 0x53, 0x68, 0x61, 0x70, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x52, 0x6f, 0x69, 0x43, + 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, 0x6f, 0x69, 0x53, 0x68, + 0x61, 0x70, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa7, 0x03, 0x0a, 0x13, 0x52, 0x47, 0x42, 0x55, 0x50, 0x6c, + 0x6f, 0x74, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x6d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x08, 0x6d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x79, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x79, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x12, 0x1c, 0x0a, 0x09, 0x79, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x42, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x79, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x12, 0x1c, 0x0a, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x41, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x41, 0x12, 0x1c, 0x0a, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x42, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x72, 0x61, 0x77, 0x4d, 0x6f, 0x6e, 0x6f, 0x63, 0x68, 0x72, + 0x6f, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x72, 0x61, 0x77, 0x4d, + 0x6f, 0x6e, 0x6f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x58, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, + 0x6e, 0x58, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x58, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x58, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x4d, 0x69, 0x6e, 0x59, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x59, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, - 0x61, 0x78, 0x58, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x58, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, - 0x59, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x59, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x59, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x59, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xdf, 0x02, 0x0a, 0x19, - 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, 0x69, 0x73, 0x52, 0x47, 0x42, 0x55, 0x57, 0x69, - 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x69, 0x6e, - 0x65, 0x72, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6e, - 0x65, 0x72, 0x61, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x41, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x41, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x12, 0x2c, 0x0a, - 0x11, 0x72, 0x6f, 0x69, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x4f, 0x76, 0x65, 0x72, 0x6c, - 0x61, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x72, 0x6f, 0x69, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x65, 0x64, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x4d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x69, 0x49, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x6f, 0x69, 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x73, 0x68, 0x6f, + 0x61, 0x78, 0x59, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, + 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x59, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, + 0xdf, 0x02, 0x0a, 0x19, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, 0x69, 0x73, 0x52, 0x47, + 0x42, 0x55, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x6d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x08, 0x6d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x42, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x42, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x6f, 0x69, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x4f, + 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x72, 0x6f, + 0x69, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x12, + 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, + 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x4d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x69, 0x49, 0x64, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x69, 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, + 0x14, 0x73, 0x68, 0x6f, 0x77, 0x41, 0x6c, 0x6c, 0x4d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x73, 0x68, 0x6f, 0x77, 0x41, 0x6c, 0x6c, 0x4d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x73, 0x68, 0x6f, 0x77, 0x41, 0x6c, 0x6c, - 0x4d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x55, 0x0a, - 0x15, 0x52, 0x47, 0x42, 0x55, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x57, 0x69, 0x64, 0x67, 0x65, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x6e, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x62, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6e, 0x0a, 0x18, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa1, 0x05, 0x0a, 0x0a, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x08, 0x73, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x53, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, - 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x73, 0x70, 0x65, - 0x63, 0x74, 0x72, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x06, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x06, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x07, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x54, - 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x07, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x72, 0x79, 0x12, 0x2d, 0x0a, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x12, 0x36, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x05, 0x63, - 0x68, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x68, 0x6f, - 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x63, 0x68, 0x6f, 0x72, 0x64, 0x12, 0x21, - 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x6f, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x52, 0x4f, 0x49, 0x51, 0x75, - 0x61, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x72, - 0x6f, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x09, - 0x76, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x72, - 0x67, 0x62, 0x75, 0x50, 0x6c, 0x6f, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x52, 0x47, 0x42, 0x55, 0x50, 0x6c, 0x6f, 0x74, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x08, 0x72, 0x67, 0x62, 0x75, 0x50, 0x6c, 0x6f, 0x74, 0x12, 0x42, 0x0a, - 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, 0x69, 0x73, 0x52, 0x47, 0x42, 0x55, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, - 0x69, 0x73, 0x52, 0x47, 0x42, 0x55, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, 0x69, 0x73, 0x52, 0x47, 0x42, - 0x55, 0x12, 0x34, 0x0a, 0x09, 0x72, 0x67, 0x62, 0x75, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x52, 0x47, 0x42, 0x55, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x73, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x72, 0x67, - 0x62, 0x75, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x70, 0x61, 0x72, 0x61, 0x6c, - 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x57, 0x69, - 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x61, 0x6c, - 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x22, 0x55, 0x0a, 0x15, 0x52, 0x47, 0x42, 0x55, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x57, + 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, + 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, + 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6e, 0x0a, 0x18, 0x50, 0x61, 0x72, 0x61, + 0x6c, 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa1, 0x05, 0x0a, 0x0a, 0x57, 0x69, 0x64, + 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x08, 0x73, 0x70, 0x65, 0x63, 0x74, + 0x72, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x53, 0x70, 0x65, 0x63, + 0x74, 0x72, 0x75, 0x6d, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x08, 0x73, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x06, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x42, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x06, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x12, + 0x27, 0x0a, 0x07, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x54, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x07, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x2d, 0x0a, 0x09, 0x68, 0x69, 0x73, 0x74, + 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x68, 0x69, + 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x36, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, + 0x21, 0x0a, 0x05, 0x63, 0x68, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, + 0x2e, 0x43, 0x68, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x63, 0x68, 0x6f, + 0x72, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0b, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x6f, 0x69, 0x51, 0x75, 0x61, 0x6e, + 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x52, + 0x4f, 0x49, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x0d, 0x72, 0x6f, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x2d, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, + 0x30, 0x0a, 0x08, 0x72, 0x67, 0x62, 0x75, 0x50, 0x6c, 0x6f, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x52, 0x47, 0x42, 0x55, 0x50, 0x6c, 0x6f, 0x74, 0x57, 0x69, 0x64, 0x67, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x72, 0x67, 0x62, 0x75, 0x50, 0x6c, 0x6f, + 0x74, 0x12, 0x42, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, 0x69, 0x73, 0x52, + 0x47, 0x42, 0x55, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x53, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x41, 0x78, 0x69, 0x73, 0x52, 0x47, 0x42, 0x55, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, 0x69, + 0x73, 0x52, 0x47, 0x42, 0x55, 0x12, 0x34, 0x0a, 0x09, 0x72, 0x67, 0x62, 0x75, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x52, 0x47, 0x42, 0x55, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x73, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x09, 0x72, 0x67, 0x62, 0x75, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x70, + 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, + 0x61, 0x6d, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, + 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x42, 0x0a, 0x5a, 0x08, + 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( From 614d0241ad6c7fa4a399be3f0fd1d28aead25832 Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Fri, 24 May 2024 08:18:24 +1000 Subject: [PATCH 10/17] Preserve title, description, tags for scans when regenerating --- api/dataimport/internal/output/summary.go | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/api/dataimport/internal/output/summary.go b/api/dataimport/internal/output/summary.go index cc90f6c7..87dc041f 100644 --- a/api/dataimport/internal/output/summary.go +++ b/api/dataimport/internal/output/summary.go @@ -130,5 +130,16 @@ func makeSummaryFileContent( } } + // Preserve user-editable fields + if prevSavedScan != nil { + s.Tags = prevSavedScan.Tags + s.Description = prevSavedScan.Description + + if len(prevSavedScan.Description) > 0 { + // User has entered a description so perserve the title too + s.Title = prevSavedScan.Title + } + } + return s } From d3bccb1c68be0a12e4f2db3b89080e811c1aef55 Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Fri, 24 May 2024 09:50:17 +1000 Subject: [PATCH 11/17] Added message to trigger auto-quant for a scan --- api/ws/handlers/scan.go | 11 + data-formats | 2 +- generated-protos/scan-msgs.pb.go | 159 ++++++++-- generated-protos/widget-data.pb.go | 485 +++++++++++++++-------------- 4 files changed, 403 insertions(+), 254 deletions(-) diff --git a/api/ws/handlers/scan.go b/api/ws/handlers/scan.go index 9d0fe002..904e88fd 100644 --- a/api/ws/handlers/scan.go +++ b/api/ws/handlers/scan.go @@ -15,6 +15,7 @@ import ( "github.com/pixlise/core/v4/api/dbCollections" "github.com/pixlise/core/v4/api/filepaths" "github.com/pixlise/core/v4/api/job" + "github.com/pixlise/core/v4/api/quantification" "github.com/pixlise/core/v4/api/services" "github.com/pixlise/core/v4/api/ws/wsHelpers" "github.com/pixlise/core/v4/core/errorwithstatus" @@ -708,3 +709,13 @@ func HandleScanAutoShareWriteReq(req *protos.ScanAutoShareWriteReq, hctx wsHelpe return &protos.ScanAutoShareWriteResp{}, nil } + +func HandleScanTriggerAutoQuantReq(req *protos.ScanTriggerAutoQuantReq, hctx wsHelpers.HandlerContext) (*protos.ScanTriggerAutoQuantResp, error) { + if err := wsHelpers.CheckStringField(&req.ScanId, "ScanId", 1, wsHelpers.IdFieldMaxLength); err != nil { + return nil, err + } + + quantification.RunAutoQuantifications(req.ScanId, hctx.Svcs) + + return &protos.ScanTriggerAutoQuantResp{}, nil +} diff --git a/data-formats b/data-formats index 25df9b4e..6daaa5c6 160000 --- a/data-formats +++ b/data-formats @@ -1 +1 @@ -Subproject commit 25df9b4e61640f1bcbd3aaf22844cff84fe5f438 +Subproject commit 6daaa5c688651c5aa7833a98b63c1a41b1f2c053 diff --git a/generated-protos/scan-msgs.pb.go b/generated-protos/scan-msgs.pb.go index ea0a46bc..c9e96e83 100644 --- a/generated-protos/scan-msgs.pb.go +++ b/generated-protos/scan-msgs.pb.go @@ -1070,6 +1070,92 @@ func (*ScanDeleteResp) Descriptor() ([]byte, []int) { return file_scan_msgs_proto_rawDescGZIP(), []int{20} } +// requires(QUANTIFY) +type ScanTriggerAutoQuantReq struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + ScanId string `protobuf:"bytes,1,opt,name=scanId,proto3" json:"scanId,omitempty"` +} + +func (x *ScanTriggerAutoQuantReq) Reset() { + *x = ScanTriggerAutoQuantReq{} + if protoimpl.UnsafeEnabled { + mi := &file_scan_msgs_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ScanTriggerAutoQuantReq) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScanTriggerAutoQuantReq) ProtoMessage() {} + +func (x *ScanTriggerAutoQuantReq) ProtoReflect() protoreflect.Message { + mi := &file_scan_msgs_proto_msgTypes[21] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScanTriggerAutoQuantReq.ProtoReflect.Descriptor instead. +func (*ScanTriggerAutoQuantReq) Descriptor() ([]byte, []int) { + return file_scan_msgs_proto_rawDescGZIP(), []int{21} +} + +func (x *ScanTriggerAutoQuantReq) GetScanId() string { + if x != nil { + return x.ScanId + } + return "" +} + +type ScanTriggerAutoQuantResp struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *ScanTriggerAutoQuantResp) Reset() { + *x = ScanTriggerAutoQuantResp{} + if protoimpl.UnsafeEnabled { + mi := &file_scan_msgs_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ScanTriggerAutoQuantResp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScanTriggerAutoQuantResp) ProtoMessage() {} + +func (x *ScanTriggerAutoQuantResp) ProtoReflect() protoreflect.Message { + mi := &file_scan_msgs_proto_msgTypes[22] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScanTriggerAutoQuantResp.ProtoReflect.Descriptor instead. +func (*ScanTriggerAutoQuantResp) Descriptor() ([]byte, []int) { + return file_scan_msgs_proto_rawDescGZIP(), []int{22} +} + type ScanListReq_MinMaxInt struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -1082,7 +1168,7 @@ type ScanListReq_MinMaxInt struct { func (x *ScanListReq_MinMaxInt) Reset() { *x = ScanListReq_MinMaxInt{} if protoimpl.UnsafeEnabled { - mi := &file_scan_msgs_proto_msgTypes[22] + mi := &file_scan_msgs_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1095,7 +1181,7 @@ func (x *ScanListReq_MinMaxInt) String() string { func (*ScanListReq_MinMaxInt) ProtoMessage() {} func (x *ScanListReq_MinMaxInt) ProtoReflect() protoreflect.Message { - mi := &file_scan_msgs_proto_msgTypes[22] + mi := &file_scan_msgs_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1211,9 +1297,14 @@ var file_scan_msgs_proto_rawDesc = []byte{ 0x6f, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x17, 0x73, 0x63, 0x61, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x46, 0x6f, 0x72, 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x10, 0x0a, - 0x0e, 0x53, 0x63, 0x61, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x42, - 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x33, + 0x0e, 0x53, 0x63, 0x61, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x22, + 0x31, 0x0a, 0x17, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, + 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, + 0x61, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, 0x61, 0x6e, + 0x49, 0x64, 0x22, 0x1a, 0x0a, 0x18, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x41, 0x75, 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0a, + 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x33, } var ( @@ -1228,7 +1319,7 @@ func file_scan_msgs_proto_rawDescGZIP() []byte { return file_scan_msgs_proto_rawDescData } -var file_scan_msgs_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_scan_msgs_proto_msgTypes = make([]protoimpl.MessageInfo, 25) var file_scan_msgs_proto_goTypes = []interface{}{ (*ScanListReq)(nil), // 0: ScanListReq (*ScanListResp)(nil), // 1: ScanListResp @@ -1251,22 +1342,24 @@ var file_scan_msgs_proto_goTypes = []interface{}{ (*ScanMetaLabelsAndTypesResp)(nil), // 18: ScanMetaLabelsAndTypesResp (*ScanDeleteReq)(nil), // 19: ScanDeleteReq (*ScanDeleteResp)(nil), // 20: ScanDeleteResp - nil, // 21: ScanListReq.SearchFiltersEntry - (*ScanListReq_MinMaxInt)(nil), // 22: ScanListReq.MinMaxInt - (*ScanItem)(nil), // 23: ScanItem - (*JobStatus)(nil), // 24: JobStatus - (*ScanAutoShareEntry)(nil), // 25: ScanAutoShareEntry - (ScanMetaDataType)(0), // 26: ScanMetaDataType + (*ScanTriggerAutoQuantReq)(nil), // 21: ScanTriggerAutoQuantReq + (*ScanTriggerAutoQuantResp)(nil), // 22: ScanTriggerAutoQuantResp + nil, // 23: ScanListReq.SearchFiltersEntry + (*ScanListReq_MinMaxInt)(nil), // 24: ScanListReq.MinMaxInt + (*ScanItem)(nil), // 25: ScanItem + (*JobStatus)(nil), // 26: JobStatus + (*ScanAutoShareEntry)(nil), // 27: ScanAutoShareEntry + (ScanMetaDataType)(0), // 28: ScanMetaDataType } var file_scan_msgs_proto_depIdxs = []int32{ - 21, // 0: ScanListReq.searchFilters:type_name -> ScanListReq.SearchFiltersEntry - 23, // 1: ScanListResp.scans:type_name -> ScanItem - 23, // 2: ScanGetResp.scan:type_name -> ScanItem - 24, // 3: ScanUploadUpd.status:type_name -> JobStatus - 25, // 4: ScanAutoShareResp.entry:type_name -> ScanAutoShareEntry - 25, // 5: ScanAutoShareWriteReq.entry:type_name -> ScanAutoShareEntry - 24, // 6: ScanTriggerReImportUpd.status:type_name -> JobStatus - 26, // 7: ScanMetaLabelsAndTypesResp.metaTypes:type_name -> ScanMetaDataType + 23, // 0: ScanListReq.searchFilters:type_name -> ScanListReq.SearchFiltersEntry + 25, // 1: ScanListResp.scans:type_name -> ScanItem + 25, // 2: ScanGetResp.scan:type_name -> ScanItem + 26, // 3: ScanUploadUpd.status:type_name -> JobStatus + 27, // 4: ScanAutoShareResp.entry:type_name -> ScanAutoShareEntry + 27, // 5: ScanAutoShareWriteReq.entry:type_name -> ScanAutoShareEntry + 26, // 6: ScanTriggerReImportUpd.status:type_name -> JobStatus + 28, // 7: ScanMetaLabelsAndTypesResp.metaTypes:type_name -> ScanMetaDataType 8, // [8:8] is the sub-list for method output_type 8, // [8:8] is the sub-list for method input_type 8, // [8:8] is the sub-list for extension type_name @@ -1534,7 +1627,31 @@ func file_scan_msgs_proto_init() { return nil } } + file_scan_msgs_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ScanTriggerAutoQuantReq); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } file_scan_msgs_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ScanTriggerAutoQuantResp); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_scan_msgs_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*ScanListReq_MinMaxInt); i { case 0: return &v.state @@ -1553,7 +1670,7 @@ func file_scan_msgs_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_scan_msgs_proto_rawDesc, NumEnums: 0, - NumMessages: 23, + NumMessages: 25, NumExtensions: 0, NumServices: 0, }, diff --git a/generated-protos/widget-data.pb.go b/generated-protos/widget-data.pb.go index e57747d9..6aa7a0f3 100644 --- a/generated-protos/widget-data.pb.go +++ b/generated-protos/widget-data.pb.go @@ -768,12 +768,14 @@ type VariogramState struct { sizeCache protoimpl.SizeCache unknownFields protoimpl.UnknownFields - ExpressionIDs []string `protobuf:"bytes,1,rep,name=expressionIDs,proto3" json:"expressionIDs,omitempty"` - VisibleROIs []*VisibleROI `protobuf:"bytes,2,rep,name=visibleROIs,proto3" json:"visibleROIs,omitempty"` - VarioModel string `protobuf:"bytes,3,opt,name=varioModel,proto3" json:"varioModel,omitempty"` // valid: "exponential", "spherical", "gaussian" - MaxDistance float32 `protobuf:"fixed32,4,opt,name=maxDistance,proto3" json:"maxDistance,omitempty"` - BinCount int32 `protobuf:"varint,5,opt,name=binCount,proto3" json:"binCount,omitempty"` - DrawModeVector bool `protobuf:"varint,6,opt,name=drawModeVector,proto3" json:"drawModeVector,omitempty"` // vector or isotropic + ExpressionIDs []string `protobuf:"bytes,1,rep,name=expressionIDs,proto3" json:"expressionIDs,omitempty"` + VisibleROIs []*VisibleROI `protobuf:"bytes,2,rep,name=visibleROIs,proto3" json:"visibleROIs,omitempty"` + VarioModel string `protobuf:"bytes,3,opt,name=varioModel,proto3" json:"varioModel,omitempty"` // valid: "exponential", "spherical", "gaussian" + MaxDistance float32 `protobuf:"fixed32,4,opt,name=maxDistance,proto3" json:"maxDistance,omitempty"` + BinCount int32 `protobuf:"varint,5,opt,name=binCount,proto3" json:"binCount,omitempty"` + DrawModeVector bool `protobuf:"varint,6,opt,name=drawModeVector,proto3" json:"drawModeVector,omitempty"` // vector or isotropic + ComparisonAlgorithms []string `protobuf:"bytes,7,rep,name=comparisonAlgorithms,proto3" json:"comparisonAlgorithms,omitempty"` // "Subtract", "XOR-Sum", + LiveUpdate bool `protobuf:"varint,8,opt,name=liveUpdate,proto3" json:"liveUpdate,omitempty"` } func (x *VariogramState) Reset() { @@ -850,6 +852,20 @@ func (x *VariogramState) GetDrawModeVector() bool { return false } +func (x *VariogramState) GetComparisonAlgorithms() []string { + if x != nil { + return x.ComparisonAlgorithms + } + return nil +} + +func (x *VariogramState) GetLiveUpdate() bool { + if x != nil { + return x.LiveUpdate + } + return false +} + type MapLayerVisibility struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -2090,7 +2106,7 @@ var file_widget_data_proto_rawDesc = []byte{ 0x61, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x10, 0x0a, 0x03, 0x72, 0x6f, 0x69, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x72, 0x6f, 0x69, 0x12, 0x1a, 0x0a, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x22, 0xeb, 0x01, 0x0a, 0x0e, + 0x09, 0x52, 0x08, 0x71, 0x75, 0x61, 0x6e, 0x74, 0x49, 0x44, 0x73, 0x22, 0xbf, 0x02, 0x0a, 0x0e, 0x56, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0d, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, @@ -2105,235 +2121,240 @@ var file_widget_data_proto_rawDesc = []byte{ 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x62, 0x69, 0x6e, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x72, 0x61, 0x77, 0x4d, 0x6f, 0x64, 0x65, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x72, 0x61, 0x77, 0x4d, - 0x6f, 0x64, 0x65, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x22, 0x86, 0x02, 0x0a, 0x12, 0x4d, 0x61, - 0x70, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, - 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x44, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x18, - 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x14, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, 0x12, 0x32, 0x0a, 0x14, - 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x4d, 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x64, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x78, - 0x12, 0x30, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x53, 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x64, - 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, 0x68, 0x61, 0x64, 0x69, - 0x6e, 0x67, 0x22, 0x70, 0x0a, 0x12, 0x52, 0x4f, 0x49, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x56, 0x69, - 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x61, 0x63, + 0x6f, 0x64, 0x65, 0x56, 0x65, 0x63, 0x74, 0x6f, 0x72, 0x12, 0x32, 0x0a, 0x14, 0x63, 0x6f, 0x6d, + 0x70, 0x61, 0x72, 0x69, 0x73, 0x6f, 0x6e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x52, 0x14, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x72, 0x69, + 0x73, 0x6f, 0x6e, 0x41, 0x6c, 0x67, 0x6f, 0x72, 0x69, 0x74, 0x68, 0x6d, 0x73, 0x12, 0x1e, 0x0a, + 0x0a, 0x6c, 0x69, 0x76, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0a, 0x6c, 0x69, 0x76, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x22, 0x86, 0x02, + 0x0a, 0x12, 0x4d, 0x61, 0x70, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, + 0x6c, 0x69, 0x74, 0x79, 0x12, 0x22, 0x0a, 0x0c, 0x65, 0x78, 0x70, 0x72, 0x65, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x65, 0x78, 0x70, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x44, 0x12, 0x18, 0x0a, 0x07, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x16, 0x0a, 0x06, - 0x73, 0x63, 0x61, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x73, 0x63, - 0x61, 0x6e, 0x49, 0x64, 0x22, 0x83, 0x07, 0x0a, 0x11, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, - 0x6e, 0x58, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x70, 0x61, 0x6e, 0x58, 0x12, 0x12, - 0x0a, 0x04, 0x70, 0x61, 0x6e, 0x59, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x70, 0x61, - 0x6e, 0x59, 0x12, 0x14, 0x0a, 0x05, 0x7a, 0x6f, 0x6f, 0x6d, 0x58, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x05, 0x7a, 0x6f, 0x6f, 0x6d, 0x58, 0x12, 0x14, 0x0a, 0x05, 0x7a, 0x6f, 0x6f, 0x6d, - 0x59, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x7a, 0x6f, 0x6f, 0x6d, 0x59, 0x12, 0x1e, - 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x08, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x24, - 0x0a, 0x0d, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x42, 0x6f, 0x78, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, 0x74, - 0x42, 0x42, 0x6f, 0x78, 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6c, - 0x6f, 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x11, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, - 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x42, 0x6f, 0x78, 0x43, - 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x15, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x6c, 0x6f, - 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x34, 0x0a, 0x15, - 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x6d, 0x6f, 0x6f, - 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x63, 0x6f, 0x6e, - 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x6d, 0x6f, 0x6f, 0x74, 0x68, 0x69, - 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, - 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x4d, 0x61, 0x70, 0x4c, 0x61, 0x79, 0x65, 0x72, - 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x09, 0x6d, 0x61, 0x70, 0x4c, - 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x31, 0x0a, 0x09, 0x72, 0x6f, 0x69, 0x4c, 0x61, 0x79, 0x65, - 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x52, 0x4f, 0x49, 0x4c, 0x61, - 0x79, 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x09, 0x72, - 0x6f, 0x69, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x36, 0x0a, 0x16, 0x65, 0x6c, 0x65, 0x6d, - 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x68, 0x61, 0x64, 0x69, - 0x6e, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, - 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x0e, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, - 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x67, 0x62, 0x75, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x67, 0x62, 0x75, 0x43, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, - 0x65, 0x64, 0x4f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x10, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x11, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x61, 0x63, 0x69, - 0x74, 0x79, 0x12, 0x30, 0x0a, 0x13, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x47, 0x72, 0x61, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, - 0x13, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x79, 0x73, - 0x63, 0x61, 0x6c, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x52, 0x61, - 0x74, 0x69, 0x6f, 0x4d, 0x69, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x63, 0x6f, - 0x6c, 0x6f, 0x75, 0x72, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x4d, 0x69, 0x6e, 0x12, 0x26, 0x0a, 0x0e, - 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x4d, 0x61, 0x78, 0x18, 0x13, - 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x52, 0x61, 0x74, 0x69, - 0x6f, 0x4d, 0x61, 0x78, 0x12, 0x3e, 0x0a, 0x1a, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x6f, - 0x70, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, - 0x74, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x54, 0x6f, 0x70, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x72, 0x74, 0x69, 0x66, - 0x61, 0x63, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x1d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6f, - 0x74, 0x74, 0x6f, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x72, 0x74, 0x69, - 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1d, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, - 0x72, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x73, 0x0a, 0x0f, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x12, 0x0c, 0x0a, - 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x78, 0x12, 0x0c, 0x0a, 0x01, 0x79, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x73, 0x63, 0x72, - 0x65, 0x65, 0x6e, 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0b, - 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, 0x22, 0x0a, 0x0c, 0x73, - 0x63, 0x72, 0x65, 0x65, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x02, 0x52, 0x0c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, - 0xcc, 0x01, 0x0a, 0x18, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x12, 0x12, 0x0a, 0x04, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x28, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, - 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x6f, - 0x6c, 0x6f, 0x75, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x6f, 0x6c, 0x6f, - 0x75, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, 0x74, 0x65, 0x12, 0x12, - 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, - 0x78, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x6f, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x6f, 0x6e, 0x74, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x0e, - 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, 0x69, 0x64, 0x22, 0x5f, - 0x0a, 0x16, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x69, 0x73, 0x70, - 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x10, 0x73, 0x61, 0x76, 0x65, - 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x41, - 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, 0x52, 0x10, 0x73, - 0x61, 0x76, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, - 0x8f, 0x02, 0x0a, 0x0f, 0x52, 0x4f, 0x49, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, 0x0a, 0x72, 0x6f, 0x69, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, - 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x52, 0x4f, 0x49, 0x44, 0x69, 0x73, - 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x6f, 0x69, 0x43, 0x6f, 0x6c, - 0x6f, 0x75, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x72, 0x6f, 0x69, 0x43, 0x6f, - 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x3d, 0x0a, 0x09, 0x72, 0x6f, 0x69, 0x53, 0x68, 0x61, 0x70, - 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x52, 0x4f, 0x49, 0x44, 0x69, - 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x6f, 0x69, 0x53, 0x68, - 0x61, 0x70, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, 0x6f, 0x69, 0x53, 0x68, - 0x61, 0x70, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x52, 0x6f, 0x69, 0x43, 0x6f, 0x6c, 0x6f, 0x75, - 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, - 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, - 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, 0x6f, 0x69, 0x53, 0x68, 0x61, 0x70, 0x65, 0x73, - 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, - 0x01, 0x22, 0xa7, 0x03, 0x0a, 0x13, 0x52, 0x47, 0x42, 0x55, 0x50, 0x6c, 0x6f, 0x74, 0x57, 0x69, - 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x69, 0x6e, - 0x65, 0x72, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6e, - 0x65, 0x72, 0x61, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x41, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x41, 0x12, 0x1c, 0x0a, 0x09, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x79, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x42, 0x12, 0x1c, 0x0a, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x18, 0x04, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x12, - 0x1c, 0x0a, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x12, 0x26, 0x0a, - 0x0e, 0x64, 0x72, 0x61, 0x77, 0x4d, 0x6f, 0x6e, 0x6f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x72, 0x61, 0x77, 0x4d, 0x6f, 0x6e, 0x6f, 0x63, - 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x4d, 0x69, 0x6e, 0x58, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, - 0x52, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x58, 0x56, 0x61, + 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x12, 0x32, 0x0a, 0x14, + 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x4d, 0x69, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, 0x64, 0x69, 0x73, 0x70, + 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x69, 0x6e, + 0x12, 0x32, 0x0a, 0x14, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, + 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4d, 0x61, 0x78, 0x18, 0x05, 0x20, 0x01, 0x28, 0x02, 0x52, 0x14, + 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x4d, 0x61, 0x78, 0x12, 0x30, 0x0a, 0x13, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x53, 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x13, 0x64, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x53, + 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x22, 0x70, 0x0a, 0x12, 0x52, 0x4f, 0x49, 0x4c, 0x61, 0x79, + 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x12, 0x0e, 0x0a, 0x02, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x18, 0x0a, 0x07, + 0x6f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x07, 0x6f, + 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x18, 0x0a, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x76, 0x69, 0x73, 0x69, 0x62, 0x6c, 0x65, + 0x12, 0x16, 0x0a, 0x06, 0x73, 0x63, 0x61, 0x6e, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x73, 0x63, 0x61, 0x6e, 0x49, 0x64, 0x22, 0x83, 0x07, 0x0a, 0x11, 0x43, 0x6f, 0x6e, + 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x70, 0x61, 0x6e, 0x58, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x04, 0x70, 0x61, + 0x6e, 0x58, 0x12, 0x12, 0x0a, 0x04, 0x70, 0x61, 0x6e, 0x59, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x04, 0x70, 0x61, 0x6e, 0x59, 0x12, 0x14, 0x0a, 0x05, 0x7a, 0x6f, 0x6f, 0x6d, 0x58, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x7a, 0x6f, 0x6f, 0x6d, 0x58, 0x12, 0x14, 0x0a, 0x05, + 0x7a, 0x6f, 0x6f, 0x6d, 0x59, 0x18, 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x05, 0x7a, 0x6f, 0x6f, + 0x6d, 0x59, 0x12, 0x1e, 0x0a, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x73, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x73, 0x12, 0x24, 0x0a, 0x0d, 0x73, 0x68, 0x6f, 0x77, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x42, + 0x42, 0x6f, 0x78, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0d, 0x73, 0x68, 0x6f, 0x77, 0x50, + 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x42, 0x6f, 0x78, 0x12, 0x2c, 0x0a, 0x11, 0x70, 0x6f, 0x69, 0x6e, + 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x11, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, + 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x34, 0x0a, 0x15, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, + 0x42, 0x6f, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x18, + 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x15, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x42, 0x42, 0x6f, 0x78, + 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x53, 0x63, 0x68, 0x65, 0x6d, 0x65, 0x12, 0x22, 0x0a, 0x0c, + 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x12, 0x34, 0x0a, 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x53, 0x6d, 0x6f, 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x15, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x6d, 0x6f, + 0x6f, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x12, 0x31, 0x0a, 0x09, 0x6d, 0x61, 0x70, 0x4c, 0x61, 0x79, + 0x65, 0x72, 0x73, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x4d, 0x61, 0x70, 0x4c, + 0x61, 0x79, 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, 0x79, 0x52, 0x09, + 0x6d, 0x61, 0x70, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x31, 0x0a, 0x09, 0x72, 0x6f, 0x69, + 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x18, 0x0c, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x52, + 0x4f, 0x49, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x56, 0x69, 0x73, 0x69, 0x62, 0x69, 0x6c, 0x69, 0x74, + 0x79, 0x52, 0x09, 0x72, 0x6f, 0x69, 0x4c, 0x61, 0x79, 0x65, 0x72, 0x73, 0x12, 0x36, 0x0a, 0x16, + 0x65, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, + 0x68, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x08, 0x52, 0x16, 0x65, 0x6c, + 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x6c, 0x61, 0x74, 0x69, 0x76, 0x65, 0x53, 0x68, 0x61, + 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, + 0x73, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, + 0x6e, 0x65, 0x73, 0x73, 0x12, 0x22, 0x0a, 0x0c, 0x72, 0x67, 0x62, 0x75, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x67, 0x62, 0x75, + 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x2c, 0x0a, 0x11, 0x75, 0x6e, 0x73, 0x65, + 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x18, 0x10, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x11, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4f, + 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x12, 0x30, 0x0a, 0x13, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x47, 0x72, 0x61, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x18, 0x11, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x13, 0x75, 0x6e, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x47, + 0x72, 0x61, 0x79, 0x73, 0x63, 0x61, 0x6c, 0x65, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x6f, + 0x75, 0x72, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x4d, 0x69, 0x6e, 0x18, 0x12, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x4d, 0x69, 0x6e, + 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x52, 0x61, 0x74, 0x69, 0x6f, 0x4d, + 0x61, 0x78, 0x18, 0x13, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0e, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, + 0x52, 0x61, 0x74, 0x69, 0x6f, 0x4d, 0x61, 0x78, 0x12, 0x3e, 0x0a, 0x1a, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x54, 0x6f, 0x70, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x72, 0x74, + 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x52, 0x1a, 0x72, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x54, 0x6f, 0x70, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x41, + 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x12, 0x44, 0x0a, 0x1d, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x42, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x53, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, + 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x1d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x42, 0x6f, 0x74, 0x74, 0x6f, 0x6d, 0x53, 0x70, 0x65, + 0x63, 0x75, 0x6c, 0x61, 0x72, 0x41, 0x72, 0x74, 0x69, 0x66, 0x61, 0x63, 0x74, 0x73, 0x22, 0x73, + 0x0a, 0x0f, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x6f, 0x69, 0x6e, + 0x74, 0x12, 0x0c, 0x0a, 0x01, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x78, 0x12, + 0x0c, 0x0a, 0x01, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x01, 0x79, 0x12, 0x20, 0x0a, + 0x0b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x57, 0x69, 0x64, 0x74, 0x68, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x0b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x57, 0x69, 0x64, 0x74, 0x68, 0x12, + 0x22, 0x0a, 0x0c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x22, 0xcc, 0x01, 0x0a, 0x18, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x72, 0x65, + 0x65, 0x6e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, 0x6d, + 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, + 0x74, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x03, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x52, 0x06, 0x70, 0x6f, 0x69, 0x6e, 0x74, 0x73, 0x12, 0x16, + 0x0a, 0x06, 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x63, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x63, 0x6f, 0x6d, 0x70, 0x6c, 0x65, + 0x74, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x78, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x04, 0x74, 0x65, 0x78, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x6f, 0x6e, 0x74, 0x53, 0x69, + 0x7a, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x08, 0x66, 0x6f, 0x6e, 0x74, 0x53, 0x69, + 0x7a, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x05, 0x52, 0x02, + 0x69, 0x64, 0x22, 0x5f, 0x0a, 0x16, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x45, 0x0a, 0x10, + 0x73, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x46, 0x75, 0x6c, 0x6c, 0x53, 0x63, 0x72, + 0x65, 0x65, 0x6e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x74, 0x65, + 0x6d, 0x52, 0x10, 0x73, 0x61, 0x76, 0x65, 0x64, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x73, 0x22, 0x8f, 0x02, 0x0a, 0x0f, 0x52, 0x4f, 0x49, 0x44, 0x69, 0x73, 0x70, 0x6c, + 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x40, 0x0a, 0x0a, 0x72, 0x6f, 0x69, 0x43, 0x6f, + 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x52, 0x4f, + 0x49, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, 0x6f, + 0x69, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x0a, 0x72, + 0x6f, 0x69, 0x43, 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x12, 0x3d, 0x0a, 0x09, 0x72, 0x6f, 0x69, + 0x53, 0x68, 0x61, 0x70, 0x65, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x52, + 0x4f, 0x49, 0x44, 0x69, 0x73, 0x70, 0x6c, 0x61, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x52, + 0x6f, 0x69, 0x53, 0x68, 0x61, 0x70, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x09, 0x72, + 0x6f, 0x69, 0x53, 0x68, 0x61, 0x70, 0x65, 0x73, 0x1a, 0x3d, 0x0a, 0x0f, 0x52, 0x6f, 0x69, 0x43, + 0x6f, 0x6c, 0x6f, 0x75, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, + 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, + 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, + 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x3c, 0x0a, 0x0e, 0x52, 0x6f, 0x69, 0x53, 0x68, + 0x61, 0x70, 0x65, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, + 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, + 0x65, 0x3a, 0x02, 0x38, 0x01, 0x22, 0xa7, 0x03, 0x0a, 0x13, 0x52, 0x47, 0x42, 0x55, 0x50, 0x6c, + 0x6f, 0x74, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x6d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x08, 0x6d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x79, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x79, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x12, 0x1c, 0x0a, 0x09, 0x79, 0x43, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x42, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x79, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x12, 0x1c, 0x0a, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x41, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x41, 0x12, 0x1c, 0x0a, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, + 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x78, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x42, 0x12, 0x26, 0x0a, 0x0e, 0x64, 0x72, 0x61, 0x77, 0x4d, 0x6f, 0x6e, 0x6f, 0x63, 0x68, 0x72, + 0x6f, 0x6d, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, 0x64, 0x72, 0x61, 0x77, 0x4d, + 0x6f, 0x6e, 0x6f, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x58, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, + 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, + 0x6e, 0x58, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, + 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x58, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, + 0x28, 0x02, 0x52, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x58, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x4d, 0x69, 0x6e, 0x59, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, + 0x52, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x59, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, - 0x61, 0x78, 0x58, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, - 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x58, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, - 0x59, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x73, 0x65, - 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x59, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, - 0x2c, 0x0a, 0x11, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x59, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, 0x73, 0x65, 0x6c, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x59, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1c, 0x0a, - 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xdf, 0x02, 0x0a, 0x19, - 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, 0x69, 0x73, 0x52, 0x47, 0x42, 0x55, 0x57, 0x69, - 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x6d, 0x69, 0x6e, - 0x65, 0x72, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x6d, 0x69, 0x6e, - 0x65, 0x72, 0x61, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x41, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x41, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x42, 0x12, 0x2c, 0x0a, - 0x11, 0x72, 0x6f, 0x69, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x4f, 0x76, 0x65, 0x72, 0x6c, - 0x61, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x72, 0x6f, 0x69, 0x53, 0x74, 0x61, - 0x63, 0x6b, 0x65, 0x64, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x12, 0x1c, 0x0a, 0x09, 0x69, - 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x02, 0x52, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, - 0x64, 0x4d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x02, 0x52, - 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x69, 0x49, 0x64, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x06, 0x72, 0x6f, 0x69, 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, 0x14, 0x73, 0x68, 0x6f, + 0x61, 0x78, 0x59, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x02, 0x52, 0x11, + 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x59, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x0b, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, + 0xdf, 0x02, 0x0a, 0x19, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, 0x69, 0x73, 0x52, 0x47, + 0x42, 0x55, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1a, 0x0a, + 0x08, 0x6d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x08, 0x6d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x41, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x42, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x42, 0x12, 0x2c, 0x0a, 0x11, 0x72, 0x6f, 0x69, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x4f, + 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x11, 0x72, 0x6f, + 0x69, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x4f, 0x76, 0x65, 0x72, 0x6c, 0x61, 0x70, 0x12, + 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x2a, 0x0a, + 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x02, 0x52, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x4d, 0x69, 0x6e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x2a, 0x0a, 0x10, 0x73, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, + 0x01, 0x28, 0x02, 0x52, 0x10, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x4d, 0x61, 0x78, + 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x72, 0x6f, 0x69, 0x49, 0x64, 0x73, 0x18, + 0x08, 0x20, 0x03, 0x28, 0x09, 0x52, 0x06, 0x72, 0x6f, 0x69, 0x49, 0x64, 0x73, 0x12, 0x32, 0x0a, + 0x14, 0x73, 0x68, 0x6f, 0x77, 0x41, 0x6c, 0x6c, 0x4d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x4c, + 0x61, 0x62, 0x65, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x73, 0x68, 0x6f, 0x77, 0x41, 0x6c, 0x6c, 0x4d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x08, 0x52, 0x14, 0x73, 0x68, 0x6f, 0x77, 0x41, 0x6c, 0x6c, - 0x4d, 0x69, 0x6e, 0x65, 0x72, 0x61, 0x6c, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x73, 0x22, 0x55, 0x0a, - 0x15, 0x52, 0x47, 0x42, 0x55, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x57, 0x69, 0x64, 0x67, 0x65, - 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, - 0x6e, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, 0x62, 0x72, 0x69, 0x67, - 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6e, 0x0a, 0x18, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, - 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x09, 0x52, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x08, 0x63, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, 0x4e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6d, 0x61, 0x67, 0x65, - 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa1, 0x05, 0x0a, 0x0a, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x08, 0x73, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x53, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, - 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x73, 0x70, 0x65, - 0x63, 0x74, 0x72, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x06, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x06, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x27, 0x0a, 0x07, 0x74, - 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x54, - 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x07, 0x74, 0x65, 0x72, - 0x6e, 0x61, 0x72, 0x79, 0x12, 0x2d, 0x0a, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, - 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x48, 0x69, 0x73, 0x74, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x68, 0x69, 0x73, 0x74, 0x6f, 0x67, - 0x72, 0x61, 0x6d, 0x12, 0x36, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, - 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x43, 0x6f, 0x6e, 0x74, - 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0c, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x21, 0x0a, 0x05, 0x63, - 0x68, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x43, 0x68, 0x6f, - 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x63, 0x68, 0x6f, 0x72, 0x64, 0x12, 0x21, - 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, - 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x74, 0x61, 0x62, 0x6c, - 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x6f, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x54, 0x61, 0x62, - 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x52, 0x4f, 0x49, 0x51, 0x75, - 0x61, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x72, - 0x6f, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x2d, 0x0a, 0x09, - 0x76, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0f, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, - 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x30, 0x0a, 0x08, 0x72, - 0x67, 0x62, 0x75, 0x50, 0x6c, 0x6f, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x52, 0x47, 0x42, 0x55, 0x50, 0x6c, 0x6f, 0x74, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x65, 0x52, 0x08, 0x72, 0x67, 0x62, 0x75, 0x50, 0x6c, 0x6f, 0x74, 0x12, 0x42, 0x0a, - 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, 0x69, 0x73, 0x52, 0x47, 0x42, 0x55, 0x18, - 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x53, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, - 0x69, 0x73, 0x52, 0x47, 0x42, 0x55, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x52, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, 0x69, 0x73, 0x52, 0x47, 0x42, - 0x55, 0x12, 0x34, 0x0a, 0x09, 0x72, 0x67, 0x62, 0x75, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x52, 0x47, 0x42, 0x55, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x73, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x72, 0x67, - 0x62, 0x75, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x70, 0x61, 0x72, 0x61, 0x6c, - 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x57, 0x69, - 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, 0x61, 0x72, 0x61, 0x6c, - 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x22, 0x55, 0x0a, 0x15, 0x52, 0x47, 0x42, 0x55, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x73, 0x57, + 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x62, 0x72, + 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x02, 0x52, 0x0a, + 0x62, 0x72, 0x69, 0x67, 0x68, 0x74, 0x6e, 0x65, 0x73, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0x6e, 0x0a, 0x18, 0x50, 0x61, 0x72, 0x61, + 0x6c, 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x67, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1a, + 0x0a, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, + 0x52, 0x08, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x12, 0x1c, 0x0a, 0x09, 0x69, 0x6d, + 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, + 0x6d, 0x61, 0x67, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x22, 0xa1, 0x05, 0x0a, 0x0a, 0x57, 0x69, 0x64, + 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x02, 0x69, 0x64, 0x12, 0x30, 0x0a, 0x08, 0x73, 0x70, 0x65, 0x63, 0x74, + 0x72, 0x75, 0x6d, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x53, 0x70, 0x65, 0x63, + 0x74, 0x72, 0x75, 0x6d, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x08, 0x73, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x12, 0x24, 0x0a, 0x06, 0x62, 0x69, 0x6e, + 0x61, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x42, 0x69, 0x6e, 0x61, + 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x06, 0x62, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x12, + 0x27, 0x0a, 0x07, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0d, 0x2e, 0x54, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, + 0x07, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x72, 0x79, 0x12, 0x2d, 0x0a, 0x09, 0x68, 0x69, 0x73, 0x74, + 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x48, 0x69, + 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x68, 0x69, + 0x73, 0x74, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, 0x36, 0x0a, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, + 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x0c, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, + 0x21, 0x0a, 0x05, 0x63, 0x68, 0x6f, 0x72, 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, + 0x2e, 0x43, 0x68, 0x6f, 0x72, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x63, 0x68, 0x6f, + 0x72, 0x64, 0x12, 0x21, 0x0a, 0x05, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0b, 0x2e, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, + 0x74, 0x61, 0x62, 0x6c, 0x65, 0x12, 0x39, 0x0a, 0x0d, 0x72, 0x6f, 0x69, 0x51, 0x75, 0x61, 0x6e, + 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x52, + 0x4f, 0x49, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, 0x53, 0x74, 0x61, 0x74, + 0x65, 0x52, 0x0d, 0x72, 0x6f, 0x69, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x54, 0x61, 0x62, 0x6c, 0x65, + 0x12, 0x2d, 0x0a, 0x09, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x56, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x53, + 0x74, 0x61, 0x74, 0x65, 0x52, 0x09, 0x76, 0x61, 0x72, 0x69, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x12, + 0x30, 0x0a, 0x08, 0x72, 0x67, 0x62, 0x75, 0x50, 0x6c, 0x6f, 0x74, 0x18, 0x0b, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x14, 0x2e, 0x52, 0x47, 0x42, 0x55, 0x50, 0x6c, 0x6f, 0x74, 0x57, 0x69, 0x64, 0x67, + 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x08, 0x72, 0x67, 0x62, 0x75, 0x50, 0x6c, 0x6f, + 0x74, 0x12, 0x42, 0x0a, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, 0x69, 0x73, 0x52, + 0x47, 0x42, 0x55, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x53, 0x69, 0x6e, 0x67, + 0x6c, 0x65, 0x41, 0x78, 0x69, 0x73, 0x52, 0x47, 0x42, 0x55, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, + 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0e, 0x73, 0x69, 0x6e, 0x67, 0x6c, 0x65, 0x41, 0x78, 0x69, + 0x73, 0x52, 0x47, 0x42, 0x55, 0x12, 0x34, 0x0a, 0x09, 0x72, 0x67, 0x62, 0x75, 0x49, 0x6d, 0x61, + 0x67, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x52, 0x47, 0x42, 0x55, 0x49, + 0x6d, 0x61, 0x67, 0x65, 0x73, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, + 0x52, 0x09, 0x72, 0x67, 0x62, 0x75, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x12, 0x3f, 0x0a, 0x0d, 0x70, + 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x18, 0x0e, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, + 0x61, 0x6d, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x0d, 0x70, + 0x61, 0x72, 0x61, 0x6c, 0x6c, 0x65, 0x6c, 0x6f, 0x67, 0x72, 0x61, 0x6d, 0x42, 0x0a, 0x5a, 0x08, + 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( From 295eceefdddffcc64d602ede50f1e5dbda5ff8fc Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Fri, 24 May 2024 10:02:10 +1000 Subject: [PATCH 12/17] Added message ids for scan trigger auto quant --- generated-protos/detector-config-msgs.pb.go | 4 +- generated-protos/detector-config.pb.go | 4 +- generated-protos/diffraction-data.pb.go | 4 +- .../diffraction-detected-peak-msgs.pb.go | 4 +- .../diffraction-manual-msgs.pb.go | 4 +- .../diffraction-status-msgs.pb.go | 4 +- generated-protos/diffraction.pb.go | 4 +- generated-protos/doi-msgs.pb.go | 4 +- generated-protos/doi.pb.go | 4 +- generated-protos/element-set-msgs.pb.go | 4 +- generated-protos/element-set.pb.go | 4 +- generated-protos/experiment.pb.go | 4 +- generated-protos/export-msgs.pb.go | 4 +- generated-protos/export.pb.go | 4 +- generated-protos/expression-group-msgs.pb.go | 4 +- generated-protos/expression-group.pb.go | 4 +- generated-protos/expression-msgs.pb.go | 4 +- generated-protos/expressions.pb.go | 4 +- .../image-beam-location-msgs.pb.go | 4 +- generated-protos/image-beam-location.pb.go | 4 +- generated-protos/image-coreg-msgs.pb.go | 4 +- generated-protos/image-coreg.pb.go | 4 +- generated-protos/image-msgs.pb.go | 4 +- generated-protos/image.pb.go | 4 +- generated-protos/job-msgs.pb.go | 4 +- generated-protos/job.pb.go | 4 +- generated-protos/log-msgs.pb.go | 4 +- generated-protos/log.pb.go | 4 +- generated-protos/memoisation-msgs.pb.go | 4 +- generated-protos/memoisation.pb.go | 4 +- generated-protos/module-msgs.pb.go | 4 +- generated-protos/modules.pb.go | 4 +- generated-protos/notification-msgs.pb.go | 4 +- generated-protos/notification.pb.go | 4 +- generated-protos/ownership-access-msgs.pb.go | 4 +- generated-protos/ownership-access.pb.go | 4 +- generated-protos/permissions.pb.go | 4 +- generated-protos/piquant-config.pb.go | 4 +- generated-protos/piquant-msgs.pb.go | 4 +- .../pseudo-intensities-msgs.pb.go | 4 +- generated-protos/pseudo-intensities.pb.go | 4 +- generated-protos/quantification-create.pb.go | 4 +- .../quantification-management-msgs.pb.go | 4 +- generated-protos/quantification-meta.pb.go | 4 +- .../quantification-multi-msgs.pb.go | 4 +- generated-protos/quantification-multi.pb.go | 4 +- .../quantification-retrieval-msgs.pb.go | 4 +- .../quantification-upload-msgs.pb.go | 4 +- generated-protos/quantification.pb.go | 4 +- generated-protos/restmsgs.pb.go | 4 +- generated-protos/roi-msgs.pb.go | 4 +- generated-protos/roi.pb.go | 4 +- .../scan-beam-location-msgs.pb.go | 4 +- generated-protos/scan-beam-location.pb.go | 4 +- .../scan-entry-metadata-msgs.pb.go | 4 +- generated-protos/scan-entry-metadata.pb.go | 4 +- generated-protos/scan-entry-msgs.pb.go | 4 +- generated-protos/scan-entry.pb.go | 4 +- generated-protos/scan-msgs.pb.go | 4 +- generated-protos/scan.pb.go | 4 +- .../screen-configuration-msgs.pb.go | 4 +- generated-protos/screen-configuration.pb.go | 4 +- generated-protos/search-params.pb.go | 4 +- generated-protos/selection-entry-msgs.pb.go | 4 +- generated-protos/selection-pixel-msgs.pb.go | 4 +- generated-protos/spectrum-msgs.pb.go | 4 +- generated-protos/spectrum.pb.go | 4 +- generated-protos/tag-msgs.pb.go | 4 +- generated-protos/tags.pb.go | 4 +- generated-protos/test-msgs.pb.go | 4 +- generated-protos/user-db-items.pb.go | 4 +- generated-protos/user-group-admins-msgs.pb.go | 4 +- .../user-group-joining-msgs.pb.go | 4 +- .../user-group-management-msgs.pb.go | 4 +- .../user-group-membership-msgs.pb.go | 4 +- .../user-group-retrieval-msgs.pb.go | 4 +- generated-protos/user-group.pb.go | 4 +- generated-protos/user-management-msgs.pb.go | 4 +- generated-protos/user-msgs.pb.go | 4 +- .../user-notification-setting-msgs.pb.go | 4 +- .../user-notification-settings.pb.go | 4 +- generated-protos/user.pb.go | 4 +- generated-protos/version.pb.go | 4 +- generated-protos/websocket.pb.go | 1265 +++++++++-------- generated-protos/widget-data-msgs.pb.go | 4 +- generated-protos/widget-data.pb.go | 4 +- 86 files changed, 825 insertions(+), 780 deletions(-) diff --git a/generated-protos/detector-config-msgs.pb.go b/generated-protos/detector-config-msgs.pb.go index 594ad16b..e1d80b24 100644 --- a/generated-protos/detector-config-msgs.pb.go +++ b/generated-protos/detector-config-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: detector-config-msgs.proto package protos diff --git a/generated-protos/detector-config.pb.go b/generated-protos/detector-config.pb.go index 7dddbd9d..5d5b19c5 100644 --- a/generated-protos/detector-config.pb.go +++ b/generated-protos/detector-config.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: detector-config.proto package protos diff --git a/generated-protos/diffraction-data.pb.go b/generated-protos/diffraction-data.pb.go index a16350e0..58ce0764 100644 --- a/generated-protos/diffraction-data.pb.go +++ b/generated-protos/diffraction-data.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: diffraction-data.proto package protos diff --git a/generated-protos/diffraction-detected-peak-msgs.pb.go b/generated-protos/diffraction-detected-peak-msgs.pb.go index 17a2234c..250ee0d2 100644 --- a/generated-protos/diffraction-detected-peak-msgs.pb.go +++ b/generated-protos/diffraction-detected-peak-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: diffraction-detected-peak-msgs.proto package protos diff --git a/generated-protos/diffraction-manual-msgs.pb.go b/generated-protos/diffraction-manual-msgs.pb.go index 6683e807..f20cb474 100644 --- a/generated-protos/diffraction-manual-msgs.pb.go +++ b/generated-protos/diffraction-manual-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: diffraction-manual-msgs.proto package protos diff --git a/generated-protos/diffraction-status-msgs.pb.go b/generated-protos/diffraction-status-msgs.pb.go index 710eee91..966801f2 100644 --- a/generated-protos/diffraction-status-msgs.pb.go +++ b/generated-protos/diffraction-status-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: diffraction-status-msgs.proto package protos diff --git a/generated-protos/diffraction.pb.go b/generated-protos/diffraction.pb.go index 77ca2271..281a37a9 100644 --- a/generated-protos/diffraction.pb.go +++ b/generated-protos/diffraction.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: data-formats/file-formats/diffraction.proto package protos diff --git a/generated-protos/doi-msgs.pb.go b/generated-protos/doi-msgs.pb.go index 8542205e..13f76db2 100644 --- a/generated-protos/doi-msgs.pb.go +++ b/generated-protos/doi-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: doi-msgs.proto package protos diff --git a/generated-protos/doi.pb.go b/generated-protos/doi.pb.go index 893a7e80..7d5bd02f 100644 --- a/generated-protos/doi.pb.go +++ b/generated-protos/doi.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: doi.proto package protos diff --git a/generated-protos/element-set-msgs.pb.go b/generated-protos/element-set-msgs.pb.go index 9e3b01d3..2d58e2db 100644 --- a/generated-protos/element-set-msgs.pb.go +++ b/generated-protos/element-set-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: element-set-msgs.proto package protos diff --git a/generated-protos/element-set.pb.go b/generated-protos/element-set.pb.go index b96c3637..37d9bd0e 100644 --- a/generated-protos/element-set.pb.go +++ b/generated-protos/element-set.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: element-set.proto package protos diff --git a/generated-protos/experiment.pb.go b/generated-protos/experiment.pb.go index 1bde8d45..6092e776 100644 --- a/generated-protos/experiment.pb.go +++ b/generated-protos/experiment.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: data-formats/file-formats/experiment.proto package protos diff --git a/generated-protos/export-msgs.pb.go b/generated-protos/export-msgs.pb.go index f3161de7..dc06af3e 100644 --- a/generated-protos/export-msgs.pb.go +++ b/generated-protos/export-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: export-msgs.proto package protos diff --git a/generated-protos/export.pb.go b/generated-protos/export.pb.go index 2b6d309d..833b227e 100644 --- a/generated-protos/export.pb.go +++ b/generated-protos/export.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: export.proto package protos diff --git a/generated-protos/expression-group-msgs.pb.go b/generated-protos/expression-group-msgs.pb.go index f867bfa9..d7975d7e 100644 --- a/generated-protos/expression-group-msgs.pb.go +++ b/generated-protos/expression-group-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: expression-group-msgs.proto package protos diff --git a/generated-protos/expression-group.pb.go b/generated-protos/expression-group.pb.go index f71ded8f..90f1716b 100644 --- a/generated-protos/expression-group.pb.go +++ b/generated-protos/expression-group.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: expression-group.proto package protos diff --git a/generated-protos/expression-msgs.pb.go b/generated-protos/expression-msgs.pb.go index b681ed9e..4e6b94e9 100644 --- a/generated-protos/expression-msgs.pb.go +++ b/generated-protos/expression-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: expression-msgs.proto package protos diff --git a/generated-protos/expressions.pb.go b/generated-protos/expressions.pb.go index f1e19fbf..db902dcb 100644 --- a/generated-protos/expressions.pb.go +++ b/generated-protos/expressions.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: expressions.proto package protos diff --git a/generated-protos/image-beam-location-msgs.pb.go b/generated-protos/image-beam-location-msgs.pb.go index 325c1c4e..18c3d37d 100644 --- a/generated-protos/image-beam-location-msgs.pb.go +++ b/generated-protos/image-beam-location-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: image-beam-location-msgs.proto package protos diff --git a/generated-protos/image-beam-location.pb.go b/generated-protos/image-beam-location.pb.go index 7a7b0344..6e8ae2ab 100644 --- a/generated-protos/image-beam-location.pb.go +++ b/generated-protos/image-beam-location.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: image-beam-location.proto package protos diff --git a/generated-protos/image-coreg-msgs.pb.go b/generated-protos/image-coreg-msgs.pb.go index d736058a..a2cbb23d 100644 --- a/generated-protos/image-coreg-msgs.pb.go +++ b/generated-protos/image-coreg-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: image-coreg-msgs.proto package protos diff --git a/generated-protos/image-coreg.pb.go b/generated-protos/image-coreg.pb.go index edf35579..7f636355 100644 --- a/generated-protos/image-coreg.pb.go +++ b/generated-protos/image-coreg.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: image-coreg.proto package protos diff --git a/generated-protos/image-msgs.pb.go b/generated-protos/image-msgs.pb.go index 2c5974fb..5784f9b5 100644 --- a/generated-protos/image-msgs.pb.go +++ b/generated-protos/image-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: image-msgs.proto package protos diff --git a/generated-protos/image.pb.go b/generated-protos/image.pb.go index df12738d..a8316b61 100644 --- a/generated-protos/image.pb.go +++ b/generated-protos/image.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: image.proto package protos diff --git a/generated-protos/job-msgs.pb.go b/generated-protos/job-msgs.pb.go index 344a7e94..63a874bd 100644 --- a/generated-protos/job-msgs.pb.go +++ b/generated-protos/job-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: job-msgs.proto package protos diff --git a/generated-protos/job.pb.go b/generated-protos/job.pb.go index 7686c5ff..91edb26c 100644 --- a/generated-protos/job.pb.go +++ b/generated-protos/job.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: job.proto package protos diff --git a/generated-protos/log-msgs.pb.go b/generated-protos/log-msgs.pb.go index b741e1d5..1b490026 100644 --- a/generated-protos/log-msgs.pb.go +++ b/generated-protos/log-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: log-msgs.proto package protos diff --git a/generated-protos/log.pb.go b/generated-protos/log.pb.go index 82e2509f..ac5666d3 100644 --- a/generated-protos/log.pb.go +++ b/generated-protos/log.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: log.proto package protos diff --git a/generated-protos/memoisation-msgs.pb.go b/generated-protos/memoisation-msgs.pb.go index b34b5fcb..3b40cbad 100644 --- a/generated-protos/memoisation-msgs.pb.go +++ b/generated-protos/memoisation-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: memoisation-msgs.proto package protos diff --git a/generated-protos/memoisation.pb.go b/generated-protos/memoisation.pb.go index 07349006..b01797d2 100644 --- a/generated-protos/memoisation.pb.go +++ b/generated-protos/memoisation.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: memoisation.proto package protos diff --git a/generated-protos/module-msgs.pb.go b/generated-protos/module-msgs.pb.go index b6b752da..bc17fe28 100644 --- a/generated-protos/module-msgs.pb.go +++ b/generated-protos/module-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: module-msgs.proto package protos diff --git a/generated-protos/modules.pb.go b/generated-protos/modules.pb.go index 21b3054a..fd1124d4 100644 --- a/generated-protos/modules.pb.go +++ b/generated-protos/modules.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: modules.proto package protos diff --git a/generated-protos/notification-msgs.pb.go b/generated-protos/notification-msgs.pb.go index 200f5230..ef76689d 100644 --- a/generated-protos/notification-msgs.pb.go +++ b/generated-protos/notification-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: notification-msgs.proto package protos diff --git a/generated-protos/notification.pb.go b/generated-protos/notification.pb.go index ec0f2890..48d4c45a 100644 --- a/generated-protos/notification.pb.go +++ b/generated-protos/notification.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: notification.proto package protos diff --git a/generated-protos/ownership-access-msgs.pb.go b/generated-protos/ownership-access-msgs.pb.go index 679277e4..36d54a65 100644 --- a/generated-protos/ownership-access-msgs.pb.go +++ b/generated-protos/ownership-access-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: ownership-access-msgs.proto package protos diff --git a/generated-protos/ownership-access.pb.go b/generated-protos/ownership-access.pb.go index 9fa2e2a4..730662a0 100644 --- a/generated-protos/ownership-access.pb.go +++ b/generated-protos/ownership-access.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: ownership-access.proto package protos diff --git a/generated-protos/permissions.pb.go b/generated-protos/permissions.pb.go index 676e6fe1..6ab98ee6 100644 --- a/generated-protos/permissions.pb.go +++ b/generated-protos/permissions.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: permissions.proto package protos diff --git a/generated-protos/piquant-config.pb.go b/generated-protos/piquant-config.pb.go index 67854fde..0c3e38cf 100644 --- a/generated-protos/piquant-config.pb.go +++ b/generated-protos/piquant-config.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: piquant-config.proto package protos diff --git a/generated-protos/piquant-msgs.pb.go b/generated-protos/piquant-msgs.pb.go index 91f97ad1..474254bd 100644 --- a/generated-protos/piquant-msgs.pb.go +++ b/generated-protos/piquant-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: piquant-msgs.proto package protos diff --git a/generated-protos/pseudo-intensities-msgs.pb.go b/generated-protos/pseudo-intensities-msgs.pb.go index 4fc6fc1a..bf12ad6d 100644 --- a/generated-protos/pseudo-intensities-msgs.pb.go +++ b/generated-protos/pseudo-intensities-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: pseudo-intensities-msgs.proto package protos diff --git a/generated-protos/pseudo-intensities.pb.go b/generated-protos/pseudo-intensities.pb.go index 141c3b8f..549fa381 100644 --- a/generated-protos/pseudo-intensities.pb.go +++ b/generated-protos/pseudo-intensities.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: pseudo-intensities.proto package protos diff --git a/generated-protos/quantification-create.pb.go b/generated-protos/quantification-create.pb.go index cb6b40e7..7ae937f0 100644 --- a/generated-protos/quantification-create.pb.go +++ b/generated-protos/quantification-create.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-create.proto package protos diff --git a/generated-protos/quantification-management-msgs.pb.go b/generated-protos/quantification-management-msgs.pb.go index dde9e2bc..9f77418f 100644 --- a/generated-protos/quantification-management-msgs.pb.go +++ b/generated-protos/quantification-management-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-management-msgs.proto package protos diff --git a/generated-protos/quantification-meta.pb.go b/generated-protos/quantification-meta.pb.go index 5625f11e..50f3cab7 100644 --- a/generated-protos/quantification-meta.pb.go +++ b/generated-protos/quantification-meta.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-meta.proto package protos diff --git a/generated-protos/quantification-multi-msgs.pb.go b/generated-protos/quantification-multi-msgs.pb.go index 615831f1..b40544b4 100644 --- a/generated-protos/quantification-multi-msgs.pb.go +++ b/generated-protos/quantification-multi-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-multi-msgs.proto package protos diff --git a/generated-protos/quantification-multi.pb.go b/generated-protos/quantification-multi.pb.go index 3dfc1203..a7c08ac4 100644 --- a/generated-protos/quantification-multi.pb.go +++ b/generated-protos/quantification-multi.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-multi.proto package protos diff --git a/generated-protos/quantification-retrieval-msgs.pb.go b/generated-protos/quantification-retrieval-msgs.pb.go index e6cd4da8..2effc136 100644 --- a/generated-protos/quantification-retrieval-msgs.pb.go +++ b/generated-protos/quantification-retrieval-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-retrieval-msgs.proto package protos diff --git a/generated-protos/quantification-upload-msgs.pb.go b/generated-protos/quantification-upload-msgs.pb.go index 580d28b6..9408dce0 100644 --- a/generated-protos/quantification-upload-msgs.pb.go +++ b/generated-protos/quantification-upload-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification-upload-msgs.proto package protos diff --git a/generated-protos/quantification.pb.go b/generated-protos/quantification.pb.go index 333fc858..d5737b8f 100644 --- a/generated-protos/quantification.pb.go +++ b/generated-protos/quantification.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: quantification.proto package protos diff --git a/generated-protos/restmsgs.pb.go b/generated-protos/restmsgs.pb.go index 3c69f5dc..077d2be9 100644 --- a/generated-protos/restmsgs.pb.go +++ b/generated-protos/restmsgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: restmsgs.proto package protos diff --git a/generated-protos/roi-msgs.pb.go b/generated-protos/roi-msgs.pb.go index e4600026..ea6c68c7 100644 --- a/generated-protos/roi-msgs.pb.go +++ b/generated-protos/roi-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: roi-msgs.proto package protos diff --git a/generated-protos/roi.pb.go b/generated-protos/roi.pb.go index c8e3a69b..50e24b29 100644 --- a/generated-protos/roi.pb.go +++ b/generated-protos/roi.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: roi.proto package protos diff --git a/generated-protos/scan-beam-location-msgs.pb.go b/generated-protos/scan-beam-location-msgs.pb.go index 482c2696..e0163691 100644 --- a/generated-protos/scan-beam-location-msgs.pb.go +++ b/generated-protos/scan-beam-location-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-beam-location-msgs.proto package protos diff --git a/generated-protos/scan-beam-location.pb.go b/generated-protos/scan-beam-location.pb.go index f6531300..22773ca8 100644 --- a/generated-protos/scan-beam-location.pb.go +++ b/generated-protos/scan-beam-location.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-beam-location.proto package protos diff --git a/generated-protos/scan-entry-metadata-msgs.pb.go b/generated-protos/scan-entry-metadata-msgs.pb.go index 037c7947..5e748e1b 100644 --- a/generated-protos/scan-entry-metadata-msgs.pb.go +++ b/generated-protos/scan-entry-metadata-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-entry-metadata-msgs.proto package protos diff --git a/generated-protos/scan-entry-metadata.pb.go b/generated-protos/scan-entry-metadata.pb.go index 65cd4ebb..05565a9e 100644 --- a/generated-protos/scan-entry-metadata.pb.go +++ b/generated-protos/scan-entry-metadata.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-entry-metadata.proto package protos diff --git a/generated-protos/scan-entry-msgs.pb.go b/generated-protos/scan-entry-msgs.pb.go index 8c15ab1e..d4cda4ad 100644 --- a/generated-protos/scan-entry-msgs.pb.go +++ b/generated-protos/scan-entry-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-entry-msgs.proto package protos diff --git a/generated-protos/scan-entry.pb.go b/generated-protos/scan-entry.pb.go index 1a8f62cd..6f0c3d57 100644 --- a/generated-protos/scan-entry.pb.go +++ b/generated-protos/scan-entry.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-entry.proto package protos diff --git a/generated-protos/scan-msgs.pb.go b/generated-protos/scan-msgs.pb.go index a99a8602..c9e96e83 100644 --- a/generated-protos/scan-msgs.pb.go +++ b/generated-protos/scan-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan-msgs.proto package protos diff --git a/generated-protos/scan.pb.go b/generated-protos/scan.pb.go index 0ae71605..49441601 100644 --- a/generated-protos/scan.pb.go +++ b/generated-protos/scan.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: scan.proto package protos diff --git a/generated-protos/screen-configuration-msgs.pb.go b/generated-protos/screen-configuration-msgs.pb.go index b58d8e1f..0586c064 100644 --- a/generated-protos/screen-configuration-msgs.pb.go +++ b/generated-protos/screen-configuration-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: screen-configuration-msgs.proto package protos diff --git a/generated-protos/screen-configuration.pb.go b/generated-protos/screen-configuration.pb.go index 0a7352c7..d2ebb60d 100644 --- a/generated-protos/screen-configuration.pb.go +++ b/generated-protos/screen-configuration.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: screen-configuration.proto package protos diff --git a/generated-protos/search-params.pb.go b/generated-protos/search-params.pb.go index c00313fa..309b142f 100644 --- a/generated-protos/search-params.pb.go +++ b/generated-protos/search-params.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: search-params.proto package protos diff --git a/generated-protos/selection-entry-msgs.pb.go b/generated-protos/selection-entry-msgs.pb.go index 8a0e9cc8..1c5c18f1 100644 --- a/generated-protos/selection-entry-msgs.pb.go +++ b/generated-protos/selection-entry-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: selection-entry-msgs.proto package protos diff --git a/generated-protos/selection-pixel-msgs.pb.go b/generated-protos/selection-pixel-msgs.pb.go index fda4be2d..8bad0215 100644 --- a/generated-protos/selection-pixel-msgs.pb.go +++ b/generated-protos/selection-pixel-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: selection-pixel-msgs.proto package protos diff --git a/generated-protos/spectrum-msgs.pb.go b/generated-protos/spectrum-msgs.pb.go index faf94fac..72ef5fbe 100644 --- a/generated-protos/spectrum-msgs.pb.go +++ b/generated-protos/spectrum-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: spectrum-msgs.proto package protos diff --git a/generated-protos/spectrum.pb.go b/generated-protos/spectrum.pb.go index 6913d8fb..18f5adef 100644 --- a/generated-protos/spectrum.pb.go +++ b/generated-protos/spectrum.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: spectrum.proto package protos diff --git a/generated-protos/tag-msgs.pb.go b/generated-protos/tag-msgs.pb.go index 39f47461..79946b98 100644 --- a/generated-protos/tag-msgs.pb.go +++ b/generated-protos/tag-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: tag-msgs.proto package protos diff --git a/generated-protos/tags.pb.go b/generated-protos/tags.pb.go index a233f8c2..6fcc8ebb 100644 --- a/generated-protos/tags.pb.go +++ b/generated-protos/tags.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: tags.proto package protos diff --git a/generated-protos/test-msgs.pb.go b/generated-protos/test-msgs.pb.go index 44f5de72..c6e2e75a 100644 --- a/generated-protos/test-msgs.pb.go +++ b/generated-protos/test-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: test-msgs.proto package protos diff --git a/generated-protos/user-db-items.pb.go b/generated-protos/user-db-items.pb.go index a30f4e4b..5e0fd88e 100644 --- a/generated-protos/user-db-items.pb.go +++ b/generated-protos/user-db-items.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-db-items.proto package protos diff --git a/generated-protos/user-group-admins-msgs.pb.go b/generated-protos/user-group-admins-msgs.pb.go index 98a63b86..4d0062ab 100644 --- a/generated-protos/user-group-admins-msgs.pb.go +++ b/generated-protos/user-group-admins-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-group-admins-msgs.proto package protos diff --git a/generated-protos/user-group-joining-msgs.pb.go b/generated-protos/user-group-joining-msgs.pb.go index 2af8766b..80731bba 100644 --- a/generated-protos/user-group-joining-msgs.pb.go +++ b/generated-protos/user-group-joining-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-group-joining-msgs.proto package protos diff --git a/generated-protos/user-group-management-msgs.pb.go b/generated-protos/user-group-management-msgs.pb.go index c3a480fa..fec608b2 100644 --- a/generated-protos/user-group-management-msgs.pb.go +++ b/generated-protos/user-group-management-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-group-management-msgs.proto package protos diff --git a/generated-protos/user-group-membership-msgs.pb.go b/generated-protos/user-group-membership-msgs.pb.go index 5b48e29c..0679f2f4 100644 --- a/generated-protos/user-group-membership-msgs.pb.go +++ b/generated-protos/user-group-membership-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-group-membership-msgs.proto package protos diff --git a/generated-protos/user-group-retrieval-msgs.pb.go b/generated-protos/user-group-retrieval-msgs.pb.go index e6e1d7db..37b865a9 100644 --- a/generated-protos/user-group-retrieval-msgs.pb.go +++ b/generated-protos/user-group-retrieval-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-group-retrieval-msgs.proto package protos diff --git a/generated-protos/user-group.pb.go b/generated-protos/user-group.pb.go index 44f8bf32..dbbd9876 100644 --- a/generated-protos/user-group.pb.go +++ b/generated-protos/user-group.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-group.proto package protos diff --git a/generated-protos/user-management-msgs.pb.go b/generated-protos/user-management-msgs.pb.go index 49c0d317..1d76081d 100644 --- a/generated-protos/user-management-msgs.pb.go +++ b/generated-protos/user-management-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-management-msgs.proto package protos diff --git a/generated-protos/user-msgs.pb.go b/generated-protos/user-msgs.pb.go index 4ec68913..6bb811e8 100644 --- a/generated-protos/user-msgs.pb.go +++ b/generated-protos/user-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-msgs.proto package protos diff --git a/generated-protos/user-notification-setting-msgs.pb.go b/generated-protos/user-notification-setting-msgs.pb.go index d83fe206..28249f5e 100644 --- a/generated-protos/user-notification-setting-msgs.pb.go +++ b/generated-protos/user-notification-setting-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-notification-setting-msgs.proto package protos diff --git a/generated-protos/user-notification-settings.pb.go b/generated-protos/user-notification-settings.pb.go index caf4b6ae..76a55c97 100644 --- a/generated-protos/user-notification-settings.pb.go +++ b/generated-protos/user-notification-settings.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user-notification-settings.proto package protos diff --git a/generated-protos/user.pb.go b/generated-protos/user.pb.go index 82598223..fc680e5b 100644 --- a/generated-protos/user.pb.go +++ b/generated-protos/user.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: user.proto package protos diff --git a/generated-protos/version.pb.go b/generated-protos/version.pb.go index 3f1a73d4..58100287 100644 --- a/generated-protos/version.pb.go +++ b/generated-protos/version.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: version.proto package protos diff --git a/generated-protos/websocket.pb.go b/generated-protos/websocket.pb.go index 3576ce33..0c45eed9 100644 --- a/generated-protos/websocket.pb.go +++ b/generated-protos/websocket.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: websocket.proto package protos @@ -281,6 +281,8 @@ type WSMessage struct { // *WSMessage_ScanMetaLabelsAndTypesResp // *WSMessage_ScanMetaWriteReq // *WSMessage_ScanMetaWriteResp + // *WSMessage_ScanTriggerAutoQuantReq + // *WSMessage_ScanTriggerAutoQuantResp // *WSMessage_ScanTriggerReImportReq // *WSMessage_ScanTriggerReImportResp // *WSMessage_ScanTriggerReImportUpd @@ -1672,6 +1674,20 @@ func (x *WSMessage) GetScanMetaWriteResp() *ScanMetaWriteResp { return nil } +func (x *WSMessage) GetScanTriggerAutoQuantReq() *ScanTriggerAutoQuantReq { + if x, ok := x.GetContents().(*WSMessage_ScanTriggerAutoQuantReq); ok { + return x.ScanTriggerAutoQuantReq + } + return nil +} + +func (x *WSMessage) GetScanTriggerAutoQuantResp() *ScanTriggerAutoQuantResp { + if x, ok := x.GetContents().(*WSMessage_ScanTriggerAutoQuantResp); ok { + return x.ScanTriggerAutoQuantResp + } + return nil +} + func (x *WSMessage) GetScanTriggerReImportReq() *ScanTriggerReImportReq { if x, ok := x.GetContents().(*WSMessage_ScanTriggerReImportReq); ok { return x.ScanTriggerReImportReq @@ -3007,6 +3023,14 @@ type WSMessage_ScanMetaWriteResp struct { ScanMetaWriteResp *ScanMetaWriteResp `protobuf:"bytes,107,opt,name=scanMetaWriteResp,proto3,oneof"` } +type WSMessage_ScanTriggerAutoQuantReq struct { + ScanTriggerAutoQuantReq *ScanTriggerAutoQuantReq `protobuf:"bytes,294,opt,name=scanTriggerAutoQuantReq,proto3,oneof"` +} + +type WSMessage_ScanTriggerAutoQuantResp struct { + ScanTriggerAutoQuantResp *ScanTriggerAutoQuantResp `protobuf:"bytes,295,opt,name=scanTriggerAutoQuantResp,proto3,oneof"` +} + type WSMessage_ScanTriggerReImportReq struct { ScanTriggerReImportReq *ScanTriggerReImportReq `protobuf:"bytes,108,opt,name=scanTriggerReImportReq,proto3,oneof"` } @@ -3717,6 +3741,10 @@ func (*WSMessage_ScanMetaWriteReq) isWSMessage_Contents() {} func (*WSMessage_ScanMetaWriteResp) isWSMessage_Contents() {} +func (*WSMessage_ScanTriggerAutoQuantReq) isWSMessage_Contents() {} + +func (*WSMessage_ScanTriggerAutoQuantResp) isWSMessage_Contents() {} + func (*WSMessage_ScanTriggerReImportReq) isWSMessage_Contents() {} func (*WSMessage_ScanTriggerReImportResp) isWSMessage_Contents() {} @@ -3972,7 +4000,7 @@ var file_websocket_proto_rawDesc = []byte{ 0x6f, 0x74, 0x6f, 0x1a, 0x1f, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x2d, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x16, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x2d, 0x64, 0x61, 0x74, - 0x61, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xf3, 0xa3, 0x01, + 0x61, 0x2d, 0x6d, 0x73, 0x67, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xa4, 0xa5, 0x01, 0x0a, 0x09, 0x57, 0x53, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x6d, 0x73, 0x67, 0x49, 0x64, 0x12, 0x27, 0x0a, 0x06, 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, @@ -4852,449 +4880,460 @@ var file_websocket_proto_rawDesc = []byte{ 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x6b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x73, 0x63, 0x61, - 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x51, - 0x0a, 0x16, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, - 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x18, 0x6c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, - 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, - 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x73, 0x63, 0x61, 0x6e, 0x54, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, - 0x71, 0x12, 0x54, 0x0a, 0x17, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x6d, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x17, - 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, - 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x16, 0x73, 0x63, 0x61, 0x6e, 0x54, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x70, - 0x64, 0x18, 0x8d, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x70, - 0x64, 0x48, 0x00, 0x52, 0x16, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, - 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x70, 0x64, 0x12, 0x36, 0x0a, 0x0d, 0x73, - 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x18, 0x6e, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, - 0x65, 0x71, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, - 0x52, 0x65, 0x71, 0x12, 0x39, 0x0a, 0x0e, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x18, 0x6f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x53, 0x63, - 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0e, - 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, - 0x0a, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x70, 0x64, 0x18, - 0x8c, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, - 0x6f, 0x61, 0x64, 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, - 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x70, 0x64, 0x12, 0x64, 0x0a, 0x1c, 0x73, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x84, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, - 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, - 0x1c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x67, 0x0a, - 0x1d, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x85, - 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, - 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1d, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, + 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x55, + 0x0a, 0x17, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, 0x74, + 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x18, 0xa6, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x18, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, + 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x73, 0x63, + 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x51, 0x75, 0x61, + 0x6e, 0x74, 0x52, 0x65, 0x71, 0x12, 0x58, 0x0a, 0x18, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, + 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x18, 0xa7, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, + 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, + 0x65, 0x72, 0x41, 0x75, 0x74, 0x6f, 0x51, 0x75, 0x61, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x51, 0x0a, 0x16, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, + 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x18, 0x6c, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x17, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, + 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x73, 0x63, 0x61, 0x6e, + 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, + 0x65, 0x71, 0x12, 0x54, 0x0a, 0x17, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x6d, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, + 0x17, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, + 0x70, 0x6f, 0x72, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x16, 0x73, 0x63, 0x61, 0x6e, + 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x55, + 0x70, 0x64, 0x18, 0x8d, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x53, 0x63, 0x61, 0x6e, + 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x55, + 0x70, 0x64, 0x48, 0x00, 0x52, 0x16, 0x73, 0x63, 0x61, 0x6e, 0x54, 0x72, 0x69, 0x67, 0x67, 0x65, + 0x72, 0x52, 0x65, 0x49, 0x6d, 0x70, 0x6f, 0x72, 0x74, 0x55, 0x70, 0x64, 0x12, 0x36, 0x0a, 0x0d, + 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x71, 0x18, 0x6e, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, + 0x64, 0x52, 0x65, 0x71, 0x12, 0x39, 0x0a, 0x0e, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, + 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x18, 0x6f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x53, + 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, + 0x0e, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x37, 0x0a, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x55, 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x70, 0x64, + 0x18, 0x8c, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x53, 0x63, 0x61, 0x6e, 0x55, 0x70, + 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x63, 0x61, 0x6e, 0x55, + 0x70, 0x6c, 0x6f, 0x61, 0x64, 0x55, 0x70, 0x64, 0x12, 0x64, 0x0a, 0x1c, 0x73, 0x63, 0x72, 0x65, + 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x84, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1d, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, + 0x52, 0x1c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x67, + 0x0a, 0x1d, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, + 0x85, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5b, 0x0a, 0x19, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1d, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x5b, 0x0a, 0x19, 0x73, 0x63, 0x72, 0x65, 0x65, + 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x18, 0xf8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x53, 0x63, + 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x19, 0x73, 0x63, 0x72, 0x65, 0x65, + 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x71, 0x12, 0x5e, 0x0a, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x18, 0xf9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x63, 0x72, 0x65, + 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, + 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x18, 0xf8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x53, 0x63, 0x72, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x18, 0xfa, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x63, 0x72, 0x65, + 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, + 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, + 0x74, 0x52, 0x65, 0x71, 0x12, 0x61, 0x0a, 0x1b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, + 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x18, 0xfb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x19, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, - 0x52, 0x65, 0x71, 0x12, 0x5e, 0x0a, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x18, 0xf9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x5e, 0x0a, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x71, 0x18, 0xfa, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1a, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, - 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, - 0x52, 0x65, 0x71, 0x12, 0x61, 0x0a, 0x1b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, - 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x18, 0xfb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x53, 0x63, 0x72, 0x65, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1b, 0x73, 0x63, 0x72, 0x65, 0x65, - 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, - 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xfc, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x53, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, 0x73, 0x63, 0x72, 0x65, 0x65, + 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xfc, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, + 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1b, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1b, 0x73, 0x63, + 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x64, 0x0a, 0x1c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x64, 0x0a, 0x1c, 0x73, 0x63, 0x72, - 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xfd, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1d, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, - 0x00, 0x52, 0x1c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x52, 0x0a, 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x18, 0xe2, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x73, 0x65, 0x6c, - 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, - 0x52, 0x65, 0x71, 0x12, 0x55, 0x0a, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0xe3, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, - 0x00, 0x52, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, 0x73, 0x65, + 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xfd, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x1c, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6e, 0x43, 0x6f, 0x6e, 0x66, 0x69, 0x67, + 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x52, 0x0a, 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x18, 0xe2, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x17, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, - 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xe4, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1c, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, - 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, - 0x52, 0x1b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, - 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x64, 0x0a, - 0x1c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, - 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xe5, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, - 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, - 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x18, 0xe6, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, - 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, - 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, - 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x55, 0x0a, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x18, 0xe7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x65, 0x6c, 0x65, + 0x73, 0x52, 0x65, 0x71, 0x12, 0x55, 0x0a, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, + 0xe3, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, + 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, 0x73, + 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, + 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xe4, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x1c, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, + 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, + 0x00, 0x52, 0x1b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, + 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x64, + 0x0a, 0x1c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, + 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xe5, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x49, 0x6d, 0x61, 0x67, 0x65, 0x50, 0x69, 0x78, 0x65, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x18, 0xe6, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, + 0x52, 0x16, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, + 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x71, 0x12, 0x55, 0x0a, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, - 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, - 0x0a, 0x1b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, - 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xe8, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, + 0x65, 0x73, 0x70, 0x18, 0xe7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x65, 0x6c, + 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x61, 0x0a, 0x1b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, + 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xe8, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, + 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x1b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x48, 0x00, 0x52, 0x1b, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, + 0x65, 0x71, 0x12, 0x64, 0x0a, 0x1c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x71, 0x12, 0x64, 0x0a, 0x1c, 0x73, 0x65, 0x6c, 0x65, 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, - 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x18, 0xe9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x73, 0x65, 0x6c, 0x65, 0x63, - 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x54, 0x0a, 0x17, 0x73, 0x65, 0x6e, 0x64, 0x55, - 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x18, 0x70, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x55, - 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, - 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x57, 0x0a, - 0x18, 0x73, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x71, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, 0x73, 0x65, - 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x63, 0x74, 0x72, - 0x75, 0x6d, 0x52, 0x65, 0x71, 0x18, 0x72, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x53, 0x70, - 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x70, 0x65, - 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, 0x0c, 0x73, 0x70, 0x65, 0x63, - 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x18, 0x73, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, - 0x2e, 0x53, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x0c, 0x73, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x33, 0x0a, - 0x0c, 0x74, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x74, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x71, 0x12, 0x36, 0x0a, 0x0d, 0x74, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x18, 0x75, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x54, 0x61, 0x67, 0x43, - 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x61, 0x67, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x33, 0x0a, 0x0c, 0x74, 0x61, - 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x76, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0d, 0x2e, 0x54, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, - 0x00, 0x52, 0x0c, 0x74, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, - 0x36, 0x0a, 0x0d, 0x74, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, - 0x18, 0x77, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x54, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x61, 0x67, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x0a, 0x74, 0x61, 0x67, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x78, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x54, 0x61, - 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x61, 0x67, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x30, 0x0a, 0x0b, 0x74, 0x61, 0x67, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x79, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x54, 0x61, - 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x61, 0x67, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, - 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x18, 0x7a, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x0f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, - 0x71, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, - 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, - 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x7b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, - 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x12, 0x42, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, - 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x18, 0x7c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, - 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, - 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x45, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x7d, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x13, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, - 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x12, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0e, - 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x18, 0x7e, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, - 0x6c, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x44, - 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0x7f, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, - 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, - 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x81, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, - 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x13, 0x75, 0x73, 0x65, - 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, - 0x12, 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, - 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x82, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x15, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x14, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, - 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, - 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0x9c, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, + 0x73, 0x70, 0x18, 0xe9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x53, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x73, 0x65, 0x6c, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x53, 0x63, 0x61, 0x6e, 0x45, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x54, 0x0a, 0x17, 0x73, 0x65, 0x6e, 0x64, + 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x18, 0x70, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x53, 0x65, 0x6e, 0x64, + 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x73, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x57, + 0x0a, 0x18, 0x73, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x71, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x19, 0x2e, 0x53, 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x18, 0x73, + 0x65, 0x6e, 0x64, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x30, 0x0a, 0x0b, 0x73, 0x70, 0x65, 0x63, 0x74, + 0x72, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x18, 0x72, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x53, + 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x70, + 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x71, 0x12, 0x33, 0x0a, 0x0c, 0x73, 0x70, 0x65, + 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x18, 0x73, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x0d, 0x2e, 0x53, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, + 0x52, 0x0c, 0x73, 0x70, 0x65, 0x63, 0x74, 0x72, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x12, 0x33, + 0x0a, 0x0c, 0x74, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x74, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x54, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x71, 0x12, 0x36, 0x0a, 0x0d, 0x74, 0x61, 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x18, 0x75, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x54, 0x61, 0x67, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x61, + 0x67, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x33, 0x0a, 0x0c, 0x74, + 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x76, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0d, 0x2e, 0x54, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x48, 0x00, 0x52, 0x0c, 0x74, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x12, 0x36, 0x0a, 0x0d, 0x74, 0x61, 0x67, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x18, 0x77, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x54, 0x61, 0x67, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x74, 0x61, 0x67, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x2d, 0x0a, 0x0a, 0x74, 0x61, 0x67, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x78, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0b, 0x2e, 0x54, + 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0a, 0x74, 0x61, 0x67, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x30, 0x0a, 0x0b, 0x74, 0x61, 0x67, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x79, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x54, + 0x61, 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0b, 0x74, 0x61, + 0x67, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, 0x0e, 0x75, 0x73, 0x65, + 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x18, 0x7a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x0f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, + 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, + 0x65, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x7b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x41, 0x64, 0x64, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x12, 0x42, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x18, 0x7c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, + 0x71, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x45, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x7d, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, + 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x12, 0x75, 0x73, 0x65, 0x72, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x6f, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x39, 0x0a, + 0x0e, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x18, + 0x7e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, + 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x71, 0x12, 0x3c, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, + 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, 0x7f, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, + 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x81, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, + 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x13, 0x75, 0x73, + 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, + 0x71, 0x12, 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, + 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0x82, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x15, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x44, 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x14, 0x75, 0x73, 0x65, 0x72, 0x44, + 0x65, 0x74, 0x61, 0x69, 0x6c, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, + 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0x9c, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, + 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x4f, 0x0a, + 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, + 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x9d, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x4f, 0x0a, 0x15, - 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0x9d, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x55, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, - 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x18, 0x9e, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x52, - 0x0a, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x18, 0x9f, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x17, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x16, 0x75, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, - 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x18, 0xb4, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, - 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x75, 0x73, - 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb5, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, - 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xa0, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x75, 0x73, 0x65, - 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, - 0x49, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x55, 0x0a, 0x17, 0x75, 0x73, - 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, - 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xa2, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x55, + 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x41, 0x64, 0x64, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4f, + 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x18, 0x9e, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, + 0x52, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x18, 0x9f, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x16, 0x75, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x4f, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x18, 0xb4, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, + 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x15, 0x75, + 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x12, 0x52, 0x0a, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb5, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, + 0x52, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x41, 0x64, 0x64, 0x56, 0x69, + 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xa0, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x75, 0x73, + 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x71, + 0x12, 0x49, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa1, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x55, 0x0a, 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, - 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, - 0x71, 0x12, 0x58, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa3, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, - 0x00, 0x52, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x18, 0x75, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x18, 0xa4, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, - 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x75, 0x73, 0x65, + 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xa2, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, + 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, + 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, + 0x65, 0x71, 0x12, 0x58, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa3, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x18, + 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x18, 0xa4, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x75, 0x73, + 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x18, 0xa5, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x18, 0xa5, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xa6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x49, 0x0a, 0x13, 0x75, 0x73, - 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, - 0x70, 0x18, 0xa7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, - 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, - 0x71, 0x18, 0xb2, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, - 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, 0x12, - 0x5b, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb3, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, - 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x48, - 0x00, 0x52, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, 0x16, - 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4a, - 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xb6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4a, - 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, - 0x12, 0x55, 0x0a, 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, - 0x6f, 0x72, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb7, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, - 0x6e, 0x6f, 0x72, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x17, - 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4a, - 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, - 0xb8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, - 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x4f, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb9, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, - 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xba, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x11, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, - 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0xbb, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, - 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, - 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x18, 0xea, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, - 0x4a, 0x6f, 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x75, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0xa6, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x13, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x49, 0x0a, 0x13, 0x75, + 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, + 0x73, 0x70, 0x18, 0xa7, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, + 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, 0x0a, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, + 0x65, 0x71, 0x18, 0xb2, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x71, + 0x12, 0x5b, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb3, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x56, 0x69, 0x65, 0x77, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x12, 0x52, 0x0a, + 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, + 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xb6, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, + 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x16, 0x75, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, + 0x71, 0x12, 0x55, 0x0a, 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, + 0x6e, 0x6f, 0x72, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0xb7, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, + 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, + 0x17, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, + 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, + 0x18, 0xb8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, + 0x52, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x4f, 0x0a, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, + 0xb9, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, + 0x52, 0x15, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x18, 0xba, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, + 0x69, 0x6e, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x75, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x18, 0xbb, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4a, 0x6f, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x58, + 0x0a, 0x18, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, + 0x6f, 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x18, 0xea, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x19, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, + 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x18, + 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, + 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xeb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, 0x6e, - 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x71, 0x12, 0x5b, 0x0a, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x18, 0xeb, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x55, 0x73, - 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x61, - 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x75, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, - 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0xa8, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x11, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa9, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, - 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x0c, 0x75, - 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x18, 0xbc, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x71, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x71, 0x12, 0x37, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, - 0x73, 0x70, 0x18, 0xbd, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x75, 0x73, 0x65, - 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x13, 0x75, 0x73, - 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, - 0x71, 0x18, 0xaa, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, - 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, - 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, - 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, - 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xab, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, - 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x14, 0x75, + 0x61, 0x62, 0x6c, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x19, 0x75, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x4a, 0x6f, 0x69, 0x6e, 0x61, 0x62, 0x6c, + 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, + 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0xa8, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x11, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xa9, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x47, + 0x72, 0x6f, 0x75, 0x70, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x34, 0x0a, 0x0c, + 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x71, 0x18, 0xbc, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x48, 0x00, 0x52, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x71, 0x12, 0x37, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, + 0x65, 0x73, 0x70, 0x18, 0xbd, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0d, 0x75, 0x73, + 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x52, 0x65, 0x73, 0x70, 0x12, 0x49, 0x0a, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x18, 0x8a, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x34, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, - 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x8b, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, 0x2e, - 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0c, - 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, - 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x18, 0x8e, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, + 0x65, 0x71, 0x18, 0xaa, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x55, 0x73, 0x65, 0x72, + 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x48, + 0x00, 0x52, 0x13, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, + 0x61, 0x6d, 0x65, 0x52, 0x65, 0x71, 0x12, 0x4c, 0x0a, 0x14, 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, + 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, 0xab, + 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x15, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, + 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x14, + 0x75, 0x73, 0x65, 0x72, 0x47, 0x72, 0x6f, 0x75, 0x70, 0x53, 0x65, 0x74, 0x4e, 0x61, 0x6d, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x31, 0x0a, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x18, 0x8a, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0c, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x34, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x4c, + 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x8b, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0d, + 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, + 0x0c, 0x75, 0x73, 0x65, 0x72, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, + 0x1b, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x18, 0x8e, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, + 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, + 0x71, 0x48, 0x00, 0x52, 0x1b, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, - 0x48, 0x00, 0x52, 0x1b, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x71, 0x12, - 0x64, 0x0a, 0x1c, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x18, - 0x8f, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x55, 0x70, 0x64, 0x18, 0x90, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x55, 0x73, + 0x12, 0x64, 0x0a, 0x1c, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x18, 0x8f, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x1c, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x52, 0x65, 0x73, 0x70, 0x12, 0x61, 0x0a, 0x1b, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, + 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, + 0x67, 0x73, 0x55, 0x70, 0x64, 0x18, 0x90, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x55, + 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x1b, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x55, 0x70, 0x64, 0x48, 0x00, 0x52, 0x1b, 0x75, 0x73, 0x65, + 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x55, 0x70, 0x64, 0x12, 0x70, 0x0a, 0x20, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, - 0x74, 0x69, 0x6e, 0x67, 0x73, 0x55, 0x70, 0x64, 0x12, 0x70, 0x0a, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, - 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x91, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, - 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x20, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x6f, + 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x91, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, + 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, + 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x20, 0x75, 0x73, 0x65, 0x72, 0x4e, + 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, + 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x73, 0x0a, 0x21, 0x75, + 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x18, 0x92, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, - 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x73, 0x0a, 0x21, 0x75, 0x73, - 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x18, - 0x92, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, - 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, - 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x21, 0x75, 0x73, - 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, - 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, - 0x3d, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x18, 0x94, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, 0x75, - 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, 0x40, - 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x18, 0x95, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x10, - 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, - 0x12, 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, - 0x74, 0x52, 0x65, 0x71, 0x18, 0x96, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, - 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, - 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x97, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, - 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, - 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, - 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x18, 0xde, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x0e, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x48, - 0x00, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, - 0x12, 0x3a, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, - 0x73, 0x70, 0x18, 0xdf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x55, 0x73, 0x65, 0x72, - 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0e, 0x75, 0x73, - 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, 0x10, - 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x18, 0xfe, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, - 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x77, 0x69, - 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x43, - 0x0a, 0x11, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x18, 0xff, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x57, 0x69, 0x64, - 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, - 0x52, 0x11, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, - 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x80, 0x02, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, - 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x49, 0x0a, 0x13, 0x77, - 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x18, 0x81, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x57, 0x69, 0x64, 0x67, - 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, - 0x00, 0x52, 0x13, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, - 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x0f, 0x7a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, - 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xf0, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x10, 0x2e, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, 0x7a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, 0x47, - 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x10, 0x7a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, - 0x4f, 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xf1, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x11, 0x2e, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x10, 0x7a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0a, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x74, 0x65, - 0x6e, 0x74, 0x73, 0x2a, 0x8e, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x53, 0x5f, 0x55, 0x4e, 0x44, - 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x53, 0x5f, 0x4f, - 0x4b, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, 0x4f, - 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x57, 0x53, 0x5f, 0x42, 0x41, 0x44, 0x5f, - 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x57, 0x53, 0x5f, - 0x4e, 0x4f, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x04, 0x12, - 0x13, 0x0a, 0x0f, 0x57, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x52, 0x52, - 0x4f, 0x52, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x57, 0x53, 0x5f, 0x54, 0x49, 0x4d, 0x45, 0x4f, - 0x55, 0x54, 0x10, 0x06, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x73, - 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x21, 0x75, + 0x73, 0x65, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, + 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x73, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x12, 0x3d, 0x0a, 0x0f, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x18, 0x94, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x10, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, + 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x12, + 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x18, 0x95, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, + 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x12, 0x40, 0x0a, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, + 0x73, 0x74, 0x52, 0x65, 0x71, 0x18, 0x96, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x55, + 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x48, + 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, + 0x52, 0x65, 0x71, 0x12, 0x43, 0x0a, 0x11, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0x97, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x12, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x11, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, + 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x37, 0x0a, 0x0d, 0x75, 0x73, 0x65, 0x72, + 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, 0x18, 0xde, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x0e, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x71, + 0x48, 0x00, 0x52, 0x0d, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, + 0x71, 0x12, 0x3a, 0x0a, 0x0e, 0x75, 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, + 0x65, 0x73, 0x70, 0x18, 0xdf, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0f, 0x2e, 0x55, 0x73, 0x65, + 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x0e, 0x75, + 0x73, 0x65, 0x72, 0x53, 0x65, 0x61, 0x72, 0x63, 0x68, 0x52, 0x65, 0x73, 0x70, 0x12, 0x40, 0x0a, + 0x10, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, + 0x71, 0x18, 0xfe, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x11, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, + 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x10, 0x77, + 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, + 0x43, 0x0a, 0x11, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x18, 0xff, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x12, 0x2e, 0x57, 0x69, + 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x48, + 0x00, 0x52, 0x11, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x12, 0x46, 0x0a, 0x12, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, + 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x18, 0x80, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x13, 0x2e, 0x57, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x12, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, + 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x12, 0x49, 0x0a, 0x13, + 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x18, 0x81, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x57, 0x69, 0x64, + 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x48, 0x00, 0x52, 0x13, 0x77, 0x69, 0x64, 0x67, 0x65, 0x74, 0x44, 0x61, 0x74, 0x61, 0x57, 0x72, + 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x12, 0x3d, 0x0a, 0x0f, 0x7a, 0x65, 0x6e, 0x6f, 0x64, + 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x18, 0xf0, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x10, 0x2e, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x71, 0x48, 0x00, 0x52, 0x0f, 0x7a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, + 0x47, 0x65, 0x74, 0x52, 0x65, 0x71, 0x12, 0x40, 0x0a, 0x10, 0x7a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, + 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x18, 0xf1, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x11, 0x2e, 0x5a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, 0x49, 0x47, 0x65, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x48, 0x00, 0x52, 0x10, 0x7a, 0x65, 0x6e, 0x6f, 0x64, 0x6f, 0x44, 0x4f, + 0x49, 0x47, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x42, 0x0a, 0x0a, 0x08, 0x43, 0x6f, 0x6e, 0x74, + 0x65, 0x6e, 0x74, 0x73, 0x2a, 0x8e, 0x01, 0x0a, 0x0e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x53, 0x5f, 0x55, 0x4e, + 0x44, 0x45, 0x46, 0x49, 0x4e, 0x45, 0x44, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x57, 0x53, 0x5f, + 0x4f, 0x4b, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x57, 0x53, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x46, + 0x4f, 0x55, 0x4e, 0x44, 0x10, 0x02, 0x12, 0x12, 0x0a, 0x0e, 0x57, 0x53, 0x5f, 0x42, 0x41, 0x44, + 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x03, 0x12, 0x14, 0x0a, 0x10, 0x57, 0x53, + 0x5f, 0x4e, 0x4f, 0x5f, 0x50, 0x45, 0x52, 0x4d, 0x49, 0x53, 0x53, 0x49, 0x4f, 0x4e, 0x10, 0x04, + 0x12, 0x13, 0x0a, 0x0f, 0x57, 0x53, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x45, 0x52, 0x5f, 0x45, 0x52, + 0x52, 0x4f, 0x52, 0x10, 0x05, 0x12, 0x0e, 0x0a, 0x0a, 0x57, 0x53, 0x5f, 0x54, 0x49, 0x4d, 0x45, + 0x4f, 0x55, 0x54, 0x10, 0x06, 0x42, 0x0a, 0x5a, 0x08, 0x2e, 0x3b, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -5491,95 +5530,97 @@ var file_websocket_proto_goTypes = []interface{}{ (*ScanMetaLabelsAndTypesResp)(nil), // 176: ScanMetaLabelsAndTypesResp (*ScanMetaWriteReq)(nil), // 177: ScanMetaWriteReq (*ScanMetaWriteResp)(nil), // 178: ScanMetaWriteResp - (*ScanTriggerReImportReq)(nil), // 179: ScanTriggerReImportReq - (*ScanTriggerReImportResp)(nil), // 180: ScanTriggerReImportResp - (*ScanTriggerReImportUpd)(nil), // 181: ScanTriggerReImportUpd - (*ScanUploadReq)(nil), // 182: ScanUploadReq - (*ScanUploadResp)(nil), // 183: ScanUploadResp - (*ScanUploadUpd)(nil), // 184: ScanUploadUpd - (*ScreenConfigurationDeleteReq)(nil), // 185: ScreenConfigurationDeleteReq - (*ScreenConfigurationDeleteResp)(nil), // 186: ScreenConfigurationDeleteResp - (*ScreenConfigurationGetReq)(nil), // 187: ScreenConfigurationGetReq - (*ScreenConfigurationGetResp)(nil), // 188: ScreenConfigurationGetResp - (*ScreenConfigurationListReq)(nil), // 189: ScreenConfigurationListReq - (*ScreenConfigurationListResp)(nil), // 190: ScreenConfigurationListResp - (*ScreenConfigurationWriteReq)(nil), // 191: ScreenConfigurationWriteReq - (*ScreenConfigurationWriteResp)(nil), // 192: ScreenConfigurationWriteResp - (*SelectedImagePixelsReq)(nil), // 193: SelectedImagePixelsReq - (*SelectedImagePixelsResp)(nil), // 194: SelectedImagePixelsResp - (*SelectedImagePixelsWriteReq)(nil), // 195: SelectedImagePixelsWriteReq - (*SelectedImagePixelsWriteResp)(nil), // 196: SelectedImagePixelsWriteResp - (*SelectedScanEntriesReq)(nil), // 197: SelectedScanEntriesReq - (*SelectedScanEntriesResp)(nil), // 198: SelectedScanEntriesResp - (*SelectedScanEntriesWriteReq)(nil), // 199: SelectedScanEntriesWriteReq - (*SelectedScanEntriesWriteResp)(nil), // 200: SelectedScanEntriesWriteResp - (*SendUserNotificationReq)(nil), // 201: SendUserNotificationReq - (*SendUserNotificationResp)(nil), // 202: SendUserNotificationResp - (*SpectrumReq)(nil), // 203: SpectrumReq - (*SpectrumResp)(nil), // 204: SpectrumResp - (*TagCreateReq)(nil), // 205: TagCreateReq - (*TagCreateResp)(nil), // 206: TagCreateResp - (*TagDeleteReq)(nil), // 207: TagDeleteReq - (*TagDeleteResp)(nil), // 208: TagDeleteResp - (*TagListReq)(nil), // 209: TagListReq - (*TagListResp)(nil), // 210: TagListResp - (*UserAddRoleReq)(nil), // 211: UserAddRoleReq - (*UserAddRoleResp)(nil), // 212: UserAddRoleResp - (*UserDeleteRoleReq)(nil), // 213: UserDeleteRoleReq - (*UserDeleteRoleResp)(nil), // 214: UserDeleteRoleResp - (*UserDetailsReq)(nil), // 215: UserDetailsReq - (*UserDetailsResp)(nil), // 216: UserDetailsResp - (*UserDetailsWriteReq)(nil), // 217: UserDetailsWriteReq - (*UserDetailsWriteResp)(nil), // 218: UserDetailsWriteResp - (*UserGroupAddAdminReq)(nil), // 219: UserGroupAddAdminReq - (*UserGroupAddAdminResp)(nil), // 220: UserGroupAddAdminResp - (*UserGroupAddMemberReq)(nil), // 221: UserGroupAddMemberReq - (*UserGroupAddMemberResp)(nil), // 222: UserGroupAddMemberResp - (*UserGroupAddViewerReq)(nil), // 223: UserGroupAddViewerReq - (*UserGroupAddViewerResp)(nil), // 224: UserGroupAddViewerResp - (*UserGroupCreateReq)(nil), // 225: UserGroupCreateReq - (*UserGroupCreateResp)(nil), // 226: UserGroupCreateResp - (*UserGroupDeleteAdminReq)(nil), // 227: UserGroupDeleteAdminReq - (*UserGroupDeleteAdminResp)(nil), // 228: UserGroupDeleteAdminResp - (*UserGroupDeleteMemberReq)(nil), // 229: UserGroupDeleteMemberReq - (*UserGroupDeleteMemberResp)(nil), // 230: UserGroupDeleteMemberResp - (*UserGroupDeleteReq)(nil), // 231: UserGroupDeleteReq - (*UserGroupDeleteResp)(nil), // 232: UserGroupDeleteResp - (*UserGroupDeleteViewerReq)(nil), // 233: UserGroupDeleteViewerReq - (*UserGroupDeleteViewerResp)(nil), // 234: UserGroupDeleteViewerResp - (*UserGroupIgnoreJoinReq)(nil), // 235: UserGroupIgnoreJoinReq - (*UserGroupIgnoreJoinResp)(nil), // 236: UserGroupIgnoreJoinResp - (*UserGroupJoinListReq)(nil), // 237: UserGroupJoinListReq - (*UserGroupJoinListResp)(nil), // 238: UserGroupJoinListResp - (*UserGroupJoinReq)(nil), // 239: UserGroupJoinReq - (*UserGroupJoinResp)(nil), // 240: UserGroupJoinResp - (*UserGroupListJoinableReq)(nil), // 241: UserGroupListJoinableReq - (*UserGroupListJoinableResp)(nil), // 242: UserGroupListJoinableResp - (*UserGroupListReq)(nil), // 243: UserGroupListReq - (*UserGroupListResp)(nil), // 244: UserGroupListResp - (*UserGroupReq)(nil), // 245: UserGroupReq - (*UserGroupResp)(nil), // 246: UserGroupResp - (*UserGroupSetNameReq)(nil), // 247: UserGroupSetNameReq - (*UserGroupSetNameResp)(nil), // 248: UserGroupSetNameResp - (*UserListReq)(nil), // 249: UserListReq - (*UserListResp)(nil), // 250: UserListResp - (*UserNotificationSettingsReq)(nil), // 251: UserNotificationSettingsReq - (*UserNotificationSettingsResp)(nil), // 252: UserNotificationSettingsResp - (*UserNotificationSettingsUpd)(nil), // 253: UserNotificationSettingsUpd - (*UserNotificationSettingsWriteReq)(nil), // 254: UserNotificationSettingsWriteReq - (*UserNotificationSettingsWriteResp)(nil), // 255: UserNotificationSettingsWriteResp - (*UserRoleListReq)(nil), // 256: UserRoleListReq - (*UserRoleListResp)(nil), // 257: UserRoleListResp - (*UserRolesListReq)(nil), // 258: UserRolesListReq - (*UserRolesListResp)(nil), // 259: UserRolesListResp - (*UserSearchReq)(nil), // 260: UserSearchReq - (*UserSearchResp)(nil), // 261: UserSearchResp - (*WidgetDataGetReq)(nil), // 262: WidgetDataGetReq - (*WidgetDataGetResp)(nil), // 263: WidgetDataGetResp - (*WidgetDataWriteReq)(nil), // 264: WidgetDataWriteReq - (*WidgetDataWriteResp)(nil), // 265: WidgetDataWriteResp - (*ZenodoDOIGetReq)(nil), // 266: ZenodoDOIGetReq - (*ZenodoDOIGetResp)(nil), // 267: ZenodoDOIGetResp + (*ScanTriggerAutoQuantReq)(nil), // 179: ScanTriggerAutoQuantReq + (*ScanTriggerAutoQuantResp)(nil), // 180: ScanTriggerAutoQuantResp + (*ScanTriggerReImportReq)(nil), // 181: ScanTriggerReImportReq + (*ScanTriggerReImportResp)(nil), // 182: ScanTriggerReImportResp + (*ScanTriggerReImportUpd)(nil), // 183: ScanTriggerReImportUpd + (*ScanUploadReq)(nil), // 184: ScanUploadReq + (*ScanUploadResp)(nil), // 185: ScanUploadResp + (*ScanUploadUpd)(nil), // 186: ScanUploadUpd + (*ScreenConfigurationDeleteReq)(nil), // 187: ScreenConfigurationDeleteReq + (*ScreenConfigurationDeleteResp)(nil), // 188: ScreenConfigurationDeleteResp + (*ScreenConfigurationGetReq)(nil), // 189: ScreenConfigurationGetReq + (*ScreenConfigurationGetResp)(nil), // 190: ScreenConfigurationGetResp + (*ScreenConfigurationListReq)(nil), // 191: ScreenConfigurationListReq + (*ScreenConfigurationListResp)(nil), // 192: ScreenConfigurationListResp + (*ScreenConfigurationWriteReq)(nil), // 193: ScreenConfigurationWriteReq + (*ScreenConfigurationWriteResp)(nil), // 194: ScreenConfigurationWriteResp + (*SelectedImagePixelsReq)(nil), // 195: SelectedImagePixelsReq + (*SelectedImagePixelsResp)(nil), // 196: SelectedImagePixelsResp + (*SelectedImagePixelsWriteReq)(nil), // 197: SelectedImagePixelsWriteReq + (*SelectedImagePixelsWriteResp)(nil), // 198: SelectedImagePixelsWriteResp + (*SelectedScanEntriesReq)(nil), // 199: SelectedScanEntriesReq + (*SelectedScanEntriesResp)(nil), // 200: SelectedScanEntriesResp + (*SelectedScanEntriesWriteReq)(nil), // 201: SelectedScanEntriesWriteReq + (*SelectedScanEntriesWriteResp)(nil), // 202: SelectedScanEntriesWriteResp + (*SendUserNotificationReq)(nil), // 203: SendUserNotificationReq + (*SendUserNotificationResp)(nil), // 204: SendUserNotificationResp + (*SpectrumReq)(nil), // 205: SpectrumReq + (*SpectrumResp)(nil), // 206: SpectrumResp + (*TagCreateReq)(nil), // 207: TagCreateReq + (*TagCreateResp)(nil), // 208: TagCreateResp + (*TagDeleteReq)(nil), // 209: TagDeleteReq + (*TagDeleteResp)(nil), // 210: TagDeleteResp + (*TagListReq)(nil), // 211: TagListReq + (*TagListResp)(nil), // 212: TagListResp + (*UserAddRoleReq)(nil), // 213: UserAddRoleReq + (*UserAddRoleResp)(nil), // 214: UserAddRoleResp + (*UserDeleteRoleReq)(nil), // 215: UserDeleteRoleReq + (*UserDeleteRoleResp)(nil), // 216: UserDeleteRoleResp + (*UserDetailsReq)(nil), // 217: UserDetailsReq + (*UserDetailsResp)(nil), // 218: UserDetailsResp + (*UserDetailsWriteReq)(nil), // 219: UserDetailsWriteReq + (*UserDetailsWriteResp)(nil), // 220: UserDetailsWriteResp + (*UserGroupAddAdminReq)(nil), // 221: UserGroupAddAdminReq + (*UserGroupAddAdminResp)(nil), // 222: UserGroupAddAdminResp + (*UserGroupAddMemberReq)(nil), // 223: UserGroupAddMemberReq + (*UserGroupAddMemberResp)(nil), // 224: UserGroupAddMemberResp + (*UserGroupAddViewerReq)(nil), // 225: UserGroupAddViewerReq + (*UserGroupAddViewerResp)(nil), // 226: UserGroupAddViewerResp + (*UserGroupCreateReq)(nil), // 227: UserGroupCreateReq + (*UserGroupCreateResp)(nil), // 228: UserGroupCreateResp + (*UserGroupDeleteAdminReq)(nil), // 229: UserGroupDeleteAdminReq + (*UserGroupDeleteAdminResp)(nil), // 230: UserGroupDeleteAdminResp + (*UserGroupDeleteMemberReq)(nil), // 231: UserGroupDeleteMemberReq + (*UserGroupDeleteMemberResp)(nil), // 232: UserGroupDeleteMemberResp + (*UserGroupDeleteReq)(nil), // 233: UserGroupDeleteReq + (*UserGroupDeleteResp)(nil), // 234: UserGroupDeleteResp + (*UserGroupDeleteViewerReq)(nil), // 235: UserGroupDeleteViewerReq + (*UserGroupDeleteViewerResp)(nil), // 236: UserGroupDeleteViewerResp + (*UserGroupIgnoreJoinReq)(nil), // 237: UserGroupIgnoreJoinReq + (*UserGroupIgnoreJoinResp)(nil), // 238: UserGroupIgnoreJoinResp + (*UserGroupJoinListReq)(nil), // 239: UserGroupJoinListReq + (*UserGroupJoinListResp)(nil), // 240: UserGroupJoinListResp + (*UserGroupJoinReq)(nil), // 241: UserGroupJoinReq + (*UserGroupJoinResp)(nil), // 242: UserGroupJoinResp + (*UserGroupListJoinableReq)(nil), // 243: UserGroupListJoinableReq + (*UserGroupListJoinableResp)(nil), // 244: UserGroupListJoinableResp + (*UserGroupListReq)(nil), // 245: UserGroupListReq + (*UserGroupListResp)(nil), // 246: UserGroupListResp + (*UserGroupReq)(nil), // 247: UserGroupReq + (*UserGroupResp)(nil), // 248: UserGroupResp + (*UserGroupSetNameReq)(nil), // 249: UserGroupSetNameReq + (*UserGroupSetNameResp)(nil), // 250: UserGroupSetNameResp + (*UserListReq)(nil), // 251: UserListReq + (*UserListResp)(nil), // 252: UserListResp + (*UserNotificationSettingsReq)(nil), // 253: UserNotificationSettingsReq + (*UserNotificationSettingsResp)(nil), // 254: UserNotificationSettingsResp + (*UserNotificationSettingsUpd)(nil), // 255: UserNotificationSettingsUpd + (*UserNotificationSettingsWriteReq)(nil), // 256: UserNotificationSettingsWriteReq + (*UserNotificationSettingsWriteResp)(nil), // 257: UserNotificationSettingsWriteResp + (*UserRoleListReq)(nil), // 258: UserRoleListReq + (*UserRoleListResp)(nil), // 259: UserRoleListResp + (*UserRolesListReq)(nil), // 260: UserRolesListReq + (*UserRolesListResp)(nil), // 261: UserRolesListResp + (*UserSearchReq)(nil), // 262: UserSearchReq + (*UserSearchResp)(nil), // 263: UserSearchResp + (*WidgetDataGetReq)(nil), // 264: WidgetDataGetReq + (*WidgetDataGetResp)(nil), // 265: WidgetDataGetResp + (*WidgetDataWriteReq)(nil), // 266: WidgetDataWriteReq + (*WidgetDataWriteResp)(nil), // 267: WidgetDataWriteResp + (*ZenodoDOIGetReq)(nil), // 268: ZenodoDOIGetReq + (*ZenodoDOIGetResp)(nil), // 269: ZenodoDOIGetResp } var file_websocket_proto_depIdxs = []int32{ 0, // 0: WSMessage.status:type_name -> ResponseStatus @@ -5760,100 +5801,102 @@ var file_websocket_proto_depIdxs = []int32{ 176, // 175: WSMessage.scanMetaLabelsAndTypesResp:type_name -> ScanMetaLabelsAndTypesResp 177, // 176: WSMessage.scanMetaWriteReq:type_name -> ScanMetaWriteReq 178, // 177: WSMessage.scanMetaWriteResp:type_name -> ScanMetaWriteResp - 179, // 178: WSMessage.scanTriggerReImportReq:type_name -> ScanTriggerReImportReq - 180, // 179: WSMessage.scanTriggerReImportResp:type_name -> ScanTriggerReImportResp - 181, // 180: WSMessage.scanTriggerReImportUpd:type_name -> ScanTriggerReImportUpd - 182, // 181: WSMessage.scanUploadReq:type_name -> ScanUploadReq - 183, // 182: WSMessage.scanUploadResp:type_name -> ScanUploadResp - 184, // 183: WSMessage.scanUploadUpd:type_name -> ScanUploadUpd - 185, // 184: WSMessage.screenConfigurationDeleteReq:type_name -> ScreenConfigurationDeleteReq - 186, // 185: WSMessage.screenConfigurationDeleteResp:type_name -> ScreenConfigurationDeleteResp - 187, // 186: WSMessage.screenConfigurationGetReq:type_name -> ScreenConfigurationGetReq - 188, // 187: WSMessage.screenConfigurationGetResp:type_name -> ScreenConfigurationGetResp - 189, // 188: WSMessage.screenConfigurationListReq:type_name -> ScreenConfigurationListReq - 190, // 189: WSMessage.screenConfigurationListResp:type_name -> ScreenConfigurationListResp - 191, // 190: WSMessage.screenConfigurationWriteReq:type_name -> ScreenConfigurationWriteReq - 192, // 191: WSMessage.screenConfigurationWriteResp:type_name -> ScreenConfigurationWriteResp - 193, // 192: WSMessage.selectedImagePixelsReq:type_name -> SelectedImagePixelsReq - 194, // 193: WSMessage.selectedImagePixelsResp:type_name -> SelectedImagePixelsResp - 195, // 194: WSMessage.selectedImagePixelsWriteReq:type_name -> SelectedImagePixelsWriteReq - 196, // 195: WSMessage.selectedImagePixelsWriteResp:type_name -> SelectedImagePixelsWriteResp - 197, // 196: WSMessage.selectedScanEntriesReq:type_name -> SelectedScanEntriesReq - 198, // 197: WSMessage.selectedScanEntriesResp:type_name -> SelectedScanEntriesResp - 199, // 198: WSMessage.selectedScanEntriesWriteReq:type_name -> SelectedScanEntriesWriteReq - 200, // 199: WSMessage.selectedScanEntriesWriteResp:type_name -> SelectedScanEntriesWriteResp - 201, // 200: WSMessage.sendUserNotificationReq:type_name -> SendUserNotificationReq - 202, // 201: WSMessage.sendUserNotificationResp:type_name -> SendUserNotificationResp - 203, // 202: WSMessage.spectrumReq:type_name -> SpectrumReq - 204, // 203: WSMessage.spectrumResp:type_name -> SpectrumResp - 205, // 204: WSMessage.tagCreateReq:type_name -> TagCreateReq - 206, // 205: WSMessage.tagCreateResp:type_name -> TagCreateResp - 207, // 206: WSMessage.tagDeleteReq:type_name -> TagDeleteReq - 208, // 207: WSMessage.tagDeleteResp:type_name -> TagDeleteResp - 209, // 208: WSMessage.tagListReq:type_name -> TagListReq - 210, // 209: WSMessage.tagListResp:type_name -> TagListResp - 211, // 210: WSMessage.userAddRoleReq:type_name -> UserAddRoleReq - 212, // 211: WSMessage.userAddRoleResp:type_name -> UserAddRoleResp - 213, // 212: WSMessage.userDeleteRoleReq:type_name -> UserDeleteRoleReq - 214, // 213: WSMessage.userDeleteRoleResp:type_name -> UserDeleteRoleResp - 215, // 214: WSMessage.userDetailsReq:type_name -> UserDetailsReq - 216, // 215: WSMessage.userDetailsResp:type_name -> UserDetailsResp - 217, // 216: WSMessage.userDetailsWriteReq:type_name -> UserDetailsWriteReq - 218, // 217: WSMessage.userDetailsWriteResp:type_name -> UserDetailsWriteResp - 219, // 218: WSMessage.userGroupAddAdminReq:type_name -> UserGroupAddAdminReq - 220, // 219: WSMessage.userGroupAddAdminResp:type_name -> UserGroupAddAdminResp - 221, // 220: WSMessage.userGroupAddMemberReq:type_name -> UserGroupAddMemberReq - 222, // 221: WSMessage.userGroupAddMemberResp:type_name -> UserGroupAddMemberResp - 223, // 222: WSMessage.userGroupAddViewerReq:type_name -> UserGroupAddViewerReq - 224, // 223: WSMessage.userGroupAddViewerResp:type_name -> UserGroupAddViewerResp - 225, // 224: WSMessage.userGroupCreateReq:type_name -> UserGroupCreateReq - 226, // 225: WSMessage.userGroupCreateResp:type_name -> UserGroupCreateResp - 227, // 226: WSMessage.userGroupDeleteAdminReq:type_name -> UserGroupDeleteAdminReq - 228, // 227: WSMessage.userGroupDeleteAdminResp:type_name -> UserGroupDeleteAdminResp - 229, // 228: WSMessage.userGroupDeleteMemberReq:type_name -> UserGroupDeleteMemberReq - 230, // 229: WSMessage.userGroupDeleteMemberResp:type_name -> UserGroupDeleteMemberResp - 231, // 230: WSMessage.userGroupDeleteReq:type_name -> UserGroupDeleteReq - 232, // 231: WSMessage.userGroupDeleteResp:type_name -> UserGroupDeleteResp - 233, // 232: WSMessage.userGroupDeleteViewerReq:type_name -> UserGroupDeleteViewerReq - 234, // 233: WSMessage.userGroupDeleteViewerResp:type_name -> UserGroupDeleteViewerResp - 235, // 234: WSMessage.userGroupIgnoreJoinReq:type_name -> UserGroupIgnoreJoinReq - 236, // 235: WSMessage.userGroupIgnoreJoinResp:type_name -> UserGroupIgnoreJoinResp - 237, // 236: WSMessage.userGroupJoinListReq:type_name -> UserGroupJoinListReq - 238, // 237: WSMessage.userGroupJoinListResp:type_name -> UserGroupJoinListResp - 239, // 238: WSMessage.userGroupJoinReq:type_name -> UserGroupJoinReq - 240, // 239: WSMessage.userGroupJoinResp:type_name -> UserGroupJoinResp - 241, // 240: WSMessage.userGroupListJoinableReq:type_name -> UserGroupListJoinableReq - 242, // 241: WSMessage.userGroupListJoinableResp:type_name -> UserGroupListJoinableResp - 243, // 242: WSMessage.userGroupListReq:type_name -> UserGroupListReq - 244, // 243: WSMessage.userGroupListResp:type_name -> UserGroupListResp - 245, // 244: WSMessage.userGroupReq:type_name -> UserGroupReq - 246, // 245: WSMessage.userGroupResp:type_name -> UserGroupResp - 247, // 246: WSMessage.userGroupSetNameReq:type_name -> UserGroupSetNameReq - 248, // 247: WSMessage.userGroupSetNameResp:type_name -> UserGroupSetNameResp - 249, // 248: WSMessage.userListReq:type_name -> UserListReq - 250, // 249: WSMessage.userListResp:type_name -> UserListResp - 251, // 250: WSMessage.userNotificationSettingsReq:type_name -> UserNotificationSettingsReq - 252, // 251: WSMessage.userNotificationSettingsResp:type_name -> UserNotificationSettingsResp - 253, // 252: WSMessage.userNotificationSettingsUpd:type_name -> UserNotificationSettingsUpd - 254, // 253: WSMessage.userNotificationSettingsWriteReq:type_name -> UserNotificationSettingsWriteReq - 255, // 254: WSMessage.userNotificationSettingsWriteResp:type_name -> UserNotificationSettingsWriteResp - 256, // 255: WSMessage.userRoleListReq:type_name -> UserRoleListReq - 257, // 256: WSMessage.userRoleListResp:type_name -> UserRoleListResp - 258, // 257: WSMessage.userRolesListReq:type_name -> UserRolesListReq - 259, // 258: WSMessage.userRolesListResp:type_name -> UserRolesListResp - 260, // 259: WSMessage.userSearchReq:type_name -> UserSearchReq - 261, // 260: WSMessage.userSearchResp:type_name -> UserSearchResp - 262, // 261: WSMessage.widgetDataGetReq:type_name -> WidgetDataGetReq - 263, // 262: WSMessage.widgetDataGetResp:type_name -> WidgetDataGetResp - 264, // 263: WSMessage.widgetDataWriteReq:type_name -> WidgetDataWriteReq - 265, // 264: WSMessage.widgetDataWriteResp:type_name -> WidgetDataWriteResp - 266, // 265: WSMessage.zenodoDOIGetReq:type_name -> ZenodoDOIGetReq - 267, // 266: WSMessage.zenodoDOIGetResp:type_name -> ZenodoDOIGetResp - 267, // [267:267] is the sub-list for method output_type - 267, // [267:267] is the sub-list for method input_type - 267, // [267:267] is the sub-list for extension type_name - 267, // [267:267] is the sub-list for extension extendee - 0, // [0:267] is the sub-list for field type_name + 179, // 178: WSMessage.scanTriggerAutoQuantReq:type_name -> ScanTriggerAutoQuantReq + 180, // 179: WSMessage.scanTriggerAutoQuantResp:type_name -> ScanTriggerAutoQuantResp + 181, // 180: WSMessage.scanTriggerReImportReq:type_name -> ScanTriggerReImportReq + 182, // 181: WSMessage.scanTriggerReImportResp:type_name -> ScanTriggerReImportResp + 183, // 182: WSMessage.scanTriggerReImportUpd:type_name -> ScanTriggerReImportUpd + 184, // 183: WSMessage.scanUploadReq:type_name -> ScanUploadReq + 185, // 184: WSMessage.scanUploadResp:type_name -> ScanUploadResp + 186, // 185: WSMessage.scanUploadUpd:type_name -> ScanUploadUpd + 187, // 186: WSMessage.screenConfigurationDeleteReq:type_name -> ScreenConfigurationDeleteReq + 188, // 187: WSMessage.screenConfigurationDeleteResp:type_name -> ScreenConfigurationDeleteResp + 189, // 188: WSMessage.screenConfigurationGetReq:type_name -> ScreenConfigurationGetReq + 190, // 189: WSMessage.screenConfigurationGetResp:type_name -> ScreenConfigurationGetResp + 191, // 190: WSMessage.screenConfigurationListReq:type_name -> ScreenConfigurationListReq + 192, // 191: WSMessage.screenConfigurationListResp:type_name -> ScreenConfigurationListResp + 193, // 192: WSMessage.screenConfigurationWriteReq:type_name -> ScreenConfigurationWriteReq + 194, // 193: WSMessage.screenConfigurationWriteResp:type_name -> ScreenConfigurationWriteResp + 195, // 194: WSMessage.selectedImagePixelsReq:type_name -> SelectedImagePixelsReq + 196, // 195: WSMessage.selectedImagePixelsResp:type_name -> SelectedImagePixelsResp + 197, // 196: WSMessage.selectedImagePixelsWriteReq:type_name -> SelectedImagePixelsWriteReq + 198, // 197: WSMessage.selectedImagePixelsWriteResp:type_name -> SelectedImagePixelsWriteResp + 199, // 198: WSMessage.selectedScanEntriesReq:type_name -> SelectedScanEntriesReq + 200, // 199: WSMessage.selectedScanEntriesResp:type_name -> SelectedScanEntriesResp + 201, // 200: WSMessage.selectedScanEntriesWriteReq:type_name -> SelectedScanEntriesWriteReq + 202, // 201: WSMessage.selectedScanEntriesWriteResp:type_name -> SelectedScanEntriesWriteResp + 203, // 202: WSMessage.sendUserNotificationReq:type_name -> SendUserNotificationReq + 204, // 203: WSMessage.sendUserNotificationResp:type_name -> SendUserNotificationResp + 205, // 204: WSMessage.spectrumReq:type_name -> SpectrumReq + 206, // 205: WSMessage.spectrumResp:type_name -> SpectrumResp + 207, // 206: WSMessage.tagCreateReq:type_name -> TagCreateReq + 208, // 207: WSMessage.tagCreateResp:type_name -> TagCreateResp + 209, // 208: WSMessage.tagDeleteReq:type_name -> TagDeleteReq + 210, // 209: WSMessage.tagDeleteResp:type_name -> TagDeleteResp + 211, // 210: WSMessage.tagListReq:type_name -> TagListReq + 212, // 211: WSMessage.tagListResp:type_name -> TagListResp + 213, // 212: WSMessage.userAddRoleReq:type_name -> UserAddRoleReq + 214, // 213: WSMessage.userAddRoleResp:type_name -> UserAddRoleResp + 215, // 214: WSMessage.userDeleteRoleReq:type_name -> UserDeleteRoleReq + 216, // 215: WSMessage.userDeleteRoleResp:type_name -> UserDeleteRoleResp + 217, // 216: WSMessage.userDetailsReq:type_name -> UserDetailsReq + 218, // 217: WSMessage.userDetailsResp:type_name -> UserDetailsResp + 219, // 218: WSMessage.userDetailsWriteReq:type_name -> UserDetailsWriteReq + 220, // 219: WSMessage.userDetailsWriteResp:type_name -> UserDetailsWriteResp + 221, // 220: WSMessage.userGroupAddAdminReq:type_name -> UserGroupAddAdminReq + 222, // 221: WSMessage.userGroupAddAdminResp:type_name -> UserGroupAddAdminResp + 223, // 222: WSMessage.userGroupAddMemberReq:type_name -> UserGroupAddMemberReq + 224, // 223: WSMessage.userGroupAddMemberResp:type_name -> UserGroupAddMemberResp + 225, // 224: WSMessage.userGroupAddViewerReq:type_name -> UserGroupAddViewerReq + 226, // 225: WSMessage.userGroupAddViewerResp:type_name -> UserGroupAddViewerResp + 227, // 226: WSMessage.userGroupCreateReq:type_name -> UserGroupCreateReq + 228, // 227: WSMessage.userGroupCreateResp:type_name -> UserGroupCreateResp + 229, // 228: WSMessage.userGroupDeleteAdminReq:type_name -> UserGroupDeleteAdminReq + 230, // 229: WSMessage.userGroupDeleteAdminResp:type_name -> UserGroupDeleteAdminResp + 231, // 230: WSMessage.userGroupDeleteMemberReq:type_name -> UserGroupDeleteMemberReq + 232, // 231: WSMessage.userGroupDeleteMemberResp:type_name -> UserGroupDeleteMemberResp + 233, // 232: WSMessage.userGroupDeleteReq:type_name -> UserGroupDeleteReq + 234, // 233: WSMessage.userGroupDeleteResp:type_name -> UserGroupDeleteResp + 235, // 234: WSMessage.userGroupDeleteViewerReq:type_name -> UserGroupDeleteViewerReq + 236, // 235: WSMessage.userGroupDeleteViewerResp:type_name -> UserGroupDeleteViewerResp + 237, // 236: WSMessage.userGroupIgnoreJoinReq:type_name -> UserGroupIgnoreJoinReq + 238, // 237: WSMessage.userGroupIgnoreJoinResp:type_name -> UserGroupIgnoreJoinResp + 239, // 238: WSMessage.userGroupJoinListReq:type_name -> UserGroupJoinListReq + 240, // 239: WSMessage.userGroupJoinListResp:type_name -> UserGroupJoinListResp + 241, // 240: WSMessage.userGroupJoinReq:type_name -> UserGroupJoinReq + 242, // 241: WSMessage.userGroupJoinResp:type_name -> UserGroupJoinResp + 243, // 242: WSMessage.userGroupListJoinableReq:type_name -> UserGroupListJoinableReq + 244, // 243: WSMessage.userGroupListJoinableResp:type_name -> UserGroupListJoinableResp + 245, // 244: WSMessage.userGroupListReq:type_name -> UserGroupListReq + 246, // 245: WSMessage.userGroupListResp:type_name -> UserGroupListResp + 247, // 246: WSMessage.userGroupReq:type_name -> UserGroupReq + 248, // 247: WSMessage.userGroupResp:type_name -> UserGroupResp + 249, // 248: WSMessage.userGroupSetNameReq:type_name -> UserGroupSetNameReq + 250, // 249: WSMessage.userGroupSetNameResp:type_name -> UserGroupSetNameResp + 251, // 250: WSMessage.userListReq:type_name -> UserListReq + 252, // 251: WSMessage.userListResp:type_name -> UserListResp + 253, // 252: WSMessage.userNotificationSettingsReq:type_name -> UserNotificationSettingsReq + 254, // 253: WSMessage.userNotificationSettingsResp:type_name -> UserNotificationSettingsResp + 255, // 254: WSMessage.userNotificationSettingsUpd:type_name -> UserNotificationSettingsUpd + 256, // 255: WSMessage.userNotificationSettingsWriteReq:type_name -> UserNotificationSettingsWriteReq + 257, // 256: WSMessage.userNotificationSettingsWriteResp:type_name -> UserNotificationSettingsWriteResp + 258, // 257: WSMessage.userRoleListReq:type_name -> UserRoleListReq + 259, // 258: WSMessage.userRoleListResp:type_name -> UserRoleListResp + 260, // 259: WSMessage.userRolesListReq:type_name -> UserRolesListReq + 261, // 260: WSMessage.userRolesListResp:type_name -> UserRolesListResp + 262, // 261: WSMessage.userSearchReq:type_name -> UserSearchReq + 263, // 262: WSMessage.userSearchResp:type_name -> UserSearchResp + 264, // 263: WSMessage.widgetDataGetReq:type_name -> WidgetDataGetReq + 265, // 264: WSMessage.widgetDataGetResp:type_name -> WidgetDataGetResp + 266, // 265: WSMessage.widgetDataWriteReq:type_name -> WidgetDataWriteReq + 267, // 266: WSMessage.widgetDataWriteResp:type_name -> WidgetDataWriteResp + 268, // 267: WSMessage.zenodoDOIGetReq:type_name -> ZenodoDOIGetReq + 269, // 268: WSMessage.zenodoDOIGetResp:type_name -> ZenodoDOIGetResp + 269, // [269:269] is the sub-list for method output_type + 269, // [269:269] is the sub-list for method input_type + 269, // [269:269] is the sub-list for extension type_name + 269, // [269:269] is the sub-list for extension extendee + 0, // [0:269] is the sub-list for field type_name } func init() { file_websocket_proto_init() } @@ -6097,6 +6140,8 @@ func file_websocket_proto_init() { (*WSMessage_ScanMetaLabelsAndTypesResp)(nil), (*WSMessage_ScanMetaWriteReq)(nil), (*WSMessage_ScanMetaWriteResp)(nil), + (*WSMessage_ScanTriggerAutoQuantReq)(nil), + (*WSMessage_ScanTriggerAutoQuantResp)(nil), (*WSMessage_ScanTriggerReImportReq)(nil), (*WSMessage_ScanTriggerReImportResp)(nil), (*WSMessage_ScanTriggerReImportUpd)(nil), diff --git a/generated-protos/widget-data-msgs.pb.go b/generated-protos/widget-data-msgs.pb.go index cc100e37..8438a1a9 100644 --- a/generated-protos/widget-data-msgs.pb.go +++ b/generated-protos/widget-data-msgs.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: widget-data-msgs.proto package protos diff --git a/generated-protos/widget-data.pb.go b/generated-protos/widget-data.pb.go index 9bd51867..6aa7a0f3 100644 --- a/generated-protos/widget-data.pb.go +++ b/generated-protos/widget-data.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.28.1 -// protoc v3.20.3 +// protoc-gen-go v1.30.0 +// protoc v3.19.4 // source: widget-data.proto package protos From 8678c82e24f01dc35b3b409d05bd7a07ee997ecf Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Fri, 24 May 2024 10:22:53 +1000 Subject: [PATCH 13/17] Use latest data formats to include new msg ids --- data-formats | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data-formats b/data-formats index 6daaa5c6..60f8fc25 160000 --- a/data-formats +++ b/data-formats @@ -1 +1 @@ -Subproject commit 6daaa5c688651c5aa7833a98b63c1a41b1f2c053 +Subproject commit 60f8fc2582eb239323ea0745f6c61fea392711a9 From b358a2067082ac7781ca000224bf776fa06f0c8d Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Fri, 24 May 2024 11:26:27 +1000 Subject: [PATCH 14/17] Fixing auto quant detector, making test fail error more specific --- api/quantification/autoQuantification.go | 2 +- internal/cmd-line-tools/api-integration-test/testScanData.go | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/quantification/autoQuantification.go b/api/quantification/autoQuantification.go index 5fadaedb..a8d534b0 100644 --- a/api/quantification/autoQuantification.go +++ b/api/quantification/autoQuantification.go @@ -29,7 +29,7 @@ func RunAutoQuantifications(scanId string, svcs *services.APIServices) { []string{"Na2O", "MgO", "Al2O3", "SiO2", "P2O5", "SO3", "Cl", "K2O", "CaO", "TiO2", "Cr2O3", "MnO", "FeO-T", "NiO", "ZnO", "Br"}, []string{"Na2O", "MgO", "Al2O3", "SiO2", "P2O5", "SO3", "Cl", "K2O", "CaO", "TiO2", "Cr2O3", "MnO", "FeO-T", "NiO", "ZnO", "GeO", "Br", "Rb2O", "SrO", "Y2O3", "ZrO2"}, } - detector := "PIXL/v7" + detector := "PIXL/PiquantConfigs/v7" allNames := []string{} for _, name := range quantNames { diff --git a/internal/cmd-line-tools/api-integration-test/testScanData.go b/internal/cmd-line-tools/api-integration-test/testScanData.go index cbdca51f..3b865043 100644 --- a/internal/cmd-line-tools/api-integration-test/testScanData.go +++ b/internal/cmd-line-tools/api-integration-test/testScanData.go @@ -1593,7 +1593,7 @@ func testScanDataHasPermission(apiHost string, actionMsg string, editAllowed boo // Check that the file was created exists, err := apiStorageFileAccess.ObjectExists(apiDatasetBucket, "Image-Cache/048300551/PCW_0125_0678031992_000RCM_N00417120483005510091075J02-width200.png") failIf(err != nil, fmt.Errorf("Failed to check generated GET thumbnail exists: %v", err)) - failIf(!exists, fmt.Errorf("generated GET thumbnail not found in Image-Cache/")) + failIf(!exists, fmt.Errorf("generated GET thumbnail not found in Image-Cache/ width 200")) // Now run it again, because this time it should be using the cached copy testImageGetScaled_OK(apiHost, imageGetJWT, 12, 200, 154) @@ -1607,7 +1607,7 @@ func testScanDataHasPermission(apiHost string, actionMsg string, editAllowed boo // Check that the file was created exists, err = apiStorageFileAccess.ObjectExists(apiDatasetBucket, "Image-Cache/048300551/PCW_0125_0678031992_000RCM_N00417120483005510091075J02-width400.png") failIf(err != nil, fmt.Errorf("Failed to check generated GET thumbnail exists: %v", err)) - failIf(!exists, fmt.Errorf("generated GET thumbnail not found in Image-Cache/")) + failIf(!exists, fmt.Errorf("generated GET thumbnail not found in Image-Cache/ width 400")) // Now run it again, because this time it should be using the cached copy testImageGetScaled_OK(apiHost, imageGetJWT, 450, 400, 308) From 590d3b47141a1801676b4d132f25790e2379d784 Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Fri, 24 May 2024 12:03:22 +1000 Subject: [PATCH 15/17] Set RunTimeSec on auto quants --- api/quantification/autoQuantification.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/quantification/autoQuantification.go b/api/quantification/autoQuantification.go index a8d534b0..aa606a30 100644 --- a/api/quantification/autoQuantification.go +++ b/api/quantification/autoQuantification.go @@ -85,7 +85,7 @@ func RunAutoQuantifications(scanId string, svcs *services.APIServices) { Elements: quantElements[c], DetectorConfig: detector, Parameters: "", - RunTimeSec: 0, + RunTimeSec: 300, QuantMode: m, RoiIDs: []string{}, IncludeDwells: false, From 875d346a3d6ecdf3005cb6e3370b4705480fff16 Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Fri, 24 May 2024 13:58:14 +1000 Subject: [PATCH 16/17] Fixing elements sent for auto quant --- api/quantification/autoQuantification.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/api/quantification/autoQuantification.go b/api/quantification/autoQuantification.go index aa606a30..123b392c 100644 --- a/api/quantification/autoQuantification.go +++ b/api/quantification/autoQuantification.go @@ -25,9 +25,12 @@ func RunAutoQuantifications(scanId string, svcs *services.APIServices) { quantNames := []string{"AutoQuant-PDS", "AutoQuant-PIXL"} quantModes := []string{quantModeCombinedAB, quantModeSeparateAB} quantElements := [][]string{ - // PDS - []string{"Na2O", "MgO", "Al2O3", "SiO2", "P2O5", "SO3", "Cl", "K2O", "CaO", "TiO2", "Cr2O3", "MnO", "FeO-T", "NiO", "ZnO", "Br"}, - []string{"Na2O", "MgO", "Al2O3", "SiO2", "P2O5", "SO3", "Cl", "K2O", "CaO", "TiO2", "Cr2O3", "MnO", "FeO-T", "NiO", "ZnO", "GeO", "Br", "Rb2O", "SrO", "Y2O3", "ZrO2"}, + // PDS: intended "Na2O", "MgO", "Al2O3", "SiO2", "P2O5", "SO3", "Cl", "K2O", "CaO", "TiO2", "Cr2O3", "MnO", "FeO-T", "NiO", "ZnO", "Br" + // But we must specify elements only! Expecting PIQUANT to determine the oxide states to write + []string{"Na", "Mg", "Al", "Si", "P", "S", "Cl", "K", "Ca", "Ti", "Cr", "Mn", "Fe", "Ni", "Zn", "Br"}, + // PIXL: intended "Na2O", "MgO", "Al2O3", "SiO2", "P2O5", "SO3", "Cl", "K2O", "CaO", "TiO2", "Cr2O3", "MnO", "FeO-T", "NiO", "ZnO", "GeO", "Br", "Rb2O", "SrO", "Y2O3", "ZrO2" + // But we must specify elements only! Expecting PIQUANT to determine the oxide states to write + []string{"Na", "Mg", "Al", "Si", "P", "S", "Cl", "K", "Ca", "Ti", "Cr", "Mn", "Fe", "Ni", "Zn", "Ge", "Br", "Rb", "Sr", "Y", "Zr"}, } detector := "PIXL/PiquantConfigs/v7" From 0cfd34c82574ed228f9e308a18115fcba53ce6ab Mon Sep 17 00:00:00 2001 From: Peter Nemere Date: Fri, 24 May 2024 14:12:52 +1000 Subject: [PATCH 17/17] Iron ratio added to auto-quants --- api/quantification/autoQuantification.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/quantification/autoQuantification.go b/api/quantification/autoQuantification.go index 123b392c..eedfb0c4 100644 --- a/api/quantification/autoQuantification.go +++ b/api/quantification/autoQuantification.go @@ -87,7 +87,7 @@ func RunAutoQuantifications(scanId string, svcs *services.APIServices) { Pmcs: pmcs, Elements: quantElements[c], DetectorConfig: detector, - Parameters: "", + Parameters: "-Fe,1", RunTimeSec: 300, QuantMode: m, RoiIDs: []string{},