@ema.co/mcp-toolkit 2026.2.5 → 2026.2.19

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.

Potentially problematic release.


This version of @ema.co/mcp-toolkit might be problematic. Click here for more details.

Files changed (67) hide show
  1. package/.context/public/guides/ema-user-guide.md +12 -16
  2. package/.context/public/guides/mcp-tools-guide.md +203 -334
  3. package/LICENSE +29 -21
  4. package/README.md +58 -35
  5. package/dist/mcp/domain/loop-detection.js +97 -0
  6. package/dist/mcp/domain/proto-constraints.js +284 -0
  7. package/dist/mcp/domain/structural-rules.js +12 -5
  8. package/dist/mcp/domain/validation-rules.js +107 -20
  9. package/dist/mcp/domain/workflow-graph-optimizer.js +235 -0
  10. package/dist/mcp/domain/workflow-graph-transforms.js +808 -0
  11. package/dist/mcp/domain/workflow-graph.js +374 -0
  12. package/dist/mcp/domain/workflow-optimizer.js +10 -4
  13. package/dist/mcp/guidance.js +54 -31
  14. package/dist/mcp/handlers/feedback/index.js +139 -0
  15. package/dist/mcp/handlers/feedback/store.js +262 -0
  16. package/dist/mcp/handlers/persona/index.js +237 -8
  17. package/dist/mcp/handlers/persona/schema.js +27 -0
  18. package/dist/mcp/handlers/reference/index.js +6 -4
  19. package/dist/mcp/handlers/workflow/index.js +25 -28
  20. package/dist/mcp/handlers/workflow/optimize.js +73 -33
  21. package/dist/mcp/handlers/workflow/validation.js +1 -1
  22. package/dist/mcp/knowledge-types.js +7 -0
  23. package/dist/mcp/knowledge.js +146 -834
  24. package/dist/mcp/resources.js +610 -18
  25. package/dist/mcp/server.js +233 -2156
  26. package/dist/mcp/tools.js +91 -5
  27. package/dist/sdk/generated/agent-catalog.js +615 -0
  28. package/dist/sdk/generated/deprecated-actions.js +182 -96
  29. package/dist/sdk/generated/proto-fields.js +2 -1
  30. package/dist/sdk/generated/protos/service/agent_qa/v1/agent_qa_pb.js +460 -21
  31. package/dist/sdk/generated/protos/service/auth/v1/auth_pb.js +11 -1
  32. package/dist/sdk/generated/protos/service/dataingest/v1/dataingest_pb.js +173 -66
  33. package/dist/sdk/generated/protos/service/feedback/v1/feedback_pb.js +43 -1
  34. package/dist/sdk/generated/protos/service/llmservice/v1/llmservice_pb.js +26 -21
  35. package/dist/sdk/generated/protos/service/persona/v1/persona_config_pb.js +100 -89
  36. package/dist/sdk/generated/protos/service/persona/v1/persona_pb.js +126 -116
  37. package/dist/sdk/generated/protos/service/persona/v1/shared_widgets/widget_types_pb.js +33 -1
  38. package/dist/sdk/generated/protos/service/persona/v1/voicebot_widgets/widget_types_pb.js +60 -11
  39. package/dist/sdk/generated/protos/service/tenant/v1/tenant_pb.js +1 -1
  40. package/dist/sdk/generated/protos/service/user/v1/user_pb.js +1 -1
  41. package/dist/sdk/generated/protos/service/utils/v1/agent_qa_pb.js +35 -0
  42. package/dist/sdk/generated/protos/service/workflows/v1/action_registry_pb.js +1 -1
  43. package/dist/sdk/generated/protos/service/workflows/v1/action_type_pb.js +6 -1
  44. package/dist/sdk/generated/protos/service/workflows/v1/chatbot_pb.js +106 -11
  45. package/dist/sdk/generated/protos/service/workflows/v1/common_forms_pb.js +1 -1
  46. package/dist/sdk/generated/protos/service/workflows/v1/coordinator_pb.js +1 -1
  47. package/dist/sdk/generated/protos/service/workflows/v1/external_actions_pb.js +31 -1
  48. package/dist/sdk/generated/protos/service/workflows/v1/well_known_pb.js +5 -1
  49. package/dist/sdk/generated/protos/service/workflows/v1/workflow_pb.js +1 -1
  50. package/dist/sdk/generated/protos/util/tracking_metadata_pb.js +1 -1
  51. package/dist/sdk/generated/widget-catalog.js +60 -0
  52. package/docs/README.md +17 -9
  53. package/package.json +2 -2
  54. package/.context/public/guides/dashboard-operations.md +0 -286
  55. package/.context/public/guides/email-patterns.md +0 -125
  56. package/dist/mcp/domain/intent-architect.js +0 -914
  57. package/dist/mcp/domain/quality-gates.js +0 -110
  58. package/dist/mcp/domain/workflow-execution-analyzer.js +0 -412
  59. package/dist/mcp/domain/workflow-intent.js +0 -1806
  60. package/dist/mcp/domain/workflow-merge.js +0 -449
  61. package/dist/mcp/domain/workflow-tracer.js +0 -648
  62. package/dist/mcp/domain/workflow-transformer.js +0 -742
  63. package/dist/mcp/handlers/persona/intent.js +0 -141
  64. package/dist/mcp/handlers/workflow/analyze.js +0 -119
  65. package/dist/mcp/handlers/workflow/compare.js +0 -70
  66. package/dist/mcp/handlers/workflow/generate.js +0 -384
  67. package/dist/mcp/handlers-consolidated.js +0 -333
@@ -7,7 +7,7 @@ import { file_service_user_v1_user } from "../../user/v1/user_pb.js";
7
7
  /**
8
8
  * Describes the file service/feedback/v1/feedback.proto.
9
9
  */
10
- export const file_service_feedback_v1_feedback = /*@__PURE__*/ fileDesc("CiJzZXJ2aWNlL2ZlZWRiYWNrL3YxL2ZlZWRiYWNrLnByb3RvEgtmZWVkYmFjay52MSLXAwoIRmVlZGJhY2sSCgoCaWQYASABKAkSEwoLcmVzb3VyY2VfaWQYAiABKAkSEwoLcmV2aWV3ZXJfaWQYAyABKAkSIQoUY29tcG9zaXRlX2lkZW50aWZpZXIYCyABKAlIAIgBARIwCg1yZXNvdXJjZV90eXBlGAQgASgOMhkuZmVlZGJhY2sudjEuUmVzb3VyY2VUeXBlEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEicKBGZvcm0YByABKAsyGS5mZWVkYmFjay52MS5GZWVkYmFja0Zvcm0SKQoIbWV0YWRhdGEYCCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhAKCGlzX3ZhbGlkGAkgASgIEhsKBHVzZXIYCiABKAsyDS51c2VyLnYxLlVzZXISNQoGc3RhdHVzGAwgASgOMiUuZmVlZGJhY2sudjEuRmVlZGJhY2tQcm9jZXNzaW5nU3RhdHVzEg0KBW5vdGVzGA0gASgJQhcKFV9jb21wb3NpdGVfaWRlbnRpZmllciKXAQoMRmVlZGJhY2tGb3JtEiwKC3N0YXJfcmF0aW5nGAEgASgOMhcuZmVlZGJhY2sudjEuU3RhclJhdGluZxIVCg1mZWVkYmFja190YWdzGAIgAygJEhAKCGNvbW1lbnRzGAMgASgJEjAKDWZlZWRiYWNrX3R5cGUYBCABKA4yGS5mZWVkYmFjay52MS5GZWVkYmFja1R5cGUqmwEKDFJlc291cmNlVHlwZRIdChlSRVNPVVJDRV9UWVBFX1VOU1BFQ0lGSUVEEAASIgoeUkVTT1VSQ0VfVFlQRV9ET0NVTUVOVF9TRUNUSU9OEAESHgoaUkVTT1VSQ0VfVFlQRV9DSEFUX01FU1NBR0UQAhIoCiRSRVNPVVJDRV9UWVBFX1JVTEVfVkFMSURBVElPTl9SRVBPUlQQAyqEAQoMRmVlZGJhY2tUeXBlEh0KGUZFRURCQUNLX1RZUEVfVU5TUEVDSUZJRUQQABIaChZGRUVEQkFDS19UWVBFX1BPU0lUSVZFEAESGgoWRkVFREJBQ0tfVFlQRV9ORUdBVElWRRACEh0KGUZFRURCQUNLX1RZUEVfTk9fRkVFREJBQ0sQAyqEAgoKU3RhclJhdGluZxIbChdTVEFSX1JBVElOR19VTlNQRUNJRklFRBAAEhMKD1NUQVJfUkFUSU5HX09ORRABEhMKD1NUQVJfUkFUSU5HX1RXTxACEhUKEVNUQVJfUkFUSU5HX1RIUkVFEAMSFAoQU1RBUl9SQVRJTkdfRk9VUhAEEhQKEFNUQVJfUkFUSU5HX0ZJVkUQBRITCg9TVEFSX1JBVElOR19TSVgQBhIVChFTVEFSX1JBVElOR19TRVZFThAHEhUKEVNUQVJfUkFUSU5HX0VJR0hUEAgSFAoQU1RBUl9SQVRJTkdfTklORRAJEhMKD1NUQVJfUkFUSU5HX1RFThAKKsABChhGZWVkYmFja1Byb2Nlc3NpbmdTdGF0dXMSKgomRkVFREJBQ0tfUFJPQ0VTU0lOR19TVEFUVVNfVU5TUEVDSUZJRUQQABIiCh5GRUVEQkFDS19QUk9DRVNTSU5HX1NUQVRVU19ORVcQARIqCiZGRUVEQkFDS19QUk9DRVNTSU5HX1NUQVRVU19JTl9QUk9HUkVTUxACEigKJEZFRURCQUNLX1BST0NFU1NJTkdfU1RBVFVTX0NPTVBMRVRFRBADQkNaQWdpdGh1Yi5jb20vRW1hLVVubGltaXRlZC9wcm90b3MvZ28vc2VydmljZS9mZWVkYmFjay92MTtmZWVkYmFja3YxYgZwcm90bzM", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_service_user_v1_user]);
10
+ export const file_service_feedback_v1_feedback = /*@__PURE__*/ fileDesc("CiJzZXJ2aWNlL2ZlZWRiYWNrL3YxL2ZlZWRiYWNrLnByb3RvEgtmZWVkYmFjay52MSLXAwoIRmVlZGJhY2sSCgoCaWQYASABKAkSEwoLcmVzb3VyY2VfaWQYAiABKAkSEwoLcmV2aWV3ZXJfaWQYAyABKAkSIQoUY29tcG9zaXRlX2lkZW50aWZpZXIYCyABKAlIAIgBARIwCg1yZXNvdXJjZV90eXBlGAQgASgOMhkuZmVlZGJhY2sudjEuUmVzb3VyY2VUeXBlEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi4KCnVwZGF0ZWRfYXQYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEicKBGZvcm0YByABKAsyGS5mZWVkYmFjay52MS5GZWVkYmFja0Zvcm0SKQoIbWV0YWRhdGEYCCABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0EhAKCGlzX3ZhbGlkGAkgASgIEhsKBHVzZXIYCiABKAsyDS51c2VyLnYxLlVzZXISNQoGc3RhdHVzGAwgASgOMiUuZmVlZGJhY2sudjEuRmVlZGJhY2tQcm9jZXNzaW5nU3RhdHVzEg0KBW5vdGVzGA0gASgJQhcKFV9jb21wb3NpdGVfaWRlbnRpZmllciKXAQoMRmVlZGJhY2tGb3JtEiwKC3N0YXJfcmF0aW5nGAEgASgOMhcuZmVlZGJhY2sudjEuU3RhclJhdGluZxIVCg1mZWVkYmFja190YWdzGAIgAygJEhAKCGNvbW1lbnRzGAMgASgJEjAKDWZlZWRiYWNrX3R5cGUYBCABKA4yGS5mZWVkYmFjay52MS5GZWVkYmFja1R5cGUqmwEKDFJlc291cmNlVHlwZRIdChlSRVNPVVJDRV9UWVBFX1VOU1BFQ0lGSUVEEAASIgoeUkVTT1VSQ0VfVFlQRV9ET0NVTUVOVF9TRUNUSU9OEAESHgoaUkVTT1VSQ0VfVFlQRV9DSEFUX01FU1NBR0UQAhIoCiRSRVNPVVJDRV9UWVBFX1JVTEVfVkFMSURBVElPTl9SRVBPUlQQAyqEAQoMRmVlZGJhY2tUeXBlEh0KGUZFRURCQUNLX1RZUEVfVU5TUEVDSUZJRUQQABIaChZGRUVEQkFDS19UWVBFX1BPU0lUSVZFEAESGgoWRkVFREJBQ0tfVFlQRV9ORUdBVElWRRACEh0KGUZFRURCQUNLX1RZUEVfTk9fRkVFREJBQ0sQAyqEAgoKU3RhclJhdGluZxIbChdTVEFSX1JBVElOR19VTlNQRUNJRklFRBAAEhMKD1NUQVJfUkFUSU5HX09ORRABEhMKD1NUQVJfUkFUSU5HX1RXTxACEhUKEVNUQVJfUkFUSU5HX1RIUkVFEAMSFAoQU1RBUl9SQVRJTkdfRk9VUhAEEhQKEFNUQVJfUkFUSU5HX0ZJVkUQBRITCg9TVEFSX1JBVElOR19TSVgQBhIVChFTVEFSX1JBVElOR19TRVZFThAHEhUKEVNUQVJfUkFUSU5HX0VJR0hUEAgSFAoQU1RBUl9SQVRJTkdfTklORRAJEhMKD1NUQVJfUkFUSU5HX1RFThAKKsABChhGZWVkYmFja1Byb2Nlc3NpbmdTdGF0dXMSKgomRkVFREJBQ0tfUFJPQ0VTU0lOR19TVEFUVVNfVU5TUEVDSUZJRUQQABIiCh5GRUVEQkFDS19QUk9DRVNTSU5HX1NUQVRVU19ORVcQARIqCiZGRUVEQkFDS19QUk9DRVNTSU5HX1NUQVRVU19JTl9QUk9HUkVTUxACEigKJEZFRURCQUNLX1BST0NFU1NJTkdfU1RBVFVTX0NPTVBMRVRFRBADKqwBCg5GZWVkYmFja1N0YXR1cxIfChtGRUVEQkFDS19TVEFUVVNfVU5TUEVDSUZJRUQQABIfChtGRUVEQkFDS19TVEFUVVNfVU5QUk9DRVNTRUQQARIcChhGRUVEQkFDS19TVEFUVVNfQVBQUk9WRUQQAhIdChlGRUVEQkFDS19TVEFUVVNfUFJPQ0VTU0VEEAMSGwoXRkVFREJBQ0tfU1RBVFVTX0lHTk9SRUQQBEJDWkFnaXRodWIuY29tL0VtYS1VbmxpbWl0ZWQvcHJvdG9zL2dvL3NlcnZpY2UvZmVlZGJhY2svdjE7ZmVlZGJhY2t2MWIGcHJvdG8z", [file_google_protobuf_struct, file_google_protobuf_timestamp, file_service_user_v1_user]);
11
11
  /**
12
12
  * Describes the message feedback.v1.Feedback.
13
13
  * Use `create(FeedbackSchema)` to create a new message.
@@ -150,3 +150,45 @@ export var FeedbackProcessingStatus;
150
150
  * Describes the enum feedback.v1.FeedbackProcessingStatus.
151
151
  */
