@opsee/mcp-server 0.11.6 → 0.11.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,7 +3,7 @@
3
3
  /* eslint-disable */
4
4
 
5
5
  import { fileDesc, messageDesc, serviceDesc } from "@bufbuild/protobuf/codegenv1";
6
- import { file_google_protobuf_empty } from "@bufbuild/protobuf/wkt";
6
+ import { file_google_protobuf_empty, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
7
7
  import { file_google_api_annotations } from "../../google/api/annotations_pb";
8
8
  import { file_validate_validate } from "../../validate/validate_pb";
9
9
  import { file_api_v1_pagination } from "./pagination_pb";
@@ -15,7 +15,7 @@ import { file_fk_foreign_key } from "../../fk/foreign_key_pb";
15
15
  * Describes the file api/v1/initiative.proto.
16
16
  */
17
17
  export const file_api_v1_initiative = /*@__PURE__*/
18
- fileDesc("ChdhcGkvdjEvaW5pdGlhdGl2ZS5wcm90bxIGYXBpLnYxIuYCChRBZGRJbml0aWF0aXZlUmVxdWVzdBIZCgV0aXRsZRgBIAEoCUIK+kIHcgUQARjIARIUCgdzdW1tYXJ5GAIgASgJSACIAQESQgoGc3RhdHVzGAMgASgJQjL6Qi9yLVIFZHJhZnRSBmFjdGl2ZVIGcGF1c2VkUgljb21wbGV0ZWRSCWFiYW5kb25lZBInCgpwcm9qZWN0X2lkGAQgASgNQhP6QgQqAigBgrUYCHByb2plY3RzEjgKC2FuY2hvcl90eXBlGAUgASgJQiP6QiByHlIEbm9uZVIEdGFza1IJbWlsZXN0b25lUgVjeWNsZRIWCglhbmNob3JfaWQYBiABKA1IAYgBARIWCgljb3JlX2lkZWEYByABKAlIAogBARIeChZjb3JlX2lkZWFfY29udGVudF90eXBlGAggASgJQgoKCF9zdW1tYXJ5QgwKCl9hbmNob3JfaWRCDAoKX2NvcmVfaWRlYSLzAgoVRWRpdEluaXRpYXRpdmVSZXF1ZXN0EhMKAmlkGAEgASgNQgf6QgQqAigBEhkKBXRpdGxlGAIgASgJQgr6QgdyBRABGMgBEhQKB3N1bW1hcnkYAyABKAlIAIgBARJCCgZzdGF0dXMYBCABKAlCMvpCL3ItUgVkcmFmdFIGYWN0aXZlUgZwYXVzZWRSCWNvbXBsZXRlZFIJYWJhbmRvbmVkEjgKC2FuY2hvcl90eXBlGAUgASgJQiP6QiByHlIEbm9uZVIEdGFza1IJbWlsZXN0b25lUgVjeWNsZRIWCglhbmNob3JfaWQYBiABKA1IAYgBARIWCgljb3JlX2lkZWEYByABKAlIAogBARIjChZjb3JlX2lkZWFfY29udGVudF90eXBlGAggASgJSAOIAQFCCgoIX3N1bW1hcnlCDAoKX2FuY2hvcl9pZEIMCgpfY29yZV9pZGVhQhkKF19jb3JlX2lkZWFfY29udGVudF90eXBlIiIKFEdldEluaXRpYXRpdmVSZXF1ZXN0EgoKAmlkGAEgASgNIjQKGkdldEluaXRpYXRpdmVCeVVVSURSZXF1ZXN0EhYKBHV1aWQYASABKAlCCPpCBXIDsAEBIpUBChVHZXRJbml0aWF0aXZlc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIwCgpwYWdpbmF0aW9uGAIgASgLMhIuYXBpLnYxLlBhZ2luYXRpb25CCPpCBYoBAhABEi0KDmZpbHRlcl9vcHRpb25zGAMgASgLMhUuYXBpLnYxLkZpbHRlck9wdGlvbnMiJQoXRGVsZXRlSW5pdGlhdGl2ZVJlcXVlc3QSCgoCaWQYASABKA0iPwoVQWRkSW5pdGlhdGl2ZVJlc3BvbnNlEiYKCmluaXRpYXRpdmUYASABKAsyEi5hcGkudjEuSW5pdGlhdGl2ZSJAChZFZGl0SW5pdGlhdGl2ZVJlc3BvbnNlEiYKCmluaXRpYXRpdmUYASABKAsyEi5hcGkudjEuSW5pdGlhdGl2ZSI/ChVHZXRJbml0aWF0aXZlUmVzcG9uc2USJgoKaW5pdGlhdGl2ZRgBIAEoCzISLmFwaS52MS5Jbml0aWF0aXZlImkKFkdldEluaXRpYXRpdmVzUmVzcG9uc2USJwoLaW5pdGlhdGl2ZXMYASADKAsyEi5hcGkudjEuSW5pdGlhdGl2ZRImCgpwYWdpbmF0aW9uGAIgASgLMhIuYXBpLnYxLlBhZ2luYXRpb24iTQoTSW5pdGlhdGl2ZUdyYXBoRWRnZRIUCgxmcm9tX3Rhc2tfaWQYASABKA0SEgoKdG9fdGFza19pZBgCIAEoDRIMCgR0eXBlGAMgASgJIjIKD0luaXRpYXRpdmVTbGljZRINCgVsYXllchgBIAEoBRIQCgh0YXNrX2lkcxgCIAMoDSKDAQoPSW5pdGlhdGl2ZUdyYXBoEhsKBXRhc2tzGAEgAygLMgwuYXBpLnYxLlRhc2sSKgoFZWRnZXMYAiADKAsyGy5hcGkudjEuSW5pdGlhdGl2ZUdyYXBoRWRnZRInCgZzbGljZXMYAyADKAsyFy5hcGkudjEuSW5pdGlhdGl2ZVNsaWNlIooDChRJbml0aWF0aXZlQ29zdFJvbGx1cBIVCg10b3RhbF9jcmVkaXRzGAEgASgDEhEKCXJ1bl9jb3VudBgCIAEoBRIbChNjb21wbGV0ZWRfcnVuX2NvdW50GAMgASgFEhgKEGZhaWxlZF9ydW5fY291bnQYBCABKAUSLgoKdGFza19jb3N0cxgFIAMoCzIaLmFwaS52MS5Jbml0aWF0aXZlVGFza0Nvc3QSMAoLc3RhZ2VfY29zdHMYBiADKAsyGy5hcGkudjEuSW5pdGlhdGl2ZVN0YWdlQ29zdBIwCgttb2RlbF9jb3N0cxgHIAMoCzIbLmFwaS52MS5Jbml0aWF0aXZlTW9kZWxDb3N0EhoKEnRvdGFsX2lucHV0X3Rva2VucxgIIAEoAxIbChN0b3RhbF9vdXRwdXRfdG9rZW5zGAkgASgDEh8KF3RvdGFsX2NhY2hlX3JlYWRfdG9rZW5zGAogASgDEiMKG3RvdGFsX2NhY2hlX2NyZWF0aW9uX3Rva2VucxgLIAEoAyJJChJJbml0aWF0aXZlVGFza0Nvc3QSDwoHdGFza19pZBgBIAEoDRIPCgdjcmVkaXRzGAIgASgDEhEKCXJ1bl9jb3VudBgDIAEoBSI1ChNJbml0aWF0aXZlU3RhZ2VDb3N0Eg0KBXN0YWdlGAEgASgJEg8KB2NyZWRpdHMYAiABKAMinAEKE0luaXRpYXRpdmVNb2RlbENvc3QSDQoFbW9kZWwYASABKAkSDwoHY3JlZGl0cxgCIAEoAxIUCgxpbnB1dF90b2tlbnMYAyABKAMSFQoNb3V0cHV0X3Rva2VucxgEIAEoAxIZChFjYWNoZV9yZWFkX3Rva2VucxgFIAEoAxIdChVjYWNoZV9jcmVhdGlvbl90b2tlbnMYBiABKAMiOwoZR2V0SW5pdGlhdGl2ZUdyYXBoUmVxdWVzdBIeCg1pbml0aWF0aXZlX2lkGAEgASgNQgf6QgQqAigBIkQKGkdldEluaXRpYXRpdmVHcmFwaFJlc3BvbnNlEiYKBWdyYXBoGAEgASgLMhcuYXBpLnYxLkluaXRpYXRpdmVHcmFwaCJTChtHZXRJbml0aWF0aXZlQ29udGV4dFJlcXVlc3QSHgoNaW5pdGlhdGl2ZV9pZBgBIAEoDUIH+kIEKgIoARIUCgxtZW1vcnlfbGltaXQYAiABKA0ipAIKHEdldEluaXRpYXRpdmVDb250ZXh0UmVzcG9uc2USJgoKaW5pdGlhdGl2ZRgBIAEoCzISLmFwaS52MS5Jbml0aWF0aXZlEiYKBWdyYXBoGAIgASgLMhcuYXBpLnYxLkluaXRpYXRpdmVHcmFwaBI1Cg5tZW1vcnlfZW50cmllcxgDIAMoCzIdLmFwaS52MS5Jbml0aWF0aXZlTWVtb3J5RW50cnkSLgoNcHVsbF9yZXF1ZXN0cxgEIAMoCzIXLmFwaS52MS5UYXNrUHVsbFJlcXVlc3QSIQoIY29tbWVudHMYBSADKAsyDy5hcGkudjEuQ29tbWVudBIqCgRjb3N0GAYgASgLMhwuYXBpLnYxLkluaXRpYXRpdmVDb3N0Um9sbHVwItgCCh9BZGRJbml0aWF0aXZlTWVtb3J5RW50cnlSZXF1ZXN0Eh4KDWluaXRpYXRpdmVfaWQYASABKA1CB/pCBCoCKAESQgoEa2luZBgCIAEoCUI0+kIxci9SCGRlY2lzaW9uUgdvdXRjb21lUghsZWFybmluZ1IHYmxvY2tlclIHY29udGV4dBIVCgRib2R5GAMgASgJQgf6QgRyAhABEicKDGNvbnRlbnRfdHlwZRgEIAEoCUIR+kIOcgxSBHRleHRSBGpzb24SQwoLc291cmNlX3R5cGUYBSABKAlCLvpCK3IpUgRub25lUgR0YXNrUgxwdWxsX3JlcXVlc3RSA2RvY1IId29ya2Zsb3cSFgoJc291cmNlX2lkGAYgASgNSACIAQESFwoKc291cmNlX3VybBgHIAEoCUgBiAEBQgwKCl9zb3VyY2VfaWRCDQoLX3NvdXJjZV91cmwiVwogQWRkSW5pdGlhdGl2ZU1lbW9yeUVudHJ5UmVzcG9uc2USMwoMbWVtb3J5X2VudHJ5GAEgASgLMh0uYXBpLnYxLkluaXRpYXRpdmVNZW1vcnlFbnRyeSK4AQoaR2V0SW5pdGlhdGl2ZU1lbW9yeVJlcXVlc3QSHgoNaW5pdGlhdGl2ZV9pZBgBIAEoDUIH+kIEKgIoARIwCgpwYWdpbmF0aW9uGAIgASgLMhIuYXBpLnYxLlBhZ2luYXRpb25CCPpCBYoBAhABEg0KBWtpbmRzGAMgAygJEhMKC3NvdXJjZV90eXBlGAQgASgJEhYKCXNvdXJjZV9pZBgFIAEoDUgAiAEBQgwKCl9zb3VyY2VfaWQifAobR2V0SW5pdGlhdGl2ZU1lbW9yeVJlc3BvbnNlEjUKDm1lbW9yeV9lbnRyaWVzGAEgAygLMh0uYXBpLnYxLkluaXRpYXRpdmVNZW1vcnlFbnRyeRImCgpwYWdpbmF0aW9uGAIgASgLMhIuYXBpLnYxLlBhZ2luYXRpb24i3QIKEkRlY29tcG9zZVRhc2tJbnB1dBIUCgNyZWYYASABKAlCB/pCBHICEAESGQoFdGl0bGUYAiABKAlCCvpCB3IFEAEY/wESGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBARIXCgpwYXJlbnRfcmVmGAQgASgJSAGIAQESGQoMdGFza190eXBlX2lkGAUgASgNSAKIAQESHQoQdGFza19wcmlvcml0eV9pZBgGIAEoDUgDiAEBEhwKD2JvYXJkX2NvbHVtbl9pZBgHIAEoDUgEiAEBEh0KEGV4aXN0aW5nX3Rhc2tfaWQYCCABKA1IBYgBAUIOCgxfZGVzY3JpcHRpb25CDQoLX3BhcmVudF9yZWZCDwoNX3Rhc2tfdHlwZV9pZEITChFfdGFza19wcmlvcml0eV9pZEISChBfYm9hcmRfY29sdW1uX2lkQhMKEV9leGlzdGluZ190YXNrX2lkIokBChJEZWNvbXBvc2VFZGdlSW5wdXQSGQoIZnJvbV9yZWYYASABKAlCB/pCBHICEAESFwoGdG9fcmVmGAIgASgJQgf6QgRyAhABEj8KBHR5cGUYAyABKAlCMfpCLnIsUgZibG9ja3NSCmJsb2NrZWRfYnlSCmR1cGxpY2F0ZXNSCnJlbGF0ZXNfdG8inAEKGkRlY29tcG9zZUluaXRpYXRpdmVSZXF1ZXN0Eh4KDWluaXRpYXRpdmVfaWQYASABKA1CB/pCBCoCKAESMwoFdGFza3MYAiADKAsyGi5hcGkudjEuRGVjb21wb3NlVGFza0lucHV0Qgj6QgWSAQIIARIpCgVlZGdlcxgDIAMoCzIaLmFwaS52MS5EZWNvbXBvc2VFZGdlSW5wdXQiagobRGVjb21wb3NlSW5pdGlhdGl2ZVJlc3BvbnNlEiMKDWNyZWF0ZWRfdGFza3MYASADKAsyDC5hcGkudjEuVGFzaxImCgVncmFwaBgCIAEoCzIXLmFwaS52MS5Jbml0aWF0aXZlR3JhcGgiWQoTUmVjb25jaWxlVGFza0NoYW5nZRIPCgd0YXNrX2lkGAEgASgNEhIKCmlkZW50aWZpZXIYAiABKAkSDQoFdGl0bGUYAyABKAkSDgoGcmVhc29uGAQgASgJIqoCChJSZWNvbmNpbGVDaGFuZ2VzZXQSKgoFYWRkZWQYASADKAsyGy5hcGkudjEuUmVjb25jaWxlVGFza0NoYW5nZRIsCgdyZW1vdmVkGAIgAygLMhsuYXBpLnYxLlJlY29uY2lsZVRhc2tDaGFuZ2USLAoHZmxhZ2dlZBgDIAMoCzIbLmFwaS52MS5SZWNvbmNpbGVUYXNrQ2hhbmdlEjAKC2VkZ2VzX2FkZGVkGAQgAygLMhsuYXBpLnYxLkluaXRpYXRpdmVHcmFwaEVkZ2USMgoNZWRnZXNfcmVtb3ZlZBgFIAMoCzIbLmFwaS52MS5Jbml0aWF0aXZlR3JhcGhFZGdlEiYKBWdyYXBoGAYgASgLMhcuYXBpLnYxLkluaXRpYXRpdmVHcmFwaCKtAQoaUmVjb25jaWxlSW5pdGlhdGl2ZVJlcXVlc3QSHgoNaW5pdGlhdGl2ZV9pZBgBIAEoDUIH+kIEKgIoARIzCgV0YXNrcxgCIAMoCzIaLmFwaS52MS5EZWNvbXBvc2VUYXNrSW5wdXRCCPpCBZIBAggBEikKBWVkZ2VzGAMgAygLMhouYXBpLnYxLkRlY29tcG9zZUVkZ2VJbnB1dBIPCgdkcnlfcnVuGAQgASgIIkwKG1JlY29uY2lsZUluaXRpYXRpdmVSZXNwb25zZRItCgljaGFuZ2VzZXQYASABKAsyGi5hcGkudjEuUmVjb25jaWxlQ2hhbmdlc2V0MuQMChFJbml0aWF0aXZlU2VydmljZRJsCg1BZGRJbml0aWF0aXZlEhwuYXBpLnYxLkFkZEluaXRpYXRpdmVSZXF1ZXN0Gh0uYXBpLnYxLkFkZEluaXRpYXRpdmVSZXNwb25zZSIegtPkkwIYOgEqIhMvYXBpL3YxL2luaXRpYXRpdmVzEnQKDkVkaXRJbml0aWF0aXZlEh0uYXBpLnYxLkVkaXRJbml0aWF0aXZlUmVxdWVzdBoeLmFwaS52MS5FZGl0SW5pdGlhdGl2ZVJlc3BvbnNlIiOC0+STAh06ASoaGC9hcGkvdjEvaW5pdGlhdGl2ZXMve2lkfRJuCg1HZXRJbml0aWF0aXZlEhwuYXBpLnYxLkdldEluaXRpYXRpdmVSZXF1ZXN0Gh0uYXBpLnYxLkdldEluaXRpYXRpdmVSZXNwb25zZSIggtPkkwIaEhgvYXBpL3YxL2luaXRpYXRpdmVzL3tpZH0SgQEKE0dldEluaXRpYXRpdmVCeVVVSUQSIi5hcGkudjEuR2V0SW5pdGlhdGl2ZUJ5VVVJRFJlcXVlc3QaHS5hcGkudjEuR2V0SW5pdGlhdGl2ZVJlc3BvbnNlIieC0+STAiESHy9hcGkvdjEvaW5pdGlhdGl2ZXMvdXVpZC97dXVpZH0SbAoOR2V0SW5pdGlhdGl2ZXMSHS5hcGkudjEuR2V0SW5pdGlhdGl2ZXNSZXF1ZXN0Gh4uYXBpLnYxLkdldEluaXRpYXRpdmVzUmVzcG9uc2UiG4LT5JMCFRITL2FwaS92MS9pbml0aWF0aXZlcxJtChBEZWxldGVJbml0aWF0aXZlEh8uYXBpLnYxLkRlbGV0ZUluaXRpYXRpdmVSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5IiCC0+STAhoqGC9hcGkvdjEvaW5pdGlhdGl2ZXMve2lkfRKOAQoSR2V0SW5pdGlhdGl2ZUdyYXBoEiEuYXBpLnYxLkdldEluaXRpYXRpdmVHcmFwaFJlcXVlc3QaIi5hcGkudjEuR2V0SW5pdGlhdGl2ZUdyYXBoUmVzcG9uc2UiMYLT5JMCKxIpL2FwaS92MS9pbml0aWF0aXZlcy97aW5pdGlhdGl2ZV9pZH0vZ3JhcGgSlgEKFEdldEluaXRpYXRpdmVDb250ZXh0EiMuYXBpLnYxLkdldEluaXRpYXRpdmVDb250ZXh0UmVxdWVzdBokLmFwaS52MS5HZXRJbml0aWF0aXZlQ29udGV4dFJlc3BvbnNlIjOC0+STAi0SKy9hcGkvdjEvaW5pdGlhdGl2ZXMve2luaXRpYXRpdmVfaWR9L2NvbnRleHQSpAEKGEFkZEluaXRpYXRpdmVNZW1vcnlFbnRyeRInLmFwaS52MS5BZGRJbml0aWF0aXZlTWVtb3J5RW50cnlSZXF1ZXN0GiguYXBpLnYxLkFkZEluaXRpYXRpdmVNZW1vcnlFbnRyeVJlc3BvbnNlIjWC0+STAi86ASoiKi9hcGkvdjEvaW5pdGlhdGl2ZXMve2luaXRpYXRpdmVfaWR9L21lbW9yeRKSAQoTR2V0SW5pdGlhdGl2ZU1lbW9yeRIiLmFwaS52MS5HZXRJbml0aWF0aXZlTWVtb3J5UmVxdWVzdBojLmFwaS52MS5HZXRJbml0aWF0aXZlTWVtb3J5UmVzcG9uc2UiMoLT5JMCLBIqL2FwaS92MS9pbml0aWF0aXZlcy97aW5pdGlhdGl2ZV9pZH0vbWVtb3J5EpgBChNEZWNvbXBvc2VJbml0aWF0aXZlEiIuYXBpLnYxLkRlY29tcG9zZUluaXRpYXRpdmVSZXF1ZXN0GiMuYXBpLnYxLkRlY29tcG9zZUluaXRpYXRpdmVSZXNwb25zZSI4gtPkkwIyOgEqIi0vYXBpL3YxL2luaXRpYXRpdmVzL3tpbml0aWF0aXZlX2lkfS9kZWNvbXBvc2USmAEKE1JlY29uY2lsZUluaXRpYXRpdmUSIi5hcGkudjEuUmVjb25jaWxlSW5pdGlhdGl2ZVJlcXVlc3QaIy5hcGkudjEuUmVjb25jaWxlSW5pdGlhdGl2ZVJlc3BvbnNlIjiC0+STAjI6ASoiLS9hcGkvdjEvaW5pdGlhdGl2ZXMve2luaXRpYXRpdmVfaWR9L3JlY29uY2lsZUJ0Cgpjb20uYXBpLnYxQg9Jbml0aWF0aXZlUHJvdG9QAVocb3BzZWUvYmFja2VuZC9nZW4vYXBpL3YxO2dlbqICA0FYWKoCBkFwaS5WMcoCBkFwaVxWMeICEkFwaVxWMVxHUEJNZXRhZGF0YeoCB0FwaTo6VjFiBnByb3RvMw", [file_google_protobuf_empty, file_google_api_annotations, file_validate_validate, file_api_v1_pagination, file_api_v1_filter, file_api_v1_models, file_fk_foreign_key]);
18
+ fileDesc("ChdhcGkvdjEvaW5pdGlhdGl2ZS5wcm90bxIGYXBpLnYxIuYCChRBZGRJbml0aWF0aXZlUmVxdWVzdBIZCgV0aXRsZRgBIAEoCUIK+kIHcgUQARjIARIUCgdzdW1tYXJ5GAIgASgJSACIAQESQgoGc3RhdHVzGAMgASgJQjL6Qi9yLVIFZHJhZnRSBmFjdGl2ZVIGcGF1c2VkUgljb21wbGV0ZWRSCWFiYW5kb25lZBInCgpwcm9qZWN0X2lkGAQgASgNQhP6QgQqAigBgrUYCHByb2plY3RzEjgKC2FuY2hvcl90eXBlGAUgASgJQiP6QiByHlIEbm9uZVIEdGFza1IJbWlsZXN0b25lUgVjeWNsZRIWCglhbmNob3JfaWQYBiABKA1IAYgBARIWCgljb3JlX2lkZWEYByABKAlIAogBARIeChZjb3JlX2lkZWFfY29udGVudF90eXBlGAggASgJQgoKCF9zdW1tYXJ5QgwKCl9hbmNob3JfaWRCDAoKX2NvcmVfaWRlYSLzAgoVRWRpdEluaXRpYXRpdmVSZXF1ZXN0EhMKAmlkGAEgASgNQgf6QgQqAigBEhkKBXRpdGxlGAIgASgJQgr6QgdyBRABGMgBEhQKB3N1bW1hcnkYAyABKAlIAIgBARJCCgZzdGF0dXMYBCABKAlCMvpCL3ItUgVkcmFmdFIGYWN0aXZlUgZwYXVzZWRSCWNvbXBsZXRlZFIJYWJhbmRvbmVkEjgKC2FuY2hvcl90eXBlGAUgASgJQiP6QiByHlIEbm9uZVIEdGFza1IJbWlsZXN0b25lUgVjeWNsZRIWCglhbmNob3JfaWQYBiABKA1IAYgBARIWCgljb3JlX2lkZWEYByABKAlIAogBARIjChZjb3JlX2lkZWFfY29udGVudF90eXBlGAggASgJSAOIAQFCCgoIX3N1bW1hcnlCDAoKX2FuY2hvcl9pZEIMCgpfY29yZV9pZGVhQhkKF19jb3JlX2lkZWFfY29udGVudF90eXBlIiIKFEdldEluaXRpYXRpdmVSZXF1ZXN0EgoKAmlkGAEgASgNIjQKGkdldEluaXRpYXRpdmVCeVVVSURSZXF1ZXN0EhYKBHV1aWQYASABKAlCCPpCBXIDsAEBIpUBChVHZXRJbml0aWF0aXZlc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIwCgpwYWdpbmF0aW9uGAIgASgLMhIuYXBpLnYxLlBhZ2luYXRpb25CCPpCBYoBAhABEi0KDmZpbHRlcl9vcHRpb25zGAMgASgLMhUuYXBpLnYxLkZpbHRlck9wdGlvbnMiJQoXRGVsZXRlSW5pdGlhdGl2ZVJlcXVlc3QSCgoCaWQYASABKA0iPwoVQWRkSW5pdGlhdGl2ZVJlc3BvbnNlEiYKCmluaXRpYXRpdmUYASABKAsyEi5hcGkudjEuSW5pdGlhdGl2ZSJAChZFZGl0SW5pdGlhdGl2ZVJlc3BvbnNlEiYKCmluaXRpYXRpdmUYASABKAsyEi5hcGkudjEuSW5pdGlhdGl2ZSI/ChVHZXRJbml0aWF0aXZlUmVzcG9uc2USJgoKaW5pdGlhdGl2ZRgBIAEoCzISLmFwaS52MS5Jbml0aWF0aXZlImkKFkdldEluaXRpYXRpdmVzUmVzcG9uc2USJwoLaW5pdGlhdGl2ZXMYASADKAsyEi5hcGkudjEuSW5pdGlhdGl2ZRImCgpwYWdpbmF0aW9uGAIgASgLMhIuYXBpLnYxLlBhZ2luYXRpb24iTQoTSW5pdGlhdGl2ZUdyYXBoRWRnZRIUCgxmcm9tX3Rhc2tfaWQYASABKA0SEgoKdG9fdGFza19pZBgCIAEoDRIMCgR0eXBlGAMgASgJIjIKD0luaXRpYXRpdmVTbGljZRINCgVsYXllchgBIAEoBRIQCgh0YXNrX2lkcxgCIAMoDSKDAQoPSW5pdGlhdGl2ZUdyYXBoEhsKBXRhc2tzGAEgAygLMgwuYXBpLnYxLlRhc2sSKgoFZWRnZXMYAiADKAsyGy5hcGkudjEuSW5pdGlhdGl2ZUdyYXBoRWRnZRInCgZzbGljZXMYAyADKAsyFy5hcGkudjEuSW5pdGlhdGl2ZVNsaWNlIqYDChRJbml0aWF0aXZlQ29zdFJvbGx1cBIVCg10b3RhbF9jcmVkaXRzGAEgASgDEhEKCXJ1bl9jb3VudBgCIAEoBRIbChNjb21wbGV0ZWRfcnVuX2NvdW50GAMgASgFEhgKEGZhaWxlZF9ydW5fY291bnQYBCABKAUSLgoKdGFza19jb3N0cxgFIAMoCzIaLmFwaS52MS5Jbml0aWF0aXZlVGFza0Nvc3QSMAoLc3RhZ2VfY29zdHMYBiADKAsyGy5hcGkudjEuSW5pdGlhdGl2ZVN0YWdlQ29zdBIwCgttb2RlbF9jb3N0cxgHIAMoCzIbLmFwaS52MS5Jbml0aWF0aXZlTW9kZWxDb3N0EhoKEnRvdGFsX2lucHV0X3Rva2VucxgIIAEoAxIbChN0b3RhbF9vdXRwdXRfdG9rZW5zGAkgASgDEh8KF3RvdGFsX2NhY2hlX3JlYWRfdG9rZW5zGAogASgDEiMKG3RvdGFsX2NhY2hlX2NyZWF0aW9uX3Rva2VucxgLIAEoAxIaChJydW5fcmVjb3JkX2NyZWRpdHMYDCABKAMiSQoSSW5pdGlhdGl2ZVRhc2tDb3N0Eg8KB3Rhc2tfaWQYASABKA0SDwoHY3JlZGl0cxgCIAEoAxIRCglydW5fY291bnQYAyABKAUiNQoTSW5pdGlhdGl2ZVN0YWdlQ29zdBINCgVzdGFnZRgBIAEoCRIPCgdjcmVkaXRzGAIgASgDIpwBChNJbml0aWF0aXZlTW9kZWxDb3N0Eg0KBW1vZGVsGAEgASgJEg8KB2NyZWRpdHMYAiABKAMSFAoMaW5wdXRfdG9rZW5zGAMgASgDEhUKDW91dHB1dF90b2tlbnMYBCABKAMSGQoRY2FjaGVfcmVhZF90b2tlbnMYBSABKAMSHQoVY2FjaGVfY3JlYXRpb25fdG9rZW5zGAYgASgDIjsKGUdldEluaXRpYXRpdmVHcmFwaFJlcXVlc3QSHgoNaW5pdGlhdGl2ZV9pZBgBIAEoDUIH+kIEKgIoASJEChpHZXRJbml0aWF0aXZlR3JhcGhSZXNwb25zZRImCgVncmFwaBgBIAEoCzIXLmFwaS52MS5Jbml0aWF0aXZlR3JhcGgiUwobR2V0SW5pdGlhdGl2ZUNvbnRleHRSZXF1ZXN0Eh4KDWluaXRpYXRpdmVfaWQYASABKA1CB/pCBCoCKAESFAoMbWVtb3J5X2xpbWl0GAIgASgNIqQCChxHZXRJbml0aWF0aXZlQ29udGV4dFJlc3BvbnNlEiYKCmluaXRpYXRpdmUYASABKAsyEi5hcGkudjEuSW5pdGlhdGl2ZRImCgVncmFwaBgCIAEoCzIXLmFwaS52MS5Jbml0aWF0aXZlR3JhcGgSNQoObWVtb3J5X2VudHJpZXMYAyADKAsyHS5hcGkudjEuSW5pdGlhdGl2ZU1lbW9yeUVudHJ5Ei4KDXB1bGxfcmVxdWVzdHMYBCADKAsyFy5hcGkudjEuVGFza1B1bGxSZXF1ZXN0EiEKCGNvbW1lbnRzGAUgAygLMg8uYXBpLnYxLkNvbW1lbnQSKgoEY29zdBgGIAEoCzIcLmFwaS52MS5Jbml0aWF0aXZlQ29zdFJvbGx1cCLYAgofQWRkSW5pdGlhdGl2ZU1lbW9yeUVudHJ5UmVxdWVzdBIeCg1pbml0aWF0aXZlX2lkGAEgASgNQgf6QgQqAigBEkIKBGtpbmQYAiABKAlCNPpCMXIvUghkZWNpc2lvblIHb3V0Y29tZVIIbGVhcm5pbmdSB2Jsb2NrZXJSB2NvbnRleHQSFQoEYm9keRgDIAEoCUIH+kIEcgIQARInCgxjb250ZW50X3R5cGUYBCABKAlCEfpCDnIMUgR0ZXh0UgRqc29uEkMKC3NvdXJjZV90eXBlGAUgASgJQi76QityKVIEbm9uZVIEdGFza1IMcHVsbF9yZXF1ZXN0UgNkb2NSCHdvcmtmbG93EhYKCXNvdXJjZV9pZBgGIAEoDUgAiAEBEhcKCnNvdXJjZV91cmwYByABKAlIAYgBAUIMCgpfc291cmNlX2lkQg0KC19zb3VyY2VfdXJsIlcKIEFkZEluaXRpYXRpdmVNZW1vcnlFbnRyeVJlc3BvbnNlEjMKDG1lbW9yeV9lbnRyeRgBIAEoCzIdLmFwaS52MS5Jbml0aWF0aXZlTWVtb3J5RW50cnkiuAEKGkdldEluaXRpYXRpdmVNZW1vcnlSZXF1ZXN0Eh4KDWluaXRpYXRpdmVfaWQYASABKA1CB/pCBCoCKAESMAoKcGFnaW5hdGlvbhgCIAEoCzISLmFwaS52MS5QYWdpbmF0aW9uQgj6QgWKAQIQARINCgVraW5kcxgDIAMoCRITCgtzb3VyY2VfdHlwZRgEIAEoCRIWCglzb3VyY2VfaWQYBSABKA1IAIgBAUIMCgpfc291cmNlX2lkInwKG0dldEluaXRpYXRpdmVNZW1vcnlSZXNwb25zZRI1Cg5tZW1vcnlfZW50cmllcxgBIAMoCzIdLmFwaS52MS5Jbml0aWF0aXZlTWVtb3J5RW50cnkSJgoKcGFnaW5hdGlvbhgCIAEoCzISLmFwaS52MS5QYWdpbmF0aW9uIt0CChJEZWNvbXBvc2VUYXNrSW5wdXQSFAoDcmVmGAEgASgJQgf6QgRyAhABEhkKBXRpdGxlGAIgASgJQgr6QgdyBRABGP8BEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESFwoKcGFyZW50X3JlZhgEIAEoCUgBiAEBEhkKDHRhc2tfdHlwZV9pZBgFIAEoDUgCiAEBEh0KEHRhc2tfcHJpb3JpdHlfaWQYBiABKA1IA4gBARIcCg9ib2FyZF9jb2x1bW5faWQYByABKA1IBIgBARIdChBleGlzdGluZ190YXNrX2lkGAggASgNSAWIAQFCDgoMX2Rlc2NyaXB0aW9uQg0KC19wYXJlbnRfcmVmQg8KDV90YXNrX3R5cGVfaWRCEwoRX3Rhc2tfcHJpb3JpdHlfaWRCEgoQX2JvYXJkX2NvbHVtbl9pZEITChFfZXhpc3RpbmdfdGFza19pZCKJAQoSRGVjb21wb3NlRWRnZUlucHV0EhkKCGZyb21fcmVmGAEgASgJQgf6QgRyAhABEhcKBnRvX3JlZhgCIAEoCUIH+kIEcgIQARI/CgR0eXBlGAMgASgJQjH6Qi5yLFIGYmxvY2tzUgpibG9ja2VkX2J5UgpkdXBsaWNhdGVzUgpyZWxhdGVzX3RvIpwBChpEZWNvbXBvc2VJbml0aWF0aXZlUmVxdWVzdBIeCg1pbml0aWF0aXZlX2lkGAEgASgNQgf6QgQqAigBEjMKBXRhc2tzGAIgAygLMhouYXBpLnYxLkRlY29tcG9zZVRhc2tJbnB1dEII+kIFkgECCAESKQoFZWRnZXMYAyADKAsyGi5hcGkudjEuRGVjb21wb3NlRWRnZUlucHV0ImoKG0RlY29tcG9zZUluaXRpYXRpdmVSZXNwb25zZRIjCg1jcmVhdGVkX3Rhc2tzGAEgAygLMgwuYXBpLnYxLlRhc2sSJgoFZ3JhcGgYAiABKAsyFy5hcGkudjEuSW5pdGlhdGl2ZUdyYXBoIlkKE1JlY29uY2lsZVRhc2tDaGFuZ2USDwoHdGFza19pZBgBIAEoDRISCgppZGVudGlmaWVyGAIgASgJEg0KBXRpdGxlGAMgASgJEg4KBnJlYXNvbhgEIAEoCSKqAgoSUmVjb25jaWxlQ2hhbmdlc2V0EioKBWFkZGVkGAEgAygLMhsuYXBpLnYxLlJlY29uY2lsZVRhc2tDaGFuZ2USLAoHcmVtb3ZlZBgCIAMoCzIbLmFwaS52MS5SZWNvbmNpbGVUYXNrQ2hhbmdlEiwKB2ZsYWdnZWQYAyADKAsyGy5hcGkudjEuUmVjb25jaWxlVGFza0NoYW5nZRIwCgtlZGdlc19hZGRlZBgEIAMoCzIbLmFwaS52MS5Jbml0aWF0aXZlR3JhcGhFZGdlEjIKDWVkZ2VzX3JlbW92ZWQYBSADKAsyGy5hcGkudjEuSW5pdGlhdGl2ZUdyYXBoRWRnZRImCgVncmFwaBgGIAEoCzIXLmFwaS52MS5Jbml0aWF0aXZlR3JhcGgirQEKGlJlY29uY2lsZUluaXRpYXRpdmVSZXF1ZXN0Eh4KDWluaXRpYXRpdmVfaWQYASABKA1CB/pCBCoCKAESMwoFdGFza3MYAiADKAsyGi5hcGkudjEuRGVjb21wb3NlVGFza0lucHV0Qgj6QgWSAQIIARIpCgVlZGdlcxgDIAMoCzIaLmFwaS52MS5EZWNvbXBvc2VFZGdlSW5wdXQSDwoHZHJ5X3J1bhgEIAEoCCJMChtSZWNvbmNpbGVJbml0aWF0aXZlUmVzcG9uc2USLQoJY2hhbmdlc2V0GAEgASgLMhouYXBpLnYxLlJlY29uY2lsZUNoYW5nZXNldCLEAQoDUnVuEgoKAmlkGAEgASgNEhUKDWluaXRpYXRpdmVfaWQYAiABKA0SEgoKY29tcGFueV9pZBgDIAEoDRIOCgZzdGF0dXMYBCABKAkSEwoLZXZlbnRfY291bnQYBSABKAMSLgoKc3RhcnRlZF9hdBgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMQoNbGFzdF9ldmVudF9hdBgHIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAinQIKD1J1blZlcmlmaWNhdGlvbhIKCgJpZBgBIAEoCRINCgVzdGFnZRgCIAEoCRIMCgR0b29sGAMgASgJEhsKB2NvbW1hbmQYBCABKAlCCvpCB3IFEAEYoB8SCwoDY3dkGAUgASgJEhEKCWV4aXRfY29kZRgGIAEoBRIcCgtkdXJhdGlvbl9tcxgHIAEoA0IH+kIEIgIoABIeCgtzdGRvdXRfdGFpbBgIIAEoCUIJ+kIGcgQYgIAEEh4KC3N0ZGVycl90YWlsGAkgASgJQgn6QgZyBBiAgAQSHgoWcmVsYXRlZF9hc3N1bXB0aW9uX2lkcxgKIAMoCRImCgJhdBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXAimQEKEFJ1bkRpc3BhdGNoRXZlbnQSGQoGdmVuZG9yGAEgASgJQgn6QgZyBBABGEASGQoHYWNjb3VudBgCIAEoCUII+kIFcgMYyAESGwoJd29ya3NwYWNlGAMgASgJQgj6QgVyAxjoBxIYCgZicmFuY2gYBCABKAlCCPpCBXIDGP8BEhgKB2F0dGVtcHQYBSABKAVCB/pCBBoCKAEiyAEKD1J1bkF0dGVtcHRFdmVudBIYCgdhdHRlbXB0GAEgASgFQgf6QgQaAigBEkkKB291dGNvbWUYAiABKAlCOPpCNXIzUgljb21wbGV0ZWRSBmZhaWxlZFIHc3RhbGxlZFIMcmF0ZV9saW1pdGVkUgdzdG9wcGVkEhoKB3N1bW1hcnkYAyABKAlCCfpCBnIEGKCcARIjCgxoYW5kX29mZl91cmwYBCABKAlCCPpCBXIDGNAPSACIAQFCDwoNX2hhbmRfb2ZmX3VybCJgCgxSdW5HYXRlRXZlbnQSFwoEbmFtZRgBIAEoCUIJ+kIGcgQQARhAEjcKDHZlcmlmaWNhdGlvbhgCIAEoCzIXLmFwaS52MS5SdW5WZXJpZmljYXRpb25CCPpCBYoBAhABIrwBCglSdW5EZWZlY3QSGQoFdGl0bGUYASABKAlCCvpCB3IFEAEY/wESGAoFc3RlcHMYAiABKAlCCfpCBnIEGKCcARIbCghleHBlY3RlZBgDIAEoCUIJ+kIGcgQYoJwBEhsKCG9ic2VydmVkGAQgASgJQgn6QgZyBBignAESHgoMZXZpZGVuY2VfdXJsGAUgASgJQgj6QgVyAxjQDxIUCgd0YXNrX2lkGAYgASgNSACIAQFCCgoIX3Rhc2tfaWQihwEKD1J1blZlcmRpY3RFdmVudBIlCgZzdGF0dXMYASABKAlCFfpCEnIQUgZwYXNzZWRSBmZhaWxlZBIiCgdkZWZlY3RzGAIgAygLMhEuYXBpLnYxLlJ1bkRlZmVjdBIpCghldmlkZW5jZRgDIAMoCzIXLmFwaS52MS5SdW5WZXJpZmljYXRpb24ifgoPUnVuQnJlYWtlckV2ZW50ElAKCWNvbmRpdGlvbhgBIAEoCUI9+kI6cjhSEmRlZmVjdHNfcGVyX3BhcmVudFIJcmV0cnlfY2FwUg9hY2NvdW50c19wYXVzZWRSBmJ1ZGdldBIZCgdtZXNzYWdlGAIgASgJQgj6QgVyAxigHyKBAgoNUnVuU3BlbmRFdmVudBIYCgdjcmVkaXRzGAEgASgDQgf6QgQiAigAEhcKBnZlbmRvchgCIAEoCUIH+kIEcgIYQBIZCgdhY2NvdW50GAMgASgJQgj6QgVyAxjIARIXCgVtb2RlbBgEIAEoCUII+kIFcgMYyAESHQoMaW5wdXRfdG9rZW5zGAUgASgDQgf6QgQiAigAEh4KDW91dHB1dF90b2tlbnMYBiABKANCB/pCBCICKAASIgoRY2FjaGVfcmVhZF90b2tlbnMYByABKANCB/pCBCICKAASJgoVY2FjaGVfY3JlYXRpb25fdG9rZW5zGAggASgDQgf6QgQiAigAImsKD1J1bkNvbnRyb2xFdmVudBI9CgZhY3Rpb24YASABKAlCLfpCKnIoUgZhdHRhY2hSB3JlbGVhc2VSBXBhdXNlUgZyZXN1bWVSBmNhbmNlbBIZCgdtZXNzYWdlGAIgASgJQgj6QgVyAxigHyLMAQoPUnVuQWNjb3VudEV2ZW50EjEKBXN0YXRlGAEgASgJQiL6Qh9yHVIGcGF1c2VkUgtxdWFyYW50aW5lZFIGYWN0aXZlEhcKBnZlbmRvchgCIAEoCUIH+kIEcgIYQBIZCgdhY2NvdW50GAMgASgJQgj6QgVyAxjIARIYCgZyZWFzb24YBCABKAlCCPpCBXIDGKAfEi4KBXVudGlsGAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBQggKBl91bnRpbCL5AgoPUnVuRXZlbnRQYXlsb2FkEiwKCGRpc3BhdGNoGAEgASgLMhguYXBpLnYxLlJ1bkRpc3BhdGNoRXZlbnRIABIqCgdhdHRlbXB0GAIgASgLMhcuYXBpLnYxLlJ1bkF0dGVtcHRFdmVudEgAEiQKBGdhdGUYAyABKAsyFC5hcGkudjEuUnVuR2F0ZUV2ZW50SAASKgoHdmVyZGljdBgEIAEoCzIXLmFwaS52MS5SdW5WZXJkaWN0RXZlbnRIABIqCgdicmVha2VyGAUgASgLMhcuYXBpLnYxLlJ1bkJyZWFrZXJFdmVudEgAEiYKBXNwZW5kGAYgASgLMhUuYXBpLnYxLlJ1blNwZW5kRXZlbnRIABIqCgdjb250cm9sGAcgASgLMhcuYXBpLnYxLlJ1bkNvbnRyb2xFdmVudEgAEioKB2FjY291bnQYCCABKAsyFy5hcGkudjEuUnVuQWNjb3VudEV2ZW50SABCDgoHcGF5bG9hZBID+EIBItEBCg1SdW5FdmVudElucHV0EhQKB3Rhc2tfaWQYASABKA1IAIgBARIvCgtvY2N1cnJlZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASMgoHcGF5bG9hZBgDIAEoCzIXLmFwaS52MS5SdW5FdmVudFBheWxvYWRCCPpCBYoBAhABEiUKD2lkZW1wb3RlbmN5X2tleRgEIAEoCUIH+kIEcgIYQEgBiAEBQgoKCF90YXNrX2lkQhIKEF9pZGVtcG90ZW5jeV9rZXkizgIKCFJ1bkV2ZW50EgoKAmlkGAEgASgNEg4KBnJ1bl9pZBgCIAEoDRIVCg1pbml0aWF0aXZlX2lkGAMgASgNEhIKCmNvbXBhbnlfaWQYBCABKA0SDAoEa2luZBgFIAEoCRIUCgd0YXNrX2lkGAYgASgNSACIAQESGwoOYXV0aG9yX3VzZXJfaWQYByABKA1IAYgBARIQCghpc19hZ2VudBgIIAEoCBIvCgtvY2N1cnJlZF9hdBgJIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASLgoKY3JlYXRlZF9hdBgKIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASKAoHcGF5bG9hZBgLIAEoCzIXLmFwaS52MS5SdW5FdmVudFBheWxvYWRCCgoIX3Rhc2tfaWRCEQoPX2F1dGhvcl91c2VyX2lkImwKFkFwcGVuZFJ1bkV2ZW50c1JlcXVlc3QSHgoNaW5pdGlhdGl2ZV9pZBgBIAEoDUIH+kIEKgIoARIyCgZldmVudHMYAiADKAsyFS5hcGkudjEuUnVuRXZlbnRJbnB1dEIL+kIIkgEFCAEQ9AMiVQoXQXBwZW5kUnVuRXZlbnRzUmVzcG9uc2USGAoDcnVuGAEgASgLMgsuYXBpLnYxLlJ1bhIgCgZldmVudHMYAiADKAsyEC5hcGkudjEuUnVuRXZlbnQivAEKE0dldFJ1bkV2ZW50c1JlcXVlc3QSHgoNaW5pdGlhdGl2ZV9pZBgBIAEoDUIH+kIEKgIoARIwCgpwYWdpbmF0aW9uGAIgASgLMhIuYXBpLnYxLlBhZ2luYXRpb25CCPpCBYoBAhABEg0KBWtpbmRzGAMgAygJEhQKB3Rhc2tfaWQYBCABKA1IAIgBARIVCghhZnRlcl9pZBgFIAEoDUgBiAEBQgoKCF90YXNrX2lkQgsKCV9hZnRlcl9pZCJ6ChRHZXRSdW5FdmVudHNSZXNwb25zZRIYCgNydW4YASABKAsyCy5hcGkudjEuUnVuEiAKBmV2ZW50cxgCIAMoCzIQLmFwaS52MS5SdW5FdmVudBImCgpwYWdpbmF0aW9uGAMgASgLMhIuYXBpLnYxLlBhZ2luYXRpb24iNgoUR2V0UmVhZHlUYXNrc1JlcXVlc3QSHgoNaW5pdGlhdGl2ZV9pZBgBIAEoDUIH+kIEKgIoASJrChVHZXRSZWFkeVRhc2tzUmVzcG9uc2USGwoFdGFza3MYASADKAsyDC5hcGkudjEuVGFzaxIWCg5kaXNwYXRjaF9sYWJlbBgCIAEoCRIdChVkaXNwYXRjaF9sYWJlbF9leGlzdHMYAyABKAgygBAKEUluaXRpYXRpdmVTZXJ2aWNlEmwKDUFkZEluaXRpYXRpdmUSHC5hcGkudjEuQWRkSW5pdGlhdGl2ZVJlcXVlc3QaHS5hcGkudjEuQWRkSW5pdGlhdGl2ZVJlc3BvbnNlIh6C0+STAhg6ASoiEy9hcGkvdjEvaW5pdGlhdGl2ZXMSdAoORWRpdEluaXRpYXRpdmUSHS5hcGkudjEuRWRpdEluaXRpYXRpdmVSZXF1ZXN0Gh4uYXBpLnYxLkVkaXRJbml0aWF0aXZlUmVzcG9uc2UiI4LT5JMCHToBKhoYL2FwaS92MS9pbml0aWF0aXZlcy97aWR9Em4KDUdldEluaXRpYXRpdmUSHC5hcGkudjEuR2V0SW5pdGlhdGl2ZVJlcXVlc3QaHS5hcGkudjEuR2V0SW5pdGlhdGl2ZVJlc3BvbnNlIiCC0+STAhoSGC9hcGkvdjEvaW5pdGlhdGl2ZXMve2lkfRKBAQoTR2V0SW5pdGlhdGl2ZUJ5VVVJRBIiLmFwaS52MS5HZXRJbml0aWF0aXZlQnlVVUlEUmVxdWVzdBodLmFwaS52MS5HZXRJbml0aWF0aXZlUmVzcG9uc2UiJ4LT5JMCIRIfL2FwaS92MS9pbml0aWF0aXZlcy91dWlkL3t1dWlkfRJsCg5HZXRJbml0aWF0aXZlcxIdLmFwaS52MS5HZXRJbml0aWF0aXZlc1JlcXVlc3QaHi5hcGkudjEuR2V0SW5pdGlhdGl2ZXNSZXNwb25zZSIbgtPkkwIVEhMvYXBpL3YxL2luaXRpYXRpdmVzEm0KEERlbGV0ZUluaXRpYXRpdmUSHy5hcGkudjEuRGVsZXRlSW5pdGlhdGl2ZVJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkiIILT5JMCGioYL2FwaS92MS9pbml0aWF0aXZlcy97aWR9Eo4BChJHZXRJbml0aWF0aXZlR3JhcGgSIS5hcGkudjEuR2V0SW5pdGlhdGl2ZUdyYXBoUmVxdWVzdBoiLmFwaS52MS5HZXRJbml0aWF0aXZlR3JhcGhSZXNwb25zZSIxgtPkkwIrEikvYXBpL3YxL2luaXRpYXRpdmVzL3tpbml0aWF0aXZlX2lkfS9ncmFwaBKWAQoUR2V0SW5pdGlhdGl2ZUNvbnRleHQSIy5hcGkudjEuR2V0SW5pdGlhdGl2ZUNvbnRleHRSZXF1ZXN0GiQuYXBpLnYxLkdldEluaXRpYXRpdmVDb250ZXh0UmVzcG9uc2UiM4LT5JMCLRIrL2FwaS92MS9pbml0aWF0aXZlcy97aW5pdGlhdGl2ZV9pZH0vY29udGV4dBKkAQoYQWRkSW5pdGlhdGl2ZU1lbW9yeUVudHJ5EicuYXBpLnYxLkFkZEluaXRpYXRpdmVNZW1vcnlFbnRyeVJlcXVlc3QaKC5hcGkudjEuQWRkSW5pdGlhdGl2ZU1lbW9yeUVudHJ5UmVzcG9uc2UiNYLT5JMCLzoBKiIqL2FwaS92MS9pbml0aWF0aXZlcy97aW5pdGlhdGl2ZV9pZH0vbWVtb3J5EpIBChNHZXRJbml0aWF0aXZlTWVtb3J5EiIuYXBpLnYxLkdldEluaXRpYXRpdmVNZW1vcnlSZXF1ZXN0GiMuYXBpLnYxLkdldEluaXRpYXRpdmVNZW1vcnlSZXNwb25zZSIygtPkkwIsEiovYXBpL3YxL2luaXRpYXRpdmVzL3tpbml0aWF0aXZlX2lkfS9tZW1vcnkSmAEKE0RlY29tcG9zZUluaXRpYXRpdmUSIi5hcGkudjEuRGVjb21wb3NlSW5pdGlhdGl2ZVJlcXVlc3QaIy5hcGkudjEuRGVjb21wb3NlSW5pdGlhdGl2ZVJlc3BvbnNlIjiC0+STAjI6ASoiLS9hcGkvdjEvaW5pdGlhdGl2ZXMve2luaXRpYXRpdmVfaWR9L2RlY29tcG9zZRKYAQoTUmVjb25jaWxlSW5pdGlhdGl2ZRIiLmFwaS52MS5SZWNvbmNpbGVJbml0aWF0aXZlUmVxdWVzdBojLmFwaS52MS5SZWNvbmNpbGVJbml0aWF0aXZlUmVzcG9uc2UiOILT5JMCMjoBKiItL2FwaS92MS9pbml0aWF0aXZlcy97aW5pdGlhdGl2ZV9pZH0vcmVjb25jaWxlEo0BCg9BcHBlbmRSdW5FdmVudHMSHi5hcGkudjEuQXBwZW5kUnVuRXZlbnRzUmVxdWVzdBofLmFwaS52MS5BcHBlbmRSdW5FdmVudHNSZXNwb25zZSI5gtPkkwIzOgEqIi4vYXBpL3YxL2luaXRpYXRpdmVzL3tpbml0aWF0aXZlX2lkfS9ydW4vZXZlbnRzEoEBCgxHZXRSdW5FdmVudHMSGy5hcGkudjEuR2V0UnVuRXZlbnRzUmVxdWVzdBocLmFwaS52MS5HZXRSdW5FdmVudHNSZXNwb25zZSI2gtPkkwIwEi4vYXBpL3YxL2luaXRpYXRpdmVzL3tpbml0aWF0aXZlX2lkfS9ydW4vZXZlbnRzEoUBCg1HZXRSZWFkeVRhc2tzEhwuYXBpLnYxLkdldFJlYWR5VGFza3NSZXF1ZXN0Gh0uYXBpLnYxLkdldFJlYWR5VGFza3NSZXNwb25zZSI3gtPkkwIxEi8vYXBpL3YxL2luaXRpYXRpdmVzL3tpbml0aWF0aXZlX2lkfS9yZWFkeS10YXNrc0J0Cgpjb20uYXBpLnYxQg9Jbml0aWF0aXZlUHJvdG9QAVocb3BzZWUvYmFja2VuZC9nZW4vYXBpL3YxO2dlbqICA0FYWKoCBkFwaS5WMcoCBkFwaVxWMeICEkFwaVxWMVxHUEJNZXRhZGF0YeoCB0FwaTo6VjFiBnByb3RvMw", [file_google_protobuf_empty, file_google_protobuf_timestamp, file_google_api_annotations, file_validate_validate, file_api_v1_pagination, file_api_v1_filter, file_api_v1_models, file_fk_foreign_key]);
19
19
 
20
20
  /**
21
21
  * Describes the message api.v1.AddInitiativeRequest.
@@ -248,6 +248,146 @@ export const ReconcileInitiativeRequestSchema = /*@__PURE__*/
248
248
  export const ReconcileInitiativeResponseSchema = /*@__PURE__*/
249
249
  messageDesc(file_api_v1_initiative, 32);
250
250
 
251
+ /**
252
+ * Describes the message api.v1.Run.
253
+ * Use `create(RunSchema)` to create a new message.
254
+ */
255
+ export const RunSchema = /*@__PURE__*/
256
+ messageDesc(file_api_v1_initiative, 33);
257
+
258
+ /**
259
+ * Describes the message api.v1.RunVerification.
260
+ * Use `create(RunVerificationSchema)` to create a new message.
261
+ */
262
+ export const RunVerificationSchema = /*@__PURE__*/
263
+ messageDesc(file_api_v1_initiative, 34);
264
+
265
+ /**
266
+ * Describes the message api.v1.RunDispatchEvent.
267
+ * Use `create(RunDispatchEventSchema)` to create a new message.
268
+ */
269
+ export const RunDispatchEventSchema = /*@__PURE__*/
270
+ messageDesc(file_api_v1_initiative, 35);
271
+
272
+ /**
273
+ * Describes the message api.v1.RunAttemptEvent.
274
+ * Use `create(RunAttemptEventSchema)` to create a new message.
275
+ */
276
+ export const RunAttemptEventSchema = /*@__PURE__*/
277
+ messageDesc(file_api_v1_initiative, 36);
278
+
279
+ /**
280
+ * Describes the message api.v1.RunGateEvent.
281
+ * Use `create(RunGateEventSchema)` to create a new message.
282
+ */
283
+ export const RunGateEventSchema = /*@__PURE__*/
284
+ messageDesc(file_api_v1_initiative, 37);
285
+
286
+ /**
287
+ * Describes the message api.v1.RunDefect.
288
+ * Use `create(RunDefectSchema)` to create a new message.
289
+ */
290
+ export const RunDefectSchema = /*@__PURE__*/
291
+ messageDesc(file_api_v1_initiative, 38);
292
+
293
+ /**
294
+ * Describes the message api.v1.RunVerdictEvent.
295
+ * Use `create(RunVerdictEventSchema)` to create a new message.
296
+ */
297
+ export const RunVerdictEventSchema = /*@__PURE__*/
298
+ messageDesc(file_api_v1_initiative, 39);
299
+
300
+ /**
301
+ * Describes the message api.v1.RunBreakerEvent.
302
+ * Use `create(RunBreakerEventSchema)` to create a new message.
303
+ */
304
+ export const RunBreakerEventSchema = /*@__PURE__*/
305
+ messageDesc(file_api_v1_initiative, 40);
306
+
307
+ /**
308
+ * Describes the message api.v1.RunSpendEvent.
309
+ * Use `create(RunSpendEventSchema)` to create a new message.
310
+ */
311
+ export const RunSpendEventSchema = /*@__PURE__*/
312
+ messageDesc(file_api_v1_initiative, 41);
313
+
314
+ /**
315
+ * Describes the message api.v1.RunControlEvent.
316
+ * Use `create(RunControlEventSchema)` to create a new message.
317
+ */
318
+ export const RunControlEventSchema = /*@__PURE__*/
319
+ messageDesc(file_api_v1_initiative, 42);
320
+
321
+ /**
322
+ * Describes the message api.v1.RunAccountEvent.
323
+ * Use `create(RunAccountEventSchema)` to create a new message.
324
+ */
325
+ export const RunAccountEventSchema = /*@__PURE__*/
326
+ messageDesc(file_api_v1_initiative, 43);
327
+
328
+ /**
329
+ * Describes the message api.v1.RunEventPayload.
330
+ * Use `create(RunEventPayloadSchema)` to create a new message.
331
+ */
332
+ export const RunEventPayloadSchema = /*@__PURE__*/
333
+ messageDesc(file_api_v1_initiative, 44);
334
+
335
+ /**
336
+ * Describes the message api.v1.RunEventInput.
337
+ * Use `create(RunEventInputSchema)` to create a new message.
338
+ */
339
+ export const RunEventInputSchema = /*@__PURE__*/
340
+ messageDesc(file_api_v1_initiative, 45);
341
+
342
+ /**
343
+ * Describes the message api.v1.RunEvent.
344
+ * Use `create(RunEventSchema)` to create a new message.
345
+ */
346
+ export const RunEventSchema = /*@__PURE__*/
347
+ messageDesc(file_api_v1_initiative, 46);
348
+
349
+ /**
350
+ * Describes the message api.v1.AppendRunEventsRequest.
351
+ * Use `create(AppendRunEventsRequestSchema)` to create a new message.
352
+ */
353
+ export const AppendRunEventsRequestSchema = /*@__PURE__*/
354
+ messageDesc(file_api_v1_initiative, 47);
355
+
356
+ /**
357
+ * Describes the message api.v1.AppendRunEventsResponse.
358
+ * Use `create(AppendRunEventsResponseSchema)` to create a new message.
359
+ */
360
+ export const AppendRunEventsResponseSchema = /*@__PURE__*/
361
+ messageDesc(file_api_v1_initiative, 48);
362
+
363
+ /**
364
+ * Describes the message api.v1.GetRunEventsRequest.
365
+ * Use `create(GetRunEventsRequestSchema)` to create a new message.
366
+ */
367
+ export const GetRunEventsRequestSchema = /*@__PURE__*/
368
+ messageDesc(file_api_v1_initiative, 49);
369
+
370
+ /**
371
+ * Describes the message api.v1.GetRunEventsResponse.
372
+ * Use `create(GetRunEventsResponseSchema)` to create a new message.
373
+ */
374
+ export const GetRunEventsResponseSchema = /*@__PURE__*/
375
+ messageDesc(file_api_v1_initiative, 50);
376
+
377
+ /**
378
+ * Describes the message api.v1.GetReadyTasksRequest.
379
+ * Use `create(GetReadyTasksRequestSchema)` to create a new message.
380
+ */
381
+ export const GetReadyTasksRequestSchema = /*@__PURE__*/
382
+ messageDesc(file_api_v1_initiative, 51);
383
+
384
+ /**
385
+ * Describes the message api.v1.GetReadyTasksResponse.
386
+ * Use `create(GetReadyTasksResponseSchema)` to create a new message.
387
+ */
388
+ export const GetReadyTasksResponseSchema = /*@__PURE__*/
389
+ messageDesc(file_api_v1_initiative, 52);
390
+
251
391
  /**
252
392
  * @generated from service api.v1.InitiativeService
253
393
  */
@@ -4,6 +4,7 @@
4
4
 
5
5
  import type { GenFile, GenMessage, GenService } from "@bufbuild/protobuf/codegenv1";
6
6
  import type { JsonObject, Message } from "@bufbuild/protobuf";
7
+ import type { RunGateEvent, RunVerdictEvent } from "./initiative_pb";
7
8
  import type { Timestamp } from "@bufbuild/protobuf/wkt";
8
9
  import type { Pagination } from "./pagination_pb";
9
10
 
@@ -72,6 +73,63 @@ export declare type ReadinessRequiredAction = Message<"api.v1.ReadinessRequiredA
72
73
  */
73
74
  export declare const ReadinessRequiredActionSchema: GenMessage<ReadinessRequiredAction>;
74
75
 
76
+ /**
77
+ * ReadinessHandOff is the Foreman verification evidence for a report whose pull request is a
78
+ * Hand-off (cli/CONTEXT.md): the Gate results and the Verdict read from the Run Record events of
79
+ * the Task the pull request is linked to. Absent when the pull request is not a Hand-off — no
80
+ * linked Task, or a linked Task with no Gate or Verdict event — in which case the report is
81
+ * exactly what it has always been. Derived at read time; nothing here is stored on the report.
82
+ *
83
+ * @generated from message api.v1.ReadinessHandOff
84
+ */
85
+ export declare type ReadinessHandOff = Message<"api.v1.ReadinessHandOff"> & {
86
+ /**
87
+ * @generated from field: uint32 task_id = 1;
88
+ */
89
+ taskId: number;
90
+
91
+ /**
92
+ * the Task's tracker key, e.g. "OPS-283"
93
+ *
94
+ * @generated from field: string task_identifier = 2;
95
+ */
96
+ taskIdentifier: string;
97
+
98
+ /**
99
+ * @generated from field: uint32 initiative_id = 3;
100
+ */
101
+ initiativeId: number;
102
+
103
+ /**
104
+ * The attempt the Gates below belong to: the latest one the Run Record has for the Task, read
105
+ * from the Gate Verification ids (`<identifier>-<attempt>-r<round>-<gate>`). 0 when no id parsed.
106
+ *
107
+ * @generated from field: int32 attempt = 4;
108
+ */
109
+ attempt: number;
110
+
111
+ /**
112
+ * One entry per Gate of that attempt's last round, in append order. Pass or fail is the
113
+ * verification's exit code, never a judgment.
114
+ *
115
+ * @generated from field: repeated api.v1.RunGateEvent gates = 5;
116
+ */
117
+ gates: RunGateEvent[];
118
+
119
+ /**
120
+ * The Verifier's latest structured result for the Task; absent when none was appended.
121
+ *
122
+ * @generated from field: optional api.v1.RunVerdictEvent verdict = 6;
123
+ */
124
+ verdict?: RunVerdictEvent;
125
+ };
126
+
127
+ /**
128
+ * Describes the message api.v1.ReadinessHandOff.
129
+ * Use `create(ReadinessHandOffSchema)` to create a new message.
130
+ */
131
+ export declare const ReadinessHandOffSchema: GenMessage<ReadinessHandOff>;
132
+
75
133
  /**
76
134
  * ReadinessReport is the per-(repository, PR, head SHA) production-readiness
77
135
  * assessment produced by the deterministic pipeline. Anchored to a repository,
@@ -198,6 +256,13 @@ export declare type ReadinessReport = Message<"api.v1.ReadinessReport"> & {
198
256
  * @generated from field: string base_branch = 20;
199
257
  */
200
258
  baseBranch: string;
259
+
260
+ /**
261
+ * Foreman verification evidence when this pull request is a Hand-off; absent otherwise.
262
+ *
263
+ * @generated from field: optional api.v1.ReadinessHandOff hand_off = 21;
264
+ */
265
+ handOff?: ReadinessHandOff;
201
266
  };
