From f41699a78078cb3fab94bdca7dad01b94db631f0 Mon Sep 17 00:00:00 2001 From: Tooling Builder Date: Thu, 14 Dec 2023 03:30:25 +0000 Subject: [PATCH] chore: Metadata build (updates to OpenAPI tooling metadata and site rebuild) --- docs/categories/all.html | 640 ++++++------ docs/categories/code-generators.html | 82 +- docs/categories/converters.html | 72 +- docs/categories/data-validators.html | 42 +- docs/categories/description-validators.html | 44 +- docs/categories/documentation.html | 70 +- docs/categories/dsl.html | 6 +- docs/categories/learning.html | 8 +- docs/categories/low-level-tooling.html | 16 +- docs/categories/mock-testing.html | 8 +- docs/categories/mock.html | 18 +- docs/categories/parsers.html | 188 ++-- docs/categories/sdk.html | 90 +- docs/categories/security.html | 18 +- docs/categories/server-implementations.html | 178 ++-- docs/categories/server.html | 32 +- docs/categories/testing-tools.html | 8 +- docs/categories/testing.html | 62 +- docs/categories/text-editors.html | 14 +- docs/categories/unclassified.html | 6 +- docs/categories/user-interfaces.html | 18 +- src/_data/tools.yaml | 1028 +++++++++---------- 22 files changed, 1324 insertions(+), 1324 deletions(-) diff --git a/docs/categories/all.html b/docs/categories/all.html index 68b7b935..1a9c50f4 100644 --- a/docs/categories/all.html +++ b/docs/categories/all.html @@ -86,7 +86,7 @@

No Yes No - 474 + 478 @@ -109,7 +109,7 @@

Yes Yes Yes - 1476 + 1479 @@ -132,7 +132,7 @@

Yes Yes No - 1227 + 1228 @@ -346,7 +346,7 @@

No Yes Yes - 1050 + 1051 @@ -535,7 +535,7 @@

Yes Yes Yes - 21587 + 21593 @@ -581,7 +581,7 @@

No Yes Yes - 1400 + 1402 @@ -604,7 +604,7 @@

No Yes Yes - 96 + 97 @@ -690,7 +690,7 @@

No Yes Yes - 505 + 506 @@ -713,7 +713,7 @@

No Yes No - 4585 + 4592 @@ -759,7 +759,7 @@

No Yes Yes - 18437 + 18451 @@ -805,7 +805,7 @@

No Yes Yes - 1040 + 1044 @@ -851,7 +851,7 @@

Yes Yes Yes - 26 + 27 @@ -917,7 +917,7 @@

No Yes Yes - 292 + 293 @@ -1001,7 +1001,7 @@

Yes Yes Yes - 8455 + 8456 @@ -1382,7 +1382,7 @@

Yes Yes Yes - 3830 + 3833 @@ -1428,7 +1428,7 @@

Yes Yes Yes - 1055 + 1056 @@ -1581,7 +1581,7 @@

No Yes Yes - 2964 + 2966 @@ -1696,7 +1696,7 @@

No Yes Yes - 8135 + 8141 @@ -1855,7 +1855,7 @@

No Yes Yes - 4086 + 4088 @@ -1920,7 +1920,7 @@

No Yes No - 589 + 590 @@ -1943,7 +1943,7 @@

No Yes No - 1391 + 1392 @@ -1987,7 +1987,7 @@

Yes Yes Yes - 2113 + 2114 @@ -2052,7 +2052,7 @@

Yes Yes Yes - 707 + 708 @@ -2186,7 +2186,7 @@

No Yes Yes - 1016 + 1017 @@ -2297,7 +2297,7 @@

No Yes Yes - 2189 + 2190 @@ -2362,7 +2362,7 @@

No Yes No - 214 + 215 @@ -2578,7 +2578,7 @@

No No Yes - 9026 + 9027 @@ -2693,7 +2693,7 @@

No Yes Yes - 16184 + 16187 @@ -2783,7 +2783,7 @@

Yes Yes Yes - 435 + 436 @@ -3010,7 +3010,7 @@

No Yes Yes - 385 + 386 @@ -3363,7 +3363,7 @@

Yes Yes No - 571 + 573 @@ -3405,7 +3405,7 @@

Yes Yes Yes - 811 + 812 @@ -3472,7 +3472,7 @@

No Yes Yes - 5875 + 5876 @@ -3516,7 +3516,7 @@

No Yes Yes - 11518 + 11524 @@ -3619,7 +3619,7 @@

Yes Yes No - 72 + 73 @@ -3711,7 +3711,7 @@

No Yes No - 26785 + 26793 @@ -3863,7 +3863,7 @@

No Yes No - 907 + 908 @@ -3886,7 +3886,7 @@

Yes Yes Yes - 1308 + 1309 @@ -3978,7 +3978,7 @@

Yes Yes No - 998 + 999 @@ -4108,7 +4108,7 @@

No Yes Yes - 1888 + 1894 @@ -4154,7 +4154,7 @@

Yes Yes No - 19 + 21 @@ -4221,7 +4221,7 @@

Yes Yes Yes - 325 + 326 @@ -4265,7 +4265,7 @@

Yes Yes Yes - 3919 + 3922 @@ -4288,7 +4288,7 @@

Yes Yes Yes - 214 + 215 @@ -4468,7 +4468,7 @@

No Yes No - 163 + 164 @@ -4537,7 +4537,7 @@

Yes Yes Yes - 266 + 268 @@ -4726,7 +4726,7 @@

Yes Yes Yes - 1995 + 1996 @@ -4841,7 +4841,7 @@

No Yes No - 65760 + 65808 @@ -4864,7 +4864,7 @@

Yes Yes No - 24873 + 24879 @@ -4887,7 +4887,7 @@

Yes Yes No - 21587 + 21593 @@ -4908,7 +4908,7 @@

No Yes No - 13803 + 13819 @@ -4950,7 +4950,7 @@

No Yes No - 5556 + 5559 @@ -4992,7 +4992,7 @@

Yes Yes No - 3546 + 3552 @@ -5013,7 +5013,7 @@

No Yes No - 3465 + 3468 @@ -5036,7 +5036,7 @@

No Yes No - 2923 + 2925 @@ -5078,7 +5078,7 @@

No Yes No - 2415 + 2419 @@ -5101,7 +5101,7 @@

No Yes No - 1938 + 1940 @@ -5122,7 +5122,7 @@

No Yes No - 1919 + 1920 @@ -5143,7 +5143,7 @@

No Yes No - 1894 + 1895 @@ -5164,7 +5164,7 @@

No Yes No - 1540 + 1541 @@ -5185,7 +5185,7 @@

No Yes No - 1478 + 1482 @@ -5206,7 +5206,7 @@

No Yes No - 1461 + 1462 @@ -5250,7 +5250,7 @@

No Yes No - 1181 + 1182 @@ -5271,7 +5271,7 @@

No Yes No - 1062 + 1063 @@ -5292,7 +5292,7 @@

No Yes No - 880 + 881 @@ -5313,7 +5313,7 @@

No Yes No - 857 + 861 @@ -5334,7 +5334,7 @@

No Yes No - 816 + 817 @@ -5355,7 +5355,7 @@

No Yes No - 751 + 752 @@ -5376,7 +5376,7 @@

No Yes No - 710 + 711 @@ -5523,7 +5523,7 @@

No Yes No - 519 + 520 @@ -5565,7 +5565,7 @@

No Yes No - 440 + 441 @@ -5607,7 +5607,7 @@

No Yes No - 437 + 439 @@ -5901,7 +5901,7 @@

No Yes No - 290 + 291 @@ -6008,7 +6008,7 @@

Yes Yes No - 283 + 287 @@ -6029,7 +6029,7 @@

Yes Yes No - 253 + 254 @@ -6155,7 +6155,7 @@

No Yes No - 221 + 222 @@ -6176,7 +6176,7 @@

No Yes No - 218 + 220 @@ -6642,7 +6642,7 @@

No Yes No - 163 + 164 @@ -6938,7 +6938,7 @@

No Yes No - 108 + 109 @@ -7337,7 +7337,7 @@

No Yes No - 78 + 79 @@ -7442,7 +7442,7 @@

No Yes No - 75 + 76 @@ -7568,7 +7568,7 @@

No Yes No - 65 + 66 @@ -7927,7 +7927,7 @@

No Yes No - 49 + 50 @@ -8731,7 +8731,7 @@

No Yes No - 29 + 30 @@ -9634,7 +9634,7 @@

No Yes No - 18 + 19 @@ -9771,7 +9771,7 @@

campsite-booking - This project contains the source code of a Spring Boot 3 REST API sample application. + This project contains the source code of a Spring Boot 3 REST API example application. No @@ -12141,7 +12141,7 @@

No Yes No - 7 + 8 @@ -13044,7 +13044,7 @@

No Yes No - 5 + 6 @@ -28580,7 +28580,7 @@

No No No - 3459 + 3460 @@ -29257,7 +29257,7 @@

No Yes No - 4698 + 4699 @@ -29301,7 +29301,7 @@

No Yes Yes - 2349 + 2353 @@ -30109,7 +30109,7 @@

oasdiff (link)

Stars - 474 + 478 Watchers @@ -30125,7 +30125,7 @@

oasdiff (link)

Last Updated - 2023-12-12T21:46:29Z + 2023-12-13T21:22:25Z Archived @@ -30161,7 +30161,7 @@

Scalar (link)

Stars - 1476 + 1479 Watchers @@ -30177,7 +30177,7 @@

Scalar (link)

Last Updated - 2023-12-13T03:20:52Z + 2023-12-13T17:43:08Z Archived @@ -30213,7 +30213,7 @@

optic diff (link)

Stars - 1227 + 1228 Watchers @@ -30221,7 +30221,7 @@

optic diff (link)

Forks - 66 + 68 Created @@ -30229,7 +30229,7 @@

optic diff (link)

Last Updated - 2023-12-07T02:01:02Z + 2023-12-13T14:08:20Z Archived @@ -30733,7 +30733,7 @@

LucyBot api-spec-converter (link)

Stars - 1050 + 1051 Watchers @@ -30749,7 +30749,7 @@

LucyBot api-spec-converter (link)

Last Updated - 2023-12-12T10:52:30Z + 2023-12-13T19:31:59Z Archived @@ -31201,15 +31201,15 @@

ReDoc (link)

Stars - 21587 + 21593 Watchers - 287 + 288 Forks - 2262 + 2261 Created @@ -31217,7 +31217,7 @@

ReDoc (link)

Last Updated - 2023-12-13T01:52:55Z + 2023-12-13T19:13:35Z Archived @@ -31305,7 +31305,7 @@

widdershins (link)

Stars - 1400 + 1402 Watchers @@ -31321,7 +31321,7 @@

widdershins (link)

Last Updated - 2023-12-12T15:47:56Z + 2023-12-13T12:07:25Z Archived @@ -31357,7 +31357,7 @@

MrinDoc (link)

Stars - 96 + 97 Watchers @@ -31373,7 +31373,7 @@

MrinDoc (link)

Last Updated - 2023-06-29T06:24:02Z + 2023-12-14T00:17:49Z Archived @@ -31565,7 +31565,7 @@

Spot (link)

Stars - 505 + 506 Watchers @@ -31581,7 +31581,7 @@

Spot (link)

Last Updated - 2023-12-12T20:24:51Z + 2023-12-13T17:50:38Z Archived @@ -31617,11 +31617,11 @@

OpenAPI Server Code Generator (oapi-cod Stars - 4585 + 4592 Watchers - 33 + 32 Forks @@ -31633,7 +31633,7 @@

OpenAPI Server Code Generator (oapi-cod Last Updated - 2023-12-12T23:59:32Z + 2023-12-13T13:50:16Z Archived @@ -31721,7 +31721,7 @@

OpenAPI Generator (link)

Stars - 18437 + 18451 Watchers @@ -31729,7 +31729,7 @@

OpenAPI Generator (link)

Forks - 5840 + 5844 Created @@ -31737,7 +31737,7 @@

OpenAPI Generator (link)

Last Updated - 2023-12-13T00:45:40Z + 2023-12-14T02:50:23Z Archived @@ -31825,7 +31825,7 @@

Kiota Api Client Generator (link)

Stars - 1040 + 1044 Watchers @@ -31841,7 +31841,7 @@

Kiota Api Client Generator (link)

Last Updated - 2023-12-12T10:46:55Z + 2023-12-13T16:58:54Z Archived @@ -31929,7 +31929,7 @@

Bump.sh (link)

Stars - 26 + 27 Watchers @@ -31945,7 +31945,7 @@

Bump.sh (link)

Last Updated - 2023-08-08T23:03:21Z + 2023-12-13T08:26:03Z Archived @@ -32085,7 +32085,7 @@

VSCode OpenAPI (link)

Stars - 292 + 293 Watchers @@ -32101,7 +32101,7 @@

VSCode OpenAPI (link)

Last Updated - 2023-12-12T02:05:01Z + 2023-12-13T17:16:09Z Archived @@ -32293,11 +32293,11 @@

Swagger Editor (link)

Stars - 8455 + 8456 Watchers - 259 + 258 Forks @@ -32309,7 +32309,7 @@

Swagger Editor (link)

Last Updated - 2023-12-12T06:57:52Z + 2023-12-14T03:17:40Z Archived @@ -33229,7 +33229,7 @@

Prism (link)

Stars - 3830 + 3833 Watchers @@ -33245,7 +33245,7 @@

Prism (link)

Last Updated - 2023-12-12T19:34:20Z + 2023-12-14T02:35:10Z Archived @@ -33333,7 +33333,7 @@

Microcks (link)

Stars - 1055 + 1056 Watchers @@ -33341,7 +33341,7 @@

Microcks (link)

Forks - 179 + 180 Created @@ -33349,7 +33349,7 @@

Microcks (link)

Last Updated - 2023-12-12T03:02:34Z + 2023-12-13T19:01:56Z Archived @@ -33697,7 +33697,7 @@

tsoa (link)

Stars - 2964 + 2966 Watchers @@ -33713,7 +33713,7 @@

tsoa (link)

Last Updated - 2023-12-12T07:10:41Z + 2023-12-13T20:52:04Z Archived @@ -33957,11 +33957,11 @@

API Platform (link)

Stars - 8135 + 8141 Watchers - 219 + 220 Forks @@ -33973,7 +33973,7 @@

API Platform (link)

Last Updated - 2023-12-12T15:01:38Z + 2023-12-13T19:47:02Z Archived @@ -34225,7 +34225,7 @@

@nestjs/swagger (link)

Forks - 408 + 410 Created @@ -34321,7 +34321,7 @@

Dredd (link)

Stars - 4086 + 4088 Watchers @@ -34337,7 +34337,7 @@

Dredd (link)

Last Updated - 2023-12-11T23:27:29Z + 2023-12-14T00:33:10Z Archived @@ -34477,7 +34477,7 @@

portman (link)

Stars - 589 + 590 Watchers @@ -34493,7 +34493,7 @@

portman (link)

Last Updated - 2023-12-08T12:39:54Z + 2023-12-13T04:58:06Z Archived @@ -34529,7 +34529,7 @@

Step CI (link)

Stars - 1391 + 1392 Watchers @@ -34545,7 +34545,7 @@

Step CI (link)

Last Updated - 2023-12-10T23:16:49Z + 2023-12-13T04:58:24Z Archived @@ -34633,7 +34633,7 @@

Spectral (link)

Stars - 2113 + 2114 Watchers @@ -34649,7 +34649,7 @@

Spectral (link)

Last Updated - 2023-12-12T09:06:10Z + 2023-12-13T15:38:53Z Archived @@ -34789,7 +34789,7 @@

Redocly CLI (link)

Stars - 707 + 708 Watchers @@ -34805,7 +34805,7 @@

Redocly CLI (link)

Last Updated - 2023-12-13T01:59:03Z + 2023-12-13T20:22:22Z Archived @@ -35101,7 +35101,7 @@

APIDevTools/swagger-parser (link)

Stars - 1016 + 1017 Watchers @@ -35117,7 +35117,7 @@

APIDevTools/swagger-parser (link)

Last Updated - 2023-12-06T05:58:21Z + 2023-12-13T17:54:25Z Archived @@ -35361,7 +35361,7 @@

kin-openapi (link)

Stars - 2189 + 2190 Watchers @@ -35377,7 +35377,7 @@

kin-openapi (link)

Last Updated - 2023-12-12T06:43:47Z + 2023-12-13T11:00:13Z Archived @@ -35517,7 +35517,7 @@

Object Oriented OpenAPI Specification ( Stars - 214 + 215 Watchers @@ -35533,7 +35533,7 @@

Object Oriented OpenAPI Specification ( Last Updated - 2023-10-12T08:04:32Z + 2023-12-13T12:26:58Z Archived @@ -36037,7 +36037,7 @@

go-swagger (link)

Stars - 9026 + 9027 Watchers @@ -36045,7 +36045,7 @@

go-swagger (link)

Forks - 1271 + 1270 Created @@ -36053,7 +36053,7 @@

go-swagger (link)

Last Updated - 2023-12-13T00:52:46Z + 2023-12-13T20:27:08Z Archived @@ -36149,7 +36149,7 @@

restful-react (link)

Forks - 110 + 109 Created @@ -36209,7 +36209,7 @@

NSwag (link)

Last Updated - 2023-12-12T23:46:35Z + 2023-12-13T07:05:59Z Archived @@ -36297,7 +36297,7 @@

Swagger-Codegen (link)

Stars - 16184 + 16187 Watchers @@ -36313,7 +36313,7 @@

Swagger-Codegen (link)

Last Updated - 2023-12-13T00:50:45Z + 2023-12-14T01:59:52Z Archived @@ -36505,7 +36505,7 @@

api (link)

Stars - 435 + 436 Watchers @@ -36521,7 +36521,7 @@

api (link)

Last Updated - 2023-12-05T08:33:02Z + 2023-12-13T14:22:56Z Archived @@ -37077,7 +37077,7 @@

EvoMaster (link)

Stars - 385 + 386 Watchers @@ -37093,7 +37093,7 @@

EvoMaster (link)

Last Updated - 2023-12-08T15:57:57Z + 2023-12-13T15:01:52Z Archived @@ -37301,7 +37301,7 @@

openapi-fuzzer (link)

Last Updated - 2023-12-05T10:46:36Z + 2023-12-13T21:01:31Z Archived @@ -37909,7 +37909,7 @@

Restish (link)

Stars - 571 + 573 Watchers @@ -37925,7 +37925,7 @@

Restish (link)

Last Updated - 2023-12-10T19:01:46Z + 2023-12-13T15:03:16Z Archived @@ -38013,7 +38013,7 @@

openapi-to-postman (link)

Stars - 811 + 812 Watchers @@ -38029,7 +38029,7 @@

openapi-to-postman (link)

Last Updated - 2023-12-06T10:18:09Z + 2023-12-13T11:14:30Z Archived @@ -38169,7 +38169,7 @@

SpringFox (link)

Stars - 5875 + 5876 Watchers @@ -38177,7 +38177,7 @@

SpringFox (link)

Forks - 1545 + 1546 Created @@ -38185,7 +38185,7 @@

SpringFox (link)

Last Updated - 2023-12-11T01:12:06Z + 2023-12-13T07:14:01Z Archived @@ -38273,15 +38273,15 @@

OWASP ZAP (link)

Stars - 11518 + 11524 Watchers - 399 + 400 Forks - 2169 + 2170 Created @@ -38289,7 +38289,7 @@

OWASP ZAP (link)

Last Updated - 2023-12-13T03:07:12Z + 2023-12-14T01:54:04Z Archived @@ -38533,7 +38533,7 @@

OpenAPI HttpFoundation Testing (link) Stars - 72 + 73 Watchers @@ -38549,7 +38549,7 @@

OpenAPI HttpFoundation Testing (link) Last Updated - 2023-11-29T13:28:41Z + 2023-12-14T01:06:22Z Archived @@ -38741,7 +38741,7 @@

Django REST Framework (link)

Stars - 26785 + 26793 Watchers @@ -38757,7 +38757,7 @@

Django REST Framework (link)

Last Updated - 2023-12-13T02:19:44Z + 2023-12-13T23:08:37Z Archived @@ -39105,7 +39105,7 @@

openapi-python-client (link)

Stars - 907 + 908 Watchers @@ -39121,7 +39121,7 @@

openapi-python-client (link)

Last Updated - 2023-12-12T22:27:56Z + 2023-12-14T01:52:38Z Archived @@ -39157,7 +39157,7 @@

Elements (link)

Stars - 1308 + 1309 Watchers @@ -39173,7 +39173,7 @@

Elements (link)

Last Updated - 2023-12-13T00:37:45Z + 2023-12-13T20:42:22Z Archived @@ -39365,7 +39365,7 @@

Cherrybomb (link)

Stars - 998 + 999 Watchers @@ -39381,7 +39381,7 @@

Cherrybomb (link)

Last Updated - 2023-12-13T03:08:20Z + 2023-12-13T20:48:44Z Archived @@ -39677,7 +39677,7 @@

orval (link)

Stars - 1888 + 1894 Watchers @@ -39693,7 +39693,7 @@

orval (link)

Last Updated - 2023-12-12T07:36:57Z + 2023-12-14T02:08:40Z Archived @@ -39781,7 +39781,7 @@

OpenAPI Commander (link)

Stars - 19 + 21 Watchers @@ -39789,7 +39789,7 @@

OpenAPI Commander (link)

Forks - 1 + 2 Created @@ -39797,7 +39797,7 @@

OpenAPI Commander (link)

Last Updated - 2023-11-16T00:11:17Z + 2023-12-13T15:58:51Z Archived @@ -39937,7 +39937,7 @@

vacuum (link)

Stars - 325 + 326 Watchers @@ -39953,7 +39953,7 @@

vacuum (link)

Last Updated - 2023-12-06T13:30:57Z + 2023-12-13T18:44:00Z Archived @@ -40041,7 +40041,7 @@

OpenAPI TypeScript (link)

Stars - 3919 + 3922 Watchers @@ -40049,7 +40049,7 @@

OpenAPI TypeScript (link)

Forks - 336 + 337 Created @@ -40057,7 +40057,7 @@

OpenAPI TypeScript (link)

Last Updated - 2023-12-12T17:59:04Z + 2023-12-13T22:36:26Z Archived @@ -40093,7 +40093,7 @@

libopenapi (link)

Stars - 214 + 215 Watchers @@ -40109,7 +40109,7 @@

libopenapi (link)

Last Updated - 2023-12-12T15:58:01Z + 2023-12-13T06:24:52Z Archived @@ -40509,7 +40509,7 @@

Specmatic (link)

Stars - 163 + 164 Watchers @@ -40525,7 +40525,7 @@

Specmatic (link)

Last Updated - 2023-12-12T23:07:56Z + 2023-12-13T06:54:10Z Archived @@ -40665,7 +40665,7 @@

kubb (link)

Stars - 266 + 268 Watchers @@ -40673,7 +40673,7 @@

kubb (link)

Forks - 17 + 19 Created @@ -40681,7 +40681,7 @@

kubb (link)

Last Updated - 2023-12-11T11:37:01Z + 2023-12-13T20:18:13Z Archived @@ -41133,7 +41133,7 @@

🌿 Fern (link)

Stars - 1995 + 1996 Watchers @@ -41149,7 +41149,7 @@

🌿 Fern (link)

Last Updated - 2023-12-12T18:58:32Z + 2023-12-13T14:53:35Z Archived @@ -41393,7 +41393,7 @@

FastAPI (link)

Stars - 65760 + 65808 Watchers @@ -41401,7 +41401,7 @@

FastAPI (link)

Forks - 5558 + 5559 Created @@ -41409,7 +41409,7 @@

FastAPI (link)

Last Updated - 2023-12-13T02:51:13Z + 2023-12-14T03:10:02Z Archived @@ -41445,7 +41445,7 @@

swagger-ui (link)

Stars - 24873 + 24879 Watchers @@ -41453,7 +41453,7 @@

swagger-ui (link)

Forks - 8841 + 8842 Created @@ -41461,7 +41461,7 @@

swagger-ui (link)

Last Updated - 2023-12-12T21:27:52Z + 2023-12-14T01:20:27Z Archived @@ -41497,15 +41497,15 @@

Redoc (link)

Stars - 21587 + 21593 Watchers - 287 + 288 Forks - 2262 + 2261 Created @@ -41513,7 +41513,7 @@

Redoc (link)

Last Updated - 2023-12-13T01:52:55Z + 2023-12-13T19:13:35Z Archived @@ -41549,7 +41549,7 @@

full-stack-fastapi-postgresql (link) Stars - 13803 + 13819 Watchers @@ -41557,7 +41557,7 @@

full-stack-fastapi-postgresql (link) Forks - 2485 + 2487 Created @@ -41565,7 +41565,7 @@

full-stack-fastapi-postgresql (link) Last Updated - 2023-12-13T02:42:49Z + 2023-12-14T02:55:27Z Archived @@ -41609,7 +41609,7 @@

swagger-core (link)

Forks - 2163 + 2164 Created @@ -41653,7 +41653,7 @@

mockoon (link)

Stars - 5556 + 5559 Watchers @@ -41669,7 +41669,7 @@

mockoon (link)

Last Updated - 2023-12-12T09:53:18Z + 2023-12-13T23:59:44Z Archived @@ -41757,7 +41757,7 @@

openapi-devtools (link)

Stars - 3546 + 3552 Watchers @@ -41773,7 +41773,7 @@

openapi-devtools (link)

Last Updated - 2023-12-13T01:02:49Z + 2023-12-13T17:26:48Z Archived @@ -41809,7 +41809,7 @@

openapi-directory (link)

Stars - 3465 + 3468 Watchers @@ -41817,7 +41817,7 @@

openapi-directory (link)

Forks - 571 + 570 Created @@ -41825,7 +41825,7 @@

openapi-directory (link)

Last Updated - 2023-12-13T00:51:00Z + 2023-12-13T23:35:16Z Archived @@ -41861,7 +41861,7 @@

springdoc-openapi (link)

Stars - 2923 + 2925 Watchers @@ -41877,7 +41877,7 @@

springdoc-openapi (link)

Last Updated - 2023-12-12T02:41:31Z + 2023-12-13T11:09:46Z Archived @@ -41965,7 +41965,7 @@

uvicorn-gunicorn-fastapi-docker (link)< Stars - 2415 + 2419 Watchers @@ -41973,7 +41973,7 @@

uvicorn-gunicorn-fastapi-docker (link)< Forks - 313 + 314 Created @@ -41981,7 +41981,7 @@

uvicorn-gunicorn-fastapi-docker (link)< Last Updated - 2023-12-11T22:48:55Z + 2023-12-14T00:08:51Z Archived @@ -42017,7 +42017,7 @@

Schemathesis (link)

Stars - 1938 + 1940 Watchers @@ -42025,7 +42025,7 @@

Schemathesis (link)

Forks - 143 + 144 Created @@ -42033,7 +42033,7 @@

Schemathesis (link)

Last Updated - 2023-12-12T19:02:19Z + 2023-12-14T02:13:06Z Archived @@ -42069,7 +42069,7 @@

drf-spectacular (link)

Stars - 1919 + 1920 Watchers @@ -42085,7 +42085,7 @@

drf-spectacular (link)

Last Updated - 2023-12-12T14:21:49Z + 2023-12-13T14:53:11Z Archived @@ -42121,7 +42121,7 @@

gnostic (link)

Stars - 1894 + 1895 Watchers @@ -42137,7 +42137,7 @@

gnostic (link)

Last Updated - 2023-12-12T06:28:36Z + 2023-12-13T09:35:14Z Archived @@ -42173,7 +42173,7 @@

utoipa (link)

Stars - 1540 + 1541 Watchers @@ -42189,7 +42189,7 @@

utoipa (link)

Last Updated - 2023-12-12T14:14:43Z + 2023-12-13T20:48:37Z Archived @@ -42225,7 +42225,7 @@

msgspec (link)

Stars - 1478 + 1482 Watchers @@ -42241,7 +42241,7 @@

msgspec (link)

Last Updated - 2023-12-12T22:07:50Z + 2023-12-13T14:22:03Z Archived @@ -42277,7 +42277,7 @@

rapidoc (link)

Stars - 1461 + 1462 Watchers @@ -42285,7 +42285,7 @@

rapidoc (link)

Forks - 261 + 262 Created @@ -42293,7 +42293,7 @@

rapidoc (link)

Last Updated - 2023-12-09T01:47:42Z + 2023-12-13T10:22:42Z Archived @@ -42381,7 +42381,7 @@

openapi-generator-cli (link)

Stars - 1181 + 1182 Watchers @@ -42389,7 +42389,7 @@

openapi-generator-cli (link)

Forks - 132 + 133 Created @@ -42397,7 +42397,7 @@

openapi-generator-cli (link)

Last Updated - 2023-12-12T02:09:08Z + 2023-12-13T21:07:03Z Archived @@ -42433,7 +42433,7 @@

apispec (link)

Stars - 1062 + 1063 Watchers @@ -42449,7 +42449,7 @@

apispec (link)

Last Updated - 2023-11-30T14:04:15Z + 2023-12-13T20:39:56Z Archived @@ -42485,7 +42485,7 @@

apiflask (link)

Stars - 880 + 881 Watchers @@ -42501,7 +42501,7 @@

apiflask (link)

Last Updated - 2023-12-13T02:13:27Z + 2023-12-13T06:29:42Z Archived @@ -42537,7 +42537,7 @@

ogen (link)

Stars - 857 + 861 Watchers @@ -42553,7 +42553,7 @@

ogen (link)

Last Updated - 2023-12-12T01:52:35Z + 2023-12-14T00:52:43Z Archived @@ -42589,7 +42589,7 @@

typespec (link)

Stars - 816 + 817 Watchers @@ -42597,7 +42597,7 @@

typespec (link)

Forks - 104 + 105 Created @@ -42605,7 +42605,7 @@

typespec (link)

Last Updated - 2023-12-12T22:35:12Z + 2023-12-13T20:07:01Z Archived @@ -42641,7 +42641,7 @@

studio (link)

Stars - 751 + 752 Watchers @@ -42657,7 +42657,7 @@

studio (link)

Last Updated - 2023-12-08T13:24:21Z + 2023-12-13T16:00:43Z Archived @@ -42693,7 +42693,7 @@

json-schema-validator (link)

Stars - 710 + 711 Watchers @@ -42709,7 +42709,7 @@

json-schema-validator (link)

Last Updated - 2023-12-08T09:12:27Z + 2023-12-13T12:13:56Z Archived @@ -43057,11 +43057,11 @@

zod-to-openapi (link)

Stars - 519 + 520 Watchers - 9 + 10 Forks @@ -43073,7 +43073,7 @@

zod-to-openapi (link)

Last Updated - 2023-12-12T11:34:11Z + 2023-12-13T16:05:42Z Archived @@ -43161,7 +43161,7 @@

ghlocalapi (link)

Stars - 440 + 441 Watchers @@ -43177,7 +43177,7 @@

ghlocalapi (link)

Last Updated - 2023-12-10T18:13:11Z + 2023-12-13T08:01:34Z Archived @@ -43217,11 +43217,11 @@

docusaurus-openapi (link)

Watchers - 8 + 9 Forks - 74 + 75 Created @@ -43265,7 +43265,7 @@

openapi-mock (link)

Stars - 437 + 439 Watchers @@ -43281,7 +43281,7 @@

openapi-mock (link)

Last Updated - 2023-12-09T05:28:47Z + 2023-12-14T03:06:07Z Archived @@ -43993,7 +43993,7 @@

openapi-codegen (link)

Stars - 290 + 291 Watchers @@ -44001,7 +44001,7 @@

openapi-codegen (link)

Forks - 46 + 47 Created @@ -44009,7 +44009,7 @@

openapi-codegen (link)

Last Updated - 2023-11-17T15:10:02Z + 2023-12-14T01:59:08Z Archived @@ -44105,7 +44105,7 @@

beacon-apis (link)

Forks - 171 + 172 Created @@ -44253,7 +44253,7 @@

huma (link)

Stars - 283 + 287 Watchers @@ -44261,7 +44261,7 @@

huma (link)

Forks - 33 + 34 Created @@ -44269,7 +44269,7 @@

huma (link)

Last Updated - 2023-12-12T21:09:13Z + 2023-12-13T19:56:03Z Archived @@ -44305,7 +44305,7 @@

openapi-core (link)

Stars - 253 + 254 Watchers @@ -44321,7 +44321,7 @@

openapi-core (link)

Last Updated - 2023-12-10T06:58:43Z + 2023-12-13T09:22:53Z Archived @@ -44617,7 +44617,7 @@

modelina (link)

Stars - 221 + 222 Watchers @@ -44633,7 +44633,7 @@

modelina (link)

Last Updated - 2023-12-12T19:26:36Z + 2023-12-13T19:10:37Z Archived @@ -44669,7 +44669,7 @@

fastapi-clean-example (link)

Stars - 218 + 220 Watchers @@ -44685,7 +44685,7 @@

fastapi-clean-example (link)

Last Updated - 2023-12-12T05:57:52Z + 2023-12-13T20:31:07Z Archived @@ -45193,7 +45193,7 @@

openapi.net.odata (link)

Watchers - 31 + 30 Forks @@ -45613,7 +45613,7 @@

itty-router-openapi (link)

Forks - 26 + 27 Created @@ -45813,7 +45813,7 @@

openapi-go (link)

Stars - 163 + 164 Watchers @@ -45829,7 +45829,7 @@

openapi-go (link)

Last Updated - 2023-12-09T18:57:16Z + 2023-12-13T07:21:40Z Archived @@ -45977,7 +45977,7 @@

keycloak-openapi (link)

Forks - 69 + 68 Created @@ -46541,7 +46541,7 @@

speakeasy (link)

Stars - 108 + 109 Watchers @@ -46557,7 +46557,7 @@

speakeasy (link)

Last Updated - 2023-12-08T12:40:12Z + 2023-12-13T04:58:25Z Archived @@ -47529,7 +47529,7 @@

awesome-jsonschema (link)

Stars - 78 + 79 Watchers @@ -47545,7 +47545,7 @@

awesome-jsonschema (link)

Last Updated - 2023-12-06T11:30:52Z + 2023-12-13T05:13:07Z Archived @@ -47789,7 +47789,7 @@

paypal-rest-api-specifications (link) Stars - 75 + 76 Watchers @@ -47805,7 +47805,7 @@

paypal-rest-api-specifications (link) Last Updated - 2023-12-11T16:16:01Z + 2023-12-13T16:44:10Z Archived @@ -48101,7 +48101,7 @@

openapi-to-plantuml (link)

Stars - 65 + 66 Watchers @@ -48117,7 +48117,7 @@

openapi-to-plantuml (link)

Last Updated - 2023-12-08T12:56:40Z + 2023-12-13T09:12:57Z Archived @@ -48985,7 +48985,7 @@

amala (link)

Stars - 49 + 50 Watchers @@ -49001,7 +49001,7 @@

amala (link)

Last Updated - 2023-12-11T22:21:23Z + 2023-12-13T06:36:06Z Archived @@ -49313,7 +49313,7 @@

openapi-tf-example (link)

Last Updated - 2023-10-01T18:20:38Z + 2023-12-13T18:22:55Z Archived @@ -50961,7 +50961,7 @@

serverless-openapi-documenter (link) Stars - 29 + 30 Watchers @@ -50977,7 +50977,7 @@

serverless-openapi-documenter (link) Last Updated - 2023-11-15T16:24:26Z + 2023-12-14T00:50:36Z Archived @@ -51341,7 +51341,7 @@

full-stack-fastapi-mysql (link)

Last Updated - 2023-11-13T10:18:29Z + 2023-12-14T00:48:02Z Archived @@ -52733,7 +52733,7 @@

bingchain (link)

Watchers - 6 + 7 Forks @@ -53197,7 +53197,7 @@

openapi-php (link)

Stars - 18 + 19 Watchers @@ -53213,7 +53213,7 @@

openapi-php (link)

Last Updated - 2023-05-11T20:00:26Z + 2023-12-14T00:20:13Z Archived @@ -53577,7 +53577,7 @@

campsite-booking (link)

Last Updated - 2023-12-04T11:55:57Z + 2023-12-13T13:25:53Z Archived @@ -59385,7 +59385,7 @@

karate-intellij-plugin (link)

Stars - 7 + 8 Watchers @@ -59401,7 +59401,7 @@

karate-intellij-plugin (link)

Last Updated - 2023-10-14T02:57:25Z + 2023-12-13T16:09:28Z Archived @@ -61621,7 +61621,7 @@

openapi-overlays-js (link)

Stars - 5 + 6 Watchers @@ -61629,7 +61629,7 @@

openapi-overlays-js (link)

Forks - 1 + 2 Created @@ -61637,7 +61637,7 @@

openapi-overlays-js (link)

Last Updated - 2023-06-03T18:02:06Z + 2023-12-13T16:35:09Z Archived @@ -71621,7 +71621,7 @@

iwlz-indicatie (link)

Last Updated - 2023-04-26T09:02:11Z + 2023-12-13T10:57:54Z Archived @@ -99277,7 +99277,7 @@

swagger-models (link)

Forks - 2163 + 2164 Created @@ -100101,7 +100101,7 @@

PHP-CRUD-API (link)

Stars - 3459 + 3460 Watchers @@ -100109,7 +100109,7 @@

PHP-CRUD-API (link)

Forks - 1030 + 1031 Created @@ -100117,7 +100117,7 @@

PHP-CRUD-API (link)

Last Updated - 2023-12-11T14:09:08Z + 2023-12-13T22:56:24Z Archived @@ -101713,7 +101713,7 @@

LoopBack 4 (link)

Stars - 4698 + 4699 Watchers @@ -101721,7 +101721,7 @@

LoopBack 4 (link)

Forks - 1046 + 1045 Created @@ -101729,7 +101729,7 @@

LoopBack 4 (link)

Last Updated - 2023-12-13T02:38:33Z + 2023-12-13T04:59:37Z Archived @@ -101817,7 +101817,7 @@

RESTler (link)

Stars - 2349 + 2353 Watchers @@ -101833,7 +101833,7 @@

RESTler (link)

Last Updated - 2023-12-12T01:39:03Z + 2023-12-13T13:04:49Z Archived diff --git a/docs/categories/code-generators.html b/docs/categories/code-generators.html index 48e3a4a0..5cb98aa4 100644 --- a/docs/categories/code-generators.html +++ b/docs/categories/code-generators.html @@ -86,7 +86,7 @@

No Yes No - 4585 + 4592 @@ -132,7 +132,7 @@

No Yes Yes - 18437 + 18451 @@ -178,7 +178,7 @@

No Yes Yes - 1040 + 1044 @@ -266,7 +266,7 @@

No Yes Yes - 16184 + 16187 @@ -335,7 +335,7 @@

No Yes Yes - 1888 + 1894 @@ -358,7 +358,7 @@

Yes Yes No - 19 + 21 @@ -381,7 +381,7 @@

Yes Yes Yes - 266 + 268 @@ -404,7 +404,7 @@

Yes Yes Yes - 1995 + 1996 @@ -427,7 +427,7 @@

Yes Yes No - 24873 + 24879 @@ -490,7 +490,7 @@

No Yes No - 1181 + 1182 @@ -597,7 +597,7 @@

No Yes No - 75 + 76 @@ -2028,11 +2028,11 @@

OpenAPI Server Code Generator (oapi-cod Stars - 4585 + 4592 Watchers - 33 + 32 Forks @@ -2044,7 +2044,7 @@

OpenAPI Server Code Generator (oapi-cod Last Updated - 2023-12-12T23:59:32Z + 2023-12-13T13:50:16Z Archived @@ -2132,7 +2132,7 @@

OpenAPI Generator (link)

Stars - 18437 + 18451 Watchers @@ -2140,7 +2140,7 @@

OpenAPI Generator (link)

Forks - 5840 + 5844 Created @@ -2148,7 +2148,7 @@

OpenAPI Generator (link)

Last Updated - 2023-12-13T00:45:40Z + 2023-12-14T02:50:23Z Archived @@ -2236,7 +2236,7 @@

Kiota Api Client Generator (link)

Stars - 1040 + 1044 Watchers @@ -2252,7 +2252,7 @@

Kiota Api Client Generator (link)

Last Updated - 2023-12-12T10:46:55Z + 2023-12-13T16:58:54Z Archived @@ -2444,7 +2444,7 @@

Swagger-Codegen (link)

Stars - 16184 + 16187 Watchers @@ -2460,7 +2460,7 @@

Swagger-Codegen (link)

Last Updated - 2023-12-13T00:50:45Z + 2023-12-14T01:59:52Z Archived @@ -2600,7 +2600,7 @@

orval (link)

Stars - 1888 + 1894 Watchers @@ -2616,7 +2616,7 @@

orval (link)

Last Updated - 2023-12-12T07:36:57Z + 2023-12-14T02:08:40Z Archived @@ -2652,7 +2652,7 @@

OpenAPI Commander (link)

Stars - 19 + 21 Watchers @@ -2660,7 +2660,7 @@

OpenAPI Commander (link)

Forks - 1 + 2 Created @@ -2668,7 +2668,7 @@

OpenAPI Commander (link)

Last Updated - 2023-11-16T00:11:17Z + 2023-12-13T15:58:51Z Archived @@ -2704,7 +2704,7 @@

kubb (link)

Stars - 266 + 268 Watchers @@ -2712,7 +2712,7 @@

kubb (link)

Forks - 17 + 19 Created @@ -2720,7 +2720,7 @@

kubb (link)

Last Updated - 2023-12-11T11:37:01Z + 2023-12-13T20:18:13Z Archived @@ -2756,7 +2756,7 @@

🌿 Fern (link)

Stars - 1995 + 1996 Watchers @@ -2772,7 +2772,7 @@

🌿 Fern (link)

Last Updated - 2023-12-12T18:58:32Z + 2023-12-13T14:53:35Z Archived @@ -2808,7 +2808,7 @@

swagger-ui (link)

Stars - 24873 + 24879 Watchers @@ -2816,7 +2816,7 @@

swagger-ui (link)

Forks - 8841 + 8842 Created @@ -2824,7 +2824,7 @@

swagger-ui (link)

Last Updated - 2023-12-12T21:27:52Z + 2023-12-14T01:20:27Z Archived @@ -2868,7 +2868,7 @@

swagger-core (link)

Forks - 2163 + 2164 Created @@ -2964,7 +2964,7 @@

openapi-generator-cli (link)

Stars - 1181 + 1182 Watchers @@ -2972,7 +2972,7 @@

openapi-generator-cli (link)

Forks - 132 + 133 Created @@ -2980,7 +2980,7 @@

openapi-generator-cli (link)

Last Updated - 2023-12-12T02:09:08Z + 2023-12-13T21:07:03Z Archived @@ -3224,7 +3224,7 @@

paypal-rest-api-specifications (link) Stars - 75 + 76 Watchers @@ -3240,7 +3240,7 @@

paypal-rest-api-specifications (link) Last Updated - 2023-12-11T16:16:01Z + 2023-12-13T16:44:10Z Archived @@ -6144,7 +6144,7 @@

swagger-models (link)

Forks - 2163 + 2164 Created diff --git a/docs/categories/converters.html b/docs/categories/converters.html index df8845ac..3e2dd87c 100644 --- a/docs/categories/converters.html +++ b/docs/categories/converters.html @@ -216,7 +216,7 @@

No Yes Yes - 1050 + 1051 @@ -239,7 +239,7 @@

No Yes No - 589 + 590 @@ -262,7 +262,7 @@

No Yes No - 1391 + 1392 @@ -285,7 +285,7 @@

No No Yes - 9026 + 9027 @@ -331,7 +331,7 @@

Yes Yes Yes - 435 + 436 @@ -440,7 +440,7 @@

Yes Yes Yes - 811 + 812 @@ -486,7 +486,7 @@

No Yes No - 907 + 908 @@ -532,7 +532,7 @@

Yes Yes Yes - 3919 + 3922 @@ -618,7 +618,7 @@

No Yes No - 1894 + 1895 @@ -660,7 +660,7 @@

No Yes No - 290 + 291 @@ -702,7 +702,7 @@

No Yes No - 78 + 79 @@ -1446,7 +1446,7 @@

LucyBot api-spec-converter (link)

Stars - 1050 + 1051 Watchers @@ -1462,7 +1462,7 @@

LucyBot api-spec-converter (link)

Last Updated - 2023-12-12T10:52:30Z + 2023-12-13T19:31:59Z Archived @@ -1498,7 +1498,7 @@

portman (link)

Stars - 589 + 590 Watchers @@ -1514,7 +1514,7 @@

portman (link)

Last Updated - 2023-12-08T12:39:54Z + 2023-12-13T04:58:06Z Archived @@ -1550,7 +1550,7 @@

Step CI (link)

Stars - 1391 + 1392 Watchers @@ -1566,7 +1566,7 @@

Step CI (link)

Last Updated - 2023-12-10T23:16:49Z + 2023-12-13T04:58:24Z Archived @@ -1602,7 +1602,7 @@

go-swagger (link)

Stars - 9026 + 9027 Watchers @@ -1610,7 +1610,7 @@

go-swagger (link)

Forks - 1271 + 1270 Created @@ -1618,7 +1618,7 @@

go-swagger (link)

Last Updated - 2023-12-13T00:52:46Z + 2023-12-13T20:27:08Z Archived @@ -1706,7 +1706,7 @@

api (link)

Stars - 435 + 436 Watchers @@ -1722,7 +1722,7 @@

api (link)

Last Updated - 2023-12-05T08:33:02Z + 2023-12-13T14:22:56Z Archived @@ -1966,7 +1966,7 @@

openapi-to-postman (link)

Stars - 811 + 812 Watchers @@ -1982,7 +1982,7 @@

openapi-to-postman (link)

Last Updated - 2023-12-06T10:18:09Z + 2023-12-13T11:14:30Z Archived @@ -2070,7 +2070,7 @@

openapi-python-client (link)

Stars - 907 + 908 Watchers @@ -2086,7 +2086,7 @@

openapi-python-client (link)

Last Updated - 2023-12-12T22:27:56Z + 2023-12-14T01:52:38Z Archived @@ -2174,7 +2174,7 @@

OpenAPI TypeScript (link)

Stars - 3919 + 3922 Watchers @@ -2182,7 +2182,7 @@

OpenAPI TypeScript (link)

Forks - 336 + 337 Created @@ -2190,7 +2190,7 @@

OpenAPI TypeScript (link)

Last Updated - 2023-12-12T17:59:04Z + 2023-12-13T22:36:26Z Archived @@ -2382,7 +2382,7 @@

gnostic (link)

Stars - 1894 + 1895 Watchers @@ -2398,7 +2398,7 @@

gnostic (link)

Last Updated - 2023-12-12T06:28:36Z + 2023-12-13T09:35:14Z Archived @@ -2486,7 +2486,7 @@

openapi-codegen (link)

Stars - 290 + 291 Watchers @@ -2494,7 +2494,7 @@

openapi-codegen (link)

Forks - 46 + 47 Created @@ -2502,7 +2502,7 @@

openapi-codegen (link)

Last Updated - 2023-11-17T15:10:02Z + 2023-12-14T01:59:08Z Archived @@ -2590,7 +2590,7 @@

awesome-jsonschema (link)

Stars - 78 + 79 Watchers @@ -2606,7 +2606,7 @@

awesome-jsonschema (link)

Last Updated - 2023-12-06T11:30:52Z + 2023-12-13T05:13:07Z Archived diff --git a/docs/categories/data-validators.html b/docs/categories/data-validators.html index d3284c0a..1096bce1 100644 --- a/docs/categories/data-validators.html +++ b/docs/categories/data-validators.html @@ -86,7 +86,7 @@

No Yes Yes - 2964 + 2966 @@ -130,7 +130,7 @@

No Yes No - 1391 + 1392 @@ -241,7 +241,7 @@

No Yes Yes - 2189 + 2190 @@ -348,7 +348,7 @@

Yes Yes No - 72 + 73 @@ -440,7 +440,7 @@

Yes Yes Yes - 325 + 326 @@ -574,7 +574,7 @@

Yes Yes No - 253 + 254 @@ -805,7 +805,7 @@

No Yes No - 18 + 19 @@ -1810,7 +1810,7 @@

tsoa (link)

Stars - 2964 + 2966 Watchers @@ -1826,7 +1826,7 @@

tsoa (link)

Last Updated - 2023-12-12T07:10:41Z + 2023-12-13T20:52:04Z Archived @@ -1914,7 +1914,7 @@

Step CI (link)

Stars - 1391 + 1392 Watchers @@ -1930,7 +1930,7 @@

Step CI (link)

Last Updated - 2023-12-10T23:16:49Z + 2023-12-13T04:58:24Z Archived @@ -2174,7 +2174,7 @@

kin-openapi (link)

Stars - 2189 + 2190 Watchers @@ -2190,7 +2190,7 @@

kin-openapi (link)

Last Updated - 2023-12-12T06:43:47Z + 2023-12-13T11:00:13Z Archived @@ -2434,7 +2434,7 @@

OpenAPI HttpFoundation Testing (link) Stars - 72 + 73 Watchers @@ -2450,7 +2450,7 @@

OpenAPI HttpFoundation Testing (link) Last Updated - 2023-11-29T13:28:41Z + 2023-12-14T01:06:22Z Archived @@ -2642,7 +2642,7 @@

vacuum (link)

Stars - 325 + 326 Watchers @@ -2658,7 +2658,7 @@

vacuum (link)

Last Updated - 2023-12-06T13:30:57Z + 2023-12-13T18:44:00Z Archived @@ -2954,7 +2954,7 @@

openapi-core (link)

Stars - 253 + 254 Watchers @@ -2970,7 +2970,7 @@

openapi-core (link)

Last Updated - 2023-12-10T06:58:43Z + 2023-12-13T09:22:53Z Archived @@ -3526,7 +3526,7 @@

openapi-php (link)

Stars - 18 + 19 Watchers @@ -3542,7 +3542,7 @@

openapi-php (link)

Last Updated - 2023-05-11T20:00:26Z + 2023-12-14T00:20:13Z Archived diff --git a/docs/categories/description-validators.html b/docs/categories/description-validators.html index 68d198fa..c806d97c 100644 --- a/docs/categories/description-validators.html +++ b/docs/categories/description-validators.html @@ -128,7 +128,7 @@

Yes Yes Yes - 2113 + 2114 @@ -193,7 +193,7 @@

Yes Yes Yes - 707 + 708 @@ -260,7 +260,7 @@

Yes Yes Yes - 435 + 436 @@ -346,7 +346,7 @@

Yes Yes No - 998 + 999 @@ -369,7 +369,7 @@

Yes Yes Yes - 325 + 326 @@ -436,7 +436,7 @@

No Yes No - 751 + 752 @@ -499,7 +499,7 @@

No Yes No - 437 + 439 @@ -1604,7 +1604,7 @@

Spectral (link)

Stars - 2113 + 2114 Watchers @@ -1620,7 +1620,7 @@

Spectral (link)

Last Updated - 2023-12-12T09:06:10Z + 2023-12-13T15:38:53Z Archived @@ -1760,7 +1760,7 @@

Redocly CLI (link)

Stars - 707 + 708 Watchers @@ -1776,7 +1776,7 @@

Redocly CLI (link)

Last Updated - 2023-12-13T01:59:03Z + 2023-12-13T20:22:22Z Archived @@ -1916,7 +1916,7 @@

api (link)

Stars - 435 + 436 Watchers @@ -1932,7 +1932,7 @@

api (link)

Last Updated - 2023-12-05T08:33:02Z + 2023-12-13T14:22:56Z Archived @@ -2124,7 +2124,7 @@

Cherrybomb (link)

Stars - 998 + 999 Watchers @@ -2140,7 +2140,7 @@

Cherrybomb (link)

Last Updated - 2023-12-13T03:08:20Z + 2023-12-13T20:48:44Z Archived @@ -2176,7 +2176,7 @@

vacuum (link)

Stars - 325 + 326 Watchers @@ -2192,7 +2192,7 @@

vacuum (link)

Last Updated - 2023-12-06T13:30:57Z + 2023-12-13T18:44:00Z Archived @@ -2332,7 +2332,7 @@

studio (link)

Stars - 751 + 752 Watchers @@ -2348,7 +2348,7 @@

studio (link)

Last Updated - 2023-12-08T13:24:21Z + 2023-12-13T16:00:43Z Archived @@ -2488,7 +2488,7 @@

openapi-mock (link)

Stars - 437 + 439 Watchers @@ -2504,7 +2504,7 @@

openapi-mock (link)

Last Updated - 2023-12-09T05:28:47Z + 2023-12-14T03:06:07Z Archived @@ -2764,7 +2764,7 @@

openapi-tf-example (link)

Last Updated - 2023-10-01T18:20:38Z + 2023-12-13T18:22:55Z Archived diff --git a/docs/categories/documentation.html b/docs/categories/documentation.html index b1cea139..a1810a9a 100644 --- a/docs/categories/documentation.html +++ b/docs/categories/documentation.html @@ -86,7 +86,7 @@

Yes Yes Yes - 1476 + 1479 @@ -275,7 +275,7 @@

Yes Yes Yes - 21587 + 21593 @@ -321,7 +321,7 @@

No Yes Yes - 1400 + 1402 @@ -344,7 +344,7 @@

No Yes Yes - 96 + 97 @@ -432,7 +432,7 @@

Yes Yes Yes - 26 + 27 @@ -496,7 +496,7 @@

Yes Yes Yes - 707 + 708 @@ -540,7 +540,7 @@

Yes Yes No - 571 + 573 @@ -582,7 +582,7 @@

Yes Yes Yes - 1308 + 1309 @@ -796,7 +796,7 @@

Yes Yes Yes - 1995 + 1996 @@ -840,7 +840,7 @@

No Yes No - 1461 + 1462 @@ -2022,7 +2022,7 @@

Scalar (link)

Stars - 1476 + 1479 Watchers @@ -2038,7 +2038,7 @@

Scalar (link)

Last Updated - 2023-12-13T03:20:52Z + 2023-12-13T17:43:08Z Archived @@ -2490,15 +2490,15 @@

ReDoc (link)

Stars - 21587 + 21593 Watchers - 287 + 288 Forks - 2262 + 2261 Created @@ -2506,7 +2506,7 @@

ReDoc (link)

Last Updated - 2023-12-13T01:52:55Z + 2023-12-13T19:13:35Z Archived @@ -2594,7 +2594,7 @@

widdershins (link)

Stars - 1400 + 1402 Watchers @@ -2610,7 +2610,7 @@

widdershins (link)

Last Updated - 2023-12-12T15:47:56Z + 2023-12-13T12:07:25Z Archived @@ -2646,7 +2646,7 @@

MrinDoc (link)

Stars - 96 + 97 Watchers @@ -2662,7 +2662,7 @@

MrinDoc (link)

Last Updated - 2023-06-29T06:24:02Z + 2023-12-14T00:17:49Z Archived @@ -2854,7 +2854,7 @@

Bump.sh (link)

Stars - 26 + 27 Watchers @@ -2870,7 +2870,7 @@

Bump.sh (link)

Last Updated - 2023-08-08T23:03:21Z + 2023-12-13T08:26:03Z Archived @@ -3010,7 +3010,7 @@

Redocly CLI (link)

Stars - 707 + 708 Watchers @@ -3026,7 +3026,7 @@

Redocly CLI (link)

Last Updated - 2023-12-13T01:59:03Z + 2023-12-13T20:22:22Z Archived @@ -3114,7 +3114,7 @@

Restish (link)

Stars - 571 + 573 Watchers @@ -3130,7 +3130,7 @@

Restish (link)

Last Updated - 2023-12-10T19:01:46Z + 2023-12-13T15:03:16Z Archived @@ -3218,7 +3218,7 @@

Elements (link)

Stars - 1308 + 1309 Watchers @@ -3234,7 +3234,7 @@

Elements (link)

Last Updated - 2023-12-13T00:37:45Z + 2023-12-13T20:42:22Z Archived @@ -3738,7 +3738,7 @@

🌿 Fern (link)

Stars - 1995 + 1996 Watchers @@ -3754,7 +3754,7 @@

🌿 Fern (link)

Last Updated - 2023-12-12T18:58:32Z + 2023-12-13T14:53:35Z Archived @@ -3842,7 +3842,7 @@

rapidoc (link)

Stars - 1461 + 1462 Watchers @@ -3850,7 +3850,7 @@

rapidoc (link)

Forks - 261 + 262 Created @@ -3858,7 +3858,7 @@

rapidoc (link)

Last Updated - 2023-12-09T01:47:42Z + 2023-12-13T10:22:42Z Archived @@ -3902,7 +3902,7 @@

beacon-apis (link)

Forks - 171 + 172 Created @@ -5262,7 +5262,7 @@

iwlz-indicatie (link)

Last Updated - 2023-04-26T09:02:11Z + 2023-12-13T10:57:54Z Archived diff --git a/docs/categories/dsl.html b/docs/categories/dsl.html index d1d2e321..de071f77 100644 --- a/docs/categories/dsl.html +++ b/docs/categories/dsl.html @@ -122,7 +122,7 @@

No Yes Yes - 505 + 506 @@ -389,7 +389,7 @@

Spot (link)

Stars - 505 + 506 Watchers @@ -405,7 +405,7 @@

Spot (link)

Last Updated - 2023-12-12T20:24:51Z + 2023-12-13T17:50:38Z Archived diff --git a/docs/categories/learning.html b/docs/categories/learning.html index eed6aa89..d40fb18b 100644 --- a/docs/categories/learning.html +++ b/docs/categories/learning.html @@ -86,7 +86,7 @@

Yes Yes No - 1227 + 1228 @@ -318,7 +318,7 @@

optic diff (link)

Stars - 1227 + 1228 Watchers @@ -326,7 +326,7 @@

optic diff (link)

Forks - 66 + 68 Created @@ -334,7 +334,7 @@

optic diff (link)

Last Updated - 2023-12-07T02:01:02Z + 2023-12-13T14:08:20Z Archived diff --git a/docs/categories/low-level-tooling.html b/docs/categories/low-level-tooling.html index a7bcfc6e..b608d742 100644 --- a/docs/categories/low-level-tooling.html +++ b/docs/categories/low-level-tooling.html @@ -86,7 +86,7 @@

No Yes No - 2923 + 2925 @@ -151,7 +151,7 @@

No Yes No - 163 + 164 @@ -1498,7 +1498,7 @@

springdoc-openapi (link)

Stars - 2923 + 2925 Watchers @@ -1514,7 +1514,7 @@

springdoc-openapi (link)

Last Updated - 2023-12-12T02:41:31Z + 2023-12-13T11:09:46Z Archived @@ -1606,7 +1606,7 @@

openapi.net.odata (link)

Watchers - 31 + 30 Forks @@ -1654,7 +1654,7 @@

openapi-go (link)

Stars - 163 + 164 Watchers @@ -1670,7 +1670,7 @@

openapi-go (link)

Last Updated - 2023-12-09T18:57:16Z + 2023-12-13T07:21:40Z Archived @@ -4574,7 +4574,7 @@

swagger-models (link)

Forks - 2163 + 2164 Created diff --git a/docs/categories/mock-testing.html b/docs/categories/mock-testing.html index 8ce545f5..49251b61 100644 --- a/docs/categories/mock-testing.html +++ b/docs/categories/mock-testing.html @@ -86,7 +86,7 @@

Yes Yes Yes - 1055 + 1056 @@ -140,7 +140,7 @@

Microcks (link)

Stars - 1055 + 1056 Watchers @@ -148,7 +148,7 @@

Microcks (link)

Forks - 179 + 180 Created @@ -156,7 +156,7 @@

Microcks (link)

Last Updated - 2023-12-12T03:02:34Z + 2023-12-13T19:01:56Z Archived diff --git a/docs/categories/mock.html b/docs/categories/mock.html index fb9c6fa3..63264508 100644 --- a/docs/categories/mock.html +++ b/docs/categories/mock.html @@ -125,7 +125,7 @@

Yes Yes Yes - 3830 + 3833 @@ -345,7 +345,7 @@

No Yes Yes - 1888 + 1894 @@ -412,7 +412,7 @@

No Yes No - 163 + 164 @@ -828,7 +828,7 @@

Prism (link)

Stars - 3830 + 3833 Watchers @@ -844,7 +844,7 @@

Prism (link)

Last Updated - 2023-12-12T19:34:20Z + 2023-12-14T02:35:10Z Archived @@ -1348,7 +1348,7 @@

orval (link)

Stars - 1888 + 1894 Watchers @@ -1364,7 +1364,7 @@

orval (link)

Last Updated - 2023-12-12T07:36:57Z + 2023-12-14T02:08:40Z Archived @@ -1504,7 +1504,7 @@

Specmatic (link)

Stars - 163 + 164 Watchers @@ -1520,7 +1520,7 @@

Specmatic (link)

Last Updated - 2023-12-12T23:07:56Z + 2023-12-13T06:54:10Z Archived diff --git a/docs/categories/parsers.html b/docs/categories/parsers.html index eebac301..5eaacbee 100644 --- a/docs/categories/parsers.html +++ b/docs/categories/parsers.html @@ -86,7 +86,7 @@

No Yes No - 474 + 478 @@ -174,7 +174,7 @@

Yes Yes Yes - 21587 + 21593 @@ -220,7 +220,7 @@

No Yes Yes - 1400 + 1402 @@ -264,7 +264,7 @@

No Yes Yes - 505 + 506 @@ -287,7 +287,7 @@

No Yes No - 4585 + 4592 @@ -538,7 +538,7 @@

No Yes Yes - 2964 + 2966 @@ -628,7 +628,7 @@

Yes Yes Yes - 707 + 708 @@ -695,7 +695,7 @@

No Yes Yes - 1016 + 1017 @@ -806,7 +806,7 @@

No Yes Yes - 2189 + 2190 @@ -850,7 +850,7 @@

No Yes No - 214 + 215 @@ -1005,7 +1005,7 @@

No No Yes - 9026 + 9027 @@ -1074,7 +1074,7 @@

Yes Yes Yes - 435 + 436 @@ -1298,7 +1298,7 @@

Yes Yes Yes - 811 + 812 @@ -1430,7 +1430,7 @@

No Yes No - 907 + 908 @@ -1545,7 +1545,7 @@

Yes Yes No - 19 + 21 @@ -1591,7 +1591,7 @@

Yes Yes Yes - 214 + 215 @@ -1794,7 +1794,7 @@

Yes Yes No - 21587 + 21593 @@ -1815,7 +1815,7 @@

No Yes No - 1540 + 1541 @@ -1836,7 +1836,7 @@

No Yes No - 1062 + 1063 @@ -1857,7 +1857,7 @@

No Yes No - 857 + 861 @@ -1878,7 +1878,7 @@

No Yes No - 710 + 711 @@ -1983,7 +1983,7 @@

No Yes No - 519 + 520 @@ -2004,7 +2004,7 @@

No Yes No - 437 + 439 @@ -2172,7 +2172,7 @@

Yes Yes No - 253 + 254 @@ -2365,7 +2365,7 @@

No Yes No - 163 + 164 @@ -2535,7 +2535,7 @@

No Yes No - 108 + 109 @@ -3400,7 +3400,7 @@

No Yes No - 29 + 30 @@ -5149,7 +5149,7 @@

No Yes No - 5 + 6 @@ -10156,7 +10156,7 @@

oasdiff (link)

Stars - 474 + 478 Watchers @@ -10172,7 +10172,7 @@

oasdiff (link)

Last Updated - 2023-12-12T21:46:29Z + 2023-12-13T21:22:25Z Archived @@ -10364,15 +10364,15 @@

ReDoc (link)

Stars - 21587 + 21593 Watchers - 287 + 288 Forks - 2262 + 2261 Created @@ -10380,7 +10380,7 @@

ReDoc (link)

Last Updated - 2023-12-13T01:52:55Z + 2023-12-13T19:13:35Z Archived @@ -10468,7 +10468,7 @@

widdershins (link)

Stars - 1400 + 1402 Watchers @@ -10484,7 +10484,7 @@

widdershins (link)

Last Updated - 2023-12-12T15:47:56Z + 2023-12-13T12:07:25Z Archived @@ -10572,7 +10572,7 @@

Spot (link)

Stars - 505 + 506 Watchers @@ -10588,7 +10588,7 @@

Spot (link)

Last Updated - 2023-12-12T20:24:51Z + 2023-12-13T17:50:38Z Archived @@ -10624,11 +10624,11 @@

OpenAPI Server Code Generator (oapi-cod Stars - 4585 + 4592 Watchers - 33 + 32 Forks @@ -10640,7 +10640,7 @@

OpenAPI Server Code Generator (oapi-cod Last Updated - 2023-12-12T23:59:32Z + 2023-12-13T13:50:16Z Archived @@ -11196,7 +11196,7 @@

tsoa (link)

Stars - 2964 + 2966 Watchers @@ -11212,7 +11212,7 @@

tsoa (link)

Last Updated - 2023-12-12T07:10:41Z + 2023-12-13T20:52:04Z Archived @@ -11404,7 +11404,7 @@

Redocly CLI (link)

Stars - 707 + 708 Watchers @@ -11420,7 +11420,7 @@

Redocly CLI (link)

Last Updated - 2023-12-13T01:59:03Z + 2023-12-13T20:22:22Z Archived @@ -11560,7 +11560,7 @@

APIDevTools/swagger-parser (link)

Stars - 1016 + 1017 Watchers @@ -11576,7 +11576,7 @@

APIDevTools/swagger-parser (link)

Last Updated - 2023-12-06T05:58:21Z + 2023-12-13T17:54:25Z Archived @@ -11820,7 +11820,7 @@

kin-openapi (link)

Stars - 2189 + 2190 Watchers @@ -11836,7 +11836,7 @@

kin-openapi (link)

Last Updated - 2023-12-12T06:43:47Z + 2023-12-13T11:00:13Z Archived @@ -11924,7 +11924,7 @@

Object Oriented OpenAPI Specification ( Stars - 214 + 215 Watchers @@ -11940,7 +11940,7 @@

Object Oriented OpenAPI Specification ( Last Updated - 2023-10-12T08:04:32Z + 2023-12-13T12:26:58Z Archived @@ -12288,7 +12288,7 @@

go-swagger (link)

Stars - 9026 + 9027 Watchers @@ -12296,7 +12296,7 @@

go-swagger (link)

Forks - 1271 + 1270 Created @@ -12304,7 +12304,7 @@

go-swagger (link)

Last Updated - 2023-12-13T00:52:46Z + 2023-12-13T20:27:08Z Archived @@ -12444,7 +12444,7 @@

api (link)

Stars - 435 + 436 Watchers @@ -12460,7 +12460,7 @@

api (link)

Last Updated - 2023-12-05T08:33:02Z + 2023-12-13T14:22:56Z Archived @@ -12964,7 +12964,7 @@

openapi-to-postman (link)

Stars - 811 + 812 Watchers @@ -12980,7 +12980,7 @@

openapi-to-postman (link)

Last Updated - 2023-12-06T10:18:09Z + 2023-12-13T11:14:30Z Archived @@ -13276,7 +13276,7 @@

openapi-python-client (link)

Stars - 907 + 908 Watchers @@ -13292,7 +13292,7 @@

openapi-python-client (link)

Last Updated - 2023-12-12T22:27:56Z + 2023-12-14T01:52:38Z Archived @@ -13536,7 +13536,7 @@

OpenAPI Commander (link)

Stars - 19 + 21 Watchers @@ -13544,7 +13544,7 @@

OpenAPI Commander (link)

Forks - 1 + 2 Created @@ -13552,7 +13552,7 @@

OpenAPI Commander (link)

Last Updated - 2023-11-16T00:11:17Z + 2023-12-13T15:58:51Z Archived @@ -13640,7 +13640,7 @@

libopenapi (link)

Stars - 214 + 215 Watchers @@ -13656,7 +13656,7 @@

libopenapi (link)

Last Updated - 2023-12-12T15:58:01Z + 2023-12-13T06:24:52Z Archived @@ -14108,15 +14108,15 @@

Redoc (link)

Stars - 21587 + 21593 Watchers - 287 + 288 Forks - 2262 + 2261 Created @@ -14124,7 +14124,7 @@

Redoc (link)

Last Updated - 2023-12-13T01:52:55Z + 2023-12-13T19:13:35Z Archived @@ -14160,7 +14160,7 @@

utoipa (link)

Stars - 1540 + 1541 Watchers @@ -14176,7 +14176,7 @@

utoipa (link)

Last Updated - 2023-12-12T14:14:43Z + 2023-12-13T20:48:37Z Archived @@ -14212,7 +14212,7 @@

apispec (link)

Stars - 1062 + 1063 Watchers @@ -14228,7 +14228,7 @@

apispec (link)

Last Updated - 2023-11-30T14:04:15Z + 2023-12-13T20:39:56Z Archived @@ -14264,7 +14264,7 @@

ogen (link)

Stars - 857 + 861 Watchers @@ -14280,7 +14280,7 @@

ogen (link)

Last Updated - 2023-12-12T01:52:35Z + 2023-12-14T00:52:43Z Archived @@ -14316,7 +14316,7 @@

json-schema-validator (link)

Stars - 710 + 711 Watchers @@ -14332,7 +14332,7 @@

json-schema-validator (link)

Last Updated - 2023-12-08T09:12:27Z + 2023-12-13T12:13:56Z Archived @@ -14576,11 +14576,11 @@

zod-to-openapi (link)

Stars - 519 + 520 Watchers - 9 + 10 Forks @@ -14592,7 +14592,7 @@

zod-to-openapi (link)

Last Updated - 2023-12-12T11:34:11Z + 2023-12-13T16:05:42Z Archived @@ -14628,7 +14628,7 @@

openapi-mock (link)

Stars - 437 + 439 Watchers @@ -14644,7 +14644,7 @@

openapi-mock (link)

Last Updated - 2023-12-09T05:28:47Z + 2023-12-14T03:06:07Z Archived @@ -15044,7 +15044,7 @@

openapi-core (link)

Stars - 253 + 254 Watchers @@ -15060,7 +15060,7 @@

openapi-core (link)

Last Updated - 2023-12-10T06:58:43Z + 2023-12-13T09:22:53Z Archived @@ -15360,7 +15360,7 @@

openapi.net.odata (link)

Watchers - 31 + 30 Forks @@ -15512,7 +15512,7 @@

openapi-go (link)

Stars - 163 + 164 Watchers @@ -15528,7 +15528,7 @@

openapi-go (link)

Last Updated - 2023-12-09T18:57:16Z + 2023-12-13T07:21:40Z Archived @@ -15928,7 +15928,7 @@

speakeasy (link)

Stars - 108 + 109 Watchers @@ -15944,7 +15944,7 @@

speakeasy (link)

Last Updated - 2023-12-08T12:40:12Z + 2023-12-13T04:58:25Z Archived @@ -18060,7 +18060,7 @@

serverless-openapi-documenter (link) Stars - 29 + 30 Watchers @@ -18076,7 +18076,7 @@

serverless-openapi-documenter (link) Last Updated - 2023-11-15T16:24:26Z + 2023-12-14T00:50:36Z Archived @@ -22376,7 +22376,7 @@

openapi-overlays-js (link)

Stars - 5 + 6 Watchers @@ -22384,7 +22384,7 @@

openapi-overlays-js (link)

Forks - 1 + 2 Created @@ -22392,7 +22392,7 @@

openapi-overlays-js (link)

Last Updated - 2023-06-03T18:02:06Z + 2023-12-13T16:35:09Z Archived diff --git a/docs/categories/sdk.html b/docs/categories/sdk.html index c7a956c3..bbde9fb7 100644 --- a/docs/categories/sdk.html +++ b/docs/categories/sdk.html @@ -109,7 +109,7 @@

No Yes Yes - 18437 + 18451 @@ -155,7 +155,7 @@

No Yes Yes - 1040 + 1044 @@ -224,7 +224,7 @@

Yes Yes Yes - 1055 + 1056 @@ -308,7 +308,7 @@

No No Yes - 9026 + 9027 @@ -532,7 +532,7 @@

No Yes Yes - 11518 + 11524 @@ -624,7 +624,7 @@

Yes Yes No - 19 + 21 @@ -670,7 +670,7 @@

Yes Yes Yes - 3919 + 3922 @@ -758,7 +758,7 @@

Yes Yes Yes - 1995 + 1996 @@ -800,7 +800,7 @@

No Yes No - 3465 + 3468 @@ -821,7 +821,7 @@

No Yes No - 440 + 441 @@ -1010,7 +1010,7 @@

No Yes No - 65 + 66 @@ -2926,7 +2926,7 @@

OpenAPI Generator (link)

Stars - 18437 + 18451 Watchers @@ -2934,7 +2934,7 @@

OpenAPI Generator (link)

Forks - 5840 + 5844 Created @@ -2942,7 +2942,7 @@

OpenAPI Generator (link)

Last Updated - 2023-12-13T00:45:40Z + 2023-12-14T02:50:23Z Archived @@ -3030,7 +3030,7 @@

Kiota Api Client Generator (link)

Stars - 1040 + 1044 Watchers @@ -3046,7 +3046,7 @@

Kiota Api Client Generator (link)

Last Updated - 2023-12-12T10:46:55Z + 2023-12-13T16:58:54Z Archived @@ -3186,7 +3186,7 @@

Microcks (link)

Stars - 1055 + 1056 Watchers @@ -3194,7 +3194,7 @@

Microcks (link)

Forks - 179 + 180 Created @@ -3202,7 +3202,7 @@

Microcks (link)

Last Updated - 2023-12-12T03:02:34Z + 2023-12-13T19:01:56Z Archived @@ -3394,7 +3394,7 @@

go-swagger (link)

Stars - 9026 + 9027 Watchers @@ -3402,7 +3402,7 @@

go-swagger (link)

Forks - 1271 + 1270 Created @@ -3410,7 +3410,7 @@

go-swagger (link)

Last Updated - 2023-12-13T00:52:46Z + 2023-12-13T20:27:08Z Archived @@ -3506,7 +3506,7 @@

restful-react (link)

Forks - 110 + 109 Created @@ -3566,7 +3566,7 @@

NSwag (link)

Last Updated - 2023-12-12T23:46:35Z + 2023-12-13T07:05:59Z Archived @@ -3914,15 +3914,15 @@

OWASP ZAP (link)

Stars - 11518 + 11524 Watchers - 399 + 400 Forks - 2169 + 2170 Created @@ -3930,7 +3930,7 @@

OWASP ZAP (link)

Last Updated - 2023-12-13T03:07:12Z + 2023-12-14T01:54:04Z Archived @@ -4122,7 +4122,7 @@

OpenAPI Commander (link)

Stars - 19 + 21 Watchers @@ -4130,7 +4130,7 @@

OpenAPI Commander (link)

Forks - 1 + 2 Created @@ -4138,7 +4138,7 @@

OpenAPI Commander (link)

Last Updated - 2023-11-16T00:11:17Z + 2023-12-13T15:58:51Z Archived @@ -4226,7 +4226,7 @@

OpenAPI TypeScript (link)

Stars - 3919 + 3922 Watchers @@ -4234,7 +4234,7 @@

OpenAPI TypeScript (link)

Forks - 336 + 337 Created @@ -4242,7 +4242,7 @@

OpenAPI TypeScript (link)

Last Updated - 2023-12-12T17:59:04Z + 2023-12-13T22:36:26Z Archived @@ -4434,7 +4434,7 @@

🌿 Fern (link)

Stars - 1995 + 1996 Watchers @@ -4450,7 +4450,7 @@

🌿 Fern (link)

Last Updated - 2023-12-12T18:58:32Z + 2023-12-13T14:53:35Z Archived @@ -4538,7 +4538,7 @@

openapi-directory (link)

Stars - 3465 + 3468 Watchers @@ -4546,7 +4546,7 @@

openapi-directory (link)

Forks - 571 + 570 Created @@ -4554,7 +4554,7 @@

openapi-directory (link)

Last Updated - 2023-12-13T00:51:00Z + 2023-12-13T23:35:16Z Archived @@ -4590,7 +4590,7 @@

ghlocalapi (link)

Stars - 440 + 441 Watchers @@ -4606,7 +4606,7 @@

ghlocalapi (link)

Last Updated - 2023-12-10T18:13:11Z + 2023-12-13T08:01:34Z Archived @@ -4646,11 +4646,11 @@

docusaurus-openapi (link)

Watchers - 8 + 9 Forks - 74 + 75 Created @@ -5058,7 +5058,7 @@

openapi-to-plantuml (link)

Stars - 65 + 66 Watchers @@ -5074,7 +5074,7 @@

openapi-to-plantuml (link)

Last Updated - 2023-12-08T12:56:40Z + 2023-12-13T09:12:57Z Archived diff --git a/docs/categories/security.html b/docs/categories/security.html index cb43c39b..714f092f 100644 --- a/docs/categories/security.html +++ b/docs/categories/security.html @@ -212,7 +212,7 @@

No Yes Yes - 11518 + 11524 @@ -298,7 +298,7 @@

No Yes Yes - 2349 + 2353 @@ -524,7 +524,7 @@

openapi-fuzzer (link)

Last Updated - 2023-12-05T10:46:36Z + 2023-12-13T21:01:31Z Archived @@ -664,15 +664,15 @@

OWASP ZAP (link)

Stars - 11518 + 11524 Watchers - 399 + 400 Forks - 2169 + 2170 Created @@ -680,7 +680,7 @@

OWASP ZAP (link)

Last Updated - 2023-12-13T03:07:12Z + 2023-12-14T01:54:04Z Archived @@ -872,7 +872,7 @@

RESTler (link)

Stars - 2349 + 2353 Watchers @@ -888,7 +888,7 @@

RESTler (link)

Last Updated - 2023-12-12T01:39:03Z + 2023-12-13T13:04:49Z Archived diff --git a/docs/categories/server-implementations.html b/docs/categories/server-implementations.html index 175cd3ff..4878db38 100644 --- a/docs/categories/server-implementations.html +++ b/docs/categories/server-implementations.html @@ -86,7 +86,7 @@

Yes Yes No - 1227 + 1228 @@ -178,7 +178,7 @@

Yes Yes Yes - 26 + 27 @@ -224,7 +224,7 @@

No Yes Yes - 292 + 293 @@ -247,7 +247,7 @@

Yes Yes Yes - 8455 + 8456 @@ -293,7 +293,7 @@

Yes Yes Yes - 3830 + 3833 @@ -339,7 +339,7 @@

No Yes Yes - 8135 + 8141 @@ -519,7 +519,7 @@

No Yes No - 26785 + 26793 @@ -611,7 +611,7 @@

No Yes No - 65760 + 65808 @@ -632,7 +632,7 @@

No Yes No - 13803 + 13819 @@ -653,7 +653,7 @@

Yes Yes No - 3546 + 3552 @@ -676,7 +676,7 @@

No Yes No - 2923 + 2925 @@ -697,7 +697,7 @@

No Yes No - 2415 + 2419 @@ -720,7 +720,7 @@

No Yes No - 1938 + 1940 @@ -741,7 +741,7 @@

No Yes No - 1919 + 1920 @@ -762,7 +762,7 @@

No Yes No - 1478 + 1482 @@ -783,7 +783,7 @@

No Yes No - 1461 + 1462 @@ -827,7 +827,7 @@

No Yes No - 880 + 881 @@ -848,7 +848,7 @@

No Yes No - 816 + 817 @@ -869,7 +869,7 @@

No Yes No - 751 + 752 @@ -1060,7 +1060,7 @@

Yes Yes No - 283 + 287 @@ -1123,7 +1123,7 @@

No Yes No - 218 + 220 @@ -1480,7 +1480,7 @@

No Yes No - 49 + 50 @@ -2035,7 +2035,7 @@

campsite-booking - This project contains the source code of a Spring Boot 3 REST API sample application. + This project contains the source code of a Spring Boot 3 REST API example application. No @@ -9508,7 +9508,7 @@

No No No - 3459 + 3460 @@ -10013,7 +10013,7 @@

optic diff (link)

Stars - 1227 + 1228 Watchers @@ -10021,7 +10021,7 @@

optic diff (link)

Forks - 66 + 68 Created @@ -10029,7 +10029,7 @@

optic diff (link)

Last Updated - 2023-12-07T02:01:02Z + 2023-12-13T14:08:20Z Archived @@ -10221,7 +10221,7 @@

Bump.sh (link)

Stars - 26 + 27 Watchers @@ -10237,7 +10237,7 @@

Bump.sh (link)

Last Updated - 2023-08-08T23:03:21Z + 2023-12-13T08:26:03Z Archived @@ -10325,7 +10325,7 @@

VSCode OpenAPI (link)

Stars - 292 + 293 Watchers @@ -10341,7 +10341,7 @@

VSCode OpenAPI (link)

Last Updated - 2023-12-12T02:05:01Z + 2023-12-13T17:16:09Z Archived @@ -10377,11 +10377,11 @@

Swagger Editor (link)

Stars - 8455 + 8456 Watchers - 259 + 258 Forks @@ -10393,7 +10393,7 @@

Swagger Editor (link)

Last Updated - 2023-12-12T06:57:52Z + 2023-12-14T03:17:40Z Archived @@ -10481,7 +10481,7 @@

Prism (link)

Stars - 3830 + 3833 Watchers @@ -10497,7 +10497,7 @@

Prism (link)

Last Updated - 2023-12-12T19:34:20Z + 2023-12-14T02:35:10Z Archived @@ -10585,11 +10585,11 @@

API Platform (link)

Stars - 8135 + 8141 Watchers - 219 + 220 Forks @@ -10601,7 +10601,7 @@

API Platform (link)

Last Updated - 2023-12-12T15:01:38Z + 2023-12-13T19:47:02Z Archived @@ -10809,7 +10809,7 @@

openapi-fuzzer (link)

Last Updated - 2023-12-05T10:46:36Z + 2023-12-13T21:01:31Z Archived @@ -11001,7 +11001,7 @@

Django REST Framework (link)

Stars - 26785 + 26793 Watchers @@ -11017,7 +11017,7 @@

Django REST Framework (link)

Last Updated - 2023-12-13T02:19:44Z + 2023-12-13T23:08:37Z Archived @@ -11209,7 +11209,7 @@

FastAPI (link)

Stars - 65760 + 65808 Watchers @@ -11217,7 +11217,7 @@

FastAPI (link)

Forks - 5558 + 5559 Created @@ -11225,7 +11225,7 @@

FastAPI (link)

Last Updated - 2023-12-13T02:51:13Z + 2023-12-14T03:10:02Z Archived @@ -11261,7 +11261,7 @@

full-stack-fastapi-postgresql (link) Stars - 13803 + 13819 Watchers @@ -11269,7 +11269,7 @@

full-stack-fastapi-postgresql (link) Forks - 2485 + 2487 Created @@ -11277,7 +11277,7 @@

full-stack-fastapi-postgresql (link) Last Updated - 2023-12-13T02:42:49Z + 2023-12-14T02:55:27Z Archived @@ -11313,7 +11313,7 @@

openapi-devtools (link)

Stars - 3546 + 3552 Watchers @@ -11329,7 +11329,7 @@

openapi-devtools (link)

Last Updated - 2023-12-13T01:02:49Z + 2023-12-13T17:26:48Z Archived @@ -11365,7 +11365,7 @@

springdoc-openapi (link)

Stars - 2923 + 2925 Watchers @@ -11381,7 +11381,7 @@

springdoc-openapi (link)

Last Updated - 2023-12-12T02:41:31Z + 2023-12-13T11:09:46Z Archived @@ -11417,7 +11417,7 @@

uvicorn-gunicorn-fastapi-docker (link)< Stars - 2415 + 2419 Watchers @@ -11425,7 +11425,7 @@

uvicorn-gunicorn-fastapi-docker (link)< Forks - 313 + 314 Created @@ -11433,7 +11433,7 @@

uvicorn-gunicorn-fastapi-docker (link)< Last Updated - 2023-12-11T22:48:55Z + 2023-12-14T00:08:51Z Archived @@ -11469,7 +11469,7 @@

Schemathesis (link)

Stars - 1938 + 1940 Watchers @@ -11477,7 +11477,7 @@

Schemathesis (link)

Forks - 143 + 144 Created @@ -11485,7 +11485,7 @@

Schemathesis (link)

Last Updated - 2023-12-12T19:02:19Z + 2023-12-14T02:13:06Z Archived @@ -11521,7 +11521,7 @@

drf-spectacular (link)

Stars - 1919 + 1920 Watchers @@ -11537,7 +11537,7 @@

drf-spectacular (link)

Last Updated - 2023-12-12T14:21:49Z + 2023-12-13T14:53:11Z Archived @@ -11573,7 +11573,7 @@

msgspec (link)

Stars - 1478 + 1482 Watchers @@ -11589,7 +11589,7 @@

msgspec (link)

Last Updated - 2023-12-12T22:07:50Z + 2023-12-13T14:22:03Z Archived @@ -11625,7 +11625,7 @@

rapidoc (link)

Stars - 1461 + 1462 Watchers @@ -11633,7 +11633,7 @@

rapidoc (link)

Forks - 261 + 262 Created @@ -11641,7 +11641,7 @@

rapidoc (link)

Last Updated - 2023-12-09T01:47:42Z + 2023-12-13T10:22:42Z Archived @@ -11729,7 +11729,7 @@

apiflask (link)

Stars - 880 + 881 Watchers @@ -11745,7 +11745,7 @@

apiflask (link)

Last Updated - 2023-12-13T02:13:27Z + 2023-12-13T06:29:42Z Archived @@ -11781,7 +11781,7 @@

typespec (link)

Stars - 816 + 817 Watchers @@ -11789,7 +11789,7 @@

typespec (link)

Forks - 104 + 105 Created @@ -11797,7 +11797,7 @@

typespec (link)

Last Updated - 2023-12-12T22:35:12Z + 2023-12-13T20:07:01Z Archived @@ -11833,7 +11833,7 @@

studio (link)

Stars - 751 + 752 Watchers @@ -11849,7 +11849,7 @@

studio (link)

Last Updated - 2023-12-08T13:24:21Z + 2023-12-13T16:00:43Z Archived @@ -12153,7 +12153,7 @@

beacon-apis (link)

Forks - 171 + 172 Created @@ -12301,7 +12301,7 @@

huma (link)

Stars - 283 + 287 Watchers @@ -12309,7 +12309,7 @@

huma (link)

Forks - 33 + 34 Created @@ -12317,7 +12317,7 @@

huma (link)

Last Updated - 2023-12-12T21:09:13Z + 2023-12-13T19:56:03Z Archived @@ -12457,7 +12457,7 @@

fastapi-clean-example (link)

Stars - 218 + 220 Watchers @@ -12473,7 +12473,7 @@

fastapi-clean-example (link)

Last Updated - 2023-12-12T05:57:52Z + 2023-12-13T20:31:07Z Archived @@ -12673,7 +12673,7 @@

itty-router-openapi (link)

Forks - 26 + 27 Created @@ -12725,7 +12725,7 @@

keycloak-openapi (link)

Forks - 69 + 68 Created @@ -13341,7 +13341,7 @@

amala (link)

Stars - 49 + 50 Watchers @@ -13357,7 +13357,7 @@

amala (link)

Last Updated - 2023-12-11T22:21:23Z + 2023-12-13T06:36:06Z Archived @@ -13513,7 +13513,7 @@

openapi-tf-example (link)

Last Updated - 2023-10-01T18:20:38Z + 2023-12-13T18:22:55Z Archived @@ -14085,7 +14085,7 @@

full-stack-fastapi-mysql (link)

Last Updated - 2023-11-13T10:18:29Z + 2023-12-14T00:48:02Z Archived @@ -14593,7 +14593,7 @@

bingchain (link)

Watchers - 6 + 7 Forks @@ -14761,7 +14761,7 @@

campsite-booking (link)

Last Updated - 2023-12-04T11:55:57Z + 2023-12-13T13:25:53Z Archived @@ -33205,7 +33205,7 @@

PHP-CRUD-API (link)

Stars - 3459 + 3460 Watchers @@ -33213,7 +33213,7 @@

PHP-CRUD-API (link)

Forks - 1030 + 1031 Created @@ -33221,7 +33221,7 @@

PHP-CRUD-API (link)

Last Updated - 2023-12-11T14:09:08Z + 2023-12-13T22:56:24Z Archived diff --git a/docs/categories/server.html b/docs/categories/server.html index 71ea9c06..563babdb 100644 --- a/docs/categories/server.html +++ b/docs/categories/server.html @@ -86,7 +86,7 @@

No Yes Yes - 2964 + 2966 @@ -201,7 +201,7 @@

No Yes Yes - 8135 + 8141 @@ -405,7 +405,7 @@

No Yes Yes - 5875 + 5876 @@ -2584,7 +2584,7 @@

No Yes No - 4698 + 4699 @@ -2705,7 +2705,7 @@

tsoa (link)

Stars - 2964 + 2966 Watchers @@ -2721,7 +2721,7 @@

tsoa (link)

Last Updated - 2023-12-12T07:10:41Z + 2023-12-13T20:52:04Z Archived @@ -2965,11 +2965,11 @@

API Platform (link)

Stars - 8135 + 8141 Watchers - 219 + 220 Forks @@ -2981,7 +2981,7 @@

API Platform (link)

Last Updated - 2023-12-12T15:01:38Z + 2023-12-13T19:47:02Z Archived @@ -3233,7 +3233,7 @@

@nestjs/swagger (link)

Forks - 408 + 410 Created @@ -3433,7 +3433,7 @@

SpringFox (link)

Stars - 5875 + 5876 Watchers @@ -3441,7 +3441,7 @@

SpringFox (link)

Forks - 1545 + 1546 Created @@ -3449,7 +3449,7 @@

SpringFox (link)

Last Updated - 2023-12-11T01:12:06Z + 2023-12-13T07:14:01Z Archived @@ -8789,7 +8789,7 @@

LoopBack 4 (link)

Stars - 4698 + 4699 Watchers @@ -8797,7 +8797,7 @@

LoopBack 4 (link)

Forks - 1046 + 1045 Created @@ -8805,7 +8805,7 @@

LoopBack 4 (link)

Last Updated - 2023-12-13T02:38:33Z + 2023-12-13T04:59:37Z Archived diff --git a/docs/categories/testing-tools.html b/docs/categories/testing-tools.html index 78e7f461..13fb00e3 100644 --- a/docs/categories/testing-tools.html +++ b/docs/categories/testing-tools.html @@ -109,7 +109,7 @@

No Yes No - 1938 + 1940 @@ -238,7 +238,7 @@

Schemathesis (link)

Stars - 1938 + 1940 Watchers @@ -246,7 +246,7 @@

Schemathesis (link)

Forks - 143 + 144 Created @@ -254,7 +254,7 @@

Schemathesis (link)

Last Updated - 2023-12-12T19:02:19Z + 2023-12-14T02:13:06Z Archived diff --git a/docs/categories/testing.html b/docs/categories/testing.html index 63f98ced..5e4ccd68 100644 --- a/docs/categories/testing.html +++ b/docs/categories/testing.html @@ -105,7 +105,7 @@

No Yes Yes - 4086 + 4088 @@ -149,7 +149,7 @@

No Yes No - 589 + 590 @@ -172,7 +172,7 @@

No Yes No - 1391 + 1392 @@ -336,7 +336,7 @@

No Yes Yes - 385 + 386 @@ -359,7 +359,7 @@

Yes Yes No - 571 + 573 @@ -622,7 +622,7 @@

No Yes No - 163 + 164 @@ -691,7 +691,7 @@

Yes Yes Yes - 266 + 268 @@ -735,7 +735,7 @@

No Yes No - 5556 + 5559 @@ -1197,7 +1197,7 @@

No Yes No - 7 + 8 @@ -2532,7 +2532,7 @@

No Yes Yes - 2349 + 2353 @@ -2678,7 +2678,7 @@

Dredd (link)

Stars - 4086 + 4088 Watchers @@ -2694,7 +2694,7 @@

Dredd (link)

Last Updated - 2023-12-11T23:27:29Z + 2023-12-14T00:33:10Z Archived @@ -2782,7 +2782,7 @@

portman (link)

Stars - 589 + 590 Watchers @@ -2798,7 +2798,7 @@

portman (link)

Last Updated - 2023-12-08T12:39:54Z + 2023-12-13T04:58:06Z Archived @@ -2834,7 +2834,7 @@

Step CI (link)

Stars - 1391 + 1392 Watchers @@ -2850,7 +2850,7 @@

Step CI (link)

Last Updated - 2023-12-10T23:16:49Z + 2023-12-13T04:58:24Z Archived @@ -3250,7 +3250,7 @@

EvoMaster (link)

Stars - 385 + 386 Watchers @@ -3266,7 +3266,7 @@

EvoMaster (link)

Last Updated - 2023-12-08T15:57:57Z + 2023-12-13T15:01:52Z Archived @@ -3302,7 +3302,7 @@

Restish (link)

Stars - 571 + 573 Watchers @@ -3318,7 +3318,7 @@

Restish (link)

Last Updated - 2023-12-10T19:01:46Z + 2023-12-13T15:03:16Z Archived @@ -3926,7 +3926,7 @@

Specmatic (link)

Stars - 163 + 164 Watchers @@ -3942,7 +3942,7 @@

Specmatic (link)

Last Updated - 2023-12-12T23:07:56Z + 2023-12-13T06:54:10Z Archived @@ -4082,7 +4082,7 @@

kubb (link)

Stars - 266 + 268 Watchers @@ -4090,7 +4090,7 @@

kubb (link)

Forks - 17 + 19 Created @@ -4098,7 +4098,7 @@

kubb (link)

Last Updated - 2023-12-11T11:37:01Z + 2023-12-13T20:18:13Z Archived @@ -4186,7 +4186,7 @@

mockoon (link)

Stars - 5556 + 5559 Watchers @@ -4202,7 +4202,7 @@

mockoon (link)

Last Updated - 2023-12-12T09:53:18Z + 2023-12-13T23:59:44Z Archived @@ -5330,7 +5330,7 @@

karate-intellij-plugin (link)

Stars - 7 + 8 Watchers @@ -5346,7 +5346,7 @@

karate-intellij-plugin (link)

Last Updated - 2023-10-14T02:57:25Z + 2023-12-13T16:09:28Z Archived @@ -8606,7 +8606,7 @@

RESTler (link)

Stars - 2349 + 2353 Watchers @@ -8622,7 +8622,7 @@

RESTler (link)

Last Updated - 2023-12-12T01:39:03Z + 2023-12-13T13:04:49Z Archived diff --git a/docs/categories/text-editors.html b/docs/categories/text-editors.html index d185c87d..1dd38382 100644 --- a/docs/categories/text-editors.html +++ b/docs/categories/text-editors.html @@ -86,7 +86,7 @@

No Yes Yes - 292 + 293 @@ -170,7 +170,7 @@

Yes Yes Yes - 8455 + 8456 @@ -372,7 +372,7 @@

VSCode OpenAPI (link)

Stars - 292 + 293 Watchers @@ -388,7 +388,7 @@

VSCode OpenAPI (link)

Last Updated - 2023-12-12T02:05:01Z + 2023-12-13T17:16:09Z Archived @@ -580,11 +580,11 @@

Swagger Editor (link)

Stars - 8455 + 8456 Watchers - 259 + 258 Forks @@ -596,7 +596,7 @@

Swagger Editor (link)

Last Updated - 2023-12-12T06:57:52Z + 2023-12-14T03:17:40Z Archived diff --git a/docs/categories/unclassified.html b/docs/categories/unclassified.html index c35f0955..34053f0e 100644 --- a/docs/categories/unclassified.html +++ b/docs/categories/unclassified.html @@ -126,7 +126,7 @@

No Yes No - 221 + 222 @@ -1307,7 +1307,7 @@

modelina (link)

Stars - 221 + 222 Watchers @@ -1323,7 +1323,7 @@

modelina (link)

Last Updated - 2023-12-12T19:26:36Z + 2023-12-13T19:10:37Z Archived diff --git a/docs/categories/user-interfaces.html b/docs/categories/user-interfaces.html index 3e00b698..b6bf5a23 100644 --- a/docs/categories/user-interfaces.html +++ b/docs/categories/user-interfaces.html @@ -86,7 +86,7 @@

Yes Yes No - 24873 + 24879 @@ -109,7 +109,7 @@

Yes Yes No - 21587 + 21593 @@ -291,7 +291,7 @@

swagger-ui (link)

Stars - 24873 + 24879 Watchers @@ -299,7 +299,7 @@

swagger-ui (link)

Forks - 8841 + 8842 Created @@ -307,7 +307,7 @@

swagger-ui (link)

Last Updated - 2023-12-12T21:27:52Z + 2023-12-14T01:20:27Z Archived @@ -343,15 +343,15 @@

Redoc (link)

Stars - 21587 + 21593 Watchers - 287 + 288 Forks - 2262 + 2261 Created @@ -359,7 +359,7 @@

Redoc (link)

Last Updated - 2023-12-13T01:52:55Z + 2023-12-13T19:13:35Z Archived diff --git a/src/_data/tools.yaml b/src/_data/tools.yaml index b4c3965d..f813b399 100644 --- a/src/_data/tools.yaml +++ b/src/_data/tools.yaml @@ -11,17 +11,17 @@ repositoryId: 337689065 description: OpenAPI Diff and Breaking Changes created: '2021-02-10T10:28:36Z' - updated: '2023-12-12T21:46:29Z' + updated: '2023-12-13T21:22:25Z' language: Go archived: false - stars: 474 + stars: 478 watchers: 10 forks: 44 owner: Tufin logo: https://avatars.githubusercontent.com/u/5352131?v=4 license: Apache-2.0 - repoEtag: '"b4a96725397ff4a356b798e76275b4cf4b243723f1f2245e52d22c931cf22ad9"' - repoLastModified: Tue, 12 Dec 2023 21:46:29 GMT + repoEtag: '"9a3160f2e6745140371455becd67e52e8ef79baa9863dfb67d4f9aaabf099fc5"' + repoLastModified: Wed, 13 Dec 2023 21:22:25 GMT foundInMaster: true name: oasdiff language: Go @@ -46,23 +46,23 @@ id: 9cad3caafc5e01c5c1cd167696f30f10 repositoryMetadata: base64Readme: >- - IyBTY2FsYXIgQVBJIFJlZmVyZW5jZQoKWyFbQ0ldKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2FjdGlvbnMvd29ya2Zsb3dzL2NpLnltbC9iYWRnZS5zdmcpXShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci9hY3Rpb25zL3dvcmtmbG93cy9jaS55bWwpClshW1JlbGVhc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2FjdGlvbnMvd29ya2Zsb3dzL3JlbGVhc2UueW1sL2JhZGdlLnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2FjdGlvbnMvd29ya2Zsb3dzL3JlbGVhc2UueW1sKQpbIVtDb250cmlidXRvcnNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2NvbnRyaWJ1dG9ycy9zY2FsYXIvc2NhbGFyKV0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvZ3JhcGhzL2NvbnRyaWJ1dG9ycykKWyFbR2l0SHViIExpY2Vuc2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2xpY2Vuc2Uvc2NhbGFyL3NjYWxhcildKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2Jsb2IvbWFpbi9MSUNFTlNFKQpbIVtEaXNjb3JkXShodHRwczovL2ltZy5zaGllbGRzLmlvL2Rpc2NvcmQvMTEzNTMzMDIwNzk2MDY3ODQxMD9zdHlsZT1mbGF0JmNvbG9yPTU4NjVGMildKGh0dHBzOi8vZGlzY29yZC5nZy84SGVaY1JHUEZTKQoKR2VuZXJhdGUgaW50ZXJhY3RpdmUgQVBJIGRvY3VtZW50YXRpb25zIGZyb20gU3dhZ2dlciBmaWxlcy4gW1RyeSBvdXIgRGVtb10oaHR0cHM6Ly9kb2NzLnNjYWxhci5jb20vc3dhZ2dlci1lZGl0b3IpCgpbIVtTY3JlZW5zaG90IG9mIGFuIEFQSSBSZWZlcmVuY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2Fzc2V0cy82MjAxNDA3L2Q4YmViNWUxLWJmNjQtNDU4OS04Y2IwLTk5MmJhNzkyMTVhOCldKGh0dHBzOi8vZG9jcy5zY2FsYXIuY29tL3N3YWdnZXItZWRpdG9yKQoKIyMgRmVhdHVyZXMKCi0gVXNlcyBTd2FnZ2VyL09wZW5BUEkgc3BlYyBmaWxlcwotIFJlcXVlc3QgZXhhbXBsZXMgZm9yIGEgdG9uIG9mIGxhbmd1YWdlcyArIGZyYW1ld29ya3MKLSBIYXMgYW4gaW50ZWdyYXRlZCBBUEkgY2xpZW50Ci0gRWRpdCB5b3VyIFN3YWdnZXIgZmlsZXMgd2l0aCBhIGxpdmUgcHJldmlldwotIERvZXNu4oCZdCBsb29rIGxpa2UgaXTigJlzIDIwMTEKCiMjIFRhYmxlIG9mIENvbnRlbnRzCgotIFtHZXR0aW5nIFN0YXJ0ZWRdKCNnZXR0aW5nLXN0YXJ0ZWQpCiAgLSBbRnJvbSBhIENETl0oI2Zyb20tYS1jZG4pCiAgLSBbV2l0aCBWdWUuanNdKCN3aXRoLXZ1ZWpzKQogIC0gW1dpdGggUmVhY3RdKCN3aXRoLXJlYWN0KQogIC0gW1dpdGggRmFzdGlmeV0oI3dpdGgtZmFzdGlmeSkKICAtIFtXaXRoIEhvbm9dKCN3aXRoLWhvbm8pCiAgLSBbV2l0aCBFeHByZXNzXSgjd2l0aC1leHByZXNzKQotIFtIb3N0ZWQgQVBJIFJlZmVyZW5jZV0oI2hvc3RlZC1hcGktcmVmZXJlbmNlKQotIFtDb25maWd1cmF0aW9uXSgjY29uZmlndXJhdGlvbikKLSBbVGhlbWVzXSgjdGhlbWVzKQotIFtBZHZhbmNlZDogU3R5bGluZ10oI2FkdmFuY2VkLXN0eWxpbmcpCi0gW0NvbW11bml0eV0oI2NvbW11bml0eSkKLSBbT3RoZXIgcGFja2FnZXNdKCNvdGhlci1wYWNrYWdlcykKLSBbQ29udHJpYnV0aW5nXSgjY29udHJpYnV0b3JzKQotIFtMaWNlbnNlXSgjbGljZW5zZSkKCiMjIEdldHRpbmcgU3RhcnRlZAoKIyMjIEZyb20gYSBDRE4KCmBgYGh0bWwKPCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkFQSSBSZWZlcmVuY2U8L3RpdGxlPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiIC8+CiAgICA8bWV0YQogICAgICBuYW1lPSJ2aWV3cG9ydCIKICAgICAgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiIC8+CiAgICA8c3R5bGU+CiAgICAgIGJvZHkgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8IS0tIEFkZCB5b3VyIG93biBPcGVuQVBJL1N3YWdnZXIgc3BlYyBmaWxlIFVSTCBoZXJlOiAtLT4KICAgIDwhLS0gTm90ZTogdGhpcyBpbmNsdWRlcyBvdXIgcHJveHksIHlvdSBjYW4gcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBpZiB5b3UgZG8gbm90IG5lZWQgaXQgLS0+CiAgICA8IS0tIGRhdGEtcHJveHktdXJsPSJodHRwczovL2FwaS5zY2FsYXIuY29tL3JlcXVlc3QtcHJveHkiIC0tPgogICAgPHNjcmlwdAogICAgICBpZD0iYXBpLXJlZmVyZW5jZSIKICAgICAgZGF0YS11cmw9Imh0dHBzOi8vZXhhbXBsZS5jb20vc3dhZ2dlci5qc29uIgogICAgICBkYXRhLXByb3h5LXVybD0iaHR0cHM6Ly9hcGkuc2NhbGFyLmNvbS9yZXF1ZXN0LXByb3h5Ij48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BzY2FsYXIvYXBpLXJlZmVyZW5jZSI+PC9zY3JpcHQ+CiAgPC9ib2R5Pgo8L2h0bWw+CmBgYAoKWW91IGNhbiBhbHNvIHVzZSB0aGUgZm9sbG93aW5nIHN5bnRheCB0byBkaXJlY3RseSBwYXNzIGFuIE9wZW5BUEkgc3BlYzoKCmBgYGh0bWwKPHNjcmlwdAogIGlkPSJhcGktcmVmZXJlbmNlIgogIHR5cGU9ImFwcGxpY2F0aW9uL2pzb24iPgogIHsg4oCmIH0KPC9zY3JpcHQ+CmBgYAoKSWYgeW914oCZZCBsaWtlIHRvIGFkZCBhIHJlcXVlc3QgcHJveHkgZm9yIHRoZSBBUEkgY2xpZW50ICh0byBhdm9pZCBDT1JTIGlzc3Vlcyk6CgpgYGBodG1sCjxzY3JpcHQKICBpZD0iYXBpLXJlZmVyZW5jZSIKICB0eXBlPSJhcHBsaWNhdGlvbi9qc29uIgogIGRhdGEtcHJveHktdXJsPSJodHRwczovL2FwaS5zY2FsYXIuY29tL3JlcXVlc3QtcHJveHkiPgogIHsg4oCmIH0KPC9zY3JpcHQ+CmBgYAoKIyMjIFdpdGggVnVlLmpzCgpUaGUgQVBJIFJlZmVyZW5jZSBpcyBidWlsdCBpbiBWdWUuanMuIElmIHlvdeKAmXJlIHdvcmtpbmcgaW4gVnVlLmpzLCB0b28sIHlvdSBjYW4gZGlyZWN0bHkgdXNlIG91ciBWdWUgY29tcG9uZW50cy4gSnVzdCBpbnN0YWxsIHRoZW06CgpgYGBiYXNoCm5wbSBpbnN0YWxsIEBzY2FsYXIvYXBpLXJlZmVyZW5jZQpgYGAKCkFuZCBpbXBvcnQgdGhlIGBBcGlSZWZlcmVuY2VgIGNvbXBvbmVudCB0byB5b3VyIGFwcDoKCmBgYHZ1ZQo8c2NyaXB0IHNldHVwIGxhbmc9InRzIj4KaW1wb3J0IHsgQXBpUmVmZXJlbmNlIH0gZnJvbSAnQHNjYWxhci9hcGktcmVmZXJlbmNlJwo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICA8QXBpUmVmZXJlbmNlIC8+CjwvdGVtcGxhdGU+CmBgYAoKWW91IGNhbiBbcGFzcyBwcm9wcyB0byBjdXN0b21pemUgdGhlIEFQSSByZWZlcmVuY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL3RyZWUvbWFpbi9wYWNrYWdlcy9hcGktcmVmZXJlbmNlKS4KCiMjIyBXaXRoIFJlYWN0CgpUaGUgQVBJIFJlZmVyZW5jZSBwYWNrYWdlIGlzIHdyaXR0ZW4gaW4gVnVlLiBUaGF0IHNob3VsZG7igJl0IHN0b3AgeW91IGZyb20gdXNpbmcgaXQgaW4gUmVhY3QsIHRob3VnaC4gWW91IGNhbiB1c2UgW3ZlYXVyeV0oaHR0cHM6Ly9naXRodWIuY29tL2Rldmlsd2pwL3ZlYXVyeSkgdG8gbG9hZCB0aGUgYDxBUElSZWZlcmVuY2UgLz5gIGNvbXBvbmVudCBpbiBSZWFjdDoKCmBgYHRzCmltcG9ydCB7IEFwaVJlZmVyZW5jZSBhcyBWdWVDb21wb25lbnQgfSBmcm9tICdAc2NhbGFyL2FwaS1yZWZlcmVuY2UnCmltcG9ydCB7IGFwcGx5VnVlSW5SZWFjdCB9IGZyb20gJ3ZlYXVyeScKCmNvbnN0IEFwaVJlZmVyZW5jZSA9IGFwcGx5VnVlSW5SZWFjdChWdWVDb21wb25lbnQpCgpmdW5jdGlvbiBBcHAoKSB7CiAgcmV0dXJuICgKICAgIDw+CiAgICAgIDxBcGlSZWZlcmVuY2UgY29uZmlndXJhdGlvbj17eyBpc0VkaXRhYmxlOiB0cnVlIH19IC8+CiAgICA8Lz4KICApCn0KCmV4cG9ydCBkZWZhdWx0IEFwcApgYGAKCiMjIyBXaXRoIEZhc3RpZnkKCk91ciBmYXN0aWZ5IHBsdWdpbiBtYWtlcyBpdCBzbyBlYXN5IHRvIHJlbmRlciBhIHJlZmVyZW5jZSwgdGhlcmXigJlzIG5vIGV4Y3VzZSB0byBub3QgaGF2ZSBhIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgQVBJLgoKYGBgdHMKYXdhaXQgZmFzdGlmeS5yZWdpc3RlcihyZXF1aXJlKCdAc2NhbGFyL2Zhc3RpZnktYXBpLXJlZmVyZW5jZScpLCB7CiAgcm91dGVQcmVmaXg6ICcvcmVmZXJlbmNlJywKICBjb25maWd1cmF0aW9uOiB7CiAgICBzcGVjOiAoKSA9PiBmYXN0aWZ5LnN3YWdnZXIoKSwKICB9LAp9KQpgYGAKCkFjdHVhbGx5LCBpdOKAmXMgZXhlY3V0aW5nIHRoZSBgZmFzdGlmeS5zd2FnZ2VyKClgIGNhbGwgYnkgZGVmYXVsdCAoaWYgYXZhaWxhYmxlKS4gU28gdGhhdOKAmXMgYWxsIHlvdSBuZWVkIHRvIGFkZDoKCmBgYHRzCmF3YWl0IGZhc3RpZnkucmVnaXN0ZXIocmVxdWlyZSgnQHNjYWxhci9mYXN0aWZ5LWFwaS1yZWZlcmVuY2UnKSwgewogIHJvdXRlUHJlZml4OiAnL3JlZmVyZW5jZScsCn0pCmBgYAoKUmVhZCBtb3JlOiBbQHNjYWxhci9mYXN0aWZ5LWFwaS1yZWZlcmVuY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL3RyZWUvbWFpbi9wYWNrYWdlcy9mYXN0aWZ5LWFwaS1yZWZlcmVuY2UpCgojIyMgV2l0aCBIb25vCgpPdXIgSG9ubyBtaWRkbGV3YXJlIG1ha2VzIGl0IHNvIGVhc3kgdG8gcmVuZGVyIGEgcmVmZXJlbmNlOgoKYGBgdHMKaW1wb3J0IHsgYXBpUmVmZXJlbmNlIH0gZnJvbSAnQHNjYWxhci9ob25vLWFwaS1yZWZlcmVuY2UnCgphcHAuZ2V0KAogICcvcmVmZXJlbmNlJywKICBhcGlSZWZlcmVuY2UoewogICAgc3BlYzogewogICAgICB1cmw6ICcvc3dhZ2dlci5qc29uJywKICAgIH0sCiAgfSksCikKYGBgCgpSZWFkIG1vcmU6IFtAc2NhbGFyL2hvbm8tYXBpLXJlZmVyZW5jZV0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL2hvbm8tYXBpLXJlZmVyZW5jZSkKCiMjIyBXaXRoIEV4cHJlc3MKCk91ciBFeHByZXNzIG1pZGRsZXdhcmUgbWFrZXMgaXQgc28gZWFzeSB0byByZW5kZXIgYSByZWZlcmVuY2U6CgpgYGB0cwppbXBvcnQgeyBhcGlSZWZlcmVuY2UgfSBmcm9tICdAc2NhbGFyL2V4cHJlc3MtYXBpLXJlZmVyZW5jZScKCmFwcC51c2UoCiAgJy9yZWZlcmVuY2UnLAogIGFwaVJlZmVyZW5jZSh7CiAgICBzcGVjOiB7CiAgICAgIGNvbnRlbnQ6IE9wZW5BcGlTcGVjaWZpY2F0aW9uLAogICAgfSwKICB9KSwKKQpgYGAKClJlYWQgbW9yZTogW0BzY2FsYXIvZXhwcmVzcy1hcGktcmVmZXJlbmNlXShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci90cmVlL21haW4vcGFja2FnZXMvZXhwcmVzcy1hcGktcmVmZXJlbmNlKQoKIyMgSG9zdGVkIEFQSSBSZWZlcmVuY2UKCldhaXQsIHRoaXMgaXMgb3BlbiBzb3VyY2UgYW5kIHlvdSBjYW4gZG8gd2hhdGV2ZXIgeW91IHdhbnQuIEJ1dCBpZiB5b3Ugd2FudCB0byBhZGQgYSBuaWNlLCBjdXN0b21pemFibGUgZ3VpZGUsIGNvbGxhYm9yYXRlIHdpdGggeW91ciB0ZWFtIGFuZCBoYXZlIGV2ZXJ5dGhpbmcgc2VydmVkIHRocm91Z2ggYSBDRE4sIGNyZWF0ZSBhbiBhY2NvdW50IG9uIFtzY2FsYXIuY29tXShodHRwczovL3NjYWxhci5jb20pLgoKIyMgQ29uZmlndXJhdGlvbgoKVG8gY3VzdG9taXplIHRoZSBiZWhhdmlvciBvZiB0aGUgQVBJIFJlZmVyZW5jZSwgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6CgotIGBpc0VkaXRhYmxlYDogV2hldGhlciB0aGUgU3dhZ2dlciBlZGl0b3Igc2hvdWxkIGJlIHNob3duLgotIGBzcGVjLmNvbnRlbnRgOiBEaXJlY3RseSBwYXNzIGFuIE9wZW5BUEkvU3dhZ2dlciBzcGVjLgotIGBzcGVjLnVybGA6IFBhc3MgdGhlIFVSTCBvZiBhIHNwZWMgZmlsZSAoSlNPTiBvciBZQU1MKS4KLSBgc3BlYy5wcmVwYXJzZWRDb250ZW50YDogUHJlcHJvY2VzcyBzcGVjcyB3aXRoIGBAc2NhbGFyL3N3YWdnZXItcGFyc2VyYCBhbmQgZGlyZWN0bHkgcGFzcyB0aGUgcmVzdWx0LgotIGBwcm94eVVybGA6IFVzZSBhIHByb3h5IHRvIHNlbmQgcmVxdWVzdHMgdG8gb3RoZXIgb3JpZ2lucy4KLSBgc2hvd1NpZGViYXJgOiBXaGV0aGVyIHRoZSBzaWRlYmFyIHNob3VsZCBiZSBzaG93bi4KLSBgY3VzdG9tQ3NzYDogUGFzcyBjdXN0b20gQ1NTIGRpcmVjdGx5IHRvIHRoZSBjb21wb25lbnQuCi0gYHNlYXJjaEhvdEtleWA6IEtleSB1c2VkIHdpdGggQ05UUkwvQ01EIHRvIG9wZW4gdGhlIHNlYXJjaCBtb2RhbC4KLSBgbWV0YURhdGFgOiBDb25maWd1cmUgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHBhZ2UuCi0gYG9uU3BlY1VwZGF0ZWA6IExpc3RlbiB0byBzcGVjIGNoYW5nZXMgd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uLgoKRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlc2Ugb3B0aW9ucywgcmVmZXIgdG8gdGhlIFtDb25maWd1cmF0aW9uIFNlY3Rpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2Jsb2IvbWFpbi9wYWNrYWdlcy9hcGktcmVmZXJlbmNlL1JFQURNRS5tZC8jY29uZmlndXJhdGlvbikuCgojIyBUaGVtZXMKCllvdSBkb27igJl0IGxpa2UgdGhlIGNvbG9yIHNjaGVtZT8gV2XigJl2ZSBwcmVwYXJlZCBzb21lIHRoZW1lcyBmb3IgeW91OgoKYGBgdnVlCi8qIHRoZW1lPzogJ2FsdGVybmF0ZScgfCAnZGVmYXVsdCcgfCAnbW9vbicgfCAncHVycGxlJyB8ICdzb2xhcml6ZWQnICovCjxBcGlSZWZlcmVuY2UgOmNvbmZpZ3VyYXRpb249InsgdGhlbWU6ICdtb29uJyB9IiAvPgpgYGAKCuKEue+4jyBUaGUgYGRlZmF1bHRgIHRoZW1lIGlzIOKApsKgdGhlIGRlZmF1bHQgdGhlbWUuIElmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSBubyB0aGVtZSBpcyBhcHBsaWVkLCBwYXNzIGBub25lYC4KCiMjIEFkdmFuY2VkOiBTdHlsaW5nCgpPdmVyd3JpdGUgb3VyIENTUyB2YXJpYWJsZXMuIFdlIHdvbuKAmXQganVkZ2UuCgpgYGAKOnJvb3QgewogIC0tdGhlbWUtZm9udDogJ0NvbWljIFNhbnMgTVMnLCAnQ29taWMgU2FucycsIGN1cnNpdmU7Cn0KYGBgCgpXZeKAmXJlIHVzaW5nIHRoZSBgZGVmYXVsdC1gIHByZWZpeCBmb3Igb3VyIHZhcmlhYmxlcyB0byBub3Qgb3ZlcndyaXRlIHlvdXIgdmFyaWFibGVzLiBZb3UgY2FuIFt1c2UgYWxsIHZhcmlhYmxlcyB3aXRob3V0IGEgcHJlZml4XShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci9ibG9iL21haW4vcGFja2FnZXMvdGhlbWVzL3NyYy9iYXNlLmNzcykuCgpgYGBjc3MKLyog4pyFIEdvb2QgKHdpdGhvdXQgYGRlZmF1bHRgIHByZWZpeCkgKi8KLS10aGVtZS1mb250OiAnQ29taWMgU2FucyBNUycsICdDb21pYyBTYW5zJywgY3Vyc2l2ZTsKLyog4p2MIEJhZCAod2l0aCBgZGVmYXVsdGAgcHJlZml4KSAqLwotLWRlZmF1bHQtdGhlbWUtZm9udDogJ0NvbWljIFNhbnMgTVMnLCAnQ29taWMgU2FucycsIGN1cnNpdmU7CmBgYAoKT3ZlcndyaXRlIG91ciBuaWdodCBtb2RlIGFuZCBkYXkgbW9kZSB2YXJpYWJsZXMgdG8gYnVpbGQgeW91ciBvd24gdGhlbWVzLiBIZXJlIGFyZSBzb21lIG9mIHRoZSBiYXNpYyB2YXJpYWJsZXMgdG8gZ2V0IHlvdSBzdGFydGVkOgoKIVtiYXNpYy1zY2FsYXItdmFyaWFibGVzXShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci9hc3NldHMvNjIwMTQwNy82MzUyNDMyMS02NmQyLTQ0ZDAtODUwOS0zZGI3ZTA0NWEzMTUpCgpgYGAKLmxpZ2h0LW1vZGUgewogIC0tdGhlbWUtY29sb3ItMTogIzEyMTIxMjsKICAtLXRoZW1lLWNvbG9yLTI6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAtLXRoZW1lLWNvbG9yLTM6IHJnYmEoMCwgMCwgMCwgMC40KTsKICAtLXRoZW1lLWNvbG9yLWFjY2VudDogIzBhODVkMTsKICAtLXRoZW1lLWJhY2tncm91bmQtMTogI2ZmZjsKICAtLXRoZW1lLWJhY2tncm91bmQtMjogI2Y2ZjVmNDsKICAtLXRoZW1lLWJhY2tncm91bmQtMzogI2YxZWRlOTsKICAtLXRoZW1lLWJhY2tncm91bmQtYWNjZW50OiAjNTM2OWQyMGY7CiAgLS10aGVtZS1ib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wOCk7Cn0KLmRhcmstbW9kZSB7CiAgLS10aGVtZS1jb2xvci0xOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODEpOwogIC0tdGhlbWUtY29sb3ItMjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ0Myk7CiAgLS10aGVtZS1jb2xvci0zOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjgyKTsKICAtLXRoZW1lLWNvbG9yLWFjY2VudDogIzhhYjRmODsKICAtLXRoZW1lLWJhY2tncm91bmQtMTogIzIwMjAyMDsKICAtLXRoZW1lLWJhY2tncm91bmQtMjogIzI3MjcyNzsKICAtLXRoZW1lLWJhY2tncm91bmQtMzogIzMzMzMzMzsKICAtLXRoZW1lLWJhY2tncm91bmQtYWNjZW50OiAjOGFiNGY4MWY7Cn0KYGBgCgpPciBnZXQgbW9yZSBhZHZhbmNlZCBieSBzdHlsaW5nIG91ciBzaWRlYmFyIQoKIVtzY2FsYXItc2lkZWJhci12YXJpYWJsZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2Fzc2V0cy82MjAxNDA3LzJjMzYzY2JjLWYwNmYtNGFkMy1iNDRmLTA1Y2VlOGM5NWE4YikKCmBgYAoubGlnaHQtbW9kZSAuc2lkZWJhciB7CiAgLS1zaWRlYmFyLWJhY2tncm91bmQtMTogdmFyKC0tdGhlbWUtYmFja2dyb3VuZC0xKTsKICAtLXNpZGViYXItaXRlbS1ob3Zlci1jb2xvcjogY3VycmVudENvbG9yOwogIC0tc2lkZWJhci1pdGVtLWhvdmVyLWJhY2tncm91bmQ6IHZhcigtLXRoZW1lLWJhY2tncm91bmQtMik7CiAgLS1zaWRlYmFyLWl0ZW0tYWN0aXZlLWJhY2tncm91bmQ6IHZhcigtLXRoZW1lLWJhY2tncm91bmQtMik7CiAgLS1zaWRlYmFyLWJvcmRlci1jb2xvcjogdmFyKC0tdGhlbWUtYm9yZGVyLWNvbG9yKTsKICAtLXNpZGViYXItY29sb3ItMTogdmFyKC0tdGhlbWUtY29sb3ItMSk7CiAgLS1zaWRlYmFyLWNvbG9yLTI6IHZhcigtLXRoZW1lLWNvbG9yLTIpOwogIC0tc2lkZWJhci1jb2xvci1hY3RpdmU6IHZhcigtLXRoZW1lLWNvbG9yLTIpOwogIC0tc2lkZWJhci1zZWFyY2gtYmFja2dyb3VuZDogdmFyKC0tdGhlbWUtYmFja2dyb3VuZC0yKTsKICAtLXNpZGViYXItc2VhcmNoLWJvcmRlci1jb2xvcjogdmFyKC0tdGhlbWUtYm9yZGVyLWNvbG9yKTsKICAtLXNpZGViYXItc2VhcmNoLS1jb2xvcjogdmFyKC0tdGhlbWUtY29sb3ItMyk7Cn0KLmRhcmstbW9kZSAuc2lkZWJhciB7CiAgLS1zaWRlYmFyLWJhY2tncm91bmQtMTogdmFyKC0tdGhlbWUtYmFja2dyb3VuZC0xKTsKICAtLXNpZGViYXItaXRlbS1ob3Zlci1jb2xvcjogY3VycmVudENvbG9yOwogIC0tc2lkZWJhci1pdGVtLWhvdmVyLWJhY2tncm91bmQ6IHZhcigtLXRoZW1lLWJhY2tncm91bmQtMik7CiAgLS1zaWRlYmFyLWl0ZW0tYWN0aXZlLWJhY2tncm91bmQ6IHZhcigtLXRoZW1lLWJhY2tncm91bmQtMik7CiAgLS1zaWRlYmFyLWJvcmRlci1jb2xvcjogdmFyKC0tdGhlbWUtYm9yZGVyLWNvbG9yKTsKICAtLXNpZGViYXItY29sb3ItMTogdmFyKC0tdGhlbWUtY29sb3ItMSk7CiAgLS1zaWRlYmFyLWNvbG9yLTI6IHZhcigtLXRoZW1lLWNvbG9yLTIpOwogIC0tc2lkZWJhci1jb2xvci1hY3RpdmU6IHZhcigtLXRoZW1lLWNvbG9yLTIpOwogIC0tc2lkZWJhci1zZWFyY2gtYmFja2dyb3VuZDogdmFyKC0tdGhlbWUtYmFja2dyb3VuZC0yKTsKICAtLXNpZGViYXItc2VhcmNoLWJvcmRlci1jb2xvcjogdmFyKC0tdGhlbWUtYm9yZGVyLWNvbG9yKTsKICAtLXNpZGViYXItc2VhcmNoLS1jb2xvcjogdmFyKC0tdGhlbWUtY29sb3ItMyk7Cn0KYGBgCgojIyBDb21tdW5pdHkKCldlIGFyZSBBUEkgbmVyZHMuIFlvdSB0b28/IExldOKAmXMgY2hhdCBvbiBEaXNjb3JkOiA8aHR0cHM6Ly9kaXNjb3JkLmdnLzhIZVpjUkdQRlM+CgojIyBPdGhlciBwYWNrYWdlcwoKVGhpcyByZXBvc2l0b3J5IGNvbnRhaW5zIGFsbCBvdXIgb3BlbiBzb3VyY2UgcHJvamVjdHMgYW5kIHRoZXJl4oCZcyBkZWZpbml0ZWx5IG1vcmUgdG8gZGlzY292ZXIuCgp8IFBhY2thZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwKfCBbQHNjYWxhci9hcGktY2xpZW50XShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci90cmVlL21haW4vcGFja2FnZXMvYXBpLWNsaWVudCkgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIG9wZW4gc291cmNlIEFQSSB0ZXN0aW5nIGNsaWVudCAgICAgICAgICAgICAgICAgICAgfAp8IFtAc2NhbGFyL2FwaS1jbGllbnQtcHJveHldKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL3RyZWUvbWFpbi9wYWNrYWdlcy9hcGktY2xpZW50LXByb3h5KSAgICAgICAgICAgfCBhbiBhcGkgcmVxdWVzdCBwcm94eSBiYXNlZCBvbiBleHByZXNzICAgICAgICAgICAgICAgICB8CnwgW0BzY2FsYXIvYXBpLXJlZmVyZW5jZV0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL2FwaS1yZWZlcmVuY2UpICAgICAgICAgICAgICAgICB8IGdlbmVyYXRlIGJlYXV0aWZ1bCBBUEkgcmVmZXJlbmNlcyAgICAgICAgICAgICAgICAgICAgIHwKfCBbQHNjYWxhci9lY2hvLXNlcnZlcl0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL2VjaG8tc2VydmVyKSAgICAgICAgICAgICAgICAgICAgIHwgYW4gZXhwcmVzcyBzZXJ2ZXIgd2hpY2ggcmVwbGllcyB3aXRoIHRoZSByZXF1ZXN0IGRhdGEgfAp8IFtAc2NhbGFyL2Zhc3RpZnktYXBpLXJlZmVyZW5jZV0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL2Zhc3RpZnktYXBpLXJlZmVyZW5jZSkgfCBhIGZhc3RpZnkgcGx1Z2luIHRvIHJlbmRlciBBUEkgcmVmZXJlbmNlcyAgICAgICAgICAgICB8CnwgW0BzY2FsYXIvaG9uby1hcGktcmVmZXJlbmNlXShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci90cmVlL21haW4vcGFja2FnZXMvaG9uby1hcGktcmVmZXJlbmNlKSAgICAgICB8IGEgaG9ubyBtaWRkbGV3YXJlIHRvIHJlbmRlciBBUEkgcmVmZXJlbmNlcyAgICAgICAgICAgIHwKfCBbQHNjYWxhci9zd2FnZ2VyLWVkaXRvcl0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL3N3YWdnZXItZWRpdG9yKSAgICAgICAgICAgICAgIHwgYW4gZWRpdG9yIHRhaWxvcmVkIHRvIHdyaXRlIE9wZW5BUEkgc3BlYyAgICAgICAgICAgICAgfAp8IFtAc2NhbGFyL3N3YWdnZXItcGFyc2VyXShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci90cmVlL21haW4vcGFja2FnZXMvc3dhZ2dlci1wYXJzZXIpICAgICAgICAgICAgICAgfCBwYXJzZSBPcGVuQVBJIHNwZWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgW0BzY2FsYXIvdXNlLWNsaXBib2FyZF0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL3VzZS1jbGlwYm9hcmQpICAgICAgICAgICAgICAgICB8IHRpbnkgVnVlIHdyYXBwZXIgYXJvdW5kIHRoZSBjbGlwYm9hcmQgQVBJICAgICAgICAgICAgIHwKfCBbQHNjYWxhci91c2UtY29kZW1pcnJvcl0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL3VzZS1jb2RlbWlycm9yKSAgICAgICAgICAgICAgIHwgQ29kZU1pcnJvciBmb3IgVnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFtAc2NhbGFyL3VzZS1rZXlib2FyZC1ldmVudF0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL3VzZS1rZXlib2FyZC1ldmVudCkgICAgICAgfCBrZXlib2FyZCBzaG9ydGN1dHMgZm9yIFZ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgW0BzY2FsYXIvdXNlLXRvYXN0c10oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL3VzZS10b2FzdHMpICAgICAgICAgICAgICAgICAgICAgICB8IGRpc3BsYXkgdG9hc3RzIGluIFZ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbQHNjYWxhci91c2UtdG9vbHRpcF0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL3VzZS10b29sdGlwKSAgICAgICAgICAgICAgICAgICAgIHwgdG9vbHRpcHMgaW4gVnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAoKIyMgQ29udHJpYnV0b3JzCgo8IS0tIHJlYWRtZTogY29sbGFib3JhdG9ycyxjb250cmlidXRvcnMgLXN0YXJ0IC0tPgo8dGFibGU+Cjx0cj4KICAgIDx0ZCBhbGlnbj0iY2VudGVyIj4KICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vaGFuc3BhZ2VsIj4KICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTc3OTkyP3Y9NCIgd2lkdGg9IjEwMDsiIGFsdD0iaGFuc3BhZ2VsIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPmhhbnNwYWdlbDwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90bWFzdHJvbSI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzY1MjUzMjk/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJ0bWFzdHJvbSIvPgogICAgICAgICAgICA8YnIgLz4KICAgICAgICAgICAgPHN1Yj48Yj50bWFzdHJvbTwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9tYXJjbGF2ZSI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNjE3NjMxND92PTQiIHdpZHRoPSIxMDA7IiBhbHQ9Im1hcmNsYXZlIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPm1hcmNsYXZlPC9iPjwvc3ViPgogICAgICAgIDwvYT4KICAgIDwvdGQ+CiAgICA8dGQgYWxpZ249ImNlbnRlciI+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2h3a3IiPgogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzYzNzQwOTA/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJod2tyIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPmh3a3I8L2I+PC9zdWI+CiAgICAgICAgPC9hPgogICAgPC90ZD4KICAgIDx0ZCBhbGlnbj0iY2VudGVyIj4KICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2FtZXJvbnJvaGFuaSI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNjIwMTQwNz92PTQiIHdpZHRoPSIxMDA7IiBhbHQ9ImNhbWVyb25yb2hhbmkiLz4KICAgICAgICAgICAgPGJyIC8+CiAgICAgICAgICAgIDxzdWI+PGI+Y2FtZXJvbnJvaGFuaTwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9hbXJpdGsiPgogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzIwMzk1Mzk/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJhbXJpdGsiLz4KICAgICAgICAgICAgPGJyIC8+CiAgICAgICAgICAgIDxzdWI+PGI+YW1yaXRrPC9iPjwvc3ViPgogICAgICAgIDwvYT4KICAgIDwvdGQ+PC90cj4KPHRyPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9nZW9mZmdzY290dCI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNTkyMDYxMDA/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJnZW9mZmdzY290dCIvPgogICAgICAgICAgICA8YnIgLz4KICAgICAgICAgICAgPHN1Yj48Yj5nZW9mZmdzY290dDwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9BVFJFQVkiPgogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzY2NTg1Mjk1P3Y9NCIgd2lkdGg9IjEwMDsiIGFsdD0iQVRSRUFZIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPkFUUkVBWTwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Nb2hpYjgzNCI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNDczMTY0NjQ/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJNb2hpYjgzNCIvPgogICAgICAgICAgICA8YnIgLz4KICAgICAgICAgICAgPHN1Yj48Yj5Nb2hpYjgzNDwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc2xlYXJuIj4KICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS81ODc0ODY0P3Y9NCIgd2lkdGg9IjEwMDsiIGFsdD0iY2hyaXNsZWFybiIvPgogICAgICAgICAgICA8YnIgLz4KICAgICAgICAgICAgPHN1Yj48Yj5jaHJpc2xlYXJuPC9iPjwvc3ViPgogICAgICAgIDwvYT4KICAgIDwvdGQ+CiAgICA8dGQgYWxpZ249ImNlbnRlciI+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2RhbnAiPgogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzIxODI/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJkYW5wIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPmRhbnA8L2I+PC9zdWI+CiAgICAgICAgPC9hPgogICAgPC90ZD4KICAgIDx0ZCBhbGlnbj0iY2VudGVyIj4KICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vam9uYXRhdyI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMjk3NzI3NjM/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJqb25hdGF3Ii8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPmpvbmF0YXc8L2I+PC9zdWI+CiAgICAgICAgPC9hPgogICAgPC90ZD48L3RyPgo8dHI+CiAgICA8dGQgYWxpZ249ImNlbnRlciI+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0lISXV0Y2giPgogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzIwODI1MDQ3P3Y9NCIgd2lkdGg9IjEwMDsiIGFsdD0iSUhJdXRjaCIvPgogICAgICAgICAgICA8YnIgLz4KICAgICAgICAgICAgPHN1Yj48Yj5JSEl1dGNoPC9iPjwvc3ViPgogICAgICAgIDwvYT4KICAgIDwvdGQ+CiAgICA8dGQgYWxpZ249ImNlbnRlciI+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL01hc29uLUxpdHRsZSI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTA1MDA4NDQxP3Y9NCIgd2lkdGg9IjEwMDsiIGFsdD0iTWFzb24tTGl0dGxlIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPk1hc29uLUxpdHRsZTwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9tb3VoYW5uYWQtc2giPgogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE4NDk1NzQwP3Y9NCIgd2lkdGg9IjEwMDsiIGFsdD0ibW91aGFubmFkLXNoIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPm1vdWhhbm5hZC1zaDwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Gb3RpZU1Db25zdGFudCI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNDIzNzI2NTY/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJGb3RpZU1Db25zdGFudCIvPgogICAgICAgICAgICA8YnIgLz4KICAgICAgICAgICAgPHN1Yj48Yj5Gb3RpZU1Db25zdGFudDwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPjwvdHI+CjwvdGFibGU+CjwhLS0gcmVhZG1lOiBjb2xsYWJvcmF0b3JzLGNvbnRyaWJ1dG9ycyAtZW5kIC0tPgoKQ29udHJpYnV0aW9ucyBhcmUgd2VsY29tZSEgUmVhZCBbYENPTlRSSUJVVElOR2BdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2Jsb2IvbWFpbi9DT05UUklCVVRJTkcpLgoKIyMgTGljZW5zZQoKVGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgcmVwb3NpdG9yeSBpcyBsaWNlbnNlZCB1bmRlciBbTUlUXShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci9ibG9iL21haW4vTElDRU5TRSkuCg== - readmeEtag: '"bacadc755912e5ce21cfb05a9fdfd91d4dd5d61fbe37c5b494efa204f6f13a6b"' - readmeLastModified: Mon, 11 Dec 2023 21:48:19 GMT + IyBTY2FsYXIgQVBJIFJlZmVyZW5jZQoKWyFbQ0ldKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2FjdGlvbnMvd29ya2Zsb3dzL2NpLnltbC9iYWRnZS5zdmcpXShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci9hY3Rpb25zL3dvcmtmbG93cy9jaS55bWwpClshW1JlbGVhc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2FjdGlvbnMvd29ya2Zsb3dzL3JlbGVhc2UueW1sL2JhZGdlLnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2FjdGlvbnMvd29ya2Zsb3dzL3JlbGVhc2UueW1sKQpbIVtDb250cmlidXRvcnNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2NvbnRyaWJ1dG9ycy9zY2FsYXIvc2NhbGFyKV0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvZ3JhcGhzL2NvbnRyaWJ1dG9ycykKWyFbR2l0SHViIExpY2Vuc2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2xpY2Vuc2Uvc2NhbGFyL3NjYWxhcildKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2Jsb2IvbWFpbi9MSUNFTlNFKQpbIVtEaXNjb3JkXShodHRwczovL2ltZy5zaGllbGRzLmlvL2Rpc2NvcmQvMTEzNTMzMDIwNzk2MDY3ODQxMD9zdHlsZT1mbGF0JmNvbG9yPTU4NjVGMildKGh0dHBzOi8vZGlzY29yZC5nZy84SGVaY1JHUEZTKQoKR2VuZXJhdGUgaW50ZXJhY3RpdmUgQVBJIGRvY3VtZW50YXRpb25zIGZyb20gU3dhZ2dlciBmaWxlcy4gW1RyeSBvdXIgRGVtb10oaHR0cHM6Ly9kb2NzLnNjYWxhci5jb20vc3dhZ2dlci1lZGl0b3IpCgpbIVtTY3JlZW5zaG90IG9mIGFuIEFQSSBSZWZlcmVuY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2Fzc2V0cy82MjAxNDA3L2Q4YmViNWUxLWJmNjQtNDU4OS04Y2IwLTk5MmJhNzkyMTVhOCldKGh0dHBzOi8vZG9jcy5zY2FsYXIuY29tL3N3YWdnZXItZWRpdG9yKQoKIyMgRmVhdHVyZXMKCi0gVXNlcyBTd2FnZ2VyL09wZW5BUEkgc3BlYyBmaWxlcwotIFJlcXVlc3QgZXhhbXBsZXMgZm9yIGEgdG9uIG9mIGxhbmd1YWdlcyArIGZyYW1ld29ya3MKLSBIYXMgYW4gaW50ZWdyYXRlZCBBUEkgY2xpZW50Ci0gRWRpdCB5b3VyIFN3YWdnZXIgZmlsZXMgd2l0aCBhIGxpdmUgcHJldmlldwotIERvZXNu4oCZdCBsb29rIGxpa2UgaXTigJlzIDIwMTEKCiMjIFRhYmxlIG9mIENvbnRlbnRzCgotIFtHZXR0aW5nIFN0YXJ0ZWRdKCNnZXR0aW5nLXN0YXJ0ZWQpCiAgLSBbRnJvbSBhIENETl0oI2Zyb20tYS1jZG4pCiAgLSBbV2l0aCBWdWUuanNdKCN3aXRoLXZ1ZWpzKQogIC0gW1dpdGggUmVhY3RdKCN3aXRoLXJlYWN0KQogIC0gW1dpdGggRmFzdGlmeV0oI3dpdGgtZmFzdGlmeSkKICAtIFtXaXRoIEhvbm9dKCN3aXRoLWhvbm8pCiAgLSBbV2l0aCBFeHByZXNzXSgjd2l0aC1leHByZXNzKQotIFtIb3N0ZWQgQVBJIFJlZmVyZW5jZV0oI2hvc3RlZC1hcGktcmVmZXJlbmNlKQotIFtDb25maWd1cmF0aW9uXSgjY29uZmlndXJhdGlvbikKLSBbVGhlbWVzXSgjdGhlbWVzKQotIFtBZHZhbmNlZDogU3R5bGluZ10oI2FkdmFuY2VkLXN0eWxpbmcpCi0gW0NvbW11bml0eV0oI2NvbW11bml0eSkKLSBbT3RoZXIgcGFja2FnZXNdKCNvdGhlci1wYWNrYWdlcykKLSBbQ29udHJpYnV0aW5nXSgjY29udHJpYnV0b3JzKQotIFtMaWNlbnNlXSgjbGljZW5zZSkKCiMjIEdldHRpbmcgU3RhcnRlZAoKIyMjIEZyb20gYSBDRE4KCmBgYGh0bWwKPCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPHRpdGxlPkFQSSBSZWZlcmVuY2U8L3RpdGxlPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiIC8+CiAgICA8bWV0YQogICAgICBuYW1lPSJ2aWV3cG9ydCIKICAgICAgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiIC8+CiAgICA8c3R5bGU+CiAgICAgIGJvZHkgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQogICAgPC9zdHlsZT4KICA8L2hlYWQ+CiAgPGJvZHk+CiAgICA8IS0tIEFkZCB5b3VyIG93biBPcGVuQVBJL1N3YWdnZXIgc3BlYyBmaWxlIFVSTCBoZXJlOiAtLT4KICAgIDwhLS0gTm90ZTogdGhpcyBpbmNsdWRlcyBvdXIgcHJveHksIHlvdSBjYW4gcmVtb3ZlIHRoZSBmb2xsb3dpbmcgbGluZSBpZiB5b3UgZG8gbm90IG5lZWQgaXQgLS0+CiAgICA8IS0tIGRhdGEtcHJveHktdXJsPSJodHRwczovL2FwaS5zY2FsYXIuY29tL3JlcXVlc3QtcHJveHkiIC0tPgogICAgPHNjcmlwdAogICAgICBpZD0iYXBpLXJlZmVyZW5jZSIKICAgICAgZGF0YS11cmw9Imh0dHBzOi8vZXhhbXBsZS5jb20vc3dhZ2dlci5qc29uIgogICAgICBkYXRhLXByb3h5LXVybD0iaHR0cHM6Ly9hcGkuc2NhbGFyLmNvbS9yZXF1ZXN0LXByb3h5Ij48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BzY2FsYXIvYXBpLXJlZmVyZW5jZSI+PC9zY3JpcHQ+CiAgPC9ib2R5Pgo8L2h0bWw+CmBgYAoKWW91IGNhbiBhbHNvIHVzZSB0aGUgZm9sbG93aW5nIHN5bnRheCB0byBkaXJlY3RseSBwYXNzIGFuIE9wZW5BUEkgc3BlYzoKCmBgYGh0bWwKPHNjcmlwdAogIGlkPSJhcGktcmVmZXJlbmNlIgogIHR5cGU9ImFwcGxpY2F0aW9uL2pzb24iPgogIHsg4oCmIH0KPC9zY3JpcHQ+CmBgYAoKSWYgeW914oCZZCBsaWtlIHRvIGFkZCBhIHJlcXVlc3QgcHJveHkgZm9yIHRoZSBBUEkgY2xpZW50ICh0byBhdm9pZCBDT1JTIGlzc3Vlcyk6CgpgYGBodG1sCjxzY3JpcHQKICBpZD0iYXBpLXJlZmVyZW5jZSIKICB0eXBlPSJhcHBsaWNhdGlvbi9qc29uIgogIGRhdGEtcHJveHktdXJsPSJodHRwczovL2FwaS5zY2FsYXIuY29tL3JlcXVlc3QtcHJveHkiPgogIHsg4oCmIH0KPC9zY3JpcHQ+CmBgYAoKIyMjIFdpdGggVnVlLmpzCgpUaGUgQVBJIFJlZmVyZW5jZSBpcyBidWlsdCBpbiBWdWUuanMuIElmIHlvdeKAmXJlIHdvcmtpbmcgaW4gVnVlLmpzLCB0b28sIHlvdSBjYW4gZGlyZWN0bHkgdXNlIG91ciBWdWUgY29tcG9uZW50cy4gSnVzdCBpbnN0YWxsIHRoZW06CgpgYGBiYXNoCm5wbSBpbnN0YWxsIEBzY2FsYXIvYXBpLXJlZmVyZW5jZQpgYGAKCkFuZCBpbXBvcnQgdGhlIGBBcGlSZWZlcmVuY2VgIGNvbXBvbmVudCB0byB5b3VyIGFwcDoKCmBgYHZ1ZQo8c2NyaXB0IHNldHVwIGxhbmc9InRzIj4KaW1wb3J0IHsgQXBpUmVmZXJlbmNlIH0gZnJvbSAnQHNjYWxhci9hcGktcmVmZXJlbmNlJwo8L3NjcmlwdD4KCjx0ZW1wbGF0ZT4KICA8QXBpUmVmZXJlbmNlIC8+CjwvdGVtcGxhdGU+CmBgYAoKWW91IGNhbiBbcGFzcyBwcm9wcyB0byBjdXN0b21pemUgdGhlIEFQSSByZWZlcmVuY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL3RyZWUvbWFpbi9wYWNrYWdlcy9hcGktcmVmZXJlbmNlKS4KCiMjIyBXaXRoIFJlYWN0CgpUaGUgQVBJIFJlZmVyZW5jZSBwYWNrYWdlIGlzIHdyaXR0ZW4gaW4gVnVlLiBUaGF0IHNob3VsZG7igJl0IHN0b3AgeW91IGZyb20gdXNpbmcgaXQgaW4gUmVhY3QsIHRob3VnaC4gWW91IGNhbiB1c2UgW3ZlYXVyeV0oaHR0cHM6Ly9naXRodWIuY29tL2Rldmlsd2pwL3ZlYXVyeSkgdG8gbG9hZCB0aGUgYDxBUElSZWZlcmVuY2UgLz5gIGNvbXBvbmVudCBpbiBSZWFjdDoKCmBgYHRzCmltcG9ydCB7IEFwaVJlZmVyZW5jZSBhcyBWdWVDb21wb25lbnQgfSBmcm9tICdAc2NhbGFyL2FwaS1yZWZlcmVuY2UnCmltcG9ydCB7IGFwcGx5VnVlSW5SZWFjdCB9IGZyb20gJ3ZlYXVyeScKCmNvbnN0IEFwaVJlZmVyZW5jZSA9IGFwcGx5VnVlSW5SZWFjdChWdWVDb21wb25lbnQpCgpmdW5jdGlvbiBBcHAoKSB7CiAgcmV0dXJuICgKICAgIDw+CiAgICAgIDxBcGlSZWZlcmVuY2UgY29uZmlndXJhdGlvbj17eyBpc0VkaXRhYmxlOiB0cnVlIH19IC8+CiAgICA8Lz4KICApCn0KCmV4cG9ydCBkZWZhdWx0IEFwcApgYGAKCiMjIyBXaXRoIEZhc3RpZnkKCk91ciBmYXN0aWZ5IHBsdWdpbiBtYWtlcyBpdCBzbyBlYXN5IHRvIHJlbmRlciBhIHJlZmVyZW5jZSwgdGhlcmXigJlzIG5vIGV4Y3VzZSB0byBub3QgaGF2ZSBhIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgQVBJLgoKYGBgdHMKYXdhaXQgZmFzdGlmeS5yZWdpc3RlcihyZXF1aXJlKCdAc2NhbGFyL2Zhc3RpZnktYXBpLXJlZmVyZW5jZScpLCB7CiAgcm91dGVQcmVmaXg6ICcvcmVmZXJlbmNlJywKICBjb25maWd1cmF0aW9uOiB7CiAgICBzcGVjOiAoKSA9PiBmYXN0aWZ5LnN3YWdnZXIoKSwKICB9LAp9KQpgYGAKCkFjdHVhbGx5LCBpdOKAmXMgZXhlY3V0aW5nIHRoZSBgZmFzdGlmeS5zd2FnZ2VyKClgIGNhbGwgYnkgZGVmYXVsdCAoaWYgYXZhaWxhYmxlKS4gU28gdGhhdOKAmXMgYWxsIHlvdSBuZWVkIHRvIGFkZDoKCmBgYHRzCmF3YWl0IGZhc3RpZnkucmVnaXN0ZXIocmVxdWlyZSgnQHNjYWxhci9mYXN0aWZ5LWFwaS1yZWZlcmVuY2UnKSwgewogIHJvdXRlUHJlZml4OiAnL3JlZmVyZW5jZScsCn0pCmBgYAoKUmVhZCBtb3JlOiBbQHNjYWxhci9mYXN0aWZ5LWFwaS1yZWZlcmVuY2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL3RyZWUvbWFpbi9wYWNrYWdlcy9mYXN0aWZ5LWFwaS1yZWZlcmVuY2UpCgojIyMgV2l0aCBIb25vCgpPdXIgSG9ubyBtaWRkbGV3YXJlIG1ha2VzIGl0IHNvIGVhc3kgdG8gcmVuZGVyIGEgcmVmZXJlbmNlOgoKYGBgdHMKaW1wb3J0IHsgYXBpUmVmZXJlbmNlIH0gZnJvbSAnQHNjYWxhci9ob25vLWFwaS1yZWZlcmVuY2UnCgphcHAuZ2V0KAogICcvcmVmZXJlbmNlJywKICBhcGlSZWZlcmVuY2UoewogICAgc3BlYzogewogICAgICB1cmw6ICcvc3dhZ2dlci5qc29uJywKICAgIH0sCiAgfSksCikKYGBgCgpSZWFkIG1vcmU6IFtAc2NhbGFyL2hvbm8tYXBpLXJlZmVyZW5jZV0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL2hvbm8tYXBpLXJlZmVyZW5jZSkKCiMjIyBXaXRoIEV4cHJlc3MKCk91ciBFeHByZXNzIG1pZGRsZXdhcmUgbWFrZXMgaXQgc28gZWFzeSB0byByZW5kZXIgYSByZWZlcmVuY2U6CgpgYGB0cwppbXBvcnQgeyBhcGlSZWZlcmVuY2UgfSBmcm9tICdAc2NhbGFyL2V4cHJlc3MtYXBpLXJlZmVyZW5jZScKCmFwcC51c2UoCiAgJy9yZWZlcmVuY2UnLAogIGFwaVJlZmVyZW5jZSh7CiAgICBzcGVjOiB7CiAgICAgIGNvbnRlbnQ6IE9wZW5BcGlTcGVjaWZpY2F0aW9uLAogICAgfSwKICB9KSwKKQpgYGAKClJlYWQgbW9yZTogW0BzY2FsYXIvZXhwcmVzcy1hcGktcmVmZXJlbmNlXShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci90cmVlL21haW4vcGFja2FnZXMvZXhwcmVzcy1hcGktcmVmZXJlbmNlKQoKIyMgSG9zdGVkIEFQSSBSZWZlcmVuY2UKCldhaXQsIHRoaXMgaXMgb3BlbiBzb3VyY2UgYW5kIHlvdSBjYW4gZG8gd2hhdGV2ZXIgeW91IHdhbnQuIEJ1dCBpZiB5b3Ugd2FudCB0byBhZGQgYSBuaWNlLCBjdXN0b21pemFibGUgZ3VpZGUsIGNvbGxhYm9yYXRlIHdpdGggeW91ciB0ZWFtIGFuZCBoYXZlIGV2ZXJ5dGhpbmcgc2VydmVkIHRocm91Z2ggYSBDRE4sIGNyZWF0ZSBhbiBhY2NvdW50IG9uIFtzY2FsYXIuY29tXShodHRwczovL3NjYWxhci5jb20pLgoKIyMgQ29uZmlndXJhdGlvbgoKVG8gY3VzdG9taXplIHRoZSBiZWhhdmlvciBvZiB0aGUgQVBJIFJlZmVyZW5jZSwgeW91IGNhbiB1c2UgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnM6CgotIGBpc0VkaXRhYmxlYDogV2hldGhlciB0aGUgU3dhZ2dlciBlZGl0b3Igc2hvdWxkIGJlIHNob3duLgotIGBzcGVjLmNvbnRlbnRgOiBEaXJlY3RseSBwYXNzIGFuIE9wZW5BUEkvU3dhZ2dlciBzcGVjLgotIGBzcGVjLnVybGA6IFBhc3MgdGhlIFVSTCBvZiBhIHNwZWMgZmlsZSAoSlNPTiBvciBZQU1MKS4KLSBgc3BlYy5wcmVwYXJzZWRDb250ZW50YDogUHJlcHJvY2VzcyBzcGVjcyB3aXRoIGBAc2NhbGFyL3N3YWdnZXItcGFyc2VyYCBhbmQgZGlyZWN0bHkgcGFzcyB0aGUgcmVzdWx0LgotIGBwcm94eVVybGA6IFVzZSBhIHByb3h5IHRvIHNlbmQgcmVxdWVzdHMgdG8gb3RoZXIgb3JpZ2lucy4KLSBgc2hvd1NpZGViYXJgOiBXaGV0aGVyIHRoZSBzaWRlYmFyIHNob3VsZCBiZSBzaG93bi4KLSBgY3VzdG9tQ3NzYDogUGFzcyBjdXN0b20gQ1NTIGRpcmVjdGx5IHRvIHRoZSBjb21wb25lbnQuCi0gYHNlYXJjaEhvdEtleWA6IEtleSB1c2VkIHdpdGggQ05UUkwvQ01EIHRvIG9wZW4gdGhlIHNlYXJjaCBtb2RhbC4KLSBgbWV0YURhdGFgOiBDb25maWd1cmUgbWV0YSBpbmZvcm1hdGlvbiBmb3IgdGhlIHBhZ2UuCi0gYG9uU3BlY1VwZGF0ZWA6IExpc3RlbiB0byBzcGVjIGNoYW5nZXMgd2l0aCBhIGNhbGxiYWNrIGZ1bmN0aW9uLgoKRm9yIGRldGFpbGVkIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgdGhlc2Ugb3B0aW9ucywgcmVmZXIgdG8gdGhlIFtDb25maWd1cmF0aW9uIFNlY3Rpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2Jsb2IvbWFpbi9wYWNrYWdlcy9hcGktcmVmZXJlbmNlL1JFQURNRS5tZC8jY29uZmlndXJhdGlvbikuCgojIyBUaGVtZXMKCllvdSBkb27igJl0IGxpa2UgdGhlIGNvbG9yIHNjaGVtZT8gV2XigJl2ZSBwcmVwYXJlZCBzb21lIHRoZW1lcyBmb3IgeW91OgoKYGBgdnVlCi8qIHRoZW1lPzogJ2FsdGVybmF0ZScgfCAnZGVmYXVsdCcgfCAnbW9vbicgfCAncHVycGxlJyB8ICdzb2xhcml6ZWQnICovCjxBcGlSZWZlcmVuY2UgOmNvbmZpZ3VyYXRpb249InsgdGhlbWU6ICdtb29uJyB9IiAvPgpgYGAKCuKEue+4jyBUaGUgYGRlZmF1bHRgIHRoZW1lIGlzIOKApsKgdGhlIGRlZmF1bHQgdGhlbWUuIElmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSBubyB0aGVtZSBpcyBhcHBsaWVkLCBwYXNzIGBub25lYC4KCiMjIEFkdmFuY2VkOiBTdHlsaW5nCgpPdmVyd3JpdGUgb3VyIENTUyB2YXJpYWJsZXMuIFdlIHdvbuKAmXQganVkZ2UuCgpgYGAKOnJvb3QgewogIC0tdGhlbWUtZm9udDogJ0NvbWljIFNhbnMgTVMnLCAnQ29taWMgU2FucycsIGN1cnNpdmU7Cn0KYGBgCgpXZeKAmXJlIHVzaW5nIHRoZSBgZGVmYXVsdC1gIHByZWZpeCBmb3Igb3VyIHZhcmlhYmxlcyB0byBub3Qgb3ZlcndyaXRlIHlvdXIgdmFyaWFibGVzLiBZb3UgY2FuIFt1c2UgYWxsIHZhcmlhYmxlcyB3aXRob3V0IGEgcHJlZml4XShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci9ibG9iL21haW4vcGFja2FnZXMvdGhlbWVzL3NyYy9iYXNlLmNzcykuCgpgYGBjc3MKLyog4pyFIEdvb2QgKHdpdGhvdXQgYGRlZmF1bHRgIHByZWZpeCkgKi8KLS10aGVtZS1mb250OiAnQ29taWMgU2FucyBNUycsICdDb21pYyBTYW5zJywgY3Vyc2l2ZTsKLyog4p2MIEJhZCAod2l0aCBgZGVmYXVsdGAgcHJlZml4KSAqLwotLWRlZmF1bHQtdGhlbWUtZm9udDogJ0NvbWljIFNhbnMgTVMnLCAnQ29taWMgU2FucycsIGN1cnNpdmU7CmBgYAoKT3ZlcndyaXRlIG91ciBuaWdodCBtb2RlIGFuZCBkYXkgbW9kZSB2YXJpYWJsZXMgdG8gYnVpbGQgeW91ciBvd24gdGhlbWVzLiBIZXJlIGFyZSBzb21lIG9mIHRoZSBiYXNpYyB2YXJpYWJsZXMgdG8gZ2V0IHlvdSBzdGFydGVkOgoKIVtiYXNpYy1zY2FsYXItdmFyaWFibGVzXShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci9hc3NldHMvNjIwMTQwNy82MzUyNDMyMS02NmQyLTQ0ZDAtODUwOS0zZGI3ZTA0NWEzMTUpCgpgYGAKLmxpZ2h0LW1vZGUgewogIC0tdGhlbWUtY29sb3ItMTogIzEyMTIxMjsKICAtLXRoZW1lLWNvbG9yLTI6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAtLXRoZW1lLWNvbG9yLTM6IHJnYmEoMCwgMCwgMCwgMC40KTsKICAtLXRoZW1lLWNvbG9yLWFjY2VudDogIzBhODVkMTsKICAtLXRoZW1lLWJhY2tncm91bmQtMTogI2ZmZjsKICAtLXRoZW1lLWJhY2tncm91bmQtMjogI2Y2ZjVmNDsKICAtLXRoZW1lLWJhY2tncm91bmQtMzogI2YxZWRlOTsKICAtLXRoZW1lLWJhY2tncm91bmQtYWNjZW50OiAjNTM2OWQyMGY7CiAgLS10aGVtZS1ib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4wOCk7Cn0KLmRhcmstbW9kZSB7CiAgLS10aGVtZS1jb2xvci0xOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuODEpOwogIC0tdGhlbWUtY29sb3ItMjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjQ0Myk7CiAgLS10aGVtZS1jb2xvci0zOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjgyKTsKICAtLXRoZW1lLWNvbG9yLWFjY2VudDogIzhhYjRmODsKICAtLXRoZW1lLWJhY2tncm91bmQtMTogIzIwMjAyMDsKICAtLXRoZW1lLWJhY2tncm91bmQtMjogIzI3MjcyNzsKICAtLXRoZW1lLWJhY2tncm91bmQtMzogIzMzMzMzMzsKICAtLXRoZW1lLWJhY2tncm91bmQtYWNjZW50OiAjOGFiNGY4MWY7Cn0KYGBgCgpPciBnZXQgbW9yZSBhZHZhbmNlZCBieSBzdHlsaW5nIG91ciBzaWRlYmFyIQoKIVtzY2FsYXItc2lkZWJhci12YXJpYWJsZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2Fzc2V0cy82MjAxNDA3LzJjMzYzY2JjLWYwNmYtNGFkMy1iNDRmLTA1Y2VlOGM5NWE4YikKCmBgYAoubGlnaHQtbW9kZSAuc2lkZWJhciB7CiAgLS1zaWRlYmFyLWJhY2tncm91bmQtMTogdmFyKC0tdGhlbWUtYmFja2dyb3VuZC0xKTsKICAtLXNpZGViYXItaXRlbS1ob3Zlci1jb2xvcjogY3VycmVudENvbG9yOwogIC0tc2lkZWJhci1pdGVtLWhvdmVyLWJhY2tncm91bmQ6IHZhcigtLXRoZW1lLWJhY2tncm91bmQtMik7CiAgLS1zaWRlYmFyLWl0ZW0tYWN0aXZlLWJhY2tncm91bmQ6IHZhcigtLXRoZW1lLWJhY2tncm91bmQtMik7CiAgLS1zaWRlYmFyLWJvcmRlci1jb2xvcjogdmFyKC0tdGhlbWUtYm9yZGVyLWNvbG9yKTsKICAtLXNpZGViYXItY29sb3ItMTogdmFyKC0tdGhlbWUtY29sb3ItMSk7CiAgLS1zaWRlYmFyLWNvbG9yLTI6IHZhcigtLXRoZW1lLWNvbG9yLTIpOwogIC0tc2lkZWJhci1jb2xvci1hY3RpdmU6IHZhcigtLXRoZW1lLWNvbG9yLTIpOwogIC0tc2lkZWJhci1zZWFyY2gtYmFja2dyb3VuZDogdmFyKC0tdGhlbWUtYmFja2dyb3VuZC0yKTsKICAtLXNpZGViYXItc2VhcmNoLWJvcmRlci1jb2xvcjogdmFyKC0tdGhlbWUtYm9yZGVyLWNvbG9yKTsKICAtLXNpZGViYXItc2VhcmNoLS1jb2xvcjogdmFyKC0tdGhlbWUtY29sb3ItMyk7Cn0KLmRhcmstbW9kZSAuc2lkZWJhciB7CiAgLS1zaWRlYmFyLWJhY2tncm91bmQtMTogdmFyKC0tdGhlbWUtYmFja2dyb3VuZC0xKTsKICAtLXNpZGViYXItaXRlbS1ob3Zlci1jb2xvcjogY3VycmVudENvbG9yOwogIC0tc2lkZWJhci1pdGVtLWhvdmVyLWJhY2tncm91bmQ6IHZhcigtLXRoZW1lLWJhY2tncm91bmQtMik7CiAgLS1zaWRlYmFyLWl0ZW0tYWN0aXZlLWJhY2tncm91bmQ6IHZhcigtLXRoZW1lLWJhY2tncm91bmQtMik7CiAgLS1zaWRlYmFyLWJvcmRlci1jb2xvcjogdmFyKC0tdGhlbWUtYm9yZGVyLWNvbG9yKTsKICAtLXNpZGViYXItY29sb3ItMTogdmFyKC0tdGhlbWUtY29sb3ItMSk7CiAgLS1zaWRlYmFyLWNvbG9yLTI6IHZhcigtLXRoZW1lLWNvbG9yLTIpOwogIC0tc2lkZWJhci1jb2xvci1hY3RpdmU6IHZhcigtLXRoZW1lLWNvbG9yLTIpOwogIC0tc2lkZWJhci1zZWFyY2gtYmFja2dyb3VuZDogdmFyKC0tdGhlbWUtYmFja2dyb3VuZC0yKTsKICAtLXNpZGViYXItc2VhcmNoLWJvcmRlci1jb2xvcjogdmFyKC0tdGhlbWUtYm9yZGVyLWNvbG9yKTsKICAtLXNpZGViYXItc2VhcmNoLS1jb2xvcjogdmFyKC0tdGhlbWUtY29sb3ItMyk7Cn0KYGBgCgojIyBDb21tdW5pdHkKCldlIGFyZSBBUEkgbmVyZHMuIFlvdSB0b28/IExldOKAmXMgY2hhdCBvbiBEaXNjb3JkOiA8aHR0cHM6Ly9kaXNjb3JkLmdnLzhIZVpjUkdQRlM+CgojIyBPdGhlciBwYWNrYWdlcwoKVGhpcyByZXBvc2l0b3J5IGNvbnRhaW5zIGFsbCBvdXIgb3BlbiBzb3VyY2UgcHJvamVjdHMgYW5kIHRoZXJl4oCZcyBkZWZpbml0ZWx5IG1vcmUgdG8gZGlzY292ZXIuCgp8IFBhY2thZ2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwKfCBbQHNjYWxhci9hcGktY2xpZW50XShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci90cmVlL21haW4vcGFja2FnZXMvYXBpLWNsaWVudCkgICAgICAgICAgICAgICAgICAgICAgIHwgdGhlIG9wZW4gc291cmNlIEFQSSB0ZXN0aW5nIGNsaWVudCAgICAgICAgICAgICAgICAgICAgfAp8IFtAc2NhbGFyL2FwaS1jbGllbnQtcHJveHldKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL3RyZWUvbWFpbi9wYWNrYWdlcy9hcGktY2xpZW50LXByb3h5KSAgICAgICAgICAgfCBhbiBhcGkgcmVxdWVzdCBwcm94eSBiYXNlZCBvbiBleHByZXNzICAgICAgICAgICAgICAgICB8CnwgW0BzY2FsYXIvYXBpLXJlZmVyZW5jZV0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL2FwaS1yZWZlcmVuY2UpICAgICAgICAgICAgICAgICB8IGdlbmVyYXRlIGJlYXV0aWZ1bCBBUEkgcmVmZXJlbmNlcyAgICAgICAgICAgICAgICAgICAgIHwKfCBbQHNjYWxhci9lY2hvLXNlcnZlcl0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL2VjaG8tc2VydmVyKSAgICAgICAgICAgICAgICAgICAgIHwgYW4gZXhwcmVzcyBzZXJ2ZXIgd2hpY2ggcmVwbGllcyB3aXRoIHRoZSByZXF1ZXN0IGRhdGEgfAp8IFtAc2NhbGFyL2Zhc3RpZnktYXBpLXJlZmVyZW5jZV0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL2Zhc3RpZnktYXBpLXJlZmVyZW5jZSkgfCBhIGZhc3RpZnkgcGx1Z2luIHRvIHJlbmRlciBBUEkgcmVmZXJlbmNlcyAgICAgICAgICAgICB8CnwgW0BzY2FsYXIvaG9uby1hcGktcmVmZXJlbmNlXShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci90cmVlL21haW4vcGFja2FnZXMvaG9uby1hcGktcmVmZXJlbmNlKSAgICAgICB8IGEgaG9ubyBtaWRkbGV3YXJlIHRvIHJlbmRlciBBUEkgcmVmZXJlbmNlcyAgICAgICAgICAgIHwKfCBbQHNjYWxhci9zd2FnZ2VyLWVkaXRvcl0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL3N3YWdnZXItZWRpdG9yKSAgICAgICAgICAgICAgIHwgYW4gZWRpdG9yIHRhaWxvcmVkIHRvIHdyaXRlIE9wZW5BUEkgc3BlYyAgICAgICAgICAgICAgfAp8IFtAc2NhbGFyL3N3YWdnZXItcGFyc2VyXShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci90cmVlL21haW4vcGFja2FnZXMvc3dhZ2dlci1wYXJzZXIpICAgICAgICAgICAgICAgfCBwYXJzZSBPcGVuQVBJIHNwZWNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgW0BzY2FsYXIvdXNlLWNsaXBib2FyZF0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL3VzZS1jbGlwYm9hcmQpICAgICAgICAgICAgICAgICB8IHRpbnkgVnVlIHdyYXBwZXIgYXJvdW5kIHRoZSBjbGlwYm9hcmQgQVBJICAgICAgICAgICAgIHwKfCBbQHNjYWxhci91c2UtY29kZW1pcnJvcl0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL3VzZS1jb2RlbWlycm9yKSAgICAgICAgICAgICAgIHwgQ29kZU1pcnJvciBmb3IgVnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAp8IFtAc2NhbGFyL3VzZS1rZXlib2FyZC1ldmVudF0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL3VzZS1rZXlib2FyZC1ldmVudCkgICAgICAgfCBrZXlib2FyZCBzaG9ydGN1dHMgZm9yIFZ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgW0BzY2FsYXIvdXNlLXRvYXN0c10oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL3VzZS10b2FzdHMpICAgICAgICAgICAgICAgICAgICAgICB8IGRpc3BsYXkgdG9hc3RzIGluIFZ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCBbQHNjYWxhci91c2UtdG9vbHRpcF0oaHR0cHM6Ly9naXRodWIuY29tL3NjYWxhci9zY2FsYXIvdHJlZS9tYWluL3BhY2thZ2VzL3VzZS10b29sdGlwKSAgICAgICAgICAgICAgICAgICAgIHwgdG9vbHRpcHMgaW4gVnVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAoKIyMgQ29udHJpYnV0b3JzCgo8IS0tIHJlYWRtZTogY29sbGFib3JhdG9ycyxjb250cmlidXRvcnMgLXN0YXJ0IC0tPgo8dGFibGU+Cjx0cj4KICAgIDx0ZCBhbGlnbj0iY2VudGVyIj4KICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vaGFuc3BhZ2VsIj4KICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTc3OTkyP3Y9NCIgd2lkdGg9IjEwMDsiIGFsdD0iaGFuc3BhZ2VsIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPmhhbnNwYWdlbDwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS90bWFzdHJvbSI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzY1MjUzMjk/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJ0bWFzdHJvbSIvPgogICAgICAgICAgICA8YnIgLz4KICAgICAgICAgICAgPHN1Yj48Yj50bWFzdHJvbTwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9tYXJjbGF2ZSI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNjE3NjMxND92PTQiIHdpZHRoPSIxMDA7IiBhbHQ9Im1hcmNsYXZlIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPm1hcmNsYXZlPC9iPjwvc3ViPgogICAgICAgIDwvYT4KICAgIDwvdGQ+CiAgICA8dGQgYWxpZ249ImNlbnRlciI+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2h3a3IiPgogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzYzNzQwOTA/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJod2tyIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPmh3a3I8L2I+PC9zdWI+CiAgICAgICAgPC9hPgogICAgPC90ZD4KICAgIDx0ZCBhbGlnbj0iY2VudGVyIj4KICAgICAgICA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2FtZXJvbnJvaGFuaSI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNjIwMTQwNz92PTQiIHdpZHRoPSIxMDA7IiBhbHQ9ImNhbWVyb25yb2hhbmkiLz4KICAgICAgICAgICAgPGJyIC8+CiAgICAgICAgICAgIDxzdWI+PGI+Y2FtZXJvbnJvaGFuaTwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9hbXJpdGsiPgogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzIwMzk1Mzk/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJhbXJpdGsiLz4KICAgICAgICAgICAgPGJyIC8+CiAgICAgICAgICAgIDxzdWI+PGI+YW1yaXRrPC9iPjwvc3ViPgogICAgICAgIDwvYT4KICAgIDwvdGQ+PC90cj4KPHRyPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9nZW9mZmdzY290dCI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNTkyMDYxMDA/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJnZW9mZmdzY290dCIvPgogICAgICAgICAgICA8YnIgLz4KICAgICAgICAgICAgPHN1Yj48Yj5nZW9mZmdzY290dDwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9BVFJFQVkiPgogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzY2NTg1Mjk1P3Y9NCIgd2lkdGg9IjEwMDsiIGFsdD0iQVRSRUFZIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPkFUUkVBWTwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Nb2hpYjgzNCI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNDczMTY0NjQ/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJNb2hpYjgzNCIvPgogICAgICAgICAgICA8YnIgLz4KICAgICAgICAgICAgPHN1Yj48Yj5Nb2hpYjgzNDwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9tb3VoYW5uYWQtc2giPgogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE4NDk1NzQwP3Y9NCIgd2lkdGg9IjEwMDsiIGFsdD0ibW91aGFubmFkLXNoIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPm1vdWhhbm5hZC1zaDwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc2xlYXJuIj4KICAgICAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS81ODc0ODY0P3Y9NCIgd2lkdGg9IjEwMDsiIGFsdD0iY2hyaXNsZWFybiIvPgogICAgICAgICAgICA8YnIgLz4KICAgICAgICAgICAgPHN1Yj48Yj5jaHJpc2xlYXJuPC9iPjwvc3ViPgogICAgICAgIDwvYT4KICAgIDwvdGQ+CiAgICA8dGQgYWxpZ249ImNlbnRlciI+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2RhbnAiPgogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzIxODI/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJkYW5wIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPmRhbnA8L2I+PC9zdWI+CiAgICAgICAgPC9hPgogICAgPC90ZD48L3RyPgo8dHI+CiAgICA8dGQgYWxpZ249ImNlbnRlciI+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2pvbmF0YXciPgogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzI5NzcyNzYzP3Y9NCIgd2lkdGg9IjEwMDsiIGFsdD0iam9uYXRhdyIvPgogICAgICAgICAgICA8YnIgLz4KICAgICAgICAgICAgPHN1Yj48Yj5qb25hdGF3PC9iPjwvc3ViPgogICAgICAgIDwvYT4KICAgIDwvdGQ+CiAgICA8dGQgYWxpZ249ImNlbnRlciI+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL0lISXV0Y2giPgogICAgICAgICAgICA8aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzIwODI1MDQ3P3Y9NCIgd2lkdGg9IjEwMDsiIGFsdD0iSUhJdXRjaCIvPgogICAgICAgICAgICA8YnIgLz4KICAgICAgICAgICAgPHN1Yj48Yj5JSEl1dGNoPC9iPjwvc3ViPgogICAgICAgIDwvYT4KICAgIDwvdGQ+CiAgICA8dGQgYWxpZ249ImNlbnRlciI+CiAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL01hc29uLUxpdHRsZSI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTA1MDA4NDQxP3Y9NCIgd2lkdGg9IjEwMDsiIGFsdD0iTWFzb24tTGl0dGxlIi8+CiAgICAgICAgICAgIDxiciAvPgogICAgICAgICAgICA8c3ViPjxiPk1hc29uLUxpdHRsZTwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPgogICAgPHRkIGFsaWduPSJjZW50ZXIiPgogICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Gb3RpZU1Db25zdGFudCI+CiAgICAgICAgICAgIDxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNDIzNzI2NTY/dj00IiB3aWR0aD0iMTAwOyIgYWx0PSJGb3RpZU1Db25zdGFudCIvPgogICAgICAgICAgICA8YnIgLz4KICAgICAgICAgICAgPHN1Yj48Yj5Gb3RpZU1Db25zdGFudDwvYj48L3N1Yj4KICAgICAgICA8L2E+CiAgICA8L3RkPjwvdHI+CjwvdGFibGU+CjwhLS0gcmVhZG1lOiBjb2xsYWJvcmF0b3JzLGNvbnRyaWJ1dG9ycyAtZW5kIC0tPgoKQ29udHJpYnV0aW9ucyBhcmUgd2VsY29tZSEgUmVhZCBbYENPTlRSSUJVVElOR2BdKGh0dHBzOi8vZ2l0aHViLmNvbS9zY2FsYXIvc2NhbGFyL2Jsb2IvbWFpbi9DT05UUklCVVRJTkcpLgoKIyMgTGljZW5zZQoKVGhlIHNvdXJjZSBjb2RlIGluIHRoaXMgcmVwb3NpdG9yeSBpcyBsaWNlbnNlZCB1bmRlciBbTUlUXShodHRwczovL2dpdGh1Yi5jb20vc2NhbGFyL3NjYWxhci9ibG9iL21haW4vTElDRU5TRSkuCg== + readmeEtag: '"c8de269fbcc27dd22283c462a4294abc57d5450bacd92eedf6a9bda2c77e1926"' + readmeLastModified: Thu, 14 Dec 2023 01:51:12 GMT repositoryId: 679280065 description: Beautiful API references from Swagger/OpenAPI files ✨ created: '2023-08-16T13:42:32Z' - updated: '2023-12-13T03:20:52Z' + updated: '2023-12-13T17:43:08Z' language: Vue archived: false - stars: 1476 + stars: 1479 watchers: 7 forks: 20 owner: scalar logo: https://avatars.githubusercontent.com/u/301879?v=4 license: MIT - repoEtag: '"38bd4d3b35057073dd38dd5bd0660fae17fc26a2e74c1435c2cba159ddc1f34d"' - repoLastModified: Wed, 13 Dec 2023 03:20:52 GMT + repoEtag: '"7195114aa497a0606ed948e7bedb0473cf520b161fba3872133d19657adc0f4f"' + repoLastModified: Wed, 13 Dec 2023 17:43:08 GMT foundInMaster: true - source: - https://openapi.tools/ @@ -100,17 +100,17 @@ changes, publish accurate documentation and improve the design of your APIs. created: '2018-03-02T17:02:50Z' - updated: '2023-12-07T02:01:02Z' + updated: '2023-12-13T14:08:20Z' language: TypeScript archived: false - stars: 1227 + stars: 1228 watchers: 11 - forks: 66 + forks: 68 owner: opticdev logo: https://avatars.githubusercontent.com/u/34556970?v=4 license: MIT - repoEtag: '"bea3c4e9d72f4bf02e168282728bd703da8bc7033e97643d36bcf97026358028"' - repoLastModified: Thu, 07 Dec 2023 02:01:02 GMT + repoEtag: '"bd351e1d1ed731ef1f749af4de29475f67cdeb579b758293c18e4b0e42375578"' + repoLastModified: Wed, 13 Dec 2023 14:08:20 GMT foundInMaster: true id: 8c3d08406ca659662808d51ddc10b4e4 v3_1: true @@ -374,17 +374,17 @@ Convert API descriptions between popular formats such as OpenAPI(fka Swagger), RAML, API Blueprint, WADL, etc. created: '2015-05-05T18:30:05Z' - updated: '2023-12-12T10:52:30Z' + updated: '2023-12-13T19:31:59Z' language: JavaScript archived: false - stars: 1050 + stars: 1051 watchers: 21 forks: 172 owner: LucyBot-Inc logo: https://avatars.githubusercontent.com/u/26313641?v=4 license: MIT - repoEtag: '"b8bdadfacca80a85c34ae891a79bcded787427124cb7874efafae1d64acb36d8"' - repoLastModified: Tue, 12 Dec 2023 10:52:30 GMT + repoEtag: '"1ee7df812bfa0eb0ef35edfc3d6f27feef72b1defe8edd7cd7c388734b1ebefe"' + repoLastModified: Wed, 13 Dec 2023 19:31:59 GMT foundInMaster: true id: dccbe92257187d6d136bb4b5f304d6fe - source: https://openapi.tools/ @@ -577,17 +577,17 @@ repositoryId: 45250726 description: 📘 OpenAPI/Swagger-generated API Reference Documentation created: '2015-10-30T12:53:02Z' - updated: '2023-12-13T01:52:55Z' + updated: '2023-12-13T19:13:35Z' language: TypeScript archived: false - stars: 21587 - watchers: 287 - forks: 2262 + stars: 21593 + watchers: 288 + forks: 2261 owner: Redocly logo: https://avatars.githubusercontent.com/u/32099856?v=4 license: MIT - repoEtag: '"a1d9852a01b903d7425110470cd77e565032802a670098ccaa805f5f1374a2a5"' - repoLastModified: Wed, 13 Dec 2023 01:52:55 GMT + repoEtag: '"beb2115e85425fcdd6101918ae2da374992c0b6717a3d46ab53dc5faaa7dfd03"' + repoLastModified: Wed, 13 Dec 2023 19:13:35 GMT foundInMaster: true - source: https://openapi.tools/ name: oas3-api-snippet-enricher @@ -643,17 +643,17 @@ OpenAPI / Swagger, AsyncAPI & Semoasa definitions to (re)Slate compatible markdown created: '2016-10-05T23:09:13Z' - updated: '2023-12-12T15:47:56Z' + updated: '2023-12-13T12:07:25Z' language: JavaScript archived: false - stars: 1400 + stars: 1402 watchers: 16 forks: 317 owner: Mermade logo: https://avatars.githubusercontent.com/u/15950345?v=4 license: MIT - repoEtag: '"aa21e02eecb22b95d1da2b11c7dcb3d45435ed75971bfbccbd73d242249fa9e4"' - repoLastModified: Tue, 12 Dec 2023 15:47:56 GMT + repoEtag: '"62268baa55425051bda734e7530b8fde9143789d9ec5e788bd98b69a0ae38801"' + repoLastModified: Wed, 13 Dec 2023 12:07:25 GMT foundInMaster: true homepage: https://github.com/Mermade/widdershins id: ab4fb414065011325683c7b582a9e582 @@ -674,16 +674,16 @@ repositoryId: 159911001 description: OpenApi viewer Implemented using Vue created: '2018-12-01T05:06:18Z' - updated: '2023-06-29T06:24:02Z' + updated: '2023-12-14T00:17:49Z' language: Vue archived: false - stars: 96 + stars: 97 watchers: 2 forks: 19 owner: mrin9 logo: https://avatars.githubusercontent.com/u/5056899?v=4 - repoEtag: '"1f182a5f13db49c08dfe1a7ef4b49fbb07dc5bf58f6c6504fce03511f988e9ff"' - repoLastModified: Thu, 29 Jun 2023 06:24:02 GMT + repoEtag: '"49a3eeb41bfc822a56ad50f9de30d94e5fad91a717788bfe8e92705f12792704"' + repoLastModified: Thu, 14 Dec 2023 00:17:49 GMT foundInMaster: true id: e8e8917a5716d2c743ba73a1b7ba57c4 - source: @@ -790,17 +790,17 @@ repositoryId: 152569547 description: Spot is a concise, developer-friendly way to describe your API contract. created: '2018-10-11T09:55:46Z' - updated: '2023-12-12T20:24:51Z' + updated: '2023-12-13T17:50:38Z' language: TypeScript archived: false - stars: 505 + stars: 506 watchers: 45 forks: 40 owner: airtasker logo: https://avatars.githubusercontent.com/u/1745680?v=4 license: NOASSERTION - repoEtag: '"b13e9510016361b2f8b19bcacffcefbe4f10967e4f346fc47cb95cb47de4834b"' - repoLastModified: Tue, 12 Dec 2023 20:24:51 GMT + repoEtag: '"edb89bfa9cb198d26a3108b50a975974d9ad08a08b8d13429e2f567ee71a55e6"' + repoLastModified: Wed, 13 Dec 2023 17:50:38 GMT foundInMaster: true id: 7c28c31ae17b20b046f57bb6765c3939 - source: @@ -825,17 +825,17 @@ repositoryId: 173009358 description: Generate Go client and server boilerplate from OpenAPI 3 specifications created: '2019-02-27T23:59:59Z' - updated: '2023-12-12T23:59:32Z' + updated: '2023-12-13T13:50:16Z' language: Go archived: false - stars: 4585 - watchers: 33 + stars: 4592 + watchers: 32 forks: 761 owner: deepmap logo: https://avatars.githubusercontent.com/u/47459865?v=4 license: Apache-2.0 - repoEtag: '"7cc580c81358b123b05537efe428b296bcb86f8e66adb197e0aa18ac3ae1905a"' - repoLastModified: Tue, 12 Dec 2023 23:59:32 GMT + repoEtag: '"3fc1a0b9582d2ae52b609d52dea0d2ae1447403cfb3cf1b98d6517d408ca3e1a"' + repoLastModified: Wed, 13 Dec 2023 13:50:16 GMT foundInMaster: true id: bc996e9362e78defa2eca82e5765d2f3 - source: https://openapi.tools/ @@ -902,17 +902,17 @@ generation), server stubs, documentation and configuration automatically given an OpenAPI Spec (v2, v3) created: '2018-05-12T09:57:56Z' - updated: '2023-12-13T00:45:40Z' + updated: '2023-12-14T02:50:23Z' language: Java archived: false - stars: 18437 + stars: 18451 watchers: 214 - forks: 5840 + forks: 5844 owner: OpenAPITools logo: https://avatars.githubusercontent.com/u/37325267?v=4 license: Apache-2.0 - repoEtag: '"8546338dc99e739b4789a4238e85b623c733ded5b08efed10e50ad9980357053"' - repoLastModified: Wed, 13 Dec 2023 00:45:40 GMT + repoEtag: '"b7f26b9208fec36b111a91e40b2a07d45dd549d56ef5dbfa479539c7222a93e3"' + repoLastModified: Thu, 14 Dec 2023 02:50:23 GMT foundInMaster: true id: 0418f8afcd0196c648d1a46c0c5c20d1 v3_1_link: https://github.com/OpenAPITools/openapi-generator/issues/9083 @@ -940,7 +940,7 @@ owner: openapi-json-schema-tools logo: https://avatars.githubusercontent.com/u/114849992?v=4 license: Apache-2.0 - repoEtag: '"617bb328cdf62a4a2ca007419c2d0d0621866fff956066eff378722b3f8f26eb"' + repoEtag: '"bdd832fe8dd8b7ad78cea3febeee444ecaea34911b6d52cb987f7f346c440e8b"' repoLastModified: Sat, 09 Dec 2023 07:29:57 GMT category: - Code Generators @@ -983,17 +983,17 @@ repositoryId: 323665366 description: OpenAPI based HTTP Client code generator created: '2020-12-22T15:35:49Z' - updated: '2023-12-12T10:46:55Z' + updated: '2023-12-13T16:58:54Z' language: C# archived: false - stars: 1040 + stars: 1044 watchers: 33 forks: 111 owner: microsoft logo: https://avatars.githubusercontent.com/u/6154722?v=4 license: MIT - repoEtag: '"680305bab856628c2da45158e0ce2da7da4778f5028d44b3f202e2085010303f"' - repoLastModified: Tue, 12 Dec 2023 10:46:55 GMT + repoEtag: '"c49141b7d60e4a04a547378412344df8dfd5032964060079323cce7220d5e73f"' + repoLastModified: Wed, 13 Dec 2023 16:58:54 GMT foundInMaster: true - source: https://openapi.tools/ name: FabriKt @@ -1030,7 +1030,7 @@ owner: cjbooms logo: https://avatars.githubusercontent.com/u/868640?v=4 license: Apache-2.0 - repoEtag: '"0ab45190a89585f29fe4af2ea6b4be19caacea92a2d9b41ce7f3ccdc7cdf64d1"' + repoEtag: '"5c64c4180533b28b92d7303a354ce305687c78d2731e48bf5c5e0cef1f67daf8"' repoLastModified: Tue, 12 Dec 2023 17:57:13 GMT foundInMaster: true - source: @@ -1040,23 +1040,23 @@ v3: true repositoryMetadata: base64Readme: >- - IyBCdW1wIGNsaQoKPHAgYWxpZ249ImNlbnRlciI+CiAgPGltZyB3aWR0aD0iMjAlIiBzcmM9Imh0dHBzOi8vYnVtcC5zaC9pY29uLWRlZmF1bHQtbGFyZ2UucG5nIiAvPgo8L3A+Cgo8cCBhbGlnbj0iY2VudGVyIj4KICA8YSBocmVmPSJodHRwczovL2hlbHAuYnVtcC5zaC8iPkhlbHA8L2E+IHwKICA8YSBocmVmPSJodHRwczovL2J1bXAuc2gvdXNlcnMvc2lnbl91cCI+U2lnbiB1cDwvYT4KPC9wPgoKVGhlIEJ1bXAgQ0xJIGlzIHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCB5b3VyIEFQSSBkb2N1bWVudGF0aW9uIGhvc3RlZCBvbiBCdW1wIGJ5IHVzaW5nIHRoZSBBUEkgb2YgW2RldmVsb3BlcnMuYnVtcC5zaF0oaHR0cHM6Ly9kZXZlbG9wZXJzLmJ1bXAuc2gpLiBJdCBpcyBidWlsdCB3aXRoIFtgb2NsaWZgXShodHRwczovL29jbGlmLmlvKSBpbiBUeXBlc2NyaXB0LgoKWyFbVmVyc2lvbl0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9ucG0vdi9idW1wLWNsaS5zdmcpXShodHRwczovL25wbWpzLm9yZy9wYWNrYWdlL2J1bXAtY2xpKQpbIVtUZXN0c10oaHR0cHM6Ly9naXRodWIuY29tL2J1bXAtc2gvY2xpL2FjdGlvbnMvd29ya2Zsb3dzL2NoZWNrcy55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2J1bXAtc2gvY2xpL2FjdGlvbnMvd29ya2Zsb3dzL2NoZWNrcy55bWwpClshW0xpY2Vuc2VdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vbnBtL2wvYnVtcC1jbGkuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2J1bXAtc2gvY2xpL2Jsb2IvbWFzdGVyL3BhY2thZ2UuanNvbikKCiMjIFRhYmxlIG9mIGNvbnRlbnRzCgoqIFtJbnN0YWxsYXRpb25dKCNpbnN0YWxsYXRpb24pCiogW1VzYWdlXSgjdXNhZ2UpCiogW0NvbW1hbmRzXSgjY29tbWFuZHMpCiogW0RldmVsb3BtZW50XSgjZGV2ZWxvcG1lbnQpCiogW0NvbnRyaWJ1dGluZ10oI2NvbnRyaWJ1dGluZykKKiBbVmVyc2lvbmluZ10oI3ZlcnNpb25pbmcpCgojIyBJbnN0YWxsYXRpb24KCkJ1bXAgaXMgaW5zdGFsbGVkIHZpYSBucG0uIFJ1biB0aGlzIGNvbW1hbmQgdG8gaW5zdGFsbCBpdCBmb3IgbG9jYWwgdXNlOgoKYGBgc2gtc2Vzc2lvbgpucG0gaW5zdGFsbCAtZyBidW1wLWNsaQpgYGAKCl9JZiB5b3UgYXJlIGxvb2tpbmcgdG8gdXNlIEJ1bXAgaW4gYSBjb250aW51b3VzIGludGVncmF0aW9uIGVudmlyb25tZW50IHlvdSBtaWdodCBiZSBpbnRlcmVzdGVkIGJ5IFtvdXIgR2l0aHViIEFjdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL21hcmtldHBsYWNlL2FjdGlvbnMvYXBpLWRvY3VtZW50YXRpb24tb24tYnVtcCkuXwoKIyMjIEhvdyBzaG91bGQgSSBkbyBpZiBJJ20gbm90IHVzaW5nIG5wbSA/CgpVbmZvcnR1bmF0ZWx5LCBhdCB0aGUgbW9tZW50IHdlIG9ubHkgcHVibGlzaCBhIG5wbSBwYWNrYWdlLiBIb3dldmVyIHdlIHBsYW4gdG8gZGlzdHJpYnV0ZSB1bml2ZXJzYWwgYmluYXJpZXMgaW4gdGhlIG1vc3QgY29tbW9uIHBhY2thZ2UgbWFuYWdlcnMgc29vbi4KCiMjIFVzYWdlCgpgYGBzaC1zZXNzaW9uCiQgbnBtIGluc3RhbGwgLWcgYnVtcC1jbGkKCiQgYnVtcCAtLWhlbHAKVGhlIEJ1bXAgQ0xJIGlzIHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCB5b3VyIEFQSSBkb2N1bWVudGF0aW9uIGhvc3RlZCBvbiBCdW1wIGJ5IHVzaW5nIHRoZSBBUEkgb2YgZGV2ZWxvcGVycy5idW1wLnNoCgpWRVJTSU9OCiAgYnVtcC1jbGkvMi41LjAgbGludXgteDY0IG5vZGUtdjE2LjE0LjAKClVTQUdFCiAgJCBidW1wIFtDT01NQU5EXQoKQ09NTUFORFMKICBkZXBsb3kgICBDcmVhdGUgYSBuZXcgdmVyc2lvbiBvZiB5b3VyIGRvY3VtZW50YXRpb24gZnJvbSB0aGUgZ2l2ZW4gZmlsZSBvciBVUkwuCiAgZGlmZiAgICAgR2V0IGEgY29tcGFyaXNvbiBkaWZmIHdpdGggeW91ciBkb2N1bWVudGF0aW9uIGZyb20gdGhlIGdpdmVuIGZpbGUgb3IgVVJMLgogIGhlbHAgICAgIERpc3BsYXkgaGVscCBmb3IgYnVtcC4KICBwcmV2aWV3ICBDcmVhdGUgYSBkb2N1bWVudGF0aW9uIHByZXZpZXcgZnJvbSB0aGUgZ2l2ZW4gZmlsZSBvciBVUkwuCmBgYAoKUGxlYXNlIGNoZWNrIHRoZSBbQnVtcCBDTEkgaGVscCBwYWdlXShodHRwczovL2hlbHAuYnVtcC5zaC9idW1wLWNsaSkgZm9yIG1vcmUgQ0xJIHVzYWdlIGRldGFpbHMuCgojIyBDb21tYW5kcwoKKiBbYGJ1bXAgcHJldmlldyBbRklMRV1gXSgjYnVtcC1wcmV2aWV3LWZpbGUpCiogW2BidW1wIGRlcGxveSBbRklMRV1gXSgjYnVtcC1kZXBsb3ktZmlsZSkKKiBbYGJ1bXAgZGlmZiBbRklMRV1gXSgjYnVtcC1kaWZmLWZpbGUpCgojIyMgYGJ1bXAgcHJldmlldyBbRklMRV1gCgpZb3UgY2FuIHByZXZpZXcgeW91ciBkb2N1bWVudGF0aW9uIGJ5IGNhbGxpbmcgdGhlIGBwcmV2aWV3YCBjb21tYW5kLiBBIHRlbXBvcmFyeSBwcmV2aWV3IHdpbGwgYmUgY3JlYXRlZCB3aXRoIGEgdW5pcXVlIFVSTC4gVGhpcyBwcmV2aWV3IHdpbGwgYmUgYXZhaWxhYmxlIGZvciAzMCBtaW51dGVzLiBZb3UgZG9uJ3QgbmVlZCBhbnkgY3JlZGVudGlhbHMgdG8gdXNlIHRoaXMgY29tbWFuZC4gSGVyZSBpcyBhbiBleGFtcGxlIHVzYWdlOgoKCmBgYHNoLXNlc3Npb24KJCBidW1wIHByZXZpZXcgaHR0cHM6Ly9iaXQubHkvYXN5bmNhcGkKKiBMZXQncyByZW5kZXIgYSBwcmV2aWV3IG9uIEJ1bXAuLi4gZG9uZQoqIFlvdXIgcHJldmlldyBpcyB2aXNpYmxlIGF0OiBodHRwczovL2J1bXAuc2gvcHJldmlldy9jMTkyZGFkMC03OWQ3LTQ0YjMtYjVlMS0yNDRiNjlmNjE4ZTQgKEV4cGlyZXMgYXQgMjAyMS0wNi0yOFQxODowNjo1NiswMjowMCkKYGBgCgpfTm90ZTogeW91IGNhbiB1c2UgdGhlIGAtLW9wZW5gIGZsYWcgdG8gb3BlbiB0aGUgcHJldmlldyBVUkwgaW4geW91ciBicm93c2VyIGRpcmVjdGx5Ll8KCl9Ob3RlMjogeW91IGNhbiB1c2UgdGhlIGAtLWxpdmVgIGZsYWcgdG8gd2F0Y2ggY2hhbmdlcyBvZiB0aGUgaW5wdXQgYEZJTEVgLiBUaGlzIGlzIHZlcnkgaGVscGZ1bCB3aGVuIHdyaXRpbmcgeW91ciBhcGkgZGVmaW5pdGlvbiBhcyB5b3Ugd2lsbCBzZWUgYSBsaXZlIHByZXZpZXcgYmVpbmcgcmVmcmVzaGVkIGF0IGVhY2ggZmlsZSBzYXZlLl8KClBsZWFzZSBjaGVjayBgYnVtcCBwcmV2aWV3IC0taGVscGAgZm9yIG1vcmUgdXNhZ2UgZGV0YWlscwoKIyMjIGBidW1wIGRlcGxveSBbRklMRV1gCgpEZXBsb3kgdGhlIGRlZmluaXRpb24gZmlsZSBhcyB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudGF0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBgc2gtc2Vzc2lvbgokIGJ1bXAgZGVwbG95IHBhdGgvdG8veW91ci9maWxlLnltbCAtLWRvYyBET0NfSURfT1JfU0xVRyAtLXRva2VuIERPQ19UT0tFTgpgYGAKCkRlcGxveSB0aGUgZGVmaW5pdGlvbiBmaWxlIHRvIHRoZSBgc3RhZ2luZ2AgYnJhbmNoIG9mIHRoZSBkb2N1bWVudGF0aW9uOgoKYGBgc2gtc2Vzc2lvbgokIGJ1bXAgZGVwbG95IHBhdGgvdG8veW91ci9maWxlLnltbCAtLWRvYyBET0NfSURfT1JfU0xVRyAtLXRva2VuIERPQ19UT0tFTiAtLWJyYW5jaCBzdGFnaW5nCmBgYAoKSWYgeW91IGFscmVhZHkgaGF2ZSBhIGh1YiBpbiB5b3VyIFtCdW1wLnNoXShodHRwczovL2J1bXAuc2gpIGFjY291bnQsIHlvdSBjYW4gYXV0b21hdGljYWxseSBjcmVhdGUgYSBkb2N1bWVudGF0aW9uIGluc2lkZSBpdCBhbmQgZGVwbG95IHRvIGl0IHdpdGg6CgpgYGBzaC1zZXNzaW9uCiQgYnVtcCBkZXBsb3kgcGF0aC90by95b3VyL2ZpbGUueW1sIC0tYXV0by1jcmVhdGUgLS1kb2MgRE9DX1NMVUcgLS1odWIgSFVCX0lEX09SX1NMVUcgLS10b2tlbiBIVUJfVE9LRU4KYGBgCgpXaXRoaW4gYSBIdWIsIHlvdSBjYW4gYWxzbyBkZXBsb3kgYSB3aG9sZSBkaXJlY3RvcnkgY29udGFpbmluZyBtdWx0aXBsZSBBUEkgZGVmaW5pdGlvbnMgaW4gYSBzaW5nbGUgY29tbWFuZDoKCmBgYHNoLXNlc3Npb24KJCBidW1wIGRlcGxveSBwYXRoL3RvL3lvdXIvYXBpcy8gLS1hdXRvLWNyZWF0ZSAtLWh1YiBIVUJfSURfT1JfU0xVRyAtLXRva2VuIEhVQl9UT0tFTgpgYGAKClNpbXVsYXRlIGEgZGVwbG95bWVudCBvZiB5b3VyIGRlZmluaXRpb24gZmlsZSB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQgd2l0aCB0aGUgYC0tZHJ5LXJ1bmAgZmxhZywgaXQgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBpbiBhIENvbnRpbnVvdXMgSW50ZWdyYXRpb24gZW52aXJvbm1lbnQgcnVubmluZyBhIHRlc3QgZGVwbG95bWVudCBvdXRzaWRlIHlvdXIgbWFpbiBicmFuY2g6CgpgYGBzaC1zZXNzaW9uCiQgYnVtcCBkZXBsb3kgcGF0aC90by95b3VyL2ZpbGUueW1sIC0tZHJ5LXJ1biAtLWRvYyBET0NfSURfT1JfU0xVRyAtLXRva2VuIERPQ19UT0tFTgpgYGAKClBsZWFzZSBjaGVjayBgYnVtcCBkZXBsb3kgLS1oZWxwYCBmb3IgbW9yZSB1c2FnZSBkZXRhaWxzCgojIyMgYGJ1bXAgZGlmZiBbRklMRV1gCgpfSWYgeW91IHdhbnQgdG8gcmVjZWl2ZSBhdXRvbWF0aWMgYGJ1bXAgZGlmZmAgcmVzdWx0cyBvbiB5b3VyIEdpdGh1YiBQdWxsIFJlcXVlc3RzIHlvdSBtaWdodCBiZSBpbnRlcmVzdGVkIGJ5IFtvdXIgR2l0aHViIEFjdGlvbl0oaHR0cHM6Ly9naXRodWIuY29tL21hcmtldHBsYWNlL2FjdGlvbnMvYXBpLWRvY3VtZW50YXRpb24tb24tYnVtcCNhcGktZGlmZi1vbi1wdWxsLXJlcXVlc3RzKSBkaWZmIGNvbW1hbmQuXwoKIyMjIyBQdWJsaWMgQVBJIGRpZmZzCgpGcm9tIGFueSB0d28gZGVmaW5pdGlvbiBmaWxlcyBvciBVUkxzLCB5b3UgY2FuIHJldHJpZXZlIGEgY29tcHJlaGVuc2l2ZSBjaGFuZ2Vsb2cgb2Ygd2hhdCBoYXMgY2hhbmdlZCBiZXR3ZWVuIHRoZW0uCgpgYGBzaC1zZXNzaW9uCiQgYnVtcCBkaWZmIHBhdGgvdG8veW91ci9maWxlLnltbCBwYXRoL3RvL3lvdXIvc2Vjb25kX2ZpbGUueW1sCiogQ29tcGFyaW5nIHRoZSB0d28gZ2l2ZW4gZGVmaW5pdGlvbiBmaWxlcy4uLiBkb25lCk1vZGlmaWVkOiBHRVQgL2NvbnNvbW1hdGlvbnMKICBSZXNwb25zZSBtb2RpZmllZDogMjAwCiAgICBbQnJlYWtpbmddIEJvZHkgYXR0cmlidXRlIG1vZGlmaWVkOiBlbmVyZ2llCmBgYAoKT3IgZnJvbSB0d28gVVJMczoKCmBgYHNoLXNlc3Npb24KJCBidW1wIGRpZmYgaHR0cHM6Ly9kZW1vLmJ1bXAuc2gvZG9jL3RyaXBzLWJvb2tzL2NoYW5nZXMvYmZlYzBhNDMtYjg3MC00NGRhLTllMDctNjBjODk1NWUxNWQ1Lmpzb24gaHR0cHM6Ly9kZW1vLmJ1bXAuc2gvZG9jL3RyaXBzLWJvb2tzLmpzb24KKiBDb21wYXJpbmcgdGhlIHR3byBnaXZlbiBkZWZpbml0aW9uIGZpbGVzLi4uIGRvbmUKTW9kaWZpZWQ6IFBPU1QgL2Jvb2tzCiAgUmVzcG9uc2UgbW9kaWZpZWQ6IDIwMAogICAgW0JyZWFraW5nXSBCb2R5IGF0dHJpYnV0ZSByZW1vdmVkOiBjZW50CmBgYAoKX05vdGU6IFlvdSBjYW4gYWxzbyB0ZXN0IHRoaXMgZmVhdHVyZSBpbiBvdXIgZGVkaWNhdGVkIHdlYiBhcHBsaWNhdGlvbiBhdCA8aHR0cHM6Ly9hcGktZGlmZi5pby8+Ll8KCiMjIyMgQXV0aGVudGljYXRlZCBkaWZmcyBhdHRhY2hlZCB0byB5b3VyIEJ1bXAgZG9jdW1lbnRhdGlvbgoKRnJvbSBhIEJ1bXAgZG9jdW1lbnRhdGlvbiwgdGhlIGBkaWZmYCBjb21tYW5kIHdpbGwgcmV0cmlldmUgYSBjb21wYXJpc29uIGNoYW5nZWxvZyBiZXR3ZWVuIHlvdXIgZXhpc3RpbmcgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIGdpdmVuIGZpbGUgb3IgVVJMOgoKYGBgc2gtc2Vzc2lvbgokIGJ1bXAgZGlmZiBwYXRoL3RvL3lvdXIvZmlsZS55bWwgLS1kb2MgRE9DX0lEX09SX1NMVUcgLS10b2tlbiBET0NfVE9LRU4KKiBDb21wYXJpbmcgdGhlIGdpdmVuIGRlZmluaXRpb24gZmlsZSB3aXRoIHRoZSBjdXJyZW50bHkgZGVwbG95ZWQgb25lLi4uIGRvbmUKClVwZGF0ZWQ6IFBPU1QgL3ZhbGlkYXRpb25zCiAgQm9keSBhdHRyaWJ1dGUgbW9kaWZpZWQ6IGRvY3VtZW50YXRpb24KYGBgCgpJZiB5b3Ugd2FudCB0byBjb21wYXJlIHR3byB1bnB1Ymxpc2hlZCB2ZXJzaW9ucyBvZiB5b3VyIGRlZmluaXRpb24gZmlsZSwgdGhlIGBkaWZmYCBjb21tYW5kIGNhbiByZXRyaWV2ZSBhIGNvbXBhcmlzb24gY2hhbmdlbG9nIGJldHdlZW4gdHdvIGdpdmVuIGZpbGUgb3IgVVJMLCDigJxhcyBzaW1wbGUgYXMgYGdpdCBkaWZmYOKAnToKCmBgYHNoLXNlc3Npb24KJCBidW1wIGRpZmYgcGF0aC90by95b3VyL2ZpbGUueW1sIHBhdGgvdG8veW91ci9uZXh0LWZpbGUueW1sIC0tZG9jIDxkb2Nfc2x1Zz4gLS10b2tlbiA8eW91cl9kb2NfdG9rZW4+CiogQ29tcGFyaW5nIHRoZSB0d28gZ2l2ZW4gZGVmaW5pdGlvbiBmaWxlcy4uLiBkb25lCgpVcGRhdGVkOiBQT1NUIC92ZXJzaW9ucwogIEJvZHkgYXR0cmlidXRlIGFkZGVkOiBwcmV2aW91c192ZXJzaW9uX2lkCmBgYAoKUGxlYXNlIGNoZWNrIGBidW1wIGRpZmYgLS1oZWxwYCBmb3IgZnVsbCB1c2FnZSBkZXRhaWxzLgoKIyMgRGV2ZWxvcG1lbnQKCk1ha2Ugc3VyZSB0byBoYXZlIE5vZGUuanMgKEF0IGxlYXN0IHYxNCkgaW5zdGFsbGVkIG9uIHlvdXIgbWFjaGluZS4KCi0gSW5zdGFsbCBub2RlIGRlcGVuZGVuY2llcyB3aXRoCiAgCiAgYGBgc2gtc2Vzc2lvbgogICQgbnBtIGluc3RhbGwKICBgYGAKICAKLSBDb21waWxlIHRoZSBUeXBlc2NyaXB0IGNvZGUKICAKICBgYGBzaC1zZXNzaW9uCiAgJCBucG0gcnVuIGJ1aWxkCiAgJCBucG0gcnVuIGNsZWFuICMgdG8gcmVtb3ZlIGJ1aWxkIGFydGlmYWN0cwogIGBgYAogIAotIEZvcm1hdCB0aGUgY29kZWJhc2UgdG8gY29tcGx5IHdpdGggdGhlIGxpbnRlciBydWxlcwogIAogIGBgYHNoLXNlc3Npb24KICAkIG5wbSBydW4gZm10CiAgYGBgCiAgCi0gUnVuIHRoZSB0ZXN0IHN1aXRlcwogIAogIGBgYHNoLXNlc3Npb24KICAkIG5wbSBydW4gdGVzdAogICQgbnBtIHJ1biB0ZXN0LWNvdmVyYWdlICMgUnVuIHRlc3RzIHdpdGggY292ZXJhZ2UKICBgYGAKCiMjIENvbnRyaWJ1dGluZwoKQnVnIHJlcG9ydHMgYW5kIHB1bGwgcmVxdWVzdHMgYXJlIHdlbGNvbWUgb24gR2l0SHViIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9idW1wLXNoL2NsaS4gVGhpcyBwcm9qZWN0IGlzIGludGVuZGVkIHRvIGJlIGEgc2FmZSwgd2VsY29taW5nIHNwYWNlIGZvciBjb2xsYWJvcmF0aW9uLCBhbmQgY29udHJpYnV0b3JzIGFyZSBleHBlY3RlZCB0byBhZGhlcmUgdG8gdGhlIFtDb250cmlidXRvciBDb3ZlbmFudF0oaHR0cDovL2NvbnRyaWJ1dG9yLWNvdmVuYW50Lm9yZykgY29kZSBvZiBjb25kdWN0LgoKIyMjIExpY2Vuc2UKClRoZSBub2RlIHBhY2thZ2UgaXMgYXZhaWxhYmxlIGFzIG9wZW4gc291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgW01JVCBMaWNlbnNlXShodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUKS4KCiMjIyBDb2RlIG9mIENvbmR1Y3QKCkV2ZXJ5b25lIGludGVyYWN0aW5nIGluIHRoZSBCdW1wLUNMSSBwcm9qZWN0IGNvZGViYXNlcywgaXNzdWUgdHJhY2tlcnMsIGNoYXQgcm9vbXMgYW5kIG1haWxpbmcgbGlzdHMgaXMgZXhwZWN0ZWQgdG8gZm9sbG93IHRoZSBbY29kZSBvZiBjb25kdWN0XShodHRwczovL2dpdGh1Yi5jb20vYnVtcC1zaC8uZ2l0aHViL2Jsb2IvbWFpbi9DT0RFX09GX0NPTkRVQ1QubWQpLgoKIyMgVmVyc2lvbmluZwoKVGhpcyBucG0gcGFja2FnZSBzdGFydHMgYXQgdjIuMC4wIGZvciB0d28gbWFpbiByZWFzb25zOgoKLSBPdXIgW2ZpcnN0IHZlcnNpb25dKGh0dHBzOi8vZ2l0aHViLmNvbS9idW1wLXNoL2J1bXAtY2xpKSBvZiB0aGUgQnVtcCBDTEkgd2FzIHdyaXR0ZW4gaW4gUnVieSwgc3RhcnRpbmcgYXQgdjIuMC4wIG1ha2VzIGl0IGNsZWFyIHdlIGFyZSB3b3JraW5nIG9uIG91ciBzZWNvbmQgdmVyc2lvbiBvZiB0aGUgQnVtcCBDTEkKCi0gVGhlIGBidW1wLWNsaWAgcGFja2FnZSB1c2VkIHRvIGJlIFtvd25lZCBieSBSaWNvXShodHRwczovL2dpdGh1Yi5jb20vcnN0YWNydXopIHdoaWNoIGFscmVhZHkgcHVibGlzaGVkIHYxLnggcGFja2FnZXMuIElmIHlvdSBhcmUgbG9va2luZyBmb3IgdGhlIG9sZCBucG0gcGFja2FnZSBwbGVhc2UgaGVhZCB0byBbYEByc3RhY3J1ei9idW1wLWNsaWAgcGFja2FnZV0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQHJzdGFjcnV6L2J1bXAtY2xpKS4gX0EgYmlnIHRoYW5rcyB0byBSaWNvIGZvciB0cmFuc2ZlcmluZyB0aGUgb3duZXJzaGlwIG9mIHRoZSBgYnVtcC1jbGlgIHBhY2thZ2UgbmFtZSFfCg== - readmeEtag: '"a635e6c8449914d7fa6930c5546a7736920dc363c9bbbbddb24b1a247e54d160"' - readmeLastModified: Thu, 19 Oct 2023 16:16:23 GMT + IyBCdW1wIENMSQoKPHAgYWxpZ249ImNlbnRlciI+CiAgPGltZyB3aWR0aD0iMjAlIiBzcmM9Imh0dHBzOi8vYnVtcC5zaC9pY29uLWRlZmF1bHQtbGFyZ2UucG5nIiAvPgo8L3A+Cgo8cCBhbGlnbj0iY2VudGVyIj4KICA8YSBocmVmPSJodHRwczovL2hlbHAuYnVtcC5zaC8iPkhlbHA8L2E+IHwKICA8YSBocmVmPSJodHRwczovL2J1bXAuc2gvdXNlcnMvc2lnbl91cCI+U2lnbiB1cDwvYT4KPC9wPgoKVGhlIEJ1bXAuc2ggQ0xJIGlzIHVzZWQgdG8gaW50ZXJhY3Qgd2l0aCB5b3VyIEFQSSBkb2N1bWVudGF0aW9uIG9yIGh1YnMgaG9zdGVkIG9uIEJ1bXAuc2guIFdpdGggYW55IEFQSSBkZWZpbml0aW9uIG9mIHlvdXIgY2hvaWNlIChmcm9tIFN3YWdnZXIsIE9wZW5BUEkgb3IgQXN5bmNBUEkpLCBpdCBjYW4gaGVscCB5b3UgdG86CgotIFZhbGlkYXRlIGFuIEFQSSBkb2N1bWVudCBiZWZvcmUgcHVibGlzaGluZyB0byB5b3VyIGRvY3VtZW50YXRpb24KLSBQdWJsaXNoIGFuIEFQSSBkb2N1bWVudCB0byB5b3VyIEJ1bXAuc2ggZG9jdW1lbnRhdGlvbiBvciBodWJzCi0gQ29tcGFyZSB0d28gQVBJIGRvY3VtZW50cyB0byBnZW5lcmF0ZSBhIGh1bWFuLXJlYWRhYmxlIGRpZmYgZnJvbSB5b3VyIEFQSSBkZWZpbml0aW9ucwoKVW5kZXIgdGhlIGhvb2QsIGl0IHVzZXMgdGhlIEFQSSBvZiBbZGV2ZWxvcGVycy5idW1wLnNoXShodHRwczovL2RldmVsb3BlcnMuYnVtcC5zaCkuIEFuZCBpcyBidWlsdCB3aXRoIHRoZSBbYG9jbGlmYF0oaHR0cHM6Ly9vY2xpZi5pbykgZnJhbWV3b3JrIGluIFR5cGVzY3JpcHQuCgpbIVtWZXJzaW9uXShodHRwczovL2ltZy5zaGllbGRzLmlvL25wbS92L2J1bXAtY2xpLnN2ZyldKGh0dHBzOi8vbnBtanMub3JnL3BhY2thZ2UvYnVtcC1jbGkpClshW1Rlc3RzXShodHRwczovL2dpdGh1Yi5jb20vYnVtcC1zaC9jbGkvYWN0aW9ucy93b3JrZmxvd3MvY2hlY2tzLnltbC9iYWRnZS5zdmcpXShodHRwczovL2dpdGh1Yi5jb20vYnVtcC1zaC9jbGkvYWN0aW9ucy93b3JrZmxvd3MvY2hlY2tzLnltbCkKWyFbTGljZW5zZV0oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9ucG0vbC9idW1wLWNsaS5zdmcpXShodHRwczovL2dpdGh1Yi5jb20vYnVtcC1zaC9jbGkvYmxvYi9tYXN0ZXIvcGFja2FnZS5qc29uKQoKIyMgVGFibGUgb2YgY29udGVudHMKCiogW0luc3RhbGxhdGlvbl0oI2luc3RhbGxhdGlvbikKKiBbVXNhZ2VdKCN1c2FnZSkKKiBbQ29tbWFuZHNdKCNjb21tYW5kcykKKiBbRGV2ZWxvcG1lbnRdKCNkZXZlbG9wbWVudCkKKiBbQ29udHJpYnV0aW5nXSgjY29udHJpYnV0aW5nKQoqIFtWZXJzaW9uaW5nXSgjdmVyc2lvbmluZykKCiMjIEluc3RhbGxhdGlvbgoKVGhlIEJ1bXAuc2ggQ0xJIGlzIGEgbm9kZSBwYWNrYWdlIGN1cnJlbnRseSBkaXN0cmlidXRlZCB2aWEgTlBNLiBUaGlzIG1lYW5zIHlvdSBtdXN0IGhhdmUgdGhlIE5vZGUgdjE0KyBpbnRlcnByZXRlciBpbnN0YWxsZWQgb24geW91ciBjb21wdXRlciBvciBDSSBzZXJ2ZXJzLgoKX0lmIHlvdSBhcmUgbG9va2luZyB0byB1c2UgQnVtcC5zaCBpbiBhIGNvbnRpbnVvdXMgaW50ZWdyYXRpb24gZW52aXJvbm1lbnQgeW91IG1pZ2h0IGJlIGludGVyZXN0ZWQgYnkgW291ciBHaXRodWIgQWN0aW9uXShodHRwczovL2dpdGh1Yi5jb20vbWFya2V0cGxhY2UvYWN0aW9ucy9hcGktZG9jdW1lbnRhdGlvbi1vbi1idW1wKS5fCgo+IFlvdSBjYW4gZG93bmxvYWQgYSBzdGFuZGFsb25lIHBhY2thZ2UgZGlyZWN0bHkgZnJvbSB0aGUgbGF0ZXN0Cj4gR2l0aHViIHJlbGVhc2UgYXNzZXRzIGlmIHlvdSBkb27igJl0IHVzZSBOb2RlLgp7OiAuaW5mb30KCiMjIyBHbG9iYWwgaW5zdGFsbGF0aW9uCgpUbyBpbnN0YWxsIGl0IGdsb2JhbGx5LCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kIHdpdGggTlBNCgpgYGBzaC1zZXNzaW9uCm5wbSBpbnN0YWxsIC1nIGJ1bXAtY2xpCmBgYAoKT3IsIHdpdGggWWFybiB2aWEKCmBgYHNoLXNlc3Npb24KeWFybiBnbG9iYWwgYWRkIGJ1bXAtY2xpCmBgYAoKIyMjIEFkZCBCdW1wLnNoIHRvIHlvdXIgbm9kZSBwcm9qZWN0CgpBcyBvdXIgQ0xJIGlzIGEgbm9kZSBwYWNrYWdlLCB5b3UgY2FuIGVhc2lseSBlbWJlZCBpdCB0byB5b3VyIHByb2plY3QgYnkgYWRkaW5nIHRoZSBwYWNrYWdlIHRvIHlvdXIgYHBhY2thZ2UuanNvbmAgZmlsZSwgZWl0aGVyIHdpdGggTlBNCgpgYGBzaC1zZXNzaW9uCm5wbSBpbnN0YWxsIC0tc2F2ZS1kZXYgYnVtcC1jbGkKYGBgCgpPciB3aXRoIFlhcm4gdmlhCgpgYGBzaC1zZXNzaW9uCnlhcm4gYWRkIC0tZGV2IGJ1bXAtY2xpCmBgYAoKWW91IGNhbiB0aGVuIHVzZSBhbnkgQnVtcC5zaCBjb21tYW5kcyB3aXRoIGBucHhgIChzYW1lIGFzIGBucG0gZXhlY2ApCgpgYGBzaC1zZXNzaW9uCm5weCBidW1wIC0taGVscApgYGAKCiMjIyBIb3cgc2hvdWxkIEkgZG8gaWYgSSdtIG5vdCB1c2luZyBucG0gPwoKVW5mb3J0dW5hdGVseSwgYXQgdGhlIG1vbWVudCB3ZSBvbmx5IHN1cHBvcnQgdGhlIE5vZGUgZW52aXJvbm1lbnQuIEhvd2V2ZXIsIHlvdSBjYW4gZG93bmxvYWQgYSBzdGFuZGFsb25lIHBhY2thZ2UgZGlyZWN0bHkgZnJvbSB0aGUgW2xhdGVzdCBHaXRodWIgcmVsZWFzZV0oaHR0cHM6Ly9naXRodWIuY29tL2J1bXAtc2gvY2xpL3JlbGVhc2VzKSBhc3NldHMgd2hpY2ggeW91IGNhbiBydW4gYXMgYSBzdGFuZGFsb25lIGJpbmFyeS4gT3IgeW91IGNhbiBwdXNoIHlvdXIgZG9jdW1lbnRhdGlvbiB1c2luZyBbb3VyIEFQSV0oaHR0cHM6Ly9kZXZlbG9wZXJzLmJ1bXAuc2gvKSAoYWR2YW5jZWQgdXNhZ2Ugb25seSkuCgojIyBVc2FnZQoKVG8gbGlzdCBhbGwgdGhlIGF2YWlsYWJsZSBjb21tYW5kcywganVzdCB0eXBlIGBidW1wYCBpbiB5b3VyIGNvbW1hbmQgbGluZSBlbnZpcm9ubWVudC4KCmBgYHNoLXNlc3Npb24KJCBidW1wIC0taGVscApUaGUgQnVtcC5zaCBDTEkgaXMgdXNlZCB0byBpbnRlcmFjdCB3aXRoIHlvdXIgQVBJIGRvY3VtZW50YXRpb24gaG9zdGVkIG9uIEJ1bXAuc2ggYnkgdXNpbmcgdGhlIEFQSSBvZiBkZXZlbG9wZXJzLmJ1bXAuc2gKClZFUlNJT04KICBidW1wLWNsaS8yLjcuMiBsaW51eC14NjQgbm9kZS12MTYuMTcuMAoKVVNBR0UKICAkIGJ1bXAgW0NPTU1BTkRdCgpDT01NQU5EUwogIGRlcGxveSAgIENyZWF0ZSBhIG5ldyB2ZXJzaW9uIG9mIHlvdXIgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBnaXZlbiBmaWxlIG9yIFVSTC4KICBkaWZmICAgICBHZXQgYSBjb21wYXJpc29uIGRpZmYgd2l0aCB5b3VyIGRvY3VtZW50YXRpb24gZnJvbSB0aGUgZ2l2ZW4gZmlsZSBvciBVUkwuCiAgaGVscCAgICAgRGlzcGxheSBoZWxwIGZvciBidW1wLgogIHByZXZpZXcgIENyZWF0ZSBhIGRvY3VtZW50YXRpb24gcHJldmlldyBmcm9tIHRoZSBnaXZlbiBmaWxlIG9yIFVSTC4KYGBgCgogWW91IGNhbiBhbHNvIGdldCBzb21lIGhlbHAgYW55dGltZSBieSBhZGRpbmcgYC0taGVscGAgdG8gYW55IGNvbW1hbmQuIEV4YW1wbGU6IGBidW1wIGRlcGxveSAtLWhlbHBgLgoKIyMgUHJlcGFyZSB5b3VyIEJ1bXAuc2ggYWNjb3VudAoKV2hpbGUgc29tZSBjb21tYW5kcyBkb24ndCBuZWVkIGFueSBBUEkgdG9rZW4gKGBwcmV2aWV3YCBvciBgZGlmZmApIHlvdSB3aWxsIG5lZWQgYW4gYWNjZXNzIGtleSBpZiB5b3Ugd2FudCB0byBpbnRlcmFjdCB3aXRoIHlvdXIgQnVtcC5zaCBkb2N1bWVudGF0aW9uLgoKSGVhZCBvdmVyIHRvIHlvdXIgRG9jdW1lbnRhdGlvbiBzZXR0aW5ncyBpbiB0aGUg4oCcQ0kgZGVwbG95bWVudOKAnSBzZWN0aW9uIG9yIHlvdXIgQWNjb3VudCBvciBPcmdhbml6YXRpb24gc2V0dGluZ3MgaW4gdGhlIOKAnEFQSSBrZXlz4oCdIHNlY3Rpb24gdG8gZmV0Y2ggYSBwZXJzb25hbCB0b2tlbiBmb3IgbGF0ZXIgdXNhZ2UuCgojIyBDb21tYW5kcwoKKiBbYGJ1bXAgZGVwbG95IFtGSUxFXWBdKCNidW1wLWRlcGxveS1maWxlKQoqIFtgYnVtcCBkaWZmIFtGSUxFXWBdKCNidW1wLWRpZmYtZmlsZSkKKiBbYGJ1bXAgcHJldmlldyBbRklMRV1gXSgjYnVtcC1wcmV2aWV3LWZpbGUpCgojIyMgYGJ1bXAgZGVwbG95IFtGSUxFXWAKCldoZW4geW91IHVwZGF0ZSB5b3VyIEFQSSwgeW91IGFsc28gd2FudCBpdHMgZG9jdW1lbnRhdGlvbiB0byBiZSB1cCB0byBkYXRlIGZvciB5b3VyIEFQSSB1c2Vycy4gVGhpcyBpcyB3aGF0IHRoZSBkZXBsb3kgY29tbWFuZCBpcyBmb3IuCgpgYGBzaC1zZXNzaW9uCmJ1bXAgZGVwbG95IHBhdGgvdG8vYXBpLWRvY3VtZW50LnltbCAtLWRvYyBteS1kb2N1bWVudGF0aW9uIC0tdG9rZW4gJERPQ19UT0tFTgpgYGAKCj4gWW91IGNhbiBmaW5kIHlvdXIgb3duIGBteS1kb2N1bWVudGF0aW9uYCBzbHVnIGFuZCBgJERPQ19UT0tFTmAgYXBpIGtleSBmcm9tIHlvdXIgW2RvY3VtZW50YXRpb24gc2V0dGluZ3NdKGh0dHBzOi8vYnVtcC5zaC9kb2NzKS4KezogLmluZm99CgpZb3UgY2FuIGFsc28gZGVwbG95IGEgZ2l2ZW4gQVBJIGRvY3VtZW50IHRvIGEgZGlmZmVyZW50IGJyYW5jaCBvZiB5b3VyIGRvY3VtZW50YXRpb24gd2l0aCB0aGUgYC0tYnJhbmNoIDxicmFuY2gtbmFtZT5gIHBhcmFtZXRlci4gUGxlYXNlIG5vdGUgdGhlIGJyYW5jaCB3aWxsIGJlIGNyZWF0ZWQgaWYgaXQgZG9lc27igJl0IGV4aXN0LiBNb3JlIGRldGFpbHMgYWJvdXQgdGhlIGJyYW5jaGluZyBmZWF0dXJlIGFyZSBhdmFpbGFibGUgb24gW3RoaXMgZGVkaWNhdGVkIGhlbHAgcGFnZV0oaHR0cHM6Ly9kb2NzLmJ1bXAuc2gvaGVscC9icmFuY2hpbmcpLiBFLmcuIGRlcGxveSB0aGUgQVBJIGRvY3VtZW50IHRvIHRoZSBgc3RhZ2luZ2AgYnJhbmNoIG9mIHRoZSBkb2N1bWVudGF0aW9uOgoKYGBgc2gtc2Vzc2lvbgpidW1wIGRlcGxveSBwYXRoL3RvL2FwaS1kb2N1bWVudC55bWwgLS1kb2MgbXktZG9jdW1lbnRhdGlvbiAtLXRva2VuICRET0NfVE9LRU4gLS1icmFuY2ggc3RhZ2luZwpgYGAKCiMjIyMgRGVwbG95IGEgZm9sZGVyIGFsbCBhdCBvbmNlCgpJZiB5b3UgYWxyZWFkeSBoYXZlIGEgaHViIGluIHlvdXIgW0J1bXAuc2hdKGh0dHBzOi8vYnVtcC5zaCkgYWNjb3VudCwgeW91IGNhbiBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBkb2N1bWVudGF0aW9uIGFuZCBkZXBsb3kgaXQgaW50byB0aGF0IGh1YiBieSBwdWJsaXNoaW5nIGEgd2hvbGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgbXVsdGlwbGUgQVBJIGRvY3VtZW50cyBpbiBhIHNpbmdsZSBjb21tYW5kOgoKYGBgc2gtc2Vzc2lvbgpidW1wIGRlcGxveSBkaXIvcGF0aC90by9hcGlzLyAtLWF1dG8tY3JlYXRlIC0taHViIG15LWh1YiAtLXRva2VuICRIVUJfVE9LRU4KYGBgCgo+IFlvdSBjYW4gZmluZCB5b3VyIG93biBgbXktaHViYCBzbHVnIGFuZCBgJEhVQl9UT0tFTmAgYXBpIGtleSBmcm9tIHlvdXIgW2h1YiBzZXR0aW5nc10oaHR0cHM6Ly9idW1wLnNoL2h1YnMpLgp7OiAuaW5mb30KClBsZWFzZSBub3RlLCBieSBkZWZhdWx0LCBvbmx5IGZpbGVzIG5hbWVkIGB7c2x1Z30tYXBpLltmb3JtYXRdYCBhcmUgcHVibGlzaGVkLiBXaGVyZSBge3NsdWd9YCBpcyBhIG5hbWUgZm9yIHlvdXIgQVBJIGFuZCBgW2Zvcm1hdF1gIGlzIGVpdGhlciBgeWFtbGAgb3IgYGpzb25gLiBBZGp1c3QgdG8geW91ciBmaWxlIG5hbWluZyBjb252ZW50aW9uIHVzaW5nIHRoZSBgLS1maWxlbmFtZS1wYXR0ZXJuIDxwYXR0ZXJuPmAgb3B0aW9uLgoKTm90ZSB0aGF0IGl0IF9jYW5fIGluY2x1ZGUgYCpgIHdpbGRjYXJkIHNwZWNpYWwgY2hhcmFjdGVyLCBidXQgKiptdXN0KiogaW5jbHVkZSB0aGUgYHtzbHVnfWAgZmlsdGVyIHRvIGV4dHJhY3QgeW91ciBkb2N1bWVudGF0aW9u4oCZcyBzbHVnIGZyb20gdGhlIGZpbGVuYW1lLiBUaGUgcGF0dGVybiBjYW4gYWxzbyBoYXZlIGFueSBvdGhlciBvcHRpb25hbCBmaXhlZCBjaGFyYWN0ZXJzLgoKSGVyZeKAmXMgYSBwcmFjdGljYWwgZXhhbXBsZS4gTGV0J3MgYXNzdW1lIHRoYXQgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBmaWxlcyBpbiB5b3VyIGBwYXRoL3RvL2FwaXMvYCBkaXJlY3Rvcnk6CgpgYGAKcGF0aC90by9hcGlzCuKUlOKUgCBwcml2YXRlLWFwaS11c2Vycy1zZXJ2aWNlLmpzb24K4pSU4pSAIHBhcnRuZXItYXBpLXBheW1lbnRzLXNlcnZpY2UueW1sCuKUlOKUgCBwdWJsaWMtYXBpLWNvbnRyYWN0cy1zZXJ2aWNlLnltbArilJTilIAgZGF0YS5qc29uCuKUlOKUgCBSRUFETUUubWQKYGBgCgpJbiBvcmRlciB0byBkZXBsb3kgdGhlIDMgc2VydmljZXMgQVBJIGRlZmluaXRpb24gZmlsZXMgZnJvbSB0aGlzIGZvbGRlciAoYHByaXZhdGUtYXBpLXVzZXJzLXNlcnZpY2UuanNvbmAsIGBwYXJ0bmVyLWFwaS1wYXltZW50cy1zZXJ2aWNlLnltbGAgYW5kIGBwdWJsaWMtYXBpLWNvbnRyYWN0cy1zZXJ2aWNlLnltbGApLCB5b3UgY2FuIGV4ZWN1dGUgdGhlIGZvbGxvd2luZyBjb21tYW5kOgoKYGBgCmJ1bXAgZGVwbG95IHBhdGgvdG8vYXBpcy8gLS1odWIgbXktaHViIC0tZmlsZW5hbWUtcGF0dGVybiAnKi1hcGkte3NsdWd9LXNlcnZpY2UnCmBgYAoKIyMjIyBWYWxpZGF0ZSBhbiBBUEkgZG9jdW1lbnQKClNpbXVsYXRlIHlvdXIgQVBJIGRvY3VtZW50J3MgZGVwbG95bWVudCB0byBlbnN1cmUgaXQgaXMgdmFsaWQgYnkgYWRkaW5nIHRoZSBgLS1kcnktcnVuYCBmbGFnIHRvIHRoZSBgZGVwbG95YCBjb21tYW5kLiBJdCBpcyBoYW5keSBpbiBhIENvbnRpbnVvdXMgSW50ZWdyYXRpb24gZW52aXJvbm1lbnQgcnVubmluZyBhIHRlc3QgZGVwbG95bWVudCBvdXRzaWRlIHlvdXIgbWFpbiBicmFuY2g6CgpgYGBzaC1zZXNzaW9uCmJ1bXAgZGVwbG95IHBhdGgvdG8vYXBpLWRvY3VtZW50LnltbCAtLWRyeS1ydW4gLS1kb2MgbXktZG9jdW1lbnRhdGlvbiAtLXRva2VuICRET0NfVE9LRU4KYGBgCgpQbGVhc2UgY2hlY2sgYGJ1bXAgZGVwbG95IC0taGVscGAgZm9yIG1vcmUgdXNhZ2UgZGV0YWlscy4KCiMjIyBgYnVtcCBkaWZmIFtGSUxFXWAKCl9JZiB5b3Ugd2FudCB0byByZWNlaXZlIGF1dG9tYXRpYyBgYnVtcCBkaWZmYCByZXN1bHRzIG9uIHlvdXIgR2l0aHViIFB1bGwgUmVxdWVzdHMgeW91IG1pZ2h0IGJlIGludGVyZXN0ZWQgYnkgW291ciBHaXRodWIgQWN0aW9uXShodHRwczovL2dpdGh1Yi5jb20vbWFya2V0cGxhY2UvYWN0aW9ucy9hcGktZG9jdW1lbnRhdGlvbi1vbi1idW1wI2FwaS1kaWZmLW9uLXB1bGwtcmVxdWVzdHMpIGRpZmYgY29tbWFuZC5fCgojIyMjIFB1YmxpYyBBUEkgZGlmZnMKCkZyb20gYW55IHR3byBBUEkgZG9jdW1lbnRzIG9yIFVSTHMsIHlvdSBjYW4gcmV0cmlldmUgYSBjb21wcmVoZW5zaXZlIGNoYW5nZWxvZyBvZiB3aGF0IGhhcyBjaGFuZ2VkIGJldHdlZW4gdGhlbS4KCmBgYHNoLXNlc3Npb24KJCBidW1wIGRpZmYgcGF0aC90by95b3VyL2ZpbGUueW1sIHBhdGgvdG8veW91ci9zZWNvbmRfZmlsZS55bWwKKiBDb21wYXJpbmcgdGhlIHR3byBnaXZlbiBkZWZpbml0aW9uIGZpbGVzLi4uIGRvbmUKTW9kaWZpZWQ6IEdFVCAvY29uc29tbWF0aW9ucwogIFJlc3BvbnNlIG1vZGlmaWVkOiAyMDAKICAgIFtCcmVha2luZ10gQm9keSBhdHRyaWJ1dGUgbW9kaWZpZWQ6IGVuZXJnaWUKYGBgCj4gWW91IGNhbiBjcmVhdGUgYXMgbWFueSBkaWZmcyBhcyB5b3UgbGlrZSB3aXRob3V0IGJlaW5nIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgYSAqKmZyZWUgYW5kIHVubGltaXRlZCBzZXJ2aWNlKiogcHJvdmlkZWQgYXMgbG9uZyBhcyB5b3UgdXNlIHRoZSBzZXJ2aWNlIGZhaXJseS4KezogLmluZm99CgpfTm90ZTogWW91IGNhbiBhbHNvIHRlc3QgdGhpcyBmZWF0dXJlIGluIG91ciBkZWRpY2F0ZWQgd2ViIGFwcGxpY2F0aW9uIGF0IDxodHRwczovL2FwaS1kaWZmLmlvLz4uXwoKIyMjIyBBdXRoZW50aWNhdGVkIGRpZmZzIHJlbGF0ZWQgdG8geW91ciBCdW1wLnNoIGRvY3VtZW50YXRpb24KCkZyb20gYW4gZXhpc3RpbmcgQnVtcC5zaCBkb2N1bWVudGF0aW9uLCB0aGUgYGRpZmZgIGNvbW1hbmQgd2lsbCByZXRyaWV2ZSBhIGNvbXBhcmlzb24gY2hhbmdlbG9nIGJldHdlZW4geW91ciBsYXRlc3QgcHVibGlzaGVkIGRvY3VtZW50YXRpb24gYW5kIHRoZSBnaXZlbiBmaWxlIG9yIFVSTDoKCmBgYHNoLXNlc3Npb24KYnVtcCBkaWZmIHBhdGgvdG8veW91ci9maWxlLnltbCAtLWRvYyBteS1kb2N1bWVudGF0aW9uIC0tdG9rZW4gJERPQ19UT0tFTgpgYGAKCklmIHlvdSB3YW50IHRvIGNvbXBhcmUgdHdvIHVucHVibGlzaGVkIHZlcnNpb25zIG9mIHlvdXIgQVBJIGRvY3VtZW50LCB0aGUgYGRpZmZgIGNvbW1hbmQgY2FuIHJldHJpZXZlIGEgY29tcGFyaXNvbiBjaGFuZ2Vsb2cgYmV0d2VlbiB0d28gZ2l2ZW4gZmlsZSBvciBVUkwsIOKAnGFzIHNpbXBsZSBhcyBgZ2l0IGRpZmZg4oCdOgoKYGBgc2gtc2Vzc2lvbgpidW1wIGRpZmYgcGF0aC90by95b3VyL2ZpbGUueW1sIHBhdGgvdG8veW91ci9uZXh0LWZpbGUueW1sIC0tZG9jIG15LWRvY3VtZW50YXRpb24gLS10b2tlbiAkRE9DX1RPS0VOCmBgYAoKUGxlYXNlIGNoZWNrIGBidW1wIGRpZmYgLS1oZWxwYCBmb3IgZnVsbCB1c2FnZSBkZXRhaWxzLgoKIyMjIGBidW1wIHByZXZpZXcgW0ZJTEVdYAoKCldoZW4gd3JpdGluZyBkb2N1bWVudGF0aW9uLCB5b3UgbWlnaHQgd2FudCB0byBwcmV2aWV3IGhvdyBpdCByZW5kZXJzIG9uIEJ1bXAuc2guIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBnb2FsIG9mIHRoZSBgcHJldmlld2AgY29tbWFuZDogaXQgd2lsbCBjcmVhdGUgdGVtcG9yYXJ5IGRvY3VtZW50YXRpb24gd2l0aCBhIHVuaXF1ZSBVUkwsIHdoaWNoIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBhIHNob3J0IHBlcmlvZCAoMzAgbWludXRlcykuCgpVc2FnZSBmcm9tIGEgbG9jYWwgT3BlbkFQSSBvciBBc3luY0FQSSBmaWxlCgpgYGBzaGVsbApidW1wIHByZXZpZXcgcGF0aC90by9maWxlLmpzb24KYGBgCgpZb3UgY2FuIGFsc28gcHJldmlldyBhIGZpbGUgYXZhaWxhYmxlIGZyb20gYSBVUkwKCmBgYHNoZWxsCmJ1bXAgcHJldmlldyBodHRwczovL2RldmVsb3BlcnMuYnVtcC5zaC9zb3VyY2UueWFtbApgYGAKCiMjIyMgTGl2ZSBwcmV2aWV3CgpCeSB1c2luZyB0aGUgYC0tbGl2ZWAgZmxhZyB5b3UgY2FuIHN0YXkgZm9jdXNlZCBvbiBBUEkgZGVzaWduIChPcGVuQVBJIG9yIEFzeW5jQVBJIGZpbGUpIHdoaWxlIHNlZWluZyBhIGNvbnRpbnVvdXNseSB1cGRhdGVkIHByZXZpZXcgZWFjaCB0aW1lIHlvdSBzYXZlIHlvdXIgQVBJIGRvY3VtZW50LgoKLSBMYXVuY2ggdGhlIGxpdmUgcHJldmlldyBjb21tYW5kIGluIHlvdXIgdGVybWluYWwKCmBgYHNoZWxsCmJ1bXAgcHJldmlldyAtLWxpdmUgLS1vcGVuIG9wZW5hcGktZGVmaW5pdGlvbi5qc29uCmBgYAoKLSBFZGl0IHlvdXIgYG9wZW5hcGktZGVmaW5pdGlvbi5qc29uYCBmaWxlIGluIHlvdXIgZmF2b3JpdGUgdGV4dCBlZGl0b3IKLSBXYXRjaCB0aGUgbGl2ZSBwcmV2aWV3IGJlaW5nIHVwZGF0ZWQgZWFjaCB0aW1lIHlvdSBzYXZlIHlvdXIgZmlsZS4KCj4gWW91IGNhbiBjcmVhdGUgYXMgbWFueSBwcmV2aWV3cyBhcyB5b3UgbGlrZSB3aXRob3V0IGJlaW5nIGF1dGhlbnRpY2F0ZWQuIFRoaXMgaXMgYSAqKmZyZWUgYW5kIHVubGltaXRlZCBzZXJ2aWNlKiouCns6IC5pbmZvfQoKX05vdGU6IHRoZSBhZGRpdGlvbmFsIGAtLW9wZW5gIGZsYWcgaGVscHMgdG8gYXV0b21hdGljYWxseSBvcGVuIHRoZSBwcmV2aWV3IFVSTCBpbiB5b3VyIGJyb3dzZXIuXwoKUGxlYXNlIGNoZWNrIGBidW1wIHByZXZpZXcgLS1oZWxwYCBmb3IgbW9yZSB1c2FnZSBkZXRhaWxzCgojIyBEZXZlbG9wbWVudAoKTWFrZSBzdXJlIHRvIGhhdmUgTm9kZS5qcyAoQXQgbGVhc3QgdjE0KSBpbnN0YWxsZWQgb24geW91ciBtYWNoaW5lLgoKLSBJbnN0YWxsIG5vZGUgZGVwZW5kZW5jaWVzIHdpdGgKICAKICBgYGBzaC1zZXNzaW9uCiAgbnBtIGluc3RhbGwKICBgYGAKICAKLSBDb21waWxlIHRoZSBUeXBlc2NyaXB0IGNvZGUKICAKICBgYGBzaC1zZXNzaW9uCiAgbnBtIHJ1biBidWlsZAogIG5wbSBydW4gY2xlYW4gIyB0byByZW1vdmUgYnVpbGQgYXJ0aWZhY3RzCiAgYGBgCiAgCi0gRm9ybWF0IHRoZSBjb2RlYmFzZSB0byBjb21wbHkgd2l0aCB0aGUgbGludGVyIHJ1bGVzCiAgCiAgYGBgc2gtc2Vzc2lvbgogIG5wbSBydW4gZm10CiAgYGBgCiAgCi0gUnVuIHRoZSB0ZXN0IHN1aXRlcwogIAogIGBgYHNoLXNlc3Npb24KICBucG0gcnVuIHRlc3QKICBucG0gcnVuIHRlc3QtY292ZXJhZ2UgIyBSdW4gdGVzdHMgd2l0aCBjb3ZlcmFnZQogIGBgYAoKIyMgQ29tcGF0aWJsZSBzcGVjaWZpY2F0aW9uIHR5cGVzCgpXZSBjdXJyZW50bHkgc3VwcG9ydCBbT3BlbkFQSV0oaHR0cHM6Ly9naXRodWIuY29tL09BSS9PcGVuQVBJLVNwZWNpZmljYXRpb24pIGZyb20gMi4wIChjYWxsZWQgU3dhZ2dlcikgdG8gMy4xIGFuZCBbQXN5bmNBUEkgMi54XShodHRwczovL3d3dy5hc3luY2FwaS5jb20vZG9jcy9yZWZlcmVuY2Uvc3BlY2lmaWNhdGlvbi9sYXRlc3QpIHNwZWNpZmljYXRpb24gZmlsZSB0eXBlcy4gQm90aCBZQU1MIG9yIEpTT04gZmlsZSBmb3JtYXRzIGFyZSBhY2NlcHRlZCBmaWxlIGlucHV0cyB0byB0aGUgQ0xJLgoKIyMgQ29udHJpYnV0aW5nCgpCdWcgcmVwb3J0cyBhbmQgcHVsbCByZXF1ZXN0cyBhcmUgd2VsY29tZSBvbiBHaXRIdWIgYXQgPGh0dHBzOi8vZ2l0aHViLmNvbS9idW1wLXNoL2NsaT4uIFRoaXMgcHJvamVjdCBpcyBpbnRlbmRlZCB0byBiZSBhIHNhZmUsIHdlbGNvbWluZyBzcGFjZSBmb3IgY29sbGFib3JhdGlvbiwgYW5kIGNvbnRyaWJ1dG9ycyBhcmUgZXhwZWN0ZWQgdG8gYWRoZXJlIHRvIHRoZSBbQ29udHJpYnV0b3IgQ292ZW5hbnRdKGh0dHA6Ly9jb250cmlidXRvci1jb3ZlbmFudC5vcmcpIGNvZGUgb2YgY29uZHVjdC4KCiMjIExpY2Vuc2UKClRoZSBCdW1wIENMSSBwcm9qZWN0IGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBbTUlUIExpY2Vuc2VdKGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVQpLgoKIyMgQ29kZSBvZiBDb25kdWN0CgpFdmVyeW9uZSBpbnRlcmFjdGluZyBpbiB0aGUgQnVtcC1DTEkgcHJvamVjdCBjb2RlYmFzZXMsIGlzc3VlIHRyYWNrZXJzLCBjaGF0IHJvb21zIGFuZCBtYWlsaW5nIGxpc3RzIGlzIGV4cGVjdGVkIHRvIGZvbGxvdyB0aGUgW2NvZGUgb2YgY29uZHVjdF0oaHR0cHM6Ly9naXRodWIuY29tL2J1bXAtc2gvLmdpdGh1Yi9ibG9iL21haW4vQ09ERV9PRl9DT05EVUNULm1kKS4KCiMjIFZlcnNpb25pbmcKClRoaXMgbnBtIHBhY2thZ2Ugc3RhcnRzIGF0IHYyLjAuMCBmb3IgdHdvIG1haW4gcmVhc29uczoKCi0gT3VyIFtmaXJzdCB2ZXJzaW9uXShodHRwczovL2dpdGh1Yi5jb20vYnVtcC1zaC9idW1wLWNsaSkgb2YgdGhlIEJ1bXAgQ0xJIHdhcyB3cml0dGVuIGluIFJ1YnksIHN0YXJ0aW5nIGF0IHYyLjAuMCBtYWtlcyBpdCBjbGVhciB3ZSBhcmUgd29ya2luZyBvbiBvdXIgc2Vjb25kIHZlcnNpb24gb2YgdGhlIEJ1bXAgQ0xJCgotIFRoZSBgYnVtcC1jbGlgIHBhY2thZ2UgdXNlZCB0byBiZSBbb3duZWQgYnkgUmljb10oaHR0cHM6Ly9naXRodWIuY29tL3JzdGFjcnV6KSB3aGljaCBhbHJlYWR5IHB1Ymxpc2hlZCB2MS54IHBhY2thZ2VzLiBJZiB5b3UgYXJlIGxvb2tpbmcgZm9yIHRoZSBvbGQgbnBtIHBhY2thZ2UgcGxlYXNlIGhlYWQgdG8gW2BAcnN0YWNydXovYnVtcC1jbGlgIHBhY2thZ2VdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0Byc3RhY3J1ei9idW1wLWNsaSkuIF9BIGJpZyB0aGFua3MgdG8gUmljbyBmb3IgdHJhbnNmZXJpbmcgdGhlIG93bmVyc2hpcCBvZiB0aGUgYGJ1bXAtY2xpYCBwYWNrYWdlIG5hbWUhXwo= + readmeEtag: '"7e036a778b4912f1edf2d4b365a6db9019884c916b380cfe10856bcf94c66b40"' + readmeLastModified: Wed, 13 Dec 2023 16:19:22 GMT repositoryId: 353317141 description: Bump.sh CLI - Deploy your OpenAPI & AsyncAPI documentations from your CI created: '2021-03-31T10:29:18Z' - updated: '2023-08-08T23:03:21Z' + updated: '2023-12-13T08:26:03Z' language: TypeScript archived: false - stars: 26 + stars: 27 watchers: 5 forks: 1 owner: bump-sh logo: https://avatars.githubusercontent.com/u/33217836?v=4 license: MIT - repoEtag: '"886d92f3820ae2540b4857e37e6f38a2bf33919ecf41e026110c221b7f1fefc9"' - repoLastModified: Tue, 08 Aug 2023 23:03:21 GMT + repoEtag: '"759c782016fb263f2b6f067cdc073d1cded65afc858b5a7555a0a9272824100e"' + repoLastModified: Wed, 13 Dec 2023 08:26:03 GMT foundInMaster: true category: - Documentation @@ -1145,17 +1145,17 @@ repositoryId: 190430086 description: VisualStudio Code OpenAPI tools created: '2019-06-05T16:27:53Z' - updated: '2023-12-12T02:05:01Z' + updated: '2023-12-13T17:16:09Z' language: TypeScript archived: false - stars: 292 + stars: 293 watchers: 9 forks: 42 owner: 42Crunch logo: https://avatars.githubusercontent.com/u/25365245?v=4 license: AGPL-3.0 - repoEtag: '"7042aaa0a9d9c59ef786f5c5906e38d7923259a7b904f8a1b182b3fd63997715"' - repoLastModified: Tue, 12 Dec 2023 02:05:01 GMT + repoEtag: '"6d58b7f91579f9ed6f5aa32d09aa9b5060f2585f297314c66aae9bc633eae847"' + repoLastModified: Wed, 13 Dec 2023 17:16:09 GMT foundInMaster: true id: 782ecbb10f1ff8ac9685e0ed24e52e58 - source: @@ -1245,17 +1245,17 @@ repositoryId: 19390712 description: Swagger Editor created: '2014-05-02T22:47:10Z' - updated: '2023-12-12T06:57:52Z' + updated: '2023-12-14T03:17:40Z' language: JavaScript archived: false - stars: 8455 - watchers: 259 + stars: 8456 + watchers: 258 forks: 2217 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 license: Apache-2.0 - repoEtag: '"ba25922ed723c7bc1c51bf218e175ab3dd932fa56d56c112aaac7adafde04aa5"' - repoLastModified: Tue, 12 Dec 2023 06:57:52 GMT + repoEtag: '"ca4b3291d830476b60232d15eff4fd37efa26424aa2fd9da68129ce6220eb5da"' + repoLastModified: Thu, 14 Dec 2023 03:17:40 GMT foundInMaster: true id: 951cf61d12c812ef9b201ad76b5d278d v3_1: true @@ -1466,7 +1466,7 @@ owner: Apicurio logo: https://avatars.githubusercontent.com/u/28107283?v=4 license: Apache-2.0 - repoEtag: '"f2c8125eff358b21a28a2762d8086303ad37590dcf2cdbe7f6ac1afd4fc5b05f"' + repoEtag: '"6d87b371f553a461f81fa9a89a6e72be2177fdd6f7ab5bbac020f1477370d223"' repoLastModified: Tue, 12 Dec 2023 21:41:37 GMT foundInMaster: true homepage: https://github.com/Apicurio/apicurio-studio @@ -1685,17 +1685,17 @@ Turn any OpenAPI2/3 and Postman Collection file into an API server with mocking, transformations and validations. created: '2016-03-18T03:52:09Z' - updated: '2023-12-12T19:34:20Z' + updated: '2023-12-14T02:35:10Z' language: TypeScript archived: false - stars: 3830 + stars: 3833 watchers: 55 forks: 318 owner: stoplightio logo: https://avatars.githubusercontent.com/u/10767217?v=4 license: Apache-2.0 - repoEtag: '"795388a05380b06fc78e8be3ca50a14e9db80d8e69855dbc7107b1090c087890"' - repoLastModified: Tue, 12 Dec 2023 19:34:20 GMT + repoEtag: '"679df083b5f317495d4f3972271cddb7c2a11cc8daf2ee2201974f19f6ec5877"' + repoLastModified: Thu, 14 Dec 2023 02:35:10 GMT foundInMaster: true id: 15aad8cd322242e03733b07f2a37890a - source: https://openapi.tools/ @@ -1763,17 +1763,17 @@ Kubernetes native tool for mocking and testing API and micro-services. Microcks is a Cloud Native Computing Foundation sandbox project 🚀 created: '2015-02-23T15:46:09Z' - updated: '2023-12-12T03:02:34Z' + updated: '2023-12-13T19:01:56Z' language: Java archived: false - stars: 1055 + stars: 1056 watchers: 24 - forks: 179 + forks: 180 owner: microcks logo: https://avatars.githubusercontent.com/u/11051048?v=4 license: Apache-2.0 - repoEtag: '"ed5cff304b528294e62695422a2979cb9f67a9f6544c04c3fa540dec57743212"' - repoLastModified: Tue, 12 Dec 2023 03:02:34 GMT + repoEtag: '"6996c24504079b004a1a8538cfbe1e099b5b30c7d83d8e3316769dab384d1ed7"' + repoLastModified: Wed, 13 Dec 2023 19:01:56 GMT foundInMaster: true id: 1c0e918b5a733b0f1726199e3ea101d6 - source: @@ -1970,17 +1970,17 @@ repositoryId: 61366800 description: Build OpenAPI-compliant REST APIs using TypeScript and Node created: '2016-06-17T10:42:50Z' - updated: '2023-12-12T07:10:41Z' + updated: '2023-12-13T20:52:04Z' language: TypeScript archived: false - stars: 2964 + stars: 2966 watchers: 24 forks: 456 owner: lukeautry logo: https://avatars.githubusercontent.com/u/8770560?v=4 license: MIT - repoEtag: '"02c3b74dac0042562dd544c078be30e9e0aab80c11e5cdf0205b5cec134f8ad7"' - repoLastModified: Tue, 12 Dec 2023 07:10:41 GMT + repoEtag: '"9dda1345db5b312499c531e17cbb5d868b1f0127fe1cc896a57acd8c3eda9702"' + repoLastModified: Wed, 13 Dec 2023 20:52:04 GMT foundInMaster: true id: 2529db76d3d9f042b0c624f65b13fc41 - source: https://openapi.tools/ @@ -2017,7 +2017,7 @@ owner: vert-x3 logo: https://avatars.githubusercontent.com/u/8124623?v=4 license: Apache-2.0 - repoEtag: '"385a0b4da62a5170fe062c897aac2cb09dd337cee7e0c3eacdeb519769e90322"' + repoEtag: '"d22930647c7081737660edc50346446521c24b3aa5d9b44bf12cb853d56734e2"' repoLastModified: Tue, 12 Dec 2023 08:53:01 GMT foundInMaster: true v3_link: https://github.com/vert-x3/vertx-web/issues/1872 @@ -2151,17 +2151,17 @@ Create REST and GraphQL APIs, scaffold Jamstack webapps, stream changes in real-time. created: '2015-03-06T21:46:05Z' - updated: '2023-12-12T15:01:38Z' + updated: '2023-12-13T19:47:02Z' language: TypeScript archived: false - stars: 8135 - watchers: 219 + stars: 8141 + watchers: 220 forks: 971 owner: api-platform logo: https://avatars.githubusercontent.com/u/13420081?v=4 license: MIT - repoEtag: '"205a0c02ccd870d0f78183839a75dbde70a2eaf4ede2eca7bff4b2250fa40d01"' - repoLastModified: Tue, 12 Dec 2023 15:01:38 GMT + repoEtag: '"2a84bb021fda33197a27e035c6f0e6810b7586d1fa419b940d1ef7846b2fc87d"' + repoLastModified: Wed, 13 Dec 2023 19:47:02 GMT foundInMaster: true id: d14f5904300aabf1ceef4660a6b3d57e - source: https://openapi.tools/ @@ -2324,11 +2324,11 @@ archived: false stars: 1523 watchers: 30 - forks: 408 + forks: 410 owner: nestjs logo: https://avatars.githubusercontent.com/u/28507035?v=4 license: MIT - repoEtag: '"6ba06ea789f9aadd1abb84e8206977d14ea5e374eee8a31f14af9aa345c78143"' + repoEtag: '"b52f4c2ee63a93ad26ea1f73baeb30fcfd4d329047f980d4afd149f1748791c5"' repoLastModified: Tue, 12 Dec 2023 13:51:42 GMT foundInMaster: true id: 7071babd9853fc901c5decfa9b465b67 @@ -2392,17 +2392,17 @@ repositoryId: 12590052 description: Language-agnostic HTTP API Testing Tool created: '2013-09-04T12:21:35Z' - updated: '2023-12-11T23:27:29Z' + updated: '2023-12-14T00:33:10Z' language: JavaScript archived: false - stars: 4086 + stars: 4088 watchers: 75 forks: 306 owner: apiaryio logo: https://avatars.githubusercontent.com/u/765943?v=4 license: MIT - repoEtag: '"b080247a0a307d0d88f7e6f388157effc7f8a8ebe9adee24e388b5cda1778298"' - repoLastModified: Mon, 11 Dec 2023 23:27:29 GMT + repoEtag: '"c1d583ef8f68c33039280d931dcb81327597c930e1ed8576335bcba2e2848ce4"' + repoLastModified: Thu, 14 Dec 2023 00:33:10 GMT foundInMaster: true id: bb2e4b0879fce0d8706dcebfd2c10a4c - source: @@ -2472,7 +2472,7 @@ owner: lyra logo: https://avatars.githubusercontent.com/u/572508?v=4 license: Apache-2.0 - repoEtag: '"eadf632941bbf7ddcb85c7e940e3169cdc9ea1b42ae8dccfae9b0759853386a0"' + repoEtag: '"acd045d11e05ebf0cda50ef6f43b8ee44fa72c05736cbab601dd9ba911704cba"' repoLastModified: Fri, 08 Dec 2023 22:14:41 GMT foundInMaster: true id: 921cd13437e80edc1d65f659e39df975 @@ -2499,17 +2499,17 @@ Port OpenAPI Specs to Postman Collections, inject test suite and run via Newman 👨🏽‍🚀 created: '2021-05-05T10:42:29Z' - updated: '2023-12-08T12:39:54Z' + updated: '2023-12-13T04:58:06Z' language: TypeScript archived: false - stars: 589 + stars: 590 watchers: 11 forks: 56 owner: apideck-libraries logo: https://avatars.githubusercontent.com/u/73573473?v=4 license: Apache-2.0 - repoEtag: '"9ebf9d60072127e9ee7c6ba4900f65a1c56f27ab3d2a59a5f203cdb675f1be70"' - repoLastModified: Fri, 08 Dec 2023 12:39:54 GMT + repoEtag: '"af477af9368e76a0d9f2fab5679f5d48b3369890870ef8db922ae449328ff36c"' + repoLastModified: Wed, 13 Dec 2023 04:58:06 GMT foundInMaster: true id: a03cdb329f630a946a946dfe26802c43 - source: https://openapi.tools/ @@ -2537,17 +2537,17 @@ repositoryId: 537500924 description: Automated API Testing and Quality Assurance created: '2022-09-16T14:48:21Z' - updated: '2023-12-10T23:16:49Z' + updated: '2023-12-13T04:58:24Z' language: TypeScript archived: false - stars: 1391 + stars: 1392 watchers: 13 forks: 54 owner: stepci logo: https://avatars.githubusercontent.com/u/61350067?v=4 license: MPL-2.0 - repoEtag: '"1a5cc1b0f1839d090ed0d0730b040cf9e413ac2598005e45780f001850e09ac0"' - repoLastModified: Sun, 10 Dec 2023 23:16:49 GMT + repoEtag: '"d74ef9801af3cc0e010598254b30d4c9849e8c0f0fd0b2eb44ee0d9ea05c17cc"' + repoLastModified: Wed, 13 Dec 2023 04:58:24 GMT foundInMaster: true - source: - https://openapi.tools/ @@ -2617,17 +2617,17 @@ baked in support for OpenAPI v3.1, v3.0, and v2.0 as well as AsyncAPI v2.x. created: '2018-08-15T18:43:18Z' - updated: '2023-12-12T09:06:10Z' + updated: '2023-12-13T15:38:53Z' language: TypeScript archived: false - stars: 2113 + stars: 2114 watchers: 32 forks: 204 owner: stoplightio logo: https://avatars.githubusercontent.com/u/10767217?v=4 license: Apache-2.0 - repoEtag: '"77748f1b6423291a7c87af9b93bdda5a634669f03d92d5bafa229160c98f4d7a"' - repoLastModified: Tue, 12 Dec 2023 09:06:10 GMT + repoEtag: '"e9e3d6ae343c9ca5eb757f0e602d5f7ea2e565e2ce77708a1e0d969f43c57170"' + repoLastModified: Wed, 13 Dec 2023 15:38:53 GMT foundInMaster: true id: fab3cc58898cd8953a30e43cc622e0fe - source: https://openapi.tools/ @@ -2712,17 +2712,17 @@ ⚒️ Redocly CLI makes OpenAPI easy. Lint/validate to any standard, generate beautiful docs, and more. created: '2019-09-10T14:56:25Z' - updated: '2023-12-13T01:59:03Z' + updated: '2023-12-13T20:22:22Z' language: TypeScript archived: false - stars: 707 + stars: 708 watchers: 26 forks: 108 owner: Redocly logo: https://avatars.githubusercontent.com/u/32099856?v=4 license: MIT - repoEtag: '"741c6822fce1277fa737a25bf1ecf3d8c614a75fa2780b32267a1fab6a0eb8e2"' - repoLastModified: Wed, 13 Dec 2023 01:59:03 GMT + repoEtag: '"494d27b66f83840faadacff93b841b87e10084b32e997d0d878b6815fe1595c6"' + repoLastModified: Wed, 13 Dec 2023 20:22:22 GMT category: - Description Validators - Documentation @@ -2915,7 +2915,7 @@ owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 license: Apache-2.0 - repoEtag: '"d791c346005a81c3ba6316963b2adf8d71dcded76a30fbaeb0d8107eaa2a02a2"' + repoEtag: '"6bd42d488ac22233b5c071296e1cbb0b0371b841f4eaf3ebc8242d0810bf1bf8"' repoLastModified: Tue, 05 Dec 2023 03:00:44 GMT foundInMaster: true id: 45f46a8f7ac698cfe3926303bf3dff9d @@ -2934,17 +2934,17 @@ repositoryId: 25453221 description: Swagger 2.0 and OpenAPI 3.0 parser/validator created: '2014-10-20T06:14:51Z' - updated: '2023-12-06T05:58:21Z' + updated: '2023-12-13T17:54:25Z' language: JavaScript archived: false - stars: 1016 + stars: 1017 watchers: 20 forks: 154 owner: APIDevTools logo: https://avatars.githubusercontent.com/u/43750074?v=4 license: MIT - repoEtag: '"29538cc9334a6d905cf09b5b7d1f640c58e8404d9f4028dd1b017dd8c72dafa5"' - repoLastModified: Wed, 06 Dec 2023 05:58:21 GMT + repoEtag: '"6828cde66dd57f5f627e5cbc564e985ca07a010ca0498b5b31e2e69cf751bc0a"' + repoLastModified: Wed, 13 Dec 2023 17:54:25 GMT category: Parsers foundInMaster: true name: APIDevTools/swagger-parser @@ -3102,17 +3102,17 @@ OpenAPI 3.0 (and Swagger v2) implementation for Go (parsing, converting, validation, and more) created: '2017-06-11T20:12:06Z' - updated: '2023-12-12T06:43:47Z' + updated: '2023-12-13T11:00:13Z' language: Go archived: false - stars: 2189 + stars: 2190 watchers: 23 forks: 378 owner: getkin logo: https://avatars.githubusercontent.com/u/40365715?v=4 license: MIT - repoEtag: '"110057dd8eaa271f97ffe1003f5b5ccef3d2fc6b94346d462de6d13196d58e84"' - repoLastModified: Tue, 12 Dec 2023 06:43:47 GMT + repoEtag: '"ab066e5066de32ff6423a530bb28a69ebfe168bda119c17c4eb0f900bc85b68a"' + repoLastModified: Wed, 13 Dec 2023 11:00:13 GMT foundInMaster: true v2: true id: f6838ce08e87fa4c3dc813c97193ece3 @@ -3147,7 +3147,7 @@ owner: thephpleague logo: https://avatars.githubusercontent.com/u/527621?v=4 license: MIT - repoEtag: '"684fde1cc6d20cb9258241f168d8c908131359e484a1ffd2486be2a6a330a58b"' + repoEtag: '"eacd6a21c54908674d32361462b09be8b42004e50c4d5e9a4f63dc9fa9563f78"' repoLastModified: Tue, 12 Dec 2023 06:28:07 GMT foundInMaster: true v3_1_link: https://github.com/thephpleague/openapi-psr7-validator/issues/163 @@ -3208,17 +3208,17 @@ An object oriented approach to generating OpenAPI specs, implemented in PHP. created: '2018-09-26T20:11:56Z' - updated: '2023-10-12T08:04:32Z' + updated: '2023-12-13T12:26:58Z' language: PHP archived: false - stars: 214 + stars: 215 watchers: 6 forks: 19 owner: goldspecdigital logo: https://avatars.githubusercontent.com/u/31162012?v=4 license: MIT - repoEtag: '"c7b4dfdc14304e8a35cf35ff05bf174770936064ee59d9e091c7bf702f18c554"' - repoLastModified: Thu, 12 Oct 2023 08:04:32 GMT + repoEtag: '"599b74a37e8fdc85249547e33745e6e75fc5915c71acf055f422040fe05c5202"' + repoLastModified: Wed, 13 Dec 2023 12:26:58 GMT foundInMaster: true id: b572581c8e045165d5121ee9c5bc361e - source: https://openapi.tools/ @@ -3309,7 +3309,7 @@ owner: microsoft logo: https://avatars.githubusercontent.com/u/6154722?v=4 license: MIT - repoEtag: '"38e27117d29db1111591e2d07fecd381b10ace45e15c2fd458795b0ef669b2c0"' + repoEtag: '"bd8fd5326189475054cdfd21beece3b52412f56f3de2e54a8884f3c3cc6885f3"' repoLastModified: Tue, 05 Dec 2023 18:08:55 GMT foundInMaster: true id: 1066748bb5b1f114a70856a29fee4aa7 @@ -3453,7 +3453,7 @@ owner: DoclerLabs logo: https://avatars.githubusercontent.com/u/12913135?v=4 license: MIT - repoEtag: '"30b9a3caccab9bf8fbe5144bcfc68f8a8d2b402ce2095c9044c631493c3b13d8"' + repoEtag: '"99aa4cc41fab9618d357a4e522224cb9b721d53e7efa701c07f9a0b9aeb1b5a9"' repoLastModified: Mon, 30 Oct 2023 19:27:35 GMT foundInMaster: true - source: https://openapi.tools/ @@ -3507,17 +3507,17 @@ repositoryId: 26726495 description: Swagger 2.0 implementation for go created: '2014-11-16T20:13:15Z' - updated: '2023-12-13T00:52:46Z' + updated: '2023-12-13T20:27:08Z' language: Go archived: false - stars: 9026 + stars: 9027 watchers: 120 - forks: 1271 + forks: 1270 owner: go-swagger logo: https://avatars.githubusercontent.com/u/10362650?v=4 license: Apache-2.0 - repoEtag: '"d97bf005098287a98f6c8f14674c28f342816661c5830822c5d6577967713ae7"' - repoLastModified: Wed, 13 Dec 2023 00:52:46 GMT + repoEtag: '"de8d24dd7b1b58d2a8d621eeafebf2c0766bb2327a6b35364a553863daf7c289"' + repoLastModified: Wed, 13 Dec 2023 20:27:08 GMT foundInMaster: true id: ef136df9ffb40bb33ccbd76665d8f5b4 - source: https://openapi.tools/ @@ -3585,11 +3585,11 @@ archived: true stars: 1878 watchers: 20 - forks: 110 + forks: 109 owner: contiamo logo: https://avatars.githubusercontent.com/u/862286?v=4 license: MIT - repoEtag: '"76d2f0f6ec58034c6410b136597d45f1b746972de4e1384fc867f63f24e24158"' + repoEtag: '"75c4781c7ea33915a873a04b1fb3958fe5b797e57e436d27e9515dc746055419"' repoLastModified: Tue, 12 Dec 2023 17:02:48 GMT foundInMaster: true id: 7fa6fa97d3fc13594a92cd5594506906 @@ -3610,7 +3610,7 @@ repositoryId: 41822320 description: 'The Swagger/OpenAPI toolchain for .NET, ASP.NET Core and TypeScript. ' created: '2015-09-02T19:11:57Z' - updated: '2023-12-12T23:46:35Z' + updated: '2023-12-13T07:05:59Z' language: C# archived: false stars: 6217 @@ -3619,8 +3619,8 @@ owner: RicoSuter logo: https://avatars.githubusercontent.com/u/2603405?v=4 license: MIT - repoEtag: '"15c3efe05afbc0288941251c4a0ee052a23f60e61726fa75a191e4a668e94c7a"' - repoLastModified: Tue, 12 Dec 2023 23:46:35 GMT + repoEtag: '"22513e6c1c91cf8c19902d88d1b67b7876361cd2a9141d2392e9d40bc801580c"' + repoLastModified: Wed, 13 Dec 2023 07:05:59 GMT foundInMaster: true id: 93636e95435e95198d7d15c9d507f0d3 - source: https://openapi.tools/ @@ -3683,17 +3683,17 @@ documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition. created: '2011-07-06T14:26:48Z' - updated: '2023-12-13T00:50:45Z' + updated: '2023-12-14T01:59:52Z' language: Mustache archived: false - stars: 16184 + stars: 16187 watchers: 418 forks: 6031 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 license: Apache-2.0 - repoEtag: '"5b0aa8118106e9a03d71789e9ce992abb686d21451f3c504a47b1e4becfa8148"' - repoLastModified: Wed, 13 Dec 2023 00:50:45 GMT + repoEtag: '"31c60ccd19cb1740fdeaad1b16826c7ffcb918cc7281a743e28abf2ce2aeb539"' + repoLastModified: Thu, 14 Dec 2023 01:59:52 GMT foundInMaster: true id: eda1e66e1b7805496e42f57851791a32 - source: https://openapi.tools/ @@ -3726,7 +3726,7 @@ owner: Azure logo: https://avatars.githubusercontent.com/u/6844498?v=4 license: MIT - repoEtag: '"0466e55e7035f200a93e1c70bdb8ae1ff592b01360a04be829b2744ca4bafa54"' + repoEtag: '"8568a1bd9fb9da0bc9e98dbbdc6a5e49fa1224377826dcec31793400f62226a2"' repoLastModified: Sat, 09 Dec 2023 20:10:46 GMT foundInMaster: true id: 648d92bca90bf58cd74407e0bcad2936 @@ -3818,17 +3818,17 @@ repositoryId: 81140437 description: 🚀 Automatic SDK generation from an OpenAPI definition created: '2017-02-06T22:31:07Z' - updated: '2023-12-05T08:33:02Z' + updated: '2023-12-13T14:22:56Z' language: TypeScript archived: false - stars: 435 + stars: 436 watchers: 20 forks: 22 owner: readmeio logo: https://avatars.githubusercontent.com/u/6878153?v=4 license: MIT - repoEtag: '"86167e58ec03765016a6a568c6bb140bb233fa6b8c55109a2ab6c0412d83ad69"' - repoLastModified: Tue, 05 Dec 2023 08:33:02 GMT + repoEtag: '"3420578e0afd846e3d068a81f91df9ac9423da7995e1dc5d6902337e3657820c"' + repoLastModified: Wed, 13 Dec 2023 14:22:56 GMT foundInMaster: true - source: https://openapi.tools/ name: oas-normalize @@ -4129,17 +4129,17 @@ applications. Currently targeting whitebox and blackbox testing of Web APIs, like REST, GraphQL and RPC (e.g., gRPC and Thrift). created: '2017-05-25T09:11:23Z' - updated: '2023-12-08T15:57:57Z' + updated: '2023-12-13T15:01:52Z' language: Kotlin archived: false - stars: 385 + stars: 386 watchers: 24 forks: 70 owner: EMResearch logo: https://avatars.githubusercontent.com/u/29148026?v=4 license: LGPL-3.0 - repoEtag: '"874f7a86d710b93043e63dae355649582691d433ce0c36d9c7b545428d1e0751"' - repoLastModified: Fri, 08 Dec 2023 15:57:57 GMT + repoEtag: '"dc81add3be8024866453ddae5b2f64e39e7dcbb533a971f52eec5115d332a07c"' + repoLastModified: Wed, 13 Dec 2023 15:01:52 GMT foundInMaster: true id: eba0fd1e4a49eb507e337ad2266e9a16 - source: https://openapi.tools/ @@ -4207,7 +4207,7 @@ Black-box fuzzer that fuzzes APIs based on OpenAPI specification. Find bugs for free! created: '2020-12-23T22:33:38Z' - updated: '2023-12-05T10:46:36Z' + updated: '2023-12-13T21:01:31Z' language: Rust archived: false stars: 486 @@ -4216,8 +4216,8 @@ owner: matusf logo: https://avatars.githubusercontent.com/u/18228995?v=4 license: AGPL-3.0 - repoEtag: '"e27d47ae15ae266341b2791ffdab8362f8ce27c23e991e3e3d9a90070420f208"' - repoLastModified: Tue, 05 Dec 2023 10:46:36 GMT + repoEtag: '"3d1f4432b86782c59c1811be1162dc82d1e8c23905fd3fc543d25247f2eaf293"' + repoLastModified: Wed, 13 Dec 2023 21:01:31 GMT id: 9e0191ba47403298459b30242dbfe9ad - source: https://openapi.tools/ name: cats @@ -4257,7 +4257,7 @@ owner: Endava logo: https://avatars.githubusercontent.com/u/19396140?v=4 license: Apache-2.0 - repoEtag: '"8a7808e612a2626bbd284af3e83d680e5f475ad6f951468839eeb20a2462b5f8"' + repoEtag: '"da3f0c6cb7ffb7c23af3b7eec4f747c00e78843324d6d83b87124cebd7b66774"' repoLastModified: Mon, 11 Dec 2023 07:26:11 GMT foundInMaster: true - source: https://openapi.tools/ @@ -4579,17 +4579,17 @@ Restish is a CLI for interacting with REST-ish HTTP APIs with some nice features built-in created: '2020-05-15T06:45:59Z' - updated: '2023-12-10T19:01:46Z' + updated: '2023-12-13T15:03:16Z' language: Go archived: false - stars: 571 + stars: 573 watchers: 3 forks: 62 owner: danielgtaylor logo: https://avatars.githubusercontent.com/u/106826?v=4 license: MIT - repoEtag: '"31fda86696f6833473cbe23425366e95ef4cfa3faeb45f171191166ac40ac1a3"' - repoLastModified: Sun, 10 Dec 2023 19:01:46 GMT + repoEtag: '"3200c04f3451731671417d429885425562108781cae935f79b889db03804487b"' + repoLastModified: Wed, 13 Dec 2023 15:03:16 GMT foundInMaster: true id: 22a8c610015b1b9d89af39221beabe66 v3_1: true @@ -4623,7 +4623,7 @@ owner: codekie logo: https://avatars.githubusercontent.com/u/1512840?v=4 license: MIT - repoEtag: '"81f1e4dda4b248da16a4dc5738b67b3236cbd6bff1174d553ba10c8d616e11bf"' + repoEtag: '"50c939ac1a94370fe8f31554addc20fd062977ed866758ed6d4d501017922050"' repoLastModified: Fri, 24 Nov 2023 16:36:50 GMT foundInMaster: true id: 301e3f380f248daf345a88c8971d2a71 @@ -4649,17 +4649,17 @@ Plugin for converting OpenAPI 3.0 specs to the Postman Collection (v2) format created: '2018-12-12T10:13:46Z' - updated: '2023-12-06T10:18:09Z' + updated: '2023-12-13T11:14:30Z' language: JavaScript archived: false - stars: 811 + stars: 812 watchers: 23 forks: 201 owner: postmanlabs logo: https://avatars.githubusercontent.com/u/10251060?v=4 license: Apache-2.0 - repoEtag: '"df2d49c3cd8f28087c01629c0c3e24a0372ed0598e330d48b2f57e8a8a8e45a4"' - repoLastModified: Wed, 06 Dec 2023 10:18:09 GMT + repoEtag: '"826148f7371d3239098a15251e86d86a9fef55b440fe4ed4924073b8b9bda266"' + repoLastModified: Wed, 13 Dec 2023 11:14:30 GMT foundInMaster: true id: 31b717a2084e3d92f6cda2c33484c789 v3_link: true @@ -4732,7 +4732,7 @@ owner: github logo: https://avatars.githubusercontent.com/u/9919?v=4 license: MIT - repoEtag: '"1bf6a17dc08eb14db4abd4332cd101cab1c1d50ab80a94d837c4dd601e5b0859"' + repoEtag: '"bbb98967fd08356ec7bf13702818aa6b65fe1ca1df9c1086272cdde069299bcd"' repoLastModified: Sat, 09 Dec 2023 21:52:38 GMT foundInMaster: true id: ec6a7a1e4a69a9beeb95bdebb88cb36d @@ -4758,17 +4758,17 @@ repositoryId: 4238977 description: Automated JSON API documentation for API's built with Spring created: '2012-05-06T06:38:57Z' - updated: '2023-12-11T01:12:06Z' + updated: '2023-12-13T07:14:01Z' language: Java archived: false - stars: 5875 + stars: 5876 watchers: 269 - forks: 1545 + forks: 1546 owner: springfox logo: https://avatars.githubusercontent.com/u/11529357?v=4 license: Apache-2.0 - repoEtag: '"a6069a814d64398af520221ba7fdf8603a062159e0695d85478749ab66d8aba3"' - repoLastModified: Mon, 11 Dec 2023 01:12:06 GMT + repoEtag: '"922300441088283321e0905d064cd30d77aa3180f033894d95da44e71c99e8c1"' + repoLastModified: Wed, 13 Dec 2023 07:14:01 GMT foundInMaster: true id: 2addde4c497bf582f20025ccac2cda86 - source: @@ -4826,17 +4826,17 @@ repositoryId: 36817565 description: The ZAP core project created: '2015-06-03T16:55:01Z' - updated: '2023-12-13T03:07:12Z' + updated: '2023-12-14T01:54:04Z' language: Java archived: false - stars: 11518 - watchers: 399 - forks: 2169 + stars: 11524 + watchers: 400 + forks: 2170 owner: zaproxy logo: https://avatars.githubusercontent.com/u/6716868?v=4 license: Apache-2.0 - repoEtag: '"5189dd148f4c9fed8cca4b133b2e70001de8fe391ffeb4939ca66bc8415d179c"' - repoLastModified: Wed, 13 Dec 2023 03:07:12 GMT + repoEtag: '"00c594da388645d2cd8dc67fb66cc7f7be8ca0a8bf5a3453ab3c53b6c2124f92"' + repoLastModified: Thu, 14 Dec 2023 01:54:04 GMT foundInMaster: true id: 9eedc1be44837a65f912bcf562844f39 - source: https://openapi.tools/ @@ -4955,17 +4955,17 @@ Validate your HttpFoundation requests and responses against OpenAPI (3+) definitions created: '2020-10-23T11:42:16Z' - updated: '2023-11-29T13:28:41Z' + updated: '2023-12-14T01:06:22Z' language: PHP archived: false - stars: 72 + stars: 73 watchers: 2 forks: 13 owner: osteel logo: https://avatars.githubusercontent.com/u/436467?v=4 license: MIT - repoEtag: '"b5a32f5c538801da0188ef9073d84b0c18d21746d5036d392cebca44dd99f965"' - repoLastModified: Wed, 29 Nov 2023 13:28:41 GMT + repoEtag: '"5b0421e3a90d5980bfea7b992dcae45b725599661fc7fc3f1b8b1ec4258741d7"' + repoLastModified: Thu, 14 Dec 2023 01:06:22 GMT foundInMaster: true id: 940ce85dbc99fab7a0ea193ac4ade24c v3_1: true @@ -5031,7 +5031,7 @@ owner: hotmeteor logo: https://avatars.githubusercontent.com/u/378585?v=4 license: MIT - repoEtag: '"2f7df1f78d9d295d568f5c5505a3333a68dad9865f64bc3b4c699e665bff09ee"' + repoEtag: '"6ee9ac1a5f9038ab37a5153a427caf7d37348a1b455b4994d3540f344c821704"' repoLastModified: Tue, 21 Nov 2023 12:42:28 GMT foundInMaster: true v3_1_link: https://github.com/hotmeteor/spectator/issues/100 @@ -5089,17 +5089,17 @@ repositoryId: 1431547 description: Web APIs for Django. 🎸 created: '2011-03-02T17:13:56Z' - updated: '2023-12-13T02:19:44Z' + updated: '2023-12-13T23:08:37Z' language: Python archived: false - stars: 26785 + stars: 26793 watchers: 623 forks: 6827 owner: encode logo: https://avatars.githubusercontent.com/u/19159390?v=4 license: NOASSERTION - repoEtag: '"8ae69cfa40287316b559d5df850f4a84988f08196eaf1a77d2a7997d5a0ad60e"' - repoLastModified: Wed, 13 Dec 2023 02:19:44 GMT + repoEtag: '"e9dea9a1a4e119e7a6a241e27899127bc6d4bbcdc3a13ecba76fa2af90822584"' + repoLastModified: Wed, 13 Dec 2023 23:08:37 GMT foundInMaster: true id: fb8994c078a380cc3510b024f6ed1202 category: Server Implementations @@ -5280,17 +5280,17 @@ repositoryId: 240776275 description: Generate modern Python clients from OpenAPI created: '2020-02-15T19:33:46Z' - updated: '2023-12-12T22:27:56Z' + updated: '2023-12-14T01:52:38Z' language: Python archived: false - stars: 907 + stars: 908 watchers: 14 forks: 186 owner: openapi-generators logo: https://avatars.githubusercontent.com/u/84925606?v=4 license: MIT - repoEtag: '"2ca9d70bc85e13382d43eb22bbc1bcd4c7b835534209e950b0ef6050d29a30c3"' - repoLastModified: Tue, 12 Dec 2023 22:27:56 GMT + repoEtag: '"33fc9b58c557f3e039a0bba308f82050002dbadc1727d30327f48929b3f85c72"' + repoLastModified: Thu, 14 Dec 2023 01:52:38 GMT foundInMaster: true id: 784ec4adac4e47e4211ea74ef36dd5a5 - source: @@ -5319,17 +5319,17 @@ Build beautiful, interactive API Docs with embeddable React or Web Components, powered by OpenAPI and Markdown. created: '2019-05-03T01:05:01Z' - updated: '2023-12-13T00:37:45Z' + updated: '2023-12-13T20:42:22Z' language: TypeScript archived: false - stars: 1308 + stars: 1309 watchers: 21 forks: 157 owner: stoplightio logo: https://avatars.githubusercontent.com/u/10767217?v=4 license: Apache-2.0 - repoEtag: '"175fe3ada138a6c0877806a4c3f8b99302351cbef248f40bb63b3290dfa68a93"' - repoLastModified: Wed, 13 Dec 2023 00:37:45 GMT + repoEtag: '"c7d549d291d05062a4cec8d89d0fb90ccb756a929a475efbc206f955eedf40dc"' + repoLastModified: Wed, 13 Dec 2023 20:42:22 GMT foundInMaster: true id: 2f94cc1fc980953b17a9979d4ff2e7ec - source: @@ -5455,17 +5455,17 @@ undefined user behaviour by auditing your API specifications, validating them and running API security tests. created: '2021-11-17T07:02:22Z' - updated: '2023-12-13T03:08:20Z' + updated: '2023-12-13T20:48:44Z' language: Rust archived: false - stars: 998 + stars: 999 watchers: 13 forks: 80 owner: blst-security logo: https://avatars.githubusercontent.com/u/54233087?v=4 license: Apache-2.0 - repoEtag: '"2c320825adf290155bc0fb0816979de93fe6345e51b532938a40d01d0c0d6019"' - repoLastModified: Wed, 13 Dec 2023 03:08:20 GMT + repoEtag: '"00767b1f203aac4fec2663a846bab6037d9a557d5887eb292a8a50a26691c34a"' + repoLastModified: Wed, 13 Dec 2023 20:48:44 GMT foundInMaster: true name: Cherrybomb category: Description Validators @@ -5656,17 +5656,17 @@ (TypeScript) from any valid OpenAPI v3 or Swagger v2 specification, either in yaml or json formats. 🍺 created: '2020-02-05T08:31:50Z' - updated: '2023-12-12T07:36:57Z' + updated: '2023-12-14T02:08:40Z' language: TypeScript archived: false - stars: 1888 + stars: 1894 watchers: 9 forks: 232 owner: anymaniax logo: https://avatars.githubusercontent.com/u/10516382?v=4 license: MIT - repoEtag: '"30e45020d9532a4df907e5d318e53d0c8edd75253953d689864501b362ed4429"' - repoLastModified: Tue, 12 Dec 2023 07:36:57 GMT + repoEtag: '"a6b78e9e8038d8b712e291befe1bc9555a64af48c500478dc9879a73cc507a12"' + repoLastModified: Thu, 14 Dec 2023 02:08:40 GMT foundInMaster: true - source: - https://openapi.tools/ @@ -5717,17 +5717,17 @@ repositoryId: 497158492 description: Generate a Node.js command line tool from an OpenAPI definition created: '2022-05-27T22:55:07Z' - updated: '2023-11-16T00:11:17Z' + updated: '2023-12-13T15:58:51Z' language: TypeScript archived: false - stars: 19 + stars: 21 watchers: 2 - forks: 1 + forks: 2 owner: bcoughlan logo: https://avatars.githubusercontent.com/u/421683?v=4 license: MIT - repoEtag: '"f398bca91b9dbe27655aae39356c289c71c69a726ebe9640396ad8ebb4fd0056"' - repoLastModified: Thu, 16 Nov 2023 00:11:17 GMT + repoEtag: '"59c0102004415c025e3143c803dfe811b9a83acb35c89624953885637ddfaec1"' + repoLastModified: Wed, 13 Dec 2023 15:58:51 GMT category: - Code Generators - SDK @@ -5764,7 +5764,7 @@ owner: pmcelhaney logo: https://avatars.githubusercontent.com/u/51504?v=4 license: MIT - repoEtag: '"7db4dada5c601c673b7c9575dbcdba7e4849def31ef51d527c9edc7fa050605b"' + repoEtag: '"1b8cb58e7076b8bdad5a784eb0de614b49a54fa76317a515c33a1efa83c08c53"' repoLastModified: Tue, 12 Dec 2023 15:40:39 GMT category: - Parsers @@ -5808,9 +5808,9 @@ v3: true repositoryMetadata: base64Readme: >- - IVtsb2dvXShsb2dvLnBuZykKCiMgdmFjdXVtIC0gVGhlIHdvcmxkJ3MgZmFzdGVzdCBPcGVuQVBJICYgU3dhZ2dlciBsaW50ZXIuCgohW2J1aWxkXShodHRwczovL2dpdGh1Yi5jb20vZGF2ZXNoYW5sZXkvdmFjdXVtL3dvcmtmbG93cy9CdWlsZC9iYWRnZS5zdmcpClshW0dvIFJlcG9ydCBDYXJkXShodHRwczovL2dvcmVwb3J0Y2FyZC5jb20vYmFkZ2UvZ2l0aHViLmNvbS9kYXZlc2hhbmxleS92YWN1dW0pXShodHRwczovL2dvcmVwb3J0Y2FyZC5jb20vcmVwb3J0L2dpdGh1Yi5jb20vZGF2ZXNoYW5sZXkvdmFjdXVtKQpbIVtkaXNjb3JkXShodHRwczovL2ltZy5zaGllbGRzLmlvL2Rpc2NvcmQvOTIzMjU4MzYzNTQwODE1OTEyKV0oaHR0cHM6Ly9kaXNjb3JkLmdnL1VBY1VGNzhNUU4pClshW0RvY3NdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvZ29kb2MtcmVmZXJlbmNlLTVmYWZkNyldKGh0dHBzOi8tL3BrZy5nby5kZXYvZ2l0aHViLmNvbS9kYXZlc2hhbmxleS92YWN1dW0pClshW0dpdEh1YiBkb3dubG9hZHNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2Rvd25sb2Fkcy9kYXZlc2hhbmxleS92YWN1dW0vdG90YWw/bGFiZWw9Z2l0aHViJTIwZG93bmxvYWRzJnN0eWxlPWZsYXQtc3F1YXJlKV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdmVzaGFubGV5L3ZhY3V1bS9yZWxlYXNlcykKWyFbbnBtXShodHRwczovL2ltZy5zaGllbGRzLmlvL25wbS9kbS9AcXVvYml4L3ZhY3V1bT9zdHlsZT1mbGF0LXNxdWFyZSZsYWJlbD1ucG0lMjBkb3dubG9hZHMpXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AcXVvYml4L3ZhY3V1bSkKWyFbRG9ja2VyIFB1bGxzXShodHRwczovL2ltZy5zaGllbGRzLmlvL2RvY2tlci9wdWxscy9kc2hhbmxleS92YWN1dW0/c3R5bGU9ZmxhdC1zcXVhcmUpXShodHRwczovL2h1Yi5kb2NrZXIuY29tL3IvZHNoYW5sZXkvdmFjdXVtKQpbIVtNZW50aW9uZWQgaW4gQXdlc29tZSBHb10oaHR0cHM6Ly9hd2Vzb21lLnJlL21lbnRpb25lZC1iYWRnZS1mbGF0LnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9hdmVsaW5vL2F3ZXNvbWUtZ28pCgpBbiAqKnVsdHJhLXN1cGVyLWZhc3QqKiwgbGlnaHR3ZWlnaHQgT3BlbkFQSSBsaW50ZXIgYW5kIHF1YWxpdHkgY2hlY2tpbmcgdG9vbCwgd3JpdHRlbiBpbiBnb2xhbmcgYW5kIGluc3BpcmVkIGJ5IFtTcGVjdHJhbF0oaHR0cHM6Ly9naXRodWIuY29tL3N0b3BsaWdodGlvL3NwZWN0cmFsKS4KCkl0J3MgYWxzbyBjb21wYXRpYmxlIHdpdGggZXhpc3RpbmcgW1NwZWN0cmFsXShodHRwczovL2dpdGh1Yi5jb20vc3RvcGxpZ2h0aW8vc3BlY3RyYWwpIHJ1bGVzZXRzLgoKIyMgSW5zdGFsbCB1c2luZyBbaG9tZWJyZXddKGh0dHBzOi8vYnJldy5zaCkgdGFwCgpgYGAKYnJldyBpbnN0YWxsIGRhdmVzaGFubGV5L3ZhY3V1bS92YWN1dW0KYGBgCgojIyBJbnN0YWxsIHVzaW5nIFtucG1dKGh0dHBzOi8vbnBtanMuY29tKQoKYGBgCm5wbSBpIC1nIEBxdW9iaXgvdmFjdXVtCmBgYAoKIyMgSW5zdGFsbCB1c2luZyBbeWFybl0oaHR0cHM6Ly95YXJucGtnLmNvbS8pCgpgYGAKeWFybiBnbG9iYWwgYWRkIEBxdW9iaXgvdmFjdXVtCmBgYAoKIyMgSW5zdGFsbCB1c2luZyBjdXJsCgpgYGAKY3VybCAtZnNTTCBodHRwczovL3F1b2JpeC5jb20vc2NyaXB0cy9pbnN0YWxsX3ZhY3V1bS5zaCB8IHNoCmBgYAoKIyMgSW5zdGFsbCB1c2luZyBbRG9ja2VyXShodHRwczovL2h1Yi5kb2NrZXIuY29tL3IvZHNoYW5sZXkvdmFjdXVtKQoKVGhlIGltYWdlIGlzIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL2RzaGFubGV5L3ZhY3V1bQoKYGBgCmRvY2tlciBwdWxsIGRzaGFubGV5L3ZhY3V1bQpgYGAKClRvIHJ1biwgbW91bnQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXIgdG8gdGhlIGNvbnRhaW5lciBhbmQgdXNlIGEgcmVsYXRpdmUgcGF0aCB0byB5b3VyIHNwZWMsIGxpa2Ugc28KCmBgYApkb2NrZXIgcnVuIC0tcm0gLXYgJFBXRDovd29yazpybyBkc2hhbmxleS92YWN1dW0gbGludCA8eW91ci1vcGVuYXBpLXNwZWMueWFtbD4KYGBgCkFsdGVybmF0aXZlbHksIHlvdSBjYW4gcHVsbCBpdCBmcm9tCltHaXRodWIgcGFja2FnZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXZlc2hhbmxleS92YWN1dW0vcGtncy9jb250YWluZXIvdmFjdXVtKS4KVG8gZG8gdGhhdCwgcmVwbGFjZSBgZHNoYW5sZXkvdmFjdXVtYCB3aXRoIGBnaGNyLmlvL2RhdmVzaGFubGV5L3ZhY3V1bWAgaW4gdGhlIGFib3ZlIGNvbW1hbmRzLgoKCi0tLQoKCiMjIFNwb25zb3JzCklmIHlvdXIgY29tcGFueSBpcyB1c2luZyBgdmFjdXVtYCwgcGxlYXNlIGNvbnNpZGVyaW5nIFtzdXBwb3J0aW5nIHRoaXMgcHJvamVjdF0oaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2RhdmVzaGFubGV5KSwKbGlrZSBvdXIgX3Zlcnkga2luZF8gc3BvbnNvcnM6CgoKPGEgaHJlZj0iaHR0cHM6Ly9zcGVha2Vhc3lhcGkuZGV2Lz91dG1fc291cmNlPXZhY3V1bStyZXBvJnV0bV9tZWRpdW09Z2l0aHViK3Nwb25zb3JzaGlwIj4KPHBpY3R1cmU+CiAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSIuZ2l0aHViL3Nwb25zb3JzL3NwZWFrZWFzeS1naXRodWItc3BvbnNvci1kYXJrLnN2ZyI+CiAgPGltZyBhbHQ9InNwZWFrZWFzeSciIHNyYz0iLmdpdGh1Yi9zcG9uc29ycy9zcGVha2Vhc3ktZ2l0aHViLXNwb25zb3ItbGlnaHQuc3ZnIj4KPC9waWN0dXJlPgo8L2E+CgpbU3BlYWtlYXN5XShodHRwczovL3NwZWFrZWFzeWFwaS5kZXYvP3V0bV9zb3VyY2U9dmFjdXVtK3JlcG8mdXRtX21lZGl1bT1naXRodWIrc3BvbnNvcnNoaXApCgo8YSBocmVmPSJodHRwczovL3NjYWxhci5jb20iPgo8cGljdHVyZT4KICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Ii5naXRodWIvc3BvbnNvcnMvc2NhbGFyLWRhcmsucG5nIj4KICA8aW1nIGFsdD0ic2NhbGFyIiBzcmM9Ii5naXRodWIvc3BvbnNvcnMvc2NhbGFyLWxpZ2h0LnBuZyI+CjwvcGljdHVyZT4KPC9hPgoKW3NjYWxhcl0oaHR0cHM6Ly9zY2FsYXIuY29tKQoKPGEgaHJlZj0iaHR0cHM6Ly96dXBsby5saW5rL3ZhY3V1bSI+CjxwaWN0dXJlPgogIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iLmdpdGh1Yi9zcG9uc29ycy96dXBsby1kYXJrLnBuZyI+CiAgPGltZyBhbHQ9InNjYWxhciIgc3JjPSIuZ2l0aHViL3Nwb25zb3JzL3p1cGxvLWxpZ2h0LnBuZyI+CjwvcGljdHVyZT4KPC9hPgoKW3p1cGxvXShbaHR0cHM6Ly96dXBsby5jb21dKGh0dHBzOi8venVwbG8ubGluay92YWN1dW0pKQoKCi0tLQoKIyMgQ29tZSBjaGF0IHdpdGggdXMKCk5lZWQgaGVscD8gSGF2ZSBhIHF1ZXN0aW9uPyBXYW50IHRvIHNoYXJlIHlvdXIgd29yaz8gW0pvaW4gb3VyIGRpc2NvcmRdKGh0dHBzOi8vZGlzY29yZC5nZy9VQWNVRjc4TVFOKSBhbmQKY29tZSBzYXkgaGkhCgojIyBEb2N1bWVudGF0aW9uCgrwn5SlICoqTmV3IGluKiogYHYwLjUrYCDwn5SlIDogKipNdWx0aS1maWxlIGxpbnRpbmcqKiAgbm93IGF2YWlsYWJsZSBmb3IgdGhlIGBsaW50YCBjb21tYW5kLgoKV2FudCB0byBsaW50IG11bHRpcGxlIGZpbGVzIGF0IG9uY2U/IE5vdyB5b3UgY2FuIQoKYGBgc2hlbGwKdmFjdXVtIGxpbnQgZmlsZTEuanNvbiBwYXRoL3RvL2ZpbGUyLnlhbWwgZmlsZTMuanNvbmAgCmBgYAoKV2FudCB0byBzdWNrIGluIGEgdG9uIG9mIGZpbGVzPyBVc2UgYSAqKmdsb2IqKiBwYXR0ZXJuIQoKYGBgc2hlbGwKdmFjdXVtIGxpbnQgc29tZS9wYXRoLyoqLyoueWFtbGAgCmBgYAoKCi0tLQpgdjAuMytgOiBbQ3VzdG9tIEphdmFTY3JpcHQgRnVuY3Rpb25zXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2FwaS9jdXN0b20tamF2YXNjcmlwdC1mdW5jdGlvbnMvKSBhcmUgbm93IGF2YWlsYWJsZSBvdXQgb2YgdGhlIGJveC4KCldyaXRlIGN1c3RvbSBmdW5jdGlvbnMgaW4gSmF2YVNjcmlwdCBhbmQgdXNlIHRoZW0gaW4gYW55IHJ1bGVzZXQuIE5vIG5lZWQKdG8gY29tcGlsZSBnb2xhbmcgY29kZSB0byBleHRlbmQgdmFjdXVtIGFueW1vcmUhCgpbTGVhcm4gbW9yZSBhYm91dCBidWlsZGluZyBjdXN0b20gSmF2YVNjcmlwdCBmdW5jdGlvbnNdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vYXBpL2N1c3RvbS1qYXZhc2NyaXB0LWZ1bmN0aW9ucy8pLgoKCi0tLQpgdjAuMitgOiBbT1dBU1AgQVBJIHJ1bGVzXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzL293YXNwLykgYXJlIG5vdyBhdmFpbGFibGUgb3V0IG9mIHRoZSBib3guCgpbTGVhcm4gbW9yZSBhYm91dCBlbmFibGluZyBPV0FTUCBBUEkgcnVsZXNdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vcnVsZXNldHMvb3dhc3AvKS4KCi0tLQoKIyMjIFtRdWljayBTdGFydCBHdWlkZSDwn5qAXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3N0YXJ0KQoKU2VlIGFsbCB0aGUgZG9jdW1lbnRhdGlvbiBhdCBodHRwczovL3F1b2JpeC5jb20vdmFjdXVtCgotIFtJbnN0YWxsaW5nIHZhY3V1bV0oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9pbnN0YWxsaW5nLykKLSBbQWJvdXQgdmFjdXVtXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2Fib3V0LykKLSBbV2h5IHNob3VsZCB5b3UgY2FyZT9dKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vd2h5LykKLSBbQ29uY2VwdHNdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vY29uY2VwdHMvKQotIFtGQVFdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vZmFxLykKLSBbQ0xJIENvbW1hbmRzXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2NvbW1hbmRzLykKICAtIFtsaW50XShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2NvbW1hbmRzL2xpbnQvKQogIC0gW3ZhY3V1bSByZXBvcnRdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vY29tbWFuZHMvcmVwb3J0LykKICAtIFtkYXNoYm9hcmRdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vY29tbWFuZHMvZGFzaGJvYXJkLykKICAtIFtodG1sLXJlcG9ydF0oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9jb21tYW5kcy9odG1sLXJlcG9ydC8pCiAgLSBbc3BlY3RyYWwtcmVwb3J0XShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2NvbW1hbmRzL3NwZWN0cmFsLXJlcG9ydC8pCi0gW0RldmVsb3BlciBBUEldKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vYXBpL2dldHRpbmctc3RhcnRlZC8pCiAgLSBbVXNpbmcgVGhlIEluZGV4XShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2FwaS9zcGVjLWluZGV4LykKICAtIFtSdWxlUmVzdWx0U2V0XShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2FwaS9ydWxlLXJlc3VsdHNldC8pCiAgLSBbTG9hZGluZyBhIFJ1bGVTZXRdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vYXBpL2xvYWRpbmctcnVsZXNldC8pCiAgLSBbTGludGluZyBOb24tT3BlbkFQSSBGaWxlc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9hcGkvbm9uLW9wZW5hcGkvKQogIC0gW0N1c3RvbSBHb2xhbmcgRnVuY3Rpb25zXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2FwaS9jdXN0b20tZnVuY3Rpb25zLykKICAtIFtDdXN0b20gSmF2YVNjcmlwdCBGdW5jdGlvbnNdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vYXBpL2N1c3RvbS1qYXZhc2NyaXB0LWZ1bmN0aW9ucy8pCi0gW1J1bGVzXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzLykKICAtIFtFeGFtcGxlc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlcy9leGFtcGxlcy8pCiAgLSBbVGFnc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlcy90YWdzLykKICAtIFtEZXNjcmlwdGlvbnNdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vcnVsZXMvZGVzY3JpcHRpb25zLykKICAtIFtTY2hlbWFzXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzL3NjaGVtYXMvKQogIC0gW1NwZWMgSW5mb3JtYXRpb25dKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vcnVsZXMvaW5mb3JtYXRpb24vKQogIC0gW09wZXJhdGlvbnMgJiBQYXRoc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlcy9vcGVyYXRpb25zLykKICAtIFtWYWxpZGF0aW9uXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzL3ZhbGlkYXRpb24vKQogIC0gW1NlY3VyaXR5XShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzL3NlY3VyaXR5LykKICAtIFtPV0FTUF0oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlcy9vd2FzcC8pCi0gW0Z1bmN0aW9uc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9mdW5jdGlvbnMvKQogIC0gW0NvcmUgRnVuY3Rpb25zXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2Z1bmN0aW9ucy9jb3JlLykgCiAgLSBbT3BlbkFQSSBGdW5jdGlvbnNdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vZnVuY3Rpb25zL29wZW5hcGkvKQogIC0gW09XQVNQIEZ1bmN0aW9uc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9mdW5jdGlvbnMvb3dhc3AvKQotIFtVbmRlcnN0YW5kaW5nIFJ1bGVTZXRzXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzZXRzL3VuZGVyc3RhbmRpbmcvKQogIC0gW0FsbCBSdWxlc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlc2V0cy9hbGwvKQogIC0gW05vIFJ1bGVzXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzZXRzL25vLXJ1bGVzLykKICAtIFtSZWNvbW1lbmRlZCBSdWxlc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlc2V0cy9yZWNvbW1lbmRlZC8pCiAgLSBbQ3VzdG9tIFJ1bGVzXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzZXRzL2N1c3RvbS1ydWxlc2V0cy8pCgotLS0KCj4gKip2YWN1dW0gY2FuIHN1Y2sgYWxsIHRoZSBsaW50IG9mIGEgNW1iIE9wZW5BUEkgc3BlYyBpbiBtaWxsaXNlY29uZHMuKioKCkRlc2lnbmVkIHRvIHJlbGlhYmx5IGxpbnQgT3BlbkFQSSBzcGVjaWZpY2F0aW9ucywgKip2ZXJ5LCB2ZXJ5IHF1aWNrbHkqKi4gSW5jbHVkaW5nIF92ZXJ5IGxhcmdlXyBvbmVzLiBTcGVjdHJhbCBjYW4gYmUgcXVpdGUgc2xvdwp3aGVuIHVzZWQgYXMgYW4gQVBJIGFuZCBkb2VzIG5vdCBzY2FsZSBmb3IgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMuCgp2YWN1dW0gd2lsbCB0ZWxsIHlvdSB3aGF0IGlzIHdyb25nIHdpdGggeW91ciBzcGVjLCB3aHksIHdoZXJlIGFuZCBob3cgdG8gZml4IGl0LiAKCnZhY3V1bSB3aWxsIHdvcmsgYXQgc2NhbGUgYW5kIGlzIGRlc2lnbmVkIGFzIGEgQ0xJICh3aXRoIGEgd2ViIG9yIGNvbnNvbGUgVUkpIGFuZCBhIGxpYnJhcnkgdG8gYmUgY29uc3VtZWQgaW4gb3RoZXIgYXBwbGljYXRpb25zLgoKIyMjIERhc2hib2FyZAoKdmFjdXVtIGNvbWVzIHdpdGggYW4gaW50ZXJhY3RpdmUgZGFzaGJvYXJkIChgdmFjdXVtIGRhc2hib2FyZCA8eW91ci1vcGVuYXBpLXNwZWMueWFtbD5gKSBhbGxvd2luZyB5b3UgdG8gZXhwbG9yZQpydWxlcyBhbmQgdmlvbGF0aW9ucyBpbiBhIGNvbnNvbGUsIHdpdGhvdXQgaGF2aW5nIHRvIHNjcm9sbCB0aHJvdWdoIHRob3VzYW5kcyBvZiByZXN1bHRzLgoKIVt2YWN1dW0gZGFzaGJvYXJkXShkYXNoYm9hcmQtc2NyZWVuc2hvdC5wbmcpCgojIyMgSFRNTCBSZXBvcnQKCnZhY3V1bSBjYW4gZ2VuZXJhdGUgYW4gZWFzeSB0byBuYXZpZ2F0ZSBhbmQgdW5kZXJzdGFuZCBIVE1MIHJlcG9ydC4gTGlrZSB0aGUgZGFzaGJvYXJkCnlvdSBjYW4gZXhwbG9yZSBicm9rZW4gcnVsZXMgYW5kIHZpb2xhdGlvbnMsIGJ1dCBpbiB5b3VyIGJyb3dzZXIuCgpObyBleHRlcm5hbCBkZXBlbmRlbmNpZXMsIHRoZSBIVE1MIHJlcG9ydCB3aWxsIHJ1biBjb21wbGV0ZWx5IG9mZmxpbmUuCgohW3ZhY3V1bSBodG1sLXJlcG9ydF0oaHRtbC1yZXBvcnQtc2NyZWVuc2hvdC5wbmcpCgotLS0KCj4gKipfU3VwcG9ydHMgT3BlbkFQSSBWZXJzaW9uIDIgKFN3YWdnZXIpIGFuZCBWZXJzaW9uIDMrXyoqCgpZb3UgY2FuIHVzZSBlaXRoZXIgKipZQU1MKiogb3IgKipKU09OKiosIHZhY3V1bSBzdXBwb3J0cyBib3RoIGZvcm1hdHMuCgojIyBVc2luZyB2YWN1dW0gd2l0aCBwcmUtY29tbWl0CgpWYWN1dW0gY2FuIGJlIHVzZWQgd2l0aCBbcHJlLWNvbW1pdF0oaHR0cHM6Ly9wcmUtY29tbWl0LmNvbSkuCgpUbyBkbyB0aGF0LCBhZGQgdG8geW91ciBgLnByZS1jb21taXQtY29uZmlnLnlhbWxgOgoKYGBgeWFtbApyZXBvczoKICAtIHJlcG86IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXZlc2hhbmxleS92YWN1dW0KICAgIHJldjogIyBhIHRhZyBvciBhIGNvbW1pdCBoYXNoIGZyb20gdGhpcyByZXBvLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhdmVzaGFubGV5L3ZhY3V1bS9yZWxlYXNlcwogICAgaG9va3M6CiAgICAgIC0gaWQ6IHZhY3V1bQpgYGAKClNlZSB0aGUgW2hvb2sgZGVmaW5pdGlvbl0oLi8ucHJlLWNvbW1pdC1ob29rcy55YW1sKSBoZXJlIGZvciBkZXRhaWxzIG9uIHdoYXQgb3B0aW9ucyB0aGUgaG9vayB1c2VzIGFuZCB3aGF0IGZpbGVzIGl0IGNoZWNrcyBieSBkZWZhdWx0LgoKSWYgbm8gZmlsZW5hbWVzIG9yIG1vcmUgdGhhbiBvbmUgZmlsZW5hbWUgaW4geW91ciByZXBvc2l0b3J5IG1hdGNoZXMgdGhlIGRlZmF1bHQgYGZpbGVzYCBwYXR0ZXJuIGluIHRoZSBob29rIGRlZmluaXRpb24sCnRoZSBwYXR0ZXJuIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gaW4geW91ciBjb25maWcgc28gdGhhdCBpdCBtYXRjaGVzIGV4YWN0bHkgb25lIGZpbGVuYW1lIHRvIGxpbnQgYXQgYSB0aW1lLgpUbyBsaW50IG11bHRpcGxlIGZpbGVzLCBzcGVjaWZ5IHRoZSBob29rIG11bHRpcGxlIHRpbWVzIHdpdGggdGhlIGFwcHJvcHJpYXRlIG92ZXJyaWRlcy4KCiMjIEJ1aWxkIGFuIGludGVyYWN0aXZlIEhUTUwgcmVwb3J0IAoKYGBgCi4vdmFjdXVtIGh0bWwtcmVwb3J0IDx5b3VyLW9wZW5hcGktc3BlYy55YW1sIHwgdmFjdXVtLXJlcG9ydC5qc29uLmd6PiA8cmVwb3J0LW5hbWUuaHRtbD4KYGBgCgpZb3UgY2FuIHJlcGxhY2UgYHJlcG9ydC1uYW1lLmh0bWxgIHdpdGggeW91ciBvd24gY2hvaWNlIG9mIGZpbGVuYW1lLiBPcGVuIHRoZSByZXBvcnQKaW4geW91ciBmYXZvcml0ZSBicm93c2VyIGFuZCBleHBsb3JlIHRoZSByZXN1bHRzLiAKCgojIyBTZWUgZnVsbCBsaW50aW5nIHJlcG9ydCAKCmBgYAouL3ZhY3V1bSBsaW50IC1kIDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPgpgYGAKCgojIyBMaW50IG11bHRpcGxlIGZpbGVzIGF0IG9uY2UKCmBgYAouL3ZhY3V1bSBsaW50IC1kIDxzcGVjMS55YW1sPiA8c3BlYzIueWFtbD4gPHNwZWMzLnlhbWw+CmBgYAoKIyMgTGludCBtdWx0aXBsZSBmaWxlcyB1c2luZyBhIGdsb2IgcGF0dGVybgoKYGBgCi4vdmFjdXVtIGxpbnQgLWQgc29tZS9wYXRoLyoqLyoueWFtbApgYGAKCiMjIFNlZSBmdWxsIGxpbnRpbmcgcmVwb3J0IHdpdGggaW5saW5lIGNvZGUgc25pcHBldHMKCmBgYAouL3ZhY3V1bSBsaW50IC1kIC1zIDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPgpgYGAKCiMjIFNlZSBqdXN0IHRoZSBsaW50aW5nIGVycm9ycwoKYGBgCi4vdmFjdXVtIGxpbnQgLWQgLWUgPHlvdXItb3BlbmFwaS1zcGVjLnlhbWw+CmBgYAoKIyMgU2VlIGp1c3QgYSBzcGVjaWZpYyBjYXRlZ29yeSBvZiByZXBvcnQKCgpgYGAKLi92YWN1dW0gbGludCAtZCAtYyBzY2hlbWFzIDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPgpgYGAKClRoZSBvcHRpb25zIGhlcmUgYXJlOgoKLSBgZXhhbXBsZXNgCi0gYG9wZXJhdGlvbnNgCi0gYGluZm9ybWF0aW9uYAotIGBkZXNjcmlwdGlvbnNgCi0gYHNjaGVtYXNgCi0gYHNlY3VyaXR5YAotIGB0YWdzYAotIGB2YWxpZGF0aW9uYAotIGBvd2FzcGAKCiMjIEdlbmVyYXRlIGEgU3BlY3RyYWwgY29tcGF0aWJsZSByZXBvcnQKCklmIHlvdSdyZSBhbHJlYWR5IHVzaW5nIFNwZWN0cmFsIEpTT04gcmVwb3J0cywgYW5kIHlvdSB3YW50IHRvIHVzZSB2YWN1dW0gaW5zdGVhZCwgdXNlIHRoZSBgc3BlY3RyYWwtcmVwb3J0YCBjb21tYW5kCgpgYGAKLi92YWN1dW0gc3BlY3RyYWwtcmVwb3J0IDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPiA8cmVwb3J0LW91dHB1dC1uYW1lLmpzb24+CmBgYAoKVGhlIHJlcG9ydCBmaWxlIG5hbWUgaXMgX29wdGlvbmFsXy4gVGhlIGRlZmF1bHQgcmVwb3J0IG91dHB1dCBuYW1lIGlzIGB2YWN1dW0tc3BlY3RyYWwtcmVwb3J0Lmpzb25gCgoKIyMgR2VuZXJhdGUgYSBgdmFjdXVtIHJlcG9ydGAKClZhY3V1bSByZXBvcnRzIGFyZSBjb21wbGV0ZSBzbmFwc2hvdHMgaW4gdGltZSBvZiBhIGxpbnRpbmcgcmVwb3J0IGZvciBhIHNwZWNpZmljYXRpb24uIFRoZXNlIHJlcG9ydHMgY2FuIGJlICdyZXBsYXllZCcgCmJhY2sgdGhyb3VnaCB2YWN1dW0uIFVzZSB0aGUgYGRhc2hib2FyZGAgb3IgdGhlIGBodG1sLXJlcG9ydGAgY29tbWFuZHMgdG8gJ3JlcGxheScgdGhlIHJlcG9ydCBhbmQgZXhwbG9yZSB0aGUgcmVzdWx0cwphcyB0aGV5IHdlcmUgd2hlbiB0aGUgcmVwb3J0IHdhcyBnZW5lcmF0ZWQuCgpgYGAKLi92YWN1dW0gcmVwb3J0IC1jIDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPiA8cmVwb3J0LXByZWZpeD4KYGBgCgpUaGUgZGVmYXVsdCBuYW1lIG9mIHRoZSByZXBvcnQgd2lsbCBiZSBgdmFjdXVtLXJlcG9ydC1NTS1ERC1ZWS1ISF9NTV9TUy5qc29uYC4gWW91IGNhbiBjaGFuZ2UgdGhlIHByZWZpeCBieSBzdXBwbHlpbmcKaXQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUgYHJlcG9ydGAgY29tbWFuZC4gCgpJZGVhbGx5LCAqKnlvdSBzaG91bGQgY29tcHJlc3MgdGhlIHJlcG9ydCB1c2luZyBgLWNgKiouIFRoaXMgc2hyaW5rcyBkb3duIHRoZSBzaXplIHNpZ25pZmljYW50bHkuIHZhY3V1bSBhdXRvbWF0aWNhbGx5CnJlY29nbml6ZXMgYSBjb21wcmVzc2VkIHJlcG9ydCBmaWxlIGFuZCB3aWxsIGRlYWwgd2l0aCBpdCBhdXRvbWF0aWNhbGx5IHdoZW4gcmVhZGluZy4KCj4gV2hlbiB1c2luZyBjb21wcmVzc2lvbiwgdGhlIGZpbGUgbmFtZSB3aWxsIGJlIGB2YWN1dW0tcmVwb3J0LU1NLURELVlZLUhIX01NX1NTLmpzb24uZ3pgLiB2YWN1dW0gdXNlcyBnemlwIGludGVybmFsbHkuCgotLS0KCiMjIFRyeSBvdXQgdGhlIGRhc2hib2FyZAoKVGhpcyBpcyBhbiBlYXJseSwgYnV0IHdvcmtpbmcgY29uc29sZSBVSSBmb3IgdmFjdXVtLiBUaGUgY29kZSBpc24ndCBncmVhdCwgaXQgbmVlZHMgYSBsb3Qgb2YgY2xlYW4gdXAsIGJ1dAppZiB5b3UncmUgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoaW5ncyBhcmUgcHJvZ3Jlc3NpbmcsIGl0J3MgYXZhaWxhYmxlLgoKYGBgCi4vdmFjdXVtIGRhc2hib2FyZCA8eW91ci1vcGVuYXBpLXNwZWMueWFtbCB8IHZhY3V1bS1yZXBvcnQuanNvbi5nej4KYGBgCgotLS0KIyMgU3VwcGx5IHlvdXIgb3duIFNwZWN0cmFsIGNvbXBhdGlibGUgcnVsZXNldAoKSWYgeW91J3JlIGFscmVhZHkgdXNpbmcgU3BlY3RyYWwgYW5kIHlvdSBoYXZlIHlvdXIgb3duIFtjdXN0b20gcnVsZXNldF0oaHR0cHM6Ly9tZXRhLnN0b3BsaWdodC5pby9kb2NzL3NwZWN0cmFsL2U1Yjk2MTZkNmQ1MGMtY3VzdG9tLXJ1bGVzZXRzI2N1c3RvbS1ydWxlc2V0cyksCnRoZW4geW91IGNhbiB1c2UgaXQgd2l0aCB2YWN1dW0hIAoKVGhlIGBsaW50YCwgYGRhc2hib2FyZGAgYW5kIGBzcGVjdHJhbC1yZXBvcnRgIGNvbW1hbmRzIGFsbCBhY2NlcHQgYSBgLXJgIG9yIGAtLXJ1bGVzZXRgIGZsYWcsIGRlZmluaW5nIHRoZSBwYXRoIHRvIHlvdXIgcnVsZXNldCBmaWxlLgoKIyMjIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgeW91IGNhbiB0cnkKCioqX0FsbCBydWxlcyB0dXJuZWQgb2ZmXyoqCmBgYAouL3ZhY3V1bSBsaW50IC1yIHJ1bGVzZXRzL2V4YW1wbGVzL25vcnVsZXMtcnVsZXNldC55YW1sIDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPgpgYGAKCioqX09ubHkgcmVjb21tZW5kZWQgcnVsZXNfKioKYGBgCi4vdmFjdXVtIGxpbnQgLXIgcnVsZXNldHMvZXhhbXBsZXMvcmVjb21tZW5kZWQtcnVsZXNldC55YW1sIDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPgpgYGAKCioqX0VuYWJsZSBzcGVjaWZpYyBydWxlcyBvbmx5XyoqCmBgYAouL3ZhY3V1bSBsaW50IC1yIHJ1bGVzZXRzL2V4YW1wbGVzL3NwZWNpZmljLXJ1bGVzZXQueWFtbCA8eW91ci1vcGVuYXBpLXNwZWMueWFtbD4KYGBgCgoqKl9DdXN0b20gcnVsZXNfKioKYGBgCi4vdmFjdXVtIGxpbnQgLXIgcnVsZXNldHMvZXhhbXBsZXMvY3VzdG9tLXJ1bGVzZXQueWFtbCA8eW91ci1vcGVuYXBpLXNwZWMueWFtbD4KYGBgCgoqKl9BbGwgcnVsZXMsIGFsbCBvZiB0aGVtISoqCmBgYAouL3ZhY3V1bSBsaW50IC1yIHJ1bGVzZXRzL2V4YW1wbGVzL2FsbC1ydWxlc2V0LnlhbWwgPHlvdXItb3BlbmFwaS1zcGVjLnlhbWw+CmBgYAoKLS0tCgojIyBDb25maWd1cmF0aW9uCgojIyMgRmlsZQpZb3UgY2FuIGNvbmZpZ3VyZSB2YWN1dW0gdXNpbmcgYSBjb25maWd1cmF0aW9uIGZpbGUgbmFtZWQgYHZhY3V1bS5jb25mLnlhbWxgCgpCeSBkZWZhdWx0LCB2YWN1dW0gc2VhcmNoZXMgZm9yIHRoaXMgZmlsZSBpbiB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzCjEuIFdvcmtpbmcgZGlyZWN0b3J5CjIuIGAkWERHX0NPTkZJR19IT01FYAozLiBgJHtIT01FfS8uY29uZmlnYAoKWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBwYXRoIHRvIGEgZmlsZSB1c2luZyB0aGUgYC0tY29uZmlnYCBmbGFnCgpHbG9iYWwgZmxhZ3MgYXJlIGNvbmZpZ3VyZWQgYXMgdG9wIGxldmVsIG5vZGVzCmBgYHlhbWwKdGltZTogdHJ1ZQpiYXNlOiAnaHR0cDovL2V4YW1wbGUuY29tJwouLi4KYGBgCkNvbW1hbmQgc3BlY2lmaWMgZmxhZ3MgYXJlIGNvbmZpZ3VyZWQgdW5kZXIgYSBub2RlIHdpdGggdGhlIGNvbW1hbmRzIG5hbWUKYGBgeWFtbAouLi4KbGludDoKICBzaWxlbnQ6IHRydWUKICAuLi4KYGBgCgojIyMgRW52aXJvbm1lbnRhbCB2YXJpYWJsZXMKCllvdSBjYW4gY29uZmlndXJlIGdsb2JhbCB2YWN1dW0gZmxhZ3MgdXNpbmcgZW52aXJvbm1lbnRhbCB2YXJpYWJsZXMgaW4gdGhlIGZvcm0gb2Y6IGBWQUNVVU1fPGZsYWc+YAoKSWYgYSBmbGFnLCBoYXMgYSBgLWAgaW4gaXQsIHJlcGxhY2Ugd2l0aCBgX2AKCj4gTG9nbyBnb3BoZXIgaXMgbW9kaWZpZWQsIG9yaWdpbmFsbHkgZnJvbSBbZWdvbmVsYnJlXShodHRwczovL2dpdGh1Yi5jb20vZWdvbmVsYnJlL2dvcGhlcnMpCg== - readmeEtag: '"64a7fd45a1f7a270581eb960da7e9ac183b63ae24918aac90378374bada56d37"' - readmeLastModified: Wed, 29 Nov 2023 11:26:56 GMT + IVtsb2dvXShsb2dvLnBuZykKCiMgdmFjdXVtIC0gVGhlIHdvcmxkJ3MgZmFzdGVzdCBPcGVuQVBJICYgU3dhZ2dlciBsaW50ZXIuCgohW2J1aWxkXShodHRwczovL2dpdGh1Yi5jb20vZGF2ZXNoYW5sZXkvdmFjdXVtL3dvcmtmbG93cy9CdWlsZC9iYWRnZS5zdmcpClshW0dvIFJlcG9ydCBDYXJkXShodHRwczovL2dvcmVwb3J0Y2FyZC5jb20vYmFkZ2UvZ2l0aHViLmNvbS9kYXZlc2hhbmxleS92YWN1dW0pXShodHRwczovL2dvcmVwb3J0Y2FyZC5jb20vcmVwb3J0L2dpdGh1Yi5jb20vZGF2ZXNoYW5sZXkvdmFjdXVtKQpbIVtkaXNjb3JkXShodHRwczovL2ltZy5zaGllbGRzLmlvL2Rpc2NvcmQvOTIzMjU4MzYzNTQwODE1OTEyKV0oaHR0cHM6Ly9kaXNjb3JkLmdnL1VBY1VGNzhNUU4pClshW0RvY3NdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvZ29kb2MtcmVmZXJlbmNlLTVmYWZkNyldKGh0dHBzOi8tL3BrZy5nby5kZXYvZ2l0aHViLmNvbS9kYXZlc2hhbmxleS92YWN1dW0pClshW0dpdEh1YiBkb3dubG9hZHNdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2Rvd25sb2Fkcy9kYXZlc2hhbmxleS92YWN1dW0vdG90YWw/bGFiZWw9Z2l0aHViJTIwZG93bmxvYWRzJnN0eWxlPWZsYXQtc3F1YXJlKV0oaHR0cHM6Ly9naXRodWIuY29tL2RhdmVzaGFubGV5L3ZhY3V1bS9yZWxlYXNlcykKWyFbbnBtXShodHRwczovL2ltZy5zaGllbGRzLmlvL25wbS9kbS9AcXVvYml4L3ZhY3V1bT9zdHlsZT1mbGF0LXNxdWFyZSZsYWJlbD1ucG0lMjBkb3dubG9hZHMpXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AcXVvYml4L3ZhY3V1bSkKWyFbRG9ja2VyIFB1bGxzXShodHRwczovL2ltZy5zaGllbGRzLmlvL2RvY2tlci9wdWxscy9kc2hhbmxleS92YWN1dW0/c3R5bGU9ZmxhdC1zcXVhcmUpXShodHRwczovL2h1Yi5kb2NrZXIuY29tL3IvZHNoYW5sZXkvdmFjdXVtKQpbIVtNZW50aW9uZWQgaW4gQXdlc29tZSBHb10oaHR0cHM6Ly9hd2Vzb21lLnJlL21lbnRpb25lZC1iYWRnZS1mbGF0LnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9hdmVsaW5vL2F3ZXNvbWUtZ28pCgpBbiAqKnVsdHJhLXN1cGVyLWZhc3QqKiwgbGlnaHR3ZWlnaHQgT3BlbkFQSSBsaW50ZXIgYW5kIHF1YWxpdHkgY2hlY2tpbmcgdG9vbCwgd3JpdHRlbiBpbiBnb2xhbmcgYW5kIGluc3BpcmVkIGJ5IFtTcGVjdHJhbF0oaHR0cHM6Ly9naXRodWIuY29tL3N0b3BsaWdodGlvL3NwZWN0cmFsKS4KCkl0J3MgYWxzbyBjb21wYXRpYmxlIHdpdGggZXhpc3RpbmcgW1NwZWN0cmFsXShodHRwczovL2dpdGh1Yi5jb20vc3RvcGxpZ2h0aW8vc3BlY3RyYWwpIHJ1bGVzZXRzLgoKIyMgSW5zdGFsbCB1c2luZyBbaG9tZWJyZXddKGh0dHBzOi8vYnJldy5zaCkgdGFwCgpgYGAKYnJldyBpbnN0YWxsIGRhdmVzaGFubGV5L3ZhY3V1bS92YWN1dW0KYGBgCgojIyBJbnN0YWxsIHVzaW5nIFtucG1dKGh0dHBzOi8vbnBtanMuY29tKQoKYGBgCm5wbSBpIC1nIEBxdW9iaXgvdmFjdXVtCmBgYAoKIyMgSW5zdGFsbCB1c2luZyBbeWFybl0oaHR0cHM6Ly95YXJucGtnLmNvbS8pCgpgYGAKeWFybiBnbG9iYWwgYWRkIEBxdW9iaXgvdmFjdXVtCmBgYAoKIyMgSW5zdGFsbCB1c2luZyBjdXJsCgpgYGAKY3VybCAtZnNTTCBodHRwczovL3F1b2JpeC5jb20vc2NyaXB0cy9pbnN0YWxsX3ZhY3V1bS5zaCB8IHNoCmBgYAoKIyMgSW5zdGFsbCB1c2luZyBbRG9ja2VyXShodHRwczovL2h1Yi5kb2NrZXIuY29tL3IvZHNoYW5sZXkvdmFjdXVtKQoKVGhlIGltYWdlIGlzIGF2YWlsYWJsZSBhdDogaHR0cHM6Ly9odWIuZG9ja2VyLmNvbS9yL2RzaGFubGV5L3ZhY3V1bQoKYGBgCmRvY2tlciBwdWxsIGRzaGFubGV5L3ZhY3V1bQpgYGAKClRvIHJ1biwgbW91bnQgdGhlIGN1cnJlbnQgd29ya2luZyBkaXIgdG8gdGhlIGNvbnRhaW5lciBhbmQgdXNlIGEgcmVsYXRpdmUgcGF0aCB0byB5b3VyIHNwZWMsIGxpa2Ugc28KCmBgYApkb2NrZXIgcnVuIC0tcm0gLXYgJFBXRDovd29yazpybyBkc2hhbmxleS92YWN1dW0gbGludCA8eW91ci1vcGVuYXBpLXNwZWMueWFtbD4KYGBgCkFsdGVybmF0aXZlbHksIHlvdSBjYW4gcHVsbCBpdCBmcm9tCltHaXRodWIgcGFja2FnZXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9kYXZlc2hhbmxleS92YWN1dW0vcGtncy9jb250YWluZXIvdmFjdXVtKS4KVG8gZG8gdGhhdCwgcmVwbGFjZSBgZHNoYW5sZXkvdmFjdXVtYCB3aXRoIGBnaGNyLmlvL2RhdmVzaGFubGV5L3ZhY3V1bWAgaW4gdGhlIGFib3ZlIGNvbW1hbmRzLgoKCi0tLQoKCiMjIFNwb25zb3JzCklmIHlvdXIgY29tcGFueSBpcyB1c2luZyBgdmFjdXVtYCwgcGxlYXNlIGNvbnNpZGVyaW5nIFtzdXBwb3J0aW5nIHRoaXMgcHJvamVjdF0oaHR0cHM6Ly9naXRodWIuY29tL3Nwb25zb3JzL2RhdmVzaGFubGV5KSwKbGlrZSBvdXIgX3Zlcnkga2luZF8gc3BvbnNvcnM6CgoKPGEgaHJlZj0iaHR0cHM6Ly9zcGVha2Vhc3lhcGkuZGV2Lz91dG1fc291cmNlPXZhY3V1bStyZXBvJnV0bV9tZWRpdW09Z2l0aHViK3Nwb25zb3JzaGlwIj4KPHBpY3R1cmU+CiAgPHNvdXJjZSBtZWRpYT0iKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSIgc3Jjc2V0PSIuZ2l0aHViL3Nwb25zb3JzL3NwZWFrZWFzeS1naXRodWItc3BvbnNvci1kYXJrLnN2ZyI+CiAgPGltZyBhbHQ9InNwZWFrZWFzeSciIHNyYz0iLmdpdGh1Yi9zcG9uc29ycy9zcGVha2Vhc3ktZ2l0aHViLXNwb25zb3ItbGlnaHQuc3ZnIj4KPC9waWN0dXJlPgo8L2E+CgpbU3BlYWtlYXN5XShodHRwczovL3NwZWFrZWFzeWFwaS5kZXYvP3V0bV9zb3VyY2U9dmFjdXVtK3JlcG8mdXRtX21lZGl1bT1naXRodWIrc3BvbnNvcnNoaXApCgo8YSBocmVmPSJodHRwczovL3NjYWxhci5jb20iPgo8cGljdHVyZT4KICA8c291cmNlIG1lZGlhPSIocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIiBzcmNzZXQ9Ii5naXRodWIvc3BvbnNvcnMvc2NhbGFyLWRhcmsucG5nIj4KICA8aW1nIGFsdD0ic2NhbGFyIiBzcmM9Ii5naXRodWIvc3BvbnNvcnMvc2NhbGFyLWxpZ2h0LnBuZyI+CjwvcGljdHVyZT4KPC9hPgoKW3NjYWxhcl0oaHR0cHM6Ly9zY2FsYXIuY29tKQoKPGEgaHJlZj0iaHR0cHM6Ly96dXBsby5saW5rL3ZhY3V1bSI+CjxwaWN0dXJlPgogIDxzb3VyY2UgbWVkaWE9IihwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykiIHNyY3NldD0iLmdpdGh1Yi9zcG9uc29ycy96dXBsby1kYXJrLnBuZyI+CiAgPGltZyBhbHQ9InNjYWxhciIgc3JjPSIuZ2l0aHViL3Nwb25zb3JzL3p1cGxvLWxpZ2h0LnBuZyI+CjwvcGljdHVyZT4KPC9hPgoKW3p1cGxvXShbaHR0cHM6Ly96dXBsby5jb21dKGh0dHBzOi8venVwbG8ubGluay92YWN1dW0pKQoKCi0tLQoKIyMgQ29tZSBjaGF0IHdpdGggdXMKCk5lZWQgaGVscD8gSGF2ZSBhIHF1ZXN0aW9uPyBXYW50IHRvIHNoYXJlIHlvdXIgd29yaz8gW0pvaW4gb3VyIGRpc2NvcmRdKGh0dHBzOi8vZGlzY29yZC5nZy9VQWNVRjc4TVFOKSBhbmQKY29tZSBzYXkgaGkhCgojIyBEb2N1bWVudGF0aW9uCgrwn5SlICoqTmV3IGluKiogYHYwLjYrYCDwn5SlIDogKipTaGFyYWJsZSAvIGRpc3RyaWJ1dGVkIHJ1bGVzZXRzKiogIG5vdyBhdmFpbGFibGUuCgpXYW50IHRvIHNoYXJlIC8gZXh0ZW5kIC8gZGlzdHJpYnV0ZSB5b3VyIG93biBydWxlc2V0cz8gTm93IHlvdSBjYW4hCgpbTGVhcm4gbW9yZSBhYm91dCBzaGFyYWJsZSBydWxlc2V0c10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlc2V0cy9zaGFyaW5nLykKCi0tLQoKYHYwLjUrYCA6ICoqTXVsdGktZmlsZSBsaW50aW5nKiogIG5vdyBhdmFpbGFibGUgZm9yIHRoZSBgbGludGAgY29tbWFuZC4KCldhbnQgdG8gbGludCBtdWx0aXBsZSBmaWxlcyBhdCBvbmNlPyBOb3cgeW91IGNhbiEKCmBgYHNoZWxsCnZhY3V1bSBsaW50IGZpbGUxLmpzb24gcGF0aC90by9maWxlMi55YW1sIGZpbGUzLmpzb25gIApgYGAKCldhbnQgdG8gc3VjayBpbiBhIHRvbiBvZiBmaWxlcz8gVXNlIGEgKipnbG9iKiogcGF0dGVybiEKCmBgYHNoZWxsCnZhY3V1bSBsaW50IHNvbWUvcGF0aC8qKi8qLnlhbWxgIApgYGAKCgotLS0KYHYwLjMrYDogW0N1c3RvbSBKYXZhU2NyaXB0IEZ1bmN0aW9uc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9hcGkvY3VzdG9tLWphdmFzY3JpcHQtZnVuY3Rpb25zLykgYXJlIG5vdyBhdmFpbGFibGUgb3V0IG9mIHRoZSBib3guCgpXcml0ZSBjdXN0b20gZnVuY3Rpb25zIGluIEphdmFTY3JpcHQgYW5kIHVzZSB0aGVtIGluIGFueSBydWxlc2V0LiBObyBuZWVkCnRvIGNvbXBpbGUgZ29sYW5nIGNvZGUgdG8gZXh0ZW5kIHZhY3V1bSBhbnltb3JlIQoKW0xlYXJuIG1vcmUgYWJvdXQgYnVpbGRpbmcgY3VzdG9tIEphdmFTY3JpcHQgZnVuY3Rpb25zXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2FwaS9jdXN0b20tamF2YXNjcmlwdC1mdW5jdGlvbnMvKS4KCgotLS0KYHYwLjIrYDogW09XQVNQIEFQSSBydWxlc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlcy9vd2FzcC8pIGFyZSBub3cgYXZhaWxhYmxlIG91dCBvZiB0aGUgYm94LgoKW0xlYXJuIG1vcmUgYWJvdXQgZW5hYmxpbmcgT1dBU1AgQVBJIHJ1bGVzXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzZXRzL293YXNwLykuCgotLS0KCiMjIyBbUXVpY2sgU3RhcnQgR3VpZGUg8J+agF0oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9zdGFydCkKClNlZSBhbGwgdGhlIGRvY3VtZW50YXRpb24gYXQgaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bQoKLSBbSW5zdGFsbGluZyB2YWN1dW1dKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vaW5zdGFsbGluZy8pCi0gW0Fib3V0IHZhY3V1bV0oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9hYm91dC8pCi0gW1doeSBzaG91bGQgeW91IGNhcmU/XShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3doeS8pCi0gW0NvbmNlcHRzXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2NvbmNlcHRzLykKLSBbRkFRXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2ZhcS8pCi0gW0NMSSBDb21tYW5kc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9jb21tYW5kcy8pCiAgLSBbbGludF0oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9jb21tYW5kcy9saW50LykKICAtIFt2YWN1dW0gcmVwb3J0XShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2NvbW1hbmRzL3JlcG9ydC8pCiAgLSBbZGFzaGJvYXJkXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2NvbW1hbmRzL2Rhc2hib2FyZC8pCiAgLSBbaHRtbC1yZXBvcnRdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vY29tbWFuZHMvaHRtbC1yZXBvcnQvKQogIC0gW3NwZWN0cmFsLXJlcG9ydF0oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9jb21tYW5kcy9zcGVjdHJhbC1yZXBvcnQvKQotIFtEZXZlbG9wZXIgQVBJXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2FwaS9nZXR0aW5nLXN0YXJ0ZWQvKQogIC0gW1VzaW5nIFRoZSBJbmRleF0oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9hcGkvc3BlYy1pbmRleC8pCiAgLSBbUnVsZVJlc3VsdFNldF0oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9hcGkvcnVsZS1yZXN1bHRzZXQvKQogIC0gW0xvYWRpbmcgYSBSdWxlU2V0XShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2FwaS9sb2FkaW5nLXJ1bGVzZXQvKQogIC0gW0xpbnRpbmcgTm9uLU9wZW5BUEkgRmlsZXNdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vYXBpL25vbi1vcGVuYXBpLykKICAtIFtDdXN0b20gR29sYW5nIEZ1bmN0aW9uc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9hcGkvY3VzdG9tLWZ1bmN0aW9ucy8pCiAgLSBbQ3VzdG9tIEphdmFTY3JpcHQgRnVuY3Rpb25zXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2FwaS9jdXN0b20tamF2YXNjcmlwdC1mdW5jdGlvbnMvKQotIFtSdWxlc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlcy8pCiAgLSBbRXhhbXBsZXNdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vcnVsZXMvZXhhbXBsZXMvKQogIC0gW1RhZ3NdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vcnVsZXMvdGFncy8pCiAgLSBbRGVzY3JpcHRpb25zXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzL2Rlc2NyaXB0aW9ucy8pCiAgLSBbU2NoZW1hc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlcy9zY2hlbWFzLykKICAtIFtTcGVjIEluZm9ybWF0aW9uXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzL2luZm9ybWF0aW9uLykKICAtIFtPcGVyYXRpb25zICYgUGF0aHNdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vcnVsZXMvb3BlcmF0aW9ucy8pCiAgLSBbVmFsaWRhdGlvbl0oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlcy92YWxpZGF0aW9uLykKICAtIFtTZWN1cml0eV0oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlcy9zZWN1cml0eS8pCiAgLSBbT1dBU1BdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vcnVsZXMvb3dhc3AvKQotIFtGdW5jdGlvbnNdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vZnVuY3Rpb25zLykKICAtIFtDb3JlIEZ1bmN0aW9uc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9mdW5jdGlvbnMvY29yZS8pIAogIC0gW09wZW5BUEkgRnVuY3Rpb25zXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL2Z1bmN0aW9ucy9vcGVuYXBpLykKICAtIFtPV0FTUCBGdW5jdGlvbnNdKGh0dHBzOi8vcXVvYml4LmNvbS92YWN1dW0vZnVuY3Rpb25zL293YXNwLykKLSBbVW5kZXJzdGFuZGluZyBSdWxlU2V0c10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlc2V0cy91bmRlcnN0YW5kaW5nLykKICAtIFtTaGFyaW5nIFJ1bGVTZXRzXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzZXRzL3NoYXJpbmcvKQogIC0gW0FsbCBSdWxlc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlc2V0cy9hbGwvKQogIC0gW05vIFJ1bGVzXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzZXRzL25vLXJ1bGVzLykKICAtIFtSZWNvbW1lbmRlZCBSdWxlc10oaHR0cHM6Ly9xdW9iaXguY29tL3ZhY3V1bS9ydWxlc2V0cy9yZWNvbW1lbmRlZC8pCiAgLSBbQ3VzdG9tIFJ1bGVzXShodHRwczovL3F1b2JpeC5jb20vdmFjdXVtL3J1bGVzZXRzL2N1c3RvbS1ydWxlc2V0cy8pCgotLS0KCj4gKip2YWN1dW0gY2FuIHN1Y2sgYWxsIHRoZSBsaW50IG9mIGEgNW1iIE9wZW5BUEkgc3BlYyBpbiBtaWxsaXNlY29uZHMuKioKCkRlc2lnbmVkIHRvIHJlbGlhYmx5IGxpbnQgT3BlbkFQSSBzcGVjaWZpY2F0aW9ucywgKip2ZXJ5LCB2ZXJ5IHF1aWNrbHkqKi4gSW5jbHVkaW5nIF92ZXJ5IGxhcmdlXyBvbmVzLiBTcGVjdHJhbCBjYW4gYmUgcXVpdGUgc2xvdwp3aGVuIHVzZWQgYXMgYW4gQVBJIGFuZCBkb2VzIG5vdCBzY2FsZSBmb3IgZW50ZXJwcmlzZSBhcHBsaWNhdGlvbnMuCgp2YWN1dW0gd2lsbCB0ZWxsIHlvdSB3aGF0IGlzIHdyb25nIHdpdGggeW91ciBzcGVjLCB3aHksIHdoZXJlIGFuZCBob3cgdG8gZml4IGl0LiAKCnZhY3V1bSB3aWxsIHdvcmsgYXQgc2NhbGUgYW5kIGlzIGRlc2lnbmVkIGFzIGEgQ0xJICh3aXRoIGEgd2ViIG9yIGNvbnNvbGUgVUkpIGFuZCBhIGxpYnJhcnkgdG8gYmUgY29uc3VtZWQgaW4gb3RoZXIgYXBwbGljYXRpb25zLgoKIyMjIERhc2hib2FyZAoKdmFjdXVtIGNvbWVzIHdpdGggYW4gaW50ZXJhY3RpdmUgZGFzaGJvYXJkIChgdmFjdXVtIGRhc2hib2FyZCA8eW91ci1vcGVuYXBpLXNwZWMueWFtbD5gKSBhbGxvd2luZyB5b3UgdG8gZXhwbG9yZQpydWxlcyBhbmQgdmlvbGF0aW9ucyBpbiBhIGNvbnNvbGUsIHdpdGhvdXQgaGF2aW5nIHRvIHNjcm9sbCB0aHJvdWdoIHRob3VzYW5kcyBvZiByZXN1bHRzLgoKIVt2YWN1dW0gZGFzaGJvYXJkXShkYXNoYm9hcmQtc2NyZWVuc2hvdC5wbmcpCgojIyMgSFRNTCBSZXBvcnQKCnZhY3V1bSBjYW4gZ2VuZXJhdGUgYW4gZWFzeSB0byBuYXZpZ2F0ZSBhbmQgdW5kZXJzdGFuZCBIVE1MIHJlcG9ydC4gTGlrZSB0aGUgZGFzaGJvYXJkCnlvdSBjYW4gZXhwbG9yZSBicm9rZW4gcnVsZXMgYW5kIHZpb2xhdGlvbnMsIGJ1dCBpbiB5b3VyIGJyb3dzZXIuCgpObyBleHRlcm5hbCBkZXBlbmRlbmNpZXMsIHRoZSBIVE1MIHJlcG9ydCB3aWxsIHJ1biBjb21wbGV0ZWx5IG9mZmxpbmUuCgohW3ZhY3V1bSBodG1sLXJlcG9ydF0oaHRtbC1yZXBvcnQtc2NyZWVuc2hvdC5wbmcpCgotLS0KCj4gKipfU3VwcG9ydHMgT3BlbkFQSSBWZXJzaW9uIDIgKFN3YWdnZXIpIGFuZCBWZXJzaW9uIDMrXyoqCgpZb3UgY2FuIHVzZSBlaXRoZXIgKipZQU1MKiogb3IgKipKU09OKiosIHZhY3V1bSBzdXBwb3J0cyBib3RoIGZvcm1hdHMuCgojIyBVc2luZyB2YWN1dW0gd2l0aCBwcmUtY29tbWl0CgpWYWN1dW0gY2FuIGJlIHVzZWQgd2l0aCBbcHJlLWNvbW1pdF0oaHR0cHM6Ly9wcmUtY29tbWl0LmNvbSkuCgpUbyBkbyB0aGF0LCBhZGQgdG8geW91ciBgLnByZS1jb21taXQtY29uZmlnLnlhbWxgOgoKYGBgeWFtbApyZXBvczoKICAtIHJlcG86IGh0dHBzOi8vZ2l0aHViLmNvbS9kYXZlc2hhbmxleS92YWN1dW0KICAgIHJldjogIyBhIHRhZyBvciBhIGNvbW1pdCBoYXNoIGZyb20gdGhpcyByZXBvLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2RhdmVzaGFubGV5L3ZhY3V1bS9yZWxlYXNlcwogICAgaG9va3M6CiAgICAgIC0gaWQ6IHZhY3V1bQpgYGAKClNlZSB0aGUgW2hvb2sgZGVmaW5pdGlvbl0oLi8ucHJlLWNvbW1pdC1ob29rcy55YW1sKSBoZXJlIGZvciBkZXRhaWxzIG9uIHdoYXQgb3B0aW9ucyB0aGUgaG9vayB1c2VzIGFuZCB3aGF0IGZpbGVzIGl0IGNoZWNrcyBieSBkZWZhdWx0LgoKSWYgbm8gZmlsZW5hbWVzIG9yIG1vcmUgdGhhbiBvbmUgZmlsZW5hbWUgaW4geW91ciByZXBvc2l0b3J5IG1hdGNoZXMgdGhlIGRlZmF1bHQgYGZpbGVzYCBwYXR0ZXJuIGluIHRoZSBob29rIGRlZmluaXRpb24sCnRoZSBwYXR0ZXJuIG5lZWRzIHRvIGJlIG92ZXJyaWRkZW4gaW4geW91ciBjb25maWcgc28gdGhhdCBpdCBtYXRjaGVzIGV4YWN0bHkgb25lIGZpbGVuYW1lIHRvIGxpbnQgYXQgYSB0aW1lLgpUbyBsaW50IG11bHRpcGxlIGZpbGVzLCBzcGVjaWZ5IHRoZSBob29rIG11bHRpcGxlIHRpbWVzIHdpdGggdGhlIGFwcHJvcHJpYXRlIG92ZXJyaWRlcy4KCiMjIEJ1aWxkIGFuIGludGVyYWN0aXZlIEhUTUwgcmVwb3J0IAoKYGBgCi4vdmFjdXVtIGh0bWwtcmVwb3J0IDx5b3VyLW9wZW5hcGktc3BlYy55YW1sIHwgdmFjdXVtLXJlcG9ydC5qc29uLmd6PiA8cmVwb3J0LW5hbWUuaHRtbD4KYGBgCgpZb3UgY2FuIHJlcGxhY2UgYHJlcG9ydC1uYW1lLmh0bWxgIHdpdGggeW91ciBvd24gY2hvaWNlIG9mIGZpbGVuYW1lLiBPcGVuIHRoZSByZXBvcnQKaW4geW91ciBmYXZvcml0ZSBicm93c2VyIGFuZCBleHBsb3JlIHRoZSByZXN1bHRzLiAKCgojIyBTZWUgZnVsbCBsaW50aW5nIHJlcG9ydCAKCmBgYAouL3ZhY3V1bSBsaW50IC1kIDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPgpgYGAKCgojIyBMaW50IG11bHRpcGxlIGZpbGVzIGF0IG9uY2UKCmBgYAouL3ZhY3V1bSBsaW50IC1kIDxzcGVjMS55YW1sPiA8c3BlYzIueWFtbD4gPHNwZWMzLnlhbWw+CmBgYAoKIyMgTGludCBtdWx0aXBsZSBmaWxlcyB1c2luZyBhIGdsb2IgcGF0dGVybgoKYGBgCi4vdmFjdXVtIGxpbnQgLWQgc29tZS9wYXRoLyoqLyoueWFtbApgYGAKCiMjIFNlZSBmdWxsIGxpbnRpbmcgcmVwb3J0IHdpdGggaW5saW5lIGNvZGUgc25pcHBldHMKCmBgYAouL3ZhY3V1bSBsaW50IC1kIC1zIDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPgpgYGAKCiMjIFNlZSBqdXN0IHRoZSBsaW50aW5nIGVycm9ycwoKYGBgCi4vdmFjdXVtIGxpbnQgLWQgLWUgPHlvdXItb3BlbmFwaS1zcGVjLnlhbWw+CmBgYAoKIyMgU2VlIGp1c3QgYSBzcGVjaWZpYyBjYXRlZ29yeSBvZiByZXBvcnQKCgpgYGAKLi92YWN1dW0gbGludCAtZCAtYyBzY2hlbWFzIDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPgpgYGAKClRoZSBvcHRpb25zIGhlcmUgYXJlOgoKLSBgZXhhbXBsZXNgCi0gYG9wZXJhdGlvbnNgCi0gYGluZm9ybWF0aW9uYAotIGBkZXNjcmlwdGlvbnNgCi0gYHNjaGVtYXNgCi0gYHNlY3VyaXR5YAotIGB0YWdzYAotIGB2YWxpZGF0aW9uYAotIGBvd2FzcGAKCiMjIEdlbmVyYXRlIGEgU3BlY3RyYWwgY29tcGF0aWJsZSByZXBvcnQKCklmIHlvdSdyZSBhbHJlYWR5IHVzaW5nIFNwZWN0cmFsIEpTT04gcmVwb3J0cywgYW5kIHlvdSB3YW50IHRvIHVzZSB2YWN1dW0gaW5zdGVhZCwgdXNlIHRoZSBgc3BlY3RyYWwtcmVwb3J0YCBjb21tYW5kCgpgYGAKLi92YWN1dW0gc3BlY3RyYWwtcmVwb3J0IDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPiA8cmVwb3J0LW91dHB1dC1uYW1lLmpzb24+CmBgYAoKVGhlIHJlcG9ydCBmaWxlIG5hbWUgaXMgX29wdGlvbmFsXy4gVGhlIGRlZmF1bHQgcmVwb3J0IG91dHB1dCBuYW1lIGlzIGB2YWN1dW0tc3BlY3RyYWwtcmVwb3J0Lmpzb25gCgoKIyMgR2VuZXJhdGUgYSBgdmFjdXVtIHJlcG9ydGAKClZhY3V1bSByZXBvcnRzIGFyZSBjb21wbGV0ZSBzbmFwc2hvdHMgaW4gdGltZSBvZiBhIGxpbnRpbmcgcmVwb3J0IGZvciBhIHNwZWNpZmljYXRpb24uIFRoZXNlIHJlcG9ydHMgY2FuIGJlICdyZXBsYXllZCcgCmJhY2sgdGhyb3VnaCB2YWN1dW0uIFVzZSB0aGUgYGRhc2hib2FyZGAgb3IgdGhlIGBodG1sLXJlcG9ydGAgY29tbWFuZHMgdG8gJ3JlcGxheScgdGhlIHJlcG9ydCBhbmQgZXhwbG9yZSB0aGUgcmVzdWx0cwphcyB0aGV5IHdlcmUgd2hlbiB0aGUgcmVwb3J0IHdhcyBnZW5lcmF0ZWQuCgpgYGAKLi92YWN1dW0gcmVwb3J0IC1jIDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPiA8cmVwb3J0LXByZWZpeD4KYGBgCgpUaGUgZGVmYXVsdCBuYW1lIG9mIHRoZSByZXBvcnQgd2lsbCBiZSBgdmFjdXVtLXJlcG9ydC1NTS1ERC1ZWS1ISF9NTV9TUy5qc29uYC4gWW91IGNhbiBjaGFuZ2UgdGhlIHByZWZpeCBieSBzdXBwbHlpbmcKaXQgYXMgdGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUgYHJlcG9ydGAgY29tbWFuZC4gCgpJZGVhbGx5LCAqKnlvdSBzaG91bGQgY29tcHJlc3MgdGhlIHJlcG9ydCB1c2luZyBgLWNgKiouIFRoaXMgc2hyaW5rcyBkb3duIHRoZSBzaXplIHNpZ25pZmljYW50bHkuIHZhY3V1bSBhdXRvbWF0aWNhbGx5CnJlY29nbml6ZXMgYSBjb21wcmVzc2VkIHJlcG9ydCBmaWxlIGFuZCB3aWxsIGRlYWwgd2l0aCBpdCBhdXRvbWF0aWNhbGx5IHdoZW4gcmVhZGluZy4KCj4gV2hlbiB1c2luZyBjb21wcmVzc2lvbiwgdGhlIGZpbGUgbmFtZSB3aWxsIGJlIGB2YWN1dW0tcmVwb3J0LU1NLURELVlZLUhIX01NX1NTLmpzb24uZ3pgLiB2YWN1dW0gdXNlcyBnemlwIGludGVybmFsbHkuCgotLS0KCiMjIFRyeSBvdXQgdGhlIGRhc2hib2FyZAoKVGhpcyBpcyBhbiBlYXJseSwgYnV0IHdvcmtpbmcgY29uc29sZSBVSSBmb3IgdmFjdXVtLiBUaGUgY29kZSBpc24ndCBncmVhdCwgaXQgbmVlZHMgYSBsb3Qgb2YgY2xlYW4gdXAsIGJ1dAppZiB5b3UncmUgaW50ZXJlc3RlZCBpbiBzZWVpbmcgaG93IHRoaW5ncyBhcmUgcHJvZ3Jlc3NpbmcsIGl0J3MgYXZhaWxhYmxlLgoKYGBgCi4vdmFjdXVtIGRhc2hib2FyZCA8eW91ci1vcGVuYXBpLXNwZWMueWFtbCB8IHZhY3V1bS1yZXBvcnQuanNvbi5nej4KYGBgCgotLS0KIyMgU3VwcGx5IHlvdXIgb3duIFNwZWN0cmFsIGNvbXBhdGlibGUgcnVsZXNldAoKSWYgeW91J3JlIGFscmVhZHkgdXNpbmcgU3BlY3RyYWwgYW5kIHlvdSBoYXZlIHlvdXIgb3duIFtjdXN0b20gcnVsZXNldF0oaHR0cHM6Ly9tZXRhLnN0b3BsaWdodC5pby9kb2NzL3NwZWN0cmFsL2U1Yjk2MTZkNmQ1MGMtY3VzdG9tLXJ1bGVzZXRzI2N1c3RvbS1ydWxlc2V0cyksCnRoZW4geW91IGNhbiB1c2UgaXQgd2l0aCB2YWN1dW0hIAoKVGhlIGBsaW50YCwgYGRhc2hib2FyZGAgYW5kIGBzcGVjdHJhbC1yZXBvcnRgIGNvbW1hbmRzIGFsbCBhY2NlcHQgYSBgLXJgIG9yIGAtLXJ1bGVzZXRgIGZsYWcsIGRlZmluaW5nIHRoZSBwYXRoIHRvIHlvdXIgcnVsZXNldCBmaWxlLgoKIyMjIEhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgeW91IGNhbiB0cnkKCioqX0FsbCBydWxlcyB0dXJuZWQgb2ZmXyoqCmBgYAouL3ZhY3V1bSBsaW50IC1yIHJ1bGVzZXRzL2V4YW1wbGVzL25vcnVsZXMtcnVsZXNldC55YW1sIDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPgpgYGAKCioqX09ubHkgcmVjb21tZW5kZWQgcnVsZXNfKioKYGBgCi4vdmFjdXVtIGxpbnQgLXIgcnVsZXNldHMvZXhhbXBsZXMvcmVjb21tZW5kZWQtcnVsZXNldC55YW1sIDx5b3VyLW9wZW5hcGktc3BlYy55YW1sPgpgYGAKCioqX0VuYWJsZSBzcGVjaWZpYyBydWxlcyBvbmx5XyoqCmBgYAouL3ZhY3V1bSBsaW50IC1yIHJ1bGVzZXRzL2V4YW1wbGVzL3NwZWNpZmljLXJ1bGVzZXQueWFtbCA8eW91ci1vcGVuYXBpLXNwZWMueWFtbD4KYGBgCgoqKl9DdXN0b20gcnVsZXNfKioKYGBgCi4vdmFjdXVtIGxpbnQgLXIgcnVsZXNldHMvZXhhbXBsZXMvY3VzdG9tLXJ1bGVzZXQueWFtbCA8eW91ci1vcGVuYXBpLXNwZWMueWFtbD4KYGBgCgoqKl9BbGwgcnVsZXMsIGFsbCBvZiB0aGVtISoqCmBgYAouL3ZhY3V1bSBsaW50IC1yIHJ1bGVzZXRzL2V4YW1wbGVzL2FsbC1ydWxlc2V0LnlhbWwgPHlvdXItb3BlbmFwaS1zcGVjLnlhbWw+CmBgYAoKLS0tCgojIyBDb25maWd1cmF0aW9uCgojIyMgRmlsZQpZb3UgY2FuIGNvbmZpZ3VyZSB2YWN1dW0gdXNpbmcgYSBjb25maWd1cmF0aW9uIGZpbGUgbmFtZWQgYHZhY3V1bS5jb25mLnlhbWxgCgpCeSBkZWZhdWx0LCB2YWN1dW0gc2VhcmNoZXMgZm9yIHRoaXMgZmlsZSBpbiB0aGUgZm9sbG93aW5nIGRpcmVjdG9yaWVzCjEuIFdvcmtpbmcgZGlyZWN0b3J5CjIuIGAkWERHX0NPTkZJR19IT01FYAozLiBgJHtIT01FfS8uY29uZmlnYAoKWW91IGNhbiBhbHNvIHNwZWNpZnkgYSBwYXRoIHRvIGEgZmlsZSB1c2luZyB0aGUgYC0tY29uZmlnYCBmbGFnCgpHbG9iYWwgZmxhZ3MgYXJlIGNvbmZpZ3VyZWQgYXMgdG9wIGxldmVsIG5vZGVzCmBgYHlhbWwKdGltZTogdHJ1ZQpiYXNlOiAnaHR0cDovL2V4YW1wbGUuY29tJwouLi4KYGBgCkNvbW1hbmQgc3BlY2lmaWMgZmxhZ3MgYXJlIGNvbmZpZ3VyZWQgdW5kZXIgYSBub2RlIHdpdGggdGhlIGNvbW1hbmRzIG5hbWUKYGBgeWFtbAouLi4KbGludDoKICBzaWxlbnQ6IHRydWUKICAuLi4KYGBgCgojIyMgRW52aXJvbm1lbnRhbCB2YXJpYWJsZXMKCllvdSBjYW4gY29uZmlndXJlIGdsb2JhbCB2YWN1dW0gZmxhZ3MgdXNpbmcgZW52aXJvbm1lbnRhbCB2YXJpYWJsZXMgaW4gdGhlIGZvcm0gb2Y6IGBWQUNVVU1fPGZsYWc+YAoKSWYgYSBmbGFnLCBoYXMgYSBgLWAgaW4gaXQsIHJlcGxhY2Ugd2l0aCBgX2AKCj4gTG9nbyBnb3BoZXIgaXMgbW9kaWZpZWQsIG9yaWdpbmFsbHkgZnJvbSBbZWdvbmVsYnJlXShodHRwczovL2dpdGh1Yi5jb20vZWdvbmVsYnJlL2dvcGhlcnMpCg== + readmeEtag: '"35d55b684918d18e07f5636ed8e299d0ea2d8aede1e4bc2f2e7d6dd1f83d5b8f"' + readmeLastModified: Wed, 13 Dec 2023 20:53:57 GMT repositoryId: 415667153 description: >- vacuum is the worlds fastest OpenAPI 3, OpenAPI 2 / Swagger linter and @@ -5818,17 +5818,17 @@ you can think. vacuum is compatible with Spectral rulesets and generates compatible reports. created: '2021-10-10T18:24:19Z' - updated: '2023-12-06T13:30:57Z' + updated: '2023-12-13T18:44:00Z' language: Go archived: false - stars: 325 + stars: 326 watchers: 5 forks: 25 owner: daveshanley logo: https://avatars.githubusercontent.com/u/187345?v=4 license: MIT - repoEtag: '"2a16d7cef9353cef3ce4fd36dd34e2746da044bda512e9813beac484da319e3d"' - repoLastModified: Wed, 06 Dec 2023 13:30:57 GMT + repoEtag: '"a3c43d862c873e0636800d46e9618b2397a933f261caa3249f8dae2d752c94fa"' + repoLastModified: Wed, 13 Dec 2023 18:44:00 GMT foundInMaster: true category: - Description Validators @@ -5886,17 +5886,17 @@ repositoryId: 161691324 description: Generate TypeScript types from OpenAPI 3 specs created: '2018-12-13T20:28:01Z' - updated: '2023-12-12T17:59:04Z' + updated: '2023-12-13T22:36:26Z' language: TypeScript archived: false - stars: 3919 + stars: 3922 watchers: 26 - forks: 336 + forks: 337 owner: drwpow logo: https://avatars.githubusercontent.com/u/1369770?v=4 license: MIT - repoEtag: '"11ee8af140f941ae53f49fe0395a87e4414e880c41a4025073a36b214a84c47f"' - repoLastModified: Tue, 12 Dec 2023 17:59:04 GMT + repoEtag: '"a5eabb6c1bc4269ad88c67d43ba4d6e7f94e5c2fd3b644108c96fa51579effe9"' + repoLastModified: Wed, 13 Dec 2023 22:36:26 GMT foundInMaster: true - source: - https://openapi.tools/ @@ -5915,17 +5915,17 @@ libopenapi is a fully featured, high performance OpenAPI 3.1, 3.0 and Swagger parser, library, validator and toolkit for golang applications. created: '2022-07-17T19:41:10Z' - updated: '2023-12-12T15:58:01Z' + updated: '2023-12-13T06:24:52Z' language: Go archived: false - stars: 214 + stars: 215 watchers: 4 forks: 33 owner: pb33f logo: https://avatars.githubusercontent.com/u/104016643?v=4 license: NOASSERTION - repoEtag: '"53ed1b53f4e0ac02f5d004515ccc77ffb937685814bac8744554fc65eb253c76"' - repoLastModified: Tue, 12 Dec 2023 15:58:01 GMT + repoEtag: '"1b5fdc0ff6e50b79c3b0cc82d87f4bbc843af452fe5c0458d3abeed6fadd7826"' + repoLastModified: Wed, 13 Dec 2023 06:24:52 GMT category: Parsers foundInMaster: true name: libopenapi @@ -6185,17 +6185,17 @@ Development - Collaboratively Design & Independently Deploy MicroServices & MicroFrontends. created: '2020-03-16T13:33:07Z' - updated: '2023-12-12T23:07:56Z' + updated: '2023-12-13T06:54:10Z' language: Kotlin archived: false - stars: 163 + stars: 164 watchers: 7 forks: 40 owner: znsio logo: https://avatars.githubusercontent.com/u/75619722?v=4 license: MIT - repoEtag: '"960cc91a719eec3d659d4852873ee445c01eeebd8ff6be7e0f8d5d277149042e"' - repoLastModified: Tue, 12 Dec 2023 23:07:56 GMT + repoEtag: '"c1300aeaef1180cbea9e30e01e01f8174b956a1c9c2a10b88c27f5a075b71a6c"' + repoLastModified: Wed, 13 Dec 2023 06:54:10 GMT foundInMaster: true - source: - https://openapi.tools/ @@ -6307,17 +6307,17 @@ repositoryId: 586543156 description: OpenAPI to TypeScript, React-Query, Zod, Zodios, Faker.js, MSW and Axios. created: '2023-01-08T14:15:23Z' - updated: '2023-12-11T11:37:01Z' + updated: '2023-12-13T20:18:13Z' language: TypeScript archived: false - stars: 266 + stars: 268 watchers: 5 - forks: 17 + forks: 19 owner: kubb-project logo: https://avatars.githubusercontent.com/u/122118236?v=4 license: MIT - repoEtag: '"e26bec46e00a6579bd53b894d0d13856d7bef14c4bd0bde8d393837a359321f4"' - repoLastModified: Mon, 11 Dec 2023 11:37:01 GMT + repoEtag: '"452280b7d06e9c4cb3227c7abc74441c0ecf89928233163bb376317cbba98208"' + repoLastModified: Wed, 13 Dec 2023 20:18:13 GMT foundInMaster: true - source: https://openapi.tools/ name: KrakenD API Gateway @@ -6382,7 +6382,7 @@ owner: gcatanese logo: https://avatars.githubusercontent.com/u/1771700?v=4 license: Apache-2.0 - repoEtag: '"88fb81aec4b416d507595cce83de81d1b0901cc9f24f304eb1e83aed6ed02bbb"' + repoEtag: '"81264a473cac955fe7ef6bad354e1c24e098c86dec95b338e6f1f04e93eb8e0a"' repoLastModified: Mon, 04 Dec 2023 02:15:27 GMT foundInMaster: true - source: https://openapi.tools/ @@ -6511,7 +6511,7 @@ owner: udamir logo: https://avatars.githubusercontent.com/u/29271460?v=4 license: MIT - repoEtag: '"e2a63f2bdb0083b8b6341c611abb7564dd1dd0f687cae02d51873354afff7829"' + repoEtag: '"2bbb64eb928eb92549299501bff5e422ee17ac605ae622b4158e3de8ab733d5d"' repoLastModified: Mon, 04 Dec 2023 20:40:02 GMT foundInMaster: true - source: https://openapi.tools/ @@ -6579,17 +6579,17 @@ repositoryId: 476820102 description: SDKs and Docs for your API created: '2022-04-01T17:56:54Z' - updated: '2023-12-12T18:58:32Z' + updated: '2023-12-13T14:53:35Z' language: TypeScript archived: false - stars: 1995 + stars: 1996 watchers: 10 forks: 84 owner: fern-api logo: https://avatars.githubusercontent.com/u/102944815?v=4 license: MIT - repoEtag: '"0edae4933efaa73f1af4b14ba4db2887cb7cee80304d64a9d236157623babb80"' - repoLastModified: Tue, 12 Dec 2023 18:58:32 GMT + repoEtag: '"6ff6c322e04e82b913a45a6990960e111463edaf57bcedb0be3249faac2f1c2c"' + repoLastModified: Wed, 13 Dec 2023 14:53:35 GMT foundInMaster: true sponsored: true testimonial: > @@ -6772,17 +6772,17 @@ FastAPI framework, high performance, easy to learn, fast to code, ready for production created: '2018-12-08T08:21:47Z' - updated: '2023-12-13T02:51:13Z' + updated: '2023-12-14T03:10:02Z' language: Python archived: false - stars: 65760 + stars: 65808 watchers: 646 - forks: 5558 + forks: 5559 owner: tiangolo logo: https://avatars.githubusercontent.com/u/1326112?v=4 license: MIT - repoEtag: '"cac6d287beda01f177f326919047c8d3fee3a7c4c1174554e702fc29c8889abe"' - repoLastModified: Wed, 13 Dec 2023 02:51:13 GMT + repoEtag: '"b5d9feb4b7df5ee4f486d3bf884049ab91cece7e8c045d0104dfbd3df3e084ab"' + repoLastModified: Thu, 14 Dec 2023 03:10:02 GMT foundInMaster: true id: 8e11fa45d6f090aa2ed68317cf5a7215 - source: @@ -6800,17 +6800,17 @@ Swagger UI is a collection of HTML, JavaScript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API. created: '2011-07-15T22:56:39Z' - updated: '2023-12-12T21:27:52Z' + updated: '2023-12-14T01:20:27Z' language: JavaScript archived: false - stars: 24873 + stars: 24879 watchers: 651 - forks: 8841 + forks: 8842 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 license: Apache-2.0 - repoEtag: '"48ec8d0eabd3c79b373937df39eb39bb38f075a4eda01ef82205a3ccdb4b30e2"' - repoLastModified: Tue, 12 Dec 2023 21:27:52 GMT + repoEtag: '"1c1293f46ebe2dd477cfbfbce69d91cb161d0d335338b42f697a1dbd36339e04"' + repoLastModified: Thu, 14 Dec 2023 01:20:27 GMT foundInMaster: true name: swagger-ui homepage: https://github.com/swagger-api/swagger-UI @@ -6843,17 +6843,17 @@ repositoryId: 45250726 description: 📘 OpenAPI/Swagger-generated API Reference Documentation created: '2015-10-30T12:53:02Z' - updated: '2023-12-13T01:52:55Z' + updated: '2023-12-13T19:13:35Z' language: TypeScript archived: false - stars: 21587 - watchers: 287 - forks: 2262 + stars: 21593 + watchers: 288 + forks: 2261 owner: Redocly logo: https://avatars.githubusercontent.com/u/32099856?v=4 license: MIT - repoEtag: '"a1d9852a01b903d7425110470cd77e565032802a670098ccaa805f5f1374a2a5"' - repoLastModified: Wed, 13 Dec 2023 01:52:55 GMT + repoEtag: '"beb2115e85425fcdd6101918ae2da374992c0b6717a3d46ab53dc5faaa7dfd03"' + repoLastModified: Wed, 13 Dec 2023 19:13:35 GMT foundInMaster: true v3_1: true id: 2725d6db6977c1dd12ceaf9701787e07 @@ -6872,17 +6872,17 @@ Full stack, modern web application generator. Using FastAPI, PostgreSQL as database, Docker, automatic HTTPS and more. created: '2019-02-23T15:08:34Z' - updated: '2023-12-13T02:42:49Z' + updated: '2023-12-14T02:55:27Z' language: Python archived: false - stars: 13803 + stars: 13819 watchers: 217 - forks: 2485 + forks: 2487 owner: tiangolo logo: https://avatars.githubusercontent.com/u/1326112?v=4 license: MIT - repoEtag: '"23aaddd173774cd648e60aeccbae8c4e3f4e83b262cefd1880f4bf45b08b4148"' - repoLastModified: Wed, 13 Dec 2023 02:42:49 GMT + repoEtag: '"2c92876ea427c87c42f8204f1a9e4db03f63498828304f38e962b2d18ae3c176"' + repoLastModified: Thu, 14 Dec 2023 02:55:27 GMT foundInMaster: true category: Server Implementations id: fd87348d3e68e8838b35571b2a88b798 @@ -6904,11 +6904,11 @@ archived: false stars: 7286 watchers: 310 - forks: 2163 + forks: 2164 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 license: Apache-2.0 - repoEtag: '"ca576360ad38738e4f4947193eeb7fe4d1433e2c703646f0b1dfa46092a2ff34"' + repoEtag: '"666bc759454adf601fc4b13bad34fd4a32b1539921009c71e5ba204eec40764a"' repoLastModified: Mon, 11 Dec 2023 06:17:01 GMT foundInMaster: true category: Code Generators @@ -6926,17 +6926,17 @@ Mockoon is the easiest and quickest way to run mock APIs locally. No remote deployment, no account required, open source. created: '2017-07-17T13:19:16Z' - updated: '2023-12-12T09:53:18Z' + updated: '2023-12-13T23:59:44Z' language: TypeScript archived: false - stars: 5556 + stars: 5559 watchers: 59 forks: 313 owner: mockoon logo: https://avatars.githubusercontent.com/u/49429147?v=4 license: NOASSERTION - repoEtag: '"4fafe12d9f7df89c3b1dfb9478a47e8dec3d8e0639f77d90e91f072429caf9b0"' - repoLastModified: Tue, 12 Dec 2023 09:53:18 GMT + repoEtag: '"6d8eee4b3d0dbc05cd046f7e018bd2a679f2b31a4449dac83841328c6a2a4996"' + repoLastModified: Wed, 13 Dec 2023 23:59:44 GMT foundInMaster: true category: Testing id: 8728dfca2c1908dbecdcddd31597fad4 @@ -6979,17 +6979,17 @@ repositoryId: 709571808 description: Chrome extension that generates API specs for any app or website created: '2023-10-25T00:36:06Z' - updated: '2023-12-13T01:02:49Z' + updated: '2023-12-13T17:26:48Z' language: TypeScript archived: false - stars: 3546 + stars: 3552 watchers: 18 forks: 57 owner: AndrewWalsh logo: https://avatars.githubusercontent.com/u/15863952?v=4 license: MIT - repoEtag: '"4996b658ac198367a997ffdc570ee4d4641b6715d2524f4d6c34ccfe62b128ab"' - repoLastModified: Wed, 13 Dec 2023 01:02:49 GMT + repoEtag: '"0b7895a7a318b01f3359b0eed6a0fe62c22c9a1568f58f295ab2e5325f1aef68"' + repoLastModified: Wed, 13 Dec 2023 17:26:48 GMT category: Server Implementations foundInMaster: true v3_1: true @@ -7006,17 +7006,17 @@ 🌐 Wikipedia for Web APIs. Directory of REST API definitions in OpenAPI 2.0/3.x format created: '2015-02-22T19:58:12Z' - updated: '2023-12-13T00:51:00Z' + updated: '2023-12-13T23:35:16Z' language: null archived: false - stars: 3465 + stars: 3468 watchers: 111 - forks: 571 + forks: 570 owner: APIs-guru logo: https://avatars.githubusercontent.com/u/10975548?v=4 license: CC0-1.0 - repoEtag: '"818e370c4e2d491f943ec94480364a250bf385b4fd3f3a6f98329d30a845f6dd"' - repoLastModified: Wed, 13 Dec 2023 00:51:00 GMT + repoEtag: '"4a30da53b6aa53858b2dcd256cddb54810fe3f3ed6ee98b830b716c15005473d"' + repoLastModified: Wed, 13 Dec 2023 23:35:16 GMT foundInMaster: true category: SDK id: 667f2aef78d9d19418fbd6c0a7835abb @@ -7040,17 +7040,17 @@ repositoryId: 196475719 description: Library for OpenAPI 3 with spring-boot created: '2019-07-11T23:08:20Z' - updated: '2023-12-12T02:41:31Z' + updated: '2023-12-13T11:09:46Z' language: Java archived: false - stars: 2923 + stars: 2925 watchers: 41 forks: 434 owner: springdoc logo: https://avatars.githubusercontent.com/u/52804136?v=4 license: Apache-2.0 - repoEtag: '"4eba9b59e5217a07bd88e94e6768fbde37b54f4e2f70e8ca1b1989d4a0d2357e"' - repoLastModified: Tue, 12 Dec 2023 02:41:31 GMT + repoEtag: '"0d63ace29c1ea083e7038ccf1f13d44fc5fcdeab7c5702046150fe18a81cd2b9"' + repoLastModified: Wed, 13 Dec 2023 11:09:46 GMT foundInMaster: true id: 901410cec129651fcf7374c79f824f27 - source: @@ -7097,17 +7097,17 @@ web applications in Python with performance auto-tuning. Optionally with Alpine Linux. created: '2019-01-04T17:33:29Z' - updated: '2023-12-11T22:48:55Z' + updated: '2023-12-14T00:08:51Z' language: Python archived: false - stars: 2415 + stars: 2419 watchers: 27 - forks: 313 + forks: 314 owner: tiangolo logo: https://avatars.githubusercontent.com/u/1326112?v=4 license: MIT - repoEtag: '"f9059bed8b01075cdf0e3aa99cf0f86dd6c1f88db5fa85b04209e52bf172bc4b"' - repoLastModified: Mon, 11 Dec 2023 22:48:55 GMT + repoEtag: '"8aa1b7c4ba8e87bdd50205a2651e7d645f0f8c398165b7c6139bb93d5c9be889"' + repoLastModified: Thu, 14 Dec 2023 00:08:51 GMT foundInMaster: true category: Server Implementations id: d0f3fc0bd35fcadacc8ed2c531780739 @@ -7131,17 +7131,17 @@ repositoryId: 203157084 description: 'Automate your API Testing: catch crashes, validate specs, and save time' created: '2019-08-19T11:13:01Z' - updated: '2023-12-12T19:02:19Z' + updated: '2023-12-14T02:13:06Z' language: Python archived: false - stars: 1938 + stars: 1940 watchers: 19 - forks: 143 + forks: 144 owner: schemathesis logo: https://avatars.githubusercontent.com/u/70383271?v=4 license: MIT - repoEtag: '"9af9fc49fccf1fa210c470035e3f7193797989a80a52b8d34760f265a3c8fecc"' - repoLastModified: Tue, 12 Dec 2023 19:02:19 GMT + repoEtag: '"cc8d7798738a425132c8672fddd0e7d17aea3fa42e2a33e160ec1179d07f6bc9"' + repoLastModified: Thu, 14 Dec 2023 02:13:06 GMT foundInMaster: true id: f4032fb371a703acffa691c0f1239d45 oldLocations: @@ -7157,17 +7157,17 @@ repositoryId: 244234763 description: Sane and flexible OpenAPI 3 schema generation for Django REST framework. created: '2020-03-01T22:36:54Z' - updated: '2023-12-12T14:21:49Z' + updated: '2023-12-13T14:53:11Z' language: Python archived: false - stars: 1919 + stars: 1920 watchers: 13 forks: 227 owner: tfranzel logo: https://avatars.githubusercontent.com/u/13507857?v=4 license: BSD-3-Clause - repoEtag: '"5efabcacd3cc7b48f4418bda2222f39f384807e1dded0a52b4ca4e7d7256df1f"' - repoLastModified: Tue, 12 Dec 2023 14:21:49 GMT + repoEtag: '"351c5f6b653fdcd39c00d70ac8f68d339faaec96b3b885b33f352dabaed67024"' + repoLastModified: Wed, 13 Dec 2023 14:53:11 GMT foundInMaster: true category: Server Implementations id: 520f5c66c3e42a7b3fbface4f156c1dc @@ -7184,17 +7184,17 @@ A compiler for APIs described by the OpenAPI Specification with plugins for code generation and other API support tasks. created: '2016-11-15T19:21:53Z' - updated: '2023-12-12T06:28:36Z' + updated: '2023-12-13T09:35:14Z' language: Go archived: false - stars: 1894 + stars: 1895 watchers: 37 forks: 232 owner: google logo: https://avatars.githubusercontent.com/u/1342004?v=4 license: Apache-2.0 - repoEtag: '"3a6b91513ec480d8a11772859bfeae2b8904ad22a01fbcb6324853dc47e85abb"' - repoLastModified: Tue, 12 Dec 2023 06:28:36 GMT + repoEtag: '"07a2c1b8bfbdd185a4cdf8f4f5487dd159e09a8c8a797e4d90ee5cd02bebf72d"' + repoLastModified: Wed, 13 Dec 2023 09:35:14 GMT foundInMaster: true category: Converters id: 46e070512676eb0fd196ee199e6a0b34 @@ -7213,17 +7213,17 @@ Simple, Fast, Code first and Compile time generated OpenAPI documentation for Rust created: '2021-09-30T22:00:31Z' - updated: '2023-12-12T14:14:43Z' + updated: '2023-12-13T20:48:37Z' language: Rust archived: false - stars: 1540 + stars: 1541 watchers: 8 forks: 126 owner: juhaku logo: https://avatars.githubusercontent.com/u/26358664?v=4 license: Apache-2.0 - repoEtag: '"cdd80ac5af2b7380ea97ced60a4c89942b668655f363b7d494af3569f9067470"' - repoLastModified: Tue, 12 Dec 2023 14:14:43 GMT + repoEtag: '"ab32a117cdb7e40409326bf60fd8276c2428ae87d0f99c2d38377d825e1aa9f8"' + repoLastModified: Wed, 13 Dec 2023 20:48:37 GMT foundInMaster: true category: Parsers id: 14269a89115b3be71493769fca4d995e @@ -7233,25 +7233,25 @@ id: a6f4189b9c0c83612075c0752859ff29 repositoryMetadata: base64Readme: >- - PHAgYWxpZ249ImNlbnRlciI+CiAgPGEgaHJlZj0iaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy8iPgogICAgPGltZyBzcmM9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9qY3Jpc3QvbXNnc3BlYy9tYWluL2RvY3Mvc291cmNlL19zdGF0aWMvbXNnc3BlYy1sb2dvLWxpZ2h0LnN2ZyIgd2lkdGg9IjM1JSIgYWx0PSJtc2dzcGVjIiAvPgogIDwvYT4KPC9wPgoKPHAgYWxpZ249ImNlbnRlciI+CiAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2pjcmlzdC9tc2dzcGVjL2FjdGlvbnMvd29ya2Zsb3dzL2NpLnltbCI+CiAgICA8aW1nIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL2pjcmlzdC9tc2dzcGVjL2FjdGlvbnMvd29ya2Zsb3dzL2NpLnltbC9iYWRnZS5zdmciPgogIDwvYT4KICA8YSBocmVmPSJodHRwczovL2pjcmlzdGhhcmlmLmNvbS9tc2dzcGVjLyI+CiAgICA8aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9kb2NzLWxhdGVzdC1ibHVlLnN2ZyI+CiAgPC9hPgogIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9qY3Jpc3QvbXNnc3BlYy9ibG9iL21haW4vTElDRU5TRSI+CiAgICA8aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvbGljZW5zZS9qY3Jpc3QvbXNnc3BlYy5zdmciPgogIDwvYT4KICA8YSBocmVmPSJodHRwczovL3B5cGkub3JnL3Byb2plY3QvbXNnc3BlYy8iPgogICAgPGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcHlwaS92L21zZ3NwZWMuc3ZnIj4KICA8L2E+CiAgPGEgaHJlZj0iaHR0cHM6Ly9hbmFjb25kYS5vcmcvY29uZGEtZm9yZ2UvbXNnc3BlYyI+CiAgICA8aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9jb25kYS92bi9jb25kYS1mb3JnZS9tc2dzcGVjLnN2ZyI+CiAgPC9hPgogIDxhIGhyZWY9Imh0dHBzOi8vY29kZWNvdi5pby9naC9qY3Jpc3QvbXNnc3BlYyI+CiAgICA8aW1nIHNyYz0iaHR0cHM6Ly9jb2RlY292LmlvL2doL2pjcmlzdC9tc2dzcGVjL2JyYW5jaC9tYWluL2dyYXBoL2JhZGdlLnN2ZyI+CiAgPC9hPgo8L3A+CgoKYG1zZ3NwZWNgIGlzIGEgKmZhc3QqIHNlcmlhbGl6YXRpb24gYW5kIHZhbGlkYXRpb24gbGlicmFyeSwgd2l0aCBidWlsdGluCnN1cHBvcnQgZm9yIFtKU09OXShodHRwczovL2pzb24ub3JnKSwgW01lc3NhZ2VQYWNrXShodHRwczovL21zZ3BhY2sub3JnKSwKW1lBTUxdKGh0dHBzOi8veWFtbC5vcmcpLCBhbmQgW1RPTUxdKGh0dHBzOi8vdG9tbC5pbykuIEl0IGZlYXR1cmVzOgoKLSDwn5qAICoqSGlnaCBwZXJmb3JtYW5jZSBlbmNvZGVycy9kZWNvZGVycyoqIGZvciBjb21tb24gcHJvdG9jb2xzLiBUaGUgSlNPTiBhbmQKICBNZXNzYWdlUGFjayBpbXBsZW1lbnRhdGlvbnMgcmVndWxhcmx5CiAgW2JlbmNobWFya10oaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy9iZW5jaG1hcmtzLmh0bWwpIGFzIHRoZSBmYXN0ZXN0CiAgb3B0aW9ucyBmb3IgUHl0aG9uLgoKLSDwn46JICoqU3VwcG9ydCBmb3IgYSB3aWRlIHZhcmlldHkgb2YgUHl0aG9uIHR5cGVzKiouIEFkZGl0aW9uYWwgdHlwZXMgbWF5IGJlCiAgc3VwcG9ydGVkIHRocm91Z2gKICBbZXh0ZW5zaW9uc10oaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy9leHRlbmRpbmcuaHRtbCkuCgotIPCflI0gKipaZXJvLWNvc3Qgc2NoZW1hIHZhbGlkYXRpb24qKiB1c2luZyBmYW1pbGlhciBQeXRob24gdHlwZSBhbm5vdGF0aW9ucy4gSW4KICBbYmVuY2htYXJrc10oaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy9iZW5jaG1hcmtzLmh0bWwpIGBtc2dzcGVjYAogIGRlY29kZXMgKmFuZCogdmFsaWRhdGVzIEpTT04gfjJ4IGZhc3RlciB0aGFuCiAgW29yanNvbl0oaHR0cHM6Ly9naXRodWIuY29tL2lqbC9vcmpzb24pIGNhbiBkZWNvZGUgaXQgYWxvbmUuCgotIOKcqCAqKkEgc3BlZWR5IFN0cnVjdCB0eXBlKiogZm9yIHJlcHJlc2VudGluZyBzdHJ1Y3R1cmVkIGRhdGEuIElmIHlvdSBhbHJlYWR5CiAgdXNlIFtkYXRhY2xhc3Nlc10oaHR0cHM6Ly9kb2NzLnB5dGhvbi5vcmcvMy9saWJyYXJ5L2RhdGFjbGFzc2VzLmh0bWwpIG9yCiAgW2F0dHJzXShodHRwczovL3d3dy5hdHRycy5vcmcpLAogIFtzdHJ1Y3RzXShodHRwczovL2pjcmlzdGhhcmlmLmNvbS9tc2dzcGVjL3N0cnVjdHMuaHRtbCkgc2hvdWxkIGZlZWwgZmFtaWxpYXIuCiAgSG93ZXZlciwgdGhleSdyZQogIFsxMC0xMDB4IGZhc3Rlcl0oaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy9iZW5jaG1hcmtzLmh0bWwjYmVuY2htYXJrLXN0cnVjdHM+KQogIGZvciBjb21tb24gb3BlcmF0aW9ucy4KCkFsbCBvZiB0aGlzIGlzIGluY2x1ZGVkIGluIGEKW2xpZ2h0d2VpZ2h0IGxpYnJhcnldKGh0dHBzOi8vamNyaXN0aGFyaWYuY29tL21zZ3NwZWMvYmVuY2htYXJrcy5odG1sI2JlbmNobWFyay1saWJyYXJ5LXNpemUpCndpdGggbm8gcmVxdWlyZWQgZGVwZW5kZW5jaWVzLgoKLS0tCgpgbXNnc3BlY2AgbWF5IGJlIHVzZWQgZm9yIHNlcmlhbGl6YXRpb24gYWxvbmUsIGFzIGEgZmFzdGVyIEpTT04gb3IKTWVzc2FnZVBhY2sgbGlicmFyeS4gRm9yIHRoZSBncmVhdGVzdCBiZW5lZml0IHRob3VnaCwgd2UgcmVjb21tZW5kIHVzaW5nCmBtc2dzcGVjYCB0byBoYW5kbGUgdGhlIGZ1bGwgc2VyaWFsaXphdGlvbiAmIHZhbGlkYXRpb24gd29ya2Zsb3c6CgoqKkRlZmluZSoqIHlvdXIgbWVzc2FnZSBzY2hlbWFzIHVzaW5nIHN0YW5kYXJkIFB5dGhvbiB0eXBlIGFubm90YXRpb25zLgoKYGBgcHl0aG9uCj4+PiBpbXBvcnQgbXNnc3BlYwoKPj4+IGNsYXNzIFVzZXIobXNnc3BlYy5TdHJ1Y3QpOgouLi4gICAgICIiIkEgbmV3IHR5cGUgZGVzY3JpYmluZyBhIFVzZXIiIiIKLi4uICAgICBuYW1lOiBzdHIKLi4uICAgICBncm91cHM6IHNldFtzdHJdID0gc2V0KCkKLi4uICAgICBlbWFpbDogc3RyIHwgTm9uZSA9IE5vbmUKYGBgCgoqKkVuY29kZSoqIG1lc3NhZ2VzIGFzIEpTT04sIG9yIG9uZSBvZiB0aGUgbWFueSBvdGhlciBzdXBwb3J0ZWQgcHJvdG9jb2xzLgoKYGBgcHl0aG9uCj4+PiBhbGljZSA9IFVzZXIoImFsaWNlIiwgZ3JvdXBzPXsiYWRtaW4iLCAiZW5naW5lZXJpbmcifSkKCj4+PiBhbGljZQpVc2VyKG5hbWU9J2FsaWNlJywgZ3JvdXBzPXsiYWRtaW4iLCAiZW5naW5lZXJpbmcifSwgZW1haWw9Tm9uZSkKCj4+PiBtc2cgPSBtc2dzcGVjLmpzb24uZW5jb2RlKGFsaWNlKQoKPj4+IG1zZwpiJ3sibmFtZSI6ImFsaWNlIiwiZ3JvdXBzIjpbImFkbWluIiwiZW5naW5lZXJpbmciXSwiZW1haWwiOm51bGx9JwpgYGAKCioqRGVjb2RlKiogbWVzc2FnZXMgYmFjayBpbnRvIFB5dGhvbiBvYmplY3RzLCB3aXRoIG9wdGlvbmFsIHNjaGVtYSB2YWxpZGF0aW9uLgoKYGBgcHl0aG9uCj4+PiBtc2dzcGVjLmpzb24uZGVjb2RlKG1zZywgdHlwZT1Vc2VyKQpVc2VyKG5hbWU9J2FsaWNlJywgZ3JvdXBzPXsiYWRtaW4iLCAiZW5naW5lZXJpbmcifSwgZW1haWw9Tm9uZSkKCj4+PiBtc2dzcGVjLmpzb24uZGVjb2RlKGIneyJuYW1lIjoiYm9iIiwiZ3JvdXBzIjpbMTIzXX0nLCB0eXBlPVVzZXIpClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgptc2dzcGVjLlZhbGlkYXRpb25FcnJvcjogRXhwZWN0ZWQgYHN0cmAsIGdvdCBgaW50YCAtIGF0IGAkLmdyb3Vwc1swXWAKYGBgCgpgbXNnc3BlY2AgaXMgZGVzaWduZWQgdG8gYmUgYXMgcGVyZm9ybWFudCBhcyBwb3NzaWJsZSwgd2hpbGUgcmV0YWluaW5nIHNvbWUgb2YKdGhlIG5pY2l0aWVzIG9mIHZhbGlkYXRpb24gbGlicmFyaWVzIGxpa2UKW3B5ZGFudGljXShodHRwczovL3B5ZGFudGljLWRvY3MuaGVscG1hbnVhbC5pby8pLiBGb3Igc3VwcG9ydGVkIHR5cGVzLAplbmNvZGluZy9kZWNvZGluZyBhIG1lc3NhZ2Ugd2l0aCBgbXNnc3BlY2AgY2FuIGJlClt+MTAtODB4IGZhc3RlciB0aGFuIGFsdGVybmF0aXZlIGxpYnJhcmllc10oaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy9iZW5jaG1hcmtzLmh0bWwpLgoKPHAgYWxpZ249ImNlbnRlciI+CiAgPGEgaHJlZj0iaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy9iZW5jaG1hcmtzLmh0bWwiPgogICAgPGltZyBzcmM9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9qY3Jpc3QvbXNnc3BlYy9tYWluL2RvY3Mvc291cmNlL19zdGF0aWMvYmVuY2gtdmFsaWRhdGlvbi5zdmciPgogIDwvYT4KPC9wPgoKU2VlIFt0aGUgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy8pIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKCiMjIExJQ0VOU0UKCk5ldyBCU0QuIFNlZSB0aGUKW0xpY2Vuc2UgRmlsZV0oaHR0cHM6Ly9naXRodWIuY29tL2pjcmlzdC9tc2dzcGVjL2Jsb2IvbWFpbi9MSUNFTlNFKS4K - readmeEtag: '"7eacc2f678f615b5adb897941ed5a69fcd05e40cb36d8a4cbc67108516c421df"' - readmeLastModified: Tue, 17 Oct 2023 15:28:04 GMT + PHAgYWxpZ249ImNlbnRlciI+CiAgPGEgaHJlZj0iaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy8iPgogICAgPGltZyBzcmM9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9qY3Jpc3QvbXNnc3BlYy9tYWluL2RvY3Mvc291cmNlL19zdGF0aWMvbXNnc3BlYy1sb2dvLWxpZ2h0LnN2ZyIgd2lkdGg9IjM1JSIgYWx0PSJtc2dzcGVjIiAvPgogIDwvYT4KPC9wPgoKPHAgYWxpZ249ImNlbnRlciI+CiAgPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2pjcmlzdC9tc2dzcGVjL2FjdGlvbnMvd29ya2Zsb3dzL2NpLnltbCI+CiAgICA8aW1nIHNyYz0iaHR0cHM6Ly9naXRodWIuY29tL2pjcmlzdC9tc2dzcGVjL2FjdGlvbnMvd29ya2Zsb3dzL2NpLnltbC9iYWRnZS5zdmciPgogIDwvYT4KICA8YSBocmVmPSJodHRwczovL2pjcmlzdGhhcmlmLmNvbS9tc2dzcGVjLyI+CiAgICA8aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9kb2NzLWxhdGVzdC1ibHVlLnN2ZyI+CiAgPC9hPgogIDxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9qY3Jpc3QvbXNnc3BlYy9ibG9iL21haW4vTElDRU5TRSI+CiAgICA8aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvbGljZW5zZS9qY3Jpc3QvbXNnc3BlYy5zdmciPgogIDwvYT4KICA8YSBocmVmPSJodHRwczovL3B5cGkub3JnL3Byb2plY3QvbXNnc3BlYy8iPgogICAgPGltZyBzcmM9Imh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vcHlwaS92L21zZ3NwZWMuc3ZnIj4KICA8L2E+CiAgPGEgaHJlZj0iaHR0cHM6Ly9hbmFjb25kYS5vcmcvY29uZGEtZm9yZ2UvbXNnc3BlYyI+CiAgICA8aW1nIHNyYz0iaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9jb25kYS92bi9jb25kYS1mb3JnZS9tc2dzcGVjLnN2ZyI+CiAgPC9hPgogIDxhIGhyZWY9Imh0dHBzOi8vY29kZWNvdi5pby9naC9qY3Jpc3QvbXNnc3BlYyI+CiAgICA8aW1nIHNyYz0iaHR0cHM6Ly9jb2RlY292LmlvL2doL2pjcmlzdC9tc2dzcGVjL2JyYW5jaC9tYWluL2dyYXBoL2JhZGdlLnN2ZyI+CiAgPC9hPgo8L3A+CgoKYG1zZ3NwZWNgIGlzIGEgKmZhc3QqIHNlcmlhbGl6YXRpb24gYW5kIHZhbGlkYXRpb24gbGlicmFyeSwgd2l0aCBidWlsdGluCnN1cHBvcnQgZm9yIFtKU09OXShodHRwczovL2pzb24ub3JnKSwgW01lc3NhZ2VQYWNrXShodHRwczovL21zZ3BhY2sub3JnKSwKW1lBTUxdKGh0dHBzOi8veWFtbC5vcmcpLCBhbmQgW1RPTUxdKGh0dHBzOi8vdG9tbC5pbykuIEl0IGZlYXR1cmVzOgoKLSDwn5qAICoqSGlnaCBwZXJmb3JtYW5jZSBlbmNvZGVycy9kZWNvZGVycyoqIGZvciBjb21tb24gcHJvdG9jb2xzLiBUaGUgSlNPTiBhbmQKICBNZXNzYWdlUGFjayBpbXBsZW1lbnRhdGlvbnMgcmVndWxhcmx5CiAgW2JlbmNobWFya10oaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy9iZW5jaG1hcmtzLmh0bWwpIGFzIHRoZSBmYXN0ZXN0CiAgb3B0aW9ucyBmb3IgUHl0aG9uLgoKLSDwn46JICoqU3VwcG9ydCBmb3IgYSB3aWRlIHZhcmlldHkgb2YgUHl0aG9uIHR5cGVzKiouIEFkZGl0aW9uYWwgdHlwZXMgbWF5IGJlCiAgc3VwcG9ydGVkIHRocm91Z2gKICBbZXh0ZW5zaW9uc10oaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy9leHRlbmRpbmcuaHRtbCkuCgotIPCflI0gKipaZXJvLWNvc3Qgc2NoZW1hIHZhbGlkYXRpb24qKiB1c2luZyBmYW1pbGlhciBQeXRob24gdHlwZSBhbm5vdGF0aW9ucy4gSW4KICBbYmVuY2htYXJrc10oaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy9iZW5jaG1hcmtzLmh0bWwpIGBtc2dzcGVjYAogIGRlY29kZXMgKmFuZCogdmFsaWRhdGVzIEpTT04gZmFzdGVyIHRoYW4KICBbb3Jqc29uXShodHRwczovL2dpdGh1Yi5jb20vaWpsL29yanNvbikgY2FuIGRlY29kZSBpdCBhbG9uZS4KCi0g4pyoICoqQSBzcGVlZHkgU3RydWN0IHR5cGUqKiBmb3IgcmVwcmVzZW50aW5nIHN0cnVjdHVyZWQgZGF0YS4gSWYgeW91IGFscmVhZHkKICB1c2UgW2RhdGFjbGFzc2VzXShodHRwczovL2RvY3MucHl0aG9uLm9yZy8zL2xpYnJhcnkvZGF0YWNsYXNzZXMuaHRtbCkgb3IKICBbYXR0cnNdKGh0dHBzOi8vd3d3LmF0dHJzLm9yZyksCiAgW3N0cnVjdHNdKGh0dHBzOi8vamNyaXN0aGFyaWYuY29tL21zZ3NwZWMvc3RydWN0cy5odG1sKSBzaG91bGQgZmVlbCBmYW1pbGlhci4KICBIb3dldmVyLCB0aGV5J3JlCiAgWzUtNjB4IGZhc3Rlcl0oaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy9iZW5jaG1hcmtzLmh0bWwjYmVuY2htYXJrLXN0cnVjdHM+KQogIGZvciBjb21tb24gb3BlcmF0aW9ucy4KCkFsbCBvZiB0aGlzIGlzIGluY2x1ZGVkIGluIGEKW2xpZ2h0d2VpZ2h0IGxpYnJhcnldKGh0dHBzOi8vamNyaXN0aGFyaWYuY29tL21zZ3NwZWMvYmVuY2htYXJrcy5odG1sI2JlbmNobWFyay1saWJyYXJ5LXNpemUpCndpdGggbm8gcmVxdWlyZWQgZGVwZW5kZW5jaWVzLgoKLS0tCgpgbXNnc3BlY2AgbWF5IGJlIHVzZWQgZm9yIHNlcmlhbGl6YXRpb24gYWxvbmUsIGFzIGEgZmFzdGVyIEpTT04gb3IKTWVzc2FnZVBhY2sgbGlicmFyeS4gRm9yIHRoZSBncmVhdGVzdCBiZW5lZml0IHRob3VnaCwgd2UgcmVjb21tZW5kIHVzaW5nCmBtc2dzcGVjYCB0byBoYW5kbGUgdGhlIGZ1bGwgc2VyaWFsaXphdGlvbiAmIHZhbGlkYXRpb24gd29ya2Zsb3c6CgoqKkRlZmluZSoqIHlvdXIgbWVzc2FnZSBzY2hlbWFzIHVzaW5nIHN0YW5kYXJkIFB5dGhvbiB0eXBlIGFubm90YXRpb25zLgoKYGBgcHl0aG9uCj4+PiBpbXBvcnQgbXNnc3BlYwoKPj4+IGNsYXNzIFVzZXIobXNnc3BlYy5TdHJ1Y3QpOgouLi4gICAgICIiIkEgbmV3IHR5cGUgZGVzY3JpYmluZyBhIFVzZXIiIiIKLi4uICAgICBuYW1lOiBzdHIKLi4uICAgICBncm91cHM6IHNldFtzdHJdID0gc2V0KCkKLi4uICAgICBlbWFpbDogc3RyIHwgTm9uZSA9IE5vbmUKYGBgCgoqKkVuY29kZSoqIG1lc3NhZ2VzIGFzIEpTT04sIG9yIG9uZSBvZiB0aGUgbWFueSBvdGhlciBzdXBwb3J0ZWQgcHJvdG9jb2xzLgoKYGBgcHl0aG9uCj4+PiBhbGljZSA9IFVzZXIoImFsaWNlIiwgZ3JvdXBzPXsiYWRtaW4iLCAiZW5naW5lZXJpbmcifSkKCj4+PiBhbGljZQpVc2VyKG5hbWU9J2FsaWNlJywgZ3JvdXBzPXsiYWRtaW4iLCAiZW5naW5lZXJpbmcifSwgZW1haWw9Tm9uZSkKCj4+PiBtc2cgPSBtc2dzcGVjLmpzb24uZW5jb2RlKGFsaWNlKQoKPj4+IG1zZwpiJ3sibmFtZSI6ImFsaWNlIiwiZ3JvdXBzIjpbImFkbWluIiwiZW5naW5lZXJpbmciXSwiZW1haWwiOm51bGx9JwpgYGAKCioqRGVjb2RlKiogbWVzc2FnZXMgYmFjayBpbnRvIFB5dGhvbiBvYmplY3RzLCB3aXRoIG9wdGlvbmFsIHNjaGVtYSB2YWxpZGF0aW9uLgoKYGBgcHl0aG9uCj4+PiBtc2dzcGVjLmpzb24uZGVjb2RlKG1zZywgdHlwZT1Vc2VyKQpVc2VyKG5hbWU9J2FsaWNlJywgZ3JvdXBzPXsiYWRtaW4iLCAiZW5naW5lZXJpbmcifSwgZW1haWw9Tm9uZSkKCj4+PiBtc2dzcGVjLmpzb24uZGVjb2RlKGIneyJuYW1lIjoiYm9iIiwiZ3JvdXBzIjpbMTIzXX0nLCB0eXBlPVVzZXIpClRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKICBGaWxlICI8c3RkaW4+IiwgbGluZSAxLCBpbiA8bW9kdWxlPgptc2dzcGVjLlZhbGlkYXRpb25FcnJvcjogRXhwZWN0ZWQgYHN0cmAsIGdvdCBgaW50YCAtIGF0IGAkLmdyb3Vwc1swXWAKYGBgCgpgbXNnc3BlY2AgaXMgZGVzaWduZWQgdG8gYmUgYXMgcGVyZm9ybWFudCBhcyBwb3NzaWJsZSwgd2hpbGUgcmV0YWluaW5nIHNvbWUgb2YKdGhlIG5pY2l0aWVzIG9mIHZhbGlkYXRpb24gbGlicmFyaWVzIGxpa2UKW3B5ZGFudGljXShodHRwczovL3B5ZGFudGljLWRvY3MuaGVscG1hbnVhbC5pby8pLiBGb3Igc3VwcG9ydGVkIHR5cGVzLAplbmNvZGluZy9kZWNvZGluZyBhIG1lc3NhZ2Ugd2l0aCBgbXNnc3BlY2AgY2FuIGJlClt+MTAtODB4IGZhc3RlciB0aGFuIGFsdGVybmF0aXZlIGxpYnJhcmllc10oaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy9iZW5jaG1hcmtzLmh0bWwpLgoKPHAgYWxpZ249ImNlbnRlciI+CiAgPGEgaHJlZj0iaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy9iZW5jaG1hcmtzLmh0bWwiPgogICAgPGltZyBzcmM9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9qY3Jpc3QvbXNnc3BlYy9tYWluL2RvY3Mvc291cmNlL19zdGF0aWMvYmVuY2gtdmFsaWRhdGlvbi5zdmciPgogIDwvYT4KPC9wPgoKU2VlIFt0aGUgZG9jdW1lbnRhdGlvbl0oaHR0cHM6Ly9qY3Jpc3RoYXJpZi5jb20vbXNnc3BlYy8pIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKCiMjIExJQ0VOU0UKCk5ldyBCU0QuIFNlZSB0aGUKW0xpY2Vuc2UgRmlsZV0oaHR0cHM6Ly9naXRodWIuY29tL2pjcmlzdC9tc2dzcGVjL2Jsb2IvbWFpbi9MSUNFTlNFKS4K + readmeEtag: '"594cad1ada391a38ed046d70791c26bfb23a2c62bf39dc506e0cb9a9fed3e68c"' + readmeLastModified: Wed, 13 Dec 2023 04:19:51 GMT repositoryId: 332952543 description: >- A fast serialization and validation library, with builtin support for JSON, MessagePack, YAML, and TOML created: '2021-01-26T02:53:57Z' - updated: '2023-12-12T22:07:50Z' + updated: '2023-12-13T14:22:03Z' language: Python archived: false - stars: 1478 + stars: 1482 watchers: 14 forks: 46 owner: jcrist logo: https://avatars.githubusercontent.com/u/2783717?v=4 license: BSD-3-Clause - repoEtag: '"cb0fc06afbd459355774f416601dc0f041b6b8834bcba9bf140dece23218dfe4"' - repoLastModified: Tue, 12 Dec 2023 22:07:50 GMT + repoEtag: '"2110450b8136a4845c642076c0fb3c4dec0c56a9c5da71f637dc3699adc0e387"' + repoLastModified: Wed, 13 Dec 2023 14:22:03 GMT category: Server Implementations foundInMaster: true - source: openapi3 tags @@ -7265,17 +7265,17 @@ repositoryId: 165951750 description: RapiDoc -WebComponent for OpenAPI Spec created: '2019-01-16T01:29:58Z' - updated: '2023-12-09T01:47:42Z' + updated: '2023-12-13T10:22:42Z' language: JavaScript archived: false - stars: 1461 + stars: 1462 watchers: 13 - forks: 261 + forks: 262 owner: rapi-doc logo: https://avatars.githubusercontent.com/u/104180085?v=4 license: MIT - repoEtag: '"a98409d17a31d8a0ef5586cc8603a6e22f141de096a5285ae59cced8896745c0"' - repoLastModified: Sat, 09 Dec 2023 01:47:42 GMT + repoEtag: '"e89118e5554ea94d6875cb7b08781be2de0bf7279d518b2efedf8fc6cee124e0"' + repoLastModified: Wed, 13 Dec 2023 10:22:42 GMT foundInMaster: true category: - Documentation @@ -7327,17 +7327,17 @@ A node package wrapper for https://github.com/OpenAPITools/openapi-generator created: '2018-10-26T10:21:23Z' - updated: '2023-12-12T02:09:08Z' + updated: '2023-12-13T21:07:03Z' language: TypeScript archived: false - stars: 1181 + stars: 1182 watchers: 18 - forks: 132 + forks: 133 owner: OpenAPITools logo: https://avatars.githubusercontent.com/u/37325267?v=4 license: Apache-2.0 - repoEtag: '"c2abb636638b9410a60a2e5f4428502538289326c7a6f4ff6274a6905aec85c5"' - repoLastModified: Tue, 12 Dec 2023 02:09:08 GMT + repoEtag: '"41c86aa843639dd17e89ffc5fb80b3c48287a5112035329dfdeb61b6633b4434"' + repoLastModified: Wed, 13 Dec 2023 21:07:03 GMT foundInMaster: true category: Code Generators id: 8f568f0b10837fef38571b68999adc0f @@ -7354,17 +7354,17 @@ A pluggable API specification generator. Currently supports the OpenAPI Specification (f.k.a. the Swagger specification).. created: '2014-10-18T23:48:49Z' - updated: '2023-11-30T14:04:15Z' + updated: '2023-12-13T20:39:56Z' language: Python archived: false - stars: 1062 + stars: 1063 watchers: 25 forks: 170 owner: marshmallow-code logo: https://avatars.githubusercontent.com/u/10334301?v=4 license: MIT - repoEtag: '"56bed556aade2005e244f10474094e99cecd5647bbabdc29fb1b349ddf81ae1d"' - repoLastModified: Thu, 30 Nov 2023 14:04:15 GMT + repoEtag: '"ad78a7ad35c09175b633c44aa3a431e1f3bb0f0277e584f5dbd0cd341e75b0a6"' + repoLastModified: Wed, 13 Dec 2023 20:39:56 GMT foundInMaster: true category: Parsers id: c1528764f05dd585ca47886dd6dabb86 @@ -7380,17 +7380,17 @@ repositoryId: 329190167 description: A lightweight Python web API framework. created: '2021-01-13T04:08:48Z' - updated: '2023-12-13T02:13:27Z' + updated: '2023-12-13T06:29:42Z' language: Python archived: false - stars: 880 + stars: 881 watchers: 19 forks: 109 owner: apiflask logo: https://avatars.githubusercontent.com/u/78075725?v=4 license: MIT - repoEtag: '"638c5c793e4b91c0c11487687959b3bbfe70389b2280ce4543f57d1187fe4cea"' - repoLastModified: Wed, 13 Dec 2023 02:13:27 GMT + repoEtag: '"4adc2f215b0d088a14a09fabf2efd9d0a29d84bcf501b8b63bc2e0aeb384b58b"' + repoLastModified: Wed, 13 Dec 2023 06:29:42 GMT category: Server Implementations foundInMaster: true oldLocations: @@ -7407,17 +7407,17 @@ repositoryId: 372032505 description: OpenAPI v3 code generator for go created: '2021-05-29T17:25:48Z' - updated: '2023-12-12T01:52:35Z' + updated: '2023-12-14T00:52:43Z' language: Go archived: false - stars: 857 + stars: 861 watchers: 13 forks: 60 owner: ogen-go logo: https://avatars.githubusercontent.com/u/85122432?v=4 license: Apache-2.0 - repoEtag: '"e106ec6561e645c56d518edca36cbcb64b98055b79c0ecbb5100fc1b1b0a1294"' - repoLastModified: Tue, 12 Dec 2023 01:52:35 GMT + repoEtag: '"cf5f5bd8ed655a5ea3f1a09d504fbd4470219144df45f47ea3d1b1d729109f15"' + repoLastModified: Thu, 14 Dec 2023 00:52:43 GMT category: Parsers foundInMaster: true - source: openapi3 tags @@ -7432,17 +7432,17 @@ repositoryId: 381857226 description: null created: '2021-06-30T23:29:49Z' - updated: '2023-12-12T22:35:12Z' + updated: '2023-12-13T20:07:01Z' language: TypeScript archived: false - stars: 816 + stars: 817 watchers: 18 - forks: 104 + forks: 105 owner: microsoft logo: https://avatars.githubusercontent.com/u/6154722?v=4 license: MIT - repoEtag: '"808c4a94a2a146c7560de212e74ecef13fd5e499c9cd22930616c3c59712c5bf"' - repoLastModified: Tue, 12 Dec 2023 22:35:12 GMT + repoEtag: '"0d557103fa9ef5390b1778232f9c63834f7fdccc7c9627d33395314e94579a8d"' + repoLastModified: Wed, 13 Dec 2023 20:07:01 GMT category: Server Implementations foundInMaster: true - source: openapi3 tags @@ -7456,17 +7456,17 @@ repositoryId: 192797744 description: The modern editor for API Design and Technical Writing. created: '2019-06-19T20:09:49Z' - updated: '2023-12-08T13:24:21Z' + updated: '2023-12-13T16:00:43Z' language: null archived: false - stars: 751 + stars: 752 watchers: 28 forks: 51 owner: stoplightio logo: https://avatars.githubusercontent.com/u/10767217?v=4 license: NOASSERTION - repoEtag: '"fa2941ce2c13815e5c3f0f9958fd706a116e90cabab448d92aef2e8ccb3470ad"' - repoLastModified: Fri, 08 Dec 2023 13:24:21 GMT + repoEtag: '"6ddf88c174db6b07b79b6c5c0febb90f0d1fa41566a44fe75e24d5f35e3e8871"' + repoLastModified: Wed, 13 Dec 2023 16:00:43 GMT foundInMaster: true category: - Description Validators @@ -7485,17 +7485,17 @@ A fast Java JSON schema validator that supports draft V4, V6, V7, V2019-09 and V2020-12 created: '2016-09-15T12:24:16Z' - updated: '2023-12-08T09:12:27Z' + updated: '2023-12-13T12:13:56Z' language: Java archived: false - stars: 710 + stars: 711 watchers: 43 forks: 305 owner: networknt logo: https://avatars.githubusercontent.com/u/8740739?v=4 license: Apache-2.0 - repoEtag: '"48154d3a4cd6e9f33dba6a058870efc34abd138b659a0af937d5bfd7641267da"' - repoLastModified: Fri, 08 Dec 2023 09:12:27 GMT + repoEtag: '"88af059218ed5b0e6e9601735830730d830c93deacbb66890e58580ecccba70f"' + repoLastModified: Wed, 13 Dec 2023 12:13:56 GMT foundInMaster: true category: Parsers id: 69c6f349899d198b4045edb7ffa3fb74 @@ -7683,17 +7683,17 @@ repositoryId: 481579846 description: A library that generates OpenAPI (Swagger) docs from Zod schemas created: '2022-04-14T11:32:57Z' - updated: '2023-12-12T11:34:11Z' + updated: '2023-12-13T16:05:42Z' language: TypeScript archived: false - stars: 519 - watchers: 9 + stars: 520 + watchers: 10 forks: 42 owner: asteasolutions logo: https://avatars.githubusercontent.com/u/5244095?v=4 license: MIT - repoEtag: '"0a5e7584ad70d7040f07a9db38186b8eb435e11e91ce32b0c9b38a7b509e007d"' - repoLastModified: Tue, 12 Dec 2023 11:34:11 GMT + repoEtag: '"5c889c5205744b73db12dbbfdadfe98cd81bb79dce51b35bb91add5808866a61"' + repoLastModified: Wed, 13 Dec 2023 16:05:42 GMT category: Parsers foundInMaster: true - source: openapi3 tags @@ -7734,17 +7734,17 @@ repositoryId: 117561740 description: (Unofficial) Google Home local API documentation. created: '2018-01-15T15:22:58Z' - updated: '2023-12-10T18:13:11Z' + updated: '2023-12-13T08:01:34Z' language: Handlebars archived: false - stars: 440 + stars: 441 watchers: 31 forks: 42 owner: rithvikvibhu logo: https://avatars.githubusercontent.com/u/5113343?v=4 license: MIT - repoEtag: '"7e259fe061b03bee71794661488b0bd5c9d6b1cfa99233cea78d78db24f570e0"' - repoLastModified: Sun, 10 Dec 2023 18:13:11 GMT + repoEtag: '"328f6448516c0c0744d78ef19527845b325be98175cfd03979b3fdfc11714548"' + repoLastModified: Wed, 13 Dec 2023 08:01:34 GMT foundInMaster: true category: SDK id: 6f3b994d76d4f6770123b20ae9bd03a2 @@ -7763,12 +7763,12 @@ language: TypeScript archived: false stars: 438 - watchers: 8 - forks: 74 + watchers: 9 + forks: 75 owner: cloud-annotations logo: https://avatars.githubusercontent.com/u/47490031?v=4 license: MIT - repoEtag: '"905400a78a9494066db3f9e875fdc659f0e666c783cb9605e49ade9ca57cf08f"' + repoEtag: '"103ee8a76ba83c3495e47792d447c592219c55d01b19a74481b533eee71b4a59"' repoLastModified: Thu, 07 Dec 2023 06:43:07 GMT foundInMaster: true category: SDK @@ -7784,17 +7784,17 @@ repositoryId: 145602302 description: OpenAPI mock server with random data generation created: '2018-08-21T18:16:27Z' - updated: '2023-12-09T05:28:47Z' + updated: '2023-12-14T03:06:07Z' language: Go archived: false - stars: 437 + stars: 439 watchers: 9 forks: 53 owner: muonsoft logo: https://avatars.githubusercontent.com/u/32521718?v=4 license: MIT - repoEtag: '"e2b4f931285a8847e7e040a70745848588c0411428ef2dd6116de41d5e384b19"' - repoLastModified: Sat, 09 Dec 2023 05:28:47 GMT + repoEtag: '"c43fc82c0eebcfe2f210243036a5bae5bcc9326701698da4eee5326abc64a840"' + repoLastModified: Thu, 14 Dec 2023 03:06:07 GMT foundInMaster: true category: - Description Validators @@ -7820,7 +7820,7 @@ forks: 67 owner: oazapfts logo: https://avatars.githubusercontent.com/u/119607625?v=4 - repoEtag: '"9ec7c46e201d2ea0d6d70fd9b5173fb59a45f2dc37264679054815a20bdbf25c"' + repoEtag: '"4b51ae3d20b2a913821d235a0759a6bb4393b4ebb7b3c6a98de923afbf4abec7"' repoLastModified: Mon, 11 Dec 2023 15:55:19 GMT category: Parsers foundInMaster: true @@ -8158,17 +8158,17 @@ repositoryId: 110697603 description: OpenAPI 3.0 CodeGen plus Node.js minus the Java and emojis created: '2017-11-14T14:02:19Z' - updated: '2023-11-17T15:10:02Z' + updated: '2023-12-14T01:59:08Z' language: JavaScript archived: false - stars: 290 + stars: 291 watchers: 12 - forks: 46 + forks: 47 owner: Mermade logo: https://avatars.githubusercontent.com/u/15950345?v=4 license: Apache-2.0 - repoEtag: '"db0cfb3f1b6a3a7ec622ba19fae51cdb6049ca1c039bb4c94c3f1b4be514b0f3"' - repoLastModified: Fri, 17 Nov 2023 15:10:02 GMT + repoEtag: '"0520a83e1029a1966e30ceecab71516c60a68e6b7efdf24f857e679efcab69e3"' + repoLastModified: Thu, 14 Dec 2023 01:59:08 GMT foundInMaster: true category: Converters id: a5af66e79d95d6e1b9baa57668630864 @@ -8210,9 +8210,9 @@ v3: true repositoryMetadata: base64Readme: >- - IyBFdGhlcmV1bSBCZWFjb24gQVBJcwoKIVtDSV0oaHR0cHM6Ly9naXRodWIuY29tL2V0aGVyZXVtL2JlYWNvbi1BUElzL3dvcmtmbG93cy9DSS9iYWRnZS5zdmcpCgpDb2xsZWN0aW9uIG9mIFJFU1RmdWwgQVBJcyBwcm92aWRlZCBieSBFdGhlcmV1bSBCZWFjb24gbm9kZXMKCkFQSSBicm93c2VyOiBbaHR0cHM6Ly9ldGhlcmV1bS5naXRodWIuaW8vYmVhY29uLUFQSXMvXShodHRwczovL2V0aGVyZXVtLmdpdGh1Yi5pby9iZWFjb24tQVBJcy8pCgojIyBPdXRsaW5lCgpUaGlzIGRvY3VtZW50IG91dGxpbmVzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSAoQVBJKSB3aGljaCBpcyBleHBvc2VkIGJ5IGEgYmVhY29uIG5vZGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEV0aGVyZXVtIFtjb25zZW5zdXMgbGF5ZXIgc3BlY2lmaWNhdGlvbnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ldGhlcmV1bS9jb25zZW5zdXMtc3BlY3MpLgoKVGhlIEFQSSBpcyBhIFJFU1QgaW50ZXJmYWNlLCBhY2Nlc3NlZCB2aWEgSFRUUC4gVGhlIEFQSSBzaG91bGQgbm90LCB1bmxlc3MgcHJvdGVjdGVkIGJ5IGFkZGl0aW9uYWwgc2VjdXJpdHkgbGF5ZXJzLCBiZSBleHBvc2VkIHRvIHRoZSBwdWJsaWMgSW50ZXJuZXQgYXMgdGhlIEFQSSBpbmNsdWRlcyBtdWx0aXBsZSBlbmRwb2ludHMgd2hpY2ggY291bGQgb3BlbiB5b3VyIG5vZGUgdG8gZGVuaWFsLW9mLXNlcnZpY2UgKERvUykgYXR0YWNrcyB0aHJvdWdoIGVuZHBvaW50cyB0cmlnZ2VyaW5nIGhlYXZ5IHByb2Nlc3NpbmcuCiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCByZXR1cm4gZGF0YSB0eXBlIGlzIEpTT04uCgpUaGUgYmVhY29uIG5vZGUgKEJOKSBtYWludGFpbnMgdGhlIHN0YXRlIG9mIHRoZSBiZWFjb24gY2hhaW4gYnkgY29tbXVuaWNhdGluZyB3aXRoIG90aGVyIGJlYWNvbiBub2RlcyBpbiB0aGUgRXRoZXJldW0gbmV0d29yay4KQ29uY2VwdHVhbGx5LCBpdCBkb2VzIG5vdCBtYWludGFpbiBrZXlwYWlycyB0aGF0IHBhcnRpY2lwYXRlIHdpdGggdGhlIGJlYWNvbiBjaGFpbi4KClRoZSB2YWxpZGF0b3IgY2xpZW50IChWQykgaXMgYSBjb25jZXB0dWFsbHkgc2VwYXJhdGUgZW50aXR5IHdoaWNoIHV0aWxpemVzIHByaXZhdGUga2V5cwp0byBwZXJmb3JtIHZhbGlkYXRvciByZWxhdGVkIHRhc2tzLCBjYWxsZWQgImR1dGllcyIsIG9uIHRoZSBiZWFjb24gY2hhaW4uCiBUaGVzZSBkdXRpZXMgaW5jbHVkZSB0aGUgcHJvZHVjdGlvbiBvZiBiZWFjb24gYmxvY2tzIGFuZCBzaWduaW5nIG9mIGF0dGVzdGF0aW9ucy4KClRoZSBnb2FsIG9mIHRoaXMgc3BlY2lmaWNhdGlvbiBpcyB0byBwcm9tb3RlIGludGVyb3BlcmFiaWxpdHkgYmV0d2VlbiB2YXJpb3VzIGJlYWNvbiBub2RlIGltcGxlbWVudGF0aW9ucy4KCiMjIFJlbmRlcgpUbyByZW5kZXIgc3BlYyBpbiBicm93c2VyIHlvdSB3aWxsIG5lZWQgYW55IGh0dHAgc2VydmVyIHRvIGxvYWQgYGluZGV4Lmh0bWxgIGZpbGUKaW4gcm9vdCBvZiB0aGUgcmVwby4KCiMjIyMjIFB5dGhvbgpgYGAKcHl0aG9uIC1tIGh0dHAuc2VydmVyIDgwODAKYGBgCkFuZCBhcGkgc3BlYyB3aWxsIHJlbmRlciBvbiBbaHR0cDovL2xvY2FsaG9zdDo4MDgwXShodHRwOi8vbG9jYWxob3N0OjgwODApLgoKIyMjIyMgTm9kZUpzCmBgYApucG0gaW5zdGFsbCBzaW1wbGVodHRwc2VydmVyIC1nCgojIE9SCgp5YXJuIGdsb2JhbCBhZGQgc2ltcGxlaHR0cHNlcnZlcgoKc2ltcGxlaHR0cHNlcnZlcgpgYGAKQW5kIGFwaSBzcGVjIHdpbGwgcmVuZGVyIG9uIFtodHRwOi8vbG9jYWxob3N0OjgwMDBdKGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCkuCgojIyMgVXNhZ2UKCkxvY2FsIGNoYW5nZXMgd2lsbCBiZSBvYnNlcnZhYmxlIGlmICJkZXYiIGlzIHNlbGVjdGVkIGluIHRoZSAiU2VsZWN0IGEgZGVmaW5pdGlvbiIgZHJvcC1kb3duIGluIHRoZSB3ZWIgVUkuCgpVc2VycyBtYXkgbmVlZCB0byB0aWNrIHRoZSAiRGlzYWJsZSBDYWNoZSIgYm94IGluIHRoZWlyIGJyb3dzZXIncyBkZXZlbG9wZXIgdG9vbHMgdG8gc2VlIGNoYW5nZXMgYWZ0ZXIgbW9kaWZ5aW5nIHRoZSBzb3VyY2UuCgojIyBDb250cmlidXRpbmcKQXBpIHNwZWMgaXMgY2hlY2tlZCBmb3IgbGludCBlcnJvcnMgYmVmb3JlIG1lcmdlLgoKVG8gcnVuIGxpbnQgbG9jYWxseSwgaW5zdGFsbCBsaW50ZXIgd2l0aApgYGAKbnBtIGluc3RhbGwgLWcgQHJlZG9jbHkvY2xpCgojIE9SCgp5YXJuIGdsb2JhbCBhZGQgQHJlZG9jbHkvY2xpCmBgYAphbmQgcnVuIGxpbnQgd2l0aApgYGAKcmVkb2NseSBsaW50IGJlYWNvbi1ub2RlLW9hcGkueWFtbApgYGAKCiMjIEltcGxlbWVudGF0aW9ucwoKLSBbVHlwZVNjcmlwdCBXcmFwcGVyXShodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9AY2hhaW5zYWZlL2V0aDIuMC1hcGktd3JhcHBlcikKCmh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL0BjaGFpbnNhZmUvZXRoMi4wLWFwaS13cmFwcGVyCiMjIFJlbGVhc2luZwoKMS4gQ3JlYXRlIGFuZCBwdXNoIHRhZwoKICAgLSBNYWtlIHN1cmUgYGluZm8udmVyc2lvbmAgaW4gYGJlYWNvbi1ub2RlLW9hcGkueWFtbGAgZmlsZSBpcyB1cGRhdGVkIGJlZm9yZSB0YWdnaW5nLiAgVGhpcyB3aWxsIG5lZWQgdG8gYmUgYSBQUiwgYW5kIHdpbGwgZ2V0IHRoZSByZWxlYXNlIHByb2Nlc3Mgc3RhcnRlZC4KICAgLSBDRCB3aWxsIGNyZWF0ZSBnaXRodWIgcmVsZWFzZSBhbmQgdXBsb2FkIGJ1bmRsZWQgc3BlYyBmaWxlCgoyLiBDcmVhdGUgYSBzZWNvbmQgUFIsIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgYGluZGV4Lmh0bWxgLiBBbHNvIGNoYW5nZSBiYWNrIHRoZSBgaW5mby52ZXJzaW9uYCBpbiBgYmVhY29uLW5vZGUtYXBpLnlhbWxgIGJhY2sgdG8gYERldmAKCiAgIC0gVGhlIGBpbmRleC5odG1sYCBmaWxlIG5lZWRzIGEgbmV3IHJlbGVhc2UgZW50cnlwb2ludCBhZGRlZCB0byByZWZlciB0byB0aGUgbmV3IHJlbGVhc2UuIEZpbmQgdGhlIGB1cmxzYCBmaWVsZCwgCiAgICAgYW5kIGFkZCB0aGUgbmV3IHJlbGVhc2UgYXMgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBsaXN0LgogICAgIEVudHJ5IHNob3VsZCBiZSBpbiBmb2xsb3dpbmcgZm9ybWF0KHJlcGxhY2UgYDx0YWc+YCB3aXRoIHJlYWwgdGFnIG5hbWUgZnJvbSBzdGVwIDEuKToKYGBgCiAgICAgICAgIHt1cmw6ICIuL3JlbGVhc2VzLzx0YWc+L2JlYWNvbi1ub2RlLW9hcGkuanNvbiIsIG5hbWU6ICI8dGFnPiJ9LApgYGA= - readmeEtag: '"c2ee005fb95581686eb525c09f7fe262194ade7bfe67b05333b03653eafff4fe"' - readmeLastModified: Tue, 17 Oct 2023 01:12:46 GMT + IyBFdGhlcmV1bSBCZWFjb24gQVBJcwoKIVtDSV0oaHR0cHM6Ly9naXRodWIuY29tL2V0aGVyZXVtL2JlYWNvbi1BUElzL3dvcmtmbG93cy9DSS9iYWRnZS5zdmcpCgpDb2xsZWN0aW9uIG9mIFJFU1RmdWwgQVBJcyBwcm92aWRlZCBieSBFdGhlcmV1bSBCZWFjb24gbm9kZXMKCkFQSSBicm93c2VyOiBbaHR0cHM6Ly9ldGhlcmV1bS5naXRodWIuaW8vYmVhY29uLUFQSXMvXShodHRwczovL2V0aGVyZXVtLmdpdGh1Yi5pby9iZWFjb24tQVBJcy8pCgojIyBPdXRsaW5lCgpUaGlzIGRvY3VtZW50IG91dGxpbmVzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSAoQVBJKSB3aGljaCBpcyBleHBvc2VkIGJ5IGEgYmVhY29uIG5vZGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIEV0aGVyZXVtIFtjb25zZW5zdXMgbGF5ZXIgc3BlY2lmaWNhdGlvbnNdKGh0dHBzOi8vZ2l0aHViLmNvbS9ldGhlcmV1bS9jb25zZW5zdXMtc3BlY3MpLgoKVGhlIEFQSSBpcyBhIFJFU1QgaW50ZXJmYWNlLCBhY2Nlc3NlZCB2aWEgSFRUUC4gVGhlIEFQSSBzaG91bGQgbm90LCB1bmxlc3MgcHJvdGVjdGVkIGJ5IGFkZGl0aW9uYWwgc2VjdXJpdHkgbGF5ZXJzLCBiZSBleHBvc2VkIHRvIHRoZSBwdWJsaWMgSW50ZXJuZXQgYXMgdGhlIEFQSSBpbmNsdWRlcyBtdWx0aXBsZSBlbmRwb2ludHMgd2hpY2ggY291bGQgb3BlbiB5b3VyIG5vZGUgdG8gZGVuaWFsLW9mLXNlcnZpY2UgKERvUykgYXR0YWNrcyB0aHJvdWdoIGVuZHBvaW50cyB0cmlnZ2VyaW5nIGhlYXZ5IHByb2Nlc3NpbmcuCiBDdXJyZW50bHksIHRoZSBvbmx5IHN1cHBvcnRlZCByZXR1cm4gZGF0YSB0eXBlIGlzIEpTT04uCgpUaGUgYmVhY29uIG5vZGUgKEJOKSBtYWludGFpbnMgdGhlIHN0YXRlIG9mIHRoZSBiZWFjb24gY2hhaW4gYnkgY29tbXVuaWNhdGluZyB3aXRoIG90aGVyIGJlYWNvbiBub2RlcyBpbiB0aGUgRXRoZXJldW0gbmV0d29yay4KQ29uY2VwdHVhbGx5LCBpdCBkb2VzIG5vdCBtYWludGFpbiBrZXlwYWlycyB0aGF0IHBhcnRpY2lwYXRlIHdpdGggdGhlIGJlYWNvbiBjaGFpbi4KClRoZSB2YWxpZGF0b3IgY2xpZW50IChWQykgaXMgYSBjb25jZXB0dWFsbHkgc2VwYXJhdGUgZW50aXR5IHdoaWNoIHV0aWxpemVzIHByaXZhdGUga2V5cwp0byBwZXJmb3JtIHZhbGlkYXRvciByZWxhdGVkIHRhc2tzLCBjYWxsZWQgImR1dGllcyIsIG9uIHRoZSBiZWFjb24gY2hhaW4uCiBUaGVzZSBkdXRpZXMgaW5jbHVkZSB0aGUgcHJvZHVjdGlvbiBvZiBiZWFjb24gYmxvY2tzIGFuZCBzaWduaW5nIG9mIGF0dGVzdGF0aW9ucy4KClRoZSBnb2FsIG9mIHRoaXMgc3BlY2lmaWNhdGlvbiBpcyB0byBwcm9tb3RlIGludGVyb3BlcmFiaWxpdHkgYmV0d2VlbiB2YXJpb3VzIGJlYWNvbiBub2RlIGltcGxlbWVudGF0aW9ucy4KCiMjIFJlbmRlcgpUbyByZW5kZXIgc3BlYyBpbiBicm93c2VyIHlvdSB3aWxsIG5lZWQgYW55IGh0dHAgc2VydmVyIHRvIGxvYWQgYGluZGV4Lmh0bWxgIGZpbGUKaW4gcm9vdCBvZiB0aGUgcmVwby4KCiMjIyMjIFB5dGhvbgpgYGAKcHl0aG9uIC1tIGh0dHAuc2VydmVyIDgwODAKYGBgCkFuZCBhcGkgc3BlYyB3aWxsIHJlbmRlciBvbiBbaHR0cDovL2xvY2FsaG9zdDo4MDgwXShodHRwOi8vbG9jYWxob3N0OjgwODApLgoKIyMjIyMgTm9kZUpzCmBgYApucG0gaW5zdGFsbCBzaW1wbGVodHRwc2VydmVyIC1nCgojIE9SCgp5YXJuIGdsb2JhbCBhZGQgc2ltcGxlaHR0cHNlcnZlcgoKc2ltcGxlaHR0cHNlcnZlcgpgYGAKQW5kIGFwaSBzcGVjIHdpbGwgcmVuZGVyIG9uIFtodHRwOi8vbG9jYWxob3N0OjgwMDBdKGh0dHA6Ly9sb2NhbGhvc3Q6ODAwMCkuCgojIyMgVXNhZ2UKCkxvY2FsIGNoYW5nZXMgd2lsbCBiZSBvYnNlcnZhYmxlIGlmICJkZXYiIGlzIHNlbGVjdGVkIGluIHRoZSAiU2VsZWN0IGEgZGVmaW5pdGlvbiIgZHJvcC1kb3duIGluIHRoZSB3ZWIgVUkuCgpVc2VycyBtYXkgbmVlZCB0byB0aWNrIHRoZSAiRGlzYWJsZSBDYWNoZSIgYm94IGluIHRoZWlyIGJyb3dzZXIncyBkZXZlbG9wZXIgdG9vbHMgdG8gc2VlIGNoYW5nZXMgYWZ0ZXIgbW9kaWZ5aW5nIHRoZSBzb3VyY2UuCgojIyBDb250cmlidXRpbmcKQXBpIHNwZWMgaXMgY2hlY2tlZCBmb3IgbGludCBlcnJvcnMgYmVmb3JlIG1lcmdlLgoKVG8gcnVuIGxpbnQgbG9jYWxseSwgaW5zdGFsbCBsaW50ZXIgd2l0aApgYGAKbnBtIGluc3RhbGwgLWcgQHJlZG9jbHkvY2xpCgojIE9SCgp5YXJuIGdsb2JhbCBhZGQgQHJlZG9jbHkvY2xpCmBgYAphbmQgcnVuIGxpbnQgd2l0aApgYGAKcmVkb2NseSBsaW50IGJlYWNvbi1ub2RlLW9hcGkueWFtbApgYGAKCiMjIFJlbGVhc2luZwoKMS4gQ3JlYXRlIGFuZCBwdXNoIHRhZwoKICAgLSBNYWtlIHN1cmUgYGluZm8udmVyc2lvbmAgaW4gYGJlYWNvbi1ub2RlLW9hcGkueWFtbGAgZmlsZSBpcyB1cGRhdGVkIGJlZm9yZSB0YWdnaW5nLiAgVGhpcyB3aWxsIG5lZWQgdG8gYmUgYSBQUiwgYW5kIHdpbGwgZ2V0IHRoZSByZWxlYXNlIHByb2Nlc3Mgc3RhcnRlZC4KICAgLSBDRCB3aWxsIGNyZWF0ZSBnaXRodWIgcmVsZWFzZSBhbmQgdXBsb2FkIGJ1bmRsZWQgc3BlYyBmaWxlCgoyLiBDcmVhdGUgYSBzZWNvbmQgUFIsIGNvbnRhaW5pbmcgdGhlIHVwZGF0ZWQgYGluZGV4Lmh0bWxgLiBBbHNvIGNoYW5nZSBiYWNrIHRoZSBgaW5mby52ZXJzaW9uYCBpbiBgYmVhY29uLW5vZGUtYXBpLnlhbWxgIGJhY2sgdG8gYERldmAKCiAgIC0gVGhlIGBpbmRleC5odG1sYCBmaWxlIG5lZWRzIGEgbmV3IHJlbGVhc2UgZW50cnlwb2ludCBhZGRlZCB0byByZWZlciB0byB0aGUgbmV3IHJlbGVhc2UuIEZpbmQgdGhlIGB1cmxzYCBmaWVsZCwgCiAgICAgYW5kIGFkZCB0aGUgbmV3IHJlbGVhc2UgYXMgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBsaXN0LgogICAgIEVudHJ5IHNob3VsZCBiZSBpbiBmb2xsb3dpbmcgZm9ybWF0KHJlcGxhY2UgYDx0YWc+YCB3aXRoIHJlYWwgdGFnIG5hbWUgZnJvbSBzdGVwIDEuKToKYGBgCiAgICAgICAgIHt1cmw6ICIuL3JlbGVhc2VzLzx0YWc+L2JlYWNvbi1ub2RlLW9hcGkuanNvbiIsIG5hbWU6ICI8dGFnPiJ9LApgYGAK + readmeEtag: '"13fc6067074fe48795629e57639d804e3a14dee4856aecfd461ce6f22ef567ea"' + readmeLastModified: Thu, 14 Dec 2023 02:25:50 GMT repositoryId: 202613633 description: Collection of RESTful APIs provided by Ethereum Beacon nodes created: '2019-08-15T21:27:12Z' @@ -8221,11 +8221,11 @@ archived: false stars: 284 watchers: 38 - forks: 171 + forks: 172 owner: ethereum logo: https://avatars.githubusercontent.com/u/6250754?v=4 license: CC0-1.0 - repoEtag: '"95b3cabbc446309553864dadb84f18cced1a77b2d10abceb157e1b855c050018"' + repoEtag: '"101ba34555c948b7642825fc2e5b61263c15835407ea9b4e77364d53502ac8ae"' repoLastModified: Fri, 08 Dec 2023 14:44:32 GMT foundInMaster: true category: @@ -8255,7 +8255,7 @@ owner: abersheeran logo: https://avatars.githubusercontent.com/u/25364828?v=4 license: Apache-2.0 - repoEtag: '"ac1511a69665f4ae0af7ff7e870c9d343bc671a5dc432239a70431f2f1e5dcaa"' + repoEtag: '"2b2f912f9a90540d6f3d462a755d9b5f88278fc43075fd35c9d04079fb6280c6"' repoLastModified: Mon, 11 Dec 2023 15:16:08 GMT category: Server Implementations foundInMaster: true @@ -8305,17 +8305,17 @@ repositoryId: 245763170 description: Huma REST/HTTP API Framework for Golang with OpenAPI 3 created: '2020-03-08T06:19:51Z' - updated: '2023-12-12T21:09:13Z' + updated: '2023-12-13T19:56:03Z' language: Go archived: false - stars: 283 + stars: 287 watchers: 11 - forks: 33 + forks: 34 owner: danielgtaylor logo: https://avatars.githubusercontent.com/u/106826?v=4 license: MIT - repoEtag: '"0406acf9dcea32c2a6ce42e7893b69bd79da5b03548cb65ac3b5291a24ddffc7"' - repoLastModified: Tue, 12 Dec 2023 21:09:13 GMT + repoEtag: '"3f1118d79a746b40780df779bb99ba2b5fdee38af10e1157c24d3753974bc2b0"' + repoLastModified: Wed, 13 Dec 2023 19:56:03 GMT foundInMaster: true category: Server Implementations id: 96ae035d7b486f67e7bae7f6208179f9 @@ -8336,17 +8336,17 @@ Openapi-core is a Python library that adds client-side and server-side support for the OpenAPI v3.0 and OpenAPI v3.1 specification. created: '2017-09-20T10:25:35Z' - updated: '2023-12-10T06:58:43Z' + updated: '2023-12-13T09:22:53Z' language: Python archived: false - stars: 253 + stars: 254 watchers: 9 forks: 119 owner: python-openapi logo: https://avatars.githubusercontent.com/u/126442889?v=4 license: BSD-3-Clause - repoEtag: '"aacfb591daa56fb50afb612cf0a604a00017176dab7cf39ba333c7fde23d6f4a"' - repoLastModified: Sun, 10 Dec 2023 06:58:43 GMT + repoEtag: '"cb9e415c4729ed5a9e4c43bb9f711c45829c518cceaba997da9eaf9785f6bedc"' + repoLastModified: Wed, 13 Dec 2023 09:22:53 GMT category: - Data Validators - Parsers @@ -8431,7 +8431,7 @@ owner: apicat logo: https://avatars.githubusercontent.com/u/64158984?v=4 license: MIT - repoEtag: '"3dbb90be4ad1b7d6bc789e36219a339d314bf5a0f29191c6b30e7029c5c60d5f"' + repoEtag: '"eae62c94b2d848b614adfb5add4ae48cc848117dc116e6769dd209c0e86ba871"' repoLastModified: Tue, 05 Dec 2023 21:21:52 GMT category: Server Implementations foundInMaster: true @@ -8506,17 +8506,17 @@ A library for generating data models based on inputs such as AsyncAPI, OpenAPI, or JSON Schema documents. created: '2021-01-21T12:27:51Z' - updated: '2023-12-12T19:26:36Z' + updated: '2023-12-13T19:10:37Z' language: TypeScript archived: false - stars: 221 + stars: 222 watchers: 5 forks: 125 owner: asyncapi logo: https://avatars.githubusercontent.com/u/16401334?v=4 license: Apache-2.0 - repoEtag: '"f279c49c2e51fa90171c5ae0d99b8552aa6290c163e2921f2ebcd2f707370d85"' - repoLastModified: Tue, 12 Dec 2023 19:26:36 GMT + repoEtag: '"e7333d5017f95bf1c374625ef7821e31cfaa0c5fa26223a352b341e8927451be"' + repoLastModified: Wed, 13 Dec 2023 19:10:37 GMT foundInMaster: true - source: openapi3 tags repository: https://github.com/0xtheprodev/fastapi-clean-example @@ -8530,17 +8530,17 @@ repositoryId: 479982630 description: Clean Architecture Example using FastAPI framework created: '2022-04-10T10:23:51Z' - updated: '2023-12-12T05:57:52Z' + updated: '2023-12-13T20:31:07Z' language: Python archived: false - stars: 218 + stars: 220 watchers: 3 forks: 44 owner: 0xTheProDev logo: https://avatars.githubusercontent.com/u/14367736?v=4 license: MIT - repoEtag: '"c7c1b8bac710d14aa4cc6f9259a34389f1be1452801fe0f084b405121f8c50fc"' - repoLastModified: Tue, 12 Dec 2023 05:57:52 GMT + repoEtag: '"4cecdd9f2658d0e95f30d3674f3adf7e8f78c4e88bd4cd85fe703b36930123c1"' + repoLastModified: Wed, 13 Dec 2023 20:31:07 GMT category: Server Implementations foundInMaster: true oldLocations: @@ -8805,12 +8805,12 @@ language: C# archived: false stars: 188 - watchers: 31 + watchers: 30 forks: 54 owner: microsoft logo: https://avatars.githubusercontent.com/u/6154722?v=4 license: MIT - repoEtag: '"df627ed50b3fadd364f54d1f7093fbd13a2b7401f9f00c3cbefe4aa72fe99a9a"' + repoEtag: '"347a50639e32893d91d2b4e110f24bedc48a70741137a5c93c97f7dea78c82a8"' repoLastModified: Thu, 07 Dec 2023 17:00:56 GMT foundInMaster: true category: @@ -8867,7 +8867,7 @@ owner: dymmond logo: https://avatars.githubusercontent.com/u/65982469?v=4 license: MIT - repoEtag: '"9085fde83a89dcb5648e197e24fe6cd33c556c465a40f039539c9cdb2400b315"' + repoEtag: '"af4ac7997bb0de21408dd338e9129efe3c79fcaa908415e684c43277030fed37"' repoLastModified: Thu, 07 Dec 2023 01:23:22 GMT category: Server Implementations foundInMaster: true @@ -9020,11 +9020,11 @@ archived: false stars: 172 watchers: 10 - forks: 26 + forks: 27 owner: cloudflare logo: https://avatars.githubusercontent.com/u/314135?v=4 license: MIT - repoEtag: '"6c494a268884c449feeebf7415f87c224340ede8d377945013c35f00c23aa9ba"' + repoEtag: '"82002dc95702efafa5656a2cf1e3550607aefc55a8f0d2ec13e488582dd4ca19"' repoLastModified: Mon, 11 Dec 2023 22:07:54 GMT category: Server Implementations foundInMaster: true @@ -9126,17 +9126,17 @@ repositoryId: 232207964 description: OpenAPI structures for Go created: '2020-01-07T00:07:41Z' - updated: '2023-12-09T18:57:16Z' + updated: '2023-12-13T07:21:40Z' language: Go archived: false - stars: 163 + stars: 164 watchers: 3 forks: 17 owner: swaggest logo: https://avatars.githubusercontent.com/u/19609628?v=4 license: MIT - repoEtag: '"770fd2522b39d512bf0760e11871fd5f44e2f9efd6dc68e9a300022fa21a3c95"' - repoLastModified: Sat, 09 Dec 2023 18:57:16 GMT + repoEtag: '"3e04153074b8a6ed2ab188f2f4c2ab6fbb356af1a4e7498906afd426098e4c13"' + repoLastModified: Wed, 13 Dec 2023 07:21:40 GMT foundInMaster: true id: 042e78fafa5f6cb0dbca01c64778ab3f - source: @@ -9212,10 +9212,10 @@ archived: false stars: 158 watchers: 9 - forks: 69 + forks: 68 owner: ccouzens logo: https://avatars.githubusercontent.com/u/241046?v=4 - repoEtag: '"a85fc6bc36d39879f6b51fc0768acfc57f514cc46da4a2e47a4c1cd34bb1e3d8"' + repoEtag: '"7608c270ff9e65e7bb809a994360086e544e70ff8fe9daa039b9837c88c046f2"' repoLastModified: Tue, 12 Dec 2023 09:03:26 GMT foundInMaster: true category: Server Implementations @@ -9243,7 +9243,7 @@ owner: sunrise-php logo: https://avatars.githubusercontent.com/u/41580063?v=4 license: MIT - repoEtag: '"504345d35d5cac29562121ff75c1de92b2ad0013c27de0c19ce51bef00b3632b"' + repoEtag: '"683e45a363fa3e85913888111bbe6f70d9f7955b2ae79901b8dbb367102214bf"' repoLastModified: Wed, 18 Oct 2023 19:55:02 GMT foundInMaster: true category: Data Validators @@ -9379,7 +9379,7 @@ owner: christianhelle logo: https://avatars.githubusercontent.com/u/710400?v=4 license: GPL-3.0 - repoEtag: '"974b45945c7a191b5e1b24a0a44c2a4a84ae46eb88882765e9e704e7e380ecf6"' + repoEtag: '"75354479227187446b934f83b35e07f9082b5cb4bdf0bb09195ce73ab2de17d2"' repoLastModified: Mon, 11 Dec 2023 06:03:45 GMT category: SDK foundInMaster: true @@ -9506,17 +9506,17 @@ repositoryId: 543052826 description: Speakeasy CLI - Launch developer experience for your API created: '2022-09-29T10:13:15Z' - updated: '2023-12-08T12:40:12Z' + updated: '2023-12-13T04:58:25Z' language: Go archived: false - stars: 108 + stars: 109 watchers: 8 forks: 11 owner: speakeasy-api logo: https://avatars.githubusercontent.com/u/91446104?v=4 license: NOASSERTION - repoEtag: '"6bce298fa8144eddd9b13a43ff98097101d1bbb6b70317b3d5c366ef734dbd4b"' - repoLastModified: Fri, 08 Dec 2023 12:40:12 GMT + repoEtag: '"d332a40f58685617ec014c434f620e48fb7c03ed8aac4c32a24e9ecd73d635fa"' + repoLastModified: Wed, 13 Dec 2023 04:58:25 GMT category: Parsers foundInMaster: true - source: openapi3 tags @@ -9882,9 +9882,9 @@ id: 17db61563d8b069fd3d4a63d36459a68 repositoryMetadata: base64Readme: >- - WyFbQnVpbGRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9hY3Rpb25zL3dvcmtmbG93cy9idWlsZC55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2FjdGlvbnMvd29ya2Zsb3dzL2J1aWxkLnltbCkKWyFbU21va2UgVGVzdHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9hY3Rpb25zL3dvcmtmbG93cy9zbW9rZS10ZXN0cy55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2FjdGlvbnMvd29ya2Zsb3dzL3Ntb2tlLXRlc3RzLnltbCkKWyFbTnVHZXRdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vbnVnZXQvdi9yZWZpdHRlcj9jb2xvcj1ibHVlKV0oaHR0cHM6Ly93d3cubnVnZXQub3JnL3BhY2thZ2VzL3JlZml0dGVyKQpbIVtRdWFsaXR5IEdhdGUgU3RhdHVzXShodHRwczovL3NvbmFyY2xvdWQuaW8vYXBpL3Byb2plY3RfYmFkZ2VzL21lYXN1cmU/cHJvamVjdD1jaHJpc3RpYW5oZWxsZV9yZWZpdHRlciZtZXRyaWM9YWxlcnRfc3RhdHVzKV0oaHR0cHM6Ly9zb25hcmNsb3VkLmlvL3N1bW1hcnkvbmV3X2NvZGU/aWQ9Y2hyaXN0aWFuaGVsbGVfcmVmaXR0ZXIpClshW2NvZGVjb3ZdKGh0dHBzOi8vY29kZWNvdi5pby9naC9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9ncmFwaC9iYWRnZS5zdmc/dG9rZW49MjQyWVQxTjZUMildKGh0dHBzOi8vY29kZWNvdi5pby9naC9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlcikKWyFbUW9kYW5hXShodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvYWN0aW9ucy93b3JrZmxvd3MvcW9kYW5hLnltbC9iYWRnZS5zdmcpXShodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvYWN0aW9ucy93b3JrZmxvd3MvcW9kYW5hLnltbCkKCjwhLS0gQUxMLUNPTlRSSUJVVE9SUy1CQURHRTpTVEFSVCAtIERvIG5vdCByZW1vdmUgb3IgbW9kaWZ5IHRoaXMgc2VjdGlvbiAtLT4KWyFbQWxsIENvbnRyaWJ1dG9yc10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9hbGxfY29udHJpYnV0b3JzLTMwLW9yYW5nZS5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUpXSgjY29udHJpYnV0b3JzLSkKPCEtLSBBTEwtQ09OVFJJQlVUT1JTLUJBREdFOkVORCAtLT4KCiMgUmVmaXR0ZXIKUmVmaXR0ZXIgaXMgYSB0b29sIGZvciBnZW5lcmF0aW5nIGEgQyMgUkVTVCBBUEkgQ2xpZW50IHVzaW5nIHRoZSBbUmVmaXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGl2ZXVpL3JlZml0KSBsaWJyYXJ5LiBSZWZpdHRlciBjYW4gZ2VuZXJhdGUgdGhlIFJlZml0IGludGVyZmFjZSBhbmQgY29udHJhY3RzIGZyb20gT3BlbkFQSSBzcGVjaWZpY2F0aW9ucy4gCgpSZWZpdHRlciBjb21lcyBpbiAyIGZvcm1zOgotIEEgWy5ORVQgQ0xJIFRvb2xdKCNjbGktdG9vbCkgZGlzdHJpYnV0ZWQgdmlhIFtudWdldC5vcmddKGh0dHA6Ly93d3cubnVnZXQub3JnL3BhY2thZ2VzL3JlZml0dGVyKSB0aGF0IG91dHB1dHMgYSBzaW5nbGUgQyMgZmlsZSBvbiBkaXNrCi0gQSBbQyMgU291cmNlIEdlbmVyYXRvcl0oI3NvdXJjZS1nZW5lcmF0b3IpIHZpYSB0aGUgW1JlZml0dGVyLlNvdXJjZUdlbmVyYXRvcl0oaHR0cDovL3d3dy5udWdldC5vcmcvcGFja2FnZXMvcmVmaXR0ZXIuc291cmNlZ2VuZXJhdG9yKSBwYWNrYWdlIHRoYXQgZ2VuZXJhdGVzIGNvZGUgb24gY29tcGlsZSB0aW1lIGJhc2VkIG9uIGEgWy5yZWZpdHRlcl0oIy5yZWZpdHRlci1maWxlLWZvcm1hdCkgd2l0aGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeS4KCiMjIENMSSBUb29sCgojIyMgSW5zdGFsbGF0aW9uOgoKVGhlIHRvb2wgaXMgcGFja2FnZWQgYXMgYSAuTkVUIFRvb2wgYW5kIGlzIHB1Ymxpc2hlZCB0byBudWdldC5vcmcuIFlvdSBjYW4gaW5zdGFsbCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyB0b29sIGxpa2UgdGhpczoKCmBgYHNoZWxsCmRvdG5ldCB0b29sIGluc3RhbGwgLS1nbG9iYWwgUmVmaXR0ZXIKYGBgCgojIyMgVXNhZ2U6CgpgYGBzaGVsbAokIHJlZml0dGVyIC0taGVscApgYGAKCmBgYApVU0FHRToKICAgIHJlZml0dGVyIFtVUkwgb3IgaW5wdXQgZmlsZV0gW09QVElPTlNdCgpFWEFNUExFUzoKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uCiAgICByZWZpdHRlciBodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvL2FwaS92My9vcGVuYXBpLnlhbWwKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tc2V0dGluZ3MtZmlsZSAuL29wZW5hcGkucmVmaXR0ZXIgLS1vdXRwdXQgLi9HZW5lcmF0ZWRDb2RlLmNzCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5hbWVzcGFjZSAiWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUiIC0tb3V0cHV0IC4vR2VuZXJhdGVkQ29kZS5jcwogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uYW1lc3BhY2UgIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiAtLWludGVybmFsCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW91dHB1dCAuL0lHZW5lcmF0ZWRDb2RlLmNzIC0taW50ZXJmYWNlLW9ubHkKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tdXNlLWFwaS1yZXNwb25zZQogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1jYW5jZWxsYXRpb24tdG9rZW5zCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5vLW9wZXJhdGlvbi1oZWFkZXJzCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5vLWFjY2VwdC1oZWFkZXJzCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLXVzZS1pc28tZGF0ZS1mb3JtYXQKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tYWRkaXRpb25hbC1uYW1lc3BhY2UgIllvdXIuQWRkaXRpb25hbC5OYW1lc3BhY2UiIC0tYWRkaXRpb25hbC1uYW1lc3BhY2UgIllvdXIuT3RoZXIuQWRkaXRpb25hbC5OYW1lc3BhY2UiCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW11bHRpcGxlLWludGVyZmFjZXMgQnlFbmRwb2ludAogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS10YWcgUGV0IC0tdGFnIFN0b3JlIC0tdGFnIFVzZXIKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tbWF0Y2gtcGF0aCAnXi9wZXQvLionCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5vLWRlcHJlY2F0ZWQtb3BlcmF0aW9ucwogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1vcGVyYXRpb24tbmFtZS10ZW1wbGF0ZSAne29wZXJhdGlvbk5hbWV9QXN5bmMnCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW9wdGlvbmFsLW51bGxhYmxlLXBhcmFtZXRlcnMKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tdHJpbS11bnVzZWQtc2NoZW1hCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLXRyaW0tdW51c2VkLXNjaGVtYSAtLWtlZXAtc2NoZW1hICdeTW9kZWwkJyAtLWtlZXAtc2NoZW1hICdeUGVyc29uLisnCgpBUkdVTUVOVFM6CiAgICBbVVJMIG9yIGlucHV0IGZpbGVdICAgIFVSTCBvciBmaWxlIHBhdGggdG8gT3BlbkFQSSBTcGVjaWZpY2F0aW9uIGZpbGUKCk9QVElPTlM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRzIGhlbHAgaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtcywgLS1zZXR0aW5ncy1maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCB0byAucmVmaXR0ZXIgc2V0dGluZ3MgZmlsZS4gU3BlY2lmeWluZyB0aGlzIHdpbGwgaWdub3JlIGFsbCBvdGhlciBzZXR0aW5ncyAoZXhjZXB0IGZvciAtLW91dHB1dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtbiwgLS1uYW1lc3BhY2UgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZENvZGUgICAgRGVmYXVsdCBuYW1lc3BhY2UgdG8gdXNlIGZvciBnZW5lcmF0ZWQgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtbywgLS1vdXRwdXQgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dC5jcyAgICAgICAgUGF0aCB0byBPdXRwdXQgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1hdXRvLWdlbmVyYXRlZC1oZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgYWRkIDxhdXRvLWdlbmVyYXRlZD4gaGVhZGVyIHRvIG91dHB1dCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1hY2NlcHQtaGVhZGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgYWRkIDxBY2NlcHQ+IGhlYWRlciB0byBvdXRwdXQgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1pbnRlcmZhY2Utb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgY29udHJhY3QgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtYXBpLXJlc3BvbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuIFRhc2s8SUFwaVJlc3BvbnNlPFQ+PiBpbnN0ZWFkIG9mIFRhc2s8VD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1pbnRlcm5hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSBhY2Nlc3NpYmlsaXR5IG9mIHRoZSBnZW5lcmF0ZWQgdHlwZXMgdG8gJ2ludGVybmFsJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1jYW5jZWxsYXRpb24tdG9rZW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIGNhbmNlbGxhdGlvbiB0b2tlbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1vcGVyYXRpb24taGVhZGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgb3BlcmF0aW9uIGhlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1sb2dnaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgbG9nIGVycm9ycyBvciBjb2xsZWN0IHRlbGVtZXRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1hZGRpdGlvbmFsLW5hbWVzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGFkZGl0aW9uYWwgbmFtZXNwYWNlIHRvIGdlbmVyYXRlZCB0eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtaXNvLWRhdGUtZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwbGljaXRseSBmb3JtYXQgZGF0ZSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBpbiBJU08gODYwMSBzdGFuZGFyZCBkYXRlIGZvcm1hdCB1c2luZyBkZWxpbWl0ZXJzICgyMDIzLTA2LTE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1tdWx0aXBsZS1pbnRlcmZhY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgYSBSZWZpdCBpbnRlcmZhY2UgZm9yIGVhY2ggZW5kcG9pbnQuIE1heSBiZSBvbmUgb2YgQnlFbmRwb2ludCwgQnlUYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1tYXRjaC1wYXRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSBpbmNsdWRlIFBhdGhzIHRoYXQgbWF0Y2ggdGhlIHByb3ZpZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbi4gTWF5IGJlIHNldCBtdWx0aXBsZSB0aW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS10YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSBpbmNsdWRlIEVuZHBvaW50cyB0aGF0IGNvbnRhaW4gdGhpcyB0YWcuIE1heSBiZSBzZXQgbXVsdGlwbGUgdGltZXMgYW5kIHJlc3VsdCBpbiBPUidlZCBldmFsdWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1za2lwLXZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tpcCB2YWxpZGF0aW9uIG9mIHRoZSBPcGVuQVBJIHNwZWNpZmljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1kZXByZWNhdGVkLW9wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgZGVwcmVjYXRlZCBvcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1vcGVyYXRpb24tbmFtZS10ZW1wbGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgb3BlcmF0aW9uIG5hbWVzIHVzaW5nIHBhdHRlcm4uIFdoZW4gdXNpbmcgLS1tdWx0aXBsZS1pbnRlcmZhY2VzIEJ5RW5kcG9pbnQsIHRoaXMgaXMgbmFtZSBvZiB0aGUgRXhlY3V0ZSgpIG1ldGhvZCBpbiB0aGUgaW50ZXJmYWNlCiAgICAgICAgLS1vcHRpb25hbC1udWxsYWJsZS1wYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgbnVsbGFibGUgcGFyYW1ldGVycyBhcyBvcHRpb25hbCBwYXJhbWV0ZXJzCiAgICAgICAgLS10cmltLXVudXNlZC1zY2hlbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyB1bnJlZmVyZW5jZWQgY29tcG9uZW50cyBzY2hlbWEgdG8ga2VlcCB0aGUgZ2VuZXJhdGVkIG91dHB1dCB0byBhIG1pbmltdW0KICAgICAgICAtLWtlZXAtc2NoZW1hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZSB0byBrZWVwIG1hdGNoaW5nIHNjaGVtYSwgdXNlcyByZWd1bGFyIGV4cHJlc3Npb25zLiBVc2UgdG9nZXRoZXIgd2l0aCAiLS10cmltLXVudXNlZC1zY2hlbWEiLiBDYW4gYmUgc2V0IG11bHRpcGxlIHRpbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmBgYAoKVG8gZ2VuZXJhdGUgY29kZSBmcm9tIGFuIE9wZW5BUEkgc3BlY2lmaWNhdGlvbnMgZmlsZSwgcnVuIHRoZSBmb2xsb3dpbmc6CgpgYGBzaGVsbAokIHJlZml0dGVyIFtwYXRoIHRvIE9wZW5BUEkgc3BlYyBmaWxlXSAtLW5hbWVzcGFjZSAiW1lvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlXSIKYGBgCgpUaGlzIHdpbGwgZ2VuZXJhdGUgYSBmaWxlIGNhbGxlZCBgT3V0cHV0LmNzYCB3aGljaCBjb250YWlucyB0aGUgUmVmaXQgaW50ZXJmYWNlIGFuZCBjb250cmFjdCBjbGFzc2VzIGdlbmVyYXRlZCB1c2luZyBbTlN3YWddKGh0dHBzOi8vZ2l0aHViLmNvbS9SaWNvU3V0ZXIvTlN3YWcpCgojIyBTb3VyY2UgR2VuZXJhdG9yCgpSZWZpdHRlciBpcyBhdmFpbGFibGUgYXMgYSBDIyBTb3VyY2UgR2VuZXJhdG9yIHRoYXQgdXNlcyB0aGUgW1JlZml0dGVyLkNvcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci90cmVlL21haW4vc3JjL1JlZml0dGVyLkNvcmUpIGxpYnJhcnkgZm9yIGdlbmVyYXRpbmcgYSBSRVNUIEFQSSBDbGllbnQgdXNpbmcgdGhlIFtSZWZpdF0oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0aXZldWkvcmVmaXQpIGxpYnJhcnkuIFJlZml0dGVyIGNhbiBnZW5lcmF0ZSB0aGUgUmVmaXQgaW50ZXJmYWNlIGZyb20gT3BlbkFQSSBzcGVjaWZpY2F0aW9ucwoKVGhlIFJlZml0dGVyIHNvdXJjZSBnZW5lcmF0b3IgaXMgYSBiaXQgdW50cmFkaXRpb25hbCBpbiBhIHNlbnNlIHRoYXQgaXQgY3JlYXRlcyBhIGZvbGRlciBjYWxsZWQgYEdlbmVyYXRlZGAgaW4gdGhlIHNhbWUgbG9jYXRpb24gYXMgdGhlIGAucmVmaXR0ZXJgIGZpbGUgYW5kIGdlbmVyYXRlcyBmaWxlcyB0byBkaXNrIHVuZGVyIHRoZSBgR2VuZXJhdGVkYCBmb2xkZXIgKGNhbiBiZSBjaGFuZ2VkIHdpdGggYC0tb3V0cHV0Rm9sZGVyYCkuIFRoZSBzb3VyY2UgZ2VuZXJhdG9yIG91dHB1dCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHByb2plY3QgYW5kIGNvbW1pdHRlZCB0byBzb3VyY2UgY29udHJvbC4gVGhpcyBpcyBkb25lIGJlY2F1c2UgdGhlcmUgaXMgbm8gb3RoZXIgd2F5IHRvIHRyaWdnZXIgdGhlIFJlZml0IHNvdXJjZSBnZW5lcmF0b3IgdG8gcGlja3VwIHRoZSBSZWZpdHRlciBnZW5lcmF0ZWQgY29kZSAKCioqKihUcmFuc2xhdGlvbjogSSBjb3VsZG4ndCBmb3IgdGhlIGxpZmUgb2YgbWUgZmlndXJlIGhvdyB0byBnZXQgdGhhdCB0byB3b3JrLCBzb3JyeSkqKioKCiMjIyBJbnN0YWxsYXRpb24KClRoZSBzb3VyY2UgZ2VuZXJhdG9yIGlzIGRpc3RyaWJ1dGVkIGFzIGEgTnVHZXQgcGFja2FnZSBhbmQgc2hvdWxkIGJlIGluc3RhbGxlZCB0byB0aGUgcHJvamVjdCB0aGF0IHdpbGwgY29udGFpbiB0aGUgZ2VuZXJhdGVkIGNvZGUKCmBgYHNoZWxsCmRvdG5ldCBhZGQgcGFja2FnZSBSZWZpdHRlci5Tb3VyY2VHZW5lcmF0b3IKYGBgCgojIyMgVXNhZ2UKClRoaXMgc291cmNlIGdlbmVyYXRvciBnZW5lcmF0ZXMgY29kZSBiYXNlZCBvbiBhbnkgYC5yZWZpdHRlcmAgZmlsZSBpbmNsdWRlZCB0byB0aGUgcHJvamVjdCBhcyBgQWRkaXRpb25hbEZpbGVzYC4KClRoZSBnZW5lcmF0b3IgY2FuIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGFsbCBgLnJlZml0dGVyYCBmaWxlcyBpbnNpZGUgdGhlIHByb2plY3QgdGhhdCByZWZlcmVuY2VkIHRoZSBgUmVmaXR0ZXIuU291cmNlR2VuZXJhdG9yYCBwYWNrYWdlIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGluY2x1ZGUgdGhlbSBtYW51YWxseSBhcyBgQWRkaXRpb25hbEZpbGVzYAoKIyMjIC5SZWZpdHRlciBGaWxlIGZvcm1hdAoKVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIGAucmVmaXR0ZXJgIGZpbGUKCmBgYGpzCnsKICAib3BlbkFwaVBhdGgiOiAiL3BhdGgvdG8veW91ci9vcGVuQVBJIiwgLy8gUmVxdWlyZWQKICAibmFtZXNwYWNlIjogIk9yZy5TeXN0ZW0uU2VydmljZS5BcGkuR2VuZXJhdGVkQ29kZSIsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PUdlbmVyYXRlZENvZGUKICAibmFtaW5nIjogewogICAgInVzZU9wZW5BcGlUaXRsZSI6IGZhbHNlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgICAiaW50ZXJmYWNlTmFtZSI6ICJNeUFwaUNsaWVudCIgLy8gT3B0aW9uYWwuIERlZmF1bHQ9QXBpQ2xpZW50CiAgfSwKICAiZ2VuZXJhdGVDb250cmFjdHMiOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgImdlbmVyYXRlWG1sRG9jQ29kZUNvbW1lbnRzIjogdHJ1ZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9dHJ1ZQogICJhZGRBdXRvR2VuZXJhdGVkSGVhZGVyIjogdHJ1ZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9dHJ1ZQogICJhZGRBY2NlcHRIZWFkZXJzIjogdHJ1ZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9dHJ1ZQogICJyZXR1cm5JQXBpUmVzcG9uc2UiOiBmYWxzZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9ZmFsc2UKICAiZ2VuZXJhdGVPcGVyYXRpb25IZWFkZXJzIjogdHJ1ZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9dHJ1ZQogICJ0eXBlQWNjZXNzaWJpbGl0eSI6ICJQdWJsaWMiLCAvLyBPcHRpb25hbC4gVmFsdWVzPVB1YmxpY3xJbnRlcm5hbC4gRGVmYXVsdD1QdWJsaWMKICAidXNlQ2FuY2VsbGF0aW9uVG9rZW5zIjogZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgInVzZUlzb0RhdGVGb3JtYXQiOiBmYWxzZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9ZmFsc2UKICAibXVsdGlwbGVJbnRlcmZhY2VzIjogIkJ5RW5kcG9pbnQiLCAvLyBPcHRpb25hbC4gTWF5IGJlIG9uZSBvZiAiQnlFbmRwb2ludCIgb3IgIkJ5VGFnIgogICJnZW5lcmF0ZURlcHJlY2F0ZWRPcGVyYXRpb25zIjogZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PXRydWUKICAib3BlcmF0aW9uTmFtZVRlbXBsYXRlIjogIntvcGVyYXRpb25OYW1lfUFzeW5jIiwgLy8gT3B0aW9uYWwuIE11c3QgY29udGFpbiB7b3BlcmF0aW9uTmFtZX0gd2hlbiBtdWx0aXBsZUludGVyZmFjZXMgIT0gQnlFbmRwb2ludAogICJvcHRpb25hbFBhcmFtZXRlcnMiOiBmYWxzZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9ZmFsc2UKICAib3V0cHV0Rm9sZGVyIjogIi4uL0N1c3RvbU91dHB1dCIgLy8gT3B0aW9uYWwuIERlZmF1bHQ9Li9HZW5lcmF0ZWQKICAib3V0cHV0RmlsZW5hbWUiOiAiUmVmaXRJbnRlcmZhY2UuY3MiLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1PdXRwdXQuY3MgZm9yIENMSSB0b29sCiAgImFkZGl0aW9uYWxOYW1lc3BhY2VzIjogWyAvLyBPcHRpb25hbAogICAgIk5hbWVzcGFjZTEiLAogICAgIk5hbWVzcGFjZTIiCiAgXSwKICAiaW5jbHVkZVRhZ3MiOiBbIC8vIE9wdGlvbmFsLiBPcGVuQVBJIFRhZyB0byBpbmNsdWRlIHdoZW4gZ2VuZXJhdGluZyBjb2RlCiAgICAiUGV0IiwKICAgICJTdG9yZSIsCiAgICAiVXNlciIKICBdLAogICJpbmNsdWRlUGF0aE1hdGNoZXMiOiBbIC8vIE9wdGlvbmFsLiBPbmx5IGluY2x1ZGUgUGF0aHMgdGhhdCBtYXRjaCB0aGUgcHJvdmlkZWQgcmVndWxhciBleHByZXNzaW9uCiAgICAiXi9wZXQvLioiLAogICAgIl4vc3RvcmUvLioiCiAgXSwKICAidHJpbVVudXNlZFNjaGVtYSI6IGZhbHNlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1mYWxzZQogICJrZWVwU2NoZW1hUGF0dGVybnMiOiBbIC8vIE9wdGlvbmFsLiBGb3JjZSB0byBrZWVwIG1hdGNoaW5nIHNjaGVtYSwgdXNlcyByZWd1bGFyIGV4cHJlc3Npb25zLiBVc2UgdG9nZXRoZXIgd2l0aCB0cmltVW51c2VkU2NoZW1hPXRydWUKICAgICJeTW9kZWwkIiwKICAgICJeUGVyc29uLisiCiAgXSwKICAiZGVwZW5kZW5jeUluamVjdGlvblNldHRpbmdzIjogeyAvLyBPcHRpb25hbAogICAgImJhc2VVcmwiOiAiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9hcGkvdjMiLCAvLyBPcHRpb25hbC4gTGVhdmUgdGhpcyBibGFuayB0byBzZXQgdGhlIGJhc2UgYWRkcmVzcyBtYW51YWxseQogICAgImh0dHBNZXNzYWdlSGFuZGxlcnMiOiBbIC8vIE9wdGlvbmFsCiAgICAgICAgIkF1dGhvcml6YXRpb25NZXNzYWdlSGFuZGxlciIsIAogICAgICAgICJUZWxlbWV0cnlNZXNzYWdlSGFuZGxlciIgCiAgICBdLAogICAgInVzZVBvbGx5IjogdHJ1ZSwgLy8gT3B0aW9uYWwuIFNldCB0aGlzIHRvIHRydWUsIHRvIGNvbmZpZ3VyZSBQb2xseSB3aXRoIGEgcmV0cnkgcG9saWN5IHRoYXQgdXNlcyBhIGppdHRlcmVkIGJhY2tvZmYuIERlZmF1bHQ9ZmFsc2UKICAgICJwb2xseU1heFJldHJ5Q291bnQiOiAzLCAvLyBPcHRpb25hbC4gRGVmYXVsdD02CiAgICAiZmlyc3RCYWNrb2ZmUmV0cnlJblNlY29uZHMiOiAwLjUgLy8gT3B0aW9uYWwuIERlZmF1bHQ9MS4wCiAgfSwKICAiY29kZUdlbmVyYXRvclNldHRpbmdzIjogeyAvLyBPcHRpb25hbC4gRGVmYXVsdCBzZXR0aW5ncyBhcmUgdGhlIHZhbHVlcyBzZXQgaW4gdGhpcyBleGFtcGxlCiAgICAicmVxdWlyZWRQcm9wZXJ0aWVzTXVzdEJlRGVmaW5lZCI6IHRydWUsCiAgICAiZ2VuZXJhdGVEYXRhQW5ub3RhdGlvbnMiOiB0cnVlLAogICAgImFueVR5cGUiOiAib2JqZWN0IiwKICAgICJkYXRlVHlwZSI6ICJTeXN0ZW0uRGF0ZVRpbWVPZmZzZXQiLAogICAgImRhdGVUaW1lVHlwZSI6ICJTeXN0ZW0uRGF0ZVRpbWVPZmZzZXQiLAogICAgInRpbWVUeXBlIjogIlN5c3RlbS5UaW1lU3BhbiIsCiAgICAidGltZVNwYW5UeXBlIjogIlN5c3RlbS5UaW1lU3BhbiIsCiAgICAiYXJyYXlUeXBlIjogIlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklDb2xsZWN0aW9uIiwKICAgICJkaWN0aW9uYXJ5VHlwZSI6ICJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5JRGljdGlvbmFyeSIsCiAgICAiYXJyYXlJbnN0YW5jZVR5cGUiOiAiU3lzdGVtLkNvbGxlY3Rpb25zLk9iamVjdE1vZGVsLkNvbGxlY3Rpb24iLAogICAgImRpY3Rpb25hcnlJbnN0YW5jZVR5cGUiOiAiU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeSIsCiAgICAiYXJyYXlCYXNlVHlwZSI6ICJTeXN0ZW0uQ29sbGVjdGlvbnMuT2JqZWN0TW9kZWwuQ29sbGVjdGlvbiIsCiAgICAiZGljdGlvbmFyeUJhc2VUeXBlIjogIlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkRpY3Rpb25hcnkiLAogICAgInByb3BlcnR5U2V0dGVyQWNjZXNzTW9kaWZpZXIiOiAiIiwKICAgICJnZW5lcmF0ZUltbXV0YWJsZUFycmF5UHJvcGVydGllcyI6IGZhbHNlLAogICAgImdlbmVyYXRlSW1tdXRhYmxlRGljdGlvbmFyeVByb3BlcnRpZXMiOiBmYWxzZSwKICAgICJoYW5kbGVSZWZlcmVuY2VzIjogZmFsc2UsCiAgICAianNvblNlcmlhbGl6ZXJTZXR0aW5nc1RyYW5zZm9ybWF0aW9uTWV0aG9kIjogbnVsbCwKICAgICJnZW5lcmF0ZUpzb25NZXRob2RzIjogZmFsc2UsCiAgICAiZW5mb3JjZUZsYWdFbnVtcyI6IGZhbHNlLAogICAgImlubGluZU5hbWVkRGljdGlvbmFyaWVzIjogZmFsc2UsCiAgICAiaW5saW5lTmFtZWRUdXBsZXMiOiB0cnVlLAogICAgImlubGluZU5hbWVkQXJyYXlzIjogZmFsc2UsCiAgICAiZ2VuZXJhdGVPcHRpb25hbFByb3BlcnRpZXNBc051bGxhYmxlIjogZmFsc2UsCiAgICAiZ2VuZXJhdGVOdWxsYWJsZVJlZmVyZW5jZVR5cGVzIjogZmFsc2UsCiAgICAiZ2VuZXJhdGVOYXRpdmVSZWNvcmRzIjogZmFsc2UsCiAgICAiZ2VuZXJhdGVEZWZhdWx0VmFsdWVzIjogdHJ1ZSwKICAgICJpbmxpbmVOYW1lZEFueSI6IGZhbHNlLAogICAgImV4Y2x1ZGVkVHlwZU5hbWVzIjogWwogICAgICAiRXhjbHVkZWRUeXBlRm9vIiwKICAgICAgIkV4Y2x1ZGVkVHlwZUJhciIKICAgIF0KICB9Cn0KYGBgCgotIGBvcGVuQXBpUGF0aGAgLSBwb2ludHMgdG8gdGhlIE9wZW5BUEkgU3BlY2lmaWNhdGlvbnMgZmlsZS4gVGhpcyBjYW4gYmUgdGhlIHBhdGggdG8gYSBmaWxlIHN0b3JlZCBvbiBkaXNrLCByZWxhdGl2ZSB0byB0aGUgYC5yZWZpdHRlcmAgZmlsZS4gVGhpcyBjYW4gYWxzbyBiZSBhIFVSTCB0byBhIHJlbW90ZSBmaWxlIHRoYXQgd2lsbCBiZSBkb3dubG9hZGVkIG92ZXIgSFRUUC9IVFRQUwotIGBuYW1lc3BhY2VgIC0gdGhlIG5hbWVzcGFjZSB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgY29kZS4gSWYgbm90IHNwZWNpZmllZCwgdGhpcyBkZWZhdWx0cyB0byBgR2VuZXJhdGVkQ29kZWAKLSBgbmFtaW5nLnVzZU9wZW5BcGlUaXRsZWAgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBPcGVuQXBpIHRpdGxlIHNob3VsZCBiZSB1c2VkLiBEZWZhdWx0IGlzIGB0cnVlYAotIGBuYW1pbmcuaW50ZXJmYWNlTmFtZWAgLSB0aGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIGludGVyZmFjZS4gVGhlIGdlbmVyYXRlZCBjb2RlIHdpbGwgYXV0b21hdGljYWxseSBwcmVmaXggdGhpcyB3aXRoIGBJYCBzbyBpZiB0aGlzIHNldCB0byBgTXlBcGlDbGllbnRgIHRoZW4gdGhlIGdlbmVyYXRlZCBpbnRlcmZhY2UgaXMgY2FsbGVkIGBJTXlBcGlDbGllbnRgLiBEZWZhdWx0IGlzIGBBcGlDbGllbnRgCi0gYGdlbmVyYXRlQ29udHJhY3RzYCAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgY29udHJhY3RzIHNob3VsZCBiZSBnZW5lcmF0ZWQuIEEgdXNlIGNhc2UgZm9yIHRoaXMgaXMgc2V2ZXJhbCBBUEkgY2xpZW50cyB1c2UgdGhlIHNhbWUgY29udHJhY3RzLiBEZWZhdWx0IGlzIGB0cnVlYAotIGBnZW5lcmF0ZVhtbERvY0NvZGVDb21tZW50c2AgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIFhNTCBkb2MgY29tbWVudHMgc2hvdWxkIGJlIGdlbmVyYXRlZC4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgYWRkQXV0b0dlbmVyYXRlZEhlYWRlcmAgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIFhNTCBkb2MgY29tbWVudHMgc2hvdWxkIGJlIGdlbmVyYXRlZC4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgYWRkQWNjZXB0SGVhZGVyc2AgLSAgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBhZGQgYWNjZXB0IGhlYWRlcnMgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXS4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgcmV0dXJuSUFwaVJlc3BvbnNlYCAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcmV0dXJuIGBJQXBpUmVzcG9uc2U8VD5gIG9iamVjdHMuIERlZmF1bHQgaXMgYGZhbHNlYAotIGBnZW5lcmF0ZU9wZXJhdGlvbkhlYWRlcnNgIC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byB1c2Ugb3BlcmF0aW9uIGhlYWRlcnMgaW4gdGhlIGdlbmVyYXRlZCBtZXRob2RzLiBEZWZhdWx0IGlzIGB0cnVlYAotIGB0eXBlQWNjZXNzaWJpbGl0eWAgLSB0aGUgZ2VuZXJhdGVkIHR5cGUgYWNjZXNzaWJpbGl0eS4gUG9zc2libGUgdmFsdWVzIGFyZSBgUHVibGljYCBhbmQgYEludGVybmFsYC4gRGVmYXVsdCBpcyBgUHVibGljYAotIGB1c2VDYW5jZWxsYXRpb25Ub2tlbnNgIC0gVXNlIGNhbmNlbGxhdGlvbiB0b2tlbnMgaW4gdGhlIGdlbmVyYXRlZCBtZXRob2RzLiBEZWZhdWx0IGlzIGBmYWxzZWAKLSBgdXNlSXNvRGF0ZUZvcm1hdGAgLSBTZXQgdG8gYHRydWVgIHRvIGV4cGxpY2l0bHkgZm9ybWF0IGRhdGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgaW4gSVNPIDg2MDEgc3RhbmRhcmQgZGF0ZSBmb3JtYXQgdXNpbmcgZGVsaW1pdGVycyAoZm9yIGV4YW1wbGU6IDIwMjMtMDYtMTUpLiBEZWZhdWx0IGlzIGBmYWxzZWAKLSBgbXVsdGlwbGVJbnRlcmZhY2VzYCAtIFNldCB0byBgQnlFbmRwb2ludGAgdG8gZ2VuZXJhdGUgYW4gaW50ZXJmYWNlIGZvciBlYWNoIGVuZHBvaW50LCBvciBgQnlUYWdgIHRvIGdyb3VwIEVuZHBvaW50cyBieSB0aGVpciBUYWcgKGxpa2UgU3dhZ2dlclVJIGdyb3VwcyB0aGVtKS4KLSBgb3V0cHV0Rm9sZGVyYCAtIGEgc3RyaW5nIGRlc2NyaWJpbmcgYSByZWxhdGl2ZSBwYXRoIHRvIGEgZGVzaXJlZCBvdXRwdXQgZm9sZGVyLiBEZWZhdWx0IGlzIGAuL0dlbmVyYXRlZGAKLSBgb3V0cHV0RmlsZW5hbWVgIC0gT3V0cHV0IGZpbGVuYW1lLiBEZWZhdWx0IGlzIGBPdXRwdXQuY3NgIHdoZW4gdXNlZCBmcm9tIHRoZSBDTEkgdG9vbCwgb3RoZXJ3aXNlIGl0cyB0aGUgLnJlZml0dGVyIGZpbGVuYW1lLiBTbyBgUGV0c3RvcmUucmVmaXR0ZXJgIGJlY29tZXMgYFBldHN0b3JlLmNzYC4KLSBgYWRkaXRpb25hbE5hbWVzcGFjZXNgIC0gQSBjb2xsZWN0aW9uIG9mIGFkZGl0aW9uYWwgbmFtZXNwYWNlcyB0byBpbmNsdWRlIGluIHRoZSBnZW5lcmF0ZWQgZmlsZS4gQSB1c2UgY2FzZSBmb3IgdGhpcyBpcyB3aGVuIHlvdSB3YW50IHRvIHJldXNlIGNvbnRyYWN0cyBmcm9tIGEgZGlmZmVyZW50IG5hbWVzcGFjZSB0aGFuIHRoZSBnZW5lcmF0ZWQgY29kZS4gRGVmYXVsdCBpcyBlbXB0eQotIGBpbmNsdWRlVGFnc2AgLSBBIGNvbGxlY3Rpb24gb2YgdGFncyB0byB1c2UgYSBmaWx0ZXIgZm9yIGluY2x1ZGluZyBlbmRwb2ludHMgdGhhdCBjb250YWluIHRoaXMgdGFnLgotIGBpbmNsdWRlUGF0aE1hdGNoZXNgIC0gQSBjb2xsZWN0aW9uIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdXNlZCB0byBmaWx0ZXIgcGF0aHMuCi0gYGdlbmVyYXRlRGVwcmVjYXRlZE9wZXJhdGlvbnNgIC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBkZXByZWNhdGVkIG9wZXJhdGlvbnMgc2hvdWxkIGJlIGdlbmVyYXRlZCBvciBza2lwcGVkLiBEZWZhdWx0IGlzIGB0cnVlYAotIGBvcGVyYXRpb25OYW1lVGVtcGxhdGVgIC0gR2VuZXJhdGUgb3BlcmF0aW9uIG5hbWVzIHVzaW5nIHBhdHRlcm4uIFRoaXMgbXVzdCBjb250YWluIHRoZSBzdHJpbmcge29wZXJhdGlvbk5hbWV9LiBBbiBleGFtcGxlIHVzYWdlIG9mIHRoaXMgY291bGQgYmUgYHtvcGVyYXRpb25OYW1lfUFzeW5jYCB0byBzdWZmaXggYWxsIG1ldGhvZCBuYW1lcyB3aXRoIEFzeW5jCi0gYG9wdGlvbmFsUGFyYW1ldGVyc2AgLSBHZW5lcmF0ZSBub24tcmVxdWlyZWQgcGFyYW1ldGVycyBhcyBudWxsYWJsZSBvcHRpb25hbCBwYXJhbWV0ZXJzCi0gYHRyaW1VbnVzZWRTY2hlbWFgIC0gUmVtb3ZlcyB1bnJlZmVyZW5jZWQgY29tcG9uZW50cyBzY2hlbWEgdG8ga2VlcCB0aGUgZ2VuZXJhdGVkIG91dHB1dCB0byBhIG1pbmltdW0KLSBga2VlcFNjaGVtYVBhdHRlcm5zYDogQSBjb2xsZWN0aW9uIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gZm9yY2UgdG8ga2VlcCBtYXRjaGluZyBzY2hlbWEuIFRoaXMgaXMgdXNlZCB0b2dldGhlciB3aXRoIGB0cmltVW51c2VkU2NoZW1hYAotIGBkZXBlbmRlbmN5SW5qZWN0aW9uU2V0dGluZ3NgIC0gU2V0dGluZyB0aGlzIHdpbGwgZ2VuZXJhdGVkIGV4dGVuc2lvbiBtZXRob2RzIHRvIGBJU2VydmljZUNvbGxlY3Rpb25gIGZvciBjb25maWd1cmluZyBSZWZpdCBjbGllbnRzCiAgLSBgYmFzZVVybGAgLSBVc2VkIGFzIHRoZSBIdHRwQ2xpZW50IGJhc2UgYWRkcmVzcy4gTGVhdmUgdGhpcyBibGFuayB0byBtYW51YWxseSBzZXQgdGhlIGJhc2UgVVJMCiAgLSBgaHR0cE1lc3NhZ2VIYW5kbGVyc2AgLSBBIGNvbGxlY3Rpb24gb2YgYEh0dHBNZXNzYWdlSGFuZGxlcmAgdGhhdCBpcyBhZGRlZCB0byB0aGUgSHR0cENsaWVudCBwaXBlbGluZQogIC0gYHVzZVBvbGx5YCAtIFNldCB0aGlzIHRvIHRydWUgdG8gY29uZmlndXJlIHRoZSBIdHRwQ2xpZW50IHRvIHVzZSBQb2xseSB1c2luZyBhIHJldHJ5IHBvbGljeSB3aXRoIGEgaml0dGVyZWQgYmFja29mZgogIC0gYHBvbGx5TWF4UmV0cnlDb3VudGAgLSBUaGlzIGlzIHRoZSBtYXggcmV0cnkgY291bnQgdXNlZCBpbiB0aGUgUG9sbHkgcmV0cnkgcG9saWN5LiBEZWZhdWx0IGlzIDYKICAtIGBmaXJzdEJhY2tvZmZSZXRyeUluU2Vjb25kc2AgLSBUaGlzIGlzIHRoZSBkdXJhdGlvbiBvZiB0aGUgaW5pdGlhbCByZXRyeSBiYWNrb2ZmLiBEZWZhdWx0IGlzIDEgc2Vjb25kCi0gYGNvZGVHZW5lcmF0b3JTZXR0aW5nc2AgLSBTZXR0aW5nIHRoaXMgYWxsb3dzIGN1c3RvbWl6YXRpb24gb2YgdGhlIE5Td2FnIGdlbmVyYXRlZCB0eXBlcyBhbmQgY29udHJhY3RzCiAgLSBgcmVxdWlyZWRQcm9wZXJ0aWVzTXVzdEJlRGVmaW5lZGAgLSBEZWZhdWx0IGlzIHRydWUsCiAgLSBgZ2VuZXJhdGVEYXRhQW5ub3RhdGlvbnNgIC0gRGVmYXVsdCBpcyB0cnVlLAogIC0gYGFueVR5cGVgIC0gRGVmYXVsdCBpcyBgb2JqZWN0YCwKICAtIGBkYXRlVHlwZWAgLSBEZWZhdWx0IGlzIGBTeXN0ZW0uRGF0ZVRpbWVPZmZzZXRgLAogIC0gYGRhdGVUaW1lVHlwZWAgLSBEZWZhdWx0IGlzIGBTeXN0ZW0uRGF0ZVRpbWVPZmZzZXRgLAogIC0gYHRpbWVUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5UaW1lU3BhbmAsCiAgLSBgdGltZVNwYW5UeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5UaW1lU3BhbmAsCiAgLSBgYXJyYXlUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklDb2xsZWN0aW9uYCwKICAtIGBkaWN0aW9uYXJ5VHlwZWAgLSBEZWZhdWx0IGlzIGBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5JRGljdGlvbmFyeWAsCiAgLSBgYXJyYXlJbnN0YW5jZVR5cGVgIC0gRGVmYXVsdCBpcyBgU3lzdGVtLkNvbGxlY3Rpb25zLk9iamVjdE1vZGVsLkNvbGxlY3Rpb25gLAogIC0gYGRpY3Rpb25hcnlJbnN0YW5jZVR5cGVgIC0gRGVmYXVsdCBpcyBgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAsCiAgLSBgYXJyYXlCYXNlVHlwZWAgLSBEZWZhdWx0IGlzIGBTeXN0ZW0uQ29sbGVjdGlvbnMuT2JqZWN0TW9kZWwuQ29sbGVjdGlvbmAsCiAgLSBgZGljdGlvbmFyeUJhc2VUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkRpY3Rpb25hcnlgLAogIC0gYHByb3BlcnR5U2V0dGVyQWNjZXNzTW9kaWZpZXJgIC0gRGVmYXVsdCBpcyBgYCwKICAtIGBnZW5lcmF0ZUltbXV0YWJsZUFycmF5UHJvcGVydGllc2AgLSBEZWZhdWx0IGlzIGZhbHNlLAogIC0gYGdlbmVyYXRlSW1tdXRhYmxlRGljdGlvbmFyeVByb3BlcnRpZXNgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBoYW5kbGVSZWZlcmVuY2VzYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBganNvblNlcmlhbGl6ZXJTZXR0aW5nc1RyYW5zZm9ybWF0aW9uTWV0aG9kYCAtIERlZmF1bHQgaXMgbnVsbCwKICAtIGBnZW5lcmF0ZUpzb25NZXRob2RzYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgZW5mb3JjZUZsYWdFbnVtc2AgLSBEZWZhdWx0IGlzIGZhbHNlLAogIC0gYGlubGluZU5hbWVkRGljdGlvbmFyaWVzYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgaW5saW5lTmFtZWRUdXBsZXNgIC0gRGVmYXVsdCBpcyB0cnVlLAogIC0gYGlubGluZU5hbWVkQXJyYXlzYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgZ2VuZXJhdGVPcHRpb25hbFByb3BlcnRpZXNBc051bGxhYmxlYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgZ2VuZXJhdGVOdWxsYWJsZVJlZmVyZW5jZVR5cGVzYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgZ2VuZXJhdGVOYXRpdmVSZWNvcmRzYCAtIERlZmF1bHQgaXMgZmFsc2UKICAtIGBnZW5lcmF0ZURlZmF1bHRWYWx1ZXNgIC0gRGVmYXVsdCBpcyB0cnVlCiAgLSBgaW5saW5lTmFtZWRBbnlgIC0gRGVmYXVsdCBpcyBmYWxzZQogIC0gYGV4Y2x1ZGVkVHlwZU5hbWVzYCAtIERlZmF1bHQgaXMgZW1wdHkKCgojIFVzaW5nIHRoZSBnZW5lcmF0ZWQgY29kZQoKSGVyZSdzIGFuIGV4YW1wbGUgZ2VuZXJhdGVkIG91dHB1dCBmcm9tIHRoZSBbU3dhZ2dlciBQZXRzdG9yZSBleGFtcGxlXShodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvKSB1c2luZyB0aGUgZGVmYXVsdCBzZXR0aW5ncwoKKipDTEkgVG9vbCoqCgpgYGBiYXNoCiQgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uYW1lc3BhY2UgIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIgpgYGAKCioqU291cmNlIEdlbmVyYXRvciAqKioucmVmaXR0ZXIqKiogZmlsZSoqCgpgYGBqc29uCnsKICAib3BlbkFwaVBhdGgiOiAiLi9vcGVuYXBpLmpzb24iLAogICJuYW1lc3BhY2UiOiAiWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUiCn0KYGBgCgoqKk91dHB1dCoqCgpgYGBjcwp1c2luZyBSZWZpdDsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpuYW1lc3BhY2UgWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUKewogICAgcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElTd2FnZ2VyUGV0c3RvcmUKICAgIHsKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIFVwZGF0ZSBhbiBleGlzdGluZyBwZXQgYnkgSWQKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtQdXQoIi9wZXQiKV0KICAgICAgICBUYXNrPFBldD4gVXBkYXRlUGV0KFtCb2R5XSBQZXQgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gQWRkIGEgbmV3IHBldCB0byB0aGUgc3RvcmUKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtQb3N0KCIvcGV0IildCiAgICAgICAgVGFzazxQZXQ+IEFkZFBldChbQm9keV0gUGV0IGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIE11bHRpcGxlIHN0YXR1cyB2YWx1ZXMgY2FuIGJlIHByb3ZpZGVkIHdpdGggY29tbWEgc2VwYXJhdGVkIHN0cmluZ3MKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtHZXQoIi9wZXQvZmluZEJ5U3RhdHVzIildCiAgICAgICAgVGFzazxJQ29sbGVjdGlvbjxQZXQ+PiBGaW5kUGV0c0J5U3RhdHVzKFtRdWVyeV0gU3RhdHVzPyBzdGF0dXMpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIE11bHRpcGxlIHRhZ3MgY2FuIGJlIHByb3ZpZGVkIHdpdGggY29tbWEgc2VwYXJhdGVkIHN0cmluZ3MuIFVzZSB0YWcxLCB0YWcyLCB0YWczIGZvciB0ZXN0aW5nLgogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW0dldCgiL3BldC9maW5kQnlUYWdzIildCiAgICAgICAgVGFzazxJQ29sbGVjdGlvbjxQZXQ+PiBGaW5kUGV0c0J5VGFncyhbUXVlcnkoQ29sbGVjdGlvbkZvcm1hdC5NdWx0aSldIElFbnVtZXJhYmxlPHN0cmluZz4gdGFncyk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gUmV0dXJucyBhIHNpbmdsZSBwZXQKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtHZXQoIi9wZXQve3BldElkfSIpXQogICAgICAgIFRhc2s8UGV0PiBHZXRQZXRCeUlkKGxvbmcgcGV0SWQpOwoKICAgICAgICBbUG9zdCgiL3BldC97cGV0SWR9IildCiAgICAgICAgVGFzayBVcGRhdGVQZXRXaXRoRm9ybShsb25nIHBldElkLCBbUXVlcnldIHN0cmluZyBuYW1lLCBbUXVlcnldIHN0cmluZyBzdGF0dXMpOwoKICAgICAgICBbRGVsZXRlKCIvcGV0L3twZXRJZH0iKV0KICAgICAgICBUYXNrIERlbGV0ZVBldChsb25nIHBldElkLCBbSGVhZGVyKCJhcGlfa2V5IildIHN0cmluZyBhcGlfa2V5KTsKCiAgICAgICAgW1Bvc3QoIi9wZXQve3BldElkfS91cGxvYWRJbWFnZSIpXQogICAgICAgIFRhc2s8QXBpUmVzcG9uc2U+IFVwbG9hZEZpbGUobG9uZyBwZXRJZCwgW1F1ZXJ5XSBzdHJpbmcgYWRkaXRpb25hbE1ldGFkYXRhLCBTdHJlYW1QYXJ0IGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIFJldHVybnMgYSBtYXAgb2Ygc3RhdHVzIGNvZGVzIHRvIHF1YW50aXRpZXMKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtHZXQoIi9zdG9yZS9pbnZlbnRvcnkiKV0KICAgICAgICBUYXNrPElEaWN0aW9uYXJ5PHN0cmluZywgaW50Pj4gR2V0SW52ZW50b3J5KCk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gUGxhY2UgYSBuZXcgb3JkZXIgaW4gdGhlIHN0b3JlCiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbUG9zdCgiL3N0b3JlL29yZGVyIildCiAgICAgICAgVGFzazxPcmRlcj4gUGxhY2VPcmRlcihbQm9keV0gT3JkZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gRm9yIHZhbGlkIHJlc3BvbnNlIHRyeSBpbnRlZ2VyIElEcyB3aXRoIHZhbHVlIDw9IDUgb3IgPiAxMC4gT3RoZXIgdmFsdWVzIHdpbGwgZ2VuZXJhdGVkIGV4Y2VwdGlvbnMKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtHZXQoIi9zdG9yZS9vcmRlci97b3JkZXJJZH0iKV0KICAgICAgICBUYXNrPE9yZGVyPiBHZXRPcmRlckJ5SWQobG9uZyBvcmRlcklkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgIC8vLyBGb3IgdmFsaWQgcmVzcG9uc2UgdHJ5IGludGVnZXIgSURzIHdpdGggdmFsdWUgPCAxMDAwLiBBbnl0aGluZyBhYm92ZSAxMDAwIG9yIG5vbmludGVnZXJzIHdpbGwgZ2VuZXJhdGUgQVBJIGVycm9ycwogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW0RlbGV0ZSgiL3N0b3JlL29yZGVyL3tvcmRlcklkfSIpXQogICAgICAgIFRhc2sgRGVsZXRlT3JkZXIobG9uZyBvcmRlcklkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgIC8vLyBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLgogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW1Bvc3QoIi91c2VyIildCiAgICAgICAgVGFzayBDcmVhdGVVc2VyKFtCb2R5XSBVc2VyIGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIENyZWF0ZXMgbGlzdCBvZiB1c2VycyB3aXRoIGdpdmVuIGlucHV0IGFycmF5CiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbUG9zdCgiL3VzZXIvY3JlYXRlV2l0aExpc3QiKV0KICAgICAgICBUYXNrPFVzZXI+IENyZWF0ZVVzZXJzV2l0aExpc3RJbnB1dChbQm9keV0gSUVudW1lcmFibGU8VXNlcj4gYm9keSk7CgogICAgICAgIFtHZXQoIi91c2VyL2xvZ2luIildCiAgICAgICAgVGFzazxzdHJpbmc+IExvZ2luVXNlcihbUXVlcnldIHN0cmluZyB1c2VybmFtZSwgW1F1ZXJ5XSBzdHJpbmcgcGFzc3dvcmQpOwoKICAgICAgICBbR2V0KCIvdXNlci9sb2dvdXQiKV0KICAgICAgICBUYXNrIExvZ291dFVzZXIoKTsKCiAgICAgICAgW0dldCgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgICAgIFRhc2s8VXNlcj4gR2V0VXNlckJ5TmFtZShzdHJpbmcgdXNlcm5hbWUpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIFRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieSB0aGUgbG9nZ2VkIGluIHVzZXIuCiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbUHV0KCIvdXNlci97dXNlcm5hbWV9IildCiAgICAgICAgVGFzayBVcGRhdGVVc2VyKHN0cmluZyB1c2VybmFtZSwgW0JvZHldIFVzZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gVGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci4KICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtEZWxldGUoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgICAgICBUYXNrIERlbGV0ZVVzZXIoc3RyaW5nIHVzZXJuYW1lKTsKICAgIH0KfQpgYGAKCkhlcmUncyBhbiBleGFtcGxlIGdlbmVyYXRlZCBvdXRwdXQgZnJvbSB0aGUgW1N3YWdnZXIgUGV0c3RvcmUgZXhhbXBsZV0oaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pbykgY29uZmlndXJlZCB0byB3cmFwIHRoZSByZXR1cm4gdHlwZSBpbiBgSUFwaVJlc3BvbnNlPFQ+YAoKKipDTEkgVG9vbCoqCgpgYGBiYXNoCiQgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uYW1lc3BhY2UgIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiAtLXVzZS1hcGktcmVzcG9uc2UKYGBgCgoqKlNvdXJjZSBHZW5lcmF0b3IgKioqLnJlZml0dGVyKioqIGZpbGUqKgoKYGBganNvbgp7CiAgIm9wZW5BcGlQYXRoIjogIi4vb3BlbmFwaS5qc29uIiwKICAibmFtZXNwYWNlIjogIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiwKICAicmV0dXJuSUFwaVJlc3BvbnNlIjogdHJ1ZQp9CmBgYAoKKipPdXRwdXQqKgoKYGBgY3MKdXNpbmcgUmVmaXQ7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwoKbmFtZXNwYWNlIFlvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlLldpdGhBcGlSZXNwb25zZQp7CiAgICBwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSVN3YWdnZXJQZXRzdG9yZQogICAgewogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gVXBkYXRlIGFuIGV4aXN0aW5nIHBldCBieSBJZAogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW1B1dCgiL3BldCIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPFBldD4+IFVwZGF0ZVBldChbQm9keV0gUGV0IGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIEFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlCiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbUG9zdCgiL3BldCIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPFBldD4+IEFkZFBldChbQm9keV0gUGV0IGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIE11bHRpcGxlIHN0YXR1cyB2YWx1ZXMgY2FuIGJlIHByb3ZpZGVkIHdpdGggY29tbWEgc2VwYXJhdGVkIHN0cmluZ3MKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtHZXQoIi9wZXQvZmluZEJ5U3RhdHVzIildCiAgICAgICAgVGFzazxJQXBpUmVzcG9uc2U8SUNvbGxlY3Rpb248UGV0Pj4+IEZpbmRQZXRzQnlTdGF0dXMoW1F1ZXJ5XSBTdGF0dXM/IHN0YXR1cyk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gTXVsdGlwbGUgdGFncyBjYW4gYmUgcHJvdmlkZWQgd2l0aCBjb21tYSBzZXBhcmF0ZWQgc3RyaW5ncy4gVXNlIHRhZzEsIHRhZzIsIHRhZzMgZm9yIHRlc3RpbmcuCiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbR2V0KCIvcGV0L2ZpbmRCeVRhZ3MiKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxJQ29sbGVjdGlvbjxQZXQ+Pj4gRmluZFBldHNCeVRhZ3MoW1F1ZXJ5KENvbGxlY3Rpb25Gb3JtYXQuTXVsdGkpXSBJRW51bWVyYWJsZTxzdHJpbmc+IHRhZ3MpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIFJldHVybnMgYSBzaW5nbGUgcGV0CiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbR2V0KCIvcGV0L3twZXRJZH0iKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxQZXQ+PiBHZXRQZXRCeUlkKGxvbmcgcGV0SWQpOwoKICAgICAgICBbUG9zdCgiL3BldC97cGV0SWR9IildCiAgICAgICAgVGFzayBVcGRhdGVQZXRXaXRoRm9ybShsb25nIHBldElkLCBbUXVlcnldIHN0cmluZyBuYW1lLCBbUXVlcnldIHN0cmluZyBzdGF0dXMpOwoKICAgICAgICBbRGVsZXRlKCIvcGV0L3twZXRJZH0iKV0KICAgICAgICBUYXNrIERlbGV0ZVBldChsb25nIHBldElkLCBbSGVhZGVyKCJhcGlfa2V5IildIHN0cmluZyBhcGlfa2V5KTsKCiAgICAgICAgW1Bvc3QoIi9wZXQve3BldElkfS91cGxvYWRJbWFnZSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPEFwaVJlc3BvbnNlPj4gVXBsb2FkRmlsZShsb25nIHBldElkLCBbUXVlcnldIHN0cmluZyBhZGRpdGlvbmFsTWV0YWRhdGEsIFN0cmVhbVBhcnQgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gUmV0dXJucyBhIG1hcCBvZiBzdGF0dXMgY29kZXMgdG8gcXVhbnRpdGllcwogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW0dldCgiL3N0b3JlL2ludmVudG9yeSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPElEaWN0aW9uYXJ5PHN0cmluZywgaW50Pj4+IEdldEludmVudG9yeSgpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIFBsYWNlIGEgbmV3IG9yZGVyIGluIHRoZSBzdG9yZQogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW1Bvc3QoIi9zdG9yZS9vcmRlciIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPE9yZGVyPj4gUGxhY2VPcmRlcihbQm9keV0gT3JkZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gRm9yIHZhbGlkIHJlc3BvbnNlIHRyeSBpbnRlZ2VyIElEcyB3aXRoIHZhbHVlIDw9IDUgb3IgPiAxMC4gT3RoZXIgdmFsdWVzIHdpbGwgZ2VuZXJhdGVkIGV4Y2VwdGlvbnMKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtHZXQoIi9zdG9yZS9vcmRlci97b3JkZXJJZH0iKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxPcmRlcj4+IEdldE9yZGVyQnlJZChsb25nIG9yZGVySWQpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIEZvciB2YWxpZCByZXNwb25zZSB0cnkgaW50ZWdlciBJRHMgd2l0aCB2YWx1ZSA8IDEwMDAuIEFueXRoaW5nIGFib3ZlIDEwMDAgb3Igbm9uaW50ZWdlcnMgd2lsbCBnZW5lcmF0ZSBBUEkgZXJyb3JzCiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbRGVsZXRlKCIvc3RvcmUvb3JkZXIve29yZGVySWR9IildCiAgICAgICAgVGFzayBEZWxldGVPcmRlcihsb25nIG9yZGVySWQpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIFRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieSB0aGUgbG9nZ2VkIGluIHVzZXIuCiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbUG9zdCgiL3VzZXIiKV0KICAgICAgICBUYXNrIENyZWF0ZVVzZXIoW0JvZHldIFVzZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gQ3JlYXRlcyBsaXN0IG9mIHVzZXJzIHdpdGggZ2l2ZW4gaW5wdXQgYXJyYXkKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtQb3N0KCIvdXNlci9jcmVhdGVXaXRoTGlzdCIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPFVzZXI+PiBDcmVhdGVVc2Vyc1dpdGhMaXN0SW5wdXQoW0JvZHldIElFbnVtZXJhYmxlPFVzZXI+IGJvZHkpOwoKICAgICAgICBbR2V0KCIvdXNlci9sb2dpbiIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPHN0cmluZz4+IExvZ2luVXNlcihbUXVlcnldIHN0cmluZyB1c2VybmFtZSwgW1F1ZXJ5XSBzdHJpbmcgcGFzc3dvcmQpOwoKICAgICAgICBbR2V0KCIvdXNlci9sb2dvdXQiKV0KICAgICAgICBUYXNrIExvZ291dFVzZXIoKTsKCiAgICAgICAgW0dldCgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPFVzZXI+PiBHZXRVc2VyQnlOYW1lKHN0cmluZyB1c2VybmFtZSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gVGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci4KICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtQdXQoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgICAgICBUYXNrIFVwZGF0ZVVzZXIoc3RyaW5nIHVzZXJuYW1lLCBbQm9keV0gVXNlciBib2R5KTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgIC8vLyBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLgogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW0RlbGV0ZSgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgICAgIFRhc2sgRGVsZXRlVXNlcihzdHJpbmcgdXNlcm5hbWUpOwogICAgfQp9CmBgYAoKSGVyZSdzIGFuIGV4YW1wbGUgZ2VuZXJhdGVkIG91dHB1dCBmcm9tIHRoZSBbU3dhZ2dlciBQZXRzdG9yZSBleGFtcGxlXShodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvKSBjb25maWd1cmVkIHRvIGdlbmVyYXRlIGFuIGludGVyZmFjZSBmb3IgZWFjaCBlbmRwb2ludAoKKipDTEkgVG9vbCoqCgpgYGBiYXNoCiQgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uYW1lc3BhY2UgIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiAtLW11bHRpcGxlLWludGVyZmFjZXMgQnlFbmRwb2ludApgYGAKCioqU291cmNlIEdlbmVyYXRvciAqKioucmVmaXR0ZXIqKiogZmlsZSoqCgpgYGBqc29uCnsKICAib3BlbkFwaVBhdGgiOiAiLi9vcGVuYXBpLmpzb24iLAogICJuYW1lc3BhY2UiOiAiWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUiLAogICJtdWx0aXBsZUludGVyZmFjZXMiOiAiQnlFbmRwb2ludCIKfQpgYGAKCioqT3V0cHV0KioKCmBgYGNzCi8vLyA8c3VtbWFyeT4KLy8vIFVwZGF0ZSBhbiBleGlzdGluZyBwZXQKLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElVcGRhdGVQZXRFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gVXBkYXRlIGFuIGV4aXN0aW5nIHBldCBieSBJZAogICAgLy8vIDwvc3VtbWFyeT4KICAgIFtQdXQoIi9wZXQiKV0KICAgIFRhc2s8UGV0PiBFeGVjdXRlKFtCb2R5XSBQZXQgYm9keSk7Cn0KCi8vLyA8c3VtbWFyeT4KLy8vIEFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJQWRkUGV0RW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIEFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgW1Bvc3QoIi9wZXQiKV0KICAgIFRhc2s8UGV0PiBFeGVjdXRlKFtCb2R5XSBQZXQgYm9keSk7Cn0KCi8vLyA8c3VtbWFyeT4KLy8vIEZpbmRzIFBldHMgYnkgc3RhdHVzCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJRmluZFBldHNCeVN0YXR1c0VuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT4KICAgIC8vLyBNdWx0aXBsZSBzdGF0dXMgdmFsdWVzIGNhbiBiZSBwcm92aWRlZCB3aXRoIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmdzCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgW0dldCgiL3BldC9maW5kQnlTdGF0dXMiKV0KICAgIFRhc2s8SUNvbGxlY3Rpb248UGV0Pj4gRXhlY3V0ZShbUXVlcnldIFN0YXR1cz8gc3RhdHVzKTsKfQoKLy8vIDxzdW1tYXJ5PgovLy8gRmluZHMgUGV0cyBieSB0YWdzCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJRmluZFBldHNCeVRhZ3NFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gTXVsdGlwbGUgdGFncyBjYW4gYmUgcHJvdmlkZWQgd2l0aCBjb21tYSBzZXBhcmF0ZWQgc3RyaW5ncy4gVXNlIHRhZzEsIHRhZzIsIHRhZzMgZm9yIHRlc3RpbmcuCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgW0dldCgiL3BldC9maW5kQnlUYWdzIildCiAgICBUYXNrPElDb2xsZWN0aW9uPFBldD4+IEV4ZWN1dGUoW1F1ZXJ5KENvbGxlY3Rpb25Gb3JtYXQuTXVsdGkpXSBJRW51bWVyYWJsZTxzdHJpbmc+IHRhZ3MpOwp9CgovLy8gPHN1bW1hcnk+Ci8vLyBGaW5kIHBldCBieSBJRAovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSUdldFBldEJ5SWRFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gUmV0dXJucyBhIHNpbmdsZSBwZXQKICAgIC8vLyA8L3N1bW1hcnk+CiAgICBbR2V0KCIvcGV0L3twZXRJZH0iKV0KICAgIFRhc2s8UGV0PiBFeGVjdXRlKGxvbmcgcGV0SWQpOwp9CgovLy8gPHN1bW1hcnk+Ci8vLyBVcGRhdGVzIGEgcGV0IGluIHRoZSBzdG9yZSB3aXRoIGZvcm0gZGF0YQovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSVVwZGF0ZVBldFdpdGhGb3JtRW5kcG9pbnQKewogICAgW1Bvc3QoIi9wZXQve3BldElkfSIpXQogICAgVGFzayBFeGVjdXRlKGxvbmcgcGV0SWQsIFtRdWVyeV0gc3RyaW5nIG5hbWUsIFtRdWVyeV0gc3RyaW5nIHN0YXR1cyk7Cn0KCi8vLyA8c3VtbWFyeT4KLy8vIERlbGV0ZXMgYSBwZXQKLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElEZWxldGVQZXRFbmRwb2ludAp7CiAgICBbRGVsZXRlKCIvcGV0L3twZXRJZH0iKV0KICAgIFRhc2sgRXhlY3V0ZShsb25nIHBldElkLCBbSGVhZGVyKCJhcGlfa2V5IildIHN0cmluZyBhcGlfa2V5KTsKfQoKLy8vIDxzdW1tYXJ5PgovLy8gdXBsb2FkcyBhbiBpbWFnZQovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSVVwbG9hZEZpbGVFbmRwb2ludAp7CiAgICBbUG9zdCgiL3BldC97cGV0SWR9L3VwbG9hZEltYWdlIildCiAgICBUYXNrPEFwaVJlc3BvbnNlPiBFeGVjdXRlKGxvbmcgcGV0SWQsIFtRdWVyeV0gc3RyaW5nIGFkZGl0aW9uYWxNZXRhZGF0YSwgU3RyZWFtUGFydCBib2R5KTsKfQoKLy8vIDxzdW1tYXJ5PgovLy8gUmV0dXJucyBwZXQgaW52ZW50b3JpZXMgYnkgc3RhdHVzCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJR2V0SW52ZW50b3J5RW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIFJldHVybnMgYSBtYXAgb2Ygc3RhdHVzIGNvZGVzIHRvIHF1YW50aXRpZXMKICAgIC8vLyA8L3N1bW1hcnk+CiAgICBbR2V0KCIvc3RvcmUvaW52ZW50b3J5IildCiAgICBUYXNrPElEaWN0aW9uYXJ5PHN0cmluZywgaW50Pj4gRXhlY3V0ZSgpOwp9CgovLy8gPHN1bW1hcnk+Ci8vLyBQbGFjZSBhbiBvcmRlciBmb3IgYSBwZXQKLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElQbGFjZU9yZGVyRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIFBsYWNlIGEgbmV3IG9yZGVyIGluIHRoZSBzdG9yZQogICAgLy8vIDwvc3VtbWFyeT4KICAgIFtQb3N0KCIvc3RvcmUvb3JkZXIiKV0KICAgIFRhc2s8T3JkZXI+IEV4ZWN1dGUoW0JvZHldIE9yZGVyIGJvZHkpOwp9CgovLy8gPHN1bW1hcnk+Ci8vLyBGaW5kIHB1cmNoYXNlIG9yZGVyIGJ5IElECi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJR2V0T3JkZXJCeUlkRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIEZvciB2YWxpZCByZXNwb25zZSB0cnkgaW50ZWdlciBJRHMgd2l0aCB2YWx1ZSA8PSA1IG9yID4gMTAuIE90aGVyIHZhbHVlcyB3aWxsIGdlbmVyYXRlZCBleGNlcHRpb25zCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgW0dldCgiL3N0b3JlL29yZGVyL3tvcmRlcklkfSIpXQogICAgVGFzazxPcmRlcj4gRXhlY3V0ZShsb25nIG9yZGVySWQpOwp9CgovLy8gPHN1bW1hcnk+Ci8vLyBEZWxldGUgcHVyY2hhc2Ugb3JkZXIgYnkgSUQKLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElEZWxldGVPcmRlckVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT4KICAgIC8vLyBGb3IgdmFsaWQgcmVzcG9uc2UgdHJ5IGludGVnZXIgSURzIHdpdGggdmFsdWUgPCAxMDAwLiBBbnl0aGluZyBhYm92ZSAxMDAwIG9yIG5vbmludGVnZXJzIHdpbGwgZ2VuZXJhdGUgQVBJIGVycm9ycwogICAgLy8vIDwvc3VtbWFyeT4KICAgIFtEZWxldGUoIi9zdG9yZS9vcmRlci97b3JkZXJJZH0iKV0KICAgIFRhc2sgRXhlY3V0ZShsb25nIG9yZGVySWQpOwp9CgovLy8gPHN1bW1hcnk+Ci8vLyBDcmVhdGUgdXNlcgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSUNyZWF0ZVVzZXJFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gVGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci4KICAgIC8vLyA8L3N1bW1hcnk+CiAgICBbUG9zdCgiL3VzZXIiKV0KICAgIFRhc2sgRXhlY3V0ZShbQm9keV0gVXNlciBib2R5KTsKfQoKLy8vIDxzdW1tYXJ5PgovLy8gQ3JlYXRlcyBsaXN0IG9mIHVzZXJzIHdpdGggZ2l2ZW4gaW5wdXQgYXJyYXkKLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElDcmVhdGVVc2Vyc1dpdGhMaXN0SW5wdXRFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gQ3JlYXRlcyBsaXN0IG9mIHVzZXJzIHdpdGggZ2l2ZW4gaW5wdXQgYXJyYXkKICAgIC8vLyA8L3N1bW1hcnk+CiAgICBbUG9zdCgiL3VzZXIvY3JlYXRlV2l0aExpc3QiKV0KICAgIFRhc2s8VXNlcj4gRXhlY3V0ZShbQm9keV0gSUVudW1lcmFibGU8VXNlcj4gYm9keSk7Cn0KCi8vLyA8c3VtbWFyeT4KLy8vIExvZ3MgdXNlciBpbnRvIHRoZSBzeXN0ZW0KLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElMb2dpblVzZXJFbmRwb2ludAp7CiAgICBbR2V0KCIvdXNlci9sb2dpbiIpXQogICAgVGFzazxzdHJpbmc+IEV4ZWN1dGUoW1F1ZXJ5XSBzdHJpbmcgdXNlcm5hbWUsIFtRdWVyeV0gc3RyaW5nIHBhc3N3b3JkKTsKfQoKLy8vIDxzdW1tYXJ5PgovLy8gTG9ncyBvdXQgY3VycmVudCBsb2dnZWQgaW4gdXNlciBzZXNzaW9uCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJTG9nb3V0VXNlckVuZHBvaW50CnsKICAgIFtHZXQoIi91c2VyL2xvZ291dCIpXQogICAgVGFzayBFeGVjdXRlKCk7Cn0KCi8vLyA8c3VtbWFyeT4KLy8vIEdldCB1c2VyIGJ5IHVzZXIgbmFtZQovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSUdldFVzZXJCeU5hbWVFbmRwb2ludAp7CiAgICBbR2V0KCIvdXNlci97dXNlcm5hbWV9IildCiAgICBUYXNrPFVzZXI+IEV4ZWN1dGUoc3RyaW5nIHVzZXJuYW1lKTsKfQoKLy8vIDxzdW1tYXJ5PgovLy8gVXBkYXRlIHVzZXIKLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElVcGRhdGVVc2VyRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIFRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieSB0aGUgbG9nZ2VkIGluIHVzZXIuCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgW1B1dCgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgVGFzayBFeGVjdXRlKHN0cmluZyB1c2VybmFtZSwgW0JvZHldIFVzZXIgYm9keSk7Cn0KCi8vLyA8c3VtbWFyeT4KLy8vIERlbGV0ZSB1c2VyCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJRGVsZXRlVXNlckVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT4KICAgIC8vLyBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLgogICAgLy8vIDwvc3VtbWFyeT4KICAgIFtEZWxldGUoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgIFRhc2sgRXhlY3V0ZShzdHJpbmcgdXNlcm5hbWUpOwp9CmBgYAoKIyMgUmVzdFNlcnZpY2UKCkhlcmUncyBhbiBleGFtcGxlIHVzYWdlIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSBhYm92ZQoKYGBgY3MKdXNpbmcgUmVmaXQ7CnVzaW5nIFN5c3RlbTsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKCm5hbWVzcGFjZSBZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZTsKCmludGVybmFsIGNsYXNzIFByb2dyYW0KewogICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgVGFzayBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgdmFyIGNsaWVudCA9IFJlc3RTZXJ2aWNlLkZvcjxJU3dhZ2dlclBldHN0b3JlPigiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9hcGkvdjMiKTsKICAgICAgICB2YXIgcGV0ID0gYXdhaXQgY2xpZW50LkdldFBldEJ5SWQoMSk7CgogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCIjIyBVc2luZyBUYXNrPFQ+IGFzIHJldHVybiB0eXBlICMjIik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJOYW1lOiB7cGV0Lk5hbWV9Iik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJDYXRlZ29yeToge3BldC5DYXRlZ29yeS5OYW1lfSIpOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCQiU3RhdHVzOiB7cGV0LlN0YXR1c30iKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgpOwoKICAgICAgICB2YXIgY2xpZW50MiA9IFJlc3RTZXJ2aWNlLkZvcjxXaXRoQXBpUmVzcG9uc2UuSVN3YWdnZXJQZXRzdG9yZT4oImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIik7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gYXdhaXQgY2xpZW50Mi5HZXRQZXRCeUlkKDIpOwoKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiIyMgVXNpbmcgVGFzazxJQXBpUmVzcG9uc2U8VD4+IGFzIHJldHVybiB0eXBlICMjIik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJIVFRQIFN0YXR1cyBDb2RlOiB7cmVzcG9uc2UuU3RhdHVzQ29kZX0iKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgkIk5hbWU6IHtyZXNwb25zZS5Db250ZW50Lk5hbWV9Iik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJDYXRlZ29yeToge3Jlc3BvbnNlLkNvbnRlbnQuQ2F0ZWdvcnkuTmFtZX0iKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgkIlN0YXR1czoge3Jlc3BvbnNlLkNvbnRlbnQuU3RhdHVzfSIpOwogICAgfQp9CmBgYAoKVGhlIGBSZXN0U2VydmljZWAgY2xhc3MgZ2VuZXJhdGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIGBJU3dhZ2dlclBldHN0b3JlYCB0aGF0IHVzZXMgYEh0dHBDbGllbnRgIHRvIG1ha2UgaXRzIGNhbGxzLiAKClRoZSBjb2RlIGFib3ZlIHdoZW4gcnVuIHdpbGwgb3V0cHV0IHNvbWV0aGluZyBsaWtlIHRoaXM6CgpgYGAKIyMgVXNpbmcgVGFzazxUPiBhcyByZXR1cm4gdHlwZSAjIwpOYW1lOiBHYXRpdG90b3RvdG8KQ2F0ZWdvcnk6IENoYXVjaXRvClN0YXR1czogU29sZAoKIyMgVXNpbmcgVGFzazxJQXBpUmVzcG9uc2U8VD4+IGFzIHJldHVybiB0eXBlICMjCkhUVFAgU3RhdHVzIENvZGU6IE9LCk5hbWU6IEdhdGl0b3RvdG90bwpDYXRlZ29yeTogQ2hhdWNpdG8KU3RhdHVzOiBTb2xkCmBgYAoKIyMgQVNQLk5FVCBDb3JlIGFuZCBIdHRwQ2xpZW50RmFjdG9yeQoKSGVyZSdzIGFuIGV4YW1wbGUgTWluaW1hbCBBUEkgd2l0aCB0aGUgW2BSZWZpdC5IdHRwQ2xpZW50RmFjdG9yeWBdKGh0dHBzOi8vd3d3Lm51Z2V0Lm9yZy9wYWNrYWdlcy9SZWZpdC5IdHRwQ2xpZW50RmFjdG9yeSkgbGlicmFyeToKCmBgYGNzCnVzaW5nIFJlZml0Owp1c2luZyBZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZTsKCnZhciBidWlsZGVyID0gV2ViQXBwbGljYXRpb24uQ3JlYXRlQnVpbGRlcihhcmdzKTsKYnVpbGRlci5TZXJ2aWNlcy5BZGRFbmRwb2ludHNBcGlFeHBsb3JlcigpOwpidWlsZGVyLlNlcnZpY2VzLkFkZFN3YWdnZXJHZW4oKTsKYnVpbGRlci5TZXJ2aWNlcwogICAgLkFkZFJlZml0Q2xpZW50PElTd2FnZ2VyUGV0c3RvcmU+KCkKICAgIC5Db25maWd1cmVIdHRwQ2xpZW50KGMgPT4gYy5CYXNlQWRkcmVzcyA9IG5ldyBVcmkoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIikpOwoKdmFyIGFwcCA9IGJ1aWxkZXIuQnVpbGQoKTsKYXBwLk1hcEdldCgKICAgICAgICAiL3BldC97aWQ6bG9uZ30iLAogICAgICAgIGFzeW5jIChJU3dhZ2dlclBldHN0b3JlIHBldHN0b3JlLCBsb25nIGlkKSA9PgogICAgICAgIHsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRzLk9rKGF3YWl0IHBldHN0b3JlLkdldFBldEJ5SWQoaWQpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoUmVmaXQuQXBpRXhjZXB0aW9uIGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRzLlN0YXR1c0NvZGUoKGludCllLlN0YXR1c0NvZGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSkKICAgIC5XaXRoTmFtZSgiR2V0UGV0QnlJZCIpCiAgICAuV2l0aE9wZW5BcGkoKTsKCmFwcC5Vc2VIdHRwc1JlZGlyZWN0aW9uKCk7CmFwcC5Vc2VTd2FnZ2VyVUkoKTsKYXBwLlVzZVN3YWdnZXIoKTsKYXBwLlJ1bigpOwpgYGAKCi5ORVQgQ29yZSBzdXBwb3J0cyByZWdpc3RlcmluZyB0aGUgZ2VuZXJhdGVkIGBJU3dhZ2dlclBldHN0b3JlYCBpbnRlcmZhY2UgdmlhIGBIdHRwQ2xpZW50RmFjdG9yeWAKClRoZSBmb2xsb3dpbmcgcmVxdWVzdCB0byB0aGUgQVBJIGFib3ZlCmBgYHNoZWxsCiQgY3VybCAtWCAnR0VUJyAnaHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMS9wZXQvMScgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbicKYGBgCgpSZXR1cm5zIGEgcmVzcG9uc2UgdGhhdCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOgpgYGBqc29uCnsKICAiaWQiOiAxLAogICJuYW1lIjogIlNwZWNpYWxfY2hhcl9vd25lcl8hQCMkXiYoKWAudGVzdGluZyIsCiAgInBob3RvVXJscyI6IFsKICAgICJodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvL3Jlc291cmNlcy9waG90b3MvNjIzMzg5MDk1LmpwZyIKICBdLAogICJ0YWdzIjogW10sCiAgInN0YXR1cyI6ICJTb2xkIgp9CmBgYAoKIyMgU3lzdGVtIHJlcXVpcmVtZW50cwouTkVUIDYuMCAoTFRTKQoKIyMgQ29udHJpYnV0b3JzCgo8IS0tIEFMTC1DT05UUklCVVRPUlMtTElTVDpTVEFSVCAtIERvIG5vdCByZW1vdmUgb3IgbW9kaWZ5IHRoaXMgc2VjdGlvbiAtLT4KPCEtLSBwcmV0dGllci1pZ25vcmUtc3RhcnQgLS0+CjwhLS0gbWFya2Rvd25saW50LWRpc2FibGUgLS0+Cjx0YWJsZT4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL25lb0dlbmV2YSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS84MDQ3MjQ/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IlBoaWxpcCBDb3giLz48YnIgLz48c3ViPjxiPlBoaWxpcCBDb3g8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1uZW9HZW5ldmEiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9jYW0ubWFjZmFyLmxhbmQvIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEyOTg4NDc/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkNhbWVyb24gTWFjRmFybGFuZCIvPjxiciAvPjxzdWI+PGI+Q2FtZXJvbiBNYWNGYXJsYW5kPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9ZGlzdGFudGNhbSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwOi8va2dhbWUudHciPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzY0NjUzMj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0ia2dhbWUiLz48YnIgLz48c3ViPjxiPmtnYW1lPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9a2dhbWVjYXJ0ZXIiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cDovL3lya2kubm8iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTE1NzM2MDE/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IlRob21hcyBQZXR0ZXJzZW4gLyBZcmtpIi8+PGJyIC8+PHN1Yj48Yj5UaG9tYXMgUGV0dGVyc2VuIC8gWXJraTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vMWt2aW4iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNDY0MjU5ODA/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkFydGVtIi8+PGJyIC8+PHN1Yj48Yj5BcnRlbTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQTFrdmluIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbTdjbGFya2UiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNDc0MzkxNDQ/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9Im03Y2xhcmtlIi8+PGJyIC8+PHN1Yj48Yj5tN2NsYXJrZTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQW03Y2xhcmtlIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va2lyaWRlcyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMzYwMjE0Mz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0ia2lyaWRlcyIvPjxiciAvPjxzdWI+PGI+a2lyaWRlczwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQWtpcmlkZXMiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPWtpcmlkZXMiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9ndWlsbGF1bWVzZXJhbGUiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNjY3MjQwNj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iZ3VpbGxhdW1lc2VyYWxlIi8+PGJyIC8+PHN1Yj48Yj5ndWlsbGF1bWVzZXJhbGU8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1ndWlsbGF1bWVzZXJhbGUiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZ3VpbGxhdW1lc2VyYWxlIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vUm9mbGluY29wdGVyIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE2OTAyNDM/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkRlbm5pcyBCcmVudGplcyIvPjxiciAvPjxzdWI+PGI+RGVubmlzIEJyZW50amVzPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9Um9mbGluY29wdGVyIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT4gPGEgaHJlZj0iI2lkZWFzLVJvZmxpbmNvcHRlciIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9pbi9oaWNrZXlkYW1pYW4vIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzU3NDM2P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJEYW1pYW4gSGlja2V5Ii8+PGJyIC8+PHN1Yj48Yj5EYW1pYW4gSGlja2V5PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZGFtaWFuaCIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3JpY2hhcmRodS1sbWciPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI2NDMwNzg3P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJyaWNoYXJkaHUtbG1nIi8+PGJyIC8+PHN1Yj48Yj5yaWNoYXJkaHUtbG1nPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBcmljaGFyZGh1LWxtZyIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2JyZWFzZS1jb2xpbiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80NzM1ODkzNT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iYnJlYXNlLWNvbGluIi8+PGJyIC8+PHN1Yj48Yj5icmVhc2UtY29saW48L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FicmVhc2UtY29saW4iIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9hbmdlbG9mYiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8yMDMyMjU3P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJhbmdlbG9mYiIvPjxiciAvPjxzdWI+PGI+YW5nZWxvZmI8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1hbmdlbG9mYiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vTm9HUm8iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNTY2NTI3Mz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iRGltIE5vZ3JvIi8+PGJyIC8+PHN1Yj48Yj5EaW0gTm9ncm88L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1Ob0dSbyIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3lhZGFuaWxvdjE5Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE3MTYxMDY1P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJ5YWRhbmlsb3YxOSIvPjxiciAvPjxzdWI+PGI+eWFkYW5pbG92MTk8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy15YWRhbmlsb3YxOSIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9kYW5wb3dlbGw4OCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMTAwMzk3P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJEYW5pZWwgUG93ZWxsIi8+PGJyIC8+PHN1Yj48Yj5EYW5pZWwgUG93ZWxsPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZGFucG93ZWxsODgiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Fa2tlaXIiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzYxOTQ2ODU/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkVra2VpciIvPjxiciAvPjxzdWI+PGI+RWtrZWlyPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9RWtrZWlyIiB0aXRsZT0iRG9jdW1lbnRhdGlvbiI+8J+TljwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQUVra2VpciIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3dheWxvbm10eiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80NjA0NTc5P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJXYXlsb24gTWFydGluZXoiLz48YnIgLz48c3ViPjxiPldheWxvbiBNYXJ0aW5lejwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQXdheWxvbm10eiIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3ZpbmF5bWFkdXBhdGhpIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzM4MTAyOTAwP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJ2a21hZHVwYSIvPjxiciAvPjxzdWI+PGI+dmttYWR1cGE8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0F2aW5heW1hZHVwYXRoaSIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL05vYmxpeCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8yMjA3Njg4Mz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iTm9ibGl4Ii8+PGJyIC8+PHN1Yj48Yj5Ob2JsaXg8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1Ob2JsaXgiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPiA8YSBocmVmPSIjaWRlYXMtTm9ibGl4IiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cudmVlemxhLmlvIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzIzMDQzMj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQXR0aWxhIEhhamRyaWsiLz48YnIgLz48c3ViPjxiPkF0dGlsYSBIYWpkcmlrPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSIjaWRlYXMtYXR0aWxhaCIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYmllbGlrMDEiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvOTIwOTUwP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJiaWVsaWswMSIvPjxiciAvPjxzdWI+PGI+YmllbGlrMDE8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FiaWVsaWswMSIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPiA8YSBocmVmPSIjaWRlYXMtYmllbGlrMDEiIHRpdGxlPSJJZGVhcywgUGxhbm5pbmcsICYgRmVlZGJhY2siPvCfpJQ8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbmFhZWVmIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQzMzM5MDcxP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJuYWFlZWYiLz48YnIgLz48c3ViPjxiPm5hYWVlZjwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iI2lkZWFzLW5hYWVlZiIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9hbHJ6Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzMxMDU5Nzk/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkFsaXJlemEgSGFiaWJpIi8+PGJyIC8+PHN1Yj48Yj5BbGlyZXphIEhhYmliaTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQWFscnoiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9FRVBhcmtlciI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTg3NDA3Nj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iSmVmZiBQYXJrZXIsIFBFIi8+PGJyIC8+PHN1Yj48Yj5KZWZmIFBhcmtlciwgUEU8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FFRVBhcmtlciIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2pvZHM0Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzM4MzI4MjA/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9ImpvZHMiLz48YnIgLz48c3ViPjxiPmpvZHM8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1qb2RzNCIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9lZGltYXJxdWV6Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQxNzkxNzE5P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJFZGltYXJxdWV6IE1lZGVpcm9zIi8+PGJyIC8+PHN1Yj48Yj5FZGltYXJxdWV6IE1lZGVpcm9zPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9ZWRpbWFycXVleiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2FmYWtrZXNpa2NpIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzcwNjcyNTI/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9InNhZmFra2VzaWtjaSIvPjxiciAvPjxzdWI+PGI+c2FmYWtrZXNpa2NpPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBc2FmYWtrZXNpa2NpIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2ZvbGJyZWNodCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDU1Mzc4NDY/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9ImZvbGJyZWNodCIvPjxiciAvPjxzdWI+PGI+Zm9sYnJlY2h0PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZm9sYnJlY2h0IiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbW9ydGVubGF1cnNlbiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8yODc1OTczNz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0ibW9ydGVubGF1cnNlbiIvPjxiciAvPjxzdWI+PGI+bW9ydGVubGF1cnNlbjwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPW1vcnRlbmxhdXJzZW4iIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8IS0tIG1hcmtkb3dubGludC1yZXN0b3JlIC0tPgo8IS0tIHByZXR0aWVyLWlnbm9yZS1lbmQgLS0+Cgo8IS0tIEFMTC1DT05UUklCVVRPUlMtTElTVDpFTkQgLS0+CgojCgpGb3IgdGlwcyBhbmQgdHJpY2tzIG9uIHNvZnR3YXJlIGRldmVsb3BtZW50LCBjaGVjayBvdXQgW215IGJsb2ddKGh0dHBzOi8vY2hyaXN0aWFuaGVsbGUuY29tKQoKSWYgeW91IGZpbmQgdGhpcyB1c2VmdWwgYW5kIGZlZWwgYSBiaXQgZ2VuZXJvdXMgdGhlbiBmZWVsIGZyZWUgdG8gW2J1eSBtZSBhIGNvZmZlZSDimJVdKGh0dHBzOi8vd3d3LmJ1eW1lYWNvZmZlZS5jb20vY2hyaXN0aWFuaGVsbGUpCg== - readmeEtag: '"d4bb7cd5efa727c648fe60e52a1315ad8c6c9efb5850278afa67244fbceae93a"' - readmeLastModified: Mon, 11 Dec 2023 19:21:39 GMT + WyFbQnVpbGRdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9hY3Rpb25zL3dvcmtmbG93cy9idWlsZC55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2FjdGlvbnMvd29ya2Zsb3dzL2J1aWxkLnltbCkKWyFbU21va2UgVGVzdHNdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9hY3Rpb25zL3dvcmtmbG93cy9zbW9rZS10ZXN0cy55bWwvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2FjdGlvbnMvd29ya2Zsb3dzL3Ntb2tlLXRlc3RzLnltbCkKWyFbTnVHZXRdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vbnVnZXQvdi9yZWZpdHRlcj9jb2xvcj1ibHVlKV0oaHR0cHM6Ly93d3cubnVnZXQub3JnL3BhY2thZ2VzL3JlZml0dGVyKQpbIVtRdWFsaXR5IEdhdGUgU3RhdHVzXShodHRwczovL3NvbmFyY2xvdWQuaW8vYXBpL3Byb2plY3RfYmFkZ2VzL21lYXN1cmU/cHJvamVjdD1jaHJpc3RpYW5oZWxsZV9yZWZpdHRlciZtZXRyaWM9YWxlcnRfc3RhdHVzKV0oaHR0cHM6Ly9zb25hcmNsb3VkLmlvL3N1bW1hcnkvbmV3X2NvZGU/aWQ9Y2hyaXN0aWFuaGVsbGVfcmVmaXR0ZXIpClshW2NvZGVjb3ZdKGh0dHBzOi8vY29kZWNvdi5pby9naC9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9ncmFwaC9iYWRnZS5zdmc/dG9rZW49MjQyWVQxTjZUMildKGh0dHBzOi8vY29kZWNvdi5pby9naC9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlcikKWyFbUW9kYW5hXShodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvYWN0aW9ucy93b3JrZmxvd3MvcW9kYW5hLnltbC9iYWRnZS5zdmcpXShodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvYWN0aW9ucy93b3JrZmxvd3MvcW9kYW5hLnltbCkKCjwhLS0gQUxMLUNPTlRSSUJVVE9SUy1CQURHRTpTVEFSVCAtIERvIG5vdCByZW1vdmUgb3IgbW9kaWZ5IHRoaXMgc2VjdGlvbiAtLT4KWyFbQWxsIENvbnRyaWJ1dG9yc10oaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9iYWRnZS9hbGxfY29udHJpYnV0b3JzLTMxLW9yYW5nZS5zdmc/c3R5bGU9ZmxhdC1zcXVhcmUpXSgjY29udHJpYnV0b3JzLSkKPCEtLSBBTEwtQ09OVFJJQlVUT1JTLUJBREdFOkVORCAtLT4KCiMgUmVmaXR0ZXIKUmVmaXR0ZXIgaXMgYSB0b29sIGZvciBnZW5lcmF0aW5nIGEgQyMgUkVTVCBBUEkgQ2xpZW50IHVzaW5nIHRoZSBbUmVmaXRdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGl2ZXVpL3JlZml0KSBsaWJyYXJ5LiBSZWZpdHRlciBjYW4gZ2VuZXJhdGUgdGhlIFJlZml0IGludGVyZmFjZSBhbmQgY29udHJhY3RzIGZyb20gT3BlbkFQSSBzcGVjaWZpY2F0aW9ucy4gCgpSZWZpdHRlciBjb21lcyBpbiAyIGZvcm1zOgotIEEgWy5ORVQgQ0xJIFRvb2xdKCNjbGktdG9vbCkgZGlzdHJpYnV0ZWQgdmlhIFtudWdldC5vcmddKGh0dHA6Ly93d3cubnVnZXQub3JnL3BhY2thZ2VzL3JlZml0dGVyKSB0aGF0IG91dHB1dHMgYSBzaW5nbGUgQyMgZmlsZSBvbiBkaXNrCi0gQSBbQyMgU291cmNlIEdlbmVyYXRvcl0oI3NvdXJjZS1nZW5lcmF0b3IpIHZpYSB0aGUgW1JlZml0dGVyLlNvdXJjZUdlbmVyYXRvcl0oaHR0cDovL3d3dy5udWdldC5vcmcvcGFja2FnZXMvcmVmaXR0ZXIuc291cmNlZ2VuZXJhdG9yKSBwYWNrYWdlIHRoYXQgZ2VuZXJhdGVzIGNvZGUgb24gY29tcGlsZSB0aW1lIGJhc2VkIG9uIGEgWy5yZWZpdHRlcl0oIy5yZWZpdHRlci1maWxlLWZvcm1hdCkgd2l0aGluIHRoZSBwcm9qZWN0IGRpcmVjdG9yeS4KCiMjIENMSSBUb29sCgojIyMgSW5zdGFsbGF0aW9uOgoKVGhlIHRvb2wgaXMgcGFja2FnZWQgYXMgYSAuTkVUIFRvb2wgYW5kIGlzIHB1Ymxpc2hlZCB0byBudWdldC5vcmcuIFlvdSBjYW4gaW5zdGFsbCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyB0b29sIGxpa2UgdGhpczoKCmBgYHNoZWxsCmRvdG5ldCB0b29sIGluc3RhbGwgLS1nbG9iYWwgUmVmaXR0ZXIKYGBgCgojIyMgVXNhZ2U6CgpgYGBzaGVsbAokIHJlZml0dGVyIC0taGVscApgYGAKCmBgYApVU0FHRToKICAgIHJlZml0dGVyIFtVUkwgb3IgaW5wdXQgZmlsZV0gW09QVElPTlNdCgpFWEFNUExFUzoKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uCiAgICByZWZpdHRlciBodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvL2FwaS92My9vcGVuYXBpLnlhbWwKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tc2V0dGluZ3MtZmlsZSAuL29wZW5hcGkucmVmaXR0ZXIgLS1vdXRwdXQgLi9HZW5lcmF0ZWRDb2RlLmNzCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5hbWVzcGFjZSAiWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUiIC0tb3V0cHV0IC4vR2VuZXJhdGVkQ29kZS5jcwogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uYW1lc3BhY2UgIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiAtLWludGVybmFsCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW91dHB1dCAuL0lHZW5lcmF0ZWRDb2RlLmNzIC0taW50ZXJmYWNlLW9ubHkKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tdXNlLWFwaS1yZXNwb25zZQogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1jYW5jZWxsYXRpb24tdG9rZW5zCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5vLW9wZXJhdGlvbi1oZWFkZXJzCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5vLWFjY2VwdC1oZWFkZXJzCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLXVzZS1pc28tZGF0ZS1mb3JtYXQKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tYWRkaXRpb25hbC1uYW1lc3BhY2UgIllvdXIuQWRkaXRpb25hbC5OYW1lc3BhY2UiIC0tYWRkaXRpb25hbC1uYW1lc3BhY2UgIllvdXIuT3RoZXIuQWRkaXRpb25hbC5OYW1lc3BhY2UiCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW11bHRpcGxlLWludGVyZmFjZXMgQnlFbmRwb2ludAogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS10YWcgUGV0IC0tdGFnIFN0b3JlIC0tdGFnIFVzZXIKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tbWF0Y2gtcGF0aCAnXi9wZXQvLionCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW5vLWRlcHJlY2F0ZWQtb3BlcmF0aW9ucwogICAgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1vcGVyYXRpb24tbmFtZS10ZW1wbGF0ZSAne29wZXJhdGlvbk5hbWV9QXN5bmMnCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLW9wdGlvbmFsLW51bGxhYmxlLXBhcmFtZXRlcnMKICAgIHJlZml0dGVyIC4vb3BlbmFwaS5qc29uIC0tdHJpbS11bnVzZWQtc2NoZW1hCiAgICByZWZpdHRlciAuL29wZW5hcGkuanNvbiAtLXRyaW0tdW51c2VkLXNjaGVtYSAtLWtlZXAtc2NoZW1hICdeTW9kZWwkJyAtLWtlZXAtc2NoZW1hICdeUGVyc29uLisnCgpBUkdVTUVOVFM6CiAgICBbVVJMIG9yIGlucHV0IGZpbGVdICAgIFVSTCBvciBmaWxlIHBhdGggdG8gT3BlbkFQSSBTcGVjaWZpY2F0aW9uIGZpbGUKCk9QVElPTlM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJpbnRzIGhlbHAgaW5mb3JtYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtcywgLS1zZXR0aW5ncy1maWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGF0aCB0byAucmVmaXR0ZXIgc2V0dGluZ3MgZmlsZS4gU3BlY2lmeWluZyB0aGlzIHdpbGwgaWdub3JlIGFsbCBvdGhlciBzZXR0aW5ncyAoZXhjZXB0IGZvciAtLW91dHB1dCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtbiwgLS1uYW1lc3BhY2UgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZENvZGUgICAgRGVmYXVsdCBuYW1lc3BhY2UgdG8gdXNlIGZvciBnZW5lcmF0ZWQgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAtbywgLS1vdXRwdXQgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dC5jcyAgICAgICAgUGF0aCB0byBPdXRwdXQgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1hdXRvLWdlbmVyYXRlZC1oZWFkZXIgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgYWRkIDxhdXRvLWdlbmVyYXRlZD4gaGVhZGVyIHRvIG91dHB1dCBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1hY2NlcHQtaGVhZGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgYWRkIDxBY2NlcHQ+IGhlYWRlciB0byBvdXRwdXQgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1pbnRlcmZhY2Utb25seSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgY29udHJhY3QgdHlwZXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtYXBpLXJlc3BvbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmV0dXJuIFRhc2s8SUFwaVJlc3BvbnNlPFQ+PiBpbnN0ZWFkIG9mIFRhc2s8VD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1pbnRlcm5hbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2V0IHRoZSBhY2Nlc3NpYmlsaXR5IG9mIHRoZSBnZW5lcmF0ZWQgdHlwZXMgdG8gJ2ludGVybmFsJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1jYW5jZWxsYXRpb24tdG9rZW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVXNlIGNhbmNlbGxhdGlvbiB0b2tlbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1vcGVyYXRpb24taGVhZGVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgb3BlcmF0aW9uIGhlYWRlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1sb2dnaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgbG9nIGVycm9ycyBvciBjb2xsZWN0IHRlbGVtZXRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1hZGRpdGlvbmFsLW5hbWVzcGFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRkIGFkZGl0aW9uYWwgbmFtZXNwYWNlIHRvIGdlbmVyYXRlZCB0eXBlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS11c2UtaXNvLWRhdGUtZm9ybWF0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwbGljaXRseSBmb3JtYXQgZGF0ZSBxdWVyeSBzdHJpbmcgcGFyYW1ldGVycyBpbiBJU08gODYwMSBzdGFuZGFyZCBkYXRlIGZvcm1hdCB1c2luZyBkZWxpbWl0ZXJzICgyMDIzLTA2LTE1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1tdWx0aXBsZS1pbnRlcmZhY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgYSBSZWZpdCBpbnRlcmZhY2UgZm9yIGVhY2ggZW5kcG9pbnQuIE1heSBiZSBvbmUgb2YgQnlFbmRwb2ludCwgQnlUYWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1tYXRjaC1wYXRoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSBpbmNsdWRlIFBhdGhzIHRoYXQgbWF0Y2ggdGhlIHByb3ZpZGVkIHJlZ3VsYXIgZXhwcmVzc2lvbi4gTWF5IGJlIHNldCBtdWx0aXBsZSB0aW1lcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS10YWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT25seSBpbmNsdWRlIEVuZHBvaW50cyB0aGF0IGNvbnRhaW4gdGhpcyB0YWcuIE1heSBiZSBzZXQgbXVsdGlwbGUgdGltZXMgYW5kIHJlc3VsdCBpbiBPUidlZCBldmFsdWF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1za2lwLXZhbGlkYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU2tpcCB2YWxpZGF0aW9uIG9mIHRoZSBPcGVuQVBJIHNwZWNpZmljYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1uby1kZXByZWNhdGVkLW9wZXJhdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgRG9uJ3QgZ2VuZXJhdGUgZGVwcmVjYXRlZCBvcGVyYXRpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgLS1vcGVyYXRpb24tbmFtZS10ZW1wbGF0ZSAgICAgICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgb3BlcmF0aW9uIG5hbWVzIHVzaW5nIHBhdHRlcm4uIFdoZW4gdXNpbmcgLS1tdWx0aXBsZS1pbnRlcmZhY2VzIEJ5RW5kcG9pbnQsIHRoaXMgaXMgbmFtZSBvZiB0aGUgRXhlY3V0ZSgpIG1ldGhvZCBpbiB0aGUgaW50ZXJmYWNlCiAgICAgICAgLS1vcHRpb25hbC1udWxsYWJsZS1wYXJhbWV0ZXJzICAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgbnVsbGFibGUgcGFyYW1ldGVycyBhcyBvcHRpb25hbCBwYXJhbWV0ZXJzCiAgICAgICAgLS10cmltLXVudXNlZC1zY2hlbWEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3ZlcyB1bnJlZmVyZW5jZWQgY29tcG9uZW50cyBzY2hlbWEgdG8ga2VlcCB0aGUgZ2VuZXJhdGVkIG91dHB1dCB0byBhIG1pbmltdW0KICAgICAgICAtLWtlZXAtc2NoZW1hICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGb3JjZSB0byBrZWVwIG1hdGNoaW5nIHNjaGVtYSwgdXNlcyByZWd1bGFyIGV4cHJlc3Npb25zLiBVc2UgdG9nZXRoZXIgd2l0aCAiLS10cmltLXVudXNlZC1zY2hlbWEiLiBDYW4gYmUgc2V0IG11bHRpcGxlIHRpbWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCmBgYAoKVG8gZ2VuZXJhdGUgY29kZSBmcm9tIGFuIE9wZW5BUEkgc3BlY2lmaWNhdGlvbnMgZmlsZSwgcnVuIHRoZSBmb2xsb3dpbmc6CgpgYGBzaGVsbAokIHJlZml0dGVyIFtwYXRoIHRvIE9wZW5BUEkgc3BlYyBmaWxlXSAtLW5hbWVzcGFjZSAiW1lvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlXSIKYGBgCgpUaGlzIHdpbGwgZ2VuZXJhdGUgYSBmaWxlIGNhbGxlZCBgT3V0cHV0LmNzYCB3aGljaCBjb250YWlucyB0aGUgUmVmaXQgaW50ZXJmYWNlIGFuZCBjb250cmFjdCBjbGFzc2VzIGdlbmVyYXRlZCB1c2luZyBbTlN3YWddKGh0dHBzOi8vZ2l0aHViLmNvbS9SaWNvU3V0ZXIvTlN3YWcpCgojIyBTb3VyY2UgR2VuZXJhdG9yCgpSZWZpdHRlciBpcyBhdmFpbGFibGUgYXMgYSBDIyBTb3VyY2UgR2VuZXJhdG9yIHRoYXQgdXNlcyB0aGUgW1JlZml0dGVyLkNvcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci90cmVlL21haW4vc3JjL1JlZml0dGVyLkNvcmUpIGxpYnJhcnkgZm9yIGdlbmVyYXRpbmcgYSBSRVNUIEFQSSBDbGllbnQgdXNpbmcgdGhlIFtSZWZpdF0oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0aXZldWkvcmVmaXQpIGxpYnJhcnkuIFJlZml0dGVyIGNhbiBnZW5lcmF0ZSB0aGUgUmVmaXQgaW50ZXJmYWNlIGZyb20gT3BlbkFQSSBzcGVjaWZpY2F0aW9ucwoKVGhlIFJlZml0dGVyIHNvdXJjZSBnZW5lcmF0b3IgaXMgYSBiaXQgdW50cmFkaXRpb25hbCBpbiBhIHNlbnNlIHRoYXQgaXQgY3JlYXRlcyBhIGZvbGRlciBjYWxsZWQgYEdlbmVyYXRlZGAgaW4gdGhlIHNhbWUgbG9jYXRpb24gYXMgdGhlIGAucmVmaXR0ZXJgIGZpbGUgYW5kIGdlbmVyYXRlcyBmaWxlcyB0byBkaXNrIHVuZGVyIHRoZSBgR2VuZXJhdGVkYCBmb2xkZXIgKGNhbiBiZSBjaGFuZ2VkIHdpdGggYC0tb3V0cHV0Rm9sZGVyYCkuIFRoZSBzb3VyY2UgZ2VuZXJhdG9yIG91dHB1dCBzaG91bGQgYmUgaW5jbHVkZWQgaW4gdGhlIHByb2plY3QgYW5kIGNvbW1pdHRlZCB0byBzb3VyY2UgY29udHJvbC4gVGhpcyBpcyBkb25lIGJlY2F1c2UgdGhlcmUgaXMgbm8gb3RoZXIgd2F5IHRvIHRyaWdnZXIgdGhlIFJlZml0IHNvdXJjZSBnZW5lcmF0b3IgdG8gcGlja3VwIHRoZSBSZWZpdHRlciBnZW5lcmF0ZWQgY29kZSAKCioqKihUcmFuc2xhdGlvbjogSSBjb3VsZG4ndCBmb3IgdGhlIGxpZmUgb2YgbWUgZmlndXJlIGhvdyB0byBnZXQgdGhhdCB0byB3b3JrLCBzb3JyeSkqKioKCiMjIyBJbnN0YWxsYXRpb24KClRoZSBzb3VyY2UgZ2VuZXJhdG9yIGlzIGRpc3RyaWJ1dGVkIGFzIGEgTnVHZXQgcGFja2FnZSBhbmQgc2hvdWxkIGJlIGluc3RhbGxlZCB0byB0aGUgcHJvamVjdCB0aGF0IHdpbGwgY29udGFpbiB0aGUgZ2VuZXJhdGVkIGNvZGUKCmBgYHNoZWxsCmRvdG5ldCBhZGQgcGFja2FnZSBSZWZpdHRlci5Tb3VyY2VHZW5lcmF0b3IKYGBgCgojIyMgVXNhZ2UKClRoaXMgc291cmNlIGdlbmVyYXRvciBnZW5lcmF0ZXMgY29kZSBiYXNlZCBvbiBhbnkgYC5yZWZpdHRlcmAgZmlsZSBpbmNsdWRlZCB0byB0aGUgcHJvamVjdCBhcyBgQWRkaXRpb25hbEZpbGVzYC4KClRoZSBnZW5lcmF0b3IgY2FuIGF1dG9tYXRpY2FsbHkgZGV0ZWN0IGFsbCBgLnJlZml0dGVyYCBmaWxlcyBpbnNpZGUgdGhlIHByb2plY3QgdGhhdCByZWZlcmVuY2VkIHRoZSBgUmVmaXR0ZXIuU291cmNlR2VuZXJhdG9yYCBwYWNrYWdlIGFuZCB0aGVyZSBpcyBubyBuZWVkIHRvIGluY2x1ZGUgdGhlbSBtYW51YWxseSBhcyBgQWRkaXRpb25hbEZpbGVzYAoKIyMjIC5SZWZpdHRlciBGaWxlIGZvcm1hdAoKVGhlIGZvbGxvd2luZyBpcyBhbiBleGFtcGxlIGAucmVmaXR0ZXJgIGZpbGUKCmBgYGpzCnsKICAib3BlbkFwaVBhdGgiOiAiL3BhdGgvdG8veW91ci9vcGVuQVBJIiwgLy8gUmVxdWlyZWQKICAibmFtZXNwYWNlIjogIk9yZy5TeXN0ZW0uU2VydmljZS5BcGkuR2VuZXJhdGVkQ29kZSIsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PUdlbmVyYXRlZENvZGUKICAibmFtaW5nIjogewogICAgInVzZU9wZW5BcGlUaXRsZSI6IGZhbHNlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgICAiaW50ZXJmYWNlTmFtZSI6ICJNeUFwaUNsaWVudCIgLy8gT3B0aW9uYWwuIERlZmF1bHQ9QXBpQ2xpZW50CiAgfSwKICAiZ2VuZXJhdGVDb250cmFjdHMiOiB0cnVlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD10cnVlCiAgImdlbmVyYXRlWG1sRG9jQ29kZUNvbW1lbnRzIjogdHJ1ZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9dHJ1ZQogICJhZGRBdXRvR2VuZXJhdGVkSGVhZGVyIjogdHJ1ZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9dHJ1ZQogICJhZGRBY2NlcHRIZWFkZXJzIjogdHJ1ZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9dHJ1ZQogICJyZXR1cm5JQXBpUmVzcG9uc2UiOiBmYWxzZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9ZmFsc2UKICAiZ2VuZXJhdGVPcGVyYXRpb25IZWFkZXJzIjogdHJ1ZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9dHJ1ZQogICJ0eXBlQWNjZXNzaWJpbGl0eSI6ICJQdWJsaWMiLCAvLyBPcHRpb25hbC4gVmFsdWVzPVB1YmxpY3xJbnRlcm5hbC4gRGVmYXVsdD1QdWJsaWMKICAidXNlQ2FuY2VsbGF0aW9uVG9rZW5zIjogZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PWZhbHNlCiAgInVzZUlzb0RhdGVGb3JtYXQiOiBmYWxzZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9ZmFsc2UKICAibXVsdGlwbGVJbnRlcmZhY2VzIjogIkJ5RW5kcG9pbnQiLCAvLyBPcHRpb25hbC4gTWF5IGJlIG9uZSBvZiAiQnlFbmRwb2ludCIgb3IgIkJ5VGFnIgogICJnZW5lcmF0ZURlcHJlY2F0ZWRPcGVyYXRpb25zIjogZmFsc2UsIC8vIE9wdGlvbmFsLiBEZWZhdWx0PXRydWUKICAib3BlcmF0aW9uTmFtZVRlbXBsYXRlIjogIntvcGVyYXRpb25OYW1lfUFzeW5jIiwgLy8gT3B0aW9uYWwuIE11c3QgY29udGFpbiB7b3BlcmF0aW9uTmFtZX0gd2hlbiBtdWx0aXBsZUludGVyZmFjZXMgIT0gQnlFbmRwb2ludAogICJvcHRpb25hbFBhcmFtZXRlcnMiOiBmYWxzZSwgLy8gT3B0aW9uYWwuIERlZmF1bHQ9ZmFsc2UKICAib3V0cHV0Rm9sZGVyIjogIi4uL0N1c3RvbU91dHB1dCIgLy8gT3B0aW9uYWwuIERlZmF1bHQ9Li9HZW5lcmF0ZWQKICAib3V0cHV0RmlsZW5hbWUiOiAiUmVmaXRJbnRlcmZhY2UuY3MiLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1PdXRwdXQuY3MgZm9yIENMSSB0b29sCiAgImFkZGl0aW9uYWxOYW1lc3BhY2VzIjogWyAvLyBPcHRpb25hbAogICAgIk5hbWVzcGFjZTEiLAogICAgIk5hbWVzcGFjZTIiCiAgXSwKICAiaW5jbHVkZVRhZ3MiOiBbIC8vIE9wdGlvbmFsLiBPcGVuQVBJIFRhZyB0byBpbmNsdWRlIHdoZW4gZ2VuZXJhdGluZyBjb2RlCiAgICAiUGV0IiwKICAgICJTdG9yZSIsCiAgICAiVXNlciIKICBdLAogICJpbmNsdWRlUGF0aE1hdGNoZXMiOiBbIC8vIE9wdGlvbmFsLiBPbmx5IGluY2x1ZGUgUGF0aHMgdGhhdCBtYXRjaCB0aGUgcHJvdmlkZWQgcmVndWxhciBleHByZXNzaW9uCiAgICAiXi9wZXQvLioiLAogICAgIl4vc3RvcmUvLioiCiAgXSwKICAidHJpbVVudXNlZFNjaGVtYSI6IGZhbHNlLCAvLyBPcHRpb25hbC4gRGVmYXVsdD1mYWxzZQogICJrZWVwU2NoZW1hUGF0dGVybnMiOiBbIC8vIE9wdGlvbmFsLiBGb3JjZSB0byBrZWVwIG1hdGNoaW5nIHNjaGVtYSwgdXNlcyByZWd1bGFyIGV4cHJlc3Npb25zLiBVc2UgdG9nZXRoZXIgd2l0aCB0cmltVW51c2VkU2NoZW1hPXRydWUKICAgICJeTW9kZWwkIiwKICAgICJeUGVyc29uLisiCiAgXSwKICAiZGVwZW5kZW5jeUluamVjdGlvblNldHRpbmdzIjogeyAvLyBPcHRpb25hbAogICAgImJhc2VVcmwiOiAiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9hcGkvdjMiLCAvLyBPcHRpb25hbC4gTGVhdmUgdGhpcyBibGFuayB0byBzZXQgdGhlIGJhc2UgYWRkcmVzcyBtYW51YWxseQogICAgImh0dHBNZXNzYWdlSGFuZGxlcnMiOiBbIC8vIE9wdGlvbmFsCiAgICAgICAgIkF1dGhvcml6YXRpb25NZXNzYWdlSGFuZGxlciIsIAogICAgICAgICJUZWxlbWV0cnlNZXNzYWdlSGFuZGxlciIgCiAgICBdLAogICAgInVzZVBvbGx5IjogdHJ1ZSwgLy8gT3B0aW9uYWwuIFNldCB0aGlzIHRvIHRydWUsIHRvIGNvbmZpZ3VyZSBQb2xseSB3aXRoIGEgcmV0cnkgcG9saWN5IHRoYXQgdXNlcyBhIGppdHRlcmVkIGJhY2tvZmYuIERlZmF1bHQ9ZmFsc2UKICAgICJwb2xseU1heFJldHJ5Q291bnQiOiAzLCAvLyBPcHRpb25hbC4gRGVmYXVsdD02CiAgICAiZmlyc3RCYWNrb2ZmUmV0cnlJblNlY29uZHMiOiAwLjUgLy8gT3B0aW9uYWwuIERlZmF1bHQ9MS4wCiAgfSwKICAiY29kZUdlbmVyYXRvclNldHRpbmdzIjogeyAvLyBPcHRpb25hbC4gRGVmYXVsdCBzZXR0aW5ncyBhcmUgdGhlIHZhbHVlcyBzZXQgaW4gdGhpcyBleGFtcGxlCiAgICAicmVxdWlyZWRQcm9wZXJ0aWVzTXVzdEJlRGVmaW5lZCI6IHRydWUsCiAgICAiZ2VuZXJhdGVEYXRhQW5ub3RhdGlvbnMiOiB0cnVlLAogICAgImFueVR5cGUiOiAib2JqZWN0IiwKICAgICJkYXRlVHlwZSI6ICJTeXN0ZW0uRGF0ZVRpbWVPZmZzZXQiLAogICAgImRhdGVUaW1lVHlwZSI6ICJTeXN0ZW0uRGF0ZVRpbWVPZmZzZXQiLAogICAgInRpbWVUeXBlIjogIlN5c3RlbS5UaW1lU3BhbiIsCiAgICAidGltZVNwYW5UeXBlIjogIlN5c3RlbS5UaW1lU3BhbiIsCiAgICAiYXJyYXlUeXBlIjogIlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklDb2xsZWN0aW9uIiwKICAgICJkaWN0aW9uYXJ5VHlwZSI6ICJTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5JRGljdGlvbmFyeSIsCiAgICAiYXJyYXlJbnN0YW5jZVR5cGUiOiAiU3lzdGVtLkNvbGxlY3Rpb25zLk9iamVjdE1vZGVsLkNvbGxlY3Rpb24iLAogICAgImRpY3Rpb25hcnlJbnN0YW5jZVR5cGUiOiAiU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeSIsCiAgICAiYXJyYXlCYXNlVHlwZSI6ICJTeXN0ZW0uQ29sbGVjdGlvbnMuT2JqZWN0TW9kZWwuQ29sbGVjdGlvbiIsCiAgICAiZGljdGlvbmFyeUJhc2VUeXBlIjogIlN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkRpY3Rpb25hcnkiLAogICAgInByb3BlcnR5U2V0dGVyQWNjZXNzTW9kaWZpZXIiOiAiIiwKICAgICJnZW5lcmF0ZUltbXV0YWJsZUFycmF5UHJvcGVydGllcyI6IGZhbHNlLAogICAgImdlbmVyYXRlSW1tdXRhYmxlRGljdGlvbmFyeVByb3BlcnRpZXMiOiBmYWxzZSwKICAgICJoYW5kbGVSZWZlcmVuY2VzIjogZmFsc2UsCiAgICAianNvblNlcmlhbGl6ZXJTZXR0aW5nc1RyYW5zZm9ybWF0aW9uTWV0aG9kIjogbnVsbCwKICAgICJnZW5lcmF0ZUpzb25NZXRob2RzIjogZmFsc2UsCiAgICAiZW5mb3JjZUZsYWdFbnVtcyI6IGZhbHNlLAogICAgImlubGluZU5hbWVkRGljdGlvbmFyaWVzIjogZmFsc2UsCiAgICAiaW5saW5lTmFtZWRUdXBsZXMiOiB0cnVlLAogICAgImlubGluZU5hbWVkQXJyYXlzIjogZmFsc2UsCiAgICAiZ2VuZXJhdGVPcHRpb25hbFByb3BlcnRpZXNBc051bGxhYmxlIjogZmFsc2UsCiAgICAiZ2VuZXJhdGVOdWxsYWJsZVJlZmVyZW5jZVR5cGVzIjogZmFsc2UsCiAgICAiZ2VuZXJhdGVOYXRpdmVSZWNvcmRzIjogZmFsc2UsCiAgICAiZ2VuZXJhdGVEZWZhdWx0VmFsdWVzIjogdHJ1ZSwKICAgICJpbmxpbmVOYW1lZEFueSI6IGZhbHNlLAogICAgImV4Y2x1ZGVkVHlwZU5hbWVzIjogWwogICAgICAiRXhjbHVkZWRUeXBlRm9vIiwKICAgICAgIkV4Y2x1ZGVkVHlwZUJhciIKICAgIF0KICB9Cn0KYGBgCgotIGBvcGVuQXBpUGF0aGAgLSBwb2ludHMgdG8gdGhlIE9wZW5BUEkgU3BlY2lmaWNhdGlvbnMgZmlsZS4gVGhpcyBjYW4gYmUgdGhlIHBhdGggdG8gYSBmaWxlIHN0b3JlZCBvbiBkaXNrLCByZWxhdGl2ZSB0byB0aGUgYC5yZWZpdHRlcmAgZmlsZS4gVGhpcyBjYW4gYWxzbyBiZSBhIFVSTCB0byBhIHJlbW90ZSBmaWxlIHRoYXQgd2lsbCBiZSBkb3dubG9hZGVkIG92ZXIgSFRUUC9IVFRQUwotIGBuYW1lc3BhY2VgIC0gdGhlIG5hbWVzcGFjZSB1c2VkIGluIHRoZSBnZW5lcmF0ZWQgY29kZS4gSWYgbm90IHNwZWNpZmllZCwgdGhpcyBkZWZhdWx0cyB0byBgR2VuZXJhdGVkQ29kZWAKLSBgbmFtaW5nLnVzZU9wZW5BcGlUaXRsZWAgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBPcGVuQXBpIHRpdGxlIHNob3VsZCBiZSB1c2VkLiBEZWZhdWx0IGlzIGB0cnVlYAotIGBuYW1pbmcuaW50ZXJmYWNlTmFtZWAgLSB0aGUgbmFtZSBvZiB0aGUgZ2VuZXJhdGVkIGludGVyZmFjZS4gVGhlIGdlbmVyYXRlZCBjb2RlIHdpbGwgYXV0b21hdGljYWxseSBwcmVmaXggdGhpcyB3aXRoIGBJYCBzbyBpZiB0aGlzIHNldCB0byBgTXlBcGlDbGllbnRgIHRoZW4gdGhlIGdlbmVyYXRlZCBpbnRlcmZhY2UgaXMgY2FsbGVkIGBJTXlBcGlDbGllbnRgLiBEZWZhdWx0IGlzIGBBcGlDbGllbnRgCi0gYGdlbmVyYXRlQ29udHJhY3RzYCAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgY29udHJhY3RzIHNob3VsZCBiZSBnZW5lcmF0ZWQuIEEgdXNlIGNhc2UgZm9yIHRoaXMgaXMgc2V2ZXJhbCBBUEkgY2xpZW50cyB1c2UgdGhlIHNhbWUgY29udHJhY3RzLiBEZWZhdWx0IGlzIGB0cnVlYAotIGBnZW5lcmF0ZVhtbERvY0NvZGVDb21tZW50c2AgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIFhNTCBkb2MgY29tbWVudHMgc2hvdWxkIGJlIGdlbmVyYXRlZC4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgYWRkQXV0b0dlbmVyYXRlZEhlYWRlcmAgLSBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIFhNTCBkb2MgY29tbWVudHMgc2hvdWxkIGJlIGdlbmVyYXRlZC4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgYWRkQWNjZXB0SGVhZGVyc2AgLSAgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byBhZGQgYWNjZXB0IGhlYWRlcnMgW0hlYWRlcnMoIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiIpXS4gRGVmYXVsdCBpcyBgdHJ1ZWAKLSBgcmV0dXJuSUFwaVJlc3BvbnNlYCAtIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgdG8gcmV0dXJuIGBJQXBpUmVzcG9uc2U8VD5gIG9iamVjdHMuIERlZmF1bHQgaXMgYGZhbHNlYAotIGBnZW5lcmF0ZU9wZXJhdGlvbkhlYWRlcnNgIC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0byB1c2Ugb3BlcmF0aW9uIGhlYWRlcnMgaW4gdGhlIGdlbmVyYXRlZCBtZXRob2RzLiBEZWZhdWx0IGlzIGB0cnVlYAotIGB0eXBlQWNjZXNzaWJpbGl0eWAgLSB0aGUgZ2VuZXJhdGVkIHR5cGUgYWNjZXNzaWJpbGl0eS4gUG9zc2libGUgdmFsdWVzIGFyZSBgUHVibGljYCBhbmQgYEludGVybmFsYC4gRGVmYXVsdCBpcyBgUHVibGljYAotIGB1c2VDYW5jZWxsYXRpb25Ub2tlbnNgIC0gVXNlIGNhbmNlbGxhdGlvbiB0b2tlbnMgaW4gdGhlIGdlbmVyYXRlZCBtZXRob2RzLiBEZWZhdWx0IGlzIGBmYWxzZWAKLSBgdXNlSXNvRGF0ZUZvcm1hdGAgLSBTZXQgdG8gYHRydWVgIHRvIGV4cGxpY2l0bHkgZm9ybWF0IGRhdGUgcXVlcnkgc3RyaW5nIHBhcmFtZXRlcnMgaW4gSVNPIDg2MDEgc3RhbmRhcmQgZGF0ZSBmb3JtYXQgdXNpbmcgZGVsaW1pdGVycyAoZm9yIGV4YW1wbGU6IDIwMjMtMDYtMTUpLiBEZWZhdWx0IGlzIGBmYWxzZWAKLSBgbXVsdGlwbGVJbnRlcmZhY2VzYCAtIFNldCB0byBgQnlFbmRwb2ludGAgdG8gZ2VuZXJhdGUgYW4gaW50ZXJmYWNlIGZvciBlYWNoIGVuZHBvaW50LCBvciBgQnlUYWdgIHRvIGdyb3VwIEVuZHBvaW50cyBieSB0aGVpciBUYWcgKGxpa2UgU3dhZ2dlclVJIGdyb3VwcyB0aGVtKS4KLSBgb3V0cHV0Rm9sZGVyYCAtIGEgc3RyaW5nIGRlc2NyaWJpbmcgYSByZWxhdGl2ZSBwYXRoIHRvIGEgZGVzaXJlZCBvdXRwdXQgZm9sZGVyLiBEZWZhdWx0IGlzIGAuL0dlbmVyYXRlZGAKLSBgb3V0cHV0RmlsZW5hbWVgIC0gT3V0cHV0IGZpbGVuYW1lLiBEZWZhdWx0IGlzIGBPdXRwdXQuY3NgIHdoZW4gdXNlZCBmcm9tIHRoZSBDTEkgdG9vbCwgb3RoZXJ3aXNlIGl0cyB0aGUgLnJlZml0dGVyIGZpbGVuYW1lLiBTbyBgUGV0c3RvcmUucmVmaXR0ZXJgIGJlY29tZXMgYFBldHN0b3JlLmNzYC4KLSBgYWRkaXRpb25hbE5hbWVzcGFjZXNgIC0gQSBjb2xsZWN0aW9uIG9mIGFkZGl0aW9uYWwgbmFtZXNwYWNlcyB0byBpbmNsdWRlIGluIHRoZSBnZW5lcmF0ZWQgZmlsZS4gQSB1c2UgY2FzZSBmb3IgdGhpcyBpcyB3aGVuIHlvdSB3YW50IHRvIHJldXNlIGNvbnRyYWN0cyBmcm9tIGEgZGlmZmVyZW50IG5hbWVzcGFjZSB0aGFuIHRoZSBnZW5lcmF0ZWQgY29kZS4gRGVmYXVsdCBpcyBlbXB0eQotIGBpbmNsdWRlVGFnc2AgLSBBIGNvbGxlY3Rpb24gb2YgdGFncyB0byB1c2UgYSBmaWx0ZXIgZm9yIGluY2x1ZGluZyBlbmRwb2ludHMgdGhhdCBjb250YWluIHRoaXMgdGFnLgotIGBpbmNsdWRlUGF0aE1hdGNoZXNgIC0gQSBjb2xsZWN0aW9uIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdXNlZCB0byBmaWx0ZXIgcGF0aHMuCi0gYGdlbmVyYXRlRGVwcmVjYXRlZE9wZXJhdGlvbnNgIC0gYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBkZXByZWNhdGVkIG9wZXJhdGlvbnMgc2hvdWxkIGJlIGdlbmVyYXRlZCBvciBza2lwcGVkLiBEZWZhdWx0IGlzIGB0cnVlYAotIGBvcGVyYXRpb25OYW1lVGVtcGxhdGVgIC0gR2VuZXJhdGUgb3BlcmF0aW9uIG5hbWVzIHVzaW5nIHBhdHRlcm4uIFRoaXMgbXVzdCBjb250YWluIHRoZSBzdHJpbmcge29wZXJhdGlvbk5hbWV9LiBBbiBleGFtcGxlIHVzYWdlIG9mIHRoaXMgY291bGQgYmUgYHtvcGVyYXRpb25OYW1lfUFzeW5jYCB0byBzdWZmaXggYWxsIG1ldGhvZCBuYW1lcyB3aXRoIEFzeW5jCi0gYG9wdGlvbmFsUGFyYW1ldGVyc2AgLSBHZW5lcmF0ZSBub24tcmVxdWlyZWQgcGFyYW1ldGVycyBhcyBudWxsYWJsZSBvcHRpb25hbCBwYXJhbWV0ZXJzCi0gYHRyaW1VbnVzZWRTY2hlbWFgIC0gUmVtb3ZlcyB1bnJlZmVyZW5jZWQgY29tcG9uZW50cyBzY2hlbWEgdG8ga2VlcCB0aGUgZ2VuZXJhdGVkIG91dHB1dCB0byBhIG1pbmltdW0KLSBga2VlcFNjaGVtYVBhdHRlcm5zYDogQSBjb2xsZWN0aW9uIG9mIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gZm9yY2UgdG8ga2VlcCBtYXRjaGluZyBzY2hlbWEuIFRoaXMgaXMgdXNlZCB0b2dldGhlciB3aXRoIGB0cmltVW51c2VkU2NoZW1hYAotIGBkZXBlbmRlbmN5SW5qZWN0aW9uU2V0dGluZ3NgIC0gU2V0dGluZyB0aGlzIHdpbGwgZ2VuZXJhdGVkIGV4dGVuc2lvbiBtZXRob2RzIHRvIGBJU2VydmljZUNvbGxlY3Rpb25gIGZvciBjb25maWd1cmluZyBSZWZpdCBjbGllbnRzCiAgLSBgYmFzZVVybGAgLSBVc2VkIGFzIHRoZSBIdHRwQ2xpZW50IGJhc2UgYWRkcmVzcy4gTGVhdmUgdGhpcyBibGFuayB0byBtYW51YWxseSBzZXQgdGhlIGJhc2UgVVJMCiAgLSBgaHR0cE1lc3NhZ2VIYW5kbGVyc2AgLSBBIGNvbGxlY3Rpb24gb2YgYEh0dHBNZXNzYWdlSGFuZGxlcmAgdGhhdCBpcyBhZGRlZCB0byB0aGUgSHR0cENsaWVudCBwaXBlbGluZQogIC0gYHVzZVBvbGx5YCAtIFNldCB0aGlzIHRvIHRydWUgdG8gY29uZmlndXJlIHRoZSBIdHRwQ2xpZW50IHRvIHVzZSBQb2xseSB1c2luZyBhIHJldHJ5IHBvbGljeSB3aXRoIGEgaml0dGVyZWQgYmFja29mZgogIC0gYHBvbGx5TWF4UmV0cnlDb3VudGAgLSBUaGlzIGlzIHRoZSBtYXggcmV0cnkgY291bnQgdXNlZCBpbiB0aGUgUG9sbHkgcmV0cnkgcG9saWN5LiBEZWZhdWx0IGlzIDYKICAtIGBmaXJzdEJhY2tvZmZSZXRyeUluU2Vjb25kc2AgLSBUaGlzIGlzIHRoZSBkdXJhdGlvbiBvZiB0aGUgaW5pdGlhbCByZXRyeSBiYWNrb2ZmLiBEZWZhdWx0IGlzIDEgc2Vjb25kCi0gYGNvZGVHZW5lcmF0b3JTZXR0aW5nc2AgLSBTZXR0aW5nIHRoaXMgYWxsb3dzIGN1c3RvbWl6YXRpb24gb2YgdGhlIE5Td2FnIGdlbmVyYXRlZCB0eXBlcyBhbmQgY29udHJhY3RzCiAgLSBgcmVxdWlyZWRQcm9wZXJ0aWVzTXVzdEJlRGVmaW5lZGAgLSBEZWZhdWx0IGlzIHRydWUsCiAgLSBgZ2VuZXJhdGVEYXRhQW5ub3RhdGlvbnNgIC0gRGVmYXVsdCBpcyB0cnVlLAogIC0gYGFueVR5cGVgIC0gRGVmYXVsdCBpcyBgb2JqZWN0YCwKICAtIGBkYXRlVHlwZWAgLSBEZWZhdWx0IGlzIGBTeXN0ZW0uRGF0ZVRpbWVPZmZzZXRgLAogIC0gYGRhdGVUaW1lVHlwZWAgLSBEZWZhdWx0IGlzIGBTeXN0ZW0uRGF0ZVRpbWVPZmZzZXRgLAogIC0gYHRpbWVUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5UaW1lU3BhbmAsCiAgLSBgdGltZVNwYW5UeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5UaW1lU3BhbmAsCiAgLSBgYXJyYXlUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLklDb2xsZWN0aW9uYCwKICAtIGBkaWN0aW9uYXJ5VHlwZWAgLSBEZWZhdWx0IGlzIGBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5JRGljdGlvbmFyeWAsCiAgLSBgYXJyYXlJbnN0YW5jZVR5cGVgIC0gRGVmYXVsdCBpcyBgU3lzdGVtLkNvbGxlY3Rpb25zLk9iamVjdE1vZGVsLkNvbGxlY3Rpb25gLAogIC0gYGRpY3Rpb25hcnlJbnN0YW5jZVR5cGVgIC0gRGVmYXVsdCBpcyBgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuRGljdGlvbmFyeWAsCiAgLSBgYXJyYXlCYXNlVHlwZWAgLSBEZWZhdWx0IGlzIGBTeXN0ZW0uQ29sbGVjdGlvbnMuT2JqZWN0TW9kZWwuQ29sbGVjdGlvbmAsCiAgLSBgZGljdGlvbmFyeUJhc2VUeXBlYCAtIERlZmF1bHQgaXMgYFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkRpY3Rpb25hcnlgLAogIC0gYHByb3BlcnR5U2V0dGVyQWNjZXNzTW9kaWZpZXJgIC0gRGVmYXVsdCBpcyBgYCwKICAtIGBnZW5lcmF0ZUltbXV0YWJsZUFycmF5UHJvcGVydGllc2AgLSBEZWZhdWx0IGlzIGZhbHNlLAogIC0gYGdlbmVyYXRlSW1tdXRhYmxlRGljdGlvbmFyeVByb3BlcnRpZXNgIC0gRGVmYXVsdCBpcyBmYWxzZSwKICAtIGBoYW5kbGVSZWZlcmVuY2VzYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBganNvblNlcmlhbGl6ZXJTZXR0aW5nc1RyYW5zZm9ybWF0aW9uTWV0aG9kYCAtIERlZmF1bHQgaXMgbnVsbCwKICAtIGBnZW5lcmF0ZUpzb25NZXRob2RzYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgZW5mb3JjZUZsYWdFbnVtc2AgLSBEZWZhdWx0IGlzIGZhbHNlLAogIC0gYGlubGluZU5hbWVkRGljdGlvbmFyaWVzYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgaW5saW5lTmFtZWRUdXBsZXNgIC0gRGVmYXVsdCBpcyB0cnVlLAogIC0gYGlubGluZU5hbWVkQXJyYXlzYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgZ2VuZXJhdGVPcHRpb25hbFByb3BlcnRpZXNBc051bGxhYmxlYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgZ2VuZXJhdGVOdWxsYWJsZVJlZmVyZW5jZVR5cGVzYCAtIERlZmF1bHQgaXMgZmFsc2UsCiAgLSBgZ2VuZXJhdGVOYXRpdmVSZWNvcmRzYCAtIERlZmF1bHQgaXMgZmFsc2UKICAtIGBnZW5lcmF0ZURlZmF1bHRWYWx1ZXNgIC0gRGVmYXVsdCBpcyB0cnVlCiAgLSBgaW5saW5lTmFtZWRBbnlgIC0gRGVmYXVsdCBpcyBmYWxzZQogIC0gYGV4Y2x1ZGVkVHlwZU5hbWVzYCAtIERlZmF1bHQgaXMgZW1wdHkKCgojIFVzaW5nIHRoZSBnZW5lcmF0ZWQgY29kZQoKSGVyZSdzIGFuIGV4YW1wbGUgZ2VuZXJhdGVkIG91dHB1dCBmcm9tIHRoZSBbU3dhZ2dlciBQZXRzdG9yZSBleGFtcGxlXShodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvKSB1c2luZyB0aGUgZGVmYXVsdCBzZXR0aW5ncwoKKipDTEkgVG9vbCoqCgpgYGBiYXNoCiQgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uYW1lc3BhY2UgIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIgpgYGAKCioqU291cmNlIEdlbmVyYXRvciAqKioucmVmaXR0ZXIqKiogZmlsZSoqCgpgYGBqc29uCnsKICAib3BlbkFwaVBhdGgiOiAiLi9vcGVuYXBpLmpzb24iLAogICJuYW1lc3BhY2UiOiAiWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUiCn0KYGBgCgoqKk91dHB1dCoqCgpgYGBjcwp1c2luZyBSZWZpdDsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKdXNpbmcgU3lzdGVtLkNvbGxlY3Rpb25zLkdlbmVyaWM7CgpuYW1lc3BhY2UgWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUKewogICAgcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElTd2FnZ2VyUGV0c3RvcmUKICAgIHsKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIFVwZGF0ZSBhbiBleGlzdGluZyBwZXQgYnkgSWQKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtQdXQoIi9wZXQiKV0KICAgICAgICBUYXNrPFBldD4gVXBkYXRlUGV0KFtCb2R5XSBQZXQgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gQWRkIGEgbmV3IHBldCB0byB0aGUgc3RvcmUKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtQb3N0KCIvcGV0IildCiAgICAgICAgVGFzazxQZXQ+IEFkZFBldChbQm9keV0gUGV0IGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIE11bHRpcGxlIHN0YXR1cyB2YWx1ZXMgY2FuIGJlIHByb3ZpZGVkIHdpdGggY29tbWEgc2VwYXJhdGVkIHN0cmluZ3MKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtHZXQoIi9wZXQvZmluZEJ5U3RhdHVzIildCiAgICAgICAgVGFzazxJQ29sbGVjdGlvbjxQZXQ+PiBGaW5kUGV0c0J5U3RhdHVzKFtRdWVyeV0gU3RhdHVzPyBzdGF0dXMpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIE11bHRpcGxlIHRhZ3MgY2FuIGJlIHByb3ZpZGVkIHdpdGggY29tbWEgc2VwYXJhdGVkIHN0cmluZ3MuIFVzZSB0YWcxLCB0YWcyLCB0YWczIGZvciB0ZXN0aW5nLgogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW0dldCgiL3BldC9maW5kQnlUYWdzIildCiAgICAgICAgVGFzazxJQ29sbGVjdGlvbjxQZXQ+PiBGaW5kUGV0c0J5VGFncyhbUXVlcnkoQ29sbGVjdGlvbkZvcm1hdC5NdWx0aSldIElFbnVtZXJhYmxlPHN0cmluZz4gdGFncyk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gUmV0dXJucyBhIHNpbmdsZSBwZXQKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtHZXQoIi9wZXQve3BldElkfSIpXQogICAgICAgIFRhc2s8UGV0PiBHZXRQZXRCeUlkKGxvbmcgcGV0SWQpOwoKICAgICAgICBbUG9zdCgiL3BldC97cGV0SWR9IildCiAgICAgICAgVGFzayBVcGRhdGVQZXRXaXRoRm9ybShsb25nIHBldElkLCBbUXVlcnldIHN0cmluZyBuYW1lLCBbUXVlcnldIHN0cmluZyBzdGF0dXMpOwoKICAgICAgICBbRGVsZXRlKCIvcGV0L3twZXRJZH0iKV0KICAgICAgICBUYXNrIERlbGV0ZVBldChsb25nIHBldElkLCBbSGVhZGVyKCJhcGlfa2V5IildIHN0cmluZyBhcGlfa2V5KTsKCiAgICAgICAgW1Bvc3QoIi9wZXQve3BldElkfS91cGxvYWRJbWFnZSIpXQogICAgICAgIFRhc2s8QXBpUmVzcG9uc2U+IFVwbG9hZEZpbGUobG9uZyBwZXRJZCwgW1F1ZXJ5XSBzdHJpbmcgYWRkaXRpb25hbE1ldGFkYXRhLCBTdHJlYW1QYXJ0IGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIFJldHVybnMgYSBtYXAgb2Ygc3RhdHVzIGNvZGVzIHRvIHF1YW50aXRpZXMKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtHZXQoIi9zdG9yZS9pbnZlbnRvcnkiKV0KICAgICAgICBUYXNrPElEaWN0aW9uYXJ5PHN0cmluZywgaW50Pj4gR2V0SW52ZW50b3J5KCk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gUGxhY2UgYSBuZXcgb3JkZXIgaW4gdGhlIHN0b3JlCiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbUG9zdCgiL3N0b3JlL29yZGVyIildCiAgICAgICAgVGFzazxPcmRlcj4gUGxhY2VPcmRlcihbQm9keV0gT3JkZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gRm9yIHZhbGlkIHJlc3BvbnNlIHRyeSBpbnRlZ2VyIElEcyB3aXRoIHZhbHVlIDw9IDUgb3IgPiAxMC4gT3RoZXIgdmFsdWVzIHdpbGwgZ2VuZXJhdGVkIGV4Y2VwdGlvbnMKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtHZXQoIi9zdG9yZS9vcmRlci97b3JkZXJJZH0iKV0KICAgICAgICBUYXNrPE9yZGVyPiBHZXRPcmRlckJ5SWQobG9uZyBvcmRlcklkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgIC8vLyBGb3IgdmFsaWQgcmVzcG9uc2UgdHJ5IGludGVnZXIgSURzIHdpdGggdmFsdWUgPCAxMDAwLiBBbnl0aGluZyBhYm92ZSAxMDAwIG9yIG5vbmludGVnZXJzIHdpbGwgZ2VuZXJhdGUgQVBJIGVycm9ycwogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW0RlbGV0ZSgiL3N0b3JlL29yZGVyL3tvcmRlcklkfSIpXQogICAgICAgIFRhc2sgRGVsZXRlT3JkZXIobG9uZyBvcmRlcklkKTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgIC8vLyBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLgogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW1Bvc3QoIi91c2VyIildCiAgICAgICAgVGFzayBDcmVhdGVVc2VyKFtCb2R5XSBVc2VyIGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIENyZWF0ZXMgbGlzdCBvZiB1c2VycyB3aXRoIGdpdmVuIGlucHV0IGFycmF5CiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbUG9zdCgiL3VzZXIvY3JlYXRlV2l0aExpc3QiKV0KICAgICAgICBUYXNrPFVzZXI+IENyZWF0ZVVzZXJzV2l0aExpc3RJbnB1dChbQm9keV0gSUVudW1lcmFibGU8VXNlcj4gYm9keSk7CgogICAgICAgIFtHZXQoIi91c2VyL2xvZ2luIildCiAgICAgICAgVGFzazxzdHJpbmc+IExvZ2luVXNlcihbUXVlcnldIHN0cmluZyB1c2VybmFtZSwgW1F1ZXJ5XSBzdHJpbmcgcGFzc3dvcmQpOwoKICAgICAgICBbR2V0KCIvdXNlci9sb2dvdXQiKV0KICAgICAgICBUYXNrIExvZ291dFVzZXIoKTsKCiAgICAgICAgW0dldCgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgICAgIFRhc2s8VXNlcj4gR2V0VXNlckJ5TmFtZShzdHJpbmcgdXNlcm5hbWUpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIFRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieSB0aGUgbG9nZ2VkIGluIHVzZXIuCiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbUHV0KCIvdXNlci97dXNlcm5hbWV9IildCiAgICAgICAgVGFzayBVcGRhdGVVc2VyKHN0cmluZyB1c2VybmFtZSwgW0JvZHldIFVzZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gVGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci4KICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtEZWxldGUoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgICAgICBUYXNrIERlbGV0ZVVzZXIoc3RyaW5nIHVzZXJuYW1lKTsKICAgIH0KfQpgYGAKCkhlcmUncyBhbiBleGFtcGxlIGdlbmVyYXRlZCBvdXRwdXQgZnJvbSB0aGUgW1N3YWdnZXIgUGV0c3RvcmUgZXhhbXBsZV0oaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pbykgY29uZmlndXJlZCB0byB3cmFwIHRoZSByZXR1cm4gdHlwZSBpbiBgSUFwaVJlc3BvbnNlPFQ+YAoKKipDTEkgVG9vbCoqCgpgYGBiYXNoCiQgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uYW1lc3BhY2UgIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiAtLXVzZS1hcGktcmVzcG9uc2UKYGBgCgoqKlNvdXJjZSBHZW5lcmF0b3IgKioqLnJlZml0dGVyKioqIGZpbGUqKgoKYGBganNvbgp7CiAgIm9wZW5BcGlQYXRoIjogIi4vb3BlbmFwaS5qc29uIiwKICAibmFtZXNwYWNlIjogIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiwKICAicmV0dXJuSUFwaVJlc3BvbnNlIjogdHJ1ZQp9CmBgYAoKKipPdXRwdXQqKgoKYGBgY3MKdXNpbmcgUmVmaXQ7CnVzaW5nIFN5c3RlbS5UaHJlYWRpbmcuVGFza3M7CnVzaW5nIFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljOwoKbmFtZXNwYWNlIFlvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlLldpdGhBcGlSZXNwb25zZQp7CiAgICBwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSVN3YWdnZXJQZXRzdG9yZQogICAgewogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gVXBkYXRlIGFuIGV4aXN0aW5nIHBldCBieSBJZAogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW1B1dCgiL3BldCIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPFBldD4+IFVwZGF0ZVBldChbQm9keV0gUGV0IGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIEFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlCiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbUG9zdCgiL3BldCIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPFBldD4+IEFkZFBldChbQm9keV0gUGV0IGJvZHkpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIE11bHRpcGxlIHN0YXR1cyB2YWx1ZXMgY2FuIGJlIHByb3ZpZGVkIHdpdGggY29tbWEgc2VwYXJhdGVkIHN0cmluZ3MKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtHZXQoIi9wZXQvZmluZEJ5U3RhdHVzIildCiAgICAgICAgVGFzazxJQXBpUmVzcG9uc2U8SUNvbGxlY3Rpb248UGV0Pj4+IEZpbmRQZXRzQnlTdGF0dXMoW1F1ZXJ5XSBTdGF0dXM/IHN0YXR1cyk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gTXVsdGlwbGUgdGFncyBjYW4gYmUgcHJvdmlkZWQgd2l0aCBjb21tYSBzZXBhcmF0ZWQgc3RyaW5ncy4gVXNlIHRhZzEsIHRhZzIsIHRhZzMgZm9yIHRlc3RpbmcuCiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbR2V0KCIvcGV0L2ZpbmRCeVRhZ3MiKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxJQ29sbGVjdGlvbjxQZXQ+Pj4gRmluZFBldHNCeVRhZ3MoW1F1ZXJ5KENvbGxlY3Rpb25Gb3JtYXQuTXVsdGkpXSBJRW51bWVyYWJsZTxzdHJpbmc+IHRhZ3MpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIFJldHVybnMgYSBzaW5nbGUgcGV0CiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbR2V0KCIvcGV0L3twZXRJZH0iKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxQZXQ+PiBHZXRQZXRCeUlkKGxvbmcgcGV0SWQpOwoKICAgICAgICBbUG9zdCgiL3BldC97cGV0SWR9IildCiAgICAgICAgVGFzayBVcGRhdGVQZXRXaXRoRm9ybShsb25nIHBldElkLCBbUXVlcnldIHN0cmluZyBuYW1lLCBbUXVlcnldIHN0cmluZyBzdGF0dXMpOwoKICAgICAgICBbRGVsZXRlKCIvcGV0L3twZXRJZH0iKV0KICAgICAgICBUYXNrIERlbGV0ZVBldChsb25nIHBldElkLCBbSGVhZGVyKCJhcGlfa2V5IildIHN0cmluZyBhcGlfa2V5KTsKCiAgICAgICAgW1Bvc3QoIi9wZXQve3BldElkfS91cGxvYWRJbWFnZSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPEFwaVJlc3BvbnNlPj4gVXBsb2FkRmlsZShsb25nIHBldElkLCBbUXVlcnldIHN0cmluZyBhZGRpdGlvbmFsTWV0YWRhdGEsIFN0cmVhbVBhcnQgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gUmV0dXJucyBhIG1hcCBvZiBzdGF0dXMgY29kZXMgdG8gcXVhbnRpdGllcwogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW0dldCgiL3N0b3JlL2ludmVudG9yeSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPElEaWN0aW9uYXJ5PHN0cmluZywgaW50Pj4+IEdldEludmVudG9yeSgpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIFBsYWNlIGEgbmV3IG9yZGVyIGluIHRoZSBzdG9yZQogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW1Bvc3QoIi9zdG9yZS9vcmRlciIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPE9yZGVyPj4gUGxhY2VPcmRlcihbQm9keV0gT3JkZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gRm9yIHZhbGlkIHJlc3BvbnNlIHRyeSBpbnRlZ2VyIElEcyB3aXRoIHZhbHVlIDw9IDUgb3IgPiAxMC4gT3RoZXIgdmFsdWVzIHdpbGwgZ2VuZXJhdGVkIGV4Y2VwdGlvbnMKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtHZXQoIi9zdG9yZS9vcmRlci97b3JkZXJJZH0iKV0KICAgICAgICBUYXNrPElBcGlSZXNwb25zZTxPcmRlcj4+IEdldE9yZGVyQnlJZChsb25nIG9yZGVySWQpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIEZvciB2YWxpZCByZXNwb25zZSB0cnkgaW50ZWdlciBJRHMgd2l0aCB2YWx1ZSA8IDEwMDAuIEFueXRoaW5nIGFib3ZlIDEwMDAgb3Igbm9uaW50ZWdlcnMgd2lsbCBnZW5lcmF0ZSBBUEkgZXJyb3JzCiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbRGVsZXRlKCIvc3RvcmUvb3JkZXIve29yZGVySWR9IildCiAgICAgICAgVGFzayBEZWxldGVPcmRlcihsb25nIG9yZGVySWQpOwoKICAgICAgICAvLy8gPHN1bW1hcnk+CiAgICAgICAgLy8vIFRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieSB0aGUgbG9nZ2VkIGluIHVzZXIuCiAgICAgICAgLy8vIDwvc3VtbWFyeT4KICAgICAgICBbUG9zdCgiL3VzZXIiKV0KICAgICAgICBUYXNrIENyZWF0ZVVzZXIoW0JvZHldIFVzZXIgYm9keSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gQ3JlYXRlcyBsaXN0IG9mIHVzZXJzIHdpdGggZ2l2ZW4gaW5wdXQgYXJyYXkKICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtQb3N0KCIvdXNlci9jcmVhdGVXaXRoTGlzdCIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPFVzZXI+PiBDcmVhdGVVc2Vyc1dpdGhMaXN0SW5wdXQoW0JvZHldIElFbnVtZXJhYmxlPFVzZXI+IGJvZHkpOwoKICAgICAgICBbR2V0KCIvdXNlci9sb2dpbiIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPHN0cmluZz4+IExvZ2luVXNlcihbUXVlcnldIHN0cmluZyB1c2VybmFtZSwgW1F1ZXJ5XSBzdHJpbmcgcGFzc3dvcmQpOwoKICAgICAgICBbR2V0KCIvdXNlci9sb2dvdXQiKV0KICAgICAgICBUYXNrIExvZ291dFVzZXIoKTsKCiAgICAgICAgW0dldCgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgICAgIFRhc2s8SUFwaVJlc3BvbnNlPFVzZXI+PiBHZXRVc2VyQnlOYW1lKHN0cmluZyB1c2VybmFtZSk7CgogICAgICAgIC8vLyA8c3VtbWFyeT4KICAgICAgICAvLy8gVGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci4KICAgICAgICAvLy8gPC9zdW1tYXJ5PgogICAgICAgIFtQdXQoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgICAgICBUYXNrIFVwZGF0ZVVzZXIoc3RyaW5nIHVzZXJuYW1lLCBbQm9keV0gVXNlciBib2R5KTsKCiAgICAgICAgLy8vIDxzdW1tYXJ5PgogICAgICAgIC8vLyBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLgogICAgICAgIC8vLyA8L3N1bW1hcnk+CiAgICAgICAgW0RlbGV0ZSgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgICAgIFRhc2sgRGVsZXRlVXNlcihzdHJpbmcgdXNlcm5hbWUpOwogICAgfQp9CmBgYAoKSGVyZSdzIGFuIGV4YW1wbGUgZ2VuZXJhdGVkIG91dHB1dCBmcm9tIHRoZSBbU3dhZ2dlciBQZXRzdG9yZSBleGFtcGxlXShodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvKSBjb25maWd1cmVkIHRvIGdlbmVyYXRlIGFuIGludGVyZmFjZSBmb3IgZWFjaCBlbmRwb2ludAoKKipDTEkgVG9vbCoqCgpgYGBiYXNoCiQgcmVmaXR0ZXIgLi9vcGVuYXBpLmpzb24gLS1uYW1lc3BhY2UgIllvdXIuTmFtZXNwYWNlLk9mLkNob2ljZS5HZW5lcmF0ZWRDb2RlIiAtLW11bHRpcGxlLWludGVyZmFjZXMgQnlFbmRwb2ludApgYGAKCioqU291cmNlIEdlbmVyYXRvciAqKioucmVmaXR0ZXIqKiogZmlsZSoqCgpgYGBqc29uCnsKICAib3BlbkFwaVBhdGgiOiAiLi9vcGVuYXBpLmpzb24iLAogICJuYW1lc3BhY2UiOiAiWW91ci5OYW1lc3BhY2UuT2YuQ2hvaWNlLkdlbmVyYXRlZENvZGUiLAogICJtdWx0aXBsZUludGVyZmFjZXMiOiAiQnlFbmRwb2ludCIKfQpgYGAKCioqT3V0cHV0KioKCmBgYGNzCi8vLyA8c3VtbWFyeT4KLy8vIFVwZGF0ZSBhbiBleGlzdGluZyBwZXQKLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElVcGRhdGVQZXRFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gVXBkYXRlIGFuIGV4aXN0aW5nIHBldCBieSBJZAogICAgLy8vIDwvc3VtbWFyeT4KICAgIFtQdXQoIi9wZXQiKV0KICAgIFRhc2s8UGV0PiBFeGVjdXRlKFtCb2R5XSBQZXQgYm9keSk7Cn0KCi8vLyA8c3VtbWFyeT4KLy8vIEFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJQWRkUGV0RW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIEFkZCBhIG5ldyBwZXQgdG8gdGhlIHN0b3JlCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgW1Bvc3QoIi9wZXQiKV0KICAgIFRhc2s8UGV0PiBFeGVjdXRlKFtCb2R5XSBQZXQgYm9keSk7Cn0KCi8vLyA8c3VtbWFyeT4KLy8vIEZpbmRzIFBldHMgYnkgc3RhdHVzCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJRmluZFBldHNCeVN0YXR1c0VuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT4KICAgIC8vLyBNdWx0aXBsZSBzdGF0dXMgdmFsdWVzIGNhbiBiZSBwcm92aWRlZCB3aXRoIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmdzCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgW0dldCgiL3BldC9maW5kQnlTdGF0dXMiKV0KICAgIFRhc2s8SUNvbGxlY3Rpb248UGV0Pj4gRXhlY3V0ZShbUXVlcnldIFN0YXR1cz8gc3RhdHVzKTsKfQoKLy8vIDxzdW1tYXJ5PgovLy8gRmluZHMgUGV0cyBieSB0YWdzCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJRmluZFBldHNCeVRhZ3NFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gTXVsdGlwbGUgdGFncyBjYW4gYmUgcHJvdmlkZWQgd2l0aCBjb21tYSBzZXBhcmF0ZWQgc3RyaW5ncy4gVXNlIHRhZzEsIHRhZzIsIHRhZzMgZm9yIHRlc3RpbmcuCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgW0dldCgiL3BldC9maW5kQnlUYWdzIildCiAgICBUYXNrPElDb2xsZWN0aW9uPFBldD4+IEV4ZWN1dGUoW1F1ZXJ5KENvbGxlY3Rpb25Gb3JtYXQuTXVsdGkpXSBJRW51bWVyYWJsZTxzdHJpbmc+IHRhZ3MpOwp9CgovLy8gPHN1bW1hcnk+Ci8vLyBGaW5kIHBldCBieSBJRAovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSUdldFBldEJ5SWRFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gUmV0dXJucyBhIHNpbmdsZSBwZXQKICAgIC8vLyA8L3N1bW1hcnk+CiAgICBbR2V0KCIvcGV0L3twZXRJZH0iKV0KICAgIFRhc2s8UGV0PiBFeGVjdXRlKGxvbmcgcGV0SWQpOwp9CgovLy8gPHN1bW1hcnk+Ci8vLyBVcGRhdGVzIGEgcGV0IGluIHRoZSBzdG9yZSB3aXRoIGZvcm0gZGF0YQovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSVVwZGF0ZVBldFdpdGhGb3JtRW5kcG9pbnQKewogICAgW1Bvc3QoIi9wZXQve3BldElkfSIpXQogICAgVGFzayBFeGVjdXRlKGxvbmcgcGV0SWQsIFtRdWVyeV0gc3RyaW5nIG5hbWUsIFtRdWVyeV0gc3RyaW5nIHN0YXR1cyk7Cn0KCi8vLyA8c3VtbWFyeT4KLy8vIERlbGV0ZXMgYSBwZXQKLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElEZWxldGVQZXRFbmRwb2ludAp7CiAgICBbRGVsZXRlKCIvcGV0L3twZXRJZH0iKV0KICAgIFRhc2sgRXhlY3V0ZShsb25nIHBldElkLCBbSGVhZGVyKCJhcGlfa2V5IildIHN0cmluZyBhcGlfa2V5KTsKfQoKLy8vIDxzdW1tYXJ5PgovLy8gdXBsb2FkcyBhbiBpbWFnZQovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSVVwbG9hZEZpbGVFbmRwb2ludAp7CiAgICBbUG9zdCgiL3BldC97cGV0SWR9L3VwbG9hZEltYWdlIildCiAgICBUYXNrPEFwaVJlc3BvbnNlPiBFeGVjdXRlKGxvbmcgcGV0SWQsIFtRdWVyeV0gc3RyaW5nIGFkZGl0aW9uYWxNZXRhZGF0YSwgU3RyZWFtUGFydCBib2R5KTsKfQoKLy8vIDxzdW1tYXJ5PgovLy8gUmV0dXJucyBwZXQgaW52ZW50b3JpZXMgYnkgc3RhdHVzCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJR2V0SW52ZW50b3J5RW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIFJldHVybnMgYSBtYXAgb2Ygc3RhdHVzIGNvZGVzIHRvIHF1YW50aXRpZXMKICAgIC8vLyA8L3N1bW1hcnk+CiAgICBbR2V0KCIvc3RvcmUvaW52ZW50b3J5IildCiAgICBUYXNrPElEaWN0aW9uYXJ5PHN0cmluZywgaW50Pj4gRXhlY3V0ZSgpOwp9CgovLy8gPHN1bW1hcnk+Ci8vLyBQbGFjZSBhbiBvcmRlciBmb3IgYSBwZXQKLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElQbGFjZU9yZGVyRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIFBsYWNlIGEgbmV3IG9yZGVyIGluIHRoZSBzdG9yZQogICAgLy8vIDwvc3VtbWFyeT4KICAgIFtQb3N0KCIvc3RvcmUvb3JkZXIiKV0KICAgIFRhc2s8T3JkZXI+IEV4ZWN1dGUoW0JvZHldIE9yZGVyIGJvZHkpOwp9CgovLy8gPHN1bW1hcnk+Ci8vLyBGaW5kIHB1cmNoYXNlIG9yZGVyIGJ5IElECi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJR2V0T3JkZXJCeUlkRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIEZvciB2YWxpZCByZXNwb25zZSB0cnkgaW50ZWdlciBJRHMgd2l0aCB2YWx1ZSA8PSA1IG9yID4gMTAuIE90aGVyIHZhbHVlcyB3aWxsIGdlbmVyYXRlZCBleGNlcHRpb25zCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgW0dldCgiL3N0b3JlL29yZGVyL3tvcmRlcklkfSIpXQogICAgVGFzazxPcmRlcj4gRXhlY3V0ZShsb25nIG9yZGVySWQpOwp9CgovLy8gPHN1bW1hcnk+Ci8vLyBEZWxldGUgcHVyY2hhc2Ugb3JkZXIgYnkgSUQKLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElEZWxldGVPcmRlckVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT4KICAgIC8vLyBGb3IgdmFsaWQgcmVzcG9uc2UgdHJ5IGludGVnZXIgSURzIHdpdGggdmFsdWUgPCAxMDAwLiBBbnl0aGluZyBhYm92ZSAxMDAwIG9yIG5vbmludGVnZXJzIHdpbGwgZ2VuZXJhdGUgQVBJIGVycm9ycwogICAgLy8vIDwvc3VtbWFyeT4KICAgIFtEZWxldGUoIi9zdG9yZS9vcmRlci97b3JkZXJJZH0iKV0KICAgIFRhc2sgRXhlY3V0ZShsb25nIG9yZGVySWQpOwp9CgovLy8gPHN1bW1hcnk+Ci8vLyBDcmVhdGUgdXNlcgovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSUNyZWF0ZVVzZXJFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gVGhpcyBjYW4gb25seSBiZSBkb25lIGJ5IHRoZSBsb2dnZWQgaW4gdXNlci4KICAgIC8vLyA8L3N1bW1hcnk+CiAgICBbUG9zdCgiL3VzZXIiKV0KICAgIFRhc2sgRXhlY3V0ZShbQm9keV0gVXNlciBib2R5KTsKfQoKLy8vIDxzdW1tYXJ5PgovLy8gQ3JlYXRlcyBsaXN0IG9mIHVzZXJzIHdpdGggZ2l2ZW4gaW5wdXQgYXJyYXkKLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElDcmVhdGVVc2Vyc1dpdGhMaXN0SW5wdXRFbmRwb2ludAp7CiAgICAvLy8gPHN1bW1hcnk+CiAgICAvLy8gQ3JlYXRlcyBsaXN0IG9mIHVzZXJzIHdpdGggZ2l2ZW4gaW5wdXQgYXJyYXkKICAgIC8vLyA8L3N1bW1hcnk+CiAgICBbUG9zdCgiL3VzZXIvY3JlYXRlV2l0aExpc3QiKV0KICAgIFRhc2s8VXNlcj4gRXhlY3V0ZShbQm9keV0gSUVudW1lcmFibGU8VXNlcj4gYm9keSk7Cn0KCi8vLyA8c3VtbWFyeT4KLy8vIExvZ3MgdXNlciBpbnRvIHRoZSBzeXN0ZW0KLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElMb2dpblVzZXJFbmRwb2ludAp7CiAgICBbR2V0KCIvdXNlci9sb2dpbiIpXQogICAgVGFzazxzdHJpbmc+IEV4ZWN1dGUoW1F1ZXJ5XSBzdHJpbmcgdXNlcm5hbWUsIFtRdWVyeV0gc3RyaW5nIHBhc3N3b3JkKTsKfQoKLy8vIDxzdW1tYXJ5PgovLy8gTG9ncyBvdXQgY3VycmVudCBsb2dnZWQgaW4gdXNlciBzZXNzaW9uCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJTG9nb3V0VXNlckVuZHBvaW50CnsKICAgIFtHZXQoIi91c2VyL2xvZ291dCIpXQogICAgVGFzayBFeGVjdXRlKCk7Cn0KCi8vLyA8c3VtbWFyeT4KLy8vIEdldCB1c2VyIGJ5IHVzZXIgbmFtZQovLy8gPC9zdW1tYXJ5PgpwdWJsaWMgcGFydGlhbCBpbnRlcmZhY2UgSUdldFVzZXJCeU5hbWVFbmRwb2ludAp7CiAgICBbR2V0KCIvdXNlci97dXNlcm5hbWV9IildCiAgICBUYXNrPFVzZXI+IEV4ZWN1dGUoc3RyaW5nIHVzZXJuYW1lKTsKfQoKLy8vIDxzdW1tYXJ5PgovLy8gVXBkYXRlIHVzZXIKLy8vIDwvc3VtbWFyeT4KcHVibGljIHBhcnRpYWwgaW50ZXJmYWNlIElVcGRhdGVVc2VyRW5kcG9pbnQKewogICAgLy8vIDxzdW1tYXJ5PgogICAgLy8vIFRoaXMgY2FuIG9ubHkgYmUgZG9uZSBieSB0aGUgbG9nZ2VkIGluIHVzZXIuCiAgICAvLy8gPC9zdW1tYXJ5PgogICAgW1B1dCgiL3VzZXIve3VzZXJuYW1lfSIpXQogICAgVGFzayBFeGVjdXRlKHN0cmluZyB1c2VybmFtZSwgW0JvZHldIFVzZXIgYm9keSk7Cn0KCi8vLyA8c3VtbWFyeT4KLy8vIERlbGV0ZSB1c2VyCi8vLyA8L3N1bW1hcnk+CnB1YmxpYyBwYXJ0aWFsIGludGVyZmFjZSBJRGVsZXRlVXNlckVuZHBvaW50CnsKICAgIC8vLyA8c3VtbWFyeT4KICAgIC8vLyBUaGlzIGNhbiBvbmx5IGJlIGRvbmUgYnkgdGhlIGxvZ2dlZCBpbiB1c2VyLgogICAgLy8vIDwvc3VtbWFyeT4KICAgIFtEZWxldGUoIi91c2VyL3t1c2VybmFtZX0iKV0KICAgIFRhc2sgRXhlY3V0ZShzdHJpbmcgdXNlcm5hbWUpOwp9CmBgYAoKIyMgUmVzdFNlcnZpY2UKCkhlcmUncyBhbiBleGFtcGxlIHVzYWdlIG9mIHRoZSBnZW5lcmF0ZWQgY29kZSBhYm92ZQoKYGBgY3MKdXNpbmcgUmVmaXQ7CnVzaW5nIFN5c3RlbTsKdXNpbmcgU3lzdGVtLlRocmVhZGluZy5UYXNrczsKCm5hbWVzcGFjZSBZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZTsKCmludGVybmFsIGNsYXNzIFByb2dyYW0KewogICAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgVGFzayBNYWluKHN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgdmFyIGNsaWVudCA9IFJlc3RTZXJ2aWNlLkZvcjxJU3dhZ2dlclBldHN0b3JlPigiaHR0cHM6Ly9wZXRzdG9yZTMuc3dhZ2dlci5pby9hcGkvdjMiKTsKICAgICAgICB2YXIgcGV0ID0gYXdhaXQgY2xpZW50LkdldFBldEJ5SWQoMSk7CgogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCIjIyBVc2luZyBUYXNrPFQ+IGFzIHJldHVybiB0eXBlICMjIik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJOYW1lOiB7cGV0Lk5hbWV9Iik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJDYXRlZ29yeToge3BldC5DYXRlZ29yeS5OYW1lfSIpOwogICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCQiU3RhdHVzOiB7cGV0LlN0YXR1c30iKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgpOwoKICAgICAgICB2YXIgY2xpZW50MiA9IFJlc3RTZXJ2aWNlLkZvcjxXaXRoQXBpUmVzcG9uc2UuSVN3YWdnZXJQZXRzdG9yZT4oImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIik7CiAgICAgICAgdmFyIHJlc3BvbnNlID0gYXdhaXQgY2xpZW50Mi5HZXRQZXRCeUlkKDIpOwoKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgiIyMgVXNpbmcgVGFzazxJQXBpUmVzcG9uc2U8VD4+IGFzIHJldHVybiB0eXBlICMjIik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJIVFRQIFN0YXR1cyBDb2RlOiB7cmVzcG9uc2UuU3RhdHVzQ29kZX0iKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgkIk5hbWU6IHtyZXNwb25zZS5Db250ZW50Lk5hbWV9Iik7CiAgICAgICAgQ29uc29sZS5Xcml0ZUxpbmUoJCJDYXRlZ29yeToge3Jlc3BvbnNlLkNvbnRlbnQuQ2F0ZWdvcnkuTmFtZX0iKTsKICAgICAgICBDb25zb2xlLldyaXRlTGluZSgkIlN0YXR1czoge3Jlc3BvbnNlLkNvbnRlbnQuU3RhdHVzfSIpOwogICAgfQp9CmBgYAoKVGhlIGBSZXN0U2VydmljZWAgY2xhc3MgZ2VuZXJhdGVzIGFuIGltcGxlbWVudGF0aW9uIG9mIGBJU3dhZ2dlclBldHN0b3JlYCB0aGF0IHVzZXMgYEh0dHBDbGllbnRgIHRvIG1ha2UgaXRzIGNhbGxzLiAKClRoZSBjb2RlIGFib3ZlIHdoZW4gcnVuIHdpbGwgb3V0cHV0IHNvbWV0aGluZyBsaWtlIHRoaXM6CgpgYGAKIyMgVXNpbmcgVGFzazxUPiBhcyByZXR1cm4gdHlwZSAjIwpOYW1lOiBHYXRpdG90b3RvdG8KQ2F0ZWdvcnk6IENoYXVjaXRvClN0YXR1czogU29sZAoKIyMgVXNpbmcgVGFzazxJQXBpUmVzcG9uc2U8VD4+IGFzIHJldHVybiB0eXBlICMjCkhUVFAgU3RhdHVzIENvZGU6IE9LCk5hbWU6IEdhdGl0b3RvdG90bwpDYXRlZ29yeTogQ2hhdWNpdG8KU3RhdHVzOiBTb2xkCmBgYAoKIyMgQVNQLk5FVCBDb3JlIGFuZCBIdHRwQ2xpZW50RmFjdG9yeQoKSGVyZSdzIGFuIGV4YW1wbGUgTWluaW1hbCBBUEkgd2l0aCB0aGUgW2BSZWZpdC5IdHRwQ2xpZW50RmFjdG9yeWBdKGh0dHBzOi8vd3d3Lm51Z2V0Lm9yZy9wYWNrYWdlcy9SZWZpdC5IdHRwQ2xpZW50RmFjdG9yeSkgbGlicmFyeToKCmBgYGNzCnVzaW5nIFJlZml0Owp1c2luZyBZb3VyLk5hbWVzcGFjZS5PZi5DaG9pY2UuR2VuZXJhdGVkQ29kZTsKCnZhciBidWlsZGVyID0gV2ViQXBwbGljYXRpb24uQ3JlYXRlQnVpbGRlcihhcmdzKTsKYnVpbGRlci5TZXJ2aWNlcy5BZGRFbmRwb2ludHNBcGlFeHBsb3JlcigpOwpidWlsZGVyLlNlcnZpY2VzLkFkZFN3YWdnZXJHZW4oKTsKYnVpbGRlci5TZXJ2aWNlcwogICAgLkFkZFJlZml0Q2xpZW50PElTd2FnZ2VyUGV0c3RvcmU+KCkKICAgIC5Db25maWd1cmVIdHRwQ2xpZW50KGMgPT4gYy5CYXNlQWRkcmVzcyA9IG5ldyBVcmkoImh0dHBzOi8vcGV0c3RvcmUzLnN3YWdnZXIuaW8vYXBpL3YzIikpOwoKdmFyIGFwcCA9IGJ1aWxkZXIuQnVpbGQoKTsKYXBwLk1hcEdldCgKICAgICAgICAiL3BldC97aWQ6bG9uZ30iLAogICAgICAgIGFzeW5jIChJU3dhZ2dlclBldHN0b3JlIHBldHN0b3JlLCBsb25nIGlkKSA9PgogICAgICAgIHsKICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRzLk9rKGF3YWl0IHBldHN0b3JlLkdldFBldEJ5SWQoaWQpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjYXRjaCAoUmVmaXQuQXBpRXhjZXB0aW9uIGUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBSZXN1bHRzLlN0YXR1c0NvZGUoKGludCllLlN0YXR1c0NvZGUpOwogICAgICAgICAgICB9CiAgICAgICAgfSkKICAgIC5XaXRoTmFtZSgiR2V0UGV0QnlJZCIpCiAgICAuV2l0aE9wZW5BcGkoKTsKCmFwcC5Vc2VIdHRwc1JlZGlyZWN0aW9uKCk7CmFwcC5Vc2VTd2FnZ2VyVUkoKTsKYXBwLlVzZVN3YWdnZXIoKTsKYXBwLlJ1bigpOwpgYGAKCi5ORVQgQ29yZSBzdXBwb3J0cyByZWdpc3RlcmluZyB0aGUgZ2VuZXJhdGVkIGBJU3dhZ2dlclBldHN0b3JlYCBpbnRlcmZhY2UgdmlhIGBIdHRwQ2xpZW50RmFjdG9yeWAKClRoZSBmb2xsb3dpbmcgcmVxdWVzdCB0byB0aGUgQVBJIGFib3ZlCmBgYHNoZWxsCiQgY3VybCAtWCAnR0VUJyAnaHR0cHM6Ly9sb2NhbGhvc3Q6NTAwMS9wZXQvMScgLUggJ2FjY2VwdDogYXBwbGljYXRpb24vanNvbicKYGBgCgpSZXR1cm5zIGEgcmVzcG9uc2UgdGhhdCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOgpgYGBqc29uCnsKICAiaWQiOiAxLAogICJuYW1lIjogIlNwZWNpYWxfY2hhcl9vd25lcl8hQCMkXiYoKWAudGVzdGluZyIsCiAgInBob3RvVXJscyI6IFsKICAgICJodHRwczovL3BldHN0b3JlMy5zd2FnZ2VyLmlvL3Jlc291cmNlcy9waG90b3MvNjIzMzg5MDk1LmpwZyIKICBdLAogICJ0YWdzIjogW10sCiAgInN0YXR1cyI6ICJTb2xkIgp9CmBgYAoKIyMgU3lzdGVtIHJlcXVpcmVtZW50cwouTkVUIDYuMCAoTFRTKQoKIyMgQ29udHJpYnV0b3JzCgo8IS0tIEFMTC1DT05UUklCVVRPUlMtTElTVDpTVEFSVCAtIERvIG5vdCByZW1vdmUgb3IgbW9kaWZ5IHRoaXMgc2VjdGlvbiAtLT4KPCEtLSBwcmV0dGllci1pZ25vcmUtc3RhcnQgLS0+CjwhLS0gbWFya2Rvd25saW50LWRpc2FibGUgLS0+Cjx0YWJsZT4KICA8dGJvZHk+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL25lb0dlbmV2YSI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS84MDQ3MjQ/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IlBoaWxpcCBDb3giLz48YnIgLz48c3ViPjxiPlBoaWxpcCBDb3g8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1uZW9HZW5ldmEiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9jYW0ubWFjZmFyLmxhbmQvIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzEyOTg4NDc/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkNhbWVyb24gTWFjRmFybGFuZCIvPjxiciAvPjxzdWI+PGI+Q2FtZXJvbiBNYWNGYXJsYW5kPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9ZGlzdGFudGNhbSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwOi8va2dhbWUudHciPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzY0NjUzMj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0ia2dhbWUiLz48YnIgLz48c3ViPjxiPmtnYW1lPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9a2dhbWVjYXJ0ZXIiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cDovL3lya2kubm8iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTE1NzM2MDE/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IlRob21hcyBQZXR0ZXJzZW4gLyBZcmtpIi8+PGJyIC8+PHN1Yj48Yj5UaG9tYXMgUGV0dGVyc2VuIC8gWXJraTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPSIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vMWt2aW4iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNDY0MjU5ODA/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkFydGVtIi8+PGJyIC8+PHN1Yj48Yj5BcnRlbTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQTFrdmluIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbTdjbGFya2UiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNDc0MzkxNDQ/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9Im03Y2xhcmtlIi8+PGJyIC8+PHN1Yj48Yj5tN2NsYXJrZTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQW03Y2xhcmtlIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20va2lyaWRlcyI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMzYwMjE0Mz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0ia2lyaWRlcyIvPjxiciAvPjxzdWI+PGI+a2lyaWRlczwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQWtpcmlkZXMiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPWtpcmlkZXMiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9ndWlsbGF1bWVzZXJhbGUiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNjY3MjQwNj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iZ3VpbGxhdW1lc2VyYWxlIi8+PGJyIC8+PHN1Yj48Yj5ndWlsbGF1bWVzZXJhbGU8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1ndWlsbGF1bWVzZXJhbGUiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPiA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZ3VpbGxhdW1lc2VyYWxlIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vUm9mbGluY29wdGVyIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE2OTAyNDM/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkRlbm5pcyBCcmVudGplcyIvPjxiciAvPjxzdWI+PGI+RGVubmlzIEJyZW50amVzPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9Um9mbGluY29wdGVyIiB0aXRsZT0iQ29kZSI+8J+SuzwvYT4gPGEgaHJlZj0iI2lkZWFzLVJvZmxpbmNvcHRlciIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vd3d3LmxpbmtlZGluLmNvbS9pbi9oaWNrZXlkYW1pYW4vIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzU3NDM2P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJEYW1pYW4gSGlja2V5Ii8+PGJyIC8+PHN1Yj48Yj5EYW1pYW4gSGlja2V5PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZGFtaWFuaCIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3JpY2hhcmRodS1sbWciPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTI2NDMwNzg3P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJyaWNoYXJkaHUtbG1nIi8+PGJyIC8+PHN1Yj48Yj5yaWNoYXJkaHUtbG1nPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBcmljaGFyZGh1LWxtZyIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2JyZWFzZS1jb2xpbiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80NzM1ODkzNT92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iYnJlYXNlLWNvbGluIi8+PGJyIC8+PHN1Yj48Yj5icmVhc2UtY29saW48L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FicmVhc2UtY29saW4iIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9hbmdlbG9mYiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8yMDMyMjU3P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJhbmdlbG9mYiIvPjxiciAvPjxzdWI+PGI+YW5nZWxvZmI8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1hbmdlbG9mYiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vTm9HUm8iPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvNTY2NTI3Mz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iRGltIE5vZ3JvIi8+PGJyIC8+PHN1Yj48Yj5EaW0gTm9ncm88L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1Ob0dSbyIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3lhZGFuaWxvdjE5Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE3MTYxMDY1P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJ5YWRhbmlsb3YxOSIvPjxiciAvPjxzdWI+PGI+eWFkYW5pbG92MTk8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy15YWRhbmlsb3YxOSIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9kYW5wb3dlbGw4OCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xMTAwMzk3P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJEYW5pZWwgUG93ZWxsIi8+PGJyIC8+PHN1Yj48Yj5EYW5pZWwgUG93ZWxsPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZGFucG93ZWxsODgiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9Fa2tlaXIiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMzYxOTQ2ODU/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkVra2VpciIvPjxiciAvPjxzdWI+PGI+RWtrZWlyPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9RWtrZWlyIiB0aXRsZT0iRG9jdW1lbnRhdGlvbiI+8J+TljwvYT4gPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQUVra2VpciIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3dheWxvbm10eiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS80NjA0NTc5P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJXYXlsb24gTWFydGluZXoiLz48YnIgLz48c3ViPjxiPldheWxvbiBNYXJ0aW5lejwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQXdheWxvbm10eiIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL3ZpbmF5bWFkdXBhdGhpIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzM4MTAyOTAwP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJ2a21hZHVwYSIvPjxiciAvPjxzdWI+PGI+dmttYWR1cGE8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0F2aW5heW1hZHVwYXRoaSIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL05vYmxpeCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8yMjA3Njg4Mz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iTm9ibGl4Ii8+PGJyIC8+PHN1Yj48Yj5Ob2JsaXg8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9jb21taXRzP2F1dGhvcj1Ob2JsaXgiIHRpdGxlPSJDb2RlIj7wn5K7PC9hPiA8YSBocmVmPSIjaWRlYXMtTm9ibGl4IiB0aXRsZT0iSWRlYXMsIFBsYW5uaW5nLCAmIEZlZWRiYWNrIj7wn6SUPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly93d3cudmVlemxhLmlvIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzIzMDQzMj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iQXR0aWxhIEhhamRyaWsiLz48YnIgLz48c3ViPjxiPkF0dGlsYSBIYWpkcmlrPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSIjaWRlYXMtYXR0aWxhaCIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgPC90cj4KICAgIDx0cj4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vYmllbGlrMDEiPjxpbWcgc3JjPSJodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvOTIwOTUwP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJiaWVsaWswMSIvPjxiciAvPjxzdWI+PGI+YmllbGlrMDE8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FiaWVsaWswMSIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPiA8YSBocmVmPSIjaWRlYXMtYmllbGlrMDEiIHRpdGxlPSJJZGVhcywgUGxhbm5pbmcsICYgRmVlZGJhY2siPvCfpJQ8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbmFhZWVmIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQzMzM5MDcxP3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJuYWFlZWYiLz48YnIgLz48c3ViPjxiPm5hYWVlZjwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iI2lkZWFzLW5hYWVlZiIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9hbHJ6Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzMxMDU5Nzk/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9IkFsaXJlemEgSGFiaWJpIi8+PGJyIC8+PHN1Yj48Yj5BbGlyZXphIEhhYmliaTwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2lzc3Vlcz9xPWF1dGhvciUzQWFscnoiIHRpdGxlPSJCdWcgcmVwb3J0cyI+8J+QmzwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9FRVBhcmtlciI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTg3NDA3Nj92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0iSmVmZiBQYXJrZXIsIFBFIi8+PGJyIC8+PHN1Yj48Yj5KZWZmIFBhcmtlciwgUEU8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FFRVBhcmtlciIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2pvZHM0Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzM4MzI4MjA/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9ImpvZHMiLz48YnIgLz48c3ViPjxiPmpvZHM8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9IiNpZGVhcy1qb2RzNCIgdGl0bGU9IklkZWFzLCBQbGFubmluZywgJiBGZWVkYmFjayI+8J+klDwvYT48L3RkPgogICAgICA8dGQgYWxpZ249ImNlbnRlciIgdmFsaWduPSJ0b3AiIHdpZHRoPSIxNC4yOCUiPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9lZGltYXJxdWV6Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQxNzkxNzE5P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJFZGltYXJxdWV6IE1lZGVpcm9zIi8+PGJyIC8+PHN1Yj48Yj5FZGltYXJxdWV6IE1lZGVpcm9zPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvY29tbWl0cz9hdXRob3I9ZWRpbWFycXVleiIgdGl0bGU9IkNvZGUiPvCfkrs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vc2FmYWtrZXNpa2NpIj48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzcwNjcyNTI/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9InNhZmFra2VzaWtjaSIvPjxiciAvPjxzdWI+PGI+c2FmYWtrZXNpa2NpPC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBc2FmYWtrZXNpa2NpIiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgIDwvdHI+CiAgICA8dHI+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2ZvbGJyZWNodCI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDU1Mzc4NDY/dj00P3M9MTAwIiB3aWR0aD0iMTAwcHg7IiBhbHQ9ImZvbGJyZWNodCIvPjxiciAvPjxzdWI+PGI+Zm9sYnJlY2h0PC9iPjwvc3ViPjwvYT48YnIgLz48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2hyaXN0aWFuaGVsbGUvcmVmaXR0ZXIvaXNzdWVzP3E9YXV0aG9yJTNBZm9sYnJlY2h0IiB0aXRsZT0iQnVnIHJlcG9ydHMiPvCfkJs8L2E+PC90ZD4KICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHZhbGlnbj0idG9wIiB3aWR0aD0iMTQuMjglIj48YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vbW9ydGVubGF1cnNlbiI+PGltZyBzcmM9Imh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8yODc1OTczNz92PTQ/cz0xMDAiIHdpZHRoPSIxMDBweDsiIGFsdD0ibW9ydGVubGF1cnNlbiIvPjxiciAvPjxzdWI+PGI+bW9ydGVubGF1cnNlbjwvYj48L3N1Yj48L2E+PGJyIC8+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NocmlzdGlhbmhlbGxlL3JlZml0dGVyL2NvbW1pdHM/YXV0aG9yPW1vcnRlbmxhdXJzZW4iIHRpdGxlPSJDb2RlIj7wn5K7PC9hPjwvdGQ+CiAgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB2YWxpZ249InRvcCIgd2lkdGg9IjE0LjI4JSI+PGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL21hbnVlbC1mZXJuYW5kZXotcm9kcmlndWV6Ij48aW1nIHNyYz0iaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzQ4NTIwMjA1P3Y9ND9zPTEwMCIgd2lkdGg9IjEwMHB4OyIgYWx0PSJtYW51ZWwtZmVybmFuZGV6LXJvZHJpZ3VleiIvPjxiciAvPjxzdWI+PGI+bWFudWVsLWZlcm5hbmRlei1yb2RyaWd1ZXo8L2I+PC9zdWI+PC9hPjxiciAvPjxhIGhyZWY9Imh0dHBzOi8vZ2l0aHViLmNvbS9jaHJpc3RpYW5oZWxsZS9yZWZpdHRlci9pc3N1ZXM/cT1hdXRob3IlM0FtYW51ZWwtZmVybmFuZGV6LXJvZHJpZ3VleiIgdGl0bGU9IkJ1ZyByZXBvcnRzIj7wn5CbPC9hPjwvdGQ+CiAgICA8L3RyPgogIDwvdGJvZHk+CjwvdGFibGU+Cgo8IS0tIG1hcmtkb3dubGludC1yZXN0b3JlIC0tPgo8IS0tIHByZXR0aWVyLWlnbm9yZS1lbmQgLS0+Cgo8IS0tIEFMTC1DT05UUklCVVRPUlMtTElTVDpFTkQgLS0+CgojCgpGb3IgdGlwcyBhbmQgdHJpY2tzIG9uIHNvZnR3YXJlIGRldmVsb3BtZW50LCBjaGVjayBvdXQgW215IGJsb2ddKGh0dHBzOi8vY2hyaXN0aWFuaGVsbGUuY29tKQoKSWYgeW91IGZpbmQgdGhpcyB1c2VmdWwgYW5kIGZlZWwgYSBiaXQgZ2VuZXJvdXMgdGhlbiBmZWVsIGZyZWUgdG8gW2J1eSBtZSBhIGNvZmZlZSDimJVdKGh0dHBzOi8vd3d3LmJ1eW1lYWNvZmZlZS5jb20vY2hyaXN0aWFuaGVsbGUpCg== + readmeEtag: '"2956a5acab18bb6d9b082757513e8e18ae9e404f24f0ed022506aacdca01e4a4"' + readmeLastModified: Wed, 13 Dec 2023 22:54:11 GMT repositoryId: 598846021 description: Refit Client API Generator for OpenAPI created: '2023-02-07T23:18:12Z' @@ -9897,7 +9897,7 @@ owner: christianhelle logo: https://avatars.githubusercontent.com/u/710400?v=4 license: GPL-3.0 - repoEtag: '"c399b08e9691dcbd836af0871674ade611fdac8e49c8b4445691987160f62825"' + repoEtag: '"90e79aeff06e76f5503651f6a9f6d9ae85d815c3d0c02900983a70e233769f64"' repoLastModified: Sat, 09 Dec 2023 12:37:31 GMT category: Parsers foundInMaster: true @@ -10016,17 +10016,17 @@ A curated list of awesome JSON Schema resources, tutorials, tools, and more. created: '2021-09-09T11:39:06Z' - updated: '2023-12-06T11:30:52Z' + updated: '2023-12-13T05:13:07Z' language: Handlebars archived: false - stars: 78 + stars: 79 watchers: 7 forks: 2 owner: sourcemeta logo: https://avatars.githubusercontent.com/u/74150453?v=4 license: CC0-1.0 - repoEtag: '"fe82e24c69e0c5b1532495be99f56f0aa706600f828eddfc459827891e0bb295"' - repoLastModified: Wed, 06 Dec 2023 11:30:52 GMT + repoEtag: '"a491560da5c2b7fd9dfc948b972174db02d946595a8e89bc3f296bd0b83da3cf"' + repoLastModified: Wed, 13 Dec 2023 05:13:07 GMT foundInMaster: true category: Converters id: 40df0f4f4e0e95da0b9f4aeb27567a36 @@ -10055,7 +10055,7 @@ owner: moclojer logo: https://avatars.githubusercontent.com/u/103039458?v=4 license: MIT - repoEtag: '"aa1f08d0bf6f991c1e0b09559025d65d7ea44fc7e33870d1244d2cc6dc3053a3"' + repoEtag: '"2dab729c606e082401a705f45f7639bbb2b50a47c88cb9c5dec9d31d1e42ea0c"' repoLastModified: Fri, 01 Dec 2023 03:58:04 GMT category: Testing foundInMaster: true @@ -10157,17 +10157,17 @@ repositoryId: 673944158 description: This repository contains the specification files for PayPal REST APIs. created: '2023-08-02T19:26:26Z' - updated: '2023-12-11T16:16:01Z' + updated: '2023-12-13T16:44:10Z' language: null archived: false - stars: 75 + stars: 76 watchers: 12 forks: 77 owner: paypal logo: https://avatars.githubusercontent.com/u/476675?v=4 license: Apache-2.0 - repoEtag: '"bed038a06cc50f56279742204d3eca124dab694f8f7002467a992b09e6b48400"' - repoLastModified: Mon, 11 Dec 2023 16:16:01 GMT + repoEtag: '"e7aff620d601806589276ce7956fc40dff6970ab6d72439b343d2e549a6df295"' + repoLastModified: Wed, 13 Dec 2023 16:44:10 GMT category: Code Generators foundInMaster: true - source: openapi3 tags @@ -10271,7 +10271,7 @@ owner: jellyfin logo: https://avatars.githubusercontent.com/u/45698031?v=4 license: LGPL-3.0 - repoEtag: '"306074bc7991eaa9112a87d2be25a32deed532e89f1fa95b8eef7e8b2215f591"' + repoEtag: '"61c8e5184b8c34ad38149779aae79b75c58d8e0eed082429cb510c2fe31f8725"' repoLastModified: Fri, 01 Dec 2023 07:44:20 GMT foundInMaster: true category: Testing @@ -10319,17 +10319,17 @@ Converts OpenAPI 3.0 definitions to Plant UML text for visualisation of your API. created: '2021-02-17T03:47:43Z' - updated: '2023-12-08T12:56:40Z' + updated: '2023-12-13T09:12:57Z' language: Java archived: false - stars: 65 + stars: 66 watchers: 4 forks: 14 owner: davidmoten logo: https://avatars.githubusercontent.com/u/318187?v=4 license: Apache-2.0 - repoEtag: '"7cea13c0776a2c8bd3caaa854a8291339ae8fa2ea8e65f8c694149555b5bd81c"' - repoLastModified: Fri, 08 Dec 2023 12:56:40 GMT + repoEtag: '"31ea946a0800ecd788e43ac9297ad16567198e147a4e0dd2a151ea402662a37e"' + repoLastModified: Wed, 13 Dec 2023 09:12:57 GMT foundInMaster: true category: SDK id: d4f9d833f5a48b843c52f5ec6f582976 @@ -10514,7 +10514,7 @@ forks: 15 owner: OAI logo: https://avatars.githubusercontent.com/u/16343502?v=4 - repoEtag: '"222e63fb5e853dc94de0a951dde88e8297172b4286d1333af366bec0d0c6c640"' + repoEtag: '"7d1679f8ddcbe03f5a31d9bd66c15229171286968eb79cce4b0eda894901ef67"' repoLastModified: Mon, 11 Dec 2023 17:14:01 GMT category: Server Implementations foundInMaster: true @@ -10765,17 +10765,17 @@ decorators. Supports API versioning, OpenAPI3 and docker. Powered by Koa 2+, Koa-router and Nigerian food (amala+ewedu) created: '2019-07-04T03:11:00Z' - updated: '2023-12-11T22:21:23Z' + updated: '2023-12-13T06:36:06Z' language: TypeScript archived: false - stars: 49 + stars: 50 watchers: 6 forks: 8 owner: iyobo logo: https://avatars.githubusercontent.com/u/5804246?v=4 license: MIT - repoEtag: '"3dc12422fa347a39439940d3f24aa479a939ea883e3a5687ac1b2b5608269898"' - repoLastModified: Mon, 11 Dec 2023 22:21:23 GMT + repoEtag: '"b032299c76a37ff9cc652eafe5dfad430cbea242a4b2c80f9a05d833135bbeff"' + repoLastModified: Wed, 13 Dec 2023 06:36:06 GMT foundInMaster: true category: Server Implementations id: 2907bc65572d999425a855e40ee714ed @@ -10813,9 +10813,9 @@ id: 1f412460f4d4f6b023e9a61816b07932 repositoryMetadata: base64Readme: >- - W2NvbW1lbnRdOiA8PiAoU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogQ29weXJpZ2h0ICYjNDA7YyYjNDE7IDIwMTUgcmVmcmFjdHByb2plY3QpCltjb21tZW50XTogPD4gKFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQpCgpbY29tbWVudF06IDw+IChTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBDb3B5cmlnaHQgJiM0MDtjJiM0MTsgMjAxNSBBcGlhcnkgSW5jLikKW2NvbW1lbnRdOiA8PiAoU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCkKCiMgQXBpRE9NCgpbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9hcGlkb20vYWN0aW9ucy93b3JrZmxvd3MvYnVpbGQueW1sL2JhZGdlLnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9hcGlkb20vYWN0aW9ucykKWyFbRGVwZW5kYWJvdCBlbmFibGVkXShodHRwczovL2JhZGdlbi5uZXQvYmFkZ2UvaWNvbi9kZXBlbmRhYm90P2ljb249ZGVwZW5kYWJvdCZsYWJlbCldKGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2NvZGUtc2VjdXJpdHkvc3VwcGx5LWNoYWluLXNlY3VyaXR5L2tlZXBpbmcteW91ci1kZXBlbmRlbmNpZXMtdXBkYXRlZC1hdXRvbWF0aWNhbGx5KQoKClRoZSBwdXJwb3NlIG9mIEFwaURPTSBpcyB0byBwcm92aWRlIGEgc2luZ2xlLCB1bmlmeWluZyBzdHJ1Y3R1cmUgZm9yIGRlc2NyaWJpbmcgQVBJcyBhY3Jvc3MKQVBJIGRlc2NyaXB0aW9uIGxhbmd1YWdlIGFuZCBzZXJpYWxpemF0aW9uIGZvcm1hdHMuIFRoZXJlIGN1cnJlbnRseSBleGlzdHMgc2V2ZXJhbCBBUEkgZGVzY3JpcHRpb24gbGFuZ3VhZ2VzIG9uZSBjYW4gY2hvb3NlCndoZW4gZGVmaW5pbmcgYW4gQVBJLCBmcm9tIE9wZW5BUEksIFJBTUwgb3IgQVBJIEJsdWVwcmludC4KVGhlcmUgYXJlIGFsc28gbWFueSBzZXJpYWxpemF0aW9uIGZvcm1hdHMgc3VjaCBhcyBYTUwsIFlBTUwgb3IgSlNPTi4gV2l0aG91dCBhIHdheSB0byBwYXJzZSB0aGVzZSBmb3JtYXRzCnRvIHRoZSBzYW1lIHN0cnVjdHVyZSwgZGV2ZWxvcGVycyBhcmUgcmVxdWlyZWQgdG8gaGFuZGxlIGVhY2ggZm9ybWF0IG9uZS1ieS1vbmUsIGVhY2ggaW4gYSBkaWZmZXJlbnQKd2F5IGFuZCBlYWNoIHRyYW5zbGF0aW5nIHRvIHRoZWlyIGludGVybmFsIGRvbWFpbiBtb2RlbC4gVGhpcyBpcyB0ZWRpb3VzLCB0aW1lLWNvbnN1bWluZywKYW5kIHJlcXVpcmVzIGVhY2ggbWFpbnRhaW5lciB0byBzdGF5IGluIHN0ZXAgd2l0aCBldmVyeSBmb3JtYXQgdGhleSBzdXBwb3J0LgoKQXBpRE9NIHNvbHZlcyB0aGlzIGNvbXBsZXggcHJvYmxlbSBpbiBhIHNpbXBsZSB3YXkuIEl0IGFsbG93cyBwYXJzZXJzIHRvIHBhcnNlIHRvIGEgc2luZ2xlIHN0cnVjdHVyZQphbmQgYWxsb3dzIHRvb2wgYnVpbGRlcnMgdG8gY29uc3VtZSBvbmUgc3RydWN0dXJlIGZvciBhbGwgZm9ybWF0cy4KCiMjIFRhYmxlIG9mIENvbnRlbnRzCgotIFtHZXR0aW5nIHN0YXJ0ZWRdKCNnZXR0aW5nLXN0YXJ0ZWQpCiAgLSBbUHJlcmVxdWlzaXRlc10oI3ByZXJlcXVpc2l0ZXMpCiAgLSBbSW5zdGFsbGF0aW9uXSgjaW5zdGFsbGF0aW9uKQogIC0gW1VzYWdlXSgjdXNhZ2UpCiAgLSBbQXBpRE9NIFBsYXlncm91bmRdKCNhcGlkb20tcGxheWdyb3VuZCkKLSBbRGV2ZWxvcG1lbnRdKCNkZXZlbG9wbWVudCkKICAtIFtQcmVyZXF1aXNpdGVzXSgjcHJlcmVxdWlzaXRlcykKICAtIFtTZXR0aW5nIHVwXSgjc2V0dGluZy11cCkKICAtIFtucG0gc2NyaXB0c10oI25wbS1zY3JpcHRzKQogIC0gW0J1aWxkIGFydGlmYWN0c10oI2J1aWxkLWFydGlmYWN0cykKICAtIFtVc2luZyB0aGlzIG1vbm9yZXBvIGFzIGEgbG9jYWwgZGV2IGRlcGVuZGVuY3ldKCN1c2luZy10aGlzLW1vbm9yZXBvLWFzLWEtbG9jYWwtZGV2LWRlcGVuZGVuY3kpCi0gW0NvbnRyaWJ1dGluZ10oI2NvbnRyaWJ1dGluZykKLSBbRG9jdW1lbnRhdGlvbl0oI2RvY3VtZW50YXRpb24pCiAgLSBbV2hhdCBpcyBhbiBFbGVtZW50ID9dKCN3aGF0LWlzLWFuLWVsZW1lbnQtKQogIC0gW0FzIGEgd2F5IHRvIGFubm90YXRlIEpTT05dKCNhcy1hLXdheS10by1hbm5vdGF0ZS1qc29uKQogIC0gW0FzIGEgdW5pZnlpbmcgc3RydWN0dXJlXSgjYXMtYS11bmlmeWluZy1zdHJ1Y3R1cmUpCiAgLSBbQXMgYSBxdWVyeWFibGUgc3RydWN0dXJlXSgjYXMtYS1xdWVyeWFibGUtc3RydWN0dXJlKQogIC0gW0FwaURPTSBzdGFnZXNdKCNhcGlkb20tc3RhZ2VzKQotIFtMaWNlbnNlXSgjbGljZW5zZSkKLSBbU29mdHdhcmUgQmlsbCBPZiBNYXRlcmlhbHMgKFNCT00pXSgjc29mdHdhcmUtYmlsbC1vZi1tYXRlcmlhbHMtc2JvbSkKCiMjIEdldHRpbmcgc3RhcnRlZAoKIyMjIFByZXJlcXVpc2l0ZXMKClRoZXNlIHByZXJlcXVpc2l0ZXMgYXJlIHJlcXVpcmVkIGJvdGggZm9yIGluc3RhbGxpbmcgQXBpRE9NIGFzIGEgbnBtIHBhY2thZ2UgYW5kIGxvY2FsIGRldmVsb3BtZW50IHNldHVwLgoKLSBbbm9kZS1neXBdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL25vZGUtZ3lwKSB3aXRoIFtQeXRob24gMy54XShodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2Fkcy8pCi0gW0dMSUJDXShodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvKSBgPj0yLjI5YAotIFtHQ0MgY29tcGlsZXJdKGh0dHBzOi8vZ2NjLmdudS5vcmcvKQotIFtlbXNjcmlwdGVuXShodHRwczovL2Vtc2NyaXB0ZW4ub3JnL2RvY3MvZ2V0dGluZ19zdGFydGVkL2Rvd25sb2Fkcy5odG1sKSBvciBbZG9ja2VyXShodHRwczovL3d3dy5kb2NrZXIuY29tLykgbmVlZHMgdG8gYmUgaW5zdGFsbGVkLCB3ZSByZWNvbW1lbmQgZ29pbmcgd2l0aCBhIGRvY2tlciBvcHRpb24KCiMjIyBJbnN0YWxsYXRpb24KCkFzc3VtaW5nIFtwcmVyZXF1aXNpdGVzXSgjcHJlcmVxdWlzaXRlcykgYXJlIGFscmVhZHkgaW5zdGFsbGVkLCBBcGlET00gbnBtIHBhY2thZ2VzIGFyZSBpbnN0YWxsYWJsZSBhbmQgd29ya3Mgd2l0aCBgTm9kZS5qcyA+PTEyLjIyLjAgPD0yMGAuCgpZb3UgY2FuIGluc3RhbGwgQXBpRE9NIHBhY2thZ2VzIHVzaW5nIFtucG0gQ0xJXShodHRwczovL2RvY3MubnBtanMuY29tL2NsaSk6CgpgYGBzaAogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLWFzdAogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLWNvcmUKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1lcnJvcgogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLWpzb24tcGF0aAogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLWpzb24tcG9pbnRlcgogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLWpzb24tcG9pbnRlci1yZWxhdGl2ZQogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLWxvZ2dpbmcKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1scwogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLW5zLWFwaS1kZXNpZ24tc3lzdGVtcwogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLW5zLWFzeW5jYXBpLTIKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1ucy1qc29uLXNjaGVtYS1kcmFmdC00CiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tbnMtanNvbi1zY2hlbWEtZHJhZnQtNgogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLW5zLWpzb24tc2NoZW1hLWRyYWZ0LTcKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1ucy1vcGVuYXBpLTIKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1ucy1vcGVuYXBpLTMtMAogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLW5zLW9wZW5hcGktMy0xCiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tbnMtd29ya2Zsb3dzLTEKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1wYXJzZXIKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1wYXJzZXItYWRhcHRlci1hcGktZGVzaWduLXN5c3RlbXMtanNvbgogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLXBhcnNlci1hZGFwdGVyLWFwaS1kZXNpZ24tc3lzdGVtcy15YW1sCiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tcGFyc2VyLWFkYXB0ZXItYXN5bmNhcGktanNvbi0yCiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tcGFyc2VyLWFkYXB0ZXItYXN5bmNhcGkteWFtbC0yCiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tcGFyc2VyLWFkYXB0ZXItanNvbgogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLXBhcnNlci1hZGFwdGVyLW9wZW5hcGktanNvbi0yCiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tcGFyc2VyLWFkYXB0ZXItb3BlbmFwaS1qc29uLTMtMAogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLXBhcnNlci1hZGFwdGVyLW9wZW5hcGktanNvbi0zLTEKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1wYXJzZXItYWRhcHRlci1vcGVuYXBpLXlhbWwtMgogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLXBhcnNlci1hZGFwdGVyLW9wZW5hcGkteWFtbC0zLTAKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1wYXJzZXItYWRhcHRlci1vcGVuYXBpLXlhbWwtMy0xCiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tcGFyc2VyLWFkYXB0ZXIteWFtbC0xLTIKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1yZWZlcmVuY2UKYGBgCgojIyMgVXNhZ2UKCkV2ZXJ5IHBhY2thZ2Ugb2YgdGhlIG1vbm9yZXBvIGhhcyBhbiBhc3NvY2lhdGVkIFJFQURNRSBmaWxlIGRlbW9uc3RyYXRpbmcgaXRzIHB1cnBvc2UgYW5kIGNvbnRhaW5pbmcKdXNhZ2UgZXhhbXBsZXMuCgojIyMgQXBpRE9NIFBsYXlncm91bmQKCkFwaURPTSBQbGF5Z3JvdW5kIGlzIGEgUmVhY3QgYXBwbGljYXRpb24gdGhhdCBydW5zIGluIGEgYnJvd3NlciBhbmQgY2FuIHZpc3VhbGx5IGRlbW9uc3RyYXRlIGNhcGFiaWxpdGllcwpvZiB0aGUgQXBpRE9NLiBBcGlET00gUGxheWdyb3VuZCBpcyBidWlsZCBhbmQgZGVwbG95ZWQgd2hlbmV2ZXIgdGhlIG5ldyBjb21taXQgbGFuZHMgb24gYG1haW5gIGJyYW5jaC4KCiFbaW1hZ2VdKGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzE5MzI4Ni8xNDUwMTA1MjItNWQ4NWUzNGItOGQyOC00YTA3LTllZTItYjI4ODA3YTAxM2NkLnBuZykKCkFwaURPTSBQbGF5Z3JvdW5kIGlzIGF2YWlsYWJsZSBhdCBbaHR0cHM6Ly9zd2FnZ2VyLWFwaS5naXRodWIuaW8vYXBpZG9tL10oaHR0cHM6Ly9zd2FnZ2VyLWFwaS5naXRodWIuaW8vYXBpZG9tLykKCiMjIERldmVsb3BtZW50CgpUaGlzIGlzIGEgbW9ub3JlcG8gZm9yIGFsbCBBcGlET00gcGFja2FnZXMuIEFsbCB0aGUgY29kZSBpcyB3cml0dGVuIGluIFtUeXBlU2NyaXB0XShodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvKS4KQWxsIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHdvcmtpbmcgd2l0aCBtb25vcmVwbyBjYW4gYmUgZm91bmQgaW4gdGhpcyBbYXJ0aWNsZV0oaHR0cHM6Ly92bGFkaW1pcmdvcmVqLmNvbS9ibG9nL3RoaW5ncy1pLWhhdmUtbGVhcm5lZC1tYWludGFpbmluZy1qYXZhc2NyaXB0LW1vbm9yZXBvLXdpdGgtbGVybmEvKS4KCkFzc3VtaW5nIFtwcmVyZXF1aXNpdGVzXSgjcHJlcmVxdWlzaXRlcykgYXJlIGFscmVhZHkgaW5zdGFsbGVkLCBbTm9kZS5qc10oaHR0cHM6Ly9ub2RlanMub3JnLykgYD49MjAuMy4wYCBhbmQgYG5wbSA+PTkuNi43YAphcmUgdGhlIG1pbmltdW0gcmVxdWlyZWQgdmVyc2lvbnMgdGhhdCB0aGlzIHJlcG8gcnVucyBvbiwgYnV0IHdlIHJlY29tbWVuZCB1c2luZyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgTm9kZS5qc0AyMC4KCiMjIyBTZXR0aW5nIHVwCgpSdW4gdGhlIGZvbGxvd2luZyBjb21tYW5kcyB0byBzZXR1cCB0aGUgcmVwb3NpdG9yeSBmb3IgbG9jYWwgZGV2ZWxvcG1lbnQ6CgpgYGBzaGVsbAogJCBnaXQgY2xvbmUgaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL2FwaWRvbS5naXQKICQgY2QgYXBpZG9tCiAkIG5wbSBpCiAkIG5wbSBydW4gYnVpbGQKYGBgCgojIyMgU2V0dGluZyB1cCB2aWEgZG9ja2VyCgpUaGVyZSBhcmUgc2l0dWF0aW9ucywgd2hlbiBzYXRpc2Z5aW5nIGFsbCB0aGUgKipwcmVyZXF1aXNpdGVzKiogb2YgdGhpcyByZXBvc2l0b3J5IG9uIHlvdSBsb2NhbApkZXZlbG9wbWVudCBtYWNoaW5lIGlzIGp1c3Qgbm90IHBvc3NpYmxlLiBJbiB0aGF0IGNhc2UsIHlvdSBjYW4gdXNlICoqZG9ja2VyKiogdG8gZ2V0IGFyb3VuZCBpdC4KUmVwb3NpdG9yeSBkaXJlY3RvcnkgaXMgbW91bnRlZCBhcyB2b2x1bWUgaW5zaWRlIGEgcnVubmluZyBjb250YWluZXIgY2FsbGVkIGBhcGlkb20tZGV2YC4KVGhhdCB3YXkgeW91IGNhbiBlZGl0IGNvZGUgbG9jYWxseSBvbiB5b3VyIGRldmVsb3BtZW50IG1hY2hpbmUgYW5kIHJ1biAqKm5wbSBzY3JpcHRzKioKaW5zaWRlIHRoZSBgYXBpZG9tLWRldmAgZG9ja2VyIGNvbnRhaW5lci4KCioqQnVpbGQgdGhlIEFwaURPTSBkb2NrZXIgaW1hZ2U6KioKCmBgYHNoCiAkIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvYXBpZG9tLmdpdAogJCBjZCBhcGlkb20KICQgZG9ja2VyLWNvbXBvc2UgdXAKYGBgCgoqKkluc3RhbGwgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBBcGlET00gaW5zaWRlIHRoZSBkb2NrZXIgY29udGFpbmVyOioqCgpgYGBzaAokIGRvY2tlciBleGVjIC1pdCBhcGlkb20tZGV2IG5wbSBpIC0tdmVyYm9zZQokIGRvY2tlciBleGVjIC1pdCBhcGlkb20tZGV2IG5wbSBydW4gYnVpbGQKYGBgCgoqKlJ1biBucG0gc2NyaXB0cyBpbnNpZGUgdGhlIGRvY2tlciBjb250YWluZXI6KioKCmBgYHNoCiQgZG9ja2VyIGV4ZWMgLWl0IGFwaWRvbS1kZXYgbnBtIHJ1biB0ZXN0CmBgYAoKPiBOb3RlOiBtb25vcmVwbyBuZWVkcyB0byBiZSBidWlsZCBpbiBvcmRlciBmb3IgbW9ub3JlcG8gcGFja2FnZSB0b3BvbG9neSB0byB3b3JrIGNvcnJlY3RseS4KCiMjIyBucG0gc2NyaXB0cwoKU29tZSBucG0gc2NyaXB0cyBydW4gaW4gcGFyYWxsZWwuIERlZmF1bHQgbWF4aW11bSBwYXJhbGxlbGl6YXRpb24gaXMgc2V0IGAyYC4gVGhpcyBpcyBkdWUgdG8gdGhlIGZhY3QKdGhhdCBvdXIgYENJYCBydW5zIG9uIEdpdEh1YiBBY3Rpb25zIHdoaWNoIHVzZXMgR2l0SHViIGhvc3RlZCBydW5uZXJzIHdpdGggWzItY29yZSBDUFVzXShodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3VzaW5nLWdpdGh1Yi1ob3N0ZWQtcnVubmVycy9hYm91dC1naXRodWItaG9zdGVkLXJ1bm5lcnMjc3VwcG9ydGVkLXJ1bm5lcnMtYW5kLWhhcmR3YXJlLXJlc291cmNlcykuCklmIHlvdSBoYXZlIGNvbXB1dGVyIHdpdGggbW9yZSB0aGFuIDIgQ1BVIGNvcmVzLCB5b3UgY2FuIHNwZWVkIHJ1bm5pbmcgbnBtIHNjcmlwdHMgYnkKY3JlYXRpbmcgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgY2FsbGVkIGBDUFVfQ09SRVNgIGFuZCBhc3NpZ24gaXQgYSBudW1iZXIgb2YgeW91ciBDUFUgY29yZXMuCgpBc3N1bWluZyA0IENQVSBjb3JlcyBhcmUgYXZhaWxhYmxlOgoKYGBgc2gKICAkIGV4cG9ydCBDUFVfQ09SRVM9NAogICQgbnBtIHJ1biBidWlsZApgYGAKCmBidWlsZGAgc2NyaXB0cyBub3cgcnVucyBtdWNoIGZhc3RlciB0aGFuIGJlZm9yZS4KCioqQnVpbGQgYXJ0aWZhY3RzKioKCmBgYHNoCiAkIG5wbSBydW4gYnVpbGQKYGBgCgoqKlRlc3QqKgoKWW91IG11c3QgZmlyc3QgKipidWlsZCB0aGUgYXJ0aWZhY3RzKiogYmVmb3JlIHJ1bm5pbmcgdGVzdHMuCgpgYGBzaAogJCBucG0gcnVuIHRlc3QKYGBgCgoqKkxpbnQqKgoKYGBgc2gKICQgbnBtIHJ1biBsaW50CmBgYAoKKipDaGVjayBUeXBlU2NyaXB0IHR5cGVzKioKCmBgYHNoCiAkIG5wbSBydW4gdHlwZXNjcmlwdDpjaGVjay10eXBlcwpgYGAKCioqR2VuZXJhdGUgVHlwZVNjcmlwdCB0eXBlcyoqCgpgYGBzaAogJCBucG0gcnVuIHR5cGVzY3JpcHQ6ZGVjbGFyYXRpb24KYGBgCgoqKkNsZWFuKioKCmBgYHNoCiAkIG5wbSBydW4gY2xlYW4KYGBgCgojIyMgQnVpbGQgYXJ0aWZhY3RzCgpBbGwgdGhlIHBhY2thZ2VzIGhhdmUgaWRlbnRpY2FsIGJ1aWxkIHN5c3RlbSBhbmQgZXhwb3NlIGJ1aWxkIGFydGlmYWN0cyBpbiBpZGVudGljYWwgd2F5LgpBZnRlciBidWlsZGluZyBhcnRpZmFjdHMsIGV2ZXJ5IHBhY2thZ2Ugd2lsbCBjb250YWluIGZpdmUgKDUpIGFkZGl0aW9uYWwgZGlyZWN0b3JpZXMuCkFsbCB0aGUgYnVpbGQgYXJ0aWZhY3RzIGFyZSBwb2x5bW9ycGhpYyAtIHRoZXkgY2FuIHJ1biBpbiBkaWZmZXJlbnQgZW52aXJvbm1lbnRzIGxpa2UgW1dlYiBCcm93c2VyXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9XZWJfYnJvd3NlciksIFtOb2RlLmpzXShodHRwczovL25vZGVqcy5vcmcvKSBvciBbV2ViIFdvcmtlcl0oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dlYl9Xb3JrZXJzX0FQSSkuCgoqKmNqcy8qKgoKVGhpcyBkaXJlY3RvcnkgbWlycm9ycyB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb2RlYmFzZSBpbiBgc3JjL2AuCkNvbnRhaW5zIEVTNSBjb21wYXRpYmxlIGNvZGUgd2l0aCBbQ29tbW9uSlNdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0NvbW1vbkpTKSBzdHlsZSBpbXBvcnRzLgpCdWlsZCBmcmFnbWVudHMgaW4gdGhpcyBkaXJlY3RvcnkgYXJlIGlkZWFsIGZvciBbTm9kZS5qc10oaHR0cHM6Ly9ub2RlanMub3JnLykgYW5kIHNpbWlsYXIgZW52aXJvbm1lbnRzLgoKKiplcy8qKgoKVGhpcyBkaXJlY3RvcnkgbWlycm9ycyB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb2RlYmFzZSBpbiBgc3JjL2AuCkNvbnRhaW5zIEVTNSBjb21wYXRpYmxlIGNvZGUgd2l0aCBbRVM2IGltcG9ydHNdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL1N0YXRlbWVudHMvaW1wb3J0KS4KQnVpbGQgZnJhZ21lbnRzIGluIHRoaXMgZGlyZWN0b3J5IGFyZSBpZGVhbCBmb3IgYnVuZGxpbmcgd2l0aCBbV2VicGFja10oaHR0cHM6Ly93ZWJwYWNrLmpzLm9yZy8pIG9yIHNpbWlsYXIgYnVuZGxlcnMuCgoqKmRpc3QvKioKClRoaXMgZGlyZWN0b3J5IGNvbnRhaW5zIGJ1bmRsZWQgYnVpbGQgZnJhZ21lbnRzIHRoYXQgdXNlIFtVTURdKGh0dHBzOi8vZ2l0aHViLmNvbS91bWRqcy91bWQpIG1vZHVsZXMuClRoZXkncmUgaWRlYWwgZm9yIGJyb3dzZXIgdXNhZ2UuIFRoZSBmcmFnbWVudHMgYXJlIGJvdGggaW4gbWluaWZpZWQgYW5kIHVuLW1pbmlmaWVkIGZvcm0uCgoqKnR5cGVzLyoqCgpUeXBlU2NyaXB0IHR5cGVzIGdlbmVyYXRlZCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KCiMjIyBVc2luZyB0aGlzIG1vbm9yZXBvIGFzIGEgbG9jYWwgZGV2IGRlcGVuZGVuY3kKCkZvciB1c2luZyB0aGlzIG1vbm9yZXBvIGFzIGEgbG9jYWwgZGV2IGRlcGVuZGVuY3kgZm9yIGBkZXBlbmRlbnQgcHJvamVjdGAsCmZvbGxvd2luZyBjb21tYW5kcyBuZWVkcyB0byBiZSBpc3N1ZWQgaW5zaWRlIHRoZSBtb25vcmVwbyBkaXJlY3RvcnkgYWZ0ZXIKaXQgaGFzIGJlZW4gY2xvbmVkIHRvIGEgbG9jYWwgZmlsZXN5c3RlbToKCmBgYHNoCiAkIG5wbSBpCiAkIG5wbSBydW4gYnVpbGQKICQgbnBtIHJ1biBsaW5rCmBgYApUaGlzIHdpbGwgaW5zdGFsbCB0aGUgZGVwZW5kZW5jaWVzLCBidWlsdCB0aGUgbW9ub3JlcG8gYW5kIGxpbmsgYWxsIGl0J3MgcGFja2FnZXMgdG8KZ2xvYmFsIGBub2RlX21vZHVsZXNgLgoKIyMjIyBVc2FnZSBpbiBgZGVwZW5kZW50IHByb2plY3RgCgpOb3cgdGhhdCB3ZSBoYXZlIG1vbm9yZXBvIHBhY2thZ2VzIGdsb2JhbGx5IGxpbmtlZCB3ZSBjYW4gdXNlIHRoZW0gaW4gYGRlcGVuZGVudCBwcm9qZWN0YC4KTGV0J3Mgc2F5IGBkZXBlbmRlbnQgcHJvamVjdGAgbmVlZHMgdG8gZGlyZWN0bHkgdXNlIGZvbGxvd2luZyBwYWNrYWdlczoKCi0gQHN3YWdnZXItYXBpL2FwaWRvbS1hc3QKLSBAc3dhZ2dlci1hcGkvYXBpZG9tLWNvcmUKCklzc3VpbmcgZm9sbG93aW5nIGNvbW1hbmQgZnJvbSBpbnNpZGUgdGhlIGBkZXBlbmRlbnQgcHJvamVjdGAgd2lsbCBsaW5rIHRoZXNlIHBhY2thZ2VzOgoKYGBgc2gKICQgbnBtIGxpbmsgQHN3YWdnZXItYXBpL2FwaWRvbS1hc3QgQHN3YWdnZXItYXBpL2FwaWRvbS1jb3JlCmBgYAoKSWYgbW9yZSBwYWNrYWdlcyAob3IgYWxsIG9mIHRoZW0pIG5lZWQgdG8gYmUgdXNlZCBpbiBgZGVwZW5kZW50IHByb2plY3RgLCB0aGV5IG5lZWQgdG8gYmUgZXhwbGljaXRseQplbnVtZXJhdGVkIHVzaW5nIGFib3ZlIGNvbW1hbmQgYW5kIHNlcGFyYXRlZCBieSBzaW5nbGUgZW1wdHkgc3BhY2UuCgpOb3RpY2UgdGhhdCB3ZSBsaW5rIHBhY2thZ2VzIHVzaW5nIHNpbmdsZSBgbnBtIGxpbmtgIGNvbW1hbmQuIFRoaXMgaXMgbmVjZXNzYXJ5CmJlY2F1c2Ugb2YgaG93IGBucG0gbGlua2Agd29ya3MgaW50ZXJuYWxseS4gQWx3YXlzIHVzZSBzaW5nbGUgYG5wbSBsaW5rYCBjb21tYW5kIHdpdGgKbXVsdGlwbGUgcGFja2FnZSBuYW1lcyBhcyBhcmd1bWVudC4KCioqRG9uJ3QgZXZlciBkbyB0aGlzISoqCgpgYGBzaAogJCBucG0gbGluayBAc3dhZ2dlci1hcGkvYXBpZG9tLWFzdAogJCBucG0gbGluayBAc3dhZ2dlci1hcGkvYXBpZG9tLWNvcmUKYGBgCgo+IFNldHRpbmcgdXAgbnBtIHNjcmlwdCBpbiBgZGVwZW5kZW50IHByb2plY3RgIGNhbiBoZWxwIGtlZXAgdGhpbmdzIERSWS4KCiMjIyMgQ2xlYW5pbmcgdXAKCiMjIyMjIERlcGVuZGVudCBwcm9qZWN0CgpUaGUgYmVzdCB3YXkgdG8gdW5saW5rIG1vbm9yZXBvIHBhY2thZ2VzIGZyb20gYGRlcGVuZGVudCBwcm9qZWN0YCBpcyB0byBydW4gZm9sbG93aW5nIGNvbW1hbmQKaW5zaWRlIHRoZSBgZGVwZW5kZW50IHByb2plY3RgOgoKYGBgc2hlbGwKICQgbnBtIGkKYGBgCgpSdW5uaW5nIGBucG0gaWAgd2lsbCByZW1vdmUgdGhlIGxpbmtzIHRvIG1vbm9yZXBvIHBhY2thZ2VzIGFuZCBpbnN0YWxsIHRoZSBwYWNrYWdlcyBmcm9tIG5wbSByZWdpc3RyeS4KCj4gTm90ZTogcnVubmluZyBgbnBtIHVubGluayA8cGFja2FnZS1uYW1lPmAgaW4gYGRlcGVuZGVudCBwcm9qZWN0YCB3aWxsIHJlbW92ZSB0aGUgbGluayB0byBtb25vcmVwbyBwYWNrYWdlLApidXQgd2lsbCBsZWF2ZSB0aGUgYGRlcGVuZGVudCBwcm9qZWN0YCBub2RlX21vZHVsZXMgaW4gY29ycnVwdGVkIHN0YXRlIGFzIHRoZXJlIGlzIG5vIHZlcnNpb24gb2YgdGhlIHBhY2thZ2UKaW5zdGFsbGVkIGFueW1vcmUuIFJ1bm5pbmcgYG5wbSBpYCBpcyBhbHdheXMgYSBwcmVmZXJlZCB3YXkgdG8gcmVzdG9yZSB5b3VyIG5vZGVfbW9kdWxlcyB0byBvcmlnaW5hbCBzdGF0ZS4KCgojIyMjIyBBcGlET00gbW9ub3JlcG8KCkl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gdW5saW5rIG1vbm9yZXBvIHBhY2thZ2VzIGZyb20gZ2xvYmFsIGBub2RlX21vZHVsZXNgLiBCdXQgaWYgeW91CndhbnQgdG8ga2VlcCB5b3VyIGdsb2JhbCBgbm9kZV9tb2R1bGVzYCB0aWR5IHlvdSBjYW4gcnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCBpbiBtb25vcmVwbyBkaXJlY3Rvcnk6CgpgYGBzaGVsbAogJCBucG0gcnVuIHVubGluawpgYGAKClJ1bm5pbmcgYWJvdmUgbnBtIHNjcmlwdCB3aWxsIHVubGluayBhbGwgbW9ub3JlcG8gcGFja2FnZXMgZnJvbSBnbG9iYWwgYG5vZGVfbW9kdWxlc2AuCgpJZiB5b3Ugd2FudCB0byBqdXN0IHVubGluayBwYXJ0aWN1bGFyIG1vbm9yZXBvIHBhY2thZ2VzLCB5b3UgaGF2ZSB0byBlbnVtZXJhdGUgdGhlbSBleHBsaWNpdGx5OgoKYGBgc2hlbGwKICQgbnBtIHVubGluayAtLWdsb2JhbCBAc3dhZ2dlci1hcGkvYXBpZG9tLWFzdCBAc3dhZ2dlci1hcGkvYXBpZG9tLWNvcmUKYGBgCgojIyBDb250cmlidXRpbmcKClRoaXMgcHJvamVjdCB1c2VzIFtzd2FnZ2VyLWFwaV0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpKSBHaXRIdWIgb3JnYW5pemF0aW9ucyBjb250cmlidXRpbmcgZ3VpZGUuCllvdSBjYW4gb2J0YWluIGNvcHkgb2YgdGhpcyBjb250cmlidXRpbmcgZ3VpZGUgYXQgW2h0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS8uZ2l0aHViL2Jsb2IvbWFzdGVyL0NPTlRSSUJVVElORy5tZF0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpLy5naXRodWIvYmxvYi9tYXN0ZXIvQ09OVFJJQlVUSU5HLm1kKS4KUmVhZCBvdXIgY29udHJpYnV0aW5nIGd1aWRlIHRvIGxlYXJuIGFib3V0IG91ciBkZXZlbG9wbWVudCBwcm9jZXNzLCBob3cgdG8gcHJvcG9zZSBidWdmaXhlcyBhbmQgaW1wcm92ZW1lbnRzLAphbmQgaG93IHRvIGJ1aWxkIGFuZCB0ZXN0IHlvdXIgY2hhbmdlcyB0byBBcGlET00uCgojIyBEb2N1bWVudGF0aW9uCgpJZiB0aGVyZSBpcyBvbmUgdGhpbmcgQVBJIGRlc2NyaXB0aW9uIGxhbmd1YWdlcyBoYXZlIHRhdWdodCB1cywgaXQgaXMgdGhhdCBhIHNpbmdsZSBjb250cmFjdCBwcm92aWRlcwp0aGUgYmVzdCBhbmQgZmFzdGVzdCB3YXkgdG8gZGVzaWduIGFuZCBpdGVyYXRlIG9uIGFuIEFQSS4gRGV2ZWxvcGVycyBidWlsZGluZyB0aGUgQVBJIGNhbiBtb3ZlIGluZGVwZW5kZW50bHkKYXMgdGhleSBwcm9ncmVzcyB0b3dhcmRzIHRoZSBkZWZpbmVkIGNvbnRyYWN0IGZvdW5kIGluIHRoZSBPcGVuQVBJIG9yIFJBTUwgZG9jdW1lbnQuCkNvbnZlcnNlbHksIEFQSSBjb25zdW1lcnMgY2FuIGJ1aWxkIHRvb2xzIGZvciBjb25zdW1pbmcgdGhlIEFQSSBiYXNlZCBvbiB0aGUgQVBJIGRlZmluaXRpb24gZG9jdW1lbnQuCgpUaGlzIHNhbWUgcGF0dGVybiBoYXMgcHJvdmVuIHRvIGJlIGp1c3QgYXMgdmFsdWFibGUgZm9yIGJ1aWxkaW5nIEFQSSBkZXNjcmlwdGlvbiBsYW5ndWFnZXMgYW5kIHRvb2xpbmcuCkFwaURPTSBpcyB0aGUgY29udHJhY3QgZm9yIHByb2R1Y2luZyBhbmQgY29uc3VtaW5nIHRoZSBtYW55IEFQSSBkZXNjcmlwdGlvbiBsYW5ndWFnZXMgYW5kIHNlcmlhbGl6YXRpb24gZm9ybWF0cwphbmQgYWxsb3dzIGV2ZXJ5b25lIHRvIG1vdmUgcXVpY2tseSBhbmQgaW5kZXBlbmRlbnRseS4KCiMjIyBXaGF0IGlzIGFuIEVsZW1lbnQgPwoKQXBpRE9NIGlzIG1hZGUgdXAgb2YgbWFueSBzbWFsbCBlbGVtZW50cyB0aGF0IGhhdmUgYSByaWNoIHNlbWFudGljIG1lYW5pbmcgZ2l2ZW4gdGhlaXIgdmFsdWUgYW5kIGNvbnRleHQuCkFuIGVsZW1lbnQgaXMgYW4gaW5kaXZpZHVhbCBwaWVjZSB0aGF0IG1ha2VzIHVwIGFuIEFQSSwgYW5kIGNhbiByYW5nZSBmcm9tIGRlZmluaW5nIGEgcmVzb3VyY2UgdG8gcHJvdmlkaW5nCmFuIGV4YW1wbGUgb2YgYW4gSFRUUCByZXF1ZXN0LgoKVGhlIEFwaURPTSBkZWZpbmVzIGVsZW1lbnRzIHRvIGJlIHVzZWQgZm9yOgoKRGVzY3JpYmluZyBhbiBBUEkKRGVzY3JpYmluZyBkYXRhIHN0cnVjdHVyZXMgdXNlZCB3aXRoaW4gdGhhdCBBUEkKRGVzY3JpYmluZyBwYXJzZSByZXN1bHRzIHdoZW4gcGFyc2luZyBBUEktcmVsYXRlZCBkb2N1bWVudHMKVGhlc2UgZWxlbWVudHMgYWxzbyBzZWVrIHRvIHByb3ZpZGUgYSB3YXkgdG8gZGVjb3VwbGUgQVBJcyBhbmQgdGhlaXIgc2VtYW50aWNzIGZyb20gdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCgpUaGUgc3RydWN0dXJlIG9mIGFuIEFwaURPTSBpcyByZWN1cnNpdmUgYnkgbmF0dXJlLiBXaGVuIGxvb2tpbmcgZm9yIHNwZWNpZmljIGVsZW1lbnRzLAppdCBpcyBiZXN0IHRvIHRyYXZlcnNlIHRoZSBBcGlET00gdHJlZSB0byBsb29rIGZvciBhIG1hdGNoLiBRdWVyeWluZyB0aGUgQXBpRE9NIHRyZWUgd2lsbApkZWNvdXBsZSBvdXIgY29kZSBmcm9tIHNwZWNpZmljIEFQSSBkZXNjcmlwdGlvbiBsYW5ndWFnZS4gQWxzbywgaXQgZGVjb3VwbGVzIG91ciBjb2RlIGZyb20gdGhlCnNwZWNpZmljIHN0cnVjdHVyZSBvZiB0aGVzZSBkb2N1bWVudHMgYXMgbG9uZyBhcyB0aGV5IGFyZSBzZW1hbnRpY2FsbHkgZXF1aXZhbGVudC4KCiMjIyBBcyBhIHdheSB0byBhbm5vdGF0ZSBKU09OCgpBcGlET00gcHJvdmlkZXMgdGhlIGFiaWxpdHkgdG8gdGFrZSBhIG5vcm1hbCBKU09OIHN0cnVjdHVyZSBhbmQgYWRkIGEgbGF5ZXIgb24gdG9wIG9mIGl0IGZvciB0aGUgcHVycG9zZQpvZiBhbm5vdGF0aW5nIGFuZCBhZGRpbmcgc2VtYW50aWMgZGF0YS4gSW5zdGVhZCBvZiBjcmVhdGluZyBhbiBlbnRpcmVseSBkaWZmZXJlbnQgc3RydWN0dXJlIHRvIGRlc2NyaWJlIHRoZSBkYXRhLApBcGlET00ncyBhcHByb2FjaCBpcyB0byBleHBhbmQgdGhlIGV4aXN0aW5nIHN0cnVjdHVyZSAod2UgY2FsbCBpdCAicmVmcmFjdGluZyIgYSBzdHJ1Y3R1cmUpLgpIZXJlIGlzIGFuIGV4YW1wbGUgdG8gc2hvdyBvdXIgcG9pbnQuCgpUYWtlIHRoZSBmb2xsb3dpbmcgc2ltcGxlIEpTT04gb2JqZWN0LgoKYGBganNvbgp7CiAgIm5hbWUiOiAiSm9obiBEb2UiLAogICJlbWFpbCI6ICJqb2huQGV4YW1wbGUuY29tIgp9CmBgYAoKVXNpbmcgQXBpRE9NLCB3ZSBjYW4gZXhwYW5kIHRoaXMgb3V0IGFuZCBhZGQgc29tZSBodW1hbi1yZWFkYWJsZSB0aXRsZXMgYW5kIGRlc2NyaXB0aW9ucy4KCmBgYGpzb24KewogICJlbGVtZW50IjogIm9iamVjdCIsCiAgImNvbnRlbnQiOiBbCiAgICB7CiAgICAgICJlbGVtZW50IjogIm1lbWJlciIsCiAgICAgICJtZXRhIjogewogICAgICAgICJ0aXRsZSI6ICJOYW1lIiwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiTmFtZSBvZiBhIHBlcnNvbiIKICAgICAgfSwKICAgICAgImNvbnRlbnQiOiB7CiAgICAgICAgImtleSI6IHsKICAgICAgICAgICJlbGVtZW50IjogInN0cmluZyIsCiAgICAgICAgICAiY29udGVudCI6ICJuYW1lIgogICAgICAgIH0sCiAgICAgICAgInZhbHVlIjogewogICAgICAgICAgImVsZW1lbnQiOiAic3RyaW5nIiwKICAgICAgICAgICJjb250ZW50IjogIkpvaG4gRG9lIgogICAgICAgIH0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgImVsZW1lbnQiOiAibWVtYmVyIiwKICAgICAgIm1ldGEiOiB7CiAgICAgICAgInRpdGxlIjogIkVtYWlsIiwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW1haWwgYWRkcmVzcyBmb3IgdGhlIHBlcnNvbiIKICAgICAgfSwKICAgICAgImNvbnRlbnQiOiB7CiAgICAgICAgImtleSI6IHsKICAgICAgICAgICJlbGVtZW50IjogInN0cmluZyIsCiAgICAgICAgICAiY29udGVudCI6ICJlbWFpbCIKICAgICAgICB9LAogICAgICAgICJ2YWx1ZSI6IHsKICAgICAgICAgICJlbGVtZW50IjogInN0cmluZyIsCiAgICAgICAgICAiY29udGVudCI6ICJqb2huQGV4YW1wbGUuY29tIgogICAgICAgIH0KICAgICAgfQogICAgfQogIF0KfQpgYGAKCldlIGFkZGVkIHNvbWUgc2VtYW50aWMgZGF0YSB0byB0aGUgZXhpc3RpbmcgZGF0YSwgYnV0IHdlIGRpZCBzbyB3aGlsZSByZXRhaW5pbmcgdGhlIHNlbWFudGljIHN0cnVjdHVyZSBvZiB0aGUgZGF0YQp3aXRoIHRoZSBvYmplY3QgYW5kIHN0cmluZyBlbGVtZW50cy4gKipUaGlzIG1lYW5zIHRoZXJlIGlzIG5vIHNlbWFudGljIGRpZmZlcmVuY2UgaW4gdGhlIEFwaURPTSBzdHJ1Y3R1cmUgYW5kCnRoZSBvcmlnaW5hbCBKU09OIHN0cnVjdHVyZSoqLiBJdCBhbHNvIG1lYW5zIHdlIGNhbiBhZGQgZXh0cmEgc2VtYW50aWNzIG9uIHRvcCBvZiB0aGVzZSBzdHJ1Y3R1cmFsIG9uZXMuCgojIyMgQXMgYSB1bmlmeWluZyBzdHJ1Y3R1cmUKCllvdSBtYXkgaGF2ZSBub3RpY2VkIHRoZSBzaW1pbGFyaXRpZXMgYmV0d2VlbiB0aGUgSlNPTiBleGFtcGxlIGFib3ZlIGFuZCBYTUwuClhNTCBoYXMgZWxlbWVudHMsIGF0dHJpYnV0ZXMsIGFuZCBjb250ZW50LiBJdCB3b3VsZCBiZSBhIGdvb2QgcXVlc3Rpb24gdG8gYXNrIGlmIHdlIHNpbXBseSB0dXJuZWQgSlNPTiBpbnRvIFhNTC4KCkFwaURPTSBpcyBhY3R1YWxseSBtZWFudCB0byBwcm92aWRlIHRoZXNlIGNyb3NzLWZvcm1hdCBzaW1pbGFyaXRpZXMuIEl0IG1lYW5zIHRoYXQgYSBKU09OIHN0cnVjdHVyZQptYXkgYmUgcmVmcmFjdGVkIGFuZCBjb252ZXJ0ZWQgdG8gWE1MLiBJdCBhbHNvIG1lYW5zIGFuIFhNTCBkb2N1bWVudCBtYXkgYmUgY29udmVydGVkIGludG8gQXBpRE9NLgpUaGlzIGFsc28gZ29lcyBmb3IgWUFNTCwgSFRNTCwgQ1NWLCBhbmQgbWFueSBvdGhlciBmb3JtYXRzLiBBcGlET00gaXMgYSB3YXkgdG8gdXNlIHJlZnJhY3RpbmcgdG8gdW5pZnkgdGhlc2Ugc3RydWN0dXJlcy4KCkxldCdzIGxvb2sgYXQgYW5vdGhlciBleGFtcGxlLCB0aGlzIHRpbWUgcmVmYWN0aW5nIFhNTCB3aXRoIEFwaURPTS4KCmBgYHhtbAo8cGVyc29uIG5hbWU9IkpvaG4gRG9lIiBlbWFpbD0iam9obkBleGFtcGxlLmNvbSI+PC9wZXJzb24+CmBgYAoKVGhpcyBleGFtcGxlIGluIHJlZnJhY3RlZCBmb3JtIHdvdWxkIGxvb2sgbGlrZSB0aGUgZm9sbG93aW5nIHNuaXBwZXQuIE5vdGljZSB0aGF0IHdlJ3JlIHVzaW5nIGF0dHJpYnV0ZXMgaW4gcmVzdWx0aW5nIEFwaURPTSBzdHJ1Y3R1cmUuCgpgYGBqc29uCnsKICAiZWxlbWVudCI6ICJwZXJzb24iLAogICJhdHRyaWJ1dGVzIjogewogICAgIm5hbWUiOiB7CiAgICAgICJlbGVtZW50IjogInN0cmluZyIsCiAgICAgICJjb250ZW50IjogIkpvaG4gRG9lIgogICAgfSwKICAgICJlbWFpbCI6IHsKICAgICAgImVsZW1lbnQiOiAic3RyaW5nIiwKICAgICAgImNvbnRlbnQiOiAiam9obkBleGFtcGxlLmNvbSIKICAgIH0KICB9Cn0KYGBgCgpTaW5jZSB3ZSBjYW4gZ28gYmFjayBhbmQgZm9ydGggYmV0d2VlbiBKU09OLCBZQU1MLCBYTUwsIGFuZCBvdGhlciBmb3JtYXRzLCB3ZSBhcmUgbm93IGFibGUgdG8gdXNlIHNhbWUgdG9vbHNldCBhY3Jvc3MgdGhlIGRpZmZlcmVudCBmb3JtYXRzLgpUaGF0IG1lYW5zIHdlIGNvdWxkIHVzZSBYU0xUIHRvIHRyYW5zZm9ybSBKU09OIGRvY3VtZW50cy4KCiMjIyBBcyBhIHF1ZXJ5YWJsZSBzdHJ1Y3R1cmUKCkFwaURPTSBpcyBtZWFudCB0byBmcmVlIHVzIGZyb20gdGhlIHN0cnVjdHVyZSBvZiBvdXIgZG9jdW1lbnRzLCBzaW1pbGFyIHRvIGhvdyBYTUwgZG9lcyB3aXRoIHRoaW5ncwpsaWtlIFhQQVRIIG9yIHRoZSBET00uIEl0IG1lYW5zIHdlIGNhbiBub3cgcXVlcnkgSlNPTiBkb2N1bWVudHMgYXMgaWYgdGhlcmUgd2FzIGFuIHVuZGVybHlpbmcgRE9NLAp3aGljaCBkZWNvdXBsZXMgb3VyIFNESyBmcm9tIG91ciBzdHJ1Y3R1cmUgYW5kIG91ciBzdHJ1Y3R1cmUgZnJvbSBvdXIgZGF0YS4KCiMjIyBBcGlET00gc3RhZ2VzCgpUaGVyZSBhcmUgdGhyZWUgc3RhZ2VzIHRvIEFwaURPTQoKLSBQYXJzZSBzdGFnZQotIFJlZnJhY3Qgc3RhZ2UKLSBHZW5lcmF0ZSBzdGFnZQoKCiMjIyMgUGFyc2Ugc3RhZ2UKClRoZSBwYXJzZSBzdGFnZSB0YWtlcyBKU09OIHN0cmluZyBhbmQgcHJvZHVjZXMgQXBpRE9NIHN0cnVjdHVyZSB1c2luZyB0aGUgYmFzZSBBcGlET00gbmFtZXNwYWNlLiBUaGVyZSBhcmUgdHdvIHBoYXNlcyBvZiBwYXJzaW5nOgoKLSBMZXhpY2FsIEFuYWx5c2lzIHBoYXNlCi0gU3ludGFjdGljIEFuYWx5c2lzIHBoYXNlCgoKIyMjIyMgTGV4aWNhbCBBbmFseXNpcyBwaGFzZQoKTGV4aWNhbCBBbmFseXNpcyB3aWxsIHRha2UgYSBKU09OIHN0cmluZyBhbmQgdHVybiBpdCBpbnRvIGEgc3RyZWFtIG9mIHRva2Vucy4gdHJlZS1zaXR0ZXIgLyB3ZWItdHJlZS1zaXR0ZXIgaXMgdXNlZAphcyBhbiB1bmRlcmx5aW5nIGxleGljYWwgYW5hbHl6ZXIuCgojIyMjIyBTeW50YWN0aWMgQW5hbHlzaXMKClN5bnRhY3RpYyBBbmFseXNpcyB3aWxsIHRha2UgYSBzdHJlYW0gb2YgdG9rZW5zIGFuZCB0dXJuIGl0IGludG8gYW4gQXBpRE9NIHJlcHJlc2VudGF0aW9uLgpDU1QgcHJvZHVjZWQgYnkgbGV4aWNhbCBhbmFseXNpcyBpcyBzeW50YWN0aWNhbGx5IGFuYWx5emVkLCBhbmQgQXBpRE9NIHN0cnVjdHVyZSB1c2luZyBiYXNlIChnZW5lcmljKSBBcGlET00gbmFtZXNwYWNlIGlzIHByb2R1Y2VkLgpTeW50YWN0aWMgYW5hbHlzaXMgY2FuIGZ1cnRoZXIgYmUgZGlyZWN0IG9yIGluZGlyZWN0LiBKU09OIHBhcnNlciBoYXMgYm90aCBkaXJlY3QgYW5kIGluZGlyZWN0IHN5bnRhY3RpY2FsIGFuYWx5emVycywKYnV0IFlBTUwgcGFyc2VyIG9ubHkgaGFzIGFuIGluZGlyZWN0IG9uZS4KCiMjIyMjIyBEaXJlY3QgU3ludGFjdGljYWwgYW5hbHlzaXMKClRoaXMgYW5hbHlzaXMgZGlyZWN0bHkgdHVybnMgdHJlZS1zaXR0ZXIgQ1NUIGludG8gQXBpRE9NLiBTaW5nbGUgdHJhdmVyc2FsIGlzIHJlcXVpcmVkLCB3aGljaCBtYWtlcyBpdCBzdXBlciBwZXJmb3JtYW50LAphbmQgaXQncyB0aGUgZGVmYXVsdCBhbmFseXNpcyB1c2VkLgoKIyMjIyMjIEluZGlyZWN0IFN5bnRhY3RpYyBhbmFseXNpcwoKVGhpcyBhbmFseXNpcyB0dXJucyB0cmVlcy1zaXR0ZXIgQ1NUIGludG8gSlNPTiBBU1QgcmVwcmVzZW50YXRpb24uIFRoZW4gSlNPTiBBU1QgaXMgdHVybmVkIGludG8gQXBpRE9NLgpUd28gdHJhdmVyc2FscyBhcmUgcmVxdWlyZWQsIHdoaWNoIG1ha2VzIHRoZSBpbmRpcmVjdCBhbmFseXNpcyBsZXNzIHBlcmZvcm1hbnQgdGhhbiB0aGUgZGlyZWN0IG9uZS4KVGhvdWdoIGxlc3MgcGVyZm9ybWFudCwgaGF2aW5nIEpTT04gQVNUIHJlcHJlc2VudGF0aW9uIGFsbG93cyB1cyB0byBkbyBmdXJ0aGVyIGNvbXBsZXggYW5hbHlzaXMuCgojIyMjIFJlZnJhY3Qgc3RhZ2UKClRoZSByZWZyYWN0IHN0YWdlIHRha2VzIGEgZ2VuZXJpYyBBcGlET00gc3RydWN0dXJlIChiYXNlIG5hbWVzcGFjZSkgYW5kIHRyYXZlcnNlcyB0aHJvdWdoIGl0LCBhZGRpbmcsIHVwZGF0aW5nLAphbmQgcmVtb3Zpbmcgbm9kZXMgYXMgaXQgZ29lcyBhbG9uZyBhbmQgdHVybmluZyBpdCBpbnRvIHNlbWFudGljIEFwaURPTSBzdHJ1Y3R1cmUgKGxpa2UgT3BlbkFQSSBvciBBc3luY0FQSSkuClRoaXMgaXMgYnkgZmFyIHRoZSBtb3N0IGNvbXBsZXggcGFydCBvZiBBcGlET00uIFRoaXMgaXMgd2hlcmUgcGx1Z2lucyBvcGVyYXRlLgpJZiBwbHVnaW5zIGFyZSB1c2VkLCBhZGRpdGlvbmFsIHRyYXZlcnNhbCBpcyBjdXJyZW50bHkgbmVlZGVkLgoKIyMjIyBHZW5lcmF0ZSBzdGFnZQoKV2UgY2FuIGN1cnJlbnRseSBvbmx5IGdlbmVyYXRlIEpTT04gZG9jdW1lbnRzIGZyb20gdGhlIEFwaURPTSBzdHJ1Y3R1cmUuCkl0IGRvZXNuJ3QgbWF0dGVyIGlmIHRoZSBvcmlnaW5hbCBkb2N1bWVudCB3YXMgb3JpZ2luYWxseSBkZWZpbmVkIGluIEpTT04gb3IgWUFNTC4KR2VuZXJhdGVkIEpTT04gZG9jdW1lbnRlZCB3aWxsIGhhdmUgZXhhY3RseSB0aGUgc2FtZSBzZW1hbnRpYyBpbmZvcm1hdGlvbiBhcyB0aGUgb3JpZ2luYWwgb25lLApidXQgdGhlIHN0eWxlIGluZm9ybWF0aW9uIGZyb20gdGhlIG9yaWdpbmFsIGRvY3VtZW50IGlzIG5vdCBwcmVzZXJ2ZWQgKHdoaXRlIHNwYWNlcy9jb21tZW50cywgZXRjLi4pLgoKLS0tCgpIYXZpbmcgc2FpZCB0aGF0LCB0aGlzIGlzIGhvdyBKU09OIE9wZW5BUEkgMy4xIGRvY3VtZW50IGdldHMgdHJhbnNmb3JtZWQgaW50byBBcGlET006CgoKKip3aXRoIGRpcmVjdCBzeW50YWN0aWMgYW5hbHlzaXMgKHJlcXVpcmVzIDIgdHJhdmVyc2FscykqKgpgYGAKSlNPTiBzdHJpbmcgLT4gdHJlZS1zaXR0ZXIgQ1NUIC0+ICBnZW5lcmljIEFwaURPTSAtPiBPcGVuQVBJIDMuMSBBcGlET00KYGBgCgoqKndpdGggaW5kaXJlY3Qgc3ludGFjdGljIGFuYWx5c2lzIChyZXF1aXJlcyAzIHRyYXZlcnNhbHMpKioKYGBgCkpTT04gc3RyaW5nIC0+IHRyZWUtc2l0dGVyIENTVCAtPiBKU09OIEFTVCAtPiBnZW5lcmljIEFwaURPTSAtPiBPcGVuQVBJIDMuMSBBcGlET00KYGBgCgoqKndpdGggZGlyZWN0IHN5bnRhY3RpYyBhbmFseXNpcyBhbmQgYWRkaXRpb25hbCBwbHVnaW5zIChyZXF1aXJlcyAzIHRyYXZlcnNhbCkqKgpgYGAKSlNPTiBzdHJpbmcgLT4gdHJlZS1zaXR0ZXIgQ1NUIC0+IGdlbmVyaWMgQXBpRE9NIC0+IE9wZW5BUEkgMy4xIEFwaURPTSAtPiBwbHVnaW5zIC0+IE9wZW5BUEkgMy4xIEFwaURPTQpgYGAKLS0tCgpUaGlzIHZlcnkgY2xvc2VseSByZWZsZWN0cyBob3cgW0JhYmVsXShodHRwczovL2dpdGh1Yi5jb20vYmFiZWwvYmFiZWwpIHdvcmtzIChbQmFiZWwgUGx1Z2luIEhhbmRib29rXShodHRwczovL2dpdGh1Yi5jb20vamFtaWVidWlsZHMvYmFiZWwtaGFuZGJvb2svYmxvYi9tYXN0ZXIvdHJhbnNsYXRpb25zL2VuL3BsdWdpbi1oYW5kYm9vay5tZCkpLgpUaGVpciB0cmFuc2Zvcm0gcGhhc2UgaXMgb3VyIHJlZnJhY3QgcGhhc2UuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCB3aGVuIHBsdWdpbnMgYXJlIGludm9sdmVkLCBvdXIgdHJhbnNmb3JtIHBoYXNlCnJlcXVpcmVzIDIgdHJhdmVyc2FscyBpbnN0ZWFkIG9mIGEgc2luZ2xlIG9uZS4gV2UgY2FuIGZpbmQgYSB3YXkgaW4gdGhlIGZ1dHVyZSBob3cgdG8gZm9sZCB0aGVzZSAyIHRyYXZlcnNhbHMgaW50byBhIHNpbmdsZSBvbmUuCgojIyBMaWNlbnNlCgpBcGlET00gaXMgbGljZW5zZWQgdW5kZXIgW0FwYWNoZSAyLjAgbGljZW5zZV0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL2FwaWRvbS9ibG9iL21haW4vTElDRU5TRVMvQXBhY2hlLTIuMC50eHQpLgpBcGlET00gY29tZXMgd2l0aCBhbiBleHBsaWNpdCBbTk9USUNFXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvYXBpZG9tL2Jsb2IvbWFpbi9OT1RJQ0UpIGZpbGUKY29udGFpbmluZyBhZGRpdGlvbmFsIGxlZ2FsIG5vdGljZXMgYW5kIGluZm9ybWF0aW9uLgoKVGhpcyBwcm9qZWN0IHVzZXMgW1JFVVNFIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vcmV1c2Uuc29mdHdhcmUvc3BlYy8pIHRoYXQgZGVmaW5lcyBhIHN0YW5kYXJkaXplZCBtZXRob2QKZm9yIGRlY2xhcmluZyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBmb3Igc29mdHdhcmUgcHJvamVjdHMuCgojIyBTb2Z0d2FyZSBCaWxsIE9mIE1hdGVyaWFscyAoU0JPTSkKClNvZnR3YXJlIEJpbGwgT2YgbWF0ZXJpYWxzIGlzIGF2YWlsYWJsZSBpbiB0aGlzIHJlcG9zaXRvcnkgW2RlcGVuZGVuY3kgZ3JhcGhdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9hcGlkb20vbmV0d29yay9kZXBlbmRlbmNpZXMpLgpDbGljayBvbiBgRXhwb3J0IFNCT01gIGJ1dHRvbiB0byBkb3dubG9hZCB0aGUgU0JPTSBpbiBbU1BEWCBmb3JtYXRdKGh0dHBzOi8vc3BkeC5kZXYvKS4KCg== - readmeEtag: '"4a92d20207467b49516da5624fa91d4998170e3be0f2e86ff71836937349a8af"' - readmeLastModified: Wed, 06 Dec 2023 00:11:07 GMT + W2NvbW1lbnRdOiA8PiAoU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogQ29weXJpZ2h0ICYjNDA7YyYjNDE7IDIwMTUgcmVmcmFjdHByb2plY3QpCltjb21tZW50XTogPD4gKFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQpCgpbY29tbWVudF06IDw+IChTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBDb3B5cmlnaHQgJiM0MDtjJiM0MTsgMjAxNSBBcGlhcnkgSW5jLikKW2NvbW1lbnRdOiA8PiAoU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1JVCkKCiMgQXBpRE9NCgpbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9hcGlkb20vYWN0aW9ucy93b3JrZmxvd3MvYnVpbGQueW1sL2JhZGdlLnN2ZyldKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9hcGlkb20vYWN0aW9ucykKWyFbRGVwZW5kYWJvdCBlbmFibGVkXShodHRwczovL2JhZGdlbi5uZXQvYmFkZ2UvaWNvbi9kZXBlbmRhYm90P2ljb249ZGVwZW5kYWJvdCZsYWJlbCldKGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2NvZGUtc2VjdXJpdHkvc3VwcGx5LWNoYWluLXNlY3VyaXR5L2tlZXBpbmcteW91ci1kZXBlbmRlbmNpZXMtdXBkYXRlZC1hdXRvbWF0aWNhbGx5KQoKClRoZSBwdXJwb3NlIG9mIEFwaURPTSBpcyB0byBwcm92aWRlIGEgc2luZ2xlLCB1bmlmeWluZyBzdHJ1Y3R1cmUgZm9yIGRlc2NyaWJpbmcgQVBJcyBhY3Jvc3MKQVBJIGRlc2NyaXB0aW9uIGxhbmd1YWdlIGFuZCBzZXJpYWxpemF0aW9uIGZvcm1hdHMuIFRoZXJlIGN1cnJlbnRseSBleGlzdHMgc2V2ZXJhbCBBUEkgZGVzY3JpcHRpb24gbGFuZ3VhZ2VzIG9uZSBjYW4gY2hvb3NlCndoZW4gZGVmaW5pbmcgYW4gQVBJLCBmcm9tIE9wZW5BUEksIFJBTUwgb3IgQVBJIEJsdWVwcmludC4KVGhlcmUgYXJlIGFsc28gbWFueSBzZXJpYWxpemF0aW9uIGZvcm1hdHMgc3VjaCBhcyBYTUwsIFlBTUwgb3IgSlNPTi4gV2l0aG91dCBhIHdheSB0byBwYXJzZSB0aGVzZSBmb3JtYXRzCnRvIHRoZSBzYW1lIHN0cnVjdHVyZSwgZGV2ZWxvcGVycyBhcmUgcmVxdWlyZWQgdG8gaGFuZGxlIGVhY2ggZm9ybWF0IG9uZS1ieS1vbmUsIGVhY2ggaW4gYSBkaWZmZXJlbnQKd2F5IGFuZCBlYWNoIHRyYW5zbGF0aW5nIHRvIHRoZWlyIGludGVybmFsIGRvbWFpbiBtb2RlbC4gVGhpcyBpcyB0ZWRpb3VzLCB0aW1lLWNvbnN1bWluZywKYW5kIHJlcXVpcmVzIGVhY2ggbWFpbnRhaW5lciB0byBzdGF5IGluIHN0ZXAgd2l0aCBldmVyeSBmb3JtYXQgdGhleSBzdXBwb3J0LgoKQXBpRE9NIHNvbHZlcyB0aGlzIGNvbXBsZXggcHJvYmxlbSBpbiBhIHNpbXBsZSB3YXkuIEl0IGFsbG93cyBwYXJzZXJzIHRvIHBhcnNlIHRvIGEgc2luZ2xlIHN0cnVjdHVyZQphbmQgYWxsb3dzIHRvb2wgYnVpbGRlcnMgdG8gY29uc3VtZSBvbmUgc3RydWN0dXJlIGZvciBhbGwgZm9ybWF0cy4KCiMjIFRhYmxlIG9mIENvbnRlbnRzCgotIFtHZXR0aW5nIHN0YXJ0ZWRdKCNnZXR0aW5nLXN0YXJ0ZWQpCiAgLSBbUHJlcmVxdWlzaXRlc10oI3ByZXJlcXVpc2l0ZXMpCiAgLSBbSW5zdGFsbGF0aW9uXSgjaW5zdGFsbGF0aW9uKQogIC0gW1VzYWdlXSgjdXNhZ2UpCiAgLSBbQXBpRE9NIFBsYXlncm91bmRdKCNhcGlkb20tcGxheWdyb3VuZCkKLSBbRGV2ZWxvcG1lbnRdKCNkZXZlbG9wbWVudCkKICAtIFtQcmVyZXF1aXNpdGVzXSgjcHJlcmVxdWlzaXRlcykKICAtIFtTZXR0aW5nIHVwXSgjc2V0dGluZy11cCkKICAtIFtucG0gc2NyaXB0c10oI25wbS1zY3JpcHRzKQogIC0gW0J1aWxkIGFydGlmYWN0c10oI2J1aWxkLWFydGlmYWN0cykKICAtIFtVc2luZyB0aGlzIG1vbm9yZXBvIGFzIGEgbG9jYWwgZGV2IGRlcGVuZGVuY3ldKCN1c2luZy10aGlzLW1vbm9yZXBvLWFzLWEtbG9jYWwtZGV2LWRlcGVuZGVuY3kpCi0gW0NvbnRyaWJ1dGluZ10oI2NvbnRyaWJ1dGluZykKLSBbRG9jdW1lbnRhdGlvbl0oI2RvY3VtZW50YXRpb24pCiAgLSBbV2hhdCBpcyBhbiBFbGVtZW50ID9dKCN3aGF0LWlzLWFuLWVsZW1lbnQtKQogIC0gW0FzIGEgd2F5IHRvIGFubm90YXRlIEpTT05dKCNhcy1hLXdheS10by1hbm5vdGF0ZS1qc29uKQogIC0gW0FzIGEgdW5pZnlpbmcgc3RydWN0dXJlXSgjYXMtYS11bmlmeWluZy1zdHJ1Y3R1cmUpCiAgLSBbQXMgYSBxdWVyeWFibGUgc3RydWN0dXJlXSgjYXMtYS1xdWVyeWFibGUtc3RydWN0dXJlKQogIC0gW0FwaURPTSBzdGFnZXNdKCNhcGlkb20tc3RhZ2VzKQotIFtMaWNlbnNlXSgjbGljZW5zZSkKLSBbU29mdHdhcmUgQmlsbCBPZiBNYXRlcmlhbHMgKFNCT00pXSgjc29mdHdhcmUtYmlsbC1vZi1tYXRlcmlhbHMtc2JvbSkKCiMjIEdldHRpbmcgc3RhcnRlZAoKIyMjIFByZXJlcXVpc2l0ZXMKClRoZXNlIHByZXJlcXVpc2l0ZXMgYXJlIHJlcXVpcmVkIGJvdGggZm9yIGluc3RhbGxpbmcgQXBpRE9NIGFzIGEgbnBtIHBhY2thZ2UgYW5kIGxvY2FsIGRldmVsb3BtZW50IHNldHVwLgoKLSBbbm9kZS1neXBdKGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL25vZGUtZ3lwKSB3aXRoIFtQeXRob24gMy54XShodHRwczovL3d3dy5weXRob24ub3JnL2Rvd25sb2Fkcy8pCi0gW0dMSUJDXShodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvKSBgPj0yLjI5YAotIFtHQ0MgY29tcGlsZXJdKGh0dHBzOi8vZ2NjLmdudS5vcmcvKQotIFtlbXNjcmlwdGVuXShodHRwczovL2Vtc2NyaXB0ZW4ub3JnL2RvY3MvZ2V0dGluZ19zdGFydGVkL2Rvd25sb2Fkcy5odG1sKSBvciBbZG9ja2VyXShodHRwczovL3d3dy5kb2NrZXIuY29tLykgbmVlZHMgdG8gYmUgaW5zdGFsbGVkLCB3ZSByZWNvbW1lbmQgZ29pbmcgd2l0aCBhIGRvY2tlciBvcHRpb24KCiMjIyBJbnN0YWxsYXRpb24KCkFzc3VtaW5nIFtwcmVyZXF1aXNpdGVzXSgjcHJlcmVxdWlzaXRlcykgYXJlIGFscmVhZHkgaW5zdGFsbGVkLCBBcGlET00gbnBtIHBhY2thZ2VzIGFyZSBpbnN0YWxsYWJsZSBhbmQgd29ya3Mgd2l0aCBgTm9kZS5qcyA+PTEyLjIyLjAgPD0yMGAuCgpZb3UgY2FuIGluc3RhbGwgQXBpRE9NIHBhY2thZ2VzIHVzaW5nIFtucG0gQ0xJXShodHRwczovL2RvY3MubnBtanMuY29tL2NsaSk6CgpgYGBzaAogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLWFzdAogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLWNvcmUKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1lcnJvcgogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLWpzb24tcGF0aAogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLWpzb24tcG9pbnRlcgogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLWpzb24tcG9pbnRlci1yZWxhdGl2ZQogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLWxvZ2dpbmcKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1scwogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLW5zLWFwaS1kZXNpZ24tc3lzdGVtcwogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLW5zLWFzeW5jYXBpLTIKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1ucy1qc29uLXNjaGVtYS1kcmFmdC00CiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tbnMtanNvbi1zY2hlbWEtZHJhZnQtNgogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLW5zLWpzb24tc2NoZW1hLWRyYWZ0LTcKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1ucy1vcGVuYXBpLTIKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1ucy1vcGVuYXBpLTMtMAogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLW5zLW9wZW5hcGktMy0xCiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tbnMtd29ya2Zsb3dzLTEKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1wYXJzZXIKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1wYXJzZXItYWRhcHRlci1hcGktZGVzaWduLXN5c3RlbXMtanNvbgogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLXBhcnNlci1hZGFwdGVyLWFwaS1kZXNpZ24tc3lzdGVtcy15YW1sCiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tcGFyc2VyLWFkYXB0ZXItYXN5bmNhcGktanNvbi0yCiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tcGFyc2VyLWFkYXB0ZXItYXN5bmNhcGkteWFtbC0yCiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tcGFyc2VyLWFkYXB0ZXItanNvbgogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLXBhcnNlci1hZGFwdGVyLW9wZW5hcGktanNvbi0yCiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tcGFyc2VyLWFkYXB0ZXItb3BlbmFwaS1qc29uLTMtMAogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLXBhcnNlci1hZGFwdGVyLW9wZW5hcGktanNvbi0zLTEKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1wYXJzZXItYWRhcHRlci1vcGVuYXBpLXlhbWwtMgogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLXBhcnNlci1hZGFwdGVyLW9wZW5hcGkteWFtbC0zLTAKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1wYXJzZXItYWRhcHRlci1vcGVuYXBpLXlhbWwtMy0xCiAkIG5wbSBpbnN0YWxsIEBzd2FnZ2VyLWFwaS9hcGlkb20tcGFyc2VyLWFkYXB0ZXItd29ya2Zsb3dzLWpzb24tMQogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLXBhcnNlci1hZGFwdGVyLXdvcmtmbG93cy15YW1sLTEKICQgbnBtIGluc3RhbGwgQHN3YWdnZXItYXBpL2FwaWRvbS1wYXJzZXItYWRhcHRlci15YW1sLTEtMgogJCBucG0gaW5zdGFsbCBAc3dhZ2dlci1hcGkvYXBpZG9tLXJlZmVyZW5jZQpgYGAKCiMjIyBVc2FnZQoKRXZlcnkgcGFja2FnZSBvZiB0aGUgbW9ub3JlcG8gaGFzIGFuIGFzc29jaWF0ZWQgUkVBRE1FIGZpbGUgZGVtb25zdHJhdGluZyBpdHMgcHVycG9zZSBhbmQgY29udGFpbmluZwp1c2FnZSBleGFtcGxlcy4KCiMjIyBBcGlET00gUGxheWdyb3VuZAoKQXBpRE9NIFBsYXlncm91bmQgaXMgYSBSZWFjdCBhcHBsaWNhdGlvbiB0aGF0IHJ1bnMgaW4gYSBicm93c2VyIGFuZCBjYW4gdmlzdWFsbHkgZGVtb25zdHJhdGUgY2FwYWJpbGl0aWVzCm9mIHRoZSBBcGlET00uIEFwaURPTSBQbGF5Z3JvdW5kIGlzIGJ1aWxkIGFuZCBkZXBsb3llZCB3aGVuZXZlciB0aGUgbmV3IGNvbW1pdCBsYW5kcyBvbiBgbWFpbmAgYnJhbmNoLgoKIVtpbWFnZV0oaHR0cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTkzMjg2LzE0NTAxMDUyMi01ZDg1ZTM0Yi04ZDI4LTRhMDctOWVlMi1iMjg4MDdhMDEzY2QucG5nKQoKQXBpRE9NIFBsYXlncm91bmQgaXMgYXZhaWxhYmxlIGF0IFtodHRwczovL3N3YWdnZXItYXBpLmdpdGh1Yi5pby9hcGlkb20vXShodHRwczovL3N3YWdnZXItYXBpLmdpdGh1Yi5pby9hcGlkb20vKQoKIyMgRGV2ZWxvcG1lbnQKClRoaXMgaXMgYSBtb25vcmVwbyBmb3IgYWxsIEFwaURPTSBwYWNrYWdlcy4gQWxsIHRoZSBjb2RlIGlzIHdyaXR0ZW4gaW4gW1R5cGVTY3JpcHRdKGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy8pLgpBbGwgdGhlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3Igd29ya2luZyB3aXRoIG1vbm9yZXBvIGNhbiBiZSBmb3VuZCBpbiB0aGlzIFthcnRpY2xlXShodHRwczovL3ZsYWRpbWlyZ29yZWouY29tL2Jsb2cvdGhpbmdzLWktaGF2ZS1sZWFybmVkLW1haW50YWluaW5nLWphdmFzY3JpcHQtbW9ub3JlcG8td2l0aC1sZXJuYS8pLgoKQXNzdW1pbmcgW3ByZXJlcXVpc2l0ZXNdKCNwcmVyZXF1aXNpdGVzKSBhcmUgYWxyZWFkeSBpbnN0YWxsZWQsIFtOb2RlLmpzXShodHRwczovL25vZGVqcy5vcmcvKSBgPj0yMC4zLjBgIGFuZCBgbnBtID49OS42LjdgCmFyZSB0aGUgbWluaW11bSByZXF1aXJlZCB2ZXJzaW9ucyB0aGF0IHRoaXMgcmVwbyBydW5zIG9uLCBidXQgd2UgcmVjb21tZW5kIHVzaW5nIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBOb2RlLmpzQDIwLgoKIyMjIFNldHRpbmcgdXAKClJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmRzIHRvIHNldHVwIHRoZSByZXBvc2l0b3J5IGZvciBsb2NhbCBkZXZlbG9wbWVudDoKCmBgYHNoZWxsCiAkIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvYXBpZG9tLmdpdAogJCBjZCBhcGlkb20KICQgbnBtIGkKICQgbnBtIHJ1biBidWlsZApgYGAKCiMjIyBTZXR0aW5nIHVwIHZpYSBkb2NrZXIKClRoZXJlIGFyZSBzaXR1YXRpb25zLCB3aGVuIHNhdGlzZnlpbmcgYWxsIHRoZSAqKnByZXJlcXVpc2l0ZXMqKiBvZiB0aGlzIHJlcG9zaXRvcnkgb24geW91IGxvY2FsCmRldmVsb3BtZW50IG1hY2hpbmUgaXMganVzdCBub3QgcG9zc2libGUuIEluIHRoYXQgY2FzZSwgeW91IGNhbiB1c2UgKipkb2NrZXIqKiB0byBnZXQgYXJvdW5kIGl0LgpSZXBvc2l0b3J5IGRpcmVjdG9yeSBpcyBtb3VudGVkIGFzIHZvbHVtZSBpbnNpZGUgYSBydW5uaW5nIGNvbnRhaW5lciBjYWxsZWQgYGFwaWRvbS1kZXZgLgpUaGF0IHdheSB5b3UgY2FuIGVkaXQgY29kZSBsb2NhbGx5IG9uIHlvdXIgZGV2ZWxvcG1lbnQgbWFjaGluZSBhbmQgcnVuICoqbnBtIHNjcmlwdHMqKgppbnNpZGUgdGhlIGBhcGlkb20tZGV2YCBkb2NrZXIgY29udGFpbmVyLgoKKipCdWlsZCB0aGUgQXBpRE9NIGRvY2tlciBpbWFnZToqKgoKYGBgc2gKICQgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9hcGlkb20uZ2l0CiAkIGNkIGFwaWRvbQogJCBkb2NrZXItY29tcG9zZSB1cApgYGAKCioqSW5zdGFsbCBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIEFwaURPTSBpbnNpZGUgdGhlIGRvY2tlciBjb250YWluZXI6KioKCmBgYHNoCiQgZG9ja2VyIGV4ZWMgLWl0IGFwaWRvbS1kZXYgbnBtIGkgLS12ZXJib3NlCiQgZG9ja2VyIGV4ZWMgLWl0IGFwaWRvbS1kZXYgbnBtIHJ1biBidWlsZApgYGAKCioqUnVuIG5wbSBzY3JpcHRzIGluc2lkZSB0aGUgZG9ja2VyIGNvbnRhaW5lcjoqKgoKYGBgc2gKJCBkb2NrZXIgZXhlYyAtaXQgYXBpZG9tLWRldiBucG0gcnVuIHRlc3QKYGBgCgo+IE5vdGU6IG1vbm9yZXBvIG5lZWRzIHRvIGJlIGJ1aWxkIGluIG9yZGVyIGZvciBtb25vcmVwbyBwYWNrYWdlIHRvcG9sb2d5IHRvIHdvcmsgY29ycmVjdGx5LgoKIyMjIG5wbSBzY3JpcHRzCgpTb21lIG5wbSBzY3JpcHRzIHJ1biBpbiBwYXJhbGxlbC4gRGVmYXVsdCBtYXhpbXVtIHBhcmFsbGVsaXphdGlvbiBpcyBzZXQgYDJgLiBUaGlzIGlzIGR1ZSB0byB0aGUgZmFjdAp0aGF0IG91ciBgQ0lgIHJ1bnMgb24gR2l0SHViIEFjdGlvbnMgd2hpY2ggdXNlcyBHaXRIdWIgaG9zdGVkIHJ1bm5lcnMgd2l0aCBbMi1jb3JlIENQVXNdKGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvdXNpbmctZ2l0aHViLWhvc3RlZC1ydW5uZXJzL2Fib3V0LWdpdGh1Yi1ob3N0ZWQtcnVubmVycyNzdXBwb3J0ZWQtcnVubmVycy1hbmQtaGFyZHdhcmUtcmVzb3VyY2VzKS4KSWYgeW91IGhhdmUgY29tcHV0ZXIgd2l0aCBtb3JlIHRoYW4gMiBDUFUgY29yZXMsIHlvdSBjYW4gc3BlZWQgcnVubmluZyBucG0gc2NyaXB0cyBieQpjcmVhdGluZyBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxsZWQgYENQVV9DT1JFU2AgYW5kIGFzc2lnbiBpdCBhIG51bWJlciBvZiB5b3VyIENQVSBjb3Jlcy4KCkFzc3VtaW5nIDQgQ1BVIGNvcmVzIGFyZSBhdmFpbGFibGU6CgpgYGBzaAogICQgZXhwb3J0IENQVV9DT1JFUz00CiAgJCBucG0gcnVuIGJ1aWxkCmBgYAoKYGJ1aWxkYCBzY3JpcHRzIG5vdyBydW5zIG11Y2ggZmFzdGVyIHRoYW4gYmVmb3JlLgoKKipCdWlsZCBhcnRpZmFjdHMqKgoKYGBgc2gKICQgbnBtIHJ1biBidWlsZApgYGAKCioqVGVzdCoqCgpZb3UgbXVzdCBmaXJzdCAqKmJ1aWxkIHRoZSBhcnRpZmFjdHMqKiBiZWZvcmUgcnVubmluZyB0ZXN0cy4KCmBgYHNoCiAkIG5wbSBydW4gdGVzdApgYGAKCioqTGludCoqCgpgYGBzaAogJCBucG0gcnVuIGxpbnQKYGBgCgoqKkNoZWNrIFR5cGVTY3JpcHQgdHlwZXMqKgoKYGBgc2gKICQgbnBtIHJ1biB0eXBlc2NyaXB0OmNoZWNrLXR5cGVzCmBgYAoKKipHZW5lcmF0ZSBUeXBlU2NyaXB0IHR5cGVzKioKCmBgYHNoCiAkIG5wbSBydW4gdHlwZXNjcmlwdDpkZWNsYXJhdGlvbgpgYGAKCioqQ2xlYW4qKgoKYGBgc2gKICQgbnBtIHJ1biBjbGVhbgpgYGAKCiMjIyBCdWlsZCBhcnRpZmFjdHMKCkFsbCB0aGUgcGFja2FnZXMgaGF2ZSBpZGVudGljYWwgYnVpbGQgc3lzdGVtIGFuZCBleHBvc2UgYnVpbGQgYXJ0aWZhY3RzIGluIGlkZW50aWNhbCB3YXkuCkFmdGVyIGJ1aWxkaW5nIGFydGlmYWN0cywgZXZlcnkgcGFja2FnZSB3aWxsIGNvbnRhaW4gZml2ZSAoNSkgYWRkaXRpb25hbCBkaXJlY3Rvcmllcy4KQWxsIHRoZSBidWlsZCBhcnRpZmFjdHMgYXJlIHBvbHltb3JwaGljIC0gdGhleSBjYW4gcnVuIGluIGRpZmZlcmVudCBlbnZpcm9ubWVudHMgbGlrZSBbV2ViIEJyb3dzZXJdKGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1dlYl9icm93c2VyKSwgW05vZGUuanNdKGh0dHBzOi8vbm9kZWpzLm9yZy8pIG9yIFtXZWIgV29ya2VyXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvV2ViX1dvcmtlcnNfQVBJKS4KCioqY2pzLyoqCgpUaGlzIGRpcmVjdG9yeSBtaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvZGViYXNlIGluIGBzcmMvYC4KQ29udGFpbnMgRVM1IGNvbXBhdGlibGUgY29kZSB3aXRoIFtDb21tb25KU10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvQ29tbW9uSlMpIHN0eWxlIGltcG9ydHMuCkJ1aWxkIGZyYWdtZW50cyBpbiB0aGlzIGRpcmVjdG9yeSBhcmUgaWRlYWwgZm9yIFtOb2RlLmpzXShodHRwczovL25vZGVqcy5vcmcvKSBhbmQgc2ltaWxhciBlbnZpcm9ubWVudHMuCgoqKmVzLyoqCgpUaGlzIGRpcmVjdG9yeSBtaXJyb3JzIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIGNvZGViYXNlIGluIGBzcmMvYC4KQ29udGFpbnMgRVM1IGNvbXBhdGlibGUgY29kZSB3aXRoIFtFUzYgaW1wb3J0c10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvU3RhdGVtZW50cy9pbXBvcnQpLgpCdWlsZCBmcmFnbWVudHMgaW4gdGhpcyBkaXJlY3RvcnkgYXJlIGlkZWFsIGZvciBidW5kbGluZyB3aXRoIFtXZWJwYWNrXShodHRwczovL3dlYnBhY2suanMub3JnLykgb3Igc2ltaWxhciBidW5kbGVycy4KCioqZGlzdC8qKgoKVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgYnVuZGxlZCBidWlsZCBmcmFnbWVudHMgdGhhdCB1c2UgW1VNRF0oaHR0cHM6Ly9naXRodWIuY29tL3VtZGpzL3VtZCkgbW9kdWxlcy4KVGhleSdyZSBpZGVhbCBmb3IgYnJvd3NlciB1c2FnZS4gVGhlIGZyYWdtZW50cyBhcmUgYm90aCBpbiBtaW5pZmllZCBhbmQgdW4tbWluaWZpZWQgZm9ybS4KCioqdHlwZXMvKioKClR5cGVTY3JpcHQgdHlwZXMgZ2VuZXJhdGVkIGZyb20gdGhlIHNvdXJjZSBjb2RlLgoKIyMjIFVzaW5nIHRoaXMgbW9ub3JlcG8gYXMgYSBsb2NhbCBkZXYgZGVwZW5kZW5jeQoKRm9yIHVzaW5nIHRoaXMgbW9ub3JlcG8gYXMgYSBsb2NhbCBkZXYgZGVwZW5kZW5jeSBmb3IgYGRlcGVuZGVudCBwcm9qZWN0YCwKZm9sbG93aW5nIGNvbW1hbmRzIG5lZWRzIHRvIGJlIGlzc3VlZCBpbnNpZGUgdGhlIG1vbm9yZXBvIGRpcmVjdG9yeSBhZnRlcgppdCBoYXMgYmVlbiBjbG9uZWQgdG8gYSBsb2NhbCBmaWxlc3lzdGVtOgoKYGBgc2gKICQgbnBtIGkKICQgbnBtIHJ1biBidWlsZAogJCBucG0gcnVuIGxpbmsKYGBgClRoaXMgd2lsbCBpbnN0YWxsIHRoZSBkZXBlbmRlbmNpZXMsIGJ1aWx0IHRoZSBtb25vcmVwbyBhbmQgbGluayBhbGwgaXQncyBwYWNrYWdlcyB0bwpnbG9iYWwgYG5vZGVfbW9kdWxlc2AuCgojIyMjIFVzYWdlIGluIGBkZXBlbmRlbnQgcHJvamVjdGAKCk5vdyB0aGF0IHdlIGhhdmUgbW9ub3JlcG8gcGFja2FnZXMgZ2xvYmFsbHkgbGlua2VkIHdlIGNhbiB1c2UgdGhlbSBpbiBgZGVwZW5kZW50IHByb2plY3RgLgpMZXQncyBzYXkgYGRlcGVuZGVudCBwcm9qZWN0YCBuZWVkcyB0byBkaXJlY3RseSB1c2UgZm9sbG93aW5nIHBhY2thZ2VzOgoKLSBAc3dhZ2dlci1hcGkvYXBpZG9tLWFzdAotIEBzd2FnZ2VyLWFwaS9hcGlkb20tY29yZQoKSXNzdWluZyBmb2xsb3dpbmcgY29tbWFuZCBmcm9tIGluc2lkZSB0aGUgYGRlcGVuZGVudCBwcm9qZWN0YCB3aWxsIGxpbmsgdGhlc2UgcGFja2FnZXM6CgpgYGBzaAogJCBucG0gbGluayBAc3dhZ2dlci1hcGkvYXBpZG9tLWFzdCBAc3dhZ2dlci1hcGkvYXBpZG9tLWNvcmUKYGBgCgpJZiBtb3JlIHBhY2thZ2VzIChvciBhbGwgb2YgdGhlbSkgbmVlZCB0byBiZSB1c2VkIGluIGBkZXBlbmRlbnQgcHJvamVjdGAsIHRoZXkgbmVlZCB0byBiZSBleHBsaWNpdGx5CmVudW1lcmF0ZWQgdXNpbmcgYWJvdmUgY29tbWFuZCBhbmQgc2VwYXJhdGVkIGJ5IHNpbmdsZSBlbXB0eSBzcGFjZS4KCk5vdGljZSB0aGF0IHdlIGxpbmsgcGFja2FnZXMgdXNpbmcgc2luZ2xlIGBucG0gbGlua2AgY29tbWFuZC4gVGhpcyBpcyBuZWNlc3NhcnkKYmVjYXVzZSBvZiBob3cgYG5wbSBsaW5rYCB3b3JrcyBpbnRlcm5hbGx5LiBBbHdheXMgdXNlIHNpbmdsZSBgbnBtIGxpbmtgIGNvbW1hbmQgd2l0aAptdWx0aXBsZSBwYWNrYWdlIG5hbWVzIGFzIGFyZ3VtZW50LgoKKipEb24ndCBldmVyIGRvIHRoaXMhKioKCmBgYHNoCiAkIG5wbSBsaW5rIEBzd2FnZ2VyLWFwaS9hcGlkb20tYXN0CiAkIG5wbSBsaW5rIEBzd2FnZ2VyLWFwaS9hcGlkb20tY29yZQpgYGAKCj4gU2V0dGluZyB1cCBucG0gc2NyaXB0IGluIGBkZXBlbmRlbnQgcHJvamVjdGAgY2FuIGhlbHAga2VlcCB0aGluZ3MgRFJZLgoKIyMjIyBDbGVhbmluZyB1cAoKIyMjIyMgRGVwZW5kZW50IHByb2plY3QKClRoZSBiZXN0IHdheSB0byB1bmxpbmsgbW9ub3JlcG8gcGFja2FnZXMgZnJvbSBgZGVwZW5kZW50IHByb2plY3RgIGlzIHRvIHJ1biBmb2xsb3dpbmcgY29tbWFuZAppbnNpZGUgdGhlIGBkZXBlbmRlbnQgcHJvamVjdGA6CgpgYGBzaGVsbAogJCBucG0gaQpgYGAKClJ1bm5pbmcgYG5wbSBpYCB3aWxsIHJlbW92ZSB0aGUgbGlua3MgdG8gbW9ub3JlcG8gcGFja2FnZXMgYW5kIGluc3RhbGwgdGhlIHBhY2thZ2VzIGZyb20gbnBtIHJlZ2lzdHJ5LgoKPiBOb3RlOiBydW5uaW5nIGBucG0gdW5saW5rIDxwYWNrYWdlLW5hbWU+YCBpbiBgZGVwZW5kZW50IHByb2plY3RgIHdpbGwgcmVtb3ZlIHRoZSBsaW5rIHRvIG1vbm9yZXBvIHBhY2thZ2UsCmJ1dCB3aWxsIGxlYXZlIHRoZSBgZGVwZW5kZW50IHByb2plY3RgIG5vZGVfbW9kdWxlcyBpbiBjb3JydXB0ZWQgc3RhdGUgYXMgdGhlcmUgaXMgbm8gdmVyc2lvbiBvZiB0aGUgcGFja2FnZQppbnN0YWxsZWQgYW55bW9yZS4gUnVubmluZyBgbnBtIGlgIGlzIGFsd2F5cyBhIHByZWZlcmVkIHdheSB0byByZXN0b3JlIHlvdXIgbm9kZV9tb2R1bGVzIHRvIG9yaWdpbmFsIHN0YXRlLgoKCiMjIyMjIEFwaURPTSBtb25vcmVwbwoKSXQgaXMgbm90IG5lY2Vzc2FyeSB0byB1bmxpbmsgbW9ub3JlcG8gcGFja2FnZXMgZnJvbSBnbG9iYWwgYG5vZGVfbW9kdWxlc2AuIEJ1dCBpZiB5b3UKd2FudCB0byBrZWVwIHlvdXIgZ2xvYmFsIGBub2RlX21vZHVsZXNgIHRpZHkgeW91IGNhbiBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kIGluIG1vbm9yZXBvIGRpcmVjdG9yeToKCmBgYHNoZWxsCiAkIG5wbSBydW4gdW5saW5rCmBgYAoKUnVubmluZyBhYm92ZSBucG0gc2NyaXB0IHdpbGwgdW5saW5rIGFsbCBtb25vcmVwbyBwYWNrYWdlcyBmcm9tIGdsb2JhbCBgbm9kZV9tb2R1bGVzYC4KCklmIHlvdSB3YW50IHRvIGp1c3QgdW5saW5rIHBhcnRpY3VsYXIgbW9ub3JlcG8gcGFja2FnZXMsIHlvdSBoYXZlIHRvIGVudW1lcmF0ZSB0aGVtIGV4cGxpY2l0bHk6CgpgYGBzaGVsbAogJCBucG0gdW5saW5rIC0tZ2xvYmFsIEBzd2FnZ2VyLWFwaS9hcGlkb20tYXN0IEBzd2FnZ2VyLWFwaS9hcGlkb20tY29yZQpgYGAKCiMjIENvbnRyaWJ1dGluZwoKVGhpcyBwcm9qZWN0IHVzZXMgW3N3YWdnZXItYXBpXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkpIEdpdEh1YiBvcmdhbml6YXRpb25zIGNvbnRyaWJ1dGluZyBndWlkZS4KWW91IGNhbiBvYnRhaW4gY29weSBvZiB0aGlzIGNvbnRyaWJ1dGluZyBndWlkZSBhdCBbaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpLy5naXRodWIvYmxvYi9tYXN0ZXIvQ09OVFJJQlVUSU5HLm1kXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvLmdpdGh1Yi9ibG9iL21hc3Rlci9DT05UUklCVVRJTkcubWQpLgpSZWFkIG91ciBjb250cmlidXRpbmcgZ3VpZGUgdG8gbGVhcm4gYWJvdXQgb3VyIGRldmVsb3BtZW50IHByb2Nlc3MsIGhvdyB0byBwcm9wb3NlIGJ1Z2ZpeGVzIGFuZCBpbXByb3ZlbWVudHMsCmFuZCBob3cgdG8gYnVpbGQgYW5kIHRlc3QgeW91ciBjaGFuZ2VzIHRvIEFwaURPTS4KCiMjIERvY3VtZW50YXRpb24KCklmIHRoZXJlIGlzIG9uZSB0aGluZyBBUEkgZGVzY3JpcHRpb24gbGFuZ3VhZ2VzIGhhdmUgdGF1Z2h0IHVzLCBpdCBpcyB0aGF0IGEgc2luZ2xlIGNvbnRyYWN0IHByb3ZpZGVzCnRoZSBiZXN0IGFuZCBmYXN0ZXN0IHdheSB0byBkZXNpZ24gYW5kIGl0ZXJhdGUgb24gYW4gQVBJLiBEZXZlbG9wZXJzIGJ1aWxkaW5nIHRoZSBBUEkgY2FuIG1vdmUgaW5kZXBlbmRlbnRseQphcyB0aGV5IHByb2dyZXNzIHRvd2FyZHMgdGhlIGRlZmluZWQgY29udHJhY3QgZm91bmQgaW4gdGhlIE9wZW5BUEkgb3IgUkFNTCBkb2N1bWVudC4KQ29udmVyc2VseSwgQVBJIGNvbnN1bWVycyBjYW4gYnVpbGQgdG9vbHMgZm9yIGNvbnN1bWluZyB0aGUgQVBJIGJhc2VkIG9uIHRoZSBBUEkgZGVmaW5pdGlvbiBkb2N1bWVudC4KClRoaXMgc2FtZSBwYXR0ZXJuIGhhcyBwcm92ZW4gdG8gYmUganVzdCBhcyB2YWx1YWJsZSBmb3IgYnVpbGRpbmcgQVBJIGRlc2NyaXB0aW9uIGxhbmd1YWdlcyBhbmQgdG9vbGluZy4KQXBpRE9NIGlzIHRoZSBjb250cmFjdCBmb3IgcHJvZHVjaW5nIGFuZCBjb25zdW1pbmcgdGhlIG1hbnkgQVBJIGRlc2NyaXB0aW9uIGxhbmd1YWdlcyBhbmQgc2VyaWFsaXphdGlvbiBmb3JtYXRzCmFuZCBhbGxvd3MgZXZlcnlvbmUgdG8gbW92ZSBxdWlja2x5IGFuZCBpbmRlcGVuZGVudGx5LgoKIyMjIFdoYXQgaXMgYW4gRWxlbWVudCA/CgpBcGlET00gaXMgbWFkZSB1cCBvZiBtYW55IHNtYWxsIGVsZW1lbnRzIHRoYXQgaGF2ZSBhIHJpY2ggc2VtYW50aWMgbWVhbmluZyBnaXZlbiB0aGVpciB2YWx1ZSBhbmQgY29udGV4dC4KQW4gZWxlbWVudCBpcyBhbiBpbmRpdmlkdWFsIHBpZWNlIHRoYXQgbWFrZXMgdXAgYW4gQVBJLCBhbmQgY2FuIHJhbmdlIGZyb20gZGVmaW5pbmcgYSByZXNvdXJjZSB0byBwcm92aWRpbmcKYW4gZXhhbXBsZSBvZiBhbiBIVFRQIHJlcXVlc3QuCgpUaGUgQXBpRE9NIGRlZmluZXMgZWxlbWVudHMgdG8gYmUgdXNlZCBmb3I6CgpEZXNjcmliaW5nIGFuIEFQSQpEZXNjcmliaW5nIGRhdGEgc3RydWN0dXJlcyB1c2VkIHdpdGhpbiB0aGF0IEFQSQpEZXNjcmliaW5nIHBhcnNlIHJlc3VsdHMgd2hlbiBwYXJzaW5nIEFQSS1yZWxhdGVkIGRvY3VtZW50cwpUaGVzZSBlbGVtZW50cyBhbHNvIHNlZWsgdG8gcHJvdmlkZSBhIHdheSB0byBkZWNvdXBsZSBBUElzIGFuZCB0aGVpciBzZW1hbnRpY3MgZnJvbSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KClRoZSBzdHJ1Y3R1cmUgb2YgYW4gQXBpRE9NIGlzIHJlY3Vyc2l2ZSBieSBuYXR1cmUuIFdoZW4gbG9va2luZyBmb3Igc3BlY2lmaWMgZWxlbWVudHMsCml0IGlzIGJlc3QgdG8gdHJhdmVyc2UgdGhlIEFwaURPTSB0cmVlIHRvIGxvb2sgZm9yIGEgbWF0Y2guIFF1ZXJ5aW5nIHRoZSBBcGlET00gdHJlZSB3aWxsCmRlY291cGxlIG91ciBjb2RlIGZyb20gc3BlY2lmaWMgQVBJIGRlc2NyaXB0aW9uIGxhbmd1YWdlLiBBbHNvLCBpdCBkZWNvdXBsZXMgb3VyIGNvZGUgZnJvbSB0aGUKc3BlY2lmaWMgc3RydWN0dXJlIG9mIHRoZXNlIGRvY3VtZW50cyBhcyBsb25nIGFzIHRoZXkgYXJlIHNlbWFudGljYWxseSBlcXVpdmFsZW50LgoKIyMjIEFzIGEgd2F5IHRvIGFubm90YXRlIEpTT04KCkFwaURPTSBwcm92aWRlcyB0aGUgYWJpbGl0eSB0byB0YWtlIGEgbm9ybWFsIEpTT04gc3RydWN0dXJlIGFuZCBhZGQgYSBsYXllciBvbiB0b3Agb2YgaXQgZm9yIHRoZSBwdXJwb3NlCm9mIGFubm90YXRpbmcgYW5kIGFkZGluZyBzZW1hbnRpYyBkYXRhLiBJbnN0ZWFkIG9mIGNyZWF0aW5nIGFuIGVudGlyZWx5IGRpZmZlcmVudCBzdHJ1Y3R1cmUgdG8gZGVzY3JpYmUgdGhlIGRhdGEsCkFwaURPTSdzIGFwcHJvYWNoIGlzIHRvIGV4cGFuZCB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlICh3ZSBjYWxsIGl0ICJyZWZyYWN0aW5nIiBhIHN0cnVjdHVyZSkuCkhlcmUgaXMgYW4gZXhhbXBsZSB0byBzaG93IG91ciBwb2ludC4KClRha2UgdGhlIGZvbGxvd2luZyBzaW1wbGUgSlNPTiBvYmplY3QuCgpgYGBqc29uCnsKICAibmFtZSI6ICJKb2huIERvZSIsCiAgImVtYWlsIjogImpvaG5AZXhhbXBsZS5jb20iCn0KYGBgCgpVc2luZyBBcGlET00sIHdlIGNhbiBleHBhbmQgdGhpcyBvdXQgYW5kIGFkZCBzb21lIGh1bWFuLXJlYWRhYmxlIHRpdGxlcyBhbmQgZGVzY3JpcHRpb25zLgoKYGBganNvbgp7CiAgImVsZW1lbnQiOiAib2JqZWN0IiwKICAiY29udGVudCI6IFsKICAgIHsKICAgICAgImVsZW1lbnQiOiAibWVtYmVyIiwKICAgICAgIm1ldGEiOiB7CiAgICAgICAgInRpdGxlIjogIk5hbWUiLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJOYW1lIG9mIGEgcGVyc29uIgogICAgICB9LAogICAgICAiY29udGVudCI6IHsKICAgICAgICAia2V5IjogewogICAgICAgICAgImVsZW1lbnQiOiAic3RyaW5nIiwKICAgICAgICAgICJjb250ZW50IjogIm5hbWUiCiAgICAgICAgfSwKICAgICAgICAidmFsdWUiOiB7CiAgICAgICAgICAiZWxlbWVudCI6ICJzdHJpbmciLAogICAgICAgICAgImNvbnRlbnQiOiAiSm9obiBEb2UiCiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICAiZWxlbWVudCI6ICJtZW1iZXIiLAogICAgICAibWV0YSI6IHsKICAgICAgICAidGl0bGUiOiAiRW1haWwiLAogICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbWFpbCBhZGRyZXNzIGZvciB0aGUgcGVyc29uIgogICAgICB9LAogICAgICAiY29udGVudCI6IHsKICAgICAgICAia2V5IjogewogICAgICAgICAgImVsZW1lbnQiOiAic3RyaW5nIiwKICAgICAgICAgICJjb250ZW50IjogImVtYWlsIgogICAgICAgIH0sCiAgICAgICAgInZhbHVlIjogewogICAgICAgICAgImVsZW1lbnQiOiAic3RyaW5nIiwKICAgICAgICAgICJjb250ZW50IjogImpvaG5AZXhhbXBsZS5jb20iCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgXQp9CmBgYAoKV2UgYWRkZWQgc29tZSBzZW1hbnRpYyBkYXRhIHRvIHRoZSBleGlzdGluZyBkYXRhLCBidXQgd2UgZGlkIHNvIHdoaWxlIHJldGFpbmluZyB0aGUgc2VtYW50aWMgc3RydWN0dXJlIG9mIHRoZSBkYXRhCndpdGggdGhlIG9iamVjdCBhbmQgc3RyaW5nIGVsZW1lbnRzLiAqKlRoaXMgbWVhbnMgdGhlcmUgaXMgbm8gc2VtYW50aWMgZGlmZmVyZW5jZSBpbiB0aGUgQXBpRE9NIHN0cnVjdHVyZSBhbmQKdGhlIG9yaWdpbmFsIEpTT04gc3RydWN0dXJlKiouIEl0IGFsc28gbWVhbnMgd2UgY2FuIGFkZCBleHRyYSBzZW1hbnRpY3Mgb24gdG9wIG9mIHRoZXNlIHN0cnVjdHVyYWwgb25lcy4KCiMjIyBBcyBhIHVuaWZ5aW5nIHN0cnVjdHVyZQoKWW91IG1heSBoYXZlIG5vdGljZWQgdGhlIHNpbWlsYXJpdGllcyBiZXR3ZWVuIHRoZSBKU09OIGV4YW1wbGUgYWJvdmUgYW5kIFhNTC4KWE1MIGhhcyBlbGVtZW50cywgYXR0cmlidXRlcywgYW5kIGNvbnRlbnQuIEl0IHdvdWxkIGJlIGEgZ29vZCBxdWVzdGlvbiB0byBhc2sgaWYgd2Ugc2ltcGx5IHR1cm5lZCBKU09OIGludG8gWE1MLgoKQXBpRE9NIGlzIGFjdHVhbGx5IG1lYW50IHRvIHByb3ZpZGUgdGhlc2UgY3Jvc3MtZm9ybWF0IHNpbWlsYXJpdGllcy4gSXQgbWVhbnMgdGhhdCBhIEpTT04gc3RydWN0dXJlCm1heSBiZSByZWZyYWN0ZWQgYW5kIGNvbnZlcnRlZCB0byBYTUwuIEl0IGFsc28gbWVhbnMgYW4gWE1MIGRvY3VtZW50IG1heSBiZSBjb252ZXJ0ZWQgaW50byBBcGlET00uClRoaXMgYWxzbyBnb2VzIGZvciBZQU1MLCBIVE1MLCBDU1YsIGFuZCBtYW55IG90aGVyIGZvcm1hdHMuIEFwaURPTSBpcyBhIHdheSB0byB1c2UgcmVmcmFjdGluZyB0byB1bmlmeSB0aGVzZSBzdHJ1Y3R1cmVzLgoKTGV0J3MgbG9vayBhdCBhbm90aGVyIGV4YW1wbGUsIHRoaXMgdGltZSByZWZhY3RpbmcgWE1MIHdpdGggQXBpRE9NLgoKYGBgeG1sCjxwZXJzb24gbmFtZT0iSm9obiBEb2UiIGVtYWlsPSJqb2huQGV4YW1wbGUuY29tIj48L3BlcnNvbj4KYGBgCgpUaGlzIGV4YW1wbGUgaW4gcmVmcmFjdGVkIGZvcm0gd291bGQgbG9vayBsaWtlIHRoZSBmb2xsb3dpbmcgc25pcHBldC4gTm90aWNlIHRoYXQgd2UncmUgdXNpbmcgYXR0cmlidXRlcyBpbiByZXN1bHRpbmcgQXBpRE9NIHN0cnVjdHVyZS4KCmBgYGpzb24KewogICJlbGVtZW50IjogInBlcnNvbiIsCiAgImF0dHJpYnV0ZXMiOiB7CiAgICAibmFtZSI6IHsKICAgICAgImVsZW1lbnQiOiAic3RyaW5nIiwKICAgICAgImNvbnRlbnQiOiAiSm9obiBEb2UiCiAgICB9LAogICAgImVtYWlsIjogewogICAgICAiZWxlbWVudCI6ICJzdHJpbmciLAogICAgICAiY29udGVudCI6ICJqb2huQGV4YW1wbGUuY29tIgogICAgfQogIH0KfQpgYGAKClNpbmNlIHdlIGNhbiBnbyBiYWNrIGFuZCBmb3J0aCBiZXR3ZWVuIEpTT04sIFlBTUwsIFhNTCwgYW5kIG90aGVyIGZvcm1hdHMsIHdlIGFyZSBub3cgYWJsZSB0byB1c2Ugc2FtZSB0b29sc2V0IGFjcm9zcyB0aGUgZGlmZmVyZW50IGZvcm1hdHMuClRoYXQgbWVhbnMgd2UgY291bGQgdXNlIFhTTFQgdG8gdHJhbnNmb3JtIEpTT04gZG9jdW1lbnRzLgoKIyMjIEFzIGEgcXVlcnlhYmxlIHN0cnVjdHVyZQoKQXBpRE9NIGlzIG1lYW50IHRvIGZyZWUgdXMgZnJvbSB0aGUgc3RydWN0dXJlIG9mIG91ciBkb2N1bWVudHMsIHNpbWlsYXIgdG8gaG93IFhNTCBkb2VzIHdpdGggdGhpbmdzCmxpa2UgWFBBVEggb3IgdGhlIERPTS4gSXQgbWVhbnMgd2UgY2FuIG5vdyBxdWVyeSBKU09OIGRvY3VtZW50cyBhcyBpZiB0aGVyZSB3YXMgYW4gdW5kZXJseWluZyBET00sCndoaWNoIGRlY291cGxlcyBvdXIgU0RLIGZyb20gb3VyIHN0cnVjdHVyZSBhbmQgb3VyIHN0cnVjdHVyZSBmcm9tIG91ciBkYXRhLgoKIyMjIEFwaURPTSBzdGFnZXMKClRoZXJlIGFyZSB0aHJlZSBzdGFnZXMgdG8gQXBpRE9NCgotIFBhcnNlIHN0YWdlCi0gUmVmcmFjdCBzdGFnZQotIEdlbmVyYXRlIHN0YWdlCgoKIyMjIyBQYXJzZSBzdGFnZQoKVGhlIHBhcnNlIHN0YWdlIHRha2VzIEpTT04gc3RyaW5nIGFuZCBwcm9kdWNlcyBBcGlET00gc3RydWN0dXJlIHVzaW5nIHRoZSBiYXNlIEFwaURPTSBuYW1lc3BhY2UuIFRoZXJlIGFyZSB0d28gcGhhc2VzIG9mIHBhcnNpbmc6CgotIExleGljYWwgQW5hbHlzaXMgcGhhc2UKLSBTeW50YWN0aWMgQW5hbHlzaXMgcGhhc2UKCgojIyMjIyBMZXhpY2FsIEFuYWx5c2lzIHBoYXNlCgpMZXhpY2FsIEFuYWx5c2lzIHdpbGwgdGFrZSBhIEpTT04gc3RyaW5nIGFuZCB0dXJuIGl0IGludG8gYSBzdHJlYW0gb2YgdG9rZW5zLiB0cmVlLXNpdHRlciAvIHdlYi10cmVlLXNpdHRlciBpcyB1c2VkCmFzIGFuIHVuZGVybHlpbmcgbGV4aWNhbCBhbmFseXplci4KCiMjIyMjIFN5bnRhY3RpYyBBbmFseXNpcwoKU3ludGFjdGljIEFuYWx5c2lzIHdpbGwgdGFrZSBhIHN0cmVhbSBvZiB0b2tlbnMgYW5kIHR1cm4gaXQgaW50byBhbiBBcGlET00gcmVwcmVzZW50YXRpb24uCkNTVCBwcm9kdWNlZCBieSBsZXhpY2FsIGFuYWx5c2lzIGlzIHN5bnRhY3RpY2FsbHkgYW5hbHl6ZWQsIGFuZCBBcGlET00gc3RydWN0dXJlIHVzaW5nIGJhc2UgKGdlbmVyaWMpIEFwaURPTSBuYW1lc3BhY2UgaXMgcHJvZHVjZWQuClN5bnRhY3RpYyBhbmFseXNpcyBjYW4gZnVydGhlciBiZSBkaXJlY3Qgb3IgaW5kaXJlY3QuIEpTT04gcGFyc2VyIGhhcyBib3RoIGRpcmVjdCBhbmQgaW5kaXJlY3Qgc3ludGFjdGljYWwgYW5hbHl6ZXJzLApidXQgWUFNTCBwYXJzZXIgb25seSBoYXMgYW4gaW5kaXJlY3Qgb25lLgoKIyMjIyMjIERpcmVjdCBTeW50YWN0aWNhbCBhbmFseXNpcwoKVGhpcyBhbmFseXNpcyBkaXJlY3RseSB0dXJucyB0cmVlLXNpdHRlciBDU1QgaW50byBBcGlET00uIFNpbmdsZSB0cmF2ZXJzYWwgaXMgcmVxdWlyZWQsIHdoaWNoIG1ha2VzIGl0IHN1cGVyIHBlcmZvcm1hbnQsCmFuZCBpdCdzIHRoZSBkZWZhdWx0IGFuYWx5c2lzIHVzZWQuCgojIyMjIyMgSW5kaXJlY3QgU3ludGFjdGljIGFuYWx5c2lzCgpUaGlzIGFuYWx5c2lzIHR1cm5zIHRyZWVzLXNpdHRlciBDU1QgaW50byBKU09OIEFTVCByZXByZXNlbnRhdGlvbi4gVGhlbiBKU09OIEFTVCBpcyB0dXJuZWQgaW50byBBcGlET00uClR3byB0cmF2ZXJzYWxzIGFyZSByZXF1aXJlZCwgd2hpY2ggbWFrZXMgdGhlIGluZGlyZWN0IGFuYWx5c2lzIGxlc3MgcGVyZm9ybWFudCB0aGFuIHRoZSBkaXJlY3Qgb25lLgpUaG91Z2ggbGVzcyBwZXJmb3JtYW50LCBoYXZpbmcgSlNPTiBBU1QgcmVwcmVzZW50YXRpb24gYWxsb3dzIHVzIHRvIGRvIGZ1cnRoZXIgY29tcGxleCBhbmFseXNpcy4KCiMjIyMgUmVmcmFjdCBzdGFnZQoKVGhlIHJlZnJhY3Qgc3RhZ2UgdGFrZXMgYSBnZW5lcmljIEFwaURPTSBzdHJ1Y3R1cmUgKGJhc2UgbmFtZXNwYWNlKSBhbmQgdHJhdmVyc2VzIHRocm91Z2ggaXQsIGFkZGluZywgdXBkYXRpbmcsCmFuZCByZW1vdmluZyBub2RlcyBhcyBpdCBnb2VzIGFsb25nIGFuZCB0dXJuaW5nIGl0IGludG8gc2VtYW50aWMgQXBpRE9NIHN0cnVjdHVyZSAobGlrZSBPcGVuQVBJIG9yIEFzeW5jQVBJKS4KVGhpcyBpcyBieSBmYXIgdGhlIG1vc3QgY29tcGxleCBwYXJ0IG9mIEFwaURPTS4gVGhpcyBpcyB3aGVyZSBwbHVnaW5zIG9wZXJhdGUuCklmIHBsdWdpbnMgYXJlIHVzZWQsIGFkZGl0aW9uYWwgdHJhdmVyc2FsIGlzIGN1cnJlbnRseSBuZWVkZWQuCgojIyMjIEdlbmVyYXRlIHN0YWdlCgpXZSBjYW4gY3VycmVudGx5IG9ubHkgZ2VuZXJhdGUgSlNPTiBkb2N1bWVudHMgZnJvbSB0aGUgQXBpRE9NIHN0cnVjdHVyZS4KSXQgZG9lc24ndCBtYXR0ZXIgaWYgdGhlIG9yaWdpbmFsIGRvY3VtZW50IHdhcyBvcmlnaW5hbGx5IGRlZmluZWQgaW4gSlNPTiBvciBZQU1MLgpHZW5lcmF0ZWQgSlNPTiBkb2N1bWVudGVkIHdpbGwgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIHNlbWFudGljIGluZm9ybWF0aW9uIGFzIHRoZSBvcmlnaW5hbCBvbmUsCmJ1dCB0aGUgc3R5bGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3JpZ2luYWwgZG9jdW1lbnQgaXMgbm90IHByZXNlcnZlZCAod2hpdGUgc3BhY2VzL2NvbW1lbnRzLCBldGMuLikuCgotLS0KCkhhdmluZyBzYWlkIHRoYXQsIHRoaXMgaXMgaG93IEpTT04gT3BlbkFQSSAzLjEgZG9jdW1lbnQgZ2V0cyB0cmFuc2Zvcm1lZCBpbnRvIEFwaURPTToKCgoqKndpdGggZGlyZWN0IHN5bnRhY3RpYyBhbmFseXNpcyAocmVxdWlyZXMgMiB0cmF2ZXJzYWxzKSoqCmBgYApKU09OIHN0cmluZyAtPiB0cmVlLXNpdHRlciBDU1QgLT4gIGdlbmVyaWMgQXBpRE9NIC0+IE9wZW5BUEkgMy4xIEFwaURPTQpgYGAKCioqd2l0aCBpbmRpcmVjdCBzeW50YWN0aWMgYW5hbHlzaXMgKHJlcXVpcmVzIDMgdHJhdmVyc2FscykqKgpgYGAKSlNPTiBzdHJpbmcgLT4gdHJlZS1zaXR0ZXIgQ1NUIC0+IEpTT04gQVNUIC0+IGdlbmVyaWMgQXBpRE9NIC0+IE9wZW5BUEkgMy4xIEFwaURPTQpgYGAKCioqd2l0aCBkaXJlY3Qgc3ludGFjdGljIGFuYWx5c2lzIGFuZCBhZGRpdGlvbmFsIHBsdWdpbnMgKHJlcXVpcmVzIDMgdHJhdmVyc2FsKSoqCmBgYApKU09OIHN0cmluZyAtPiB0cmVlLXNpdHRlciBDU1QgLT4gZ2VuZXJpYyBBcGlET00gLT4gT3BlbkFQSSAzLjEgQXBpRE9NIC0+IHBsdWdpbnMgLT4gT3BlbkFQSSAzLjEgQXBpRE9NCmBgYAotLS0KClRoaXMgdmVyeSBjbG9zZWx5IHJlZmxlY3RzIGhvdyBbQmFiZWxdKGh0dHBzOi8vZ2l0aHViLmNvbS9iYWJlbC9iYWJlbCkgd29ya3MgKFtCYWJlbCBQbHVnaW4gSGFuZGJvb2tdKGh0dHBzOi8vZ2l0aHViLmNvbS9qYW1pZWJ1aWxkcy9iYWJlbC1oYW5kYm9vay9ibG9iL21hc3Rlci90cmFuc2xhdGlvbnMvZW4vcGx1Z2luLWhhbmRib29rLm1kKSkuClRoZWlyIHRyYW5zZm9ybSBwaGFzZSBpcyBvdXIgcmVmcmFjdCBwaGFzZS4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0IHdoZW4gcGx1Z2lucyBhcmUgaW52b2x2ZWQsIG91ciB0cmFuc2Zvcm0gcGhhc2UKcmVxdWlyZXMgMiB0cmF2ZXJzYWxzIGluc3RlYWQgb2YgYSBzaW5nbGUgb25lLiBXZSBjYW4gZmluZCBhIHdheSBpbiB0aGUgZnV0dXJlIGhvdyB0byBmb2xkIHRoZXNlIDIgdHJhdmVyc2FscyBpbnRvIGEgc2luZ2xlIG9uZS4KCiMjIExpY2Vuc2UKCkFwaURPTSBpcyBsaWNlbnNlZCB1bmRlciBbQXBhY2hlIDIuMCBsaWNlbnNlXShodHRwczovL2dpdGh1Yi5jb20vc3dhZ2dlci1hcGkvYXBpZG9tL2Jsb2IvbWFpbi9MSUNFTlNFUy9BcGFjaGUtMi4wLnR4dCkuCkFwaURPTSBjb21lcyB3aXRoIGFuIGV4cGxpY2l0IFtOT1RJQ0VdKGh0dHBzOi8vZ2l0aHViLmNvbS9zd2FnZ2VyLWFwaS9hcGlkb20vYmxvYi9tYWluL05PVElDRSkgZmlsZQpjb250YWluaW5nIGFkZGl0aW9uYWwgbGVnYWwgbm90aWNlcyBhbmQgaW5mb3JtYXRpb24uCgpUaGlzIHByb2plY3QgdXNlcyBbUkVVU0Ugc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9yZXVzZS5zb2Z0d2FyZS9zcGVjLykgdGhhdCBkZWZpbmVzIGEgc3RhbmRhcmRpemVkIG1ldGhvZApmb3IgZGVjbGFyaW5nIGNvcHlyaWdodCBhbmQgbGljZW5zaW5nIGZvciBzb2Z0d2FyZSBwcm9qZWN0cy4KCiMjIFNvZnR3YXJlIEJpbGwgT2YgTWF0ZXJpYWxzIChTQk9NKQoKU29mdHdhcmUgQmlsbCBPZiBtYXRlcmlhbHMgaXMgYXZhaWxhYmxlIGluIHRoaXMgcmVwb3NpdG9yeSBbZGVwZW5kZW5jeSBncmFwaF0oaHR0cHM6Ly9naXRodWIuY29tL3N3YWdnZXItYXBpL2FwaWRvbS9uZXR3b3JrL2RlcGVuZGVuY2llcykuCkNsaWNrIG9uIGBFeHBvcnQgU0JPTWAgYnV0dG9uIHRvIGRvd25sb2FkIHRoZSBTQk9NIGluIFtTUERYIGZvcm1hdF0oaHR0cHM6Ly9zcGR4LmRldi8pLgoK + readmeEtag: '"2b32f483f64bb23a87427c5ac643f2b2166b119c13f1ee7d1401da35c26f86cb"' + readmeLastModified: Wed, 13 Dec 2023 23:50:41 GMT repositoryId: 249737066 description: Semantic parser for API specifications created: '2020-03-24T14:55:51Z' @@ -10827,7 +10827,7 @@ forks: 10 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 - repoEtag: '"4c3906d2a263ea2495aea9b32bef33452b172ac7bcafb9bac4d776395617c124"' + repoEtag: '"bf3bff5d064863bafaf3624ac8cf6fc56892b669d4707e379dc19420f0171d2b"' repoLastModified: Thu, 30 Nov 2023 10:09:52 GMT category: Parsers foundInMaster: true @@ -10920,7 +10920,7 @@ Example of how you can use OpenAPI with AWS API Gateway, Also includes integrations with AWSLambda, AWS Cognito, AWS SNS and CloudWatch logs created: '2020-01-25T05:40:11Z' - updated: '2023-10-01T18:20:38Z' + updated: '2023-12-13T18:22:55Z' language: HCL archived: false stars: 43 @@ -10929,8 +10929,8 @@ owner: rpstreef logo: https://avatars.githubusercontent.com/u/15830262?v=4 license: Apache-2.0 - repoEtag: '"baa4289b9cca69b50872664ee6e544cfa45d8e619b3229f2bffd63d01b93303a"' - repoLastModified: Sun, 01 Oct 2023 18:20:38 GMT + repoEtag: '"d4238703c710f9776c70289b35fef42bb0d79aa495ed21baf840004c9f16532d"' + repoLastModified: Wed, 13 Dec 2023 18:22:55 GMT foundInMaster: true category: - Description Validators @@ -11015,7 +11015,7 @@ owner: javalin logo: https://avatars.githubusercontent.com/u/28701086?v=4 license: Apache-2.0 - repoEtag: '"9a06dd39fd35bd25e66103150f9ca34241c0903d9d7dc4a87cf2aa122880dbb0"' + repoEtag: '"8aabc94d1514d3cc7c0810ff70dd5361589c54933c820a76ba043e1133d7d309"' repoLastModified: Mon, 04 Dec 2023 23:34:04 GMT category: SDK foundInMaster: true @@ -11065,7 +11065,7 @@ forks: 26 owner: piomin logo: https://avatars.githubusercontent.com/u/2892502?v=4 - repoEtag: '"e74abd00b57270130b6cf94d9c7950e04d6a8f0b70f0a79cea4f190de6c55c45"' + repoEtag: '"d7799f0d8bc7ea147ca72086a32b49c346f9df03acfd985045afbd861dd32de9"' repoLastModified: Mon, 02 Oct 2023 00:55:50 GMT foundInMaster: true category: SDK @@ -11227,7 +11227,7 @@ owner: Backbase logo: https://avatars.githubusercontent.com/u/1914334?v=4 license: NOASSERTION - repoEtag: '"158150e8e9a28d68941e7a78b304b69a9c03b05bd04b3abff1d02264329fa6ac"' + repoEtag: '"78cc185c04162e9fae9000be16df11b89e778ef90828222155e175dd3cf938b8"' repoLastModified: Fri, 20 Oct 2023 12:33:10 GMT foundInMaster: true category: SDK @@ -11713,7 +11713,7 @@ owner: kstasik logo: https://avatars.githubusercontent.com/u/676617?v=4 license: MIT - repoEtag: '"1f67057bd83e06d1a4625ac1faa2b84f7f033bff87f3fc257a7e22fa974e6abe"' + repoEtag: '"ebbb25e03dbf1dd6cf8fbb3457d1eb2b87369eb33bbb0de4d91a86b621d73556"' repoLastModified: Fri, 24 Nov 2023 12:49:53 GMT category: Parsers foundInMaster: true @@ -11787,17 +11787,17 @@ Serverless plugin to export your config as OpenAPI v3 Documentation and Postman Collection V2 created: '2022-05-23T21:49:03Z' - updated: '2023-11-15T16:24:26Z' + updated: '2023-12-14T00:50:36Z' language: JavaScript archived: false - stars: 29 + stars: 30 watchers: 1 forks: 11 owner: JaredCE logo: https://avatars.githubusercontent.com/u/770400?v=4 license: MIT - repoEtag: '"96fba5452aecdd7cee7a0921615f3cbf0dee2bf655645e371c86d9574f0b89af"' - repoLastModified: Wed, 15 Nov 2023 16:24:26 GMT + repoEtag: '"1b6b20dddd278f5ae464703a825c6905b245ab4665efb6bc2f9b17150d7520e9"' + repoLastModified: Thu, 14 Dec 2023 00:50:36 GMT category: Parsers foundInMaster: true - source: openapi3 tags @@ -11970,7 +11970,7 @@ Full stack, modern web application generator. Using FastAPI, MySQL as database, Docker, automatic HTTPS and more. created: '2022-04-09T05:32:37Z' - updated: '2023-11-13T10:18:29Z' + updated: '2023-12-14T00:48:02Z' language: Python archived: false stars: 27 @@ -11979,8 +11979,8 @@ owner: vuongtlt13 logo: https://avatars.githubusercontent.com/u/14292473?v=4 license: MIT - repoEtag: '"7aff7ac633b9515f388c5ed45e23b354a036902a0412e57d6039d771fa8872b5"' - repoLastModified: Mon, 13 Nov 2023 10:18:29 GMT + repoEtag: '"e925d3f45ed2af2a6f72ab1763c040e3406ae7137aba8d4a90c196c44649b492"' + repoLastModified: Thu, 14 Dec 2023 00:48:02 GMT foundInMaster: true category: Server Implementations id: 288909aadff60d6d617f878d02cb018c @@ -12349,7 +12349,7 @@ owner: hei-school logo: https://avatars.githubusercontent.com/u/88576095?v=4 license: MIT - repoEtag: '"1fab330f900d1bc135e83def88cc4188f64bd90a928b71be078cb1485063a1d2"' + repoEtag: '"9c40627d97d206dfb77325fd7dea661d927a67e1e0c2b62250f0752e5e809e38"' repoLastModified: Fri, 08 Dec 2023 07:47:37 GMT foundInMaster: true category: Code Generators @@ -12588,7 +12588,7 @@ forks: 16 owner: ShipEngine logo: https://avatars.githubusercontent.com/u/42709242?v=4 - repoEtag: '"4ca1f72bdff0f58ee0f8e74934d2f9d3e630bef56a0d6640c6a197140282fe21"' + repoEtag: '"2809ca133cbdd9a5a19162876656a2544d275a5745222f490ee66175760fcc0c"' repoLastModified: Wed, 18 Oct 2023 19:30:48 GMT foundInMaster: true category: Parsers @@ -12688,12 +12688,12 @@ language: JavaScript archived: false stars: 20 - watchers: 6 + watchers: 7 forks: 3 owner: postman-open-technologies logo: https://avatars.githubusercontent.com/u/79494470?v=4 license: MIT - repoEtag: '"c2fe518d8ef0598bc21fd567f97e686f9d7fa261a8b76d9a303cf8cf1d90cbaf"' + repoEtag: '"e3c932e131ba16a9364cb733df1cde0d36b68325f36586722e0058c70a78c891"' repoLastModified: Wed, 15 Nov 2023 15:43:33 GMT category: Server Implementations foundInMaster: true @@ -12912,17 +12912,17 @@ 📚Swagger / Open API 3.0 builder and validation library for PHP that helps you write valid specs. created: '2018-04-16T18:32:26Z' - updated: '2023-05-11T20:00:26Z' + updated: '2023-12-14T00:20:13Z' language: PHP archived: false - stars: 18 + stars: 19 watchers: 12 forks: 13 owner: erasys logo: https://avatars.githubusercontent.com/u/1845621?v=4 license: MIT - repoEtag: '"f05ba484b353667bdc13b03e51d988f04b2f8906a5f4ba491ca1c3317af1a1f0"' - repoLastModified: Thu, 11 May 2023 20:00:26 GMT + repoEtag: '"9f31f28c7b9a4cc9b21a958492b72be0c975afeda429284dbe46050303d989ae"' + repoLastModified: Thu, 14 Dec 2023 00:20:13 GMT foundInMaster: true category: Data Validators id: acce8eb5c93c964fa251e3fed927c64d @@ -13100,10 +13100,10 @@ readmeLastModified: Fri, 24 Nov 2023 21:28:02 GMT repositoryId: 154585856 description: >- - This project contains the source code of a Spring Boot 3 REST API sample + This project contains the source code of a Spring Boot 3 REST API example application. created: '2018-10-25T00:16:09Z' - updated: '2023-12-04T11:55:57Z' + updated: '2023-12-13T13:25:53Z' language: Java archived: false stars: 17 @@ -13111,8 +13111,8 @@ forks: 11 owner: igor-baiborodine logo: https://avatars.githubusercontent.com/u/1027701?v=4 - repoEtag: '"8a2cc4b34dc6b0ccabfc1fd5b1d5318f43dd7934fd3050d4b1c85c857e42f73c"' - repoLastModified: Mon, 04 Dec 2023 11:55:57 GMT + repoEtag: '"ae8e45c06d4985420d4a41447b38d3c29f2644238dc4a1f5b1c716888e47bf3b"' + repoLastModified: Wed, 13 Dec 2023 13:25:53 GMT category: Server Implementations foundInMaster: true - source: openapi3 tags @@ -13293,7 +13293,7 @@ owner: mockoon logo: https://avatars.githubusercontent.com/u/49429147?v=4 license: NOASSERTION - repoEtag: '"d04ff5d0ae143dc6c11e6c9784c5ef4f6b5d78df935c72a4c1cc04d6501e472f"' + repoEtag: '"07516f1da68bbb667a05e6c0ae75707a782a68798a355c066bf46632f46a6f64"' repoLastModified: Thu, 07 Dec 2023 13:58:03 GMT foundInMaster: true category: Testing @@ -13888,7 +13888,7 @@ owner: bcgov logo: https://avatars.githubusercontent.com/u/916280?v=4 license: Apache-2.0 - repoEtag: '"749932798ea44b6cd6c5bef1b283928611815302f4c5c2cc442701a2a6af38ea"' + repoEtag: '"1d36c40e584c239b9e64f75d192a38b075db44771a69cc7ca141982ae48bd65a"' repoLastModified: Wed, 04 Oct 2023 21:10:59 GMT category: Documentation foundInMaster: true @@ -15101,7 +15101,7 @@ owner: Jnig logo: https://avatars.githubusercontent.com/u/3729585?v=4 license: MIT - repoEtag: '"587581298197a6366a3ffcc71a87526e50127f66e32537aed47aba8afd3e0b15"' + repoEtag: '"203eb5e9298d06bb7467191457fa90647a42c48aa0365785ef3ca44f47dcd425"' repoLastModified: Mon, 21 Aug 2023 21:29:33 GMT category: - Data Validators @@ -15436,7 +15436,7 @@ owner: christianhelle logo: https://avatars.githubusercontent.com/u/710400?v=4 license: MIT - repoEtag: '"713a5a6781bdd490c3e3d3ca7202e4937a97402f5829b9aab4de3611fc5d6bd9"' + repoEtag: '"75a98e12a282e98eec68a2ad92cd2eea6554b21f9a7dc96ebd355072b353c3c8"' repoLastModified: Tue, 12 Dec 2023 08:30:57 GMT category: Parsers foundInMaster: true @@ -15750,7 +15750,7 @@ owner: danicc097 logo: https://avatars.githubusercontent.com/u/71724149?v=4 license: Apache-2.0 - repoEtag: '"3b0144c8bfb95c784845233a653d6c9b0f658d3871ba9de1d959a1801cd2df45"' + repoEtag: '"9d59ac60bdf1c0189e64c4ef649595cd3eaaf969220a3fb3758e8357a5f3c599"' repoLastModified: Sat, 11 Nov 2023 00:21:23 GMT category: Parsers foundInMaster: true @@ -16104,16 +16104,16 @@ repositoryId: 496290531 description: Karate IntelliJ Plugin created: '2022-05-25T15:33:28Z' - updated: '2023-10-14T02:57:25Z' + updated: '2023-12-13T16:09:28Z' language: null archived: false - stars: 7 + stars: 8 watchers: 4 forks: 0 owner: karatelabs logo: https://avatars.githubusercontent.com/u/91312095?v=4 - repoEtag: '"e5083d82f53dcf5829e79d3dea07ce1d3b1b4a2807f8ae7428ca3580927d856e"' - repoLastModified: Sat, 14 Oct 2023 02:57:25 GMT + repoEtag: '"5a7e526d6476cf22efcd487dc25734280a89b0b20ad74f03c9f1c3171a72660f"' + repoLastModified: Wed, 13 Dec 2023 16:09:28 GMT category: Testing foundInMaster: true - source: openapi3 tags @@ -16614,7 +16614,7 @@ owner: Aptori-dev logo: https://avatars.githubusercontent.com/u/140379261?v=4 license: MIT - repoEtag: '"c01221678d3c83f1fd6c61d069a15573023841621ea5365fb2fd575e1f0f9bc1"' + repoEtag: '"916cfa0a98c6c91c54f8d9256b741695cfc272fad4f702791544c0653ae3693b"' repoLastModified: Mon, 06 Nov 2023 17:57:04 GMT category: Server Implementations foundInMaster: true @@ -16939,7 +16939,7 @@ owner: apideck-libraries logo: https://avatars.githubusercontent.com/u/73573473?v=4 license: MIT - repoEtag: '"7dd846a376a2bd45705bb6018cbc235947d2499973fc371f39db4f5ca5e3ba16"' + repoEtag: '"9c1364aa7aed4d9f9bba3943e7106f81156c17dc83846da607cf66ced2348cd9"' repoLastModified: Thu, 22 Jun 2023 19:15:09 GMT foundInMaster: true category: Testing @@ -17242,17 +17242,17 @@ repositoryId: 591983470 description: Apply overlays to OpenAPI descriptions created: '2023-01-22T15:11:54Z' - updated: '2023-06-03T18:02:06Z' + updated: '2023-12-13T16:35:09Z' language: JavaScript archived: false - stars: 5 + stars: 6 watchers: 2 - forks: 1 + forks: 2 owner: lornajane logo: https://avatars.githubusercontent.com/u/172607?v=4 license: Apache-2.0 - repoEtag: '"3d6a02075b3f85c8e1acdc2a812ca67ae1d53d77f196ddbd89834df2c387e04b"' - repoLastModified: Sat, 03 Jun 2023 18:02:06 GMT + repoEtag: '"25a1d8e03def395eb63fca65894838e88a789a8b64326031eea3d7941ba9b0eb"' + repoLastModified: Wed, 13 Dec 2023 16:35:09 GMT category: Parsers foundInMaster: true - source: openapi3 tags @@ -17489,7 +17489,7 @@ owner: seipan logo: https://avatars.githubusercontent.com/u/88176012?v=4 license: MIT - repoEtag: '"aad95779a3c1a640afa495d9d64b1873440e4d08eb4b4824d73c7f373007528a"' + repoEtag: '"6278c849f3f38dfccbb4497bd2b2a3776d7e30ad5008453dac43cc7763333bb7"' repoLastModified: Sun, 24 Sep 2023 01:01:49 GMT category: Server Implementations foundInMaster: true @@ -18301,7 +18301,7 @@ owner: aereal logo: https://avatars.githubusercontent.com/u/87649?v=4 license: MIT - repoEtag: '"ad9ab9fc6d2532cf9e109136b1b2aef7e9c486992e8d41a233d9232ead9c8773"' + repoEtag: '"4d96507b8359968e96b316f57e2c8cc6e1d918cc38396fbb26a40ea02143eb3c"' repoLastModified: Tue, 01 Aug 2023 19:43:43 GMT foundInMaster: true category: Data Validators @@ -20834,7 +20834,7 @@ owner: tsingsun logo: https://avatars.githubusercontent.com/u/5848549?v=4 license: Apache-2.0 - repoEtag: '"fa42aac96aca195aa5fd6b218ac2e14d8e9bd099a8f2d3713389902697840e95"' + repoEtag: '"126ee9003f1ab4c5c32f258a57e471a4f8bc6c7d4bc256b7f799542d04285552"' repoLastModified: Sun, 20 Aug 2023 07:44:44 GMT category: Server Implementations foundInMaster: true @@ -21352,7 +21352,7 @@ owner: mneiferbag logo: https://avatars.githubusercontent.com/u/16717541?v=4 license: MIT - repoEtag: '"b9be4d1747bc3cc3fca1cc0335e1644d68fbc9e585d6f4ae74a814df623e8138"' + repoEtag: '"975264358b7ff251ebe763a58b6eedbbb3cfae7edc1e7b548e88c3808dc60d4d"' repoLastModified: Wed, 18 Oct 2023 15:01:19 GMT category: SDK foundInMaster: true @@ -22219,7 +22219,7 @@ owner: ditschedev logo: https://avatars.githubusercontent.com/u/13885333?v=4 license: MIT - repoEtag: '"28d6b3f4b7b928ba4d6988a5387bf068703e862c437094451514b76d922aaceb"' + repoEtag: '"af1c61320cbf1d1eae80e4c5ed68d28a4dd4cb2161a2924214f4fd653a6d2c94"' repoLastModified: Thu, 05 Oct 2023 11:09:54 GMT category: Parsers foundInMaster: true @@ -22228,13 +22228,13 @@ v3: true repositoryMetadata: base64Readme: >- - IyBpV2x6LWluZGljYXRpZQoqKmlXbHotaW5kaWNhdGllIGJldmF0IGRlIFtHcmFwaHFsLXNjaGVtYV0oL2dxbC1zcGVjaWZpY2F0aWUpIGtvcHBlbHZsYWsgc3BlY2lmaWNhdGllIHZvb3IgaGV0IHJhYWRwbGVnZW4gdmFuIFdseiBpbmRpY2F0aWVnZWdldmVucyBpbiBoZXQgaW5kaWNhdGllcmVnaXN0ZXIuKioKCkhldCBpbmRpY2F0aWVyZWdpc3RlciBpcyBpbiBiZWhlZXIgYmlqIGhldCBDSVogZW4gaXMgb25kZXJkZWVsIHZhbiBoZXQgaVdsei1uZXR3ZXJrbW9kZWwuCgpEZSBrb3BwZWx2bGFrIHNwZWNpZmljYXRpZSB2YW4gaGV0IEluZGljYXRpZXJlZ2lzdGVyIG1hYWt0IG9uZGVyZGVlbCB1aXQgdmFuIGRlICoqaVN0YW5kYWFyZCBpV2x6KiouIERlIHNwZWNpZmljYXRpZXMgdmFuIGRlIGFuZGVyZSBvbmRlcmRlbGVuLCB6b2FscyBFUkQsIHJlZ2VscywgcHJvY2VzYmVzY2hyaWp2aW5nLCBhdXRvcmlzYXRpZXJlZ2Vscywgbm90aWZpY2F0aWUtdHlwZW4gc3RhYW4gaW4gaGV0IFtJbmZvcm1hdGllbW9kZWwgaVdsel0oaHR0cHM6Ly9pbmZvcm1hdGllbW9kZWwuaXN0YW5kYWFyZGVuLm5sLykgZGF0IHRlIHZpbmRlbiBpcyB2aWEgZGUgd2Vic2l0ZTogW2h0dHBzOi8vaW5mb3JtYXRpZW1vZGVsLmlzdGFuZGFhcmRlbi5ubC9dKGh0dHBzOi8vaW5mb3JtYXRpZW1vZGVsLmlzdGFuZGFhcmRlbi5ubC8pCgo+IE4uQi4gZGUgT3BlbkFQSSBzcGVjaWZpY2F0aWUgaXMgbmlldCB2b29yIGltcGxlbWVudGF0aWUhIAoKIyMgVmVyc2llcyBlbiBTdGF0dXMgCgpFciB6aWpuIGFsdGlqZCBtaW5pbWFhbCB0d2VlIHZlcnNpZXMgYWN0dWVlbC4gRWVuIHZlcnNpZSBkaWUgaW4gcHJvZHVjdGllIGlzLCBzdGF0dXMgaXMgKkxvcGVuZCogZW4gZWVuIHZlcnNpZSBkaWUgaW4gb250d2lra2VsaW5nIGlzLCBzdGF0dXMgaXMgKkluIG9udHdpa2tlbGluZyouCgp8IGlXbHogUmVsZWFzZSB8IHZlcnNpZSBrb3BwZWx2bGFrIHwgU3RhdHVzIHwKfDotLSB8Oi0tIHwgOi0tIHwKfCBbSW5kaWNhdGllIDEgKGlXbHogMi40KV0oaHR0cHM6Ly9pbmZvcm1hdGllbW9kZWwuaXN0YW5kYWFyZGVuLm5sL2lXbHotSW5kaWNhdGllLTEvKSB8IFt2MS4yLjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9pU3RhbmRhYXJkZW4vaVdsei1pbmRpY2F0aWUvdHJlZS92MS4yKSAoW21hc3Rlcl0oaHR0cHM6Ly9naXRodWIuY29tL2lTdGFuZGFhcmRlbi9pV2x6LWluZGljYXRpZSkpIHwgKipMb3BlbmQqKiB8CnwgW0luZGljYXRpZSAyIChpV2x6IDIuNSldKGh0dHBzOi8vaW5mb3JtYXRpZW1vZGVsLmlzdGFuZGFhcmRlbi5ubC9pV2x6LUluZGljYXRpZS0yLykgfCBbdjEuMy4wXShodHRwczovL2dpdGh1Yi5jb20vaVN0YW5kYWFyZGVuL2lXbHotaW5kaWNhdGllL3RyZWUvVmVyc2llLTEuMykgfCBJbiBvbnR3aWtrZWxpbmcgfCAKClZvbGxlZGlnIHZlcnNpZSBvdmVyemljaHQgemllOiBbQ2hhbmdlbG9nXShDSEFOR0VMT0cubWQpCgojIyBEb2N1bWVudGF0aWUKT25kZXJzdGV1bmVuZGUgZG9jdW1lbnRhdGllIGlzIHRlIHZpbmRlbiBpbiBoZXQgSW5mb3JtYXRpZW1vZGVsLCB2aWEgZGUgd2Vic2l0ZSBbaHR0cHM6Ly9pbmZvcm1hdGllbW9kZWwuaXN0YW5kYWFyZGVuLm5sL10oaHR0cHM6Ly9pbmZvcm1hdGllbW9kZWwuaXN0YW5kYWFyZGVuLm5sLykgZW4gZGFhciBkZSBnZXdlbnN0ZSB2ZXJzaWUgdGUgc2VsZWN0ZXJlbiAoemllIG9vayBpbiBkZSB0YWJlbCBoaWVyYm92ZW4gdm9vciBlZW4gZGlyZWN0ZSB2ZXJ3aWp6aW5nKS4KCiMjIE1lZXIgaW5mb3JtYXRpZQoqIEFjdGllcHJvZ3JhbW1hIGlXbHo6IHZhbiBrZXRlbiBuYWFyIG5ldHdlcms6IFtoZXQgQWN0aWVwcm9ncmFtbWEgaVdsel0oaHR0cHM6Ly93d3cuaXN0YW5kYWFyZGVuLm5sL2l3bHovYWN0aWVwcm9ncmFtbWEvaW5kZXggIk92ZXIgQWN0aWVwcm9ncmFtbWEgaVdseiIpCiogSW5mb3JtYXRpZW1vZGVsIGlTdGFuZGFhcmRlbiBpV2x6OiBbSW5mb3JtYXRpZW1vZGVsbGVuXShodHRwczovL2luZm9ybWF0aWVtb2RlbC5pc3RhbmRhYXJkZW4ubmwpCiogUG9ydGFhbCB2b29yIGlTdGFuZGFhcmRlbiBpbiBkZQpab3JnIGVuIE9uZGVyc3RldW5pbmc6IFtob21lcGFnaW5hIGlTdGFuZGFhcmRlbl0oaHR0cHM6Ly93d3cuaXN0YW5kYWFyZGVuLm5sKQoKIyMgQ29udGFjdHBlcnNvbmVuOgoqIEhpbGtvIEphY29ic2UgLSBbQGhpbGtvamFjb2JzZV0oaHR0cHM6Ly9naXRodWIuY29tL0hpbGtvSmFjb2JzZSkKKiBEZW5uaXMgZGUgR291dyAtIFtAZGVubmlzZGVnb3V3XShodHRwOi8vZ2l0aHViLmNvbS9kZW5uaXNkZWdvdXcpCiogUmVtbyB2YW4gUmVzdCAtIFtAcnZhbnJlc3RdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydmFucmVzdCkKCgo= - readmeEtag: '"aa8a8316c70390bf4ed3a436e7aada2f4d478c9b4cf6f2f818a82a4cdedc7287"' - readmeLastModified: Tue, 12 Dec 2023 15:47:22 GMT + IyBpV2x6LWluZGljYXRpZQoqKmlXbHotaW5kaWNhdGllIGJldmF0IGRlIFtHcmFwaHFsLXNjaGVtYV0oL2dxbC1zcGVjaWZpY2F0aWUpIGtvcHBlbHZsYWsgc3BlY2lmaWNhdGllIHZvb3IgaGV0IHJhYWRwbGVnZW4gdmFuIFdseiBpbmRpY2F0aWVnZWdldmVucyBpbiBoZXQgaW5kaWNhdGllcmVnaXN0ZXIuKioKCkhldCBpbmRpY2F0aWVyZWdpc3RlciBpcyBpbiBiZWhlZXIgYmlqIGhldCBDSVogZW4gaXMgb25kZXJkZWVsIHZhbiBoZXQgaVdsei1uZXR3ZXJrbW9kZWwuCgpEZSBrb3BwZWx2bGFrIHNwZWNpZmljYXRpZSB2YW4gaGV0IEluZGljYXRpZXJlZ2lzdGVyIG1hYWt0IG9uZGVyZGVlbCB1aXQgdmFuIGRlICoqaVN0YW5kYWFyZCBpV2x6KiouIERlIHNwZWNpZmljYXRpZXMgdmFuIGRlIGFuZGVyZSBvbmRlcmRlbGVuLCB6b2FscyBFUkQsIHJlZ2VscywgcHJvY2VzYmVzY2hyaWp2aW5nLCBhdXRvcmlzYXRpZXJlZ2Vscywgbm90aWZpY2F0aWUtdHlwZW4gc3RhYW4gaW4gaGV0IFtJbmZvcm1hdGllbW9kZWwgaVdsel0oaHR0cHM6Ly9pbmZvcm1hdGllbW9kZWwuaXN0YW5kYWFyZGVuLm5sLykgZGF0IHRlIHZpbmRlbiBpcyB2aWEgZGUgd2Vic2l0ZTogW2h0dHBzOi8vaW5mb3JtYXRpZW1vZGVsLmlzdGFuZGFhcmRlbi5ubC9dKGh0dHBzOi8vaW5mb3JtYXRpZW1vZGVsLmlzdGFuZGFhcmRlbi5ubC8pCgo+IE4uQi4gZGUgT3BlbkFQSSBzcGVjaWZpY2F0aWUgaXMgbmlldCB2b29yIGltcGxlbWVudGF0aWUhIAoKIyMgVmVyc2llcyBlbiBTdGF0dXMgCgpFciB6aWpuIGFsdGlqZCBtaW5pbWFhbCB0d2VlIHZlcnNpZXMgYWN0dWVlbC4gRWVuIHZlcnNpZSBkaWUgaW4gcHJvZHVjdGllIGlzLCBzdGF0dXMgaXMgKkxvcGVuZCogZW4gZWVuIHZlcnNpZSBkaWUgaW4gb250d2lra2VsaW5nIGlzLCBzdGF0dXMgaXMgKkluIG9udHdpa2tlbGluZyouCgp8IGlXbHogUmVsZWFzZSB8IHZlcnNpZSBrb3BwZWx2bGFrIHwgU3RhdHVzIHwKfDotLSB8Oi0tIHwgOi0tIHwKfCBbSW5kaWNhdGllIDEgKGlXbHogMi40KV0oaHR0cHM6Ly9pbmZvcm1hdGllbW9kZWwuaXN0YW5kYWFyZGVuLm5sL2lXbHotSW5kaWNhdGllLTEvKSB8IFt2MS4yLjBdKGh0dHBzOi8vZ2l0aHViLmNvbS9pU3RhbmRhYXJkZW4vaVdsei1pbmRpY2F0aWUvdHJlZS92MS4yKSAoW21hc3Rlcl0oaHR0cHM6Ly9naXRodWIuY29tL2lTdGFuZGFhcmRlbi9pV2x6LWluZGljYXRpZSkpIHwgKipMb3BlbmQqKiB8CnwgW0luZGljYXRpZSAyIChpV2x6IDIuNSldKGh0dHBzOi8vaW5mb3JtYXRpZW1vZGVsLmlzdGFuZGFhcmRlbi5ubC9pV2x6LUluZGljYXRpZS0yLykgfCBbdjEuMy4wXSgoaHR0cHM6Ly9naXRodWIuY29tL2lTdGFuZGFhcmRlbi9pV2x6LWluZGljYXRpZS90cmVlL3YxLjMpIHwgSW4gb250d2lra2VsaW5nIHwgCgpWb2xsZWRpZyB2ZXJzaWUgb3ZlcnppY2h0IHppZTogW0NoYW5nZWxvZ10oQ0hBTkdFTE9HLm1kKQoKIyMgRG9jdW1lbnRhdGllCk9uZGVyc3RldW5lbmRlIGRvY3VtZW50YXRpZSBpcyB0ZSB2aW5kZW4gaW4gaGV0IEluZm9ybWF0aWVtb2RlbCwgdmlhIGRlIHdlYnNpdGUgW2h0dHBzOi8vaW5mb3JtYXRpZW1vZGVsLmlzdGFuZGFhcmRlbi5ubC9dKGh0dHBzOi8vaW5mb3JtYXRpZW1vZGVsLmlzdGFuZGFhcmRlbi5ubC8pIGVuIGRhYXIgZGUgZ2V3ZW5zdGUgdmVyc2llIHRlIHNlbGVjdGVyZW4gKHppZSBvb2sgaW4gZGUgdGFiZWwgaGllcmJvdmVuIHZvb3IgZWVuIGRpcmVjdGUgdmVyd2lqemluZykuCgojIyBNZWVyIGluZm9ybWF0aWUKKiBBY3RpZXByb2dyYW1tYSBpV2x6OiB2YW4ga2V0ZW4gbmFhciBuZXR3ZXJrOiBbaGV0IEFjdGllcHJvZ3JhbW1hIGlXbHpdKGh0dHBzOi8vd3d3LmlzdGFuZGFhcmRlbi5ubC9pd2x6L2FjdGllcHJvZ3JhbW1hL2luZGV4ICJPdmVyIEFjdGllcHJvZ3JhbW1hIGlXbHoiKQoqIEluZm9ybWF0aWVtb2RlbCBpU3RhbmRhYXJkZW4gaVdsejogW0luZm9ybWF0aWVtb2RlbGxlbl0oaHR0cHM6Ly9pbmZvcm1hdGllbW9kZWwuaXN0YW5kYWFyZGVuLm5sKQoqIFBvcnRhYWwgdm9vciBpU3RhbmRhYXJkZW4gaW4gZGUKWm9yZyBlbiBPbmRlcnN0ZXVuaW5nOiBbaG9tZXBhZ2luYSBpU3RhbmRhYXJkZW5dKGh0dHBzOi8vd3d3LmlzdGFuZGFhcmRlbi5ubCkKCiMjIENvbnRhY3RwZXJzb25lbjoKKiBIaWxrbyBKYWNvYnNlIC0gW0BoaWxrb2phY29ic2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9IaWxrb0phY29ic2UpCiogRGVubmlzIGRlIEdvdXcgLSBbQGRlbm5pc2RlZ291d10oaHR0cDovL2dpdGh1Yi5jb20vZGVubmlzZGVnb3V3KQoqIFJlbW8gdmFuIFJlc3QgLSBbQHJ2YW5yZXN0XShodHRwczovL2dpdGh1Yi5jb20vcnZhbnJlc3QpCgoK + readmeEtag: '"370ac6afa38f8674c99ae331da64694561758763dd97f5cf5c8415c3a6f8a908"' + readmeLastModified: Wed, 13 Dec 2023 13:04:08 GMT repositoryId: 204430425 description: Koppelvlak specificatie Indicatieregister created: '2019-08-26T08:25:11Z' - updated: '2023-04-26T09:02:11Z' + updated: '2023-12-13T10:57:54Z' language: HTML archived: false stars: 2 @@ -22242,8 +22242,8 @@ forks: 4 owner: iStandaarden logo: https://avatars.githubusercontent.com/u/54351663?v=4 - repoEtag: '"7353f19b2d1a1be516d6673a8645b107eca8a4a4438f900cca2efc649cd94f7b"' - repoLastModified: Wed, 26 Apr 2023 09:02:11 GMT + repoEtag: '"2e709ab4f7ea78710e0eb13e853881ed98b13ba964bddff3af0d57ac787e05c9"' + repoLastModified: Wed, 13 Dec 2023 10:57:54 GMT foundInMaster: true category: Documentation id: 5a079f438418ad2614981480bbbba221 @@ -24106,9 +24106,9 @@ id: 263be96f5acdb8019bb4aa99faf938b6 repositoryMetadata: base64Readme: >- - IyBJbnRlclNlcnZlciBNeUFkbWluIENsaWVudCBJbnRlcmZhY2UKCiMjIEltcHJvdmVtZW50cyBhbmQgQmVuZWZpdHMgb3ZlciBjdXJyZW50IENsaWVudCBJbnRlcmZhY2UKCiogKipQZXJmb3JtYW5jZSBCb29zdCoqOiBTdGF0aWMgSFRNTCBnZW5lcmF0ZWQgYnkgVnVlIGNhbiBiZSBoaWdobHkgb3B0aW1pemVkIGZvciBzcGVlZCwgcmVzdWx0aW5nIGluIGZhc3RlciBwYWdlIGxvYWQgdGltZXMgYW5kIGEgbW9yZSByZXNwb25zaXZlIHVzZXIgZXhwZXJpZW5jZS4KKiAqKlJlZHVjZWQgU2VydmVyIExvYWQqKjogU2VydmluZyBzdGF0aWMgZmlsZXMgcmVxdWlyZXMgbGVzcyBzZXJ2ZXIgcHJvY2Vzc2luZyBjb21wYXJlZCB0byBkeW5hbWljYWxseSBnZW5lcmF0ZWQgcGFnZXMsIGxlYWRpbmcgdG8gcmVkdWNlZCBzZXJ2ZXIgbG9hZCBhbmQgaW1wcm92ZWQgc2NhbGFiaWxpdHkuCiogKipJbXByb3ZlZCBTRU8qKjogUHJlLXJlbmRlcmVkIHN0YXRpYyBIVE1MIGNhbiBlbmhhbmNlIHNlYXJjaCBlbmdpbmUgb3B0aW1pemF0aW9uIChTRU8pIGJ5IHByb3ZpZGluZyBjb250ZW50IHRoYXQgc2VhcmNoIGVuZ2luZXMgY2FuIGVhc2lseSBjcmF3bCBhbmQgaW5kZXguCiogKipDRE4gQ29tcGF0aWJpbGl0eSoqOiBTdGF0aWMgZmlsZXMgYXJlIHdlbGwtc3VpdGVkIGZvciBDb250ZW50IERlbGl2ZXJ5IE5ldHdvcmtzIChDRE5zKSwgd2hpY2ggY2FuIGRpc3RyaWJ1dGUgeW91ciBjb250ZW50IGdsb2JhbGx5LCByZWR1Y2luZyBsYXRlbmN5IGFuZCBpbXByb3ZpbmcgcGFnZSBsb2FkIHRpbWVzIGZvciB1c2VycyBhY3Jvc3MgdGhlIHdvcmxkLgoqICoqRW5oYW5jZWQgU2VjdXJpdHkqKjogU2VwYXJhdGluZyB0aGUgZnJvbnRlbmQgZnJvbSB0aGUgYmFja2VuZCBtaW5pbWl6ZXMgdGhlIGV4cG9zdXJlIG9mIHNlbnNpdGl2ZSBiYWNrZW5kIGxvZ2ljLCBpbXByb3ZpbmcgdGhlIG92ZXJhbGwgc2VjdXJpdHkgcG9zdHVyZSBvZiB5b3VyIGFwcGxpY2F0aW9uLgoqICoqU2NhbGFiaWxpdHkqKjogU3RhdGljIGZpbGVzIGNhbiBiZSBjYWNoZWQgZWZmaWNpZW50bHksIGFsbG93aW5nIGZvciBlYXN5IGhvcml6b250YWwgc2NhbGluZyB3aXRob3V0IHRoZSBuZWVkIHRvIHdvcnJ5IGFib3V0IHNlcnZlci1zaWRlIHN0YXRlLgoqICoqU2ltcGxpZmllZCBEZXBsb3ltZW50Kio6IERlcGxveWluZyBhIHN0YXRpYyBmcm9udGVuZCBpcyBvZnRlbiBzaW1wbGVyIGFuZCBtb3JlIHByZWRpY3RhYmxlIHRoYW4gZGVwbG95aW5nIGNvbXBsZXggc2VydmVyLXNpZGUgYXBwbGljYXRpb25zLCBsZWFkaW5nIHRvIHNtb290aGVyIHJlbGVhc2UgY3ljbGVzLgoqICoqUmVkdWNlZCBBUEkgT3ZlcmhlYWQqKjogVXRpbGl6aW5nIHRoZSBQSFAgcGxhdGZvcm0gc29sZWx5IGZvciBoYW5kbGluZyBPcGVuQVBJIEFQSSByZXF1ZXN0cyBtZWFucyB0aGF0IHRoZSBiYWNrZW5kIHNlcnZlciBpcyBvbmx5IHVzZWQgZm9yIG5lY2Vzc2FyeSBkYXRhIHJldHJpZXZhbCBhbmQgcHJvY2Vzc2luZy4KKiAqKkRldmVsb3BlciBDb2xsYWJvcmF0aW9uKio6IENsZWFyIHNlcGFyYXRpb24gb2YgZnJvbnRlbmQgYW5kIGJhY2tlbmQgY29uY2VybnMgZW5hYmxlcyBmcm9udGVuZCBkZXZlbG9wZXJzIGFuZCBQSFAgZGV2ZWxvcGVycyB0byB3b3JrIG1vcmUgaW5kZXBlbmRlbnRseSBhbmQgY29sbGFib3JhdGl2ZWx5LgoqICoqRW5oYW5jZWQgVXNlciBFeHBlcmllbmNlKio6IFZ1ZSdzIHJlYWN0aXZlIGNvbXBvbmVudHMgYW5kIGludGVyYWN0aXZpdHkgY2FuIHN0aWxsIHByb3ZpZGUgYSBkeW5hbWljIHVzZXIgZXhwZXJpZW5jZSBldmVuIGluIGEgc3RhdGljIEhUTUwgY29udGV4dCwgbGVhZGluZyB0byBoaWdoZXIgdXNlciBlbmdhZ2VtZW50LgoqICoqTW9kdWxhciBBcmNoaXRlY3R1cmUqKjogVnVlJ3MgY29tcG9uZW50LWJhc2VkIHN0cnVjdHVyZSBwcm9tb3RlcyBtb2R1bGFyIGRlc2lnbiwgd2hpY2ggZW5oYW5jZXMgY29kZSBtYWludGFpbmFiaWxpdHkgYW5kIGFsbG93cyBmb3IgZWFzaWVyIGZ1dHVyZSB1cGRhdGVzLgoqICoqQ3Jvc3MtUGxhdGZvcm0gQ29uc2lzdGVuY3kqKjogQSBzZXBhcmF0ZSBzdGF0aWMgZnJvbnRlbmQgY2FuIGVuc3VyZSBjb25zaXN0ZW50IHVzZXIgZXhwZXJpZW5jZXMgYWNyb3NzIGRpZmZlcmVudCBkZXZpY2VzIGFuZCBwbGF0Zm9ybXMsIGNvbnRyaWJ1dGluZyB0byB1c2VyIHNhdGlzZmFjdGlvbi4KKiAqKkZyb250ZW5kIElubm92YXRpb24qKjogRm9jdXNpbmcgb24gYSBzZXBhcmF0ZSBzdGF0aWMgZnJvbnRlbmQgYWxsb3dzIGZyb250ZW5kIGRldmVsb3BlcnMgdG8gZXhwZXJpbWVudCB3aXRoIG5ldyBmZWF0dXJlcyBhbmQgVUkgaW1wcm92ZW1lbnRzIHdpdGhvdXQgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBiYWNrZW5kLgoqICoqUmVzb3VyY2UgRWZmaWNpZW5jeSoqOiBXaXRoIGZld2VyIHNlcnZlci1zaWRlIGNvbXB1dGF0aW9ucywgdGhlIGJhY2tlbmQgY2FuIHV0aWxpemUgaXRzIHJlc291cmNlcyBtb3JlIGVmZmljaWVudGx5LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGNvc3Qgc2F2aW5ncy4KKiAqKkVhc2llciBEZWJ1Z2dpbmcqKjogQ2xlYXIgc2VwYXJhdGlvbiBvZiByZXNwb25zaWJpbGl0aWVzIHNpbXBsaWZpZXMgZGVidWdnaW5nIGFuZCB0cm91Ymxlc2hvb3RpbmcgZWZmb3J0cywgbWFraW5nIGlzc3VlIGlkZW50aWZpY2F0aW9uIGFuZCByZXNvbHV0aW9uIG1vcmUgc3RyYWlnaHRmb3J3YXJkLgoqICoqRmxleGliaWxpdHkgaW4gSG9zdGluZyoqOiBIb3N0aW5nIGEgc3RhdGljIGZyb250ZW5kIGlzIG9mdGVuIG1vcmUgZmxleGlibGUgYW5kIGNvc3QtZWZmZWN0aXZlLCBhcyBpdCBjYW4gYmUgZGVwbG95ZWQgb24gdmFyaW91cyBob3N0aW5nIHNvbHV0aW9ucywgaW5jbHVkaW5nIHN0YXRpYyBzaXRlIGhvc3RzLgoqICoqRnV0dXJlLVByb29maW5nKio6IEEgc3RhdGljIEhUTUwgZnJvbnRlbmQgY2FuIGVuc3VyZSBsb25nLXRlcm0gc3RhYmlsaXR5IGFuZCBjb21wYXRpYmlsaXR5LCBhcyBpdCdzIGxlc3MgcHJvbmUgdG8gZGVwZW5kZW5jaWVzIGFuZCB0ZWNobm9sb2d5IGNoYW5nZXMuCiogKipPZmZsaW5lIEFjY2Vzc2liaWxpdHkqKjogQnkgc2VydmluZyBzdGF0aWMgYXNzZXRzLCB5b3UgY2FuIGVuYWJsZSB5b3VyIGFwcGxpY2F0aW9uIHRvIHdvcmsgaW4gb2ZmbGluZSBvciBsb3ctY29ubmVjdGl2aXR5IHNjZW5hcmlvcywgcHJvdmlkaW5nIGEgbW9yZSByb2J1c3QgdXNlciBleHBlcmllbmNlLgoqICoqT2ZmbGluZSBDYXBhYmlsaXRpZXMqKjogQSBzdGF0aWMgSFRNTCBmcm9udGVuZCBjYW4gYmUgZGVzaWduZWQgdG8gd29yayBvZmZsaW5lIG9yIHdpdGggaW50ZXJtaXR0ZW50IGNvbm5lY3Rpdml0eSwgZW5oYW5jaW5nIHVzZXIgZXhwZXJpZW5jZSBpbiBzaXR1YXRpb25zIHdpdGggbGltaXRlZCBpbnRlcm5ldCBhY2Nlc3MuCiogKipDYWNoaW5nIEFkdmFudGFnZXMqKjogU3RhdGljIGFzc2V0cyBjYW4gYmUgY2FjaGVkIGF0IHZhcmlvdXMgbGV2ZWxzLCBmcm9tIHRoZSBicm93c2VyIHRvIENETnMsIHJlZHVjaW5nIHRoZSBuZWVkIGZvciByZXBlYXRlZCBkYXRhIHJlcXVlc3RzIGFuZCBpbXByb3Zpbmcgb3ZlcmFsbCBsb2FkIHRpbWVzLgoqICoqVmVyc2lvbiBDb250cm9sKio6IFN0YXRpYyBhc3NldHMgY2FuIGJlIGVhc2lseSB2ZXJzaW9uZWQgYW5kIG1hbmFnZWQgdGhyb3VnaCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtcywgZW5zdXJpbmcgY29uc2lzdGVudCBhbmQgY29udHJvbGxlZCB1cGRhdGVzLgoqICoqSW50ZXJuYXRpb25hbGl6YXRpb24qKjogQSBzdGF0aWMgZnJvbnRlbmQgY2FuIGJlIHN0cnVjdHVyZWQgdG8gc3VwcG9ydCBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgbG9jYWxpemF0aW9uLCBjYXRlcmluZyB0byBhIGdsb2JhbCBhdWRpZW5jZSB3aXRoIGVhc2UuCiogKipDb3N0IFNhdmluZ3MqKjogUmVkdWNlZCBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIGNhbiBsZWFkIHRvIGNvc3Qgc2F2aW5ncyBvbiBzZXJ2ZXIgcmVzb3VyY2VzLCBlc3BlY2lhbGx5IHdoZW4gZGVwbG95aW5nIG9uIGNsb3VkIHBsYXRmb3JtcyBvciBob3N0aW5nIHNlcnZpY2VzLgoqICoqUHJlZGljdGFibGUgQmVoYXZpb3IqKjogU3RhdGljIGZyb250ZW5kcyB0ZW5kIHRvIG9mZmVyIG1vcmUgcHJlZGljdGFibGUgYmVoYXZpb3IsIGFzIHRoZXkgYXJlIG5vdCBhZmZlY3RlZCBieSBzZXJ2ZXItc2lkZSBjaGFuZ2VzIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSB1c2VyIGludGVyZmFjZS4KKiAqKkJyb3dzZXIgQ29tcGF0aWJpbGl0eSoqOiBBIHdlbGwtZGVzaWduZWQgc3RhdGljIGZyb250ZW5kIGNhbiBlbnN1cmUgY29uc2lzdGVudCBiZWhhdmlvciBhY3Jvc3MgZGlmZmVyZW50IHdlYiBicm93c2VycywgcmVkdWNpbmcgdGhlIG5lZWQgZm9yIGV4dGVuc2l2ZSBjcm9zcy1icm93c2VyIHRlc3RpbmcuCiogKipUaGlyZC1QYXJ0eSBJbnRlZ3JhdGlvbioqOiBJbnRlZ3JhdGluZyB0aGlyZC1wYXJ0eSBzZXJ2aWNlcyBhbmQgd2lkZ2V0cyBpbnRvIGEgc3RhdGljIGZyb250ZW5kIGlzIG9mdGVuIHNpbXBsZXIgYW5kIGxlc3MgcHJvbmUgdG8gY29uZmxpY3RzLgoqICoqTWljcm9zZXJ2aWNlcyBDb21wYXRpYmlsaXR5Kio6IEEgbW9kdWxhciBzdGF0aWMgZnJvbnRlbmQgYWxpZ25zIHdlbGwgd2l0aCBtaWNyb3NlcnZpY2VzIGFyY2hpdGVjdHVyZSwgYWxsb3dpbmcgZm9yIHNlcGFyYXRlIGRldmVsb3BtZW50IGFuZCBkZXBsb3ltZW50IG9mIHZhcmlvdXMgY29tcG9uZW50cy4KKiAqKlNlY3VyaXR5IFBhdGNoaW5nKio6IFNlcGFyYXRpbmcgdGhlIGZyb250ZW5kIGZyb20gdGhlIGJhY2tlbmQgc2ltcGxpZmllcyBzZWN1cml0eSB1cGRhdGVzIGFuZCBwYXRjaGluZywgYXMgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBmcm9udGVuZCB3b24ndCBkaXJlY3RseSBpbXBhY3QgdGhlIGJhY2tlbmQgbG9naWMuCiogKipRdWljayBEZXBsb3ltZW50Kio6IERlcGxveWluZyBzdGF0aWMgZmlsZXMgaXMgZ2VuZXJhbGx5IGZhc3RlciBhbmQgcmVxdWlyZXMgZmV3ZXIgcmVzb3VyY2VzIGNvbXBhcmVkIHRvIGRlcGxveWluZyBjb21wbGV4IHNlcnZlci1zaWRlIGFwcGxpY2F0aW9ucy4KKiAqKkNvbnRpbnVvdXMgSW50ZWdyYXRpb24vQ29udGludW91cyBEZXBsb3ltZW50IChDSS9DRCkqKjogQ0kvQ0QgcGlwZWxpbmVzIGZvciBhIHN0YXRpYyBmcm9udGVuZCBjYW4gYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBlYXNpbHkgYXV0b21hdGVkLCBsZWFkaW5nIHRvIG1vcmUgZWZmaWNpZW50IGRldmVsb3BtZW50IHdvcmtmbG93cy4KKiAqKlJlZHVjZWQgTGF0ZW5jeSoqOiBXaXRoIHJlZHVjZWQgc2VydmVyLXNpZGUgcHJvY2Vzc2luZywgbGF0ZW5jeSBjYW4gYmUgbWluaW1pemVkLCBjb250cmlidXRpbmcgdG8gYSBtb3JlIHJlc3BvbnNpdmUgdXNlciBleHBlcmllbmNlLgoqICoqRWFzaWVyIEEvQiBUZXN0aW5nKio6IEEgc3RhdGljIGZyb250ZW5kIGNhbiBmYWNpbGl0YXRlIEEvQiB0ZXN0aW5nIGFuZCBleHBlcmltZW50YXRpb24gd2l0aG91dCB0aGUgY29tcGxleGl0aWVzIG9mIGR5bmFtaWMgc2VydmVyLXNpZGUgcmVuZGVyaW5nLgoqICoqQ29udGVudCBNYW5hZ2VtZW50Kio6IFNlcGFyYXRpbmcgZnJvbnRlbmQgYW5kIGJhY2tlbmQgYWxsb3dzIGNvbnRlbnQgbWFuYWdlbWVudCBzeXN0ZW1zIChDTVMpIHRvIGZvY3VzIG9uIGNvbnRlbnQgd2l0aG91dCBiZWluZyB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGFwcGxpY2F0aW9uIGxvZ2ljLgoqICoqU2ltcGxpZmllZCBCYWNrZW5kKio6IEJ5IG9mZmxvYWRpbmcgZnJvbnRlbmQgcmVuZGVyaW5nIHRvIFZ1ZSwgdGhlIFBIUCBiYWNrZW5kIGNhbiBmb2N1cyBvbiBkYXRhIHByb2Nlc3NpbmcgYW5kIEFQSSBmdW5jdGlvbmFsaXR5LCBzaW1wbGlmeWluZyBpdHMgcm9sZS4KKiAqKkNsaWVudC1TaWRlIEVuaGFuY2VtZW50cyoqOiBWdWUncyBjbGllbnQtc2lkZSByb3V0aW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGNhbiBlbmhhbmNlIG5hdmlnYXRpb24gYW5kIGRhdGEgaGFuZGxpbmcgd2l0aGluIHRoZSBmcm9udGVuZC4KKiAqKlJlZHVjZWQgQ29tcGxleGl0eSoqOiBBIHN0YXRpYyBmcm9udGVuZCBzaW1wbGlmaWVzIHRoZSB0ZWNobmljYWwgc3RhY2ssIHJlZHVjaW5nIHRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgb2YgdGhlIGFwcGxpY2F0aW9uIGFyY2hpdGVjdHVyZS4KKiAqKkVhc2llciBDb2RlIEF1ZGl0cyoqOiBDbGVhciBzZXBhcmF0aW9uIGJldHdlZW4gZnJvbnRlbmQgYW5kIGJhY2tlbmQgY29kZSBtYWtlcyBjb2RlIGF1ZGl0cyBhbmQgc2VjdXJpdHkgcmV2aWV3cyBtb3JlIG1hbmFnZWFibGUuCiogKipCcmFuZGluZyBhbmQgQ3VzdG9taXphdGlvbioqOiBBIHNlcGFyYXRlIGZyb250ZW5kIGFsbG93cyBmb3IgZWFzaWVyIGJyYW5kaW5nIGFuZCBjdXN0b21pemF0aW9uLCBhcyBmcm9udGVuZCBjaGFuZ2VzIHdvbid0IGRpcmVjdGx5IGFmZmVjdCBiYWNrZW5kIGZ1bmN0aW9uYWxpdHkuCgojIyBGQVEKCiMjIyBHZXR0aW5nIGEgYmxhbmsgcGFnZSB3aGVuIGxvYWRpbmcgdGhlIHNpdGUKCkNoZWNrIHlvdXIgYWQgYmxvY2tlciBvciBwcml2YWN5IGFkZG9ucywgdGhleSBtaWdodCBuZWVkIHRvIGJlIGRpc2FibGVkIGZvciB0aGlzIHNpdGUuCgojIyBEZXZlbG9wbWVudAoKKiBbdml0ZWpzL2F3ZXNvbWUtdml0ZTog4pqh77iPIEEgY3VyYXRlZCBsaXN0IG9mIGF3ZXNvbWUgdGhpbmdzIHJlbGF0ZWQgdG8gVml0ZS5qc10oaHR0cHM6Ly9naXRodWIuY29tL3ZpdGVqcy9hd2Vzb21lLXZpdGUpCgojIyMgT3BlbkFQSSBTcGVjCgojIyMjIEFQSSBHVUkgRGVzaWduZXJzCgoqIFtGcmVlIE9ubGluZSBWaXN1YWwgQVBJIERlc2lnbmVyIGZvciBPcGVuQVBJIGFuZCBBc3luY0FQSSBTcGVjaWZpY2F0aW9ucyAtIEFwaUJsZHJdKGh0dHBzOi8vd3d3LmFwaWJsZHIuY29tLykKKiBbbXkgSW50ZXJTZXJ2ZXIgU2VydmljZXMgTWFuYWdlbWVudCBBUEkgLSBteWFkbWluYXBpIC0gRWRpdCAtIEZyb2dtZW50XShodHRwczovL3d3dy5mcm9nbWVudC5jb20vZWRpdC9teWFkbWluYXBpL2ludGVyc2VydmVyX215YWRtaW5fYXBpLmpzb24jaW5mby55YW1sKQoqIFtBUElHaXQgLSBBUEkgRG9jdW1lbnRdKGh0dHBzOi8vYXBwLmFwaWdpdC5jb20vcmVwb3NpdG9yeS9kZXRhaW4vbXlhZG1pbi1vcGVuYXBpLXNwZWMvYXBpL29wZW5hcGkueWFtbCkKKiBbQXBpY3VyaW8gU3R1ZGlvIC0gQVBJIEVkaXRvciA6OiBteSBJbnRlclNlcnZlciBTZXJ2aWNlcyBNYW5hZ2VtZW50IEFQSV0oaHR0cHM6Ly9zdHVkaW8uYXBpY3VyLmlvL2FwaXMvOTM2MTgvZWRpdG9yKQoKQWZ0ZXIgdGhpcyBpcyBkb25lIG9uIGFsbCBvZiB0aGUgcmVwb3MgcGljayB0aGUgYmVzdCBvbmUgYW5kIHNldGl0IHVwIC4uIHRyeSB0byBwcmVzZXJ2ZSBnaXQgaGlzdG9yeQoKIyMjIFRPRE8gUm9hZC1NYXAKCiogKioxLjAtYWxwaGEqKiBNaWxlU3RvbmUKICAqIG9yZGVyIHNlcnZpY2UgcGFnZXMKICAgICogWyBdIHNlcnZlcgogICAgKiBbIF0gZG9tYWluCiAgKiBbIF0gY2FydC9paWRzIHBhcnNlZCBhbmQgaGFuZGxlZAoqICoqMS4wLWJldGEqKiBNaWxlU3RvbmUKICAqIFsgXSB1cGRhdGUgcmVzcG9uc2UgY29kZXMgdG8gbWF0Y2ggdGFibGUgYmVsb3cKICAqIFsgXSBsb2FkaW5nIC8gbm8gZW50cmllcyBtZXNzYWdlcwogICogc2VydmljZXMgbGlzdCBwYWdlcwogICAgKiBkYXRhdGFibGVzIG9yIGVxdWl2YWxlbnQKICAgICAgKiBbeF0gZmlsdGVyaW5nCiAgICAgICogWyBdIHNvcnRpbmcKICAgICAgKiBbIF0gcGFnaW5hdGlvbgogICAgICAqIFsgXSBwcmludC9leHBvcnQKKiAqKjEuMC1zdGFibGUqKiBNaWxlU3RvbmUKICAqIFsgXSBzZXR1cCBnaXRodWIgYWN0aW9ucyBhbmQgaG9va3MgZm9yIGF1dG9tYXRlZCB0ZXN0aW5nCiAgKiBbIF0gbWFrZSBzdXJlIGFmZmlsaWF0ZSB0cmFja2luZyBzdGlsbCB3b3JrcwogICogWyBdIGFuYWx5dGljcwogICogWyBdIGdldCB2YXJpb3VzIGxpYnMgbG9hZGluZyB3aXRoIGltcG9ydHMgaW5zdGVhZWQgb2YgZGlyZWN0bHkgY2FsbGVkIHdpdGggc2NyaXRwdHMgYW5kIGxpbmsgdGFncwogICogWyBdIG1pbmltaXplIGFwaSBmaWVsZHMgaW4gcmVxdWVzdHMvcmVzcG9uc2VzIGFuZCBmaWx0ZXIgdGhlbSBmb3Igc2VjdXJpdHkKICAqIFsgXSBhcGkgZmluYWxpemVkCiogRnV0dXJlIFRhc2tzCiAgKiBbIF0gaW1wcm92ZSB3ZWJwYWNraW5nCiAgKiBbIF0gbW92ZSB0eXBlIGRlZmluaXRpb25zIGludG8gL3R5cGVzPwogICogWyBdIHV0aWxpemUgdGhlIGZvcm0gdmFsaWRhdGlvbiBzdHVmZgogICogWyBdIHJlcGxhY2UganF1ZXJ5IHR5cGUgY2FsbHMgd2l0aCBidWlsdCBpbiB0ZW1wbGF0ZSBoYW5kbGluZyBhbmQgc3VjaAogICogWyBdIGJzNS9hZG1pbmx0ZTQgaHR0cHM6Ly9naXRodWIuY29tL2NvbGlmZi9ib290c3RyYXAtNS1taWdyYXRlLXRvb2wvYmxvYi9tYWluL2d1bHBmaWxlLmpzICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9KdWFuLWVzY29iYXI5NC9mNzY1MzVhMTI2NGFjNmY3MjUxYzY0M2FmNTBjMTg0ZAogICogWyBdIGlvbmljIGNhcGFjaXRvcgogICAgKiBbIF0gYW5kcm9pZCBidWlsZAogICAgKiBbIF0gaW9zIGJ1aWxkCiAgKiBbeF0gZWxlY3Ryb24gYnVpbGQKICAgICogW3hdIHdpbmRvd3MvbGludXgvbWFjIGJ1aWxkcwogICAgKiBbIF0gYXV0b21hdGVkIGJ1aWxkcwogICAgKiBbeF0ganMvY3NzIGFzc2V0cyBsb2FkZWQgbG9jYWxseQoKIyMjIFBhZ2UgU3RhdHVzCgpBUEkgU3BlYyBDaGVja3MKKiBSZXF1ZXN0IEJvZHkKKiBTdWNjZXNzIFJlc3BvbnNlCiogRXJyb3IgUmVzcG9uc2VzCiogRXhhbXBsZXMKKiBEZXRhaWxlZCBEb2N1bWVudGF0aW9uCiogT3B0aW1pemUgVHlwZXMKKiBQYXRocwogICogc3VtbWFyeSBzZXQKICAqIGRlc2NyaXB0aW9uIHNldAogICogcGFyYW1ldGVycwogICAgKiBkZXNjcmlwdGlvbgogICAgKiBzY2hlbWEgdHlwZQogICAgKiBleGFtcGxlCiAgICAqIGxpbmtzCiAgKiBtZXRob2RzCiAgICAqIHN1bW1hcnkgc2V0CiAgICAqIGRlc2NyaXB0aW9uIHNldAogICAgKiB0YWcgc2V0CiAgICAqIHJlcXVlc3QgdHlwZXMganNvbitmb3JtCiAgICAqIHJlcXVlc3QgYm9keSBkZWZpbnRpb24KICAgICogcmVxdWVzdCBib2R5IGRlc2NyaXB0aW9uIChpbmhlcml0YWJsZSkKICAgICogcmVxdWVzdCBib2R5IGV4YW1wbGUgKGluaGVyaXRhYmxlKQogICAgKiByZXNwb25zZSBzdWNjZXNzIGRlZmluaXRpb24gKGluaGVyaXRhYmxlKQogICAgKiByZXNwb25zZSBzdWNjZXNzIGV4YW1wbGUgKGluaGVyaXRhYmxlKQogICAgKiBsaW5rcwoqIFNjaGVtYXMKICAgICogc3VtbWFyeSBzZXQKICAgICogZGVzY3JpcHRpb24gc2V0CiAgICAqIGV4YW1wbGUgc2V0CiAgICAqIHJlcXVpcmVkIHNldAogICAgKiBsaW5rcwoqIFRhZ3MKICAqIGRldGFpbGVkIGRlc2NyaXB0aW9ucwoKQVBJIENhbGwgQ2hlY2tzCiogV29ya2luZwoqIFNlY3VyZQogICogZGIgZXNjYXBpbmcKICAqIGh0bWwgZmlsdGVyaW5nCiogU3VjY2VzcyBSZXNwb25zZQoqIEVycm9yIFJlc3Nwb25zZXMKKiBPcHRpbWl6ZSBUeXBlcwoqIFN3YWdnZXIgQW5ub3RhdGlvbnMKCgoqIFdvcmtpbmcgc3RhdHVzIGRvZXMgbm90IGluY2x1ZGUgdGhlIGV4cG9ydC9zb3J0aW5nIHJlbGF0ZWQgb3B0aW9ucyBvbiB0aGUgdmlldyBzZXJ2aWNlIGxpc3QgdHlwZSBwYWdlcwoKfCBVcmwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFdvcmtpbmcgfCBBUEkgQ2FsbCB8IEFQSSBTcGVjIHwgQnJlYWRjcnVtIHwKfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0gfCAtLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0tIHwKfCAvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvbG9naW4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgICAgICAgICAgIHwKfCAvcmVnaXN0ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgICAgICAgICAgIHwKfCAvc3Vkby86c2Vzc2lvbklkICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwgICAgICAgICAgIHwKfCAvYWNjb3VudC9pbmZvICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvYWNjb3VudC9wYXNzICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvYWNjb3VudC9zZXR0aW5ncyAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgW3hdICAgICAgIHwKfCAvYWNjb3VudC91c2VybmFtZSAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvY2FydCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvY2FydC86OmlpZHMgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvaW52b2ljZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvcGF5bWVudF90eXBlcyAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvcHJlcGF5cyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvcGF5LzptZXRob2QvOmludm9pY2VzICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvdGlja2V0cyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvdGlja2V0cy86aWQgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvdGlja2V0cy9uZXcgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvZG5zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvZG5zLzppZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvYWZmaWxpYXRlICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwgW3hdICAgICAgIHwKfCAvYWZmaWxpYXRlL2Jhbm5lci86aWQgICAgICAgICAgICAgICB8IFsgXSAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwgWyBdICAgICAgIHwKfCAvYWZmaWxpYXRlL2Jhbm5lcnMgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvYWZmaWxpYXRlL2ZhcSAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwgW3hdICAgICAgIHwKfCAvYWZmaWxpYXRlL2xhbmRpbmdfcGcgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvYWZmaWxpYXRlL3BheW1lbnRfc2V0dXAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvYWZmaWxpYXRlL3JpY2hfcmVwb3J0ICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvYWZmaWxpYXRlL3NhbGVzX2dyYXBoICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvYWZmaWxpYXRlL3NhbGVzX3JlcG9ydCAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvYWZmaWxpYXRlL3N0YXR1c19sZWdlbmQgICAgICAgICAgICB8IFt4XSAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwgW3hdICAgICAgIHwKfCAvYWZmaWxpYXRlL3RvcyAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCAgICAgICAgICB8ICAgICAgICAgIHwgW3hdICAgICAgIHwKfCAvYWZmaWxpYXRlL3RyYWZmaWNfZ3JhcGggICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvYWZmaWxpYXRlL3dlYl90cmFmZmljICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvYmFja3VwcyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvYmFja3Vwcy86aWQgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvYmFja3Vwcy86aWQvY2FuY2VsICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvYmFja3Vwcy86aWQvaW52b2ljZXMgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvYmFja3Vwcy86aWQvd2VsY29tZV9lbWFpbCAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFsgXSAgICAgIHwgW3hdICAgICAgIHwKfCAvYmFja3Vwcy9vcmRlciAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvZG9tYWlucyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvZG9tYWlucy86aWQgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvZG9tYWlucy86aWQvY2FuY2VsICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvZG9tYWlucy86aWQvY29udGFjdCAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvZG9tYWlucy86aWQvZG5zc2VjICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvZG9tYWlucy86aWQvaW52b2ljZXMgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvZG9tYWlucy86aWQvbmFtZXNlcnZlcnMgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvZG9tYWlucy86aWQvcmVuZXcgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvZG9tYWlucy86aWQvdHJhbnNmZXIgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvZG9tYWlucy86aWQvd2VsY29tZV9lbWFpbCAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFsgXSAgICAgIHwgW3hdICAgICAgIHwKfCAvZG9tYWlucy86aWQvd2hvaXMgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvZG9tYWlucy9vcmRlciAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvZG9tYWlucy9vcmRlci86ZG9tYWluICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvZG9tYWlucy9vcmRlci86ZG9tYWluLzpyZWdUeXBlICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvZmxvYXRpbmdfaXBzICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvZmxvYXRpbmdfaXBzLzppZCAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvZmxvYXRpbmdfaXBzLzppZC9jYW5jZWwgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvZmxvYXRpbmdfaXBzLzppZC9jaGFuZ2VfaXAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvZmxvYXRpbmdfaXBzLzppZC9pbnZvaWNlcyAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvZmxvYXRpbmdfaXBzLzppZC93ZWxjb21lX2VtYWlsICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFsgXSAgICAgIHwgW3hdICAgICAgIHwKfCAvZmxvYXRpbmdfaXBzL29yZGVyICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvbGljZW5zZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvbGljZW5zZXMvOmlkICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvbGljZW5zZXMvOmlkL2NhbmNlbCAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvbGljZW5zZXMvOmlkL2NoYW5nZV9pcCAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvbGljZW5zZXMvOmlkL2NoYW5nZV9vcyAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvbGljZW5zZXMvOmlkL2ludm9pY2VzICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvbGljZW5zZXMvOmlkL3dlbGNvbWVfZW1haWwgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFsgXSAgICAgIHwgW3hdICAgICAgIHwKfCAvbGljZW5zZXMvb3JkZXIgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvbGljZW5zZXMvb3JkZXIvOmNhdFRhZyAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvbWFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvbWFpbC86aWQgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvbWFpbC86aWQvYWxlcnRzICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvbWFpbC86aWQvY2FuY2VsICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvbWFpbC86aWQvZGVueV9ydWxlcyAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvbWFpbC86aWQvaW52b2ljZXMgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvbWFpbC86aWQvd2VsY29tZV9lbWFpbCAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFsgXSAgICAgIHwgW3hdICAgICAgIHwKfCAvbWFpbC9vcmRlciAgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvcXMvOmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvcXMvOmlkL2JhY2t1cCAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL2JhY2t1cHMgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL2NhbmNlbCAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvcXMvOmlkL2NoYW5nZV90aW1lem9uZSAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL2VqZWN0X2NkICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL2luc2VydF9jZCAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL2ludm9pY2VzICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvcXMvOmlkL3JlaW5zdGFsbF9vcyAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL3Jlc2V0X3Bhc3N3b3JkICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL3Jlc3RhcnQgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL3Jlc3RvcmUgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL3JldmVyc2VfZG5zICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL3NldHVwX3ZuYyAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL3N0YXJ0ICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL3N0b3AgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL3RyYWZmaWNfdXNhZ2UgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL3ZpZXdfZGVza3RvcCAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvcXMvOmlkL3dlbGNvbWVfZW1haWwgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFsgXSAgICAgIHwgW3hdICAgICAgIHwKfCAvcXMvb3JkZXIgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvc2VydmVycyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvc2VydmVycy86aWQgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvc2VydmVycy86aWQvYmFuZHdpZHRoX2dyYXBoICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvc2VydmVycy86aWQvY2FuY2VsICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvc2VydmVycy86aWQvaW52b2ljZXMgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvc2VydmVycy86aWQvaXBtaV9saXZlICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvc2VydmVycy86aWQvcmV2ZXJzZV9kbnMgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvc2VydmVycy86aWQvd2VsY29tZV9lbWFpbCAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFsgXSAgICAgIHwgW3hdICAgICAgIHwKfCAvc2VydmVycy9vcmRlciAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvc3NsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvc3NsLzppZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvc3NsLzppZC9jYW5jZWwgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvc3NsLzppZC9jaGFuZ2VfYXBwcm92ZXJfZW1haWwgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvc3NsLzppZC9pbnZvaWNlcyAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvc3NsLzppZC9yZXNlbmRfYXBwcm92ZXJfZW1haWwgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvc3NsLzppZC93ZWxjb21lX2VtYWlsICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFsgXSAgICAgIHwgW3hdICAgICAgIHwKfCAvc3NsL29yZGVyICAgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZCAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC9iYWNrdXAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzLzppZC9iYWNrdXBzICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzLzppZC9ibG9ja19zbXRwICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC9idXlfaGRfc3BhY2UgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzLzppZC9idXlfaXAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzLzppZC9jYW5jZWwgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC9jaGFuZ2VfaG9zdG5hbWUgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzLzppZC9jaGFuZ2Vfcm9vdF9wYXNzd29yZCAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzLzppZC9jaGFuZ2VfdGltZXpvbmUgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC9jaGFuZ2Vfd2VidXpvX3Bhc3N3b3JkICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzLzppZC9kaXNhYmxlX2NkICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC9kaXNhYmxlX3F1b3RhICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC9lamVjdF9jZCAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC9lbmFibGVfcXVvdGEgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC9pbnNlcnRfY2QgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzLzppZC9pbnZvaWNlcyAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC9yZWluc3RhbGxfb3MgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzLzppZC9yZXNldF9wYXNzd29yZCAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzLzppZC9yZXN0YXJ0ICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC9yZXN0b3JlICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzLzppZC9yZXZlcnNlX2RucyAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC9zZXR1cF92bmMgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC9zbGljZXMgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzLzppZC9zdGFydCAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC9zdG9wICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC90cmFmZmljX3VzYWdlICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgIHwKfCAvdnBzLzppZC92aWV3X2Rlc2t0b3AgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzLzppZC93ZWxjb21lX2VtYWlsICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFsgXSAgICAgIHwgW3hdICAgICAgIHwKfCAvdnBzL29yZGVyICAgICAgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvd2Vic2l0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvd2Vic2l0ZXMvOmlkICAgICAgICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvd2Vic2l0ZXMvOmlkL2J1eV9pcCAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvd2Vic2l0ZXMvOmlkL2NhbmNlbCAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvd2Vic2l0ZXMvOmlkL2Rvd25sb2FkX2JhY2t1cHMgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvd2Vic2l0ZXMvOmlkL2ludm9pY2VzICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvd2Vic2l0ZXMvOmlkL2xvZ2luICAgICAgICAgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgIHwKfCAvd2Vic2l0ZXMvOmlkL21pZ3JhdGlvbiAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvd2Vic2l0ZXMvOmlkL3JldmVyc2VfZG5zICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKfCAvd2Vic2l0ZXMvOmlkL3dlbGNvbWVfZW1haWwgICAgICAgICB8IFt4XSAgICAgfCBbeF0gICAgICB8IFsgXSAgICAgIHwgW3hdICAgICAgIHwKfCAvd2Vic2l0ZXMvb3JkZXIgICAgICAgICAgICAgICAgICAgICB8IFsgXSAgICAgfCBbIF0gICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgIHwKCiMjIyBBUEkgUmVzcG9uc2UgSFRUUCBTdGF0dXMgQ29kZXMKCiMjIyMgQ29tbW9ubHkgVXNlZCB3aXRoIEFQSQoKfCBIVFRQIFZlcmIgfCBDUlVEICAgICAgICAgICB8IEVudGlyZSBDb2xsZWN0aW9uIChlLmcuIC92cHMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBTcGVjaWZpYyBJdGVtIChlLmcuIC92cHMve2lkfSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CnwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfAp8IFBPU1QgICAgICB8IENyZWF0ZSAgICAgICAgIHwgMjAxIChDcmVhdGVkKSwgJ0xvY2F0aW9uJyBoZWFkZXIgd2l0aCBsaW5rIHRvIC9jdXN0b21lcnMve2lkfSBjb250YWluaW5nIG5ldyBJRC4gICAgICAgICAgICAgICAgICAgICB8IDQwNCAoTm90IEZvdW5kKSwgNDA5IChDb25mbGljdCkgaWYgcmVzb3VyY2UgYWxyZWFkeSBleGlzdHMuLiAgICAgICAgICAgICAgIHwKfCBHRVQgICAgICAgfCBSZWFkICAgICAgICAgICB8IDIwMCAoT0spLCBsaXN0IG9mIGN1c3RvbWVycy4gVXNlIHBhZ2luYXRpb24sIHNvcnRpbmcgYW5kIGZpbHRlcmluZyB0byBuYXZpZ2F0ZSBiaWcgbGlzdHMuICAgICAgICAgICAgfCAyMDAgKE9LKSwgc2luZ2xlIGN1c3RvbWVyLiA0MDQgKE5vdCBGb3VuZCksIGlmIElEIG5vdCBmb3VuZCBvciBpbnZhbGlkLiAgICB8CnwgUFVUICAgICAgIHwgVXBkYXRlL1JlcGxhY2UgfCA0MDUgKE1ldGhvZCBOb3QgQWxsb3dlZCksIHVubGVzcyB5b3Ugd2FudCB0byB1cGRhdGUvcmVwbGFjZSBldmVyeSByZXNvdXJjZSBpbiB0aGUgZW50aXJlIGNvbGxlY3Rpb24uIHwgMjAwIChPSykgb3IgMjA0IChObyBDb250ZW50KS4gNDA0IChOb3QgRm91bmQpLCBpZiBJRCBub3QgZm91bmQgb3IgaW52YWxpZC4gfAp8IFBBVENIICAgICB8IFVwZGF0ZS9Nb2RpZnkgIHwgNDA1IChNZXRob2QgTm90IEFsbG93ZWQpLCB1bmxlc3MgeW91IHdhbnQgdG8gbW9kaWZ5IHRoZSBjb2xsZWN0aW9uIGl0c2VsZi4gICAgICAgICAgICAgICAgICAgICAgICAgICB8IDIwMCAoT0spIG9yIDIwNCAoTm8gQ29udGVudCkuIDQwNCAoTm90IEZvdW5kKSwgaWYgSUQgbm90IGZvdW5kIG9yIGludmFsaWQuIHwKfCBERUxFVEUgICAgfCBEZWxldGUgICAgICAgICB8IDQwNSAoTWV0aG9kIE5vdCBBbGxvd2VkKSwgdW5sZXNzIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGUgd2hvbGUgY29sbGVjdGlvbi0tLW5vdCBvZnRlbiBkZXNpcmFibGUuICAgICAgfCAyMDAgKE9LKS4gNDA0IChOb3QgRm91bmQpLCBpZiBJRCBub3QgZm91bmQgb3IgaW52YWxpZC4gICAgICAgICAgICAgICAgICAgICB8CgoqICoqMjAwIChPSykqKiBJdCBpbmRpY2F0ZXMgdGhhdCB0aGUgUkVTVCBBUEkgc3VjY2Vzc2Z1bGx5IGNhcnJpZWQgb3V0IHdoYXRldmVyIGFjdGlvbiB0aGUgY2xpZW50IHJlcXVlc3RlZCBhbmQgdGhhdCBubyBtb3JlIHNwZWNpZmljIGNvZGUgaW4gdGhlIDJ4eCBzZXJpZXMgaXMgYXBwcm9wcmlhdGUuIFVubGlrZSB0aGUgMjA0IHN0YXR1cyBjb2RlLCBhIDIwMCByZXNwb25zZSBzaG91bGQgaW5jbHVkZSBhIHJlc3BvbnNlIGJvZHkuIFRoZSBpbmZvcm1hdGlvbiByZXR1cm5lZCB3aXRoIHRoZSByZXNwb25zZSBpcyBkZXBlbmRlbnQgb24gdGhlIG1ldGhvZCB1c2VkIGluIHRoZSByZXF1ZXN0LCBmb3IgZXhhbXBsZTogIEdFVCBhbiBlbnRpdHkgY29ycmVzcG9uZGluZyB0byB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGlzIHNlbnQgaW4gdGhlIHJlc3BvbnNlLCBIRUFEIHRoZSBlbnRpdHktaGVhZGVyIGZpZWxkcyBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgYXJlIHNlbnQgaW4gdGhlIHJlc3BvbnNlIHdpdGhvdXQgYW55IG1lc3NhZ2UtYm9keSwgUE9TVCBhbiBlbnRpdHkgZGVzY3JpYmluZyBvciBjb250YWluaW5nIHRoZSByZXN1bHQgb2YgdGhlIGFjdGlvbiwgYW5kIFRSQUNFIGFuIGVudGl0eSBjb250YWluaW5nIHRoZSByZXF1ZXN0IG1lc3NhZ2UgYXMgcmVjZWl2ZWQgYnkgdGhlIGVuZCBzZXJ2ZXIuCiogKioyMDEgKENyZWF0ZWQpKiogQSBSRVNUIEFQSSByZXNwb25kcyB3aXRoIHRoZSAyMDEgc3RhdHVzIGNvZGUgd2hlbmV2ZXIgYSByZXNvdXJjZSBpcyBjcmVhdGVkIGluc2lkZSBhIGNvbGxlY3Rpb24uIFRoZXJlIG1heSBhbHNvIGJlIHRpbWVzIHdoZW4gYSBuZXcgcmVzb3VyY2UgaXMgY3JlYXRlZCBhcyBhIHJlc3VsdCBvZiBzb21lIGNvbnRyb2xsZXIgYWN0aW9uLCBpbiB3aGljaCBjYXNlIDIwMSB3b3VsZCBhbHNvIGJlIGFuIGFwcHJvcHJpYXRlIHJlc3BvbnNlLiBUaGUgbmV3bHkgY3JlYXRlZCByZXNvdXJjZSBjYW4gYmUgcmVmZXJlbmNlZCBieSB0aGUgVVJJKHMpIHJldHVybmVkIGluIHRoZSBlbnRpdHkgb2YgdGhlIHJlc3BvbnNlLCB3aXRoIHRoZSBtb3N0IHNwZWNpZmljIFVSSSBmb3IgdGhlIHJlc291cmNlIGdpdmVuIGJ5IGEgTG9jYXRpb24gaGVhZGVyIGZpZWxkLiBUaGUgb3JpZ2luIHNlcnZlciBNVVNUIGNyZWF0ZSB0aGUgcmVzb3VyY2UgYmVmb3JlIHJldHVybmluZyB0aGUgMjAxIHN0YXR1cyBjb2RlLiBJZiB0aGUgYWN0aW9uIGNhbm5vdCBiZSBjYXJyaWVkIG91dCBpbW1lZGlhdGVseSwgdGhlIHNlcnZlciBTSE9VTEQgcmVzcG9uZCB3aXRoIGEgMjAyIChBY2NlcHRlZCkgcmVzcG9uc2UgaW5zdGVhZC4KKiAqKjIwMiAoQWNjZXB0ZWQpKiogQSAyMDIgcmVzcG9uc2UgaXMgdHlwaWNhbGx5IHVzZWQgZm9yIGFjdGlvbnMgdGhhdCB0YWtlIGEgbG9uZyB3aGlsZSB0byBwcm9jZXNzLiBJdCBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVxdWVzdCBoYXMgYmVlbiBhY2NlcHRlZCBmb3IgcHJvY2Vzc2luZywgYnV0IHRoZSBwcm9jZXNzaW5nIGhhcyBub3QgYmVlbiBjb21wbGV0ZWQuIFRoZSByZXF1ZXN0IG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBldmVudHVhbGx5IGFjdGVkIHVwb24sIG9yIGV2ZW4gbWF5YmUgZGlzYWxsb3dlZCB3aGVuIHByb2Nlc3Npbmcgb2NjdXJzLiBJdHMgcHVycG9zZSBpcyB0byBhbGxvdyBhIHNlcnZlciB0byBhY2NlcHQgYSByZXF1ZXN0IGZvciBzb21lIG90aGVyIHByb2Nlc3MgKHBlcmhhcHMgYSBiYXRjaC1vcmllbnRlZCBwcm9jZXNzIHRoYXQgaXMgb25seSBydW4gb25jZSBwZXIgZGF5KSB3aXRob3V0IHJlcXVpcmluZyB0aGF0IHRoZSB1c2VyIGFnZW50J3MgY29ubmVjdGlvbiB0byB0aGUgc2VydmVyIHBlcnNpc3QgdW50aWwgdGhlIHByb2Nlc3MgaXMgY29tcGxldGVkLiBUaGUgZW50aXR5IHJldHVybmVkIHdpdGggdGhpcyByZXNwb25zZSBTSE9VTEQgaW5jbHVkZSBhbiBpbmRpY2F0aW9uIG9mIHRoZSByZXF1ZXN0J3MgY3VycmVudCBzdGF0dXMgYW5kIGVpdGhlciBhIHBvaW50ZXIgdG8gYSBzdGF0dXMgbW9uaXRvciAoam9iIHF1ZXVlIGxvY2F0aW9uKSBvciBzb21lIGVzdGltYXRlIG9mIHdoZW4gdGhlIHVzZXIgY2FuIGV4cGVjdCB0aGUgcmVxdWVzdCB0byBiZSBmdWxmaWxsZWQuCiogKioyMDQgKE5vIENvbnRlbnQpKiogVGhlIDIwNCBzdGF0dXMgY29kZSBpcyB1c3VhbGx5IHNlbnQgb3V0IGluIHJlc3BvbnNlIHRvIGEgYFBVVGAsIGBQT1NUYCwgb3IgYERFTEVURWAgcmVxdWVzdCB3aGVuIHRoZSBSRVNUIEFQSSBkZWNsaW5lcyB0byBzZW5kIGJhY2sgYW55IHN0YXR1cyBtZXNzYWdlIG9yIHJlcHJlc2VudGF0aW9uIGluIHRoZSByZXNwb25zZSBtZXNzYWdlJ3MgYm9keS4gQW4gQVBJIG1heSBhbHNvIHNlbmQgMjA0IGluIGNvbmp1bmN0aW9uIHdpdGggYSBHRVQgcmVxdWVzdCB0byBpbmRpY2F0ZSB0aGF0IHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgZXhpc3RzLCBidXQgaGFzIG5vIHN0YXRlIHJlcHJlc2VudGF0aW9uIHRvIGluY2x1ZGUgaW4gdGhlIGJvZHkuIElmIHRoZSBjbGllbnQgaXMgYSB1c2VyIGFnZW50LCBpdCBTSE9VTEQgTk9UIGNoYW5nZSBpdHMgZG9jdW1lbnQgdmlldyBmcm9tIHRoYXQgd2hpY2ggY2F1c2VkIHRoZSByZXF1ZXN0IHRvIGJlIHNlbnQuIFRoaXMgcmVzcG9uc2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIHRvIGFsbG93IGlucHV0IGZvciBhY3Rpb25zIHRvIHRha2UgcGxhY2Ugd2l0aG91dCBjYXVzaW5nIGEgY2hhbmdlIHRvIHRoZSB1c2VyIGFnZW50J3MgYWN0aXZlIGRvY3VtZW50IHZpZXcuIEhvd2V2ZXIsIGFueSBuZXcgb3IgdXBkYXRlZCBtZXRhaW5mb3JtYXRpb24gU0hPVUxEIGJlIGFwcGxpZWQgdG8gdGhlIGRvY3VtZW50IGN1cnJlbnRseSBpbiB0aGUgdXNlciBhZ2VudCdzIGR5bmFtaWMgdmlldy4gVGhlIDIwNCByZXNwb25zZSBNVVNUIE5PVCBpbmNsdWRlIGEgbWVzc2FnZS1ib2R5IGFuZCB0aHVzIGlzIGFsd2F5cyB0ZXJtaW5hdGVkIGJ5IHRoZSBmaXJzdCBlbXB0eSBsaW5lIGFmdGVyIHRoZSBoZWFkZXIgZmllbGRzLgoqICoqMzAxIChNb3ZlZCBQZXJtYW5lbnRseSkqKiBUaGUgMzAxIHN0YXR1cyBjb2RlIGluZGljYXRlcyB0aGF0IHRoZSBSRVNUIEFQSSdzIHJlc291cmNlIG1vZGVsIGhhcyBiZWVuIHNpZ25pZmljYW50bHkgcmVkZXNpZ25lZCwgYW5kIGEgbmV3IHBlcm1hbmVudCBVUkkgaGFzIGJlZW4gYXNzaWduZWQgdG8gdGhlIGNsaWVudCdzIHJlcXVlc3RlZCByZXNvdXJjZS4gVGhlIFJFU1QgQVBJIHNob3VsZCBzcGVjaWZ5IHRoZSBuZXcgVVJJIGluIHRoZSByZXNwb25zZSdzIExvY2F0aW9uIGhlYWRlciwgYW5kIGFsbCBmdXR1cmUgcmVxdWVzdHMgc2hvdWxkIGJlIGRpcmVjdGVkIHRvIHRoZSBnaXZlbiBVUkkuIFlvdSB3aWxsIGhhcmRseSB1c2UgdGhpcyByZXNwb25zZSBjb2RlIGluIHlvdXIgQVBJIGFzIHlvdSBjYW4gYWx3YXlzIHVzZSB0aGUgQVBJIHZlcnNpb25pbmcgZm9yIHRoZSBuZXcgQVBJIHdoaWxlIHJldGFpbmluZyB0aGUgb2xkIG9uZS4KKiAqKjMwMiAoRm91bmQpKiogVGhlIEhUVFAgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgMzAyIEZvdW5kIGlzIGEgY29tbW9uIHdheSBvZiBwZXJmb3JtaW5nIFVSTCByZWRpcmVjdGlvbi4gQW4gSFRUUCByZXNwb25zZSB3aXRoIHRoaXMgc3RhdHVzIGNvZGUgd2lsbCBhZGRpdGlvbmFsbHkgcHJvdmlkZSBhIFVSTCBpbiB0aGUgTG9jYXRpb24gaGVhZGVyIGZpZWxkLiBUaGUgdXNlciBhZ2VudCAoZS5nLiwgYSB3ZWIgYnJvd3NlcikgaXMgaW52aXRlZCBieSBhIHJlc3BvbnNlIHdpdGggdGhpcyBjb2RlIHRvIG1ha2UgYSBzZWNvbmQuIE90aGVyd2lzZSBpZGVudGljYWwsIHJlcXVlc3QgdG8gdGhlIG5ldyBVUkwgc3BlY2lmaWVkIGluIHRoZSBsb2NhdGlvbiBmaWVsZC4gTWFueSB3ZWIgYnJvd3NlcnMgaW1wbGVtZW50ZWQgdGhpcyBjb2RlIGluIGEgbWFubmVyIHRoYXQgdmlvbGF0ZWQgdGhpcyBzdGFuZGFyZCwgY2hhbmdpbmcgdGhlIHJlcXVlc3QgdHlwZSBvZiB0aGUgbmV3IHJlcXVlc3QgdG8gR0VULCByZWdhcmRsZXNzIG9mIHRoZSB0eXBlIGVtcGxveWVkIGluIHRoZSBvcmlnaW5hbCByZXF1ZXN0IChlLmcuLCBQT1NUKS4gUkZDIDE5NDUgYW5kIFJGQyAyMDY4IHNwZWNpZnkgdGhhdCB0aGUgY2xpZW50IGlzIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSB0aGUgbWV0aG9kIG9uIHRoZSByZWRpcmVjdGVkIHJlcXVlc3QuIFRoZSBzdGF0dXMgY29kZXMgMzAzIGFuZCAzMDcgaGF2ZSBiZWVuIGFkZGVkIGZvciBzZXJ2ZXJzIHRoYXQgd2lzaCB0byBtYWtlIHVuYW1iaWd1b3VzbHkgY2xlYXIgd2hpY2gga2luZCBvZiByZWFjdGlvbiBpcyBleHBlY3RlZCBvZiB0aGUgY2xpZW50LgoqICoqMzAzIChTZWUgT3RoZXIpKiogQSAzMDMgcmVzcG9uc2UgaW5kaWNhdGVzIHRoYXQgYSBjb250cm9sbGVyIHJlc291cmNlIGhhcyBmaW5pc2hlZCBpdHMgd29yaywgYnV0IGluc3RlYWQgb2Ygc2VuZGluZyBhIHBvdGVudGlhbGx5IHVud2FudGVkIHJlc3BvbnNlIGJvZHksIGl0IHNlbmRzIHRoZSBjbGllbnQgdGhlIFVSSSBvZiBhIHJlc3BvbnNlIHJlc291cmNlLiBUaGUgcmVzcG9uc2UgY2FuIGJlIHRoZSBVUkkgb2YgdGhlIHRlbXBvcmFyeSBzdGF0dXMgbWVzc2FnZSwgb3IgdGhlIFVSSSB0byBzb21lIGFscmVhZHkgZXhpc3RpbmcsIG1vcmUgcGVybWFuZW50LCByZXNvdXJjZS4gR2VuZXJhbGx5IHNwZWFraW5nLCB0aGUgMzAzIHN0YXR1cyBjb2RlIGFsbG93cyBhIFJFU1QgQVBJIHRvIHNlbmQgYSByZWZlcmVuY2UgdG8gYSByZXNvdXJjZSB3aXRob3V0IGZvcmNpbmcgdGhlIGNsaWVudCB0byBkb3dubG9hZCBpdHMgc3RhdGUuIEluc3RlYWQsIHRoZSBjbGllbnQgbWF5IHNlbmQgYSBHRVQgcmVxdWVzdCB0byB0aGUgdmFsdWUgb2YgdGhlIExvY2F0aW9uIGhlYWRlci4gVGhlIDMwMyByZXNwb25zZSBNVVNUIE5PVCBiZSBjYWNoZWQsIGJ1dCB0aGUgcmVzcG9uc2UgdG8gdGhlIHNlY29uZCAocmVkaXJlY3RlZCkgcmVxdWVzdCBtaWdodCBiZSBjYWNoZWFibGUuCiogKiozMDQgKE5vdCBNb2RpZmllZCkqKiBUaGlzIHN0YXR1cyBjb2RlIGlzIHNpbWlsYXIgdG8gMjA0ICgiTm8gQ29udGVudCIpIGluIHRoYXQgdGhlIHJlc3BvbnNlIGJvZHkgbXVzdCBiZSBlbXB0eS4gVGhlIGNyaXRpY2FsIGRpc3RpbmN0aW9uIGlzIHRoYXQgMjA0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBub3RoaW5nIHRvIHNlbmQgaW4gdGhlIGJvZHksIHdoZXJlYXMgMzA0IGlzIHVzZWQgd2hlbiB0aGUgcmVzb3VyY2UgaGFzIG5vdCBiZWVuIG1vZGlmaWVkIHNpbmNlIHRoZSB2ZXJzaW9uIHNwZWNpZmllZCBieSB0aGUgcmVxdWVzdCBoZWFkZXJzIElmLU1vZGlmaWVkLVNpbmNlIG9yIElmLU5vbmUtTWF0Y2guIEluIHN1Y2ggYSBjYXNlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHJldHJhbnNtaXQgdGhlIHJlc291cmNlIHNpbmNlIHRoZSBjbGllbnQgc3RpbGwgaGFzIGEgcHJldmlvdXNseS1kb3dubG9hZGVkIGNvcHkuIFVzaW5nIHRoaXMgc2F2ZXMgYmFuZHdpZHRoIGFuZCByZXByb2Nlc3Npbmcgb24gYm90aCB0aGUgc2VydmVyIGFuZCBjbGllbnQsIGFzIG9ubHkgdGhlIGhlYWRlciBkYXRhIG11c3QgYmUgc2VudCBhbmQgcmVjZWl2ZWQgaW4gY29tcGFyaXNvbiB0byB0aGUgZW50aXJldHkgb2YgdGhlIHBhZ2UgYmVpbmcgcmUtcHJvY2Vzc2VkIGJ5IHRoZSBzZXJ2ZXIsIHRoZW4gc2VudCBhZ2FpbiB1c2luZyBtb3JlIGJhbmR3aWR0aCBvZiB0aGUgc2VydmVyIGFuZCBjbGllbnQuCiogKiozMDcgKFRlbXBvcmFyeSBSZWRpcmVjdCkqKiBBIDMwNyByZXNwb25zZSBpbmRpY2F0ZXMgdGhhdCB0aGUgUkVTVCBBUEkgaXMgbm90IGdvaW5nIHRvIHByb2Nlc3MgdGhlIGNsaWVudCdzIHJlcXVlc3QuIEluc3RlYWQsIHRoZSBjbGllbnQgc2hvdWxkIHJlc3VibWl0IHRoZSByZXF1ZXN0IHRvIHRoZSBVUkkgc3BlY2lmaWVkIGJ5IHRoZSByZXNwb25zZSBtZXNzYWdlJ3MgTG9jYXRpb24gaGVhZGVyLiBIb3dldmVyLCBmdXR1cmUgcmVxdWVzdHMgc2hvdWxkIHN0aWxsIHVzZSB0aGUgb3JpZ2luYWwgVVJJLiBBIFJFU1QgQVBJIGNhbiB1c2UgdGhpcyBzdGF0dXMgY29kZSB0byBhc3NpZ24gYSB0ZW1wb3JhcnkgVVJJIHRvIHRoZSBjbGllbnQncyByZXF1ZXN0ZWQgcmVzb3VyY2UuIEZvciBleGFtcGxlLCBhIDMwNyByZXNwb25zZSBjYW4gYmUgdXNlZCB0byBzaGlmdCBhIGNsaWVudCByZXF1ZXN0IG92ZXIgdG8gYW5vdGhlciBob3N0LiBUaGUgdGVtcG9yYXJ5IFVSSSBTSE9VTEQgYmUgZ2l2ZW4gYnkgdGhlIExvY2F0aW9uIGZpZWxkIGluIHRoZSByZXNwb25zZS4gVW5sZXNzIHRoZSByZXF1ZXN0IG1ldGhvZCB3YXMgSEVBRCwgdGhlIGVudGl0eSBvZiB0aGUgcmVzcG9uc2UgU0hPVUxEIGNvbnRhaW4gYSBzaG9ydCBoeXBlcnRleHQgbm90ZSB3aXRoIGEgaHlwZXJsaW5rIHRvIHRoZSBuZXcgVVJJKHMpLiBJZiB0aGUgMzA3IHN0YXR1cyBjb2RlIGlzIHJlY2VpdmVkIGluIHJlc3BvbnNlIHRvIGEgcmVxdWVzdCBvdGhlciB0aGFuIGBHRVRgIG9yIGBIRUFEYCwgdGhlIHVzZXIgYWdlbnQgTVVTVCBOT1QgYXV0b21hdGljYWxseSByZWRpcmVjdCB0aGUgcmVxdWVzdCB1bmxlc3MgaXQgY2FuIGJlIGNvbmZpcm1lZCBieSB0aGUgdXNlciwgc2luY2UgdGhpcyBtaWdodCBjaGFuZ2UgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlIHJlcXVlc3Qgd2FzIGlzc3VlZC4KKiAqKjQwMCAoQmFkIFJlcXVlc3QpKiogNDAwIGlzIHRoZSBnZW5lcmljIGNsaWVudC1zaWRlIGVycm9yIHN0YXR1cywgdXNlZCB3aGVuIG5vIG90aGVyIDR4eCBlcnJvciBjb2RlIGlzIGFwcHJvcHJpYXRlLiBFcnJvcnMgY2FuIGJlIGxpa2UgbWFsZm9ybWVkIHJlcXVlc3Qgc3ludGF4LCBpbnZhbGlkIHJlcXVlc3QgbWVzc2FnZSBwYXJhbWV0ZXJzLCBvciBkZWNlcHRpdmUgcmVxdWVzdCByb3V0aW5nIGV0Yy4gVGhlIGNsaWVudCBTSE9VTEQgTk9UIHJlcGVhdCB0aGUgcmVxdWVzdCB3aXRob3V0IG1vZGlmaWNhdGlvbnMuCiogKio0MDEgKFVuYXV0aG9yaXplZCkqKiBBIDQwMSBlcnJvciByZXNwb25zZSBpbmRpY2F0ZXMgdGhhdCB0aGUgY2xpZW50IHRyaWVkIHRvIG9wZXJhdGUgb24gYSBwcm90ZWN0ZWQgcmVzb3VyY2Ugd2l0aG91dCBwcm92aWRpbmcgdGhlIHByb3BlciBhdXRob3JpemF0aW9uLiBJdCBtYXkgaGF2ZSBwcm92aWRlZCB0aGUgd3JvbmcgY3JlZGVudGlhbHMgb3Igbm9uZSBhdCBhbGwuIFRoZSByZXNwb25zZSBtdXN0IGluY2x1ZGUgYSBXV1ctQXV0aGVudGljYXRlIGhlYWRlciBmaWVsZCBjb250YWluaW5nIGEgY2hhbGxlbmdlIGFwcGxpY2FibGUgdG8gdGhlIHJlcXVlc3RlZCByZXNvdXJjZS4gVGhlIGNsaWVudCBNQVkgcmVwZWF0IHRoZSByZXF1ZXN0IHdpdGggYSBzdWl0YWJsZSBBdXRob3JpemF0aW9uIGhlYWRlciBmaWVsZC4gSWYgdGhlIHJlcXVlc3QgYWxyZWFkeSBpbmNsdWRlZCBBdXRob3JpemF0aW9uIGNyZWRlbnRpYWxzLCB0aGVuIHRoZSA0MDEgcmVzcG9uc2UgaW5kaWNhdGVzIHRoYXQgYXV0aG9yaXphdGlvbiBoYXMgYmVlbiByZWZ1c2VkIGZvciB0aG9zZSBjcmVkZW50aWFscy4gSWYgdGhlIDQwMSByZXNwb25zZSBjb250YWlucyB0aGUgc2FtZSBjaGFsbGVuZ2UgYXMgdGhlIHByaW9yIHJlc3BvbnNlLCBhbmQgdGhlIHVzZXIgYWdlbnQgaGFzIGFscmVhZHkgYXR0ZW1wdGVkIGF1dGhlbnRpY2F0aW9uIGF0IGxlYXN0IG9uY2UsIHRoZW4gdGhlIHVzZXIgU0hPVUxEIGJlIHByZXNlbnRlZCB0aGUgZW50aXR5IHRoYXQgd2FzIGdpdmVuIGluIHRoZSByZXNwb25zZSwgc2luY2UgdGhhdCBlbnRpdHkgbWlnaHQgaW5jbHVkZSByZWxldmFudCBkaWFnbm9zdGljIGluZm9ybWF0aW9uLgoqICoqNDAzIChGb3JiaWRkZW4pKiogQSA0MDMgZXJyb3IgcmVzcG9uc2UgaW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCdzIHJlcXVlc3QgaXMgZm9ybWVkIGNvcnJlY3RseSwgYnV0IHRoZSBSRVNUIEFQSSByZWZ1c2VzIHRvIGhvbm9yIGl0LCBpLmUuLCB0aGUgdXNlciBkb2VzIG5vdCBoYXZlIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMgZm9yIHRoZSByZXNvdXJjZS4gQSA0MDMgcmVzcG9uc2UgaXMgbm90IGEgY2FzZSBvZiBpbnN1ZmZpY2llbnQgY2xpZW50IGNyZWRlbnRpYWxzOyB0aGF0IHdvdWxkIGJlIDQwMSAoIlVuYXV0aG9yaXplZCIpLiBBdXRoZW50aWNhdGlvbiB3aWxsIG5vdCBoZWxwLCBhbmQgdGhlIHJlcXVlc3QgU0hPVUxEIE5PVCBiZSByZXBlYXRlZC4gVW5saWtlIGEgNDAxIFVuYXV0aG9yaXplZCByZXNwb25zZSwgYXV0aGVudGljYXRpbmcgd2lsbCBtYWtlIG5vIGRpZmZlcmVuY2UuCiogKio0MDQgKE5vdCBGb3VuZCkqKiBUaGUgNDA0IGVycm9yIHN0YXR1cyBjb2RlIGluZGljYXRlcyB0aGF0IHRoZSBSRVNUIEFQSSBjYW4ndCBtYXAgdGhlIGNsaWVudCdzIFVSSSB0byBhIHJlc291cmNlIGJ1dCBtYXkgYmUgYXZhaWxhYmxlIGluIHRoZSBmdXR1cmUuIFN1YnNlcXVlbnQgcmVxdWVzdHMgYnkgdGhlIGNsaWVudCBhcmUgcGVybWlzc2libGUuIE5vIGluZGljYXRpb24gaXMgZ2l2ZW4gb2Ygd2hldGhlciB0aGUgY29uZGl0aW9uIGlzIHRlbXBvcmFyeSBvciBwZXJtYW5lbnQuIFRoZSA0MTAgKEdvbmUpIHN0YXR1cyBjb2RlIFNIT1VMRCBiZSB1c2VkIGlmIHRoZSBzZXJ2ZXIga25vd3MsIHRocm91Z2ggc29tZSBpbnRlcm5hbGx5IGNvbmZpZ3VyYWJsZSBtZWNoYW5pc20sIHRoYXQgYW4gb2xkIHJlc291cmNlIGlzIHBlcm1hbmVudGx5IHVuYXZhaWxhYmxlIGFuZCBoYXMgbm8gZm9yd2FyZGluZyBhZGRyZXNzLiBUaGlzIHN0YXR1cyBjb2RlIGlzIGNvbW1vbmx5IHVzZWQgd2hlbiB0aGUgc2VydmVyIGRvZXMgbm90IHdpc2ggdG8gcmV2ZWFsIGV4YWN0bHkgd2h5IHRoZSByZXF1ZXN0IGhhcyBiZWVuIHJlZnVzZWQsIG9yIHdoZW4gbm8gb3RoZXIgcmVzcG9uc2UgaXMgYXBwbGljYWJsZS4KKiAqKjQwNSAoTWV0aG9kIE5vdCBBbGxvd2VkKSoqIFRoZSBBUEkgcmVzcG9uZHMgd2l0aCBhIDQwNSBlcnJvciB0byBpbmRpY2F0ZSB0aGF0IHRoZSBjbGllbnQgdHJpZWQgdG8gdXNlIGFuIEhUVFAgbWV0aG9kIHRoYXQgdGhlIHJlc291cmNlIGRvZXMgbm90IGFsbG93LiBGb3IgaW5zdGFuY2UsIGEgcmVhZC1vbmx5IHJlc291cmNlIGNvdWxkIHN1cHBvcnQgb25seSBHRVQgYW5kIEhFQUQsIHdoaWxlIGEgY29udHJvbGxlciByZXNvdXJjZSBtaWdodCBhbGxvdyBHRVQgYW5kIFBPU1QsIGJ1dCBub3QgUFVUIG9yIERFTEVURS4gQSA0MDUgcmVzcG9uc2UgbXVzdCBpbmNsdWRlIHRoZSBBbGxvdyBoZWFkZXIsIHdoaWNoIGxpc3RzIHRoZSBIVFRQIG1ldGhvZHMgdGhhdCB0aGUgcmVzb3VyY2Ugc3VwcG9ydHMuIEZvciBleGFtcGxlOiBBbGxvdzogR0VULCBQT1NUCiogKio0MDYgKE5vdCBBY2NlcHRhYmxlKSoqIFRoZSA0MDYgZXJyb3IgcmVzcG9uc2UgaW5kaWNhdGVzIHRoYXQgdGhlIEFQSSBpcyBub3QgYWJsZSB0byBnZW5lcmF0ZSBhbnkgb2YgdGhlIGNsaWVudCdzIHByZWZlcnJlZCBtZWRpYSB0eXBlcywgYXMgaW5kaWNhdGVkIGJ5IHRoZSBBY2NlcHQgcmVxdWVzdCBoZWFkZXIuIEZvciBleGFtcGxlLCBhIGNsaWVudCByZXF1ZXN0IGZvciBkYXRhIGZvcm1hdHRlZCBhcyBgYXBwbGljYXRpb24veG1sYCB3aWxsIHJlY2VpdmUgYSA0MDYgcmVzcG9uc2UgaWYgdGhlIEFQSSBpcyBvbmx5IHdpbGxpbmcgdG8gZm9ybWF0IGRhdGEgYXMgYGFwcGxpY2F0aW9uL2pzb25gLiBJZiB0aGUgcmVzcG9uc2UgY291bGQgYmUgdW5hY2NlcHRhYmxlLCBhIHVzZXIgYWdlbnQgU0hPVUxEIHRlbXBvcmFyaWx5IHN0b3AgcmVjZWlwdCBvZiBtb3JlIGRhdGEgYW5kIHF1ZXJ5IHRoZSB1c2VyIGZvciBhIGRlY2lzaW9uIG9uIGZ1cnRoZXIgYWN0aW9ucy4KKiAqKjQxMiAoUHJlY29uZGl0aW9uIEZhaWxlZCkqKiBUaGUgNDEyIGVycm9yIHJlc3BvbnNlIGluZGljYXRlcyB0aGF0IHRoZSBjbGllbnQgc3BlY2lmaWVkIG9uZSBvciBtb3JlIHByZWNvbmRpdGlvbnMgaW4gaXRzIHJlcXVlc3QgaGVhZGVycywgZWZmZWN0aXZlbHkgdGVsbGluZyB0aGUgUkVTVCBBUEkgdG8gY2Fycnkgb3V0IGl0cyByZXF1ZXN0IG9ubHkgaWYgY2VydGFpbiBjb25kaXRpb25zIHdlcmUgbWV0LiBBIDQxMiByZXNwb25zZSBpbmRpY2F0ZXMgdGhhdCB0aG9zZSBjb25kaXRpb25zIHdlcmUgbm90IG1ldCwgc28gaW5zdGVhZCBvZiBjYXJyeWluZyBvdXQgdGhlIHJlcXVlc3QsIHRoZSBBUEkgc2VuZHMgdGhpcyBzdGF0dXMgY29kZS4KKiAqKjQxNSAoVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZSkqKiBUaGUgNDE1IGVycm9yIHJlc3BvbnNlIGluZGljYXRlcyB0aGF0IHRoZSBBUEkgaXMgbm90IGFibGUgdG8gcHJvY2VzcyB0aGUgY2xpZW50J3Mgc3VwcGxpZWQgbWVkaWEgdHlwZSwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBDb250ZW50LVR5cGUgcmVxdWVzdCBoZWFkZXIuIEZvciBleGFtcGxlLCBhIGNsaWVudCByZXF1ZXN0IGluY2x1ZGluZyBkYXRhIGZvcm1hdHRlZCBhcyBgYXBwbGljYXRpb24veG1sYCB3aWxsIHJlY2VpdmUgYSA0MTUgcmVzcG9uc2UgaWYgdGhlIEFQSSBpcyBvbmx5IHdpbGxpbmcgdG8gcHJvY2VzcyBkYXRhIGZvcm1hdHRlZCBhcyBgYXBwbGljYXRpb24vanNvbmAuIEZvciBleGFtcGxlLCB0aGUgY2xpZW50IHVwbG9hZHMgYW4gaW1hZ2UgYXMgaW1hZ2Uvc3ZnK3htbCwgYnV0IHRoZSBzZXJ2ZXIgcmVxdWlyZXMgdGhhdCBpbWFnZXMgdXNlIGEgZGlmZmVyZW50IGZvcm1hdC4KKiAqKjUwMCAoSW50ZXJuYWwgU2VydmVyIEVycm9yKSoqIDUwMCBpcyB0aGUgZ2VuZXJpYyBSRVNUIEFQSSBlcnJvciByZXNwb25zZS4gTW9zdCB3ZWIgZnJhbWV3b3JrcyBhdXRvbWF0aWNhbGx5IHJlc3BvbmQgd2l0aCB0aGlzIHJlc3BvbnNlIHN0YXR1cyBjb2RlIHdoZW5ldmVyIHRoZXkgZXhlY3V0ZSBzb21lIHJlcXVlc3QgaGFuZGxlciBjb2RlIHRoYXQgcmFpc2VzIGFuIGV4Y2VwdGlvbi4gQSA1MDAgZXJyb3IgaXMgbmV2ZXIgdGhlIGNsaWVudCdzIGZhdWx0LCBhbmQgdGhlcmVmb3JlLCBpdCBpcyByZWFzb25hYmxlIGZvciB0aGUgY2xpZW50IHRvIHJldHJ5IHRoZSBzYW1lIHJlcXVlc3QgdGhhdCB0cmlnZ2VyZWQgdGhpcyByZXNwb25zZSBhbmQgaG9wZSB0byBnZXQgYSBkaWZmZXJlbnQgcmVzcG9uc2UuIFRoZSBBUEkgcmVzcG9uc2UgaXMgdGhlIGdlbmVyaWMgZXJyb3IgbWVzc2FnZSwgZ2l2ZW4gd2hlbiBhbiB1bmV4cGVjdGVkIGNvbmRpdGlvbiB3YXMgZW5jb3VudGVyZWQgYW5kIG5vIG1vcmUgc3BlY2lmaWMgbWVzc2FnZSBpcyBzdWl0YWJsZS4KKiAqKjUwMSAoTm90IEltcGxlbWVudGVkKSoqIFRoZSBzZXJ2ZXIgZWl0aGVyIGRvZXMgbm90IHJlY29nbml6ZSB0aGUgcmVxdWVzdCBtZXRob2QsIG9yIGl0IGNhbm5vdCBmdWxmaWxsIHRoZSByZXF1ZXN0LiBVc3VhbGx5LCB0aGlzIGltcGxpZXMgZnV0dXJlIGF2YWlsYWJpbGl0eSAoZS5nLiwgYSBuZXcgZmVhdHVyZSBvZiBhIHdlYi1zZXJ2aWNlIEFQSSkuCgojIyMgSG93IGl0IFdvcmtzCgpXZSB1c2UgVnVlIDMgd2l0aCB0aGUgQ29tcG9zaXRpb24gQVBJIHRvIHByb3ZpZGUgYW4gZW50aXJlIHdlYnNpdGUvYXBwbGljYXRpb24gaW4gYSBzaW5nbGUgcGFnZS4gIFRoaXMgaXMgZG9uZSB1c2luZyBhIGNvbWJpbmF0aW9uIG9mIFZ1ZSBTRkMncyAoU2luZ2xlIEZpbGUgQ29tcG9uZW50cykgd2hpY2ggYW5kIHRoZSBWdWUgUm91dGVyIHRvIGNoYW5nZSB0aGUgdXJsIGluIHRoZSBicm93c2VyIHdpdGhvdXQgYWN0dWFsbHkgbmF2aWdhdGluZyB0byBhIG5ldyBwYWdlLgoKVmFyaWFibGVzIGFyZSBtb3N0bHkgaGFuZGxlZCBieSByZWZlcmVuY2UgKGxpa2UgYSBwb2ludGVyKS4gIFRoaXMgYWxsb3dzIHVzIHRvIHBhc3MgYXJvdW5kIHZhcmlhYmxlcyB0aGF0IGFyZSB1a2VwdCB1cCB0byBkYXRlIHdoZW4gY2hhbmdlZCBpbiBvdGhlciBzZWN0aW9ucyBvZiB0aGUgc2l0ZS4KCiMjIyMgQ29yZSBGdW5jdGlvbmFsaXR5CgpUaGVzZSBhcmUgdGhlIGxpYnMgd2hpY2ggcG93ZXIgdGhlIG1ham9yaXR5IG9mIHRoZSBzaXRlcyBmdW5jdGlvbmFsaXR5LiAgWW91IHNob3VsZCBhdCBsZWFzdCBicmVpZmx5IHJlYWQgb3B2ZXIgZWFjaCBvZiB0aGVtLgoKKiBbKipWdWUgMyoqXShodHRwczovL3Z1ZWpzLm9yZy9ndWlkZS9pbnRyb2R1Y3Rpb24uaHRtbCkgaXMgdGhlICoqVGVtcGxhdGUgRW5naW5lKiogd2l0aCBhbGwgdGhlIG1vZGVybiBiZWxscyBhbmQgd2hpc3RsZXMgbGlrZSBhdXRvbWF0aWNhbGx5IHVwZGF0aW5nIHRoZSBkaXNwbGF5IHJlbmRlciBhcyBkYXRhIGNoYW5nZXMuCiogWyoqUGluaWEqKl0oaHR0cHM6Ly9waW5pYS52dWVqcy5vcmcvaW50cm9kdWN0aW9uLmh0bWwpIGlzIHVzZWQgdG8gcHJvdmlkZSAqKkRhdGEgU3RvcmVzKiogd2hpY2ggYWxsb3cgdXMgdG8gbG9hZCBkYXRhIHRoYXQgaXMgcmV1c2FibGUgYmV0d2VlbiBwYWdlcyB3aXRob3V0IGhhdmluZyB0byByZWxvYWQgdGhlIGRhdGEuCiogWyoqVnVlIFJvdXRlcioqXShodHRwczovL3JvdXRlci52dWVqcy5vcmcvaW5zdGFsbGF0aW9uLmh0bWwpIGlzIHVzZWQgZm9yICoqUm91dGluZyoqIHRvIHRyaWdnZXIgY2FsbGluZyBwYWdlcyBiYXNlZCBvbiB0aGUgdXJsIHdoaWxlIGFsbCBiZWluZyBpbiBhIHNpbmdsZSBwYWdlKS4KCiMjIyMgQWRkaXRpb25hbCBGdW5jdGlvbmFsaXR5CgpUaGlzIHN0dWZmIHByb3ZpZGVzIGdvb2QgZmVhdHVyZXMgYnV0IGRvZXMgbm90IHJlcXVpcmUgeW91IHRvIHJlYWxseSBiZSBmYW1paWFyIHdpdGggaXQuICBTa2lwIG92ZXIgdGhlc2UgdW5sZXNzIHlvdSBmaW5kIHlvdSBuZWVkIHRvIGtub3cgbW9yZSBhYm91dCBvbmUgb2YgdGhlbSBmb3Igc29tZSByZWFzb24uCgoqIFsqKlZpdGUqKl0oaHR0cHM6Ly92aXRlanMuZGV2L2d1aWRlLykgaXMgb3VyICoqRnJvbnRlbmQgVG9vbGluZyoqIHN5c3RlbSB3aGljaCBwcm92aWRlcyBhIG5pY2UgZGV2IHNldHVwIGFuZCBoYW5kbGVzIGJ1aWxkaW5nIHRoZSBwcm9qZWN0IGZvciBwcm9kdWN0aW9uIHVzZS4KKiBbKipWaXRlIFBXQSoqXShodHRwczovL3ZpdGUtcHdhLW9yZy5uZXRsaWZ5LmFwcC9ndWlkZS8pIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIHRoZSB0aGUgZmlsZXMgbmVlZGVkIHNvIHdlIGFyZSBhIFsqKlBXQSoqXShodHRwczovL3dlYi5kZXYvbGVhcm4vcHdhLykgKCoqUHJvZ3Jlc3NpdmUgV2ViIEFwcCoqKS4KKiBbKipFbGVjdHJvbioqXShodHRwczovL3d3dy5lbGVjdHJvbmpzLm9yZy8pIGFsbG93cyB1cyB0byBidWlsZCBhICoqRGVza3RvcCBBcHAqKiBmb3IgbWFjT1MsIFdpbmRvd3MsIExpbnV4LCBhcyB3ZWxsIGFzIE1vYmlsZSBEZXZpY2UgdmVyc2lvbnMuCiogWyoqRVNMaW50KipdKGh0dHBzOi8vZXNsaW50Lm9yZy8pIGlzIG91ciAqKkxpbnRlcioqIHdoaWNoIGNhbiBkZXRlY3QgYSB3aWRlIHJhbmdlIG9mIHByb2JsZW1zIHlvdXIgY29kZS4KKiBbKipQcmV0dGllcioqXShodHRwczovL3ByZXR0aWVyLmlvLykgaXMgb3VyICoqQ29kZSBGb3JtYXR0ZXIqKiBhbGxvd2luZyBhdXRvbWF0aWMgZm9ybWF0dGluZyBvZiBjb2RlIGJhc2VkIG9uIG91ciBzZXQgb2YgcHJlZGVmaW5lZCBydWxlcy4KKiBbKipWaXRlc3QqKl0oaHR0cHM6Ly92aXRlc3QuZGV2L2d1aWRlLykgaXMgb3VyICoqVW5pdCBUZXN0aW5nKiogZnJhbWV3b3JrLgoqIFsqKlZlZVZhbGlkYXRlKipdKGh0dHBzOi8vdmVlLXZhbGlkYXRlLmxvZ2FyZXRtLmNvbS92NC9ndWlkZS9vdmVydmlldy8pIGlzIGluc3RhbGxlZCBmb3IgKipGb3JtIFZhbGlkYXRpb24qKgoqIFsqKlZ1ZS1pMThuKipdKGh0dHBzOi8vdnVlLWkxOG4uaW50bGlmeS5kZXYvZ3VpZGUvaW50cm9kdWN0aW9uLmh0bWwpIGlzIG91ciAqKlRyYW5zbGF0aW9uKiogbGliLgoKIyMjIyBJbnNwZWN0aW5nIGFuZCBEZWJ1Z2dpbmcgVGhlIExpdmUgRGF0YQoKVGhlcmUgYXJlIHNldmVyYWwgRGV2ZWxvcGVyIENvbnNvbGUgdHlwZSBpbnRlcmZhY2VzIHNldHVwIHdoaWNoIHdlIGNhbiB1c2UgdG8gdmlldyBhbmQgbW9kaWZ5IHRoZSBsaXZlIHZhcmlhYmxlcyBnZW5lcmF0aW5nIHRoZSBzaXRlLgoKQnJvd3NlciBFeHRlbnNpb24gW1Z1ZSBEZXZ0b29sc10oaHR0cHM6Ly9kZXZ0b29scy52dWVqcy5vcmcvZ3VpZGUvaW5zdGFsbGF0aW9uLmh0bWwpCiFbdnVlLWRldnRvb2xzLWV4dGVuc2lvbl0oaHR0cHM6Ly9naXRodWIuY29tL2RldGFpbi9teWFkbWluLWNsaWVudC12dWUvYXNzZXRzLzEzNjQ1MDQvNTM2ZTA1YmUtOTY1My00M2ZmLWFjY2UtMmIyMDgwZjc2YTk0KQoKVGhlIG90aGVyIHdheSBpcwohW3Z1ZS1kZXZ0b29scy1wb3B1cF0oaHR0cHM6Ly9naXRodWIuY29tL2RldGFpbi9teWFkbWluLWNsaWVudC12dWUvYXNzZXRzLzEzNjQ1MDQvOWI1MDJhNjktMDljNC00OGI3LWFjODgtMmZlNTBkNGFiMTVjKQoKIyMgUmVjb21tZW5kZWQgSURFIFNldHVwCgpbVlNDb2RlXShodHRwczovL2NvZGUudmlzdWFsc3R1ZGlvLmNvbS8pICsgW1ZvbGFyXShodHRwczovL21hcmtldHBsYWNlLnZpc3VhbHN0dWRpby5jb20vaXRlbXM/aXRlbU5hbWU9VnVlLnZvbGFyKSAoYW5kIGRpc2FibGUgVmV0dXIpICsgW1R5cGVTY3JpcHQgVnVlIFBsdWdpbiAoVm9sYXIpXShodHRwczovL21hcmtldHBsYWNlLnZpc3VhbHN0dWRpby5jb20vaXRlbXM/aXRlbU5hbWU9VnVlLnZzY29kZS10eXBlc2NyaXB0LXZ1ZS1wbHVnaW4pLgoKIyMgQ3VzdG9taXplIGNvbmZpZ3VyYXRpb24KClNlZSBbVml0ZSBDb25maWd1cmF0aW9uIFJlZmVyZW5jZV0oaHR0cHM6Ly92aXRlanMuZGV2L2NvbmZpZy8pLgoKIyMgUHJvamVjdCBTZXR1cAoKYGBgc2gKbnBtIGluc3RhbGwKYGBgCgojIyMgQ29tcGlsZSBhbmQgSG90LVJlbG9hZCBmb3IgRGV2ZWxvcG1lbnQKCmBgYHNoCm5wbSBydW4gZGV2CmBgYAoKIyMjIENvbXBpbGUgYW5kIE1pbmlmeSBmb3IgUHJvZHVjdGlvbgoKYGBgc2gKbnBtIHJ1biBidWlsZApgYGAKCiMjIyBMaW50IHdpdGggW0VTTGludF0oaHR0cHM6Ly9lc2xpbnQub3JnLykKCmBgYHNoCm5wbSBydW4gbGludApgYGAK - readmeEtag: '"515bd3c60c70d36c458c97398de43bc41dc3a4b7831f492b025cec74338a9e67"' - readmeLastModified: Tue, 12 Dec 2023 20:54:35 GMT + IyBJbnRlclNlcnZlciBNeUFkbWluIENsaWVudCBJbnRlcmZhY2UKCiMjIEltcHJvdmVtZW50cyBhbmQgQmVuZWZpdHMgb3ZlciBjdXJyZW50IENsaWVudCBJbnRlcmZhY2UKCiogKipQZXJmb3JtYW5jZSBCb29zdCoqOiBTdGF0aWMgSFRNTCBnZW5lcmF0ZWQgYnkgVnVlIGNhbiBiZSBoaWdobHkgb3B0aW1pemVkIGZvciBzcGVlZCwgcmVzdWx0aW5nIGluIGZhc3RlciBwYWdlIGxvYWQgdGltZXMgYW5kIGEgbW9yZSByZXNwb25zaXZlIHVzZXIgZXhwZXJpZW5jZS4KKiAqKlJlZHVjZWQgU2VydmVyIExvYWQqKjogU2VydmluZyBzdGF0aWMgZmlsZXMgcmVxdWlyZXMgbGVzcyBzZXJ2ZXIgcHJvY2Vzc2luZyBjb21wYXJlZCB0byBkeW5hbWljYWxseSBnZW5lcmF0ZWQgcGFnZXMsIGxlYWRpbmcgdG8gcmVkdWNlZCBzZXJ2ZXIgbG9hZCBhbmQgaW1wcm92ZWQgc2NhbGFiaWxpdHkuCiogKipJbXByb3ZlZCBTRU8qKjogUHJlLXJlbmRlcmVkIHN0YXRpYyBIVE1MIGNhbiBlbmhhbmNlIHNlYXJjaCBlbmdpbmUgb3B0aW1pemF0aW9uIChTRU8pIGJ5IHByb3ZpZGluZyBjb250ZW50IHRoYXQgc2VhcmNoIGVuZ2luZXMgY2FuIGVhc2lseSBjcmF3bCBhbmQgaW5kZXguCiogKipDRE4gQ29tcGF0aWJpbGl0eSoqOiBTdGF0aWMgZmlsZXMgYXJlIHdlbGwtc3VpdGVkIGZvciBDb250ZW50IERlbGl2ZXJ5IE5ldHdvcmtzIChDRE5zKSwgd2hpY2ggY2FuIGRpc3RyaWJ1dGUgeW91ciBjb250ZW50IGdsb2JhbGx5LCByZWR1Y2luZyBsYXRlbmN5IGFuZCBpbXByb3ZpbmcgcGFnZSBsb2FkIHRpbWVzIGZvciB1c2VycyBhY3Jvc3MgdGhlIHdvcmxkLgoqICoqRW5oYW5jZWQgU2VjdXJpdHkqKjogU2VwYXJhdGluZyB0aGUgZnJvbnRlbmQgZnJvbSB0aGUgYmFja2VuZCBtaW5pbWl6ZXMgdGhlIGV4cG9zdXJlIG9mIHNlbnNpdGl2ZSBiYWNrZW5kIGxvZ2ljLCBpbXByb3ZpbmcgdGhlIG92ZXJhbGwgc2VjdXJpdHkgcG9zdHVyZSBvZiB5b3VyIGFwcGxpY2F0aW9uLgoqICoqU2NhbGFiaWxpdHkqKjogU3RhdGljIGZpbGVzIGNhbiBiZSBjYWNoZWQgZWZmaWNpZW50bHksIGFsbG93aW5nIGZvciBlYXN5IGhvcml6b250YWwgc2NhbGluZyB3aXRob3V0IHRoZSBuZWVkIHRvIHdvcnJ5IGFib3V0IHNlcnZlci1zaWRlIHN0YXRlLgoqICoqU2ltcGxpZmllZCBEZXBsb3ltZW50Kio6IERlcGxveWluZyBhIHN0YXRpYyBmcm9udGVuZCBpcyBvZnRlbiBzaW1wbGVyIGFuZCBtb3JlIHByZWRpY3RhYmxlIHRoYW4gZGVwbG95aW5nIGNvbXBsZXggc2VydmVyLXNpZGUgYXBwbGljYXRpb25zLCBsZWFkaW5nIHRvIHNtb290aGVyIHJlbGVhc2UgY3ljbGVzLgoqICoqUmVkdWNlZCBBUEkgT3ZlcmhlYWQqKjogVXRpbGl6aW5nIHRoZSBQSFAgcGxhdGZvcm0gc29sZWx5IGZvciBoYW5kbGluZyBPcGVuQVBJIEFQSSByZXF1ZXN0cyBtZWFucyB0aGF0IHRoZSBiYWNrZW5kIHNlcnZlciBpcyBvbmx5IHVzZWQgZm9yIG5lY2Vzc2FyeSBkYXRhIHJldHJpZXZhbCBhbmQgcHJvY2Vzc2luZy4KKiAqKkRldmVsb3BlciBDb2xsYWJvcmF0aW9uKio6IENsZWFyIHNlcGFyYXRpb24gb2YgZnJvbnRlbmQgYW5kIGJhY2tlbmQgY29uY2VybnMgZW5hYmxlcyBmcm9udGVuZCBkZXZlbG9wZXJzIGFuZCBQSFAgZGV2ZWxvcGVycyB0byB3b3JrIG1vcmUgaW5kZXBlbmRlbnRseSBhbmQgY29sbGFib3JhdGl2ZWx5LgoqICoqRW5oYW5jZWQgVXNlciBFeHBlcmllbmNlKio6IFZ1ZSdzIHJlYWN0aXZlIGNvbXBvbmVudHMgYW5kIGludGVyYWN0aXZpdHkgY2FuIHN0aWxsIHByb3ZpZGUgYSBkeW5hbWljIHVzZXIgZXhwZXJpZW5jZSBldmVuIGluIGEgc3RhdGljIEhUTUwgY29udGV4dCwgbGVhZGluZyB0byBoaWdoZXIgdXNlciBlbmdhZ2VtZW50LgoqICoqTW9kdWxhciBBcmNoaXRlY3R1cmUqKjogVnVlJ3MgY29tcG9uZW50LWJhc2VkIHN0cnVjdHVyZSBwcm9tb3RlcyBtb2R1bGFyIGRlc2lnbiwgd2hpY2ggZW5oYW5jZXMgY29kZSBtYWludGFpbmFiaWxpdHkgYW5kIGFsbG93cyBmb3IgZWFzaWVyIGZ1dHVyZSB1cGRhdGVzLgoqICoqQ3Jvc3MtUGxhdGZvcm0gQ29uc2lzdGVuY3kqKjogQSBzZXBhcmF0ZSBzdGF0aWMgZnJvbnRlbmQgY2FuIGVuc3VyZSBjb25zaXN0ZW50IHVzZXIgZXhwZXJpZW5jZXMgYWNyb3NzIGRpZmZlcmVudCBkZXZpY2VzIGFuZCBwbGF0Zm9ybXMsIGNvbnRyaWJ1dGluZyB0byB1c2VyIHNhdGlzZmFjdGlvbi4KKiAqKkZyb250ZW5kIElubm92YXRpb24qKjogRm9jdXNpbmcgb24gYSBzZXBhcmF0ZSBzdGF0aWMgZnJvbnRlbmQgYWxsb3dzIGZyb250ZW5kIGRldmVsb3BlcnMgdG8gZXhwZXJpbWVudCB3aXRoIG5ldyBmZWF0dXJlcyBhbmQgVUkgaW1wcm92ZW1lbnRzIHdpdGhvdXQgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBiYWNrZW5kLgoqICoqUmVzb3VyY2UgRWZmaWNpZW5jeSoqOiBXaXRoIGZld2VyIHNlcnZlci1zaWRlIGNvbXB1dGF0aW9ucywgdGhlIGJhY2tlbmQgY2FuIHV0aWxpemUgaXRzIHJlc291cmNlcyBtb3JlIGVmZmljaWVudGx5LCBwb3RlbnRpYWxseSBsZWFkaW5nIHRvIGNvc3Qgc2F2aW5ncy4KKiAqKkVhc2llciBEZWJ1Z2dpbmcqKjogQ2xlYXIgc2VwYXJhdGlvbiBvZiByZXNwb25zaWJpbGl0aWVzIHNpbXBsaWZpZXMgZGVidWdnaW5nIGFuZCB0cm91Ymxlc2hvb3RpbmcgZWZmb3J0cywgbWFraW5nIGlzc3VlIGlkZW50aWZpY2F0aW9uIGFuZCByZXNvbHV0aW9uIG1vcmUgc3RyYWlnaHRmb3J3YXJkLgoqICoqRmxleGliaWxpdHkgaW4gSG9zdGluZyoqOiBIb3N0aW5nIGEgc3RhdGljIGZyb250ZW5kIGlzIG9mdGVuIG1vcmUgZmxleGlibGUgYW5kIGNvc3QtZWZmZWN0aXZlLCBhcyBpdCBjYW4gYmUgZGVwbG95ZWQgb24gdmFyaW91cyBob3N0aW5nIHNvbHV0aW9ucywgaW5jbHVkaW5nIHN0YXRpYyBzaXRlIGhvc3RzLgoqICoqRnV0dXJlLVByb29maW5nKio6IEEgc3RhdGljIEhUTUwgZnJvbnRlbmQgY2FuIGVuc3VyZSBsb25nLXRlcm0gc3RhYmlsaXR5IGFuZCBjb21wYXRpYmlsaXR5LCBhcyBpdCdzIGxlc3MgcHJvbmUgdG8gZGVwZW5kZW5jaWVzIGFuZCB0ZWNobm9sb2d5IGNoYW5nZXMuCiogKipPZmZsaW5lIEFjY2Vzc2liaWxpdHkqKjogQnkgc2VydmluZyBzdGF0aWMgYXNzZXRzLCB5b3UgY2FuIGVuYWJsZSB5b3VyIGFwcGxpY2F0aW9uIHRvIHdvcmsgaW4gb2ZmbGluZSBvciBsb3ctY29ubmVjdGl2aXR5IHNjZW5hcmlvcywgcHJvdmlkaW5nIGEgbW9yZSByb2J1c3QgdXNlciBleHBlcmllbmNlLgoqICoqT2ZmbGluZSBDYXBhYmlsaXRpZXMqKjogQSBzdGF0aWMgSFRNTCBmcm9udGVuZCBjYW4gYmUgZGVzaWduZWQgdG8gd29yayBvZmZsaW5lIG9yIHdpdGggaW50ZXJtaXR0ZW50IGNvbm5lY3Rpdml0eSwgZW5oYW5jaW5nIHVzZXIgZXhwZXJpZW5jZSBpbiBzaXR1YXRpb25zIHdpdGggbGltaXRlZCBpbnRlcm5ldCBhY2Nlc3MuCiogKipDYWNoaW5nIEFkdmFudGFnZXMqKjogU3RhdGljIGFzc2V0cyBjYW4gYmUgY2FjaGVkIGF0IHZhcmlvdXMgbGV2ZWxzLCBmcm9tIHRoZSBicm93c2VyIHRvIENETnMsIHJlZHVjaW5nIHRoZSBuZWVkIGZvciByZXBlYXRlZCBkYXRhIHJlcXVlc3RzIGFuZCBpbXByb3Zpbmcgb3ZlcmFsbCBsb2FkIHRpbWVzLgoqICoqVmVyc2lvbiBDb250cm9sKio6IFN0YXRpYyBhc3NldHMgY2FuIGJlIGVhc2lseSB2ZXJzaW9uZWQgYW5kIG1hbmFnZWQgdGhyb3VnaCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtcywgZW5zdXJpbmcgY29uc2lzdGVudCBhbmQgY29udHJvbGxlZCB1cGRhdGVzLgoqICoqSW50ZXJuYXRpb25hbGl6YXRpb24qKjogQSBzdGF0aWMgZnJvbnRlbmQgY2FuIGJlIHN0cnVjdHVyZWQgdG8gc3VwcG9ydCBpbnRlcm5hdGlvbmFsaXphdGlvbiBhbmQgbG9jYWxpemF0aW9uLCBjYXRlcmluZyB0byBhIGdsb2JhbCBhdWRpZW5jZSB3aXRoIGVhc2UuCiogKipDb3N0IFNhdmluZ3MqKjogUmVkdWNlZCBzZXJ2ZXItc2lkZSBwcm9jZXNzaW5nIGNhbiBsZWFkIHRvIGNvc3Qgc2F2aW5ncyBvbiBzZXJ2ZXIgcmVzb3VyY2VzLCBlc3BlY2lhbGx5IHdoZW4gZGVwbG95aW5nIG9uIGNsb3VkIHBsYXRmb3JtcyBvciBob3N0aW5nIHNlcnZpY2VzLgoqICoqUHJlZGljdGFibGUgQmVoYXZpb3IqKjogU3RhdGljIGZyb250ZW5kcyB0ZW5kIHRvIG9mZmVyIG1vcmUgcHJlZGljdGFibGUgYmVoYXZpb3IsIGFzIHRoZXkgYXJlIG5vdCBhZmZlY3RlZCBieSBzZXJ2ZXItc2lkZSBjaGFuZ2VzIHRoYXQgbWlnaHQgaW1wYWN0IHRoZSB1c2VyIGludGVyZmFjZS4KKiAqKkJyb3dzZXIgQ29tcGF0aWJpbGl0eSoqOiBBIHdlbGwtZGVzaWduZWQgc3RhdGljIGZyb250ZW5kIGNhbiBlbnN1cmUgY29uc2lzdGVudCBiZWhhdmlvciBhY3Jvc3MgZGlmZmVyZW50IHdlYiBicm93c2VycywgcmVkdWNpbmcgdGhlIG5lZWQgZm9yIGV4dGVuc2l2ZSBjcm9zcy1icm93c2VyIHRlc3RpbmcuCiogKipUaGlyZC1QYXJ0eSBJbnRlZ3JhdGlvbioqOiBJbnRlZ3JhdGluZyB0aGlyZC1wYXJ0eSBzZXJ2aWNlcyBhbmQgd2lkZ2V0cyBpbnRvIGEgc3RhdGljIGZyb250ZW5kIGlzIG9mdGVuIHNpbXBsZXIgYW5kIGxlc3MgcHJvbmUgdG8gY29uZmxpY3RzLgoqICoqTWljcm9zZXJ2aWNlcyBDb21wYXRpYmlsaXR5Kio6IEEgbW9kdWxhciBzdGF0aWMgZnJvbnRlbmQgYWxpZ25zIHdlbGwgd2l0aCBtaWNyb3NlcnZpY2VzIGFyY2hpdGVjdHVyZSwgYWxsb3dpbmcgZm9yIHNlcGFyYXRlIGRldmVsb3BtZW50IGFuZCBkZXBsb3ltZW50IG9mIHZhcmlvdXMgY29tcG9uZW50cy4KKiAqKlNlY3VyaXR5IFBhdGNoaW5nKio6IFNlcGFyYXRpbmcgdGhlIGZyb250ZW5kIGZyb20gdGhlIGJhY2tlbmQgc2ltcGxpZmllcyBzZWN1cml0eSB1cGRhdGVzIGFuZCBwYXRjaGluZywgYXMgdnVsbmVyYWJpbGl0aWVzIGluIHRoZSBmcm9udGVuZCB3b24ndCBkaXJlY3RseSBpbXBhY3QgdGhlIGJhY2tlbmQgbG9naWMuCiogKipRdWljayBEZXBsb3ltZW50Kio6IERlcGxveWluZyBzdGF0aWMgZmlsZXMgaXMgZ2VuZXJhbGx5IGZhc3RlciBhbmQgcmVxdWlyZXMgZmV3ZXIgcmVzb3VyY2VzIGNvbXBhcmVkIHRvIGRlcGxveWluZyBjb21wbGV4IHNlcnZlci1zaWRlIGFwcGxpY2F0aW9ucy4KKiAqKkNvbnRpbnVvdXMgSW50ZWdyYXRpb24vQ29udGludW91cyBEZXBsb3ltZW50IChDSS9DRCkqKjogQ0kvQ0QgcGlwZWxpbmVzIGZvciBhIHN0YXRpYyBmcm9udGVuZCBjYW4gYmUgc3RyYWlnaHRmb3J3YXJkIGFuZCBlYXNpbHkgYXV0b21hdGVkLCBsZWFkaW5nIHRvIG1vcmUgZWZmaWNpZW50IGRldmVsb3BtZW50IHdvcmtmbG93cy4KKiAqKlJlZHVjZWQgTGF0ZW5jeSoqOiBXaXRoIHJlZHVjZWQgc2VydmVyLXNpZGUgcHJvY2Vzc2luZywgbGF0ZW5jeSBjYW4gYmUgbWluaW1pemVkLCBjb250cmlidXRpbmcgdG8gYSBtb3JlIHJlc3BvbnNpdmUgdXNlciBleHBlcmllbmNlLgoqICoqRWFzaWVyIEEvQiBUZXN0aW5nKio6IEEgc3RhdGljIGZyb250ZW5kIGNhbiBmYWNpbGl0YXRlIEEvQiB0ZXN0aW5nIGFuZCBleHBlcmltZW50YXRpb24gd2l0aG91dCB0aGUgY29tcGxleGl0aWVzIG9mIGR5bmFtaWMgc2VydmVyLXNpZGUgcmVuZGVyaW5nLgoqICoqQ29udGVudCBNYW5hZ2VtZW50Kio6IFNlcGFyYXRpbmcgZnJvbnRlbmQgYW5kIGJhY2tlbmQgYWxsb3dzIGNvbnRlbnQgbWFuYWdlbWVudCBzeXN0ZW1zIChDTVMpIHRvIGZvY3VzIG9uIGNvbnRlbnQgd2l0aG91dCBiZWluZyB0aWdodGx5IGNvdXBsZWQgdG8gdGhlIGFwcGxpY2F0aW9uIGxvZ2ljLgoqICoqU2ltcGxpZmllZCBCYWNrZW5kKio6IEJ5IG9mZmxvYWRpbmcgZnJvbnRlbmQgcmVuZGVyaW5nIHRvIFZ1ZSwgdGhlIFBIUCBiYWNrZW5kIGNhbiBmb2N1cyBvbiBkYXRhIHByb2Nlc3NpbmcgYW5kIEFQSSBmdW5jdGlvbmFsaXR5LCBzaW1wbGlmeWluZyBpdHMgcm9sZS4KKiAqKkNsaWVudC1TaWRlIEVuaGFuY2VtZW50cyoqOiBWdWUncyBjbGllbnQtc2lkZSByb3V0aW5nIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGNhbiBlbmhhbmNlIG5hdmlnYXRpb24gYW5kIGRhdGEgaGFuZGxpbmcgd2l0aGluIHRoZSBmcm9udGVuZC4KKiAqKlJlZHVjZWQgQ29tcGxleGl0eSoqOiBBIHN0YXRpYyBmcm9udGVuZCBzaW1wbGlmaWVzIHRoZSB0ZWNobmljYWwgc3RhY2ssIHJlZHVjaW5nIHRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgb2YgdGhlIGFwcGxpY2F0aW9uIGFyY2hpdGVjdHVyZS4KKiAqKkVhc2llciBDb2RlIEF1ZGl0cyoqOiBDbGVhciBzZXBhcmF0aW9uIGJldHdlZW4gZnJvbnRlbmQgYW5kIGJhY2tlbmQgY29kZSBtYWtlcyBjb2RlIGF1ZGl0cyBhbmQgc2VjdXJpdHkgcmV2aWV3cyBtb3JlIG1hbmFnZWFibGUuCiogKipCcmFuZGluZyBhbmQgQ3VzdG9taXphdGlvbioqOiBBIHNlcGFyYXRlIGZyb250ZW5kIGFsbG93cyBmb3IgZWFzaWVyIGJyYW5kaW5nIGFuZCBjdXN0b21pemF0aW9uLCBhcyBmcm9udGVuZCBjaGFuZ2VzIHdvbid0IGRpcmVjdGx5IGFmZmVjdCBiYWNrZW5kIGZ1bmN0aW9uYWxpdHkuCgojIyBGQVEKCiMjIyBHZXR0aW5nIGEgYmxhbmsgcGFnZSB3aGVuIGxvYWRpbmcgdGhlIHNpdGUKCkNoZWNrIHlvdXIgYWQgYmxvY2tlciBvciBwcml2YWN5IGFkZG9ucywgdGhleSBtaWdodCBuZWVkIHRvIGJlIGRpc2FibGVkIGZvciB0aGlzIHNpdGUuCgojIyBEZXZlbG9wbWVudAoKKiBbdml0ZWpzL2F3ZXNvbWUtdml0ZTog4pqh77iPIEEgY3VyYXRlZCBsaXN0IG9mIGF3ZXNvbWUgdGhpbmdzIHJlbGF0ZWQgdG8gVml0ZS5qc10oaHR0cHM6Ly9naXRodWIuY29tL3ZpdGVqcy9hd2Vzb21lLXZpdGUpCgojIyMgT3BlbkFQSSBTcGVjCgojIyMjIEFQSSBHVUkgRGVzaWduZXJzCgoqIFtGcmVlIE9ubGluZSBWaXN1YWwgQVBJIERlc2lnbmVyIGZvciBPcGVuQVBJIGFuZCBBc3luY0FQSSBTcGVjaWZpY2F0aW9ucyAtIEFwaUJsZHJdKGh0dHBzOi8vd3d3LmFwaWJsZHIuY29tLykKKiBbbXkgSW50ZXJTZXJ2ZXIgU2VydmljZXMgTWFuYWdlbWVudCBBUEkgLSBteWFkbWluYXBpIC0gRWRpdCAtIEZyb2dtZW50XShodHRwczovL3d3dy5mcm9nbWVudC5jb20vZWRpdC9teWFkbWluYXBpL2ludGVyc2VydmVyX215YWRtaW5fYXBpLmpzb24jaW5mby55YW1sKQoqIFtBUElHaXQgLSBBUEkgRG9jdW1lbnRdKGh0dHBzOi8vYXBwLmFwaWdpdC5jb20vcmVwb3NpdG9yeS9kZXRhaW4vbXlhZG1pbi1vcGVuYXBpLXNwZWMvYXBpL29wZW5hcGkueWFtbCkKKiBbQXBpY3VyaW8gU3R1ZGlvIC0gQVBJIEVkaXRvciA6OiBteSBJbnRlclNlcnZlciBTZXJ2aWNlcyBNYW5hZ2VtZW50IEFQSV0oaHR0cHM6Ly9zdHVkaW8uYXBpY3VyLmlvL2FwaXMvOTM2MTgvZWRpdG9yKQoKQWZ0ZXIgdGhpcyBpcyBkb25lIG9uIGFsbCBvZiB0aGUgcmVwb3MgcGljayB0aGUgYmVzdCBvbmUgYW5kIHNldGl0IHVwIC4uIHRyeSB0byBwcmVzZXJ2ZSBnaXQgaGlzdG9yeQoKIyMjIFRPRE8gUm9hZC1NYXAKCiogKioxLjAtYWxwaGEqKiBNaWxlU3RvbmUKICAqIG9yZGVyIHNlcnZpY2UgcGFnZXMKICAgICogWyBdIHNlcnZlcgogICAgKiBbIF0gZG9tYWluCiAgKiBbIF0gY2FydC9paWRzIHBhcnNlZCBhbmQgaGFuZGxlZAoqICoqMS4wLWJldGEqKiBNaWxlU3RvbmUKICAqIFsgXSB1cGRhdGUgcmVzcG9uc2UgY29kZXMgdG8gbWF0Y2ggdGFibGUgYmVsb3cKICAqIFsgXSBsb2FkaW5nIC8gbm8gZW50cmllcyBtZXNzYWdlcwogICogc2VydmljZXMgbGlzdCBwYWdlcwogICAgKiBkYXRhdGFibGVzIG9yIGVxdWl2YWxlbnQKICAgICAgKiBbeF0gZmlsdGVyaW5nCiAgICAgICogWyBdIHNvcnRpbmcKICAgICAgKiBbIF0gcGFnaW5hdGlvbgogICAgICAqIFsgXSBwcmludC9leHBvcnQKKiAqKjEuMC1zdGFibGUqKiBNaWxlU3RvbmUKICAqIFsgXSBzZXR1cCBnaXRodWIgYWN0aW9ucyBhbmQgaG9va3MgZm9yIGF1dG9tYXRlZCB0ZXN0aW5nCiAgKiBbIF0gbWFrZSBzdXJlIGFmZmlsaWF0ZSB0cmFja2luZyBzdGlsbCB3b3JrcwogICogWyBdIGFuYWx5dGljcwogICogWyBdIGdldCB2YXJpb3VzIGxpYnMgbG9hZGluZyB3aXRoIGltcG9ydHMgaW5zdGVhZWQgb2YgZGlyZWN0bHkgY2FsbGVkIHdpdGggc2NyaXRwdHMgYW5kIGxpbmsgdGFncwogICogWyBdIG1pbmltaXplIGFwaSBmaWVsZHMgaW4gcmVxdWVzdHMvcmVzcG9uc2VzIGFuZCBmaWx0ZXIgdGhlbSBmb3Igc2VjdXJpdHkKICAqIFsgXSBhcGkgZmluYWxpemVkCiogRnV0dXJlIFRhc2tzCiAgKiBbIF0gaW1wcm92ZSB3ZWJwYWNraW5nCiAgKiBbIF0gbW92ZSB0eXBlIGRlZmluaXRpb25zIGludG8gL3R5cGVzPwogICogWyBdIHV0aWxpemUgdGhlIGZvcm0gdmFsaWRhdGlvbiBzdHVmZgogICogWyBdIHJlcGxhY2UganF1ZXJ5IHR5cGUgY2FsbHMgd2l0aCBidWlsdCBpbiB0ZW1wbGF0ZSBoYW5kbGluZyBhbmQgc3VjaAogICogWyBdIGJzNS9hZG1pbmx0ZTQgaHR0cHM6Ly9naXRodWIuY29tL2NvbGlmZi9ib290c3RyYXAtNS1taWdyYXRlLXRvb2wvYmxvYi9tYWluL2d1bHBmaWxlLmpzICBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9KdWFuLWVzY29iYXI5NC9mNzY1MzVhMTI2NGFjNmY3MjUxYzY0M2FmNTBjMTg0ZAogICogWyBdIGlvbmljIGNhcGFjaXRvcgogICAgKiBbIF0gYW5kcm9pZCBidWlsZAogICAgKiBbIF0gaW9zIGJ1aWxkCiAgKiBbeF0gZWxlY3Ryb24gYnVpbGQKICAgICogW3hdIHdpbmRvd3MvbGludXgvbWFjIGJ1aWxkcwogICAgKiBbIF0gYXV0b21hdGVkIGJ1aWxkcwogICAgKiBbeF0ganMvY3NzIGFzc2V0cyBsb2FkZWQgbG9jYWxseQoKIyMjIFBhZ2UgU3RhdHVzCgpBUEkgU3BlYyBDaGVja3MKKiBSZXF1ZXN0IEJvZHkKKiBTdWNjZXNzIFJlc3BvbnNlCiogRXJyb3IgUmVzcG9uc2VzCiogRXhhbXBsZXMKKiBEZXRhaWxlZCBEb2N1bWVudGF0aW9uCiogT3B0aW1pemUgVHlwZXMKKiBQYXRocwogICogc3VtbWFyeSBzZXQKICAqIGRlc2NyaXB0aW9uIHNldAogICogcGFyYW1ldGVycwogICAgKiBkZXNjcmlwdGlvbgogICAgKiBzY2hlbWEgdHlwZQogICAgKiBleGFtcGxlCiAgICAqIGxpbmtzCiAgKiBtZXRob2RzCiAgICAqIHN1bW1hcnkgc2V0CiAgICAqIGRlc2NyaXB0aW9uIHNldAogICAgKiB0YWcgc2V0CiAgICAqIHJlcXVlc3QgdHlwZXMganNvbitmb3JtCiAgICAqIHJlcXVlc3QgYm9keSBkZWZpbnRpb24KICAgICogcmVxdWVzdCBib2R5IGRlc2NyaXB0aW9uIChpbmhlcml0YWJsZSkKICAgICogcmVxdWVzdCBib2R5IGV4YW1wbGUgKGluaGVyaXRhYmxlKQogICAgKiByZXNwb25zZSBzdWNjZXNzIGRlZmluaXRpb24gKGluaGVyaXRhYmxlKQogICAgKiByZXNwb25zZSBzdWNjZXNzIGV4YW1wbGUgKGluaGVyaXRhYmxlKQogICAgKiBsaW5rcwoqIFNjaGVtYXMKICAgICogc3VtbWFyeSBzZXQKICAgICogZGVzY3JpcHRpb24gc2V0CiAgICAqIGV4YW1wbGUgc2V0CiAgICAqIHJlcXVpcmVkIHNldAogICAgKiBsaW5rcwoqIFRhZ3MKICAqIGRldGFpbGVkIGRlc2NyaXB0aW9ucwoKQVBJIENhbGwgQ2hlY2tzCiogV29ya2luZwoqIFNlY3VyZQogICogZGIgZXNjYXBpbmcKICAqIGh0bWwgZmlsdGVyaW5nCiogU3VjY2VzcyBSZXNwb25zZQoqIEVycm9yIFJlc3Nwb25zZXMKKiBPcHRpbWl6ZSBUeXBlcwoKCiogV29ya2luZyBzdGF0dXMgZG9lcyBub3QgaW5jbHVkZSB0aGUgZXhwb3J0L3NvcnRpbmcgcmVsYXRlZCBvcHRpb25zIG9uIHRoZSB2aWV3IHNlcnZpY2UgbGlzdCB0eXBlIHBhZ2VzCgp8IFVybCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgV29ya2luZyB8IEFQSSBDYWxsIHwgQVBJIFNwZWMgfCBCcmVhZGNydW0gfAp8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHwgLS0tLS0tLSB8IC0tLS0tLS0tIHwgLS0tLS0tLS0gfCAtLS0tLS0tLS0gfAp8IC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9sb2dpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCAgICAgICAgICAgfAp8IC9yZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCAgICAgICAgICAgfAp8IC9zdWRvLzpzZXNzaW9uSWQgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8ICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAgfAp8IC9hY2NvdW50L2luZm8gICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9hY2NvdW50L3Bhc3MgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9hY2NvdW50L3NldHRpbmdzICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbeF0gICAgICAgfAp8IC9hY2NvdW50L3VzZXJuYW1lICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9jYXJ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9jYXJ0Lzo6aWlkcyAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9pbnZvaWNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9wYXltZW50X3R5cGVzICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9wcmVwYXlzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9wYXkvOm1ldGhvZC86aW52b2ljZXMgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC90aWNrZXRzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC90aWNrZXRzLzppZCAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC90aWNrZXRzL25ldyAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9kbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9kbnMvOmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9hZmZpbGlhdGUgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8ICAgICAgICAgIHwgICAgICAgICAgfCBbeF0gICAgICAgfAp8IC9hZmZpbGlhdGUvYmFubmVyLzppZCAgICAgICAgICAgICAgIHwgWyBdICAgICB8ICAgICAgICAgIHwgICAgICAgICAgfCBbIF0gICAgICAgfAp8IC9hZmZpbGlhdGUvYmFubmVycyAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9hZmZpbGlhdGUvZmFxICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8ICAgICAgICAgIHwgICAgICAgICAgfCBbeF0gICAgICAgfAp8IC9hZmZpbGlhdGUvbGFuZGluZ19wZyAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9hZmZpbGlhdGUvcGF5bWVudF9zZXR1cCAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9hZmZpbGlhdGUvcmljaF9yZXBvcnQgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9hZmZpbGlhdGUvc2FsZXNfZ3JhcGggICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9hZmZpbGlhdGUvc2FsZXNfcmVwb3J0ICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9hZmZpbGlhdGUvc3RhdHVzX2xlZ2VuZCAgICAgICAgICAgIHwgW3hdICAgICB8ICAgICAgICAgIHwgICAgICAgICAgfCBbeF0gICAgICAgfAp8IC9hZmZpbGlhdGUvdG9zICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8ICAgICAgICAgIHwgICAgICAgICAgfCBbeF0gICAgICAgfAp8IC9hZmZpbGlhdGUvdHJhZmZpY19ncmFwaCAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9hZmZpbGlhdGUvd2ViX3RyYWZmaWMgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9iYWNrdXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9iYWNrdXBzLzppZCAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9iYWNrdXBzLzppZC9jYW5jZWwgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9iYWNrdXBzLzppZC9pbnZvaWNlcyAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9iYWNrdXBzLzppZC93ZWxjb21lX2VtYWlsICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgfCBbeF0gICAgICAgfAp8IC9iYWNrdXBzL29yZGVyICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9kb21haW5zICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9kb21haW5zLzppZCAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9kb21haW5zLzppZC9jYW5jZWwgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9kb21haW5zLzppZC9jb250YWN0ICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9kb21haW5zLzppZC9kbnNzZWMgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9kb21haW5zLzppZC9pbnZvaWNlcyAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9kb21haW5zLzppZC9uYW1lc2VydmVycyAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9kb21haW5zLzppZC9yZW5ldyAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9kb21haW5zLzppZC90cmFuc2ZlciAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9kb21haW5zLzppZC93ZWxjb21lX2VtYWlsICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgfCBbeF0gICAgICAgfAp8IC9kb21haW5zLzppZC93aG9pcyAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9kb21haW5zL29yZGVyICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9kb21haW5zL29yZGVyLzpkb21haW4gICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9kb21haW5zL29yZGVyLzpkb21haW4vOnJlZ1R5cGUgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9mbG9hdGluZ19pcHMgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9mbG9hdGluZ19pcHMvOmlkICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9mbG9hdGluZ19pcHMvOmlkL2NhbmNlbCAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9mbG9hdGluZ19pcHMvOmlkL2NoYW5nZV9pcCAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9mbG9hdGluZ19pcHMvOmlkL2ludm9pY2VzICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9mbG9hdGluZ19pcHMvOmlkL3dlbGNvbWVfZW1haWwgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgfCBbeF0gICAgICAgfAp8IC9mbG9hdGluZ19pcHMvb3JkZXIgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9saWNlbnNlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9saWNlbnNlcy86aWQgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9saWNlbnNlcy86aWQvY2FuY2VsICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9saWNlbnNlcy86aWQvY2hhbmdlX2lwICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9saWNlbnNlcy86aWQvY2hhbmdlX29zICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9saWNlbnNlcy86aWQvaW52b2ljZXMgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9saWNlbnNlcy86aWQvd2VsY29tZV9lbWFpbCAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgfCBbeF0gICAgICAgfAp8IC9saWNlbnNlcy9vcmRlciAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9saWNlbnNlcy9vcmRlci86Y2F0VGFnICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9tYWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9tYWlsLzppZCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9tYWlsLzppZC9hbGVydHMgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9tYWlsLzppZC9jYW5jZWwgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9tYWlsLzppZC9kZW55X3J1bGVzICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9tYWlsLzppZC9pbnZvaWNlcyAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9tYWlsLzppZC93ZWxjb21lX2VtYWlsICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgfCBbeF0gICAgICAgfAp8IC9tYWlsL29yZGVyICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9xcy86aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9xcy86aWQvYmFja3VwICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvYmFja3VwcyAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvY2FuY2VsICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9xcy86aWQvY2hhbmdlX3RpbWV6b25lICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvZWplY3RfY2QgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvaW5zZXJ0X2NkICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvaW52b2ljZXMgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9xcy86aWQvcmVpbnN0YWxsX29zICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvcmVzZXRfcGFzc3dvcmQgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvcmVzdGFydCAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvcmVzdG9yZSAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvcmV2ZXJzZV9kbnMgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvc2V0dXBfdm5jICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvc3RhcnQgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvc3RvcCAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvdHJhZmZpY191c2FnZSAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvdmlld19kZXNrdG9wICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC9xcy86aWQvd2VsY29tZV9lbWFpbCAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgfCBbeF0gICAgICAgfAp8IC9xcy9vcmRlciAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9zZXJ2ZXJzICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9zZXJ2ZXJzLzppZCAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9zZXJ2ZXJzLzppZC9iYW5kd2lkdGhfZ3JhcGggICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9zZXJ2ZXJzLzppZC9jYW5jZWwgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9zZXJ2ZXJzLzppZC9pbnZvaWNlcyAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9zZXJ2ZXJzLzppZC9pcG1pX2xpdmUgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9zZXJ2ZXJzLzppZC9yZXZlcnNlX2RucyAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9zZXJ2ZXJzLzppZC93ZWxjb21lX2VtYWlsICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgfCBbeF0gICAgICAgfAp8IC9zZXJ2ZXJzL29yZGVyICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9zc2wgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9zc2wvOmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9zc2wvOmlkL2NhbmNlbCAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9zc2wvOmlkL2NoYW5nZV9hcHByb3Zlcl9lbWFpbCAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9zc2wvOmlkL2ludm9pY2VzICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC9zc2wvOmlkL3Jlc2VuZF9hcHByb3Zlcl9lbWFpbCAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC9zc2wvOmlkL3dlbGNvbWVfZW1haWwgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgfCBbeF0gICAgICAgfAp8IC9zc2wvb3JkZXIgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL2JhY2t1cCAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMvOmlkL2JhY2t1cHMgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMvOmlkL2Jsb2NrX3NtdHAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL2J1eV9oZF9zcGFjZSAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMvOmlkL2J1eV9pcCAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMvOmlkL2NhbmNlbCAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL2NoYW5nZV9ob3N0bmFtZSAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMvOmlkL2NoYW5nZV9yb290X3Bhc3N3b3JkICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMvOmlkL2NoYW5nZV90aW1lem9uZSAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL2NoYW5nZV93ZWJ1em9fcGFzc3dvcmQgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMvOmlkL2Rpc2FibGVfY2QgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL2Rpc2FibGVfcXVvdGEgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL2VqZWN0X2NkICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL2VuYWJsZV9xdW90YSAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL2luc2VydF9jZCAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMvOmlkL2ludm9pY2VzICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL3JlaW5zdGFsbF9vcyAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMvOmlkL3Jlc2V0X3Bhc3N3b3JkICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMvOmlkL3Jlc3RhcnQgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL3Jlc3RvcmUgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMvOmlkL3JldmVyc2VfZG5zICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL3NldHVwX3ZuYyAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL3NsaWNlcyAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMvOmlkL3N0YXJ0ICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL3N0b3AgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL3RyYWZmaWNfdXNhZ2UgICAgICAgICAgICAgIHwgWyBdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbIF0gICAgICAgfAp8IC92cHMvOmlkL3ZpZXdfZGVza3RvcCAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvOmlkL3dlbGNvbWVfZW1haWwgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgfCBbeF0gICAgICAgfAp8IC92cHMvb3JkZXIgICAgICAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC93ZWJzaXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC93ZWJzaXRlcy86aWQgICAgICAgICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC93ZWJzaXRlcy86aWQvYnV5X2lwICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC93ZWJzaXRlcy86aWQvY2FuY2VsICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC93ZWJzaXRlcy86aWQvZG93bmxvYWRfYmFja3VwcyAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC93ZWJzaXRlcy86aWQvaW52b2ljZXMgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC93ZWJzaXRlcy86aWQvbG9naW4gICAgICAgICAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgW3hdICAgICAgfCBbeF0gICAgICAgfAp8IC93ZWJzaXRlcy86aWQvbWlncmF0aW9uICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC93ZWJzaXRlcy86aWQvcmV2ZXJzZV9kbnMgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAp8IC93ZWJzaXRlcy86aWQvd2VsY29tZV9lbWFpbCAgICAgICAgIHwgW3hdICAgICB8IFt4XSAgICAgIHwgWyBdICAgICAgfCBbeF0gICAgICAgfAp8IC93ZWJzaXRlcy9vcmRlciAgICAgICAgICAgICAgICAgICAgIHwgWyBdICAgICB8IFsgXSAgICAgIHwgWyBdICAgICAgfCBbIF0gICAgICAgfAoKIyMjIEFQSSBSZXNwb25zZSBIVFRQIFN0YXR1cyBDb2RlcwoKIyMjIyBDb21tb25seSBVc2VkIHdpdGggQVBJCgp8IEhUVFAgVmVyYiB8IENSVUQgICAgICAgICAgIHwgRW50aXJlIENvbGxlY3Rpb24gKGUuZy4gL3ZwcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFNwZWNpZmljIEl0ZW0gKGUuZy4gL3Zwcy97aWR9KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLSB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSB8CnwgUE9TVCAgICAgIHwgQ3JlYXRlICAgICAgICAgfCAyMDEgKENyZWF0ZWQpLCAnTG9jYXRpb24nIGhlYWRlciB3aXRoIGxpbmsgdG8gL2N1c3RvbWVycy97aWR9IGNvbnRhaW5pbmcgbmV3IElELiAgICAgICAgICAgICAgICAgICAgIHwgNDA0IChOb3QgRm91bmQpLCA0MDkgKENvbmZsaWN0KSBpZiByZXNvdXJjZSBhbHJlYWR5IGV4aXN0cy4uICAgICAgICAgICAgICAgfAp8IEdFVCAgICAgICB8IFJlYWQgICAgICAgICAgIHwgMjAwIChPSyksIGxpc3Qgb2YgY3VzdG9tZXJzLiBVc2UgcGFnaW5hdGlvbiwgc29ydGluZyBhbmQgZmlsdGVyaW5nIHRvIG5hdmlnYXRlIGJpZyBsaXN0cy4gICAgICAgICAgICB8IDIwMCAoT0spLCBzaW5nbGUgY3VzdG9tZXIuIDQwNCAoTm90IEZvdW5kKSwgaWYgSUQgbm90IGZvdW5kIG9yIGludmFsaWQuICAgIHwKfCBQVVQgICAgICAgfCBVcGRhdGUvUmVwbGFjZSB8IDQwNSAoTWV0aG9kIE5vdCBBbGxvd2VkKSwgdW5sZXNzIHlvdSB3YW50IHRvIHVwZGF0ZS9yZXBsYWNlIGV2ZXJ5IHJlc291cmNlIGluIHRoZSBlbnRpcmUgY29sbGVjdGlvbi4gfCAyMDAgKE9LKSBvciAyMDQgKE5vIENvbnRlbnQpLiA0MDQgKE5vdCBGb3VuZCksIGlmIElEIG5vdCBmb3VuZCBvciBpbnZhbGlkLiB8CnwgUEFUQ0ggICAgIHwgVXBkYXRlL01vZGlmeSAgfCA0MDUgKE1ldGhvZCBOb3QgQWxsb3dlZCksIHVubGVzcyB5b3Ugd2FudCB0byBtb2RpZnkgdGhlIGNvbGxlY3Rpb24gaXRzZWxmLiAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMjAwIChPSykgb3IgMjA0IChObyBDb250ZW50KS4gNDA0IChOb3QgRm91bmQpLCBpZiBJRCBub3QgZm91bmQgb3IgaW52YWxpZC4gfAp8IERFTEVURSAgICB8IERlbGV0ZSAgICAgICAgIHwgNDA1IChNZXRob2QgTm90IEFsbG93ZWQpLCB1bmxlc3MgeW91IHdhbnQgdG8gZGVsZXRlIHRoZSB3aG9sZSBjb2xsZWN0aW9uLS0tbm90IG9mdGVuIGRlc2lyYWJsZS4gICAgICB8IDIwMCAoT0spLiA0MDQgKE5vdCBGb3VuZCksIGlmIElEIG5vdCBmb3VuZCBvciBpbnZhbGlkLiAgICAgICAgICAgICAgICAgICAgIHwKCiogKioyMDAgKE9LKSoqIEl0IGluZGljYXRlcyB0aGF0IHRoZSBSRVNUIEFQSSBzdWNjZXNzZnVsbHkgY2FycmllZCBvdXQgd2hhdGV2ZXIgYWN0aW9uIHRoZSBjbGllbnQgcmVxdWVzdGVkIGFuZCB0aGF0IG5vIG1vcmUgc3BlY2lmaWMgY29kZSBpbiB0aGUgMnh4IHNlcmllcyBpcyBhcHByb3ByaWF0ZS4gVW5saWtlIHRoZSAyMDQgc3RhdHVzIGNvZGUsIGEgMjAwIHJlc3BvbnNlIHNob3VsZCBpbmNsdWRlIGEgcmVzcG9uc2UgYm9keS4gVGhlIGluZm9ybWF0aW9uIHJldHVybmVkIHdpdGggdGhlIHJlc3BvbnNlIGlzIGRlcGVuZGVudCBvbiB0aGUgbWV0aG9kIHVzZWQgaW4gdGhlIHJlcXVlc3QsIGZvciBleGFtcGxlOiAgR0VUIGFuIGVudGl0eSBjb3JyZXNwb25kaW5nIHRvIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgaXMgc2VudCBpbiB0aGUgcmVzcG9uc2UsIEhFQUQgdGhlIGVudGl0eS1oZWFkZXIgZmllbGRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHJlcXVlc3RlZCByZXNvdXJjZSBhcmUgc2VudCBpbiB0aGUgcmVzcG9uc2Ugd2l0aG91dCBhbnkgbWVzc2FnZS1ib2R5LCBQT1NUIGFuIGVudGl0eSBkZXNjcmliaW5nIG9yIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCBvZiB0aGUgYWN0aW9uLCBhbmQgVFJBQ0UgYW4gZW50aXR5IGNvbnRhaW5pbmcgdGhlIHJlcXVlc3QgbWVzc2FnZSBhcyByZWNlaXZlZCBieSB0aGUgZW5kIHNlcnZlci4KKiAqKjIwMSAoQ3JlYXRlZCkqKiBBIFJFU1QgQVBJIHJlc3BvbmRzIHdpdGggdGhlIDIwMSBzdGF0dXMgY29kZSB3aGVuZXZlciBhIHJlc291cmNlIGlzIGNyZWF0ZWQgaW5zaWRlIGEgY29sbGVjdGlvbi4gVGhlcmUgbWF5IGFsc28gYmUgdGltZXMgd2hlbiBhIG5ldyByZXNvdXJjZSBpcyBjcmVhdGVkIGFzIGEgcmVzdWx0IG9mIHNvbWUgY29udHJvbGxlciBhY3Rpb24sIGluIHdoaWNoIGNhc2UgMjAxIHdvdWxkIGFsc28gYmUgYW4gYXBwcm9wcmlhdGUgcmVzcG9uc2UuIFRoZSBuZXdseSBjcmVhdGVkIHJlc291cmNlIGNhbiBiZSByZWZlcmVuY2VkIGJ5IHRoZSBVUkkocykgcmV0dXJuZWQgaW4gdGhlIGVudGl0eSBvZiB0aGUgcmVzcG9uc2UsIHdpdGggdGhlIG1vc3Qgc3BlY2lmaWMgVVJJIGZvciB0aGUgcmVzb3VyY2UgZ2l2ZW4gYnkgYSBMb2NhdGlvbiBoZWFkZXIgZmllbGQuIFRoZSBvcmlnaW4gc2VydmVyIE1VU1QgY3JlYXRlIHRoZSByZXNvdXJjZSBiZWZvcmUgcmV0dXJuaW5nIHRoZSAyMDEgc3RhdHVzIGNvZGUuIElmIHRoZSBhY3Rpb24gY2Fubm90IGJlIGNhcnJpZWQgb3V0IGltbWVkaWF0ZWx5LCB0aGUgc2VydmVyIFNIT1VMRCByZXNwb25kIHdpdGggYSAyMDIgKEFjY2VwdGVkKSByZXNwb25zZSBpbnN0ZWFkLgoqICoqMjAyIChBY2NlcHRlZCkqKiBBIDIwMiByZXNwb25zZSBpcyB0eXBpY2FsbHkgdXNlZCBmb3IgYWN0aW9ucyB0aGF0IHRha2UgYSBsb25nIHdoaWxlIHRvIHByb2Nlc3MuIEl0IGluZGljYXRlcyB0aGF0IHRoZSByZXF1ZXN0IGhhcyBiZWVuIGFjY2VwdGVkIGZvciBwcm9jZXNzaW5nLCBidXQgdGhlIHByb2Nlc3NpbmcgaGFzIG5vdCBiZWVuIGNvbXBsZXRlZC4gVGhlIHJlcXVlc3QgbWlnaHQgb3IgbWlnaHQgbm90IGJlIGV2ZW50dWFsbHkgYWN0ZWQgdXBvbiwgb3IgZXZlbiBtYXliZSBkaXNhbGxvd2VkIHdoZW4gcHJvY2Vzc2luZyBvY2N1cnMuIEl0cyBwdXJwb3NlIGlzIHRvIGFsbG93IGEgc2VydmVyIHRvIGFjY2VwdCBhIHJlcXVlc3QgZm9yIHNvbWUgb3RoZXIgcHJvY2VzcyAocGVyaGFwcyBhIGJhdGNoLW9yaWVudGVkIHByb2Nlc3MgdGhhdCBpcyBvbmx5IHJ1biBvbmNlIHBlciBkYXkpIHdpdGhvdXQgcmVxdWlyaW5nIHRoYXQgdGhlIHVzZXIgYWdlbnQncyBjb25uZWN0aW9uIHRvIHRoZSBzZXJ2ZXIgcGVyc2lzdCB1bnRpbCB0aGUgcHJvY2VzcyBpcyBjb21wbGV0ZWQuIFRoZSBlbnRpdHkgcmV0dXJuZWQgd2l0aCB0aGlzIHJlc3BvbnNlIFNIT1VMRCBpbmNsdWRlIGFuIGluZGljYXRpb24gb2YgdGhlIHJlcXVlc3QncyBjdXJyZW50IHN0YXR1cyBhbmQgZWl0aGVyIGEgcG9pbnRlciB0byBhIHN0YXR1cyBtb25pdG9yIChqb2IgcXVldWUgbG9jYXRpb24pIG9yIHNvbWUgZXN0aW1hdGUgb2Ygd2hlbiB0aGUgdXNlciBjYW4gZXhwZWN0IHRoZSByZXF1ZXN0IHRvIGJlIGZ1bGZpbGxlZC4KKiAqKjIwNCAoTm8gQ29udGVudCkqKiBUaGUgMjA0IHN0YXR1cyBjb2RlIGlzIHVzdWFsbHkgc2VudCBvdXQgaW4gcmVzcG9uc2UgdG8gYSBgUFVUYCwgYFBPU1RgLCBvciBgREVMRVRFYCByZXF1ZXN0IHdoZW4gdGhlIFJFU1QgQVBJIGRlY2xpbmVzIHRvIHNlbmQgYmFjayBhbnkgc3RhdHVzIG1lc3NhZ2Ugb3IgcmVwcmVzZW50YXRpb24gaW4gdGhlIHJlc3BvbnNlIG1lc3NhZ2UncyBib2R5LiBBbiBBUEkgbWF5IGFsc28gc2VuZCAyMDQgaW4gY29uanVuY3Rpb24gd2l0aCBhIEdFVCByZXF1ZXN0IHRvIGluZGljYXRlIHRoYXQgdGhlIHJlcXVlc3RlZCByZXNvdXJjZSBleGlzdHMsIGJ1dCBoYXMgbm8gc3RhdGUgcmVwcmVzZW50YXRpb24gdG8gaW5jbHVkZSBpbiB0aGUgYm9keS4gSWYgdGhlIGNsaWVudCBpcyBhIHVzZXIgYWdlbnQsIGl0IFNIT1VMRCBOT1QgY2hhbmdlIGl0cyBkb2N1bWVudCB2aWV3IGZyb20gdGhhdCB3aGljaCBjYXVzZWQgdGhlIHJlcXVlc3QgdG8gYmUgc2VudC4gVGhpcyByZXNwb25zZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgdG8gYWxsb3cgaW5wdXQgZm9yIGFjdGlvbnMgdG8gdGFrZSBwbGFjZSB3aXRob3V0IGNhdXNpbmcgYSBjaGFuZ2UgdG8gdGhlIHVzZXIgYWdlbnQncyBhY3RpdmUgZG9jdW1lbnQgdmlldy4gSG93ZXZlciwgYW55IG5ldyBvciB1cGRhdGVkIG1ldGFpbmZvcm1hdGlvbiBTSE9VTEQgYmUgYXBwbGllZCB0byB0aGUgZG9jdW1lbnQgY3VycmVudGx5IGluIHRoZSB1c2VyIGFnZW50J3MgZHluYW1pYyB2aWV3LiBUaGUgMjA0IHJlc3BvbnNlIE1VU1QgTk9UIGluY2x1ZGUgYSBtZXNzYWdlLWJvZHkgYW5kIHRodXMgaXMgYWx3YXlzIHRlcm1pbmF0ZWQgYnkgdGhlIGZpcnN0IGVtcHR5IGxpbmUgYWZ0ZXIgdGhlIGhlYWRlciBmaWVsZHMuCiogKiozMDEgKE1vdmVkIFBlcm1hbmVudGx5KSoqIFRoZSAzMDEgc3RhdHVzIGNvZGUgaW5kaWNhdGVzIHRoYXQgdGhlIFJFU1QgQVBJJ3MgcmVzb3VyY2UgbW9kZWwgaGFzIGJlZW4gc2lnbmlmaWNhbnRseSByZWRlc2lnbmVkLCBhbmQgYSBuZXcgcGVybWFuZW50IFVSSSBoYXMgYmVlbiBhc3NpZ25lZCB0byB0aGUgY2xpZW50J3MgcmVxdWVzdGVkIHJlc291cmNlLiBUaGUgUkVTVCBBUEkgc2hvdWxkIHNwZWNpZnkgdGhlIG5ldyBVUkkgaW4gdGhlIHJlc3BvbnNlJ3MgTG9jYXRpb24gaGVhZGVyLCBhbmQgYWxsIGZ1dHVyZSByZXF1ZXN0cyBzaG91bGQgYmUgZGlyZWN0ZWQgdG8gdGhlIGdpdmVuIFVSSS4gWW91IHdpbGwgaGFyZGx5IHVzZSB0aGlzIHJlc3BvbnNlIGNvZGUgaW4geW91ciBBUEkgYXMgeW91IGNhbiBhbHdheXMgdXNlIHRoZSBBUEkgdmVyc2lvbmluZyBmb3IgdGhlIG5ldyBBUEkgd2hpbGUgcmV0YWluaW5nIHRoZSBvbGQgb25lLgoqICoqMzAyIChGb3VuZCkqKiBUaGUgSFRUUCByZXNwb25zZSBzdGF0dXMgY29kZSAzMDIgRm91bmQgaXMgYSBjb21tb24gd2F5IG9mIHBlcmZvcm1pbmcgVVJMIHJlZGlyZWN0aW9uLiBBbiBIVFRQIHJlc3BvbnNlIHdpdGggdGhpcyBzdGF0dXMgY29kZSB3aWxsIGFkZGl0aW9uYWxseSBwcm92aWRlIGEgVVJMIGluIHRoZSBMb2NhdGlvbiBoZWFkZXIgZmllbGQuIFRoZSB1c2VyIGFnZW50IChlLmcuLCBhIHdlYiBicm93c2VyKSBpcyBpbnZpdGVkIGJ5IGEgcmVzcG9uc2Ugd2l0aCB0aGlzIGNvZGUgdG8gbWFrZSBhIHNlY29uZC4gT3RoZXJ3aXNlIGlkZW50aWNhbCwgcmVxdWVzdCB0byB0aGUgbmV3IFVSTCBzcGVjaWZpZWQgaW4gdGhlIGxvY2F0aW9uIGZpZWxkLiBNYW55IHdlYiBicm93c2VycyBpbXBsZW1lbnRlZCB0aGlzIGNvZGUgaW4gYSBtYW5uZXIgdGhhdCB2aW9sYXRlZCB0aGlzIHN0YW5kYXJkLCBjaGFuZ2luZyB0aGUgcmVxdWVzdCB0eXBlIG9mIHRoZSBuZXcgcmVxdWVzdCB0byBHRVQsIHJlZ2FyZGxlc3Mgb2YgdGhlIHR5cGUgZW1wbG95ZWQgaW4gdGhlIG9yaWdpbmFsIHJlcXVlc3QgKGUuZy4sIFBPU1QpLiBSRkMgMTk0NSBhbmQgUkZDIDIwNjggc3BlY2lmeSB0aGF0IHRoZSBjbGllbnQgaXMgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBtZXRob2Qgb24gdGhlIHJlZGlyZWN0ZWQgcmVxdWVzdC4gVGhlIHN0YXR1cyBjb2RlcyAzMDMgYW5kIDMwNyBoYXZlIGJlZW4gYWRkZWQgZm9yIHNlcnZlcnMgdGhhdCB3aXNoIHRvIG1ha2UgdW5hbWJpZ3VvdXNseSBjbGVhciB3aGljaCBraW5kIG9mIHJlYWN0aW9uIGlzIGV4cGVjdGVkIG9mIHRoZSBjbGllbnQuCiogKiozMDMgKFNlZSBPdGhlcikqKiBBIDMwMyByZXNwb25zZSBpbmRpY2F0ZXMgdGhhdCBhIGNvbnRyb2xsZXIgcmVzb3VyY2UgaGFzIGZpbmlzaGVkIGl0cyB3b3JrLCBidXQgaW5zdGVhZCBvZiBzZW5kaW5nIGEgcG90ZW50aWFsbHkgdW53YW50ZWQgcmVzcG9uc2UgYm9keSwgaXQgc2VuZHMgdGhlIGNsaWVudCB0aGUgVVJJIG9mIGEgcmVzcG9uc2UgcmVzb3VyY2UuIFRoZSByZXNwb25zZSBjYW4gYmUgdGhlIFVSSSBvZiB0aGUgdGVtcG9yYXJ5IHN0YXR1cyBtZXNzYWdlLCBvciB0aGUgVVJJIHRvIHNvbWUgYWxyZWFkeSBleGlzdGluZywgbW9yZSBwZXJtYW5lbnQsIHJlc291cmNlLiBHZW5lcmFsbHkgc3BlYWtpbmcsIHRoZSAzMDMgc3RhdHVzIGNvZGUgYWxsb3dzIGEgUkVTVCBBUEkgdG8gc2VuZCBhIHJlZmVyZW5jZSB0byBhIHJlc291cmNlIHdpdGhvdXQgZm9yY2luZyB0aGUgY2xpZW50IHRvIGRvd25sb2FkIGl0cyBzdGF0ZS4gSW5zdGVhZCwgdGhlIGNsaWVudCBtYXkgc2VuZCBhIEdFVCByZXF1ZXN0IHRvIHRoZSB2YWx1ZSBvZiB0aGUgTG9jYXRpb24gaGVhZGVyLiBUaGUgMzAzIHJlc3BvbnNlIE1VU1QgTk9UIGJlIGNhY2hlZCwgYnV0IHRoZSByZXNwb25zZSB0byB0aGUgc2Vjb25kIChyZWRpcmVjdGVkKSByZXF1ZXN0IG1pZ2h0IGJlIGNhY2hlYWJsZS4KKiAqKjMwNCAoTm90IE1vZGlmaWVkKSoqIFRoaXMgc3RhdHVzIGNvZGUgaXMgc2ltaWxhciB0byAyMDQgKCJObyBDb250ZW50IikgaW4gdGhhdCB0aGUgcmVzcG9uc2UgYm9keSBtdXN0IGJlIGVtcHR5LiBUaGUgY3JpdGljYWwgZGlzdGluY3Rpb24gaXMgdGhhdCAyMDQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gc2VuZCBpbiB0aGUgYm9keSwgd2hlcmVhcyAzMDQgaXMgdXNlZCB3aGVuIHRoZSByZXNvdXJjZSBoYXMgbm90IGJlZW4gbW9kaWZpZWQgc2luY2UgdGhlIHZlcnNpb24gc3BlY2lmaWVkIGJ5IHRoZSByZXF1ZXN0IGhlYWRlcnMgSWYtTW9kaWZpZWQtU2luY2Ugb3IgSWYtTm9uZS1NYXRjaC4gSW4gc3VjaCBhIGNhc2UsIHRoZXJlIGlzIG5vIG5lZWQgdG8gcmV0cmFuc21pdCB0aGUgcmVzb3VyY2Ugc2luY2UgdGhlIGNsaWVudCBzdGlsbCBoYXMgYSBwcmV2aW91c2x5LWRvd25sb2FkZWQgY29weS4gVXNpbmcgdGhpcyBzYXZlcyBiYW5kd2lkdGggYW5kIHJlcHJvY2Vzc2luZyBvbiBib3RoIHRoZSBzZXJ2ZXIgYW5kIGNsaWVudCwgYXMgb25seSB0aGUgaGVhZGVyIGRhdGEgbXVzdCBiZSBzZW50IGFuZCByZWNlaXZlZCBpbiBjb21wYXJpc29uIHRvIHRoZSBlbnRpcmV0eSBvZiB0aGUgcGFnZSBiZWluZyByZS1wcm9jZXNzZWQgYnkgdGhlIHNlcnZlciwgdGhlbiBzZW50IGFnYWluIHVzaW5nIG1vcmUgYmFuZHdpZHRoIG9mIHRoZSBzZXJ2ZXIgYW5kIGNsaWVudC4KKiAqKjMwNyAoVGVtcG9yYXJ5IFJlZGlyZWN0KSoqIEEgMzA3IHJlc3BvbnNlIGluZGljYXRlcyB0aGF0IHRoZSBSRVNUIEFQSSBpcyBub3QgZ29pbmcgdG8gcHJvY2VzcyB0aGUgY2xpZW50J3MgcmVxdWVzdC4gSW5zdGVhZCwgdGhlIGNsaWVudCBzaG91bGQgcmVzdWJtaXQgdGhlIHJlcXVlc3QgdG8gdGhlIFVSSSBzcGVjaWZpZWQgYnkgdGhlIHJlc3BvbnNlIG1lc3NhZ2UncyBMb2NhdGlvbiBoZWFkZXIuIEhvd2V2ZXIsIGZ1dHVyZSByZXF1ZXN0cyBzaG91bGQgc3RpbGwgdXNlIHRoZSBvcmlnaW5hbCBVUkkuIEEgUkVTVCBBUEkgY2FuIHVzZSB0aGlzIHN0YXR1cyBjb2RlIHRvIGFzc2lnbiBhIHRlbXBvcmFyeSBVUkkgdG8gdGhlIGNsaWVudCdzIHJlcXVlc3RlZCByZXNvdXJjZS4gRm9yIGV4YW1wbGUsIGEgMzA3IHJlc3BvbnNlIGNhbiBiZSB1c2VkIHRvIHNoaWZ0IGEgY2xpZW50IHJlcXVlc3Qgb3ZlciB0byBhbm90aGVyIGhvc3QuIFRoZSB0ZW1wb3JhcnkgVVJJIFNIT1VMRCBiZSBnaXZlbiBieSB0aGUgTG9jYXRpb24gZmllbGQgaW4gdGhlIHJlc3BvbnNlLiBVbmxlc3MgdGhlIHJlcXVlc3QgbWV0aG9kIHdhcyBIRUFELCB0aGUgZW50aXR5IG9mIHRoZSByZXNwb25zZSBTSE9VTEQgY29udGFpbiBhIHNob3J0IGh5cGVydGV4dCBub3RlIHdpdGggYSBoeXBlcmxpbmsgdG8gdGhlIG5ldyBVUkkocykuIElmIHRoZSAzMDcgc3RhdHVzIGNvZGUgaXMgcmVjZWl2ZWQgaW4gcmVzcG9uc2UgdG8gYSByZXF1ZXN0IG90aGVyIHRoYW4gYEdFVGAgb3IgYEhFQURgLCB0aGUgdXNlciBhZ2VudCBNVVNUIE5PVCBhdXRvbWF0aWNhbGx5IHJlZGlyZWN0IHRoZSByZXF1ZXN0IHVubGVzcyBpdCBjYW4gYmUgY29uZmlybWVkIGJ5IHRoZSB1c2VyLCBzaW5jZSB0aGlzIG1pZ2h0IGNoYW5nZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGUgcmVxdWVzdCB3YXMgaXNzdWVkLgoqICoqNDAwIChCYWQgUmVxdWVzdCkqKiA0MDAgaXMgdGhlIGdlbmVyaWMgY2xpZW50LXNpZGUgZXJyb3Igc3RhdHVzLCB1c2VkIHdoZW4gbm8gb3RoZXIgNHh4IGVycm9yIGNvZGUgaXMgYXBwcm9wcmlhdGUuIEVycm9ycyBjYW4gYmUgbGlrZSBtYWxmb3JtZWQgcmVxdWVzdCBzeW50YXgsIGludmFsaWQgcmVxdWVzdCBtZXNzYWdlIHBhcmFtZXRlcnMsIG9yIGRlY2VwdGl2ZSByZXF1ZXN0IHJvdXRpbmcgZXRjLiBUaGUgY2xpZW50IFNIT1VMRCBOT1QgcmVwZWF0IHRoZSByZXF1ZXN0IHdpdGhvdXQgbW9kaWZpY2F0aW9ucy4KKiAqKjQwMSAoVW5hdXRob3JpemVkKSoqIEEgNDAxIGVycm9yIHJlc3BvbnNlIGluZGljYXRlcyB0aGF0IHRoZSBjbGllbnQgdHJpZWQgdG8gb3BlcmF0ZSBvbiBhIHByb3RlY3RlZCByZXNvdXJjZSB3aXRob3V0IHByb3ZpZGluZyB0aGUgcHJvcGVyIGF1dGhvcml6YXRpb24uIEl0IG1heSBoYXZlIHByb3ZpZGVkIHRoZSB3cm9uZyBjcmVkZW50aWFscyBvciBub25lIGF0IGFsbC4gVGhlIHJlc3BvbnNlIG11c3QgaW5jbHVkZSBhIFdXVy1BdXRoZW50aWNhdGUgaGVhZGVyIGZpZWxkIGNvbnRhaW5pbmcgYSBjaGFsbGVuZ2UgYXBwbGljYWJsZSB0byB0aGUgcmVxdWVzdGVkIHJlc291cmNlLiBUaGUgY2xpZW50IE1BWSByZXBlYXQgdGhlIHJlcXVlc3Qgd2l0aCBhIHN1aXRhYmxlIEF1dGhvcml6YXRpb24gaGVhZGVyIGZpZWxkLiBJZiB0aGUgcmVxdWVzdCBhbHJlYWR5IGluY2x1ZGVkIEF1dGhvcml6YXRpb24gY3JlZGVudGlhbHMsIHRoZW4gdGhlIDQwMSByZXNwb25zZSBpbmRpY2F0ZXMgdGhhdCBhdXRob3JpemF0aW9uIGhhcyBiZWVuIHJlZnVzZWQgZm9yIHRob3NlIGNyZWRlbnRpYWxzLiBJZiB0aGUgNDAxIHJlc3BvbnNlIGNvbnRhaW5zIHRoZSBzYW1lIGNoYWxsZW5nZSBhcyB0aGUgcHJpb3IgcmVzcG9uc2UsIGFuZCB0aGUgdXNlciBhZ2VudCBoYXMgYWxyZWFkeSBhdHRlbXB0ZWQgYXV0aGVudGljYXRpb24gYXQgbGVhc3Qgb25jZSwgdGhlbiB0aGUgdXNlciBTSE9VTEQgYmUgcHJlc2VudGVkIHRoZSBlbnRpdHkgdGhhdCB3YXMgZ2l2ZW4gaW4gdGhlIHJlc3BvbnNlLCBzaW5jZSB0aGF0IGVudGl0eSBtaWdodCBpbmNsdWRlIHJlbGV2YW50IGRpYWdub3N0aWMgaW5mb3JtYXRpb24uCiogKio0MDMgKEZvcmJpZGRlbikqKiBBIDQwMyBlcnJvciByZXNwb25zZSBpbmRpY2F0ZXMgdGhhdCB0aGUgY2xpZW50J3MgcmVxdWVzdCBpcyBmb3JtZWQgY29ycmVjdGx5LCBidXQgdGhlIFJFU1QgQVBJIHJlZnVzZXMgdG8gaG9ub3IgaXQsIGkuZS4sIHRoZSB1c2VyIGRvZXMgbm90IGhhdmUgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9ucyBmb3IgdGhlIHJlc291cmNlLiBBIDQwMyByZXNwb25zZSBpcyBub3QgYSBjYXNlIG9mIGluc3VmZmljaWVudCBjbGllbnQgY3JlZGVudGlhbHM7IHRoYXQgd291bGQgYmUgNDAxICgiVW5hdXRob3JpemVkIikuIEF1dGhlbnRpY2F0aW9uIHdpbGwgbm90IGhlbHAsIGFuZCB0aGUgcmVxdWVzdCBTSE9VTEQgTk9UIGJlIHJlcGVhdGVkLiBVbmxpa2UgYSA0MDEgVW5hdXRob3JpemVkIHJlc3BvbnNlLCBhdXRoZW50aWNhdGluZyB3aWxsIG1ha2Ugbm8gZGlmZmVyZW5jZS4KKiAqKjQwNCAoTm90IEZvdW5kKSoqIFRoZSA0MDQgZXJyb3Igc3RhdHVzIGNvZGUgaW5kaWNhdGVzIHRoYXQgdGhlIFJFU1QgQVBJIGNhbid0IG1hcCB0aGUgY2xpZW50J3MgVVJJIHRvIGEgcmVzb3VyY2UgYnV0IG1heSBiZSBhdmFpbGFibGUgaW4gdGhlIGZ1dHVyZS4gU3Vic2VxdWVudCByZXF1ZXN0cyBieSB0aGUgY2xpZW50IGFyZSBwZXJtaXNzaWJsZS4gTm8gaW5kaWNhdGlvbiBpcyBnaXZlbiBvZiB3aGV0aGVyIHRoZSBjb25kaXRpb24gaXMgdGVtcG9yYXJ5IG9yIHBlcm1hbmVudC4gVGhlIDQxMCAoR29uZSkgc3RhdHVzIGNvZGUgU0hPVUxEIGJlIHVzZWQgaWYgdGhlIHNlcnZlciBrbm93cywgdGhyb3VnaCBzb21lIGludGVybmFsbHkgY29uZmlndXJhYmxlIG1lY2hhbmlzbSwgdGhhdCBhbiBvbGQgcmVzb3VyY2UgaXMgcGVybWFuZW50bHkgdW5hdmFpbGFibGUgYW5kIGhhcyBubyBmb3J3YXJkaW5nIGFkZHJlc3MuIFRoaXMgc3RhdHVzIGNvZGUgaXMgY29tbW9ubHkgdXNlZCB3aGVuIHRoZSBzZXJ2ZXIgZG9lcyBub3Qgd2lzaCB0byByZXZlYWwgZXhhY3RseSB3aHkgdGhlIHJlcXVlc3QgaGFzIGJlZW4gcmVmdXNlZCwgb3Igd2hlbiBubyBvdGhlciByZXNwb25zZSBpcyBhcHBsaWNhYmxlLgoqICoqNDA1IChNZXRob2QgTm90IEFsbG93ZWQpKiogVGhlIEFQSSByZXNwb25kcyB3aXRoIGEgNDA1IGVycm9yIHRvIGluZGljYXRlIHRoYXQgdGhlIGNsaWVudCB0cmllZCB0byB1c2UgYW4gSFRUUCBtZXRob2QgdGhhdCB0aGUgcmVzb3VyY2UgZG9lcyBub3QgYWxsb3cuIEZvciBpbnN0YW5jZSwgYSByZWFkLW9ubHkgcmVzb3VyY2UgY291bGQgc3VwcG9ydCBvbmx5IEdFVCBhbmQgSEVBRCwgd2hpbGUgYSBjb250cm9sbGVyIHJlc291cmNlIG1pZ2h0IGFsbG93IEdFVCBhbmQgUE9TVCwgYnV0IG5vdCBQVVQgb3IgREVMRVRFLiBBIDQwNSByZXNwb25zZSBtdXN0IGluY2x1ZGUgdGhlIEFsbG93IGhlYWRlciwgd2hpY2ggbGlzdHMgdGhlIEhUVFAgbWV0aG9kcyB0aGF0IHRoZSByZXNvdXJjZSBzdXBwb3J0cy4gRm9yIGV4YW1wbGU6IEFsbG93OiBHRVQsIFBPU1QKKiAqKjQwNiAoTm90IEFjY2VwdGFibGUpKiogVGhlIDQwNiBlcnJvciByZXNwb25zZSBpbmRpY2F0ZXMgdGhhdCB0aGUgQVBJIGlzIG5vdCBhYmxlIHRvIGdlbmVyYXRlIGFueSBvZiB0aGUgY2xpZW50J3MgcHJlZmVycmVkIG1lZGlhIHR5cGVzLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIEFjY2VwdCByZXF1ZXN0IGhlYWRlci4gRm9yIGV4YW1wbGUsIGEgY2xpZW50IHJlcXVlc3QgZm9yIGRhdGEgZm9ybWF0dGVkIGFzIGBhcHBsaWNhdGlvbi94bWxgIHdpbGwgcmVjZWl2ZSBhIDQwNiByZXNwb25zZSBpZiB0aGUgQVBJIGlzIG9ubHkgd2lsbGluZyB0byBmb3JtYXQgZGF0YSBhcyBgYXBwbGljYXRpb24vanNvbmAuIElmIHRoZSByZXNwb25zZSBjb3VsZCBiZSB1bmFjY2VwdGFibGUsIGEgdXNlciBhZ2VudCBTSE9VTEQgdGVtcG9yYXJpbHkgc3RvcCByZWNlaXB0IG9mIG1vcmUgZGF0YSBhbmQgcXVlcnkgdGhlIHVzZXIgZm9yIGEgZGVjaXNpb24gb24gZnVydGhlciBhY3Rpb25zLgoqICoqNDEyIChQcmVjb25kaXRpb24gRmFpbGVkKSoqIFRoZSA0MTIgZXJyb3IgcmVzcG9uc2UgaW5kaWNhdGVzIHRoYXQgdGhlIGNsaWVudCBzcGVjaWZpZWQgb25lIG9yIG1vcmUgcHJlY29uZGl0aW9ucyBpbiBpdHMgcmVxdWVzdCBoZWFkZXJzLCBlZmZlY3RpdmVseSB0ZWxsaW5nIHRoZSBSRVNUIEFQSSB0byBjYXJyeSBvdXQgaXRzIHJlcXVlc3Qgb25seSBpZiBjZXJ0YWluIGNvbmRpdGlvbnMgd2VyZSBtZXQuIEEgNDEyIHJlc3BvbnNlIGluZGljYXRlcyB0aGF0IHRob3NlIGNvbmRpdGlvbnMgd2VyZSBub3QgbWV0LCBzbyBpbnN0ZWFkIG9mIGNhcnJ5aW5nIG91dCB0aGUgcmVxdWVzdCwgdGhlIEFQSSBzZW5kcyB0aGlzIHN0YXR1cyBjb2RlLgoqICoqNDE1IChVbnN1cHBvcnRlZCBNZWRpYSBUeXBlKSoqIFRoZSA0MTUgZXJyb3IgcmVzcG9uc2UgaW5kaWNhdGVzIHRoYXQgdGhlIEFQSSBpcyBub3QgYWJsZSB0byBwcm9jZXNzIHRoZSBjbGllbnQncyBzdXBwbGllZCBtZWRpYSB0eXBlLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIENvbnRlbnQtVHlwZSByZXF1ZXN0IGhlYWRlci4gRm9yIGV4YW1wbGUsIGEgY2xpZW50IHJlcXVlc3QgaW5jbHVkaW5nIGRhdGEgZm9ybWF0dGVkIGFzIGBhcHBsaWNhdGlvbi94bWxgIHdpbGwgcmVjZWl2ZSBhIDQxNSByZXNwb25zZSBpZiB0aGUgQVBJIGlzIG9ubHkgd2lsbGluZyB0byBwcm9jZXNzIGRhdGEgZm9ybWF0dGVkIGFzIGBhcHBsaWNhdGlvbi9qc29uYC4gRm9yIGV4YW1wbGUsIHRoZSBjbGllbnQgdXBsb2FkcyBhbiBpbWFnZSBhcyBpbWFnZS9zdmcreG1sLCBidXQgdGhlIHNlcnZlciByZXF1aXJlcyB0aGF0IGltYWdlcyB1c2UgYSBkaWZmZXJlbnQgZm9ybWF0LgoqICoqNTAwIChJbnRlcm5hbCBTZXJ2ZXIgRXJyb3IpKiogNTAwIGlzIHRoZSBnZW5lcmljIFJFU1QgQVBJIGVycm9yIHJlc3BvbnNlLiBNb3N0IHdlYiBmcmFtZXdvcmtzIGF1dG9tYXRpY2FsbHkgcmVzcG9uZCB3aXRoIHRoaXMgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgd2hlbmV2ZXIgdGhleSBleGVjdXRlIHNvbWUgcmVxdWVzdCBoYW5kbGVyIGNvZGUgdGhhdCByYWlzZXMgYW4gZXhjZXB0aW9uLiBBIDUwMCBlcnJvciBpcyBuZXZlciB0aGUgY2xpZW50J3MgZmF1bHQsIGFuZCB0aGVyZWZvcmUsIGl0IGlzIHJlYXNvbmFibGUgZm9yIHRoZSBjbGllbnQgdG8gcmV0cnkgdGhlIHNhbWUgcmVxdWVzdCB0aGF0IHRyaWdnZXJlZCB0aGlzIHJlc3BvbnNlIGFuZCBob3BlIHRvIGdldCBhIGRpZmZlcmVudCByZXNwb25zZS4gVGhlIEFQSSByZXNwb25zZSBpcyB0aGUgZ2VuZXJpYyBlcnJvciBtZXNzYWdlLCBnaXZlbiB3aGVuIGFuIHVuZXhwZWN0ZWQgY29uZGl0aW9uIHdhcyBlbmNvdW50ZXJlZCBhbmQgbm8gbW9yZSBzcGVjaWZpYyBtZXNzYWdlIGlzIHN1aXRhYmxlLgoqICoqNTAxIChOb3QgSW1wbGVtZW50ZWQpKiogVGhlIHNlcnZlciBlaXRoZXIgZG9lcyBub3QgcmVjb2duaXplIHRoZSByZXF1ZXN0IG1ldGhvZCwgb3IgaXQgY2Fubm90IGZ1bGZpbGwgdGhlIHJlcXVlc3QuIFVzdWFsbHksIHRoaXMgaW1wbGllcyBmdXR1cmUgYXZhaWxhYmlsaXR5IChlLmcuLCBhIG5ldyBmZWF0dXJlIG9mIGEgd2ViLXNlcnZpY2UgQVBJKS4KCiMjIyBIb3cgaXQgV29ya3MKCldlIHVzZSBWdWUgMyB3aXRoIHRoZSBDb21wb3NpdGlvbiBBUEkgdG8gcHJvdmlkZSBhbiBlbnRpcmUgd2Vic2l0ZS9hcHBsaWNhdGlvbiBpbiBhIHNpbmdsZSBwYWdlLiAgVGhpcyBpcyBkb25lIHVzaW5nIGEgY29tYmluYXRpb24gb2YgVnVlIFNGQydzIChTaW5nbGUgRmlsZSBDb21wb25lbnRzKSB3aGljaCBhbmQgdGhlIFZ1ZSBSb3V0ZXIgdG8gY2hhbmdlIHRoZSB1cmwgaW4gdGhlIGJyb3dzZXIgd2l0aG91dCBhY3R1YWxseSBuYXZpZ2F0aW5nIHRvIGEgbmV3IHBhZ2UuCgpWYXJpYWJsZXMgYXJlIG1vc3RseSBoYW5kbGVkIGJ5IHJlZmVyZW5jZSAobGlrZSBhIHBvaW50ZXIpLiAgVGhpcyBhbGxvd3MgdXMgdG8gcGFzcyBhcm91bmQgdmFyaWFibGVzIHRoYXQgYXJlIHVrZXB0IHVwIHRvIGRhdGUgd2hlbiBjaGFuZ2VkIGluIG90aGVyIHNlY3Rpb25zIG9mIHRoZSBzaXRlLgoKIyMjIyBDb3JlIEZ1bmN0aW9uYWxpdHkKClRoZXNlIGFyZSB0aGUgbGlicyB3aGljaCBwb3dlciB0aGUgbWFqb3JpdHkgb2YgdGhlIHNpdGVzIGZ1bmN0aW9uYWxpdHkuICBZb3Ugc2hvdWxkIGF0IGxlYXN0IGJyZWlmbHkgcmVhZCBvcHZlciBlYWNoIG9mIHRoZW0uCgoqIFsqKlZ1ZSAzKipdKGh0dHBzOi8vdnVlanMub3JnL2d1aWRlL2ludHJvZHVjdGlvbi5odG1sKSBpcyB0aGUgKipUZW1wbGF0ZSBFbmdpbmUqKiB3aXRoIGFsbCB0aGUgbW9kZXJuIGJlbGxzIGFuZCB3aGlzdGxlcyBsaWtlIGF1dG9tYXRpY2FsbHkgdXBkYXRpbmcgdGhlIGRpc3BsYXkgcmVuZGVyIGFzIGRhdGEgY2hhbmdlcy4KKiBbKipQaW5pYSoqXShodHRwczovL3BpbmlhLnZ1ZWpzLm9yZy9pbnRyb2R1Y3Rpb24uaHRtbCkgaXMgdXNlZCB0byBwcm92aWRlICoqRGF0YSBTdG9yZXMqKiB3aGljaCBhbGxvdyB1cyB0byBsb2FkIGRhdGEgdGhhdCBpcyByZXVzYWJsZSBiZXR3ZWVuIHBhZ2VzIHdpdGhvdXQgaGF2aW5nIHRvIHJlbG9hZCB0aGUgZGF0YS4KKiBbKipWdWUgUm91dGVyKipdKGh0dHBzOi8vcm91dGVyLnZ1ZWpzLm9yZy9pbnN0YWxsYXRpb24uaHRtbCkgaXMgdXNlZCBmb3IgKipSb3V0aW5nKiogdG8gdHJpZ2dlciBjYWxsaW5nIHBhZ2VzIGJhc2VkIG9uIHRoZSB1cmwgd2hpbGUgYWxsIGJlaW5nIGluIGEgc2luZ2xlIHBhZ2UpLgoKIyMjIyBBZGRpdGlvbmFsIEZ1bmN0aW9uYWxpdHkKClRoaXMgc3R1ZmYgcHJvdmlkZXMgZ29vZCBmZWF0dXJlcyBidXQgZG9lcyBub3QgcmVxdWlyZSB5b3UgdG8gcmVhbGx5IGJlIGZhbWlpYXIgd2l0aCBpdC4gIFNraXAgb3ZlciB0aGVzZSB1bmxlc3MgeW91IGZpbmQgeW91IG5lZWQgdG8ga25vdyBtb3JlIGFib3V0IG9uZSBvZiB0aGVtIGZvciBzb21lIHJlYXNvbi4KCiogWyoqVml0ZSoqXShodHRwczovL3ZpdGVqcy5kZXYvZ3VpZGUvKSBpcyBvdXIgKipGcm9udGVuZCBUb29saW5nKiogc3lzdGVtIHdoaWNoIHByb3ZpZGVzIGEgbmljZSBkZXYgc2V0dXAgYW5kIGhhbmRsZXMgYnVpbGRpbmcgdGhlIHByb2plY3QgZm9yIHByb2R1Y3Rpb24gdXNlLgoqIFsqKlZpdGUgUFdBKipdKGh0dHBzOi8vdml0ZS1wd2Etb3JnLm5ldGxpZnkuYXBwL2d1aWRlLykgYXV0b21hdGljYWxseSBnZW5lcmF0ZXMgdGhlIHRoZSBmaWxlcyBuZWVkZWQgc28gd2UgYXJlIGEgWyoqUFdBKipdKGh0dHBzOi8vd2ViLmRldi9sZWFybi9wd2EvKSAoKipQcm9ncmVzc2l2ZSBXZWIgQXBwKiopLgoqIFsqKkVsZWN0cm9uKipdKGh0dHBzOi8vd3d3LmVsZWN0cm9uanMub3JnLykgYWxsb3dzIHVzIHRvIGJ1aWxkIGEgKipEZXNrdG9wIEFwcCoqIGZvciBtYWNPUywgV2luZG93cywgTGludXgsIGFzIHdlbGwgYXMgTW9iaWxlIERldmljZSB2ZXJzaW9ucy4KKiBbKipFU0xpbnQqKl0oaHR0cHM6Ly9lc2xpbnQub3JnLykgaXMgb3VyICoqTGludGVyKiogd2hpY2ggY2FuIGRldGVjdCBhIHdpZGUgcmFuZ2Ugb2YgcHJvYmxlbXMgeW91ciBjb2RlLgoqIFsqKlByZXR0aWVyKipdKGh0dHBzOi8vcHJldHRpZXIuaW8vKSBpcyBvdXIgKipDb2RlIEZvcm1hdHRlcioqIGFsbG93aW5nIGF1dG9tYXRpYyBmb3JtYXR0aW5nIG9mIGNvZGUgYmFzZWQgb24gb3VyIHNldCBvZiBwcmVkZWZpbmVkIHJ1bGVzLgoqIFsqKlZpdGVzdCoqXShodHRwczovL3ZpdGVzdC5kZXYvZ3VpZGUvKSBpcyBvdXIgKipVbml0IFRlc3RpbmcqKiBmcmFtZXdvcmsuCiogWyoqVmVlVmFsaWRhdGUqKl0oaHR0cHM6Ly92ZWUtdmFsaWRhdGUubG9nYXJldG0uY29tL3Y0L2d1aWRlL292ZXJ2aWV3LykgaXMgaW5zdGFsbGVkIGZvciAqKkZvcm0gVmFsaWRhdGlvbioqCiogWyoqVnVlLWkxOG4qKl0oaHR0cHM6Ly92dWUtaTE4bi5pbnRsaWZ5LmRldi9ndWlkZS9pbnRyb2R1Y3Rpb24uaHRtbCkgaXMgb3VyICoqVHJhbnNsYXRpb24qKiBsaWIuCgojIyMjIEluc3BlY3RpbmcgYW5kIERlYnVnZ2luZyBUaGUgTGl2ZSBEYXRhCgpUaGVyZSBhcmUgc2V2ZXJhbCBEZXZlbG9wZXIgQ29uc29sZSB0eXBlIGludGVyZmFjZXMgc2V0dXAgd2hpY2ggd2UgY2FuIHVzZSB0byB2aWV3IGFuZCBtb2RpZnkgdGhlIGxpdmUgdmFyaWFibGVzIGdlbmVyYXRpbmcgdGhlIHNpdGUuCgpCcm93c2VyIEV4dGVuc2lvbiBbVnVlIERldnRvb2xzXShodHRwczovL2RldnRvb2xzLnZ1ZWpzLm9yZy9ndWlkZS9pbnN0YWxsYXRpb24uaHRtbCkKIVt2dWUtZGV2dG9vbHMtZXh0ZW5zaW9uXShodHRwczovL2dpdGh1Yi5jb20vZGV0YWluL215YWRtaW4tY2xpZW50LXZ1ZS9hc3NldHMvMTM2NDUwNC81MzZlMDViZS05NjUzLTQzZmYtYWNjZS0yYjIwODBmNzZhOTQpCgpUaGUgb3RoZXIgd2F5IGlzCiFbdnVlLWRldnRvb2xzLXBvcHVwXShodHRwczovL2dpdGh1Yi5jb20vZGV0YWluL215YWRtaW4tY2xpZW50LXZ1ZS9hc3NldHMvMTM2NDUwNC85YjUwMmE2OS0wOWM0LTQ4YjctYWM4OC0yZmU1MGQ0YWIxNWMpCgojIyBSZWNvbW1lbmRlZCBJREUgU2V0dXAKCltWU0NvZGVdKGh0dHBzOi8vY29kZS52aXN1YWxzdHVkaW8uY29tLykgKyBbVm9sYXJdKGh0dHBzOi8vbWFya2V0cGxhY2UudmlzdWFsc3R1ZGlvLmNvbS9pdGVtcz9pdGVtTmFtZT1WdWUudm9sYXIpIChhbmQgZGlzYWJsZSBWZXR1cikgKyBbVHlwZVNjcmlwdCBWdWUgUGx1Z2luIChWb2xhcildKGh0dHBzOi8vbWFya2V0cGxhY2UudmlzdWFsc3R1ZGlvLmNvbS9pdGVtcz9pdGVtTmFtZT1WdWUudnNjb2RlLXR5cGVzY3JpcHQtdnVlLXBsdWdpbikuCgojIyBDdXN0b21pemUgY29uZmlndXJhdGlvbgoKU2VlIFtWaXRlIENvbmZpZ3VyYXRpb24gUmVmZXJlbmNlXShodHRwczovL3ZpdGVqcy5kZXYvY29uZmlnLykuCgojIyBQcm9qZWN0IFNldHVwCgpgYGBzaApucG0gaW5zdGFsbApgYGAKCiMjIyBDb21waWxlIGFuZCBIb3QtUmVsb2FkIGZvciBEZXZlbG9wbWVudAoKYGBgc2gKbnBtIHJ1biBkZXYKYGBgCgojIyMgQ29tcGlsZSBhbmQgTWluaWZ5IGZvciBQcm9kdWN0aW9uCgpgYGBzaApucG0gcnVuIGJ1aWxkCmBgYAoKIyMjIExpbnQgd2l0aCBbRVNMaW50XShodHRwczovL2VzbGludC5vcmcvKQoKYGBgc2gKbnBtIHJ1biBsaW50CmBgYAo= + readmeEtag: '"a282a301b9d93f92cc25f09e6e7d69a81856805f75014ee5686ab085bd7e04ae"' + readmeLastModified: Wed, 13 Dec 2023 17:24:05 GMT repositoryId: 614741193 description: MyAdmin Vue3 Client Frontend created: '2023-03-16T08:15:57Z' @@ -24120,7 +24120,7 @@ forks: 0 owner: detain logo: https://avatars.githubusercontent.com/u/1364504?v=4 - repoEtag: '"71eb1030bd8952d721152f45829e507c8e9747433d1f38d29ec3f89aa8becbda"' + repoEtag: '"fbba723b49e7b7d3809b78d31ca893fb47dbbd58e8b4d9f0c734fe2e9bec03f6"' repoLastModified: Fri, 28 Apr 2023 04:23:19 GMT category: - SDK @@ -25715,7 +25715,7 @@ owner: hiroyoshii logo: https://avatars.githubusercontent.com/u/40140638?v=4 license: Apache-2.0 - repoEtag: '"61b60fe645a98661103e9846e801bc8fe4ee75049b0e3e7375c4bd737a5b8aa4"' + repoEtag: '"63ffac58e8078ab09fb0a64da3eeaf2bf86e0c5b44b202f34a19c2868202e705"' repoLastModified: Sat, 02 Sep 2023 16:28:12 GMT category: Server Implementations foundInMaster: true @@ -26346,7 +26346,7 @@ owner: protung logo: https://avatars.githubusercontent.com/u/81255167?v=4 license: MIT - repoEtag: '"728c50b6d939c1f5d0e586d214a3785dd147aa4c9bd0bb59a68274a794ff10f5"' + repoEtag: '"94bb2bb6370f302fffc7c034faf1494a59374640aa29219bf8010ecb63fa51f7"' repoLastModified: Fri, 16 Dec 2022 13:24:18 GMT category: - Server @@ -31264,7 +31264,7 @@ owner: interserver logo: https://avatars.githubusercontent.com/u/29833539?v=4 license: MIT - repoEtag: '"b3b08f8698ff48a8bd50516a105a0a9524d4b5c486da4f26cceb6c1a5f4494f3"' + repoEtag: '"34201c24500de348140593dc8180747fc6b1047137c45d1eec70500a831bd8a6"' repoLastModified: Tue, 08 Aug 2023 16:13:20 GMT category: Parsers foundInMaster: true @@ -32240,7 +32240,7 @@ forks: 0 owner: wasedatime logo: https://avatars.githubusercontent.com/u/32608719?v=4 - repoEtag: '"a7cbe08f32af2289f24b45a79d321759e5a9536bb63c1c7293b52343ab78d59b"' + repoEtag: '"84dafc9b775bde803c0b579ba088872c7a594f4313b0e6bb1a9bccc9119c57c2"' repoLastModified: Tue, 18 Jul 2023 09:13:10 GMT foundInMaster: true category: @@ -33167,7 +33167,7 @@ owner: openapistack logo: https://avatars.githubusercontent.com/u/147298423?v=4 license: MIT - repoEtag: '"3f8a7aacba62c44869be359937a88a0b2c0e51b83ed223ccb300cd24dbcb20f9"' + repoEtag: '"f39e4873b8f74e549ed54762f02aa5d778d5f6d88ff2dc1a78c269bc1ec11e42"' repoLastModified: Tue, 12 Dec 2023 23:42:47 GMT foundInMaster: true id: 13cdf61fc6370ba6543e5a21256c2dfb @@ -35856,11 +35856,11 @@ archived: false stars: 7286 watchers: 310 - forks: 2163 + forks: 2164 owner: swagger-api logo: https://avatars.githubusercontent.com/u/7658037?v=4 license: Apache-2.0 - repoEtag: '"ca576360ad38738e4f4947193eeb7fe4d1433e2c703646f0b1dfa46092a2ff34"' + repoEtag: '"666bc759454adf601fc4b13bad34fd4a32b1539921009c71e5ba204eec40764a"' repoLastModified: Mon, 11 Dec 2023 06:17:01 GMT id: 266d60df2d48ad8a47539de3c1071f3a - source: IMPLEMENTATIONS.md @@ -35893,7 +35893,7 @@ owner: microsoft logo: https://avatars.githubusercontent.com/u/6154722?v=4 license: MIT - repoEtag: '"38e27117d29db1111591e2d07fecd381b10ace45e15c2fd458795b0ef669b2c0"' + repoEtag: '"bd8fd5326189475054cdfd21beece3b52412f56f3de2e54a8884f3c3cc6885f3"' repoLastModified: Tue, 05 Dec 2023 18:08:55 GMT id: f3215034d64cfcbcc28a4bdb0205a075 - source: IMPLEMENTATIONS.md @@ -35965,7 +35965,7 @@ owner: char0n logo: https://avatars.githubusercontent.com/u/193286?v=4 license: Apache-2.0 - repoEtag: '"a01563155278232018a496bf7d667abd376e20a5df514df14e467b36a112f52c"' + repoEtag: '"f547c1fdefd7496a4642db10e9b96a2d27c7fd216ac8e541de416d5199816388"' repoLastModified: Wed, 02 Aug 2023 07:09:44 GMT foundInMaster: true - source: IMPLEMENTATIONS.md @@ -36193,17 +36193,17 @@ repositoryId: 30567860 description: Single file PHP script that adds a REST API to a SQL database created: '2015-02-10T01:08:52Z' - updated: '2023-12-11T14:09:08Z' + updated: '2023-12-13T22:56:24Z' language: PHP archived: false - stars: 3459 + stars: 3460 watchers: 179 - forks: 1030 + forks: 1031 owner: mevdschee logo: https://avatars.githubusercontent.com/u/1288217?v=4 license: MIT - repoEtag: '"7c912e344888378f22070465910b71eb294c6a7cecf1295c03221bcd05cdcc67"' - repoLastModified: Mon, 11 Dec 2023 14:09:08 GMT + repoEtag: '"24d7fa02ab20cd6dfddbdcd1185c17f1aafd75800c5fa359cd98c543d8880ed9"' + repoLastModified: Wed, 13 Dec 2023 22:56:24 GMT id: 84a7be428932f7789a8ad1a220b22216 - source: IMPLEMENTATIONS.md name: Fastify OpenAPI v3 @@ -37114,17 +37114,17 @@ LoopBack makes it easy to build modern API applications that require complex integrations. created: '2017-01-09T17:27:14Z' - updated: '2023-12-13T02:38:33Z' + updated: '2023-12-13T04:59:37Z' language: TypeScript archived: false - stars: 4698 + stars: 4699 watchers: 135 - forks: 1046 + forks: 1045 owner: loopbackio logo: https://avatars.githubusercontent.com/u/22173486?v=4 license: NOASSERTION - repoEtag: '"ac63ba116da410b5d6929baf5ac33456099529ad114764447c493ba8002e4b3a"' - repoLastModified: Wed, 13 Dec 2023 02:38:33 GMT + repoEtag: '"197a8a66d2b66364f57ba389f981b0c7be9ffe09fcdcbadfff6a5f98c62786ef"' + repoLastModified: Wed, 13 Dec 2023 04:59:37 GMT foundInMaster: true id: 9132c25ad468bed25b9dbbe3a352abc2 v3: true @@ -37196,17 +37196,17 @@ testing cloud services through their REST APIs and finding security and reliability bugs in these services. created: '2020-07-24T21:40:11Z' - updated: '2023-12-12T01:39:03Z' + updated: '2023-12-13T13:04:49Z' language: Python archived: false - stars: 2349 + stars: 2353 watchers: 36 forks: 270 owner: microsoft logo: https://avatars.githubusercontent.com/u/6154722?v=4 license: MIT - repoEtag: '"c1efb3bece0458697e9570af78b725b0a6a72c632e44d62e55a9f2a0c491275c"' - repoLastModified: Tue, 12 Dec 2023 01:39:03 GMT + repoEtag: '"b603e411513dc7a72518262c3d588dbcbb8fd195020c25ff366eb76158c59657"' + repoLastModified: Wed, 13 Dec 2023 13:04:49 GMT foundInMaster: true oldLocations: - https://github.com/microsoft/restler @@ -37936,7 +37936,7 @@ owner: vert-x3 logo: https://avatars.githubusercontent.com/u/8124623?v=4 license: Apache-2.0 - repoEtag: '"385a0b4da62a5170fe062c897aac2cb09dd337cee7e0c3eacdeb519769e90322"' + repoEtag: '"d22930647c7081737660edc50346446521c24b3aa5d9b44bf12cb853d56734e2"' repoLastModified: Tue, 12 Dec 2023 08:53:01 GMT foundInMaster: true v3_link: https://github.com/vert-x3/vertx-web/issues/1872