152
152
  export const FeedbackProcessingStatusSchema = /*@__PURE__*/ enumDesc(file_service_feedback_v1_feedback, 3);
153
+ /**
154
+ * Feedback enums for tracking feedback given by users and admins in Ema's audit system.
155
+ *
156
+ * Values:
157
+ * UNPROCESSED: Feedback is not processed yet. This is the initial state when feedback is created.
158
+ * APPROVED: Feedback is approved by an admin, and can be used for further processing.
159
+ * PROCESSED: Feedback has been processed by a downstream learning pipeline.
160
+ * It should ideally be skipped in future pipeline runs, to avoid overindexing on the same data.
161
+ * Usually only feedback that was previously APPROVED can be moved to PROCESSED.
162
+ * IGNORED: Feedback has been rejected by an admin,
163
+ * and should not be used for further processing in any downstream pipelines.
164
+ * Ignored feedbacks is still viewable.
165
+ *
166
+ * @generated from enum feedback.v1.FeedbackStatus
167
+ */
168
+ export var FeedbackStatus;
169
+ (function (FeedbackStatus) {
170
+ /**
171
+ * @generated from enum value: FEEDBACK_STATUS_UNSPECIFIED = 0;
172
+ */
173
+ FeedbackStatus[FeedbackStatus["UNSPECIFIED"] = 0] = "UNSPECIFIED";
174
+ /**
175
+ * @generated from enum value: FEEDBACK_STATUS_UNPROCESSED = 1;
176
+ */
177
+ FeedbackStatus[FeedbackStatus["UNPROCESSED"] = 1] = "UNPROCESSED";
178
+ /**
179
+ * @generated from enum value: FEEDBACK_STATUS_APPROVED = 2;
180
+ */
181
+ FeedbackStatus[FeedbackStatus["APPROVED"] = 2] = "APPROVED";
182
+ /**
183
+ * @generated from enum value: FEEDBACK_STATUS_PROCESSED = 3;
184
+ */
185
+ FeedbackStatus[FeedbackStatus["PROCESSED"] = 3] = "PROCESSED";
186
+ /**
187
+ * @generated from enum value: FEEDBACK_STATUS_IGNORED = 4;
188
+ */
189
+ FeedbackStatus[FeedbackStatus["IGNORED"] = 4] = "IGNORED";
190
+ })(FeedbackStatus || (FeedbackStatus = {}));
191
+ /**
192
+ * Describes the enum feedback.v1.FeedbackStatus.
193
+ */
194
+ export const FeedbackStatusSchema = /*@__PURE__*/ enumDesc(file_service_feedback_v1_feedback, 4);
@@ -7,7 +7,7 @@ import { file_service_llmservice_v1_pii } from "./pii_pb.js";
7
7
  /**
8
8
  * Describes the file service/llmservice/v1/llmservice.proto.
9
9
  */