202
267
 
203
268
  /**
@@ -7,13 +7,14 @@ import { file_google_protobuf_struct, file_google_protobuf_timestamp } from "@bu
7
7
  import { file_google_api_annotations } from "../../google/api/annotations_pb";
8
8
  import { file_validate_validate } from "../../validate/validate_pb";
9
9
  import { file_api_v1_pagination } from "./pagination_pb";
10
+ import { file_api_v1_initiative } from "./initiative_pb";
10
11
  import { file_fk_foreign_key } from "../../fk/foreign_key_pb";
11
12
 
12
13
  /**
13
14
  * Describes the file api/v1/readiness.proto.
14
15
  */
15
16
  export const file_api_v1_readiness = /*@__PURE__*/
16
- fileDesc("ChZhcGkvdjEvcmVhZGluZXNzLnByb3RvEgZhcGkudjEiagoPUmVhZGluZXNzU2lnbmFsEgwKBGtpbmQYASABKAkSDwoHc3VtbWFyeRgCIAEoCRINCgVjbGFzcxgDIAEoCRIpCghldmlkZW5jZRgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiOgoXUmVhZGluZXNzUmVxdWlyZWRBY3Rpb24SDwoHc3VtbWFyeRgBIAEoCRIOCgZyZWFzb24YAiABKAkivgQKD1JlYWRpbmVzc1JlcG9ydBIKCgJpZBgBIAEoDRIdChVwcm9qZWN0X3JlcG9zaXRvcnlfaWQYAiABKA0SEAoIcHJvdmlkZXIYAyABKAkSEQoJcHJfbnVtYmVyGAQgASgFEhAKCGhlYWRfc2hhGAUgASgJEhIKCnJpc2tfbGV2ZWwYBiABKAkSDQoFcGhhc2UYByABKAkSGAoLY29tbWVudF91cmwYCCABKAlIAIgBARIoCgdzaWduYWxzGAkgAygLMhcuYXBpLnYxLlJlYWRpbmVzc1NpZ25hbBI5ChByZXF1aXJlZF9hY3Rpb25zGAogAygLMh8uYXBpLnYxLlJlYWRpbmVzc1JlcXVpcmVkQWN0aW9uEhwKFHBvbGljeV9zbmFwc2hvdF9qc29uGAsgASgJEi4KCmNyZWF0ZWRfYXQYDCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYDSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhwKFHJlcG9zaXRvcnlfZnVsbF9uYW1lGA4gASgJEhYKDnJlcG9zaXRvcnlfdXJsGA8gASgJEg4KBnByX3VybBgQIAEoCRIXCg9oYXNfbGlua2VkX3Rhc2sYESABKAgSEAoIcHJfdGl0bGUYEiABKAkSEwoLaGVhZF9icmFuY2gYEyABKAkSEwoLYmFzZV9icmFuY2gYFCABKAlCDgoMX2NvbW1lbnRfdXJsItIBChtMaXN0UmVhZGluZXNzUmVwb3J0c1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIwCgpwYWdpbmF0aW9uGAIgASgLMhIuYXBpLnYxLlBhZ2luYXRpb25CCPpCBYoBAhABEiIKFXByb2plY3RfcmVwb3NpdG9yeV9pZBgDIAEoDUgAiAEBEhcKCnJpc2tfbGV2ZWwYBCABKAlIAYgBAUIYChZfcHJvamVjdF9yZXBvc2l0b3J5X2lkQg0KC19yaXNrX2xldmVsInAKHExpc3RSZWFkaW5lc3NSZXBvcnRzUmVzcG9uc2USKAoHcmVwb3J0cxgBIAMoCzIXLmFwaS52MS5SZWFkaW5lc3NSZXBvcnQSJgoKcGFnaW5hdGlvbhgCIAEoCzISLmFwaS52MS5QYWdpbmF0aW9uIjAKGUdldFJlYWRpbmVzc1JlcG9ydFJlcXVlc3QSEwoCaWQYASABKA1CB/pCBCoCKAEiRQoaR2V0UmVhZGluZXNzUmVwb3J0UmVzcG9uc2USJwoGcmVwb3J0GAEgASgLMhcuYXBpLnYxLlJlYWRpbmVzc1JlcG9ydCLHBQoUUmVhZGluZXNzUG9saWN5SW5wdXQSGQoMbWVkaXVtX2ZpbGVzGAEgASgFSACIAQESFwoKaGlnaF9maWxlcxgCIAEoBUgBiAEBEhsKDmNyaXRpY2FsX2ZpbGVzGAMgASgFSAKIAQESGQoMbWVkaXVtX2xpbmVzGAQgASgFSAOIAQESFwoKaGlnaF9saW5lcxgFIAEoBUgEiAEBEhsKDmNyaXRpY2FsX2xpbmVzGAYgASgFSAWIAQESFwoPaGlnaF9yaXNrX3BhdGhzGAcgAygJEiAKGHJlcXVpcmVfZmVhdHVyZV9mbGFnX2ZvchgIIAMoCRIhChRyZXF1aXJlX293bmVyX3JldmlldxgJIAEoCEgGiAEBEjAKI3JlcXVpcmVfcm9sbGJhY2tfcGxhbl9mb3JfaGlnaF9yaXNrGAogASgISAeIAQESMAojcmVxdWlyZV9vYnNlcnZhYmlsaXR5X2Zvcl9oaWdoX3Jpc2sYCyABKAhICIgBARIgChNibG9ja19jcml0aWNhbF9yaXNrGAwgASgISAmIAQESJQoYYWR2aXNvcnlfZm9yX21lZGl1bV9yaXNrGA0gASgISAqIAQFCDwoNX21lZGl1bV9maWxlc0INCgtfaGlnaF9maWxlc0IRCg9fY3JpdGljYWxfZmlsZXNCDwoNX21lZGl1bV9saW5lc0INCgtfaGlnaF9saW5lc0IRCg9fY3JpdGljYWxfbGluZXNCFwoVX3JlcXVpcmVfb3duZXJfcmV2aWV3QiYKJF9yZXF1aXJlX3JvbGxiYWNrX3BsYW5fZm9yX2hpZ2hfcmlza0ImCiRfcmVxdWlyZV9vYnNlcnZhYmlsaXR5X2Zvcl9oaWdoX3Jpc2tCFgoUX2Jsb2NrX2NyaXRpY2FsX3Jpc2tCGwoZX2Fkdmlzb3J5X2Zvcl9tZWRpdW1fcmlzayIlCiNHZXRSZWFkaW5lc3NPcmdEZWZhdWx0UG9saWN5UmVxdWVzdCJoCiRHZXRSZWFkaW5lc3NPcmdEZWZhdWx0UG9saWN5UmVzcG9uc2USLAoGcG9saWN5GAEgASgLMhwuYXBpLnYxLlJlYWRpbmVzc1BvbGljeUlucHV0EhIKCmNvbmZpZ3VyZWQYAiABKAgiYAomVXBkYXRlUmVhZGluZXNzT3JnRGVmYXVsdFBvbGljeVJlcXVlc3QSNgoGcG9saWN5GAEgASgLMhwuYXBpLnYxLlJlYWRpbmVzc1BvbGljeUlucHV0Qgj6QgWKAQIQASJXCidVcGRhdGVSZWFkaW5lc3NPcmdEZWZhdWx0UG9saWN5UmVzcG9uc2USLAoGcG9saWN5GAEgASgLMhwuYXBpLnYxLlJlYWRpbmVzc1BvbGljeUlucHV0IpYBChNSZWFkaW5lc3NSZXBvc2l0b3J5Eh0KFXByb2plY3RfcmVwb3NpdG9yeV9pZBgBIAEoDRIcChRyZXBvc2l0b3J5X2Z1bGxfbmFtZRgCIAEoCRIQCghwcm92aWRlchgDIAEoCRIYChBlbmFibGVfcmVhZGluZXNzGAQgASgIEhYKDnJlcG9zaXRvcnlfdXJsGAUgASgJIj8KIExpc3RSZWFkaW5lc3NSZXBvc2l0b3JpZXNSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAEiVgohTGlzdFJlYWRpbmVzc1JlcG9zaXRvcmllc1Jlc3BvbnNlEjEKDHJlcG9zaXRvcmllcxgBIAMoCzIbLmFwaS52MS5SZWFkaW5lc3NSZXBvc2l0b3J5IoEBCh1TZXRSZXBvc2l0b3J5UmVhZGluZXNzUmVxdWVzdBInCgpwcm9qZWN0X2lkGAEgASgNQhP6QgQqAigBgrUYCHByb2plY3RzEiYKFXByb2plY3RfcmVwb3NpdG9yeV9pZBgCIAEoDUIH+kIEKgIoARIPCgdlbmFibGVkGAMgASgIIlEKHlNldFJlcG9zaXRvcnlSZWFkaW5lc3NSZXNwb25zZRIvCgpyZXBvc2l0b3J5GAEgASgLMhsuYXBpLnYxLlJlYWRpbmVzc1JlcG9zaXRvcnkiZgofUmVidWlsZFJlcG9zaXRvcnlQcm9maWxlUmVxdWVzdBIbCgpwcm9qZWN0X2lkGAEgASgNQgf6QgQqAigBEiYKFXByb2plY3RfcmVwb3NpdG9yeV9pZBgCIAEoDUIH+kIEKgIoASIiCiBSZWJ1aWxkUmVwb3NpdG9yeVByb2ZpbGVSZXNwb25zZSLAAQoRUmVwb3NpdG9yeVByb2ZpbGUSHQoVcHJvamVjdF9yZXBvc2l0b3J5X2lkGAEgASgNEhEKCWxhbmd1YWdlcxgCIAMoCRIUCgxjb250cmlidXRvcnMYAyADKAkSDgoGb3duZXJzGAQgAygJEg8KB3N1bW1hcnkYBSABKAkSEgoKY29uZmlndXJlZBgGIAEoCBIuCgp1cGRhdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJiChtHZXRSZXBvc2l0b3J5UHJvZmlsZVJlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARImChVwcm9qZWN0X3JlcG9zaXRvcnlfaWQYAiABKA1CB/pCBCoCKAEiSgocR2V0UmVwb3NpdG9yeVByb2ZpbGVSZXNwb25zZRIqCgdwcm9maWxlGAEgASgLMhkuYXBpLnYxLlJlcG9zaXRvcnlQcm9maWxlIrIBChdSZWFkaW5lc3NBbmFseXNpc1N0YXR1cxISCgpwcm9qZWN0X2lkGAEgASgNEh0KFXByb2plY3RfcmVwb3NpdG9yeV9pZBgCIAEoDRIRCglwcl9udW1iZXIYAyABKAUSEAoIaGVhZF9zaGEYBCABKAkSDgoGc3RhdHVzGAUgASgJEi8KC29jY3VycmVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCI9Ch5TdHJlYW1SZWFkaW5lc3NBbmFseXNpc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoASKWAQoZR2V0UmVhZGluZXNzVHJlbmRzUmVxdWVzdBIbCgpwcm9qZWN0X2lkGAEgASgNQgf6QgQqAigBEiIKFXByb2plY3RfcmVwb3NpdG9yeV9pZBgCIAEoDUgAiAEBEgwKBGRheXMYAyABKAUSEAoIZ3JvdXBfYnkYBCABKAlCGAoWX3Byb2plY3RfcmVwb3NpdG9yeV9pZCJbCg5SaXNrVHJlbmRQb2ludBIMCgRkYXRlGAEgASgJEgsKA2xvdxgCIAEoBRIOCgZtZWRpdW0YAyABKAUSDAoEaGlnaBgEIAEoBRIQCghjcml0aWNhbBgFIAEoBSJEChpHZXRSZWFkaW5lc3NUcmVuZHNSZXNwb25zZRImCgZwb2ludHMYASADKAsyFi5hcGkudjEuUmlza1RyZW5kUG9pbnQilQEKG0dldFJlYWRpbmVzc0hvdHNwb3RzUmVxdWVzdBIbCgpwcm9qZWN0X2lkGAEgASgNQgf6QgQqAigBEiIKFXByb2plY3RfcmVwb3NpdG9yeV9pZBgCIAEoDUgAiAEBEgwKBGRheXMYAyABKAUSDQoFbGltaXQYBCABKAVCGAoWX3Byb2plY3RfcmVwb3NpdG9yeV9pZCJPChBSZWFkaW5lc3NIb3RzcG90EgwKBHBhdGgYASABKAkSDQoFdG90YWwYAiABKAUSDAoEaGlnaBgDIAEoBRIQCghjcml0aWNhbBgEIAEoBSJKChxHZXRSZWFkaW5lc3NIb3RzcG90c1Jlc3BvbnNlEioKCGhvdHNwb3RzGAEgAygLMhguYXBpLnYxLlJlYWRpbmVzc0hvdHNwb3QygA8KEFJlYWRpbmVzc1NlcnZpY2USmgEKFExpc3RSZWFkaW5lc3NSZXBvcnRzEiMuYXBpLnYxLkxpc3RSZWFkaW5lc3NSZXBvcnRzUmVxdWVzdBokLmFwaS52MS5MaXN0UmVhZGluZXNzUmVwb3J0c1Jlc3BvbnNlIjeC0+STAjESLy9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3JlYWRpbmVzcy1yZXBvcnRzEoMBChJHZXRSZWFkaW5lc3NSZXBvcnQSIS5hcGkudjEuR2V0UmVhZGluZXNzUmVwb3J0UmVxdWVzdBoiLmFwaS52MS5HZXRSZWFkaW5lc3NSZXBvcnRSZXNwb25zZSImgtPkkwIgEh4vYXBpL3YxL3JlYWRpbmVzcy1yZXBvcnRzL3tpZH0SpwEKHEdldFJlYWRpbmVzc09yZ0RlZmF1bHRQb2xpY3kSKy5hcGkudjEuR2V0UmVhZGluZXNzT3JnRGVmYXVsdFBvbGljeVJlcXVlc3QaLC5hcGkudjEuR2V0UmVhZGluZXNzT3JnRGVmYXVsdFBvbGljeVJlc3BvbnNlIiyC0+STAiYSJC9hcGkvdjEvcmVhZGluZXNzL29yZy1kZWZhdWx0LXBvbGljeRKzAQofVXBkYXRlUmVhZGluZXNzT3JnRGVmYXVsdFBvbGljeRIuLmFwaS52MS5VcGRhdGVSZWFkaW5lc3NPcmdEZWZhdWx0UG9saWN5UmVxdWVzdBovLmFwaS52MS5VcGRhdGVSZWFkaW5lc3NPcmdEZWZhdWx0UG9saWN5UmVzcG9uc2UiL4LT5JMCKToBKhokL2FwaS92MS9yZWFkaW5lc3Mvb3JnLWRlZmF1bHQtcG9saWN5Eq4BChlMaXN0UmVhZGluZXNzUmVwb3NpdG9yaWVzEiguYXBpLnYxLkxpc3RSZWFkaW5lc3NSZXBvc2l0b3JpZXNSZXF1ZXN0GikuYXBpLnYxLkxpc3RSZWFkaW5lc3NSZXBvc2l0b3JpZXNSZXNwb25zZSI8gtPkkwI2EjQvYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS9yZWFkaW5lc3MvcmVwb3NpdG9yaWVzEsABChZTZXRSZXBvc2l0b3J5UmVhZGluZXNzEiUuYXBpLnYxLlNldFJlcG9zaXRvcnlSZWFkaW5lc3NSZXF1ZXN0GiYuYXBpLnYxLlNldFJlcG9zaXRvcnlSZWFkaW5lc3NSZXNwb25zZSJXgtPkkwJROgEqGkwvYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS9yZWFkaW5lc3MvcmVwb3NpdG9yaWVzL3twcm9qZWN0X3JlcG9zaXRvcnlfaWR9Er8BChRHZXRSZXBvc2l0b3J5UHJvZmlsZRIjLmFwaS52MS5HZXRSZXBvc2l0b3J5UHJvZmlsZVJlcXVlc3QaJC5hcGkudjEuR2V0UmVwb3NpdG9yeVByb2ZpbGVSZXNwb25zZSJcgtPkkwJWElQvYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS9yZWFkaW5lc3MvcmVwb3NpdG9yaWVzL3twcm9qZWN0X3JlcG9zaXRvcnlfaWR9L3Byb2ZpbGUS1gEKGFJlYnVpbGRSZXBvc2l0b3J5UHJvZmlsZRInLmFwaS52MS5SZWJ1aWxkUmVwb3NpdG9yeVByb2ZpbGVSZXF1ZXN0GiguYXBpLnYxLlJlYnVpbGRSZXBvc2l0b3J5UHJvZmlsZVJlc3BvbnNlImeC0+STAmE6ASoiXC9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3JlYWRpbmVzcy9yZXBvc2l0b3JpZXMve3Byb2plY3RfcmVwb3NpdG9yeV9pZH0vcHJvZmlsZS9yZWJ1aWxkEqUBChdTdHJlYW1SZWFkaW5lc3NBbmFseXNpcxImLmFwaS52MS5TdHJlYW1SZWFkaW5lc3NBbmFseXNpc1JlcXVlc3QaHy5hcGkudjEuUmVhZGluZXNzQW5hbHlzaXNTdGF0dXMiP4LT5JMCORI3L2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vcmVhZGluZXNzL2FuYWx5c2lzLXN0cmVhbTABEpMBChJHZXRSZWFkaW5lc3NUcmVuZHMSIS5hcGkudjEuR2V0UmVhZGluZXNzVHJlbmRzUmVxdWVzdBoiLmFwaS52MS5HZXRSZWFkaW5lc3NUcmVuZHNSZXNwb25zZSI2gtPkkwIwEi4vYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS9yZWFkaW5lc3MvdHJlbmRzEpsBChRHZXRSZWFkaW5lc3NIb3RzcG90cxIjLmFwaS52MS5HZXRSZWFkaW5lc3NIb3RzcG90c1JlcXVlc3QaJC5hcGkudjEuR2V0UmVhZGluZXNzSG90c3BvdHNSZXNwb25zZSI4gtPkkwIyEjAvYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS9yZWFkaW5lc3MvaG90c3BvdHNCcwoKY29tLmFwaS52MUIOUmVhZGluZXNzUHJvdG9QAVocb3BzZWUvYmFja2VuZC9nZW4vYXBpL3YxO2dlbqICA0FYWKoCBkFwaS5WMcoCBkFwaVxWMeICEkFwaVxWMVxHUEJNZXRhZGF0YeoCB0FwaTo6VjFiBnByb3RvMw", [file_google_protobuf_timestamp, file_google_protobuf_struct, file_google_api_annotations, file_validate_validate, file_api_v1_pagination, file_fk_foreign_key]);
17
+ fileDesc("ChZhcGkvdjEvcmVhZGluZXNzLnByb3RvEgZhcGkudjEiagoPUmVhZGluZXNzU2lnbmFsEgwKBGtpbmQYASABKAkSDwoHc3VtbWFyeRgCIAEoCRINCgVjbGFzcxgDIAEoCRIpCghldmlkZW5jZRgEIAEoCzIXLmdvb2dsZS5wcm90b2J1Zi5TdHJ1Y3QiOgoXUmVhZGluZXNzUmVxdWlyZWRBY3Rpb24SDwoHc3VtbWFyeRgBIAEoCRIOCgZyZWFzb24YAiABKAkixAEKEFJlYWRpbmVzc0hhbmRPZmYSDwoHdGFza19pZBgBIAEoDRIXCg90YXNrX2lkZW50aWZpZXIYAiABKAkSFQoNaW5pdGlhdGl2ZV9pZBgDIAEoDRIPCgdhdHRlbXB0GAQgASgFEiMKBWdhdGVzGAUgAygLMhQuYXBpLnYxLlJ1bkdhdGVFdmVudBItCgd2ZXJkaWN0GAYgASgLMhcuYXBpLnYxLlJ1blZlcmRpY3RFdmVudEgAiAEBQgoKCF92ZXJkaWN0IvwECg9SZWFkaW5lc3NSZXBvcnQSCgoCaWQYASABKA0SHQoVcHJvamVjdF9yZXBvc2l0b3J5X2lkGAIgASgNEhAKCHByb3ZpZGVyGAMgASgJEhEKCXByX251bWJlchgEIAEoBRIQCghoZWFkX3NoYRgFIAEoCRISCgpyaXNrX2xldmVsGAYgASgJEg0KBXBoYXNlGAcgASgJEhgKC2NvbW1lbnRfdXJsGAggASgJSACIAQESKAoHc2lnbmFscxgJIAMoCzIXLmFwaS52MS5SZWFkaW5lc3NTaWduYWwSOQoQcmVxdWlyZWRfYWN0aW9ucxgKIAMoCzIfLmFwaS52MS5SZWFkaW5lc3NSZXF1aXJlZEFjdGlvbhIcChRwb2xpY3lfc25hcHNob3RfanNvbhgLIAEoCRIuCgpjcmVhdGVkX2F0GAwgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIuCgp1cGRhdGVkX2F0GA0gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIcChRyZXBvc2l0b3J5X2Z1bGxfbmFtZRgOIAEoCRIWCg5yZXBvc2l0b3J5X3VybBgPIAEoCRIOCgZwcl91cmwYECABKAkSFwoPaGFzX2xpbmtlZF90YXNrGBEgASgIEhAKCHByX3RpdGxlGBIgASgJEhMKC2hlYWRfYnJhbmNoGBMgASgJEhMKC2Jhc2VfYnJhbmNoGBQgASgJEi8KCGhhbmRfb2ZmGBUgASgLMhguYXBpLnYxLlJlYWRpbmVzc0hhbmRPZmZIAYgBAUIOCgxfY29tbWVudF91cmxCCwoJX2hhbmRfb2ZmItIBChtMaXN0UmVhZGluZXNzUmVwb3J0c1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARIwCgpwYWdpbmF0aW9uGAIgASgLMhIuYXBpLnYxLlBhZ2luYXRpb25CCPpCBYoBAhABEiIKFXByb2plY3RfcmVwb3NpdG9yeV9pZBgDIAEoDUgAiAEBEhcKCnJpc2tfbGV2ZWwYBCABKAlIAYgBAUIYChZfcHJvamVjdF9yZXBvc2l0b3J5X2lkQg0KC19yaXNrX2xldmVsInAKHExpc3RSZWFkaW5lc3NSZXBvcnRzUmVzcG9uc2USKAoHcmVwb3J0cxgBIAMoCzIXLmFwaS52MS5SZWFkaW5lc3NSZXBvcnQSJgoKcGFnaW5hdGlvbhgCIAEoCzISLmFwaS52MS5QYWdpbmF0aW9uIjAKGUdldFJlYWRpbmVzc1JlcG9ydFJlcXVlc3QSEwoCaWQYASABKA1CB/pCBCoCKAEiRQoaR2V0UmVhZGluZXNzUmVwb3J0UmVzcG9uc2USJwoGcmVwb3J0GAEgASgLMhcuYXBpLnYxLlJlYWRpbmVzc1JlcG9ydCLHBQoUUmVhZGluZXNzUG9saWN5SW5wdXQSGQoMbWVkaXVtX2ZpbGVzGAEgASgFSACIAQESFwoKaGlnaF9maWxlcxgCIAEoBUgBiAEBEhsKDmNyaXRpY2FsX2ZpbGVzGAMgASgFSAKIAQESGQoMbWVkaXVtX2xpbmVzGAQgASgFSAOIAQESFwoKaGlnaF9saW5lcxgFIAEoBUgEiAEBEhsKDmNyaXRpY2FsX2xpbmVzGAYgASgFSAWIAQESFwoPaGlnaF9yaXNrX3BhdGhzGAcgAygJEiAKGHJlcXVpcmVfZmVhdHVyZV9mbGFnX2ZvchgIIAMoCRIhChRyZXF1aXJlX293bmVyX3JldmlldxgJIAEoCEgGiAEBEjAKI3JlcXVpcmVfcm9sbGJhY2tfcGxhbl9mb3JfaGlnaF9yaXNrGAogASgISAeIAQESMAojcmVxdWlyZV9vYnNlcnZhYmlsaXR5X2Zvcl9oaWdoX3Jpc2sYCyABKAhICIgBARIgChNibG9ja19jcml0aWNhbF9yaXNrGAwgASgISAmIAQESJQoYYWR2aXNvcnlfZm9yX21lZGl1bV9yaXNrGA0gASgISAqIAQFCDwoNX21lZGl1bV9maWxlc0INCgtfaGlnaF9maWxlc0IRCg9fY3JpdGljYWxfZmlsZXNCDwoNX21lZGl1bV9saW5lc0INCgtfaGlnaF9saW5lc0IRCg9fY3JpdGljYWxfbGluZXNCFwoVX3JlcXVpcmVfb3duZXJfcmV2aWV3QiYKJF9yZXF1aXJlX3JvbGxiYWNrX3BsYW5fZm9yX2hpZ2hfcmlza0ImCiRfcmVxdWlyZV9vYnNlcnZhYmlsaXR5X2Zvcl9oaWdoX3Jpc2tCFgoUX2Jsb2NrX2NyaXRpY2FsX3Jpc2tCGwoZX2Fkdmlzb3J5X2Zvcl9tZWRpdW1fcmlzayIlCiNHZXRSZWFkaW5lc3NPcmdEZWZhdWx0UG9saWN5UmVxdWVzdCJoCiRHZXRSZWFkaW5lc3NPcmdEZWZhdWx0UG9saWN5UmVzcG9uc2USLAoGcG9saWN5GAEgASgLMhwuYXBpLnYxLlJlYWRpbmVzc1BvbGljeUlucHV0EhIKCmNvbmZpZ3VyZWQYAiABKAgiYAomVXBkYXRlUmVhZGluZXNzT3JnRGVmYXVsdFBvbGljeVJlcXVlc3QSNgoGcG9saWN5GAEgASgLMhwuYXBpLnYxLlJlYWRpbmVzc1BvbGljeUlucHV0Qgj6QgWKAQIQASJXCidVcGRhdGVSZWFkaW5lc3NPcmdEZWZhdWx0UG9saWN5UmVzcG9uc2USLAoGcG9saWN5GAEgASgLMhwuYXBpLnYxLlJlYWRpbmVzc1BvbGljeUlucHV0IpYBChNSZWFkaW5lc3NSZXBvc2l0b3J5Eh0KFXByb2plY3RfcmVwb3NpdG9yeV9pZBgBIAEoDRIcChRyZXBvc2l0b3J5X2Z1bGxfbmFtZRgCIAEoCRIQCghwcm92aWRlchgDIAEoCRIYChBlbmFibGVfcmVhZGluZXNzGAQgASgIEhYKDnJlcG9zaXRvcnlfdXJsGAUgASgJIj8KIExpc3RSZWFkaW5lc3NSZXBvc2l0b3JpZXNSZXF1ZXN0EhsKCnByb2plY3RfaWQYASABKA1CB/pCBCoCKAEiVgohTGlzdFJlYWRpbmVzc1JlcG9zaXRvcmllc1Jlc3BvbnNlEjEKDHJlcG9zaXRvcmllcxgBIAMoCzIbLmFwaS52MS5SZWFkaW5lc3NSZXBvc2l0b3J5IoEBCh1TZXRSZXBvc2l0b3J5UmVhZGluZXNzUmVxdWVzdBInCgpwcm9qZWN0X2lkGAEgASgNQhP6QgQqAigBgrUYCHByb2plY3RzEiYKFXByb2plY3RfcmVwb3NpdG9yeV9pZBgCIAEoDUIH+kIEKgIoARIPCgdlbmFibGVkGAMgASgIIlEKHlNldFJlcG9zaXRvcnlSZWFkaW5lc3NSZXNwb25zZRIvCgpyZXBvc2l0b3J5GAEgASgLMhsuYXBpLnYxLlJlYWRpbmVzc1JlcG9zaXRvcnkiZgofUmVidWlsZFJlcG9zaXRvcnlQcm9maWxlUmVxdWVzdBIbCgpwcm9qZWN0X2lkGAEgASgNQgf6QgQqAigBEiYKFXByb2plY3RfcmVwb3NpdG9yeV9pZBgCIAEoDUIH+kIEKgIoASIiCiBSZWJ1aWxkUmVwb3NpdG9yeVByb2ZpbGVSZXNwb25zZSLAAQoRUmVwb3NpdG9yeVByb2ZpbGUSHQoVcHJvamVjdF9yZXBvc2l0b3J5X2lkGAEgASgNEhEKCWxhbmd1YWdlcxgCIAMoCRIUCgxjb250cmlidXRvcnMYAyADKAkSDgoGb3duZXJzGAQgAygJEg8KB3N1bW1hcnkYBSABKAkSEgoKY29uZmlndXJlZBgGIAEoCBIuCgp1cGRhdGVkX2F0GAcgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJiChtHZXRSZXBvc2l0b3J5UHJvZmlsZVJlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoARImChVwcm9qZWN0X3JlcG9zaXRvcnlfaWQYAiABKA1CB/pCBCoCKAEiSgocR2V0UmVwb3NpdG9yeVByb2ZpbGVSZXNwb25zZRIqCgdwcm9maWxlGAEgASgLMhkuYXBpLnYxLlJlcG9zaXRvcnlQcm9maWxlIrIBChdSZWFkaW5lc3NBbmFseXNpc1N0YXR1cxISCgpwcm9qZWN0X2lkGAEgASgNEh0KFXByb2plY3RfcmVwb3NpdG9yeV9pZBgCIAEoDRIRCglwcl9udW1iZXIYAyABKAUSEAoIaGVhZF9zaGEYBCABKAkSDgoGc3RhdHVzGAUgASgJEi8KC29jY3VycmVkX2F0GAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCI9Ch5TdHJlYW1SZWFkaW5lc3NBbmFseXNpc1JlcXVlc3QSGwoKcHJvamVjdF9pZBgBIAEoDUIH+kIEKgIoASKWAQoZR2V0UmVhZGluZXNzVHJlbmRzUmVxdWVzdBIbCgpwcm9qZWN0X2lkGAEgASgNQgf6QgQqAigBEiIKFXByb2plY3RfcmVwb3NpdG9yeV9pZBgCIAEoDUgAiAEBEgwKBGRheXMYAyABKAUSEAoIZ3JvdXBfYnkYBCABKAlCGAoWX3Byb2plY3RfcmVwb3NpdG9yeV9pZCJbCg5SaXNrVHJlbmRQb2ludBIMCgRkYXRlGAEgASgJEgsKA2xvdxgCIAEoBRIOCgZtZWRpdW0YAyABKAUSDAoEaGlnaBgEIAEoBRIQCghjcml0aWNhbBgFIAEoBSJEChpHZXRSZWFkaW5lc3NUcmVuZHNSZXNwb25zZRImCgZwb2ludHMYASADKAsyFi5hcGkudjEuUmlza1RyZW5kUG9pbnQilQEKG0dldFJlYWRpbmVzc0hvdHNwb3RzUmVxdWVzdBIbCgpwcm9qZWN0X2lkGAEgASgNQgf6QgQqAigBEiIKFXByb2plY3RfcmVwb3NpdG9yeV9pZBgCIAEoDUgAiAEBEgwKBGRheXMYAyABKAUSDQoFbGltaXQYBCABKAVCGAoWX3Byb2plY3RfcmVwb3NpdG9yeV9pZCJPChBSZWFkaW5lc3NIb3RzcG90EgwKBHBhdGgYASABKAkSDQoFdG90YWwYAiABKAUSDAoEaGlnaBgDIAEoBRIQCghjcml0aWNhbBgEIAEoBSJKChxHZXRSZWFkaW5lc3NIb3RzcG90c1Jlc3BvbnNlEioKCGhvdHNwb3RzGAEgAygLMhguYXBpLnYxLlJlYWRpbmVzc0hvdHNwb3QygA8KEFJlYWRpbmVzc1NlcnZpY2USmgEKFExpc3RSZWFkaW5lc3NSZXBvcnRzEiMuYXBpLnYxLkxpc3RSZWFkaW5lc3NSZXBvcnRzUmVxdWVzdBokLmFwaS52MS5MaXN0UmVhZGluZXNzUmVwb3J0c1Jlc3BvbnNlIjeC0+STAjESLy9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3JlYWRpbmVzcy1yZXBvcnRzEoMBChJHZXRSZWFkaW5lc3NSZXBvcnQSIS5hcGkudjEuR2V0UmVhZGluZXNzUmVwb3J0UmVxdWVzdBoiLmFwaS52MS5HZXRSZWFkaW5lc3NSZXBvcnRSZXNwb25zZSImgtPkkwIgEh4vYXBpL3YxL3JlYWRpbmVzcy1yZXBvcnRzL3tpZH0SpwEKHEdldFJlYWRpbmVzc09yZ0RlZmF1bHRQb2xpY3kSKy5hcGkudjEuR2V0UmVhZGluZXNzT3JnRGVmYXVsdFBvbGljeVJlcXVlc3QaLC5hcGkudjEuR2V0UmVhZGluZXNzT3JnRGVmYXVsdFBvbGljeVJlc3BvbnNlIiyC0+STAiYSJC9hcGkvdjEvcmVhZGluZXNzL29yZy1kZWZhdWx0LXBvbGljeRKzAQofVXBkYXRlUmVhZGluZXNzT3JnRGVmYXVsdFBvbGljeRIuLmFwaS52MS5VcGRhdGVSZWFkaW5lc3NPcmdEZWZhdWx0UG9saWN5UmVxdWVzdBovLmFwaS52MS5VcGRhdGVSZWFkaW5lc3NPcmdEZWZhdWx0UG9saWN5UmVzcG9uc2UiL4LT5JMCKToBKhokL2FwaS92MS9yZWFkaW5lc3Mvb3JnLWRlZmF1bHQtcG9saWN5Eq4BChlMaXN0UmVhZGluZXNzUmVwb3NpdG9yaWVzEiguYXBpLnYxLkxpc3RSZWFkaW5lc3NSZXBvc2l0b3JpZXNSZXF1ZXN0GikuYXBpLnYxLkxpc3RSZWFkaW5lc3NSZXBvc2l0b3JpZXNSZXNwb25zZSI8gtPkkwI2EjQvYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS9yZWFkaW5lc3MvcmVwb3NpdG9yaWVzEsABChZTZXRSZXBvc2l0b3J5UmVhZGluZXNzEiUuYXBpLnYxLlNldFJlcG9zaXRvcnlSZWFkaW5lc3NSZXF1ZXN0GiYuYXBpLnYxLlNldFJlcG9zaXRvcnlSZWFkaW5lc3NSZXNwb25zZSJXgtPkkwJROgEqGkwvYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS9yZWFkaW5lc3MvcmVwb3NpdG9yaWVzL3twcm9qZWN0X3JlcG9zaXRvcnlfaWR9Er8BChRHZXRSZXBvc2l0b3J5UHJvZmlsZRIjLmFwaS52MS5HZXRSZXBvc2l0b3J5UHJvZmlsZVJlcXVlc3QaJC5hcGkudjEuR2V0UmVwb3NpdG9yeVByb2ZpbGVSZXNwb25zZSJcgtPkkwJWElQvYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS9yZWFkaW5lc3MvcmVwb3NpdG9yaWVzL3twcm9qZWN0X3JlcG9zaXRvcnlfaWR9L3Byb2ZpbGUS1gEKGFJlYnVpbGRSZXBvc2l0b3J5UHJvZmlsZRInLmFwaS52MS5SZWJ1aWxkUmVwb3NpdG9yeVByb2ZpbGVSZXF1ZXN0GiguYXBpLnYxLlJlYnVpbGRSZXBvc2l0b3J5UHJvZmlsZVJlc3BvbnNlImeC0+STAmE6ASoiXC9hcGkvdjEvcHJvamVjdHMve3Byb2plY3RfaWR9L3JlYWRpbmVzcy9yZXBvc2l0b3JpZXMve3Byb2plY3RfcmVwb3NpdG9yeV9pZH0vcHJvZmlsZS9yZWJ1aWxkEqUBChdTdHJlYW1SZWFkaW5lc3NBbmFseXNpcxImLmFwaS52MS5TdHJlYW1SZWFkaW5lc3NBbmFseXNpc1JlcXVlc3QaHy5hcGkudjEuUmVhZGluZXNzQW5hbHlzaXNTdGF0dXMiP4LT5JMCORI3L2FwaS92MS9wcm9qZWN0cy97cHJvamVjdF9pZH0vcmVhZGluZXNzL2FuYWx5c2lzLXN0cmVhbTABEpMBChJHZXRSZWFkaW5lc3NUcmVuZHMSIS5hcGkudjEuR2V0UmVhZGluZXNzVHJlbmRzUmVxdWVzdBoiLmFwaS52MS5HZXRSZWFkaW5lc3NUcmVuZHNSZXNwb25zZSI2gtPkkwIwEi4vYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS9yZWFkaW5lc3MvdHJlbmRzEpsBChRHZXRSZWFkaW5lc3NIb3RzcG90cxIjLmFwaS52MS5HZXRSZWFkaW5lc3NIb3RzcG90c1JlcXVlc3QaJC5hcGkudjEuR2V0UmVhZGluZXNzSG90c3BvdHNSZXNwb25zZSI4gtPkkwIyEjAvYXBpL3YxL3Byb2plY3RzL3twcm9qZWN0X2lkfS9yZWFkaW5lc3MvaG90c3BvdHNCcwoKY29tLmFwaS52MUIOUmVhZGluZXNzUHJvdG9QAVocb3BzZWUvYmFja2VuZC9nZW4vYXBpL3YxO2dlbqICA0FYWKoCBkFwaS5WMcoCBkFwaVxWMeICEkFwaVxWMVxHUEJNZXRhZGF0YeoCB0FwaTo6VjFiBnByb3RvMw", [file_google_protobuf_timestamp, file_google_protobuf_struct, file_google_api_annotations, file_validate_validate, file_api_v1_pagination, file_api_v1_initiative, file_fk_foreign_key]);
17
18
 
