-
Notifications
You must be signed in to change notification settings - Fork 171
/
envoy_config.json
1733 lines (1733 loc) · 118 KB
/
envoy_config.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
{
"admin": {},
"layeredRuntime": {
"layers": [
{
"name": "static-runtime",
"staticLayer": {
"envoy.reloadable_features.prohibit_route_refresh_after_response_headers_sent": false,
"http.max_requests_per_io_cycle": 1,
"re2.max_program_size.error_level": 1000
}
}
]
},
"node": {
"cluster": "ESPv2_cluster",
"id": "ESPv2"
},
"staticResources": {
"clusters": [
{
"connectTimeout": "20s",
"dnsLookupFamily": "V4_PREFERRED",
"loadAssignment": {
"clusterName": "127.0.0.1",
"endpoints": [
{
"lbEndpoints": [
{
"endpoint": {
"address": {
"socketAddress": {
"address": "127.0.0.1",
"portValue": 8082
}
}
}
}
]
}
]
},
"name": "backend-cluster-examples-grpc-dynamic-routing-wd6ufmzfya-uc.a.run.app_local",
"type": "LOGICAL_DNS",
"typedExtensionProtocolOptions": {
"envoy.extensions.upstreams.http.v3.HttpProtocolOptions": {
"@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions",
"explicitHttpConfig": {
"http2ProtocolOptions": {
"connectionKeepalive": {
"interval": "30s",
"timeout": "10s"
}
}
}
}
}
},
{
"connectTimeout": "20s",
"loadAssignment": {
"clusterName": "169.254.169.254",
"endpoints": [
{
"lbEndpoints": [
{
"endpoint": {
"address": {
"socketAddress": {
"address": "169.254.169.254",
"portValue": 80
}
}
}
}
]
}
]
},
"name": "metadata-cluster",
"type": "STRICT_DNS"
},
{
"connectTimeout": "5s",
"dnsLookupFamily": "V4_ONLY",
"loadAssignment": {
"clusterName": "servicecontrol.googleapis.com",
"endpoints": [
{
"lbEndpoints": [
{
"endpoint": {
"address": {
"socketAddress": {
"address": "servicecontrol.googleapis.com",
"portValue": 443
}
}
}
}
]
}
]
},
"name": "service-control-cluster",
"transportSocket": {
"name": "envoy.transport_sockets.tls",
"typedConfig": {
"@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext",
"commonTlsContext": {
"validationContext": {
"trustedCa": {
"filename": "/etc/ssl/certs/ca-certificates.crt"
}
}
},
"sni": "servicecontrol.googleapis.com"
}
},
"type": "LOGICAL_DNS"
},
{
"connectTimeout": "20s",
"dnsLookupFamily": "V4_PREFERRED",
"loadAssignment": {
"clusterName": "grpc-echo-oxouww7xzq-uc.a.run.app",
"endpoints": [
{
"lbEndpoints": [
{
"endpoint": {
"address": {
"socketAddress": {
"address": "grpc-echo-oxouww7xzq-uc.a.run.app",
"portValue": 443
}
}
}
}
]
}
]
},
"name": "backend-cluster-grpc-echo-oxouww7xzq-uc.a.run.app:443",
"transportSocket": {
"name": "envoy.transport_sockets.tls",
"typedConfig": {
"@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext",
"commonTlsContext": {
"alpnProtocols": [
"h2"
],
"validationContext": {
"trustedCa": {
"filename": "/etc/ssl/certs/ca-certificates.crt"
}
}
},
"sni": "grpc-echo-oxouww7xzq-uc.a.run.app"
}
},
"type": "LOGICAL_DNS",
"typedExtensionProtocolOptions": {
"envoy.extensions.upstreams.http.v3.HttpProtocolOptions": {
"@type": "type.googleapis.com/envoy.extensions.upstreams.http.v3.HttpProtocolOptions",
"explicitHttpConfig": {
"http2ProtocolOptions": {
"connectionKeepalive": {
"interval": "30s",
"timeout": "10s"
}
}
}
}
}
},
{
"connectTimeout": "20s",
"dnsLookupFamily": "V4_ONLY",
"loadAssignment": {
"clusterName": "www.googleapis.com",
"endpoints": [
{
"lbEndpoints": [
{
"endpoint": {
"address": {
"socketAddress": {
"address": "www.googleapis.com",
"portValue": 443
}
}
}
}
]
}
]
},
"name": "jwt-provider-cluster-www.googleapis.com:443",
"transportSocket": {
"name": "envoy.transport_sockets.tls",
"typedConfig": {
"@type": "type.googleapis.com/envoy.extensions.transport_sockets.tls.v3.UpstreamTlsContext",
"commonTlsContext": {
"validationContext": {
"trustedCa": {
"filename": "/etc/ssl/certs/ca-certificates.crt"
}
}
},
"sni": "www.googleapis.com"
}
},
"type": "LOGICAL_DNS"
}
],
"listeners": [
{
"address": {
"socketAddress": {
"address": "0.0.0.0",
"portValue": 8080
}
},
"filterChains": [
{
"filters": [
{
"name": "envoy.filters.network.http_connection_manager",
"typedConfig": {
"@type": "type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager",
"commonHttpProtocolOptions": {
"headersWithUnderscoresAction": "REJECT_REQUEST"
},
"httpFilters": [
{
"name": "com.google.espv2.filters.http.header_sanitizer",
"typedConfig": {
"@type": "type.googleapis.com/espv2.api.envoy.v12.http.header_sanitizer.FilterConfig"
}
},
{
"name": "envoy.filters.http.compressor",
"typedConfig": {
"@type": "type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor",
"compressorLibrary": {
"name": "envoy.compression.gzip.compressor",
"typedConfig": {
"@type": "type.googleapis.com/envoy.extensions.compression.gzip.compressor.v3.Gzip"
}
}
}
},
{
"name": "envoy.filters.http.compressor",
"typedConfig": {
"@type": "type.googleapis.com/envoy.extensions.filters.http.compressor.v3.Compressor",
"compressorLibrary": {
"name": "envoy.compression.brotli.compressor",
"typedConfig": {
"@type": "type.googleapis.com/envoy.extensions.compression.brotli.compressor.v3.Brotli"
}
}
}
},
{
"name": "envoy.filters.http.jwt_authn",
"typedConfig": {
"@type": "type.googleapis.com/envoy.extensions.filters.http.jwt_authn.v3.JwtAuthentication",
"providers": {
"test_jwk": {
"audiences": [
"https://examples-grpc-dynamic-routing-wd6ufmzfya-uc.a.run.app"
],
"forward": true,
"forwardPayloadHeader": "X-Endpoint-API-UserInfo",
"fromHeaders": [
{
"name": "Authorization",
"valuePrefix": "Bearer "
},
{
"name": "X-Goog-Iap-Jwt-Assertion"
}
],
"fromParams": [
"access_token"
],
"issuer": "[email protected]",
"jwtCacheConfig": {
"jwtCacheSize": 1000
},
"payloadInMetadata": "jwt_payloads",
"remoteJwks": {
"asyncFetch": {},
"cacheDuration": "300s",
"httpUri": {
"cluster": "jwt-provider-cluster-www.googleapis.com:443",
"timeout": "30s",
"uri": "https://www.googleapis.com/service_accounts/v1/jwk/[email protected]"
}
}
}
},
"requirementMap": {
"test.grpc.Test.EchoStream": {
"providerName": "test_jwk"
}
}
}
},
{
"name": "com.google.espv2.filters.http.service_control",
"typedConfig": {
"@type": "type.googleapis.com/espv2.api.envoy.v12.http.service_control.FilterConfig",
"depErrorBehavior": "BLOCK_INIT_ON_ANY_ERROR",
"generatedHeaderPrefix": "X-Endpoint-",
"imdsToken": {
"cluster": "metadata-cluster",
"timeout": "30s",
"uri": "http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/token"
},
"requirements": [
{
"apiKey": {
"allowWithoutApiKey": true
},
"apiName": "test.grpc.Test",
"apiVersion": "v1",
"operationName": "test.grpc.Test.Echo",
"serviceName": "examples-grpc-dynamic-routing-wd6ufmzfya-uc.a.run.app"
},
{
"apiName": "test.grpc.Test",
"apiVersion": "v1",
"operationName": "test.grpc.Test.EchoStream",
"serviceName": "examples-grpc-dynamic-routing-wd6ufmzfya-uc.a.run.app"
},
{
"apiName": "test.grpc.Test",
"apiVersion": "v1",
"operationName": "test.grpc.Test.Cork",
"serviceName": "examples-grpc-dynamic-routing-wd6ufmzfya-uc.a.run.app"
},
{
"apiName": "test.grpc.Test",
"apiVersion": "v1",
"operationName": "test.grpc.Test.EchoReport",
"serviceName": "examples-grpc-dynamic-routing-wd6ufmzfya-uc.a.run.app"
}
],
"scCallingConfig": {
"networkFailOpen": true
},
"serviceControlUri": {
"cluster": "service-control-cluster",
"timeout": "30s",
"uri": "https://servicecontrol.googleapis.com:443/v1/services"
},
"services": [
{
"backendProtocol": "grpc",
"jwtPayloadMetadataName": "jwt_payloads",
"producerProjectId": "cloudesf-testing",
"serviceConfig": {
"logging": {
"producerDestinations": [
{
"logs": [
"endpoints_log"
],
"monitoredResource": "api"
}
]
},
"logs": [
{
"name": "endpoints_log"
}
],
"metrics": [
{
"labels": [
{
"key": "/credential_id"
},
{
"key": "/protocol"
},
{
"key": "/response_code"
},
{
"key": "/response_code_class"
},
{
"key": "/status_code"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/request_count",
"type": "serviceruntime.googleapis.com/api/consumer/request_count",
"valueType": "INT64"
},
{
"labels": [
{
"key": "/credential_id"
},
{
"key": "/error_type"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/error_count",
"type": "serviceruntime.googleapis.com/api/consumer/error_count",
"valueType": "INT64"
},
{
"labels": [
{
"key": "/credential_id"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/total_latencies",
"type": "serviceruntime.googleapis.com/api/consumer/total_latencies",
"valueType": "DISTRIBUTION"
},
{
"labels": [
{
"key": "/protocol"
},
{
"key": "/response_code"
},
{
"key": "/response_code_class"
},
{
"key": "/status_code"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/request_count",
"type": "serviceruntime.googleapis.com/api/producer/request_count",
"valueType": "INT64"
},
{
"labels": [
{
"key": "/error_type"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/error_count",
"type": "serviceruntime.googleapis.com/api/producer/error_count",
"valueType": "INT64"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/total_latencies",
"type": "serviceruntime.googleapis.com/api/producer/total_latencies",
"valueType": "DISTRIBUTION"
},
{
"labels": [
{
"key": "/credential_id"
},
{
"key": "/end_user"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user",
"type": "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user",
"valueType": "INT64"
},
{
"labels": [
{
"key": "/credential_id"
},
{
"key": "/end_user_country"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country",
"type": "serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country",
"valueType": "INT64"
},
{
"labels": [
{
"key": "/credential_id"
},
{
"key": "/referer"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer",
"type": "serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer",
"valueType": "INT64"
},
{
"labels": [
{
"key": "/protocol"
},
{
"key": "/response_code"
},
{
"key": "/consumer_id"
},
{
"key": "/status_code"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/top_request_count_by_consumer",
"type": "serviceruntime.googleapis.com/api/producer/top_request_count_by_consumer",
"valueType": "INT64"
},
{
"labels": [
{
"key": "/credential_id"
},
{
"key": "/quota_group_name"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/quota_used_count",
"type": "serviceruntime.googleapis.com/api/consumer/quota_used_count",
"valueType": "INT64"
},
{
"labels": [
{
"key": "/credential_id"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies",
"type": "serviceruntime.googleapis.com/api/consumer/request_overhead_latencies",
"valueType": "DISTRIBUTION"
},
{
"labels": [
{
"key": "/credential_id"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/backend_latencies",
"type": "serviceruntime.googleapis.com/api/consumer/backend_latencies",
"valueType": "DISTRIBUTION"
},
{
"labels": [
{
"key": "/credential_id"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/request_sizes",
"type": "serviceruntime.googleapis.com/api/consumer/request_sizes",
"valueType": "DISTRIBUTION"
},
{
"labels": [
{
"key": "/credential_id"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/response_sizes",
"type": "serviceruntime.googleapis.com/api/consumer/response_sizes",
"valueType": "DISTRIBUTION"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/request_overhead_latencies",
"type": "serviceruntime.googleapis.com/api/producer/request_overhead_latencies",
"valueType": "DISTRIBUTION"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/backend_latencies",
"type": "serviceruntime.googleapis.com/api/producer/backend_latencies",
"valueType": "DISTRIBUTION"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/request_sizes",
"type": "serviceruntime.googleapis.com/api/producer/request_sizes",
"valueType": "DISTRIBUTION"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/response_sizes",
"type": "serviceruntime.googleapis.com/api/producer/response_sizes",
"valueType": "DISTRIBUTION"
},
{
"labels": [
{
"key": "/consumer_id"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/top_request_sizes_by_consumer",
"type": "serviceruntime.googleapis.com/api/producer/top_request_sizes_by_consumer",
"valueType": "DISTRIBUTION"
},
{
"labels": [
{
"key": "/consumer_id"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/top_response_sizes_by_consumer",
"type": "serviceruntime.googleapis.com/api/producer/top_response_sizes_by_consumer",
"valueType": "DISTRIBUTION"
},
{
"labels": [
{
"key": "/credential_id"
},
{
"key": "/protocol"
},
{
"key": "/response_code"
},
{
"key": "/response_code_class"
},
{
"key": "/status_code"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/by_consumer/request_count",
"type": "serviceruntime.googleapis.com/api/producer/by_consumer/request_count",
"valueType": "INT64"
},
{
"labels": [
{
"key": "/credential_id"
},
{
"key": "/error_type"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/by_consumer/error_count",
"type": "serviceruntime.googleapis.com/api/producer/by_consumer/error_count",
"valueType": "INT64"
},
{
"labels": [
{
"key": "/credential_id"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/by_consumer/total_latencies",
"type": "serviceruntime.googleapis.com/api/producer/by_consumer/total_latencies",
"valueType": "DISTRIBUTION"
},
{
"labels": [
{
"key": "/credential_id"
},
{
"key": "/quota_group_name"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/by_consumer/quota_used_count",
"type": "serviceruntime.googleapis.com/api/producer/by_consumer/quota_used_count",
"valueType": "INT64"
},
{
"labels": [
{
"key": "/credential_id"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/by_consumer/request_overhead_latencies",
"type": "serviceruntime.googleapis.com/api/producer/by_consumer/request_overhead_latencies",
"valueType": "DISTRIBUTION"
},
{
"labels": [
{
"key": "/credential_id"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/by_consumer/backend_latencies",
"type": "serviceruntime.googleapis.com/api/producer/by_consumer/backend_latencies",
"valueType": "DISTRIBUTION"
},
{
"labels": [
{
"key": "/credential_id"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/by_consumer/request_sizes",
"type": "serviceruntime.googleapis.com/api/producer/by_consumer/request_sizes",
"valueType": "DISTRIBUTION"
},
{
"labels": [
{
"key": "/credential_id"
}
],
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/by_consumer/response_sizes",
"type": "serviceruntime.googleapis.com/api/producer/by_consumer/response_sizes",
"valueType": "DISTRIBUTION"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/streaming_request_message_counts",
"type": "serviceruntime.googleapis.com/api/producer/streaming_request_message_counts",
"valueType": "DISTRIBUTION"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/streaming_response_message_counts",
"type": "serviceruntime.googleapis.com/api/producer/streaming_response_message_counts",
"valueType": "DISTRIBUTION"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/streaming_request_message_counts",
"type": "serviceruntime.googleapis.com/api/consumer/streaming_request_message_counts",
"valueType": "DISTRIBUTION"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/streaming_response_message_counts",
"type": "serviceruntime.googleapis.com/api/consumer/streaming_response_message_counts",
"valueType": "DISTRIBUTION"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/streaming_durations",
"type": "serviceruntime.googleapis.com/api/producer/streaming_durations",
"valueType": "DISTRIBUTION"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/streaming_durations",
"type": "serviceruntime.googleapis.com/api/consumer/streaming_durations",
"valueType": "DISTRIBUTION"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/request_bytes",
"type": "serviceruntime.googleapis.com/api/producer/request_bytes",
"valueType": "INT64"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/producer/response_bytes",
"type": "serviceruntime.googleapis.com/api/producer/response_bytes",
"valueType": "INT64"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/request_bytes",
"type": "serviceruntime.googleapis.com/api/consumer/request_bytes",
"valueType": "INT64"
},
{
"metricKind": "DELTA",
"name": "serviceruntime.googleapis.com/api/consumer/response_bytes",
"type": "serviceruntime.googleapis.com/api/consumer/response_bytes",
"valueType": "INT64"
}
],
"monitoredResources": [
{
"labels": [
{
"key": "cloud.googleapis.com/location"
},
{
"key": "cloud.googleapis.com/uid"
},
{
"key": "serviceruntime.googleapis.com/api_version"
},
{
"key": "serviceruntime.googleapis.com/api_method"
},
{
"key": "serviceruntime.googleapis.com/consumer_project"
},
{
"key": "cloud.googleapis.com/project"
},
{
"key": "cloud.googleapis.com/service"
}
],
"type": "api"
}
],
"monitoring": {
"consumerDestinations": [
{
"metrics": [
"serviceruntime.googleapis.com/api/consumer/request_count",
"serviceruntime.googleapis.com/api/consumer/error_count",
"serviceruntime.googleapis.com/api/consumer/quota_used_count",
"serviceruntime.googleapis.com/api/consumer/total_latencies",
"serviceruntime.googleapis.com/api/consumer/request_overhead_latencies",
"serviceruntime.googleapis.com/api/consumer/backend_latencies",
"serviceruntime.googleapis.com/api/consumer/request_sizes",
"serviceruntime.googleapis.com/api/consumer/response_sizes",
"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user",
"serviceruntime.googleapis.com/api/consumer/top_request_count_by_end_user_country",
"serviceruntime.googleapis.com/api/consumer/top_request_count_by_referer",
"serviceruntime.googleapis.com/api/consumer/streaming_request_message_counts",
"serviceruntime.googleapis.com/api/consumer/streaming_response_message_counts",
"serviceruntime.googleapis.com/api/consumer/streaming_durations",
"serviceruntime.googleapis.com/api/consumer/request_bytes",
"serviceruntime.googleapis.com/api/consumer/response_bytes"
],
"monitoredResource": "api"
}
],
"producerDestinations": [
{
"metrics": [
"serviceruntime.googleapis.com/api/producer/request_count",
"serviceruntime.googleapis.com/api/producer/error_count",
"serviceruntime.googleapis.com/api/producer/total_latencies",
"serviceruntime.googleapis.com/api/producer/request_overhead_latencies",
"serviceruntime.googleapis.com/api/producer/backend_latencies",
"serviceruntime.googleapis.com/api/producer/request_sizes",
"serviceruntime.googleapis.com/api/producer/response_sizes",
"serviceruntime.googleapis.com/api/producer/top_request_count_by_consumer",
"serviceruntime.googleapis.com/api/producer/top_request_sizes_by_consumer",
"serviceruntime.googleapis.com/api/producer/top_response_sizes_by_consumer",
"serviceruntime.googleapis.com/api/producer/streaming_request_message_counts",
"serviceruntime.googleapis.com/api/producer/streaming_response_message_counts",
"serviceruntime.googleapis.com/api/producer/streaming_durations",
"serviceruntime.googleapis.com/api/producer/request_bytes",
"serviceruntime.googleapis.com/api/producer/response_bytes",
"serviceruntime.googleapis.com/api/producer/by_consumer/request_count",
"serviceruntime.googleapis.com/api/producer/by_consumer/error_count",
"serviceruntime.googleapis.com/api/producer/by_consumer/total_latencies",
"serviceruntime.googleapis.com/api/producer/by_consumer/quota_used_count",
"serviceruntime.googleapis.com/api/producer/by_consumer/request_overhead_latencies",
"serviceruntime.googleapis.com/api/producer/by_consumer/backend_latencies",
"serviceruntime.googleapis.com/api/producer/by_consumer/request_sizes",
"serviceruntime.googleapis.com/api/producer/by_consumer/response_sizes"
],
"monitoredResource": "api"
}
]
}
},
"serviceConfigId": "2020-07-13r0",
"serviceName": "examples-grpc-dynamic-routing-wd6ufmzfya-uc.a.run.app",
"tracingDisabled": true
}
]
}
},
{
"name": "envoy.filters.http.grpc_web",
"typedConfig": {
"@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_web.v3.GrpcWeb"
}
},
{
"name": "envoy.filters.http.grpc_json_transcoder",
"typedConfig": {
"@type": "type.googleapis.com/envoy.extensions.filters.http.grpc_json_transcoder.v3.GrpcJsonTranscoder",
"autoMapping": true,
"convertGrpcStatus": true,
"ignoredQueryParameters": [
"access_token",
"api_key",
"key"
],
"printOptions": {},
"protoDescriptorBin": "CqwFChVnb29nbGUvYXBpL2h0dHAucHJvdG8SCmdvb2dsZS5hcGkieQoESHR0cBIqCgVydWxlcxgBIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSBXJ1bGVzEkUKH2Z1bGx5X2RlY29kZV9yZXNlcnZlZF9leHBhbnNpb24YAiABKAhSHGZ1bGx5RGVjb2RlUmVzZXJ2ZWRFeHBhbnNpb24i2gIKCEh0dHBSdWxlEhoKCHNlbGVjdG9yGAEgASgJUghzZWxlY3RvchISCgNnZXQYAiABKAlIAFIDZ2V0EhIKA3B1dBgDIAEoCUgAUgNwdXQSFAoEcG9zdBgEIAEoCUgAUgRwb3N0EhgKBmRlbGV0ZRgFIAEoCUgAUgZkZWxldGUSFgoFcGF0Y2gYBiABKAlIAFIFcGF0Y2gSNwoGY3VzdG9tGAggASgLMh0uZ29vZ2xlLmFwaS5DdXN0b21IdHRwUGF0dGVybkgAUgZjdXN0b20SEgoEYm9keRgHIAEoCVIEYm9keRIjCg1yZXNwb25zZV9ib2R5GAwgASgJUgxyZXNwb25zZUJvZHkSRQoTYWRkaXRpb25hbF9iaW5kaW5ncxgLIAMoCzIULmdvb2dsZS5hcGkuSHR0cFJ1bGVSEmFkZGl0aW9uYWxCaW5kaW5nc0IJCgdwYXR0ZXJuIjsKEUN1c3RvbUh0dHBQYXR0ZXJuEhIKBGtpbmQYASABKAlSBGtpbmQSEgoEcGF0aBgCIAEoCVIEcGF0aEJqCg5jb20uZ29vZ2xlLmFwaUIJSHR0cFByb3RvUAFaQWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL2Fubm90YXRpb25zO2Fubm90YXRpb25z+AEBogIER0FQSWIGcHJvdG8zCps7CiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIk0KEUZpbGVEZXNjcmlwdG9yU2V0EjgKBGZpbGUYASADKAsyJC5nb29nbGUucHJvdG9idWYuRmlsZURlc2NyaXB0b3JQcm90b1IEZmlsZSLkBAoTRmlsZURlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEhgKB3BhY2thZ2UYAiABKAlSB3BhY2thZ2USHgoKZGVwZW5kZW5jeRgDIAMoCVIKZGVwZW5kZW5jeRIrChFwdWJsaWNfZGVwZW5kZW5jeRgKIAMoBVIQcHVibGljRGVwZW5kZW5jeRInCg93ZWFrX2RlcGVuZGVuY3kYCyADKAVSDndlYWtEZXBlbmRlbmN5EkMKDG1lc3NhZ2VfdHlwZRgEIAMoCzIgLmdvb2dsZS5wcm90b2J1Zi5EZXNjcmlwdG9yUHJvdG9SC21lc3NhZ2VUeXBlEkEKCWVudW1fdHlwZRgFIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5FbnVtRGVzY3JpcHRvclByb3RvUghlbnVtVHlwZRJBCgdzZXJ2aWNlGAYgAygLMicuZ29vZ2xlLnByb3RvYnVmLlNlcnZpY2VEZXNjcmlwdG9yUHJvdG9SB3NlcnZpY2USQwoJZXh0ZW5zaW9uGAcgAygLMiUuZ29vZ2xlLnByb3RvYnVmLkZpZWxkRGVzY3JpcHRvclByb3RvUglleHRlbnNpb24SNgoHb3B0aW9ucxgIIAEoCzIcLmdvb2dsZS5wcm90b2J1Zi5GaWxlT3B0aW9uc1IHb3B0aW9ucxJJChBzb3VyY2VfY29kZV9pbmZvGAkgASgLMh8uZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvUg5zb3VyY2VDb2RlSW5mbxIWCgZzeW50YXgYDCABKAlSBnN5bnRheCK5BgoPRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSOwoFZmllbGQYAiADKAsyJS5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG9SBWZpZWxkEkMKCWV4dGVuc2lvbhgGIAMoCzIlLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90b1IJZXh0ZW5zaW9uEkEKC25lc3RlZF90eXBlGAMgAygLMiAuZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90b1IKbmVzdGVkVHlwZRJBCgllbnVtX3R5cGUYBCADKAsyJC5nb29nbGUucHJvdG9idWYuRW51bURlc2NyaXB0b3JQcm90b1IIZW51bVR5cGUSWAoPZXh0ZW5zaW9uX3JhbmdlGAUgAygLMi8uZ29vZ2xlLnByb3RvYnVmLkRlc2NyaXB0b3JQcm90by5FeHRlbnNpb25SYW5nZVIOZXh0ZW5zaW9uUmFuZ2USRAoKb25lb2ZfZGVjbBgIIAMoCzIlLmdvb2dsZS5wcm90b2J1Zi5PbmVvZkRlc2NyaXB0b3JQcm90b1IJb25lb2ZEZWNsEjkKB29wdGlvbnMYByABKAsyHy5nb29nbGUucHJvdG9idWYuTWVzc2FnZU9wdGlvbnNSB29wdGlvbnMSVQoOcmVzZXJ2ZWRfcmFuZ2UYCSADKAsyLi5nb29nbGUucHJvdG9idWYuRGVzY3JpcHRvclByb3RvLlJlc2VydmVkUmFuZ2VSDXJlc2VydmVkUmFuZ2USIwoNcmVzZXJ2ZWRfbmFtZRgKIAMoCVIMcmVzZXJ2ZWROYW1lGnoKDkV4dGVuc2lvblJhbmdlEhQKBXN0YXJ0GAEgASgFUgVzdGFydBIQCgNlbmQYAiABKAVSA2VuZBJACgdvcHRpb25zGAMgASgLMiYuZ29vZ2xlLnByb3RvYnVmLkV4dGVuc2lvblJhbmdlT3B0aW9uc1IHb3B0aW9ucxo3Cg1SZXNlcnZlZFJhbmdlEhQKBXN0YXJ0GAEgASgFUgVzdGFydBIQCgNlbmQYAiABKAVSA2VuZCJ8ChVFeHRlbnNpb25SYW5nZU9wdGlvbnMSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAiKYBgoURmllbGREZXNjcmlwdG9yUHJvdG8SEgoEbmFtZRgBIAEoCVIEbmFtZRIWCgZudW1iZXIYAyABKAVSBm51bWJlchJBCgVsYWJlbBgEIAEoDjIrLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5MYWJlbFIFbGFiZWwSPgoEdHlwZRgFIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlUgR0eXBlEhsKCXR5cGVfbmFtZRgGIAEoCVIIdHlwZU5hbWUSGgoIZXh0ZW5kZWUYAiABKAlSCGV4dGVuZGVlEiMKDWRlZmF1bHRfdmFsdWUYByABKAlSDGRlZmF1bHRWYWx1ZRIfCgtvbmVvZl9pbmRleBgJIAEoBVIKb25lb2ZJbmRleBIbCglqc29uX25hbWUYCiABKAlSCGpzb25OYW1lEjcKB29wdGlvbnMYCCABKAsyHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zUgdvcHRpb25zIrYCCgRUeXBlEg8KC1RZUEVfRE9VQkxFEAESDgoKVFlQRV9GTE9BVBACEg4KClRZUEVfSU5UNjQQAxIPCgtUWVBFX1VJTlQ2NBAEEg4KClRZUEVfSU5UMzIQBRIQCgxUWVBFX0ZJWEVENjQQBhIQCgxUWVBFX0ZJWEVEMzIQBxINCglUWVBFX0JPT0wQCBIPCgtUWVBFX1NUUklORxAJEg4KClRZUEVfR1JPVVAQChIQCgxUWVBFX01FU1NBR0UQCxIOCgpUWVBFX0JZVEVTEAwSDwoLVFlQRV9VSU5UMzIQDRINCglUWVBFX0VOVU0QDhIRCg1UWVBFX1NGSVhFRDMyEA8SEQoNVFlQRV9TRklYRUQ2NBAQEg8KC1RZUEVfU0lOVDMyEBESDwoLVFlQRV9TSU5UNjQQEiJDCgVMYWJlbBISCg5MQUJFTF9PUFRJT05BTBABEhIKDkxBQkVMX1JFUVVJUkVEEAISEgoOTEFCRUxfUkVQRUFURUQQAyJjChRPbmVvZkRlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEjcKB29wdGlvbnMYAiABKAsyHS5nb29nbGUucHJvdG9idWYuT25lb2ZPcHRpb25zUgdvcHRpb25zIuMCChNFbnVtRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSPwoFdmFsdWUYAiADKAsyKS5nb29nbGUucHJvdG9idWYuRW51bVZhbHVlRGVzY3JpcHRvclByb3RvUgV2YWx1ZRI2CgdvcHRpb25zGAMgASgLMhwuZ29vZ2xlLnByb3RvYnVmLkVudW1PcHRpb25zUgdvcHRpb25zEl0KDnJlc2VydmVkX3JhbmdlGAQgAygLMjYuZ29vZ2xlLnByb3RvYnVmLkVudW1EZXNjcmlwdG9yUHJvdG8uRW51bVJlc2VydmVkUmFuZ2VSDXJlc2VydmVkUmFuZ2USIwoNcmVzZXJ2ZWRfbmFtZRgFIAMoCVIMcmVzZXJ2ZWROYW1lGjsKEUVudW1SZXNlcnZlZFJhbmdlEhQKBXN0YXJ0GAEgASgFUgVzdGFydBIQCgNlbmQYAiABKAVSA2VuZCKDAQoYRW51bVZhbHVlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSFgoGbnVtYmVyGAIgASgFUgZudW1iZXISOwoHb3B0aW9ucxgDIAEoCzIhLmdvb2dsZS5wcm90b2J1Zi5FbnVtVmFsdWVPcHRpb25zUgdvcHRpb25zIqcBChZTZXJ2aWNlRGVzY3JpcHRvclByb3RvEhIKBG5hbWUYASABKAlSBG5hbWUSPgoGbWV0aG9kGAIgAygLMiYuZ29vZ2xlLnByb3RvYnVmLk1ldGhvZERlc2NyaXB0b3JQcm90b1IGbWV0aG9kEjkKB29wdGlvbnMYAyABKAsyHy5nb29nbGUucHJvdG9idWYuU2VydmljZU9wdGlvbnNSB29wdGlvbnMiiQIKFU1ldGhvZERlc2NyaXB0b3JQcm90bxISCgRuYW1lGAEgASgJUgRuYW1lEh0KCmlucHV0X3R5cGUYAiABKAlSCWlucHV0VHlwZRIfCgtvdXRwdXRfdHlwZRgDIAEoCVIKb3V0cHV0VHlwZRI4CgdvcHRpb25zGAQgASgLMh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnNSB29wdGlvbnMSMAoQY2xpZW50X3N0cmVhbWluZxgFIAEoCDoFZmFsc2VSD2NsaWVudFN0cmVhbWluZxIwChBzZXJ2ZXJfc3RyZWFtaW5nGAYgASgIOgVmYWxzZVIPc2VydmVyU3RyZWFtaW5nIpIJCgtGaWxlT3B0aW9ucxIhCgxqYXZhX3BhY2thZ2UYASABKAlSC2phdmFQYWNrYWdlEjAKFGphdmFfb3V0ZXJfY2xhc3NuYW1lGAggASgJUhJqYXZhT3V0ZXJDbGFzc25hbWUSNQoTamF2YV9tdWx0aXBsZV9maWxlcxgKIAEoCDoFZmFsc2VSEWphdmFNdWx0aXBsZUZpbGVzEkQKHWphdmFfZ2VuZXJhdGVfZXF1YWxzX2FuZF9oYXNoGBQgASgIQgIYAVIZamF2YUdlbmVyYXRlRXF1YWxzQW5kSGFzaBI6ChZqYXZhX3N0cmluZ19jaGVja191dGY4GBsgASgIOgVmYWxzZVITamF2YVN0cmluZ0NoZWNrVXRmOBJTCgxvcHRpbWl6ZV9mb3IYCSABKA4yKS5nb29nbGUucHJvdG9idWYuRmlsZU9wdGlvbnMuT3B0aW1pemVNb2RlOgVTUEVFRFILb3B0aW1pemVGb3ISHQoKZ29fcGFja2FnZRgLIAEoCVIJZ29QYWNrYWdlEjUKE2NjX2dlbmVyaWNfc2VydmljZXMYECABKAg6BWZhbHNlUhFjY0dlbmVyaWNTZXJ2aWNlcxI5ChVqYXZhX2dlbmVyaWNfc2VydmljZXMYESABKAg6BWZhbHNlUhNqYXZhR2VuZXJpY1NlcnZpY2VzEjUKE3B5X2dlbmVyaWNfc2VydmljZXMYEiABKAg6BWZhbHNlUhFweUdlbmVyaWNTZXJ2aWNlcxI3ChRwaHBfZ2VuZXJpY19zZXJ2aWNlcxgqIAEoCDoFZmFsc2VSEnBocEdlbmVyaWNTZXJ2aWNlcxIlCgpkZXByZWNhdGVkGBcgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBIvChBjY19lbmFibGVfYXJlbmFzGB8gASgIOgVmYWxzZVIOY2NFbmFibGVBcmVuYXMSKgoRb2JqY19jbGFzc19wcmVmaXgYJCABKAlSD29iamNDbGFzc1ByZWZpeBIpChBjc2hhcnBfbmFtZXNwYWNlGCUgASgJUg9jc2hhcnBOYW1lc3BhY2USIQoMc3dpZnRfcHJlZml4GCcgASgJUgtzd2lmdFByZWZpeBIoChBwaHBfY2xhc3NfcHJlZml4GCggASgJUg5waHBDbGFzc1ByZWZpeBIjCg1waHBfbmFtZXNwYWNlGCkgASgJUgxwaHBOYW1lc3BhY2USNAoWcGhwX21ldGFkYXRhX25hbWVzcGFjZRgsIAEoCVIUcGhwTWV0YWRhdGFOYW1lc3BhY2USIQoMcnVieV9wYWNrYWdlGC0gASgJUgtydWJ5UGFja2FnZRJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbiI6CgxPcHRpbWl6ZU1vZGUSCQoFU1BFRUQQARINCglDT0RFX1NJWkUQAhIQCgxMSVRFX1JVTlRJTUUQAyoJCOgHEICAgIACSgQIJhAnItECCg5NZXNzYWdlT3B0aW9ucxI8ChdtZXNzYWdlX3NldF93aXJlX2Zvcm1hdBgBIAEoCDoFZmFsc2VSFG1lc3NhZ2VTZXRXaXJlRm9ybWF0EkwKH25vX3N0YW5kYXJkX2Rlc2NyaXB0b3JfYWNjZXNzb3IYAiABKAg6BWZhbHNlUhxub1N0YW5kYXJkRGVzY3JpcHRvckFjY2Vzc29yEiUKCmRlcHJlY2F0ZWQYAyABKAg6BWZhbHNlUgpkZXByZWNhdGVkEhsKCW1hcF9lbnRyeRgHIAEoCFIIbWFwRW50cnkSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24qCQjoBxCAgICAAkoECAgQCUoECAkQCiLiAwoMRmllbGRPcHRpb25zEkEKBWN0eXBlGAEgASgOMiMuZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucy5DVHlwZToGU1RSSU5HUgVjdHlwZRIWCgZwYWNrZWQYAiABKAhSBnBhY2tlZBJHCgZqc3R5cGUYBiABKA4yJC5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zLkpTVHlwZToJSlNfTk9STUFMUgZqc3R5cGUSGQoEbGF6eRgFIAEoCDoFZmFsc2VSBGxhenkSJQoKZGVwcmVjYXRlZBgDIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQSGQoEd2VhaxgKIAEoCDoFZmFsc2VSBHdlYWsSWAoUdW5pbnRlcnByZXRlZF9vcHRpb24Y5wcgAygLMiQuZ29vZ2xlLnByb3RvYnVmLlVuaW50ZXJwcmV0ZWRPcHRpb25SE3VuaW50ZXJwcmV0ZWRPcHRpb24iLwoFQ1R5cGUSCgoGU1RSSU5HEAASCAoEQ09SRBABEhAKDFNUUklOR19QSUVDRRACIjUKBkpTVHlwZRINCglKU19OT1JNQUwQABINCglKU19TVFJJTkcQARINCglKU19OVU1CRVIQAioJCOgHEICAgIACSgQIBBAFInMKDE9uZW9mT3B0aW9ucxJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACIsABCgtFbnVtT3B0aW9ucxIfCgthbGxvd19hbGlhcxgCIAEoCFIKYWxsb3dBbGlhcxIlCgpkZXByZWNhdGVkGAMgASgIOgVmYWxzZVIKZGVwcmVjYXRlZBJYChR1bmludGVycHJldGVkX29wdGlvbhjnByADKAsyJC5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvblITdW5pbnRlcnByZXRlZE9wdGlvbioJCOgHEICAgIACSgQIBRAGIp4BChBFbnVtVmFsdWVPcHRpb25zEiUKCmRlcHJlY2F0ZWQYASABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIinAEKDlNlcnZpY2VPcHRpb25zEiUKCmRlcHJlY2F0ZWQYISABKAg6BWZhbHNlUgpkZXByZWNhdGVkElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uKgkI6AcQgICAgAIi4AIKDU1ldGhvZE9wdGlvbnMSJQoKZGVwcmVjYXRlZBghIAEoCDoFZmFsc2VSCmRlcHJlY2F0ZWQScQoRaWRlbXBvdGVuY3lfbGV2ZWwYIiABKA4yLy5nb29nbGUucHJvdG9idWYuTWV0aG9kT3B0aW9ucy5JZGVtcG90ZW5jeUxldmVsOhNJREVNUE9URU5DWV9VTktOT1dOUhBpZGVtcG90ZW5jeUxldmVsElgKFHVuaW50ZXJwcmV0ZWRfb3B0aW9uGOcHIAMoCzIkLmdvb2dsZS5wcm90b2J1Zi5VbmludGVycHJldGVkT3B0aW9uUhN1bmludGVycHJldGVkT3B0aW9uIlAKEElkZW1wb3RlbmN5TGV2ZWwSFwoTSURFTVBPVEVOQ1lfVU5LTk9XThAAEhMKD05PX1NJREVfRUZGRUNUUxABEg4KCklERU1QT1RFTlQQAioJCOgHEICAgIACIpoDChNVbmludGVycHJldGVkT3B0aW9uEkEKBG5hbWUYAiADKAsyLS5nb29nbGUucHJvdG9idWYuVW5pbnRlcnByZXRlZE9wdGlvbi5OYW1lUGFydFIEbmFtZRIpChBpZGVudGlmaWVyX3ZhbHVlGAMgASgJUg9pZGVudGlmaWVyVmFsdWUSLAoScG9zaXRpdmVfaW50X3ZhbHVlGAQgASgEUhBwb3NpdGl2ZUludFZhbHVlEiwKEm5lZ2F0aXZlX2ludF92YWx1ZRgFIAEoA1IQbmVnYXRpdmVJbnRWYWx1ZRIhCgxkb3VibGVfdmFsdWUYBiABKAFSC2RvdWJsZVZhbHVlEiEKDHN0cmluZ192YWx1ZRgHIAEoDFILc3RyaW5nVmFsdWUSJwoPYWdncmVnYXRlX3ZhbHVlGAggASgJUg5hZ2dyZWdhdGVWYWx1ZRpKCghOYW1lUGFydBIbCgluYW1lX3BhcnQYASACKAlSCG5hbWVQYXJ0EiEKDGlzX2V4dGVuc2lvbhgCIAIoCFILaXNFeHRlbnNpb24ipwIKDlNvdXJjZUNvZGVJbmZvEkQKCGxvY2F0aW9uGAEgAygLMiguZ29vZ2xlLnByb3RvYnVmLlNvdXJjZUNvZGVJbmZvLkxvY2F0aW9uUghsb2NhdGlvbhrOAQoITG9jYXRpb24SFgoEcGF0aBgBIAMoBUICEAFSBHBhdGgSFgoEc3BhbhgCIAMoBUICEAFSBHNwYW4SKQoQbGVhZGluZ19jb21tZW50cxgDIAEoCVIPbGVhZGluZ0NvbW1lbnRzEisKEXRyYWlsaW5nX2NvbW1lbnRzGAQgASgJUhB0cmFpbGluZ0NvbW1lbnRzEjoKGWxlYWRpbmdfZGV0YWNoZWRfY29tbWVudHMYBiADKAlSF2xlYWRpbmdEZXRhY2hlZENvbW1lbnRzItEBChFHZW5lcmF0ZWRDb2RlSW5mbxJNCgphbm5vdGF0aW9uGAEgAygLMi0uZ29vZ2xlLnByb3RvYnVmLkdlbmVyYXRlZENvZGVJbmZvLkFubm90YXRpb25SCmFubm90YXRpb24abQoKQW5ub3RhdGlvbhIWCgRwYXRoGAEgAygFQgIQAVIEcGF0aBIfCgtzb3VyY2VfZmlsZRgCIAEoCVIKc291cmNlRmlsZRIUCgViZWdpbhgDIAEoBVIFYmVnaW4SEAoDZW5kGAQgASgFUgNlbmRCjwEKE2NvbS5nb29nbGUucHJvdG9idWZCEERlc2NyaXB0b3JQcm90b3NIAVo+Z2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYvcHJvdG9jLWdlbi1nby9kZXNjcmlwdG9yO2Rlc2NyaXB0b3L4AQGiAgNHUEKqAhpHb29nbGUuUHJvdG9idWYuUmVmbGVjdGlvbgqoAgocZ29vZ2xlL2FwaS9hbm5vdGF0aW9ucy5wcm90bxIKZ29vZ2xlLmFwaRoVZ29vZ2xlL2FwaS9odHRwLnByb3RvGiBnb29nbGUvcHJvdG9idWYvZGVzY3JpcHRvci5wcm90bzpLCgRodHRwEh4uZ29vZ2xlLnByb3RvYnVmLk1ldGhvZE9wdGlvbnMYsMq8IiABKAsyFC5nb29nbGUuYXBpLkh0dHBSdWxlUgRodHRwQm4KDmNvbS5nb29nbGUuYXBpQhBBbm5vdGF0aW9uc1Byb3RvUAFaQWdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL2Fubm90YXRpb25zO2Fubm90YXRpb25zogIER0FQSWIGcHJvdG8zCpADChdnb29nbGUvYXBpL2NsaWVudC5wcm90bxIKZ29vZ2xlLmFwaRogZ29vZ2xlL3Byb3RvYnVmL2Rlc2NyaXB0b3IucHJvdG86SgoQbWV0aG9kX3NpZ25hdHVyZRIeLmdvb2dsZS5wcm90b2J1Zi5NZXRob2RPcHRpb25zGJsIIAMoCVIPbWV0aG9kU2lnbmF0dXJlOkMKDGRlZmF1bHRfaG9zdBIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucxiZCCABKAlSC2RlZmF1bHRIb3N0OkMKDG9hdXRoX3Njb3BlcxIfLmdvb2dsZS5wcm90b2J1Zi5TZXJ2aWNlT3B0aW9ucxiaCCABKAlSC29hdXRoU2NvcGVzQmkKDmNvbS5nb29nbGUuYXBpQgtDbGllbnRQcm90b1ABWkFnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9hbm5vdGF0aW9uczthbm5vdGF0aW9uc6ICBEdBUEliBnByb3RvMwrdAQoZZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90bxIPZ29vZ2xlLnByb3RvYnVmIjYKA0FueRIZCgh0eXBlX3VybBgBIAEoCVIHdHlwZVVybBIUCgV2YWx1ZRgCIAEoDFIFdmFsdWVCbwoTY29tLmdvb2dsZS5wcm90b2J1ZkIIQW55UHJvdG9QAVolZ2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYvcHR5cGVzL2FueaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCpMCChdnb29nbGUvcnBjL3N0YXR1cy5wcm90bxIKZ29vZ2xlLnJwYxoZZ29vZ2xlL3Byb3RvYnVmL2FueS5wcm90byJmCgZTdGF0dXMSEgoEY29kZRgBIAEoBVIEY29kZRIYCgdtZXNzYWdlGAIgASgJUgdtZXNzYWdlEi4KB2RldGFpbHMYAyADKAsyFC5nb29nbGUucHJvdG9idWYuQW55UgdkZXRhaWxzQmEKDmNvbS5nb29nbGUucnBjQgtTdGF0dXNQcm90b1ABWjdnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL3JwYy9zdGF0dXM7c3RhdHVz+AEBogIDUlBDYgZwcm90bzMKxgcKLmdvb2dsZS9hcGkvc2VydmljZWNvbnRyb2wvdjEvY2hlY2tfZXJyb3IucHJvdG8SHGdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEaF2dvb2dsZS9ycGMvc3RhdHVzLnByb3RvIs0FCgpDaGVja0Vycm9yEkEKBGNvZGUYASABKA4yLS5nb29nbGUuYXBpLnNlcnZpY2Vjb250cm9sLnYxLkNoZWNrRXJyb3IuQ29kZVIEY29kZRIYCgdzdWJqZWN0GAQgASgJUgdzdWJqZWN0EhYKBmRldGFpbBgCIAEoCVIGZGV0YWlsEioKBnN0YXR1cxgDIAEoCzISLmdvb2dsZS5ycGMuU3RhdHVzUgZzdGF0dXMinQQKBENvZGUSGgoWRVJST1JfQ09ERV9VTlNQRUNJRklFRBAAEg0KCU5PVF9GT1VORBAFEhUKEVBFUk1JU1NJT05fREVOSUVEEAcSFgoSUkVTT1VSQ0VfRVhIQVVTVEVEEAgSGQoVU0VSVklDRV9OT1RfQUNUSVZBVEVEEGgSFAoQQklMTElOR19ESVNBQkxFRBBrEhMKD1BST0pFQ1RfREVMRVRFRBBsEhMKD1BST0pFQ1RfSU5WQUxJRBByEhQKEENPTlNVTUVSX0lOVkFMSUQQfRIWChJJUF9BRERSRVNTX0JMT0NLRUQQbRITCg9SRUZFUkVSX0JMT0NLRUQQbhIWChJDTElFTlRfQVBQX0JMT0NLRUQQbxIWChJBUElfVEFSR0VUX0JMT0NLRUQQehITCg9BUElfS0VZX0lOVkFMSUQQaRITCg9BUElfS0VZX0VYUElSRUQQcBIVChFBUElfS0VZX05PVF9GT1VORBBxEhYKEklOVkFMSURfQ1JFREVOVElBTBB7EiEKHE5BTUVTUEFDRV9MT09LVVBfVU5BVkFJTEFCTEUQrAISHwoaU0VSVklDRV9TVEFUVVNfVU5BVkFJTEFCTEUQrQISHwoaQklMTElOR19TVEFUVVNfVU5BVkFJTEFCTEUQrgISLwoqQ0xPVURfUkVTT1VSQ0VfTUFOQUdFUl9CQUNLRU5EX1VOQVZBSUxBQkxFELECQoQBCiBjb20uZ29vZ2xlLmFwaS5zZXJ2aWNlY29udHJvbC52MUIPQ2hlY2tFcnJvclByb3RvUAFaSmdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL3NlcnZpY2Vjb250cm9sL3YxO3NlcnZpY2Vjb250cm9s+AEBYgZwcm90bzMKigMKJmdvb2dsZS9sb2dnaW5nL3R5cGUvbG9nX3NldmVyaXR5LnByb3RvEhNnb29nbGUubG9nZ2luZy50eXBlGhxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvKoIBCgtMb2dTZXZlcml0eRILCgdERUZBVUxUEAASCQoFREVCVUcQZBIJCgRJTkZPEMgBEgsKBk5PVElDRRCsAhIMCgdXQVJOSU5HEJADEgoKBUVSUk9SEPQDEg0KCENSSVRJQ0FMENgEEgoKBUFMRVJUELwFEg4KCUVNRVJHRU5DWRCgBkKfAQoXY29tLmdvb2dsZS5sb2dnaW5nLnR5cGVCEExvZ1NldmVyaXR5UHJvdG9QAVo4Z29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9sb2dnaW5nL3R5cGU7bHR5cGWqAhlHb29nbGUuQ2xvdWQuTG9nZ2luZy5UeXBlygIZR29vZ2xlXENsb3VkXExvZ2dpbmdcVHlwZWIGcHJvdG8zCuUFChxnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvEg9nb29nbGUucHJvdG9idWYimAEKBlN0cnVjdBI7CgZmaWVsZHMYASADKAsyIy5nb29nbGUucHJvdG9idWYuU3RydWN0LkZpZWxkc0VudHJ5UgZmaWVsZHMaUQoLRmllbGRzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSLAoFdmFsdWUYAiABKAsyFi5nb29nbGUucHJvdG9idWYuVmFsdWVSBXZhbHVlOgI4ASKyAgoFVmFsdWUSOwoKbnVsbF92YWx1ZRgBIAEoDjIaLmdvb2dsZS5wcm90b2J1Zi5OdWxsVmFsdWVIAFIJbnVsbFZhbHVlEiMKDG51bWJlcl92YWx1ZRgCIAEoAUgAUgtudW1iZXJWYWx1ZRIjCgxzdHJpbmdfdmFsdWUYAyABKAlIAFILc3RyaW5nVmFsdWUSHwoKYm9vbF92YWx1ZRgEIAEoCEgAUglib29sVmFsdWUSPAoMc3RydWN0X3ZhbHVlGAUgASgLMhcuZ29vZ2xlLnByb3RvYnVmLlN0cnVjdEgAUgtzdHJ1Y3RWYWx1ZRI7CgpsaXN0X3ZhbHVlGAYgASgLMhouZ29vZ2xlLnByb3RvYnVmLkxpc3RWYWx1ZUgAUglsaXN0VmFsdWVCBgoEa2luZCI7CglMaXN0VmFsdWUSLgoGdmFsdWVzGAEgAygLMhYuZ29vZ2xlLnByb3RvYnVmLlZhbHVlUgZ2YWx1ZXMqGwoJTnVsbFZhbHVlEg4KCk5VTExfVkFMVUUQAEKBAQoTY29tLmdvb2dsZS5wcm90b2J1ZkILU3RydWN0UHJvdG9QAVoxZ2l0aHViLmNvbS9nb2xhbmcvcHJvdG9idWYvcHR5cGVzL3N0cnVjdDtzdHJ1Y3RwYvgBAaICA0dQQqoCHkdvb2dsZS5Qcm90b2J1Zi5XZWxsS25vd25UeXBlc2IGcHJvdG8zCvcBCh9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvEg9nb29nbGUucHJvdG9idWYiOwoJVGltZXN0YW1wEhgKB3NlY29uZHMYASABKANSB3NlY29uZHMSFAoFbmFub3MYAiABKAVSBW5hbm9zQn4KE2NvbS5nb29nbGUucHJvdG9idWZCDlRpbWVzdGFtcFByb3RvUAFaK2dpdGh1Yi5jb20vZ29sYW5nL3Byb3RvYnVmL3B0eXBlcy90aW1lc3RhbXD4AQGiAgNHUEKqAh5Hb29nbGUuUHJvdG9idWYuV2VsbEtub3duVHlwZXNiBnByb3RvMwrDBgosZ29vZ2xlL2FwaS9zZXJ2aWNlY29udHJvbC92MS9sb2dfZW50cnkucHJvdG8SHGdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEaJmdvb2dsZS9sb2dnaW5nL3R5cGUvbG9nX3NldmVyaXR5LnByb3RvGhlnb29nbGUvcHJvdG9idWYvYW55LnByb3RvGhxnb29nbGUvcHJvdG9idWYvc3RydWN0LnByb3RvGh9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvIukDCghMb2dFbnRyeRISCgRuYW1lGAogASgJUgRuYW1lEjgKCXRpbWVzdGFtcBgLIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSCXRpbWVzdGFtcBI8CghzZXZlcml0eRgMIAEoDjIgLmdvb2dsZS5sb2dnaW5nLnR5cGUuTG9nU2V2ZXJpdHlSCHNldmVyaXR5EhsKCWluc2VydF9pZBgEIAEoCVIIaW5zZXJ0SWQSSgoGbGFiZWxzGA0gAygLMjIuZ29vZ2xlLmFwaS5zZXJ2aWNlY29udHJvbC52MS5Mb2dFbnRyeS5MYWJlbHNFbnRyeVIGbGFiZWxzEjsKDXByb3RvX3BheWxvYWQYAiABKAsyFC5nb29nbGUucHJvdG9idWYuQW55SABSDHByb3RvUGF5bG9hZBIjCgx0ZXh0X3BheWxvYWQYAyABKAlIAFILdGV4dFBheWxvYWQSQAoOc3RydWN0X3BheWxvYWQYBiABKAsyFy5nb29nbGUucHJvdG9idWYuU3RydWN0SABSDXN0cnVjdFBheWxvYWQaOQoLTGFiZWxzRW50cnkSEAoDa2V5GAEgASgJUgNrZXkSFAoFdmFsdWUYAiABKAlSBXZhbHVlOgI4AUIJCgdwYXlsb2FkQn8KIGNvbS5nb29nbGUuYXBpLnNlcnZpY2Vjb250cm9sLnYxQg1Mb2dFbnRyeVByb3RvUAFaSmdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL3NlcnZpY2Vjb250cm9sL3YxO3NlcnZpY2Vjb250cm9sYgZwcm90bzMKkwgKL2dvb2dsZS9hcGkvc2VydmljZWNvbnRyb2wvdjEvZGlzdHJpYnV0aW9uLnByb3RvEhxnb29nbGUuYXBpLnNlcnZpY2Vjb250cm9sLnYxIrAGCgxEaXN0cmlidXRpb24SFAoFY291bnQYASABKANSBWNvdW50EhIKBG1lYW4YAiABKAFSBG1lYW4SGAoHbWluaW11bRgDIAEoAVIHbWluaW11bRIYCgdtYXhpbXVtGAQgASgBUgdtYXhpbXVtEjcKGHN1bV9vZl9zcXVhcmVkX2RldmlhdGlvbhgFIAEoAVIVc3VtT2ZTcXVhcmVkRGV2aWF0aW9uEiMKDWJ1Y2tldF9jb3VudHMYBiADKANSDGJ1Y2tldENvdW50cxJhCg5saW5lYXJfYnVja2V0cxgHIAEoCzI4Lmdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEuRGlzdHJpYnV0aW9uLkxpbmVhckJ1Y2tldHNIAFINbGluZWFyQnVja2V0cxJwChNleHBvbmVudGlhbF9idWNrZXRzGAggASgLMj0uZ29vZ2xlLmFwaS5zZXJ2aWNlY29udHJvbC52MS5EaXN0cmlidXRpb24uRXhwb25lbnRpYWxCdWNrZXRzSABSEmV4cG9uZW50aWFsQnVja2V0cxJnChBleHBsaWNpdF9idWNrZXRzGAkgASgLMjouZ29vZ2xlLmFwaS5zZXJ2aWNlY29udHJvbC52MS5EaXN0cmlidXRpb24uRXhwbGljaXRCdWNrZXRzSABSD2V4cGxpY2l0QnVja2V0cxprCg1MaW5lYXJCdWNrZXRzEiwKEm51bV9maW5pdGVfYnVja2V0cxgBIAEoBVIQbnVtRmluaXRlQnVja2V0cxIUCgV3aWR0aBgCIAEoAVIFd2lkdGgSFgoGb2Zmc2V0GAMgASgBUgZvZmZzZXQafQoSRXhwb25lbnRpYWxCdWNrZXRzEiwKEm51bV9maW5pdGVfYnVja2V0cxgBIAEoBVIQbnVtRmluaXRlQnVja2V0cxIjCg1ncm93dGhfZmFjdG9yGAIgASgBUgxncm93dGhGYWN0b3ISFAoFc2NhbGUYAyABKAFSBXNjYWxlGikKD0V4cGxpY2l0QnVja2V0cxIWCgZib3VuZHMYASADKAFSBmJvdW5kc0IPCg1idWNrZXRfb3B0aW9uQoYBCiBjb20uZ29vZ2xlLmFwaS5zZXJ2aWNlY29udHJvbC52MUIRRGlzdHJpYnV0aW9uUHJvdG9QAVpKZ29vZ2xlLmdvbGFuZy5vcmcvZ2VucHJvdG8vZ29vZ2xlYXBpcy9hcGkvc2VydmljZWNvbnRyb2wvdjE7c2VydmljZWNvbnRyb2z4AQFiBnByb3RvMwq4BwovZ29vZ2xlL2FwaS9zZXJ2aWNlY29udHJvbC92MS9tZXRyaWNfdmFsdWUucHJvdG8SHGdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEaL2dvb2dsZS9hcGkvc2VydmljZWNvbnRyb2wvdjEvZGlzdHJpYnV0aW9uLnByb3RvGh9nb29nbGUvcHJvdG9idWYvdGltZXN0YW1wLnByb3RvIv0DCgtNZXRyaWNWYWx1ZRJNCgZsYWJlbHMYASADKAsyNS5nb29nbGUuYXBpLnNlcnZpY2Vjb250cm9sLnYxLk1ldHJpY1ZhbHVlLkxhYmVsc0VudHJ5UgZsYWJlbHMSOQoKc3RhcnRfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSCXN0YXJ0VGltZRI1CghlbmRfdGltZRgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBSB2VuZFRpbWUSHwoKYm9vbF92YWx1ZRgEIAEoCEgAUglib29sVmFsdWUSIQoLaW50NjRfdmFsdWUYBSABKANIAFIKaW50NjRWYWx1ZRIjCgxkb3VibGVfdmFsdWUYBiABKAFIAFILZG91YmxlVmFsdWUSIwoMc3RyaW5nX3ZhbHVlGAcgASgJSABSC3N0cmluZ1ZhbHVlElsKEmRpc3RyaWJ1dGlvbl92YWx1ZRgIIAEoCzIqLmdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEuRGlzdHJpYnV0aW9uSABSEWRpc3RyaWJ1dGlvblZhbHVlGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAFCBwoFdmFsdWUigQEKDk1ldHJpY1ZhbHVlU2V0Eh8KC21ldHJpY19uYW1lGAEgASgJUgptZXRyaWNOYW1lEk4KDW1ldHJpY192YWx1ZXMYAiADKAsyKS5nb29nbGUuYXBpLnNlcnZpY2Vjb250cm9sLnYxLk1ldHJpY1ZhbHVlUgxtZXRyaWNWYWx1ZXNCiAEKIGNvbS5nb29nbGUuYXBpLnNlcnZpY2Vjb250cm9sLnYxQhNNZXRyaWNWYWx1ZVNldFByb3RvUAFaSmdvb2dsZS5nb2xhbmcub3JnL2dlbnByb3RvL2dvb2dsZWFwaXMvYXBpL3NlcnZpY2Vjb250cm9sL3YxO3NlcnZpY2Vjb250cm9s+AEBYgZwcm90bzMK5QcKLGdvb2dsZS9hcGkvc2VydmljZWNvbnRyb2wvdjEvb3BlcmF0aW9uLnByb3RvEhxnb29nbGUuYXBpLnNlcnZpY2Vjb250cm9sLnYxGixnb29nbGUvYXBpL3NlcnZpY2Vjb250cm9sL3YxL2xvZ19lbnRyeS5wcm90bxovZ29vZ2xlL2FwaS9zZXJ2aWNlY29udHJvbC92MS9tZXRyaWNfdmFsdWUucHJvdG8aH2dvb2dsZS9wcm90b2J1Zi90aW1lc3RhbXAucHJvdG8iiAUKCU9wZXJhdGlvbhIhCgxvcGVyYXRpb25faWQYASABKAlSC29wZXJhdGlvbklkEiUKDm9wZXJhdGlvbl9uYW1lGAIgASgJUg1vcGVyYXRpb25OYW1lEh8KC2NvbnN1bWVyX2lkGAMgASgJUgpjb25zdW1lcklkEjkKCnN0YXJ0X3RpbWUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUglzdGFydFRpbWUSNQoIZW5kX3RpbWUYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wUgdlbmRUaW1lEksKBmxhYmVscxgGIAMoCzIzLmdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEuT3BlcmF0aW9uLkxhYmVsc0VudHJ5UgZsYWJlbHMSWAoRbWV0cmljX3ZhbHVlX3NldHMYByADKAsyLC5nb29nbGUuYXBpLnNlcnZpY2Vjb250cm9sLnYxLk1ldHJpY1ZhbHVlU2V0Ug9tZXRyaWNWYWx1ZVNldHMSRwoLbG9nX2VudHJpZXMYCCADKAsyJi5nb29nbGUuYXBpLnNlcnZpY2Vjb250cm9sLnYxLkxvZ0VudHJ5Ugpsb2dFbnRyaWVzElIKCmltcG9ydGFuY2UYCyABKA4yMi5nb29nbGUuYXBpLnNlcnZpY2Vjb250cm9sLnYxLk9wZXJhdGlvbi5JbXBvcnRhbmNlUgppbXBvcnRhbmNlGjkKC0xhYmVsc0VudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgJUgV2YWx1ZToCOAEiHwoKSW1wb3J0YW5jZRIHCgNMT1cQABIICgRISUdIEAFCgwEKIGNvbS5nb29nbGUuYXBpLnNlcnZpY2Vjb250cm9sLnYxQg5PcGVyYXRpb25Qcm90b1ABWkpnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9zZXJ2aWNlY29udHJvbC92MTtzZXJ2aWNlY29udHJvbPgBAWIGcHJvdG8zCqQRCjVnb29nbGUvYXBpL3NlcnZpY2Vjb250cm9sL3YxL3NlcnZpY2VfY29udHJvbGxlci5wcm90bxIcZ29vZ2xlLmFwaS5zZXJ2aWNlY29udHJvbC52MRocZ29vZ2xlL2FwaS9hbm5vdGF0aW9ucy5wcm90bxoXZ29vZ2xlL2FwaS9jbGllbnQucHJvdG8aLmdvb2dsZS9hcGkvc2VydmljZWNvbnRyb2wvdjEvY2hlY2tfZXJyb3IucHJvdG8aLGdvb2dsZS9hcGkvc2VydmljZWNvbnRyb2wvdjEvb3BlcmF0aW9uLnByb3RvGhdnb29nbGUvcnBjL3N0YXR1cy5wcm90byKkAQoMQ2hlY2tSZXF1ZXN0EiEKDHNlcnZpY2VfbmFtZRgBIAEoCVILc2VydmljZU5hbWUSRQoJb3BlcmF0aW9uGAIgASgLMicuZ29vZ2xlLmFwaS5zZXJ2aWNlY29udHJvbC52MS5PcGVyYXRpb25SCW9wZXJhdGlvbhIqChFzZXJ2aWNlX2NvbmZpZ19pZBgEIAEoCVIPc2VydmljZUNvbmZpZ0lkIscFCg1DaGVja1Jlc3BvbnNlEiEKDG9wZXJhdGlvbl9pZBgBIAEoCVILb3BlcmF0aW9uSWQSSwoMY2hlY2tfZXJyb3JzGAIgAygLMiguZ29vZ2xlLmFwaS5zZXJ2aWNlY29udHJvbC52MS5DaGVja0Vycm9yUgtjaGVja0Vycm9ycxIqChFzZXJ2aWNlX2NvbmZpZ19pZBgFIAEoCVIPc2VydmljZUNvbmZpZ0lkEiwKEnNlcnZpY2Vfcm9sbG91dF9pZBgLIAEoCVIQc2VydmljZVJvbGxvdXRJZBJUCgpjaGVja19pbmZvGAYgASgLMjUuZ29vZ2xlLmFwaS5zZXJ2aWNlY29udHJvbC52MS5DaGVja1Jlc3BvbnNlLkNoZWNrSW5mb1IJY2hlY2tJbmZvGmoKCUNoZWNrSW5mbxJdCg1jb25zdW1lcl9pbmZvGAIgASgLMjguZ29vZ2xlLmFwaS5zZXJ2aWNlY29udHJvbC52MS5DaGVja1Jlc3BvbnNlLkNvbnN1bWVySW5mb1IMY29uc3VtZXJJbmZvGqkCCgxDb25zdW1lckluZm8SJQoOcHJvamVjdF9udW1iZXIYASABKANSDXByb2plY3ROdW1iZXISWQoEdHlwZRgCIAEoDjJFLmdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEuQ2hlY2tSZXNwb25zZS5Db25zdW1lckluZm8uQ29uc3VtZXJUeXBlUgR0eXBlEicKD2NvbnN1bWVyX251bWJlchgDIAEoA1IOY29uc3VtZXJOdW1iZXIibgoMQ29uc3VtZXJUeXBlEh0KGUNPTlNVTUVSX1RZUEVfVU5TUEVDSUZJRUQQABILCgdQUk9KRUNUEAESCgoGRk9MREVSEAISEAoMT1JHQU5JWkFUSU9OEAMSFAoQU0VSVklDRV9TUEVDSUZJQxAEIqcBCg1SZXBvcnRSZXF1ZXN0EiEKDHNlcnZpY2VfbmFtZRgBIAEoCVILc2VydmljZU5hbWUSRwoKb3BlcmF0aW9ucxgCIAMoCzInLmdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEuT3BlcmF0aW9uUgpvcGVyYXRpb25zEioKEXNlcnZpY2VfY29uZmlnX2lkGAMgASgJUg9zZXJ2aWNlQ29uZmlnSWQipwIKDlJlcG9ydFJlc3BvbnNlEl0KDXJlcG9ydF9lcnJvcnMYASADKAsyOC5nb29nbGUuYXBpLnNlcnZpY2Vjb250cm9sLnYxLlJlcG9ydFJlc3BvbnNlLlJlcG9ydEVycm9yUgxyZXBvcnRFcnJvcnMSKgoRc2VydmljZV9jb25maWdfaWQYAiABKAlSD3NlcnZpY2VDb25maWdJZBIsChJzZXJ2aWNlX3JvbGxvdXRfaWQYBCABKAlSEHNlcnZpY2VSb2xsb3V0SWQaXAoLUmVwb3J0RXJyb3ISIQoMb3BlcmF0aW9uX2lkGAEgASgJUgtvcGVyYXRpb25JZBIqCgZzdGF0dXMYAiABKAsyEi5nb29nbGUucnBjLlN0YXR1c1IGc3RhdHVzMrwDChFTZXJ2aWNlQ29udHJvbGxlchKOAQoFQ2hlY2sSKi5nb29nbGUuYXBpLnNlcnZpY2Vjb250cm9sLnYxLkNoZWNrUmVxdWVzdBorLmdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEuQ2hlY2tSZXNwb25zZSIsgtPkkwImOgEqIiEvdjEvc2VydmljZXMve3NlcnZpY2VfbmFtZX06Y2hlY2sSkgEKBlJlcG9ydBIrLmdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEuUmVwb3J0UmVxdWVzdBosLmdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEuUmVwb3J0UmVzcG9uc2UiLYLT5JMCJzoBKiIiL3YxL3NlcnZpY2VzL3tzZXJ2aWNlX25hbWV9OnJlcG9ydBqAAcpBHXNlcnZpY2Vjb250cm9sLmdvb2dsZWFwaXMuY29t0kFdaHR0cHM6Ly93d3cuZ29vZ2xlYXBpcy5jb20vYXV0aC9jbG91ZC1wbGF0Zm9ybSxodHRwczovL3d3dy5nb29nbGVhcGlzLmNvbS9hdXRoL3NlcnZpY2Vjb250cm9sQpIBCiBjb20uZ29vZ2xlLmFwaS5zZXJ2aWNlY29udHJvbC52MUIWU2VydmljZUNvbnRyb2xsZXJQcm90b1ABWkpnb29nbGUuZ29sYW5nLm9yZy9nZW5wcm90by9nb29nbGVhcGlzL2FwaS9zZXJ2aWNlY29udHJvbC92MTtzZXJ2aWNlY29udHJvbPgBAaICBEdBU0NiBnByb3RvMwqHLwoPZ3JwYy10ZXN0LnByb3RvEgl0ZXN0LmdycGMaNWdvb2dsZS9hcGkvc2VydmljZWNvbnRyb2wvdjEvc2VydmljZV9jb250cm9sbGVyLnByb3RvGhxnb29nbGUvYXBpL2Fubm90YXRpb25zLnByb3RvItcECgtFY2hvUmVxdWVzdBISCgR0ZXh0GAEgASgMUgR0ZXh0EjoKDXJldHVybl9zdGF0dXMYAiABKAsyFS50ZXN0LmdycGMuQ2FsbFN0YXR1c1IMcmV0dXJuU3RhdHVzEjUKF3JhbmRvbV9wYXlsb2FkX21heF9zaXplGAMgASgFUhRyYW5kb21QYXlsb2FkTWF4U2l6ZRIsChJzcGFjZV9wYXlsb2FkX3NpemUYBiABKAVSEHNwYWNlUGF5bG9hZFNpemUSJQoOcmVzcG9uc2VfZGVsYXkYByABKAVSDXJlc3BvbnNlRGVsYXkSaQoXcmV0dXJuX2luaXRpYWxfbWV0YWRhdGEYBCADKAsyMS50ZXN0LmdycGMuRWNob1JlcXVlc3QuUmV0dXJuSW5pdGlhbE1ldGFkYXRhRW50cnlSFXJldHVybkluaXRpYWxNZXRhZGF0YRJsChhyZXR1cm5fdHJhaWxpbmdfbWV0YWRhdGEYBSADKAsyMi50ZXN0LmdycGMuRWNob1JlcXVlc3QuUmV0dXJuVHJhaWxpbmdNZXRhZGF0YUVudHJ5UhZyZXR1cm5UcmFpbGluZ01ldGFkYXRhGkgKGlJldHVybkluaXRpYWxNZXRhZGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAEaSQobUmV0dXJuVHJhaWxpbmdNZXRhZGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAEi6gEKDEVjaG9SZXNwb25zZRISCgR0ZXh0GGUgASgMUgR0ZXh0EiUKDmVsYXBzZWRfbWljcm9zGGYgASgGUg1lbGFwc2VkTWljcm9zEloKEXJlY2VpdmVkX21ldGFkYXRhGGcgAygLMi0udGVzdC5ncnBjLkVjaG9SZXNwb25zZS5SZWNlaXZlZE1ldGFkYXRhRW50cnlSEHJlY2VpdmVkTWV0YWRhdGEaQwoVUmVjZWl2ZWRNZXRhZGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAEi4gIKCkNhbGxDb25maWcSFwoHYXBpX2tleRgBIAEoCVIGYXBpS2V5EhcKB3VzZV9zc2wYAiABKAhSBnVzZVNzbBIdCgphdXRoX3Rva2VuGAMgASgJUglhdXRoVG9rZW4SPwoIbWV0YWRhdGEYBCADKAsyIy50ZXN0LmdycGMuQ2FsbENvbmZpZy5NZXRhZGF0YUVudHJ5UghtZXRhZGF0YRJMCgtjb21wcmVzc2lvbhgFIAEoDjIqLnRlc3QuZ3JwYy5DYWxsQ29uZmlnLkNvbXByZXNzaW9uQWxnb3JpdGhtUgtjb21wcmVzc2lvbho7Cg1NZXRhZGF0YUVudHJ5EhAKA2tleRgBIAEoCVIDa2V5EhQKBXZhbHVlGAIgASgMUgV2YWx1ZToCOAEiNwoUQ29tcHJlc3Npb25BbGdvcml0aG0SCAoETk9ORRAAEgsKB0RFRkxBVEUQARIICgRHWklQEAIiOgoKQ2FsbFN0YXR1cxISCgRjb2RlGAEgASgFUgRjb2RlEhgKB2RldGFpbHMYAiABKAlSB2RldGFpbHMiDQoLQ29ya1JlcXVlc3QiPQoJQ29ya1N0YXRlEjAKFGN1cnJlbnRfY29ya2VkX2NhbGxzGAEgASgDUhJjdXJyZW50Q29ya2VkQ2FsbHMi6gEKCEVjaG9UZXN0EjAKB3JlcXVlc3QYASABKAsyFi50ZXN0LmdycGMuRWNob1JlcXVlc3RSB3JlcXVlc3QSNgoLY2FsbF9jb25maWcYAiABKAsyFS50ZXN0LmdycGMuQ2FsbENvbmZpZ1IKY2FsbENvbmZpZxI+Cg9leHBlY3RlZF9zdGF0dXMYAyABKAsyFS50ZXN0LmdycGMuQ2FsbFN0YXR1c1IOZXhwZWN0ZWRTdGF0dXMSNAoWZXhwZWN0ZWRfbWV0YWRhdGFfa2V5cxgEIAMoCVIUZXhwZWN0ZWRNZXRhZGF0YUtleXMi9AEKCkVjaG9SZXN1bHQSEgoEdGV4dBgBIAEoCVIEdGV4dBJNCg9tZXRhZGF0YV9yZXN1bHQYAiADKAsyJC50ZXN0LmdycGMuRWNob1Jlc3VsdC5NZXRhZGF0YVJlc3VsdFIObWV0YWRhdGFSZXN1bHQSKwoRdmVyaWZpZWRfbWV0YWRhdGEYAyABKAVSEHZlcmlmaWVkTWV0YWRhdGEaVgoOTWV0YWRhdGFSZXN1bHQSEAoDa2V5GAEgASgJUgNrZXkSGgoIZXhwZWN0ZWQYAiABKAxSCGV4cGVjdGVkEhYKBmFjdHVhbBgDIAEoDFIGYWN0dWFsIpMCCg5FY2hvU3RyZWFtVGVzdBIwCgdyZXF1ZXN0GAEgAygLMhYudGVzdC5ncnBjLkVjaG9SZXF1ZXN0UgdyZXF1ZXN0EhQKBWNvdW50GAIgASgFUgVjb3VudBIZCghkZWxheV9tcxgDIAEoBVIHZGVsYXlNcxI2CgtjYWxsX2NvbmZpZxgEIAEoCzIVLnRlc3QuZ3JwYy5DYWxsQ29uZmlnUgpjYWxsQ29uZmlnEj4KD2V4cGVjdGVkX3N0YXR1cxgFIAEoCzIVLnRlc3QuZ3JwYy5DYWxsU3RhdHVzUg5leHBlY3RlZFN0YXR1cxImCg9kdXJhdGlvbl9pbl9zZWMYBiABKAVSDWR1cmF0aW9uSW5TZWMiKAoQRWNob1N0cmVhbVJlc3VsdBIUCgVjb3VudBgBIAEoBVIFY291bnQiVwoORWNob1JlcG9ydFRlc3QSRQoHcmVxdWVzdBgBIAEoCzIrLmdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEuUmVwb3J0UmVxdWVzdFIHcmVxdWVzdCJbChBFY2hvUmVwb3J0UmVzdWx0EkcKCHJlc3BvbnNlGAEgASgLMisuZ29vZ2xlLmFwaS5zZXJ2aWNlY29udHJvbC52MS5SZXBvcnRSZXF1ZXN0UghyZXNwb25zZSK+AQoMUGFyYWxsZWxUZXN0EjYKCHN1YnRlc3RzGAEgAygLMhoudGVzdC5ncnBjLlBhcmFsbGVsU3VidGVzdFIIc3VidGVzdHMSJQoOcGFyYWxsZWxfbGltaXQYAiABKAVSDXBhcmFsbGVsTGltaXQSHQoKdGVzdF9jb3VudBgDIAEoBVIJdGVzdENvdW50EjAKFGFsbG93ZWRfZmFpbHVyZV9yYXRlGAQgASgCUhJhbGxvd2VkRmFpbHVyZVJhdGUimgEKD1BhcmFsbGVsU3VidGVzdBIWCgZ3ZWlnaHQYASABKAVSBndlaWdodBIpCgRlY2hvGAIgASgLMhMudGVzdC5ncnBjLkVjaG9UZXN0SABSBGVjaG8SPAoLZWNob19zdHJlYW0YAyABKAsyGS50ZXN0LmdycGMuRWNob1N0cmVhbVRlc3RIAFIKZWNob1N0cmVhbUIGCgRwbGFuIpUBChRBZ2dyZWdhdGVkQ2FsbFN0YXR1cxIUCgVjb3VudBgBIAEoBVIFY291bnQSHQoKc3RhcnRfdGltZRgCIAEoCVIJc3RhcnRUaW1lEhkKCGVuZF90aW1lGAMgASgJUgdlbmRUaW1lEi0KBnN0YXR1cxgEIAEoCzIVLnRlc3QuZ3JwYy5DYWxsU3RhdHVzUgZzdGF0dXMigwIKFFBhcmFsbGVsU3VidGVzdFN0YXRzEicKD3N1Y2NlZWRlZF9jb3VudBgBIAEoBVIOc3VjY2VlZGVkQ291bnQSIQoMZmFpbGVkX2NvdW50GAIgASgFUgtmYWlsZWRDb3VudBIuChNtZWFuX2xhdGVuY3lfbWljcm9zGAMgASgDUhFtZWFuTGF0ZW5jeU1pY3JvcxIyChVzdGRkZXZfbGF0ZW5jeV9taWNyb3MYBCABKANSE3N0ZGRldkxhdGVuY3lNaWNyb3MSOwoIZmFpbHVyZXMYBSADKAsyHy50ZXN0LmdycGMuQWdncmVnYXRlZENhbGxTdGF0dXNSCGZhaWx1cmVzInMKDlBhcmFsbGVsUmVzdWx0EioKEXRvdGFsX3RpbWVfbWljcm9zGAEgASgDUg90b3RhbFRpbWVNaWNyb3MSNQoFc3RhdHMYAiADKAsyHy50ZXN0LmdycGMuUGFyYWxsZWxTdWJ0ZXN0U3RhdHNSBXN0YXRzImUKElByb2JlQ2FsbExpbWl0VGVzdBIdCgp0aW1lb3V0X21zGAEgASgDUgl0aW1lb3V0TXMSMAoHcmVxdWVzdBgCIAEoCzIWLnRlc3QuZ3JwYy5FY2hvUmVxdWVzdFIHcmVxdWVzdCI1ChRQcm9iZUNhbGxMaW1pdFJlc3VsdBIdCgpjYWxsX2xpbWl0GAEgASgDUgljYWxsTGltaXQicgofUHJvYmVEb3duc3RyZWFtTWVzc2FnZUxpbWl0VGVzdBIwCgdyZXF1ZXN0GAEgASgLMhYudGVzdC5ncnBjLkVjaG9SZXF1ZXN0UgdyZXF1ZXN0Eh0KCnRpbWVvdXRfbXMYAiABKANSCXRpbWVvdXRNcyJICiFQcm9iZURvd25zdHJlYW1NZXNzYWdlTGltaXRSZXN1bHQSIwoNbWVzc2FnZV9saW1pdBgBIAEoA1IMbWVzc2FnZUxpbWl0InAKHVByb2JlVXBzdHJlYW1NZXNzYWdlTGltaXRUZXN0EjAKB3JlcXVlc3QYASABKAsyFi50ZXN0LmdycGMuRWNob1JlcXVlc3RSB3JlcXVlc3QSHQoKdGltZW91dF9tcxgCIAEoA1IJdGltZW91dE1zIkYKH1Byb2JlVXBzdHJlYW1NZXNzYWdlTGltaXRSZXN1bHQSIwoNbWVzc2FnZV9saW1pdBgBIAEoA1IMbWVzc2FnZUxpbWl0IlQKD0dycGNFcnJvckRldGFpbBIgCgtkZXNjcmlwdGlvbhgBIAEoCVILZGVzY3JpcHRpb24SHwoLaHR0cDJfZXJyb3IYAiABKAVSCmh0dHAyRXJyb3IimwQKCFRlc3RQbGFuEikKBGVjaG8YASABKAsyEy50ZXN0LmdycGMuRWNob1Rlc3RIAFIEZWNobxI8CgtlY2hvX3N0cmVhbRgCIAEoCzIZLnRlc3QuZ3JwYy5FY2hvU3RyZWFtVGVzdEgAUgplY2hvU3RyZWFtEjUKCHBhcmFsbGVsGAMgASgLMhcudGVzdC5ncnBjLlBhcmFsbGVsVGVzdEgAUghwYXJhbGxlbBJJChBwcm9iZV9jYWxsX2xpbWl0GAQgASgLMh0udGVzdC5ncnBjLlByb2JlQ2FsbExpbWl0VGVzdEgAUg5wcm9iZUNhbGxMaW1pdBJxCh5wcm9iZV9kb3duc3RyZWFtX21lc3NhZ2VfbGltaXQYBSABKAsyKi50ZXN0LmdycGMuUHJvYmVEb3duc3RyZWFtTWVzc2FnZUxpbWl0VGVzdEgAUhtwcm9iZURvd25zdHJlYW1NZXNzYWdlTGltaXQSawoccHJvYmVfdXBzdHJlYW1fbWVzc2FnZV9saW1pdBgGIAEoCzIoLnRlc3QuZ3JwYy5Qcm9iZVVwc3RyZWFtTWVzc2FnZUxpbWl0VGVzdEgAUhlwcm9iZVVwc3RyZWFtTWVzc2FnZUxpbWl0EjwKC2VjaG9fcmVwb3J0GAcgASgLMhkudGVzdC5ncnBjLkVjaG9SZXBvcnRUZXN0SABSCmVjaG9SZXBvcnRCBgoEcGxhbiKlAQoJVGVzdFBsYW5zEikKBXBsYW5zGAEgAygLMhMudGVzdC5ncnBjLlRlc3RQbGFuUgVwbGFucxIfCgtzZXJ2ZXJfYWRkchgCIAEoCVIKc2VydmVyQWRkchIfCgtkaXJlY3RfYWRkchgDIAEoCVIKZGlyZWN0QWRkchIrCgZ3YXJtdXAYBCABKAsyEy50ZXN0LmdycGMuRWNob1Rlc3RSBndhcm11cCKDBgoKVGVzdFJlc3VsdBItCgZzdGF0dXMYASABKAsyFS50ZXN0LmdycGMuQ2FsbFN0YXR1c1IGc3RhdHVzEisKBGVjaG8YAiABKAsyFS50ZXN0LmdycGMuRWNob1Jlc3VsdEgAUgRlY2hvEj4KC2VjaG9fc3RyZWFtGAMgASgLMhsudGVzdC5ncnBjLkVjaG9TdHJlYW1SZXN1bHRIAFIKZWNob1N0cmVhbRI3CghwYXJhbGxlbBgEIAEoCzIZLnRlc3QuZ3JwYy5QYXJhbGxlbFJlc3VsdEgAUghwYXJhbGxlbBJLChBwcm9iZV9jYWxsX2xpbWl0GAUgASgLMh8udGVzdC5ncnBjLlByb2JlQ2FsbExpbWl0UmVzdWx0SABSDnByb2JlQ2FsbExpbWl0EnMKHnByb2JlX2Rvd25zdHJlYW1fbWVzc2FnZV9saW1pdBgGIAEoCzIsLnRlc3QuZ3JwYy5Qcm9iZURvd25zdHJlYW1NZXNzYWdlTGltaXRSZXN1bHRIAFIbcHJvYmVEb3duc3RyZWFtTWVzc2FnZUxpbWl0Em0KHHByb2JlX3Vwc3RyZWFtX21lc3NhZ2VfbGltaXQYByABKAsyKi50ZXN0LmdycGMuUHJvYmVVcHN0cmVhbU1lc3NhZ2VMaW1pdFJlc3VsdEgAUhlwcm9iZVVwc3RyZWFtTWVzc2FnZUxpbWl0Ej4KC2VjaG9fcmVwb3J0GAggASgLMhsudGVzdC5ncnBjLkVjaG9SZXBvcnRSZXN1bHRIAFIKZWNob1JlcG9ydBJeChNhZGRpdGlvbmFsX21ldGFkYXRhGAkgAygLMi0udGVzdC5ncnBjLlRlc3RSZXN1bHQuQWRkaXRpb25hbE1ldGFkYXRhRW50cnlSEmFkZGl0aW9uYWxNZXRhZGF0YRpFChdBZGRpdGlvbmFsTWV0YWRhdGFFbnRyeRIQCgNrZXkYASABKAlSA2tleRIUCgV2YWx1ZRgCIAEoDFIFdmFsdWU6AjgBQggKBnJlc3VsdCI+CgtUZXN0UmVzdWx0cxIvCgdyZXN1bHRzGAEgAygLMhUudGVzdC5ncnBjLlRlc3RSZXN1bHRSB3Jlc3VsdHMykgQKBFRlc3QSeQoERWNobxIWLnRlc3QuZ3JwYy5FY2hvUmVxdWVzdBoXLnRlc3QuZ3JwYy5FY2hvUmVzcG9uc2UiQILT5JMCOgoTdGVzdC5ncnBjLlRlc3QuRWNobzoBKloZOgEqIhQvdGVzdC5ncnBjLlRlc3QvRWNobyIFL2VjaG8SlQEKCkVjaG9TdHJlYW0SFi50ZXN0LmdycGMuRWNob1JlcXVlc3QaFy50ZXN0LmdycGMuRWNob1Jlc3BvbnNlIlKC0+STAkwKGXRlc3QuZ3JwYy5UZXN0LkVjaG9TdHJlYW06ASpaHzoBKiIaL3Rlc3QuZ3JwYy5UZXN0L0VjaG9TdHJlYW0iCy9lY2hvc3RyZWFtKAEwARI6CgRDb3JrEhYudGVzdC5ncnBjLkNvcmtSZXF1ZXN0GhQudGVzdC5ncnBjLkNvcmtTdGF0ZSIAKAEwARK6AQoKRWNob1JlcG9ydBIrLmdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEuUmVwb3J0UmVxdWVzdBorLmdvb2dsZS5hcGkuc2VydmljZWNvbnRyb2wudjEuUmVwb3J0UmVxdWVzdCJSgtPkkwJMChl0ZXN0LmdycGMuVGVzdC5FY2hvUmVwb3J0OgEqWh86ASoiGi90ZXN0LmdycGMuVGVzdC9FY2hvUmVwb3J0IgsvZWNob3JlcG9ydGIGcHJvdG8z",
"queryParamUnescapePlus": true,
"services": [
"test.grpc.Test"
]
}
},
{
"name": "com.google.espv2.filters.http.backend_auth",
"typedConfig": {
"@type": "type.googleapis.com/espv2.api.envoy.v12.http.backend_auth.FilterConfig",
"depErrorBehavior": "BLOCK_INIT_ON_ANY_ERROR",
"imdsToken": {
"cluster": "metadata-cluster",
"timeout": "30s",
"uri": "http://169.254.169.254/computeMetadata/v1/instance/service-accounts/default/identity"
},
"jwtAudienceList": [
"https://grpc-echo-oxouww7xzq-uc.a.run.app"
]
}
},
{
"name": "com.google.espv2.filters.http.grpc_metadata_scrubber",
"typedConfig": {
"@type": "type.googleapis.com/espv2.api.envoy.v12.http.grpc_metadata_scrubber.FilterConfig"
}
},
{
"name": "envoy.filters.http.router",
"typedConfig": {
"@type": "type.googleapis.com/envoy.extensions.filters.http.router.v3.Router",
"suppressEnvoyHeaders": true
}
}
],
"httpProtocolOptions": {
"enableTrailers": true
},
"localReplyConfig": {
"bodyFormat": {
"jsonFormat": {
"code": "%RESPONSE_CODE%",
"message": "%LOCAL_REPLY_BODY%"
}
}
},
"mergeSlashes": true,
"normalizePath": true,
"pathWithEscapedSlashesAction": "KEEP_UNCHANGED",
"routeConfig": {
"name": "local_route",
"virtualHosts": [
{
"domains": [
"*"
],
"name": "backend",
"routes": [
{
"decorator": {
"operation": "ingress Echo"
},
"match": {
"headers": [
{
"name": ":method",
"stringMatch": {
"exact": "POST"
}
}
],
"path": "/echo"
},
"name": "test.grpc.Test.Echo",
"route": {
"cluster": "backend-cluster-grpc-echo-oxouww7xzq-uc.a.run.app:443",
"hostRewriteLiteral": "grpc-echo-oxouww7xzq-uc.a.run.app",
"idleTimeout": "401s",
"retryPolicy": {
"numRetries": 1,
"retryOn": "reset,connect-failure,refused-stream"
},
"timeout": "400s"
},
"typedPerFilterConfig": {
"com.google.espv2.filters.http.backend_auth": {
"@type": "type.googleapis.com/espv2.api.envoy.v12.http.backend_auth.PerRouteFilterConfig",
"jwtAudience": "https://grpc-echo-oxouww7xzq-uc.a.run.app"
},
"com.google.espv2.filters.http.service_control": {
"@type": "type.googleapis.com/espv2.api.envoy.v12.http.service_control.PerRouteFilterConfig",