10
- export const file_service_llmservice_v1_llmservice = /*@__PURE__*/ fileDesc("CiZzZXJ2aWNlL2xsbXNlcnZpY2UvdjEvbGxtc2VydmljZS5wcm90bxINbGxtc2VydmljZS52MSJwChRKc29uU2NoZW1hRGVmaW5pdGlvbhIMCgRuYW1lGAEgASgJEg4KBnN0cmljdBgCIAEoCBIlCgZzY2hlbWEYAyABKAsyFS5sbG1zZXJ2aWNlLnYxLlNjaGVtYRITCgtkZXNjcmlwdGlvbhgEIAEoCSLFBQoGU2NoZW1hEicKBHR5cGUYASABKA4yGS5sbG1zZXJ2aWNlLnYxLlNjaGVtYVR5cGUSEwoLZGVzY3JpcHRpb24YAiABKAkSOQoKcHJvcGVydGllcxgDIAMoCzIlLmxsbXNlcnZpY2UudjEuU2NoZW1hLlByb3BlcnRpZXNFbnRyeRIUCghyZXF1aXJlZBgEIAMoCUICGAESJAoFaXRlbXMYByABKAsyFS5sbG1zZXJ2aWNlLnYxLlNjaGVtYRIuCgRlbnVtGAggAygLMiAubGxtc2VydmljZS52MS5TY2hlbWEuVHlwZWRWYWx1ZRIQCghudWxsYWJsZRgJIAEoCBILCgNyZWYYCiABKAkSOwoLZGVmaW5pdGlvbnMYCyADKAsyJi5sbG1zZXJ2aWNlLnYxLlNjaGVtYS5EZWZpbml0aW9uc0VudHJ5EiUKBmFueV9vZhgMIAMoCzIVLmxsbXNlcnZpY2UudjEuU2NoZW1hEiUKBmFsbF9vZhgNIAMoCzIVLmxsbXNlcnZpY2UudjEuU2NoZW1hEiUKBm9uZV9vZhgOIAMoCzIVLmxsbXNlcnZpY2UudjEuU2NoZW1hGkgKD1Byb3BlcnRpZXNFbnRyeRILCgNrZXkYASABKAkSJAoFdmFsdWUYAiABKAsyFS5sbG1zZXJ2aWNlLnYxLlNjaGVtYToCOAEacAoKVHlwZWRWYWx1ZRIWCgxzdHJpbmdfdmFsdWUYASABKAlIABIWCgxudW1iZXJfdmFsdWUYAiABKAFIABITCglpbnRfdmFsdWUYAyABKANIABIUCgpib29sX3ZhbHVlGAQgASgISABCBwoFdmFsdWUaSQoQRGVmaW5pdGlvbnNFbnRyeRILCgNrZXkYASABKAkSJAoFdmFsdWUYAiABKAsyFS5sbG1zZXJ2aWNlLnYxLlNjaGVtYToCOAEiiQsKFUZ1c2lvbk1vZGVsUGFyYW1ldGVycxIeChZkZWZhdWx0X2ZhbGxiYWNrX21vZGVsGAEgASgJEhkKDGdsb2JhbF9tb2RlbBgCIAEoCUgAiAEBElwKFXRhc2tfbW9kZWxfcHJlZmVyZW5jZRgEIAMoCzI9LmxsbXNlcnZpY2UudjEuRnVzaW9uTW9kZWxQYXJhbWV0ZXJzLlRhc2tNb2RlbFByZWZlcmVuY2VFbnRyeRInChptaW5pbXVtX2FjY3VyYWN5X3RocmVzaG9sZBgFIAEoAkgBiAEBEh0KEGRlc2lyZWRfYWNjdXJhY3kYBiABKAJIAogBARIYCgt0ZW1wZXJhdHVyZRgHIAEoAkgDiAEBEhgKC251bV9jaG9pY2VzGAggASgFSASIAQESRwoVb3B0aW1pemF0aW9uX2NyaXRlcmlhGAkgASgOMiMubGxtc2VydmljZS52MS5PcHRpbWl6YXRpb25Dcml0ZXJpYUgFiAEBEhcKD3NlbGVjdGVkX21vZGVscxgKIAMoCRISCgV0b3BfcBgLIAEoAkgGiAEBEhcKCm1heF90b2tlbnMYDCABKAVIB4gBARIMCgRzdG9wGA0gAygJEjsKD3Jlc3BvbnNlX2Zvcm1hdBgOIAEoDjIdLmxsbXNlcnZpY2UudjEuUmVzcG9uc2VGb3JtYXRICIgBARI9Cgtqc29uX3NjaGVtYRgPIAEoCzIjLmxsbXNlcnZpY2UudjEuSnNvblNjaGVtYURlZmluaXRpb25ICYgBARIuCglmdW5jdGlvbnMYECADKAsyGy5sbG1zZXJ2aWNlLnYxLkZ1bmN0aW9uSXRlbRImCgV0b29scxgRIAMoCzIXLmxsbXNlcnZpY2UudjEuVG9vbEl0ZW0SGAoLdG9vbF9jaG9pY2UYEiABKAlICogBARIVCghsb2dwcm9icxgTIAEoBUgLiAEBEiAKE3VzZV9pbl9tZW1vcnlfY2FjaGUYFCABKAhIDIgBARIcCg9yZXF1ZXN0X3RpbWVvdXQYFSABKAVIDYgBARI2ChFyZXF1aXJlZF9mZWF0dXJlcxgWIAMoDjIbLmxsbXNlcnZpY2UudjEuTW9kZWxGZWF0dXJlEjQKE3ByZWZlcnJlZF9wcm92aWRlcnMYFyADKA4yFy5sbG1zZXJ2aWNlLnYxLlByb3ZpZGVyEkUKFHRhc2tfY2hhcmFjdGVyaXN0aWNzGBggASgLMiIubGxtc2VydmljZS52MS5UYXNrQ2hhcmFjdGVyaXN0aWNzSA6IAQESPQoQcmVhc29uaW5nX2VmZm9ydBgZIAEoDjIeLmxsbXNlcnZpY2UudjEuUmVhc29uaW5nRWZmb3J0SA+IAQEaOgoYVGFza01vZGVsUHJlZmVyZW5jZUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCDwoNX2dsb2JhbF9tb2RlbEIdChtfbWluaW11bV9hY2N1cmFjeV90aHJlc2hvbGRCEwoRX2Rlc2lyZWRfYWNjdXJhY3lCDgoMX3RlbXBlcmF0dXJlQg4KDF9udW1fY2hvaWNlc0IYChZfb3B0aW1pemF0aW9uX2NyaXRlcmlhQggKBl90b3BfcEINCgtfbWF4X3Rva2Vuc0ISChBfcmVzcG9uc2VfZm9ybWF0Qg4KDF9qc29uX3NjaGVtYUIOCgxfdG9vbF9jaG9pY2VCCwoJX2xvZ3Byb2JzQhYKFF91c2VfaW5fbWVtb3J5X2NhY2hlQhIKEF9yZXF1ZXN0X3RpbWVvdXRCFwoVX3Rhc2tfY2hhcmFjdGVyaXN0aWNzQhMKEV9yZWFzb25pbmdfZWZmb3J0SgQIAxAEUhBtb2RlbF9leGNsdXNpb25zIv4BChNUYXNrQ2hhcmFjdGVyaXN0aWNzEjIKDW91dHB1dF9mb3JtYXQYASABKAsyGy5sbG1zZXJ2aWNlLnYxLk91dHB1dEZvcm1hdBJAChRjb2duaXRpdmVfY29tcGxleGl0eRgCIAEoCzIiLmxsbXNlcnZpY2UudjEuQ29nbml0aXZlQ29tcGxleGl0eRJAChRxdWFsaXR5X3JlcXVpcmVtZW50cxgDIAEoCzIiLmxsbXNlcnZpY2UudjEuUXVhbGl0eVJlcXVpcmVtZW50cxIvCgx0YXNrX2RvbWFpbnMYBCADKA4yGS5sbG1zZXJ2aWNlLnYxLlRhc2tEb21haW4ihwEKDE91dHB1dEZvcm1hdBI0Cg9leHBlY3RlZF9sZW5ndGgYASABKA4yGy5sbG1zZXJ2aWNlLnYxLk91dHB1dExlbmd0aBIaChJyZXF1aXJlc19jaXRhdGlvbnMYAiABKAgSJQodcmVxdWlyZXNfZGV0ZXJtaW5pc3RpY19vdXRwdXQYAyABKAgihAEKE0NvZ25pdGl2ZUNvbXBsZXhpdHkSNgoPcmVhc29uaW5nX2xldmVsGAEgASgOMh0ubGxtc2VydmljZS52MS5SZWFzb25pbmdMZXZlbBI1Cg9yZWFzb25pbmdfdHlwZXMYAiADKA4yHC5sbG1zZXJ2aWNlLnYxLlJlYXNvbmluZ1R5cGUilQEKE1F1YWxpdHlSZXF1aXJlbWVudHMSNwoRcmVxdWlyZWRfYWNjdXJhY3kYASABKA4yHC5sbG1zZXJ2aWNlLnYxLkFjY3VyYWN5TGV2ZWwSIQoZcmVxdWlyZXNfZmFjdHVhbF9hY2N1cmFjeRgCIAEoCBIiChpzaG91bGRfZXhwcmVzc191bmNlcnRhaW50eRgDIAEoCCKaAQoKSWRNZXRhZGF0YRIRCgl0ZW5hbnRfaWQYASABKAkSDwoHdXNlcl9pZBgCIAEoCRISCgpwZXJzb25hX2lkGAMgASgJEhAKCGFnZW50X2lkGAQgASgJEhcKD2NvbnZlcnNhdGlvbl9pZBgFIAEoCRITCgtxdWVzdGlvbl9pZBgGIAEoCRIUCgxhZ2VudF9ydW5faWQYByABKAki5gMKEkZ1c2lvbk1vZGVsUmVxdWVzdBIuCgtpZF9tZXRhZGF0YRgBIAEoCzIZLmxsbXNlcnZpY2UudjEuSWRNZXRhZGF0YRIqCgl0YXNrX3R5cGUYAiABKA4yFy5sbG1zZXJ2aWNlLnYxLlRhc2tUeXBlEi0KCG1lc3NhZ2VzGAMgASgLMhsubGxtc2VydmljZS52MS5Db252ZXJzYXRpb24SEwoGcHJvbXB0GAQgASgJSACIAQESRQoXZnVzaW9uX21vZGVsX3BhcmFtZXRlcnMYBSABKAsyJC5sbG1zZXJ2aWNlLnYxLkZ1c2lvbk1vZGVsUGFyYW1ldGVycxIXCgpkZWJ1Z19tb2RlGAYgASgISAGIAQESOQoMc2FuaXRpemF0aW9uGAcgASgLMiMubGxtc2VydmljZS52MS5EYXRhUHJvdGVjdGlvbkNvbmZpZxJFChR0YXNrX2NoYXJhY3RlcmlzdGljcxgIIAEoCzIiLmxsbXNlcnZpY2UudjEuVGFza0NoYXJhY3RlcmlzdGljc0gCiAEBEhsKE3NraXBfZGJfcGVyc2lzdGVuY2UYCSABKAhCCQoHX3Byb21wdEINCgtfZGVidWdfbW9kZUIXChVfdGFza19jaGFyYWN0ZXJpc3RpY3Mi3gEKD1Jlc3BvbnNlTWV0cmljcxIPCgdsYXRlbmN5GAEgASgCEgwKBGNvc3QYAiABKAISFAoMaW5wdXRfdG9rZW5zGAMgASgFEhUKDW91dHB1dF90b2tlbnMYBCABKAUSEgoKaW5wdXRfY29zdBgFIAEoAhITCgtvdXRwdXRfY29zdBgGIAEoAhISCgptb2RlbF9uYW1lGAggAygJEkIKFW9wdGltaXphdGlvbl9jcml0ZXJpYRgJIAEoDjIjLmxsbXNlcnZpY2UudjEuT3B0aW1pemF0aW9uQ3JpdGVyaWEi7gEKDkZ1c2lvbk1vZGVsTG9nEg4KBmxvZ19pZBgBIAEoCRIaChJyZXNwb25zZV90aW1lc3RhbXAYAiABKAkSMgoHcmVxdWVzdBgDIAEoCzIhLmxsbXNlcnZpY2UudjEuRnVzaW9uTW9kZWxSZXF1ZXN0EjQKCHJlc3BvbnNlGAQgASgLMiIubGxtc2VydmljZS52MS5GdXNpb25Nb2RlbFJlc3BvbnNlEi8KB21ldHJpY3MYBSABKAsyHi5sbG1zZXJ2aWNlLnYxLlJlc3BvbnNlTWV0cmljcxIVCg1yZXNwb25zZV90eXBlGAYgASgJIokCChNGdXNpb25Nb2RlbFJlc3BvbnNlEhMKC3Jlc3BvbnNlX2lkGAEgASgJEjUKCmNvbXBsZXRpb24YAiABKAsyIS5sbG1zZXJ2aWNlLnYxLkNvbXBsZXRpb25SZXNwb25zZRIfChJyZXNwb25zZV90aW1lc3RhbXAYAyABKAlIAIgBARI0CgdtZXRyaWNzGAQgASgLMh4ubGxtc2VydmljZS52MS5SZXNwb25zZU1ldHJpY3NIAYgBARIaCg1yZXNwb25zZV90eXBlGAUgASgJSAKIAQFCFQoTX3Jlc3BvbnNlX3RpbWVzdGFtcEIKCghfbWV0cmljc0IQCg5fcmVzcG9uc2VfdHlwZSKYAgoZR2V0QXZhaWxhYmxlTW9kZWxzUmVxdWVzdBIRCgltb2RlbF9pZHMYASADKAkSNgoRcmVxdWlyZWRfZmVhdHVyZXMYAiADKA4yGy5sbG1zZXJ2aWNlLnYxLk1vZGVsRmVhdHVyZRIqCglwcm92aWRlcnMYBCADKA4yFy5sbG1zZXJ2aWNlLnYxLlByb3ZpZGVyEh8KEm1pbl9jb250ZXh0X3dpbmRvdxgFIAEoBUgAiAEBEioKHW1heF9jb3N0X3Blcl8xa19vdXRwdXRfdG9rZW5zGAYgASgCSAGIAQFCFQoTX21pbl9jb250ZXh0X3dpbmRvd0IgCh5fbWF4X2Nvc3RfcGVyXzFrX291dHB1dF90b2tlbnMiYQoTRW1iZWRkaW5nTW9kZWxTcGVjcxISCgpkaW1lbnNpb25zGAEgASgFEhoKEm1heF9jb250ZXh0X2xlbmd0aBgCIAEoBRIaChJjb3N0X3Blcl8xa190b2tlbnMYAyABKAIipgMKGFRleHRHZW5lcmF0aW9uTW9kZWxTcGVjcxIaChJtYXhfY29udGV4dF9sZW5ndGgYASABKAUSGQoRbWF4X291dHB1dF90b2tlbnMYAiABKAUSIAoYY29zdF9wZXJfMWtfaW5wdXRfdG9rZW5zGAMgASgCEiEKGWNvc3RfcGVyXzFrX291dHB1dF90b2tlbnMYBCABKAISJwoadGltZV90b19maXJzdF9hbnN3ZXJfdG9rZW4YBSABKAJIAIgBARIVCgh0dGZ0XzEwaxgGIAEoAkgBiAEBEhYKCXR0ZnRfMTAwaxgHIAEoAkgCiAEBEhoKDXR0ZnRfdmFyaWFuY2UYCCABKAJIA4gBARIQCgN0cHMYCSABKAJIBIgBARIeChFlMmVfcmVzcG9uc2VfdGltZRgKIAEoAkgFiAEBQh0KG190aW1lX3RvX2ZpcnN0X2Fuc3dlcl90b2tlbkILCglfdHRmdF8xMGtCDAoKX3R0ZnRfMTAwa0IQCg5fdHRmdF92YXJpYW5jZUIGCgRfdHBzQhQKEl9lMmVfcmVzcG9uc2VfdGltZSKOAwoLTW9kZWxDb25maWcSEAoIbW9kZWxfaWQYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEikKCHByb3ZpZGVyGAMgASgOMhcubGxtc2VydmljZS52MS5Qcm92aWRlchIaChJtYXhfY29udGV4dF9sZW5ndGgYBCABKAUSLQoIZmVhdHVyZXMYBSADKA4yGy5sbG1zZXJ2aWNlLnYxLk1vZGVsRmVhdHVyZRJIChV0ZXh0X2dlbmVyYXRpb25fc3BlY3MYByABKAsyJy5sbG1zZXJ2aWNlLnYxLlRleHRHZW5lcmF0aW9uTW9kZWxTcGVjc0gAEj0KD2VtYmVkZGluZ19zcGVjcxgIIAEoCzIiLmxsbXNlcnZpY2UudjEuRW1iZWRkaW5nTW9kZWxTcGVjc0gAEigKG3N1cHBvcnRlZF9tb2RlbHNfZW51bV92YWx1ZRgeIAEoBUgBiAEBQg4KDG1vZGVsX3BhcmFtc0IeChxfc3VwcG9ydGVkX21vZGVsc19lbnVtX3ZhbHVlIkgKGkdldEF2YWlsYWJsZU1vZGVsc1Jlc3BvbnNlEioKBm1vZGVscxgBIAMoCzIaLmxsbXNlcnZpY2UudjEuTW9kZWxDb25maWciwwgKEUNvbXBsZXRpb25SZXF1ZXN0Eg0KBW1vZGVsGAEgAygJEi0KCG1lc3NhZ2VzGAIgASgLMhsubGxtc2VydmljZS52MS5Db252ZXJzYXRpb24SLgoJZnVuY3Rpb25zGAMgAygLMhsubGxtc2VydmljZS52MS5GdW5jdGlvbkl0ZW0SEwoLdGVtcGVyYXR1cmUYBCABKAISDQoFdG9wX3AYBSABKAISEwoLbnVtX2Nob2ljZXMYBiABKAUSDgoGc3RyZWFtGAcgASgIEgwKBHN0b3AYCCADKAkSEgoKbWF4X3Rva2VucxgJIAEoBRIMCgR1c2VyGAogASgJEhcKD3JlcXVlc3RfdGltZW91dBgLIAEoBRITCgtudW1fcmV0cmllcxgMIAEoBRIVCg1tb2NrX3Jlc3BvbnNlGA0gASgJEg0KBWJhdGNoGA4gASgJEhYKDmxvYWRfYmFsYW5jaW5nGA8gASgJEjkKDHNhbml0aXphdGlvbhgQIAEoCzIjLmxsbXNlcnZpY2UudjEuRGF0YVByb3RlY3Rpb25Db25maWcSMgoKcmVxdWVzdF9pZBgRIAEoCzIZLmxsbXNlcnZpY2UudjEuSWRNZXRhZGF0YUgAiAEBEjYKD3Jlc3BvbnNlX2Zvcm1hdBgSIAEoDjIdLmxsbXNlcnZpY2UudjEuUmVzcG9uc2VGb3JtYXQSEwoLdG9vbF9jaG9pY2UYEyABKAkSJgoFdG9vbHMYFCADKAsyFy5sbG1zZXJ2aWNlLnYxLlRvb2xJdGVtEhsKE3VzZV9pbl9tZW1vcnlfY2FjaGUYFSABKAgSOAoLanNvbl9zY2hlbWEYFiABKAsyIy5sbG1zZXJ2aWNlLnYxLkpzb25TY2hlbWFEZWZpbml0aW9uEhMKC2NhbGxlcl9uYW1lGBcgASgJEhAKCGxvZ3Byb2JzGBggASgFEkIKE3NvdXJjZV9yZXN0cmljdGlvbnMYGSABKAsyIC5sbG1zZXJ2aWNlLnYxLlNvdXJjZVJlc3RyaWN0aW9uSAGIAQESLwoJbWV0YV9pbmZvGBogASgLMhcubGxtc2VydmljZS52MS5NZXRhSW5mb0gCiAEBEkUKFHRhc2tfY2hhcmFjdGVyaXN0aWNzGBsgASgLMiIubGxtc2VydmljZS52MS5UYXNrQ2hhcmFjdGVyaXN0aWNzSAOIAQESGwoTc2tpcF9kYl9wZXJzaXN0ZW5jZRgcIAEoCBI9ChByZWFzb25pbmdfZWZmb3J0GB0gASgOMh4ubGxtc2VydmljZS52MS5SZWFzb25pbmdFZmZvcnRIBIgBAUINCgtfcmVxdWVzdF9pZEIWChRfc291cmNlX3Jlc3RyaWN0aW9uc0IMCgpfbWV0YV9pbmZvQhcKFV90YXNrX2NoYXJhY3RlcmlzdGljc0ITChFfcmVhc29uaW5nX2VmZm9ydCKaAQoITWV0YUluZm8SNwoIbWV0YWRhdGEYASADKAsyJS5sbG1zZXJ2aWNlLnYxLk1ldGFJbmZvLk1ldGFkYXRhRW50cnkSGAoHcHVycG9zZRgCIAEoCUICGAFIAIgBARovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCCgoIX3B1cnBvc2UiZAoRU291cmNlUmVzdHJpY3Rpb24SDwoHc291cmNlcxgBIAMoCRI+ChByZXN0cmljdGlvbl90eXBlGAIgASgOMiQubGxtc2VydmljZS52MS5Tb3VyY2VSZXN0cmljdGlvblR5cGUiSAoMQ29udmVyc2F0aW9uEjgKDGNvbnZlcnNhdGlvbhgBIAMoCzIiLmxsbXNlcnZpY2UudjEuQ29udmVyc2F0aW9uTWVzc2FnZSKMAgoTQ29udmVyc2F0aW9uTWVzc2FnZRIMCgRyb2xlGAEgASgJEg8KB2NvbnRlbnQYAiABKAkSLwoObmVzdGVkX2NvbnRlbnQYAyADKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei8KCnRvb2xfY2FsbHMYBCADKAsyGy5sbG1zZXJ2aWNlLnYxLlRvb2xSZXNwb25zZRIMCgRuYW1lGAUgASgJEhQKDHRvb2xfY2FsbF9pZBgGIAEoCRI1Cg90aGlua2luZ19ibG9ja3MYByADKAsyHC5sbG1zZXJ2aWNlLnYxLlRoaW5raW5nQmxvY2sSGQoRcmVhc29uaW5nX2NvbnRlbnQYCCABKAkiRwoIVG9vbEl0ZW0SDAoEdHlwZRgBIAEoCRItCghmdW5jdGlvbhgCIAEoCzIbLmxsbXNlcnZpY2UudjEuRnVuY3Rpb25JdGVtImgKDEZ1bmN0aW9uSXRlbRIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEjUKCnBhcmFtZXRlcnMYAyABKAsyIS5sbG1zZXJ2aWNlLnYxLkZ1bmN0aW9uUGFyYW1ldGVycyJhChJGdW5jdGlvblBhcmFtZXRlcnMSDAoEdHlwZRgBIAEoCRIrCgpwcm9wZXJ0aWVzGAMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIQCghyZXF1aXJlZBgCIAMoCSLIAQoSQ29tcGxldGlvblJlc3BvbnNlEgoKAmlkGAEgASgJEg4KBm9iamVjdBgCIAEoCRIPCgdjcmVhdGVkGAMgASgDEg0KBW1vZGVsGAQgASgJEiYKB2Nob2ljZXMYBSADKAsyFS5sbG1zZXJ2aWNlLnYxLkNob2ljZRIjCgV1c2FnZRgGIAEoCzIULmxsbXNlcnZpY2UudjEuVXNhZ2USDQoFZXJyb3IYByABKAkSGgoSbWF4X2NvbnRleHRfbGVuZ3RoGAggASgFIswBCgZDaG9pY2USDQoFaW5kZXgYASABKAUSLQoHbWVzc2FnZRgCIAEoCzIcLmxsbXNlcnZpY2UudjEuQ2hvaWNlTWVzc2FnZRIVCg1maW5pc2hfcmVhc29uGAMgASgJEjQKCGxvZ3Byb2JzGAQgASgLMh0ubGxtc2VydmljZS52MS5DaG9pY2VMb2dwcm9ic0gAiAEBEioKCWNpdGF0aW9ucxgFIAMoCzIXLmxsbXNlcnZpY2UudjEuQ2l0YXRpb25CCwoJX2xvZ3Byb2JzIlcKCENpdGF0aW9uEgsKA3VybBgBIAEoCRISCgV0aXRsZRgCIAEoCUgAiAEBEhQKB3NuaXBwZXQYAyABKAlIAYgBAUIICgZfdGl0bGVCCgoIX3NuaXBwZXQiXQoOQ2hvaWNlTG9ncHJvYnMSOgoHY29udGVudBgBIAMoCzIpLmxsbXNlcnZpY2UudjEuQ2hhdENvbXBsZXRpb25Ub2tlbkxvZ3Byb2ISDwoHcmVmdXNhbBgCIAEoCSJ8ChpDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYhINCgV0b2tlbhgBIAEoCRINCgVieXRlcxgCIAMoBRIPCgdsb2dwcm9iGAMgASgCEi8KDHRvcF9sb2dwcm9icxgEIAMoCzIZLmxsbXNlcnZpY2UudjEuVG9wTG9ncHJvYiI7CgpUb3BMb2dwcm9iEg0KBXRva2VuGAEgASgJEg0KBWJ5dGVzGAIgAygFEg8KB2xvZ3Byb2IYAyABKAIiMwoQRnVuY3Rpb25SZXNwb25zZRIMCgRuYW1lGAEgASgJEhEKCWFyZ3VtZW50cxgCIAEoCSJbCgxUb29sUmVzcG9uc2USCgoCaWQYASABKAkSDAoEdHlwZRgCIAEoCRIxCghmdW5jdGlvbhgDIAEoCzIfLmxsbXNlcnZpY2UudjEuRnVuY3Rpb25SZXNwb25zZSJCCg1UaGlua2luZ0Jsb2NrEgwKBHR5cGUYASABKAkSEAoIdGhpbmtpbmcYAiABKAkSEQoJc2lnbmF0dXJlGAMgASgJIukBCg1DaG9pY2VNZXNzYWdlEgwKBHJvbGUYASABKAkSDwoHY29udGVudBgCIAEoCRI2Cg1mdW5jdGlvbl9jYWxsGAMgASgLMh8ubGxtc2VydmljZS52MS5GdW5jdGlvblJlc3BvbnNlEi8KCnRvb2xfY2FsbHMYBCADKAsyGy5sbG1zZXJ2aWNlLnYxLlRvb2xSZXNwb25zZRI1Cg90aGlua2luZ19ibG9ja3MYBSADKAsyHC5sbG1zZXJ2aWNlLnYxLlRoaW5raW5nQmxvY2sSGQoRcmVhc29uaW5nX2NvbnRlbnQYBiABKAkigAEKBVVzYWdlEhUKDXByb21wdF90b2tlbnMYASABKAUSGQoRY29tcGxldGlvbl90b2tlbnMYAiABKAUSFAoMdG90YWxfdG9rZW5zGAMgASgFEhUKDWNhY2hlZF90b2tlbnMYBCABKAUSGAoQcmVhc29uaW5nX3Rva2VucxgFIAEoBSKQAQoQRW1iZWRkaW5nUmVxdWVzdBINCgVpbnB1dBgBIAMoCRINCgVtb2RlbBgCIAEoCRIyCgpyZXF1ZXN0X2lkGAMgASgLMhkubGxtc2VydmljZS52MS5JZE1ldGFkYXRhSACIAQESGwoTdXNlX2luX21lbW9yeV9jYWNoZRgEIAEoCEINCgtfcmVxdWVzdF9pZCJnChVFbWJlZGRpbmdSZXNwb25zZURhdGESDgoGb2JqZWN0GAEgASgJEg0KBWluZGV4GAIgASgFEhEKCWVtYmVkZGluZxgDIAMoAhISCgVlcnJvchgEIAEoCUgAiAEBQggKBl9lcnJvciJmChFFbWJlZGRpbmdSZXNwb25zZRIOCgZvYmplY3QYASABKAkSDQoFbW9kZWwYAiABKAkSMgoEZGF0YRgDIAMoCzIkLmxsbXNlcnZpY2UudjEuRW1iZWRkaW5nUmVzcG9uc2VEYXRhIksKIkdldEFjdGl2ZURlcGxveW1lbnRzRm9yQllPTVJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnBlcnNvbmFfaWQYAiABKAkiWgojR2V0QWN0aXZlRGVwbG95bWVudHNGb3JCWU9NUmVzcG9uc2USMwoHZW50cmllcxgBIAMoCzIiLmxsbXNlcnZpY2UudjEuQllPTURlcGxveW1lbnRFbnRyeSKtAgogQ3JlYXRlQllPTURlcGxveW1lbnRFbnRyeVJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnBlcnNvbmFfaWQYAiABKAkSMwoGc3RhdHVzGAMgASgOMiMubGxtc2VydmljZS52MS5CWU9NRGVwbG95bWVudFN0YXR1cxIaChJzZWNyZXRfbWFuYWdlcl9yZWYYBCABKAkSFwoPZGVwbG95bWVudF9uYW1lGAUgASgJEhcKCm1vZGVsX3R5cGUYBiABKAlIAIgBARIXCgptb2RlbF9uYW1lGAcgASgJSAGIAQESGAoLYXBpX3ZlcnNpb24YCCABKAlIAogBAUINCgtfbW9kZWxfdHlwZUINCgtfbW9kZWxfbmFtZUIOCgxfYXBpX3ZlcnNpb24iZQohQ3JlYXRlQllPTURlcGxveW1lbnRFbnRyeVJlc3BvbnNlEjYKBWVudHJ5GAEgASgLMiIubGxtc2VydmljZS52MS5CWU9NRGVwbG95bWVudEVudHJ5SACIAQFCCAoGX2VudHJ5IrgBCiFVcGRhdGVCWU9NRGVwbG95bWVudFN0YXR1c1JlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnBlcnNvbmFfaWQYAiABKAkSFwoPZGVwbG95bWVudF9uYW1lGAMgASgJEjcKCm5ld19zdGF0dXMYBCABKA4yIy5sbG1zZXJ2aWNlLnYxLkJZT01EZXBsb3ltZW50U3RhdHVzEhoKEnNlY3JldF9tYW5hZ2VyX3JlZhgFIAEoCSJmCiJVcGRhdGVCWU9NRGVwbG95bWVudFN0YXR1c1Jlc3BvbnNlEjYKBWVudHJ5GAEgASgLMiIubGxtc2VydmljZS52MS5CWU9NRGVwbG95bWVudEVudHJ5SACIAQFCCAoGX2VudHJ5IqACChNCWU9NRGVwbG95bWVudEVudHJ5EhEKCXRlbmFudF9pZBgBIAEoCRISCgpwZXJzb25hX2lkGAIgASgJEjMKBnN0YXR1cxgDIAEoDjIjLmxsbXNlcnZpY2UudjEuQllPTURlcGxveW1lbnRTdGF0dXMSGgoSc2VjcmV0X21hbmFnZXJfcmVmGAQgASgJEhcKD2RlcGxveW1lbnRfbmFtZRgFIAEoCRIXCgptb2RlbF90eXBlGAYgASgJSACIAQESFwoKbW9kZWxfbmFtZRgHIAEoCUgBiAEBEhgKC2FwaV92ZXJzaW9uGAggASgJSAKIAQFCDQoLX21vZGVsX3R5cGVCDQoLX21vZGVsX25hbWVCDgoMX2FwaV92ZXJzaW9uKmkKFVNvdXJjZVJlc3RyaWN0aW9uVHlwZRIiCh5TT1VSQ0VfUkVTVFJJQ1RJT05fVU5TUEVDSUZJRUQQABIWChJXRUJfU0VBUkNIX1NPVVJDRVMQARIUChBDSVRBVElPTl9TT1VSQ0VTEAIq6QMKCFRhc2tUeXBlEgsKB0RFRkFVTFQQABITCg9DSEFUX0NPTVBMRVRJT04QARILCgdTQ09SSU5HEAISEgoOQ0xBU1NJRklDQVRJT04QAxIaChZJTkZPUk1BVElPTl9FWFRSQUNUSU9OEAQSFgoSUVVFU1RJT05fQU5TV0VSSU5HEAUSFAoQU0VRVUVOQ0VfVEFHR0lORxAGEhMKD1FVRVJZX1JFV1JJVElORxAHEhsKF0dSQU1NQVRJQ0FMX0NPUlJFQ1RJT05TEAgSEQoNU1VNTUFSSVpBVElPThAJEg0KCVJFQVNPTklORxAKEgcKA05MVRALEgcKA05MRxAMEhUKEUZBQ1RfVkVSSUZJQ0FUSU9OEA0SEwoPQ09ERV9HRU5FUkFUSU9OEA4SEwoPQ09ERV9DT1JSRUNUSU9OEA8SFgoSQ09ERV9VTkRFUlNUQU5ESU5HEBASFwoTQ09ERV9HRU5FUkFUSU9OX1NRTBAREhcKE0NPREVfQ09SUkVDVElPTl9TUUwQEhIVChFTUUxfVU5ERVJTVEFORElORxATEggKBE1BVEgQFBIXChNNQUNISU5FX1RSQU5TTEFUSU9OEBUSDgoKV0VCX1NFQVJDSBAWEhUKEUxBTkdVQUdFX01PREVMSU5HEBcq5gEKDE1vZGVsRmVhdHVyZRIdChlVTlNQRUNJRklFRF9NT0RFTF9GRUFUVVJFEAASEwoPVEVYVF9HRU5FUkFUSU9OEAESDAoIVEhJTktJTkcQAhIWChJLTk9XTEVER0VfR1JPVU5ERUQQAxINCglFTUJFRERJTkcQBBIKCgZWSVNJT04QBRIVChFTVFJVQ1RVUkVEX09VVFBVVBAGEg0KCUpTT05fTU9ERRAHEhQKEEZVTkNUSU9OX0NBTExJTkcQCBIQCgxDT01QVVRFUl9VU0UQCRITCg9MT0dfUFJPQkFCSUxJVFkQCiqYAQoIUHJvdmlkZXISGAoUUFJPVklERVJfVU5TUEVDSUZJRUQQABIKCgZPUEVOQUkQARINCglBTlRIUk9QSUMQAhIKCgZHT09HTEUQAxIICgRNRVRBEAQSDAoIREVFUFNFRUsQBhIJCgVBWlVSRRAHEg8KC09QRU5fU09VUkNFEAgSBwoDWEFJEAkSDgoKUEVSUExFWElUWRAKKlwKFE9wdGltaXphdGlvbkNyaXRlcmlhEhEKDU1PU1RfQUNDVVJBVEUQABIMCghDSEVBUEVTVBABEgwKCEJBTEFOQ0VEEAISCAoEQVVUTxADEgsKB0ZBU1RFU1QQBCqNAQoOUmVzcG9uc2VGb3JtYXQSHwobUkVTUE9OU0VfRk9STUFUX1VOU1BFQ0lGSUVEEAASGAoUUkVTUE9OU0VfRk9STUFUX1RFWFQQARIfChtSRVNQT05TRV9GT1JNQVRfSlNPTl9PQkpFQ1QQAhIfChtSRVNQT05TRV9GT1JNQVRfSlNPTl9TQ0hFTUEQAyrmAQoKU2NoZW1hVHlwZRIbChdTQ0hFTUFfVFlQRV9VTlNQRUNJRklFRBAAEhYKElNDSEVNQV9UWVBFX09CSkVDVBABEhUKEVNDSEVNQV9UWVBFX0FSUkFZEAISFgoSU0NIRU1BX1RZUEVfU1RSSU5HEAMSFgoSU0NIRU1BX1RZUEVfTlVNQkVSEAQSFwoTU0NIRU1BX1RZUEVfQk9PTEVBThAFEhcKE1NDSEVNQV9UWVBFX0lOVEVHRVIQBhIUChBTQ0hFTUFfVFlQRV9FTlVNEAcSFAoQU0NIRU1BX1RZUEVfTlVMTBAIKroBCg9SZWFzb25pbmdFZmZvcnQSHAoYTUlOSU1BTF9SRUFTT05JTkdfRUZGT1JUEAASGAoUTE9XX1JFQVNPTklOR19FRkZPUlQQARIbChdNRURJVU1fUkVBU09OSU5HX0VGRk9SVBACEhkKFUhJR0hfUkVBU09OSU5HX0VGRk9SVBADEhkKFU5PTkVfUkVBU09OSU5HX0VGRk9SVBAEEhwKGERFRkFVTFRfUkVBU09OSU5HX0VGRk9SVBAFKp0BCgxPdXRwdXRMZW5ndGgSHQoZT1VUUFVUX0xFTkdUSF9VTlNQRUNJRklFRBAAEhEKDVNJTkdMRV9QSFJBU0UQARITCg9CUklFRl9QQVJBR1JBUEgQAhIYChRERVRBSUxFRF9FWFBMQU5BVElPThADEhUKEUxPTkdfRk9STV9DT05URU5UEAQSFQoRRVhURU5ERURfRE9DVU1FTlQQBSpsCg5SZWFzb25pbmdMZXZlbBIfChtSRUFTT05JTkdfTEVWRUxfVU5TUEVDSUZJRUQQABIQCgxOT19SRUFTT05JTkcQARITCg9CQVNJQ19SRUFTT05JTkcQAhISCg5ERUVQX1JFQVNPTklORxADKtMBCg1SZWFzb25pbmdUeXBlEh4KGlJFQVNPTklOR19UWVBFX1VOU1BFQ0lGSUVEEAASEAoMUVVBTlRJVEFUSVZFEAESDwoLUVVBTElUQVRJVkUQAhINCglNVUxUSV9IT1AQAxIKCgZDQVVTQUwQBBINCglERURVQ1RJVkUQBRINCglJTkRVQ1RJVkUQBhIOCgpBTkFMT0dJQ0FMEAcSEgoOQ09VTlRFUkZBQ1RVQUwQCBIMCghURU1QT1JBTBAJEgsKB1NQQVRJQUwQChIHCgNTV0UQCyrmAQoKVGFza0RvbWFpbhIWChJET01BSU5fVU5TUEVDSUZJRUQQABIVChFHRU5FUkFMX0tOT1dMRURHRRABEhkKFVRFQ0hOSUNBTF9FTkdJTkVFUklORxACEhcKE1NDSUVOVElGSUNfUkVTRUFSQ0gQAxIWChJNRURJQ0FMX0hFQUxUSENBUkUQBBIUChBMRUdBTF9SRUdVTEFUT1JZEAUSFgoSRklOQU5DSUFMX0JVU0lORVNTEAYSGAoUQUNBREVNSUNfRURVQ0FUSU9OQUwQBxIVChFDUkVBVElWRV9BUlRJU1RJQxAIKnEKDUFjY3VyYWN5TGV2ZWwSHgoaQUNDVVJBQ1lfTEVWRUxfVU5TUEVDSUZJRUQQABIYChRBUFBST1hJTUFURV9BQ0NVUkFDWRABEhIKDkhJR0hfUFJFQ0lTSU9OEAISEgoOWkVST19UT0xFUkFOQ0UQAyqXAQoSTGF0ZW5jeVJlcXVpcmVtZW50EiMKH0xBVEVOQ1lfUkVRVUlSRU1FTlRfVU5TUEVDSUZJRUQQABINCglSRUFMX1RJTUUQARIPCgtMT1dfTEFURU5DWRACEhMKD0FWRVJBR0VfTEFURU5DWRADEhAKDEhJR0hfTEFURU5DWRAEEhUKEVZFUllfSElHSF9MQVRFTkNZEAUqPQoUQllPTURlcGxveW1lbnRTdGF0dXMSCgoGQUNUSVZFEAASDAoIRElTQUJMRUQQARILCgdERUxFVEVEEAIy2AYKCkxsbVNlcnZpY2USUQoKQ29tcGxldGlvbhIgLmxsbXNlcnZpY2UudjEuQ29tcGxldGlvblJlcXVlc3QaIS5sbG1zZXJ2aWNlLnYxLkNvbXBsZXRpb25SZXNwb25zZRJbChBDb21wbGV0aW9uU3RyZWFtEiAubGxtc2VydmljZS52MS5Db21wbGV0aW9uUmVxdWVzdBohLmxsbXNlcnZpY2UudjEuQ29tcGxldGlvblJlc3BvbnNlKAEwARJUCgtGdXNpb25Nb2RlbBIhLmxsbXNlcnZpY2UudjEuRnVzaW9uTW9kZWxSZXF1ZXN0GiIubGxtc2VydmljZS52MS5GdXNpb25Nb2RlbFJlc3BvbnNlEk4KCUVtYmVkZGluZxIfLmxsbXNlcnZpY2UudjEuRW1iZWRkaW5nUmVxdWVzdBogLmxsbXNlcnZpY2UudjEuRW1iZWRkaW5nUmVzcG9uc2USaQoSR2V0QXZhaWxhYmxlTW9kZWxzEigubGxtc2VydmljZS52MS5HZXRBdmFpbGFibGVNb2RlbHNSZXF1ZXN0GikubGxtc2VydmljZS52MS5HZXRBdmFpbGFibGVNb2RlbHNSZXNwb25zZRKEAQobR2V0QWN0aXZlRGVwbG95bWVudHNGb3JCWU9NEjEubGxtc2VydmljZS52MS5HZXRBY3RpdmVEZXBsb3ltZW50c0ZvckJZT01SZXF1ZXN0GjIubGxtc2VydmljZS52MS5HZXRBY3RpdmVEZXBsb3ltZW50c0ZvckJZT01SZXNwb25zZRJ+ChlDcmVhdGVCWU9NRGVwbG95bWVudEVudHJ5Ei8ubGxtc2VydmljZS52MS5DcmVhdGVCWU9NRGVwbG95bWVudEVudHJ5UmVxdWVzdBowLmxsbXNlcnZpY2UudjEuQ3JlYXRlQllPTURlcGxveW1lbnRFbnRyeVJlc3BvbnNlEoEBChpVcGRhdGVCWU9NRGVwbG95bWVudFN0YXR1cxIwLmxsbXNlcnZpY2UudjEuVXBkYXRlQllPTURlcGxveW1lbnRTdGF0dXNSZXF1ZXN0GjEubGxtc2VydmljZS52MS5VcGRhdGVCWU9NRGVwbG95bWVudFN0YXR1c1Jlc3BvbnNlQkdaRWdpdGh1Yi5jb20vRW1hLVVubGltaXRlZC9wcm90b3MvZ28vc2VydmljZS9sbG1zZXJ2aWNlL3YxO2xsbXNlcnZpY2V2MWIGcHJvdG8z", [file_google_protobuf_struct, file_service_llmservice_v1_pii]);
10
+ export const file_service_llmservice_v1_llmservice = /*@__PURE__*/ fileDesc("CiZzZXJ2aWNlL2xsbXNlcnZpY2UvdjEvbGxtc2VydmljZS5wcm90bxINbGxtc2VydmljZS52MSJwChRKc29uU2NoZW1hRGVmaW5pdGlvbhIMCgRuYW1lGAEgASgJEg4KBnN0cmljdBgCIAEoCBIlCgZzY2hlbWEYAyABKAsyFS5sbG1zZXJ2aWNlLnYxLlNjaGVtYRITCgtkZXNjcmlwdGlvbhgEIAEoCSLFBQoGU2NoZW1hEicKBHR5cGUYASABKA4yGS5sbG1zZXJ2aWNlLnYxLlNjaGVtYVR5cGUSEwoLZGVzY3JpcHRpb24YAiABKAkSOQoKcHJvcGVydGllcxgDIAMoCzIlLmxsbXNlcnZpY2UudjEuU2NoZW1hLlByb3BlcnRpZXNFbnRyeRIUCghyZXF1aXJlZBgEIAMoCUICGAESJAoFaXRlbXMYByABKAsyFS5sbG1zZXJ2aWNlLnYxLlNjaGVtYRIuCgRlbnVtGAggAygLMiAubGxtc2VydmljZS52MS5TY2hlbWEuVHlwZWRWYWx1ZRIQCghudWxsYWJsZRgJIAEoCBILCgNyZWYYCiABKAkSOwoLZGVmaW5pdGlvbnMYCyADKAsyJi5sbG1zZXJ2aWNlLnYxLlNjaGVtYS5EZWZpbml0aW9uc0VudHJ5EiUKBmFueV9vZhgMIAMoCzIVLmxsbXNlcnZpY2UudjEuU2NoZW1hEiUKBmFsbF9vZhgNIAMoCzIVLmxsbXNlcnZpY2UudjEuU2NoZW1hEiUKBm9uZV9vZhgOIAMoCzIVLmxsbXNlcnZpY2UudjEuU2NoZW1hGkgKD1Byb3BlcnRpZXNFbnRyeRILCgNrZXkYASABKAkSJAoFdmFsdWUYAiABKAsyFS5sbG1zZXJ2aWNlLnYxLlNjaGVtYToCOAEacAoKVHlwZWRWYWx1ZRIWCgxzdHJpbmdfdmFsdWUYASABKAlIABIWCgxudW1iZXJfdmFsdWUYAiABKAFIABITCglpbnRfdmFsdWUYAyABKANIABIUCgpib29sX3ZhbHVlGAQgASgISABCBwoFdmFsdWUaSQoQRGVmaW5pdGlvbnNFbnRyeRILCgNrZXkYASABKAkSJAoFdmFsdWUYAiABKAsyFS5sbG1zZXJ2aWNlLnYxLlNjaGVtYToCOAEiiQsKFUZ1c2lvbk1vZGVsUGFyYW1ldGVycxIeChZkZWZhdWx0X2ZhbGxiYWNrX21vZGVsGAEgASgJEhkKDGdsb2JhbF9tb2RlbBgCIAEoCUgAiAEBElwKFXRhc2tfbW9kZWxfcHJlZmVyZW5jZRgEIAMoCzI9LmxsbXNlcnZpY2UudjEuRnVzaW9uTW9kZWxQYXJhbWV0ZXJzLlRhc2tNb2RlbFByZWZlcmVuY2VFbnRyeRInChptaW5pbXVtX2FjY3VyYWN5X3RocmVzaG9sZBgFIAEoAkgBiAEBEh0KEGRlc2lyZWRfYWNjdXJhY3kYBiABKAJIAogBARIYCgt0ZW1wZXJhdHVyZRgHIAEoAkgDiAEBEhgKC251bV9jaG9pY2VzGAggASgFSASIAQESRwoVb3B0aW1pemF0aW9uX2NyaXRlcmlhGAkgASgOMiMubGxtc2VydmljZS52MS5PcHRpbWl6YXRpb25Dcml0ZXJpYUgFiAEBEhcKD3NlbGVjdGVkX21vZGVscxgKIAMoCRISCgV0b3BfcBgLIAEoAkgGiAEBEhcKCm1heF90b2tlbnMYDCABKAVIB4gBARIMCgRzdG9wGA0gAygJEjsKD3Jlc3BvbnNlX2Zvcm1hdBgOIAEoDjIdLmxsbXNlcnZpY2UudjEuUmVzcG9uc2VGb3JtYXRICIgBARI9Cgtqc29uX3NjaGVtYRgPIAEoCzIjLmxsbXNlcnZpY2UudjEuSnNvblNjaGVtYURlZmluaXRpb25ICYgBARIuCglmdW5jdGlvbnMYECADKAsyGy5sbG1zZXJ2aWNlLnYxLkZ1bmN0aW9uSXRlbRImCgV0b29scxgRIAMoCzIXLmxsbXNlcnZpY2UudjEuVG9vbEl0ZW0SGAoLdG9vbF9jaG9pY2UYEiABKAlICogBARIVCghsb2dwcm9icxgTIAEoBUgLiAEBEiAKE3VzZV9pbl9tZW1vcnlfY2FjaGUYFCABKAhIDIgBARIcCg9yZXF1ZXN0X3RpbWVvdXQYFSABKAVIDYgBARI2ChFyZXF1aXJlZF9mZWF0dXJlcxgWIAMoDjIbLmxsbXNlcnZpY2UudjEuTW9kZWxGZWF0dXJlEjQKE3ByZWZlcnJlZF9wcm92aWRlcnMYFyADKA4yFy5sbG1zZXJ2aWNlLnYxLlByb3ZpZGVyEkUKFHRhc2tfY2hhcmFjdGVyaXN0aWNzGBggASgLMiIubGxtc2VydmljZS52MS5UYXNrQ2hhcmFjdGVyaXN0aWNzSA6IAQESPQoQcmVhc29uaW5nX2VmZm9ydBgZIAEoDjIeLmxsbXNlcnZpY2UudjEuUmVhc29uaW5nRWZmb3J0SA+IAQEaOgoYVGFza01vZGVsUHJlZmVyZW5jZUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCDwoNX2dsb2JhbF9tb2RlbEIdChtfbWluaW11bV9hY2N1cmFjeV90aHJlc2hvbGRCEwoRX2Rlc2lyZWRfYWNjdXJhY3lCDgoMX3RlbXBlcmF0dXJlQg4KDF9udW1fY2hvaWNlc0IYChZfb3B0aW1pemF0aW9uX2NyaXRlcmlhQggKBl90b3BfcEINCgtfbWF4X3Rva2Vuc0ISChBfcmVzcG9uc2VfZm9ybWF0Qg4KDF9qc29uX3NjaGVtYUIOCgxfdG9vbF9jaG9pY2VCCwoJX2xvZ3Byb2JzQhYKFF91c2VfaW5fbWVtb3J5X2NhY2hlQhIKEF9yZXF1ZXN0X3RpbWVvdXRCFwoVX3Rhc2tfY2hhcmFjdGVyaXN0aWNzQhMKEV9yZWFzb25pbmdfZWZmb3J0SgQIAxAEUhBtb2RlbF9leGNsdXNpb25zIv4BChNUYXNrQ2hhcmFjdGVyaXN0aWNzEjIKDW91dHB1dF9mb3JtYXQYASABKAsyGy5sbG1zZXJ2aWNlLnYxLk91dHB1dEZvcm1hdBJAChRjb2duaXRpdmVfY29tcGxleGl0eRgCIAEoCzIiLmxsbXNlcnZpY2UudjEuQ29nbml0aXZlQ29tcGxleGl0eRJAChRxdWFsaXR5X3JlcXVpcmVtZW50cxgDIAEoCzIiLmxsbXNlcnZpY2UudjEuUXVhbGl0eVJlcXVpcmVtZW50cxIvCgx0YXNrX2RvbWFpbnMYBCADKA4yGS5sbG1zZXJ2aWNlLnYxLlRhc2tEb21haW4ihwEKDE91dHB1dEZvcm1hdBI0Cg9leHBlY3RlZF9sZW5ndGgYASABKA4yGy5sbG1zZXJ2aWNlLnYxLk91dHB1dExlbmd0aBIaChJyZXF1aXJlc19jaXRhdGlvbnMYAiABKAgSJQodcmVxdWlyZXNfZGV0ZXJtaW5pc3RpY19vdXRwdXQYAyABKAgihAEKE0NvZ25pdGl2ZUNvbXBsZXhpdHkSNgoPcmVhc29uaW5nX2xldmVsGAEgASgOMh0ubGxtc2VydmljZS52MS5SZWFzb25pbmdMZXZlbBI1Cg9yZWFzb25pbmdfdHlwZXMYAiADKA4yHC5sbG1zZXJ2aWNlLnYxLlJlYXNvbmluZ1R5cGUilQEKE1F1YWxpdHlSZXF1aXJlbWVudHMSNwoRcmVxdWlyZWRfYWNjdXJhY3kYASABKA4yHC5sbG1zZXJ2aWNlLnYxLkFjY3VyYWN5TGV2ZWwSIQoZcmVxdWlyZXNfZmFjdHVhbF9hY2N1cmFjeRgCIAEoCBIiChpzaG91bGRfZXhwcmVzc191bmNlcnRhaW50eRgDIAEoCCKaAQoKSWRNZXRhZGF0YRIRCgl0ZW5hbnRfaWQYASABKAkSDwoHdXNlcl9pZBgCIAEoCRISCgpwZXJzb25hX2lkGAMgASgJEhAKCGFnZW50X2lkGAQgASgJEhcKD2NvbnZlcnNhdGlvbl9pZBgFIAEoCRITCgtxdWVzdGlvbl9pZBgGIAEoCRIUCgxhZ2VudF9ydW5faWQYByABKAki5gMKEkZ1c2lvbk1vZGVsUmVxdWVzdBIuCgtpZF9tZXRhZGF0YRgBIAEoCzIZLmxsbXNlcnZpY2UudjEuSWRNZXRhZGF0YRIqCgl0YXNrX3R5cGUYAiABKA4yFy5sbG1zZXJ2aWNlLnYxLlRhc2tUeXBlEi0KCG1lc3NhZ2VzGAMgASgLMhsubGxtc2VydmljZS52MS5Db252ZXJzYXRpb24SEwoGcHJvbXB0GAQgASgJSACIAQESRQoXZnVzaW9uX21vZGVsX3BhcmFtZXRlcnMYBSABKAsyJC5sbG1zZXJ2aWNlLnYxLkZ1c2lvbk1vZGVsUGFyYW1ldGVycxIXCgpkZWJ1Z19tb2RlGAYgASgISAGIAQESOQoMc2FuaXRpemF0aW9uGAcgASgLMiMubGxtc2VydmljZS52MS5EYXRhUHJvdGVjdGlvbkNvbmZpZxJFChR0YXNrX2NoYXJhY3RlcmlzdGljcxgIIAEoCzIiLmxsbXNlcnZpY2UudjEuVGFza0NoYXJhY3RlcmlzdGljc0gCiAEBEhsKE3NraXBfZGJfcGVyc2lzdGVuY2UYCSABKAhCCQoHX3Byb21wdEINCgtfZGVidWdfbW9kZUIXChVfdGFza19jaGFyYWN0ZXJpc3RpY3Mi3gEKD1Jlc3BvbnNlTWV0cmljcxIPCgdsYXRlbmN5GAEgASgCEgwKBGNvc3QYAiABKAISFAoMaW5wdXRfdG9rZW5zGAMgASgFEhUKDW91dHB1dF90b2tlbnMYBCABKAUSEgoKaW5wdXRfY29zdBgFIAEoAhITCgtvdXRwdXRfY29zdBgGIAEoAhISCgptb2RlbF9uYW1lGAggAygJEkIKFW9wdGltaXphdGlvbl9jcml0ZXJpYRgJIAEoDjIjLmxsbXNlcnZpY2UudjEuT3B0aW1pemF0aW9uQ3JpdGVyaWEi7gEKDkZ1c2lvbk1vZGVsTG9nEg4KBmxvZ19pZBgBIAEoCRIaChJyZXNwb25zZV90aW1lc3RhbXAYAiABKAkSMgoHcmVxdWVzdBgDIAEoCzIhLmxsbXNlcnZpY2UudjEuRnVzaW9uTW9kZWxSZXF1ZXN0EjQKCHJlc3BvbnNlGAQgASgLMiIubGxtc2VydmljZS52MS5GdXNpb25Nb2RlbFJlc3BvbnNlEi8KB21ldHJpY3MYBSABKAsyHi5sbG1zZXJ2aWNlLnYxLlJlc3BvbnNlTWV0cmljcxIVCg1yZXNwb25zZV90eXBlGAYgASgJIokCChNGdXNpb25Nb2RlbFJlc3BvbnNlEhMKC3Jlc3BvbnNlX2lkGAEgASgJEjUKCmNvbXBsZXRpb24YAiABKAsyIS5sbG1zZXJ2aWNlLnYxLkNvbXBsZXRpb25SZXNwb25zZRIfChJyZXNwb25zZV90aW1lc3RhbXAYAyABKAlIAIgBARI0CgdtZXRyaWNzGAQgASgLMh4ubGxtc2VydmljZS52MS5SZXNwb25zZU1ldHJpY3NIAYgBARIaCg1yZXNwb25zZV90eXBlGAUgASgJSAKIAQFCFQoTX3Jlc3BvbnNlX3RpbWVzdGFtcEIKCghfbWV0cmljc0IQCg5fcmVzcG9uc2VfdHlwZSKYAgoZR2V0QXZhaWxhYmxlTW9kZWxzUmVxdWVzdBIRCgltb2RlbF9pZHMYASADKAkSNgoRcmVxdWlyZWRfZmVhdHVyZXMYAiADKA4yGy5sbG1zZXJ2aWNlLnYxLk1vZGVsRmVhdHVyZRIqCglwcm92aWRlcnMYBCADKA4yFy5sbG1zZXJ2aWNlLnYxLlByb3ZpZGVyEh8KEm1pbl9jb250ZXh0X3dpbmRvdxgFIAEoBUgAiAEBEioKHW1heF9jb3N0X3Blcl8xa19vdXRwdXRfdG9rZW5zGAYgASgCSAGIAQFCFQoTX21pbl9jb250ZXh0X3dpbmRvd0IgCh5fbWF4X2Nvc3RfcGVyXzFrX291dHB1dF90b2tlbnMiYQoTRW1iZWRkaW5nTW9kZWxTcGVjcxISCgpkaW1lbnNpb25zGAEgASgFEhoKEm1heF9jb250ZXh0X2xlbmd0aBgCIAEoBRIaChJjb3N0X3Blcl8xa190b2tlbnMYAyABKAIipgMKGFRleHRHZW5lcmF0aW9uTW9kZWxTcGVjcxIaChJtYXhfY29udGV4dF9sZW5ndGgYASABKAUSGQoRbWF4X291dHB1dF90b2tlbnMYAiABKAUSIAoYY29zdF9wZXJfMWtfaW5wdXRfdG9rZW5zGAMgASgCEiEKGWNvc3RfcGVyXzFrX291dHB1dF90b2tlbnMYBCABKAISJwoadGltZV90b19maXJzdF9hbnN3ZXJfdG9rZW4YBSABKAJIAIgBARIVCgh0dGZ0XzEwaxgGIAEoAkgBiAEBEhYKCXR0ZnRfMTAwaxgHIAEoAkgCiAEBEhoKDXR0ZnRfdmFyaWFuY2UYCCABKAJIA4gBARIQCgN0cHMYCSABKAJIBIgBARIeChFlMmVfcmVzcG9uc2VfdGltZRgKIAEoAkgFiAEBQh0KG190aW1lX3RvX2ZpcnN0X2Fuc3dlcl90b2tlbkILCglfdHRmdF8xMGtCDAoKX3R0ZnRfMTAwa0IQCg5fdHRmdF92YXJpYW5jZUIGCgRfdHBzQhQKEl9lMmVfcmVzcG9uc2VfdGltZSKOAwoLTW9kZWxDb25maWcSEAoIbW9kZWxfaWQYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEikKCHByb3ZpZGVyGAMgASgOMhcubGxtc2VydmljZS52MS5Qcm92aWRlchIaChJtYXhfY29udGV4dF9sZW5ndGgYBCABKAUSLQoIZmVhdHVyZXMYBSADKA4yGy5sbG1zZXJ2aWNlLnYxLk1vZGVsRmVhdHVyZRJIChV0ZXh0X2dlbmVyYXRpb25fc3BlY3MYByABKAsyJy5sbG1zZXJ2aWNlLnYxLlRleHRHZW5lcmF0aW9uTW9kZWxTcGVjc0gAEj0KD2VtYmVkZGluZ19zcGVjcxgIIAEoCzIiLmxsbXNlcnZpY2UudjEuRW1iZWRkaW5nTW9kZWxTcGVjc0gAEigKG3N1cHBvcnRlZF9tb2RlbHNfZW51bV92YWx1ZRgeIAEoBUgBiAEBQg4KDG1vZGVsX3BhcmFtc0IeChxfc3VwcG9ydGVkX21vZGVsc19lbnVtX3ZhbHVlIkgKGkdldEF2YWlsYWJsZU1vZGVsc1Jlc3BvbnNlEioKBm1vZGVscxgBIAMoCzIaLmxsbXNlcnZpY2UudjEuTW9kZWxDb25maWciwwgKEUNvbXBsZXRpb25SZXF1ZXN0Eg0KBW1vZGVsGAEgAygJEi0KCG1lc3NhZ2VzGAIgASgLMhsubGxtc2VydmljZS52MS5Db252ZXJzYXRpb24SLgoJZnVuY3Rpb25zGAMgAygLMhsubGxtc2VydmljZS52MS5GdW5jdGlvbkl0ZW0SEwoLdGVtcGVyYXR1cmUYBCABKAISDQoFdG9wX3AYBSABKAISEwoLbnVtX2Nob2ljZXMYBiABKAUSDgoGc3RyZWFtGAcgASgIEgwKBHN0b3AYCCADKAkSEgoKbWF4X3Rva2VucxgJIAEoBRIMCgR1c2VyGAogASgJEhcKD3JlcXVlc3RfdGltZW91dBgLIAEoBRITCgtudW1fcmV0cmllcxgMIAEoBRIVCg1tb2NrX3Jlc3BvbnNlGA0gASgJEg0KBWJhdGNoGA4gASgJEhYKDmxvYWRfYmFsYW5jaW5nGA8gASgJEjkKDHNhbml0aXphdGlvbhgQIAEoCzIjLmxsbXNlcnZpY2UudjEuRGF0YVByb3RlY3Rpb25Db25maWcSMgoKcmVxdWVzdF9pZBgRIAEoCzIZLmxsbXNlcnZpY2UudjEuSWRNZXRhZGF0YUgAiAEBEjYKD3Jlc3BvbnNlX2Zvcm1hdBgSIAEoDjIdLmxsbXNlcnZpY2UudjEuUmVzcG9uc2VGb3JtYXQSEwoLdG9vbF9jaG9pY2UYEyABKAkSJgoFdG9vbHMYFCADKAsyFy5sbG1zZXJ2aWNlLnYxLlRvb2xJdGVtEhsKE3VzZV9pbl9tZW1vcnlfY2FjaGUYFSABKAgSOAoLanNvbl9zY2hlbWEYFiABKAsyIy5sbG1zZXJ2aWNlLnYxLkpzb25TY2hlbWFEZWZpbml0aW9uEhMKC2NhbGxlcl9uYW1lGBcgASgJEhAKCGxvZ3Byb2JzGBggASgFEkIKE3NvdXJjZV9yZXN0cmljdGlvbnMYGSABKAsyIC5sbG1zZXJ2aWNlLnYxLlNvdXJjZVJlc3RyaWN0aW9uSAGIAQESLwoJbWV0YV9pbmZvGBogASgLMhcubGxtc2VydmljZS52MS5NZXRhSW5mb0gCiAEBEkUKFHRhc2tfY2hhcmFjdGVyaXN0aWNzGBsgASgLMiIubGxtc2VydmljZS52MS5UYXNrQ2hhcmFjdGVyaXN0aWNzSAOIAQESGwoTc2tpcF9kYl9wZXJzaXN0ZW5jZRgcIAEoCBI9ChByZWFzb25pbmdfZWZmb3J0GB0gASgOMh4ubGxtc2VydmljZS52MS5SZWFzb25pbmdFZmZvcnRIBIgBAUINCgtfcmVxdWVzdF9pZEIWChRfc291cmNlX3Jlc3RyaWN0aW9uc0IMCgpfbWV0YV9pbmZvQhcKFV90YXNrX2NoYXJhY3RlcmlzdGljc0ITChFfcmVhc29uaW5nX2VmZm9ydCKaAQoITWV0YUluZm8SNwoIbWV0YWRhdGEYASADKAsyJS5sbG1zZXJ2aWNlLnYxLk1ldGFJbmZvLk1ldGFkYXRhRW50cnkSGAoHcHVycG9zZRgCIAEoCUICGAFIAIgBARovCg1NZXRhZGF0YUVudHJ5EgsKA2tleRgBIAEoCRINCgV2YWx1ZRgCIAEoCToCOAFCCgoIX3B1cnBvc2UiZAoRU291cmNlUmVzdHJpY3Rpb24SDwoHc291cmNlcxgBIAMoCRI+ChByZXN0cmljdGlvbl90eXBlGAIgASgOMiQubGxtc2VydmljZS52MS5Tb3VyY2VSZXN0cmljdGlvblR5cGUiSAoMQ29udmVyc2F0aW9uEjgKDGNvbnZlcnNhdGlvbhgBIAMoCzIiLmxsbXNlcnZpY2UudjEuQ29udmVyc2F0aW9uTWVzc2FnZSKMAgoTQ29udmVyc2F0aW9uTWVzc2FnZRIMCgRyb2xlGAEgASgJEg8KB2NvbnRlbnQYAiABKAkSLwoObmVzdGVkX2NvbnRlbnQYAyADKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0Ei8KCnRvb2xfY2FsbHMYBCADKAsyGy5sbG1zZXJ2aWNlLnYxLlRvb2xSZXNwb25zZRIMCgRuYW1lGAUgASgJEhQKDHRvb2xfY2FsbF9pZBgGIAEoCRI1Cg90aGlua2luZ19ibG9ja3MYByADKAsyHC5sbG1zZXJ2aWNlLnYxLlRoaW5raW5nQmxvY2sSGQoRcmVhc29uaW5nX2NvbnRlbnQYCCABKAkiRwoIVG9vbEl0ZW0SDAoEdHlwZRgBIAEoCRItCghmdW5jdGlvbhgCIAEoCzIbLmxsbXNlcnZpY2UudjEuRnVuY3Rpb25JdGVtImgKDEZ1bmN0aW9uSXRlbRIMCgRuYW1lGAEgASgJEhMKC2Rlc2NyaXB0aW9uGAIgASgJEjUKCnBhcmFtZXRlcnMYAyABKAsyIS5sbG1zZXJ2aWNlLnYxLkZ1bmN0aW9uUGFyYW1ldGVycyJhChJGdW5jdGlvblBhcmFtZXRlcnMSDAoEdHlwZRgBIAEoCRIrCgpwcm9wZXJ0aWVzGAMgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdBIQCghyZXF1aXJlZBgCIAMoCSKAAgoSQ29tcGxldGlvblJlc3BvbnNlEgoKAmlkGAEgASgJEg4KBm9iamVjdBgCIAEoCRIPCgdjcmVhdGVkGAMgASgDEg0KBW1vZGVsGAQgASgJEiYKB2Nob2ljZXMYBSADKAsyFS5sbG1zZXJ2aWNlLnYxLkNob2ljZRIjCgV1c2FnZRgGIAEoCzIULmxsbXNlcnZpY2UudjEuVXNhZ2USDQoFZXJyb3IYByABKAkSGgoSbWF4X2NvbnRleHRfbGVuZ3RoGAggASgFEjYKD2NvbXBsZXRpb25fY29zdBgJIAEoCzIdLmxsbXNlcnZpY2UudjEuQ29tcGxldGlvbkNvc3QiPgoOQ29tcGxldGlvbkNvc3QSEwoLcHJvbXB0X2Nvc3QYASABKAISFwoPY29tcGxldGlvbl9jb3N0GAIgASgCIswBCgZDaG9pY2USDQoFaW5kZXgYASABKAUSLQoHbWVzc2FnZRgCIAEoCzIcLmxsbXNlcnZpY2UudjEuQ2hvaWNlTWVzc2FnZRIVCg1maW5pc2hfcmVhc29uGAMgASgJEjQKCGxvZ3Byb2JzGAQgASgLMh0ubGxtc2VydmljZS52MS5DaG9pY2VMb2dwcm9ic0gAiAEBEioKCWNpdGF0aW9ucxgFIAMoCzIXLmxsbXNlcnZpY2UudjEuQ2l0YXRpb25CCwoJX2xvZ3Byb2JzIlcKCENpdGF0aW9uEgsKA3VybBgBIAEoCRISCgV0aXRsZRgCIAEoCUgAiAEBEhQKB3NuaXBwZXQYAyABKAlIAYgBAUIICgZfdGl0bGVCCgoIX3NuaXBwZXQiXQoOQ2hvaWNlTG9ncHJvYnMSOgoHY29udGVudBgBIAMoCzIpLmxsbXNlcnZpY2UudjEuQ2hhdENvbXBsZXRpb25Ub2tlbkxvZ3Byb2ISDwoHcmVmdXNhbBgCIAEoCSJ8ChpDaGF0Q29tcGxldGlvblRva2VuTG9ncHJvYhINCgV0b2tlbhgBIAEoCRINCgVieXRlcxgCIAMoBRIPCgdsb2dwcm9iGAMgASgCEi8KDHRvcF9sb2dwcm9icxgEIAMoCzIZLmxsbXNlcnZpY2UudjEuVG9wTG9ncHJvYiI7CgpUb3BMb2dwcm9iEg0KBXRva2VuGAEgASgJEg0KBWJ5dGVzGAIgAygFEg8KB2xvZ3Byb2IYAyABKAIiMwoQRnVuY3Rpb25SZXNwb25zZRIMCgRuYW1lGAEgASgJEhEKCWFyZ3VtZW50cxgCIAEoCSJbCgxUb29sUmVzcG9uc2USCgoCaWQYASABKAkSDAoEdHlwZRgCIAEoCRIxCghmdW5jdGlvbhgDIAEoCzIfLmxsbXNlcnZpY2UudjEuRnVuY3Rpb25SZXNwb25zZSJCCg1UaGlua2luZ0Jsb2NrEgwKBHR5cGUYASABKAkSEAoIdGhpbmtpbmcYAiABKAkSEQoJc2lnbmF0dXJlGAMgASgJIukBCg1DaG9pY2VNZXNzYWdlEgwKBHJvbGUYASABKAkSDwoHY29udGVudBgCIAEoCRI2Cg1mdW5jdGlvbl9jYWxsGAMgASgLMh8ubGxtc2VydmljZS52MS5GdW5jdGlvblJlc3BvbnNlEi8KCnRvb2xfY2FsbHMYBCADKAsyGy5sbG1zZXJ2aWNlLnYxLlRvb2xSZXNwb25zZRI1Cg90aGlua2luZ19ibG9ja3MYBSADKAsyHC5sbG1zZXJ2aWNlLnYxLlRoaW5raW5nQmxvY2sSGQoRcmVhc29uaW5nX2NvbnRlbnQYBiABKAkigAEKBVVzYWdlEhUKDXByb21wdF90b2tlbnMYASABKAUSGQoRY29tcGxldGlvbl90b2tlbnMYAiABKAUSFAoMdG90YWxfdG9rZW5zGAMgASgFEhUKDWNhY2hlZF90b2tlbnMYBCABKAUSGAoQcmVhc29uaW5nX3Rva2VucxgFIAEoBSKQAQoQRW1iZWRkaW5nUmVxdWVzdBINCgVpbnB1dBgBIAMoCRINCgVtb2RlbBgCIAEoCRIyCgpyZXF1ZXN0X2lkGAMgASgLMhkubGxtc2VydmljZS52MS5JZE1ldGFkYXRhSACIAQESGwoTdXNlX2luX21lbW9yeV9jYWNoZRgEIAEoCEINCgtfcmVxdWVzdF9pZCJnChVFbWJlZGRpbmdSZXNwb25zZURhdGESDgoGb2JqZWN0GAEgASgJEg0KBWluZGV4GAIgASgFEhEKCWVtYmVkZGluZxgDIAMoAhISCgVlcnJvchgEIAEoCUgAiAEBQggKBl9lcnJvciJmChFFbWJlZGRpbmdSZXNwb25zZRIOCgZvYmplY3QYASABKAkSDQoFbW9kZWwYAiABKAkSMgoEZGF0YRgDIAMoCzIkLmxsbXNlcnZpY2UudjEuRW1iZWRkaW5nUmVzcG9uc2VEYXRhIksKIkdldEFjdGl2ZURlcGxveW1lbnRzRm9yQllPTVJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnBlcnNvbmFfaWQYAiABKAkiWgojR2V0QWN0aXZlRGVwbG95bWVudHNGb3JCWU9NUmVzcG9uc2USMwoHZW50cmllcxgBIAMoCzIiLmxsbXNlcnZpY2UudjEuQllPTURlcGxveW1lbnRFbnRyeSKtAgogQ3JlYXRlQllPTURlcGxveW1lbnRFbnRyeVJlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnBlcnNvbmFfaWQYAiABKAkSMwoGc3RhdHVzGAMgASgOMiMubGxtc2VydmljZS52MS5CWU9NRGVwbG95bWVudFN0YXR1cxIaChJzZWNyZXRfbWFuYWdlcl9yZWYYBCABKAkSFwoPZGVwbG95bWVudF9uYW1lGAUgASgJEhcKCm1vZGVsX3R5cGUYBiABKAlIAIgBARIXCgptb2RlbF9uYW1lGAcgASgJSAGIAQESGAoLYXBpX3ZlcnNpb24YCCABKAlIAogBAUINCgtfbW9kZWxfdHlwZUINCgtfbW9kZWxfbmFtZUIOCgxfYXBpX3ZlcnNpb24iZQohQ3JlYXRlQllPTURlcGxveW1lbnRFbnRyeVJlc3BvbnNlEjYKBWVudHJ5GAEgASgLMiIubGxtc2VydmljZS52MS5CWU9NRGVwbG95bWVudEVudHJ5SACIAQFCCAoGX2VudHJ5IrgBCiFVcGRhdGVCWU9NRGVwbG95bWVudFN0YXR1c1JlcXVlc3QSEQoJdGVuYW50X2lkGAEgASgJEhIKCnBlcnNvbmFfaWQYAiABKAkSFwoPZGVwbG95bWVudF9uYW1lGAMgASgJEjcKCm5ld19zdGF0dXMYBCABKA4yIy5sbG1zZXJ2aWNlLnYxLkJZT01EZXBsb3ltZW50U3RhdHVzEhoKEnNlY3JldF9tYW5hZ2VyX3JlZhgFIAEoCSJmCiJVcGRhdGVCWU9NRGVwbG95bWVudFN0YXR1c1Jlc3BvbnNlEjYKBWVudHJ5GAEgASgLMiIubGxtc2VydmljZS52MS5CWU9NRGVwbG95bWVudEVudHJ5SACIAQFCCAoGX2VudHJ5IqACChNCWU9NRGVwbG95bWVudEVudHJ5EhEKCXRlbmFudF9pZBgBIAEoCRISCgpwZXJzb25hX2lkGAIgASgJEjMKBnN0YXR1cxgDIAEoDjIjLmxsbXNlcnZpY2UudjEuQllPTURlcGxveW1lbnRTdGF0dXMSGgoSc2VjcmV0X21hbmFnZXJfcmVmGAQgASgJEhcKD2RlcGxveW1lbnRfbmFtZRgFIAEoCRIXCgptb2RlbF90eXBlGAYgASgJSACIAQESFwoKbW9kZWxfbmFtZRgHIAEoCUgBiAEBEhgKC2FwaV92ZXJzaW9uGAggASgJSAKIAQFCDQoLX21vZGVsX3R5cGVCDQoLX21vZGVsX25hbWVCDgoMX2FwaV92ZXJzaW9uKmkKFVNvdXJjZVJlc3RyaWN0aW9uVHlwZRIiCh5TT1VSQ0VfUkVTVFJJQ1RJT05fVU5TUEVDSUZJRUQQABIWChJXRUJfU0VBUkNIX1NPVVJDRVMQARIUChBDSVRBVElPTl9TT1VSQ0VTEAIq6QMKCFRhc2tUeXBlEgsKB0RFRkFVTFQQABITCg9DSEFUX0NPTVBMRVRJT04QARILCgdTQ09SSU5HEAISEgoOQ0xBU1NJRklDQVRJT04QAxIaChZJTkZPUk1BVElPTl9FWFRSQUNUSU9OEAQSFgoSUVVFU1RJT05fQU5TV0VSSU5HEAUSFAoQU0VRVUVOQ0VfVEFHR0lORxAGEhMKD1FVRVJZX1JFV1JJVElORxAHEhsKF0dSQU1NQVRJQ0FMX0NPUlJFQ1RJT05TEAgSEQoNU1VNTUFSSVpBVElPThAJEg0KCVJFQVNPTklORxAKEgcKA05MVRALEgcKA05MRxAMEhUKEUZBQ1RfVkVSSUZJQ0FUSU9OEA0SEwoPQ09ERV9HRU5FUkFUSU9OEA4SEwoPQ09ERV9DT1JSRUNUSU9OEA8SFgoSQ09ERV9VTkRFUlNUQU5ESU5HEBASFwoTQ09ERV9HRU5FUkFUSU9OX1NRTBAREhcKE0NPREVfQ09SUkVDVElPTl9TUUwQEhIVChFTUUxfVU5ERVJTVEFORElORxATEggKBE1BVEgQFBIXChNNQUNISU5FX1RSQU5TTEFUSU9OEBUSDgoKV0VCX1NFQVJDSBAWEhUKEUxBTkdVQUdFX01PREVMSU5HEBcq5gEKDE1vZGVsRmVhdHVyZRIdChlVTlNQRUNJRklFRF9NT0RFTF9GRUFUVVJFEAASEwoPVEVYVF9HRU5FUkFUSU9OEAESDAoIVEhJTktJTkcQAhIWChJLTk9XTEVER0VfR1JPVU5ERUQQAxINCglFTUJFRERJTkcQBBIKCgZWSVNJT04QBRIVChFTVFJVQ1RVUkVEX09VVFBVVBAGEg0KCUpTT05fTU9ERRAHEhQKEEZVTkNUSU9OX0NBTExJTkcQCBIQCgxDT01QVVRFUl9VU0UQCRITCg9MT0dfUFJPQkFCSUxJVFkQCiqYAQoIUHJvdmlkZXISGAoUUFJPVklERVJfVU5TUEVDSUZJRUQQABIKCgZPUEVOQUkQARINCglBTlRIUk9QSUMQAhIKCgZHT09HTEUQAxIICgRNRVRBEAQSDAoIREVFUFNFRUsQBhIJCgVBWlVSRRAHEg8KC09QRU5fU09VUkNFEAgSBwoDWEFJEAkSDgoKUEVSUExFWElUWRAKKlwKFE9wdGltaXphdGlvbkNyaXRlcmlhEhEKDU1PU1RfQUNDVVJBVEUQABIMCghDSEVBUEVTVBABEgwKCEJBTEFOQ0VEEAISCAoEQVVUTxADEgsKB0ZBU1RFU1QQBCqNAQoOUmVzcG9uc2VGb3JtYXQSHwobUkVTUE9OU0VfRk9STUFUX1VOU1BFQ0lGSUVEEAASGAoUUkVTUE9OU0VfRk9STUFUX1RFWFQQARIfChtSRVNQT05TRV9GT1JNQVRfSlNPTl9PQkpFQ1QQAhIfChtSRVNQT05TRV9GT1JNQVRfSlNPTl9TQ0hFTUEQAyrmAQoKU2NoZW1hVHlwZRIbChdTQ0hFTUFfVFlQRV9VTlNQRUNJRklFRBAAEhYKElNDSEVNQV9UWVBFX09CSkVDVBABEhUKEVNDSEVNQV9UWVBFX0FSUkFZEAISFgoSU0NIRU1BX1RZUEVfU1RSSU5HEAMSFgoSU0NIRU1BX1RZUEVfTlVNQkVSEAQSFwoTU0NIRU1BX1RZUEVfQk9PTEVBThAFEhcKE1NDSEVNQV9UWVBFX0lOVEVHRVIQBhIUChBTQ0hFTUFfVFlQRV9FTlVNEAcSFAoQU0NIRU1BX1RZUEVfTlVMTBAIKroBCg9SZWFzb25pbmdFZmZvcnQSHAoYTUlOSU1BTF9SRUFTT05JTkdfRUZGT1JUEAASGAoUTE9XX1JFQVNPTklOR19FRkZPUlQQARIbChdNRURJVU1fUkVBU09OSU5HX0VGRk9SVBACEhkKFUhJR0hfUkVBU09OSU5HX0VGRk9SVBADEhkKFU5PTkVfUkVBU09OSU5HX0VGRk9SVBAEEhwKGERFRkFVTFRfUkVBU09OSU5HX0VGRk9SVBAFKp0BCgxPdXRwdXRMZW5ndGgSHQoZT1VUUFVUX0xFTkdUSF9VTlNQRUNJRklFRBAAEhEKDVNJTkdMRV9QSFJBU0UQARITCg9CUklFRl9QQVJBR1JBUEgQAhIYChRERVRBSUxFRF9FWFBMQU5BVElPThADEhUKEUxPTkdfRk9STV9DT05URU5UEAQSFQoRRVhURU5ERURfRE9DVU1FTlQQBSpsCg5SZWFzb25pbmdMZXZlbBIfChtSRUFTT05JTkdfTEVWRUxfVU5TUEVDSUZJRUQQABIQCgxOT19SRUFTT05JTkcQARITCg9CQVNJQ19SRUFTT05JTkcQAhISCg5ERUVQX1JFQVNPTklORxADKtMBCg1SZWFzb25pbmdUeXBlEh4KGlJFQVNPTklOR19UWVBFX1VOU1BFQ0lGSUVEEAASEAoMUVVBTlRJVEFUSVZFEAESDwoLUVVBTElUQVRJVkUQAhINCglNVUxUSV9IT1AQAxIKCgZDQVVTQUwQBBINCglERURVQ1RJVkUQBRINCglJTkRVQ1RJVkUQBhIOCgpBTkFMT0dJQ0FMEAcSEgoOQ09VTlRFUkZBQ1RVQUwQCBIMCghURU1QT1JBTBAJEgsKB1NQQVRJQUwQChIHCgNTV0UQCyrmAQoKVGFza0RvbWFpbhIWChJET01BSU5fVU5TUEVDSUZJRUQQABIVChFHRU5FUkFMX0tOT1dMRURHRRABEhkKFVRFQ0hOSUNBTF9FTkdJTkVFUklORxACEhcKE1NDSUVOVElGSUNfUkVTRUFSQ0gQAxIWChJNRURJQ0FMX0hFQUxUSENBUkUQBBIUChBMRUdBTF9SRUdVTEFUT1JZEAUSFgoSRklOQU5DSUFMX0JVU0lORVNTEAYSGAoUQUNBREVNSUNfRURVQ0FUSU9OQUwQBxIVChFDUkVBVElWRV9BUlRJU1RJQxAIKnEKDUFjY3VyYWN5TGV2ZWwSHgoaQUNDVVJBQ1lfTEVWRUxfVU5TUEVDSUZJRUQQABIYChRBUFBST1hJTUFURV9BQ0NVUkFDWRABEhIKDkhJR0hfUFJFQ0lTSU9OEAISEgoOWkVST19UT0xFUkFOQ0UQAyqXAQoSTGF0ZW5jeVJlcXVpcmVtZW50EiMKH0xBVEVOQ1lfUkVRVUlSRU1FTlRfVU5TUEVDSUZJRUQQABINCglSRUFMX1RJTUUQARIPCgtMT1dfTEFURU5DWRACEhMKD0FWRVJBR0VfTEFURU5DWRADEhAKDEhJR0hfTEFURU5DWRAEEhUKEVZFUllfSElHSF9MQVRFTkNZEAUqPQoUQllPTURlcGxveW1lbnRTdGF0dXMSCgoGQUNUSVZFEAASDAoIRElTQUJMRUQQARILCgdERUxFVEVEEAIy2AYKCkxsbVNlcnZpY2USUQoKQ29tcGxldGlvbhIgLmxsbXNlcnZpY2UudjEuQ29tcGxldGlvblJlcXVlc3QaIS5sbG1zZXJ2aWNlLnYxLkNvbXBsZXRpb25SZXNwb25zZRJbChBDb21wbGV0aW9uU3RyZWFtEiAubGxtc2VydmljZS52MS5Db21wbGV0aW9uUmVxdWVzdBohLmxsbXNlcnZpY2UudjEuQ29tcGxldGlvblJlc3BvbnNlKAEwARJUCgtGdXNpb25Nb2RlbBIhLmxsbXNlcnZpY2UudjEuRnVzaW9uTW9kZWxSZXF1ZXN0GiIubGxtc2VydmljZS52MS5GdXNpb25Nb2RlbFJlc3BvbnNlEk4KCUVtYmVkZGluZxIfLmxsbXNlcnZpY2UudjEuRW1iZWRkaW5nUmVxdWVzdBogLmxsbXNlcnZpY2UudjEuRW1iZWRkaW5nUmVzcG9uc2USaQoSR2V0QXZhaWxhYmxlTW9kZWxzEigubGxtc2VydmljZS52MS5HZXRBdmFpbGFibGVNb2RlbHNSZXF1ZXN0GikubGxtc2VydmljZS52MS5HZXRBdmFpbGFibGVNb2RlbHNSZXNwb25zZRKEAQobR2V0QWN0aXZlRGVwbG95bWVudHNGb3JCWU9NEjEubGxtc2VydmljZS52MS5HZXRBY3RpdmVEZXBsb3ltZW50c0ZvckJZT01SZXF1ZXN0GjIubGxtc2VydmljZS52MS5HZXRBY3RpdmVEZXBsb3ltZW50c0ZvckJZT01SZXNwb25zZRJ+ChlDcmVhdGVCWU9NRGVwbG95bWVudEVudHJ5Ei8ubGxtc2VydmljZS52MS5DcmVhdGVCWU9NRGVwbG95bWVudEVudHJ5UmVxdWVzdBowLmxsbXNlcnZpY2UudjEuQ3JlYXRlQllPTURlcGxveW1lbnRFbnRyeVJlc3BvbnNlEoEBChpVcGRhdGVCWU9NRGVwbG95bWVudFN0YXR1cxIwLmxsbXNlcnZpY2UudjEuVXBkYXRlQllPTURlcGxveW1lbnRTdGF0dXNSZXF1ZXN0GjEubGxtc2VydmljZS52MS5VcGRhdGVCWU9NRGVwbG95bWVudFN0YXR1c1Jlc3BvbnNlQkdaRWdpdGh1Yi5jb20vRW1hLVVubGltaXRlZC9wcm90b3MvZ28vc2VydmljZS9sbG1zZXJ2aWNlL3YxO2xsbXNlcnZpY2V2MWIGcHJvdG8z", [file_google_protobuf_struct, file_service_llmservice_v1_pii]);
11
11
  /**
12
12
  * Describes the message llmservice.v1.JsonSchemaDefinition.
13
13
  * Use `create(JsonSchemaDefinitionSchema)` to create a new message.
@@ -143,106 +143,111 @@ export const FunctionParametersSchema = /*@__PURE__*/ messageDesc(file_service_l
143
143
  * Use `create(CompletionResponseSchema)` to create a new message.
144
144
  */
145
145
  export const CompletionResponseSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 25);