18
19
  /**
19
20
  * Describes the message api.v1.ReadinessSignal.
@@ -29,201 +30,208 @@ export const ReadinessSignalSchema = /*@__PURE__*/
29
30
  export const ReadinessRequiredActionSchema = /*@__PURE__*/
30
31
  messageDesc(file_api_v1_readiness, 1);
31
32
 
33
+ /**
34
+ * Describes the message api.v1.ReadinessHandOff.
35
+ * Use `create(ReadinessHandOffSchema)` to create a new message.
36
+ */
37
+ export const ReadinessHandOffSchema = /*@__PURE__*/
38
+ messageDesc(file_api_v1_readiness, 2);
39
+
32
40
  /**
33
41
  * Describes the message api.v1.ReadinessReport.
34
42
  * Use `create(ReadinessReportSchema)` to create a new message.
35
43
  */
36
44
  export const ReadinessReportSchema = /*@__PURE__*/
37
- messageDesc(file_api_v1_readiness, 2);
45
+ messageDesc(file_api_v1_readiness, 3);
38
46
 
39
47
  /**
40
48
  * Describes the message api.v1.ListReadinessReportsRequest.
41
49
  * Use `create(ListReadinessReportsRequestSchema)` to create a new message.
42
50
  */
43
51
  export const ListReadinessReportsRequestSchema = /*@__PURE__*/
