@alis-build/a2a 1.0.494 → 1.0.501

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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Alis Exchange
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,95 @@
1
+ # a2a-ts
2
+
3
+ TypeScript client and types for the Agent-to-Agent (A2A) API. Uses JSON-RPC 2.0 over HTTP with support for both unary and streaming (SSE) operations.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @alis-build/a2a
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```typescript
14
+ import { A2AClient } from "@alis-build/a2a/transport/jsonrpc";
15
+
16
+ const client = new A2AClient({
17
+ baseUrl: "https://api.example.com",
18
+ getToken: async () => "your-bearer-token", // optional
19
+ });
20
+
21
+ // Unary: send message, wait for full response
22
+ const response = await client.sendMessage({
23
+ message: { text: { text: "Hello" } },
24
+ configuration: { acceptedOutputModesList: ["text"], blocking: true },
25
+ });
26
+
27
+ // Streaming: send message, receive incremental updates
28
+ const controller = new AbortController();
29
+ for await (const event of client.sendStreamingMessage(
30
+ {
31
+ message: { text: { text: "Hello" } },
32
+ configuration: { acceptedOutputModesList: ["text"], blocking: false },
33
+ },
34
+ controller.signal
35
+ )) {
36
+ console.log(event);
37
+ }
38
+ ```
39
+
40
+ ## Transport (`transport/jsonrpc`)
41
+
42
+ The JSON-RPC transport provides:
43
+
44
+ | Mode | Methods | Use case |
45
+ | ---------- | ------------------------------------------------------------- | --------------------------------- |
46
+ | **Unary** | `sendMessage`, `getTask`, `listTasks`, `cancelTask`, etc. | Single request/response |
47
+ | **Streaming** | `sendStreamingMessage`, `subscribeToTask` | Incremental updates via SSE |
48
+
49
+ ### Architecture
50
+
51
+ ```
52
+ A2AClient
53
+ ├── request() → POST JSON-RPC → parse single JSON response
54
+ └── stream() → POST JSON-RPC → readSseStream() → yield each SSE frame as JSON-RPC response
55
+ ```
56
+
57
+ ### Error Handling
58
+
59
+ - **`JsonRpcTransportError`**: Network failures, non-2xx HTTP, stream read errors. Has optional `status` for HTTP status code.
60
+ - **`JsonRpcProtocolError`**: Server returned a JSON-RPC error object. Use `code` or `instanceof` for typed handling:
61
+ - `TaskNotFoundError` (-32001)
62
+ - `TaskNotCancelableError` (-32002)
63
+ - `PushNotificationNotSupportedError` (-32003)
64
+ - `UnsupportedOperationError` (-32004)
65
+ - `ContentTypeNotSupportedError` (-32005)
66
+ - `InvalidAgentResponseError` (-32006)
67
+ - `ExtendedCardNotConfiguredError` (-32007)
68
+ - `UnauthenticatedError` (-31401)
69
+ - `UnauthorizedError` (-31403)
70
+
71
+ ### Exports
72
+
73
+ ```typescript
74
+ // Client and config
75
+ import { A2AClient } from "@alis-build/a2a/transport/jsonrpc";
76
+ import type { A2AClientConfig } from "@alis-build/a2a/transport/jsonrpc";
77
+
78
+ // Errors
79
+ import {
80
+ JsonRpcProtocolError,
81
+ JsonRpcTransportError,
82
+ TaskNotFoundError,
83
+ UnauthenticatedError,
84
+ // ... other typed errors
85
+ } from "@alis-build/a2a/transport/jsonrpc";
86
+ ```
87
+
88
+ ## Dependencies
89
+
90
+ - `google-protobuf` – Protobuf types for A2A messages
91
+ - `@alis-build/google-common-protos` – Google common protos
92
+
93
+ ## License
94
+
95
+ See project LICENSE file.
@@ -3,9 +3,9 @@
3
3
  // package: lf.a2a.v1
4
4
  // file: lf/a2a/v1/a2a.proto
5
5
 
6
- import * as lf_a2a_v1_a2a_pb from "@alis-build/a2a/lf/a2a/v1/a2a_pb";
6
+ import * as lf_a2a_v1_a2a_pb from "../../../lf/a2a/v1/a2a_pb";
7
7
  import * as google_protobuf_empty_pb from "google-protobuf/google/protobuf/empty_pb";
8
- import * as grpc from "@grpc/grpc-js";
8
+ import * as grpc from "grpc";
9
9
 
10
10
  interface IA2AServiceService extends grpc.ServiceDefinition<grpc.UntypedServiceImplementation> {
11
11
  sendMessage: grpc.MethodDefinition<lf_a2a_v1_a2a_pb.SendMessageRequest, lf_a2a_v1_a2a_pb.SendMessageResponse>;
@@ -70,4 +70,4 @@ export class A2AServiceClient extends grpc.Client {
70
70
  deleteTaskPushNotificationConfig(argument: lf_a2a_v1_a2a_pb.DeleteTaskPushNotificationConfigRequest, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
71
71
  deleteTaskPushNotificationConfig(argument: lf_a2a_v1_a2a_pb.DeleteTaskPushNotificationConfigRequest, metadataOrOptions: grpc.Metadata | grpc.CallOptions | null, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
72
72
  deleteTaskPushNotificationConfig(argument: lf_a2a_v1_a2a_pb.DeleteTaskPushNotificationConfigRequest, metadata: grpc.Metadata | null, options: grpc.CallOptions | null, callback: grpc.requestCallback<google_protobuf_empty_pb.Empty>): grpc.ClientUnaryCall;
73
- }
73
+ }
@@ -4,10 +4,10 @@
4
4
  // Older protoc compilers don't understand edition yet.
5
5
  'use strict';
6
6
  var grpc = require('@grpc/grpc-js');
7
- var lf_a2a_v1_a2a_pb = require('@alis-build/a2a/lf/a2a/v1/a2a_pb.js');
8
- var google_api_annotations_pb = require('@alis-build/google-common-protos/google/api/annotations_pb.js');
9
- var google_api_client_pb = require('@alis-build/google-common-protos/google/api/client_pb.js');
10
- var google_api_field_behavior_pb = require('@alis-build/google-common-protos/google/api/field_behavior_pb.js');
7
+ var lf_a2a_v1_a2a_pb = require('../../../lf/a2a/v1/a2a_pb.js');
8
+ var google_api_annotations_pb = require('../../../google/api/annotations_pb.js');
9
+ var google_api_client_pb = require('../../../google/api/client_pb.js');
10
+ var google_api_field_behavior_pb = require('../../../google/api/field_behavior_pb.js');
11
11
  var google_protobuf_empty_pb = require('google-protobuf/google/protobuf/empty_pb.js');
12
12
  var google_protobuf_struct_pb = require('google-protobuf/google/protobuf/struct_pb.js');
13
13
  var google_protobuf_timestamp_pb = require('google-protobuf/google/protobuf/timestamp_pb.js');
@@ -344,4 +344,4 @@ deleteTaskPushNotificationConfig: {
344
344
  },
345
345
  };
346
346
 
347
- exports.A2AServiceClient = grpc.makeGenericClientConstructor(A2AServiceService, 'A2AService');
347
+ exports.A2AServiceClient = grpc.makeGenericClientConstructor(A2AServiceService, 'A2AService');
@@ -1,7 +1,7 @@
1
1
  import * as grpcWeb from 'grpc-web';
2
2
 
3
3
  import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb'; // proto import: "google/protobuf/empty.proto"
4
- import * as lf_a2a_v1_a2a_pb from '@alis-build/a2a/lf/a2a/v1/a2a_pb'; // proto import: "lf/a2a/v1/a2a.proto"
4
+ import * as lf_a2a_v1_a2a_pb from '../../../lf/a2a/v1/a2a_pb'; // proto import: "lf/a2a/v1/a2a.proto"
5
5
 
6
6
 
7
7
  export class A2AServiceClient {
@@ -145,3 +145,4 @@ export class A2AServicePromiseClient {
145
145
  ): Promise<google_protobuf_empty_pb.Empty>;
146
146
 
147
147
  }
148
+
@@ -20,11 +20,11 @@ const grpc = {};
20
20
  grpc.web = require('grpc-web');
21
21
 
22
22
 
23
- var google_api_annotations_pb = require('@alis-build/google-common-protos/google/api/annotations_pb.js')
23
+ var google_api_annotations_pb = require('../../../google/api/annotations_pb.js')
24
24
 
25
- var google_api_client_pb = require('@alis-build/google-common-protos/google/api/client_pb.js')
25
+ var google_api_client_pb = require('../../../google/api/client_pb.js')
26
26
 
27
- var google_api_field_behavior_pb = require('@alis-build/google-common-protos/google/api/field_behavior_pb.js')
27
+ var google_api_field_behavior_pb = require('../../../google/api/field_behavior_pb.js')
28
28
 
29
29
  var google_protobuf_empty_pb = require('google-protobuf/google/protobuf/empty_pb.js')
30
30
 
@@ -750,3 +750,4 @@ proto.lf.a2a.v1.A2AServicePromiseClient.prototype.deleteTaskPushNotificationConf
750
750
 
751
751
 
752
752
  module.exports = proto.lf.a2a.v1;
753
+
@@ -1,8 +1,8 @@
1
1
  import * as jspb from 'google-protobuf'
2
2
 
3
- import * as google_api_annotations_pb from '@alis-build/google-common-protos/google/api/annotations_pb'; // proto import: "google/api/annotations.proto"
4
- import * as google_api_client_pb from '@alis-build/google-common-protos/google/api/client_pb'; // proto import: "google/api/client.proto"
5
- import * as google_api_field_behavior_pb from '@alis-build/google-common-protos/google/api/field_behavior_pb'; // proto import: "google/api/field_behavior.proto"
3
+ import * as google_api_annotations_pb from '../../../google/api/annotations_pb'; // proto import: "google/api/annotations.proto"
4
+ import * as google_api_client_pb from '../../../google/api/client_pb'; // proto import: "google/api/client.proto"
5
+ import * as google_api_field_behavior_pb from '../../../google/api/field_behavior_pb'; // proto import: "google/api/field_behavior.proto"
6
6
  import * as google_protobuf_empty_pb from 'google-protobuf/google/protobuf/empty_pb'; // proto import: "google/protobuf/empty.proto"
7
7
  import * as google_protobuf_struct_pb from 'google-protobuf/google/protobuf/struct_pb'; // proto import: "google/protobuf/struct.proto"
8
8
  import * as google_protobuf_timestamp_pb from 'google-protobuf/google/protobuf/timestamp_pb'; // proto import: "google/protobuf/timestamp.proto"
@@ -1591,4 +1591,4 @@ export enum Role {
1591
1591
  ROLE_UNSPECIFIED = 0,
1592
1592
  ROLE_USER = 1,
1593
1593
  ROLE_AGENT = 2,
1594
- }
1594
+ }
@@ -15,11 +15,11 @@ var jspb = require('google-protobuf');
15
15
  var goog = jspb;
16
16
  var global = globalThis;
17
17
 
18
- var google_api_annotations_pb = require('@alis-build/google-common-protos/google/api/annotations_pb.js');
18
+ var google_api_annotations_pb = require('../../../google/api/annotations_pb.js');
19
19
  goog.object.extend(proto, google_api_annotations_pb);
20
- var google_api_client_pb = require('@alis-build/google-common-protos/google/api/client_pb.js');
20
+ var google_api_client_pb = require('../../../google/api/client_pb.js');
21
21
  goog.object.extend(proto, google_api_client_pb);
22
- var google_api_field_behavior_pb = require('@alis-build/google-common-protos/google/api/field_behavior_pb.js');
22
+ var google_api_field_behavior_pb = require('../../../google/api/field_behavior_pb.js');
23
23
  goog.object.extend(proto, google_api_field_behavior_pb);
24
24
  var google_protobuf_empty_pb = require('google-protobuf/google/protobuf/empty_pb.js');
25
25
  goog.object.extend(proto, google_protobuf_empty_pb);