146
+ /**
147
+ * Describes the message llmservice.v1.CompletionCost.
148
+ * Use `create(CompletionCostSchema)` to create a new message.
149
+ */
150
+ export const CompletionCostSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 26);
146
151
  /**
147
152
  * Describes the message llmservice.v1.Choice.
148
153
  * Use `create(ChoiceSchema)` to create a new message.
149
154
  */
150
- export const ChoiceSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 26);
155
+ export const ChoiceSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 27);
151
156
  /**
152
157
  * Describes the message llmservice.v1.Citation.
153
158
  * Use `create(CitationSchema)` to create a new message.
154
159
  */
155
- export const CitationSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 27);
160
+ export const CitationSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 28);
156
161
  /**
157
162
  * Describes the message llmservice.v1.ChoiceLogprobs.
158
163
  * Use `create(ChoiceLogprobsSchema)` to create a new message.
159
164
  */
160
- export const ChoiceLogprobsSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 28);
165
+ export const ChoiceLogprobsSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 29);
161
166
  /**
162
167
  * Describes the message llmservice.v1.ChatCompletionTokenLogprob.
163
168
  * Use `create(ChatCompletionTokenLogprobSchema)` to create a new message.
164
169
  */
165
- export const ChatCompletionTokenLogprobSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 29);
170
+ export const ChatCompletionTokenLogprobSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 30);
166
171
  /**
167
172
  * Describes the message llmservice.v1.TopLogprob.
168
173
  * Use `create(TopLogprobSchema)` to create a new message.
169
174
  */