44
- messageDesc(file_api_v1_readiness, 3);
52
+ messageDesc(file_api_v1_readiness, 4);
45
53
 
46
54
  /**
47
55
  * Describes the message api.v1.ListReadinessReportsResponse.
48
56
  * Use `create(ListReadinessReportsResponseSchema)` to create a new message.
49
57
  */
50
58
  export const ListReadinessReportsResponseSchema = /*@__PURE__*/
51
- messageDesc(file_api_v1_readiness, 4);
59
+ messageDesc(file_api_v1_readiness, 5);
52
60
 
53
61
  /**
54
62
  * Describes the message api.v1.GetReadinessReportRequest.
55
63
  * Use `create(GetReadinessReportRequestSchema)` to create a new message.
56
64
  */
57
65
  export const GetReadinessReportRequestSchema = /*@__PURE__*/
58
- messageDesc(file_api_v1_readiness, 5);
66
+ messageDesc(file_api_v1_readiness, 6);
59
67
 
60
68
  /**
61
69
  * Describes the message api.v1.GetReadinessReportResponse.
62
70
  * Use `create(GetReadinessReportResponseSchema)` to create a new message.
63
71
  */
64
72
  export const GetReadinessReportResponseSchema = /*@__PURE__*/
65
- messageDesc(file_api_v1_readiness, 6);
73
+ messageDesc(file_api_v1_readiness, 7);
66
74
 