@@ -12567,4 +12567,4 @@ proto.lf.a2a.v1.Role = {
12567
12567
  goog.object.extend(exports, proto.lf.a2a.v1);
12568
12568
 
12569
12569
  // Below is base64 encoded GeneratedCodeInfo proto
12570
- // Ch8KAgQAEhNsZi9hMmEvdjEvYTJhLnByb3RvGO8pIIcqCh8KAgQBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKUwIKkwCh8KAgQCEhNsZi9hMmEvdjEvYTJhLnByb3RvGPc1IIE2Ch8KAgQDEhNsZi9hMmEvdjEvYTJhLnByb3RvGME7IMU7Ch8KAgQEEhNsZi9hMmEvdjEvYTJhLnByb3RvGJBBIJdBCh8KAgQFEhNsZi9hMmEvdjEvYTJhLnByb3RvGPFGIPlGCh8KAgQGEhNsZi9hMmEvdjEvYTJhLnByb3RvGNdMIOxMCh8KAgQHEhNsZi9hMmEvdjEvYTJhLnByb3RvGM1SIORSCh8KAgQIEhNsZi9hMmEvdjEvYTJhLnByb3RvGMtYIN1YCh8KAgQJEhNsZi9hMmEvdjEvYTJhLnByb3RvGLVeIMNeCh8KAgQKEhNsZi9hMmEvdjEvYTJhLnByb3RvGI9kIJhkCh8KAgQLEhNsZi9hMmEvdjEvYTJhLnByb3RvGPppIIdqCh8KAgQMEhNsZi9hMmEvdjEvYTJhLnByb3RvGNBvIOFvCh8KAgQNEhNsZi9hMmEvdjEvYTJhLnByb3RvGON1IPF1Ch8KAgQOEhNsZi9hMmEvdjEvYTJhLnByb3RvGL17IMd7CiEKAgQPEhNsZi9hMmEvdjEvYTJhLnByb3RvGK2BASC/gQEKIQoCBBASE2xmL2EyYS92MS9hMmEucHJvdG8Yl4cBILGHAQohCgIEERITbGYvYTJhL3YxL2EyYS5wcm90bxihjQEgq40BCiEKAgQSEhNsZi9hMmEvdjEvYTJhLnByb3RvGJGTASCkkwEKIQoCBBMSE2xmL2EyYS92MS9hMmEucHJvdG8Y/5gBII2ZAQohCgIEFBITbGYvYTJhL3YxL2EyYS5wcm90bxiAnwEglJ8BCiEKAgQVEhNsZi9hMmEvdjEvYTJhLnByb3RvGPKkASCIpQEKIQoCBBYSE2xmL2EyYS92MS9hMmEucHJvdG8Y7KoBIICrAQohCgIEFxITbGYvYTJhL3YxL2EyYS5wcm90bxjesAEg+bABCiEKAgQYEhNsZi9hMmEvdjEvYTJhLnByb3RvGOy2ASCDtwEKIQoCBBkSE2xmL2EyYS92MS9hMmEucHJvdG8Y6rwBIPS8AQohCgIEGhITbGYvYTJhL3YxL2EyYS5wcm90bxjXwgEg8cIBCiEKAgQbEhNsZi9hMmEvdjEvYTJhLnByb3RvGOHIASD7yAEKIQoCBBwSE2xmL2EyYS92MS9hMmEucHJvdG8Y684BIPzOAQohCgIEHRITbGYvYTJhL3YxL2EyYS5wcm90bxjR1AEg4tQBCiEKAgQeEhNsZi9hMmEvdjEvYTJhLnByb3RvGLfaASDK2gEKIQoCBB8SE2xmL2EyYS92MS9hMmEucHJvdG8YpeABILfgAQohCgIEIBITbGYvYTJhL3YxL2EyYS5wcm90bxiP5gEgneYBCiEKAgQhEhNsZi9hMmEvdjEvYTJhLnByb3RvGOnrASD56wEKIQoCBCISE2xmL2EyYS92MS9hMmEucHJvdG8Yy/EBINzxAQohCgIEIxITbGYvYTJhL3YxL2EyYS5wcm90bxje9wEg7/cBCiEKAgQkEhNsZi9hMmEvdjEvYTJhLnByb3RvGMT9ASDo/QEKIQoCBCUSE2xmL2EyYS92MS9hMmEucHJvdG8Y9oMCIJ2EAgohCgIEJhITbGYvYTJhL3YxL2EyYS5wcm90bxi0igIgyooCCiEKAgQnEhNsZi9hMmEvdjEvYTJhLnByb3RvGK6QAiDUkAIKIQoCBCgSE2xmL2EyYS92MS9hMmEucHJvdG8Y6JYCIIOXAgohCgIEKRITbGYvYTJhL3YxL2EyYS5wcm90bxj2nAIgiZ0CCiEKAgQqEhNsZi9hMmEvdjEvYTJhLnByb3RvGJCjAiCeowIKIQoCBCsSE2xmL2EyYS92MS9hMmEucHJvdG8YkakCILipAgojCgQEAAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIjVAiCi1QIKIwoEBAACABITbGYvYTJhL3YxL2EyYS5wcm90bxio1wIgwtcCCiMKBAQAAgASE2xmL2EyYS92MS9hMmEucHJvdG8YyNkCIN7ZAgojCgQEAAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGPjbAiCU3AIKIwoEBAACARITbGYvYTJhL3YxL2EyYS5wcm90bxiV3gIgst4CCiMKBAQAAgESE2xmL2EyYS92MS9hMmEucHJvdG8YquECIMfhAgojCgQEAAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGMjjAiDn4wIKIwoEBAACARITbGYvYTJhL3YxL2EyYS5wcm90bxiq5QIgx+UCCiMKBAQAAgISE2xmL2EyYS92MS9hMmEucHJvdG8YgucCIJLnAgojCgQEAAICEhNsZi9hMmEvdjEvYTJhLnByb3RvGI7pAiCe6QIKIwoEBAACAhITbGYvYTJhL3YxL2EyYS5wcm90bxiQ6wIgousCCiMKBAQAAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y4ewCIPHsAgojCgQEAAIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGKbuAiCx7gIKIwoEBAACAxITbGYvYTJhL3YxL2EyYS5wcm90bxi68AIgxfACCiMKBAQBAgASE2xmL2EyYS92MS9hMmEucHJvdG8YsJ0DILWdAwojCgQEAQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIqfAyCPnwMKIwoEBAECARITbGYvYTJhL3YxL2EyYS5wcm90bxjDoAMgz6ADCiMKBAQBAgESE2xmL2EyYS92MS9hMmEucHJvdG8YpKIDILCiAwojCgQEAQICEhNsZi9hMmEvdjEvYTJhLnByb3RvGPmjAyCCpAMKIwoEBAECAhITbGYvYTJhL3YxL2EyYS5wcm90bxiipgMgq6YDCiMKBAQBAgISE2xmL2EyYS92MS9hMmEucHJvdG8YhKgDII+oAwojCgQEAQICEhNsZi9hMmEvdjEvYTJhLnByb3RvGKqpAyCzqQMKIwoEBAECAxITbGYvYTJhL3YxL2EyYS5wcm90bxjzqgMgg6sDCiMKBAQBAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yq60DILutAwojCgQEAQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGLGvAyC9rwMKIwoEBAECAxITbGYvYTJhL3YxL2EyYS5wcm90bxjYsQMg6rEDCiMKBAQBAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YmbMDIKezAwojCgQEAQIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGMy1AyDatQMKIwoEBAECBBITbGYvYTJhL3YxL2EyYS5wcm90bxjOtwMg2LcDCiMKBAQBAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y8rkDIIK6AwojCgQEAQIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGLy7AyDHuwMKIwoEBAECBRITbGYvYTJhL3YxL2EyYS5wcm90bxjxvQMg/L0DCiMKBAQBAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Y1b8DIOK/AwojCgQEAQIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGP/AAyCKwQMKIwoEBAICABITbGYvYTJhL3YxL2EyYS5wcm90bxiI5AMgkOQDCiMKBAQCAgASE2xmL2EyYS92MS9hMmEucHJvdG8YmOYDIKDmAwojCgQEAgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGOjnAyDy5wMKIwoEBAICARITbGYvYTJhL3YxL2EyYS5wcm90bxiV6gMgn+oDCiMKBAQCAgESE2xmL2EyYS92MS9hMmEucHJvdG8YhOwDIJDsAwojCgQEAgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGLLtAyC87QMKIwoEBAICAhITbGYvYTJhL3YxL2EyYS5wcm90bxiS7wMgnu8DCiMKBAQCAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y4PEDIOzxAwojCgQEAgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGNHzAyDf8wMKIwoEBAICAhITbGYvYTJhL3YxL2EyYS5wcm90bxiD9QMgj/UDCiMKBAQDAgASE2xmL2EyYS92MS9hMmEucHJvdG8YyPkDIMz5AwojCgQEAwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGNP5AyDW+QMKIwoEBAMCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjd+QMg4PkDCiMKBAQDAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Y5/kDIOv5AwojCgQEAwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIKnBCCJpwQKIwoEBAMCABITbGYvYTJhL3YxL2EyYS5wcm90bxjeqAQg5agECiMKBAQDAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y2qoEIOOqBAojCgQEAwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGLmsBCDArAQKIwoEBAMCARITbGYvYTJhL3YxL2EyYS5wcm90bxjqrQQg8K0ECiMKBAQDAgESE2xmL2EyYS92MS9hMmEucHJvdG8YxbQEIMu0BAojCgQEAwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGMC2BCDItgQKIwoEBAMCARITbGYvYTJhL3YxL2EyYS5wcm90bxieuAQgpLgECiMKBAQDAgISE2xmL2EyYS92MS9hMmEucHJvdG8YwbkEIMe5BAojCgQEAwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGJy7BCCiuwQKIwoEBAMCAhITbGYvYTJhL3YxL2EyYS5wcm90bxiXvQQgn70ECiMKBAQDAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y9b4EIPu+BAojCgQEAwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGL7ABCDFwAQKIwoEBAMCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjswgQg88IECiMKBAQDAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Y98QEIIDFBAojCgQEAwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGJnGBCCgxgQKIwoEBAMCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjpxwQg9McECiMKBAQDAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YnsoEIKnKBAojCgQEAwIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGILMBCCPzAQKIwoEBAMCBBITbGYvYTJhL3YxL2EyYS5wcm90bxiszQQgt80ECiMKBAQDAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Y2c4EIOTOBAojCgQEAwIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGLnQBCDE0AQKIwoEBAMCBhITbGYvYTJhL3YxL2EyYS5wcm90bxj40QQghNIECiMKBAQDAgYSE2xmL2EyYS92MS9hMmEucHJvdG8Y2dMEIOXTBAojCgQEBAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGMiDBSDUgwUKIwoEBAQCABITbGYvYTJhL3YxL2EyYS5wcm90bxivhQUgu4UFCiMKBAQEAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y8oYFIP6GBQojCgQEBAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGNmIBSDliAUKIwoEBAQCAhITbGYvYTJhL3YxL2EyYS5wcm90bxiZigUgoooFCiMKBAQEAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y/YsFIIaMBQojCgQEBAIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGMSNBSDLjQUKIwoEBAQCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjDjwUgyo8FCiMKBAQEAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Yj5EFIJuRBQojCgQEBAIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGL2TBSDJkwUKIwoEBAQCBBITbGYvYTJhL3YxL2EyYS5wcm90bxi6lQUgwpUFCiMKBAQEAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y35cFIO2XBQojCgQEBAIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGKiZBSCzmQUKIwoEBAQCBRITbGYvYTJhL3YxL2EyYS5wcm90bxjjmwUg7psFCiMKBAQEAgUSE2xmL2EyYS92MS9hMmEucHJvdG8YzZ0FINqdBQojCgQEBAIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGPqeBSCFnwUKIwoEBAQCBhITbGYvYTJhL3YxL2EyYS5wcm90bxi0oAUgxaAFCiMKBAQEAgYSE2xmL2EyYS92MS9hMmEucHJvdG8YqaIFILqiBQojCgQEBAIGEhNsZi9hMmEvdjEvYTJhLnByb3RvGJ6kBSCrpAUKIwoEBAQCBhITbGYvYTJhL3YxL2EyYS5wcm90bxijpgUgtqYFCiMKBAQEAgcSE2xmL2EyYS92MS9hMmEucHJvdG8Y4acFIPinBQojCgQEBAIHEhNsZi9hMmEvdjEvYTJhLnByb3RvGNypBSDzqQUKIwoEBAQCBxITbGYvYTJhL3YxL2EyYS5wcm90bxjXqwUg6qsFCiMKBAQEAgcSE2xmL2EyYS92MS9hMmEucHJvdG8Y4q0FIPutBQojCgQEBQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGOzYBSD52AUKIwoEBAUCABITbGYvYTJhL3YxL2EyYS5wcm90bxjW2gUg49oFCiMKBAQFAgESE2xmL2EyYS92MS9hMmEucHJvdG8YldwFIJzcBQojCgQEBQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGPndBSCA3gUKIwoEBAUCAhITbGYvYTJhL3YxL2EyYS5wcm90bxi53wUgx98FCiMKBAQFAgISE2xmL2EyYS92MS9hMmEucHJvdG8YpOEFILLhBQojCgQEBQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGPriBSCG4wUKIwoEBAUCAxITbGYvYTJhL3YxL2EyYS5wcm90bxiq5QUgtuUFCiMKBAQFAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YqOcFILDnBQojCgQEBQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGM/pBSDd6QUKIwoEBAUCBBITbGYvYTJhL3YxL2EyYS5wcm90bxiZ6wUgpOsFCiMKBAQFAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y1u0FIOHtBQojCgQEBQIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGMLvBSDP7wUKIwoEBAUCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjw8AUg+/AFCiMKBAQFAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Yq/IFILzyBQojCgQEBQIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGKL0BSCz9AUKIwoEBAUCBRITbGYvYTJhL3YxL2EyYS5wcm90bxiZ9gUgpvYFCiMKBAQFAgUSE2xmL2EyYS92MS9hMmEucHJvdG8YoPgFILP4BQojCgQEBgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNGeBiDangYKIwoEBAYCABITbGYvYTJhL3YxL2EyYS5wcm90bxjRoAYg2qAGCiMKBAQGAgESE2xmL2EyYS92MS9hMmEucHJvdG8Yn6IGIKuiBgojCgQEBgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKKkBiCupAYKIwoEBAYCAhITbGYvYTJhL3YxL2EyYS5wcm90bxiIpgYgkaYGCiMKBAQGAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y06gGINyoBgojCgQEBgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGNeqBiDiqgYKIwoEBAYCAhITbGYvYTJhL3YxL2EyYS5wcm90bxiOrAYgl6wGCiMKBAQGAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Y8a0GIPytBgojCgQEBgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGMiwBiDTsAYKIwoEBAYCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjOsgYg27IGCiMKBAQGAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YibQGIJS0BgojCgQEBwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGP3eBiCG3wYKIwoEBAcCABITbGYvYTJhL3YxL2EyYS5wcm90bxiB4QYgiuEGCiMKBAQHAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y0eIGIN3iBgojCgQEBwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGNjkBiDk5AYKIwoEBAcCAhITbGYvYTJhL3YxL2EyYS5wcm90bxi+5gYgyeYGCiMKBAQHAgISE2xmL2EyYS92MS9hMmEucHJvdG8YiekGIJTpBgojCgQEBwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGJPrBiCg6wYKIwoEBAcCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjQ7AYg2+wGCiMKBAQHAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yje4GIJbuBgojCgQEBwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGJ3wBiCm8AYKIwoEBAcCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjt8QYg+fEGCiMKBAQHAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YgPQGIIz0BgojCgQEBwIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGPn1BiCE9gYKIwoEBAcCBRITbGYvYTJhL3YxL2EyYS5wcm90bxjU+AYg3/gGCiMKBAQHAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Y3voGIOv6BgojCgQEBwIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGJv8BiCm/AYKIwoEBAgCABITbGYvYTJhL3YxL2EyYS5wcm90bxiZmwcgopsHCiMKBAQIAgASE2xmL2EyYS92MS9hMmEucHJvdG8Yk50HIJydBwojCgQECAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGN+eByDtngcKIwoEBAgCARITbGYvYTJhL3YxL2EyYS5wcm90bxjeoAcg7KAHCiMKBAQJAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y/sMHIITEBwojCgQECQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGO3FByDzxQcKIwoEBAkCARITbGYvYTJhL3YxL2EyYS5wcm90bxi3xwcgyccHCiMKBAQJAgESE2xmL2EyYS92MS9hMmEucHJvdG8YsskHIMTJBwojCgQECQICEhNsZi9hMmEvdjEvYTJhLnByb3RvGP7KByCHywcKIwoEBAkCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjwzAcg+cwHCiMKBAQJAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yvc4HIM/OBwojCgQECQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGLjQByDK0AcKIwoEBAoCABITbGYvYTJhL3YxL2EyYS5wcm90bxjmmwgg7ZsICiMKBAQKAgASE2xmL2EyYS92MS9hMmEucHJvdG8YzJ0IINOdCAojCgQECgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGI2fCCCbnwgKIwoEBAoCARITbGYvYTJhL3YxL2EyYS5wcm90bxj6oAggiKEICiMKBAQKAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y9KIIII6jCAojCgQECgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGNKlCCDspQgKIwoEBAoCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjzpwggiagICiMKBAQKAgISE2xmL2EyYS92MS9hMmEucHJvdG8YtKoIINCqCAojCgQECgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGJOsCCCerAgKIwoEBAoCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjRrggg3K4ICiMKBAQKAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yv7AIIMywCAojCgQECgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGO6xCCD5sQgKIwoEBAoCBBITbGYvYTJhL3YxL2EyYS5wcm90bxifswggqbMICiMKBAQKAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YiLUIIJK1CAojCgQECgIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGNK2CCDltggKIwoEBAoCBRITbGYvYTJhL3YxL2EyYS5wcm90bxjEuAgg17gICiMKBAQKAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Yq7oIIMC6CAojCgQECgIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGPC7CCCDvAgKIwoEBAoCBhITbGYvYTJhL3YxL2EyYS5wcm90bxjVvQgg5L0ICiMKBAQKAgYSE2xmL2EyYS92MS9hMmEucHJvdG8Yo8AIILLACAojCgQECgIGEhNsZi9hMmEvdjEvYTJhLnByb3RvGJXCCCCmwggKIwoEBAoCBhITbGYvYTJhL3YxL2EyYS5wcm90bxjMwwgg28MICiMKBAQKAgcSE2xmL2EyYS92MS9hMmEucHJvdG8YqMYIIL3GCAojCgQECgIHEhNsZi9hMmEvdjEvYTJhLnByb3RvGKrJCCDByQgKIwoEBAoCCBITbGYvYTJhL3YxL2EyYS5wcm90bxiuywggycsICiMKBAQKAggSE2xmL2EyYS92MS9hMmEucHJvdG8YnM4IILfOCAojCgQECgIIEhNsZi9hMmEvdjEvYTJhLnByb3RvGMjQCCDf0AgKIwoEBAoCCBITbGYvYTJhL3YxL2EyYS5wcm90bxiP0wggrNMICiMKBAQKAgkSE2xmL2EyYS92MS9hMmEucHJvdG8Y5dQIIP3UCAojCgQECgIJEhNsZi9hMmEvdjEvYTJhLnByb3RvGObWCCD+1ggKIwoEBAoCCRITbGYvYTJhL3YxL2EyYS5wcm90bxjn2Agg+9gICiMKBAQKAgkSE2xmL2EyYS92MS9hMmEucHJvdG8Y+NoIIJLbCAojCgQECgIKEhNsZi9hMmEvdjEvYTJhLnByb3RvGMncCCDi3AgKIwoEBAoCChITbGYvYTJhL3YxL2EyYS5wcm90bxjL3ggg5N4ICiMKBAQKAgoSE2xmL2EyYS92MS9hMmEucHJvdG8YzeAIIOLgCAojCgQECgIKEhNsZi9hMmEvdjEvYTJhLnByb3RvGN/iCCD64ggKIwoEBAoCCxITbGYvYTJhL3YxL2EyYS5wcm90bxi95AggyuQICiMKBAQKAgsSE2xmL2EyYS92MS9hMmEucHJvdG8Yg+cIIJDnCAojCgQECgILEhNsZi9hMmEvdjEvYTJhLnByb3RvGJDpCCCZ6QgKIwoEBAoCCxITbGYvYTJhL3YxL2EyYS5wcm90bxjB6wgg0OsICiMKBAQKAgwSE2xmL2EyYS92MS9hMmEucHJvdG8Ym+0IIKztCAojCgQECgIMEhNsZi9hMmEvdjEvYTJhLnByb3RvGP3vCCCO8AgKIwoEBAoCDBITbGYvYTJhL3YxL2EyYS5wcm90bxie8gggq/IICiMKBAQKAgwSE2xmL2EyYS92MS9hMmEucHJvdG8Y2/QIIO70CAojCgQECgINEhNsZi9hMmEvdjEvYTJhLnByb3RvGIr2CCCU9ggKIwoEBAoCDRITbGYvYTJhL3YxL2EyYS5wcm90bxj09wgg/vcICiMKBAQKAg0SE2xmL2EyYS92MS9hMmEucHJvdG8Y0/kIIN/5CAojCgQECgINEhNsZi9hMmEvdjEvYTJhLnByb3RvGJD7CCCa+wgKIwoEBAsCABITbGYvYTJhL3YxL2EyYS5wcm90bxi1mQkgu5kJCiMKBAQLAgASE2xmL2EyYS92MS9hMmEucHJvdG8YopsJIKibCQojCgQECwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGOecCSD2nAkKIwoEBAsCARITbGYvYTJhL3YxL2EyYS5wcm90bxjdngkg7J4JCiMKBAQMAgASE2xmL2EyYS92MS9hMmEucHJvdG8YwcYJIM3GCQojCgQEDAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGMjICSDUyAkKIwoEBAwCABITbGYvYTJhL3YxL2EyYS5wcm90bxi4ygkgxsoJCiMKBAQMAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y/ssJIIrMCQojCgQEDAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGMLNCSDWzQkKIwoEBAwCARITbGYvYTJhL3YxL2EyYS5wcm90bxjRzwkg5c8JCiMKBAQMAgESE2xmL2EyYS92MS9hMmEucHJvdG8YydEJIN/RCQojCgQEDAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGJfTCSCr0wkKIwoEBAwCAhITbGYvYTJhL3YxL2EyYS5wcm90bxiF1QkgltUJCiMKBAQMAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y6tcJIPvXCQojCgQEDAICEhNsZi9hMmEvdjEvYTJhLnByb3RvGIraCSCX2gkKIwoEBAwCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjS3Akg5dwJCiMKBAQMAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Ykt4JIKbeCQojCgQEDAIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGKHgCSC14AkKIwoEBAwCAxITbGYvYTJhL3YxL2EyYS5wcm90bxiZ4gkgr+IJCiMKBAQMAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Y5+MJIPvjCQojCgQEDQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIGICiCHiAoKIwoEBA0CABITbGYvYTJhL3YxL2EyYS5wcm90bxjwiQog9okKCiMKBAQNAgESE2xmL2EyYS92MS9hMmEucHJvdG8YtYsKIMOLCgojCgQEDQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKyNCiC6jQoKIwoEBA0CAhITbGYvYTJhL3YxL2EyYS5wcm90bxj1jgoggI8KCiMKBAQNAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y9ZAKIICRCgojCgQEDQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGOKSCiDrkgoKIwoEBA0CAxITbGYvYTJhL3YxL2EyYS5wcm90bxiplQogspUKCiMKBAQNAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yn5cKIKqXCgojCgQEDQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGM+YCiDYmAoKIwoEBA4CABITbGYvYTJhL3YxL2EyYS5wcm90bxjKyAogz8gKCiMKBAQOAgASE2xmL2EyYS92MS9hMmEucHJvdG8YsMoKILXKCgojCgQEDgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGOnLCiDwywoKIwoEBA4CARITbGYvYTJhL3YxL2EyYS5wcm90bxjRzQog2M0KCiMKBAQOAgISE2xmL2EyYS92MS9hMmEucHJvdG8Yk88KIKHPCgojCgQEDgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGILRCiCQ0QoKIwoEBA4CAxITbGYvYTJhL3YxL2EyYS5wcm90bxjM0gog19IKCiMKBAQOAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YwdQKIMzUCgojCgQEDgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGLbWCiC91goKIwoEBA4CAxITbGYvYTJhL3YxL2EyYS5wcm90bxi72AogyNgKCiMKBAQOAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y5tkKIPXZCgojCgQEDgIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGN/bCiDu2woKIwoEBA4CBBITbGYvYTJhL3YxL2EyYS5wcm90bxjY3Qog490KCiMKBAQOAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y4d8KIPLfCgojCgQEDgIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGJfhCiCo4QoKIwoEBA4CBRITbGYvYTJhL3YxL2EyYS5wcm90bxiS4wogo+MKCiMKBAQOAgUSE2xmL2EyYS92MS9hMmEucHJvdG8YjeUKIJrlCgojCgQEDgIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGJjnCiCr5woKIwoEBA4CBhITbGYvYTJhL3YxL2EyYS5wcm90bxjT6Aog5egKCiMKBAQOAgYSE2xmL2EyYS92MS9hMmEucHJvdG8Yz+oKIOHqCgojCgQEDgIGEhNsZi9hMmEvdjEvYTJhLnByb3RvGMvsCiDZ7AoKIwoEBA4CBhITbGYvYTJhL3YxL2EyYS5wcm90bxjX7gog6+4KCiMKBAQOAgcSE2xmL2EyYS92MS9hMmEucHJvdG8YyPAKIOPwCgojCgQEDgIHEhNsZi9hMmEvdjEvYTJhLnByb3RvGLjzCiDT8woKIwoEBA4CBxITbGYvYTJhL3YxL2EyYS5wcm90bxjl9Qog/PUKCiMKBAQOAgcSE2xmL2EyYS92MS9hMmEucHJvdG8YrvgKIMv4CgojCgQEDwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGJObCyCfmwsKIwoEBA8CABITbGYvYTJhL3YxL2EyYS5wcm90bxiQnQsgnJ0LCiMKBAQPAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y3Z4LIOmeCwojCgQEDwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGNqgCyDmoAsKIwoEBA8CAhITbGYvYTJhL3YxL2EyYS5wcm90bxjLogsg1KILCiMKBAQPAgISE2xmL2EyYS92MS9hMmEucHJvdG8YmqULIKOlCwojCgQEDwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGJinCyCjpwsKIwoEBA8CAhITbGYvYTJhL3YxL2EyYS5wcm90bxjMqAsg1agLCiMKBAQQAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y5dILIO7SCwojCgQEEAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGO/UCyD41AsKIwoEBBACARITbGYvYTJhL3YxL2EyYS5wcm90bxi61gsgv9YLCiMKBAQQAgESE2xmL2EyYS92MS9hMmEucHJvdG8YwNgLIMXYCwojCgQEEAICEhNsZi9hMmEvdjEvYTJhLnByb3RvGIzaCyCV2gsKIwoEBBACAhITbGYvYTJhL3YxL2EyYS5wcm90bxiW3Asgn9wLCiMKBAQQAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Y4t0LIOjdCwojCgQEEAIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGOnfCyDv3wsKIwoEBBACBBITbGYvYTJhL3YxL2EyYS5wcm90bxi04QsgvOELCiMKBAQQAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YveMLIMXjCwojCgQEEAIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGLzlCyDN5QsKIwoEBBACBRITbGYvYTJhL3YxL2EyYS5wcm90bxix6AsgwugLCiMKBAQQAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Yx+oLINrqCwojCgQEEAIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGJPsCyCk7AsKIwoEBBECABITbGYvYTJhL3YxL2EyYS5wcm90bxisiQwgt4kMCiMKBAQRAgASE2xmL2EyYS92MS9hMmEucHJvdG8YoYsMIKyLDAojCgQEEQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGJaNDCCdjQwKIwoEBBECABITbGYvYTJhL3YxL2EyYS5wcm90bxibjwwgqI8MCiMKBAQSAgASE2xmL2EyYS92MS9hMmEucHJvdG8YmrEMIKexDAojCgQEEgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGKC0DCCvtAwKIwoEBBMCABITbGYvYTJhL3YxL2EyYS5wcm90bxj6uAwgkbkMCiMKBAQTAgESE2xmL2EyYS92MS9hMmEucHJvdG8YmLkMILG5DAojCgQEEwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGLi5DCDOuQwKIwoEBBMCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjVuQwg9LkMCiMKBAQTAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y+7kMII+6DAojCgQEEwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNnrDCDw6wwKIwoEBBMCABITbGYvYTJhL3YxL2EyYS5wcm90bxjC7gwg2e4MCiMKBAQTAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y+/AMIJTxDAojCgQEEwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGMfyDCDe8gwKIwoEBBMCARITbGYvYTJhL3YxL2EyYS5wcm90bxjM9Awg5fQMCiMKBAQTAgESE2xmL2EyYS92MS9hMmEucHJvdG8YvfcMINb3DAojCgQEEwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGPj5DCCT+gwKIwoEBBMCARITbGYvYTJhL3YxL2EyYS5wcm90bxjI+wwg4fsMCiMKBAQTAgISE2xmL2EyYS92MS9hMmEucHJvdG8YyP0MIN/9DAojCgQEEwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGLGADSDIgA0KIwoEBBMCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjqgg0gg4MNCiMKBAQTAgISE2xmL2EyYS92MS9hMmEucHJvdG8YtoQNIM2EDQojCgQEEwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGMuGDSDphg0KIwoEBBMCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjQiQ0g7okNCiMKBAQTAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YkIwNILCMDQojCgQEEwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGOqNDSCIjg0KIwoEBBMCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjzjw0giJANCiMKBAQTAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y45INIPiSDQojCgQEEwIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGJqVDSCxlQ0KIwoEBBMCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjilg0g95YNCiMKBAQUAgASE2xmL2EyYS92MS9hMmEucHJvdG8YqbgNILe4DQojCgQEFAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGKy6DSC6ug0KIwoEBBQCARITbGYvYTJhL3YxL2EyYS5wcm90bxj8uw0gh7wNCiMKBAQUAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y/L0NIIe+DQojCgQEFAICEhNsZi9hMmEvdjEvYTJhLnByb3RvGMW/DSDMvw0KIwoEBBQCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjBwQ0gyMENCiMKBAQVAgASE2xmL2EyYS92MS9hMmEucHJvdG8YvOMNIMrjDQojCgQEFQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGMPlDSDR5Q0KIwoEBBUCARITbGYvYTJhL3YxL2EyYS5wcm90bxiT5w0gnOcNCiMKBAQVAgESE2xmL2EyYS92MS9hMmEucHJvdG8YlekNIJ7pDQojCgQEFQICEhNsZi9hMmEvdjEvYTJhLnByb3RvGOfqDSD26g0KIwoEBBUCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjv7A0g/uwNCiMKBAQWAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y+Y8OIIeQDgojCgQEFgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGPyRDiCKkg4KIwoEBBYCARITbGYvYTJhL3YxL2EyYS5wcm90bxjikw4g6pMOCiMKBAQWAgESE2xmL2EyYS92MS9hMmEucHJvdG8YqpYOILKWDgojCgQEFgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKuYDiC1mA4KIwoEBBYCARITbGYvYTJhL3YxL2EyYS5wcm90bxjfmQ4g55kOCiMKBAQWAgISE2xmL2EyYS92MS9hMmEucHJvdG8YpJsOILibDgojCgQEFgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGK2dDiDBnQ4KIwoEBBcCABITbGYvYTJhL3YxL2EyYS5wcm90bxj3vQ4ghb4OCiMKBAQXAgASE2xmL2EyYS92MS9hMmEucHJvdG8YiMAOIJbADgojCgQEFwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGOrBDiD9wQ4KIwoEBBcCARITbGYvYTJhL3YxL2EyYS5wcm90bxiAxA4gk8QOCiMKBAQYAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y0eEOIN/hDgojCgQEGAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNrjDiDo4w4KIwoEBBkCABITbGYvYTJhL3YxL2EyYS5wcm90bxi56A4gy+gOCiMKBAQZAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y0ugOIOToDgojCgQEGQICEhNsZi9hMmEvdjEvYTJhLnByb3RvGOvoDiDz6A4KIwoEBBkCAxITbGYvYTJhL3YxL2EyYS5wcm90bxj66A4ggukOCiMKBAQZAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YiekOIJTpDgojCgQEGQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGLeYDyDLmA8KIwoEBBkCABITbGYvYTJhL3YxL2EyYS5wcm90bxinmw8gu5sPCiMKBAQZAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y0Z0PIOedDwojCgQEGQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGJOfDyCnnw8KIwoEBBkCARITbGYvYTJhL3YxL2EyYS5wcm90bxiSoQ8gpqEPCiMKBAQZAgESE2xmL2EyYS92MS9hMmEucHJvdG8YgqQPIJakDwojCgQEGQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKymDyDCpg8KIwoEBBkCARITbGYvYTJhL3YxL2EyYS5wcm90bxjupw8ggqgPCiMKBAQZAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y0akPINypDwojCgQEGQICEhNsZi9hMmEvdjEvYTJhLnByb3RvGJ2sDyCorA8KIwoEBBkCAhITbGYvYTJhL3YxL2EyYS5wcm90bxi+rg8gy64PCiMKBAQZAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y7q8PIPmvDwojCgQEGQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGMixDyDTsQ8KIwoEBBkCAxITbGYvYTJhL3YxL2EyYS5wcm90bxiUtA8gn7QPCiMKBAQZAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YtbYPIMK2DwojCgQEGQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGOW3DyDwtw8KIwoEBBkCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjGuQ8g07kPCiMKBAQZAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YmrwPIKe8DwojCgQEGQIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGL2+DyDMvg8KIwoEBBkCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjxvw8g/r8PCiMKBAQaAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y4+kPIPbpDwojCgQEGgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGPfrDyCK7A8KIwoEBBoCARITbGYvYTJhL3YxL2EyYS5wcm90bxjT7Q8g3u0PCiMKBAQaAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y3+8PIOrvDwojCgQEGgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGLXxDyDC8Q8KIwoEBBoCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjD8w8g0PMPCiMKBAQaAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yk/YPIJ/2DwojCgQEGgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGPv4DyCJ+Q8KIwoEBBoCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjC+g8g0foPCiMKBAQaAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y3vwPIO38DwojCgQEGwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIaiECCRohAKIwoEBBsCABITbGYvYTJhL3YxL2EyYS5wcm90bxiSpBAgnaQQCiMKBAQbAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y6KUQIPWlEAojCgQEGwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGPanECCDqBAKIwoEBBsCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjGqhAg0qoQCiMKBAQbAgISE2xmL2EyYS92MS9hMmEucHJvdG8Yrq0QILytEAojCgQEHAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNHRECDk0RAKIwoEBBwCABITbGYvYTJhL3YxL2EyYS5wcm90bxjT0xAg5tMQCiMKBAQcAgESE2xmL2EyYS92MS9hMmEucHJvdG8YqNUQILXVEAojCgQEHAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKTXECCx1xAKIwoEBBwCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjr2RAg99kQCiMKBAQcAgISE2xmL2EyYS92MS9hMmEucHJvdG8YwdwQIM/cEAojCgQEHQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGMSAESDPgBEKIwoEBB0CABITbGYvYTJhL3YxL2EyYS5wcm90bxi+ghEgyYIRCiMKBAQdAgESE2xmL2EyYS92MS9hMmEucHJvdG8Yi4QRIJiEEQojCgQEHQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGIeGESCUhhEKIwoEBB0CAhITbGYvYTJhL3YxL2EyYS5wcm90bxjOiBEg2ogRCiMKBAQdAgISE2xmL2EyYS92MS9hMmEucHJvdG8YpIsRILKLEQojCgQEHgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGKCyESC5shEKIwoEBB4CABITbGYvYTJhL3YxL2EyYS5wcm90bxistBEgxbQRCiMKBAQeAgESE2xmL2EyYS92MS9hMmEucHJvdG8Yh7YRIJK2EQojCgQEHgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGIW4ESCQuBEKIwoEBB4CAhITbGYvYTJhL3YxL2EyYS5wcm90bxjUuREg4bkRCiMKBAQeAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y1LsRIOG7EQojCgQEHgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGJ2+ESCpvhEKIwoEBB4CAxITbGYvYTJhL3YxL2EyYS5wcm90bxj3wBEghcERCiMKBAQfAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y2ugRIOPoEQojCgQEHwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNTqESDd6hEKIwoEBB8CARITbGYvYTJhL3YxL2EyYS5wcm90bxiv7BEguewRCiMKBAQfAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y7O4RIPbuEQojCgQEHwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGOvwESD38BEKIwoEBB8CARITbGYvYTJhL3YxL2EyYS5wcm90bxih8hEgq/IRCiMKBAQfAgISE2xmL2EyYS92MS9hMmEucHJvdG8YlfQRIKX0EQojCgQEHwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGIv3ESCb9xEKIwoEBB8CAhITbGYvYTJhL3YxL2EyYS5wcm90bxiQ+REgovkRCiMKBAQfAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y0voRIOL6EQojCgQEHwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGLn8ESDE/BEKIwoEBB8CAxITbGYvYTJhL3YxL2EyYS5wcm90bxiK/xEglf8RCiMKBAQfAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YioESIJeBEgojCgQEHwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGMKCEiDNghIKIwoEBCACABITbGYvYTJhL3YxL2EyYS5wcm90bxiyoxIgu6MSCiMKBAQgAgASE2xmL2EyYS92MS9hMmEucHJvdG8YpKUSIK2lEgojCgQEIAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGOOmEiDophIKIwoEBCACARITbGYvYTJhL3YxL2EyYS5wcm90bxjRqBIg1qgSCiMKBAQgAgISE2xmL2EyYS92MS9hMmEucHJvdG8Yl6oSIKeqEgojCgQEIAICEhNsZi9hMmEvdjEvYTJhLnByb3RvGI+sEiCfrBIKIwoEBCACAhITbGYvYTJhL3YxL2EyYS5wcm90bxj9rRIgj64SCiMKBAQgAgISE2xmL2EyYS92MS9hMmEucHJvdG8YxK8SINSvEgojCgQEIQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGOfeEiDw3hIKIwoEBCECABITbGYvYTJhL3YxL2EyYS5wcm90bxjd4BIg5uASCiMKBAQhAgESE2xmL2EyYS92MS9hMmEucHJvdG8YpuISILLiEgojCgQEIQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGJ/kEiCr5BIKIwoEBCECAhITbGYvYTJhL3YxL2EyYS5wcm90bxj+5RIgh+YSCiMKBAQhAgISE2xmL2EyYS92MS9hMmEucHJvdG8Ym+gSIKToEgojCgQEIQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGODpEiDr6RIKIwoEBCECAxITbGYvYTJhL3YxL2EyYS5wcm90bxjX6xIg4usSCiMKBAQhAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YxO0SINHtEgojCgQEIQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGIjvEiCT7xIKIwoEBCECBBITbGYvYTJhL3YxL2EyYS5wcm90bxjD8BIgz/ASCiMKBAQhAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YvPISIMjyEgojCgQEIQIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGIv0EiCb9BIKIwoEBCECBRITbGYvYTJhL3YxL2EyYS5wcm90bxiH9hIgl/YSCiMKBAQhAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Y+fcSIIv4EgojCgQEIQIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGML5EiDS+RIKIwoEBCECBhITbGYvYTJhL3YxL2EyYS5wcm90bxi7+xIg0vsSCiMKBAQhAgYSE2xmL2EyYS92MS9hMmEucHJvdG8YoP4SILf+EgojCgQEIQIGEhNsZi9hMmEvdjEvYTJhLnByb3RvGKiAEyDBgBMKIwoEBCECBhITbGYvYTJhL3YxL2EyYS5wcm90bxj2gRMgjYITCiMKBAQhAgcSE2xmL2EyYS92MS9hMmEucHJvdG8Yw4MTINaDEwojCgQEIQIHEhNsZi9hMmEvdjEvYTJhLnByb3RvGM+FEyDihRMKIwoEBCECBxITbGYvYTJhL3YxL2EyYS5wcm90bxjEhxMg2YcTCiMKBAQhAgcSE2xmL2EyYS92MS9hMmEucHJvdG8YkIkTIKOJEwojCgQEIgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIavEyCSrxMKIwoEBCICABITbGYvYTJhL3YxL2EyYS5wcm90bxjIsRMg1LETCiMKBAQiAgASE2xmL2EyYS92MS9hMmEucHJvdG8Yz7MTINezEwojCgQEIgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIi2EyCWthMKIwoEBCICARITbGYvYTJhL3YxL2EyYS5wcm90bxi7txMgy7cTCiMKBAQiAgESE2xmL2EyYS92MS9hMmEucHJvdG8YurkTIMq5EwojCgQEIgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGIm7EyCUuxMKIwoEBCICAhITbGYvYTJhL3YxL2EyYS5wcm90bxiCvRMgjb0TCiMKBAQiAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yyr4TINa+EwojCgQEIgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGMTAEyDQwBMKIwoEBCMCABITbGYvYTJhL3YxL2EyYS5wcm90bxj74hMghOMTCiMKBAQjAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y8+QTIPzkEwojCgQEIwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGLXmEyC65hMKIwoEBCMCARITbGYvYTJhL3YxL2EyYS5wcm90bxip6BMgrugTCiMKBAQjAgISE2xmL2EyYS92MS9hMmEucHJvdG8YlOoTIJ/qEwojCgQEIwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGOPsEyDu7BMKIwoEBCMCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjh7hMg7u4TCiMKBAQjAgISE2xmL2EyYS92MS9hMmEucHJvdG8YmPATIKPwEwojCgQEJAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGLWTFCC+kxQKIwoEBCQCABITbGYvYTJhL3YxL2EyYS5wcm90bxjTlRQg3JUUCiMKBAQkAgESE2xmL2EyYS92MS9hMmEucHJvdG8YrZcUILaXFAojCgQEJAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGMuZFCDUmRQKIwoEBCQCAhITbGYvYTJhL3YxL2EyYS5wcm90bxigmxQgpZsUCiMKBAQkAgISE2xmL2EyYS92MS9hMmEucHJvdG8Yup0UIL+dFAojCgQEJQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGJHBFCCawRQKIwoEBCUCABITbGYvYTJhL3YxL2EyYS5wcm90bxi1wxQgvsMUCiMKBAQlAgESE2xmL2EyYS92MS9hMmEucHJvdG8YksUUIJvFFAojCgQEJQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGLbHFCC/xxQKIwoEBCUCAhITbGYvYTJhL3YxL2EyYS5wcm90bxiOyRQgk8kUCiMKBAQlAgISE2xmL2EyYS92MS9hMmEucHJvdG8YrssUILPLFAojCgQEJgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNvqFCDk6hQKIwoEBCYCABITbGYvYTJhL3YxL2EyYS5wcm90bxjd7BQg5uwUCiMKBAQmAgESE2xmL2EyYS92MS9hMmEucHJvdG8YpO4UIKnuFAojCgQEJgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKLwFCCn8BQKIwoEBCcCABITbGYvYTJhL3YxL2EyYS5wcm90bxiLlhUglJYVCiMKBAQnAgASE2xmL2EyYS92MS9hMmEucHJvdG8YrZgVILaYFQojCgQEJwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGImaFSCSmhUKIwoEBCcCARITbGYvYTJhL3YxL2EyYS5wcm90bxirnBUgtJwVCiMKBAQnAgISE2xmL2EyYS92MS9hMmEucHJvdG8YiJ4VIJOeFQojCgQEJwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGKugFSC2oBUKIwoEBCcCAxITbGYvYTJhL3YxL2EyYS5wcm90bxiJohUglaIVCiMKBAQnAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YrqQVILqkFQojCgQEKAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGKTCFSCtwhUKIwoEBCgCABITbGYvYTJhL3YxL2EyYS5wcm90bxiwxBUgucQVCiMKBAQpAgASE2xmL2EyYS92MS9hMmEucHJvdG8YnMkVIKDJFQojCgQEKQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKfJFSCuyRUKIwoEBCkCABITbGYvYTJhL3YxL2EyYS5wcm90bxi27BUgvewVCiMKBAQpAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y6e4VIPDuFQojCgQEKQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGKHxFSCq8RUKIwoEBCkCABITbGYvYTJhL3YxL2EyYS5wcm90bxjS8hUg2fIVCiMKBAQpAgESE2xmL2EyYS92MS9hMmEucHJvdG8YnPQVIKb0FQojCgQEKQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGNv2FSDl9hUKIwoEBCkCARITbGYvYTJhL3YxL2EyYS5wcm90bxiW+RUgovkVCiMKBAQpAgESE2xmL2EyYS92MS9hMmEucHJvdG8YzfoVINf6FQojCgQEKgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGKT/FSCo/xUKIwoEBCoCARITbGYvYTJhL3YxL2EyYS5wcm90bxiv/xUgtv8VCiMKBAQqAgISE2xmL2EyYS92MS9hMmEucHJvdG8Yvf8VIMr/FQojCgQEKgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGNH/FSDg/xUKIwoEBCoCABITbGYvYTJhL3YxL2EyYS5wcm90bxiIqhYgj6oWCiMKBAQqAgASE2xmL2EyYS92MS9hMmEucHJvdG8YsawWILisFgojCgQEKgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNquFiDjrhYKIwoEBCoCABITbGYvYTJhL3YxL2EyYS5wcm90bxiGsBYgjbAWCiMKBAQqAgESE2xmL2EyYS92MS9hMmEucHJvdG8Yy7EWINWxFgojCgQEKgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGIC0FiCKtBYKIwoEBCoCARITbGYvYTJhL3YxL2EyYS5wcm90bxisthYguLYWCiMKBAQqAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y3rcWIOi3FgojCgQEKgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGMi5FiDXuRYKIwoEBCoCAhITbGYvYTJhL3YxL2EyYS5wcm90bxisvBYgu7wWCiMKBAQqAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y3b4WIO6+FgojCgQEKgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGJnAFiCowBYKIwoEBCoCAxITbGYvYTJhL3YxL2EyYS5wcm90bxiOwhYgn8IWCiMKBAQqAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Y+sQWIIvFFgojCgQEKgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGK3HFiDAxxYKIwoEBCoCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjtyBYg/sgWCiMKBAQrAgASE2xmL2EyYS92MS9hMmEucHJvdG8YyO4WINbuFgojCgQEKwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGPrxFiCI8hYKIwoEBCsCABITbGYvYTJhL3YxL2EyYS5wcm90bxjF9BYgz/QWCiMKBAQrAgASE2xmL2EyYS92MS9hMmEucHJvdG8YwvcWINL3FgojCgQEKwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGI/5FiCf+RYKIwoEBCsCARITbGYvYTJhL3YxL2EyYS5wcm90bxi6+xYgyvsWCiEKAgUAEhNsZi9hMmEvdjEvYTJhLnByb3RvGMr8FiDT/BYKIwoEBQACABITbGYvYTJhL3YxL2EyYS5wcm90bxja/BYg8PwWCiMKBAUAAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y9/wWIIv9FgojCgQFAAICEhNsZi9hMmEvdjEvYTJhLnByb3RvGJL9FiCk/RYKIwoEBQACAxITbGYvYTJhL3YxL2EyYS5wcm90bxir/RYgv/0WCiMKBAUAAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Yxv0WINf9FgojCgQFAAIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGN79FiDx/RYKIwoEBQACBhITbGYvYTJhL3YxL2EyYS5wcm90bxj4/RYgkf4WCiMKBAUAAgcSE2xmL2EyYS92MS9hMmEucHJvdG8YmP4WIKv+FgojCgQFAAIIEhNsZi9hMmEvdjEvYTJhLnByb3RvGLL+FiDK/hYKIQoCBQESE2xmL2EyYS92MS9hMmEucHJvdG8Y/P4WIID/FgojCgQFAQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIf/FiCX/xYKIwoEBQECARITbGYvYTJhL3YxL2EyYS5wcm90bxie/xYgp/8WCiMKBAUBAgISE2xmL2EyYS92MS9hMmEucHJvdG8Yrv8WILj/Fg==
12570
+ // Ch8KAgQAEhNsZi9hMmEvdjEvYTJhLnByb3RvGO8pIIcqCh8KAgQBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKUwIKkwCh8KAgQCEhNsZi9hMmEvdjEvYTJhLnByb3RvGPc1IIE2Ch8KAgQDEhNsZi9hMmEvdjEvYTJhLnByb3RvGME7IMU7Ch8KAgQEEhNsZi9hMmEvdjEvYTJhLnByb3RvGJBBIJdBCh8KAgQFEhNsZi9hMmEvdjEvYTJhLnByb3RvGPFGIPlGCh8KAgQGEhNsZi9hMmEvdjEvYTJhLnByb3RvGNdMIOxMCh8KAgQHEhNsZi9hMmEvdjEvYTJhLnByb3RvGM1SIORSCh8KAgQIEhNsZi9hMmEvdjEvYTJhLnByb3RvGMtYIN1YCh8KAgQJEhNsZi9hMmEvdjEvYTJhLnByb3RvGLVeIMNeCh8KAgQKEhNsZi9hMmEvdjEvYTJhLnByb3RvGI9kIJhkCh8KAgQLEhNsZi9hMmEvdjEvYTJhLnByb3RvGPppIIdqCh8KAgQMEhNsZi9hMmEvdjEvYTJhLnByb3RvGNBvIOFvCh8KAgQNEhNsZi9hMmEvdjEvYTJhLnByb3RvGON1IPF1Ch8KAgQOEhNsZi9hMmEvdjEvYTJhLnByb3RvGL17IMd7CiEKAgQPEhNsZi9hMmEvdjEvYTJhLnByb3RvGK2BASC/gQEKIQoCBBASE2xmL2EyYS92MS9hMmEucHJvdG8Yl4cBILGHAQohCgIEERITbGYvYTJhL3YxL2EyYS5wcm90bxihjQEgq40BCiEKAgQSEhNsZi9hMmEvdjEvYTJhLnByb3RvGJGTASCkkwEKIQoCBBMSE2xmL2EyYS92MS9hMmEucHJvdG8Y/5gBII2ZAQohCgIEFBITbGYvYTJhL3YxL2EyYS5wcm90bxiAnwEglJ8BCiEKAgQVEhNsZi9hMmEvdjEvYTJhLnByb3RvGPKkASCIpQEKIQoCBBYSE2xmL2EyYS92MS9hMmEucHJvdG8Y7KoBIICrAQohCgIEFxITbGYvYTJhL3YxL2EyYS5wcm90bxjesAEg+bABCiEKAgQYEhNsZi9hMmEvdjEvYTJhLnByb3RvGOy2ASCDtwEKIQoCBBkSE2xmL2EyYS92MS9hMmEucHJvdG8Y6rwBIPS8AQohCgIEGhITbGYvYTJhL3YxL2EyYS5wcm90bxjXwgEg8cIBCiEKAgQbEhNsZi9hMmEvdjEvYTJhLnByb3RvGOHIASD7yAEKIQoCBBwSE2xmL2EyYS92MS9hMmEucHJvdG8Y684BIPzOAQohCgIEHRITbGYvYTJhL3YxL2EyYS5wcm90bxjR1AEg4tQBCiEKAgQeEhNsZi9hMmEvdjEvYTJhLnByb3RvGLfaASDK2gEKIQoCBB8SE2xmL2EyYS92MS9hMmEucHJvdG8YpeABILfgAQohCgIEIBITbGYvYTJhL3YxL2EyYS5wcm90bxiP5gEgneYBCiEKAgQhEhNsZi9hMmEvdjEvYTJhLnByb3RvGOnrASD56wEKIQoCBCISE2xmL2EyYS92MS9hMmEucHJvdG8Yy/EBINzxAQohCgIEIxITbGYvYTJhL3YxL2EyYS5wcm90bxje9wEg7/cBCiEKAgQkEhNsZi9hMmEvdjEvYTJhLnByb3RvGMT9ASDo/QEKIQoCBCUSE2xmL2EyYS92MS9hMmEucHJvdG8Y9oMCIJ2EAgohCgIEJhITbGYvYTJhL3YxL2EyYS5wcm90bxi0igIgyooCCiEKAgQnEhNsZi9hMmEvdjEvYTJhLnByb3RvGK6QAiDUkAIKIQoCBCgSE2xmL2EyYS92MS9hMmEucHJvdG8Y6JYCIIOXAgohCgIEKRITbGYvYTJhL3YxL2EyYS5wcm90bxj2nAIgiZ0CCiEKAgQqEhNsZi9hMmEvdjEvYTJhLnByb3RvGJCjAiCeowIKIQoCBCsSE2xmL2EyYS92MS9hMmEucHJvdG8YkakCILipAgojCgQEAAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIjVAiCi1QIKIwoEBAACABITbGYvYTJhL3YxL2EyYS5wcm90bxio1wIgwtcCCiMKBAQAAgASE2xmL2EyYS92MS9hMmEucHJvdG8YyNkCIN7ZAgojCgQEAAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGPjbAiCU3AIKIwoEBAACARITbGYvYTJhL3YxL2EyYS5wcm90bxiV3gIgst4CCiMKBAQAAgESE2xmL2EyYS92MS9hMmEucHJvdG8YquECIMfhAgojCgQEAAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGMjjAiDn4wIKIwoEBAACARITbGYvYTJhL3YxL2EyYS5wcm90bxiq5QIgx+UCCiMKBAQAAgISE2xmL2EyYS92MS9hMmEucHJvdG8YgucCIJLnAgojCgQEAAICEhNsZi9hMmEvdjEvYTJhLnByb3RvGI7pAiCe6QIKIwoEBAACAhITbGYvYTJhL3YxL2EyYS5wcm90bxiQ6wIgousCCiMKBAQAAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y4ewCIPHsAgojCgQEAAIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGKbuAiCx7gIKIwoEBAACAxITbGYvYTJhL3YxL2EyYS5wcm90bxi68AIgxfACCiMKBAQBAgASE2xmL2EyYS92MS9hMmEucHJvdG8YsJ0DILWdAwojCgQEAQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIqfAyCPnwMKIwoEBAECARITbGYvYTJhL3YxL2EyYS5wcm90bxjDoAMgz6ADCiMKBAQBAgESE2xmL2EyYS92MS9hMmEucHJvdG8YpKIDILCiAwojCgQEAQICEhNsZi9hMmEvdjEvYTJhLnByb3RvGPmjAyCCpAMKIwoEBAECAhITbGYvYTJhL3YxL2EyYS5wcm90bxiipgMgq6YDCiMKBAQBAgISE2xmL2EyYS92MS9hMmEucHJvdG8YhKgDII+oAwojCgQEAQICEhNsZi9hMmEvdjEvYTJhLnByb3RvGKqpAyCzqQMKIwoEBAECAxITbGYvYTJhL3YxL2EyYS5wcm90bxjzqgMgg6sDCiMKBAQBAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yq60DILutAwojCgQEAQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGLGvAyC9rwMKIwoEBAECAxITbGYvYTJhL3YxL2EyYS5wcm90bxjYsQMg6rEDCiMKBAQBAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YmbMDIKezAwojCgQEAQIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGMy1AyDatQMKIwoEBAECBBITbGYvYTJhL3YxL2EyYS5wcm90bxjOtwMg2LcDCiMKBAQBAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y8rkDIIK6AwojCgQEAQIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGLy7AyDHuwMKIwoEBAECBRITbGYvYTJhL3YxL2EyYS5wcm90bxjxvQMg/L0DCiMKBAQBAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Y1b8DIOK/AwojCgQEAQIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGP/AAyCKwQMKIwoEBAICABITbGYvYTJhL3YxL2EyYS5wcm90bxiI5AMgkOQDCiMKBAQCAgASE2xmL2EyYS92MS9hMmEucHJvdG8YmOYDIKDmAwojCgQEAgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGOjnAyDy5wMKIwoEBAICARITbGYvYTJhL3YxL2EyYS5wcm90bxiV6gMgn+oDCiMKBAQCAgESE2xmL2EyYS92MS9hMmEucHJvdG8YhOwDIJDsAwojCgQEAgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGLLtAyC87QMKIwoEBAICAhITbGYvYTJhL3YxL2EyYS5wcm90bxiS7wMgnu8DCiMKBAQCAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y4PEDIOzxAwojCgQEAgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGNHzAyDf8wMKIwoEBAICAhITbGYvYTJhL3YxL2EyYS5wcm90bxiD9QMgj/UDCiMKBAQDAgASE2xmL2EyYS92MS9hMmEucHJvdG8YyPkDIMz5AwojCgQEAwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGNP5AyDW+QMKIwoEBAMCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjd+QMg4PkDCiMKBAQDAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Y5/kDIOv5AwojCgQEAwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIKnBCCJpwQKIwoEBAMCABITbGYvYTJhL3YxL2EyYS5wcm90bxjeqAQg5agECiMKBAQDAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y2qoEIOOqBAojCgQEAwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGLmsBCDArAQKIwoEBAMCARITbGYvYTJhL3YxL2EyYS5wcm90bxjqrQQg8K0ECiMKBAQDAgESE2xmL2EyYS92MS9hMmEucHJvdG8YxbQEIMu0BAojCgQEAwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGMC2BCDItgQKIwoEBAMCARITbGYvYTJhL3YxL2EyYS5wcm90bxieuAQgpLgECiMKBAQDAgISE2xmL2EyYS92MS9hMmEucHJvdG8YwbkEIMe5BAojCgQEAwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGJy7BCCiuwQKIwoEBAMCAhITbGYvYTJhL3YxL2EyYS5wcm90bxiXvQQgn70ECiMKBAQDAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y9b4EIPu+BAojCgQEAwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGL7ABCDFwAQKIwoEBAMCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjswgQg88IECiMKBAQDAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Y98QEIIDFBAojCgQEAwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGJnGBCCgxgQKIwoEBAMCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjpxwQg9McECiMKBAQDAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YnsoEIKnKBAojCgQEAwIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGILMBCCPzAQKIwoEBAMCBBITbGYvYTJhL3YxL2EyYS5wcm90bxiszQQgt80ECiMKBAQDAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Y2c4EIOTOBAojCgQEAwIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGLnQBCDE0AQKIwoEBAMCBhITbGYvYTJhL3YxL2EyYS5wcm90bxj40QQghNIECiMKBAQDAgYSE2xmL2EyYS92MS9hMmEucHJvdG8Y2dMEIOXTBAojCgQEBAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGMiDBSDUgwUKIwoEBAQCABITbGYvYTJhL3YxL2EyYS5wcm90bxivhQUgu4UFCiMKBAQEAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y8oYFIP6GBQojCgQEBAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGNmIBSDliAUKIwoEBAQCAhITbGYvYTJhL3YxL2EyYS5wcm90bxiZigUgoooFCiMKBAQEAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y/YsFIIaMBQojCgQEBAIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGMSNBSDLjQUKIwoEBAQCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjDjwUgyo8FCiMKBAQEAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Yj5EFIJuRBQojCgQEBAIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGL2TBSDJkwUKIwoEBAQCBBITbGYvYTJhL3YxL2EyYS5wcm90bxi6lQUgwpUFCiMKBAQEAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y35cFIO2XBQojCgQEBAIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGKiZBSCzmQUKIwoEBAQCBRITbGYvYTJhL3YxL2EyYS5wcm90bxjjmwUg7psFCiMKBAQEAgUSE2xmL2EyYS92MS9hMmEucHJvdG8YzZ0FINqdBQojCgQEBAIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGPqeBSCFnwUKIwoEBAQCBhITbGYvYTJhL3YxL2EyYS5wcm90bxi0oAUgxaAFCiMKBAQEAgYSE2xmL2EyYS92MS9hMmEucHJvdG8YqaIFILqiBQojCgQEBAIGEhNsZi9hMmEvdjEvYTJhLnByb3RvGJ6kBSCrpAUKIwoEBAQCBhITbGYvYTJhL3YxL2EyYS5wcm90bxijpgUgtqYFCiMKBAQEAgcSE2xmL2EyYS92MS9hMmEucHJvdG8Y4acFIPinBQojCgQEBAIHEhNsZi9hMmEvdjEvYTJhLnByb3RvGNypBSDzqQUKIwoEBAQCBxITbGYvYTJhL3YxL2EyYS5wcm90bxjXqwUg6qsFCiMKBAQEAgcSE2xmL2EyYS92MS9hMmEucHJvdG8Y4q0FIPutBQojCgQEBQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGOzYBSD52AUKIwoEBAUCABITbGYvYTJhL3YxL2EyYS5wcm90bxjW2gUg49oFCiMKBAQFAgESE2xmL2EyYS92MS9hMmEucHJvdG8YldwFIJzcBQojCgQEBQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGPndBSCA3gUKIwoEBAUCAhITbGYvYTJhL3YxL2EyYS5wcm90bxi53wUgx98FCiMKBAQFAgISE2xmL2EyYS92MS9hMmEucHJvdG8YpOEFILLhBQojCgQEBQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGPriBSCG4wUKIwoEBAUCAxITbGYvYTJhL3YxL2EyYS5wcm90bxiq5QUgtuUFCiMKBAQFAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YqOcFILDnBQojCgQEBQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGM/pBSDd6QUKIwoEBAUCBBITbGYvYTJhL3YxL2EyYS5wcm90bxiZ6wUgpOsFCiMKBAQFAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y1u0FIOHtBQojCgQEBQIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGMLvBSDP7wUKIwoEBAUCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjw8AUg+/AFCiMKBAQFAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Yq/IFILzyBQojCgQEBQIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGKL0BSCz9AUKIwoEBAUCBRITbGYvYTJhL3YxL2EyYS5wcm90bxiZ9gUgpvYFCiMKBAQFAgUSE2xmL2EyYS92MS9hMmEucHJvdG8YoPgFILP4BQojCgQEBgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNGeBiDangYKIwoEBAYCABITbGYvYTJhL3YxL2EyYS5wcm90bxjRoAYg2qAGCiMKBAQGAgESE2xmL2EyYS92MS9hMmEucHJvdG8Yn6IGIKuiBgojCgQEBgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKKkBiCupAYKIwoEBAYCAhITbGYvYTJhL3YxL2EyYS5wcm90bxiIpgYgkaYGCiMKBAQGAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y06gGINyoBgojCgQEBgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGNeqBiDiqgYKIwoEBAYCAhITbGYvYTJhL3YxL2EyYS5wcm90bxiOrAYgl6wGCiMKBAQGAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Y8a0GIPytBgojCgQEBgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGMiwBiDTsAYKIwoEBAYCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjOsgYg27IGCiMKBAQGAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YibQGIJS0BgojCgQEBwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGP3eBiCG3wYKIwoEBAcCABITbGYvYTJhL3YxL2EyYS5wcm90bxiB4QYgiuEGCiMKBAQHAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y0eIGIN3iBgojCgQEBwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGNjkBiDk5AYKIwoEBAcCAhITbGYvYTJhL3YxL2EyYS5wcm90bxi+5gYgyeYGCiMKBAQHAgISE2xmL2EyYS92MS9hMmEucHJvdG8YiekGIJTpBgojCgQEBwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGJPrBiCg6wYKIwoEBAcCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjQ7AYg2+wGCiMKBAQHAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yje4GIJbuBgojCgQEBwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGJ3wBiCm8AYKIwoEBAcCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjt8QYg+fEGCiMKBAQHAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YgPQGIIz0BgojCgQEBwIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGPn1BiCE9gYKIwoEBAcCBRITbGYvYTJhL3YxL2EyYS5wcm90bxjU+AYg3/gGCiMKBAQHAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Y3voGIOv6BgojCgQEBwIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGJv8BiCm/AYKIwoEBAgCABITbGYvYTJhL3YxL2EyYS5wcm90bxiZmwcgopsHCiMKBAQIAgASE2xmL2EyYS92MS9hMmEucHJvdG8Yk50HIJydBwojCgQECAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGN+eByDtngcKIwoEBAgCARITbGYvYTJhL3YxL2EyYS5wcm90bxjeoAcg7KAHCiMKBAQJAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y/sMHIITEBwojCgQECQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGO3FByDzxQcKIwoEBAkCARITbGYvYTJhL3YxL2EyYS5wcm90bxi3xwcgyccHCiMKBAQJAgESE2xmL2EyYS92MS9hMmEucHJvdG8YsskHIMTJBwojCgQECQICEhNsZi9hMmEvdjEvYTJhLnByb3RvGP7KByCHywcKIwoEBAkCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjwzAcg+cwHCiMKBAQJAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yvc4HIM/OBwojCgQECQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGLjQByDK0AcKIwoEBAoCABITbGYvYTJhL3YxL2EyYS5wcm90bxjmmwgg7ZsICiMKBAQKAgASE2xmL2EyYS92MS9hMmEucHJvdG8YzJ0IINOdCAojCgQECgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGI2fCCCbnwgKIwoEBAoCARITbGYvYTJhL3YxL2EyYS5wcm90bxj6oAggiKEICiMKBAQKAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y9KIIII6jCAojCgQECgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGNKlCCDspQgKIwoEBAoCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjzpwggiagICiMKBAQKAgISE2xmL2EyYS92MS9hMmEucHJvdG8YtKoIINCqCAojCgQECgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGJOsCCCerAgKIwoEBAoCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjRrggg3K4ICiMKBAQKAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yv7AIIMywCAojCgQECgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGO6xCCD5sQgKIwoEBAoCBBITbGYvYTJhL3YxL2EyYS5wcm90bxifswggqbMICiMKBAQKAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YiLUIIJK1CAojCgQECgIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGNK2CCDltggKIwoEBAoCBRITbGYvYTJhL3YxL2EyYS5wcm90bxjEuAgg17gICiMKBAQKAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Yq7oIIMC6CAojCgQECgIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGPC7CCCDvAgKIwoEBAoCBhITbGYvYTJhL3YxL2EyYS5wcm90bxjVvQgg5L0ICiMKBAQKAgYSE2xmL2EyYS92MS9hMmEucHJvdG8Yo8AIILLACAojCgQECgIGEhNsZi9hMmEvdjEvYTJhLnByb3RvGJXCCCCmwggKIwoEBAoCBhITbGYvYTJhL3YxL2EyYS5wcm90bxjMwwgg28MICiMKBAQKAgcSE2xmL2EyYS92MS9hMmEucHJvdG8YqMYIIL3GCAojCgQECgIHEhNsZi9hMmEvdjEvYTJhLnByb3RvGKrJCCDByQgKIwoEBAoCCBITbGYvYTJhL3YxL2EyYS5wcm90bxiuywggycsICiMKBAQKAggSE2xmL2EyYS92MS9hMmEucHJvdG8YnM4IILfOCAojCgQECgIIEhNsZi9hMmEvdjEvYTJhLnByb3RvGMjQCCDf0AgKIwoEBAoCCBITbGYvYTJhL3YxL2EyYS5wcm90bxiP0wggrNMICiMKBAQKAgkSE2xmL2EyYS92MS9hMmEucHJvdG8Y5dQIIP3UCAojCgQECgIJEhNsZi9hMmEvdjEvYTJhLnByb3RvGObWCCD+1ggKIwoEBAoCCRITbGYvYTJhL3YxL2EyYS5wcm90bxjn2Agg+9gICiMKBAQKAgkSE2xmL2EyYS92MS9hMmEucHJvdG8Y+NoIIJLbCAojCgQECgIKEhNsZi9hMmEvdjEvYTJhLnByb3RvGMncCCDi3AgKIwoEBAoCChITbGYvYTJhL3YxL2EyYS5wcm90bxjL3ggg5N4ICiMKBAQKAgoSE2xmL2EyYS92MS9hMmEucHJvdG8YzeAIIOLgCAojCgQECgIKEhNsZi9hMmEvdjEvYTJhLnByb3RvGN/iCCD64ggKIwoEBAoCCxITbGYvYTJhL3YxL2EyYS5wcm90bxi95AggyuQICiMKBAQKAgsSE2xmL2EyYS92MS9hMmEucHJvdG8Yg+cIIJDnCAojCgQECgILEhNsZi9hMmEvdjEvYTJhLnByb3RvGJDpCCCZ6QgKIwoEBAoCCxITbGYvYTJhL3YxL2EyYS5wcm90bxjB6wgg0OsICiMKBAQKAgwSE2xmL2EyYS92MS9hMmEucHJvdG8Ym+0IIKztCAojCgQECgIMEhNsZi9hMmEvdjEvYTJhLnByb3RvGP3vCCCO8AgKIwoEBAoCDBITbGYvYTJhL3YxL2EyYS5wcm90bxie8gggq/IICiMKBAQKAgwSE2xmL2EyYS92MS9hMmEucHJvdG8Y2/QIIO70CAojCgQECgINEhNsZi9hMmEvdjEvYTJhLnByb3RvGIr2CCCU9ggKIwoEBAoCDRITbGYvYTJhL3YxL2EyYS5wcm90bxj09wgg/vcICiMKBAQKAg0SE2xmL2EyYS92MS9hMmEucHJvdG8Y0/kIIN/5CAojCgQECgINEhNsZi9hMmEvdjEvYTJhLnByb3RvGJD7CCCa+wgKIwoEBAsCABITbGYvYTJhL3YxL2EyYS5wcm90bxi1mQkgu5kJCiMKBAQLAgASE2xmL2EyYS92MS9hMmEucHJvdG8YopsJIKibCQojCgQECwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGOecCSD2nAkKIwoEBAsCARITbGYvYTJhL3YxL2EyYS5wcm90bxjdngkg7J4JCiMKBAQMAgASE2xmL2EyYS92MS9hMmEucHJvdG8YwcYJIM3GCQojCgQEDAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGMjICSDUyAkKIwoEBAwCABITbGYvYTJhL3YxL2EyYS5wcm90bxi4ygkgxsoJCiMKBAQMAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y/ssJIIrMCQojCgQEDAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGMLNCSDWzQkKIwoEBAwCARITbGYvYTJhL3YxL2EyYS5wcm90bxjRzwkg5c8JCiMKBAQMAgESE2xmL2EyYS92MS9hMmEucHJvdG8YydEJIN/RCQojCgQEDAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGJfTCSCr0wkKIwoEBAwCAhITbGYvYTJhL3YxL2EyYS5wcm90bxiF1QkgltUJCiMKBAQMAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y6tcJIPvXCQojCgQEDAICEhNsZi9hMmEvdjEvYTJhLnByb3RvGIraCSCX2gkKIwoEBAwCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjS3Akg5dwJCiMKBAQMAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Ykt4JIKbeCQojCgQEDAIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGKHgCSC14AkKIwoEBAwCAxITbGYvYTJhL3YxL2EyYS5wcm90bxiZ4gkgr+IJCiMKBAQMAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Y5+MJIPvjCQojCgQEDQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIGICiCHiAoKIwoEBA0CABITbGYvYTJhL3YxL2EyYS5wcm90bxjwiQog9okKCiMKBAQNAgESE2xmL2EyYS92MS9hMmEucHJvdG8YtYsKIMOLCgojCgQEDQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKyNCiC6jQoKIwoEBA0CAhITbGYvYTJhL3YxL2EyYS5wcm90bxj1jgoggI8KCiMKBAQNAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y9ZAKIICRCgojCgQEDQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGOKSCiDrkgoKIwoEBA0CAxITbGYvYTJhL3YxL2EyYS5wcm90bxiplQogspUKCiMKBAQNAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yn5cKIKqXCgojCgQEDQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGM+YCiDYmAoKIwoEBA4CABITbGYvYTJhL3YxL2EyYS5wcm90bxjKyAogz8gKCiMKBAQOAgASE2xmL2EyYS92MS9hMmEucHJvdG8YsMoKILXKCgojCgQEDgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGOnLCiDwywoKIwoEBA4CARITbGYvYTJhL3YxL2EyYS5wcm90bxjRzQog2M0KCiMKBAQOAgISE2xmL2EyYS92MS9hMmEucHJvdG8Yk88KIKHPCgojCgQEDgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGILRCiCQ0QoKIwoEBA4CAxITbGYvYTJhL3YxL2EyYS5wcm90bxjM0gog19IKCiMKBAQOAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YwdQKIMzUCgojCgQEDgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGLbWCiC91goKIwoEBA4CAxITbGYvYTJhL3YxL2EyYS5wcm90bxi72AogyNgKCiMKBAQOAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y5tkKIPXZCgojCgQEDgIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGN/bCiDu2woKIwoEBA4CBBITbGYvYTJhL3YxL2EyYS5wcm90bxjY3Qog490KCiMKBAQOAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y4d8KIPLfCgojCgQEDgIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGJfhCiCo4QoKIwoEBA4CBRITbGYvYTJhL3YxL2EyYS5wcm90bxiS4wogo+MKCiMKBAQOAgUSE2xmL2EyYS92MS9hMmEucHJvdG8YjeUKIJrlCgojCgQEDgIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGJjnCiCr5woKIwoEBA4CBhITbGYvYTJhL3YxL2EyYS5wcm90bxjT6Aog5egKCiMKBAQOAgYSE2xmL2EyYS92MS9hMmEucHJvdG8Yz+oKIOHqCgojCgQEDgIGEhNsZi9hMmEvdjEvYTJhLnByb3RvGMvsCiDZ7AoKIwoEBA4CBhITbGYvYTJhL3YxL2EyYS5wcm90bxjX7gog6+4KCiMKBAQOAgcSE2xmL2EyYS92MS9hMmEucHJvdG8YyPAKIOPwCgojCgQEDgIHEhNsZi9hMmEvdjEvYTJhLnByb3RvGLjzCiDT8woKIwoEBA4CBxITbGYvYTJhL3YxL2EyYS5wcm90bxjl9Qog/PUKCiMKBAQOAgcSE2xmL2EyYS92MS9hMmEucHJvdG8YrvgKIMv4CgojCgQEDwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGJObCyCfmwsKIwoEBA8CABITbGYvYTJhL3YxL2EyYS5wcm90bxiQnQsgnJ0LCiMKBAQPAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y3Z4LIOmeCwojCgQEDwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGNqgCyDmoAsKIwoEBA8CAhITbGYvYTJhL3YxL2EyYS5wcm90bxjLogsg1KILCiMKBAQPAgISE2xmL2EyYS92MS9hMmEucHJvdG8YmqULIKOlCwojCgQEDwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGJinCyCjpwsKIwoEBA8CAhITbGYvYTJhL3YxL2EyYS5wcm90bxjMqAsg1agLCiMKBAQQAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y5dILIO7SCwojCgQEEAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGO/UCyD41AsKIwoEBBACARITbGYvYTJhL3YxL2EyYS5wcm90bxi61gsgv9YLCiMKBAQQAgESE2xmL2EyYS92MS9hMmEucHJvdG8YwNgLIMXYCwojCgQEEAICEhNsZi9hMmEvdjEvYTJhLnByb3RvGIzaCyCV2gsKIwoEBBACAhITbGYvYTJhL3YxL2EyYS5wcm90bxiW3Asgn9wLCiMKBAQQAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Y4t0LIOjdCwojCgQEEAIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGOnfCyDv3wsKIwoEBBACBBITbGYvYTJhL3YxL2EyYS5wcm90bxi04QsgvOELCiMKBAQQAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YveMLIMXjCwojCgQEEAIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGLzlCyDN5QsKIwoEBBACBRITbGYvYTJhL3YxL2EyYS5wcm90bxix6AsgwugLCiMKBAQQAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Yx+oLINrqCwojCgQEEAIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGJPsCyCk7AsKIwoEBBECABITbGYvYTJhL3YxL2EyYS5wcm90bxisiQwgt4kMCiMKBAQRAgASE2xmL2EyYS92MS9hMmEucHJvdG8YoYsMIKyLDAojCgQEEQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGJaNDCCdjQwKIwoEBBECABITbGYvYTJhL3YxL2EyYS5wcm90bxibjwwgqI8MCiMKBAQSAgASE2xmL2EyYS92MS9hMmEucHJvdG8YmrEMIKexDAojCgQEEgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGKC0DCCvtAwKIwoEBBMCABITbGYvYTJhL3YxL2EyYS5wcm90bxj6uAwgkbkMCiMKBAQTAgESE2xmL2EyYS92MS9hMmEucHJvdG8YmLkMILG5DAojCgQEEwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGLi5DCDOuQwKIwoEBBMCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjVuQwg9LkMCiMKBAQTAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y+7kMII+6DAojCgQEEwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNnrDCDw6wwKIwoEBBMCABITbGYvYTJhL3YxL2EyYS5wcm90bxjC7gwg2e4MCiMKBAQTAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y+/AMIJTxDAojCgQEEwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGMfyDCDe8gwKIwoEBBMCARITbGYvYTJhL3YxL2EyYS5wcm90bxjM9Awg5fQMCiMKBAQTAgESE2xmL2EyYS92MS9hMmEucHJvdG8YvfcMINb3DAojCgQEEwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGPj5DCCT+gwKIwoEBBMCARITbGYvYTJhL3YxL2EyYS5wcm90bxjI+wwg4fsMCiMKBAQTAgISE2xmL2EyYS92MS9hMmEucHJvdG8YyP0MIN/9DAojCgQEEwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGLGADSDIgA0KIwoEBBMCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjqgg0gg4MNCiMKBAQTAgISE2xmL2EyYS92MS9hMmEucHJvdG8YtoQNIM2EDQojCgQEEwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGMuGDSDphg0KIwoEBBMCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjQiQ0g7okNCiMKBAQTAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YkIwNILCMDQojCgQEEwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGOqNDSCIjg0KIwoEBBMCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjzjw0giJANCiMKBAQTAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y45INIPiSDQojCgQEEwIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGJqVDSCxlQ0KIwoEBBMCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjilg0g95YNCiMKBAQUAgASE2xmL2EyYS92MS9hMmEucHJvdG8YqbgNILe4DQojCgQEFAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGKy6DSC6ug0KIwoEBBQCARITbGYvYTJhL3YxL2EyYS5wcm90bxj8uw0gh7wNCiMKBAQUAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y/L0NIIe+DQojCgQEFAICEhNsZi9hMmEvdjEvYTJhLnByb3RvGMW/DSDMvw0KIwoEBBQCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjBwQ0gyMENCiMKBAQVAgASE2xmL2EyYS92MS9hMmEucHJvdG8YvOMNIMrjDQojCgQEFQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGMPlDSDR5Q0KIwoEBBUCARITbGYvYTJhL3YxL2EyYS5wcm90bxiT5w0gnOcNCiMKBAQVAgESE2xmL2EyYS92MS9hMmEucHJvdG8YlekNIJ7pDQojCgQEFQICEhNsZi9hMmEvdjEvYTJhLnByb3RvGOfqDSD26g0KIwoEBBUCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjv7A0g/uwNCiMKBAQWAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y+Y8OIIeQDgojCgQEFgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGPyRDiCKkg4KIwoEBBYCARITbGYvYTJhL3YxL2EyYS5wcm90bxjikw4g6pMOCiMKBAQWAgESE2xmL2EyYS92MS9hMmEucHJvdG8YqpYOILKWDgojCgQEFgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKuYDiC1mA4KIwoEBBYCARITbGYvYTJhL3YxL2EyYS5wcm90bxjfmQ4g55kOCiMKBAQWAgISE2xmL2EyYS92MS9hMmEucHJvdG8YpJsOILibDgojCgQEFgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGK2dDiDBnQ4KIwoEBBcCABITbGYvYTJhL3YxL2EyYS5wcm90bxj3vQ4ghb4OCiMKBAQXAgASE2xmL2EyYS92MS9hMmEucHJvdG8YiMAOIJbADgojCgQEFwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGOrBDiD9wQ4KIwoEBBcCARITbGYvYTJhL3YxL2EyYS5wcm90bxiAxA4gk8QOCiMKBAQYAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y0eEOIN/hDgojCgQEGAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNrjDiDo4w4KIwoEBBkCABITbGYvYTJhL3YxL2EyYS5wcm90bxi56A4gy+gOCiMKBAQZAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y0ugOIOToDgojCgQEGQICEhNsZi9hMmEvdjEvYTJhLnByb3RvGOvoDiDz6A4KIwoEBBkCAxITbGYvYTJhL3YxL2EyYS5wcm90bxj66A4ggukOCiMKBAQZAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YiekOIJTpDgojCgQEGQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGLeYDyDLmA8KIwoEBBkCABITbGYvYTJhL3YxL2EyYS5wcm90bxinmw8gu5sPCiMKBAQZAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y0Z0PIOedDwojCgQEGQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGJOfDyCnnw8KIwoEBBkCARITbGYvYTJhL3YxL2EyYS5wcm90bxiSoQ8gpqEPCiMKBAQZAgESE2xmL2EyYS92MS9hMmEucHJvdG8YgqQPIJakDwojCgQEGQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKymDyDCpg8KIwoEBBkCARITbGYvYTJhL3YxL2EyYS5wcm90bxjupw8ggqgPCiMKBAQZAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y0akPINypDwojCgQEGQICEhNsZi9hMmEvdjEvYTJhLnByb3RvGJ2sDyCorA8KIwoEBBkCAhITbGYvYTJhL3YxL2EyYS5wcm90bxi+rg8gy64PCiMKBAQZAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y7q8PIPmvDwojCgQEGQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGMixDyDTsQ8KIwoEBBkCAxITbGYvYTJhL3YxL2EyYS5wcm90bxiUtA8gn7QPCiMKBAQZAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YtbYPIMK2DwojCgQEGQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGOW3DyDwtw8KIwoEBBkCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjGuQ8g07kPCiMKBAQZAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YmrwPIKe8DwojCgQEGQIEEhNsZi9hMmEvdjEvYTJhLnByb3RvGL2+DyDMvg8KIwoEBBkCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjxvw8g/r8PCiMKBAQaAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y4+kPIPbpDwojCgQEGgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGPfrDyCK7A8KIwoEBBoCARITbGYvYTJhL3YxL2EyYS5wcm90bxjT7Q8g3u0PCiMKBAQaAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y3+8PIOrvDwojCgQEGgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGLXxDyDC8Q8KIwoEBBoCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjD8w8g0PMPCiMKBAQaAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yk/YPIJ/2DwojCgQEGgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGPv4DyCJ+Q8KIwoEBBoCBBITbGYvYTJhL3YxL2EyYS5wcm90bxjC+g8g0foPCiMKBAQaAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Y3vwPIO38DwojCgQEGwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIaiECCRohAKIwoEBBsCABITbGYvYTJhL3YxL2EyYS5wcm90bxiSpBAgnaQQCiMKBAQbAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y6KUQIPWlEAojCgQEGwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGPanECCDqBAKIwoEBBsCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjGqhAg0qoQCiMKBAQbAgISE2xmL2EyYS92MS9hMmEucHJvdG8Yrq0QILytEAojCgQEHAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNHRECDk0RAKIwoEBBwCABITbGYvYTJhL3YxL2EyYS5wcm90bxjT0xAg5tMQCiMKBAQcAgESE2xmL2EyYS92MS9hMmEucHJvdG8YqNUQILXVEAojCgQEHAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKTXECCx1xAKIwoEBBwCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjr2RAg99kQCiMKBAQcAgISE2xmL2EyYS92MS9hMmEucHJvdG8YwdwQIM/cEAojCgQEHQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGMSAESDPgBEKIwoEBB0CABITbGYvYTJhL3YxL2EyYS5wcm90bxi+ghEgyYIRCiMKBAQdAgESE2xmL2EyYS92MS9hMmEucHJvdG8Yi4QRIJiEEQojCgQEHQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGIeGESCUhhEKIwoEBB0CAhITbGYvYTJhL3YxL2EyYS5wcm90bxjOiBEg2ogRCiMKBAQdAgISE2xmL2EyYS92MS9hMmEucHJvdG8YpIsRILKLEQojCgQEHgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGKCyESC5shEKIwoEBB4CABITbGYvYTJhL3YxL2EyYS5wcm90bxistBEgxbQRCiMKBAQeAgESE2xmL2EyYS92MS9hMmEucHJvdG8Yh7YRIJK2EQojCgQEHgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGIW4ESCQuBEKIwoEBB4CAhITbGYvYTJhL3YxL2EyYS5wcm90bxjUuREg4bkRCiMKBAQeAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y1LsRIOG7EQojCgQEHgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGJ2+ESCpvhEKIwoEBB4CAxITbGYvYTJhL3YxL2EyYS5wcm90bxj3wBEghcERCiMKBAQfAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y2ugRIOPoEQojCgQEHwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNTqESDd6hEKIwoEBB8CARITbGYvYTJhL3YxL2EyYS5wcm90bxiv7BEguewRCiMKBAQfAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y7O4RIPbuEQojCgQEHwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGOvwESD38BEKIwoEBB8CARITbGYvYTJhL3YxL2EyYS5wcm90bxih8hEgq/IRCiMKBAQfAgISE2xmL2EyYS92MS9hMmEucHJvdG8YlfQRIKX0EQojCgQEHwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGIv3ESCb9xEKIwoEBB8CAhITbGYvYTJhL3YxL2EyYS5wcm90bxiQ+REgovkRCiMKBAQfAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y0voRIOL6EQojCgQEHwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGLn8ESDE/BEKIwoEBB8CAxITbGYvYTJhL3YxL2EyYS5wcm90bxiK/xEglf8RCiMKBAQfAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YioESIJeBEgojCgQEHwIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGMKCEiDNghIKIwoEBCACABITbGYvYTJhL3YxL2EyYS5wcm90bxiyoxIgu6MSCiMKBAQgAgASE2xmL2EyYS92MS9hMmEucHJvdG8YpKUSIK2lEgojCgQEIAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGOOmEiDophIKIwoEBCACARITbGYvYTJhL3YxL2EyYS5wcm90bxjRqBIg1qgSCiMKBAQgAgISE2xmL2EyYS92MS9hMmEucHJvdG8Yl6oSIKeqEgojCgQEIAICEhNsZi9hMmEvdjEvYTJhLnByb3RvGI+sEiCfrBIKIwoEBCACAhITbGYvYTJhL3YxL2EyYS5wcm90bxj9rRIgj64SCiMKBAQgAgISE2xmL2EyYS92MS9hMmEucHJvdG8YxK8SINSvEgojCgQEIQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGOfeEiDw3hIKIwoEBCECABITbGYvYTJhL3YxL2EyYS5wcm90bxjd4BIg5uASCiMKBAQhAgESE2xmL2EyYS92MS9hMmEucHJvdG8YpuISILLiEgojCgQEIQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGJ/kEiCr5BIKIwoEBCECAhITbGYvYTJhL3YxL2EyYS5wcm90bxj+5RIgh+YSCiMKBAQhAgISE2xmL2EyYS92MS9hMmEucHJvdG8Ym+gSIKToEgojCgQEIQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGODpEiDr6RIKIwoEBCECAxITbGYvYTJhL3YxL2EyYS5wcm90bxjX6xIg4usSCiMKBAQhAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YxO0SINHtEgojCgQEIQIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGIjvEiCT7xIKIwoEBCECBBITbGYvYTJhL3YxL2EyYS5wcm90bxjD8BIgz/ASCiMKBAQhAgQSE2xmL2EyYS92MS9hMmEucHJvdG8YvPISIMjyEgojCgQEIQIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGIv0EiCb9BIKIwoEBCECBRITbGYvYTJhL3YxL2EyYS5wcm90bxiH9hIgl/YSCiMKBAQhAgUSE2xmL2EyYS92MS9hMmEucHJvdG8Y+fcSIIv4EgojCgQEIQIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGML5EiDS+RIKIwoEBCECBhITbGYvYTJhL3YxL2EyYS5wcm90bxi7+xIg0vsSCiMKBAQhAgYSE2xmL2EyYS92MS9hMmEucHJvdG8YoP4SILf+EgojCgQEIQIGEhNsZi9hMmEvdjEvYTJhLnByb3RvGKiAEyDBgBMKIwoEBCECBhITbGYvYTJhL3YxL2EyYS5wcm90bxj2gRMgjYITCiMKBAQhAgcSE2xmL2EyYS92MS9hMmEucHJvdG8Yw4MTINaDEwojCgQEIQIHEhNsZi9hMmEvdjEvYTJhLnByb3RvGM+FEyDihRMKIwoEBCECBxITbGYvYTJhL3YxL2EyYS5wcm90bxjEhxMg2YcTCiMKBAQhAgcSE2xmL2EyYS92MS9hMmEucHJvdG8YkIkTIKOJEwojCgQEIgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIavEyCSrxMKIwoEBCICABITbGYvYTJhL3YxL2EyYS5wcm90bxjIsRMg1LETCiMKBAQiAgASE2xmL2EyYS92MS9hMmEucHJvdG8Yz7MTINezEwojCgQEIgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIi2EyCWthMKIwoEBCICARITbGYvYTJhL3YxL2EyYS5wcm90bxi7txMgy7cTCiMKBAQiAgESE2xmL2EyYS92MS9hMmEucHJvdG8YurkTIMq5EwojCgQEIgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGIm7EyCUuxMKIwoEBCICAhITbGYvYTJhL3YxL2EyYS5wcm90bxiCvRMgjb0TCiMKBAQiAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Yyr4TINa+EwojCgQEIgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGMTAEyDQwBMKIwoEBCMCABITbGYvYTJhL3YxL2EyYS5wcm90bxj74hMghOMTCiMKBAQjAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y8+QTIPzkEwojCgQEIwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGLXmEyC65hMKIwoEBCMCARITbGYvYTJhL3YxL2EyYS5wcm90bxip6BMgrugTCiMKBAQjAgISE2xmL2EyYS92MS9hMmEucHJvdG8YlOoTIJ/qEwojCgQEIwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGOPsEyDu7BMKIwoEBCMCAhITbGYvYTJhL3YxL2EyYS5wcm90bxjh7hMg7u4TCiMKBAQjAgISE2xmL2EyYS92MS9hMmEucHJvdG8YmPATIKPwEwojCgQEJAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGLWTFCC+kxQKIwoEBCQCABITbGYvYTJhL3YxL2EyYS5wcm90bxjTlRQg3JUUCiMKBAQkAgESE2xmL2EyYS92MS9hMmEucHJvdG8YrZcUILaXFAojCgQEJAIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGMuZFCDUmRQKIwoEBCQCAhITbGYvYTJhL3YxL2EyYS5wcm90bxigmxQgpZsUCiMKBAQkAgISE2xmL2EyYS92MS9hMmEucHJvdG8Yup0UIL+dFAojCgQEJQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGJHBFCCawRQKIwoEBCUCABITbGYvYTJhL3YxL2EyYS5wcm90bxi1wxQgvsMUCiMKBAQlAgESE2xmL2EyYS92MS9hMmEucHJvdG8YksUUIJvFFAojCgQEJQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGLbHFCC/xxQKIwoEBCUCAhITbGYvYTJhL3YxL2EyYS5wcm90bxiOyRQgk8kUCiMKBAQlAgISE2xmL2EyYS92MS9hMmEucHJvdG8YrssUILPLFAojCgQEJgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNvqFCDk6hQKIwoEBCYCABITbGYvYTJhL3YxL2EyYS5wcm90bxjd7BQg5uwUCiMKBAQmAgESE2xmL2EyYS92MS9hMmEucHJvdG8YpO4UIKnuFAojCgQEJgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKLwFCCn8BQKIwoEBCcCABITbGYvYTJhL3YxL2EyYS5wcm90bxiLlhUglJYVCiMKBAQnAgASE2xmL2EyYS92MS9hMmEucHJvdG8YrZgVILaYFQojCgQEJwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGImaFSCSmhUKIwoEBCcCARITbGYvYTJhL3YxL2EyYS5wcm90bxirnBUgtJwVCiMKBAQnAgISE2xmL2EyYS92MS9hMmEucHJvdG8YiJ4VIJOeFQojCgQEJwICEhNsZi9hMmEvdjEvYTJhLnByb3RvGKugFSC2oBUKIwoEBCcCAxITbGYvYTJhL3YxL2EyYS5wcm90bxiJohUglaIVCiMKBAQnAgMSE2xmL2EyYS92MS9hMmEucHJvdG8YrqQVILqkFQojCgQEKAIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGKTCFSCtwhUKIwoEBCgCABITbGYvYTJhL3YxL2EyYS5wcm90bxiwxBUgucQVCiMKBAQpAgASE2xmL2EyYS92MS9hMmEucHJvdG8YnMkVIKDJFQojCgQEKQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGKfJFSCuyRUKIwoEBCkCABITbGYvYTJhL3YxL2EyYS5wcm90bxi27BUgvewVCiMKBAQpAgASE2xmL2EyYS92MS9hMmEucHJvdG8Y6e4VIPDuFQojCgQEKQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGKHxFSCq8RUKIwoEBCkCABITbGYvYTJhL3YxL2EyYS5wcm90bxjS8hUg2fIVCiMKBAQpAgESE2xmL2EyYS92MS9hMmEucHJvdG8YnPQVIKb0FQojCgQEKQIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGNv2FSDl9hUKIwoEBCkCARITbGYvYTJhL3YxL2EyYS5wcm90bxiW+RUgovkVCiMKBAQpAgESE2xmL2EyYS92MS9hMmEucHJvdG8YzfoVINf6FQojCgQEKgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGKT/FSCo/xUKIwoEBCoCARITbGYvYTJhL3YxL2EyYS5wcm90bxiv/xUgtv8VCiMKBAQqAgISE2xmL2EyYS92MS9hMmEucHJvdG8Yvf8VIMr/FQojCgQEKgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGNH/FSDg/xUKIwoEBCoCABITbGYvYTJhL3YxL2EyYS5wcm90bxiIqhYgj6oWCiMKBAQqAgASE2xmL2EyYS92MS9hMmEucHJvdG8YsawWILisFgojCgQEKgIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGNquFiDjrhYKIwoEBCoCABITbGYvYTJhL3YxL2EyYS5wcm90bxiGsBYgjbAWCiMKBAQqAgESE2xmL2EyYS92MS9hMmEucHJvdG8Yy7EWINWxFgojCgQEKgIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGIC0FiCKtBYKIwoEBCoCARITbGYvYTJhL3YxL2EyYS5wcm90bxisthYguLYWCiMKBAQqAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y3rcWIOi3FgojCgQEKgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGMi5FiDXuRYKIwoEBCoCAhITbGYvYTJhL3YxL2EyYS5wcm90bxisvBYgu7wWCiMKBAQqAgISE2xmL2EyYS92MS9hMmEucHJvdG8Y3b4WIO6+FgojCgQEKgICEhNsZi9hMmEvdjEvYTJhLnByb3RvGJnAFiCowBYKIwoEBCoCAxITbGYvYTJhL3YxL2EyYS5wcm90bxiOwhYgn8IWCiMKBAQqAgMSE2xmL2EyYS92MS9hMmEucHJvdG8Y+sQWIIvFFgojCgQEKgIDEhNsZi9hMmEvdjEvYTJhLnByb3RvGK3HFiDAxxYKIwoEBCoCAxITbGYvYTJhL3YxL2EyYS5wcm90bxjtyBYg/sgWCiMKBAQrAgASE2xmL2EyYS92MS9hMmEucHJvdG8YyO4WINbuFgojCgQEKwIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGPrxFiCI8hYKIwoEBCsCABITbGYvYTJhL3YxL2EyYS5wcm90bxjF9BYgz/QWCiMKBAQrAgASE2xmL2EyYS92MS9hMmEucHJvdG8YwvcWINL3FgojCgQEKwIBEhNsZi9hMmEvdjEvYTJhLnByb3RvGI/5FiCf+RYKIwoEBCsCARITbGYvYTJhL3YxL2EyYS5wcm90bxi6+xYgyvsWCiEKAgUAEhNsZi9hMmEvdjEvYTJhLnByb3RvGMr8FiDT/BYKIwoEBQACABITbGYvYTJhL3YxL2EyYS5wcm90bxja/BYg8PwWCiMKBAUAAgESE2xmL2EyYS92MS9hMmEucHJvdG8Y9/wWIIv9FgojCgQFAAICEhNsZi9hMmEvdjEvYTJhLnByb3RvGJL9FiCk/RYKIwoEBQACAxITbGYvYTJhL3YxL2EyYS5wcm90bxir/RYgv/0WCiMKBAUAAgQSE2xmL2EyYS92MS9hMmEucHJvdG8Yxv0WINf9FgojCgQFAAIFEhNsZi9hMmEvdjEvYTJhLnByb3RvGN79FiDx/RYKIwoEBQACBhITbGYvYTJhL3YxL2EyYS5wcm90bxj4/RYgkf4WCiMKBAUAAgcSE2xmL2EyYS92MS9hMmEucHJvdG8YmP4WIKv+FgojCgQFAAIIEhNsZi9hMmEvdjEvYTJhLnByb3RvGLL+FiDK/hYKIQoCBQESE2xmL2EyYS92MS9hMmEucHJvdG8Y/P4WIID/FgojCgQFAQIAEhNsZi9hMmEvdjEvYTJhLnByb3RvGIf/FiCX/xYKIwoEBQECARITbGYvYTJhL3YxL2EyYS5wcm90bxie/xYgp/8WCiMKBAUBAgISE2xmL2EyYS92MS9hMmEucHJvdG8Yrv8WILj/Fg==
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alis-build/a2a",
3
- "version": "1.0.494",
3
+ "version": "1.0.501",
4
4
  "description": "Protobufs generated by Alis Build",
5
5
  "dependencies": {
6
6
  "@alis-build/google-common-protos": "^1.7.0",
@@ -0,0 +1,303 @@
1
+ import { A2AClientConfig, JsonRpcRequest, JsonRpcResponse } from "./types";
2
+ import {
3
+ AgentCard,
4
+ CancelTaskRequest,
5
+ DeleteTaskPushNotificationConfigRequest,
6
+ GetExtendedAgentCardRequest,
7
+ GetTaskPushNotificationConfigRequest,
8
+ GetTaskRequest,
9
+ ListTaskPushNotificationConfigsRequest,
10
+ ListTaskPushNotificationConfigsResponse,
11
+ ListTasksRequest,
12
+ ListTasksResponse,
13
+ SendMessageRequest,
14
+ StreamResponse,
15
+ SubscribeToTaskRequest,
16
+ Task,
17
+ TaskPushNotificationConfig,
18
+ } from "../../lf/a2a/v1/a2a_pb";
19
+ import {
20
+ createProtocolError,
21
+ JsonRpcTransportError,
22
+ } from "./errors";
23
+ import { readSseStream } from "./sse";
24
+
25
+ /**
26
+ * JSON-RPC method identifiers.
27
+ * Must match the server-side method names exactly.
28
+ */
29
+ const Methods = {
30
+ sendMessage: "SendMessage",
31
+ sendStreamingMessage: "SendStreamingMessage",
32
+ getTask: "GetTask",
33
+ listTasks: "ListTasks",
34
+ cancelTask: "CancelTask",
35
+ subscribeToTask: "SubscribeToTask",
36
+ getTaskPushNotificationConfig: "GetTaskPushNotificationConfig",
37
+ createTaskPushNotificationConfig: "CreateTaskPushNotificationConfig",
38
+ listTaskPushNotificationConfigs: "ListTaskPushNotificationConfigs",
39
+ deleteTaskPushNotificationConfig: "DeleteTaskPushNotificationConfig",
40
+ getExtendedAgentCard: "GetExtendedAgentCard",
41
+ } as const;
42
+
43
+ const JSONRPC_VERSION = "2.0";
44
+
45
+ /**
46
+ * Client for the A2A (Agent-to-Agent) API over JSON-RPC 2.0.
47
+ *
48
+ * ## Architecture
49
+ *
50
+ * The client uses two transport modes:
51
+ *
52
+ * 1. **Unary** (`request`): POST with JSON body, await single JSON response.
53
+ * Used for: `sendMessage`, `getTask`, `listTasks`, `cancelTask`, etc.
54
+ *
55
+ * 2. **Streaming** (`stream`): POST with JSON body, response is Server-Sent
56
+ * Events (SSE). Each SSE data frame is a JSON-RPC response. Used for:
57
+ * `sendStreamingMessage`, `subscribeToTask`.
58
+ *
59
+ * ## Error handling
60
+ *
61
+ * - **JsonRpcTransportError**: Network failures, non-2xx HTTP, stream read errors.
62
+ * - **JsonRpcProtocolError** (and subclasses): Server returned a JSON-RPC
63
+ * error object (e.g. TaskNotFoundError, UnauthenticatedError).
64
+ */
65
+ export class A2AClient {
66
+ private readonly config: A2AClientConfig;
67
+ /** Monotonically increasing request ID counter. */
68
+ private requestId = 0;
69
+
70
+ constructor(config: A2AClientConfig) {
71
+ this.config = config;
72
+ }
73
+
74
+ /**
75
+ * Sends a message and waits for a single complete response.
76
+ * Use sendStreamingMessage() if the agent streams partial updates.
77
+ */
78
+ async sendMessage(
79
+ params: SendMessageRequest.AsObject,
80
+ ): Promise<StreamResponse.AsObject> {
81
+ return this.request<StreamResponse.AsObject>(Methods.sendMessage, params);
82
+ }
83
+
84
+ /**
85
+ * Retrieves a task by ID.
86
+ */
87
+ async getTask(params: GetTaskRequest.AsObject): Promise<Task.AsObject> {
88
+ return this.request<Task.AsObject>(Methods.getTask, params);
89
+ }
90
+
91
+ /**
92
+ * Cancels a task by ID.
93
+ */
94
+ async cancelTask(params: CancelTaskRequest.AsObject): Promise<Task.AsObject> {
95
+ return this.request<Task.AsObject>(Methods.cancelTask, params);
96
+ }
97
+
98
+ /** Lists tasks, with optional filtering and pagination. */
99
+ async listTasks(
100
+ params: Partial<ListTasksRequest.AsObject> = {},
101
+ ): Promise<ListTasksResponse.AsObject> {
102
+ return this.request<ListTasksResponse.AsObject>(Methods.listTasks, params);
103
+ }
104
+
105
+ /** Retrieves a push notification config by task ID and config ID. */
106
+ async getTaskPushNotificationConfig(
107
+ params: GetTaskPushNotificationConfigRequest.AsObject,
108
+ ): Promise<TaskPushNotificationConfig.AsObject> {
109
+ return this.request<TaskPushNotificationConfig.AsObject>(
110
+ Methods.getTaskPushNotificationConfig,
111
+ params,
112
+ );
113
+ }
114
+
115
+ /**
116
+ * Creates a push notification config for a task.
117
+ * The config itself is the request payload.
118
+ */
119
+ async createTaskPushNotificationConfig(
120
+ params: TaskPushNotificationConfig.AsObject,
121
+ ): Promise<TaskPushNotificationConfig.AsObject> {
122
+ return this.request<TaskPushNotificationConfig.AsObject>(
123
+ Methods.createTaskPushNotificationConfig,
124
+ params,
125
+ );
126
+ }
127
+
128
+ /** Lists push notification configs for a task. */
129
+ async listTaskPushNotificationConfigs(
130
+ params: ListTaskPushNotificationConfigsRequest.AsObject,
131
+ ): Promise<ListTaskPushNotificationConfigsResponse.AsObject> {
132
+ return this.request<ListTaskPushNotificationConfigsResponse.AsObject>(
133
+ Methods.listTaskPushNotificationConfigs,
134
+ params,
135
+ );
136
+ }
137
+
138
+ /** Deletes a push notification config. Returns void — server sends an empty result. */
139
+ async deleteTaskPushNotificationConfig(
140
+ params: DeleteTaskPushNotificationConfigRequest.AsObject,
141
+ ): Promise<void> {
142
+ await this.request<void>(Methods.deleteTaskPushNotificationConfig, params);
143
+ }
144
+
145
+ /** Retrieves the extended agent card. */
146
+ async getExtendedAgentCard(
147
+ params: Partial<GetExtendedAgentCardRequest.AsObject> = {},
148
+ ): Promise<AgentCard.AsObject> {
149
+ return this.request<AgentCard.AsObject>(
150
+ Methods.getExtendedAgentCard,
151
+ params,
152
+ );
153
+ }
154
+
155
+ /**
156
+ * Sends a message and streams back status/artifact update events.
157
+ *
158
+ * The caller controls the stream lifetime via an AbortSignal:
159
+ * ```ts
160
+ * const controller = new AbortController()
161
+ * for await (const event of client.sendStreamingMessage(params, controller.signal)) {
162
+ * if (done) controller.abort() // exits the loop cleanly, no error thrown
163
+ * }
164
+ * ```
165
+ *
166
+ * @throws {JsonRpcTransportError} On fetch failure or stream read error.
167
+ * @throws {JsonRpcProtocolError} On a JSON-RPC error frame (terminal).
168
+ */
169
+ async *sendStreamingMessage(
170
+ params: SendMessageRequest.AsObject,
171
+ signal?: AbortSignal,
172
+ ): AsyncGenerator<StreamResponse.AsObject> {
173
+ yield* this.stream<StreamResponse.AsObject>(
174
+ Methods.sendStreamingMessage,
175
+ params,
176
+ signal,
177
+ );
178
+ }
179
+
180
+ /**
181
+ * Resubscribes to an existing task's event stream.
182
+ *
183
+ * @throws {JsonRpcTransportError} On fetch failure or stream read error.
184
+ * @throws {JsonRpcProtocolError} On a JSON-RPC error frame (terminal).
185
+ */
186
+ async *subscribeToTask(
187
+ params: SubscribeToTaskRequest.AsObject,
188
+ signal?: AbortSignal,
189
+ ): AsyncGenerator<StreamResponse.AsObject> {
190
+ yield* this.stream<StreamResponse.AsObject>(
191
+ Methods.subscribeToTask,
192
+ params,
193
+ signal,
194
+ );
195
+ }
196
+
197
+ /**
198
+ * Sends a JSON-RPC 2.0 POST request and returns the typed result.
199
+ *
200
+ * Flow: post() → parse JSON → check for error → return result
201
+ *
202
+ * @throws {JsonRpcTransportError} On fetch failure or non-2xx HTTP status.
203
+ * @throws {JsonRpcProtocolError} On a JSON-RPC error object in the response.
204
+ */
205
+ private async request<R>(method: string, params?: unknown): Promise<R> {
206
+ const response = await this.post(method, params);
207
+
208
+ let data: JsonRpcResponse<R>;
209
+ try {
210
+ data = await response.json();
211
+ } catch {
212
+ throw new JsonRpcTransportError(
213
+ `Invalid JSON in response from ${method}`,
214
+ );
215
+ }
216
+
217
+ if (data.error) {
218
+ throw createProtocolError(data.error);
219
+ }
220
+
221
+ return data.result as R;
222
+ }
223
+
224
+ /**
225
+ * Sends a JSON-RPC 2.0 POST request and streams back typed responses via SSE.
226
+ *
227
+ * Flow: post() → readSseStream() parses SSE frames → each frame yields result
228
+ *
229
+ * Delegates frame parsing, buffering, and error handling to readSseStream().
230
+ */
231
+ private async *stream<T>(
232
+ method: string,
233
+ params?: unknown,
234
+ signal?: AbortSignal,
235
+ ): AsyncGenerator<T> {
236
+ const response = await this.post(method, params, signal);
237
+
238
+ for await (const frame of readSseStream<T>(response)) {
239
+ yield frame.result as T;
240
+ }
241
+ }
242
+
243
+ /**
244
+ * Performs the underlying POST request for both unary and streaming calls.
245
+ *
246
+ * Builds a JSON-RPC 2.0 request envelope, adds auth header if configured,
247
+ * and validates the HTTP response. Does not parse the response body.
248
+ *
249
+ * @throws {JsonRpcTransportError} On fetch failure or non-2xx HTTP status.
250
+ */
251
+ private async post(
252
+ method: string,
253
+ params?: unknown,
254
+ signal?: AbortSignal,
255
+ ): Promise<Response> {
256
+ const payload: JsonRpcRequest = {
257
+ jsonrpc: JSONRPC_VERSION,
258
+ method,
259
+ params,
260
+ id: ++this.requestId,
261
+ };
262
+
263
+ let response: Response;
264
+ try {
265
+ response = await fetch(this.config.baseUrl, {
266
+ method: "POST",
267
+ headers: await this.buildHeaders(),
268
+ body: JSON.stringify(payload),
269
+ signal,
270
+ });
271
+ } catch (cause) {
272
+ // AbortError is re-thrown here since it occurs before we even have a
273
+ // Response — the generator in stream() won't get a chance to swallow it.
274
+ // Let it propagate naturally so the caller sees a clean loop exit.
275
+ throw new JsonRpcTransportError(
276
+ `Network error calling ${method}: ${cause instanceof Error ? cause.message : String(cause)}`,
277
+ );
278
+ }
279
+
280
+ if (!response.ok) {
281
+ throw new JsonRpcTransportError(
282
+ `HTTP ${response.status} ${response.statusText} calling ${method}`,
283
+ response.status,
284
+ );
285
+ }
286
+
287
+ return response;
288
+ }
289
+
290
+ /** Builds request headers including Content-Type and optional Authorization. */
291
+ private async buildHeaders(): Promise<HeadersInit> {
292
+ const headers: Record<string, string> = {
293
+ "Content-Type": "application/json",
294
+ };
295
+
296
+ if (this.config.getToken) {
297
+ const token = await this.config.getToken();
298
+ headers["Authorization"] = `Bearer ${token}`;
299
+ }
300
+
301
+ return headers;
302
+ }
303
+ }
@@ -0,0 +1,101 @@
1
+ import type { JsonRpcError } from "./types";
2
+
3
+ /**
4
+ * Base error for JSON-RPC protocol-level failures.
5
+ *
6
+ * Thrown when the server returns a JSON-RPC error object (`error` field)
7
+ * instead of a successful result. Use `instanceof` checks or the
8
+ * `code` property to distinguish specific error types.
9
+ */
10
+ export class JsonRpcProtocolError extends Error {
11
+ /** The JSON-RPC error code (e.g. -32001, -31401). */
12
+ public readonly code: number;
13
+ /** Optional additional data from the server. */
14
+ public readonly data: unknown;
15
+
16
+ constructor(error: JsonRpcError) {
17
+ super(error.message);
18
+ this.name = "JsonRpcProtocolError";
19
+ this.code = error.code;
20
+ this.data = error.data;
21
+ }
22
+ }
23
+
24
+ /**
25
+ * Error for network or HTTP transport failures.
26
+ *
27
+ * Thrown when:
28
+ * - The fetch fails (network unreachable, DNS, etc.)
29
+ * - The HTTP response is not 2xx
30
+ * - The response body cannot be read (e.g. stream error)
31
+ */
32
+ export class JsonRpcTransportError extends Error {
33
+ /** HTTP status code, if the failure was due to a non-2xx response. */
34
+ public readonly status?: number;
35
+
36
+ constructor(message: string, status?: number) {
37
+ super(message);
38
+ this.name = "JsonRpcTransportError";
39
+ this.status = status;
40
+ }
41
+ }
42
+
43
+ /** Task not found (code -32001). */
44
+ export class TaskNotFoundError extends JsonRpcProtocolError {}
45
+
46
+ /** Task is not in a cancelable state (code -32002). */
47
+ export class TaskNotCancelableError extends JsonRpcProtocolError {}
48
+
49
+ /** Server does not support push notifications (code -32003). */
50
+ export class PushNotificationNotSupportedError extends JsonRpcProtocolError {}
51
+
52
+ /** Operation is not supported (code -32004). */
53
+ export class UnsupportedOperationError extends JsonRpcProtocolError {}
54
+
55
+ /** Content type not supported (code -32005). */
56
+ export class ContentTypeNotSupportedError extends JsonRpcProtocolError {}
57
+
58
+ /** Invalid agent response (code -32006). */
59
+ export class InvalidAgentResponseError extends JsonRpcProtocolError {}
60
+
61
+ /** Extended card not configured (code -32007). */
62
+ export class ExtendedCardNotConfiguredError extends JsonRpcProtocolError {}
63
+
64
+ /** Unauthenticated (code -31401). */
65
+ export class UnauthenticatedError extends JsonRpcProtocolError {}
66
+
67
+ /** Unauthorized (code -31403). */
68
+ export class UnauthorizedError extends JsonRpcProtocolError {}
69
+
70
+ /**
71
+ * Maps A2A-specific error codes to typed error classes.
72
+ * Unknown codes fall back to JsonRpcProtocolError.
73
+ */
74
+ const errorClassMap: Record<
75
+ number,
76
+ new (e: JsonRpcError) => JsonRpcProtocolError
77
+ > = {
78
+ [-32001]: TaskNotFoundError,
79
+ [-32002]: TaskNotCancelableError,
80
+ [-32003]: PushNotificationNotSupportedError,
81
+ [-32004]: UnsupportedOperationError,
82
+ [-32005]: ContentTypeNotSupportedError,
83
+ [-32006]: InvalidAgentResponseError,
84
+ [-32007]: ExtendedCardNotConfiguredError,
85
+ [-31401]: UnauthenticatedError,
86
+ [-31403]: UnauthorizedError,
87
+ };
88
+
89
+ /**
90
+ * Creates a protocol error instance from a JSON-RPC error object.
91
+ *
92
+ * Returns a typed subclass (e.g. TaskNotFoundError) when the error code
93
+ * is known; otherwise returns a generic JsonRpcProtocolError.
94
+ *
95
+ * @param error - The JSON-RPC error object from the server
96
+ * @returns A JsonRpcProtocolError or one of its subclasses
97
+ */
98
+ export function createProtocolError(error: JsonRpcError): JsonRpcProtocolError {
99
+ const cls = errorClassMap[error.code];
100
+ return cls ? new cls(error) : new JsonRpcProtocolError(error);
101
+ }
@@ -0,0 +1,30 @@
1
+ /**
2
+ * A2A JSON-RPC Transport
3
+ *
4
+ * Provides a TypeScript client for the Agent-to-Agent (A2A) API over JSON-RPC 2.0.
5
+ * Supports both unary requests (single request/response) and streaming (SSE).
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+
10
+ export { A2AClient } from "./client";
11
+ export {
12
+ createProtocolError,
13
+ JsonRpcProtocolError,
14
+ JsonRpcTransportError,
15
+ TaskNotFoundError,
16
+ TaskNotCancelableError,
17
+ PushNotificationNotSupportedError,
18
+ UnsupportedOperationError,
19
+ ContentTypeNotSupportedError,
20
+ InvalidAgentResponseError,
21
+ ExtendedCardNotConfiguredError,
22
+ UnauthenticatedError,
23
+ UnauthorizedError,
24
+ } from "./errors";
25
+ export type {
26
+ A2AClientConfig,
27
+ JsonRpcError,
28
+ JsonRpcRequest,
29
+ JsonRpcResponse,
30
+ } from "./types";
@@ -0,0 +1,174 @@
1
+ import type { JsonRpcResponse } from "./types";
2
+ import { createProtocolError, JsonRpcTransportError } from "./errors";
3
+
4
+ /**
5
+ * Parsed SSE frame structure.
6
+ *
7
+ * An SSE frame is a block of lines terminated by a blank line (\n\n).
8
+ * Supported fields:
9
+ * - data: JSON payload (multiple data lines are concatenated)
10
+ * - event: optional event type
11
+ * - id: optional event ID
12
+ * - : comment (ignored)
13
+ */
14
+ interface SseFrame {
15
+ /** Accumulated data payload. */
16
+ data: string;
17
+ /** Optional event type. */
18
+ event?: string;
19
+ /** Optional event ID. */
20
+ id?: string;
21
+ }
22
+
23
+ /**
24
+ * Parses a raw SSE fetch Response into an async generator of typed JSON-RPC
25
+ * response objects.
26
+ *
27
+ * ## Flow
28
+ *
29
+ * 1. Read response body through TextDecoderStream
30
+ * 2. Accumulate chunks, split on frame boundaries (\n\n or \r\n\r\n)
31
+ * 3. For each complete frame: parse SSE fields → parse JSON → yield or throw
32
+ * 4. Swallow AbortError so callers can cancel cleanly without a catch block
33
+ *
34
+ * ## Behavior
35
+ *
36
+ * - Handles partial chunks by accumulating lines across chunk boundaries
37
+ * - Ignores comment lines (:) and empty frames
38
+ * - Malformed JSON frames are skipped (e.g. keep-alive payloads)
39
+ * - Error frames are terminal: throws typed JsonRpcProtocolError subclass
40
+ *
41
+ * @param response - A successful fetch Response with a readable body
42
+ * @throws {JsonRpcTransportError} On null body or stream read failures
43
+ * @throws {JsonRpcProtocolError} On JSON-RPC error frames (terminal)
44
+ */
45
+ export async function* readSseStream<T>(
46
+ response: Response,
47
+ ): AsyncGenerator<JsonRpcResponse<T>> {
48
+ if (!response.body) {
49
+ throw new JsonRpcTransportError(
50
+ "Response body is null — cannot read SSE stream",
51
+ );
52
+ }
53
+
54
+ const reader = response.body.pipeThrough(new TextDecoderStream()).getReader();
55
+
56
+ // Accumulates characters between \n\n frame boundaries.
57
+ let buffer = "";
58
+
59
+ try {
60
+ while (true) {
61
+ let done: boolean;
62
+ let value: string | undefined;
63
+
64
+ try {
65
+ ({ done, value } = await reader.read());
66
+ } catch (cause) {
67
+ // Swallow AbortError — caller intentionally cancelled the stream.
68
+ if (isAbortError(cause)) return;
69
+ throw new JsonRpcTransportError(
70
+ `SSE stream read error: ${cause instanceof Error ? cause.message : String(cause)}`,
71
+ );
72
+ }
73
+
74
+ if (done) break;
75
+
76
+ buffer += value;
77
+
78
+ // Frames are delimited by a blank line (\n\n or \r\n\r\n).
79
+ // We split on double-newline and process all complete frames,
80
+ // keeping any trailing incomplete frame in the buffer.
81
+ const frames = buffer.split(/\n\n|\r\n\r\n/);
82
+ // Last element is the incomplete tail (may be empty string)
83
+ buffer = frames.pop() ?? "";
84
+
85
+ for (const rawFrame of frames) {
86
+ const frame = parseFrame(rawFrame);
87
+ if (!frame) continue; // empty or comment-only frame
88
+
89
+ yield* processFrame<T>(frame);
90
+ }
91
+ }
92
+
93
+ // Process any remaining buffered content after stream closes.
94
+ if (buffer.trim()) {
95
+ const frame = parseFrame(buffer);
96
+ if (frame) yield* processFrame<T>(frame);
97
+ }
98
+ } finally {
99
+ reader.releaseLock();
100
+ }
101
+ }
102
+
103
+ /**
104
+ * Parses raw SSE frame text into a structured SseFrame.
105
+ *
106
+ * Per SSE spec: field names are case-sensitive; value has leading space stripped.
107
+ * Multiple `data:` lines are concatenated with newlines.
108
+ *
109
+ * @param raw - Raw frame text (lines before the blank delimiter)
110
+ * @returns Parsed frame or null for empty/comment-only frames
111
+ */
112
+ function parseFrame(raw: string): SseFrame | null {
113
+ const frame: SseFrame = { data: "" };
114
+ let hasData = false;
115
+
116
+ for (const line of raw.split(/\n|\r\n/)) {
117
+ if (!line || line.startsWith(":")) continue; // empty line or comment
118
+
119
+ const colonIdx = line.indexOf(":");
120
+ if (colonIdx === -1) continue; // malformed line, skip
121
+
122
+ const field = line.slice(0, colonIdx).trim();
123
+ // Per SSE spec, strip exactly one leading space after the colon if present.
124
+ const val = line.slice(colonIdx + 1).replace(/^ /, "");
125
+
126
+ switch (field) {
127
+ case "data":
128
+ // Multiple data lines are concatenated with newlines (SSE spec §9.2.6).
129
+ frame.data = frame.data ? `${frame.data}\n${val}` : val;
130
+ hasData = true;
131
+ break;
132
+ case "event":
133
+ frame.event = val;
134
+ break;
135
+ case "id":
136
+ frame.id = val;
137
+ break;
138
+ }
139
+ }
140
+
141
+ return hasData ? frame : null;
142
+ }
143
+
144
+ /**
145
+ * Parses an SSE frame's data as a JSON-RPC response and yields it.
146
+ *
147
+ * - Successful responses are yielded to the caller
148
+ * - Error responses throw a typed protocol error (via createProtocolError)
149
+ * - Malformed JSON is skipped (no yield, no throw)
150
+ *
151
+ * @throws {JsonRpcProtocolError} When frame contains a JSON-RPC error object
152
+ */
153
+ function* processFrame<T>(frame: SseFrame): Generator<JsonRpcResponse<T>> {
154
+ let parsed: JsonRpcResponse<T>;
155
+
156
+ try {
157
+ parsed = JSON.parse(frame.data);
158
+ } catch {
159
+ // Malformed JSON — skip non-JSON frames (e.g. keep-alive data payloads).
160
+ return;
161
+ }
162
+
163
+ if (parsed.error) {
164
+ // An error frame is terminal — throw so the caller's for-await catches it.
165
+ throw createProtocolError(parsed.error);
166
+ }
167
+
168
+ yield parsed;
169
+ }
170
+
171
+ /** Detects AbortError from DOMException (used when fetch/stream is aborted). */
172
+ function isAbortError(err: unknown): boolean {
173
+ return err instanceof DOMException && err.name === "AbortError";
174
+ }
@@ -0,0 +1,89 @@
1
+ /**
2
+ * JSON-RPC 2.0 type definitions and client configuration.
3
+ *
4
+ * This module defines the core types used by the A2A JSON-RPC client for:
5
+ * - Request/response serialization over HTTP
6
+ * - Error handling (protocol vs transport errors)
7
+ * - Client configuration (base URL, auth)
8
+ */
9
+
10
+ /**
11
+ * Standard JSON-RPC 2.0 error object (spec-compliant).
12
+ *
13
+ * Server errors include both standard JSON-RPC codes and A2A-specific
14
+ * application codes (e.g. -32001 for TaskNotFound).
15
+ */
16
+ export interface JsonRpcError {
17
+ /**
18
+ * Integer error code.
19
+ *
20
+ * Standard JSON-RPC 2.0 codes:
21
+ * - -32700: Parse error
22
+ * - -32600: Invalid request
23
+ * - -32601: Method not found
24
+ * - -32602: Invalid params
25
+ * - -32603: Internal error
26
+ *
27
+ * A2A-specific application codes:
28
+ * - -32001: Task not found
29
+ * - -32002: Task not cancelable
30
+ * - -32003: Push notification not supported
31
+ * - -32004: Unsupported operation
32
+ * - -32005: Content type not supported
33
+ * - -32006: Invalid agent response
34
+ * - -32007: Extended card not configured
35
+ * - -31401: Unauthenticated
36
+ * - -31403: Unauthorized
37
+ */
38
+ code: number;
39
+ /** Human-readable error message. */
40
+ message: string;
41
+ /** Optional additional error data. */
42
+ data?: unknown;
43
+ }
44
+
45
+ /**
46
+ * Outbound JSON-RPC 2.0 request envelope.
47
+ *
48
+ * Sent as the body of each POST request to the A2A server.
49
+ */
50
+ export interface JsonRpcRequest<P = unknown> {
51
+ /** Must be "2.0" per JSON-RPC specification. */
52
+ jsonrpc: "2.0";
53
+ /** The RPC method name (e.g. "SendMessage", "GetTask"). */
54
+ method: string;
55
+ /** Optional parameters object. */
56
+ params?: P;
57
+ /** Request ID for correlating responses. */
58
+ id: string | number;
59
+ }
60
+
61
+ /**
62
+ * Inbound JSON-RPC 2.0 response envelope.
63
+ *
64
+ * Exactly one of `result` or `error` is set.
65
+ * Used for both unary responses (single JSON body) and streaming responses
66
+ * (each SSE data frame is a JsonRpcResponse).
67
+ */
68
+ export type JsonRpcResponse<R = unknown> =
69
+ | { jsonrpc: "2.0"; id: string | number; result: R; error?: never }
70
+ | {
71
+ jsonrpc: "2.0";
72
+ id: string | number;
73
+ error: JsonRpcError;
74
+ result?: never;
75
+ };
76
+
77
+ /**
78
+ * Configuration for the A2A JSON-RPC client.
79
+ */
80
+ export interface A2AClientConfig {
81
+ /** Base URL of the A2A agent server, e.g. `https://a2a-agent.example.com/jsonrpc`. */
82
+ baseUrl: string;
83
+ /**
84
+ * Optional bearer token provider.
85
+ * Only needed when not going through an auth gateway.
86
+ * May be async to support token refresh.
87
+ */
88
+ getToken?: () => string | Promise<string>;
89
+ }