170
- export const TopLogprobSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 30);
175
+ export const TopLogprobSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 31);
171
176
  /**
172
177
  * Describes the message llmservice.v1.FunctionResponse.
173
178
  * Use `create(FunctionResponseSchema)` to create a new message.
174
179
  */
175
- export const FunctionResponseSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 31);
180
+ export const FunctionResponseSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 32);
176
181
  /**
177
182
  * Describes the message llmservice.v1.ToolResponse.
178
183
  * Use `create(ToolResponseSchema)` to create a new message.
179
184
  */
180
- export const ToolResponseSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 32);
185
+ export const ToolResponseSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 33);
181
186
  /**
182
187
  * Describes the message llmservice.v1.ThinkingBlock.
183
188
  * Use `create(ThinkingBlockSchema)` to create a new message.
184
189
  */
185
- export const ThinkingBlockSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 33);
190
+ export const ThinkingBlockSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 34);
186
191
  /**
187
192
  * Describes the message llmservice.v1.ChoiceMessage.
188
193
  * Use `create(ChoiceMessageSchema)` to create a new message.
189
194
  */
190
- export const ChoiceMessageSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 34);
195
+ export const ChoiceMessageSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 35);
191
196
  /**
192
197
  * Describes the message llmservice.v1.Usage.
193
198
  * Use `create(UsageSchema)` to create a new message.
194
199
  */