67
75
  /**
68
76
  * Describes the message api.v1.ReadinessPolicyInput.
69
77
  * Use `create(ReadinessPolicyInputSchema)` to create a new message.
70
78
  */
71
79
  export const ReadinessPolicyInputSchema = /*@__PURE__*/
72
- messageDesc(file_api_v1_readiness, 7);
80
+ messageDesc(file_api_v1_readiness, 8);
73
81
 
74
82
  /**
75
83
  * Describes the message api.v1.GetReadinessOrgDefaultPolicyRequest.
76
84
  * Use `create(GetReadinessOrgDefaultPolicyRequestSchema)` to create a new message.
77
85
  */
78
86
  export const GetReadinessOrgDefaultPolicyRequestSchema = /*@__PURE__*/
79
- messageDesc(file_api_v1_readiness, 8);
87
+ messageDesc(file_api_v1_readiness, 9);
80
88
 
81
89
  /**
82
90
  * Describes the message api.v1.GetReadinessOrgDefaultPolicyResponse.
83
91
  * Use `create(GetReadinessOrgDefaultPolicyResponseSchema)` to create a new message.
84
92
  */
85
93
  export const GetReadinessOrgDefaultPolicyResponseSchema = /*@__PURE__*/
86
- messageDesc(file_api_v1_readiness, 9);
94
+ messageDesc(file_api_v1_readiness, 10);
87
95
 
