Reading Data

LEAD 2022-2024

2022 Camp

2022 Camp

Elo Camp 2022

Competitors = 28

#####_ Elo History _

Elo Accumulated 2022

2023

2023 First

Elo First 2023

-Competitors = 32-

* Capturando los futuros Sub16

* Los sub16 “salen”

#####_ Elo History _

Elo Accumulated First_2023

2023 Second

#####Elo Second 2023 -Competitors = 31-

#####_ Elo History _

Elo Accumulated Second_2023

2023 Third

Elo Third 2023

-Competitors = 30-

#####_ Elo History _

Elo Accumulated Third_2023

2023 Champ

Elo Camp 2023

-Competitors = 30-

#####_ Elo History _

Elo Accumulated Champ_2023

* Capturando los futuros Sub16

* Los sub16 “salen”

### ### ### ###

### at WORK ###

### ### ### ###

2024

2024 First

Elo First 2024

-Competitors = 30-

#####_ Elo History _

Elo Accumulated First_2024

2024 Second

Elo Second 2024

-Competitors = 29-

#####_ Elo History _

Elo Accumulated Second_2024

2024 Third

Elo Third 2024

-Competitors = 32-

#####_ Elo History _

Elo in time

Elo Accumulated Third_2024

competitor Team R.new Prob.Finals Prob.podium
Martina LÓPEZ CASADO FDMCLM 1080.80 58.8 % 52.5 %
Mònica JAUSET SABATER FEEC 1078.06 58.4 % 52.1 %
Victoria PEINADO FRANGANILLO FMM 1067.91 57 % 50.6 %
Júlia BORGES DEL VILLASANTE FEEC 1063.74 56.4 % 50 %
Martina LONDOÑO LOPEZ FDMCM 1059.63 55 % 48.5 %
Maia MARTINEZ GASOL FEEC 1055.33 52.6 % 48.9 %
Carlota MERLE GARCIA FEMPA 1047.52 54.1 % 47.7 %
Rebeca GARCÍA ALONSO FMM 1045.43 53.8 % 47.4 %
Eva MUNILL ASENSIO FEEC 1043.90 53.6 % 47.1 %
Danae VILLEGAS RODRÍGUEZ FCDME 1024.52 50.8 % 44.4 %
Júlia CHAVEZ FEXME 1022.11 72 % 56.9 %
Asha GUITART CHUNG FEEC 1019.10 50 % 43.6 %
Berta SAURA MOR FEMECV 1010.41 48.8 % 42.4 %
Rut TORRALLARDONA VALL FEEC 1008.45 47.6 % 41.2 %
Irene COLLADA GARCÍA FEEC 1005.75 49.8 % 44.6 %
Laia HERRERO LLAVATA FEMECV 1003.49 46.9 % 40.5 %
Lola IBORRA FORNER FEMECV 993.46 46.2 % 42.9 %
Alba DOMÍNGUEZ PÉREZ FDMESCyL 993.42 68.6 % 52.8 %
Aiora PEREZ ZUBIETA FNDME 992.89 46.2 % 39.9 %
Ivet CLUSA SANZ FEEC 991.85 46.1 % 39.8 %
Júlia CHAVEZ GARCÍA FEXME 990.78 45.9 % 39.7 %
Valeria RODRIGUEZ REBOLLIDO FMM 987.49 44.6 % 38.3 %
Irene GÓMEZ GARCÍA FEGAMON 984.59 67.5 % 51.5 %
Mar VICENTE JUAN DE LA CRUZ FEEC 983.87 44.9 % 38.7 %
Eyne HERRERA LLAVATA FEMECV 983.69 44.9 % 38.7 %
Elora RAMIRO-IBÁÑEZ CRAIG FDMCM 983.45 45.9 % 44.2 %
Carolina PRIDA SEOANE FEGAMON 980.17 66.9 % 50.9 %
Laia BELTRÁN DE HEREDIA RANGEL EMF-FVM 978.52 43.3 % 37.1 %
Naiara DE LA IGLESIA ÁLVAREZ FEGAMON 977.97 66.6 % 50.6 %
Noa MARCOTE HERNAEZ FCDME 973.86 43.5 % 37.3 %
Deva ALONSO HURLÉ FEMPA 973.37 43.5 % 37.3 %
Luisa ALONSO CORROTO FDMCLM 973.37 43.5 % 37.3 %
Núria BIROSTA SÁNCHEZ FEEC 971.44 43.2 % 37 %
Sandra BULNES DEL CUETO FEMPA 971.35 65.8 % 49.6 %
Valentina FERNÁNDEZ SABAH FMM 969.23 43.9 % 42.2 %
Noa CALVO RUIZ FDMESCyL 969.14 65.5 % 49.3 %
Luna CORROTO LINARES FDMCLM 967.92 42.7 % 36.6 %
Emma GONZALEZ ALAMEDA FDMCLM 967.10 42.6 % 36.4 %
Paula AGUILÓ FONS FEEC 966.97 42.6 % 36.4 %
Pau NOGUES PEREZ FEMECV 965.99 42.4 % 36.3 %
Aitana MARTÍNEZ PAVÓN FMM 961.26 41.8 % 35.7 %
Ana VEIGA RODRIGUEZ FEXME 956.88 41.1 % 35.1 %
Alba MELLÉN AUBERT FAM 955.78 41 % 34.9 %
Laia HERRERA LLAVATA FEMECV 955.46 40.9 % 34.9 %
Irene ÁLVAREZ ASTORGA FDMESCyL 953.36 40.7 % 34.6 %
Jimena SÁNCHEZ SANZ FDMESCyL 948.83 40 % 34 %
Nuria TEIXEIRA ARAÑA FECAMON 943.37 38.5 % 32.5 %
Olatz CABRERA TRIGUEROS EMF-FVM 936.02 35.8 % 32.5 %
Maddi MENDIBURU LAS HAYAS EMF-FVM 930.87 37.6 % 31.8 %
Laga HERNAIZ FAGGIANA EMF-FVM 928.47 37.2 % 31.5 %
Aiora PÉREZ URDIAIN FNDME 920.13 35.3 % 29.7 %
Jone ARETXAGA MARTÍN EMF-FVM 898.79 31.1 % 28 %
Berta RODRIGUEZ GARCIA FDMCLM 803.82 22.5 % 18.3 %

## upcoming SEASON

###* Capturando los futuros Sub16

###* Los sub16 “salen”

### ###