195
- export const UsageSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 35);
200
+ export const UsageSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 36);
196
201
  /**
197
202
  * Describes the message llmservice.v1.EmbeddingRequest.
198
203
  * Use `create(EmbeddingRequestSchema)` to create a new message.
199
204
  */
200
- export const EmbeddingRequestSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 36);
205
+ export const EmbeddingRequestSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 37);
201
206
  /**
202
207
  * Describes the message llmservice.v1.EmbeddingResponseData.
203
208
  * Use `create(EmbeddingResponseDataSchema)` to create a new message.
204
209
  */
205
- export const EmbeddingResponseDataSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 37);
210
+ export const EmbeddingResponseDataSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 38);
206
211
  /**
207
212
  * Describes the message llmservice.v1.EmbeddingResponse.
208
213
  * Use `create(EmbeddingResponseSchema)` to create a new message.
209
214
  */
210
- export const EmbeddingResponseSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 38);
215
+ export const EmbeddingResponseSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 39);
211
216
  /**
212
217
  * Describes the message llmservice.v1.GetActiveDeploymentsForBYOMRequest.
213
218
  * Use `create(GetActiveDeploymentsForBYOMRequestSchema)` to create a new message.
214
219
  */
215
- export const GetActiveDeploymentsForBYOMRequestSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 39);
220
+ export const GetActiveDeploymentsForBYOMRequestSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 40);
216
221
  /**
217
222
  * Describes the message llmservice.v1.GetActiveDeploymentsForBYOMResponse.
218
223
  * Use `create(GetActiveDeploymentsForBYOMResponseSchema)` to create a new message.
219
224
  */