88
96
  /**
89
97
  * Describes the message api.v1.UpdateReadinessOrgDefaultPolicyRequest.
90
98
  * Use `create(UpdateReadinessOrgDefaultPolicyRequestSchema)` to create a new message.
91
99
  */
92
100
  export const UpdateReadinessOrgDefaultPolicyRequestSchema = /*@__PURE__*/
93
- messageDesc(file_api_v1_readiness, 10);
101
+ messageDesc(file_api_v1_readiness, 11);
94
102
 
95
103
  /**
96
104
  * Describes the message api.v1.UpdateReadinessOrgDefaultPolicyResponse.
97
105
  * Use `create(UpdateReadinessOrgDefaultPolicyResponseSchema)` to create a new message.
98
106
  */
99
107
  export const UpdateReadinessOrgDefaultPolicyResponseSchema = /*@__PURE__*/
100
- messageDesc(file_api_v1_readiness, 11);
108
+ messageDesc(file_api_v1_readiness, 12);
101
109
 
102
110
  /**
103
111
  * Describes the message api.v1.ReadinessRepository.
104
112
  * Use `create(ReadinessRepositorySchema)` to create a new message.
105
113
  */
106
114
  export const ReadinessRepositorySchema = /*@__PURE__*/
107
- messageDesc(file_api_v1_readiness, 12);
115
+ messageDesc(file_api_v1_readiness, 13);
108
116
 
