Fuente: https://fedme.results.info
WARNING: Rtools is required to build R packages but is not currently installed. Please download and install the appropriate version of Rtools before proceeding:

https://cran.rstudio.com/bin/windows/Rtools/
Reading Data

BLOC 2022-2024

2022 June-First

Elo June-First 2022

-Competitors = 20-

competitor Team R results R.new Prob.Finals Prob.podium
Ana TORREGROSA MARTÍNEZ FEMECV 1000 1 1030.40 53.9 % 51.5 %
Andrea RODRIGUEZ SALAS FEXME 1000 2 1027.03 53.4 % 51 %
Irati GUENETXEA BENGOA EMF-FVM 1000 3 1023.66 52.9 % 50.5 %
Vera BRIONGOS MARTÍN FEXME 1000 4 1020.29 52.4 % 50 %
Mar CARREÑO ESCOBAR FADMES 1000 5 1016.93 51.9 % 49.5 %
Aitana NAVARIDAS MARTIN FNDME 1000 6 1013.56 51.5 % 49 %
Brisa CALDERON BRUÑUEL FEMECV 1000 7 1010.19 51 % 48.5 %
Ainhize BELAR BARRUTIA EMF-FVM 1000 8 1006.82 50.5 % 48.1 %
Candela GARCIA VALLINA FEMPA 1000 9 1003.45 50 % 47.6 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 1000 10 1000.08 49.5 % 47.1 %
Candela SEPÚLVEDA FERRÍS FEMECV 1000 11 996.72 49 % 46.6 %
Natalia VALE FERNÁNDEZ FEGAMON 1000 12 993.35 48.5 % 46.1 %
Marina PABLO LASSA FAM 1000 13 989.98 48.1 % 45.6 %
Marina HIDALGO VALDERRÁBANO FADMES 1000 14 986.61 47.6 % 45.2 %
Nerea PÉREZ PEREA FMM 1000 15 983.24 47.1 % 44.7 %
Jordana PEREZ GRANELL FEMECV 1000 16 979.87 46.6 % 44.2 %
Sara FERNANDEZ ALVES FMM 1000 17 976.51 46.1 % 43.7 %
Elena CARAMES GONZALEZ FEMPA 1000 18 973.14 45.6 % 43.3 %
Samara FERRAGUT MARTINEZ FBME 1000 19 969.77 45.2 % 42.8 %
Aloia BELTRAN RODRIGUEZ FEGAMON 1000 20 966.40 44.7 % 42.3 %

######Elo History check code Chunk if running Sub16 alone

Elo in time

Elo Accumulated First_June_2022

competitor Team R.new Prob.Finals Prob.podium
Ana TORREGROSA MARTÍNEZ FEMECV 1030.40 53.9 % 51.5 %
Andrea RODRIGUEZ SALAS FEXME 1027.03 53.4 % 51 %
Irati GUENETXEA BENGOA EMF-FVM 1023.66 52.9 % 50.5 %
Vera BRIONGOS MARTÍN FEXME 1020.29 52.4 % 50 %
Mar CARREÑO ESCOBAR FADMES 1016.93 51.9 % 49.5 %
Aitana NAVARIDAS MARTIN FNDME 1013.56 51.5 % 49 %
Brisa CALDERON BRUÑUEL FEMECV 1010.19 51 % 48.5 %
Ainhize BELAR BARRUTIA EMF-FVM 1006.82 50.5 % 48.1 %
Candela GARCIA VALLINA FEMPA 1003.45 50 % 47.6 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 1000.08 49.5 % 47.1 %
Candela SEPÚLVEDA FERRÍS FEMECV 996.72 49 % 46.6 %
Natalia VALE FERNÁNDEZ FEGAMON 993.35 48.5 % 46.1 %
Marina PABLO LASSA FAM 989.98 48.1 % 45.6 %
Marina HIDALGO VALDERRÁBANO FADMES 986.61 47.6 % 45.2 %
Nerea PÉREZ PEREA FMM 983.24 47.1 % 44.7 %
Jordana PEREZ GRANELL FEMECV 979.87 46.6 % 44.2 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Elena CARAMES GONZALEZ FEMPA 973.14 45.6 % 43.3 %
Samara FERRAGUT MARTINEZ FBME 969.77 45.2 % 42.8 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %

2022 June-First - Abs

Elo June-First - Abs

-Competitors = 16-

competitor Team R results R.new Prob.Finals Prob.podium
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1000 1 1030.00 54.9 % 51.8 %
Aida TORRES ILLAMOLA FEEC 1000 2 1025.73 54.3 % 51.2 %
Rut MONSECH GASCA FEEC 1000 3 1021.47 53.7 % 50.6 %
Rebeca PEREZ DUATO FAM 1000 4 1017.20 53.1 % 50 %
Nora STAURSET HOVDE FEMECV 1000 5 1012.93 52.5 % 49.4 %
Maria BENACH ZUBERO FEEC 1000 6 1008.67 51.8 % 48.8 %
Maria PAREDES RAMOS FEXME 1000 7 1004.40 51.2 % 48.2 %
Lucía SEMPERE GONZÁLEZ FEMECV 1000 8 1000.13 50.6 % 47.5 %
Aitziber URRUTIA BARRUETA EMF-FVM 1000 9 995.87 50 % 46.9 %
Miriam DIEZ LUENGO FMM 1000 10 991.60 49.4 % 46.3 %
Antia FREITAS RIAL FEXME 1000 11 987.33 48.8 % 45.7 %
Haizea OSES SAIZ EMF-FVM 1000 12 983.07 48.2 % 45.1 %
Concepción María BALLESTEROS PÉREZ FADMES 1000 13 978.80 47.5 % 44.5 %
Oihane RUIZ DE ARGANDOÑA FNDME 1000 14 974.53 46.9 % 43.9 %
Alba GÓMEZ CALATAYUD FEMECV 1000 15 970.27 46.3 % 43.3 %
Laura VERDASCO URIZAL FMM 1000 15 970.27 46.3 % 43.3 %
_* Elo History *_

Elo in time

Elo Accumulated June-First_Abs_2022

competitor Team R.new Prob.Finals Prob.podium
Ana TORREGROSA MARTÍNEZ FEMECV 1030.40 53.9 % 51.5 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1030.00 54.9 % 51.8 %
Andrea RODRIGUEZ SALAS FEXME 1027.03 53.4 % 51 %
Aida TORRES ILLAMOLA FEEC 1025.73 54.3 % 51.2 %
Irati GUENETXEA BENGOA EMF-FVM 1023.66 52.9 % 50.5 %
Rut MONSECH GASCA FEEC 1021.47 53.7 % 50.6 %
Vera BRIONGOS MARTÍN FEXME 1020.29 52.4 % 50 %
Rebeca PEREZ DUATO FAM 1017.20 53.1 % 50 %
Mar CARREÑO ESCOBAR FADMES 1016.93 51.9 % 49.5 %
Aitana NAVARIDAS MARTIN FNDME 1013.56 51.5 % 49 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Brisa CALDERON BRUÑUEL FEMECV 1010.19 51 % 48.5 %
Maria BENACH ZUBERO FEEC 1008.67 51.8 % 48.8 %
Ainhize BELAR BARRUTIA EMF-FVM 1006.82 50.5 % 48.1 %
Maria PAREDES RAMOS FEXME 1004.40 51.2 % 48.2 %
Candela GARCIA VALLINA FEMPA 1003.45 50 % 47.6 %
Lucía SEMPERE GONZÁLEZ FEMECV 1000.13 50.6 % 47.5 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 1000.08 49.5 % 47.1 %
Candela SEPÚLVEDA FERRÍS FEMECV 996.72 49 % 46.6 %
Aitziber URRUTIA BARRUETA EMF-FVM 995.87 50 % 46.9 %
Natalia VALE FERNÁNDEZ FEGAMON 993.35 48.5 % 46.1 %
Miriam DIEZ LUENGO FMM 991.60 49.4 % 46.3 %
Marina PABLO LASSA FAM 989.98 48.1 % 45.6 %
Antia FREITAS RIAL FEXME 987.33 48.8 % 45.7 %
Marina HIDALGO VALDERRÁBANO FADMES 986.61 47.6 % 45.2 %
Nerea PÉREZ PEREA FMM 983.24 47.1 % 44.7 %
Haizea OSES SAIZ EMF-FVM 983.07 48.2 % 45.1 %
Jordana PEREZ GRANELL FEMECV 979.87 46.6 % 44.2 %
Concepción María BALLESTEROS PÉREZ FADMES 978.80 47.5 % 44.5 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Oihane RUIZ DE ARGANDOÑA FNDME 974.53 46.9 % 43.9 %
Elena CARAMES GONZALEZ FEMPA 973.14 45.6 % 43.3 %
Alba GÓMEZ CALATAYUD FEMECV 970.27 46.3 % 43.3 %
Laura VERDASCO URIZAL FMM 970.27 46.3 % 43.3 %
Samara FERRAGUT MARTINEZ FBME 969.77 45.2 % 42.8 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %

2022 June-Second

Elo June-Second

-Competitors = 16-

competitor Team R results R.new Prob.Finals Prob.podium
Ana TORREGROSA MARTÍNEZ FEMECV 1030.40 1 1060.25 59 % 54 %
Ainhize BELAR BARRUTIA EMF-FVM 1006.82 2 1032.54 55.1 % 50 %
Andrea RODRIGUEZ SALAS FEXME 1027.03 3 1048.37 57.4 % 52.3 %
Irati GUENETXEA BENGOA EMF-FVM 1023.66 4 1040.75 56.3 % 51.2 %
Natalia VALE FERNÁNDEZ FEGAMON 993.35 5 1006.35 51.4 % 46.2 %
Vera BRIONGOS MARTÍN FEXME 1020.29 6 1028.87 54.6 % 49.5 %
Mar CARREÑO ESCOBAR FADMES 1016.93 7 1021.26 53.5 % 48.4 %
Candela SEPÚLVEDA FERRÍS FEMECV 996.72 8 996.90 50 % 44.9 %
Brisa CALDERON BRUÑUEL FEMECV 1010.19 9 1006.03 51.3 % 46.2 %
Jordana PEREZ GRANELL FEMECV 979.87 10 971.62 46.4 % 41.3 %
Candela GARCIA VALLINA FEMPA 1003.45 11 990.79 49.1 % 44 %
Nerea PÉREZ PEREA FMM 983.24 12 966.43 45.6 % 40.6 %
Aitana NAVARIDAS MARTIN FNDME 1013.56 13 992.31 49.3 % 44.2 %
Marina HIDALGO VALDERRÁBANO FADMES 986.61 13 965.52 45.5 % 40.5 %
Marina PABLO LASSA FAM 989.98 15 960.33 44.8 % 39.8 %
Samara FERRAGUT MARTINEZ FBME 969.77 15 940.24 41.9 % 37 %

#####_ Elo History _

Elo in time

Elo Accumulated June_Second-2023

competitor Team R.new Prob.Finals Prob.podium
Ana TORREGROSA MARTÍNEZ FEMECV 1060.25 59 % 54 %
Andrea RODRIGUEZ SALAS FEXME 1048.37 57.4 % 52.3 %
Irati GUENETXEA BENGOA EMF-FVM 1040.75 56.3 % 51.2 %
Ainhize BELAR BARRUTIA EMF-FVM 1032.54 55.1 % 50 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1030.00 54.9 % 51.8 %
Vera BRIONGOS MARTÍN FEXME 1028.87 54.6 % 49.5 %
Aida TORRES ILLAMOLA FEEC 1025.73 54.3 % 51.2 %
Rut MONSECH GASCA FEEC 1021.47 53.7 % 50.6 %
Mar CARREÑO ESCOBAR FADMES 1021.26 53.5 % 48.4 %
Rebeca PEREZ DUATO FAM 1017.20 53.1 % 50 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Maria BENACH ZUBERO FEEC 1008.67 51.8 % 48.8 %
Natalia VALE FERNÁNDEZ FEGAMON 1006.35 51.4 % 46.2 %
Brisa CALDERON BRUÑUEL FEMECV 1006.03 51.3 % 46.2 %
Maria PAREDES RAMOS FEXME 1004.40 51.2 % 48.2 %
Lucía SEMPERE GONZÁLEZ FEMECV 1000.13 50.6 % 47.5 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 1000.08 49.5 % 47.1 %
Candela SEPÚLVEDA FERRÍS FEMECV 996.90 50 % 44.9 %
Aitziber URRUTIA BARRUETA EMF-FVM 995.87 50 % 46.9 %
Aitana NAVARIDAS MARTIN FNDME 992.31 49.3 % 44.2 %
Miriam DIEZ LUENGO FMM 991.60 49.4 % 46.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Antia FREITAS RIAL FEXME 987.33 48.8 % 45.7 %
Haizea OSES SAIZ EMF-FVM 983.07 48.2 % 45.1 %
Concepción María BALLESTEROS PÉREZ FADMES 978.80 47.5 % 44.5 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Oihane RUIZ DE ARGANDOÑA FNDME 974.53 46.9 % 43.9 %
Elena CARAMES GONZALEZ FEMPA 973.14 45.6 % 43.3 %
Jordana PEREZ GRANELL FEMECV 971.62 46.4 % 41.3 %
Alba GÓMEZ CALATAYUD FEMECV 970.27 46.3 % 43.3 %
Laura VERDASCO URIZAL FMM 970.27 46.3 % 43.3 %
Nerea PÉREZ PEREA FMM 966.43 45.6 % 40.6 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Marina PABLO LASSA FAM 960.33 44.8 % 39.8 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %

2022 June-Second-Abs

Elo June-Second-Abss

competitor Team R results R.new Prob.Finals Prob.podium
Rebeca PEREZ DUATO FAM 1017.20 1 1046.80 57.8 % 53.2 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1030.00 2 1056.15 59.1 % 54.5 %
Lucía SEMPERE GONZÁLEZ FEMECV 1000.13 3 1023.11 54.5 % 49.7 %
Miriam DIEZ LUENGO FMM 991.60 4 1011.26 52.8 % 48 %
Maria BENACH ZUBERO FEEC 1008.67 5 1024.85 54.7 % 50 %
Antia FREITAS RIAL FEXME 987.33 6 1000.29 51.2 % 46.5 %
Rut MONSECH GASCA FEEC 1021.47 7 1030.83 55.6 % 50.9 %
Oihane RUIZ DE ARGANDOÑA FNDME 974.53 8 980.83 48.4 % 43.7 %
Iune LA HIDALGA OTAMENDI EMF-FVM 1000.00 9 1003.45 51.7 % 46.9 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 1000.00 10 1000.08 51.2 % 46.4 %
Aitziber URRUTIA BARRUETA EMF-FVM 995.87 11 991.93 50 % 45.3 %
Maria PAREDES RAMOS FEXME 1004.40 12 997.03 50.7 % 46 %
Haizea OSES SAIZ EMF-FVM 983.07 13 972.47 47.2 % 42.5 %
Concepción María BALLESTEROS PÉREZ FADMES 978.80 14 964.86 46.1 % 41.5 %
Laura VERDASCO URIZAL FMM 970.27 15 953.02 44.4 % 39.8 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 1000.00 16 979.87 48.3 % 43.6 %
Cristina JARDON SUAREZ FEMPA 1000.00 17 976.51 47.8 % 43.1 %
Alba GÓMEZ CALATAYUD FEMECV 970.27 18 942.92 43 % 38.4 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 1000.00 18 973.14 47.3 % 42.6 %
Silvia FAYOS LOZADA FEMECV 1000.00 18 973.14 47.3 % 42.6 %

#####_ Elo History _

Elo in time

Elo Accumulated June_Second-Abs 2022

competitor Team R.new Prob.Finals Prob.podium
Ana TORREGROSA MARTÍNEZ FEMECV 1060.25 59 % 54 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1056.15 59.1 % 54.5 %
Andrea RODRIGUEZ SALAS FEXME 1048.37 57.4 % 52.3 %
Rebeca PEREZ DUATO FAM 1046.80 57.8 % 53.2 %
Irati GUENETXEA BENGOA EMF-FVM 1040.75 56.3 % 51.2 %
Ainhize BELAR BARRUTIA EMF-FVM 1032.54 55.1 % 50 %
Rut MONSECH GASCA FEEC 1030.83 55.6 % 50.9 %
Vera BRIONGOS MARTÍN FEXME 1028.87 54.6 % 49.5 %
Aida TORRES ILLAMOLA FEEC 1025.73 54.3 % 51.2 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1023.11 54.5 % 49.7 %
Mar CARREÑO ESCOBAR FADMES 1021.26 53.5 % 48.4 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Miriam DIEZ LUENGO FMM 1011.26 52.8 % 48 %
Natalia VALE FERNÁNDEZ FEGAMON 1006.35 51.4 % 46.2 %
Brisa CALDERON BRUÑUEL FEMECV 1006.03 51.3 % 46.2 %
Iune LA HIDALGA OTAMENDI EMF-FVM 1003.45 51.7 % 46.9 %
Antia FREITAS RIAL FEXME 1000.29 51.2 % 46.5 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 1000.08 49.5 % 47.1 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 1000.08 51.2 % 46.4 %
Maria PAREDES RAMOS FEXME 997.03 50.7 % 46 %
Candela SEPÚLVEDA FERRÍS FEMECV 996.90 50 % 44.9 %
Aitana NAVARIDAS MARTIN FNDME 992.31 49.3 % 44.2 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Oihane RUIZ DE ARGANDOÑA FNDME 980.83 48.4 % 43.7 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 979.87 48.3 % 43.6 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 973.14 47.3 % 42.6 %
Elena CARAMES GONZALEZ FEMPA 973.14 45.6 % 43.3 %
Silvia FAYOS LOZADA FEMECV 973.14 47.3 % 42.6 %
Haizea OSES SAIZ EMF-FVM 972.47 47.2 % 42.5 %
Jordana PEREZ GRANELL FEMECV 971.62 46.4 % 41.3 %
Nerea PÉREZ PEREA FMM 966.43 45.6 % 40.6 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Concepción María BALLESTEROS PÉREZ FADMES 964.86 46.1 % 41.5 %
Marina PABLO LASSA FAM 960.33 44.8 % 39.8 %
Laura VERDASCO URIZAL FMM 953.02 44.4 % 39.8 %
Alba GÓMEZ CALATAYUD FEMECV 942.92 43 % 38.4 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %

2022 Nov

Elo Nov-2022

-Competitors = 16-

competitor Team R results R.new Prob.Finals Prob.podium
Ainhize BELAR BARRUTIA EMF-FVM 1032.54 1 1062.21 58.8 % 51 %
Vera BRIONGOS MARTÍN FEXME 1028.87 2 1055.00 57.8 % 50 %
Andrea RODRIGUEZ SALAS FEXME 1048.37 3 1070.83 60 % 52.3 %
Ana TORREGROSA MARTÍNEZ FEMECV 1060.25 4 1079.08 61.1 % 53.5 %
Candela SEPÚLVEDA FERRÍS FEMECV 996.90 5 1012.56 51.8 % 43.9 %
Irati GUENETXEA BENGOA EMF-FVM 1040.75 6 1052.59 57.5 % 49.7 %
Aitana NAVARIDAS MARTIN FNDME 992.31 7 1000.89 50.1 % 42.3 %
Rocío LEAL ABAD FMRM 1000.00 8 1005.43 50.7 % 42.9 %
Marina PABLO LASSA FAM 960.33 9 961.99 44.5 % 36.9 %
Mar CARREÑO ESCOBAR FADMES 1021.26 10 1019.00 52.7 % 44.8 %
Brisa CALDERON BRUÑUEL FEMECV 1006.03 11 1000.30 50 % 42.2 %
Nerea PÉREZ PEREA FMM 966.43 11 960.95 44.4 % 36.8 %
Julia PACHECO PORRAS FDMCM 1000.00 11 994.76 49.2 % 41.4 %
Jordana PEREZ GRANELL FEMECV 971.62 14 955.44 43.6 % 36.1 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 1000.08 15 980.17 47.1 % 39.4 %
Elena CARAMES GONZALEZ FEMPA 973.14 16 949.84 42.8 % 35.3 %
Mariana SOUSA FCMP 1000.00 17 973.43 46.1 % 38.5 %
Natalia VALE FERNÁNDEZ FEGAMON 1006.35 18 975.73 46.5 % 38.8 %
Ana MARTINEZ BELDA FMRM 1000.00 18 969.87 45.6 % 38 %

#####_ Elo History _

Elo in time

Elo Accumulated June_Second-2023

competitor Team R.new Prob.Finals Prob.podium
Ana TORREGROSA MARTÍNEZ FEMECV 1079.08 61.1 % 53.5 %
Andrea RODRIGUEZ SALAS FEXME 1070.83 60 % 52.3 %
Ainhize BELAR BARRUTIA EMF-FVM 1062.21 58.8 % 51 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1056.15 59.1 % 54.5 %
Vera BRIONGOS MARTÍN FEXME 1055.00 57.8 % 50 %
Irati GUENETXEA BENGOA EMF-FVM 1052.59 57.5 % 49.7 %
Rebeca PEREZ DUATO FAM 1046.80 57.8 % 53.2 %
Rut MONSECH GASCA FEEC 1030.83 55.6 % 50.9 %
Aida TORRES ILLAMOLA FEEC 1025.73 54.3 % 51.2 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1023.11 54.5 % 49.7 %
Mar CARREÑO ESCOBAR FADMES 1019.00 52.7 % 44.8 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Candela SEPÚLVEDA FERRÍS FEMECV 1012.56 51.8 % 43.9 %
Miriam DIEZ LUENGO FMM 1011.26 52.8 % 48 %
Rocío LEAL ABAD FMRM 1005.43 50.7 % 42.9 %
Iune LA HIDALGA OTAMENDI EMF-FVM 1003.45 51.7 % 46.9 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Brisa CALDERON BRUÑUEL FEMECV 1000.30 50 % 42.2 %
Antia FREITAS RIAL FEXME 1000.29 51.2 % 46.5 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 1000.08 51.2 % 46.4 %
Maria PAREDES RAMOS FEXME 997.03 50.7 % 46 %
Julia PACHECO PORRAS FDMCM 994.76 49.2 % 41.4 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Oihane RUIZ DE ARGANDOÑA FNDME 980.83 48.4 % 43.7 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 980.17 47.1 % 39.4 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 979.87 48.3 % 43.6 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Natalia VALE FERNÁNDEZ FEGAMON 975.73 46.5 % 38.8 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 973.14 47.3 % 42.6 %
Silvia FAYOS LOZADA FEMECV 973.14 47.3 % 42.6 %
Haizea OSES SAIZ EMF-FVM 972.47 47.2 % 42.5 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Concepción María BALLESTEROS PÉREZ FADMES 964.86 46.1 % 41.5 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Nerea PÉREZ PEREA FMM 960.95 44.4 % 36.8 %
Jordana PEREZ GRANELL FEMECV 955.44 43.6 % 36.1 %
Laura VERDASCO URIZAL FMM 953.02 44.4 % 39.8 %
Elena CARAMES GONZALEZ FEMPA 949.84 42.8 % 35.3 %
Alba GÓMEZ CALATAYUD FEMECV 942.92 43 % 38.4 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %

2022 Nov - Abs

Elo Nov - Abs

-Competitors = 19-

competitor Team R results R.new Prob.Finals Prob.podium
Lucía SEMPERE GONZÁLEZ FEMECV 1023.11 1 1052.98 57.8 % 49.7 %
Aida TORRES ILLAMOLA FEEC 1025.73 2 1052.03 57.6 % 49.5 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1056.15 3 1078.72 61.3 % 53.4 %
Rebeca PEREZ DUATO FAM 1046.80 4 1065.87 59.6 % 51.5 %
Lucia MIRANDA CID FEEC 1000.00 5 1016.09 52.5 % 44.4 %
Michelle Paola MATHEUS GUILLEN FMM 1000.00 6 1012.54 52 % 43.9 %
Miriam DIEZ LUENGO FMM 1011.26 7 1019.86 53.1 % 44.9 %
Silvia FAYOS LOZADA FEMECV 973.14 8 978.41 47.1 % 39.1 %
Maria PAREDES RAMOS FEXME 997.03 9 998.60 50 % 41.9 %
Antia FREITAS RIAL FEXME 1000.29 10 998.29 50 % 41.9 %
Rut MONSECH GASCA FEEC 1030.83 11 1025.10 53.8 % 45.7 %
Andrea RODRIGUEZ SALAS FEXME 1070.83 12 1061.32 58.9 % 50.9 %
Haizea OSES SAIZ EMF-FVM 972.47 13 959.96 44.5 % 36.6 %
Concepción María BALLESTEROS PÉREZ FADMES 964.86 14 948.84 42.9 % 35.1 %
Paula TRAVERSO LEBRON FEXME 1000.00 14 984.09 47.9 % 39.9 %
Ana TORREGROSA MARTÍNEZ FEMECV 1079.08 16 1055.30 58.1 % 50 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 979.87 17 953.10 43.5 % 35.7 %
Laura VERDASCO URIZAL FMM 953.02 17 926.40 39.8 % 32.3 %
Oihane RUIZ DE ARGANDOÑA FNDME 980.83 17 954.05 43.6 % 35.8 %
_* Elo History *_

Elo in time

Elo Accumulated June-First_Abs_2022

competitor Team R.new Prob.Finals Prob.podium
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1078.72 61.3 % 53.4 %
Rebeca PEREZ DUATO FAM 1065.87 59.6 % 51.5 %
Ainhize BELAR BARRUTIA EMF-FVM 1062.21 58.8 % 51 %
Andrea RODRIGUEZ SALAS FEXME 1061.32 58.9 % 50.9 %
Ana TORREGROSA MARTÍNEZ FEMECV 1055.30 58.1 % 50 %
Vera BRIONGOS MARTÍN FEXME 1055.00 57.8 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1052.98 57.8 % 49.7 %
Irati GUENETXEA BENGOA EMF-FVM 1052.59 57.5 % 49.7 %
Aida TORRES ILLAMOLA FEEC 1052.03 57.6 % 49.5 %
Rut MONSECH GASCA FEEC 1025.10 53.8 % 45.7 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Miriam DIEZ LUENGO FMM 1019.86 53.1 % 44.9 %
Mar CARREÑO ESCOBAR FADMES 1019.00 52.7 % 44.8 %
Lucia MIRANDA CID FEEC 1016.09 52.5 % 44.4 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Candela SEPÚLVEDA FERRÍS FEMECV 1012.56 51.8 % 43.9 %
Michelle Paola MATHEUS GUILLEN FMM 1012.54 52 % 43.9 %
Rocío LEAL ABAD FMRM 1005.43 50.7 % 42.9 %
Iune LA HIDALGA OTAMENDI EMF-FVM 1003.45 51.7 % 46.9 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Brisa CALDERON BRUÑUEL FEMECV 1000.30 50 % 42.2 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 1000.08 51.2 % 46.4 %
Maria PAREDES RAMOS FEXME 998.60 50 % 41.9 %
Antia FREITAS RIAL FEXME 998.29 50 % 41.9 %
Julia PACHECO PORRAS FDMCM 994.76 49.2 % 41.4 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Paula TRAVERSO LEBRON FEXME 984.09 47.9 % 39.9 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 980.17 47.1 % 39.4 %
Silvia FAYOS LOZADA FEMECV 978.41 47.1 % 39.1 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Natalia VALE FERNÁNDEZ FEGAMON 975.73 46.5 % 38.8 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 973.14 47.3 % 42.6 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Nerea PÉREZ PEREA FMM 960.95 44.4 % 36.8 %
Haizea OSES SAIZ EMF-FVM 959.96 44.5 % 36.6 %
Jordana PEREZ GRANELL FEMECV 955.44 43.6 % 36.1 %
Oihane RUIZ DE ARGANDOÑA FNDME 954.05 43.6 % 35.8 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Elena CARAMES GONZALEZ FEMPA 949.84 42.8 % 35.3 %
Concepción María BALLESTEROS PÉREZ FADMES 948.84 42.9 % 35.1 %
Alba GÓMEZ CALATAYUD FEMECV 942.92 43 % 38.4 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %

MERGING from sub16

competitor Team R results R.new Prob.Finals Prob.podium
Geila MACIÀ MARTÍN FEEC 1000 1 1030.77 52.9 % 51.1 %
Júlia BENACH ZUBERO FEEC 1000 2 1028.21 52.6 % 50.7 %
Emily Charlotte PESCETTO FEEC 1000 3 1025.65 52.2 % 50.4 %
Laia TAULATS MCDONALD FAM-AND 1000 4 1023.09 51.8 % 50 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1000 5 1020.53 51.5 % 49.6 %
Maria FERRÉ PRIM FEEC 1000 6 1017.97 51.1 % 49.3 %
Erika CARRASCO AGUILA FMM 1000 7 1015.41 50.7 % 48.9 %
Nathalie Joanna VENDSALU FEMECV 1000 7 1015.41 50.7 % 48.9 %
Kanae Maria FRAILE ITAGAKI FECAMON 1000 9 1010.29 50 % 48.2 %
India PERSSON FERNÁNDEZ FADMES 1000 10 1007.73 49.6 % 47.8 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1000 11 1005.17 49.3 % 47.4 %
Intza ELIZALDE LARRARTE EMF-FVM 1000 12 1002.61 48.9 % 47.1 %
Maite VILA LÓPEZ FEXME 1000 13 1000.05 48.5 % 46.7 %
Martina MUÑIZ VALENCIA FMM 1000 14 997.49 48.2 % 46.3 %
Amaya DEL POZO CARIION FMM 1000 15 994.93 47.8 % 46 %
Carmen SÁNCHEZ JIMENEZ FDMCM 1000 16 992.37 47.4 % 45.6 %
Carlota BÖCK VÁZQUEZ FEGAMON 1000 17 989.81 47.1 % 45.2 %
Maria SANTOS GONZÁLEZ FEXME 1000 18 987.25 46.7 % 44.9 %
Paula HUERGO MIYAR FEMPA 1000 19 984.69 46.3 % 44.5 %
Ayla RUBIO GARCIA FMM 1000 20 982.13 46 % 44.1 %
Paula LUCIO PANIAGUA FDMESCyL 1000 21 979.57 45.6 % 43.8 %
Aitana GARCÍA BERNABEU FEMECV 1000 22 977.01 45.2 % 43.4 %
Lucia LORES REY FEGAMON 1000 23 974.45 44.9 % 43 %
Alba MARTÍNEZ LLARÍA FMM 1000 24 971.89 44.5 % 42.7 %
Cristina CHAMON GARCÍA FDMCM 1000 25 969.33 44.1 % 42.3 %
Alejandra MARTÍN GARCÍA FDMCM 1000 26 966.77 43.8 % 42 %
competitor Team R results R.new Prob.Finals Prob.podium
Geila MACIÀ MARTÍN FEEC 1030.77 1 1061.61 56.1 % 52.7 %
Júlia BENACH ZUBERO FEEC 1028.21 2 1056.85 55.4 % 52.1 %
Nathalie Joanna VENDSALU FEMECV 1015.41 3 1041.88 53.3 % 49.9 %
Emily Charlotte PESCETTO FEEC 1025.65 4 1049.88 54.4 % 51.1 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1020.53 5 1042.57 53.4 % 50 %
Intza ELIZALDE LARRARTE EMF-FVM 1002.61 6 1022.50 50.5 % 47.1 %
Erika CARRASCO AGUILA FMM 1015.41 7 1033.05 52 % 48.6 %
Laia TAULATS MCDONALD FAM-AND 1023.09 7 1040.71 53.1 % 49.7 %
Martina MUÑIZ VALENCIA FMM 997.49 9 1010.78 48.8 % 45.4 %
India PERSSON FERNÁNDEZ FADMES 1007.73 10 1018.78 50 % 46.6 %
Kanae Maria FRAILE ITAGAKI FECAMON 1010.29 11 1019.12 50 % 46.6 %
Maite VILA LÓPEZ FEXME 1000.05 12 1006.71 48.2 % 44.9 %
Carmen SÁNCHEZ JIMENEZ FDMCM 992.37 13 996.84 46.8 % 43.5 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1005.17 14 1007.40 48.3 % 45 %
Aitana GARCÍA BERNABEU FEMECV 977.01 15 977.12 44 % 40.7 %
Alba MARTÍNEZ LLARÍA FMM 971.89 16 969.81 43 % 39.7 %
Alejandra MARTÍN GARCÍA FDMCM 966.77 17 962.49 41.9 % 38.7 %
Carlota BÖCK VÁZQUEZ FEGAMON 989.81 18 983.26 44.9 % 41.5 %
Amaya DEL POZO CARRION FMM 1000.00 19 991.21 46 % 42.7 %
Paula LUCIO PANIAGUA FDMESCyL 979.57 20 968.63 42.8 % 39.5 %
Lucia LORES REY FEGAMON 974.45 21 961.32 41.8 % 38.5 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 1000.00 22 984.59 45 % 41.7 %
Lara PRIDA SEOANE FEGAMON 1000.00 23 982.38 44.7 % 41.4 %
Sara GUERRERO RODRÍGUEZ FDMESCyL 1000.00 24 980.17 44.4 % 41.1 %
Nayara PANTIGA GUTIERREZ FEMPA 1000.00 25 977.97 44.1 % 40.8 %
Maria SANTOS GONZÁLEZ FEXME 987.25 26 963.05 42 % 38.8 %
Paula HUERGO MIYAR FEMPA 984.69 26 960.50 41.6 % 38.4 %
Lidia ALVAREZ RODRIGUEZ FEMPA 1000.00 26 975.76 43.8 % 40.5 %
Lucía SÁNCHEZ SANTAMARÍA FDMESCyL 1000.00 26 975.76 43.8 % 40.5 %
Raquel GEIJO RODRÍGUEZ FDMESCyL 1000.00 26 975.76 43.8 % 40.5 %
competitor Team R results R.new Prob.Finals Prob.podium
Geila MACIÀ MARTÍN FEEC 1061.61 1 1091.93 59.1 % 54.1 %
Júlia BENACH ZUBERO FEEC 1056.85 2 1084.52 58.1 % 53.1 %
Emily Charlotte PESCETTO FEEC 1049.88 3 1074.92 56.7 % 51.7 %
Laia TAULATS MCDONALD FAM-AND 1040.71 4 1063.12 55 % 50 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1042.57 5 1062.30 54.9 % 49.9 %
Nathalie Joanna VENDSALU FEMECV 1041.88 6 1058.95 54.4 % 49.4 %
Carmen SÁNCHEZ JIMENEZ FDMCM 996.84 7 1011.43 47.6 % 42.6 %
Maria FERRÉ PRIM FEEC 1017.97 8 1029.80 50.3 % 45.2 %
India PERSSON FERNÁNDEZ FADMES 1018.78 9 1027.94 50 % 45 %
Erika CARRASCO AGUILA FMM 1033.05 10 1039.49 51.7 % 46.6 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1007.40 11 1011.28 47.6 % 42.6 %
Martina MUÑIZ VALENCIA FMM 1010.78 12 1011.98 47.7 % 42.7 %
Maite VILA LÓPEZ FEXME 1006.71 13 1005.26 46.7 % 41.7 %
Intza ELIZALDE LARRARTE EMF-FVM 1022.50 14 1018.32 48.6 % 43.6 %
Kanae Maria FRAILE ITAGAKI FECAMON 1019.12 14 1014.95 48.1 % 43.1 %
Paula HUERGO MIYAR FEMPA 960.50 14 956.57 39.9 % 35.1 %
Sofía PEÑA PÉREZ FMM 1000.00 14 996.08 45.4 % 40.5 %
Maria SANTOS GONZÁLEZ FEXME 963.05 18 948.45 38.8 % 34.1 %
Meia LEÓN VILCHES FEXME 1000.00 19 982.75 43.5 % 38.6 %
Alba MARTÍNEZ LLARÍA FMM 969.81 20 949.85 38.9 % 34.3 %
Alejandra MARTÍN GARCÍA FDMCM 962.49 20 942.56 38 % 33.3 %
Carlota BÖCK VÁZQUEZ FEGAMON 983.26 20 963.24 40.8 % 36 %
Lara PRIDA SEOANE FEGAMON 982.38 20 962.36 40.7 % 35.9 %
Leire SÁNCHEZ GARCÍA FMRM 1000.00 20 980.08 43.2 % 38.3 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 984.59 25 951.23 39.1 % 34.4 %

2023 March

Elo 2023 March

-Competitors = r-

[1] 7
[1] 2
competitor Team R results R.new Prob.Finals Prob.podium
Intza ELIZALDE LARRARTE EMF-FVM 1018.32 1 1048.76 68.5 % 58.4 %
Laia TAULATS MCDONALD FAM-AND 1063.12 2 1090.18 73.4 % 64 %
Andrea RODRIGUEZ SALAS FEXME 1061.32 3 1081.46 72.4 % 62.8 %
Mar CARREÑO ESCOBAR FADMES 1019.00 4 1036.49 67 % 56.6 %
Carlota BÖCK VÁZQUEZ FEGAMON 963.24 5 981.11 59.6 % 48.7 %
Elur ARTEAGA ARZALLUS EMF-FVM 1000.00 6 1014.52 64.1 % 53.5 %
Nerea PÉREZ PEREA FMM 960.95 7 969.60 58 % 47 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1011.28 8 1019.35 64.7 % 54.2 %
India PERSSON FERNÁNDEZ FADMES 1027.94 9 1032.74 66.5 % 56.1 %
Irati ASO ESAIN FNDME 1000.00 10 1001.72 62.4 % 51.7 %
Brisa CALDERON BRUÑUEL FEMECV 1000.30 11 995.63 61.6 % 50.8 %
Julia PACHECO PORRAS FDMCM 994.76 11 990.17 60.8 % 50 %
Alba MARTÍNEZ LLARÍA FMM 949.85 13 942.18 54.1 % 43.1 %
Maria SANTOS GONZÁLEZ FEXME 948.45 14 937.58 53.4 % 42.5 %
Sofía PEÑA PÉREZ FMM 996.08 15 981.81 59.7 % 48.8 %
Amaya DEL POZO CARRION FMM 991.21 16 973.76 58.5 % 47.6 %
Paula LUCIO PANIAGUA FDMESCyL 968.63 16 951.28 55.4 % 44.4 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 980.17 18 953.37 55.7 % 44.7 %
Lucia LORES REY FEGAMON 961.32 18 937.60 53.4 % 42.5 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 951.23 20 921.15 51.1 % 40.2 %
Elena CARAMES GONZALEZ FEMPA 949.84 21 913.83 50 % 39.2 %
Lidia ALVAREZ RODRIGUEZ FEMPA 975.76 22 939.18 53.6 % 42.7 %

#####_ Elo History _

Elo in time

Elo Accumulated March_2023

competitor Team R.new Prob.Finals Prob.podium
Laia TAULATS MCDONALD FAM-AND 1090.18 73.4 % 64 %
Andrea RODRIGUEZ SALAS FEXME 1081.46 72.4 % 62.8 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1078.72 61.3 % 53.4 %
Rebeca PEREZ DUATO FAM 1065.87 59.6 % 51.5 %
Ainhize BELAR BARRUTIA EMF-FVM 1062.21 58.8 % 51 %
Ana TORREGROSA MARTÍNEZ FEMECV 1055.30 58.1 % 50 %
Vera BRIONGOS MARTÍN FEXME 1055.00 57.8 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1052.98 57.8 % 49.7 %
Irati GUENETXEA BENGOA EMF-FVM 1052.59 57.5 % 49.7 %
Aida TORRES ILLAMOLA FEEC 1052.03 57.6 % 49.5 %
Intza ELIZALDE LARRARTE EMF-FVM 1048.76 68.5 % 58.4 %
Mar CARREÑO ESCOBAR FADMES 1036.49 67 % 56.6 %
India PERSSON FERNÁNDEZ FADMES 1032.74 66.5 % 56.1 %
Rut MONSECH GASCA FEEC 1025.10 53.8 % 45.7 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Miriam DIEZ LUENGO FMM 1019.86 53.1 % 44.9 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1019.35 64.7 % 54.2 %
Lucia MIRANDA CID FEEC 1016.09 52.5 % 44.4 %
Elur ARTEAGA ARZALLUS EMF-FVM 1014.52 64.1 % 53.5 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Candela SEPÚLVEDA FERRÍS FEMECV 1012.56 51.8 % 43.9 %
Michelle Paola MATHEUS GUILLEN FMM 1012.54 52 % 43.9 %
Rocío LEAL ABAD FMRM 1005.43 50.7 % 42.9 %
Iune LA HIDALGA OTAMENDI EMF-FVM 1003.45 51.7 % 46.9 %
Irati ASO ESAIN FNDME 1001.72 62.4 % 51.7 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 1000.08 51.2 % 46.4 %
Maria PAREDES RAMOS FEXME 998.60 50 % 41.9 %
Antia FREITAS RIAL FEXME 998.29 50 % 41.9 %
Brisa CALDERON BRUÑUEL FEMECV 995.63 61.6 % 50.8 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Paula TRAVERSO LEBRON FEXME 984.09 47.9 % 39.9 %
Sofía PEÑA PÉREZ FMM 981.81 59.7 % 48.8 %
Carlota BÖCK VÁZQUEZ FEGAMON 981.11 59.6 % 48.7 %
Silvia FAYOS LOZADA FEMECV 978.41 47.1 % 39.1 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Natalia VALE FERNÁNDEZ FEGAMON 975.73 46.5 % 38.8 %
Amaya DEL POZO CARRION FMM 973.76 58.5 % 47.6 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 973.14 47.3 % 42.6 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Nerea PÉREZ PEREA FMM 969.60 58 % 47 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Haizea OSES SAIZ EMF-FVM 959.96 44.5 % 36.6 %
Jordana PEREZ GRANELL FEMECV 955.44 43.6 % 36.1 %
Oihane RUIZ DE ARGANDOÑA FNDME 954.05 43.6 % 35.8 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 953.37 55.7 % 44.7 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Paula LUCIO PANIAGUA FDMESCyL 951.28 55.4 % 44.4 %
Concepción María BALLESTEROS PÉREZ FADMES 948.84 42.9 % 35.1 %
Alba GÓMEZ CALATAYUD FEMECV 942.92 43 % 38.4 %
Alba MARTÍNEZ LLARÍA FMM 942.18 54.1 % 43.1 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Lucia LORES REY FEGAMON 937.60 53.4 % 42.5 %
Maria SANTOS GONZÁLEZ FEXME 937.58 53.4 % 42.5 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 921.15 51.1 % 40.2 %
Elena CARAMES GONZALEZ FEMPA 913.83 50 % 39.2 %

2023 March-Abs

Elo March-Abs 2023

-Competitors = r-

competitor Team R results R.new Prob.Finals Prob.podium
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1078.72 1 1108.96 58.6 % 54.2 %
Aida TORRES ILLAMOLA FEEC 1052.03 2 1079.71 54.5 % 50 %
Rut MONSECH GASCA FEEC 1025.10 3 1050.22 50.3 % 45.8 %
Ainhize BELAR BARRUTIA EMF-FVM 1062.21 4 1084.51 55.2 % 50.7 %
Lucía SEMPERE GONZÁLEZ FEMECV 1052.98 5 1072.65 53.5 % 49 %
Michelle Paola MATHEUS GUILLEN FMM 1012.54 6 1029.71 47.3 % 42.9 %
Lucia MIRANDA CID FEEC 1016.09 7 1030.58 47.5 % 43 %
Vera BRIONGOS MARTÍN FEXME 1055.00 8 1066.66 52.6 % 48.1 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 1000.08 9 1009.31 44.4 % 40 %
Antia FREITAS RIAL FEXME 998.29 10 1004.86 43.8 % 39.4 %
Irati ZABALA MUXIKA EMF-FVM 1000.00 11 1004.07 43.7 % 39.3 %
Laia TAULATS MCDONALD FAM-AND 1090.18 12 1091.04 56.1 % 51.6 %
Paula TRAVERSO LEBRON FEXME 984.09 13 982.72 40.7 % 36.4 %
Maria PAREDES RAMOS FEXME 998.60 14 994.50 42.3 % 38 %
Ana TORREGROSA MARTÍNEZ FEMECV 1055.30 15 1048.30 50 % 45.5 %
Iune LA HIDALGA OTAMENDI EMF-FVM 1003.45 16 994.00 42.2 % 37.9 %
Andrea RODRIGUEZ SALAS FEXME 1081.46 17 1069.02 53 % 48.5 %
Haizea OSES SAIZ EMF-FVM 959.96 18 945.35 35.6 % 31.6 %
Irati GUENETXEA BENGOA EMF-FVM 1052.59 19 1034.93 48.1 % 43.6 %
Oihane RUIZ DE ARGANDOÑA FNDME 954.05 20 934.13 34.1 % 30.2 %
Concepción María BALLESTEROS PÉREZ FADMES 948.84 21 926.28 33.1 % 29.3 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 973.14 21 950.48 36.3 % 32.2 %
Silvia FAYOS LOZADA FEMECV 978.41 21 955.73 37 % 32.9 %
María FEO MIGUELA FNDME 1000.00 21 977.40 39.9 % 35.7 %
Sara Libertad DÍAZ DE SARRALDE FMM 1000.00 21 977.40 39.9 % 35.7 %

#####_ Elo History _

Elo in time

Elo Accumulated Second_2023

competitor Team R.new Prob.Finals Prob.podium
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1108.96 58.6 % 54.2 %
Laia TAULATS MCDONALD FAM-AND 1091.04 56.1 % 51.6 %
Ainhize BELAR BARRUTIA EMF-FVM 1084.51 55.2 % 50.7 %
Aida TORRES ILLAMOLA FEEC 1079.71 54.5 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1072.65 53.5 % 49 %
Andrea RODRIGUEZ SALAS FEXME 1069.02 53 % 48.5 %
Vera BRIONGOS MARTÍN FEXME 1066.66 52.6 % 48.1 %
Rebeca PEREZ DUATO FAM 1065.87 59.6 % 51.5 %
Rut MONSECH GASCA FEEC 1050.22 50.3 % 45.8 %
Intza ELIZALDE LARRARTE EMF-FVM 1048.76 68.5 % 58.4 %
Ana TORREGROSA MARTÍNEZ FEMECV 1048.30 50 % 45.5 %
Mar CARREÑO ESCOBAR FADMES 1036.49 67 % 56.6 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
India PERSSON FERNÁNDEZ FADMES 1032.74 66.5 % 56.1 %
Lucia MIRANDA CID FEEC 1030.58 47.5 % 43 %
Michelle Paola MATHEUS GUILLEN FMM 1029.71 47.3 % 42.9 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Miriam DIEZ LUENGO FMM 1019.86 53.1 % 44.9 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1019.35 64.7 % 54.2 %
Elur ARTEAGA ARZALLUS EMF-FVM 1014.52 64.1 % 53.5 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Candela SEPÚLVEDA FERRÍS FEMECV 1012.56 51.8 % 43.9 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 1009.31 44.4 % 40 %
Rocío LEAL ABAD FMRM 1005.43 50.7 % 42.9 %
Antia FREITAS RIAL FEXME 1004.86 43.8 % 39.4 %
Irati ZABALA MUXIKA EMF-FVM 1004.07 43.7 % 39.3 %
Irati ASO ESAIN FNDME 1001.72 62.4 % 51.7 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Brisa CALDERON BRUÑUEL FEMECV 995.63 61.6 % 50.8 %
Maria PAREDES RAMOS FEXME 994.50 42.3 % 38 %
Iune LA HIDALGA OTAMENDI EMF-FVM 994.00 42.2 % 37.9 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Paula TRAVERSO LEBRON FEXME 982.72 40.7 % 36.4 %
Sofía PEÑA PÉREZ FMM 981.81 59.7 % 48.8 %
Carlota BÖCK VÁZQUEZ FEGAMON 981.11 59.6 % 48.7 %
María FEO MIGUELA FNDME 977.40 39.9 % 35.7 %
Sara Libertad DÍAZ DE SARRALDE FMM 977.40 39.9 % 35.7 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Natalia VALE FERNÁNDEZ FEGAMON 975.73 46.5 % 38.8 %
Amaya DEL POZO CARRION FMM 973.76 58.5 % 47.6 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Nerea PÉREZ PEREA FMM 969.60 58 % 47 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Silvia FAYOS LOZADA FEMECV 955.73 37 % 32.9 %
Jordana PEREZ GRANELL FEMECV 955.44 43.6 % 36.1 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 953.37 55.7 % 44.7 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Paula LUCIO PANIAGUA FDMESCyL 951.28 55.4 % 44.4 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Haizea OSES SAIZ EMF-FVM 945.35 35.6 % 31.6 %
Alba GÓMEZ CALATAYUD FEMECV 942.92 43 % 38.4 %
Alba MARTÍNEZ LLARÍA FMM 942.18 54.1 % 43.1 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Lucia LORES REY FEGAMON 937.60 53.4 % 42.5 %
Maria SANTOS GONZÁLEZ FEXME 937.58 53.4 % 42.5 %
Oihane RUIZ DE ARGANDOÑA FNDME 934.13 34.1 % 30.2 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Concepción María BALLESTEROS PÉREZ FADMES 926.28 33.1 % 29.3 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 921.15 51.1 % 40.2 %
Elena CARAMES GONZALEZ FEMPA 913.83 50 % 39.2 %

2023 May

Elo 2023 May

-Competitors = r-

competitor Team R results R.new Prob.Finals Prob.podium
Laia TAULATS MCDONALD FAM-AND 1091.04 1 1121.25 66 % 59.5 %
Elur ARTEAGA ARZALLUS EMF-FVM 1014.52 2 1042.46 55.3 % 48.3 %
Andrea RODRIGUEZ SALAS FEXME 1069.02 3 1094.19 62.5 % 55.7 %
Intza ELIZALDE LARRARTE EMF-FVM 1048.76 4 1071.45 59.3 % 52.5 %
India PERSSON FERNÁNDEZ FADMES 1032.74 5 1052.93 56.8 % 49.8 %
Mar CARREÑO ESCOBAR FADMES 1036.49 6 1054.11 56.9 % 50 %
Natalia VALE FERNÁNDEZ FEGAMON 975.73 7 991.03 47.9 % 41 %
Amaya DEL POZO CARRION FMM 973.76 8 986.51 47.2 % 40.4 %
Brisa CALDERON BRUÑUEL FEMECV 995.63 9 1005.73 50 % 43.1 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1019.35 10 1026.79 53 % 46.1 %
Candela SEPÚLVEDA FERRÍS FEMECV 1012.56 10 1020.03 52.1 % 45.1 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 921.15 12 923.86 38.4 % 32.1 %
Irati ASO ESAIN FNDME 1001.72 13 1001.56 49.4 % 42.5 %
Nerea PÉREZ PEREA FMM 969.60 14 967.00 44.4 % 37.7 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 953.37 15 948.28 41.8 % 35.2 %
Carlota BÖCK VÁZQUEZ FEGAMON 981.11 16 973.35 45.4 % 38.6 %
Alba MARTÍNEZ LLARÍA FMM 942.18 17 932.01 39.5 % 33.1 %
Jordana PEREZ GRANELL FEMECV 955.44 18 942.66 41 % 34.5 %
Elena CARAMES GONZALEZ FEMPA 913.83 19 898.65 35.1 % 29 %
Lucia LORES REY FEGAMON 937.60 20 919.77 37.9 % 31.6 %
Maria SANTOS GONZÁLEZ FEXME 937.58 20 919.75 37.9 % 31.6 %
Rocío LEAL ABAD FMRM 1005.43 20 987.33 47.4 % 40.5 %
Irene Xiaozhao PEREZ PRADO FAM 1000.00 23 974.41 45.5 % 38.7 %
Paula LUCIO PANIAGUA FDMESCyL 951.28 24 923.16 38.3 % 32 %
Paula MENESES BALLESTEROS FDMCM 1000.00 24 971.85 45.1 % 38.4 %
Leire SÁNCHEZ GARCÍA FMRM 980.08 24 952.00 42.3 % 35.7 %

#####_ Elo History _

Elo in time

Elo Accumulated Third_2023

competitor Team R.new Prob.Finals Prob.podium
Laia TAULATS MCDONALD FAM-AND 1121.25 66 % 59.5 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1108.96 58.6 % 54.2 %
Andrea RODRIGUEZ SALAS FEXME 1094.19 62.5 % 55.7 %
Ainhize BELAR BARRUTIA EMF-FVM 1084.51 55.2 % 50.7 %
Aida TORRES ILLAMOLA FEEC 1079.71 54.5 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1072.65 53.5 % 49 %
Intza ELIZALDE LARRARTE EMF-FVM 1071.45 59.3 % 52.5 %
Vera BRIONGOS MARTÍN FEXME 1066.66 52.6 % 48.1 %
Rebeca PEREZ DUATO FAM 1065.87 59.6 % 51.5 %
Mar CARREÑO ESCOBAR FADMES 1054.11 56.9 % 50 %
India PERSSON FERNÁNDEZ FADMES 1052.93 56.8 % 49.8 %
Rut MONSECH GASCA FEEC 1050.22 50.3 % 45.8 %
Ana TORREGROSA MARTÍNEZ FEMECV 1048.30 50 % 45.5 %
Elur ARTEAGA ARZALLUS EMF-FVM 1042.46 55.3 % 48.3 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
Lucia MIRANDA CID FEEC 1030.58 47.5 % 43 %
Michelle Paola MATHEUS GUILLEN FMM 1029.71 47.3 % 42.9 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1026.79 53 % 46.1 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Candela SEPÚLVEDA FERRÍS FEMECV 1020.03 52.1 % 45.1 %
Miriam DIEZ LUENGO FMM 1019.86 53.1 % 44.9 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 1009.31 44.4 % 40 %
Brisa CALDERON BRUÑUEL FEMECV 1005.73 50 % 43.1 %
Antia FREITAS RIAL FEXME 1004.86 43.8 % 39.4 %
Irati ZABALA MUXIKA EMF-FVM 1004.07 43.7 % 39.3 %
Irati ASO ESAIN FNDME 1001.56 49.4 % 42.5 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Maria PAREDES RAMOS FEXME 994.50 42.3 % 38 %
Iune LA HIDALGA OTAMENDI EMF-FVM 994.00 42.2 % 37.9 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Natalia VALE FERNÁNDEZ FEGAMON 991.03 47.9 % 41 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Rocío LEAL ABAD FMRM 987.33 47.4 % 40.5 %
Amaya DEL POZO CARRION FMM 986.51 47.2 % 40.4 %
Paula TRAVERSO LEBRON FEXME 982.72 40.7 % 36.4 %
Sofía PEÑA PÉREZ FMM 981.81 59.7 % 48.8 %
María FEO MIGUELA FNDME 977.40 39.9 % 35.7 %
Sara Libertad DÍAZ DE SARRALDE FMM 977.40 39.9 % 35.7 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Irene Xiaozhao PEREZ PRADO FAM 974.41 45.5 % 38.7 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Carlota BÖCK VÁZQUEZ FEGAMON 973.35 45.4 % 38.6 %
Paula MENESES BALLESTEROS FDMCM 971.85 45.1 % 38.4 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Nerea PÉREZ PEREA FMM 967.00 44.4 % 37.7 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Silvia FAYOS LOZADA FEMECV 955.73 37 % 32.9 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Leire SÁNCHEZ GARCÍA FMRM 952.00 42.3 % 35.7 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 948.28 41.8 % 35.2 %
Haizea OSES SAIZ EMF-FVM 945.35 35.6 % 31.6 %
Alba GÓMEZ CALATAYUD FEMECV 942.92 43 % 38.4 %
Jordana PEREZ GRANELL FEMECV 942.66 41 % 34.5 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Oihane RUIZ DE ARGANDOÑA FNDME 934.13 34.1 % 30.2 %
Alba MARTÍNEZ LLARÍA FMM 932.01 39.5 % 33.1 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Concepción María BALLESTEROS PÉREZ FADMES 926.28 33.1 % 29.3 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 923.86 38.4 % 32.1 %
Paula LUCIO PANIAGUA FDMESCyL 923.16 38.3 % 32 %
Lucia LORES REY FEGAMON 919.77 37.9 % 31.6 %
Maria SANTOS GONZÁLEZ FEXME 919.75 37.9 % 31.6 %
Elena CARAMES GONZALEZ FEMPA 898.65 35.1 % 29 %

2023 May-Abs

Elo May-Abs 2023

-Competitors = r-

competitor Team R results R.new Prob.Finals Prob.podium
Aida TORRES ILLAMOLA FEEC 1079.71 1 1109.90 60.8 % 52.4 %
Rebeca PEREZ DUATO FAM 1065.87 2 1093.08 58.5 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1072.65 3 1096.78 59 % 50.5 %
Maria PAREDES RAMOS FEXME 994.50 4 1015.92 47.5 % 39 %
Michelle Paola MATHEUS GUILLEN FMM 1029.71 5 1047.93 52.1 % 43.5 %
Rut MONSECH GASCA FEEC 1050.22 6 1065.30 54.6 % 46 %
Miriam DIEZ LUENGO FMM 1019.86 7 1032.03 49.8 % 41.3 %
Ainhize BELAR BARRUTIA EMF-FVM 1084.51 8 1093.35 58.5 % 50 %
Paula TRAVERSO LEBRON FEXME 982.72 9 988.95 43.6 % 35.4 %
Lucia MIRANDA CID FEEC 1030.58 10 1033.56 50 % 41.5 %
Laia TAULATS MCDONALD FAM-AND 1121.25 11 1120.80 62.3 % 53.9 %
Vera BRIONGOS MARTÍN FEXME 1066.66 12 1063.39 54.3 % 45.7 %
Silvia FAYOS LOZADA FEMECV 955.73 13 949.89 38.2 % 30.5 %
Antia FREITAS RIAL FEXME 1004.86 14 995.76 44.6 % 36.3 %
Irati ZABALA MUXIKA EMF-FVM 1004.07 15 991.93 44 % 35.8 %
Ana TORREGROSA MARTÍNEZ FEMECV 1048.30 16 1032.91 49.9 % 41.4 %
María FEO MIGUELA FNDME 977.40 17 959.28 39.5 % 31.6 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 1009.31 18 988.00 43.5 % 35.3 %
Concepción María BALLESTEROS PÉREZ FADMES 926.28 19 902.28 32 % 25 %
Oihane RUIZ DE ARGANDOÑA FNDME 934.13 20 907.05 32.6 % 25.5 %
Claudia LARA PINILLOS FADMES 1000.00 21 969.65 40.9 % 32.9 %
Alba GÓMEZ CALATAYUD FEMECV 942.92 22 909.71 32.9 % 25.8 %

#####_ Elo History _

Elo in time

Elo Accumulated May-Abs_2023

competitor Team R.new Prob.Finals Prob.podium
Laia TAULATS MCDONALD FAM-AND 1120.80 62.3 % 53.9 %
Aida TORRES ILLAMOLA FEEC 1109.90 60.8 % 52.4 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1108.96 58.6 % 54.2 %
Lucía SEMPERE GONZÁLEZ FEMECV 1096.78 59 % 50.5 %
Andrea RODRIGUEZ SALAS FEXME 1094.19 62.5 % 55.7 %
Ainhize BELAR BARRUTIA EMF-FVM 1093.35 58.5 % 50 %
Rebeca PEREZ DUATO FAM 1093.08 58.5 % 50 %
Intza ELIZALDE LARRARTE EMF-FVM 1071.45 59.3 % 52.5 %
Rut MONSECH GASCA FEEC 1065.30 54.6 % 46 %
Vera BRIONGOS MARTÍN FEXME 1063.39 54.3 % 45.7 %
Mar CARREÑO ESCOBAR FADMES 1054.11 56.9 % 50 %
India PERSSON FERNÁNDEZ FADMES 1052.93 56.8 % 49.8 %
Michelle Paola MATHEUS GUILLEN FMM 1047.93 52.1 % 43.5 %
Elur ARTEAGA ARZALLUS EMF-FVM 1042.46 55.3 % 48.3 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
Lucia MIRANDA CID FEEC 1033.56 50 % 41.5 %
Ana TORREGROSA MARTÍNEZ FEMECV 1032.91 49.9 % 41.4 %
Miriam DIEZ LUENGO FMM 1032.03 49.8 % 41.3 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1026.79 53 % 46.1 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Candela SEPÚLVEDA FERRÍS FEMECV 1020.03 52.1 % 45.1 %
Maria PAREDES RAMOS FEXME 1015.92 47.5 % 39 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Brisa CALDERON BRUÑUEL FEMECV 1005.73 50 % 43.1 %
Irati ASO ESAIN FNDME 1001.56 49.4 % 42.5 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Antia FREITAS RIAL FEXME 995.76 44.6 % 36.3 %
Iune LA HIDALGA OTAMENDI EMF-FVM 994.00 42.2 % 37.9 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Irati ZABALA MUXIKA EMF-FVM 991.93 44 % 35.8 %
Natalia VALE FERNÁNDEZ FEGAMON 991.03 47.9 % 41 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Paula TRAVERSO LEBRON FEXME 988.95 43.6 % 35.4 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 988.00 43.5 % 35.3 %
Rocío LEAL ABAD FMRM 987.33 47.4 % 40.5 %
Amaya DEL POZO CARRION FMM 986.51 47.2 % 40.4 %
Sofía PEÑA PÉREZ FMM 981.81 59.7 % 48.8 %
Sara Libertad DÍAZ DE SARRALDE FMM 977.40 39.9 % 35.7 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Irene Xiaozhao PEREZ PRADO FAM 974.41 45.5 % 38.7 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Carlota BÖCK VÁZQUEZ FEGAMON 973.35 45.4 % 38.6 %
Paula MENESES BALLESTEROS FDMCM 971.85 45.1 % 38.4 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Claudia LARA PINILLOS FADMES 969.65 40.9 % 32.9 %
Nerea PÉREZ PEREA FMM 967.00 44.4 % 37.7 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
María FEO MIGUELA FNDME 959.28 39.5 % 31.6 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Leire SÁNCHEZ GARCÍA FMRM 952.00 42.3 % 35.7 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Silvia FAYOS LOZADA FEMECV 949.89 38.2 % 30.5 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 948.28 41.8 % 35.2 %
Haizea OSES SAIZ EMF-FVM 945.35 35.6 % 31.6 %
Jordana PEREZ GRANELL FEMECV 942.66 41 % 34.5 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Alba MARTÍNEZ LLARÍA FMM 932.01 39.5 % 33.1 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 923.86 38.4 % 32.1 %
Paula LUCIO PANIAGUA FDMESCyL 923.16 38.3 % 32 %
Lucia LORES REY FEGAMON 919.77 37.9 % 31.6 %
Maria SANTOS GONZÁLEZ FEXME 919.75 37.9 % 31.6 %
Alba GÓMEZ CALATAYUD FEMECV 909.71 32.9 % 25.8 %
Oihane RUIZ DE ARGANDOÑA FNDME 907.05 32.6 % 25.5 %
Concepción María BALLESTEROS PÉREZ FADMES 902.28 32 % 25 %
Elena CARAMES GONZALEZ FEMPA 898.65 35.1 % 29 %

2023 June

Elo 2023 June

-Competitors = r-

competitor Team R results R.new Prob.Finals Prob.podium
India PERSSON FERNÁNDEZ FADMES 1052.93 1 1083.24 61.7 % 50 %
Laia TAULATS MCDONALD FAM-AND 1120.80 2 1148.06 70.1 % 59.2 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1026.79 3 1051.64 57.3 % 45.5 %
Mar CARREÑO ESCOBAR FADMES 1054.11 4 1076.06 60.7 % 49 %
Intza ELIZALDE LARRARTE EMF-FVM 1071.45 5 1090.55 62.7 % 51.1 %
Sofía PEÑA PÉREZ FMM 981.81 6 998.50 49.7 % 38 %
Amaya DEL POZO CARRION FMM 986.51 7 1000.40 50 % 38.3 %
Andrea RODRIGUEZ SALAS FEXME 1094.19 8 1104.85 64.6 % 53.1 %
Alba MARTÍNEZ LLARÍA FMM 932.01 9 940.56 41.5 % 30.5 %
Elur ARTEAGA ARZALLUS EMF-FVM 1042.46 9 1050.55 57.2 % 45.3 %
Brisa CALDERON BRUÑUEL FEMECV 1005.73 11 1008.41 51.2 % 39.4 %
Carlota BÖCK VÁZQUEZ FEGAMON 973.35 12 973.38 46.1 % 34.7 %
Nerea PÉREZ PEREA FMM 967.00 13 964.27 44.8 % 33.5 %
Irati ASO ESAIN FNDME 1001.56 14 995.91 49.4 % 37.7 %
Natalia VALE FERNÁNDEZ FEGAMON 991.03 15 982.64 47.4 % 35.9 %
Naroa MORALES ALMAZAN FNDME 1000.00 15 991.69 48.7 % 37.1 %
Lucia LORES REY FEGAMON 919.77 17 906.11 36.8 % 26.5 %
Natalia PÉREZ VALLE FMM 1000.00 17 986.13 47.9 % 36.4 %
Elena CARAMES GONZALEZ FEMPA 898.65 19 879.50 33.3 % 23.6 %
Candela SEPÚLVEDA FERRÍS FEMECV 1020.03 20 997.60 49.6 % 37.9 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 948.28 21 923.37 39.1 % 28.5 %
Paula LUCIO PANIAGUA FDMESCyL 923.16 22 895.57 35.4 % 25.3 %
Jordana PEREZ GRANELL FEMECV 942.66 23 912.21 37.6 % 27.2 %
Maria SANTOS GONZÁLEZ FEXME 919.75 24 886.61 34.2 % 24.4 %

#####_ Elo History _

Elo in time

Elo Accumulated June_2023

competitor Team R.new Prob.Finals Prob.podium
Laia TAULATS MCDONALD FAM-AND 1148.06 70.1 % 59.2 %
Aida TORRES ILLAMOLA FEEC 1109.90 60.8 % 52.4 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1108.96 58.6 % 54.2 %
Andrea RODRIGUEZ SALAS FEXME 1104.85 64.6 % 53.1 %
Lucía SEMPERE GONZÁLEZ FEMECV 1096.78 59 % 50.5 %
Ainhize BELAR BARRUTIA EMF-FVM 1093.35 58.5 % 50 %
Rebeca PEREZ DUATO FAM 1093.08 58.5 % 50 %
Intza ELIZALDE LARRARTE EMF-FVM 1090.55 62.7 % 51.1 %
India PERSSON FERNÁNDEZ FADMES 1083.24 61.7 % 50 %
Mar CARREÑO ESCOBAR FADMES 1076.06 60.7 % 49 %
Rut MONSECH GASCA FEEC 1065.30 54.6 % 46 %
Vera BRIONGOS MARTÍN FEXME 1063.39 54.3 % 45.7 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1051.64 57.3 % 45.5 %
Elur ARTEAGA ARZALLUS EMF-FVM 1050.55 57.2 % 45.3 %
Michelle Paola MATHEUS GUILLEN FMM 1047.93 52.1 % 43.5 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
Lucia MIRANDA CID FEEC 1033.56 50 % 41.5 %
Ana TORREGROSA MARTÍNEZ FEMECV 1032.91 49.9 % 41.4 %
Miriam DIEZ LUENGO FMM 1032.03 49.8 % 41.3 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Maria PAREDES RAMOS FEXME 1015.92 47.5 % 39 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Brisa CALDERON BRUÑUEL FEMECV 1008.41 51.2 % 39.4 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Amaya DEL POZO CARRION FMM 1000.40 50 % 38.3 %
Sofía PEÑA PÉREZ FMM 998.50 49.7 % 38 %
Candela SEPÚLVEDA FERRÍS FEMECV 997.60 49.6 % 37.9 %
Irati ASO ESAIN FNDME 995.91 49.4 % 37.7 %
Antia FREITAS RIAL FEXME 995.76 44.6 % 36.3 %
Iune LA HIDALGA OTAMENDI EMF-FVM 994.00 42.2 % 37.9 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Irati ZABALA MUXIKA EMF-FVM 991.93 44 % 35.8 %
Naroa MORALES ALMAZAN FNDME 991.69 48.7 % 37.1 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Paula TRAVERSO LEBRON FEXME 988.95 43.6 % 35.4 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 988.00 43.5 % 35.3 %
Rocío LEAL ABAD FMRM 987.33 47.4 % 40.5 %
Natalia PÉREZ VALLE FMM 986.13 47.9 % 36.4 %
Natalia VALE FERNÁNDEZ FEGAMON 982.64 47.4 % 35.9 %
Sara Libertad DÍAZ DE SARRALDE FMM 977.40 39.9 % 35.7 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Irene Xiaozhao PEREZ PRADO FAM 974.41 45.5 % 38.7 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Carlota BÖCK VÁZQUEZ FEGAMON 973.38 46.1 % 34.7 %
Paula MENESES BALLESTEROS FDMCM 971.85 45.1 % 38.4 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Claudia LARA PINILLOS FADMES 969.65 40.9 % 32.9 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Nerea PÉREZ PEREA FMM 964.27 44.8 % 33.5 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
María FEO MIGUELA FNDME 959.28 39.5 % 31.6 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Leire SÁNCHEZ GARCÍA FMRM 952.00 42.3 % 35.7 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Silvia FAYOS LOZADA FEMECV 949.89 38.2 % 30.5 %
Haizea OSES SAIZ EMF-FVM 945.35 35.6 % 31.6 %
Alba MARTÍNEZ LLARÍA FMM 940.56 41.5 % 30.5 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 923.86 38.4 % 32.1 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 923.37 39.1 % 28.5 %
Jordana PEREZ GRANELL FEMECV 912.21 37.6 % 27.2 %
Alba GÓMEZ CALATAYUD FEMECV 909.71 32.9 % 25.8 %
Oihane RUIZ DE ARGANDOÑA FNDME 907.05 32.6 % 25.5 %
Lucia LORES REY FEGAMON 906.11 36.8 % 26.5 %
Concepción María BALLESTEROS PÉREZ FADMES 902.28 32 % 25 %
Paula LUCIO PANIAGUA FDMESCyL 895.57 35.4 % 25.3 %
Maria SANTOS GONZÁLEZ FEXME 886.61 34.2 % 24.4 %
Elena CARAMES GONZALEZ FEMPA 879.50 33.3 % 23.6 %

2023 June-Abs

Elo June-Abs 2023

-Competitors = r-

competitor Team R results R.new Prob.Finals Prob.podium
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1108.96 1 1138.90 64.8 % 52.2 %
Lucía SEMPERE GONZÁLEZ FEMECV 1096.78 2 1123.40 62.8 % 50 %
Rut MONSECH GASCA FEEC 1065.30 3 1088.69 58 % 45 %
Aida TORRES ILLAMOLA FEEC 1109.90 4 1129.73 63.6 % 50.9 %
Maria PAREDES RAMOS FEXME 1015.92 5 1032.80 50 % 37.2 %
Michelle Paola MATHEUS GUILLEN FMM 1047.93 6 1061.30 54.1 % 41.2 %
Paula TRAVERSO LEBRON FEXME 988.95 7 999.22 45.2 % 32.9 %
Lucia MIRANDA CID FEEC 1033.56 8 1040.25 51.1 % 38.3 %
Irati ZABALA MUXIKA EMF-FVM 991.93 9 995.45 44.6 % 32.4 %
Laia TAULATS MCDONALD FAM-AND 1148.06 10 1147.52 65.9 % 53.5 %
Haizea OSES SAIZ EMF-FVM 945.35 11 942.34 37.3 % 26.1 %
Ainhize BELAR BARRUTIA EMF-FVM 1093.35 12 1086.30 57.6 % 44.7 %
Antia FREITAS RIAL FEXME 995.76 13 985.79 43.3 % 31.2 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 988.00 14 974.69 41.7 % 29.8 %
Ana TORREGROSA MARTÍNEZ FEMECV 1032.91 15 1016.03 47.6 % 35 %
María FEO MIGUELA FNDME 959.28 16 939.37 36.9 % 25.7 %
Oihane RUIZ DE ARGANDOÑA FNDME 907.05 17 884.00 29.8 % 20.1 %
Iune LA HIDALGA OTAMENDI EMF-FVM 994.00 18 967.19 40.7 % 28.9 %
Concepción María BALLESTEROS PÉREZ FADMES 902.28 19 872.51 28.4 % 19.1 %
Sara Libertad DÍAZ DE SARRALDE FMM 977.40 20 943.93 37.5 % 26.2 %

#####_ Elo History _

Elo in time

Elo Accumulated June-Abs_2023

competitor Team R.new Prob.Finals Prob.podium
Laia TAULATS MCDONALD FAM-AND 1147.52 65.9 % 53.5 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1138.90 64.8 % 52.2 %
Aida TORRES ILLAMOLA FEEC 1129.73 63.6 % 50.9 %
Lucía SEMPERE GONZÁLEZ FEMECV 1123.40 62.8 % 50 %
Andrea RODRIGUEZ SALAS FEXME 1104.85 64.6 % 53.1 %
Rebeca PEREZ DUATO FAM 1093.08 58.5 % 50 %
Intza ELIZALDE LARRARTE EMF-FVM 1090.55 62.7 % 51.1 %
Rut MONSECH GASCA FEEC 1088.69 58 % 45 %
Ainhize BELAR BARRUTIA EMF-FVM 1086.30 57.6 % 44.7 %
India PERSSON FERNÁNDEZ FADMES 1083.24 61.7 % 50 %
Mar CARREÑO ESCOBAR FADMES 1076.06 60.7 % 49 %
Vera BRIONGOS MARTÍN FEXME 1063.39 54.3 % 45.7 %
Michelle Paola MATHEUS GUILLEN FMM 1061.30 54.1 % 41.2 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1051.64 57.3 % 45.5 %
Elur ARTEAGA ARZALLUS EMF-FVM 1050.55 57.2 % 45.3 %
Lucia MIRANDA CID FEEC 1040.25 51.1 % 38.3 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
Maria PAREDES RAMOS FEXME 1032.80 50 % 37.2 %
Miriam DIEZ LUENGO FMM 1032.03 49.8 % 41.3 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Ana TORREGROSA MARTÍNEZ FEMECV 1016.03 47.6 % 35 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Brisa CALDERON BRUÑUEL FEMECV 1008.41 51.2 % 39.4 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Amaya DEL POZO CARRION FMM 1000.40 50 % 38.3 %
Paula TRAVERSO LEBRON FEXME 999.22 45.2 % 32.9 %
Sofía PEÑA PÉREZ FMM 998.50 49.7 % 38 %
Candela SEPÚLVEDA FERRÍS FEMECV 997.60 49.6 % 37.9 %
Irati ASO ESAIN FNDME 995.91 49.4 % 37.7 %
Irati ZABALA MUXIKA EMF-FVM 995.45 44.6 % 32.4 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Naroa MORALES ALMAZAN FNDME 991.69 48.7 % 37.1 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Rocío LEAL ABAD FMRM 987.33 47.4 % 40.5 %
Natalia PÉREZ VALLE FMM 986.13 47.9 % 36.4 %
Antia FREITAS RIAL FEXME 985.79 43.3 % 31.2 %
Natalia VALE FERNÁNDEZ FEGAMON 982.64 47.4 % 35.9 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 974.69 41.7 % 29.8 %
Irene Xiaozhao PEREZ PRADO FAM 974.41 45.5 % 38.7 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Carlota BÖCK VÁZQUEZ FEGAMON 973.38 46.1 % 34.7 %
Paula MENESES BALLESTEROS FDMCM 971.85 45.1 % 38.4 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Claudia LARA PINILLOS FADMES 969.65 40.9 % 32.9 %
Iune LA HIDALGA OTAMENDI EMF-FVM 967.19 40.7 % 28.9 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Nerea PÉREZ PEREA FMM 964.27 44.8 % 33.5 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Leire SÁNCHEZ GARCÍA FMRM 952.00 42.3 % 35.7 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Silvia FAYOS LOZADA FEMECV 949.89 38.2 % 30.5 %
Sara Libertad DÍAZ DE SARRALDE FMM 943.93 37.5 % 26.2 %
Haizea OSES SAIZ EMF-FVM 942.34 37.3 % 26.1 %
Alba MARTÍNEZ LLARÍA FMM 940.56 41.5 % 30.5 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
María FEO MIGUELA FNDME 939.37 36.9 % 25.7 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 923.86 38.4 % 32.1 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 923.37 39.1 % 28.5 %
Jordana PEREZ GRANELL FEMECV 912.21 37.6 % 27.2 %
Alba GÓMEZ CALATAYUD FEMECV 909.71 32.9 % 25.8 %
Lucia LORES REY FEGAMON 906.11 36.8 % 26.5 %
Paula LUCIO PANIAGUA FDMESCyL 895.57 35.4 % 25.3 %
Maria SANTOS GONZÁLEZ FEXME 886.61 34.2 % 24.4 %
Oihane RUIZ DE ARGANDOÑA FNDME 884.00 29.8 % 20.1 %
Elena CARAMES GONZALEZ FEMPA 879.50 33.3 % 23.6 %
Concepción María BALLESTEROS PÉREZ FADMES 872.51 28.4 % 19.1 %

2023 Nov

Elo 2023 Nov

-Competitors = r-

competitor Team R results R.new Prob.Finals Prob.podium
Laia TAULATS MCDONALD FAM-AND 1147.52 1 1176.66 76.8 % 62.2 %
India PERSSON FERNÁNDEZ FADMES 1083.24 2 1108.43 69.1 % 52.6 %
Mar CARREÑO ESCOBAR FADMES 1076.06 3 1097.03 67.7 % 51 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1051.64 4 1068.47 64 % 46.9 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 923.37 5 936.67 45.4 % 29.3 %
Amaya DEL POZO CARRION FMM 1000.40 6 1008.99 55.8 % 38.5 %
Nerea PÉREZ PEREA FMM 964.27 7 968.80 50 % 33.2 %
Intza ELIZALDE LARRARTE EMF-FVM 1090.55 8 1090.11 66.8 % 50 %
Maria SANTOS GONZÁLEZ FEXME 886.61 9 883.04 37.9 % 23.3 %
Natalia VALE FERNÁNDEZ FEGAMON 982.64 10 974.27 50.8 % 33.9 %
Naroa MORALES ALMAZAN FNDME 991.69 11 979.00 51.5 % 34.5 %
Lucia LORES REY FEGAMON 906.11 12 889.63 38.8 % 24 %
Carlota BÖCK VÁZQUEZ FEGAMON 973.38 13 952.26 47.6 % 31.1 %
Jordana PEREZ GRANELL FEMECV 912.21 14 887.17 38.5 % 23.7 %
Irati ASO ESAIN FNDME 995.91 15 966.13 49.6 % 32.9 %
Alba MARTÍNEZ LLARÍA FMM 940.56 16 906.83 41.2 % 25.8 %

#####_ Elo History _

Elo in time

Elo Accumulated Nov_2023

competitor Team R.new Prob.Finals Prob.podium
Laia TAULATS MCDONALD FAM-AND 1176.66 76.8 % 62.2 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1138.90 64.8 % 52.2 %
Aida TORRES ILLAMOLA FEEC 1129.73 63.6 % 50.9 %
Lucía SEMPERE GONZÁLEZ FEMECV 1123.40 62.8 % 50 %
India PERSSON FERNÁNDEZ FADMES 1108.43 69.1 % 52.6 %
Andrea RODRIGUEZ SALAS FEXME 1104.85 64.6 % 53.1 %
Mar CARREÑO ESCOBAR FADMES 1097.03 67.7 % 51 %
Rebeca PEREZ DUATO FAM 1093.08 58.5 % 50 %
Intza ELIZALDE LARRARTE EMF-FVM 1090.11 66.8 % 50 %
Rut MONSECH GASCA FEEC 1088.69 58 % 45 %
Ainhize BELAR BARRUTIA EMF-FVM 1086.30 57.6 % 44.7 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1068.47 64 % 46.9 %
Vera BRIONGOS MARTÍN FEXME 1063.39 54.3 % 45.7 %
Michelle Paola MATHEUS GUILLEN FMM 1061.30 54.1 % 41.2 %
Elur ARTEAGA ARZALLUS EMF-FVM 1050.55 57.2 % 45.3 %
Lucia MIRANDA CID FEEC 1040.25 51.1 % 38.3 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
Maria PAREDES RAMOS FEXME 1032.80 50 % 37.2 %
Miriam DIEZ LUENGO FMM 1032.03 49.8 % 41.3 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Ana TORREGROSA MARTÍNEZ FEMECV 1016.03 47.6 % 35 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Amaya DEL POZO CARRION FMM 1008.99 55.8 % 38.5 %
Brisa CALDERON BRUÑUEL FEMECV 1008.41 51.2 % 39.4 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Paula TRAVERSO LEBRON FEXME 999.22 45.2 % 32.9 %
Sofía PEÑA PÉREZ FMM 998.50 49.7 % 38 %
Candela SEPÚLVEDA FERRÍS FEMECV 997.60 49.6 % 37.9 %
Irati ZABALA MUXIKA EMF-FVM 995.45 44.6 % 32.4 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Rocío LEAL ABAD FMRM 987.33 47.4 % 40.5 %
Natalia PÉREZ VALLE FMM 986.13 47.9 % 36.4 %
Antia FREITAS RIAL FEXME 985.79 43.3 % 31.2 %
Naroa MORALES ALMAZAN FNDME 979.00 51.5 % 34.5 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 974.69 41.7 % 29.8 %
Irene Xiaozhao PEREZ PRADO FAM 974.41 45.5 % 38.7 %
Natalia VALE FERNÁNDEZ FEGAMON 974.27 50.8 % 33.9 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Paula MENESES BALLESTEROS FDMCM 971.85 45.1 % 38.4 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Claudia LARA PINILLOS FADMES 969.65 40.9 % 32.9 %
Nerea PÉREZ PEREA FMM 968.80 50 % 33.2 %
Iune LA HIDALGA OTAMENDI EMF-FVM 967.19 40.7 % 28.9 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Irati ASO ESAIN FNDME 966.13 49.6 % 32.9 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Carlota BÖCK VÁZQUEZ FEGAMON 952.26 47.6 % 31.1 %
Leire SÁNCHEZ GARCÍA FMRM 952.00 42.3 % 35.7 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Silvia FAYOS LOZADA FEMECV 949.89 38.2 % 30.5 %
Sara Libertad DÍAZ DE SARRALDE FMM 943.93 37.5 % 26.2 %
Haizea OSES SAIZ EMF-FVM 942.34 37.3 % 26.1 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
María FEO MIGUELA FNDME 939.37 36.9 % 25.7 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 936.67 45.4 % 29.3 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 923.86 38.4 % 32.1 %
Alba GÓMEZ CALATAYUD FEMECV 909.71 32.9 % 25.8 %
Alba MARTÍNEZ LLARÍA FMM 906.83 41.2 % 25.8 %
Paula LUCIO PANIAGUA FDMESCyL 895.57 35.4 % 25.3 %
Lucia LORES REY FEGAMON 889.63 38.8 % 24 %
Jordana PEREZ GRANELL FEMECV 887.17 38.5 % 23.7 %
Oihane RUIZ DE ARGANDOÑA FNDME 884.00 29.8 % 20.1 %
Maria SANTOS GONZÁLEZ FEXME 883.04 37.9 % 23.3 %
Elena CARAMES GONZALEZ FEMPA 879.50 33.3 % 23.6 %
Concepción María BALLESTEROS PÉREZ FADMES 872.51 28.4 % 19.1 %

2023 Nov-Sub20

Elo 2023 Nov-Sub20

-Competitors = r-

competitor Team R results R.new Prob.Finals Prob.podium
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1138.90 1 1164.87 86.8 % 67.1 %
Lucia MIRANDA CID FEEC 1040.25 2 1058.32 78.1 % 52.5 %
Miriam DIEZ LUENGO FMM 1032.03 3 1041.07 76.3 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1123.40 4 1122.13 83.7 % 61.5 %
Ana TORREGROSA MARTÍNEZ FEMECV 1016.03 5 1006.99 72.6 % 45.1 %
Aitana PICÓ I LÓPEZ FEMECV 1000.00 6 982.56 69.7 % 41.7 %
María FEO MIGUELA FNDME 939.37 7 913.03 60.7 % 32.4 %
Concepción María BALLESTEROS PÉREZ FADMES 872.51 8 837.81 50 % 23.7 %

#####_ Elo History _

Elo in time

Elo Accumulated Nov-Sub20_2023

competitor Team R.new Prob.Finals Prob.podium
Laia TAULATS MCDONALD FAM-AND 1176.66 76.8 % 62.2 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1164.87 86.8 % 67.1 %
Aida TORRES ILLAMOLA FEEC 1129.73 63.6 % 50.9 %
Lucía SEMPERE GONZÁLEZ FEMECV 1122.13 83.7 % 61.5 %
India PERSSON FERNÁNDEZ FADMES 1108.43 69.1 % 52.6 %
Andrea RODRIGUEZ SALAS FEXME 1104.85 64.6 % 53.1 %
Mar CARREÑO ESCOBAR FADMES 1097.03 67.7 % 51 %
Rebeca PEREZ DUATO FAM 1093.08 58.5 % 50 %
Intza ELIZALDE LARRARTE EMF-FVM 1090.11 66.8 % 50 %
Rut MONSECH GASCA FEEC 1088.69 58 % 45 %
Ainhize BELAR BARRUTIA EMF-FVM 1086.30 57.6 % 44.7 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1068.47 64 % 46.9 %
Vera BRIONGOS MARTÍN FEXME 1063.39 54.3 % 45.7 %
Michelle Paola MATHEUS GUILLEN FMM 1061.30 54.1 % 41.2 %
Lucia MIRANDA CID FEEC 1058.32 78.1 % 52.5 %
Elur ARTEAGA ARZALLUS EMF-FVM 1050.55 57.2 % 45.3 %
Miriam DIEZ LUENGO FMM 1041.07 76.3 % 50 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
Maria PAREDES RAMOS FEXME 1032.80 50 % 37.2 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Amaya DEL POZO CARRION FMM 1008.99 55.8 % 38.5 %
Brisa CALDERON BRUÑUEL FEMECV 1008.41 51.2 % 39.4 %
Ana TORREGROSA MARTÍNEZ FEMECV 1006.99 72.6 % 45.1 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Paula TRAVERSO LEBRON FEXME 999.22 45.2 % 32.9 %
Sofía PEÑA PÉREZ FMM 998.50 49.7 % 38 %
Candela SEPÚLVEDA FERRÍS FEMECV 997.60 49.6 % 37.9 %
Irati ZABALA MUXIKA EMF-FVM 995.45 44.6 % 32.4 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Rocío LEAL ABAD FMRM 987.33 47.4 % 40.5 %
Natalia PÉREZ VALLE FMM 986.13 47.9 % 36.4 %
Antia FREITAS RIAL FEXME 985.79 43.3 % 31.2 %
Aitana PICÓ I LÓPEZ FEMECV 982.56 69.7 % 41.7 %
Naroa MORALES ALMAZAN FNDME 979.00 51.5 % 34.5 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 974.69 41.7 % 29.8 %
Irene Xiaozhao PEREZ PRADO FAM 974.41 45.5 % 38.7 %
Natalia VALE FERNÁNDEZ FEGAMON 974.27 50.8 % 33.9 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Paula MENESES BALLESTEROS FDMCM 971.85 45.1 % 38.4 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Claudia LARA PINILLOS FADMES 969.65 40.9 % 32.9 %
Nerea PÉREZ PEREA FMM 968.80 50 % 33.2 %
Iune LA HIDALGA OTAMENDI EMF-FVM 967.19 40.7 % 28.9 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Irati ASO ESAIN FNDME 966.13 49.6 % 32.9 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Carlota BÖCK VÁZQUEZ FEGAMON 952.26 47.6 % 31.1 %
Leire SÁNCHEZ GARCÍA FMRM 952.00 42.3 % 35.7 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Silvia FAYOS LOZADA FEMECV 949.89 38.2 % 30.5 %
Sara Libertad DÍAZ DE SARRALDE FMM 943.93 37.5 % 26.2 %
Haizea OSES SAIZ EMF-FVM 942.34 37.3 % 26.1 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 936.67 45.4 % 29.3 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 923.86 38.4 % 32.1 %
María FEO MIGUELA FNDME 913.03 60.7 % 32.4 %
Alba GÓMEZ CALATAYUD FEMECV 909.71 32.9 % 25.8 %
Alba MARTÍNEZ LLARÍA FMM 906.83 41.2 % 25.8 %
Paula LUCIO PANIAGUA FDMESCyL 895.57 35.4 % 25.3 %
Lucia LORES REY FEGAMON 889.63 38.8 % 24 %
Jordana PEREZ GRANELL FEMECV 887.17 38.5 % 23.7 %
Oihane RUIZ DE ARGANDOÑA FNDME 884.00 29.8 % 20.1 %
Maria SANTOS GONZÁLEZ FEXME 883.04 37.9 % 23.3 %
Elena CARAMES GONZALEZ FEMPA 879.50 33.3 % 23.6 %
Concepción María BALLESTEROS PÉREZ FADMES 837.81 50 % 23.7 %

2023 Nov-Abs

Elo 2023 Nov-Abs

-Competitors = r-

competitor Team R results R.new Prob.Finals Prob.podium
Rebeca PEREZ DUATO FAM 1093.08 1 1123.10 59 % 50 %
Maria PAREDES RAMOS FEXME 1032.80 2 1059.89 50 % 41 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1164.87 3 1188.20 67.7 % 59.3 %
Aida TORRES ILLAMOLA FEEC 1129.73 4 1150.00 62.7 % 53.9 %
Rut MONSECH GASCA FEEC 1088.69 5 1105.93 56.6 % 47.5 %
Lucia MIRANDA CID FEEC 1058.32 6 1072.49 51.8 % 42.8 %
Miriam DIEZ LUENGO FMM 1041.07 7 1052.12 48.9 % 39.9 %
Michelle Paola MATHEUS GUILLEN FMM 1061.30 8 1069.06 51.3 % 42.3 %
Paula TRAVERSO LEBRON FEXME 999.22 9 1004.06 42 % 33.5 %
Laia TAULATS MCDONALD FAM-AND 1176.66 10 1177.54 66.3 % 57.8 %
Silvia FAYOS LOZADA FEMECV 949.89 11 948.56 34.5 % 26.8 %
Lucía SEMPERE GONZÁLEZ FEMECV 1122.13 12 1116.83 58.1 % 49.1 %
Ana TORREGROSA MARTÍNEZ FEMECV 1006.99 13 999.00 41.3 % 32.9 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 974.69 14 963.65 36.5 % 28.5 %
Antia FREITAS RIAL FEXME 985.79 15 971.50 37.5 % 29.5 %
Alba GÓMEZ CALATAYUD FEMECV 909.71 16 892.56 27.6 % 21 %
Aitana PICÓ I LÓPEZ FEMECV 982.56 17 961.88 36.3 % 28.3 %
Marina REVERT LLOMPART FBME 1000.00 18 976.12 38.2 % 30 %
María FEO MIGUELA FNDME 913.03 19 886.26 26.9 % 20.4 %
Amaya DEL POZO CARRION FMM 1008.99 20 978.59 38.5 % 30.3 %
Concepción María BALLESTEROS PÉREZ FADMES 837.81 21 804.94 18.7 % 13.8 %

#####_ Elo History _

Elo in time

Elo Accumulated Nov-Abs_2023

competitor Team R.new Prob.Finals Prob.podium
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1188.20 67.7 % 59.3 %
Laia TAULATS MCDONALD FAM-AND 1177.54 66.3 % 57.8 %
Aida TORRES ILLAMOLA FEEC 1150.00 62.7 % 53.9 %
Rebeca PEREZ DUATO FAM 1123.10 59 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1116.83 58.1 % 49.1 %
India PERSSON FERNÁNDEZ FADMES 1108.43 69.1 % 52.6 %
Rut MONSECH GASCA FEEC 1105.93 56.6 % 47.5 %
Andrea RODRIGUEZ SALAS FEXME 1104.85 64.6 % 53.1 %
Mar CARREÑO ESCOBAR FADMES 1097.03 67.7 % 51 %
Intza ELIZALDE LARRARTE EMF-FVM 1090.11 66.8 % 50 %
Ainhize BELAR BARRUTIA EMF-FVM 1086.30 57.6 % 44.7 %
Lucia MIRANDA CID FEEC 1072.49 51.8 % 42.8 %
Michelle Paola MATHEUS GUILLEN FMM 1069.06 51.3 % 42.3 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1068.47 64 % 46.9 %
Vera BRIONGOS MARTÍN FEXME 1063.39 54.3 % 45.7 %
Maria PAREDES RAMOS FEXME 1059.89 50 % 41 %
Miriam DIEZ LUENGO FMM 1052.12 48.9 % 39.9 %
Elur ARTEAGA ARZALLUS EMF-FVM 1050.55 57.2 % 45.3 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Brisa CALDERON BRUÑUEL FEMECV 1008.41 51.2 % 39.4 %
Paula TRAVERSO LEBRON FEXME 1004.06 42 % 33.5 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Ana TORREGROSA MARTÍNEZ FEMECV 999.00 41.3 % 32.9 %
Sofía PEÑA PÉREZ FMM 998.50 49.7 % 38 %
Candela SEPÚLVEDA FERRÍS FEMECV 997.60 49.6 % 37.9 %
Irati ZABALA MUXIKA EMF-FVM 995.45 44.6 % 32.4 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Rocío LEAL ABAD FMRM 987.33 47.4 % 40.5 %
Natalia PÉREZ VALLE FMM 986.13 47.9 % 36.4 %
Naroa MORALES ALMAZAN FNDME 979.00 51.5 % 34.5 %
Amaya DEL POZO CARRION FMM 978.59 38.5 % 30.3 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Marina REVERT LLOMPART FBME 976.12 38.2 % 30 %
Irene Xiaozhao PEREZ PRADO FAM 974.41 45.5 % 38.7 %
Natalia VALE FERNÁNDEZ FEGAMON 974.27 50.8 % 33.9 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Paula MENESES BALLESTEROS FDMCM 971.85 45.1 % 38.4 %
Antia FREITAS RIAL FEXME 971.50 37.5 % 29.5 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Claudia LARA PINILLOS FADMES 969.65 40.9 % 32.9 %
Nerea PÉREZ PEREA FMM 968.80 50 % 33.2 %
Iune LA HIDALGA OTAMENDI EMF-FVM 967.19 40.7 % 28.9 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Irati ASO ESAIN FNDME 966.13 49.6 % 32.9 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 963.65 36.5 % 28.5 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Aitana PICÓ I LÓPEZ FEMECV 961.88 36.3 % 28.3 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Carlota BÖCK VÁZQUEZ FEGAMON 952.26 47.6 % 31.1 %
Leire SÁNCHEZ GARCÍA FMRM 952.00 42.3 % 35.7 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Silvia FAYOS LOZADA FEMECV 948.56 34.5 % 26.8 %
Sara Libertad DÍAZ DE SARRALDE FMM 943.93 37.5 % 26.2 %
Haizea OSES SAIZ EMF-FVM 942.34 37.3 % 26.1 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 936.67 45.4 % 29.3 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 923.86 38.4 % 32.1 %
Alba MARTÍNEZ LLARÍA FMM 906.83 41.2 % 25.8 %
Paula LUCIO PANIAGUA FDMESCyL 895.57 35.4 % 25.3 %
Alba GÓMEZ CALATAYUD FEMECV 892.56 27.6 % 21 %
Lucia LORES REY FEGAMON 889.63 38.8 % 24 %
Jordana PEREZ GRANELL FEMECV 887.17 38.5 % 23.7 %
María FEO MIGUELA FNDME 886.26 26.9 % 20.4 %
Oihane RUIZ DE ARGANDOÑA FNDME 884.00 29.8 % 20.1 %
Maria SANTOS GONZÁLEZ FEXME 883.04 37.9 % 23.3 %
Elena CARAMES GONZALEZ FEMPA 879.50 33.3 % 23.6 %
Concepción María BALLESTEROS PÉREZ FADMES 804.94 18.7 % 13.8 %

Anchoring ‘elo.last.accum’ 2023

MERGING FROM SUB16-2023

competitor Team R.new Prob.Finals Prob.podium
Geila MACIÀ MARTÍN FEEC 1149.83 65.9 % 63.4 %
Júlia BENACH ZUBERO FEEC 1142.29 64.9 % 62.4 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1102.11 59.5 % 56.8 %
Emily Charlotte PESCETTO FEEC 1074.92 56.7 % 51.7 %
Laia TAULATS MCDONALD FAM-AND 1063.12 55 % 50 %
Nathalie Joanna VENDSALU FEMECV 1058.95 54.4 % 49.4 %
Erika CARRASCO AGUILA FMM 1054.54 52.8 % 50 %
Emily Charlotte PESCETTO BUDDEN FEEC 1054.14 52.7 % 49.9 %
Maria FERRÉ PRIM FEEC 1051.99 55.7 % 50 %
Ines ALLENDE LOPEZ EMF-FVM 1045.92 51.5 % 48.8 %
Aina VILA CANTERO FEEC 1044.80 51.4 % 48.6 %
Martina MUÑIZ VALENCIA FMM 1035.46 50 % 47.3 %
Carmen SÁNCHEZ JIMENEZ FDMCM 1035.31 50 % 47.2 %
Swann LAMBLIN BURGUET FEEC 1035.05 50 % 47.2 %
Candela AMADOR DEL CASTILLO FMM 1032.72 49.6 % 46.9 %
Udane MUGICA LASA EMF-FVM 1031.80 49.5 % 46.7 %
Maria FARRÉ PRIM FEEC 1028.21 49 % 46.2 %
India PERSSON FERNÁNDEZ FADMES 1027.94 50 % 45 %
Kanae Maria FRAILE ITAGAKI FECAMON 1022.43 48.1 % 45.4 %
Maite VILA LÓPEZ FEXME 1018.74 47.6 % 44.9 %
Intza ELIZALDE LARRARTE EMF-FVM 1018.32 48.6 % 43.6 %
Naroa AYERDI ARIZ FNDME 1014.95 47.1 % 44.3 %
Amanda BECERRA ESPINOSA FEXME 1013.02 46.8 % 44.1 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1011.28 47.6 % 42.6 %
Loreto PEINADO FRANGANILLO FMM 1008.25 46.1 % 43.4 %
Clara SALA PÉREZ FEMECV 1004.92 45.6 % 42.9 %
Sofía PEÑA PÉREZ FMM 996.08 45.4 % 40.5 %
Edurne MARTÍNEZ ALMENDROS FDMESCyL 995.05 44.2 % 41.5 %
Amaya DEL POZO CARIION FMM 994.93 47.8 % 46 %
Lucía LÓPEZ SÁNCHEZ FEXME 992.20 43.8 % 41.1 %
Amaya DEL POZO CARRION FMM 991.21 46 % 42.7 %
Alba SÁNCHEZ GARCÍA FMRM 990.11 43.5 % 40.8 %
Elena FERREIRO RODRIGUEZ FEGAMON 989.36 43.4 % 40.7 %
Alba DÍAZ MARTÍNEZ FEMECV 987.03 43.1 % 40.4 %
Nora GARCÍA MAESTU FEGAMON 986.18 46.3 % 40.6 %
Noa PERSSON FERNÁNDEZ FADMES 985.19 42.8 % 40.1 %
Berta GONZÁLEZ MARTÍNEZ FDMCM 984.91 42.8 % 40.1 %
Paula MARTÍNEZ AGUDO FMM 984.02 42.7 % 40 %
Meia LEÓN VILCHES FEXME 983.40 42.6 % 39.9 %
África PIÉDROLA SÁNCHEZ FADMES 982.63 42.5 % 39.8 %
Elba VERGÉS SOLÉ FEEC 982.49 42.5 % 39.8 %
Patricia LEAL ABAD FMRM 982.49 42.5 % 39.8 %
Ayla RUBIO GARCIA FMM 982.13 46 % 44.1 %
Sara GUERRERO RODRÍGUEZ FDMESCyL 980.17 44.4 % 41.1 %
Leire SÁNCHEZ GARCÍA FMRM 980.08 43.2 % 38.3 %
Alejandra MUÑOZ RODRÍGUEZ FADMES 977.92 41.8 % 39.1 %
Anna Sofia BETHENCOURT NEMECKOVA FECAMON 977.54 45 % 39.4 %
Aitana GARCÍA BERNABEU FEMECV 977.12 44 % 40.7 %
Lidia ALVAREZ RODRIGUEZ FEMPA 975.76 43.8 % 40.5 %
Lucía SÁNCHEZ SANTAMARÍA FDMESCyL 975.76 43.8 % 40.5 %
Raquel GEIJO RODRÍGUEZ FDMESCyL 975.76 43.8 % 40.5 %
Sofia SUAREZ DIAZ FEMPA 974.08 44.6 % 39 %
Eva RABADÁN GARCÍA FDMCM 973.35 41.2 % 38.5 %
Inés PORRERO MORA FDMCM 973.35 41.2 % 38.5 %
Ana SECO GABARRI FNDME 971.27 40.9 % 38.2 %
Nora ECHEVARRIA NUÑEZ EMF-FVM 969.67 40.7 % 38 %
Cristina CHAMON GARCÍA FDMCM 969.33 44.1 % 42.3 %
Vega SÁNCHEZ ESCUDERO FDMESCyL 968.89 43.8 % 38.3 %
Paula LUCIO PANIAGUA FDMESCyL 968.63 42.8 % 39.5 %
Sofia PÉREZ PEREA FMM 967.34 40.3 % 37.7 %
Carlota BÖCK VÁZQUEZ FEGAMON 963.24 40.8 % 36 %
Lucia LORES REY FEGAMON 961.32 41.8 % 38.5 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 951.23 39.1 % 34.4 %
Alba MARTÍNEZ LLARÍA FMM 949.85 38.9 % 34.3 %
Maria SANTOS GONZÁLEZ FEXME 948.45 38.8 % 34.1 %
Emma QUEIJO NAVEIRA FEGAMON 946.72 37.5 % 35 %
Nayara PANTIGA GUTIERREZ FEMPA 945.64 37.4 % 34.8 %
Carla PEREZ AMBRONA FMM 943.88 37.1 % 34.6 %
Paula HUERGO MIYAR FEMPA 939.58 36.6 % 34 %
Lara PRIDA SEOANE FEGAMON 917.39 33.7 % 31.2 %
Alejandra MARTÍN GARCÍA FDMCM 915.89 33.5 % 31 %
competitor Team R results R.new Prob.Finals Prob.podium
Júlia BENACH ZUBERO FEEC 1142.29 1 1173.06 66.8 % 62.8 %
Geila MACIÀ MARTÍN FEEC 1149.83 2 1178.98 67.6 % 63.6 %
Emily Charlotte PESCETTO BUDDEN FEEC 1054.14 3 1081.91 54.4 % 50 %
Clara SALA PÉREZ FEMECV 1004.92 4 1031.22 47.1 % 42.8 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1102.11 5 1126.57 60.7 % 56.4 %
Maria FARRÉ PRIM FEEC 1028.21 6 1051.25 50 % 45.6 %
Erika CARRASCO AGUILA FMM 1054.54 7 1075.91 53.5 % 49.1 %
Udane MUGICA LASA EMF-FVM 1031.80 8 1051.63 50.1 % 45.7 %
Ines ALLENDE LOPEZ EMF-FVM 1045.92 9 1064.11 51.9 % 47.4 %
Edurne MARTÍNEZ ALMENDROS FDMESCyL 995.05 10 1011.77 44.3 % 40 %
Maite VILA LÓPEZ FEXME 1018.74 11 1033.80 47.5 % 43.1 %
Kanae Maria FRAILE ITAGAKI FECAMON 1022.43 12 1035.88 47.8 % 43.4 %
Loreto PEINADO FRANGANILLO FMM 1008.25 13 1020.14 45.5 % 41.2 %
Aina VILA CANTERO FEEC 1044.80 14 1055.00 50.5 % 46.1 %
Candela AMADOR DEL CASTILLO FMM 1032.72 15 1041.35 48.6 % 44.2 %
Carmen SÁNCHEZ JIMENEZ FDMCM 1035.31 16 1042.33 48.7 % 44.3 %
Amanda BECERRA ESPINOSA FEXME 1013.02 17 1018.50 45.3 % 41 %
Martina MUÑIZ VALENCIA FMM 1035.46 18 1039.28 48.3 % 43.9 %
Meia LEÓN VILCHES FEXME 983.40 18 987.35 40.9 % 36.7 %
Paula HUERGO MIYAR FEMPA 939.58 20 940.44 34.6 % 30.7 %
Berta GONZÁLEZ MARTÍNEZ FDMCM 984.91 21 984.06 40.4 % 36.3 %
Elna ROTGÉS CASELLAS FEEC 1000.00 22 997.62 42.3 % 38.1 %
Naroa AYERDI ARIZ FNDME 1014.95 23 1010.82 44.2 % 39.9 %
Alba DÍAZ MARTÍNEZ FEMECV 987.03 24 981.37 40.1 % 35.9 %
Elba VERGÉS SOLÉ FEEC 982.49 24 976.85 39.5 % 35.3 %
Elena FERREIRO RODRIGUEZ FEGAMON 989.36 24 983.70 40.4 % 36.2 %
Eva RABADÁN GARCÍA FDMCM 973.35 24 967.73 38.2 % 34.1 %
Nayara PANTIGA GUTIERREZ FEMPA 945.64 24 940.09 34.5 % 30.7 %
Noa PERSSON FERNÁNDEZ FADMES 985.19 24 979.54 39.8 % 35.7 %
Nora ECHEVARRIA NUÑEZ EMF-FVM 969.67 24 964.06 37.7 % 33.7 %
Sofia PÉREZ PEREA FMM 967.34 24 961.73 37.4 % 33.4 %
Swann LAMBLIN BURGUET FEEC 1035.05 24 1029.27 46.8 % 42.5 %
Enara MALO SANTOS FNDME 1000.00 24 994.42 41.9 % 37.7 %
Gaia POLINI MARTÍNEZ FEEC 1000.00 24 994.42 41.9 % 37.7 %
Sara SANMARTÍN CALVO FNDME 1000.00 24 994.42 41.9 % 37.7 %
Carla PEREZ AMBRONA FMM 943.88 36 919.13 31.9 % 28.1 %
Emma QUEIJO NAVEIRA FEGAMON 946.72 36 921.97 32.2 % 28.5 %
Nora GARCÍA MAESTU FEGAMON 986.18 36 961.33 37.3 % 33.3 %
Asia LATORRE CORO FAM 1000.00 36 975.22 39.2 % 35.1 %
Lucía LÓPEZ SÁNCHEZ FEXME 992.20 40 960.93 37.3 % 33.3 %
Anna Sofia BETHENCOURT NEMECKOVA FECAMON 977.54 41 944.71 35.1 % 31.2 %
competitor Team R.new Prob.Finals Prob.podium
Geila MACIÀ MARTÍN FEEC 1178.98 67.6 % 63.6 %
Júlia BENACH ZUBERO FEEC 1173.06 66.8 % 62.8 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1126.57 60.7 % 56.4 %
Emily Charlotte PESCETTO BUDDEN FEEC 1081.91 54.4 % 50 %
Erika CARRASCO AGUILA FMM 1075.91 53.5 % 49.1 %
Emily Charlotte PESCETTO FEEC 1074.92 56.7 % 51.7 %
Ines ALLENDE LOPEZ EMF-FVM 1064.11 51.9 % 47.4 %
Laia TAULATS MCDONALD FAM-AND 1063.12 55 % 50 %
Nathalie Joanna VENDSALU FEMECV 1058.95 54.4 % 49.4 %
Aina VILA CANTERO FEEC 1055.00 50.5 % 46.1 %
Maria FERRÉ PRIM FEEC 1051.99 55.7 % 50 %
Udane MUGICA LASA EMF-FVM 1051.63 50.1 % 45.7 %
Maria FARRÉ PRIM FEEC 1051.25 50 % 45.6 %
Carmen SÁNCHEZ JIMENEZ FDMCM 1042.33 48.7 % 44.3 %
Candela AMADOR DEL CASTILLO FMM 1041.35 48.6 % 44.2 %
Martina MUÑIZ VALENCIA FMM 1039.28 48.3 % 43.9 %
Kanae Maria FRAILE ITAGAKI FECAMON 1035.88 47.8 % 43.4 %
Maite VILA LÓPEZ FEXME 1033.80 47.5 % 43.1 %
Clara SALA PÉREZ FEMECV 1031.22 47.1 % 42.8 %
Swann LAMBLIN BURGUET FEEC 1029.27 46.8 % 42.5 %
India PERSSON FERNÁNDEZ FADMES 1027.94 50 % 45 %
Loreto PEINADO FRANGANILLO FMM 1020.14 45.5 % 41.2 %
Amanda BECERRA ESPINOSA FEXME 1018.50 45.3 % 41 %
Intza ELIZALDE LARRARTE EMF-FVM 1018.32 48.6 % 43.6 %
Edurne MARTÍNEZ ALMENDROS FDMESCyL 1011.77 44.3 % 40 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1011.28 47.6 % 42.6 %
Naroa AYERDI ARIZ FNDME 1010.82 44.2 % 39.9 %
Elna ROTGÉS CASELLAS FEEC 997.62 42.3 % 38.1 %
Sofía PEÑA PÉREZ FMM 996.08 45.4 % 40.5 %
Amaya DEL POZO CARIION FMM 994.93 47.8 % 46 %
Enara MALO SANTOS FNDME 994.42 41.9 % 37.7 %
Gaia POLINI MARTÍNEZ FEEC 994.42 41.9 % 37.7 %
Sara SANMARTÍN CALVO FNDME 994.42 41.9 % 37.7 %
Amaya DEL POZO CARRION FMM 991.21 46 % 42.7 %
Alba SÁNCHEZ GARCÍA FMRM 990.11 43.5 % 40.8 %
Meia LEÓN VILCHES FEXME 987.35 40.9 % 36.7 %
Berta GONZÁLEZ MARTÍNEZ FDMCM 984.06 40.4 % 36.3 %
Paula MARTÍNEZ AGUDO FMM 984.02 42.7 % 40 %
Elena FERREIRO RODRIGUEZ FEGAMON 983.70 40.4 % 36.2 %
África PIÉDROLA SÁNCHEZ FADMES 982.63 42.5 % 39.8 %
Patricia LEAL ABAD FMRM 982.49 42.5 % 39.8 %
Ayla RUBIO GARCIA FMM 982.13 46 % 44.1 %
Alba DÍAZ MARTÍNEZ FEMECV 981.37 40.1 % 35.9 %
Sara GUERRERO RODRÍGUEZ FDMESCyL 980.17 44.4 % 41.1 %
Leire SÁNCHEZ GARCÍA FMRM 980.08 43.2 % 38.3 %
Noa PERSSON FERNÁNDEZ FADMES 979.54 39.8 % 35.7 %
Alejandra MUÑOZ RODRÍGUEZ FADMES 977.92 41.8 % 39.1 %
Aitana GARCÍA BERNABEU FEMECV 977.12 44 % 40.7 %
Elba VERGÉS SOLÉ FEEC 976.85 39.5 % 35.3 %
Lidia ALVAREZ RODRIGUEZ FEMPA 975.76 43.8 % 40.5 %
Lucía SÁNCHEZ SANTAMARÍA FDMESCyL 975.76 43.8 % 40.5 %
Raquel GEIJO RODRÍGUEZ FDMESCyL 975.76 43.8 % 40.5 %
Asia LATORRE CORO FAM 975.22 39.2 % 35.1 %
Sofia SUAREZ DIAZ FEMPA 974.08 44.6 % 39 %
Inés PORRERO MORA FDMCM 973.35 41.2 % 38.5 %
Ana SECO GABARRI FNDME 971.27 40.9 % 38.2 %
Cristina CHAMON GARCÍA FDMCM 969.33 44.1 % 42.3 %
Vega SÁNCHEZ ESCUDERO FDMESCyL 968.89 43.8 % 38.3 %
Paula LUCIO PANIAGUA FDMESCyL 968.63 42.8 % 39.5 %
Eva RABADÁN GARCÍA FDMCM 967.73 38.2 % 34.1 %
Nora ECHEVARRIA NUÑEZ EMF-FVM 964.06 37.7 % 33.7 %
Carlota BÖCK VÁZQUEZ FEGAMON 963.24 40.8 % 36 %
Sofia PÉREZ PEREA FMM 961.73 37.4 % 33.4 %
Nora GARCÍA MAESTU FEGAMON 961.33 37.3 % 33.3 %
Lucia LORES REY FEGAMON 961.32 41.8 % 38.5 %
Lucía LÓPEZ SÁNCHEZ FEXME 960.93 37.3 % 33.3 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 951.23 39.1 % 34.4 %
Alba MARTÍNEZ LLARÍA FMM 949.85 38.9 % 34.3 %
Maria SANTOS GONZÁLEZ FEXME 948.45 38.8 % 34.1 %
Anna Sofia BETHENCOURT NEMECKOVA FECAMON 944.71 35.1 % 31.2 %
Paula HUERGO MIYAR FEMPA 940.44 34.6 % 30.7 %
Nayara PANTIGA GUTIERREZ FEMPA 940.09 34.5 % 30.7 %
Emma QUEIJO NAVEIRA FEGAMON 921.97 32.2 % 28.5 %
Carla PEREZ AMBRONA FMM 919.13 31.9 % 28.1 %
Lara PRIDA SEOANE FEGAMON 917.39 33.7 % 31.2 %
Alejandra MARTÍN GARCÍA FDMCM 915.89 33.5 % 31 %

2024 April

Elo April 2024

-Competitors = r-

re-instating ‘elo.last.accum’

elo.last.accum <- elo.23.accum 
competitor Team R results R.new Prob.Finals Prob.podium
Laia TAULATS MCDONALD FAM-AND 1177.54 1 1206.17 82 % 67.3 %
Maria FARRÉ PRIM FEEC 1065.30 2 1094.33 70.5 % 51.9 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1153.89 3 1180.83 79.7 % 64 %
Erika CARRASCO AGUILA FMM 1099.99 4 1125.17 74.1 % 56.4 %
Meia LEÓN VILCHES FEXME 998.21 5 1021.77 61.2 % 41.6 %
India PERSSON FERNÁNDEZ FADMES 1108.43 6 1128.03 74.4 % 56.8 %
Intza ELIZALDE LARRARTE EMF-FVM 1090.11 7 1107.94 72.1 % 53.9 %
Martina MUÑIZ VALENCIA FMM 1055.04 8 1072.80 67.9 % 48.9 %
Hirune JACOBS HAMMU FECAMON 1000.00 9 1016.02 60.4 % 40.8 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1068.47 10 1080.79 68.9 % 50 %
Kanae Maria FRAILE ITAGAKI FECAMON 1039.86 11 1052.01 65.2 % 45.9 %
Maite VILA LÓPEZ FEXME 1054.63 12 1064.86 66.9 % 47.7 %
Elur ARTEAGA ARZALLUS EMF-FVM 1050.55 13 1057.33 65.9 % 46.6 %
Nayara PANTIGA GUTIERREZ FEMPA 930.86 14 937.65 49.3 % 30.5 %
Elba VERGÉS SOLÉ FEEC 970.89 15 975.69 54.7 % 35.3 %
Naroa MORALES ALMAZAN FNDME 979.00 16 980.61 55.4 % 36 %
Maria SANTOS GONZÁLEZ FEXME 883.04 17 883.37 41.5 % 24.3 %
Irati ASO ESAIN FNDME 966.13 18 964.05 53.1 % 33.8 %
Alba MARTÍNEZ LLARÍA FMM 906.83 19 903.25 44.3 % 26.5 %
Carmen SÁNCHEZ JIMENEZ FDMCLM 1051.35 20 1046.53 64.5 % 45.1 %
Marta RIVERA GALLERA FMM 980.65 21 974.13 54.5 % 35.1 %
Carlota BÖCK VÁZQUEZ FEGAMON 952.26 22 942.75 50 % 31.1 %
Alejandra MUÑOZ RODRÍGUEZ FADMES 977.92 23 967.65 53.6 % 34.3 %
Elna ROTGÉS CASELLAS FEEC 997.62 23 987.30 56.4 % 36.9 %
Gaia POLINI MARTÍNEZ FEEC 994.42 25 980.34 55.4 % 35.9 %
Libe CASTILLO EGUREN EMF-FVM 1000.00 26 984.02 55.9 % 36.4 %
Paula HUERGO MIYAR FEMPA 940.44 26 924.62 47.4 % 28.9 %
Lara PRIDA SEOANE FEGAMON 917.39 28 897.86 43.6 % 25.9 %
Amalia GARCÍA-COSIO ROMAGOSA FBME 1000.00 29 978.38 55.1 % 35.7 %
Malena ECHALAR CÁRDENAS FAM 1000.00 29 978.38 55.1 % 35.7 %
Leire SÁNCHEZ GARCÍA FMRM 952.00 31 925.55 47.5 % 29 %
Paula LUCIO PANIAGUA FDMESCyL 895.57 31 869.47 39.6 % 22.9 %
Irene Xiaozhao PEREZ PRADO FAM 974.41 33 944.05 50.2 % 31.3 %
Lucia LORES REY FEGAMON 889.63 33 859.80 38.3 % 21.9 %
Andrea HERREROS BELMAR FDMCLM 1000.00 33 970.85 54 % 34.7 %

#####_ Elo History _

Elo in time

Elo Accumulated April_2024

competitor Team R.new Prob.Finals Prob.podium
Laia TAULATS MCDONALD FAM-AND 1206.17 82 % 67.3 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1188.20 67.7 % 59.3 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1180.83 79.7 % 64 %
Aida TORRES ILLAMOLA FEEC 1150.00 62.7 % 53.9 %
India PERSSON FERNÁNDEZ FADMES 1128.03 74.4 % 56.8 %
Erika CARRASCO AGUILA FMM 1125.17 74.1 % 56.4 %
Rebeca PEREZ DUATO FAM 1123.10 59 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1116.83 58.1 % 49.1 %
Intza ELIZALDE LARRARTE EMF-FVM 1107.94 72.1 % 53.9 %
Rut MONSECH GASCA FEEC 1105.93 56.6 % 47.5 %
Andrea RODRIGUEZ SALAS FEXME 1104.85 64.6 % 53.1 %
Mar CARREÑO ESCOBAR FADMES 1097.03 67.7 % 51 %
Maria FARRÉ PRIM FEEC 1094.33 70.5 % 51.9 %
Ainhize BELAR BARRUTIA EMF-FVM 1086.30 57.6 % 44.7 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1080.79 68.9 % 50 %
Martina MUÑIZ VALENCIA FMM 1072.80 67.9 % 48.9 %
Lucia MIRANDA CID FEEC 1072.49 51.8 % 42.8 %
Michelle Paola MATHEUS GUILLEN FMM 1069.06 51.3 % 42.3 %
Maite VILA LÓPEZ FEXME 1064.86 66.9 % 47.7 %
Vera BRIONGOS MARTÍN FEXME 1063.39 54.3 % 45.7 %
Maria PAREDES RAMOS FEXME 1059.89 50 % 41 %
Elur ARTEAGA ARZALLUS EMF-FVM 1057.33 65.9 % 46.6 %
Miriam DIEZ LUENGO FMM 1052.12 48.9 % 39.9 %
Kanae Maria FRAILE ITAGAKI FECAMON 1052.01 65.2 % 45.9 %
Carmen SÁNCHEZ JIMENEZ FDMCLM 1046.53 64.5 % 45.1 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Meia LEÓN VILCHES FEXME 1021.77 61.2 % 41.6 %
Hirune JACOBS HAMMU FECAMON 1016.02 60.4 % 40.8 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Brisa CALDERON BRUÑUEL FEMECV 1008.41 51.2 % 39.4 %
Paula TRAVERSO LEBRON FEXME 1004.06 42 % 33.5 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Ana TORREGROSA MARTÍNEZ FEMECV 999.00 41.3 % 32.9 %
Sofía PEÑA PÉREZ FMM 998.50 49.7 % 38 %
Candela SEPÚLVEDA FERRÍS FEMECV 997.60 49.6 % 37.9 %
Irati ZABALA MUXIKA EMF-FVM 995.45 44.6 % 32.4 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Rocío LEAL ABAD FMRM 987.33 47.4 % 40.5 %
Elna ROTGÉS CASELLAS FEEC 987.30 56.4 % 36.9 %
Natalia PÉREZ VALLE FMM 986.13 47.9 % 36.4 %
Libe CASTILLO EGUREN EMF-FVM 984.02 55.9 % 36.4 %
Naroa MORALES ALMAZAN FNDME 980.61 55.4 % 36 %
Gaia POLINI MARTÍNEZ FEEC 980.34 55.4 % 35.9 %
Amaya DEL POZO CARRION FMM 978.59 38.5 % 30.3 %
Amalia GARCÍA-COSIO ROMAGOSA FBME 978.38 55.1 % 35.7 %
Malena ECHALAR CÁRDENAS FAM 978.38 55.1 % 35.7 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Marina REVERT LLOMPART FBME 976.12 38.2 % 30 %
Elba VERGÉS SOLÉ FEEC 975.69 54.7 % 35.3 %
Natalia VALE FERNÁNDEZ FEGAMON 974.27 50.8 % 33.9 %
Marta RIVERA GALLERA FMM 974.13 54.5 % 35.1 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Paula MENESES BALLESTEROS FDMCM 971.85 45.1 % 38.4 %
Antia FREITAS RIAL FEXME 971.50 37.5 % 29.5 %
Andrea HERREROS BELMAR FDMCLM 970.85 54 % 34.7 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Claudia LARA PINILLOS FADMES 969.65 40.9 % 32.9 %
Nerea PÉREZ PEREA FMM 968.80 50 % 33.2 %
Alejandra MUÑOZ RODRÍGUEZ FADMES 967.65 53.6 % 34.3 %
Iune LA HIDALGA OTAMENDI EMF-FVM 967.19 40.7 % 28.9 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Irati ASO ESAIN FNDME 964.05 53.1 % 33.8 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 963.65 36.5 % 28.5 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Aitana PICÓ I LÓPEZ FEMECV 961.88 36.3 % 28.3 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Silvia FAYOS LOZADA FEMECV 948.56 34.5 % 26.8 %
Irene Xiaozhao PEREZ PRADO FAM 944.05 50.2 % 31.3 %
Sara Libertad DÍAZ DE SARRALDE FMM 943.93 37.5 % 26.2 %
Carlota BÖCK VÁZQUEZ FEGAMON 942.75 50 % 31.1 %
Haizea OSES SAIZ EMF-FVM 942.34 37.3 % 26.1 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Nayara PANTIGA GUTIERREZ FEMPA 937.65 49.3 % 30.5 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 936.67 45.4 % 29.3 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Leire SÁNCHEZ GARCÍA FMRM 925.55 47.5 % 29 %
Paula HUERGO MIYAR FEMPA 924.62 47.4 % 28.9 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 923.86 38.4 % 32.1 %
Alba MARTÍNEZ LLARÍA FMM 903.25 44.3 % 26.5 %
Lara PRIDA SEOANE FEGAMON 897.86 43.6 % 25.9 %
Alba GÓMEZ CALATAYUD FEMECV 892.56 27.6 % 21 %
Jordana PEREZ GRANELL FEMECV 887.17 38.5 % 23.7 %
María FEO MIGUELA FNDME 886.26 26.9 % 20.4 %
Oihane RUIZ DE ARGANDOÑA FNDME 884.00 29.8 % 20.1 %
Maria SANTOS GONZÁLEZ FEXME 883.37 41.5 % 24.3 %
Elena CARAMES GONZALEZ FEMPA 879.50 33.3 % 23.6 %
Paula LUCIO PANIAGUA FDMESCyL 869.47 39.6 % 22.9 %
Lucia LORES REY FEGAMON 859.80 38.3 % 21.9 %
Concepción María BALLESTEROS PÉREZ FADMES 804.94 18.7 % 13.8 %

2024 April-Abs

Elo April-Abs 2024

-Competitors = r-

competitor Team R results R.new Prob.Finals Prob.podium
Geila MACIÀ MARTÍN FEEC 1209.55 1 1239.91 71.8 % 62.5 %
Rebeca PEREZ DUATO FAM 1123.10 2 1150.88 60.4 % 50 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1188.20 3 1213.25 68.6 % 58.9 %
Júlia BENACH ZUBERO FEEC 1201.96 4 1224.96 70 % 60.5 %
Miriam DIEZ LUENGO FMM 1052.12 5 1072.82 49.3 % 39 %
Emily Charlotte PESCETTO BUDDEN FEEC 1107.66 6 1126.04 57 % 46.4 %
Lucía SEMPERE GONZÁLEZ FEMECV 1116.83 7 1132.33 57.8 % 47.3 %
Paula TRAVERSO LEBRON FEXME 1004.06 8 1017.59 41.5 % 31.7 %
Isis SANZ PÉREZ FAM 1000.00 9 1011.36 40.6 % 30.9 %
Michelle Paola MATHEUS GUILLEN FMM 1069.06 10 1077.38 50 % 39.6 %
Maria PAREDES RAMOS FEXME 1059.89 11 1065.79 48.3 % 38 %
Laia TAULATS MCDONALD FAM-AND 1206.17 12 1209.00 68.1 % 58.3 %
India PERSSON FERNÁNDEZ FADMES 1128.03 13 1128.71 57.3 % 46.8 %
Martina MUÑIZ VALENCIA FMM 1072.80 14 1071.26 49.1 % 38.7 %
Rut MONSECH GASCA FEEC 1105.93 15 1101.78 53.5 % 43 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1180.83 16 1173.91 63.5 % 53.3 %
Erika CARRASCO AGUILA FMM 1125.17 17 1116.02 55.5 % 45 %
Natalia VALE FERNÁNDEZ FEGAMON 974.27 18 963.31 34.1 % 25.4 %
María FEO MIGUELA FNDME 886.26 19 873.16 23.6 % 16.8 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1080.79 20 1064.45 48.1 % 37.8 %
Ana TORREGROSA MARTÍNEZ FEMECV 999.00 21 980.55 36.4 % 27.3 %
Idoia MARTÍNEZ IRISARRI EMF-FVM 1000.00 22 979.36 36.3 % 27.1 %
Aitana PICÓ I LÓPEZ FEMECV 961.88 23 938.66 31 % 22.8 %
Alba GÓMEZ CALATAYUD FEMECV 892.56 24 867.13 23 % 16.3 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 936.67 24 911.08 27.7 % 20.1 %
Nerea PÉREZ PEREA FMM 968.80 24 943.09 31.6 % 23.2 %
Sara SAMANIEGO PAMIES FEEC 1000.00 24 974.43 35.6 % 26.6 %

#####_ Elo History _

Elo in time

Elo Accumulated April-Abs_2024

competitor Team R.new Prob.Finals Prob.podium
Geila MACIÀ MARTÍN FEEC 1239.91 71.8 % 62.5 %
Júlia BENACH ZUBERO FEEC 1224.96 70 % 60.5 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1213.25 68.6 % 58.9 %
Laia TAULATS MCDONALD FAM-AND 1209.00 68.1 % 58.3 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1173.91 63.5 % 53.3 %
Rebeca PEREZ DUATO FAM 1150.88 60.4 % 50 %
Aida TORRES ILLAMOLA FEEC 1150.00 62.7 % 53.9 %
Lucía SEMPERE GONZÁLEZ FEMECV 1132.33 57.8 % 47.3 %
India PERSSON FERNÁNDEZ FADMES 1128.71 57.3 % 46.8 %
Emily Charlotte PESCETTO BUDDEN FEEC 1126.04 57 % 46.4 %
Erika CARRASCO AGUILA FMM 1116.02 55.5 % 45 %
Intza ELIZALDE LARRARTE EMF-FVM 1107.94 72.1 % 53.9 %
Andrea RODRIGUEZ SALAS FEXME 1104.85 64.6 % 53.1 %
Rut MONSECH GASCA FEEC 1101.78 53.5 % 43 %
Mar CARREÑO ESCOBAR FADMES 1097.03 67.7 % 51 %
Maria FARRÉ PRIM FEEC 1094.33 70.5 % 51.9 %
Ainhize BELAR BARRUTIA EMF-FVM 1086.30 57.6 % 44.7 %
Michelle Paola MATHEUS GUILLEN FMM 1077.38 50 % 39.6 %
Miriam DIEZ LUENGO FMM 1072.82 49.3 % 39 %
Lucia MIRANDA CID FEEC 1072.49 51.8 % 42.8 %
Martina MUÑIZ VALENCIA FMM 1071.26 49.1 % 38.7 %
Maria PAREDES RAMOS FEXME 1065.79 48.3 % 38 %
Maite VILA LÓPEZ FEXME 1064.86 66.9 % 47.7 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1064.45 48.1 % 37.8 %
Vera BRIONGOS MARTÍN FEXME 1063.39 54.3 % 45.7 %
Elur ARTEAGA ARZALLUS EMF-FVM 1057.33 65.9 % 46.6 %
Kanae Maria FRAILE ITAGAKI FECAMON 1052.01 65.2 % 45.9 %
Carmen SÁNCHEZ JIMENEZ FDMCLM 1046.53 64.5 % 45.1 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Meia LEÓN VILCHES FEXME 1021.77 61.2 % 41.6 %
Paula TRAVERSO LEBRON FEXME 1017.59 41.5 % 31.7 %
Hirune JACOBS HAMMU FECAMON 1016.02 60.4 % 40.8 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Isis SANZ PÉREZ FAM 1011.36 40.6 % 30.9 %
Brisa CALDERON BRUÑUEL FEMECV 1008.41 51.2 % 39.4 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Sofía PEÑA PÉREZ FMM 998.50 49.7 % 38 %
Candela SEPÚLVEDA FERRÍS FEMECV 997.60 49.6 % 37.9 %
Irati ZABALA MUXIKA EMF-FVM 995.45 44.6 % 32.4 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Rocío LEAL ABAD FMRM 987.33 47.4 % 40.5 %
Elna ROTGÉS CASELLAS FEEC 987.30 56.4 % 36.9 %
Natalia PÉREZ VALLE FMM 986.13 47.9 % 36.4 %
Libe CASTILLO EGUREN EMF-FVM 984.02 55.9 % 36.4 %
Naroa MORALES ALMAZAN FNDME 980.61 55.4 % 36 %
Ana TORREGROSA MARTÍNEZ FEMECV 980.55 36.4 % 27.3 %
Gaia POLINI MARTÍNEZ FEEC 980.34 55.4 % 35.9 %
Idoia MARTÍNEZ IRISARRI EMF-FVM 979.36 36.3 % 27.1 %
Amaya DEL POZO CARRION FMM 978.59 38.5 % 30.3 %
Amalia GARCÍA-COSIO ROMAGOSA FBME 978.38 55.1 % 35.7 %
Malena ECHALAR CÁRDENAS FAM 978.38 55.1 % 35.7 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Marina REVERT LLOMPART FBME 976.12 38.2 % 30 %
Elba VERGÉS SOLÉ FEEC 975.69 54.7 % 35.3 %
Sara SAMANIEGO PAMIES FEEC 974.43 35.6 % 26.6 %
Marta RIVERA GALLERA FMM 974.13 54.5 % 35.1 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Paula MENESES BALLESTEROS FDMCM 971.85 45.1 % 38.4 %
Antia FREITAS RIAL FEXME 971.50 37.5 % 29.5 %
Andrea HERREROS BELMAR FDMCLM 970.85 54 % 34.7 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Claudia LARA PINILLOS FADMES 969.65 40.9 % 32.9 %
Alejandra MUÑOZ RODRÍGUEZ FADMES 967.65 53.6 % 34.3 %
Iune LA HIDALGA OTAMENDI EMF-FVM 967.19 40.7 % 28.9 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Irati ASO ESAIN FNDME 964.05 53.1 % 33.8 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 963.65 36.5 % 28.5 %
Natalia VALE FERNÁNDEZ FEGAMON 963.31 34.1 % 25.4 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Silvia FAYOS LOZADA FEMECV 948.56 34.5 % 26.8 %
Irene Xiaozhao PEREZ PRADO FAM 944.05 50.2 % 31.3 %
Sara Libertad DÍAZ DE SARRALDE FMM 943.93 37.5 % 26.2 %
Nerea PÉREZ PEREA FMM 943.09 31.6 % 23.2 %
Carlota BÖCK VÁZQUEZ FEGAMON 942.75 50 % 31.1 %
Haizea OSES SAIZ EMF-FVM 942.34 37.3 % 26.1 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Aitana PICÓ I LÓPEZ FEMECV 938.66 31 % 22.8 %
Nayara PANTIGA GUTIERREZ FEMPA 937.65 49.3 % 30.5 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Leire SÁNCHEZ GARCÍA FMRM 925.55 47.5 % 29 %
Paula HUERGO MIYAR FEMPA 924.62 47.4 % 28.9 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 923.86 38.4 % 32.1 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 911.08 27.7 % 20.1 %
Alba MARTÍNEZ LLARÍA FMM 903.25 44.3 % 26.5 %
Lara PRIDA SEOANE FEGAMON 897.86 43.6 % 25.9 %
Jordana PEREZ GRANELL FEMECV 887.17 38.5 % 23.7 %
Oihane RUIZ DE ARGANDOÑA FNDME 884.00 29.8 % 20.1 %
Maria SANTOS GONZÁLEZ FEXME 883.37 41.5 % 24.3 %
Elena CARAMES GONZALEZ FEMPA 879.50 33.3 % 23.6 %
María FEO MIGUELA FNDME 873.16 23.6 % 16.8 %
Paula LUCIO PANIAGUA FDMESCyL 869.47 39.6 % 22.9 %
Alba GÓMEZ CALATAYUD FEMECV 867.13 23 % 16.3 %
Lucia LORES REY FEGAMON 859.80 38.3 % 21.9 %
Concepción María BALLESTEROS PÉREZ FADMES 804.94 18.7 % 13.8 %

2024 June

Elo June 2024

-Competitors = r-

competitor Team R results R.new Prob.Finals Prob.podium
Laia TAULATS MCDONALD FAM-AND 1209.00 1 1239.09 72.2 % 63.9 %
Erika CARRASCO AGUILA FMM 1116.02 2 1144.00 60 % 50.6 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1173.91 3 1199.35 67.3 % 58.5 %
Maria FARRÉ PRIM FEEC 1094.33 4 1117.64 56.3 % 46.8 %
Martina MUÑIZ VALENCIA FMM 1071.26 5 1092.27 52.7 % 43.2 %
Meia LEÓN VILCHES FEXME 1021.77 6 1040.58 45.3 % 36.1 %
Elur ARTEAGA ARZALLUS EMF-FVM 1057.33 7 1073.65 50 % 40.6 %
Nayara PANTIGA GUTIERREZ FEMPA 937.65 8 952.02 33.2 % 25.3 %
India PERSSON FERNÁNDEZ FADMES 1128.71 9 1140.06 59.4 % 50 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1064.45 10 1073.63 50 % 40.6 %
Marta RIVERA GALLERA FMM 974.13 11 981.26 37 % 28.6 %
Amalia GARCÍA-COSIO ROMAGOSA FBME 978.38 12 983.12 37.3 % 28.8 %
Libe CASTILLO EGUREN EMF-FVM 984.02 13 986.37 37.7 % 29.2 %
Maite VILA LÓPEZ FEXME 1064.86 14 1064.56 48.7 % 39.3 %
Carmen SÁNCHEZ JIMENEZ FDMCLM 1046.53 15 1043.92 45.7 % 36.5 %
Intza ELIZALDE LARRARTE EMF-FVM 1107.94 15 1105.13 54.5 % 45 %
Alejandra MUÑOZ RODRÍGUEZ FADMES 967.65 17 960.58 34.3 % 26.2 %
Lucia LORES REY FEGAMON 859.80 18 850.72 21.7 % 15.9 %
Naroa MORALES ALMAZAN FNDME 980.61 19 968.75 35.3 % 27.2 %
Alba MARTÍNEZ LLARÍA FMM 903.25 20 889.29 25.7 % 19.1 %
Malena ECHALAR CÁRDENAS FAM 978.38 21 961.79 34.4 % 26.4 %
Carlota BÖCK VÁZQUEZ FEGAMON 942.75 22 923.91 29.7 % 22.4 %
Elba VERGÉS SOLÉ FEEC 975.69 22 956.74 33.8 % 25.8 %
Irati ASO ESAIN FNDME 964.05 22 945.14 32.3 % 24.6 %
Maria SANTOS GONZÁLEZ FEXME 883.37 22 864.73 23.1 % 17 %
Paula LUCIO PANIAGUA FDMESCyL 869.47 22 850.88 21.7 % 15.9 %
Ainhoa GARCÍA SANTOS FMM 1000.00 22 981.05 37 % 28.6 %
Maia LEDESMA PRUNES FBME 1000.00 22 981.05 37 % 28.6 %

#####_ Elo History _

Elo in time

Elo Accumulated June_2024

competitor Team R.new Prob.Finals Prob.podium
Geila MACIÀ MARTÍN FEEC 1239.91 71.8 % 62.5 %
Laia TAULATS MCDONALD FAM-AND 1239.09 72.2 % 63.9 %
Júlia BENACH ZUBERO FEEC 1224.96 70 % 60.5 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1213.25 68.6 % 58.9 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1199.35 67.3 % 58.5 %
Rebeca PEREZ DUATO FAM 1150.88 60.4 % 50 %
Aida TORRES ILLAMOLA FEEC 1150.00 62.7 % 53.9 %
Erika CARRASCO AGUILA FMM 1144.00 60 % 50.6 %
India PERSSON FERNÁNDEZ FADMES 1140.06 59.4 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1132.33 57.8 % 47.3 %
Emily Charlotte PESCETTO BUDDEN FEEC 1126.04 57 % 46.4 %
Maria FARRÉ PRIM FEEC 1117.64 56.3 % 46.8 %
Intza ELIZALDE LARRARTE EMF-FVM 1105.13 54.5 % 45 %
Andrea RODRIGUEZ SALAS FEXME 1104.85 64.6 % 53.1 %
Rut MONSECH GASCA FEEC 1101.78 53.5 % 43 %
Mar CARREÑO ESCOBAR FADMES 1097.03 67.7 % 51 %
Martina MUÑIZ VALENCIA FMM 1092.27 52.7 % 43.2 %
Ainhize BELAR BARRUTIA EMF-FVM 1086.30 57.6 % 44.7 %
Michelle Paola MATHEUS GUILLEN FMM 1077.38 50 % 39.6 %
Elur ARTEAGA ARZALLUS EMF-FVM 1073.65 50 % 40.6 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1073.63 50 % 40.6 %
Miriam DIEZ LUENGO FMM 1072.82 49.3 % 39 %
Lucia MIRANDA CID FEEC 1072.49 51.8 % 42.8 %
Maria PAREDES RAMOS FEXME 1065.79 48.3 % 38 %
Maite VILA LÓPEZ FEXME 1064.56 48.7 % 39.3 %
Vera BRIONGOS MARTÍN FEXME 1063.39 54.3 % 45.7 %
Kanae Maria FRAILE ITAGAKI FECAMON 1052.01 65.2 % 45.9 %
Carmen SÁNCHEZ JIMENEZ FDMCLM 1043.92 45.7 % 36.5 %
Meia LEÓN VILCHES FEXME 1040.58 45.3 % 36.1 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Paula TRAVERSO LEBRON FEXME 1017.59 41.5 % 31.7 %
Hirune JACOBS HAMMU FECAMON 1016.02 60.4 % 40.8 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Isis SANZ PÉREZ FAM 1011.36 40.6 % 30.9 %
Brisa CALDERON BRUÑUEL FEMECV 1008.41 51.2 % 39.4 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Sofía PEÑA PÉREZ FMM 998.50 49.7 % 38 %
Candela SEPÚLVEDA FERRÍS FEMECV 997.60 49.6 % 37.9 %
Irati ZABALA MUXIKA EMF-FVM 995.45 44.6 % 32.4 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Rocío LEAL ABAD FMRM 987.33 47.4 % 40.5 %
Elna ROTGÉS CASELLAS FEEC 987.30 56.4 % 36.9 %
Libe CASTILLO EGUREN EMF-FVM 986.37 37.7 % 29.2 %
Natalia PÉREZ VALLE FMM 986.13 47.9 % 36.4 %
Amalia GARCÍA-COSIO ROMAGOSA FBME 983.12 37.3 % 28.8 %
Marta RIVERA GALLERA FMM 981.26 37 % 28.6 %
Ainhoa GARCÍA SANTOS FMM 981.05 37 % 28.6 %
Maia LEDESMA PRUNES FBME 981.05 37 % 28.6 %
Ana TORREGROSA MARTÍNEZ FEMECV 980.55 36.4 % 27.3 %
Gaia POLINI MARTÍNEZ FEEC 980.34 55.4 % 35.9 %
Idoia MARTÍNEZ IRISARRI EMF-FVM 979.36 36.3 % 27.1 %
Amaya DEL POZO CARRION FMM 978.59 38.5 % 30.3 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Marina REVERT LLOMPART FBME 976.12 38.2 % 30 %
Sara SAMANIEGO PAMIES FEEC 974.43 35.6 % 26.6 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Paula MENESES BALLESTEROS FDMCM 971.85 45.1 % 38.4 %
Antia FREITAS RIAL FEXME 971.50 37.5 % 29.5 %
Andrea HERREROS BELMAR FDMCLM 970.85 54 % 34.7 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Claudia LARA PINILLOS FADMES 969.65 40.9 % 32.9 %
Naroa MORALES ALMAZAN FNDME 968.75 35.3 % 27.2 %
Iune LA HIDALGA OTAMENDI EMF-FVM 967.19 40.7 % 28.9 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 963.65 36.5 % 28.5 %
Natalia VALE FERNÁNDEZ FEGAMON 963.31 34.1 % 25.4 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Malena ECHALAR CÁRDENAS FAM 961.79 34.4 % 26.4 %
Alejandra MUÑOZ RODRÍGUEZ FADMES 960.58 34.3 % 26.2 %
Elba VERGÉS SOLÉ FEEC 956.74 33.8 % 25.8 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Nayara PANTIGA GUTIERREZ FEMPA 952.02 33.2 % 25.3 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Silvia FAYOS LOZADA FEMECV 948.56 34.5 % 26.8 %
Irati ASO ESAIN FNDME 945.14 32.3 % 24.6 %
Irene Xiaozhao PEREZ PRADO FAM 944.05 50.2 % 31.3 %
Sara Libertad DÍAZ DE SARRALDE FMM 943.93 37.5 % 26.2 %
Nerea PÉREZ PEREA FMM 943.09 31.6 % 23.2 %
Haizea OSES SAIZ EMF-FVM 942.34 37.3 % 26.1 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Aitana PICÓ I LÓPEZ FEMECV 938.66 31 % 22.8 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Leire SÁNCHEZ GARCÍA FMRM 925.55 47.5 % 29 %
Paula HUERGO MIYAR FEMPA 924.62 47.4 % 28.9 %
Carlota BÖCK VÁZQUEZ FEGAMON 923.91 29.7 % 22.4 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 923.86 38.4 % 32.1 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 911.08 27.7 % 20.1 %
Lara PRIDA SEOANE FEGAMON 897.86 43.6 % 25.9 %
Alba MARTÍNEZ LLARÍA FMM 889.29 25.7 % 19.1 %
Jordana PEREZ GRANELL FEMECV 887.17 38.5 % 23.7 %
Oihane RUIZ DE ARGANDOÑA FNDME 884.00 29.8 % 20.1 %
Elena CARAMES GONZALEZ FEMPA 879.50 33.3 % 23.6 %
María FEO MIGUELA FNDME 873.16 23.6 % 16.8 %
Alba GÓMEZ CALATAYUD FEMECV 867.13 23 % 16.3 %
Maria SANTOS GONZÁLEZ FEXME 864.73 23.1 % 17 %
Paula LUCIO PANIAGUA FDMESCyL 850.88 21.7 % 15.9 %
Lucia LORES REY FEGAMON 850.72 21.7 % 15.9 %
Concepción María BALLESTEROS PÉREZ FADMES 804.94 18.7 % 13.8 %

2024 June-Abs

Elo June-Abs 2024

-Competitors = r-

competitor Team R results R.new Prob.Finals Prob.podium
Júlia BENACH ZUBERO FEEC 1224.96 1 1254.63 67.9 % 61.4 %
Paula TRAVERSO LEBRON FEXME 1017.59 2 1044.86 38.8 % 32.2 %
Rebeca PEREZ DUATO FAM 1150.88 3 1174.14 57.1 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1132.33 4 1152.31 54 % 46.9 %
Maria PAREDES RAMOS FEXME 1065.79 5 1082.72 44.1 % 37.1 %
Emily Charlotte PESCETTO BUDDEN FEEC 1126.04 6 1139.31 52.2 % 45 %
Laia TAULATS MCDONALD FAM-AND 1239.09 7 1248.49 67.2 % 60.5 %
Maria FARRÉ PRIM FEEC 1117.64 8 1124.22 50 % 42.9 %
Miriam DIEZ LUENGO FMM 1072.82 9 1076.25 43.1 % 36.3 %
India PERSSON FERNÁNDEZ FADMES 1140.06 10 1139.79 52.2 % 45.1 %
Michelle Paola MATHEUS GUILLEN FMM 1077.38 11 1074.05 42.8 % 36 %
Martina MUÑIZ VALENCIA FMM 1092.27 12 1085.50 44.5 % 37.5 %
Erika CARRASCO AGUILA FMM 1144.00 13 1133.61 51.4 % 44.2 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1199.35 14 1185.34 58.7 % 51.6 %
Idoia MARTÍNEZ IRISARRI EMF-FVM 979.36 15 963.01 28.3 % 22.9 %
Ana TORREGROSA MARTÍNEZ FEMECV 980.55 16 960.83 28.1 % 22.7 %
Isis SANZ PÉREZ FAM 1011.36 17 988.13 31.4 % 25.5 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1073.63 18 1046.74 39 % 32.4 %
María FEO MIGUELA FNDME 873.16 18 847.13 16.9 % 13.2 %
Elena POLLÁN GONZÁLEZ FBME 1000.00 20 966.78 28.8 % 23.3 %

#####_ Elo History _

Elo in time

Elo Accumulated June-Abs_2024

competitor Team R.new Prob.Finals Prob.podium
Júlia BENACH ZUBERO FEEC 1254.63 67.9 % 61.4 %
Laia TAULATS MCDONALD FAM-AND 1248.49 67.2 % 60.5 %
Geila MACIÀ MARTÍN FEEC 1239.91 71.8 % 62.5 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1213.25 68.6 % 58.9 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1185.34 58.7 % 51.6 %
Rebeca PEREZ DUATO FAM 1174.14 57.1 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1152.31 54 % 46.9 %
Aida TORRES ILLAMOLA FEEC 1150.00 62.7 % 53.9 %
India PERSSON FERNÁNDEZ FADMES 1139.79 52.2 % 45.1 %
Emily Charlotte PESCETTO BUDDEN FEEC 1139.31 52.2 % 45 %
Erika CARRASCO AGUILA FMM 1133.61 51.4 % 44.2 %
Maria FARRÉ PRIM FEEC 1124.22 50 % 42.9 %
Intza ELIZALDE LARRARTE EMF-FVM 1105.13 54.5 % 45 %
Andrea RODRIGUEZ SALAS FEXME 1104.85 64.6 % 53.1 %
Rut MONSECH GASCA FEEC 1101.78 53.5 % 43 %
Mar CARREÑO ESCOBAR FADMES 1097.03 67.7 % 51 %
Ainhize BELAR BARRUTIA EMF-FVM 1086.30 57.6 % 44.7 %
Martina MUÑIZ VALENCIA FMM 1085.50 44.5 % 37.5 %
Maria PAREDES RAMOS FEXME 1082.72 44.1 % 37.1 %
Miriam DIEZ LUENGO FMM 1076.25 43.1 % 36.3 %
Michelle Paola MATHEUS GUILLEN FMM 1074.05 42.8 % 36 %
Elur ARTEAGA ARZALLUS EMF-FVM 1073.65 50 % 40.6 %
Lucia MIRANDA CID FEEC 1072.49 51.8 % 42.8 %
Maite VILA LÓPEZ FEXME 1064.56 48.7 % 39.3 %
Vera BRIONGOS MARTÍN FEXME 1063.39 54.3 % 45.7 %
Kanae Maria FRAILE ITAGAKI FECAMON 1052.01 65.2 % 45.9 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1046.74 39 % 32.4 %
Paula TRAVERSO LEBRON FEXME 1044.86 38.8 % 32.2 %
Carmen SÁNCHEZ JIMENEZ FDMCLM 1043.92 45.7 % 36.5 %
Meia LEÓN VILCHES FEXME 1040.58 45.3 % 36.1 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Hirune JACOBS HAMMU FECAMON 1016.02 60.4 % 40.8 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Brisa CALDERON BRUÑUEL FEMECV 1008.41 51.2 % 39.4 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Sofía PEÑA PÉREZ FMM 998.50 49.7 % 38 %
Candela SEPÚLVEDA FERRÍS FEMECV 997.60 49.6 % 37.9 %
Irati ZABALA MUXIKA EMF-FVM 995.45 44.6 % 32.4 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Isis SANZ PÉREZ FAM 988.13 31.4 % 25.5 %
Rocío LEAL ABAD FMRM 987.33 47.4 % 40.5 %
Elna ROTGÉS CASELLAS FEEC 987.30 56.4 % 36.9 %
Libe CASTILLO EGUREN EMF-FVM 986.37 37.7 % 29.2 %
Natalia PÉREZ VALLE FMM 986.13 47.9 % 36.4 %
Amalia GARCÍA-COSIO ROMAGOSA FBME 983.12 37.3 % 28.8 %
Marta RIVERA GALLERA FMM 981.26 37 % 28.6 %
Ainhoa GARCÍA SANTOS FMM 981.05 37 % 28.6 %
Maia LEDESMA PRUNES FBME 981.05 37 % 28.6 %
Gaia POLINI MARTÍNEZ FEEC 980.34 55.4 % 35.9 %
Amaya DEL POZO CARRION FMM 978.59 38.5 % 30.3 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Marina REVERT LLOMPART FBME 976.12 38.2 % 30 %
Sara SAMANIEGO PAMIES FEEC 974.43 35.6 % 26.6 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Paula MENESES BALLESTEROS FDMCM 971.85 45.1 % 38.4 %
Antia FREITAS RIAL FEXME 971.50 37.5 % 29.5 %
Andrea HERREROS BELMAR FDMCLM 970.85 54 % 34.7 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Claudia LARA PINILLOS FADMES 969.65 40.9 % 32.9 %
Naroa MORALES ALMAZAN FNDME 968.75 35.3 % 27.2 %
Iune LA HIDALGA OTAMENDI EMF-FVM 967.19 40.7 % 28.9 %
Elena POLLÁN GONZÁLEZ FBME 966.78 28.8 % 23.3 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 963.65 36.5 % 28.5 %
Natalia VALE FERNÁNDEZ FEGAMON 963.31 34.1 % 25.4 %
Idoia MARTÍNEZ IRISARRI EMF-FVM 963.01 28.3 % 22.9 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Malena ECHALAR CÁRDENAS FAM 961.79 34.4 % 26.4 %
Ana TORREGROSA MARTÍNEZ FEMECV 960.83 28.1 % 22.7 %
Alejandra MUÑOZ RODRÍGUEZ FADMES 960.58 34.3 % 26.2 %
Elba VERGÉS SOLÉ FEEC 956.74 33.8 % 25.8 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Nayara PANTIGA GUTIERREZ FEMPA 952.02 33.2 % 25.3 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Silvia FAYOS LOZADA FEMECV 948.56 34.5 % 26.8 %
Irati ASO ESAIN FNDME 945.14 32.3 % 24.6 %
Irene Xiaozhao PEREZ PRADO FAM 944.05 50.2 % 31.3 %
Sara Libertad DÍAZ DE SARRALDE FMM 943.93 37.5 % 26.2 %
Nerea PÉREZ PEREA FMM 943.09 31.6 % 23.2 %
Haizea OSES SAIZ EMF-FVM 942.34 37.3 % 26.1 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Aitana PICÓ I LÓPEZ FEMECV 938.66 31 % 22.8 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Leire SÁNCHEZ GARCÍA FMRM 925.55 47.5 % 29 %
Paula HUERGO MIYAR FEMPA 924.62 47.4 % 28.9 %
Carlota BÖCK VÁZQUEZ FEGAMON 923.91 29.7 % 22.4 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 923.86 38.4 % 32.1 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 911.08 27.7 % 20.1 %
Lara PRIDA SEOANE FEGAMON 897.86 43.6 % 25.9 %
Alba MARTÍNEZ LLARÍA FMM 889.29 25.7 % 19.1 %
Jordana PEREZ GRANELL FEMECV 887.17 38.5 % 23.7 %
Oihane RUIZ DE ARGANDOÑA FNDME 884.00 29.8 % 20.1 %
Elena CARAMES GONZALEZ FEMPA 879.50 33.3 % 23.6 %
Alba GÓMEZ CALATAYUD FEMECV 867.13 23 % 16.3 %
Maria SANTOS GONZÁLEZ FEXME 864.73 23.1 % 17 %
Paula LUCIO PANIAGUA FDMESCyL 850.88 21.7 % 15.9 %
Lucia LORES REY FEGAMON 850.72 21.7 % 15.9 %
María FEO MIGUELA FNDME 847.13 16.9 % 13.2 %
Concepción María BALLESTEROS PÉREZ FADMES 804.94 18.7 % 13.8 %

2024 Nov

Elo Nov 2024

-Competitors = r-

competitor Team R results R.new Prob.Finals Prob.podium
Maria FARRÉ PRIM FEEC 1124.22 1 1154.57 62.2 % 50 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1185.34 2 1213.05 69.7 % 58.3 %
Erika CARRASCO AGUILA FMM 1133.61 3 1159.00 62.8 % 50.6 %
Laia TAULATS MCDONALD FAM-AND 1248.49 4 1271.12 76.3 % 66.2 %
Martina MUÑIZ VALENCIA FMM 1085.50 5 1106.13 55.5 % 43.1 %
Elur ARTEAGA ARZALLUS EMF-FVM 1073.65 6 1091.85 53.4 % 41.1 %
Intza ELIZALDE LARRARTE EMF-FVM 1105.13 7 1120.77 57.5 % 45.2 %
India PERSSON FERNÁNDEZ FADMES 1139.79 8 1152.86 62 % 49.8 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1046.74 9 1057.65 48.5 % 36.4 %
Hirune JACOBS HAMMU FECAMON 1016.02 10 1024.58 43.8 % 32.1 %
Libe CASTILLO EGUREN EMF-FVM 986.37 11 992.57 39.3 % 28.2 %
Maite VILA LÓPEZ FEXME 1064.56 12 1068.03 50 % 37.8 %
Meia LEÓN VILCHES FEXME 1040.58 13 1041.67 46.2 % 34.3 %
Elba VERGÉS SOLÉ FEEC 956.74 14 955.66 34.4 % 24.1 %
Nayara PANTIGA GUTIERREZ FEMPA 952.02 15 948.50 33.4 % 23.4 %
Carmen SÁNCHEZ JIMENEZ FDMCLM 1043.92 16 1037.61 45.6 % 33.8 %
Irati ASO ESAIN FNDME 945.14 17 936.72 32 % 22.2 %
Maria SANTOS GONZÁLEZ FEXME 864.73 18 854.11 22.6 % 15.1 %
Marta RIVERA GALLERA FMM 981.26 19 967.79 36 % 25.4 %
Amalia GARCÍA-COSIO ROMAGOSA FBME 983.12 20 967.18 35.9 % 25.4 %
Alejandra MUÑOZ RODRÍGUEZ FADMES 960.58 21 942.26 32.7 % 22.8 %
Naroa MORALES ALMAZAN FNDME 968.75 22 947.94 33.4 % 23.3 %
Rosa COLL ESCALAS FBME 1000.00 22 979.12 37.5 % 26.7 %
Gaia POLINI MARTÍNEZ FEEC 980.34 24 954.56 34.2 % 24 %
Elna ROTGÉS CASELLAS FEEC 987.30 25 959.04 34.8 % 24.5 %
Maia LEDESMA PRUNES FBME 981.05 25 952.81 34 % 23.8 %
Malena ECHALAR CÁRDENAS FAM 961.79 25 933.62 31.6 % 21.9 %

#####_ Elo History _

Elo in time

Elo Accumulated Nov_2024

competitor Team R.new Prob.Finals Prob.podium
Laia TAULATS MCDONALD FAM-AND 1271.12 76.3 % 66.2 %
Júlia BENACH ZUBERO FEEC 1254.63 67.9 % 61.4 %
Geila MACIÀ MARTÍN FEEC 1239.91 71.8 % 62.5 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1213.25 68.6 % 58.9 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1213.05 69.7 % 58.3 %
Rebeca PEREZ DUATO FAM 1174.14 57.1 % 50 %
Erika CARRASCO AGUILA FMM 1159.00 62.8 % 50.6 %
Maria FARRÉ PRIM FEEC 1154.57 62.2 % 50 %
India PERSSON FERNÁNDEZ FADMES 1152.86 62 % 49.8 %
Lucía SEMPERE GONZÁLEZ FEMECV 1152.31 54 % 46.9 %
Aida TORRES ILLAMOLA FEEC 1150.00 62.7 % 53.9 %
Emily Charlotte PESCETTO BUDDEN FEEC 1139.31 52.2 % 45 %
Intza ELIZALDE LARRARTE EMF-FVM 1120.77 57.5 % 45.2 %
Martina MUÑIZ VALENCIA FMM 1106.13 55.5 % 43.1 %
Andrea RODRIGUEZ SALAS FEXME 1104.85 64.6 % 53.1 %
Rut MONSECH GASCA FEEC 1101.78 53.5 % 43 %
Mar CARREÑO ESCOBAR FADMES 1097.03 67.7 % 51 %
Elur ARTEAGA ARZALLUS EMF-FVM 1091.85 53.4 % 41.1 %
Ainhize BELAR BARRUTIA EMF-FVM 1086.30 57.6 % 44.7 %
Maria PAREDES RAMOS FEXME 1082.72 44.1 % 37.1 %
Miriam DIEZ LUENGO FMM 1076.25 43.1 % 36.3 %
Michelle Paola MATHEUS GUILLEN FMM 1074.05 42.8 % 36 %
Lucia MIRANDA CID FEEC 1072.49 51.8 % 42.8 %
Maite VILA LÓPEZ FEXME 1068.03 50 % 37.8 %
Vera BRIONGOS MARTÍN FEXME 1063.39 54.3 % 45.7 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1057.65 48.5 % 36.4 %
Kanae Maria FRAILE ITAGAKI FECAMON 1052.01 65.2 % 45.9 %
Paula TRAVERSO LEBRON FEXME 1044.86 38.8 % 32.2 %
Meia LEÓN VILCHES FEXME 1041.67 46.2 % 34.3 %
Carmen SÁNCHEZ JIMENEZ FDMCLM 1037.61 45.6 % 33.8 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Hirune JACOBS HAMMU FECAMON 1024.58 43.8 % 32.1 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Brisa CALDERON BRUÑUEL FEMECV 1008.41 51.2 % 39.4 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Sofía PEÑA PÉREZ FMM 998.50 49.7 % 38 %
Candela SEPÚLVEDA FERRÍS FEMECV 997.60 49.6 % 37.9 %
Irati ZABALA MUXIKA EMF-FVM 995.45 44.6 % 32.4 %
Libe CASTILLO EGUREN EMF-FVM 992.57 39.3 % 28.2 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Isis SANZ PÉREZ FAM 988.13 31.4 % 25.5 %
Rocío LEAL ABAD FMRM 987.33 47.4 % 40.5 %
Natalia PÉREZ VALLE FMM 986.13 47.9 % 36.4 %
Ainhoa GARCÍA SANTOS FMM 981.05 37 % 28.6 %
Rosa COLL ESCALAS FBME 979.12 37.5 % 26.7 %
Amaya DEL POZO CARRION FMM 978.59 38.5 % 30.3 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Marina REVERT LLOMPART FBME 976.12 38.2 % 30 %
Sara SAMANIEGO PAMIES FEEC 974.43 35.6 % 26.6 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Paula MENESES BALLESTEROS FDMCM 971.85 45.1 % 38.4 %
Antia FREITAS RIAL FEXME 971.50 37.5 % 29.5 %
Andrea HERREROS BELMAR FDMCLM 970.85 54 % 34.7 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Claudia LARA PINILLOS FADMES 969.65 40.9 % 32.9 %
Marta RIVERA GALLERA FMM 967.79 36 % 25.4 %
Iune LA HIDALGA OTAMENDI EMF-FVM 967.19 40.7 % 28.9 %
Amalia GARCÍA-COSIO ROMAGOSA FBME 967.18 35.9 % 25.4 %
Elena POLLÁN GONZÁLEZ FBME 966.78 28.8 % 23.3 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 45.5 % 40.5 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 963.65 36.5 % 28.5 %
Natalia VALE FERNÁNDEZ FEGAMON 963.31 34.1 % 25.4 %
Idoia MARTÍNEZ IRISARRI EMF-FVM 963.01 28.3 % 22.9 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Ana TORREGROSA MARTÍNEZ FEMECV 960.83 28.1 % 22.7 %
Elna ROTGÉS CASELLAS FEEC 959.04 34.8 % 24.5 %
Elba VERGÉS SOLÉ FEEC 955.66 34.4 % 24.1 %
Gaia POLINI MARTÍNEZ FEEC 954.56 34.2 % 24 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Maia LEDESMA PRUNES FBME 952.81 34 % 23.8 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Silvia FAYOS LOZADA FEMECV 948.56 34.5 % 26.8 %
Nayara PANTIGA GUTIERREZ FEMPA 948.50 33.4 % 23.4 %
Naroa MORALES ALMAZAN FNDME 947.94 33.4 % 23.3 %
Irene Xiaozhao PEREZ PRADO FAM 944.05 50.2 % 31.3 %
Sara Libertad DÍAZ DE SARRALDE FMM 943.93 37.5 % 26.2 %
Nerea PÉREZ PEREA FMM 943.09 31.6 % 23.2 %
Haizea OSES SAIZ EMF-FVM 942.34 37.3 % 26.1 %
Alejandra MUÑOZ RODRÍGUEZ FADMES 942.26 32.7 % 22.8 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Aitana PICÓ I LÓPEZ FEMECV 938.66 31 % 22.8 %
Irati ASO ESAIN FNDME 936.72 32 % 22.2 %
Malena ECHALAR CÁRDENAS FAM 933.62 31.6 % 21.9 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Leire SÁNCHEZ GARCÍA FMRM 925.55 47.5 % 29 %
Paula HUERGO MIYAR FEMPA 924.62 47.4 % 28.9 %
Carlota BÖCK VÁZQUEZ FEGAMON 923.91 29.7 % 22.4 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 923.86 38.4 % 32.1 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 911.08 27.7 % 20.1 %
Lara PRIDA SEOANE FEGAMON 897.86 43.6 % 25.9 %
Alba MARTÍNEZ LLARÍA FMM 889.29 25.7 % 19.1 %
Jordana PEREZ GRANELL FEMECV 887.17 38.5 % 23.7 %
Oihane RUIZ DE ARGANDOÑA FNDME 884.00 29.8 % 20.1 %
Elena CARAMES GONZALEZ FEMPA 879.50 33.3 % 23.6 %
Alba GÓMEZ CALATAYUD FEMECV 867.13 23 % 16.3 %
Maria SANTOS GONZÁLEZ FEXME 854.11 22.6 % 15.1 %
Paula LUCIO PANIAGUA FDMESCyL 850.88 21.7 % 15.9 %
Lucia LORES REY FEGAMON 850.72 21.7 % 15.9 %
María FEO MIGUELA FNDME 847.13 16.9 % 13.2 %
Concepción María BALLESTEROS PÉREZ FADMES 804.94 18.7 % 13.8 %

2024 Nov-Abs

Elo Nov-Abs 2024

-Competitors = r-

competitor Team R results R.new Prob.Finals Prob.podium
Júlia BENACH ZUBERO FEEC 1254.63 1 1284.79 68.2 % 62 %
Maria PAREDES RAMOS FEXME 1082.72 2 1110.87 44.1 % 37.5 %
Rebeca PEREZ DUATO FAM 1174.14 3 1199.42 56.8 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1152.31 4 1175.10 53.3 % 46.5 %
Paula TRAVERSO LEBRON FEXME 1044.86 5 1065.46 37.8 % 31.6 %
Maria FARRÉ PRIM FEEC 1154.57 6 1172.23 52.9 % 46.1 %
Michelle Paola MATHEUS GUILLEN FMM 1074.05 7 1089.43 41.1 % 34.7 %
Emily Charlotte PESCETTO BUDDEN FEEC 1139.31 8 1151.90 50 % 43.2 %
India PERSSON FERNÁNDEZ FADMES 1152.86 9 1162.85 51.6 % 44.8 %
Silvia FAYOS LOZADA FEMECV 948.56 10 956.69 24.5 % 19.8 %
Martina MUÑIZ VALENCIA FMM 1106.13 11 1111.16 44.2 % 37.6 %
Laia TAULATS MCDONALD FAM-AND 1271.12 12 1273.08 66.8 % 60.4 %
Meia LEÓN VILCHES FEXME 1041.67 13 1041.80 34.7 % 28.8 %
Mar CARREÑO ESCOBAR FADMES 1097.03 14 1094.41 41.8 % 35.3 %
Erika CARRASCO AGUILA FMM 1159.00 15 1153.61 50.2 % 43.4 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1213.05 16 1204.93 57.6 % 50.8 %
Idoia MARTÍNEZ IRISARRI EMF-FVM 963.01 17 953.17 24.2 % 19.5 %
Ana TORREGROSA MARTÍNEZ FEMECV 960.83 18 948.44 23.7 % 19.1 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1057.65 19 1042.37 34.7 % 28.8 %
Concepción María BALLESTEROS PÉREZ FADMES 804.94 19 790.41 11.1 % 8.7 %
Isis SANZ PÉREZ FAM 988.13 21 967.97 25.8 % 20.9 %
Jordana PEREZ GRANELL FEMECV 887.17 22 864.76 16.1 % 12.7 %
Alejandra MUÑOZ RODRÍGUEZ FADMES 942.26 23 917.13 20.6 % 16.5 %
María FEO MIGUELA FNDME 847.13 24 819.71 12.9 % 10.1 %
Alba GÓMEZ CALATAYUD FEMECV 867.13 25 837.10 14 % 11 %
Marina HIDALGO VALDERRÁBANO FADMES 965.52 25 935.20 22.3 % 17.9 %

#####_ Elo History _

Elo in time

Elo Accumulated June-Abs_2024

competitor Team R.new Prob.Finals Prob.podium
Júlia BENACH ZUBERO FEEC 1284.79 68.2 % 62 %
Laia TAULATS MCDONALD FAM-AND 1273.08 66.8 % 60.4 %
Geila MACIÀ MARTÍN FEEC 1239.91 71.8 % 62.5 %
Iziar MARTÍNEZ ALMENDROS FDMESCyL 1213.25 68.6 % 58.9 %
Maddi AGIRRE ZUBELDIA EMF-FVM 1204.93 57.6 % 50.8 %
Rebeca PEREZ DUATO FAM 1199.42 56.8 % 50 %
Lucía SEMPERE GONZÁLEZ FEMECV 1175.10 53.3 % 46.5 %
Maria FARRÉ PRIM FEEC 1172.23 52.9 % 46.1 %
India PERSSON FERNÁNDEZ FADMES 1162.85 51.6 % 44.8 %
Erika CARRASCO AGUILA FMM 1153.61 50.2 % 43.4 %
Emily Charlotte PESCETTO BUDDEN FEEC 1151.90 50 % 43.2 %
Aida TORRES ILLAMOLA FEEC 1150.00 62.7 % 53.9 %
Intza ELIZALDE LARRARTE EMF-FVM 1120.77 57.5 % 45.2 %
Martina MUÑIZ VALENCIA FMM 1111.16 44.2 % 37.6 %
Maria PAREDES RAMOS FEXME 1110.87 44.1 % 37.5 %
Andrea RODRIGUEZ SALAS FEXME 1104.85 64.6 % 53.1 %
Rut MONSECH GASCA FEEC 1101.78 53.5 % 43 %
Mar CARREÑO ESCOBAR FADMES 1094.41 41.8 % 35.3 %
Elur ARTEAGA ARZALLUS EMF-FVM 1091.85 53.4 % 41.1 %
Michelle Paola MATHEUS GUILLEN FMM 1089.43 41.1 % 34.7 %
Ainhize BELAR BARRUTIA EMF-FVM 1086.30 57.6 % 44.7 %
Miriam DIEZ LUENGO FMM 1076.25 43.1 % 36.3 %
Lucia MIRANDA CID FEEC 1072.49 51.8 % 42.8 %
Maite VILA LÓPEZ FEXME 1068.03 50 % 37.8 %
Paula TRAVERSO LEBRON FEXME 1065.46 37.8 % 31.6 %
Vera BRIONGOS MARTÍN FEXME 1063.39 54.3 % 45.7 %
Kanae Maria FRAILE ITAGAKI FECAMON 1052.01 65.2 % 45.9 %
Ainhoa USKOLA SAENZ DE OGER EMF-FVM 1042.37 34.7 % 28.8 %
Meia LEÓN VILCHES FEXME 1041.80 34.7 % 28.8 %
Carmen SÁNCHEZ JIMENEZ FDMCLM 1037.61 45.6 % 33.8 %
Irati GUENETXEA BENGOA EMF-FVM 1034.93 48.1 % 43.6 %
Maria BENACH ZUBERO FEEC 1024.85 54.7 % 50 %
Hirune JACOBS HAMMU FECAMON 1024.58 43.8 % 32.1 %
Nora STAURSET HOVDE FEMECV 1012.93 52.5 % 49.4 %
Brisa CALDERON BRUÑUEL FEMECV 1008.41 51.2 % 39.4 %
Aitana NAVARIDAS MARTIN FNDME 1000.89 50.1 % 42.3 %
Sofía PEÑA PÉREZ FMM 998.50 49.7 % 38 %
Candela SEPÚLVEDA FERRÍS FEMECV 997.60 49.6 % 37.9 %
Irati ZABALA MUXIKA EMF-FVM 995.45 44.6 % 32.4 %
Libe CASTILLO EGUREN EMF-FVM 992.57 39.3 % 28.2 %
Aitziber URRUTIA BARRUETA EMF-FVM 991.93 50 % 45.3 %
Candela GARCIA VALLINA FEMPA 990.79 49.1 % 44 %
Julia PACHECO PORRAS FDMCM 990.17 60.8 % 50 %
Rocío LEAL ABAD FMRM 987.33 47.4 % 40.5 %
Natalia PÉREZ VALLE FMM 986.13 47.9 % 36.4 %
Ainhoa GARCÍA SANTOS FMM 981.05 37 % 28.6 %
Rosa COLL ESCALAS FBME 979.12 37.5 % 26.7 %
Amaya DEL POZO CARRION FMM 978.59 38.5 % 30.3 %
Cristina JARDON SUAREZ FEMPA 976.51 47.8 % 43.1 %
Sara FERNANDEZ ALVES FMM 976.51 46.1 % 43.7 %
Marina REVERT LLOMPART FBME 976.12 38.2 % 30 %
Sara SAMANIEGO PAMIES FEEC 974.43 35.6 % 26.6 %
Mariana SOUSA FCMP 973.43 46.1 % 38.5 %
Paula MENESES BALLESTEROS FDMCM 971.85 45.1 % 38.4 %
Antia FREITAS RIAL FEXME 971.50 37.5 % 29.5 %
Andrea HERREROS BELMAR FDMCLM 970.85 54 % 34.7 %
Ana MARTINEZ BELDA FMRM 969.87 45.6 % 38 %
Claudia LARA PINILLOS FADMES 969.65 40.9 % 32.9 %
Isis SANZ PÉREZ FAM 967.97 25.8 % 20.9 %
Marta RIVERA GALLERA FMM 967.79 36 % 25.4 %
Iune LA HIDALGA OTAMENDI EMF-FVM 967.19 40.7 % 28.9 %
Amalia GARCÍA-COSIO ROMAGOSA FBME 967.18 35.9 % 25.4 %
Elena POLLÁN GONZÁLEZ FBME 966.78 28.8 % 23.3 %
Aloia BELTRAN RODRIGUEZ FEGAMON 966.40 44.7 % 42.3 %
Valery Alejandra GONZALEZ ALFONSO FECAMON 963.65 36.5 % 28.5 %
Natalia VALE FERNÁNDEZ FEGAMON 963.31 34.1 % 25.4 %
Marina PABLO LASSA FAM 961.99 44.5 % 36.9 %
Elna ROTGÉS CASELLAS FEEC 959.04 34.8 % 24.5 %
Silvia FAYOS LOZADA FEMECV 956.69 24.5 % 19.8 %
Elba VERGÉS SOLÉ FEEC 955.66 34.4 % 24.1 %
Gaia POLINI MARTÍNEZ FEEC 954.56 34.2 % 24 %
Idoia MARTÍNEZ IRISARRI EMF-FVM 953.17 24.2 % 19.5 %
Garazi GURRUTXAGA AGIRRE EMF-FVM 953.10 43.5 % 35.7 %
Maia LEDESMA PRUNES FBME 952.81 34 % 23.8 %
Edurne GONZÁLEZ-LONGORIA MERINO FCDME 950.48 36.3 % 32.2 %
Nayara PANTIGA GUTIERREZ FEMPA 948.50 33.4 % 23.4 %
Ana TORREGROSA MARTÍNEZ FEMECV 948.44 23.7 % 19.1 %
Naroa MORALES ALMAZAN FNDME 947.94 33.4 % 23.3 %
Irene Xiaozhao PEREZ PRADO FAM 944.05 50.2 % 31.3 %
Sara Libertad DÍAZ DE SARRALDE FMM 943.93 37.5 % 26.2 %
Nerea PÉREZ PEREA FMM 943.09 31.6 % 23.2 %
Haizea OSES SAIZ EMF-FVM 942.34 37.3 % 26.1 %
Samara FERRAGUT MARTINEZ FBME 940.24 41.9 % 37 %
Lidia ALVAREZ RODRIGUEZ FEMPA 939.18 53.6 % 42.7 %
Aitana PICÓ I LÓPEZ FEMECV 938.66 31 % 22.8 %
Irati ASO ESAIN FNDME 936.72 32 % 22.2 %
Marina HIDALGO VALDERRÁBANO FADMES 935.20 22.3 % 17.9 %
Malena ECHALAR CÁRDENAS FAM 933.62 31.6 % 21.9 %
Laura VERDASCO URIZAL FMM 926.40 39.8 % 32.3 %
Leire SÁNCHEZ GARCÍA FMRM 925.55 47.5 % 29 %
Paula HUERGO MIYAR FEMPA 924.62 47.4 % 28.9 %
Carlota BÖCK VÁZQUEZ FEGAMON 923.91 29.7 % 22.4 %
Aroa MARTÍNEZ SÁNCHEZ FDMCM 923.86 38.4 % 32.1 %
Alejandra MUÑOZ RODRÍGUEZ FADMES 917.13 20.6 % 16.5 %
Mara RODRIGUEZ MÉNDEZ FEGAMON 911.08 27.7 % 20.1 %
Lara PRIDA SEOANE FEGAMON 897.86 43.6 % 25.9 %
Alba MARTÍNEZ LLARÍA FMM 889.29 25.7 % 19.1 %
Oihane RUIZ DE ARGANDOÑA FNDME 884.00 29.8 % 20.1 %
Elena CARAMES GONZALEZ FEMPA 879.50 33.3 % 23.6 %
Jordana PEREZ GRANELL FEMECV 864.76 16.1 % 12.7 %
Maria SANTOS GONZÁLEZ FEXME 854.11 22.6 % 15.1 %
Paula LUCIO PANIAGUA FDMESCyL 850.88 21.7 % 15.9 %
Lucia LORES REY FEGAMON 850.72 21.7 % 15.9 %
Alba GÓMEZ CALATAYUD FEMECV 837.10 14 % 11 %
María FEO MIGUELA FNDME 819.71 12.9 % 10.1 %
Concepción María BALLESTEROS PÉREZ FADMES 790.41 11.1 % 8.7 %

#### #####

## Up-coming SEASON

LS0tDQp0aXRsZTogIkVsb19TcG9ydC5DbGltYmluZ19FU1BfU3ViMThGIg0KYXV0aG9yOiAiRmVkZXJpY28gSi4gVmlsbGF0b3JvIg0KZGF0ZTogImByIFN5cy5EYXRlKClgIg0Kb3V0cHV0Og0KICBodG1sX25vdGVib29rOg0KICAgIHRvYzogdHJ1ZQ0KICAgIHRvY19kZXB0aDogNA0KICAgIHRvY19mbG9hdDogdHJ1ZQ0KLS0tDQoNCiMjIyMjIEZ1ZW50ZTogW2h0dHBzOi8vZmVkbWUucmVzdWx0cy5pbmZvXShodHRwczovL2ZlZG1lLnJlc3VsdHMuaW5mby8pDQoNCmBgYHtyIHNldHVwLCBpbmNsdWRlPVRSVUV9DQpsaWJyYXJ5KGtuaXRyKQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KA0KICBlY2hvID0gRkFMU0UsDQoJbWVzc2FnZSA9IEZBTFNFLA0KICB3YXJuaW5nID0gRkFMU0UsDQoJaW5jbHVkZSA9IFRSVUUNCikNCmBgYA0KDQpgYGB7ciBwYWNrYWdlcywgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0NCmlmKCFyZXF1aXJlKHRpZHl2ZXJzZSkpe2luc3RhbGwucGFja2FnZXMoInRpZHl2ZXJzZSIscmVwb3MgPSAiaHR0cDovL2NyYW4udXMuci1wcm9qZWN0Lm9yZyIpfQ0KaWYoIXJlcXVpcmUoZ29vZ2xlc2hlZXRzNCkpe2luc3RhbGwucGFja2FnZXMoImdvb2dsZXNoZWV0czQiKX0NCmlmKCFyZXF1aXJlKGdvb2dsZWRyaXZlKSl7aW5zdGFsbC5wYWNrYWdlcygiZ29vZ2xlZHJpdmUiKX0NCmlmKCFyZXF1aXJlKGRwbHlyKSl7aW5zdGFsbC5wYWNrYWdlcygiZHBseXIiKX0NCmlmKCFyZXF1aXJlKGh0dHIyKSl7aW5zdGFsbC5wYWNrYWdlcygiaHR0cjIiKX0NCmlmKCFyZXF1aXJlKGpzb25saXRlKSl7aW5zdGFsbC5wYWNrYWdlcygianNvbmxpdGUiKX0NCmlmKCFyZXF1aXJlKFJzZWxlbml1bSkpe2luc3RhbGwucGFja2FnZXMoIlJzZWxlbml1bSIpfQ0KaWYoIXJlcXVpcmUoY2hyb21vdGUpKXtpbnN0YWxsLnBhY2thZ2VzKCJjaHJvbW90ZSIpfQ0KaWYoIXJlcXVpcmUocHVycnIpKXtpbnN0YWxsLnBhY2thZ2VzKCJwdXJyciIpfQ0KaWYoIXJlcXVpcmUod2RtYW4pKXtpbnN0YWxsLnBhY2thZ2VzKCJ3ZG1hbiIpfQ0KaWYoIXJlcXVpcmUoRFQpKXtpbnN0YWxsLnBhY2thZ2VzKCJEVCIpfQ0KaWYoIXJlcXVpcmUocGxvdGx5KSl7aW5zdGFsbC5wYWNrYWdlcygicGxvdGx5Iil9DQojIw0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KERUKQ0KbGlicmFyeShjaHJvbW90ZSkNCmxpYnJhcnkocHVycnIpDQpsaWJyYXJ5KHdkbWFuKQ0KDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkocnZlc3QpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShqc29ubGl0ZSkNCmxpYnJhcnkoUlNlbGVuaXVtKQ0KDQpsaWJyYXJ5KGdvb2dsZXNoZWV0czQpDQpsaWJyYXJ5KGdvb2dsZWRyaXZlKQ0KDQpgYGANCg0KIyMjIyMgUmVhZGluZyBEYXRhDQoNCmBgYHtyIGV2YWw9VFJVRSwgaW5jbHVkZT1UUlVFfQ0KDQpvcHRpb25zKGdhcmdsZV9vYXV0aF9lbWFpbCA9ICJ2aWxsYXRvcm9wYXpmakBkYXRhYW5hbHlzaXNsYWIuY29tIikNCg0Kc3MgPC0gImh0dHBzOi8vZG9jcy5nb29nbGUuY29tL3NwcmVhZHNoZWV0cy9kLzFrWFlVSDlfUVdOQmJkSWhWa2dydGhYQWcyU1VDNXA2LXJCNjUxSGx5RzZrL2VkaXQ/dXNwPXNoYXJpbmciDQpob2phID0gMg0KcmFuZ28gPSAiQTE6TTU0MzUiDQpyYW5rcyA8LSByZWFkX3NoZWV0KHNzLA0KICAgICAgICAgICAgICAgIHNoZWV0PWhvamEsDQogICAgICAgICAgICAgICAgcmFuZ2U9IHJhbmdvLCANCiAgICAgICAgICAgICAgICAgICBjb2xfbmFtZXMgPSBUUlVFKQ0KDQpyYW5rcyA8LSAgcmFua3MgJT4lDQogIG11dGF0ZV9pZihpcy5jaGFyYWN0ZXIsIGFzLmZhY3RvcikNCg0KYGBgDQoNCiMjIEJMT0MgMjAyMi0yMDI0DQoNCmBgYHtyIGluY2x1ZGU9RkFMU0UsIHJvd3MucHJpbnQ9IDh9DQpibG9jLlN1YjE4RiA8LSByYW5rcyAlPiUNCiAgZmlsdGVyKHN0YWdlPT0iQ2xhc2lmaWMiLA0KICAgICAgICAgQ2F0ZWdvcnk9PSJTdWIxOF9GInxDYXRlZ29yeT09IkFic19GInxDYXRlZ29yeT09IlN1YjIwX0YiLA0KICAgICAgICAgeWVhcj09IjIwMjIifHllYXI9PSIyMDIzInx5ZWFyPT0iMjAyNCINCiAgICAjICAgICBOYW1lPT0gbm9tYnJlDQogICAgICAgICApICU+JQ0KICBncm91cF9ieShjb21wZXRpdG9yPSBOYW1lLA0KICAgICAgICAgICBZZWFyPSB5ZWFyLA0KICAgICAgICAgICBDb21wZT0gQ29tcGVfLA0KICAgICAgICAgICBUZWFtID0gVGVhbSwNCiAgICAgICAgICAgRGF0ZT0gRGF0ZSkgJT4lDQogIHJlZnJhbWUocmFuaz0gUmFuaykgJT4lDQogIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvciArIFRlYW0gfiBEYXRlLCANCiAgICAgICAgICAgICAgICAgIG5hLnJtID0gVFJVRSkNCg0KYmxvYy5TdWIxOEYgPC0gYXNfdGliYmxlKGJsb2MuU3ViMThGKQ0KIyMNCmJsb2MuU3ViMThGW29yZGVyKGJsb2MuU3ViMThGJGAyMDIyLTA2LTA0YCksYygxLDIsMyw0LDUpXSANCg0KY29tcGV0aXRvcnMuYS4xIDwtIG5yb3coYmxvYy5TdWIxOEZbIWlzLm5hKGJsb2MuU3ViMThGJGAyMDIyLTA2LTA0YCksXSkNCmNvbXBldGl0b3JzLmEuMiA8LSBucm93KGJsb2MuU3ViMThGWyFpcy5uYShibG9jLlN1YjE4RiRgMjAyMi0wNi0wNWApLF0pDQpjb21wZXRpdG9ycy5iLjEgPC0gbnJvdyhibG9jLlN1YjE4RlshaXMubmEoYmxvYy5TdWIxOEYkYDIwMjItMDYtMThgKSxdKQ0KY29tcGV0aXRvcnMuYi4yIDwtIG5yb3coYmxvYy5TdWIxOEZbIWlzLm5hKGJsb2MuU3ViMThGJGAyMDIyLTA2LTE5YCksXSkNCmNvbXBldGl0b3JzLmMuMSA8LSBucm93KGJsb2MuU3ViMThGWyFpcy5uYShibG9jLlN1YjE4RiRgMjAyMi0xMS0wNWApLF0pDQpjb21wZXRpdG9ycy5jLjIgPC0gbnJvdyhibG9jLlN1YjE4RlshaXMubmEoYmxvYy5TdWIxOEYkYDIwMjItMTEtMDZgKSxdKQ0KY29tcGV0aXRvcnMuZC4xIDwtIG5yb3coYmxvYy5TdWIxOEZbIWlzLm5hKGJsb2MuU3ViMThGJGAyMDIzLTAzLTI1YCksXSkNCmNvbXBldGl0b3JzLmQuMiA8LSBucm93KGJsb2MuU3ViMThGWyFpcy5uYShibG9jLlN1YjE4RiRgMjAyMy0wMy0yNmApLF0pDQpjb21wZXRpdG9ycy5lLjEgPC0gbnJvdyhibG9jLlN1YjE4RlshaXMubmEoYmxvYy5TdWIxOEYkYDIwMjMtMDUtMjBgKSxdKQ0KY29tcGV0aXRvcnMuZS4yIDwtIG5yb3coYmxvYy5TdWIxOEZbIWlzLm5hKGJsb2MuU3ViMThGJGAyMDIzLTA1LTIxYCksXSkNCmNvbXBldGl0b3JzLmYuMSA8LSBucm93KGJsb2MuU3ViMThGWyFpcy5uYShibG9jLlN1YjE4RiRgMjAyMy0wNi0wMmApLF0pDQpjb21wZXRpdG9ycy5mLjIgPC0gbnJvdyhibG9jLlN1YjE4RlshaXMubmEoYmxvYy5TdWIxOEYkYDIwMjMtMDYtMDNgKSxdKQ0KY29tcGV0aXRvcnMuZy4xIDwtIG5yb3coYmxvYy5TdWIxOEZbIWlzLm5hKGJsb2MuU3ViMThGJGAyMDIzLTExLTEwYCksXSkNCmNvbXBldGl0b3JzLmcuMiA8LSBucm93KGJsb2MuU3ViMThGWyFpcy5uYShibG9jLlN1YjE4RiRgMjAyMy0xMS0xMWApLF0pDQpjb21wZXRpdG9ycy5nLjMgPC0gbnJvdyhibG9jLlN1YjE4RlshaXMubmEoYmxvYy5TdWIxOEYkYDIwMjMtMTEtMTJgKSxdKQ0KY29tcGV0aXRvcnMuaC4xIDwtIG5yb3coYmxvYy5TdWIxOEZbIWlzLm5hKGJsb2MuU3ViMThGJGAyMDI0LTA0LTEzYCksXSkNCmNvbXBldGl0b3JzLmguMiA8LSBucm93KGJsb2MuU3ViMThGWyFpcy5uYShibG9jLlN1YjE4RiRgMjAyNC0wNC0xNGApLF0pDQpjb21wZXRpdG9ycy5pLjEgPC0gbnJvdyhibG9jLlN1YjE4RlshaXMubmEoYmxvYy5TdWIxOEYkYDIwMjQtMDYtMjlgKSxdKQ0KY29tcGV0aXRvcnMuaS4yIDwtIG5yb3coYmxvYy5TdWIxOEZbIWlzLm5hKGJsb2MuU3ViMThGJGAyMDI0LTA2LTMwYCksXSkNCmNvbXBldGl0b3JzLmouMSA8LSBucm93KGJsb2MuU3ViMThGWyFpcy5uYShibG9jLlN1YjE4RiRgMjAyNC0xMS0wOWApLF0pDQpjb21wZXRpdG9ycy5qLjIgPC0gbnJvdyhibG9jLlN1YjE4RlshaXMubmEoYmxvYy5TdWIxOEYkYDIwMjQtMTEtMTBgKSxdKQ0KYGBgDQoNCiMjIyAyMDIyIEp1bmUtRmlyc3QNCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPVRSVUV9DQpibG9jLlN1YjE4RltvcmRlcihibG9jLlN1YjE4RiRgMjAyMi0wNi0wNGApLGMoMSwyLDMpXSAlPiUgcHJpbnQobj0xMzApDQpgYGANCg0KIyMjIEVsbyBKdW5lLUZpcnN0IDIwMjINCg0KKi1Db21wZXRpdG9ycyA9IGByIGNvbXBldGl0b3JzLmEuMWAtKg0KDQpgYGB7ciBldmFsPVRSVUUsaW5jbHVkZT1UUlVFfQ0KbGFzdC5jb21wIDwtIGJsb2MuU3ViMThGWyxjKDEsMiwzKV0gJT4lIGZpbHRlcihibG9jLlN1YjE4RiRgMjAyMi0wNi0wNGAhPSJOQSIpIA0KIw0KI2xhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1UUlVFLCBjb2xzLnByaW50PSA3fQ0KIyMjIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0Kbi5kZWJ1dCA9IDANCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGFzdC5jb21wIA0KIyU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KUiA8LSByZXAoMTAwMCwgTikNCiNSIDwtIGxhc3QuY29tcC5jYWxjJFIubmV3WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksMV0NClRlYW0gPC0gbGFzdC5jb21wLmNhbGMkVGVhbVshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXQ0KcmVzdWx0cyA8LSAodW5saXN0KHJlc3VsdHMpKQ0Kc3RkZXYgPC0gc2QoYygxOihOK24uZGVidXQpKSkNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUikpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KI24gPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KI1IuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQojbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0WywxXQ0KI1RlYW0gPC0gbGFzdF9jb21wX2RlYnV0JFRlYW0NCiMjDQojUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCiNFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNCiNSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCiNtYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNCiNQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXdbLDFdKS9EICkpKQ0KI21heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KI1Byb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojZWxvLmxhc3QuY29tcC5uZXcuZGVidXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogIyAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICMgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dFssM10pLA0KICAgICMgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgIyAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgIyAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAjICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgIyAgICAgICAgICAgICAgICAgICkpDQoNCg0KI2Vsby5sYXN0LmNvbXAubmV3IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLmxhc3QuY29tcC5uZXdbb3JkZXIoZWxvLmxhc3QuY29tcC5uZXckcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYA0KDQojIyMjIyMqRWxvIEhpc3RvcnkqICpjaGVjayBjb2RlIENodW5rIGlmIHJ1bm5pbmcgU3ViMTYgYWxvbmUqDQoNCmBgYHtyfQ0KIyMgDQoNCmNvbXBlPSAiMjAyMi4xIg0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE4RiIsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSkpDQoNCiMNCg0KI2Vsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkubGFzdCANCg0KIyU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCiMjIFN1YjE4Rg0KZWxvLmhpc3RvcnkudF9zZXJpZXMuUzE4RiA8LSANCiAgYXNfdGliYmxlKGVsby5oaXN0b3J5ICU+JQ0KICAgICAgICAgICAgICBmaWx0ZXIoY2F0ZWc9PSJTdWIxOEYiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGANCg0KIyMjIEVsbyBpbiB0aW1lDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCnAgPC0gZWxvLmhpc3RvcnkgJT4lIA0KICBmaWx0ZXIoY2F0ZWc9PSJTdWIxOEYiLCBSLm5ldz49MCkgJT4lDQogIGdncGxvdChhZXMoeD0gY29tcCwgeT0gUi5uZXcsIGdyb3VwID0gY29tcGV0aXRvciwgY29sID0gVGVhbSkpICsgDQogIGdlb21fcG9pbnQoKSArIA0KIyAgZ2VvbV9saW5lKGxpbmV0eXBlPSAiZGFzaGVkIikgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTEwMDAsbGluZXR5cGU9ICJkYXNoZWQiKQ0KDQojcA0KZ2dwbG90bHkocCkNCmBgYA0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgRmlyc3RfSnVuZV8yMDIyKioNCg0KYGBge3IgZXZhbD1UUlVFLCBlY2hvPUZBTFNFfQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcNCmVsby5sYXN0LmNvbXAubmV3IDwtIGVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9N30NCg0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgDQoNCiMjIyAyMDIyIEp1bmUtRmlyc3QgLSBBYnMNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KYmxvYy5TdWIxOEZbb3JkZXIoYmxvYy5TdWIxOEYkYDIwMjItMDYtMDVgKSwgYygxLDIsMyw0KV0gJT4lIHByaW50KG49NjUpDQpgYGANCg0KIyMjIEVsbyBKdW5lLUZpcnN0IC0gQWJzDQoNCiotQ29tcGV0aXRvcnMgPSBgciBjb21wZXRpdG9ycy5hLjJgLSoNCg0KYGBge3IgZXZhbD1UUlVFLGluY2x1ZGU9VFJVRX0NCmxhc3QuY29tcCA8LSBibG9jLlN1YjE4RlssYygxLDIsNCldICU+JSBmaWx0ZXIoYmxvYy5TdWIxOEYkYDIwMjItMDYtMDVgIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGlubmVyX2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCmBgYA0KDQpgYGB7ciBldmFsPSBUUlVFLGluY2x1ZGU9VFJVRSwgY29scy5wcmludD0gN30NCiMjIyMjRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCg0KbGFzdC5jb21wLmNhbGMgPC0gbGFzdC5jb21wIA0KIyU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQoNCiMjIw0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkY29tcGV0aXRvclshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0pDQpSIDwtIHJlcCgxMDAwLE4pDQojUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDFdDQpUZWFtIDwtIGxhc3QuY29tcC5jYWxjJFRlYW1bIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKGMoMTooTituLmRlYnV0KSkpDQojDQphdmcucGxheWVyIDwtIG1lZGlhbihjKFINCiAgICAgICAgICAgICAgICAgICAgICAgIywgDQogICAgICAgICAgICAgICAgICAgICAgICNyZXAoMTAwMCwgbi5kZWJ1dCApDQogICAgICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgICAgICkNCm1lZGlhbmEgPC0gbWVkaWFuKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSB1bmxpc3QobGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10pICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLVIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksICIlIiApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLmxhc3QuY29tcC5uZXcgPC0gYXNfdGliYmxlKGVsby5sYXN0LmNvbXAubmV3KQ0KIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQojbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCiNOIDwtIGxlbmd0aCh1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQojUi5kZWJ1dCA8LSByZXAoMTAwMCwgbikNCiNuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQojVGVhbSA8LSBsYXN0X2NvbXBfZGVidXQkVGVhbQ0KI2NhdGVnIDwtIGJsb2MuU3ViMThGLmFfYg0KI1MgPC0gKChtZWRpYW5hIC0gbGFzdF9jb21wX2RlYnV0WywzXSkgLyBzdGRldikgLyBtYXguc3RkDQojRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQojUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQojbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQojUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCiNtYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNCiNQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ld1ssMV0pL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KI2Vsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICMgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICMgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAjICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAjICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICMgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3WywxXSwyKSwNCiAgICAgICMgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAjICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgIyAgICAgICAgICAgICAgICAgICApKQ0KDQoNCiNlbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQpDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGANCg0KIyMjIyMgXyogRWxvIEhpc3RvcnkgKl8NCg0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyMi4xLUFicyINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSwNCiAgICAgICAgIGNhdGVnID0gcmVwKCJBYnNGIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgU3ViMThGDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMThGIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IkFic0YiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGANCg0KIyMjIEVsbyBpbiB0aW1lDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCnAgPC0gZWxvLmhpc3RvcnkgJT4lIA0KICBmaWx0ZXIoY2F0ZWc9PSJTdWIxOEYifGNhdGVnPT0iQWJzRiIsIFIubmV3Pj0wKSAlPiUNCiAgZ2dwbG90KGFlcyh4PSBjb21wLCB5PSBSLm5ldywgZ3JvdXAgPSBjb21wZXRpdG9yLCBjb2wgPSBUZWFtKSkgKyANCiAgZ2VvbV9wb2ludCgpICsgDQogIGdlb21fbGluZShsaW5ldHlwZT0gImRhc2hlZCIpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdD0xMDAwLGxpbmV0eXBlPSAiZGFzaGVkIikNCg0KI3ANCmdncGxvdGx5KHApDQpgYGANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIEp1bmUtRmlyc3RfQWJzXzIwMjIqKg0KDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQplbG8ubGFzdC5hY2N1bQ0KZWxvLmxhc3QuY29tcC5uZXcNCmBgYA0KDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9VFJVRSwgY29scy5wcmludD03fQ0KDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcC5uZXcsYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGANCg0KIyMjIDIwMjIgSnVuZS1TZWNvbmQNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KYmxvYy5TdWIxOEZbb3JkZXIoYmxvYy5TdWIxOEYkYDIwMjItMDYtMThgKSwgYygxLDIsMyw0LDUpXSAlPiUgcHJpbnQobj02NSkNCmBgYA0KDQojIyMgRWxvIEp1bmUtU2Vjb25kDQoNCiotQ29tcGV0aXRvcnMgPSBgciBjb21wZXRpdG9ycy5iLjFgLSoNCg0KYGBge3IgZXZhbD1UUlVFLGluY2x1ZGU9VFJVRX0NCmxhc3QuY29tcCA8LSBibG9jLlN1YjE4RlssYygxLDIsNSldICU+JSBmaWx0ZXIoYmxvYy5TdWIxOEYkYDIwMjItMDYtMThgIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1UUlVFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KIyMjDQoNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDFdDQpUZWFtIDwtIGxhc3QuY29tcC5jYWxjJFRlYW0ueFshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXQ0KcmVzdWx0cyA8LSAodW5saXN0KHJlc3VsdHMpKQ0Kc3RkZXYgPC0gc2QoYygxOihOK24uZGVidXQpKSkNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUiwgcmVwKDEwMDAsIG4uZGVidXQgKSkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KDQojbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCiNOIDwtIGxlbmd0aCh1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQojUi5kZWJ1dCA8LSByZXAoMTAwMCwgbikNCiNuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQojVGVhbSA8LSBsYXN0X2NvbXBfZGVidXQkVGVhbQ0KI2NhdGVnIDwtIGJsb2MuU3ViMThGLmFfYg0KI1MgPC0gKChtZWRpYW5hIC0gbGFzdF9jb21wX2RlYnV0WywzXSkgLyBzdGRldikgLyBtYXguc3RkDQojRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQojUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQojbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQojUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCiNtYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNCiNQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ld1ssMV0pL0QgKSkpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojZWxvLmxhc3QuY29tcC5uZXcuZGVidXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogIyAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICMgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dFssM10pLA0KICAgICMgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgIyAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgIyAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAjICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgIyAgICAgICAgICAgICAgICAgICkpDQoNCg0KZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLmxhc3QuY29tcC5uZXcgDQojJT4lIHJiaW5kKGVsby5sYXN0LmNvbXAubmV3LmRlYnV0KQ0KDQoNCiMjIyMjICMjIyMjIyMjIyMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5jb21wLm5ld1tvcmRlcihlbG8ubGFzdC5jb21wLm5ldyRyZXN1bHRzKSxjKDEsMiwzLDQsNiw3LDgpXSkNCg0KYGBgDQoNCiMjIyMjXF8gRWxvIEhpc3RvcnkgXF8NCg0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyMi4yIg0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE4RiIsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSkpDQoNCiMNCmVsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCiMjIFN1YjE4Rg0KZWxvLmhpc3RvcnkudF9zZXJpZXMuUzE4RiA8LSANCiAgYXNfdGliYmxlKGVsby5oaXN0b3J5ICU+JQ0KICAgICAgICAgICAgICBmaWx0ZXIoY2F0ZWc9PSJTdWIxOEYiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGANCg0KIyMjIEVsbyBpbiB0aW1lDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCnAgPC0gZWxvLmhpc3RvcnkgJT4lIA0KICBmaWx0ZXIoY2F0ZWc9PSJTdWIxOEYifGNhdGVnPT0iQWJzRiIsIFIubmV3Pj0wKSAlPiUNCiAgZ2dwbG90KGFlcyh4PSBjb21wLCB5PSBSLm5ldywgZ3JvdXAgPSBjb21wZXRpdG9yLCBjb2wgPSBUZWFtKSkgKyANCiAgZ2VvbV9wb2ludCgpICsgDQogIGdlb21fbGluZShsaW5ldHlwZT0gImRhc2hlZCIpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdD0xMDAwLGxpbmV0eXBlPSAiZGFzaGVkIikNCg0KI3ANCmdncGxvdGx5KHApDQpgYGANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIEp1bmVfU2Vjb25kLTIwMjMqKg0KDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQplbG8ubGFzdC5hY2N1bQ0KZWxvLmxhc3QuY29tcC5uZXcNCmBgYA0KDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9VFJVRSwgY29scy5wcmludD03fQ0KDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcC5uZXcsYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGANCg0KDQojIyMgMjAyMiBKdW5lLVNlY29uZC1BYnMNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KYmxvYy5TdWIxOEZbb3JkZXIoYmxvYy5TdWIxOEYkYDIwMjItMDYtMDVgKSwgYygxLDIsNSw2KV0gJT4lIHByaW50KG49NjUpDQpgYGANCg0KDQojIyMgRWxvIEp1bmUtU2Vjb25kLUFic3MNCg0KYGBge3IgZXZhbD1UUlVFLGluY2x1ZGU9VFJVRX0NCmxhc3QuY29tcCA8LSBibG9jLlN1YjE4RlssYygxLDIsNildICU+JSBmaWx0ZXIoYmxvYy5TdWIxOEYkYDIwMjItMDYtMTlgIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1UUlVFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KIyMjDQoNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDFdDQpUZWFtIDwtIGxhc3QuY29tcC5jYWxjJFRlYW0ueFshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXQ0KcmVzdWx0cyA8LSAodW5saXN0KHJlc3VsdHMpKQ0Kc3RkZXYgPC0gc2QoYygxOihOK24uZGVidXQpKSkNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUiwgcmVwKDEwMDAsIG4uZGVidXQgKSkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KDQpuID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KUi5kZWJ1dCA8LSByZXAoMTAwMCwgbikNCm5hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dFssMV0NClRlYW0gPC0gbGFzdF9jb21wX2RlYnV0JFRlYW0NCmNhdGVnIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZWxvLmxhc3QuY29tcC5uZXcuZGVidXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dFssM10pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFNbLDFdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3WywxXSwyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkpDQoNCg0KZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmNvbXAubmV3LmRlYnV0KQ0KDQoNCiMjIyMjICMjIyMjIyMjIyMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5jb21wLm5ld1tvcmRlcihlbG8ubGFzdC5jb21wLm5ldyRyZXN1bHRzKSxjKDEsMiwzLDQsNiw3LDgpXSkNCg0KYGBgDQoNCiMjIyMjXF8gRWxvIEhpc3RvcnkgXF8NCg0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyMi4yLUFicyINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSwNCiAgICAgICAgIGNhdGVnID0gcmVwKCJBYnNGIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgU3ViMThGDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMThGIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IkFic0YiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGANCg0KIyMjIEVsbyBpbiB0aW1lDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCnAgPC0gZWxvLmhpc3RvcnkgJT4lIA0KICBmaWx0ZXIoY2F0ZWc9PSJTdWIxOEYifGNhdGVnPT0iQWJzRiIsIFIubmV3Pj0wKSAlPiUNCiAgZ2dwbG90KGFlcyh4PSBjb21wLCB5PSBSLm5ldywgZ3JvdXAgPSBjb21wZXRpdG9yLCBjb2wgPSBUZWFtKSkgKyANCiAgZ2VvbV9wb2ludCgpICsgDQogIGdlb21fbGluZShsaW5ldHlwZT0gImRhc2hlZCIpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdD0xMDAwLGxpbmV0eXBlPSAiZGFzaGVkIikNCg0KI3ANCmdncGxvdGx5KHApDQpgYGANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIEp1bmVfU2Vjb25kLUFicyAyMDIyKioNCg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9N30NCg0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgICANCg0KDQoNCiMjIyAyMDIyIE5vdg0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQpibG9jLlN1YjE4RltvcmRlcihibG9jLlN1YjE4RiRgMjAyMi0xMS0wNWApLCBjKDEsMiw2LDcpXSAlPiUgcHJpbnQobj02NSkNCmBgYA0KDQojIyMgRWxvIE5vdi0yMDIyDQoNCiotQ29tcGV0aXRvcnMgPSBgciBjb21wZXRpdG9ycy5iLjFgLSoNCg0KYGBge3IgZXZhbD1UUlVFLGluY2x1ZGU9VFJVRX0NCmxhc3QuY29tcCA8LSBibG9jLlN1YjE4RlssYygxLDIsNyldICU+JSBmaWx0ZXIoYmxvYy5TdWIxOEYkYDIwMjItMTEtMDVgIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1UUlVFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KIyMjDQoNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDFdDQpUZWFtIDwtIGxhc3QuY29tcC5jYWxjJFRlYW0ueFshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXQ0KcmVzdWx0cyA8LSAodW5saXN0KHJlc3VsdHMpKQ0Kc3RkZXYgPC0gc2QoYygxOihOK24uZGVidXQpKSkNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUiwgcmVwKDEwMDAsIG4uZGVidXQgKSkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KDQpuID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KUi5kZWJ1dCA8LSByZXAoMTAwMCwgbikNCm5hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dFssMV0NClRlYW0gPC0gbGFzdF9jb21wX2RlYnV0JFRlYW0NCmNhdGVnIDwtIHJlcCgiU3ViMThGIiwgbikNClMgPC0gKChtZWRpYW5hIC0gbGFzdF9jb21wX2RlYnV0WywzXSkgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXdbLDFdKS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ld1ssMV0pL0QgKSkpDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0WywzXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQpDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGANCg0KIyMjIyNcXyBFbG8gSGlzdG9yeSBcXw0KDQpgYGB7cn0NCiMjIA0KY29tcGU9ICIyMDIyLjMiDQojDQplbG8uaGlzdG9yeS5sYXN0IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSANCiAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSksDQogICAgICAgICBjYXRlZyA9IHJlcCgiU3ViMThGIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgU3ViMThGDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMThGIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IlN1YjE4RiIpICU+JQ0KICAgICAgICAgICAgICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3J+Y29tcCwgdmFsdWUudmFyID0gIlIubmV3IikpIA0KIyMgDQoNCmBgYA0KDQojIyMgRWxvIGluIHRpbWUNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KcCA8LSBlbG8uaGlzdG9yeSAlPiUgDQogIGZpbHRlcihjYXRlZz09IlN1YjE4RiJ8Y2F0ZWc9PSJBYnNGIiwgUi5uZXc+PTApICU+JQ0KICBnZ3Bsb3QoYWVzKHg9IGNvbXAsIHk9IFIubmV3LCBncm91cCA9IGNvbXBldGl0b3IsIGNvbCA9IGNhdGVnKSkgKyANCiAgZ2VvbV9wb2ludCgpICsgDQogIGdlb21fbGluZShsaW5ldHlwZT0gImRhc2hlZCIpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdD0xMDAwLGxpbmV0eXBlPSAiZGFzaGVkIikNCg0KI3ANCmdncGxvdGx5KHApDQpgYGANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIEp1bmVfU2Vjb25kLTIwMjMqKg0KDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQplbG8ubGFzdC5hY2N1bQ0KZWxvLmxhc3QuY29tcC5uZXcNCmBgYA0KDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9VFJVRSwgY29scy5wcmludD03fQ0KDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcC5uZXcsYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGANCg0KIyMjIDIwMjIgTm92IC0gQWJzDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCmJsb2MuU3ViMThGW29yZGVyKGJsb2MuU3ViMThGJGAyMDIyLTExLTA2YCksIGMoMSwyLDcsOCldICU+JSBwcmludChuPTY1KQ0KYGBgDQoNCiMjIyBFbG8gTm92IC0gQWJzDQoNCiotQ29tcGV0aXRvcnMgPSBgciBjb21wZXRpdG9ycy5jLjJgLSoNCg0KYGBge3IgZXZhbD1UUlVFLGluY2x1ZGU9VFJVRX0NCmxhc3QuY29tcCA8LSBibG9jLlN1YjE4RlssYygxLDIsOCldICU+JSBmaWx0ZXIoYmxvYy5TdWIxOEYkYDIwMjItMTEtMDZgIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1UUlVFLCBjb2xzLnByaW50PSA3fQ0KIyMjIyNFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0Kbi5kZWJ1dCA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCiMjIw0KDQpsYXN0LmNvbXAuY2FsYyA8LSBsYXN0LmNvbXAgJT4lIHJpZ2h0X2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCg0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNCiNSIDwtIHJlcCgxMDAwLE4pDQpSIDwtIGxhc3QuY29tcC5jYWxjJFIubmV3WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksMV0NClRlYW0gPC0gbGFzdC5jb21wLmNhbGMkVGVhbS54WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bHRzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdDQpyZXN1bHRzIDwtICh1bmxpc3QocmVzdWx0cykpDQpzdGRldiA8LSBzZChjKDE6KE4rbi5kZWJ1dCkpKQ0KIw0KYXZnLnBsYXllciA8LSBtZWRpYW4oYyhSDQogICAgICAgICAgICAgICAgICAgICAgICwgcmVwKDEwMDAsIG4uZGVidXQgKQ0KICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAgICAgICApDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQpjYXRlZyA8LSByZXAoIkFic0YiLCBuKQ0KUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0WywzXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCg0KDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQpDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGANCg0KIyMjIyMgXyogRWxvIEhpc3RvcnkgKl8NCg0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyMi4zLUFicyINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpLCBjYXRlZyA9IHJlcCgiQWJzRiIsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSkpDQoNCiMNCmVsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCiMjIFN1YjE4Rg0KZWxvLmhpc3RvcnkudF9zZXJpZXMuUzE4RiA8LSANCiAgYXNfdGliYmxlKGVsby5oaXN0b3J5ICU+JQ0KICAgICAgICAgICAgICBmaWx0ZXIoY2F0ZWc9PSJBYnNGIikgJT4lDQogICAgICAgICAgICAgIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvcn5jb21wLCB2YWx1ZS52YXIgPSAiUi5uZXciKSkgDQojIyANCg0KYGBgDQoNCiMjIyBFbG8gaW4gdGltZQ0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQpwIDwtIGVsby5oaXN0b3J5ICU+JSANCiAgZmlsdGVyKGNhdGVnPT0iU3ViMThGInxjYXRlZz09IkFic0YiLCBSLm5ldz49MCkgJT4lDQogIGdncGxvdChhZXMoeD0gY29tcCwgeT0gUi5uZXcsIGdyb3VwID0gY29tcGV0aXRvciwgY29sID0gVGVhbSkpICsgDQogIGdlb21fcG9pbnQoKSArIA0KICBnZW9tX2xpbmUobGluZXR5cGU9ICJkYXNoZWQiKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9MTAwMCxsaW5ldHlwZT0gImRhc2hlZCIpDQoNCiNwDQpnZ3Bsb3RseShwKQ0KYGBgDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBKdW5lLUZpcnN0X0Fic18yMDIyKioNCg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9N30NCg0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgDQoNCg0KIyMjIE1FUkdJTkcgZnJvbSBzdWIxNg0KDQpgYGB7cn0NCiMjDQpibG9jLlN1YjE2RiA8LSByYW5rcyAlPiUNCiAgZmlsdGVyKHN0YWdlPT0iQ2xhc2lmaWMiLA0KICAgICAgICAgQ2F0ZWdvcnk9PSJTdWIxNl9GIiwNCiAgICAgICAgIHllYXI9PSIyMDIyIiwNCiAgICAgICAgICMgICAgIE5hbWU9PSBub21icmUNCiAgKSAlPiUNCiAgZ3JvdXBfYnkoY29tcGV0aXRvcj0gTmFtZSwNCiAgICAgICAgICAgWWVhcj0geWVhciwNCiAgICAgICAgICAgQ29tcGU9IENvbXBlXywNCiAgICAgICAgICAgVGVhbSA9IFRlYW0sDQogICAgICAgICAgIERhdGU9IERhdGUpICU+JQ0KICByZWZyYW1lKHJhbms9IFJhbmspICU+JQ0KICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3IgKyBUZWFtIH4gQ29tcGUsIA0KICAgICAgICAgICAgICAgICAgbmEucm0gPSBUUlVFKQ0KDQpibG9jLlN1YjE2RiA8LSBhc190aWJibGUoYmxvYy5TdWIxNkYpDQojIw0KYmxvYy5TdWIxNkZbb3JkZXIoYmxvYy5TdWIxNkYkYS5ibG9jLmZpcnN0LjIyKSxjKDEsMiwzKV0gDQojDQpjb21wZXRpdG9ycy5hIDwtIG5yb3coYmxvYy5TdWIxNkZbIWlzLm5hKGJsb2MuU3ViMTZGJGEuYmxvYy5maXJzdC4yMiksXSkNCmNvbXBldGl0b3JzLmIgPC0gbnJvdyhibG9jLlN1YjE2RlshaXMubmEoYmxvYy5TdWIxNkYkYi5ibG9jLnNlYy4yMiksXSkNCmNvbXBldGl0b3JzLmMgPC0gbnJvdyhibG9jLlN1YjE2RlshaXMubmEoYmxvYy5TdWIxNkYkYy5ibG9jLnRocmQuMjIpLF0pDQojDQojIyMgRWxvIEZpcnN0IDIwMjIgICMjIyMNCiMNCk4gPC0gbGVuZ3RoKGJsb2MuU3ViMTZGJGEuYmxvYy5maXJzdC4yMlshaXMubmEoYmxvYy5TdWIxNkYkYS5ibG9jLmZpcnN0LjIyKV0pDQpSIDwtIHJlcCgxMDAwLCBOKQ0KbmFtZXMgPC0gYmxvYy5TdWIxNkZbIWlzLm5hKGJsb2MuU3ViMTZGJGEuYmxvYy5maXJzdC4yMiksIDFdDQpUZWFtIDwtIGJsb2MuU3ViMTZGWyFpcy5uYShibG9jLlN1YjE2RiRhLmJsb2MuZmlyc3QuMjIpLCAyXQ0KI2NhdGVnIDwtIGJsb2MuU3ViMTZGWyFpcy5uYShibG9jLlN1YjE2RiRhLmJsb2MuZmlyc3QuMjIpLCBdDQpyZXN1bHRzIDwtIGJsb2MuU3ViMTZGJGEuYmxvYy5maXJzdC4yMlshaXMubmEoYmxvYy5TdWIxNkYkYS5ibG9jLmZpcnN0LjIyKV0NCnN0ZGV2IDwtIHNkKGMoMTooTituLmRlYnV0KSkpDQphdmcucGxheWVyIDwtIG1lZGlhbihSKQ0KbWVkaWFuYSA8LSBtZWRpYW4ocmVzdWx0cykNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNClMgPC0gKChtZWRpYW5hLXJlc3VsdHMpIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5hLmJsb2MuZmlyc3QuMjIgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwgIiUiKSwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwiJSIgKSApDQoNCmVsby5hLmJsb2MuZmlyc3QuMjIgPC0gYXNfdGliYmxlKGVsby5hLmJsb2MuZmlyc3QuMjIpDQoNCmtuaXRyOjprYWJsZShlbG8uYS5ibG9jLmZpcnN0LjIyW29yZGVyKGVsby5hLmJsb2MuZmlyc3QuMjIkcmVzdWx0cyksIGMoMSwyLDMsNCw2LDcsOCldLCApDQojIyMgXyBFbG8gSGlzdG9yeSBfICMjIyMNCiNlbG8uaGlzdG9yeS5sYXN0IDwtDQojICBlbG8uYS5ibG9jLmZpcnN0LjIyICU+JSANCiMgbXV0YXRlKGNvbXAgPSByZXAoIjIwMjIuMSIsIGxlbmd0aChlbG8uYS5ibG9jLmZpcnN0LjIyJGNvbXBldGl0b3IpKSwNCiMgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE0RiIsIGxlbmd0aChlbG8uYS5ibG9jLmZpcnN0LjIyJGNvbXBldGl0b3IpKSkNCiNlbG8uaGlzdG9yeSA8LSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KIyMgMjAyMiBTZWNvbmQgIyMjIw0KYmxvYy5TdWIxNkZbb3JkZXIoYmxvYy5TdWIxNkYkYi5ibG9jLnNlYy4yMiksIGMoMSwyLDMsNCldDQojDQpibG9jLlN1YjE2Ri5hX2IgPC0gYmxvYy5TdWIxNkZbLGMoMTo0KV0gJT4lDQogIGZpbHRlcighaXMubmEoYmxvYy5TdWIxNkYkYi5ibG9jLnNlYy4yMikmIWlzLm5hKGJsb2MuU3ViMTZGJGEuYmxvYy5maXJzdC4yMikpDQoNCmJsb2MuU3ViMTZGLmFfYiA8LSBlbG8uYS5ibG9jLmZpcnN0LjIyICU+JSANCiAgcmlnaHRfam9pbihibG9jLlN1YjE2Ri5hX2IsIGJ5PSAiY29tcGV0aXRvciIpICU+JQ0KICBhc190aWJibGUoKQ0KIyMjIEVsbyBTZWNvbmQgMjAyMg0KbiA9IGxlbmd0aChibG9jLlN1YjE2Ri5hX2IkYi5ibG9jLnNlYy4yMikNCk4gPC0gbGVuZ3RoKGJsb2MuU3ViMTZGJGIuYmxvYy5zZWMuMjJbIWlzLm5hKGJsb2MuU3ViMTZGJGIuYmxvYy5zZWMuMjIpXSkNClIgPC0gYmxvYy5TdWIxNkYuYV9iJFIubmV3DQpuYW1lcyA8LSBibG9jLlN1YjE2Ri5hX2JbIWlzLm5hKGJsb2MuU3ViMTZGLmFfYiRiLmJsb2Muc2VjLjIyKSwxXQ0KVGVhbSA8LSBibG9jLlN1YjE2Ri5hX2IkVGVhbS54DQojDQpyZXN1bHRzIDwtIGJsb2MuU3ViMTZGJGIuYmxvYy5zZWMuMjJbIWlzLm5hKGJsb2MuU3ViMTZGJGIuYmxvYy5zZWMuMjIpXQ0Kc3RkZXYgPC0gc2QoYygxOihOK24uZGVidXQpKSkNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUiwgcmVwKDEwMDAsIE4tbiApKSkNCm1lZGlhbmEgPC0gbWVkaWFuKGJsb2MuU3ViMTZGJGIuYmxvYy5zZWMuMjJbIWlzLm5hKGJsb2MuU3ViMTZGJGIuYmxvYy5zZWMuMjIpXSkNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMNClMgPC0gKChtZWRpYW5hIC0gYmxvYy5TdWIxNkYuYV9iJGIuYmxvYy5zZWMuMjIgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQplbG8uYi5ibG9jLnNlYy4yMiA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IGJsb2MuU3ViMTZGLmFfYiRiLmJsb2Muc2VjLjIyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksIiUiICkgDQopDQplbG8uYi5ibG9jLnNlYy4yMiA8LSBhc190aWJibGUoZWxvLmIuYmxvYy5zZWMuMjIpDQojIyMgZGVidXQgbGlzdCAjIyMjDQpibG9jLlN1YjE2Ri5iLmRlYnV0IDwtIGJsb2MuU3ViMTZGWyFpcy5uYShibG9jLlN1YjE2RiRiLmJsb2Muc2VjLjIyKSxjKDEsMiw0KV0gJT4lIGFudGlfam9pbihibG9jLlN1YjE2Ri5hX2JbLCBjKDEpXSwgYnk9ICJjb21wZXRpdG9yIikgJT4lIGFzX3RpYmJsZSgpDQojDQpuID0gbGVuZ3RoKGJsb2MuU3ViMTZGLmIuZGVidXQkYi5ibG9jLnNlYy4yMikNCk4gPC0gbGVuZ3RoKGJsb2MuU3ViMTZGJGIuYmxvYy5zZWMuMjJbIWlzLm5hKGJsb2MuU3ViMTZGJGIuYmxvYy5zZWMuMjIpXSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBibG9jLlN1YjE2Ri5iLmRlYnV0WywxXQ0KVGVhbSA8LSBibG9jLlN1YjE2Ri5iLmRlYnV0JFRlYW0NCiMNClMgPC0gKChtZWRpYW5hLSBibG9jLlN1YjE2Ri5iLmRlYnV0JGIuYmxvYy5zZWMuMjIpIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmIuYmxvYy5zZWMuMjIkUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8uYi5ibG9jLnNlYy4yMiRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIyMNCmVsby5iLmJsb2Muc2VjLjIyLmRlYnV0IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gYmxvYy5TdWIxNkYuYi5kZWJ1dCRiLmJsb2Muc2VjLjIyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQopDQplbG8uYi5ibG9jLnNlYy4yMi5kZWJ1dCA8LSBhc190aWJibGUoZWxvLmIuYmxvYy5zZWMuMjIuZGVidXQpDQoNCmVsby5iLmJsb2Muc2VjLjIyIDwtIGVsby5iLmJsb2Muc2VjLjIyICU+JSByYmluZChlbG8uYi5ibG9jLnNlYy4yMi5kZWJ1dCkNCiMNCmtuaXRyOjprYWJsZShlbG8uYi5ibG9jLnNlYy4yMltvcmRlcihlbG8uYi5ibG9jLnNlYy4yMiRyZXN1bHRzKSxjKDEsMiwzLDQsNiw3LDgpXSkNCiMjIyBfIEVsbyBIaXN0b3J5IF8gIyMjIw0KIw0KI2Vsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmIuYmxvYy5zZWMuMjIgJT4lIA0KIyAgbXV0YXRlKGNvbXAgPSByZXAoIjIwMjIuMiIsIGxlbmd0aChlbG8uYi5ibG9jLnNlYy4yMiRjb21wZXRpdG9yKSksDQojICAgICAgICBjYXRlZyA9IHJlcCgiU3ViMTRGIiwgbGVuZ3RoKGVsby5iLmJsb2Muc2VjLjIyJGNvbXBldGl0b3IpKSkNCiNlbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCiMjIyMjIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUgIyMjIw0KI2Vsby5oaXN0b3J5LnRfc2VyaWVzIDwtIGVsby5oaXN0b3J5ICU+JSByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3J+Y29tcCwgdmFsdWUudmFyID0gIlIubmV3IikNCiMjIDIwMjIgVGhpcmQgIyMjIw0KYmxvYy5TdWIxNkZbb3JkZXIoYmxvYy5TdWIxNkYkYy5ibG9jLnRocmQuMjIpLCBjKDEsMiwzLDQsNSldDQojIyMgRWxvIFRoaXJkIDIwMjIgICMjIyMNCiMNCmJsb2MuU3ViMTZGLmMgPC0gYXNfdGliYmxlKGJsb2MuU3ViMTZGWyFpcy5uYShibG9jLlN1YjE2RiRjLmJsb2MudGhyZC4yMikgLCBjKDEsMiw1KV0pDQojIw0KYmxvYy5TdWIxNkYuYy5kZWJ1dCA8LSBibG9jLlN1YjE2Rltpcy5uYShibG9jLlN1YjE2RiRhLmJsb2MuZmlyc3QuMjIpJmlzLm5hKGJsb2MuU3ViMTZGJGIuYmxvYy5zZWMuMjImIWlzLm5hKGJsb2MuU3ViMTZGJGMuYmxvYy50aHJkLjIyKSkgLCBjKDEsMiw1KV0NCiMjDQpibG9jLlN1YjE2Ri5hX2JfYyA8LSBibG9jLlN1YjE2RlshaXMubmEoYmxvYy5TdWIxNkYkYS5ibG9jLmZpcnN0LjIyKSYhaXMubmEoYmxvYy5TdWIxNkYkYi5ibG9jLnNlYy4yMikmIWlzLm5hKGJsb2MuU3ViMTZGJGMuYmxvYy50aHJkLjIyKSwgYygxLDIsNSldDQojIw0KYmxvYy5TdWIxNkYuYV9fYyA8LSBibG9jLlN1YjE2RlshaXMubmEoYmxvYy5TdWIxNkYkYS5ibG9jLmZpcnN0LjIyKSZpcy5uYShibG9jLlN1YjE2RiRiLmJsb2Muc2VjLjIyKSYhaXMubmEoYmxvYy5TdWIxNkYkYy5ibG9jLnRocmQuMjIpLCBjKDEsMiwzLDUpXQ0KIw0KYmxvYy5TdWIxNkYuYV9vbmx5IDwtIGJsb2MuU3ViMTZGWyFpcy5uYShibG9jLlN1YjE2RiRhLmJsb2MuZmlyc3QuMjIpJmlzLm5hKGJsb2MuU3ViMTZGJGIuYmxvYy5zZWMuMjIpJmlzLm5hKGJsb2MuU3ViMTZGJGMuYmxvYy50aHJkLjIyKSxdDQojIyMjIEVMT3MgIyMjIw0KZWxvLmEuYmxvYy5maXJzdC4yMi5hX29ubHkgPC0gZWxvLmEuYmxvYy5maXJzdC4yMlssXSAlPiUgYW50aV9qb2luKGVsby5iLmJsb2Muc2VjLjIyLCBieT0iY29tcGV0aXRvciIpDQojIyMgRWxvIEFjY3VtdWxhdGVkIHNlY29uZCBjb21wICMjIyMNCmVsby5iLmJsb2Muc2VjLjIyLmFjY3VtIDwtIGVsby5iLmJsb2Muc2VjLjIyICU+JSByYmluZChlbG8uYS5ibG9jLmZpcnN0LjIyLmFfb25seSkNCmVsby5iLmJsb2Muc2VjLjIyLmFjY3VtICA8LSANCiAgZWxvLmIuYmxvYy5zZWMuMjIuYWNjdW1bb3JkZXIoZWxvLmIuYmxvYy5zZWMuMjIuYWNjdW0kY29tcGV0aXRvciksXQ0KDQoNCiMjIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMNCm4gPSBsZW5ndGgoZWxvLmIuYmxvYy5zZWMuMjIuYWNjdW0kY29tcGV0aXRvcikNCm4uZGVidXQgPSBsZW5ndGgoYmxvYy5TdWIxNkYuYy5kZWJ1dCRjb21wZXRpdG9yKQ0KIw0KYyA8LSBibG9jLlN1YjE2Ri5jICU+JSByaWdodF9qb2luKGVsby5iLmJsb2Muc2VjLjIyLmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojDQpOIDwtIGxlbmd0aChjJGNvbXBldGl0b3JbIWlzLm5hKGMkYy5ibG9jLnRocmQuMjIpXSkNClIgPC0gYyRSLm5ld1shaXMubmEoYyRjLmJsb2MudGhyZC4yMildDQpuYW1lcyA8LSBjWyFpcy5uYShjJGMuYmxvYy50aHJkLjIyKSwxXQ0KVGVhbSA8LSBjJFRlYW0ueFshaXMubmEoYyRjLmJsb2MudGhyZC4yMildDQojDQpyZXN1bHRzIDwtIGJsb2MuU3ViMTZGLmMkYy5ibG9jLnRocmQuMjINCnN0ZGV2IDwtIHNkKGMoMTooTituLmRlYnV0KSkpDQojDQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0ICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4oYmxvYy5TdWIxNkYkYy5ibG9jLnRocmQuMjJbIWlzLm5hKGJsb2MuU3ViMTZGJGMuYmxvYy50aHJkLjIyKV0pDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojDQpTIDwtICgobWVkaWFuYSAtIGMkYy5ibG9jLnRocmQuMjJbIWlzLm5hKGMkYy5ibG9jLnRocmQuMjIpXSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojDQplbG8uYy5ibG9jLnRocmQuMjIgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBjJGMuYmxvYy50aHJkLjIyWyFpcy5uYShjJGMuYmxvYy50aHJkLjIyKV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCikNCmVsby5jLmJsb2MudGhyZC4yMiA8LSBhc190aWJibGUoZWxvLmMuYmxvYy50aHJkLjIyKQ0KIw0KbiA9IGxlbmd0aChibG9jLlN1YjE2Ri5jLmRlYnV0JGMuYmxvYy50aHJkLjIyKQ0KTiA8LSBsZW5ndGgoYmxvYy5TdWIxNkYkYy5ibG9jLnRocmQuMjJbIWlzLm5hKGJsb2MuU3ViMTZGJGMuYmxvYy50aHJkLjIyKV0pDQpSLmRlYnV0IDwtIHJlcCgxMDAwLCBuKQ0KbmFtZXMgPC0gYmxvYy5TdWIxNkYuYy5kZWJ1dFssMV0NClRlYW0gPC0gYmxvYy5TdWIxNkYuYy5kZWJ1dCRUZWFtDQojDQpTIDwtICgobWVkaWFuYS0gYmxvYy5TdWIxNkYuYy5kZWJ1dCRjLmJsb2MudGhyZC4yMikgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8uYy5ibG9jLnRocmQuMjIkUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8uYy5ibG9jLnRocmQuMjIkUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojDQplbG8uYy5ibG9jLnRocmQuMjIuZGVidXQgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBibG9jLlN1YjE2Ri5jLmRlYnV0JGMuYmxvYy50aHJkLjIyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCikNCmVsby5jLmJsb2MudGhyZC4yMi5kZWJ1dCA8LSBhc190aWJibGUoZWxvLmMuYmxvYy50aHJkLjIyLmRlYnV0KQ0KIw0KZWxvLmMuYmxvYy50aHJkLjIyIDwtIGVsby5jLmJsb2MudGhyZC4yMiAlPiUgcmJpbmQoZWxvLmMuYmxvYy50aHJkLjIyLmRlYnV0KQ0KIw0Ka25pdHI6OmthYmxlKGVsby5jLmJsb2MudGhyZC4yMltvcmRlcihlbG8uYy5ibG9jLnRocmQuMjIkcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQojDQojIyMgXyBFbG8gSGlzdG9yeSBfICMjIyMNCmNvbXBlIDwtICIyMDIyLjMiDQojZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8uYy5ibG9jLnRocmQuMjIgJT4lIA0KIyAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8uYy5ibG9jLnRocmQuMjIkY29tcGV0aXRvcikpLA0KIyAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE0RiIsIGxlbmd0aChlbG8uYy5ibG9jLnRocmQuMjIkY29tcGV0aXRvcikpKQ0KI2Vsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KIyMjIyB0aW1lLXNlcmllcyBkYXRhLmZyYW1lICMjIyMNCiNlbG8uaGlzdG9yeS50X3NlcmllcyA8LSBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvcn5jb21wLCB2YWx1ZS52YXIgPSAiUi5uZXciKSkNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCAyMDIyKiogIyMjIw0KDQplbG8uYi5ibG9jLnNlYy4yMi5hY2N1bS5jX2Fic2VudCA8LSBlbG8uYi5ibG9jLnNlYy4yMi5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5jLmJsb2MudGhyZC4yMiwgYnk9ImNvbXBldGl0b3IiKQ0KIw0KZWxvLmMuYmxvYy50aHJkLjIyLmFjY3VtIDwtIGVsby5jLmJsb2MudGhyZC4yMiAlPiUgcmJpbmQoZWxvLmIuYmxvYy5zZWMuMjIuYWNjdW0uY19hYnNlbnQpDQplbG8uYy5ibG9jLnRocmQuMjIuYWNjdW0gPC0gZWxvLmMuYmxvYy50aHJkLjIyLmFjY3VtW29yZGVyKGVsby5jLmJsb2MudGhyZC4yMi5hY2N1bSRjb21wZXRpdG9yKSxdDQoNCiMNCmJsb2MuU3ViMThGLjIzIDwtIHJhbmtzICU+JQ0KICBmaWx0ZXIoc3RhZ2U9PSJDbGFzaWZpYyIsDQogICAgICAgICBDYXRlZ29yeT09IlN1YjE4X0YifENhdGVnb3J5PT0iU3ViMjBfRiJ8Q2F0ZWdvcnk9PSJBYnNfRiIsDQogICAgICAgICB5ZWFyPT0iMjAyMyINCiAgICAgICAgICMgICAgIE5hbWU9PSBub21icmUNCiAgKSAlPiUNCiAgZ3JvdXBfYnkoY29tcGV0aXRvcj0gTmFtZSwNCiAgICAgICAgICAgWWVhcj0geWVhciwNCiAgICAgICAgICAgQ29tcGU9IENvbXBlXywNCiAgICAgICAgICAgVGVhbSA9IFRlYW0sDQogICAgICAgICAgIERhdGU9IERhdGUpICU+JQ0KICByZWZyYW1lKHJhbms9IFJhbmspICU+JQ0KICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3IgKyBUZWFtIH4gRGF0ZSwgDQogICAgICAgICAgICAgICAgICBuYS5ybSA9IFRSVUUpDQoNCmJsb2MuU3ViMThGLjIzIDwtIGFzX3RpYmJsZShibG9jLlN1YjE4Ri4yMykNCiMNCiMgKiAqKl9Mb3Mgc3ViMTYgInNhbGVuIl8qICMjIyMNCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIEZpcnN0XzIwMjMqKiAjIyMjDQojIyBlbnZpYW5kbyBsb3Mgc3ViMTYgYSBvdHJvIGFyY2hpdm8NCmVsby4yMi5hY2N1bS50b19zdWIxOCA8LSBlbG8uYy5ibG9jLnRocmQuMjIuYWNjdW0gJT4lIHNlbWlfam9pbihibG9jLlN1YjE4Ri4yMyxieT0iY29tcGV0aXRvciIpDQojIyBzdWIxNiBzYWxpZW5kbw0KIyBlbG8uYy5ibG9jLnRocmQuMjIuYWNjdW0gPC0gZWxvLmMuYmxvYy50aHJkLjIyLmFjY3VtICU+JSBhbnRpX2pvaW4oYmxvYy5TdWIxOEYuMjMsYnk9ImNvbXBldGl0b3IiKSANCg0KDQoNCmBgYCAgDQoNCg0KIyMjIDIwMjMgTWFyY2gNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KYmxvYy5TdWIxOEZbb3JkZXIoYmxvYy5TdWIxOEYkYDIwMjMtMDMtMjVgKSwgYygxLDIsOCw5KV0gJT4lIHByaW50KG49NjUpDQpgYGANCg0KIyMjIEVsbyAyMDIzIE1hcmNoDQoNCiotQ29tcGV0aXRvcnMgPSBgciBgLSoNCg0KYGBge3IgZXZhbD1UUlVFLGluY2x1ZGU9VFJVRX0NCmxhc3QuY29tcCA8LSBibG9jLlN1YjE4RlssYygxLDIsOSldICU+JSBmaWx0ZXIoYmxvYy5TdWIxOEYkYDIwMjMtMDMtMjVgIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCmBgYHtyfQ0KIyMgZXgtU3ViMTYgY29taW5nIGluICMjIw0KbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCA8LSBsYXN0X2NvbXBfZGVidXQgJT4lIHJpZ2h0X2pvaW4oZWxvLjIyLmFjY3VtLnRvX3N1YjE4LCBieT0iY29tcGV0aXRvciIpDQpsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0IDwtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbIWlzLm5hKGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDNdKSxdDQojDQpsYXN0X2NvbXBfZGVidXQgPC0gbGFzdF9jb21wX2RlYnV0ICU+JSBhbnRpX2pvaW4obGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQpuLmRlYnV0LmZyb21fbHdyX2NhdCA9IG5yb3cobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCkNCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGFzdC5jb21wICU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KTjtuLmRlYnV0DQpSIDwtIGxhc3QuY29tcC5jYWxjJFIubmV3WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksMV0NClRlYW0gPC0gbGFzdC5jb21wLmNhbGMkVGVhbS54WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bHRzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdDQpyZXN1bHRzIDwtICh1bmxpc3QocmVzdWx0cykpDQpzdGRldiA8LSBzZChjKDE6KE4rbi5kZWJ1dCtuLmRlYnV0LmZyb21fbHdyX2NhdCkpKQ0KIw0KUi5sd3JfY2F0IDwtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQkUi5uZXcNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUiwgcmVwKDEwMDAsIG4uZGVidXQpLGMoUi5sd3JfY2F0KSApKQ0KbWVkaWFuYSA8LSBtZWRpYW4odW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIHVubGlzdChsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXSkgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs3XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8ubGFzdC5jb21wLm5ldyA8LSBhc190aWJibGUoZWxvLmxhc3QuY29tcC5uZXcpDQojIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpuID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KUi5kZWJ1dCA8LSByZXAoMTAwMCwgbikNCm5hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dFssMV0NClRlYW0gPC0gbGFzdF9jb21wX2RlYnV0JFRlYW0NCiMNClMgPC0gKChtZWRpYW5hIC0gbGFzdF9jb21wX2RlYnV0WywzXSkgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzddIC0gUi5uZXdbLDFdKS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ld1ssMV0pL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZWxvLmxhc3QuY29tcC5uZXcuZGVidXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dFssM10pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFNbLDFdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3WywxXSwyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkpDQoNCiMjIGZyb21fbHdyX0NhdCAjIyMjIyMjIyMjIyMjIyMjIw0KbiA9IG5yb3cobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCkNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gUi5sd3JfY2F0DQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywxXQ0KVGVhbSA8LSB1bmxpc3QobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssMl0pDQojDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbN10gLSBSLm5ld1ssMV0pL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8ubGFzdC5jb21wLm5ldy5kZWJ1dC5sd3JfY2F0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCg0KIyMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmNvbXAubmV3LmRlYnV0LCBlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dC5sd3JfY2F0KQ0KDQoNCiMjIyMjICMjIyMjIyMjIyMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5jb21wLm5ld1tvcmRlcihlbG8ubGFzdC5jb21wLm5ldyRyZXN1bHRzKSxjKDEsMiwzLDQsNiw3LDgpXSkNCg0KYGBgDQoNCiMjIyMjXF8gRWxvIEhpc3RvcnkgXF8NCg0KYGBge3J9DQojIyANCmNvbXBlIDwtICIyMDIzLjEiDQplbG8uaGlzdG9yeS5sYXN0IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSANCiAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSksDQogICAgICAgICBjYXRlZyA9IHJlcCgiU3ViMThGIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgU3ViMThGDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMThGIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IlN1YjE4RiIpICU+JQ0KICAgICAgICAgICAgICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3J+Y29tcCwgdmFsdWUudmFyID0gIlIubmV3IikpIA0KIyMgDQoNCmBgYA0KDQojIyMgRWxvIGluIHRpbWUNCg0KYGBge3IgaW5jbHVkZT1UUlVFLCBmaWcud2lkdGg9IDl9DQpwIDwtIGVsby5oaXN0b3J5ICU+JSANCiAgZmlsdGVyKGNhdGVnPT0iU3ViMThGInxjYXRlZz09IkFic0YiLCBSLm5ldz49MCkgJT4lDQogIGdncGxvdChhZXMoeD0gY29tcCwgeT0gUi5uZXcsIGdyb3VwID0gY29tcGV0aXRvciwgY29sID0gY2F0ZWcpKSArIA0KICBnZW9tX3BvaW50KCkgKyANCiAgZ2VvbV9saW5lKGxpbmV0eXBlPSAiZGFzaGVkIikgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTEwMDAsbGluZXR5cGU9ICJkYXNoZWQiKQ0KDQojcA0KZ2dwbG90bHkocCkNCmBgYA0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgTWFyY2hfMjAyMyoqDQoNCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9VFJVRX0NCmVsby5sYXN0LmFjY3VtDQplbG8ubGFzdC5jb21wLm5ldw0KYGBgDQoNCmBgYHtyIGV2YWw9VFJVRSwgaW5jbHVkZT1UUlVFLCBjb2xzLnByaW50PTd9DQoNCmVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihlbG8ubGFzdC5jb21wLm5ldyxieT0iY29tcGV0aXRvciIpDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYA0KDQoNCiMjIyAyMDIzIE1hcmNoLUFicw0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQpibG9jLlN1YjE4RltvcmRlcihibG9jLlN1YjE4RiRgMjAyMy0wMy0yNmApLCBjKDEsMiw5LDEwKV0gJT4lIHByaW50KG49NjUpDQpgYGANCg0KIyMjIEVsbyBNYXJjaC1BYnMgMjAyMw0KDQoqLUNvbXBldGl0b3JzID0gYHIgYC0qDQoNCmBgYHtyIGV2YWw9VFJVRSxpbmNsdWRlPVRSVUV9DQpsYXN0LmNvbXAgPC0gYmxvYy5TdWIxOEZbLGMoMSwyLDEwKV0gJT4lIGZpbHRlcihibG9jLlN1YjE4RiRgMjAyMy0wMy0yNmAhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KYGBge3J9DQojI2NvbWluZyBpbiAjIyMNCmxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0ICU+JSBpbm5lcl9qb2luKGVsby4yMi5hY2N1bS50b19zdWIxOCwgYnk9ImNvbXBldGl0b3IiKQ0KbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCA8LSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WyFpcy5uYShsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSksXQ0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3RfY29tcF9kZWJ1dCAlPiUgYW50aV9qb2luKGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQsIGJ5PSJjb21wZXRpdG9yIikNCmBgYA0KDQpgYGB7ciBldmFsPSBUUlVFLGluY2x1ZGU9VFJVRSwgY29scy5wcmludD0gN30NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0Kbi5kZWJ1dCA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGFzdC5jb21wICU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDFdDQpUZWFtIDwtIGxhc3QuY29tcC5jYWxjJFRlYW0ueFshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXQ0KcmVzdWx0cyA8LSAodW5saXN0KHJlc3VsdHMpKQ0Kc3RkZXYgPC0gc2QoYygxOihOK24uZGVidXQpKSkNCiMNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUiwgcmVwKDEwMDAsIG4uZGVidXQgKSkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApKQ0KDQoNCmVsby5sYXN0LmNvbXAubmV3IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLmxhc3QuY29tcC5uZXdbb3JkZXIoZWxvLmxhc3QuY29tcC5uZXckcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYA0KDQojIyMjI1xfIEVsbyBIaXN0b3J5IFxfDQoNCmBgYHtyfQ0KIyMgDQpjb21wZSA8LSAiMjAyMy4xLUFicyINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSwNCiAgICAgICAgIGNhdGVnID0gcmVwKCJBYnNGIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgU3ViMThGDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMThGIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IkFic0YiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGANCg0KIyMjIEVsbyBpbiB0aW1lDQoNCmBgYHtyIGluY2x1ZGU9VFJVRSwgZmlnLndpZHRoPSAxNn0NCnAgPC0gZWxvLmhpc3RvcnkgJT4lIA0KICBmaWx0ZXIoY2F0ZWc9PSJTdWIxOEYifGNhdGVnPT0iQWJzRiIsIFIubmV3Pj0wKSAlPiUNCiAgZ2dwbG90KGFlcyh4PSBjb21wLCB5PSBSLm5ldywgZ3JvdXAgPSBjb21wZXRpdG9yLCBjb2wgPSBUZWFtKSkgKyANCiAgZ2VvbV9wb2ludCgpICsgDQogIGdlb21fbGluZShsaW5ldHlwZT0gImRhc2hlZCIpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdD0xMDAwLGxpbmV0eXBlPSAiZGFzaGVkIikNCg0KI3ANCmdncGxvdGx5KHApDQpgYGANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIFNlY29uZF8yMDIzKioNCg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9VFJVRSwgY29scy5wcmludD03fQ0KDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcC5uZXcsYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGANCg0KIyMjIDIwMjMgTWF5DQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCmJsb2MuU3ViMThGW29yZGVyKGJsb2MuU3ViMThGJGAyMDIzLTA1LTIwYCksIGMoMSwyLDExKV0gJT4lIHByaW50KG49NjUpDQpgYGANCg0KIyMjIEVsbyAyMDIzIE1heQ0KDQoqLUNvbXBldGl0b3JzID0gYHIgYC0qDQoNCmBgYHtyIGV2YWw9VFJVRSxpbmNsdWRlPVRSVUV9DQpsYXN0LmNvbXAgPC0gYmxvYy5TdWIxOEZbLGMoMSwyLDExKV0gJT4lIGZpbHRlcihibG9jLlN1YjE4RiRgMjAyMy0wNS0yMGAhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KYGBge3J9DQojI2NvbWluZyBpbiAjIyMNCmxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0ICU+JSByaWdodF9qb2luKGVsby4yMi5hY2N1bS50b19zdWIxOCwgYnk9ImNvbXBldGl0b3IiKQ0KbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCA8LSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WyFpcy5uYShsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSksXQ0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3RfY29tcF9kZWJ1dCAlPiUgYW50aV9qb2luKGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQsIGJ5PSJjb21wZXRpdG9yIikNCmBgYA0KDQoNCg0KDQpgYGB7ciBldmFsPSBUUlVFLGluY2x1ZGU9VFJVRSwgY29scy5wcmludD0gN30NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0Kbi5kZWJ1dCA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGFzdC5jb21wICU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDFdDQpUZWFtIDwtIGxhc3QuY29tcC5jYWxjJFRlYW0ueFshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXQ0KcmVzdWx0cyA8LSAodW5saXN0KHJlc3VsdHMpKQ0Kc3RkZXYgPC0gc2QoYygxOihOK24uZGVidXQpKSkNCiMNCg0KUi5sd3JfY2F0IDwtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQkUi5uZXcNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUiwgcmVwKDEwMDAsIG4uZGVidXQgKSxSLmx3cl9jYXQpKQ0KbWVkaWFuYSA8LSBtZWRpYW4odW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIHVubGlzdChsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXSkgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8ubGFzdC5jb21wLm5ldyA8LSBhc190aWJibGUoZWxvLmxhc3QuY29tcC5uZXcpDQojIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4gPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQpOIDwtIGxlbmd0aCh1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQpSLmRlYnV0IDwtIHJlcCgxMDAwLCBuKQ0KbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0WywxXQ0KVGVhbSA8LSBsYXN0X2NvbXBfZGVidXQkVGVhbQ0KI2NhdGVnIDwtIGJsb2MuU3ViMTZGLmFfYg0KUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0WywzXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCg0KIyMgZnJvbV9sd3JfQ2F0ICMjIyMjIyMjIyMjIyMjIyMjDQpuID0gbnJvdyhsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0KQ0KTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KUi5kZWJ1dCA8LSBSLmx3cl9jYXQNCm5hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDFdDQpUZWFtIDwtIHVubGlzdChsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywyXSkNCiNjYXRlZyA8LSBibG9jLlN1YjE2Ri5hX2INClMgPC0gKChtZWRpYW5hIC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0Lmx3cl9jYXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApKQ0KDQojIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQsIGVsby5sYXN0LmNvbXAubmV3LmRlYnV0Lmx3cl9jYXQpDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGANCg0KIyMjIyNcXyBFbG8gSGlzdG9yeSBcXw0KDQpgYGB7cn0NCiMjIA0KY29tcGU9ICIyMDIzLjIiDQplbG8uaGlzdG9yeS5sYXN0IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSANCiAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSksDQogICAgICAgICBjYXRlZyA9IHJlcCgiU3ViMThGIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgU3ViMThGDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMThGIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IlN1YjE4RiIpICU+JQ0KICAgICAgICAgICAgICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3J+Y29tcCwgdmFsdWUudmFyID0gIlIubmV3IikpIA0KIyMgDQoNCmBgYA0KDQojIyMgRWxvIGluIHRpbWUNCg0KYGBge3IgaW5jbHVkZT1UUlVFLCBmaWcud2lkdGg9IDE2fQ0KcCA8LSBlbG8uaGlzdG9yeSAlPiUgDQogIGZpbHRlcihjYXRlZz09IlN1YjE4RiJ8Y2F0ZWc9PSJBYnNGIiwgUi5uZXc+PTApICU+JQ0KICBnZ3Bsb3QoYWVzKHg9IGNvbXAsIHk9IFIubmV3LCBncm91cCA9IGNvbXBldGl0b3IsIGNvbCA9IFRlYW0pKSArIA0KICBnZW9tX3BvaW50KCkgKyANCiAgZ2VvbV9saW5lKGxpbmV0eXBlPSAiZGFzaGVkIikgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTEwMDAsbGluZXR5cGU9ICJkYXNoZWQiKQ0KDQojcA0KZ2dwbG90bHkocCkNCmBgYA0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgVGhpcmRfMjAyMyoqDQoNCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9VFJVRX0NCmVsby5sYXN0LmFjY3VtDQplbG8ubGFzdC5jb21wLm5ldw0KYGBgDQoNCmBgYHtyIGV2YWw9VFJVRSwgaW5jbHVkZT1UUlVFLCBjb2xzLnByaW50PTd9DQoNCmVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihlbG8ubGFzdC5jb21wLm5ldyxieT0iY29tcGV0aXRvciIpDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYA0KDQojIyMgMjAyMyBNYXktQWJzDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCmJsb2MuU3ViMThGW29yZGVyKGJsb2MuU3ViMThGJGAyMDIzLTA1LTIxYCksIGMoMSwyLDEyKV0gJT4lIHByaW50KG49NjUpDQpgYGANCg0KIyMjIEVsbyBNYXktQWJzIDIwMjMNCg0KKi1Db21wZXRpdG9ycyA9IGByIGAtKg0KDQpgYGB7ciBldmFsPVRSVUUsaW5jbHVkZT1UUlVFfQ0KbGFzdC5jb21wIDwtIGJsb2MuU3ViMThGWyxjKDEsMiwxMildICU+JSBmaWx0ZXIoYmxvYy5TdWIxOEYkYDIwMjMtMDUtMjFgIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1UUlVFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KIyMjDQpsYXN0LmNvbXAuY2FsYyA8LSBsYXN0LmNvbXAgJT4lIHJpZ2h0X2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCiMjIw0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkY29tcGV0aXRvclshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0pDQpSIDwtIGxhc3QuY29tcC5jYWxjJFIubmV3WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksMV0NClRlYW0gPC0gbGFzdC5jb21wLmNhbGMkVGVhbS54WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bHRzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdDQpyZXN1bHRzIDwtICh1bmxpc3QocmVzdWx0cykpDQpzdGRldiA8LSBzZChjKDE6KE4rbi5kZWJ1dCkpKQ0KIw0KYXZnLnBsYXllciA8LSBtZWRpYW4oYyhSDQogICAgICAgICAgICAgICAgICAgICAgICwgDQogICAgICAgICAgICAgICAgICAgICAgIHJlcCgxMDAwLCBuLmRlYnV0ICkNCiAgICAgICAgICAgICAgICAgICAgICAgKSkNCm1lZGlhbmEgPC0gbWVkaWFuKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSB1bmxpc3QobGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10pICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLVIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksICIlIiApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLmxhc3QuY29tcC5uZXcgPC0gYXNfdGliYmxlKGVsby5sYXN0LmNvbXAubmV3KQ0KIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KUi5kZWJ1dCA8LSByZXAoMTAwMCwgbikNCm5hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dFssMV0NClRlYW0gPC0gbGFzdF9jb21wX2RlYnV0JFRlYW0NCiNjYXRlZyA8LSBibG9jLlN1YjE2Ri5hX2INClMgPC0gKChtZWRpYW5hIC0gbGFzdF9jb21wX2RlYnV0WywzXSkgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXdbLDFdKS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ld1ssMV0pL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZWxvLmxhc3QuY29tcC5uZXcuZGVidXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dFssM10pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFNbLDFdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3WywxXSwyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkpDQoNCg0KZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmNvbXAubmV3LmRlYnV0KQ0KDQoNCiMjIyMjICMjIyMjIyMjIyMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5jb21wLm5ld1tvcmRlcihlbG8ubGFzdC5jb21wLm5ldyRyZXN1bHRzKSxjKDEsMiwzLDQsNiw3LDgpXSkNCg0KYGBgDQoNCiMjIyMjXF8gRWxvIEhpc3RvcnkgXF8NCg0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyMy4yLUFicyINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSwNCiAgICAgICAgIGNhdGVnID0gcmVwKCJBYnNGIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgU3ViMThGDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMThGIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IkFic0YiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGANCg0KIyMjIEVsbyBpbiB0aW1lDQoNCmBgYHtyIGluY2x1ZGU9VFJVRSwgZmlnLndpZHRoPSAxNn0NCnAgPC0gZWxvLmhpc3RvcnkgJT4lIA0KICBmaWx0ZXIoY2F0ZWc9PSJTdWIxOEYifGNhdGVnPT0iQWJzRiIsIFIubmV3Pj0wKSAlPiUNCiAgZ2dwbG90KGFlcyh4PSBjb21wLCB5PSBSLm5ldywgZ3JvdXAgPSBjb21wZXRpdG9yLCBjb2wgPSBUZWFtKSkgKyANCiAgZ2VvbV9wb2ludCgpICsgDQogIGdlb21fbGluZShsaW5ldHlwZT0gImRhc2hlZCIpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdD0xMDAwLGxpbmV0eXBlPSAiZGFzaGVkIikNCg0KI3ANCmdncGxvdGx5KHApDQpgYGANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIE1heS1BYnNfMjAyMyoqDQoNCmBgYHtyIGV2YWw9VFJVRSwgaW5jbHVkZT1UUlVFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9N30NCg0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgDQoNCg0KDQojIyMgMjAyMyBKdW5lDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCmJsb2MuU3ViMThGW29yZGVyKGJsb2MuU3ViMThGJGAyMDIzLTA2LTAyYCksIGMoMSwyLDEzKV0gJT4lIHByaW50KG49NjUpDQpgYGANCg0KIyMjIEVsbyAyMDIzIEp1bmUNCg0KKi1Db21wZXRpdG9ycyA9IGByIGAtKg0KDQpgYGB7ciBldmFsPVRSVUUsaW5jbHVkZT1UUlVFfQ0KbGFzdC5jb21wIDwtIGJsb2MuU3ViMThGWyxjKDEsMiwxMyldICU+JSBmaWx0ZXIoYmxvYy5TdWIxOEYkYDIwMjMtMDYtMDJgIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCmBgYHtyfQ0KIyNjb21pbmcgaW4gIyMjDQpsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0IDwtIGxhc3RfY29tcF9kZWJ1dCAlPiUgcmlnaHRfam9pbihlbG8uMjIuYWNjdW0udG9fc3ViMTgsIGJ5PSJjb21wZXRpdG9yIikNCmxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFshaXMubmEobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssM10pLF0NCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0X2NvbXBfZGVidXQgJT4lIGFudGlfam9pbihsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0LCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KDQoNCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKGMoMTooTituLmRlYnV0KSkpDQojDQoNCiNSLmx3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCRSLm5ldw0KYXZnLnBsYXllciA8LSBtZWRpYW4oYyhSLCByZXAoMTAwMCwgbi5kZWJ1dCApDQogICAgICAgICAgICAgICAgICAgICAgICMsUi5sd3JfY2F0DQogICAgICAgICAgICAgICAgICAgICAgICkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApKQ0KDQojIyBmcm9tX2x3cl9DYXQgIyMjIyMjIyMjIyMjIyMjIyMNCiNuID0gbnJvdyhsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0KQ0KI04gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNCiNSLmRlYnV0IDwtIFIubHdyX2NhdA0KI25hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDFdDQojVGVhbSA8LSB1bmxpc3QobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssMl0pDQojY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQojUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSkgLyBzdGRldikgLyBtYXguc3RkDQojRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQojUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQojbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQojUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCiNtYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNCiNQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ld1ssMV0pL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KI2Vsby5sYXN0LmNvbXAubmV3LmRlYnV0Lmx3cl9jYXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogIyAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICMgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gI3VubGlzdChsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSksDQogICAgIyAgICAgICAgICAgICAgICAgICAgICAgUyA9IFNbLDFdLA0KICAgICAjICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAjICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICMgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAjICAgICAgICAgICAgICAgICAgKSkNCg0KIyMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmNvbXAubmV3LmRlYnV0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIywgZWxvLmxhc3QuY29tcC5uZXcuZGVidXQubHdyX2NhdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLmxhc3QuY29tcC5uZXdbb3JkZXIoZWxvLmxhc3QuY29tcC5uZXckcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYA0KDQojIyMjI1xfIEVsbyBIaXN0b3J5IFxfDQoNCmBgYHtyfQ0KIyMgDQpjb21wZT0gIjIwMjMuMyINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSwNCiAgICAgICAgIGNhdGVnID0gcmVwKCJTdWIxOEYiLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpKQ0KDQojDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCg0KIyB0aW1lLXNlcmllcyBkYXRhLmZyYW1lDQojIyBTdWIxOEYNCmVsby5oaXN0b3J5LnRfc2VyaWVzLlMxOEYgPC0gDQogIGFzX3RpYmJsZShlbG8uaGlzdG9yeSAlPiUNCiAgICAgICAgICAgICAgZmlsdGVyKGNhdGVnPT0iU3ViMThGIikgJT4lDQogICAgICAgICAgICAgIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvcn5jb21wLCB2YWx1ZS52YXIgPSAiUi5uZXciKSkgDQojIyANCg0KYGBgDQoNCiMjIyBFbG8gaW4gdGltZQ0KDQpgYGB7ciBpbmNsdWRlPVRSVUUsIGZpZy53aWR0aD0gMTZ9DQpwIDwtIGVsby5oaXN0b3J5ICU+JSANCiAgZmlsdGVyKGNhdGVnPT0iU3ViMThGInxjYXRlZz09IkFic0YiLCBSLm5ldz49MCkgJT4lDQogIGdncGxvdChhZXMoeD0gY29tcCwgeT0gUi5uZXcsIGdyb3VwID0gY29tcGV0aXRvciwgY29sID0gVGVhbSkpICsgDQogIGdlb21fcG9pbnQoKSArIA0KICBnZW9tX2xpbmUobGluZXR5cGU9ICJkYXNoZWQiKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9MTAwMCxsaW5ldHlwZT0gImRhc2hlZCIpDQoNCiNwDQpnZ3Bsb3RseShwKQ0KYGBgDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBKdW5lXzIwMjMqKg0KDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQplbG8ubGFzdC5hY2N1bQ0KZWxvLmxhc3QuY29tcC5uZXcNCmBgYA0KDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9VFJVRSwgY29scy5wcmludD03fQ0KDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcC5uZXcsYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGANCg0KDQojIyMgMjAyMyBKdW5lLUFicw0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQpibG9jLlN1YjE4RltvcmRlcihibG9jLlN1YjE4RiRgMjAyMy0wNi0wM2ApLCBjKDEsMiwxNCldICU+JSBwcmludChuPTY1KQ0KYGBgDQoNCiMjIyBFbG8gSnVuZS1BYnMgMjAyMw0KDQoqLUNvbXBldGl0b3JzID0gYHIgYC0qDQoNCmBgYHtyIGV2YWw9VFJVRSxpbmNsdWRlPVRSVUV9DQpsYXN0LmNvbXAgPC0gYmxvYy5TdWIxOEZbLGMoMSwyLDE0KV0gJT4lIGZpbHRlcihibG9jLlN1YjE4RiRgMjAyMy0wNi0wM2AhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKGMoMTooTituLmRlYnV0KSkpDQojDQphdmcucGxheWVyIDwtIG1lZGlhbihjKFINCiAgICAgICAgICAgICAgICAgICAgICAgIywgDQogICAgICAgICAgICAgICAgICAgICAgICNyZXAoMTAwMCwgbi5kZWJ1dCApDQogICAgICAgICAgICAgICAgICAgICAgICkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KI24gPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KI1IuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQojbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0WywxXQ0KI1RlYW0gPC0gbGFzdF9jb21wX2RlYnV0JFRlYW0NCiNjYXRlZyA8LSBibG9jLlN1YjE2Ri5hX2INCiNTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KI0UgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KI1IubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KI21heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KI1Byb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQojbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQojUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiNlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAjICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgIyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0WywzXSksDQogICAgIyAgICAgICAgICAgICAgICAgICAgICAgUyA9IFNbLDFdLA0KICAgICAjICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAjICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICMgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAjICAgICAgICAgICAgICAgICAgKSkNCg0KDQojZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmNvbXAubmV3LmRlYnV0KQ0KDQoNCiMjIyMjICMjIyMjIyMjIyMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5jb21wLm5ld1tvcmRlcihlbG8ubGFzdC5jb21wLm5ldyRyZXN1bHRzKSxjKDEsMiwzLDQsNiw3LDgpXSkNCg0KYGBgDQoNCiMjIyMjXF8gRWxvIEhpc3RvcnkgXF8NCg0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyMy4zLUFicyINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSwNCiAgICAgICAgIGNhdGVnID0gcmVwKCJBYnNGIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgU3ViMThGDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMThGIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IkFic0YiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGANCg0KIyMjIEVsbyBpbiB0aW1lDQoNCmBgYHtyIGluY2x1ZGU9VFJVRSwgZmlnLndpZHRoPSAxNn0NCnAgPC0gZWxvLmhpc3RvcnkgJT4lIA0KICBmaWx0ZXIoY2F0ZWc9PSJTdWIxOEYifGNhdGVnPT0iQWJzRiIsIFIubmV3Pj0wKSAlPiUNCiAgZ2dwbG90KGFlcyh4PSBjb21wLCB5PSBSLm5ldywgZ3JvdXAgPSBjb21wZXRpdG9yLCBjb2wgPSBUZWFtKSkgKyANCiAgZ2VvbV9wb2ludCgpICsgDQogIGdlb21fbGluZShsaW5ldHlwZT0gImRhc2hlZCIpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdD0xMDAwLGxpbmV0eXBlPSAiZGFzaGVkIikNCg0KI3ANCmdncGxvdGx5KHApDQpgYGANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIEp1bmUtQWJzXzIwMjMqKg0KDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9VFJVRX0NCmVsby5sYXN0LmFjY3VtDQplbG8ubGFzdC5jb21wLm5ldw0KYGBgDQoNCmBgYHtyIGV2YWw9VFJVRSwgaW5jbHVkZT1UUlVFLCBjb2xzLnByaW50PTd9DQoNCmVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihlbG8ubGFzdC5jb21wLm5ldyxieT0iY29tcGV0aXRvciIpDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYA0KDQoNCiMjIyAyMDIzIE5vdg0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQpibG9jLlN1YjE4RltvcmRlcihibG9jLlN1YjE4RiRgMjAyMy0xMS0xMGApLCBjKDEsMiwxNSldICU+JSBwcmludChuPTY1KQ0KYGBgDQoNCiMjIyBFbG8gMjAyMyBOb3YNCg0KKi1Db21wZXRpdG9ycyA9IGByIGAtKg0KDQpgYGB7ciBldmFsPVRSVUUsaW5jbHVkZT1UUlVFfQ0KbGFzdC5jb21wIDwtIGJsb2MuU3ViMThGWyxjKDEsMiwxNSldICU+JSBmaWx0ZXIoYmxvYy5TdWIxOEYkYDIwMjMtMTEtMTBgIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCmBgYHtyfQ0KIyNjb21pbmcgaW4gIyMjDQpsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0IDwtIGxhc3RfY29tcF9kZWJ1dCAlPiUgcmlnaHRfam9pbihlbG8uMjIuYWNjdW0udG9fc3ViMTgsIGJ5PSJjb21wZXRpdG9yIikNCmxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFshaXMubmEobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssM10pLF0NCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0X2NvbXBfZGVidXQgJT4lIGFudGlfam9pbihsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0LCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KDQoNCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKGMoMTooTituLmRlYnV0KSkpDQojDQoNCiNSLmx3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCRSLm5ldw0KYXZnLnBsYXllciA8LSBtZWRpYW4oYyhSLCByZXAoMTAwMCwgbi5kZWJ1dCApDQogICAgICAgICAgICAgICAgICAgICAgICMsUi5sd3JfY2F0DQogICAgICAgICAgICAgICAgICAgICAgICkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KI24gPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KI1IuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQojbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0WywxXQ0KI1RlYW0gPC0gbGFzdF9jb21wX2RlYnV0JFRlYW0NCiNjYXRlZyA8LSBibG9jLlN1YjE2Ri5hX2INCiNTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KI0UgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KI1IubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KI21heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KI1Byb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQojbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQojUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiNlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAjICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgIyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0WywzXSksDQogICAgIyAgICAgICAgICAgICAgICAgICAgICAgUyA9IFNbLDFdLA0KICAgICAjICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAjICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICMgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAjICAgICAgICAgICAgICAgICAgKSkNCg0KIyMgZnJvbV9sd3JfQ2F0ICMjIyMjIyMjIyMjIyMjIyMjDQojbiA9IG5yb3cobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCkNCiNOIDwtIGxlbmd0aCh1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQojUi5kZWJ1dCA8LSBSLmx3cl9jYXQNCiNuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywxXQ0KI1RlYW0gPC0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDJdKQ0KI2NhdGVnIDwtIGJsb2MuU3ViMTZGLmFfYg0KI1MgPC0gKChtZWRpYW5hIC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KI0UgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KI1IubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KI21heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KI1Byb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQojbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQojUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiNlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dC5sd3JfY2F0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICMgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICMgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAjICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9ICN1bmxpc3QobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssM10pLA0KICAgICMgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgIyAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgIyAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAjICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgIyAgICAgICAgICAgICAgICAgICkpDQoNCiMjIyMNCiNlbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjLCBlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dC5sd3JfY2F0DQojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLmxhc3QuY29tcC5uZXdbb3JkZXIoZWxvLmxhc3QuY29tcC5uZXckcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYA0KDQojIyMjI1xfIEVsbyBIaXN0b3J5IFxfDQoNCmBgYHtyfQ0KIyMgDQpjb21wZT0gIjIwMjMuNCINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSwNCiAgICAgICAgIGNhdGVnID0gcmVwKCJTdWIxOEYiLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpKQ0KDQojDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCg0KIyB0aW1lLXNlcmllcyBkYXRhLmZyYW1lDQojIyBTdWIxOEYNCmVsby5oaXN0b3J5LnRfc2VyaWVzLlMxOEYgPC0gDQogIGFzX3RpYmJsZShlbG8uaGlzdG9yeSAlPiUNCiAgICAgICAgICAgICAgZmlsdGVyKGNhdGVnPT0iU3ViMThGIikgJT4lDQogICAgICAgICAgICAgIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvcn5jb21wLCB2YWx1ZS52YXIgPSAiUi5uZXciKSkgDQojIyANCg0KYGBgDQoNCiMjIyBFbG8gaW4gdGltZQ0KDQpgYGB7ciBpbmNsdWRlPVRSVUUsIGZpZy53aWR0aD0gMTZ9DQpwIDwtIGVsby5oaXN0b3J5ICU+JSANCiAgZmlsdGVyKGNhdGVnPT0iU3ViMThGInxjYXRlZz09IkFic0YiLCBSLm5ldz49MCkgJT4lDQogIGdncGxvdChhZXMoeD0gY29tcCwgeT0gUi5uZXcsIGdyb3VwID0gY29tcGV0aXRvciwgY29sID0gVGVhbSkpICsgDQogIGdlb21fcG9pbnQoKSArIA0KICBnZW9tX2xpbmUobGluZXR5cGU9ICJkYXNoZWQiKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9MTAwMCxsaW5ldHlwZT0gImRhc2hlZCIpDQoNCiNwDQpnZ3Bsb3RseShwKQ0KYGBgDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBOb3ZfMjAyMyoqDQoNCmBgYHtyIGV2YWw9RkFMU0UsIGluY2x1ZGU9VFJVRX0NCmVsby5sYXN0LmFjY3VtDQplbG8ubGFzdC5jb21wLm5ldw0KYGBgDQoNCmBgYHtyIGV2YWw9VFJVRSwgaW5jbHVkZT1UUlVFLCBjb2xzLnByaW50PTd9DQoNCmVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihlbG8ubGFzdC5jb21wLm5ldyxieT0iY29tcGV0aXRvciIpDQoNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCmBgYA0KDQoNCiMjIyAyMDIzIE5vdi1TdWIyMA0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQpibG9jLlN1YjE4RltvcmRlcihibG9jLlN1YjE4RiRgMjAyMy0xMS0xMWApLCBjKDEsMiwxNildICU+JSBwcmludChuPTY1KQ0KYGBgDQoNCiMjIyBFbG8gMjAyMyBOb3YtU3ViMjANCg0KKi1Db21wZXRpdG9ycyA9IGByYC0qDQoNCmBgYHtyIGV2YWw9VFJVRSxpbmNsdWRlPVRSVUV9DQpsYXN0LmNvbXAgPC0gYmxvYy5TdWIxOEZbLGMoMSwyLDE2KV0gJT4lIGZpbHRlcihibG9jLlN1YjE4RiRgMjAyMy0xMS0xMWAhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KYGBge3J9DQojI2NvbWluZyBpbiAjIyMNCmxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0ICU+JSByaWdodF9qb2luKGVsby4yMi5hY2N1bS50b19zdWIxOCwgYnk9ImNvbXBldGl0b3IiKQ0KbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCA8LSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WyFpcy5uYShsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSksXQ0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3RfY29tcF9kZWJ1dCAlPiUgYW50aV9qb2luKGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQsIGJ5PSJjb21wZXRpdG9yIikNCmBgYA0KDQoNCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKGMoMTooTituLmRlYnV0KSkpDQojDQoNCiNSLmx3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCRSLm5ldw0KYXZnLnBsYXllciA8LSBtZWRpYW4oYyhSLCByZXAoMTAwMCwgbi5kZWJ1dCApDQogICAgICAgICAgICAgICAgICAgICAgICMsUi5sd3JfY2F0DQogICAgICAgICAgICAgICAgICAgICAgICkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzddIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs3XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApKQ0KDQojIyBmcm9tX2x3cl9DYXQgIyMjIyMjIyMjIyMjIyMjIyMNCiNuID0gbnJvdyhsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0KQ0KI04gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNCiNSLmRlYnV0IDwtIFIubHdyX2NhdA0KI25hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDFdDQojVGVhbSA8LSB1bmxpc3QobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssMl0pDQojY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQojUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSkgLyBzdGRldikgLyBtYXguc3RkDQojRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQojUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQojbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQojUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCiNtYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNCiNQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ld1ssMV0pL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KI2Vsby5sYXN0LmNvbXAubmV3LmRlYnV0Lmx3cl9jYXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogIyAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICMgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gI3VubGlzdChsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSksDQogICAgIyAgICAgICAgICAgICAgICAgICAgICAgUyA9IFNbLDFdLA0KICAgICAjICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAjICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICMgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAjICAgICAgICAgICAgICAgICAgKSkNCg0KIyMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmNvbXAubmV3LmRlYnV0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIywgZWxvLmxhc3QuY29tcC5uZXcuZGVidXQubHdyX2NhdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLmxhc3QuY29tcC5uZXdbb3JkZXIoZWxvLmxhc3QuY29tcC5uZXckcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYA0KDQojIyMjI1xfIEVsbyBIaXN0b3J5IFxfDQoNCmBgYHtyfQ0KIyMgDQpjb21wZT0gIjIwMjMuNC0yMCINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSwNCiAgICAgICAgIGNhdGVnID0gcmVwKCJTdWIyMEYiLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpKQ0KDQojDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCg0KIyB0aW1lLXNlcmllcyBkYXRhLmZyYW1lDQojIyBTdWIxOEYNCmVsby5oaXN0b3J5LnRfc2VyaWVzLlMxOEYgPC0gDQogIGFzX3RpYmJsZShlbG8uaGlzdG9yeSAlPiUNCiAgICAgICAgICAgICAgZmlsdGVyKGNhdGVnPT0iU3ViMjBGIikgJT4lDQogICAgICAgICAgICAgIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvcn5jb21wLCB2YWx1ZS52YXIgPSAiUi5uZXciKSkgDQojIyANCg0KYGBgDQoNCiMjIyBFbG8gaW4gdGltZQ0KDQpgYGB7ciBpbmNsdWRlPVRSVUUsIGZpZy53aWR0aD0gMTZ9DQpwIDwtIGVsby5oaXN0b3J5ICU+JSANCiAgZmlsdGVyKGNhdGVnPT0iU3ViMThGInxjYXRlZz09IkFic0YifGNhdGVnPT0iU3ViMjBGIiwgUi5uZXc+PTApICU+JQ0KICBnZ3Bsb3QoYWVzKHg9IGNvbXAsIHk9IFIubmV3LCBncm91cCA9IGNvbXBldGl0b3IsIGNvbCA9IFRlYW0pKSArIA0KICBnZW9tX3BvaW50KCkgKyANCiAgZ2VvbV9saW5lKGxpbmV0eXBlPSAiZGFzaGVkIikgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTEwMDAsbGluZXR5cGU9ICJkYXNoZWQiKQ0KDQojcA0KZ2dwbG90bHkocCkNCmBgYA0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgTm92LVN1YjIwXzIwMjMqKg0KDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQplbG8ubGFzdC5hY2N1bQ0KZWxvLmxhc3QuY29tcC5uZXcNCmBgYA0KDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9VFJVRSwgY29scy5wcmludD03fQ0KDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcC5uZXcsYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGANCg0KDQoNCiMjIyAyMDIzIE5vdi1BYnMNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KYmxvYy5TdWIxOEZbb3JkZXIoYmxvYy5TdWIxOEYkYDIwMjMtMTEtMTJgKSwgYygxLDIsMTcpXSAlPiUgcHJpbnQobj02NSkNCmBgYA0KDQojIyMgRWxvIDIwMjMgTm92LUFicw0KDQoqLUNvbXBldGl0b3JzID0gYHIgYC0qDQoNCmBgYHtyIGV2YWw9VFJVRSxpbmNsdWRlPVRSVUV9DQpsYXN0LmNvbXAgPC0gYmxvYy5TdWIxOEZbLGMoMSwyLDE3KV0gJT4lIGZpbHRlcihibG9jLlN1YjE4RiRgMjAyMy0xMS0xMmAhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGANCg0KYGBge3J9DQojI2NvbWluZyBpbiAjIyMNCmxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0ICU+JSByaWdodF9qb2luKGVsby4yMi5hY2N1bS50b19zdWIxOCwgYnk9ImNvbXBldGl0b3IiKQ0KbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCA8LSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WyFpcy5uYShsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSksXQ0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3RfY29tcF9kZWJ1dCAlPiUgYW50aV9qb2luKGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQsIGJ5PSJjb21wZXRpdG9yIikNCmBgYA0KDQoNCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKGMoMTooTituLmRlYnV0KSkpDQojDQoNCiNSLmx3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCRSLm5ldw0KYXZnLnBsYXllciA8LSBtZWRpYW4oYyhSLCByZXAoMTAwMCwgbi5kZWJ1dCApDQogICAgICAgICAgICAgICAgICAgICAgICMsUi5sd3JfY2F0DQogICAgICAgICAgICAgICAgICAgICAgICkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApKQ0KDQojIyBmcm9tX2x3cl9DYXQgIyMjIyMjIyMjIyMjIyMjIyMNCiNuID0gbnJvdyhsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0KQ0KI04gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNCiNSLmRlYnV0IDwtIFIubHdyX2NhdA0KI25hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDFdDQojVGVhbSA8LSB1bmxpc3QobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssMl0pDQojY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQojUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSkgLyBzdGRldikgLyBtYXguc3RkDQojRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQojUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQojbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQojUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCiNtYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNCiNQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ld1ssMV0pL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KI2Vsby5sYXN0LmNvbXAubmV3LmRlYnV0Lmx3cl9jYXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogIyAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICMgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gI3VubGlzdChsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSksDQogICAgIyAgICAgICAgICAgICAgICAgICAgICAgUyA9IFNbLDFdLA0KICAgICAjICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAjICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICMgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAjICAgICAgICAgICAgICAgICAgKSkNCg0KIyMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmNvbXAubmV3LmRlYnV0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIywgZWxvLmxhc3QuY29tcC5uZXcuZGVidXQubHdyX2NhdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCg0KDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLmxhc3QuY29tcC5uZXdbb3JkZXIoZWxvLmxhc3QuY29tcC5uZXckcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQoNCmBgYA0KDQojIyMjI1xfIEVsbyBIaXN0b3J5IFxfDQoNCmBgYHtyfQ0KIyMgDQpjb21wZT0gIjIwMjMuNC1BYnMiDQplbG8uaGlzdG9yeS5sYXN0IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSANCiAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSksDQogICAgICAgICBjYXRlZyA9IHJlcCgiQWJzRiIsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSkpDQoNCiMNCmVsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCiMjIFN1YjE4Rg0KZWxvLmhpc3RvcnkudF9zZXJpZXMuUzE4RiA8LSANCiAgYXNfdGliYmxlKGVsby5oaXN0b3J5ICU+JQ0KICAgICAgICAgICAgICBmaWx0ZXIoY2F0ZWc9PSJBYnNGIikgJT4lDQogICAgICAgICAgICAgIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvcn5jb21wLCB2YWx1ZS52YXIgPSAiUi5uZXciKSkgDQojIyANCg0KYGBgDQoNCiMjIyBFbG8gaW4gdGltZQ0KDQpgYGB7ciBpbmNsdWRlPVRSVUUsIGZpZy53aWR0aD0gMTZ9DQpwIDwtIGVsby5oaXN0b3J5ICU+JSANCiAgZmlsdGVyKGNhdGVnPT0iU3ViMThGInxjYXRlZz09IkFic0YifGNhdGVnPT0iU3ViMjBGIiwgUi5uZXc+PTApICU+JQ0KICBnZ3Bsb3QoYWVzKHg9IGNvbXAsIHk9IFIubmV3LCBncm91cCA9IGNvbXBldGl0b3IsIGNvbCA9IFRlYW0pKSArIA0KICBnZW9tX3BvaW50KCkgKyANCiAgZ2VvbV9saW5lKGxpbmV0eXBlPSAiZGFzaGVkIikgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTEwMDAsbGluZXR5cGU9ICJkYXNoZWQiKQ0KDQojcA0KZ2dwbG90bHkocCkNCmBgYA0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgTm92LUFic18yMDIzKioNCg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9N30NCg0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgDQoNCg0KDQojIyMjIEFuY2hvcmluZyAnZWxvLmxhc3QuYWNjdW0nIDIwMjMNCg0KYGBge3IgZWNobz1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KZWxvLjIzLmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtDQpgYGANCg0KIyMjIyBNRVJHSU5HIEZST00gU1VCMTYtMjAyMw0KDQpgYGB7cn0NCmJsb2MuU3ViMTZGIDwtIHJhbmtzICU+JQ0KICBmaWx0ZXIoc3RhZ2U9PSJDbGFzaWZpYyIsDQogICAgICAgICBDYXRlZ29yeT09IlN1YjE2X0YiLA0KICAgICAgICAgeWVhcj09IjIwMjIifHllYXI9PSIyMDIzIiwNCiAgICAgICAgICNOYW1lPT0gbm9tYnJlDQogICAgICAgICApICU+JQ0KICBncm91cF9ieShjb21wZXRpdG9yPSBOYW1lLA0KICAgICAgICAgICBZZWFyPSB5ZWFyLA0KICAgICAgICAgICBDb21wZT0gQ29tcGVfLA0KICAgICAgICAgICBUZWFtID0gVGVhbSwNCiAgICAgICAgICAgRGF0ZT0gRGF0ZSkgJT4lDQogIHJlZnJhbWUocmFuaz0gUmFuaykgJT4lDQogIHJlc2hhcGUyOjpkY2FzdChmb3JtdWxhID0gY29tcGV0aXRvciArIFRlYW0gfiBDb21wZSwgDQogICAgICAgICAgICAgICAgICBuYS5ybSA9IFRSVUUpDQoNCmJsb2MuU3ViMTZGIDwtIGFzX3RpYmJsZShibG9jLlN1YjE2RikNCiMjDQpibG9jLlN1YjE2Ri5kIDwtIGJsb2MuU3ViMTZGWyxjKDEsMiw2KV0gJT4lIGZpbHRlcihibG9jLlN1YjE2RiRkLmJsb2MuZmlyc3QuMjMhPSJOQSIpIA0KIw0KYmxvYy5TdWIxNkYuZC5kZWJ1dCA8LSBibG9jLlN1YjE2Ri5kICU+JSBhbnRpX2pvaW4oZWxvLmMuYmxvYy50aHJkLjIyLmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQoNCg0KDQoNCg0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGJsb2MuU3ViMTZGLmQuZGVidXQkY29tcGV0aXRvcikNCiMjIw0KZCA8LSBibG9jLlN1YjE2Ri5kICU+JSByaWdodF9qb2luKGVsby5jLmJsb2MudGhyZC4yMi5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChkJGNvbXBldGl0b3JbIWlzLm5hKGQkZC5ibG9jLmZpcnN0LjIzKV0pDQpSIDwtIGQkUi5uZXdbIWlzLm5hKGQkZC5ibG9jLmZpcnN0LjIzKV0NCm5hbWVzIDwtIGRbIWlzLm5hKGQkZC5ibG9jLmZpcnN0LjIzKSwxXQ0KVGVhbSA8LSBkJFRlYW0ueFshaXMubmEoZCRkLmJsb2MuZmlyc3QuMjMpXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bHRzIDwtIGJsb2MuU3ViMTZGLmQkZC5ibG9jLmZpcnN0LjIzDQpzdGRldiA8LSBzZChyZXN1bHRzKQ0KIw0KYXZnLnBsYXllciA8LSBtZWRpYW4oYyhSLCByZXAoMTAwMCwgbi5kZWJ1dCApKSkNCm1lZGlhbmEgPC0gbWVkaWFuKGJsb2MuU3ViMTZGJGQuYmxvYy5maXJzdC4yM1shaXMubmEoYmxvYy5TdWIxNkYkZC5ibG9jLmZpcnN0LjIzKV0pDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gZCRkLmJsb2MuZmlyc3QuMjNbIWlzLm5hKGQkZC5ibG9jLmZpcnN0LjIzKV0gKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQoNCmVsby5kLmJsb2MuZmlyc3QuMjMgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBkJGQuYmxvYy5maXJzdC4yM1shaXMubmEoZCRkLmJsb2MuZmlyc3QuMjMpXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5kLmJsb2MuZmlyc3QuMjMgPC0gYXNfdGliYmxlKGVsby5kLmJsb2MuZmlyc3QuMjMpDQoNCiMjIyMjIyMjIyMjDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuID0gbGVuZ3RoKGJsb2MuU3ViMTZGLmQuZGVidXQkZC5ibG9jLmZpcnN0LjIzKQ0KTiA8LSBsZW5ndGgoYmxvYy5TdWIxNkYkZC5ibG9jLmZpcnN0LjIzWyFpcy5uYShibG9jLlN1YjE2RiRkLmJsb2MuZmlyc3QuMjMpXSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBibG9jLlN1YjE2Ri5kLmRlYnV0WywxXQ0KVGVhbSA8LSBibG9jLlN1YjE2Ri5kLmRlYnV0JFRlYW0NCiNjYXRlZyA8LSBibG9jLlN1YjE2Ri5hX2INClMgPC0gKChtZWRpYW5hLSBibG9jLlN1YjE2Ri5kLmRlYnV0JGQuYmxvYy5maXJzdC4yMykgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8uZC5ibG9jLmZpcnN0LjIzJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmQuYmxvYy5maXJzdC4yMyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8uZC5ibG9jLmZpcnN0LjIzLmRlYnV0IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gYmxvYy5TdWIxNkYuZC5kZWJ1dCRkLmJsb2MuZmlyc3QuMjMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5kLmJsb2MuZmlyc3QuMjMuZGVidXQgPC0gYXNfdGliYmxlKGVsby5kLmJsb2MuZmlyc3QuMjMuZGVidXQpDQoNCmVsby5kLmJsb2MuZmlyc3QuMjMgPC0gZWxvLmQuYmxvYy5maXJzdC4yMyAlPiUgcmJpbmQoZWxvLmQuYmxvYy5maXJzdC4yMy5kZWJ1dCkNCg0KDQoNCg0KDQoNCiMgIyBDb3J0ZSBTdWIxNC1TdWIxNiBfMjAyNCAjIyMjICANCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBGaXJzdF8yMDIzKioNCiMjDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8uYy5ibG9jLnRocmQuMjIuYWNjdW0NCmVsby5sYXN0LmNvbXAgPC0gZWxvLmQuYmxvYy5maXJzdC4yMw0KIyMjDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcCxieT0iY29tcGV0aXRvciIpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wICU+JSByYmluZChlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIyMjIDIwMjMgU2Vjb25kICANCmJsb2MuU3ViMTZGW29yZGVyKGJsb2MuU3ViMTZGJGUuYmxvYy5zZWMuMjMpLCBjKDEsMiw2LDcpXSAlPiUgcHJpbnQobj02NSkNCiMjIyBFbG8gU2Vjb25kIDIwMjMgDQpsYXN0LmNvbXAgPC0gYmxvYy5TdWIxNkZbLGMoMSwyLDcpXSAlPiUgZmlsdGVyKGJsb2MuU3ViMTZGJGUuYmxvYy5zZWMuMjMhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KIyMjDQpsYXN0LmNvbXAuY2FsYyA8LSBsYXN0LmNvbXAgJT4lIHJpZ2h0X2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCiMjIw0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkY29tcGV0aXRvclshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0pDQpSIDwtIGxhc3QuY29tcC5jYWxjJFIubmV3WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksMV0NClRlYW0gPC0gbGFzdC5jb21wLmNhbGMkVGVhbS54WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bHRzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdDQpyZXN1bHRzIDwtICh1bmxpc3QocmVzdWx0cykpDQpzdGRldiA8LSBzZChjKDE6KE4rbi5kZWJ1dCkpKQ0KIw0KYXZnLnBsYXllciA8LSBtZWRpYW4oYyhSLCByZXAoMTAwMCwgbi5kZWJ1dCApKSkNCm1lZGlhbmEgPC0gbWVkaWFuKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSB1bmxpc3QobGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10pICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLVIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksICIlIiApIA0KKQ0KZWxvLmxhc3QuY29tcC5uZXcgPC0gYXNfdGliYmxlKGVsby5sYXN0LmNvbXAubmV3KQ0KIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3WywxXSwyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCikpDQojDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQpDQoNCiMjIyBfIEVsbyBIaXN0b3J5IF8NCmVsby5sYXN0LmFjY3VtDQplbG8ubGFzdC5jb21wLm5ldw0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCiMNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50KQ0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kY29tcGV0aXRvciksXQ0KIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSksYygxLDIsNiw3LDgpXSkNCiMNCmJsb2MuU3ViMTZGW29yZGVyKGJsb2MuU3ViMTZGJGYuYmxvYy50aHJkLjIzKSxjKDEsMiw2LDcsOCldICU+JSBmaWx0ZXIoZi5ibG9jLnRocmQuMjMhPSJOQSIgKQ0KIyMjIEVsbyBUaGlyZCAyMDIzIA0KbGFzdC5jb21wIDwtIGJsb2MuU3ViMTZGWyxjKDEsMiw4KV0gJT4lIGZpbHRlcihibG9jLlN1YjE2RiRmLmJsb2MudGhyZC4yMyE9Ik5BIikgDQojDQpsYXN0X2NvbXBfZGVidXQgPC0gbGFzdC5jb21wICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKGMoMTooTituLmRlYnV0KSkpDQojDQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0ICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4odW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIHVubGlzdChsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXSkgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQopDQplbG8ubGFzdC5jb21wLm5ldyA8LSBhc190aWJibGUoZWxvLmxhc3QuY29tcC5uZXcpDQojIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3WywxXSwyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCikpDQojDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQpDQojIyMjIyAjIyMjIyMjIyMjDQprbml0cjo6a2FibGUoZWxvLmxhc3QuY29tcC5uZXdbb3JkZXIoZWxvLmxhc3QuY29tcC5uZXckcmVzdWx0cyksYygxLDIsMyw0LDYsNyw4KV0pDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgVGhpcmRfMjAyMyoqDQplbG8ubGFzdC5hY2N1bQ0KZWxvLmxhc3QuY29tcC5uZXcNCiMNCmVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQgPC0gZWxvLmxhc3QuYWNjdW0gJT4lIGFudGlfam9pbihlbG8ubGFzdC5jb21wLm5ldyxieT0iY29tcGV0aXRvciIpDQojDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQojIyMgMjAyMyBDaGFtcA0KYmxvYy5TdWIxNkZbb3JkZXIoYmxvYy5TdWIxNkYkZy5ibG9jLmNhbXAuMjMpLGMoMSwyLDYsNyw4LDkpXSAlPiUgZmlsdGVyKGcuYmxvYy5jYW1wLjIzIT0iTkEiICkNCiMjIyBFbG8gQ2FtcCAyMDIzIA0KbGFzdC5jb21wIDwtIGJsb2MuU3ViMTZGWyxjKDEsMiw5KV0gJT4lIGZpbHRlcihibG9jLlN1YjE2RiRnLmJsb2MuY2FtcC4yMyE9Ik5BIikgDQojDQpsYXN0X2NvbXBfZGVidXQgPC0gbGFzdC5jb21wICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKGMoMTooTituLmRlYnV0KSkpDQojDQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0ICkpKQ0KbWVkaWFuYSA8LSBtZWRpYW4odW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIHVubGlzdChsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXSkgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQopDQplbG8ubGFzdC5jb21wLm5ldyA8LSBhc190aWJibGUoZWxvLmxhc3QuY29tcC5uZXcpDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4gPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQpOIDwtIGxlbmd0aCh1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQpSLmRlYnV0IDwtIHJlcCgxMDAwLCBuKQ0KbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0WywxXQ0KVGVhbSA8LSBsYXN0X2NvbXBfZGVidXQkVGVhbQ0KIw0KUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8ubGFzdC5jb21wLm5ldy5kZWJ1dCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0WywzXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFNbLDFdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQopKQ0KIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmNvbXAubmV3LmRlYnV0KQ0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIENoYW1wXzIwMjMqKg0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQojDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcC5uZXcsYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCiMjIyogKipDYXB0dXJhbmRvIGxvcyBmdXR1cm9zIFN1YjE4fFN1YjIwfEFicyoqIA0KYmxvYy5TdWIxOEYuMjQgPC0gcmFua3MgJT4lDQogIGZpbHRlcihzdGFnZT09IkNsYXNpZmljIiwNCiAgICAgICAgIENhdGVnb3J5PT0iU3ViMThfRiJ8Q2F0ZWdvcnk9PSJBYnNfRiIsDQogICAgICAgICB5ZWFyPT0iMjAyNCINCiAgICAgICAgICMgICAgIE5hbWU9PSBub21icmUNCiAgKSAlPiUNCiAgZ3JvdXBfYnkoY29tcGV0aXRvcj0gTmFtZSwNCiAgICAgICAgICAgWWVhcj0geWVhciwNCiAgICAgICAgICAgQ29tcGU9IENvbXBlXywNCiAgICAgICAgICAgVGVhbSA9IFRlYW0sDQogICAgICAgICAgIERhdGU9IERhdGUpICU+JQ0KICByZWZyYW1lKHJhbms9IFJhbmspICU+JQ0KICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3IgKyBUZWFtIH4gRGF0ZSwgDQogICAgICAgICAgICAgICAgICBuYS5ybSA9IFRSVUUpDQojDQpibG9jLlN1YjE4Ri4yNCA8LSBhc190aWJibGUoYmxvYy5TdWIxOEYuMjQpDQojIyMqICpfTG9zIHN1YjE2ICJzYWxlbiJfKg0KIyMgZW52aWFuZG8gbG9zIHN1YjE2IGEgb3RybyBhcmNoaXZvDQplbG8uMjMuYWNjdW0udG9fU3ViMTggPC0gZWxvLmxhc3QuYWNjdW0gJT4lIHNlbWlfam9pbihibG9jLlN1YjE4Ri4yNCwgYnk9ImNvbXBldGl0b3IiKQ0KIyMgc3ViMTYgc2FsaWVuZG8NCiNlbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGJsb2MuU3ViMThGLjI0LGJ5PSJjb21wZXRpdG9yIikNCmBgYA0KDQojIyMgMjAyNCBBcHJpbA0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQpibG9jLlN1YjE4RltvcmRlcihibG9jLlN1YjE4RiRgMjAyNC0wNC0xM2ApLCBjKDEsMiwxOCldICU+JSBwcmludChuPTY1KQ0KYGBgDQoNCiMjIyBFbG8gQXByaWwgMjAyNA0KDQoqLUNvbXBldGl0b3JzID0gYHIgYC0qDQoNCmBgYHtyIGV2YWw9VFJVRSxpbmNsdWRlPVRSVUV9DQpsYXN0LmNvbXAgPC0gYmxvYy5TdWIxOEZbLGMoMSwyLDE4KV0gJT4lIGZpbHRlcihibG9jLlN1YjE4RiRgMjAyNC0wNC0xM2AhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby4yMy5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCmBgYHtyfQ0KIyMgZXgtU3ViMTQgY29taW5nIGluICMjIw0KbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCA8LSBsYXN0X2NvbXBfZGVidXQgJT4lIHJpZ2h0X2pvaW4oZWxvLjIzLmFjY3VtLnRvX1N1YjE4LCBieT0iY29tcGV0aXRvciIpDQpsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0IDwtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbIWlzLm5hKGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDNdKSxdDQojDQpsYXN0X2NvbXBfZGVidXQgPC0gbGFzdF9jb21wX2RlYnV0ICU+JSBhbnRpX2pvaW4obGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCiMjIyMgcmUtaW5zdGF0aW5nICdlbG8ubGFzdC5hY2N1bScNCg0KYGBge3IgZWNobz1UUlVFLCBpbmNsdWRlPVRSVUV9DQplbG8ubGFzdC5hY2N1bSA8LSBlbG8uMjMuYWNjdW0gDQpgYGANCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQpuLmRlYnV0LmZyb21fbHdyX2NhdCA9IG5yb3cobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCkNCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGFzdC5jb21wICU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDFdDQpUZWFtIDwtIGxhc3QuY29tcC5jYWxjJFRlYW0ueFshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXQ0KcmVzdWx0cyA8LSAodW5saXN0KHJlc3VsdHMpKQ0Kc3RkZXYgPC0gc2QoYygxOihOK24uZGVidXQrbi5kZWJ1dC5mcm9tX2x3cl9jYXQpKSkNCiMNClIubHdyX2NhdCA8LSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0JFIubmV3DQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0KQ0KICAgICAgICAgICAgICAgICAgICAgICAsDQogICAgICAgICAgICAgICAgICAgICAgIGMoUi5sd3JfY2F0KSANCiAgICAgICAgICAgICAgICAgICAgICAgKSkNCm1lZGlhbmEgPC0gbWVkaWFuKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSB1bmxpc3QobGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10pICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLVIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksICIlIiApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLmxhc3QuY29tcC5uZXcgPC0gYXNfdGliYmxlKGVsby5sYXN0LmNvbXAubmV3KQ0KIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApKQ0KDQojIyBmcm9tX2x3cl9DYXQgIyMjIyMjIyMjIyMjIyMjIyMNCm4gPSBucm93KGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQpDQpOIDwtIGxlbmd0aCh1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQpSLmRlYnV0IDwtIFIubHdyX2NhdA0KbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssMV0NClRlYW0gPC0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDJdKQ0KY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8ubGFzdC5jb21wLm5ldy5kZWJ1dC5sd3JfY2F0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCg0KIyMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmNvbXAubmV3LmRlYnV0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsby5sYXN0LmNvbXAubmV3LmRlYnV0Lmx3cl9jYXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGANCg0KIyMjIyNcXyBFbG8gSGlzdG9yeSBcXw0KDQpgYGB7cn0NCiMjIA0KY29tcGU9ICIyMDI0LjEiDQplbG8uaGlzdG9yeS5sYXN0IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSANCiAgbXV0YXRlKGNvbXAgPSByZXAoY29tcGUsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSksDQogICAgICAgICBjYXRlZyA9IHJlcCgiU3ViMThGIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgU3ViMThGDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMThGIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IlN1YjE4RiIpICU+JQ0KICAgICAgICAgICAgICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3J+Y29tcCwgdmFsdWUudmFyID0gIlIubmV3IikpIA0KIyMgDQoNCmBgYA0KDQojIyMgRWxvIGluIHRpbWUNCg0KYGBge3IgaW5jbHVkZT1UUlVFLCBmaWcud2lkdGg9IDF9DQpwIDwtIGVsby5oaXN0b3J5ICU+JSANCiAgZmlsdGVyKGNhdGVnPT0iU3ViMThGInxjYXRlZz09IkFic0YifGNhdGVnPT0iU3ViMjBGIiwgUi5uZXc+PTApICU+JQ0KICBnZ3Bsb3QoYWVzKHg9IGNvbXAsIHk9IFIubmV3LCBncm91cCA9IGNvbXBldGl0b3IsIGNvbCA9IFRlYW0pKSArIA0KICBnZW9tX3BvaW50KCkgKyANCiAgZ2VvbV9saW5lKGxpbmV0eXBlPSAiZGFzaGVkIikgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTEwMDAsbGluZXR5cGU9ICJkYXNoZWQiKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lPSAiRWxvIFJhbmtpbmciKSArDQogIHNjYWxlX3hfZGlzY3JldGUobmFtZSA9ICJUaW1lIikNCiNwDQpnZ3Bsb3RseShwKQ0KYGBgDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBBcHJpbF8yMDI0KioNCg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9N30NCg0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgDQoNCiMjIyAyMDI0IEFwcmlsLUFicw0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQpibG9jLlN1YjE4RltvcmRlcihibG9jLlN1YjE4RiRgMjAyNC0wNC0xNGApLCBjKDEsMiwxOSldICU+JSBwcmludChuPTY1KQ0KYGBgDQoNCiMjIyBFbG8gQXByaWwtQWJzIDIwMjQNCg0KKi1Db21wZXRpdG9ycyA9IGByIGAtKg0KDQpgYGB7ciBldmFsPVRSVUUsaW5jbHVkZT1UUlVFfQ0KbGFzdC5jb21wIDwtIGJsb2MuU3ViMThGWyxjKDEsMiwxOSldICU+JSBmaWx0ZXIoYmxvYy5TdWIxOEYkYDIwMjQtMDQtMTRgIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgICANCg0KDQpgYGB7cn0NCiMjIGV4LVN1YjE0IGNvbWluZyBpbiAjIyMNCmxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0ICU+JSByaWdodF9qb2luKGVsby4yMy5hY2N1bS50b19TdWIxOCwgYnk9ImNvbXBldGl0b3IiKQ0KbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCA8LSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WyFpcy5uYShsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSksXQ0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3RfY29tcF9kZWJ1dCAlPiUgYW50aV9qb2luKGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQsIGJ5PSJjb21wZXRpdG9yIikNCmBgYCAgDQoNCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQpuLmRlYnV0LmZyb21fbHdyX2NhdCA9IG5yb3cobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCkNCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGFzdC5jb21wICU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDFdDQpUZWFtIDwtIGxhc3QuY29tcC5jYWxjJFRlYW0ueFshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXQ0KcmVzdWx0cyA8LSAodW5saXN0KHJlc3VsdHMpKQ0Kc3RkZXYgPC0gc2QoYygxOihOK24uZGVidXQrbi5kZWJ1dC5mcm9tX2x3cl9jYXQpKSkNCiMNClIubHdyX2NhdCA8LSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0JFIubmV3DQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0KQ0KICAgICAgICAgICAgICAgICAgICAgICAsDQogICAgICAgICAgICAgICAgICAgICAgIGMoUi5sd3JfY2F0KSANCiAgICAgICAgICAgICAgICAgICAgICAgKSkNCm1lZGlhbmEgPC0gbWVkaWFuKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSB1bmxpc3QobGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10pICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLVIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksICIlIiApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLmxhc3QuY29tcC5uZXcgPC0gYXNfdGliYmxlKGVsby5sYXN0LmNvbXAubmV3KQ0KIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApKQ0KDQojIyBmcm9tX2x3cl9DYXQgIyMjIyMjIyMjIyMjIyMjIyMNCm4gPSBucm93KGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQpDQpOIDwtIGxlbmd0aCh1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQpSLmRlYnV0IDwtIFIubHdyX2NhdA0KbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssMV0NClRlYW0gPC0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDJdKQ0KY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SLmRlYnV0KS9EICkpKQ0KUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLSBSLm5ld1ssMV0pL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQplbG8ubGFzdC5jb21wLm5ldy5kZWJ1dC5sd3JfY2F0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwxKSwiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKSkNCg0KIyMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmNvbXAubmV3LmRlYnV0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsby5sYXN0LmNvbXAubmV3LmRlYnV0Lmx3cl9jYXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGANCg0KIyMjIyNcXyBFbG8gSGlzdG9yeSBcXw0KDQpgYGB7cn0NCiMjIA0KY29tcGU9ICIyMDI0LjEtQWJzIg0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIkFic0YiLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpKQ0KDQojDQplbG8uaGlzdG9yeSA8LSBlbG8uaGlzdG9yeSAlPiUgcmJpbmQoZWxvLmhpc3RvcnkubGFzdCkNCg0KIyB0aW1lLXNlcmllcyBkYXRhLmZyYW1lDQojIyBTdWIxOEYNCmVsby5oaXN0b3J5LnRfc2VyaWVzLlMxOEYgPC0gDQogIGFzX3RpYmJsZShlbG8uaGlzdG9yeSAlPiUNCiAgICAgICAgICAgICAgZmlsdGVyKGNhdGVnPT0iQWJzRiIpICU+JQ0KICAgICAgICAgICAgICByZXNoYXBlMjo6ZGNhc3QoZm9ybXVsYSA9IGNvbXBldGl0b3J+Y29tcCwgdmFsdWUudmFyID0gIlIubmV3IikpIA0KIyMgDQoNCmBgYA0KDQojIyMgRWxvIGluIHRpbWUNCg0KYGBge3IgaW5jbHVkZT1UUlVFLCBmaWcud2lkdGg9IDE2fQ0KcCA8LSBlbG8uaGlzdG9yeSAlPiUgDQogIGZpbHRlcihjYXRlZz09IlN1YjE4RiJ8Y2F0ZWc9PSJBYnNGInxjYXRlZz09IlN1YjIwRiIsIFIubmV3Pj0wKSAlPiUNCiAgZ2dwbG90KGFlcyh4PSBjb21wLCB5PSBSLm5ldywgZ3JvdXAgPSBjb21wZXRpdG9yLCBjb2wgPSBUZWFtKSkgKyANCiAgZ2VvbV9wb2ludCgpICsgDQogIGdlb21fbGluZShsaW5ldHlwZT0gImRhc2hlZCIpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdD0xMDAwLGxpbmV0eXBlPSAiZGFzaGVkIikNCg0KI3ANCmdncGxvdGx5KHApDQpgYGANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIEFwcmlsLUFic18yMDI0KioNCg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9N30NCg0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgDQoNCiMjIyAyMDI0IEp1bmUNCg0KYGBge3IgaW5jbHVkZT1UUlVFfQ0KYmxvYy5TdWIxOEZbb3JkZXIoYmxvYy5TdWIxOEYkYDIwMjQtMDYtMjlgKSwgYygxLDIsMjApXSAlPiUgcHJpbnQobj02NSkNCmBgYA0KDQojIyMgRWxvIEp1bmUgMjAyNA0KDQoqLUNvbXBldGl0b3JzID0gYHIgYC0qDQoNCmBgYHtyIGV2YWw9VFJVRSxpbmNsdWRlPVRSVUUgfQ0KbGFzdC5jb21wIDwtIGJsb2MuU3ViMThGWyxjKDEsMiwyMCldICU+JSBmaWx0ZXIoYmxvYy5TdWIxOEYkYDIwMjQtMDYtMjlgIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCg0KYGBge3J9DQojIyBleC1TdWIxNCBjb21pbmcgaW4gIyMjDQpsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0IDwtIGxhc3RfY29tcF9kZWJ1dCAlPiUgcmlnaHRfam9pbihlbG8uMjMuYWNjdW0udG9fU3ViMTgsIGJ5PSJjb21wZXRpdG9yIikNCmxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFshaXMubmEobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssM10pLF0NCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0X2NvbXBfZGVidXQgJT4lIGFudGlfam9pbihsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0LCBieT0iY29tcGV0aXRvciIpDQpgYGAgIA0KDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1UUlVFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KI24uZGVidXQuZnJvbV9sd3JfY2F0ID0gbnJvdyhsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0KQ0KIyMjDQpsYXN0LmNvbXAuY2FsYyA8LSBsYXN0LmNvbXAgJT4lIHJpZ2h0X2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCiMjIw0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkY29tcGV0aXRvclshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0pDQpSIDwtIGxhc3QuY29tcC5jYWxjJFIubmV3WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksMV0NClRlYW0gPC0gbGFzdC5jb21wLmNhbGMkVGVhbS54WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bHRzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdDQpyZXN1bHRzIDwtICh1bmxpc3QocmVzdWx0cykpDQpzdGRldiA8LSBzZChjKDE6KE4rbi5kZWJ1dCtuLmRlYnV0LmZyb21fbHdyX2NhdCkpKQ0KIw0KI1IubHdyX2NhdCA8LSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0JFIubmV3DQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0KQ0KICMgICAgICAgICAgICAgICAgICAgICAgLA0KICAjICAgICAgICAgICAgICAgICAgICAgYyhSLmx3cl9jYXQpIA0KICAgICAgICAgICAgICAgICAgICAgICApKQ0KbWVkaWFuYSA8LSBtZWRpYW4odW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIHVubGlzdChsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXSkgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8ubGFzdC5jb21wLm5ldyA8LSBhc190aWJibGUoZWxvLmxhc3QuY29tcC5uZXcpDQojIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpuID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KUi5kZWJ1dCA8LSByZXAoMTAwMCwgbikNCm5hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dFssMV0NClRlYW0gPC0gbGFzdF9jb21wX2RlYnV0JFRlYW0NCiNjYXRlZyA8LSBibG9jLlN1YjE2Ri5hX2INClMgPC0gKChtZWRpYW5hIC0gbGFzdF9jb21wX2RlYnV0WywzXSkgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXdbLDFdKS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ld1ssMV0pL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZWxvLmxhc3QuY29tcC5uZXcuZGVidXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dFssM10pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFNbLDFdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3WywxXSwyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkpDQoNCiMjIGZyb21fbHdyX0NhdCAjIyMjIyMjIyMjIyMjIyMjIw0KI24gPSBucm93KGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQpDQojTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KI1IuZGVidXQgPC0gUi5sd3JfY2F0DQojbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssMV0NCiNUZWFtIDwtIHVubGlzdChsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywyXSkNCiNjYXRlZyA8LSBibG9jLlN1YjE2Ri5hX2INCiNTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCiNFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNCiNSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCiNtYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNCiNQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXdbLDFdKS9EICkpKQ0KI21heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KI1Byb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojZWxvLmxhc3QuY29tcC5uZXcuZGVidXQubHdyX2NhdCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAjICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgIyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssM10pLA0KICAgICMgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgIyAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgIyAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAjICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgIyAgICAgICAgICAgICAgICAgICkpDQoNCiMjIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Vsby5sYXN0LmNvbXAubmV3LmRlYnV0Lmx3cl9jYXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGAgIA0KDQoNCiMjIyMjXF8gRWxvIEhpc3RvcnkgXF8NCg0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyNC4yIg0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE4RiIsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSkpDQoNCiMNCmVsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCiMjIFN1YjE4Rg0KZWxvLmhpc3RvcnkudF9zZXJpZXMuUzE4RiA8LSANCiAgYXNfdGliYmxlKGVsby5oaXN0b3J5ICU+JQ0KICAgICAgICAgICAgICBmaWx0ZXIoY2F0ZWc9PSJTdWIxOEYiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGANCg0KIyMjIEVsbyBpbiB0aW1lDQoNCmBgYHtyIGluY2x1ZGU9VFJVRSwgIGZpZy5oZWlnaHQ9MTAsIGZpZy53aWR0aD0gMTZ9DQpwIDwtIGVsby5oaXN0b3J5ICU+JSANCiAgZmlsdGVyKGNhdGVnPT0iU3ViMThGInxjYXRlZz09IkFic0YifGNhdGVnPT0iU3ViMjBGIiwgUi5uZXc+PTApICU+JQ0KICBnZ3Bsb3QoYWVzKHg9IGNvbXAsIHk9IFIubmV3LCBncm91cCA9IGNvbXBldGl0b3IsIGNvbCA9IFRlYW0pKSArIA0KICBnZW9tX3BvaW50KCkgKyANCiAgZ2VvbV9saW5lKGxpbmV0eXBlPSAiZGFzaGVkIikgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTEwMDAsbGluZXR5cGU9ICJkYXNoZWQiKQ0KDQojcA0KZ2dwbG90bHkocCkNCmBgYA0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgSnVuZV8yMDI0KioNCg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9N30NCg0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgDQoNCg0KDQojIyMgMjAyNCBKdW5lLUFicw0KDQpgYGB7ciBpbmNsdWRlPVRSVUV9DQpibG9jLlN1YjE4RltvcmRlcihibG9jLlN1YjE4RiRgMjAyNC0wNi0zMGApLCBjKDEsMiwyMSldICU+JSBwcmludChuPTY1KQ0KYGBgDQoNCiMjIyBFbG8gSnVuZS1BYnMgMjAyNA0KDQoqLUNvbXBldGl0b3JzID0gYHIgYC0qDQoNCmBgYHtyIGV2YWw9VFJVRSxpbmNsdWRlPVRSVUV9DQpsYXN0LmNvbXAgPC0gYmxvYy5TdWIxOEZbLGMoMSwyLDIxKV0gJT4lIGZpbHRlcihibG9jLlN1YjE4RiRgMjAyNC0wNi0zMGAhPSJOQSIpIA0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3QuY29tcCAlPiUgYW50aV9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQpgYGAgIA0KDQoNCmBgYHtyfQ0KIyMgZXgtU3ViMTQgY29taW5nIGluICMjIw0KbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCA8LSBsYXN0X2NvbXBfZGVidXQgJT4lIHJpZ2h0X2pvaW4oZWxvLjIzLmFjY3VtLnRvX1N1YjE4LCBieT0iY29tcGV0aXRvciIpDQpsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0IDwtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbIWlzLm5hKGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDNdKSxdDQojDQpsYXN0X2NvbXBfZGVidXQgPC0gbGFzdF9jb21wX2RlYnV0ICU+JSBhbnRpX2pvaW4obGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgICANCg0KDQpgYGB7ciBldmFsPSBUUlVFLGluY2x1ZGU9VFJVRSwgY29scy5wcmludD0gN30NCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyBFTE8gIyMjIyMjIyMjIyMjIyMjIyMNCiMjIyAjIyBFTE8gKE5BU0NBUikgIyMjIyMjIyMjIyMjIw0Kbi5kZWJ1dCA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCiNuLmRlYnV0LmZyb21fbHdyX2NhdCA9IG5yb3cobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCkNCiMjIw0KbGFzdC5jb21wLmNhbGMgPC0gbGFzdC5jb21wICU+JSByaWdodF9qb2luKGVsby5sYXN0LmFjY3VtLCBieT0iY29tcGV0aXRvciIpDQojIyMNCk4gPC0gbGVuZ3RoKGxhc3QuY29tcC5jYWxjJGNvbXBldGl0b3JbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldKQ0KUiA8LSBsYXN0LmNvbXAuY2FsYyRSLm5ld1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCm5hbWVzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDFdDQpUZWFtIDwtIGxhc3QuY29tcC5jYWxjJFRlYW0ueFshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0NCiMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KcmVzdWx0cyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXQ0KcmVzdWx0cyA8LSAodW5saXN0KHJlc3VsdHMpKQ0Kc3RkZXYgPC0gc2QoYygxOihOK24uZGVidXQrbi5kZWJ1dC5mcm9tX2x3cl9jYXQpKSkNCiMNCiNSLmx3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCRSLm5ldw0KYXZnLnBsYXllciA8LSBtZWRpYW4oYyhSLCByZXAoMTAwMCwgbi5kZWJ1dCkNCiAjICAgICAgICAgICAgICAgICAgICAgICwNCiAgIyAgICAgICAgICAgICAgICAgICAgIGMoUi5sd3JfY2F0KSANCiAgICAgICAgICAgICAgICAgICAgICAgKSkNCm1lZGlhbmEgPC0gbWVkaWFuKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNCm1heC5zdGQgPC0gKG1lZGlhbmEtMSkvc3RkZXYNCiMjIyMjIyMjIyMjIyMjIyMjIw0KUyA8LSAoKG1lZGlhbmEgLSB1bmxpc3QobGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10pICkgLyBzdGRldikgLyBtYXguc3RkDQpEID0gNDAwDQprID0gMzINCkUgPC0gMS8oMSsoMTBeKCAoYXZnLnBsYXllci1SKS9EICkpKQ0KUi5uZXcgPC0gUiArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQptYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNClByb2IuRmluYWxzIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbOV0gLVIubmV3KS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ldykvRCApKSkNCiMjIw0KZWxvLmxhc3QuY29tcC5uZXcgPC0gY2JpbmQobmFtZXMgPSBuYW1lcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlYW09IFRlYW0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSByZXN1bHRzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXcsMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsMSksICIlIiApIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KZWxvLmxhc3QuY29tcC5uZXcgPC0gYXNfdGliYmxlKGVsby5sYXN0LmNvbXAubmV3KQ0KIyMjIyMjIyMjIyMNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KbiA9IGxlbmd0aChsYXN0X2NvbXBfZGVidXQkY29tcGV0aXRvcikNCk4gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNClIuZGVidXQgPC0gcmVwKDEwMDAsIG4pDQpuYW1lcyA8LSBsYXN0X2NvbXBfZGVidXRbLDFdDQpUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQpTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dFssM10pIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQpSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXdbLDFdKS9EICkpKQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCmVsby5sYXN0LmNvbXAubmV3LmRlYnV0IDwtIGFzX3RpYmJsZShjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHVubGlzdChsYXN0X2NvbXBfZGVidXRbLDNdKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ld1ssMV0sMiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIikgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApKQ0KDQojIyBmcm9tX2x3cl9DYXQgIyMjIyMjIyMjIyMjIyMjIyMNCiNuID0gbnJvdyhsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0KQ0KI04gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNCiNSLmRlYnV0IDwtIFIubHdyX2NhdA0KI25hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDFdDQojVGVhbSA8LSB1bmxpc3QobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssMl0pDQojY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQojUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSkgLyBzdGRldikgLyBtYXguc3RkDQojRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIuZGVidXQpL0QgKSkpDQojUi5uZXcgPC0gUi5kZWJ1dCArIChrICogKFMgLSAoKDIqRSkvTikgKSApDQojDQojbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQojUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoZWxvLmxhc3QuY29tcC5uZXckUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtIFIubmV3WywxXSkvRCApKSkNCiNtYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNCiNQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ld1ssMV0pL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KI2Vsby5sYXN0LmNvbXAubmV3LmRlYnV0Lmx3cl9jYXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogIyAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICMgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDNdKSwNCiAgICAjICAgICAgICAgICAgICAgICAgICAgICBTID0gU1ssMV0sDQogICAgICMgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3WywxXSwyKSwNCiAgICAgICMgICAgICAgICAgICAgICAgICAgICBQcm9iLkZpbmFscz0gcGFzdGUocm91bmQoUHJvYi5GaW5hbHMqMTAwLDEpLCIlIiksDQogICAgICAgIyAgICAgICAgICAgICAgICAgICAgUHJvYi5wb2RpdW0gPSBwYXN0ZShyb3VuZChQcm9iLnBvZGl1bSoxMDAsIDEpLA0KICAgICAgICAjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgICMgICAgICAgICAgICAgICAgICApKQ0KDQojIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuY29tcC5uZXcuZGVidXQNCiMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLA0KICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dC5sd3JfY2F0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQ0KDQoNCiMjIyMjICMjIyMjIyMjIyMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5jb21wLm5ld1tvcmRlcihlbG8ubGFzdC5jb21wLm5ldyRyZXN1bHRzKSxjKDEsMiwzLDQsNiw3LDgpXSkNCg0KYGBgDQoNCiMjIyMjXF8gRWxvIEhpc3RvcnkgXF8NCg0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyNC4yLUFicyINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSwNCiAgICAgICAgIGNhdGVnID0gcmVwKCJBYnNGIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgU3ViMThGDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMThGIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IkFic0YiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGANCg0KIyMjIEVsbyBpbiB0aW1lDQoNCmBgYHtyIGluY2x1ZGU9VFJVRSwgZmlnLndpZHRoPSAxNn0NCnAgPC0gZWxvLmhpc3RvcnkgJT4lIA0KICBmaWx0ZXIoY2F0ZWc9PSJTdWIxOEYifGNhdGVnPT0iQWJzRiJ8Y2F0ZWc9PSJTdWIyMEYiLCBSLm5ldz49MCkgJT4lDQogIGdncGxvdChhZXMoeD0gY29tcCwgeT0gUi5uZXcsIGdyb3VwID0gY29tcGV0aXRvciwgY29sID0gVGVhbSkpICsgDQogIGdlb21fcG9pbnQoKSArIA0KICBnZW9tX2xpbmUobGluZXR5cGU9ICJkYXNoZWQiKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9MTAwMCxsaW5ldHlwZT0gImRhc2hlZCIpDQoNCiNwDQpnZ3Bsb3RseShwKQ0KYGBgDQoNCiMjIyAqKkVsbyBBY2N1bXVsYXRlZCBKdW5lLUFic18yMDI0KioNCg0KYGBge3IgZXZhbD1GQUxTRSwgaW5jbHVkZT1UUlVFfQ0KZWxvLmxhc3QuYWNjdW0NCmVsby5sYXN0LmNvbXAubmV3DQpgYGANCg0KYGBge3IgZXZhbD1UUlVFLCBpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9N30NCg0KZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCA8LSBlbG8ubGFzdC5hY2N1bSAlPiUgYW50aV9qb2luKGVsby5sYXN0LmNvbXAubmV3LGJ5PSJjb21wZXRpdG9yIikNCg0KZWxvLmxhc3QuYWNjdW0gPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIHJiaW5kKGVsby5sYXN0LmFjY3VtX2xhc3QuY29tcF9hYnNlbnQpDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRjb21wZXRpdG9yKSxdDQojDQprbml0cjo6a2FibGUoZWxvLmxhc3QuYWNjdW1bb3JkZXIoZWxvLmxhc3QuYWNjdW0kUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKSxjKDEsMiw2LDcsOCldKQ0KYGBgDQoNCg0KIyMjIDIwMjQgTm92DQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCmJsb2MuU3ViMThGW29yZGVyKGJsb2MuU3ViMThGJGAyMDI0LTExLTA5YCksIGMoMSwyLDIyKV0gJT4lIHByaW50KG49NjUpDQpgYGANCg0KIyMjIEVsbyBOb3YgMjAyNA0KDQoqLUNvbXBldGl0b3JzID0gYHIgYC0qDQoNCmBgYHtyIGV2YWw9VFJVRSxpbmNsdWRlPVRSVUUgfQ0KbGFzdC5jb21wIDwtIGJsb2MuU3ViMThGWyxjKDEsMiwyMildICU+JSBmaWx0ZXIoYmxvYy5TdWIxOEYkYDIwMjQtMTEtMDlgIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgDQoNCg0KYGBge3J9DQojIyBleC1TdWIxNCBjb21pbmcgaW4gIyMjDQpsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0IDwtIGxhc3RfY29tcF9kZWJ1dCAlPiUgcmlnaHRfam9pbihlbG8uMjMuYWNjdW0udG9fU3ViMTgsIGJ5PSJjb21wZXRpdG9yIikNCmxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFshaXMubmEobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssM10pLF0NCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0X2NvbXBfZGVidXQgJT4lIGFudGlfam9pbihsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0LCBieT0iY29tcGV0aXRvciIpDQpgYGAgIA0KDQoNCmBgYHtyIGV2YWw9IFRSVUUsaW5jbHVkZT1UUlVFLCBjb2xzLnByaW50PSA3fQ0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjIEVMTyAjIyMjIyMjIyMjIyMjIyMjIw0KIyMjICMjIEVMTyAoTkFTQ0FSKSAjIyMjIyMjIyMjIyMjDQpuLmRlYnV0ID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KI24uZGVidXQuZnJvbV9sd3JfY2F0ID0gbnJvdyhsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0KQ0KIyMjDQpsYXN0LmNvbXAuY2FsYyA8LSBsYXN0LmNvbXAgJT4lIHJpZ2h0X2pvaW4oZWxvLmxhc3QuYWNjdW0sIGJ5PSJjb21wZXRpdG9yIikNCiMjIw0KTiA8LSBsZW5ndGgobGFzdC5jb21wLmNhbGMkY29tcGV0aXRvclshaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKV0pDQpSIDwtIGxhc3QuY29tcC5jYWxjJFIubmV3WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KbmFtZXMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksMV0NClRlYW0gPC0gbGFzdC5jb21wLmNhbGMkVGVhbS54WyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXQ0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpyZXN1bHRzIDwtIGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdDQpyZXN1bHRzIDwtICh1bmxpc3QocmVzdWx0cykpDQpzdGRldiA8LSBzZChjKDE6KE4rbi5kZWJ1dCtuLmRlYnV0LmZyb21fbHdyX2NhdCkpKQ0KIw0KI1IubHdyX2NhdCA8LSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0JFIubmV3DQphdmcucGxheWVyIDwtIG1lZGlhbihjKFIsIHJlcCgxMDAwLCBuLmRlYnV0KQ0KICMgICAgICAgICAgICAgICAgICAgICAgLA0KICAjICAgICAgICAgICAgICAgICAgICAgYyhSLmx3cl9jYXQpIA0KICAgICAgICAgICAgICAgICAgICAgICApKQ0KbWVkaWFuYSA8LSBtZWRpYW4odW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KbWF4LnN0ZCA8LSAobWVkaWFuYS0xKS9zdGRldg0KIyMjIyMjIyMjIyMjIyMjIyMjDQpTIDwtICgobWVkaWFuYSAtIHVubGlzdChsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwzXSkgKSAvIHN0ZGV2KSAvIG1heC5zdGQNCkQgPSA0MDANCmsgPSAzMg0KRSA8LSAxLygxKygxMF4oIChhdmcucGxheWVyLVIpL0QgKSkpDQpSLm5ldyA8LSBSICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCm1heC5jdXQuZmluYWxzIDwtIChzdGRldi05KS9zdGRldg0KUHJvYi5GaW5hbHMgPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs5XSAtUi5uZXcpL0QgKSkpDQptYXguY3V0LnBvZGl1bSA8LSAoc3RkZXYtNCkvc3RkZXYNClByb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3KS9EICkpKQ0KIyMjDQplbG8ubGFzdC5jb21wLm5ldyA8LSBjYmluZChuYW1lcyA9IG5hbWVzLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IHJlc3VsdHMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBTID0gUywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFIubmV3PSByb3VuZChSLm5ldywyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsIDEpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiksDQogICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwxKSwgIiUiICkgDQogICAgICAgICAgICAgICAgICAgICAgICAgICApDQplbG8ubGFzdC5jb21wLm5ldyA8LSBhc190aWJibGUoZWxvLmxhc3QuY29tcC5uZXcpDQojIyMjIyMjIyMjIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpuID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KUi5kZWJ1dCA8LSByZXAoMTAwMCwgbikNCm5hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dFssMV0NClRlYW0gPC0gbGFzdF9jb21wX2RlYnV0JFRlYW0NCiNjYXRlZyA8LSBibG9jLlN1YjE2Ri5hX2INClMgPC0gKChtZWRpYW5hIC0gbGFzdF9jb21wX2RlYnV0WywzXSkgLyBzdGRldikgLyBtYXguc3RkDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNClIubmV3IDwtIFIuZGVidXQgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXdbLDFdKS9EICkpKQ0KbWF4LmN1dC5wb2RpdW0gPC0gKHN0ZGV2LTQpL3N0ZGV2DQpQcm9iLnBvZGl1bSA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzRdIC1SLm5ld1ssMV0pL0QgKSkpDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZWxvLmxhc3QuY29tcC5uZXcuZGVidXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIuZGVidXQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dFssM10pLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUyA9IFNbLDFdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3WywxXSwyKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLCAxKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkpDQoNCiMjIGZyb21fbHdyX0NhdCAjIyMjIyMjIyMjIyMjIyMjIw0KI24gPSBucm93KGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQpDQojTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KI1IuZGVidXQgPC0gUi5sd3JfY2F0DQojbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssMV0NCiNUZWFtIDwtIHVubGlzdChsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywyXSkNCiNjYXRlZyA8LSBibG9jLlN1YjE2Ri5hX2INCiNTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCiNFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNCiNSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCiNtYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNCiNQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXdbLDFdKS9EICkpKQ0KI21heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KI1Byb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojZWxvLmxhc3QuY29tcC5uZXcuZGVidXQubHdyX2NhdCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAjICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgIyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssM10pLA0KICAgICMgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgIyAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgIyAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAjICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgIyAgICAgICAgICAgICAgICAgICkpDQoNCiMjIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2Vsby5sYXN0LmNvbXAubmV3LmRlYnV0Lmx3cl9jYXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApDQoNCg0KIyMjIyMgIyMjIyMjIyMjIw0Ka25pdHI6OmthYmxlKGVsby5sYXN0LmNvbXAubmV3W29yZGVyKGVsby5sYXN0LmNvbXAubmV3JHJlc3VsdHMpLGMoMSwyLDMsNCw2LDcsOCldKQ0KDQpgYGAgIA0KDQoNCiMjIyMjXF8gRWxvIEhpc3RvcnkgXF8NCg0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyNC4zIg0KZWxvLmhpc3RvcnkubGFzdCA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgDQogIG11dGF0ZShjb21wID0gcmVwKGNvbXBlLCBsZW5ndGgoZWxvLmxhc3QuY29tcC5uZXckY29tcGV0aXRvcikpLA0KICAgICAgICAgY2F0ZWcgPSByZXAoIlN1YjE4RiIsIGxlbmd0aChlbG8ubGFzdC5jb21wLm5ldyRjb21wZXRpdG9yKSkpDQoNCiMNCmVsby5oaXN0b3J5IDwtIGVsby5oaXN0b3J5ICU+JSByYmluZChlbG8uaGlzdG9yeS5sYXN0KQ0KDQojIHRpbWUtc2VyaWVzIGRhdGEuZnJhbWUNCiMjIFN1YjE4Rg0KZWxvLmhpc3RvcnkudF9zZXJpZXMuUzE4RiA8LSANCiAgYXNfdGliYmxlKGVsby5oaXN0b3J5ICU+JQ0KICAgICAgICAgICAgICBmaWx0ZXIoY2F0ZWc9PSJTdWIxOEYiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGANCg0KIyMjIEVsbyBpbiB0aW1lDQoNCmBgYHtyIGluY2x1ZGU9RkFMU0UsICBmaWcuaGVpZ2h0PTEwLCBmaWcud2lkdGg9IDE2fQ0KI2lkID0gIiINCiNzaG9ydG5hbWUgPSAiIg0KIw0KI2NvbHM9IGMoIkZFRUMvRkVNRUNWIiA9ICJkYXJrb3JhbmdlMyIsDQogIyAgICAgICAiY2N0MjEiPSAieWVsbG93MyIsDQogICMgICAgICAiRkVNRUNWIiA9ICJyZWQ0IiwNCiAgICMgICAgICJPdGhlciBjbGltbmJlcnMiID0gImdyYXkiDQogICAgIyAgICApDQojDQpjY3QgPSBjKCJjY3QyMSIgPSAiYmxhY2siLA0KICAgICAgICAiRkVFQyIgPSAiZGFya29yYW5nZTMiLA0KICAgICAgICAiRkVNRUNWIiA9ICJyZWQ0IiwNCiAgICAgICAgIk90aGVyIGNsaW1iZXJzIj0gImRhcmtncmF5IikNCiMjDQpwIDwtIGVsby5oaXN0b3J5ICU+JQ0KICBtdXRhdGUoZm9jdXMgPSBjYXNlX3doZW4oY29tcGV0aXRvciA9PSAiQWJyaWwgRkFSUlVTIFNPUklBTk8iIH4gImNjdDIxIiwgY29tcGV0aXRvciA9PSAiTWFyaWEgRkVSUsOJIFBSSU0iIH4gImNjdDIxIiwgY29tcGV0aXRvciA9PSAgIkphbmEgRVNURVZFIFZBTERFUyIgfiAiY2N0MjEiLCBjb21wZXRpdG9yID09ICAiTcOybmljYSBKQVVTRVQgU0FCQVRFUiIgfiAiY2N0MjEiLCBjb21wZXRpdG9yID09ICAiUnV0IFRPUlJBTExBUkRPTkEgVkFMTCIgfiAiY2N0MjEiLCBjb21wZXRpdG9yID09ICAiQXNoYSBHVUlUQVJUIENIVU5HIiB+ICJjY3QyMSIsIGNvbXBldGl0b3IgPT0gICJKw7psaWEgQk9SR0VTIERFTCBWSUxMQVNBTlRFIiB+ICJjY3QyMSIsIGNvbXBldGl0b3IgPT0gICJNYXIgVklDRU5URSBKVUFOIERFIExBIENSVVoiIH4gImNjdDIxIiwgY29tcGV0aXRvciA9PSAiQWluYSBWSUxBIENBTlRFUk8iIH4gImNjdDIxIiwgY29tcGV0aXRvciA9PSAiTGFpYSBUQVVMQVRTIE1DRE9OQUxEIiB+ICJjY3QyMSIsIGNvbXBldGl0b3IgPT0gIkVsYmEgVkVSR8OJUyBTT0zDiSIgfiAiY2N0MjEiLCBjb21wZXRpdG9yID09ICJKb3NlZmEgR09OWsOBTEVaIExBUkEiIH4gImNjdDIxIiwNCiAgICAgICAgICAgICAgICAgICAgIFRlYW09PSAiRkVFQyIgfiAiRkVFQyIsIFRlYW09PSAiRkVNRUNWIiB+ICJGRU1FQ1YiLCBUUlVFIH4gIk90aGVyIGNsaW1iZXJzIikpICU+JQ0KICBmaWx0ZXIoY2F0ZWc9PSJTdWIxOEYifGNhdGVnPT0iU3ViMjBGInxjYXRlZz09IkFic0YiLCANCiAgICAgICAgIFIubmV3Pj0wKSAlPiUNCiAgZ2dwbG90KGFlcyh4PSBjb21wLCB5PSBSLm5ldywgZ3JvdXAgPSBjb21wZXRpdG9yLCBjb2wgPSBmb2N1cykpICsgDQogIGdlb21fcG9pbnQoKSArIA0KICBnZW9tX2xpbmUobGluZXR5cGU9ICJkYXNoZWQiKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQ9MTAwMCxsaW5ldHlwZT0gImRhc2hlZCIpICsNCiAgc2NhbGVfY29sb3JfbWFudWFsKG5hbWUgPSAiQ2xpbWJlciIsDQogICAgICAgICAgICAgICAgICAgICBhZXN0aGV0aWNzID0gImNvbG9yIiwNCiAgICAgICAgICAgICAgICAgICAgICwNCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyA9IGNjdA0KICAgICAgICAgICAgICAgICAgICAgKQ0KDQojcA0KZ2dwbG90bHkocCkNCmBgYA0KDQojIyMgKipFbG8gQWNjdW11bGF0ZWQgTm92XzIwMjQqKg0KDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQplbG8ubGFzdC5hY2N1bQ0KZWxvLmxhc3QuY29tcC5uZXcNCmBgYA0KDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9VFJVRSwgY29scy5wcmludD03fQ0KDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcC5uZXcsYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGANCg0KDQojIyMgMjAyNCBOb3YtQWJzDQoNCmBgYHtyIGluY2x1ZGU9VFJVRX0NCmJsb2MuU3ViMThGW29yZGVyKGJsb2MuU3ViMThGJGAyMDI0LTExLTEwYCksIGMoMSwyLDIzKV0gJT4lIHByaW50KG49NjUpDQpgYGANCg0KIyMjIEVsbyBOb3YtQWJzIDIwMjQNCg0KKi1Db21wZXRpdG9ycyA9IGByIGAtKg0KDQpgYGB7ciBldmFsPVRSVUUsaW5jbHVkZT1UUlVFfQ0KbGFzdC5jb21wIDwtIGJsb2MuU3ViMThGWyxjKDEsMiwyMyldICU+JSBmaWx0ZXIoYmxvYy5TdWIxOEYkYDIwMjQtMTEtMTBgIT0iTkEiKSANCiMNCmxhc3RfY29tcF9kZWJ1dCA8LSBsYXN0LmNvbXAgJT4lIGFudGlfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KYGBgICANCg0KDQpgYGB7cn0NCiMjIGV4LVN1YjE0IGNvbWluZyBpbiAjIyMNCmxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQgPC0gbGFzdF9jb21wX2RlYnV0ICU+JSByaWdodF9qb2luKGVsby4yMy5hY2N1bS50b19TdWIxOCwgYnk9ImNvbXBldGl0b3IiKQ0KbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdCA8LSBsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WyFpcy5uYShsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywzXSksXQ0KIw0KbGFzdF9jb21wX2RlYnV0IDwtIGxhc3RfY29tcF9kZWJ1dCAlPiUgYW50aV9qb2luKGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQsIGJ5PSJjb21wZXRpdG9yIikNCmBgYCAgDQoNCg0KYGBge3IgZXZhbD0gVFJVRSxpbmNsdWRlPVRSVUUsIGNvbHMucHJpbnQ9IDd9DQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgRUxPICMjIyMjIyMjIyMjIyMjIyMjDQojIyMgIyMgRUxPIChOQVNDQVIpICMjIyMjIyMjIyMjIyMNCm4uZGVidXQgPSBsZW5ndGgobGFzdF9jb21wX2RlYnV0JGNvbXBldGl0b3IpDQojbi5kZWJ1dC5mcm9tX2x3cl9jYXQgPSBucm93KGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQpDQojIyMNCmxhc3QuY29tcC5jYWxjIDwtIGxhc3QuY29tcCAlPiUgcmlnaHRfam9pbihlbG8ubGFzdC5hY2N1bSwgYnk9ImNvbXBldGl0b3IiKQ0KIyMjDQpOIDwtIGxlbmd0aChsYXN0LmNvbXAuY2FsYyRjb21wZXRpdG9yWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pXSkNClIgPC0gbGFzdC5jb21wLmNhbGMkUi5uZXdbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQpuYW1lcyA8LSBsYXN0LmNvbXAuY2FsY1shaXMubmEobGFzdC5jb21wLmNhbGNbLDNdKSwxXQ0KVGVhbSA8LSBsYXN0LmNvbXAuY2FsYyRUZWFtLnhbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSldDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMNCnJlc3VsdHMgPC0gbGFzdC5jb21wLmNhbGNbIWlzLm5hKGxhc3QuY29tcC5jYWxjWywzXSksM10NCnJlc3VsdHMgPC0gKHVubGlzdChyZXN1bHRzKSkNCnN0ZGV2IDwtIHNkKGMoMTooTituLmRlYnV0K24uZGVidXQuZnJvbV9sd3JfY2F0KSkpDQojDQojUi5sd3JfY2F0IDwtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQkUi5uZXcNCmF2Zy5wbGF5ZXIgPC0gbWVkaWFuKGMoUiwgcmVwKDEwMDAsIG4uZGVidXQpDQogIyAgICAgICAgICAgICAgICAgICAgICAsDQogICMgICAgICAgICAgICAgICAgICAgICBjKFIubHdyX2NhdCkgDQogICAgICAgICAgICAgICAgICAgICAgICkpDQptZWRpYW5hIDwtIG1lZGlhbih1bmxpc3QobGFzdC5jb21wWyFpcy5uYShsYXN0LmNvbXBbLDNdKSwzXSkpDQptYXguc3RkIDwtIChtZWRpYW5hLTEpL3N0ZGV2DQojIyMjIyMjIyMjIyMjIyMjIyMNClMgPC0gKChtZWRpYW5hIC0gdW5saXN0KGxhc3QuY29tcC5jYWxjWyFpcy5uYShsYXN0LmNvbXAuY2FsY1ssM10pLDNdKSApIC8gc3RkZXYpIC8gbWF4LnN0ZA0KRCA9IDQwMA0KayA9IDMyDQpFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUikvRCApKSkNClIubmV3IDwtIFIgKyAoayAqIChTIC0gKCgyKkUpL04pICkgKQ0KIw0KbWF4LmN1dC5maW5hbHMgPC0gKHN0ZGV2LTkpL3N0ZGV2DQpQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC1SLm5ldykvRCApKSkNCm1heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KUHJvYi5wb2RpdW0gPC0gMS8oMSsoMTBeKCAoIHNvcnQoUi5uZXcsIGRlY3JlYXNpbmcgPSBUUlVFKVs0XSAtUi5uZXcpL0QgKSkpDQojIyMNCmVsby5sYXN0LmNvbXAubmV3IDwtIGNiaW5kKG5hbWVzID0gbmFtZXMsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUiA9IFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gcmVzdWx0cywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUi5uZXc9IHJvdW5kKFIubmV3LDIpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvYi5GaW5hbHM9IHBhc3RlKHJvdW5kKFByb2IuRmluYWxzKjEwMCwgMSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2IucG9kaXVtID0gcGFzdGUocm91bmQoUHJvYi5wb2RpdW0qMTAwLDEpLCAiJSIgKSANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICkNCmVsby5sYXN0LmNvbXAubmV3IDwtIGFzX3RpYmJsZShlbG8ubGFzdC5jb21wLm5ldykNCiMjIyMjIyMjIyMjDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCiNuID0gbGVuZ3RoKGxhc3RfY29tcF9kZWJ1dCRjb21wZXRpdG9yKQ0KI04gPC0gbGVuZ3RoKHVubGlzdChsYXN0LmNvbXBbIWlzLm5hKGxhc3QuY29tcFssM10pLDNdKSkNCiNSLmRlYnV0IDwtIHJlcCgxMDAwLCBuKQ0KI25hbWVzIDwtIGxhc3RfY29tcF9kZWJ1dFssMV0NCiNUZWFtIDwtIGxhc3RfY29tcF9kZWJ1dCRUZWFtDQojY2F0ZWcgPC0gYmxvYy5TdWIxNkYuYV9iDQojUyA8LSAoKG1lZGlhbmEgLSBsYXN0X2NvbXBfZGVidXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCiNFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNCiNSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCiNtYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNCiNQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXdbLDFdKS9EICkpKQ0KI21heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KI1Byb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojZWxvLmxhc3QuY29tcC5uZXcuZGVidXQgPC0gYXNfdGliYmxlKGNiaW5kKG5hbWVzID0gbmFtZXMsDQogIyAgICAgICAgICAgICAgICAgICAgICAgICAgVGVhbT0gVGVhbSwNCiAgIyAgICAgICAgICAgICAgICAgICAgICAgICBSID0gUi5kZWJ1dCwNCiAgICMgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzID0gdW5saXN0KGxhc3RfY29tcF9kZWJ1dFssM10pLA0KICAgICMgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgIyAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgIyAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAjICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgIyAgICAgICAgICAgICAgICAgICkpDQoNCiMjIGZyb21fbHdyX0NhdCAjIyMjIyMjIyMjIyMjIyMjIw0KI24gPSBucm93KGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXQpDQojTiA8LSBsZW5ndGgodW5saXN0KGxhc3QuY29tcFshaXMubmEobGFzdC5jb21wWywzXSksM10pKQ0KI1IuZGVidXQgPC0gUi5sd3JfY2F0DQojbmFtZXMgPC0gbGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssMV0NCiNUZWFtIDwtIHVubGlzdChsYXN0X2NvbXBfZGVidXQuZnJvbV9sd3JfY2F0WywyXSkNCiNjYXRlZyA8LSBibG9jLlN1YjE2Ri5hX2INCiNTIDwtICgobWVkaWFuYSAtIGxhc3RfY29tcF9kZWJ1dC5mcm9tX2x3cl9jYXRbLDNdKSAvIHN0ZGV2KSAvIG1heC5zdGQNCiNFIDwtIDEvKDErKDEwXiggKGF2Zy5wbGF5ZXItUi5kZWJ1dCkvRCApKSkNCiNSLm5ldyA8LSBSLmRlYnV0ICsgKGsgKiAoUyAtICgoMipFKS9OKSApICkNCiMNCiNtYXguY3V0LmZpbmFscyA8LSAoc3RkZXYtOSkvc3RkZXYNCiNQcm9iLkZpbmFscyA8LSAxLygxKygxMF4oICggc29ydChlbG8ubGFzdC5jb21wLm5ldyRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpWzldIC0gUi5uZXdbLDFdKS9EICkpKQ0KI21heC5jdXQucG9kaXVtIDwtIChzdGRldi00KS9zdGRldg0KI1Byb2IucG9kaXVtIDwtIDEvKDErKDEwXiggKCBzb3J0KGVsby5sYXN0LmNvbXAubmV3JFIubmV3LCBkZWNyZWFzaW5nID0gVFJVRSlbNF0gLVIubmV3WywxXSkvRCApKSkNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQojZWxvLmxhc3QuY29tcC5uZXcuZGVidXQubHdyX2NhdCA8LSBhc190aWJibGUoY2JpbmQobmFtZXMgPSBuYW1lcywNCiAjICAgICAgICAgICAgICAgICAgICAgICAgICBUZWFtPSBUZWFtLA0KICAjICAgICAgICAgICAgICAgICAgICAgICAgIFIgPSBSLmRlYnV0LA0KICAgIyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSB1bmxpc3QobGFzdF9jb21wX2RlYnV0LmZyb21fbHdyX2NhdFssM10pLA0KICAgICMgICAgICAgICAgICAgICAgICAgICAgIFMgPSBTWywxXSwNCiAgICAgIyAgICAgICAgICAgICAgICAgICAgICBSLm5ldz0gcm91bmQoUi5uZXdbLDFdLDIpLA0KICAgICAgIyAgICAgICAgICAgICAgICAgICAgIFByb2IuRmluYWxzPSBwYXN0ZShyb3VuZChQcm9iLkZpbmFscyoxMDAsMSksIiUiKSwNCiAgICAgICAjICAgICAgICAgICAgICAgICAgICBQcm9iLnBvZGl1bSA9IHBhc3RlKHJvdW5kKFByb2IucG9kaXVtKjEwMCwgMSksDQogICAgICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJSIpIA0KICAgICAgICAgIyAgICAgICAgICAgICAgICAgICkpDQoNCiMjIyMNCg0KI2Vsby5sYXN0LmNvbXAubmV3IDwtIGVsby5sYXN0LmNvbXAubmV3ICU+JSByYmluZChlbG8ubGFzdC5jb21wLm5ldy5kZWJ1dA0KIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsDQogIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsby5sYXN0LmNvbXAubmV3LmRlYnV0Lmx3cl9jYXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjICAgICAgKQ0KDQoNCiMjIyMjICMjIyMjIyMjIyMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5jb21wLm5ld1tvcmRlcihlbG8ubGFzdC5jb21wLm5ldyRyZXN1bHRzKSxjKDEsMiwzLDQsNiw3LDgpXSkNCg0KYGBgDQoNCiMjIyMjXF8gRWxvIEhpc3RvcnkgXF8NCg0KYGBge3J9DQojIyANCmNvbXBlPSAiMjAyNC4zLUFicyINCmVsby5oaXN0b3J5Lmxhc3QgPC0gZWxvLmxhc3QuY29tcC5uZXcgJT4lIA0KICBtdXRhdGUoY29tcCA9IHJlcChjb21wZSwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSwNCiAgICAgICAgIGNhdGVnID0gcmVwKCJBYnNGIiwgbGVuZ3RoKGVsby5sYXN0LmNvbXAubmV3JGNvbXBldGl0b3IpKSkNCg0KIw0KZWxvLmhpc3RvcnkgPC0gZWxvLmhpc3RvcnkgJT4lIHJiaW5kKGVsby5oaXN0b3J5Lmxhc3QpDQoNCiMgdGltZS1zZXJpZXMgZGF0YS5mcmFtZQ0KIyMgU3ViMThGDQplbG8uaGlzdG9yeS50X3Nlcmllcy5TMThGIDwtIA0KICBhc190aWJibGUoZWxvLmhpc3RvcnkgJT4lDQogICAgICAgICAgICAgIGZpbHRlcihjYXRlZz09IkFic0YiKSAlPiUNCiAgICAgICAgICAgICAgcmVzaGFwZTI6OmRjYXN0KGZvcm11bGEgPSBjb21wZXRpdG9yfmNvbXAsIHZhbHVlLnZhciA9ICJSLm5ldyIpKSANCiMjIA0KDQpgYGANCg0KIyMjIEVsbyBpbiB0aW1lDQoNCmBgYHtyIGluY2x1ZGU9VFJVRSwgZmlnLndpZHRoPSAyMCwgZmlnLmhlaWdodD0xMH0NCiNpZCA9ICIiDQojc2hvcnRuYW1lID0gIiINCiMNCiNjb2xzPSBjKCJGRUVDL0ZFTUVDViIgPSAiZGFya29yYW5nZTMiLA0KICMgICAgICAgImNjdDIxIj0gInllbGxvdzMiLA0KICAjICAgICAgIkZFTUVDViIgPSAicmVkNCIsDQogICAjICAgICAiT3RoZXIgY2xpbW5iZXJzIiA9ICJncmF5Ig0KICAgICMgICAgKQ0KIw0KY2N0ID0gYygiY2N0MjEiID0gImJsYWNrIiwNCiAgICAgICAgIkZFRUMiID0gImRhcmtvcmFuZ2UzIiwNCiAgICAgICAgIkZFTUVDViIgPSAicmVkNCIsDQogICAgICAgICJPdGhlciBjbGltYmVycyI9ICJkYXJrZ3JheSIpDQojIw0KcCA8LSBlbG8uaGlzdG9yeSAlPiUNCiAgbXV0YXRlKGZvY3VzID0gY2FzZV93aGVuKGNvbXBldGl0b3IgPT0gIkFicmlsIEZBUlJVUyBTT1JJQU5PIiB+ICJjY3QyMSIsIGNvbXBldGl0b3IgPT0gIk1hcmlhIEZFUlLDiSBQUklNIiB+ICJjY3QyMSIsIGNvbXBldGl0b3IgPT0gICJKYW5hIEVTVEVWRSBWQUxERVMiIH4gImNjdDIxIiwgY29tcGV0aXRvciA9PSAgIk3Dsm5pY2EgSkFVU0VUIFNBQkFURVIiIH4gImNjdDIxIiwgY29tcGV0aXRvciA9PSAgIlJ1dCBUT1JSQUxMQVJET05BIFZBTEwiIH4gImNjdDIxIiwgY29tcGV0aXRvciA9PSAgIkFzaGEgR1VJVEFSVCBDSFVORyIgfiAiY2N0MjEiLCBjb21wZXRpdG9yID09ICAiSsO6bGlhIEJPUkdFUyBERUwgVklMTEFTQU5URSIgfiAiY2N0MjEiLCBjb21wZXRpdG9yID09ICAiTWFyIFZJQ0VOVEUgSlVBTiBERSBMQSBDUlVaIiB+ICJjY3QyMSIsIGNvbXBldGl0b3IgPT0gIkFpbmEgVklMQSBDQU5URVJPIiB+ICJjY3QyMSIsIGNvbXBldGl0b3IgPT0gIkxhaWEgVEFVTEFUUyBNQ0RPTkFMRCIgfiAiY2N0MjEiLCBjb21wZXRpdG9yID09ICJFbGJhIFZFUkfDiVMgU09Mw4kiIH4gImNjdDIxIiwgY29tcGV0aXRvciA9PSAiSm9zZWZhIEdPTlrDgUxFWiBMQVJBIiB+ICJjY3QyMSIsDQogICAgICAgICAgICAgICAgICAgICBUZWFtPT0gIkZFRUMiIH4gIkZFRUMiLCBUZWFtPT0gIkZFTUVDViIgfiAiRkVNRUNWIiwgVFJVRSB+ICJPdGhlciBjbGltYmVycyIpKSAlPiUNCiAgZmlsdGVyKGNhdGVnPT0iU3ViMThGInxjYXRlZz09IlN1YjIwRiJ8Y2F0ZWc9PSJBYnNGIiwgDQogICAgICAgICBSLm5ldz49MCkgJT4lDQogIGdncGxvdChhZXMoeD0gY29tcCwgeT0gUi5uZXcsIGdyb3VwID0gY29tcGV0aXRvciwgY29sID0gZm9jdXMpKSArIA0KICBnZW9tX3BvaW50KCkgKyANCiAgZ2VvbV9saW5lKGxpbmV0eXBlPSAiZGFzaGVkIikgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0PTEwMDAsbGluZXR5cGU9ICJkYXNoZWQiKSArDQogIHNjYWxlX2NvbG9yX21hbnVhbChuYW1lID0gIkNsaW1iZXIiLA0KICAgICAgICAgICAgICAgICAgICAgYWVzdGhldGljcyA9ICJjb2xvciIsDQogICAgICAgICAgICAgICAgICAgICAsDQogICAgICAgICAgICAgICAgICAgICB2YWx1ZXMgPSBjY3QNCiAgICAgICAgICAgICAgICAgICAgICkNCg0KI3ANCmdncGxvdGx5KHApDQpgYGANCg0KIyMjICoqRWxvIEFjY3VtdWxhdGVkIEp1bmUtQWJzXzIwMjQqKg0KDQpgYGB7ciBldmFsPUZBTFNFLCBpbmNsdWRlPVRSVUV9DQplbG8ubGFzdC5hY2N1bQ0KZWxvLmxhc3QuY29tcC5uZXcNCmBgYA0KDQpgYGB7ciBldmFsPVRSVUUsIGluY2x1ZGU9VFJVRSwgY29scy5wcmludD03fQ0KDQplbG8ubGFzdC5hY2N1bV9sYXN0LmNvbXBfYWJzZW50IDwtIGVsby5sYXN0LmFjY3VtICU+JSBhbnRpX2pvaW4oZWxvLmxhc3QuY29tcC5uZXcsYnk9ImNvbXBldGl0b3IiKQ0KDQplbG8ubGFzdC5hY2N1bSA8LSBlbG8ubGFzdC5jb21wLm5ldyAlPiUgcmJpbmQoZWxvLmxhc3QuYWNjdW1fbGFzdC5jb21wX2Fic2VudCkNCmVsby5sYXN0LmFjY3VtIDwtIGVsby5sYXN0LmFjY3VtW29yZGVyKGVsby5sYXN0LmFjY3VtJGNvbXBldGl0b3IpLF0NCiMNCmtuaXRyOjprYWJsZShlbG8ubGFzdC5hY2N1bVtvcmRlcihlbG8ubGFzdC5hY2N1bSRSLm5ldywgZGVjcmVhc2luZyA9IFRSVUUpLGMoMSwyLDYsNyw4KV0pDQpgYGANCg0KDQojIyMgIyMjIyAjIyMjIyAjIyMjIyMNCg0KDQojIyMgIyMgVXAtY29taW5nIFNFQVNPTg0KDQo=