220
- export const GetActiveDeploymentsForBYOMResponseSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 40);
225
+ export const GetActiveDeploymentsForBYOMResponseSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 41);
221
226
  /**
222
227
  * Describes the message llmservice.v1.CreateBYOMDeploymentEntryRequest.
223
228
  * Use `create(CreateBYOMDeploymentEntryRequestSchema)` to create a new message.
224
229
  */
225
- export const CreateBYOMDeploymentEntryRequestSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 41);
230
+ export const CreateBYOMDeploymentEntryRequestSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 42);
226
231
  /**
227
232
  * Describes the message llmservice.v1.CreateBYOMDeploymentEntryResponse.
228
233
  * Use `create(CreateBYOMDeploymentEntryResponseSchema)` to create a new message.
229
234
  */
230
- export const CreateBYOMDeploymentEntryResponseSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 42);
235
+ export const CreateBYOMDeploymentEntryResponseSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 43);
231
236
  /**
232
237
  * Describes the message llmservice.v1.UpdateBYOMDeploymentStatusRequest.
233
238
  * Use `create(UpdateBYOMDeploymentStatusRequestSchema)` to create a new message.
234
239
  */
235
- export const UpdateBYOMDeploymentStatusRequestSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 43);
240
+ export const UpdateBYOMDeploymentStatusRequestSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 44);
236
241
  /**
237
242
  * Describes the message llmservice.v1.UpdateBYOMDeploymentStatusResponse.
238
243
  * Use `create(UpdateBYOMDeploymentStatusResponseSchema)` to create a new message.
239
244
  */
240
- export const UpdateBYOMDeploymentStatusResponseSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 44);
245
+ export const UpdateBYOMDeploymentStatusResponseSchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 45);
241
246
  /**
242
247
  * Describes the message llmservice.v1.BYOMDeploymentEntry.
243
248
  * Use `create(BYOMDeploymentEntrySchema)` to create a new message.
244
249
  */
245
- export const BYOMDeploymentEntrySchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 45);
250
+ export const BYOMDeploymentEntrySchema = /*@__PURE__*/ messageDesc(file_service_llmservice_v1_llmservice, 46);
246
251
  /**
247
252
  * Enum to specify the type of source restriction.
248
253
  *