109
117
  /**
110
118
  * Describes the message api.v1.ListReadinessRepositoriesRequest.
111
119
  * Use `create(ListReadinessRepositoriesRequestSchema)` to create a new message.
112
120
  */
113
121
  export const ListReadinessRepositoriesRequestSchema = /*@__PURE__*/
114
- messageDesc(file_api_v1_readiness, 13);
122
+ messageDesc(file_api_v1_readiness, 14);
115
123
 
116
124
  /**
117
125
  * Describes the message api.v1.ListReadinessRepositoriesResponse.
118
126
  * Use `create(ListReadinessRepositoriesResponseSchema)` to create a new message.
119
127
  */
120
128
  export const ListReadinessRepositoriesResponseSchema = /*@__PURE__*/
121
- messageDesc(file_api_v1_readiness, 14);
129
+ messageDesc(file_api_v1_readiness, 15);
122
130
 
123
131
  /**
124
132
  * Describes the message api.v1.SetRepositoryReadinessRequest.
125
133
  * Use `create(SetRepositoryReadinessRequestSchema)` to create a new message.
126
134
  */
127
135
  export const SetRepositoryReadinessRequestSchema = /*@__PURE__*/
128
- messageDesc(file_api_v1_readiness, 15);
136
+ messageDesc(file_api_v1_readiness, 16);
129
137
 