LS0tDQp0aXRsZTogIkVsb19TcG9ydC5MZWFkX0VTUF8oU3ViMTRGKSINCmF1dGhvcjogIkZlZGVyaWNvIEouIFZpbGxhdG9ybyINCmRhdGU6ICJgciBTeXMuRGF0ZSgpYCINCm91dHB1dDoNCiAgaHRtbF9ub3RlYm9vazoNCiAgICB0b2M6IHRydWUNCiAgICB0b2NfZGVwdGg6IDQNCiAgICB0b2NfZmxvYXQ6IHRydWUNCi0tLQ0KDQojIyMjIyBGdWVudGU6IFtodHRwczovL2ZlZG1lLnJlc3VsdHMuaW5mb10oaHR0cHM6Ly9mZWRtZS5yZXN1bHRzLmluZm8vKQ0KDQpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0NCmxpYnJhcnkoZmxleGRhc2hib2FyZCkNCmtuaXRyOjpvcHRzX2NodW5rJHNldCgNCiAgZWNobyA9IEZBTFNFLA0KCW1lc3NhZ2UgPSBGQUxTRSwNCiAgd2FybmluZyA9IEZBTFNFLA0KCWluY2x1ZGUgPSBGQUxTRQ0KKQ0KYGBgICANCg0KYGBge3IgcGFja2FnZXMsIG1lc3NhZ2U9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQppZighcmVxdWlyZSh0aWR5dmVyc2UpKXtpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiLHJlcG9zID0gImh0dHA6Ly9jcmFuLnVzLnItcHJvamVjdC5vcmciKX0NCmlmKCFyZXF1aXJlKGdvb2dsZXNoZWV0czQpKXtpbnN0YWxsLnBhY2thZ2VzKCJnb29nbGVzaGVldHM0Iil9DQppZighcmVxdWlyZShnb29nbGVkcml2ZSkpe2luc3RhbGwucGFja2FnZXMoImdvb2dsZWRyaXZlIil9DQppZighcmVxdWlyZShkcGx5cikpe2luc3RhbGwucGFja2FnZXMoImRwbHlyIil9DQppZighcmVxdWlyZShodHRyMikpe2luc3RhbGwucGFja2FnZXMoImh0dHIyIil9DQppZighcmVxdWlyZShqc29ubGl0ZSkpe2luc3RhbGwucGFja2FnZXMoImpzb25saXRlIil9DQppZighcmVxdWlyZShSc2VsZW5pdW0pKXtpbnN0YWxsLnBhY2thZ2VzKCJSc2VsZW5pdW0iKX0NCmlmKCFyZXF1aXJlKGNocm9tb3RlKSl7aW5zdGFsbC5wYWNrYWdlcygiY2hyb21vdGUiKX0NCmlmKCFyZXF1aXJlKHB1cnJyKSl7aW5zdGFsbC5wYWNrYWdlcygicHVycnIiKX0NCmlmKCFyZXF1aXJlKHdkbWFuKSl7aW5zdGFsbC5wYWNrYWdlcygid2RtYW4iKX0NCmlmKCFyZXF1aXJlKERUKSl7aW5zdGFsbC5wYWNrYWdlcygiRFQiKX0NCmlmKCFyZXF1aXJlKHBsb3RseSkpe2luc3RhbGwucGFja2FnZXMoInBsb3RseSIpfQ0KIyMNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHBsb3RseSkNCmxpYnJhcnkoRFQpDQpsaWJyYXJ5KGNocm9tb3RlKQ0KbGlicmFyeShwdXJycikNCmxpYnJhcnkod2RtYW4pDQoNCmxpYnJhcnkodGlkeXZlcnNlKQ0KbGlicmFyeShydmVzdCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGpzb25saXRlKQ0KbGlicmFyeShSU2VsZW5pdW0pDQoNCmxpYnJhcnkoZ29vZ2xlc2hlZXRzNCkNCmxpYnJhcnkoZ29vZ2xlZHJpdmUpDQoNCmBgYCAgDQoNCg0KIyMjIyMgUmVhZGluZyBEYXRhDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQoNCm9wdGlvbnMoZ2FyZ2xlX29hdXRoX2VtYWlsID0gInZpbGxhdG9yb3BhemZqQGRhdGFhbmFseXNpc2xhYi5jb20iKQ0KDQpzcyA8LSAiaHR0cHM6Ly9kb2NzLmdvb2dsZS5jb20vc3ByZWFkc2hlZXRzL2QvMWtYWVVIOV9RV05CYmRJaFZrZ3J0aFhBZzJTVUM1cDYtckI2NTFIbHlHNmsvZWRpdD91c3A9c2hhcmluZyINCmhvamEgPSAxDQpyYW5nbyA9ICJBMTpLMzU2NSINCnJhbmtzIDwtIHJlYWRfc2hlZXQoc3MsDQogICAgICAgICAgICAgICAgc2hlZXQ9aG9qYSwNCiAgICAgICAgICAgICAgICByYW5nZT0gcmFuZ28sIA0KICAgICAgICAgICAgICAgICAgIGNvbF9uYW1lcyA9IFRSVUUpDQoNCnJhbmtzIDwtICByYW5rcyAlPiUNCiAgbXV0YXRlX2lmKGlzLmNoYXJhY3RlciwgYXMuZmFjdG9yKQ0KDQpgYGAgIA0KDQoNCiMjIExFQUQgMjAyMi0yMDI0DQojIyMgMjAyMiBDYW1wDQpgYGB7ciBpbmNsdWRlPUZBTFNFLCByb3dzLnByaW50PSA4fQ0KbGVhZC5TdWIxNEYgPC0gcmFua3MgJT4lDQogIGZpbHRlcihzdGFnZT09IkNsYXNpZmljIiwNCiAgICAgICAgIENhdGVnb3J5PT0iU3ViMTRfRiIsDQogICAgICAgICB5ZWFyPT0iMjAyMiJ8eWVhcj09IjIwMjMiDQogICAgIyAgICAgTmFtZT09IG5vbWJyZQ0KICAgICAgICAgKSAlPiUNCiAgZ3JvdXBfYnkoY29tcGV0aXRvcj0gTmFtZSwNCiAgICAgICAgICAgWWVhcj0geWVhciwNCiAgICAgICAgICAgQ29tcGU9IENvbXBlXywNCiAgICAgICAgICAgVGVhbSA9IFRlYW0sDQogICAgICAgICAgIERhdGU9IERhdGUpICU+JQ0KICByZWZyYW1lKHJhbms9IFJhbmspICU+JQ0KICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3IgKyBUZWFtIH4gQ29tcGUsIA0KICAgICAgICAgICAgICAgICAgbmEucm0gPSBUUlVFKQ0KDQpsZWFkLlN1YjE0RiA8LSBhc190aWJibGUobGVhZC5TdWIxNEYpDQojIw0KbGVhZC5TdWIxNEZbb3JkZXIobGVhZC5TdWIxNEYkYy5sZWFkLmNhbXAuMjIpLGMoMSwyLDMpXSANCiMjDQpjb21wZXRpdG9ycy5jIDwtIG5yb3cobGVhZC5TdWIxNEZbIWlzLm5hKGxlYWQuU3ViMTRGJGMubGVhZC5jYW1wLjIyKSxdKQ0KY29tcGV0aXRvcnMuZCA8LSBucm93KGxlYWQuU3ViMTRGWyFpcy5uYShsZWFkLlN1YjE0RiRkLmxlYWQuZmlyc3QuMjMpLF0pDQpjb21wZXRpdG9ycy5lIDwtIG5yb3cobGVhZC5TdWIxNEZbIWlzLm5hKGxlYWQuU3ViMTRGJGUubGVhZC5zZWMuMjMpLF0pDQpjb21wZXRpdG9ycy5mIDwtIG5yb3cobGVhZC5TdWIxNEZbIWlzLm5hKGxlYWQuU3ViMTRGJGYubGVhZC50aHJkLjIzKSxdKQ0KY29tcGV0aXRvcnMuZyA8LSBucm93KGxlYWQuU3ViMTRGWyFpcy5uYShsZWFkLlN1YjE0RiRnLmxlYWQuY2FtcC4yMyksXSkNCmBgYCAgDQoNCg0KIyMjIDIwMjIgQ2FtcA0KYGBge3IgaW5jbHVkZT1GQUxTRSwgcm93cy5wcmludD04fQ0KbGVhZC5TdWIxNEZbb3JkZXIobGVhZC5TdWIxNEYkYy5sZWFkLmNhbXAuMjIpLCBjKDEsMiwzKV0NCmBgYA0KDQojIyMgRWxvIENhbXAgMjAyMiAgDQoNCipDb21wZXRpdG9ycyA9IGByIGNvbXBldGl0b3JzLmNgKg0KDQpgYGB7cn0NCmxlYWQuU3ViMTRGLmMgPC0gYXNfdGliYmxlKGxlYWQuU3ViMTRGWyFpcy5uYShsZWFkLlN1YjE0RiRjLmxlYWQuY2FtcC4yMikgLCBjKDEsMiwzKV0pDQojIw0KYGBgDQoNCg0KYGBge3IgaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD0gN30NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KI24gPSBsZW5ndGgoZWxvLmIubGVhZC5zZWMuMjIuYWNjdW0kY29tcGV0aXRvcikNCm4uZGVidXQgPSAwDQojIyMNCmMgPC0gbGVhZC5TdWIxNEYuYyANCiMlPiUgcmlnaHRfam9pbihlbG8uYi5sZWFkLnNlYy4yMi5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChjJGNvbXBldGl0b3JbIWlzLm5hKGMkYy5sZWFkLmNhbXAuMjIpXSkNClIgPC0gcmVwKDEwMDAsIE4pDQpuYW1lcyA8LSBjWyFpcy5uYShjJGMubGVhZC5jYW1wLjIyKSwxXQ0KVGVhbSA8LSBjJFRlYW1bIWlzLm5hKGMkYy5sZWFkLmNhbXAuMjIpXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bHRzIDwtIGxlYWQuU3ViMTRGLmMkYy5sZWFkLmNhbXAuMjINCnN0ZGV2IDwtIHNkKHJlc3VsdHMpDQojDQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0ICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4obGVhZC5TdWIxNEYkYy5sZWFkLmNhbXAuMjJbIWlzLm5hKGxlYWQuU3ViMTRGJGMubGVhZC5jYW1wLjIyKV0pDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gYyRjLmxlYWQuY2FtcC4yMlshaXMubmEoYyRjLmxlYWQuY2FtcC4yMildICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLVIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KDQplbG8uYy5sZWFkLmNhbXAuMjIgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBjJGMubGVhZC5jYW1wLjIyWyFpcy5uYShjJGMubGVhZC5jYW1wLjIyKV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8uYy5sZWFkLmNhbXAuMjIgPC0gYXNfdGliYmxlKGVsby5jLmxlYWQuY2FtcC4yMikNCg0KIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCiNuID0gbGVuZ3RoKGxlYWQuU3ViMTRGLmMuZGVidXQkYy5sZWFkLmNhbXAuMjIpDQojTiA8LSBsZW5ndGgobGVhZC5TdWIxNEYkYy5sZWFkLmNhbXAuMjJbIWlzLm5hKGxlYWQuU3ViMTRGJGMubGVhZC5jYW1wLjIyKV0pDQojUi5kZWJ1dCA8LSByZXAoMTAwMCwgbikNCiNuYW1lcyA8LSBsZWFkLlN1YjE0Ri5jLmRlYnV0WywxXQ0KI1RlYW0gPC0gbGVhZC5TdWIxNEYuYy5kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gbGVhZC5TdWIxNEYuYV9iDQojUyA8LSAoKG1lZGlhbmEtIGxlYWQuU3ViMTRGLmMuZGVidXQkYy5sZWFkLmNhbXAuMjIpIC8gc3RkZXYpIC8gbWF4LnN0ZA0KI0UgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KI1IubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KI21heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KI1Byb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5jLmxlYWQuY2FtcC4yMiRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXcpL0QgKSkpDQojbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQojUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmMubGVhZC5jYW1wLjIyJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiNlbG8uYy5sZWFkLmNhbXAuMjIuZGVidXQgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAjICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgIyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBsZWFkLlN1YjE0Ri5jLmRlYnV0JGMubGVhZC5jYW1wLjIyLA0KICAgICMgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAjICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICMgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgIyAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgICMgICAgICAgICAgICAgICAgICApDQojZWxvLmMubGVhZC5jYW1wLjIyLmRlYnV0IDwtIGFzX3RpYmJsZShlbG8uYy5sZWFkLmNhbXAuMjIuZGVidXQpDQoNCiNlbG8uYy5sZWFkLmNhbXAuMjIgPC0gZWxvLmMubGVhZC5jYW1wLjIyICU+JSByYmluZChlbG8uYy5sZWFkLmNhbXAuMjIuZGVidXQpDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5jLmxlYWQuY2FtcC4yMltvcmRlcihlbG8uYy5sZWFkLmNhbXAuMjIkcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYCAgDQoNCiMjIyMjXyBFbG8gSGlzdG9yeSBfDQpgYGB7cn0NCmNvbXBlIDwtICIyMDIyLmNhbXAiDQplbG8uaGlzdG9yeSA8LSBlbG8uYy5sZWFkLmNhbXAuMjIgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5jLmxlYWQuY2FtcC4yMiRjb21wZXRpdG9yKSksDQogICAgICAgICBjYXRlZyA9IHJlcCgiU3ViMTRGIiwgbGVuZ3RoKGVsby5jLmxlYWQuY2FtcC4yMiRjb21wZXRpdG9yKSkpDQojZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCmVsby5oaXN0b3J5LnRfc2VyaWVzIDwtIGFzX3RpYmJsZShlbG8uaGlzdG9yeSAlPiUgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKQ0KYGBgICANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIDIwMjIqKg0KYGBge3IgaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD03fQ0KI2Vsby5iLmxlYWQuc2VjLjIyLmFjY3VtLmNfYWJzZW50IDwtIGVsby5iLmxlYWQuc2VjLjIyLmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmMubGVhZC5jYW1wLjIyLCBieT0iY29tcGV0aXRvciIpDQojIw0KZWxvLmMubGVhZC5jYW1wLjIyLmFjY3VtIDwtIGVsby5jLmxlYWQuY2FtcC4yMiANCiMlPiUgcmJpbmQoZWxvLmIubGVhZC5zZWMuMjIuYWNjdW0uY19hYnNlbnQpDQplbG8uYy5sZWFkLmNhbXAuMjIuYWNjdW0gPC0gZWxvLmMubGVhZC5jYW1wLjIyLmFjY3VtW29yZGVyKGVsby5jLmxlYWQuY2FtcC4yMi5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmMubGVhZC5jYW1wLjIyLmFjY3VtW29yZGVyKGVsby5jLmxlYWQuY2FtcC4yMi5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGANCg0KIyMjICoqMjAyMyoqIA0KDQojIyMgMjAyMyBGaXJzdA0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFfQ0KbGVhZC5TdWIxNEZbb3JkZXIobGVhZC5TdWIxNEYkZC5sZWFkLmZpcnN0LjIzKSwgYygxLDIsNCldICU+JSBwcmludChuPTYwKQ0KYGBgICANCg0KIyMjIEVsbyBGaXJzdCAyMDIzIA0KKi1Db21wZXRpdG9ycyA9IGByIGNvbXBldGl0b3JzLmRgLSoNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxlYWQuU3ViMTRGLmQgPC0gbGVhZC5TdWIxNEZbLGMoMSwyLDQpXSAlPiUgZmlsdGVyKGxlYWQuU3ViMTRGJGQubGVhZC5maXJzdC4yMyE9Ik5BIikgDQojDQpsZWFkLlN1YjE0Ri5kLmRlYnV0IDwtIGxlYWQuU3ViMTRGLmQgJT4lIGFudGlfam9pbihlbG8uYy5sZWFkLmNhbXAuMjIuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCmBgYA0KDQoNCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGxlYWQuU3ViMTRGLmQuZGVidXQkY29tcGV0aXRvcikNCiMjIw0KZCA8LSBsZWFkLlN1YjE0Ri5kICU+JSByaWdodF9qb2luKGVsby5jLmxlYWQuY2FtcC4yMi5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChkJGNvbXBldGl0b3JbIWlzLm5hKGQkZC5sZWFkLmZpcnN0LjIzKV0pDQpSIDwtIGQkUi5uZXdbIWlzLm5hKGQkZC5sZWFkLmZpcnN0LjIzKV0NCm5hbWVzIDwtIGRbIWlzLm5hKGQkZC5sZWFkLmZpcnN0LjIzKSwxXQ0KVGVhbSA8LSBkJFRlYW0ueFshaXMubmEoZCRkLmxlYWQuZmlyc3QuMjMpXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bHRzIDwtIGxlYWQuU3ViMTRGLmQkZC5sZWFkLmZpcnN0LjIzDQpzdGRldiA8LSBzZChyZXN1bHRzKQ0KIw0KYXZnLnBsYXllciA8LSBtZWRpYW4oYyhSLCByZXAoMTAwMCwgbi5kZWJ1dCApKSkNCm1lZGlhbmEgPC0gbWVkaWFuKGxlYWQuU3ViMTRGJGQubGVhZC5maXJzdC4yM1shaXMubmEobGVhZC5TdWIxNEYkZC5sZWFkLmZpcnN0LjIzKV0pDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gZCRkLmxlYWQuZmlyc3QuMjNbIWlzLm5hKGQkZC5sZWFkLmZpcnN0LjIzKV0gKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQoNCmVsby5kLmxlYWQuZmlyc3QuMjMgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBkJGQubGVhZC5maXJzdC4yM1shaXMubmEoZCRkLmxlYWQuZmlyc3QuMjMpXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5kLmxlYWQuZmlyc3QuMjMgPC0gYXNfdGliYmxlKGVsby5kLmxlYWQuZmlyc3QuMjMpDQoNCiMjIyMjIyMjIyMjDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuID0gbGVuZ3RoKGxlYWQuU3ViMTRGLmQuZGVidXQkZC5sZWFkLmZpcnN0LjIzKQ0KTiA8LSBsZW5ndGgobGVhZC5TdWIxNEYkZC5sZWFkLmZpcnN0LjIzWyFpcy5uYShsZWFkLlN1YjE0RiRkLmxlYWQuZmlyc3QuMjMpXSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsZWFkLlN1YjE0Ri5kLmRlYnV0WywxXQ0KVGVhbSA8LSBsZWFkLlN1YjE0Ri5kLmRlYnV0JFRlYW0NCiNjYXRlZyA8LSBsZWFkLlN1YjE0Ri5hX2INClMgPC0gKChtZWRpYW5hLSBsZWFkLlN1YjE0Ri5kLmRlYnV0JGQubGVhZC5maXJzdC4yMykgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8uZC5sZWFkLmZpcnN0LjIzJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmQubGVhZC5maXJzdC4yMyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8uZC5sZWFkLmZpcnN0LjIzLmRlYnV0IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gbGVhZC5TdWIxNEYuZC5kZWJ1dCRkLmxlYWQuZmlyc3QuMjMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5kLmxlYWQuZmlyc3QuMjMuZGVidXQgPC0gYXNfdGliYmxlKGVsby5kLmxlYWQuZmlyc3QuMjMuZGVidXQpDQoNCmVsby5kLmxlYWQuZmlyc3QuMjMgPC0gZWxvLmQubGVhZC5maXJzdC4yMyAlPiUgcmJpbmQoZWxvLmQubGVhZC5maXJzdC4yMy5kZWJ1dCkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLmQubGVhZC5maXJzdC4yM1tvcmRlcihlbG8uZC5sZWFkLmZpcnN0LjIzJHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGAgIA0KDQojIyMjICogKipDYXB0dXJhbmRvIGxvcyBmdXR1cm9zIFN1YjE2KiogDQpgYGB7ciBlY2hvPVRSVUUsIGluY2x1ZGU9RkFMU0V9DQpsZWFkLlN1YjE2Ri4yMyA8LSByYW5rcyAlPiUNCiAgZmlsdGVyKHN0YWdlPT0iQ2xhc2lmaWMiLA0KICAgICAgICAgQ2F0ZWdvcnk9PSJTdWIxNl9GIiwNCiAgICAgICAgIHllYXI9PSIyMDIzIg0KICAgICMgICAgIE5hbWU9PSBub21icmUNCiAgICAgICAgICkgJT4lDQogIGdyb3VwX2J5KGNvbXBldGl0b3I9IE5hbWUsDQogICAgICAgICAgIFllYXI9IHllYXIsDQogICAgICAgICAgIENvbXBlPSBDb21wZV8sDQogICAgICAgICAgIFRlYW0gPSBUZWFtLA0KICAgICAgICAgICBEYXRlPSBEYXRlKSAlPiUNCiAgcmVmcmFtZShyYW5rPSBSYW5rKSAlPiUNCiAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yICsgVGVhbSB+IENvbXBlLCANCiAgICAgICAgICAgICAgICAgIG5hLnJtID0gVFJVRSkNCg0KbGVhZC5TdWIxNkYuMjMgPC0gYXNfdGliYmxlKGxlYWQuU3ViMTZGLjIzKQ0KYGBgDQoNCg0KIyMjIyAqICpfTG9zIHN1YjE2ICJzYWxlbiJfKg0KDQpgYGB7ciBpbmNsdWRlPUZBTFNFLCBlY2hvPVRSVUUsIGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9N30NCiMjIGVudmlhbmRvIGxvcyBzdWIxNiBhIG90cm8gYXJjaGl2bw0KZWxvLjIyLmFjY3VtLnRvX3N1YjE2IDwtIGVsby5jLmxlYWQuY2FtcC4yMi5hY2N1bSAlPiUgc2VtaV9qb2luKGxlYWQuU3ViMTZGLjIzLGJ5PSJjb21wZXRpdG9yIikNCg0KIyMgc3ViMTYgc2FsaWVuZG8NCmVsby5jLmxlYWQuY2FtcC4yMi5hY2N1bSA8LSBlbG8uYy5sZWFkLmNhbXAuMjIuYWNjdW0gJT4lIGFudGlfam9pbihsZWFkLlN1YjE2Ri4yMyxieT0iY29tcGV0aXRvciIpIA0KYGBgICANCg0KIyMjIyNfIEVsbyBIaXN0b3J5IF8NCmBgYHtyIGV2YWw9VFJVRX0NCiMNCiMgU2FjYW5kbyBzdWIxNg0KY29tcGUgPC0gIjIwMjMuMSINCiNlbG8uaGlzdG9yeS5sYXN0IDwtIGVsby4yMi5hY2N1bS50b19zdWIxNiAlPiUgDQojICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby4yMi5hY2N1bS50b19zdWIxNiRjb21wZXRpdG9yKSksDQogIyAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE2RiIsIGxlbmd0aChlbG8uMjIuYWNjdW0udG9fc3ViMTYkY29tcGV0aXRvcikpKQ0KIw0KI2Vsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KIyMgDQplbG8uaGlzdG9yeS5sYXN0IDwtIGVsby5kLmxlYWQuZmlyc3QuMjMgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5kLmxlYWQuZmlyc3QuMjMkY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE0RiIsIGxlbmd0aChlbG8uZC5sZWFkLmZpcnN0LjIzJGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgc3ViMTRGDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMTRGIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IlN1YjE0RiIpICU+JQ0KICAgICAgICAgICAgICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3J+Y29tcCwgdmFsdWUudmFyID0gIlIubmV3IikpIA0KIyMgDQojIyBzdWIxNk0NCiNlbG8uaGlzdG9yeS50X3Nlcmllcy5TMTZNIDwtIA0KICMgYXNfdGliYmxlKGVsby5oaXN0b3J5ICU+JQ0KICAjICAgICAgICAgICAgZmlsdGVyKGNhdGVnPT0iU3ViMTZGIikgJT4lDQogICAjICAgICAgICAgICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3J+Y29tcCwgdmFsdWUudmFyID0gIlIubmV3IikpIA0KDQpgYGAgIA0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgRmlyc3RfMjAyMyoqDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQojIw0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmMubGVhZC5jYW1wLjIyLmFjY3VtDQplbG8ubGFzdC5jb21wIDwtIGVsby5kLmxlYWQuZmlyc3QuMjMNCiMjIw0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAsYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wICU+JSByYmluZChlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYCAgDQoNCg0KIyMjIDIwMjMgU2Vjb25kICANCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxlYWQuU3ViMTRGW29yZGVyKGxlYWQuU3ViMTRGJGUubGVhZC5zZWMuMjMpLCBjKDEsMiw1KV0gJT4lIHByaW50KG49NjUpDQpgYGAgIA0KDQojIyMjI19FbG8gU2Vjb25kIDIwMjNfIA0KKi1Db21wZXRpdG9ycyA9IGByIGNvbXBldGl0b3JzLmVgLSoNCg0KYGBge3IgZXZhbD1UUlVFLGluY2x1ZGU9RkFMU0V9DQpsYXN0LmNvbXAgPC0gbGVhZC5TdWIxNEZbLGMoMSwyLDUpXSAlPiUgZmlsdGVyKGxlYWQuU3ViMTRGJGUubGVhZC5zZWMuMjMhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD0gN30NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0Kbi5kZWJ1dCA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGFzdC5jb21wICU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDFdDQpUZWFtIDwtIGxhc3QuY29tcC5jYWxjJFRlYW0ueFshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXQ0KcmVzdWx0cyA8LSAodW5saXN0KHJlc3VsdHMpKQ0Kc3RkZXYgPC0gc2QocmVzdWx0cykNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUiwgcmVwKDEwMDAsIG4uZGVidXQgKSkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gbGVhZC5TdWIxNEYuYV9iDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApKQ0KDQoNCmVsby5sYXN0LmNvbXAubmV3IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLmxhc3QuY29tcC5uZXdbb3JkZXIoZWxvLmxhc3QuY29tcC5uZXckcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYCAgDQoNCiMjIyMjXyBFbG8gSGlzdG9yeSBfDQpgYGB7cn0NCiMjIA0KY29tcGU9ICIyMDIzLjIiDQplbG8uaGlzdG9yeS5sYXN0IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSANCiAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSksDQogICAgICAgICBjYXRlZyA9IHJlcCgiU3ViMTRGIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgc3ViMTRGDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMTRGIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IlN1YjE0RiIpICU+JQ0KICAgICAgICAgICAgICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3J+Y29tcCwgdmFsdWUudmFyID0gIlIubmV3IikpIA0KIyMgDQoNCmBgYCAgDQoNCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIFNlY29uZF8yMDIzKioNCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9RkFMU0V9DQplbG8ubGFzdC5hY2N1bQ0KZWxvLmxhc3QuY29tcC5uZXcNCmBgYA0KDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9N30NCg0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgICANCg0KIyMjIDIwMjMgVGhpcmQNCmBgYHtyIGV2YWw9VFJVRSwgaW5jbHVkZT1GQUxTRX0NCmxlYWQuU3ViMTRGW29yZGVyKGxlYWQuU3ViMTRGJGYubGVhZC50aHJkLjIzKSxjKDEsMiw2KV0gJT4lIGZpbHRlcihmLmxlYWQudGhyZC4yMyE9Ik5BIiApDQpgYGANCg0KIyMjIEVsbyBUaGlyZCAyMDIzIA0KKi1Db21wZXRpdG9ycyA9IGByIGNvbXBldGl0b3JzLmZgLSoNCg0KYGBge3IgZXZhbD1UUlVFLGluY2x1ZGU9RkFMU0V9DQpsYXN0LmNvbXAgPC0gbGVhZC5TdWIxNEZbLGMoMSwyLDYpXSAlPiUgZmlsdGVyKGxlYWQuU3ViMTRGJGYubGVhZC50aHJkLjIzIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgICANCg0KDQpgYGB7ciBldmFsPSBUUlVFLGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKHJlc3VsdHMpDQojDQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0ICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4odW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIHVubGlzdChsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXSkgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8ubGFzdC5jb21wLm5ldyA8LSBhc190aWJibGUoZWxvLmxhc3QuY29tcC5uZXcpDQojIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4gPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQpOIDwtIGxlbmd0aCh1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQpSLmRlYnV0IDwtIHJlcCgxMDAwLCBuKQ0KbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0WywxXQ0KVGVhbSA8LSBsYXN0X2NvbXBfZGVidXQkVGVhbQ0KI2NhdGVnIDwtIGxlYWQuU3ViMTRGLmFfYg0KUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0WywzXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQpDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGAgIA0KDQojIyMjI18gRWxvIEhpc3RvcnkgXw0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyMy4zIg0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE0RiIsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSkpDQoNCiMNCmVsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCiMjIHN1YjE0Rg0KZWxvLmhpc3RvcnkudF9zZXJpZXMuUzE0RiA8LSANCiAgYXNfdGliYmxlKGVsby5oaXN0b3J5ICU+JQ0KICAgICAgICAgICAgICBmaWx0ZXIoY2F0ZWc9PSJTdWIxNEYiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGAgIA0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgVGhpcmRfMjAyMyoqDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PTd9DQoNCmVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihlbG8ubGFzdC5jb21wLm5ldyxieT0iY29tcGV0aXRvciIpDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYCAgDQoNCiMjIyAyMDIzIENoYW1wDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9IDd9DQpsZWFkLlN1YjE0RltvcmRlcihsZWFkLlN1YjE0RiRnLmxlYWQuY2FtcC4yMyksYygxLDIsNyldICU+JSBmaWx0ZXIoZy5sZWFkLmNhbXAuMjMhPSJOQSIgKQ0KYGBgDQoNCiMjIyBFbG8gQ2FtcCAyMDIzIA0KKi1Db21wZXRpdG9ycyA9IGByIGNvbXBldGl0b3JzLmZgLSoNCg0KYGBge3IgZXZhbD1UUlVFLGluY2x1ZGU9RkFMU0V9DQpsYXN0LmNvbXAgPC0gbGVhZC5TdWIxNEZbLGMoMSwyLDcpXSAlPiUgZmlsdGVyKGxlYWQuU3ViMTRGJGcubGVhZC5jYW1wLjIzIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgICANCg0KDQpgYGB7ciBldmFsPSBUUlVFLGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKHJlc3VsdHMpDQojDQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0ICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4odW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIHVubGlzdChsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXSkgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8ubGFzdC5jb21wLm5ldyA8LSBhc190aWJibGUoZWxvLmxhc3QuY29tcC5uZXcpDQojIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4gPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQpOIDwtIGxlbmd0aCh1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQpSLmRlYnV0IDwtIHJlcCgxMDAwLCBuKQ0KbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0WywxXQ0KVGVhbSA8LSBsYXN0X2NvbXBfZGVidXQkVGVhbQ0KI2NhdGVnIDwtIGxlYWQuU3ViMTRGLmFfYg0KUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0WywzXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQpDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGAgIA0KDQojIyMjI18gRWxvIEhpc3RvcnkgXw0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyMy5jaGFtcCINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSwNCiAgICAgICAgIGNhdGVnID0gcmVwKCJTdWIxNEYiLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpKQ0KDQojDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCg0KIyB0aW1lLXNlcmllcyBkYXRhLmZyYW1lDQojIyBzdWIxNEYNCmVsby5oaXN0b3J5LnRfc2VyaWVzLlMxNEYgPC0gDQogIGFzX3RpYmJsZShlbG8uaGlzdG9yeSAlPiUNCiAgICAgICAgICAgICAgZmlsdGVyKGNhdGVnPT0iU3ViMTRGIikgJT4lDQogICAgICAgICAgICAgIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvcn5jb21wLCB2YWx1ZS52YXIgPSAiUi5uZXciKSkgDQojIyANCg0KYGBgICANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIENoYW1wXzIwMjMqKg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCmVsby5sYXN0LmFjY3VtDQplbG8ubGFzdC5jb21wLm5ldw0KYGBgDQoNCmBgYHtyIGV2YWw9VFJVRSwgaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD03fQ0KDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcC5uZXcsYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGAgIA0KDQoNCiMjIyMgKiAqKkNhcHR1cmFuZG8gbG9zIGZ1dHVyb3MgU3ViMTYqKiANCmBgYHtyIGVjaG89VFJVRSwgaW5jbHVkZT1GQUxTRX0NCmxlYWQuU3ViMTZGLjI0IDwtIHJhbmtzICU+JQ0KICBmaWx0ZXIoc3RhZ2U9PSJDbGFzaWZpYyIsDQogICAgICAgICBDYXRlZ29yeT09IlN1YjE2X0YiLA0KICAgICAgICAgeWVhcj09IjIwMjQiDQogICAgIyAgICAgTmFtZT09IG5vbWJyZQ0KICAgICAgICAgKSAlPiUNCiAgZ3JvdXBfYnkoY29tcGV0aXRvcj0gTmFtZSwNCiAgICAgICAgICAgWWVhcj0geWVhciwNCiAgICAgICAgICAgQ29tcGU9IENvbXBlXywNCiAgICAgICAgICAgVGVhbSA9IFRlYW0sDQogICAgICAgICAgIERhdGU9IERhdGUpICU+JQ0KICByZWZyYW1lKHJhbms9IFJhbmspICU+JQ0KICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3IgKyBUZWFtIH4gQ29tcGUsIA0KICAgICAgICAgICAgICAgICAgbmEucm0gPSBUUlVFKQ0KDQpsZWFkLlN1YjE2Ri4yNCA8LSBhc190aWJibGUobGVhZC5TdWIxNkYuMjQpDQpgYGANCg0KDQojIyMjICogKl9Mb3Mgc3ViMTYgInNhbGVuIl8qDQpgYGB7ciBlY2hvPVRSVUUsIGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9N30NCiMjIGVudmlhbmRvIGxvcyBzdWIxNiBhIG90cm8gYXJjaGl2bw0KZWxvLjIzLmFjY3VtLnRvX3N1YjE2IDwtIGVsby5sYXN0LmFjY3VtICU+JSBzZW1pX2pvaW4obGVhZC5TdWIxNkYuMjQsYnk9ImNvbXBldGl0b3IiKQ0KDQojIyBzdWIxNiBzYWxpZW5kbw0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihsZWFkLlN1YjE2Ri4yNCxieT0iY29tcGV0aXRvciIpIA0KYGBgICANCg0KIyMjICMjIyAjIyMgIyMjICMjIyAjIyMgDQojIyMgIyMjIGF0IFdPUksgIyMjICMjIw0KIyMjICMjIyAjIyMgIyMjICMjIyAjIyMgDQoNCg0KDQojIyMgKioyMDI0KiogDQoNCiMjIyAyMDI0IEZpcnN0ICANCmBgYHtyIGluY2x1ZGU9RkFMU0UsIHJvd3MucHJpbnQ9IDh9DQpsZWFkLlN1YjE0RiA8LSByYW5rcyAlPiUNCiAgZmlsdGVyKHN0YWdlPT0iQ2xhc2lmaWMiLA0KICAgICAgICAgQ2F0ZWdvcnk9PSJTdWIxNF9GIiwNCiAgICAgICAgeWVhcj09IjIwMjMifHllYXI9PSIyMDI0Ig0KICAgICMgICAgIE5hbWU9PSBub21icmUNCiAgICAgICAgICkgJT4lDQogIGdyb3VwX2J5KGNvbXBldGl0b3I9IE5hbWUsDQogICAgICAgICAgIFllYXI9IHllYXIsDQogICAgICAgICAgIENvbXBlPSBDb21wZV8sDQogICAgICAgICAgIFRlYW0gPSBUZWFtLA0KICAgICAgICAgICBEYXRlPSBEYXRlKSAlPiUNCiAgcmVmcmFtZShyYW5rPSBSYW5rKSAlPiUNCiAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yICsgVGVhbSB+IENvbXBlLCANCiAgICAgICAgICAgICAgICAgIG5hLnJtID0gVFJVRSkNCg0KbGVhZC5TdWIxNEYgPC0gYXNfdGliYmxlKGxlYWQuU3ViMTRGKQ0KIyMNCmxlYWQuU3ViMTRGW29yZGVyKGxlYWQuU3ViMTRGJGgubGVhZC5maXJzdC4yNCksYygxLDIsNyldIA0KIw0KY29tcGV0aXRvcnMuaCA8LSBucm93KGxlYWQuU3ViMTRGWyFpcy5uYShsZWFkLlN1YjE0RiRoLmxlYWQuZmlyc3QuMjQpLF0pDQpjb21wZXRpdG9ycy5pIDwtIG5yb3cobGVhZC5TdWIxNEZbIWlzLm5hKGxlYWQuU3ViMTRGJGkubGVhZC5zZWMuMjQpLF0pDQpjb21wZXRpdG9ycy5qIDwtIG5yb3cobGVhZC5TdWIxNEZbIWlzLm5hKGxlYWQuU3ViMTRGJGoubGVhZC50aHJkLjI0KSxdKQ0KYGBgICANCg0KIyMjIEVsbyBGaXJzdCAyMDI0IA0KKi1Db21wZXRpdG9ycyA9IGByIGNvbXBldGl0b3JzLmhgLSoNCg0KYGBge3IgaW5jbHVkZT1GQUxTRX0NCmxhc3QuY29tcCA8LSBsZWFkLlN1YjE0RlssYygxLDIsNyldICU+JSBmaWx0ZXIobGVhZC5TdWIxNEYkaC5sZWFkLmZpcnN0LjI0IT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgICANCg0KDQpgYGB7ciBldmFsPSBUUlVFLCBpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KIyMjDQpsYXN0LmNvbXAuY2FsYyA8LSBsYXN0LmNvbXAgJT4lIHJpZ2h0X2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCiMjIw0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkY29tcGV0aXRvclshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0pDQpSIDwtIGxhc3QuY29tcC5jYWxjJFIubmV3WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksMV0NClRlYW0gPC0gbGFzdC5jb21wLmNhbGMkVGVhbS54WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bHRzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdDQpyZXN1bHRzIDwtICh1bmxpc3QocmVzdWx0cykpDQpzdGRldiA8LSBzZChyZXN1bHRzKQ0KIw0KYXZnLnBsYXllciA8LSBtZWRpYW4oYyhSLCByZXAoMTAwMCwgbi5kZWJ1dCApKSkNCm1lZGlhbmEgPC0gbWVkaWFuKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSB1bmxpc3QobGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10pICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLVIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksICIlIiApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLmxhc3QuY29tcC5uZXcgPC0gYXNfdGliYmxlKGVsby5sYXN0LmNvbXAubmV3KQ0KIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KUi5kZWJ1dCA8LSByZXAoMTAwMCwgbikNCm5hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dFssMV0NClRlYW0gPC0gbGFzdF9jb21wX2RlYnV0JFRlYW0NCiNjYXRlZyA8LSBsZWFkLlN1YjE0Ri5hX2INClMgPC0gKChtZWRpYW5hIC0gbGFzdF9jb21wX2RlYnV0WywzXSkgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXdbLDFdKS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ld1ssMV0pL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZWxvLmxhc3QuY29tcC5uZXcuZGVidXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dFssM10pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFNbLDFdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3WywxXSwyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkpDQoNCg0KZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmNvbXAubmV3LmRlYnV0KQ0KDQoNCiMjIyMjICMjIyMjIyMjIyMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5jb21wLm5ld1tvcmRlcihlbG8ubGFzdC5jb21wLm5ldyRyZXN1bHRzKSxjKDEsMiwzLDQsNiw3LDgpXSkNCg0KYGBgICANCg0KIyMjIyNfIEVsbyBIaXN0b3J5IF8NCmBgYHtyfQ0KIyMgDQpjb21wZT0gIjIwMjQuMSINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSwNCiAgICAgICAgIGNhdGVnID0gcmVwKCJTdWIxNEYiLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpKQ0KDQojDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCg0KIyB0aW1lLXNlcmllcyBkYXRhLmZyYW1lDQojIyBzdWIxNEYNCmVsby5oaXN0b3J5LnRfc2VyaWVzLlMxNEYgPC0gDQogIGFzX3RpYmJsZShlbG8uaGlzdG9yeSAlPiUNCiAgICAgICAgICAgICAgZmlsdGVyKGNhdGVnPT0iU3ViMTRGIikgJT4lDQogICAgICAgICAgICAgIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvcn5jb21wLCB2YWx1ZS52YXIgPSAiUi5uZXciKSkgDQojIyANCg0KYGBgICANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIEZpcnN0XzIwMjQqKg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCmVsby5sYXN0LmFjY3VtDQplbG8ubGFzdC5jb21wLm5ldw0KYGBgDQoNCmBgYHtyIGV2YWw9VFJVRSwgaW5jbHVkZT1GQUxTRSwgY29scy5wcmludD03fQ0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgICANCg0KIyMjIDIwMjQgU2Vjb25kDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0V9DQpsZWFkLlN1YjE0RltvcmRlcihsZWFkLlN1YjE0RiRpLmxlYWQuc2VjLjI0KSwgYygxLDIsOCldICU+JSBwcmludChuPTEyMCkNCmBgYCAgDQoNCiMjIyBFbG8gU2Vjb25kIDIwMjQgDQoqLUNvbXBldGl0b3JzID0gYHIgY29tcGV0aXRvcnMuaWAtKg0KDQpgYGB7ciBldmFsPVRSVUUsaW5jbHVkZT1GQUxTRX0NCmxhc3QuY29tcCA8LSBsZWFkLlN1YjE0RlssYygxLDIsOCldICU+JSBmaWx0ZXIobGVhZC5TdWIxNEYkaS5sZWFkLnNlYy4yNCE9Ik5BIikgDQojDQpsYXN0X2NvbXBfZGVidXQgPC0gbGFzdC5jb21wICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCmBgYA0KDQpgYGB7ciBldmFsPSBUUlVFLGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKHJlc3VsdHMpDQojDQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0ICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4odW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIHVubGlzdChsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXSkgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8ubGFzdC5jb21wLm5ldyA8LSBhc190aWJibGUoZWxvLmxhc3QuY29tcC5uZXcpDQojIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4gPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQpOIDwtIGxlbmd0aCh1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQpSLmRlYnV0IDwtIHJlcCgxMDAwLCBuKQ0KbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0WywxXQ0KVGVhbSA8LSBsYXN0X2NvbXBfZGVidXQkVGVhbQ0KI2NhdGVnIDwtIGxlYWQuU3ViMTRGLmFfYg0KUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0WywzXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQpDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGAgIA0KDQojIyMjI18gRWxvIEhpc3RvcnkgXw0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyNC4yIg0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE0RiIsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSkpDQoNCiMNCmVsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCiMjIHN1YjE0Rg0KZWxvLmhpc3RvcnkudF9zZXJpZXMuUzE0RiA8LSANCiAgYXNfdGliYmxlKGVsby5oaXN0b3J5ICU+JQ0KICAgICAgICAgICAgICBmaWx0ZXIoY2F0ZWc9PSJTdWIxNEYiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGAgIA0KDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBTZWNvbmRfMjAyNCoqDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPUZBTFNFLCBjb2xzLnByaW50PTd9DQoNCmVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihlbG8ubGFzdC5jb21wLm5ldyxieT0iY29tcGV0aXRvciIpDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYCAgDQoNCg0KIyMjIDIwMjQgVGhpcmQNCmBgYHtyIGV2YWw9VFJVRSwgaW5jbHVkZT1GQUxTRX0NCmxlYWQuU3ViMTRGW29yZGVyKGxlYWQuU3ViMTRGJGoubGVhZC50aHJkLjI0KSxjKDEsMiw5KV0gJT4lIGZpbHRlcihqLmxlYWQudGhyZC4yNCE9Ik5BIiApDQpgYGANCg0KIyMjIEVsbyBUaGlyZCAyMDI0IA0KKi1Db21wZXRpdG9ycyA9IGByIGNvbXBldGl0b3JzLmpgLSoNCg0KYGBge3IgZXZhbD1UUlVFLGluY2x1ZGU9RkFMU0V9DQpsYXN0LmNvbXAgPC0gbGVhZC5TdWIxNEZbLGMoMSwyLDkpXSAlPiUgZmlsdGVyKGxlYWQuU3ViMTRGJGoubGVhZC50aHJkLjI0IT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgICANCg0KDQpgYGB7ciBldmFsPSBUUlVFLGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKHJlc3VsdHMpDQojDQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0ICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4odW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIHVubGlzdChsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXSkgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8ubGFzdC5jb21wLm5ldyA8LSBhc190aWJibGUoZWxvLmxhc3QuY29tcC5uZXcpDQojIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4gPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQpOIDwtIGxlbmd0aCh1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQpSLmRlYnV0IDwtIHJlcCgxMDAwLCBuKQ0KbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0WywxXQ0KVGVhbSA8LSBsYXN0X2NvbXBfZGVidXQkVGVhbQ0KI2NhdGVnIDwtIGxlYWQuU3ViMTRGLmFfYg0KUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0WywzXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQpDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGAgIA0KDQojIyMjI18gRWxvIEhpc3RvcnkgXw0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyNC4zIg0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE0RiIsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSkpDQoNCiMNCmVsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCiMjIHN1YjE0Rg0KZWxvLmhpc3RvcnkudF9zZXJpZXMuUzE0RiA8LSANCiAgYXNfdGliYmxlKGVsby5oaXN0b3J5ICU+JQ0KICAgICAgICAgICAgICBmaWx0ZXIoY2F0ZWc9PSJTdWIxNEYiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGAgIA0KDQojIyMgRWxvIGluIHRpbWUNCmBgYHtyIGluY2x1ZGU9VFJVRSwgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPSAxOH0NCmlkID0gIiINCnNob3J0bmFtZSA9ICIiDQojDQpjb2xzPSBjKCJGRUVDL0ZFTUVDViIgPSAiZGFya29yYW5nZTMiLA0KICAgICAgICAiY2N0MjEiPSAieWVsbG93MyIsDQogICAgICAgICJGRU1FQ1YiID0gInJlZDQiLA0KICAgICAgICAiT3RoZXIgY2xpbW5iZXJzIiA9ICJncmF5Ig0KICAgICAgICApDQojDQpjY3QgPSBjKCJjY3QyMSIgPSAiYmxhY2siLA0KICAgICAgICAiRkVFQyIgPSAiZGFya29yYW5nZTMiLA0KICAgICAgICAiRkVNRUNWIiA9ICJyZWQ0IiwNCiAgICAgICAgIk90aGVyIGNsaW1iZXJzIj0gImRhcmtncmF5IikNCiMjDQpwIDwtIGVsby5oaXN0b3J5ICU+JQ0KICBtdXRhdGUoZm9jdXMgPSBjYXNlX3doZW4oY29tcGV0aXRvciA9PSAiQWJyaWwgRkFSUlVTIFNPUklBTk8iIH4gImNjdDIxIiwgY29tcGV0aXRvciA9PSAgIkphbmEgRVNURVZFIFZBTERFUyIgfiAiY2N0MjEiLCBjb21wZXRpdG9yID09ICAiTcOybmljYSBKQVVTRVQgU0FCQVRFUiIgfiAiY2N0MjEiLCBjb21wZXRpdG9yID09ICAiUnV0IFRPUlJBTExBUkRPTkEgVkFMTCIgfiAiY2N0MjEiLCBjb21wZXRpdG9yID09ICAiQXNoYSBHVUlUQVJUIENIVU5HIiB+ICJjY3QyMSIsIGNvbXBldGl0b3IgPT0gICJKw7psaWEgQk9SR0VTIERFTCBWSUxMQVNBTlRFIiB+ICJjY3QyMSIsIGNvbXBldGl0b3IgPT0gICJNYXIgVklDRU5URSBKVUFOIERFIExBIENSVVoiIH4gImNjdDIxIiwgY29tcGV0aXRvciA9PSAiQWluYSBWSUxBIENBTlRFUk8iIH4gImNjdDIxIiwNCiAgICAgICAgICAgICAgICAgICAgICNjb21wZXRpdG9yID09ICJFcmljIEdPTlpBTEVaIElOR0zDiVMiIH4gImNjdDIxIiwNCiAgICAgICAgICAgICAgICAgICAgICNjb21wZXRpdG9yID09ICJCZWwgVE9SUkVOVFMgUEFMT01BUkVTIiB+ICJjY3QyMSIsDQogICAgICAgICAgICAgICAgICAgICBUZWFtPT0gIkZFRUMiIH4gIkZFRUMiLA0KICAgICAgICAgICAgICAgICAgICAgVGVhbT09ICJGRU1FQ1YiIH4gIkZFTUVDViIsDQogICAgICAgICAgICAgICAgICAgICBUUlVFIH4gIk90aGVyIGNsaW1iZXJzIikpICU+JQ0KICBmaWx0ZXIoY2F0ZWc9PSJTdWIxNEYiLCBSLm5ldz49MCkgJT4lDQogIGdncGxvdChhZXMoeD0gY29tcCwgeT0gUi5uZXcsIGdyb3VwID0gY29tcGV0aXRvciwgY29sID0gZm9jdXMpKSArIA0KICBnZW9tX3BvaW50KCkgKyANCiAgZ2VvbV9saW5lKGxpbmV0eXBlPSAiZGFzaGVkIikgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTEwMDAsbGluZXR5cGU9ICJkYXNoZWQiKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbChuYW1lID0gIkNsaW1iZXIiLA0KICAgICAgICAgICAgICAgICAgICAgYWVzdGhldGljcyA9ICJjb2xvciIsDQogICAgICAgICAgICAgICAgICAgICAsDQogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjY3QNCiAgICAgICAgICAgICAgICAgICAgICkNCg0KI3ANCmdncGxvdGx5KHApDQpgYGAgIA0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgVGhpcmRfMjAyNCoqDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPUZBTFNFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9N30NCg0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgICANCg0KIyMjICMjIHVwY29taW5nIFNFQVNPTiAjIyMjIw0KDQojIyMqICoqQ2FwdHVyYW5kbyBsb3MgZnV0dXJvcyBTdWIxNioqIA0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1GQUxTRX0NCiNsZWFkLlN1YjE2Ri4yNSA8LSByYW5rcyAlPiUNCiAjIGZpbHRlcihzdGFnZT09IkNsYXNpZmljIiwNCiAgIyAgICAgICBDYXRlZ29yeT09IlN1YjE2X0YiLA0KICAgIyAgICAgIHllYXI9PSIyMDI1Ig0KICAgICMgICAgIE5hbWU9PSBub21icmUNCiAgICAjICAgICApICU+JQ0KIyAgZ3JvdXBfYnkoY29tcGV0aXRvcj0gTmFtZSwNCiAjICAgICAgICAgIFllYXI9IHllYXIsDQogICMgICAgICAgICBDb21wZT0gQ29tcGVfLA0KICAgIyAgICAgICAgVGVhbSA9IFRlYW0sDQogICAgIyAgICAgICBEYXRlPSBEYXRlKSAlPiUNCiMgIHJlZnJhbWUocmFuaz0gUmFuaykgJT4lDQogIyByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3IgKyBUZWFtIH4gQ29tcGUsIA0KICAjICAgICAgICAgICAgICAgIG5hLnJtID0gVFJVRSkNCg0KIyBsZWFkLlN1YjE2Ri4yNSA8LSBhc190aWJibGUobGVhZC5TdWIxNkYuMjUpDQpgYGANCg0KDQojIyMqICpfTG9zIHN1YjE2ICJzYWxlbiJfKg0KYGBge3IgZXZhbD0gRkFMU0UsIGluY2x1ZGU9RkFMU0UsIGNvbHMucHJpbnQ9N30NCiMjIGVudmlhbmRvIGxvcyBzdWIxNiBhIG90cm8gYXJjaGl2bw0KIyBlbG8uMjQuYWNjdW0udG9fc3ViMTYgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIHNlbWlfam9pbihsZWFkLlN1YjE2Ri4yNSxieT0iY29tcGV0aXRvciIpDQoNCiMjIHN1YjE2IHNhbGllbmRvDQojZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihsZWFkLlN1YjE2Ri4yNSxieT0iY29tcGV0aXRvciIpIA0KYGBgIA0KDQojIyMgIyMjICMjIyAjIyMgDQo=