130
138
  /**
131
139
  * Describes the message api.v1.SetRepositoryReadinessResponse.
132
140
  * Use `create(SetRepositoryReadinessResponseSchema)` to create a new message.
133
141
  */
134
142
  export const SetRepositoryReadinessResponseSchema = /*@__PURE__*/
135
- messageDesc(file_api_v1_readiness, 16);
143
+ messageDesc(file_api_v1_readiness, 17);
136
144
 
137
145
  /**
138
146
  * Describes the message api.v1.RebuildRepositoryProfileRequest.
139
147
  * Use `create(RebuildRepositoryProfileRequestSchema)` to create a new message.
140
148
  */
141
149
  export const RebuildRepositoryProfileRequestSchema = /*@__PURE__*/
142
- messageDesc(file_api_v1_readiness, 17);
150
+ messageDesc(file_api_v1_readiness, 18);
143
151
 
144
152
  /**
145
153
  * Describes the message api.v1.RebuildRepositoryProfileResponse.
146
154
  * Use `create(RebuildRepositoryProfileResponseSchema)` to create a new message.
147
155
  */
148
156
  export const RebuildRepositoryProfileResponseSchema = /*@__PURE__*/
149
- messageDesc(file_api_v1_readiness, 18);
157
+ messageDesc(file_api_v1_readiness, 19);
150
158
 
151
159
  /**
152
160
  * Describes the message api.v1.RepositoryProfile.
153
161
  * Use `create(RepositoryProfileSchema)` to create a new message.
154
162
  */
155
163
  export const RepositoryProfileSchema = /*@__PURE__*/
156
- messageDesc(file_api_v1_readiness, 19);
164
+ messageDesc(file_api_v1_readiness, 20);
157
165
 
158
166
  /**
159
167
  * Describes the message api.v1.GetRepositoryProfileRequest.
160
168
  * Use `create(GetRepositoryProfileRequestSchema)` to create a new message.
161
169
  */
162
170
  export const GetRepositoryProfileRequestSchema = /*@__PURE__*/
163
- messageDesc(file_api_v1_readiness, 20);
171
+ messageDesc(file_api_v1_readiness, 21);
164
172
 
165
173
  /**
166
174
  * Describes the message api.v1.GetRepositoryProfileResponse.
167
175
  * Use `create(GetRepositoryProfileResponseSchema)` to create a new message.
168
176
  */
169
177
  export const GetRepositoryProfileResponseSchema = /*@__PURE__*/
170
- messageDesc(file_api_v1_readiness, 21);
178
+ messageDesc(file_api_v1_readiness, 22);
171
179
 
172
180
  /**
173
181
  * Describes the message api.v1.ReadinessAnalysisStatus.
174
182
  * Use `create(ReadinessAnalysisStatusSchema)` to create a new message.
175
183
  */
176
184
  export const ReadinessAnalysisStatusSchema = /*@__PURE__*/
177
- messageDesc(file_api_v1_readiness, 22);
185
+ messageDesc(file_api_v1_readiness, 23);
178
186
 
179
187
  /**
180
188
  * Describes the message api.v1.StreamReadinessAnalysisRequest.
181
189
  * Use `create(StreamReadinessAnalysisRequestSchema)` to create a new message.
182
190
  */
183
191
  export const StreamReadinessAnalysisRequestSchema = /*@__PURE__*/
184
- messageDesc(file_api_v1_readiness, 23);
192
+ messageDesc(file_api_v1_readiness, 24);
185
193
 
186
194
  /**
187
195
  * Describes the message api.v1.GetReadinessTrendsRequest.
188
196
  * Use `create(GetReadinessTrendsRequestSchema)` to create a new message.
189
197
  */
190
198
  export const GetReadinessTrendsRequestSchema = /*@__PURE__*/
191
- messageDesc(file_api_v1_readiness, 24);
199
+ messageDesc(file_api_v1_readiness, 25);
192
200
 
193
201
  /**
194
202
  * Describes the message api.v1.RiskTrendPoint.
195
203
  * Use `create(RiskTrendPointSchema)` to create a new message.
196
204
  */
197
205
  export const RiskTrendPointSchema = /*@__PURE__*/
198
- messageDesc(file_api_v1_readiness, 25);
206
+ messageDesc(file_api_v1_readiness, 26);
199
207
 
200
208
  /**
201
209
  * Describes the message api.v1.GetReadinessTrendsResponse.
202
210
  * Use `create(GetReadinessTrendsResponseSchema)` to create a new message.
203
211
  */
204
212
  export const GetReadinessTrendsResponseSchema = /*@__PURE__*/
205
- messageDesc(file_api_v1_readiness, 26);
213
+ messageDesc(file_api_v1_readiness, 27);
206
214
 
207
215
  /**
208
216
  * Describes the message api.v1.GetReadinessHotspotsRequest.
209
217
  * Use `create(GetReadinessHotspotsRequestSchema)` to create a new message.
210
218
  */
211
219
  export const GetReadinessHotspotsRequestSchema = /*@__PURE__*/
212
- messageDesc(file_api_v1_readiness, 27);
220
+ messageDesc(file_api_v1_readiness, 28);
213
221
 
214
222
  /**
215
223
  * Describes the message api.v1.ReadinessHotspot.
216
224
  * Use `create(ReadinessHotspotSchema)` to create a new message.
217
225
  */
218
226
  export const ReadinessHotspotSchema = /*@__PURE__*/
219
- messageDesc(file_api_v1_readiness, 28);
227
+ messageDesc(file_api_v1_readiness, 29);
220
228
 
221
229
  /**
222
230
  * Describes the message api.v1.GetReadinessHotspotsResponse.
223
231
  * Use `create(GetReadinessHotspotsResponseSchema)` to create a new message.
224
232
  */
225
233
  export const GetReadinessHotspotsResponseSchema = /*@__PURE__*/
226
- messageDesc(file_api_v1_readiness, 29);
234
+ messageDesc(file_api_v1_readiness, 30);
227
235
 
228
236
  /**
229
237
  * ReadinessService exposes readiness reports (read), the org-level
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opsee/mcp-server",
3
- "version": "0.11.6",
3
+ "version": "0.11.10",
4
4
  "description": "Opsee MCP server — manage projects, tasks, docs, and cycles from AI coding environments",
5
5
  "type": "module",
6
6
  "bin": {
package/src/auth/renew.ts CHANGED
@@ -1,6 +1,7 @@
1
- import { createClient } from "@connectrpc/connect";
1
+ import { createClient, type Interceptor } from "@connectrpc/connect";
2
2
  import { createConnectTransport } from "@connectrpc/connect-node";
3
3
  import { AccountService } from "../../gen/api/v1/account_pb.js";
4
+ import { clientInterceptor, MCP_CLIENT_MARKER } from "../client/marker.js";
4
5
 
5
6
  /** A freshly minted MCP access token and the identity it belongs to. */
6
7
  export interface RenewedToken {
@@ -20,18 +21,23 @@ function backendUrl(): string {
20
21
  return process.env.OPSEE_API_URL || "https://grpc.api.opsee.ai";
21
22
  }
22
23
 
24
+ /** The headers a renewal call carries: the bearer being rolled and the calling client's marker. */
25
+ export function renewInterceptors(currentToken: string, marker = MCP_CLIENT_MARKER): Interceptor[] {
26
+ return [
27
+ (next) => async (req) => {
28
+ req.header.set("Authorization", `Bearer ${currentToken}`);
29
+ return await next(req);
30
+ },
31
+ clientInterceptor(marker),
32
+ ];
33
+ }
34
+
23
35
  export const renewAccessToken: TokenRenewer = async (currentToken) => {
24
36
  // Per call, not cached: the bearer differs each time, and reuse risks leaking one user's token.
25
37
  const transport = createConnectTransport({
26
38
  baseUrl: backendUrl(),
27
39
  httpVersion: "1.1",
28
- interceptors: [
29
- (next) => async (req) => {
30
- req.header.set("Authorization", `Bearer ${currentToken}`);
31
- req.header.set("X-Opsee-Client", "mcp");
32
- return await next(req);
33
- },
34
- ],
40
+ interceptors: renewInterceptors(currentToken),
35
41
  });
36
42
 
37
43
  const account = createClient(AccountService, transport);