Proyecto realizado para la asignatura’’Programación y manejo de datos en la era del Big Data" impartida por el profesor Pedro J. Pérez en el Grado de Economía de la Universidad de Valencia. La página web de la asignatura se puede ver aquí . Los trabajos elaborados por nuestros compañeros de curso pueden verse aquí


1. Introducción

Las energías renovables son aquellas que se obtienen de fuentes naturales inagotables a escala humana, bien porque el recurso dispone de una cantidad de energía inmensa, bien porque el recurso tiene la capacidad de regenerarse de manera natural.

Existen diferentes fuentes de energía renovable: > - según los recursos naturales utilizados para la generación de energía: eólica, hidraulica, térmica, solar, … > - en función de la energía final conseguida a partir de ellas: energía eléctrica, energía térmica y biocarburantes.

La utilización de energías renovables es muy antigua. Los molinos y la navegación a vela son dos ejemplos claros de este uso. En la actualidad, las energías renovables constituyen fuentes de abastecimiento energético autóctonas y respetuosas con el medio ambiente.

Es por ello que el objetivo de este trabajo es analizar la situación de las energias renovables en España.

knitr::include_graphics("https://www.energias-renovables.com/ficheroenergias/fotos/panorama/ampliada/s/schneider-electric-tendencias-9-3-2020.jpg")

2. Datos para la realización del proyecto

Origen: Github

Estos datos han sido faciles de obtener, ya que los he copiado directamente en GitHub. Són datos reales de páginas oficiales de estadística. Los he colocado yo en vez de descargarlos porque no me daba la opción.

Los datos utilizados para la elaboración del presente proyecto son extraidos , principalmente de la base de datos de la página oficial del Instituto Nacional de Estadística (INE) , que puede verse aquí y de otras páginas oficiales como estadística.com o REE (Red Eléctrica de España) como podemos ver respectivamente aquí y aquí

Carga de datos

#Los paquetes que he utilizado para realizar el trabajo son:
library(rio)
library(ggplot2)
library(tidyverse)
library(dplyr)
library(patchwork)
library(maps)
library(gganimate)

#Importo los datos

#Consumo participacion #barres
url <- "https://raw.githubusercontent.com/AnaMaria1198/trabajo_BigData/main/consumo.csv"
aa<- rio::import(url, setclass="tibble")

#Dependencia energética
url1 <- "https://raw.githubusercontent.com/AnaMaria1198/trabajo_BigData/main/dependecia.csv"
bb<- rio::import(url1, setclass="tibble")

#Energias Mundo
url2 <- "https://raw.githubusercontent.com/AnaMaria1198/trabajo_BigData/main/energias.csv"
cc<- rio::import(url2, setclass="tibble")

#Energias España
url3 <- "https://raw.githubusercontent.com/AnaMaria1198/trabajo_BigData/main/energiasES.csv"
dd<- rio::import(url3, setclass="tibble")

#Empleo
url4 <- "https://raw.githubusercontent.com/AnaMaria1198/trabajo_BigData/main/empleo.csv"
ee<- rio::import(url4, setclass="tibble")

3. Energía renovable en el mundo

Mundo

El crecimiento a nivel mundial del consumo de energía primaria procedente de fuentes renovables fue del 7,1%, en el año 2018.

Las energías renovables aumentaron su contribución al consumo de energía primaria en un 0,4%, situándose en el 10,8% del total.

Al igual que en los últimos años, las energías renovables siguen siendo la cuarta fuente en consumo de energía primaria en el mundo.

El consumo mundial de petróleo disminuyó en 0,5 puntos porcentuales hasta situarse en el 33,6% y, a pesar de la reducción mantuvo la primera posición.

Tras esta primera fuente energética se posicionó el carbón, que también disminuyó en términos porcentuales pasando del 27,6% hasta el 27,2%. El gas natural, en cambio, aumentó a nivel global su cuota de participación en la energía primaria. Con un aumento de 0,5 puntos porcentuales, representó el 23,9% de la energía.

En conjunto, el uso de combustibles fósiles representa el 84,7% del total de energía primaria consumida a nivel mundial. Finalmente, la energía nuclear representó el 4,4% del consumo de energía primaria en el mundo, lo que supone un estancamiento de su cuota de energía. En 2018, el consumo global de energía en el mundo creció un 2,9%.

Gráfico

4. Energías renovables en España

Las cifras se basan en la generación bruta de energía a partir de fuentes renovables, incluyendo la eólica, geotérmica, solar, biomasa y el aprovechamiento energético de residuos, sin tener en cuenta el suministro transfronterizo de electricidad.

Esta estadística muestra la evolución anual del porcentaje de energía procedente de fuentes renovables sobre el consumo bruto final de energía en España de 2004 a 2018. En el año 2018, en torno al 17,5% del consumo bruto final de energía en España correspondió a fuentes de energía renovables.

4.1 Tipologia Energias Renovables

Las energías renovables tienen una distribución desigual en España. En lo referente al sector eléctrico, nuestro país ha sido un referente en integración de renovables en el sistema eléctrico. Por ello, a pesar del parón de los últimos años, más del 37% de nuestra electricidad fue renovable en 2018.

En el año 2018 las energías renovables han aumentado su participación en el consumo de energía primaria. Las causas de este aumento fueron la recuperación de la generación hidráulica tras la sequía de 2017, la nueva potencia impulsada por las subastas y la competitividad alcanzada por algunas tecnologías.

En España la energía renovable aumentó un 8,2% en 2018 hasta representar el 13,9% del total de energía primaria, lo que las posiciona en tercer lugar, por detrás de los productos petrolíferos (44,9%) y del gas natural (21,1%). Por debajo de las renovables se situaron la nuclear con un 11,3% de participación y el carbón con un 8,6%

4.2 EFECTOS POSITIVOS del uso de Energias Renovables

  • Contribución al consumo

En relación con la energía final su consumo en España aumentó un 3,4% en relación al año 2017. En 2018 las energías renovables representaron el 15,1% del consumo total de energía final.

Este valor aumenta respecto a 2017, cuando se alcanzó el 13,9%, debido al aumento de la participación renovable, fundamentalmente por la recuperación de la generación hidráulica para generación eléctrica y haber experimentado un año con buen recurso eólico.

Las tecnologías renovables térmicas aumentaron débilmente su contribución, aumentando su participación un 0,3%, representando un 6,7% del total.

La energía final bruta procedente de energía renovable en 2018 fue del 17,3%1, este valor es una medida de referencia para el cumplimiento del objetivo del 20% a 2020.

El descenso fue debido a un aumento de la demanda y una reducción de la producción solar, a pesar de la mayor producción hidráulica y eólica o el repunte experimentado por los sectores térmicos.

  • Disminución dependencia energética

España siempre se ha caracterizado por su altísima dependencia energética de los combustibles fósiles, la cual registró su máximo histórico en 2008, cuando llegó a alcanzar el 81,3%. Gracias a la generación con energías renovables, la dependencia fue disminuyendo año tras año hasta los años 2012 y 2013, cuando la dependencia se redujo al 70,2%.

Debido a la moratoria renovable esta disminución se interrumpió, manteniéndose en el entorno del 73% los años siguientes, a excepción de 2016. En 2017, debido a la fuerte sequía, la dependencia se disparó hasta el 73,9%, cifra que se ha moderado en 2018, año en el que la dependencia energética se situó en el 73,4%.

Por consiguiente, sin tener en cuenta la energía nuclear, la cual se considera autóctona, aunque no sea nacional el origen del material empleado como combustible, nuestro país se sitúa cerca de veinte puntos porcentuales por encima de la media de los 28 países de la Unión Europea, cuya dependencia alcanzó el 55,1% en 2017.

Las energías renovables, al ser fuentes de energía limpias, autóctonas e inagotables, resultan una herramienta fundamental y necesaria para solucionar este grave problema de dependencia energética, que viene afectando a nuestro país desde hace tanto tiempo.

4.3 Empleo

Con un incremento del 3,3% respecto al año anterior, el Sector Renovable registró un total de 81.294 empleos en términos globales en 2018. La creación de empleo de forma neta respecto a 2017 fue, por tanto, de 2.627 nuevos puestos de trabajo.

A pesar del continuo crecimiento de la creación de nuevos puestos de trabajo en el Sector, aún se sitúa lejos de alcanzar las mayores tasas de empleo que vivimos en el año 2008, llegando a una cifra cercana a 145.000 empleos directos e indirectos.

Las tecnologías que crearon nuevos puestos de trabajo netos en 2018 fueron la eólica (1.961), la solar fotovoltaica (966), los biocarburantes (158), la minihidráulica (53), la geotermia de baja entalpía (13), la marina (11) la solar térmica (9), la minieólica (3) y la geotermia de alta entalpía (3). Por el contrario, destruyeron empleo solamente la biomasa (-507) y la solar termoeléctrica (-43).

Energia Empleo
Eolica 1.961
SolarFotovolcaica 966.000
Biocarburantes 158.000
Minihidraulica 53.000
GeotermiaBaja 13.000
Marina 11.000
SolarTermica 9.000
Minieolica 3.000
GeotermiaAlta 3.000
Biomasa -507.000
SolarTermoelectrica -43.000

5. Medio ambiente

Algunos de los beneficios de las energías renovables se producen al sustituir energías fósiles y contaminantes con energías limpias. Estos beneficios, como el impacto positivo en la balanza comercial y el ahorro en derechos de emisión, son económicamente cuantificables.

Gracias al impacto en la generación eléctrica, energía térmica y los biocarburantes, el Sector de las Energías Renovables evitó en 2018 la importación de 20.732.240 toneladas equivalentes de petróleo (tep) de combustibles fósiles, que generó un ahorro económico equivalente de 8.547 millones de euros.

El aumento del ahorro (+22%) se debe a dos razones: una mayor sustitución de toneladas de combustible fósil sustituidas y un aumento del coste de las materias primas de origen fósil.

Las tecnologías renovables también evitaron que se emitieran a la atmósfera 56.659.226 toneladas de CO2, lo que permitió ahorrar pagos en concepto de derechos de emisión por valor de 899 millones de euros. El ahorro económico ha aumentado en un 171%, fruto del fuerte incremento del 168% del precio medio de los derechos de emisión por tonelada de CO2 evitada.

6. En tiempos de COVID-19

Con la nueva situación sanitaria las personas estan más atentas a su salud y a su entorno. Esto hace que sean más conscientes de los recursos que tenemos.

Hemos podido comprobar que el medioambiente no solo tiene cosas positivas como fuentes de energias naturales sinò tambien negativas como l’aparición de virus o animales letales. Este ambiente se ve afectado si no se cuida.

También delante de una situación así vemos afectada significativamente nuestra economia ya que energeticamente dependemos mucho del exterior. De hecho, España figura entre los países más golpeados por la pandemia.

Por lo que incentiva a invertir y priorizar otro tipo de energías procedentes de recursos naturales para llegar a disminuir esta dependencia y mejorar nuestro país.

knitr::include_graphics("https://static3.abc.es/media/economia/2020/04/20/energia-renovable-kjcB--620x349@abc.jpg")

7. Conclusiones

Con este trabajo he podido analizar la importancia de las energias renovables en España, tanto dentro de esta, analizando los tipos de energias que más se utilizan, como en el exterior viendo la posición de las energias renovables respecto a la resta de energias a nivel global.

Por otra parte he visto que en los últimos años tanto la inversión como el consumo de energias renovables han aumentado considerablemente en la economia española.

Pero no solo eso,también he visto como ha pesar de ser un sector en crecimiento, este crecimiento se ha reducido debido a la llegada de la nueva situación sanitaria.

Así que creo que es importante seguir invirtiendo en este tipo de energias y buscar nuevas formas de consumo de energias renovables que nos permitan reducir el uso del resto de energias.

8. Bibliografia

  • Página oficial del Instituto Nacional de Estadística. aquí
  • Página de analisis estadísticos aquí
  • Red Eléctrica de España (REE) aquí



Para acabar este chunk para incluir tu session info:

sessioninfo::session_info() %>% details::details(summary = 'current session info') 

current session info


- Session info ---------------------------------------------------------------
 setting  value                       
 version  R version 4.0.2 (2020-06-22)
 os       Windows 10 x64              
 system   x86_64, mingw32             
 ui       RTerm                       
 language (EN)                        
 collate  Spanish_Spain.1252          
 ctype    Spanish_Spain.1252          
 tz       Europe/Paris                
 date     2021-01-15                  

- Packages -------------------------------------------------------------------
 package      * version    date       lib source                        
 assertthat     0.2.1      2019-03-21 [1] CRAN (R 4.0.2)                
 backports      1.1.9      2020-08-24 [1] CRAN (R 4.0.2)                
 base64enc      0.1-3      2015-07-28 [1] CRAN (R 4.0.0)                
 blob           1.2.1      2020-01-20 [1] CRAN (R 4.0.2)                
 broom          0.7.0      2020-07-09 [1] CRAN (R 4.0.2)                
 cellranger     1.1.0      2016-07-27 [1] CRAN (R 4.0.2)                
 cli            2.0.2      2020-02-28 [1] CRAN (R 4.0.2)                
 colorspace     1.4-1      2019-03-18 [1] CRAN (R 4.0.2)                
 cowplot      * 1.1.0      2020-09-08 [1] CRAN (R 4.0.3)                
 crayon         1.3.4      2017-09-16 [1] CRAN (R 4.0.2)                
 crosstalk      1.1.0.1    2020-03-13 [1] CRAN (R 4.0.2)                
 curl           4.3        2019-12-02 [1] CRAN (R 4.0.2)                
 data.table     1.13.0     2020-07-24 [1] CRAN (R 4.0.2)                
 DBI            1.1.0      2019-12-15 [1] CRAN (R 4.0.2)                
 dbplyr         1.4.4      2020-05-27 [1] CRAN (R 4.0.2)                
 digest         0.6.25     2020-02-23 [1] CRAN (R 4.0.2)                
 dplyr        * 1.0.2      2020-08-18 [1] CRAN (R 4.0.2)                
 ellipsis       0.3.1      2020-05-15 [1] CRAN (R 4.0.2)                
 evaluate       0.14       2019-05-28 [1] CRAN (R 4.0.2)                
 fansi          0.4.1      2020-01-08 [1] CRAN (R 4.0.2)                
 farver         2.0.3      2020-01-16 [1] CRAN (R 4.0.2)                
 forcats      * 0.5.0      2020-03-01 [1] CRAN (R 4.0.2)                
 foreign        0.8-80     2020-05-24 [2] CRAN (R 4.0.2)                
 fs             1.5.0      2020-07-31 [1] CRAN (R 4.0.2)                
 generics       0.1.0      2020-10-31 [1] CRAN (R 4.0.3)                
 gganimate    * 1.0.7      2020-10-15 [1] CRAN (R 4.0.3)                
 ggplot2      * 3.3.2      2020-06-19 [1] CRAN (R 4.0.2)                
 glue           1.4.2      2020-08-27 [1] CRAN (R 4.0.2)                
 gtable         0.3.0      2019-03-25 [1] CRAN (R 4.0.2)                
 haven          2.3.1      2020-06-01 [1] CRAN (R 4.0.2)                
 highr          0.8        2019-03-20 [1] CRAN (R 4.0.2)                
 hms            0.5.3      2020-01-08 [1] CRAN (R 4.0.2)                
 htmltools      0.5.0      2020-06-16 [1] CRAN (R 4.0.2)                
 htmlwidgets    1.5.1      2019-10-08 [1] CRAN (R 4.0.2)                
 httr           1.4.2      2020-07-20 [1] CRAN (R 4.0.2)                
 jsonlite       1.7.1      2020-09-07 [1] CRAN (R 4.0.2)                
 kableExtra   * 1.3.1      2020-10-22 [1] CRAN (R 4.0.3)                
 klippy       * 0.0.0.9500 2020-11-20 [1] Github (rlesur/klippy@378c247)
 knitr        * 1.29       2020-06-23 [1] CRAN (R 4.0.2)                
 labeling       0.3        2014-08-23 [1] CRAN (R 4.0.0)                
 lazyeval       0.2.2      2019-03-15 [1] CRAN (R 4.0.2)                
 leaflet      * 2.0.4.1    2021-01-07 [1] CRAN (R 4.0.3)                
 lifecycle      0.2.0      2020-03-06 [1] CRAN (R 4.0.2)                
 lubridate      1.7.9      2020-06-08 [1] CRAN (R 4.0.2)                
 magick       * 2.4.0      2020-06-23 [1] CRAN (R 4.0.2)                
 magrittr       1.5        2014-11-22 [1] CRAN (R 4.0.2)                
 maps         * 3.3.0      2018-04-03 [1] CRAN (R 4.0.3)                
 modelr         0.1.8      2020-05-19 [1] CRAN (R 4.0.2)                
 munsell        0.5.0      2018-06-12 [1] CRAN (R 4.0.2)                
 openxlsx       4.2.2      2020-09-17 [1] CRAN (R 4.0.2)                
 patchwork    * 1.1.0      2020-11-09 [1] CRAN (R 4.0.3)                
 pillar         1.4.6      2020-07-10 [1] CRAN (R 4.0.2)                
 pkgconfig      2.0.3      2019-09-22 [1] CRAN (R 4.0.2)                
 plotly         4.9.2.1    2020-04-04 [1] CRAN (R 4.0.2)                
 prettyunits    1.1.1      2020-01-24 [1] CRAN (R 4.0.2)                
 progress       1.2.2      2019-05-16 [1] CRAN (R 4.0.2)                
 purrr        * 0.3.4      2020-04-17 [1] CRAN (R 4.0.2)                
 R6             2.4.1      2019-11-12 [1] CRAN (R 4.0.2)                
 RColorBrewer   1.1-2      2014-12-07 [1] CRAN (R 4.0.0)                
 Rcpp           1.0.5      2020-07-06 [1] CRAN (R 4.0.2)                
 readr        * 1.4.0      2020-10-05 [1] CRAN (R 4.0.2)                
 readxl         1.3.1      2019-03-13 [1] CRAN (R 4.0.2)                
 reprex         0.3.0      2019-05-16 [1] CRAN (R 4.0.2)                
 rio          * 0.5.16     2018-11-26 [1] CRAN (R 4.0.2)                
 rlang          0.4.7      2020-07-09 [1] CRAN (R 4.0.2)                
 rmarkdown      2.3        2020-06-18 [1] CRAN (R 4.0.2)                
 rstudioapi     0.11       2020-02-07 [1] CRAN (R 4.0.2)                
 rvest          0.3.6      2020-07-25 [1] CRAN (R 4.0.2)                
 scales         1.1.1      2020-05-11 [1] CRAN (R 4.0.2)                
 sessioninfo    1.1.1      2018-11-05 [1] CRAN (R 4.0.2)                
 stringi        1.5.3      2020-09-09 [1] CRAN (R 4.0.2)                
 stringr      * 1.4.0      2019-02-10 [1] CRAN (R 4.0.2)                
 tibble       * 3.0.3      2020-07-10 [1] CRAN (R 4.0.2)                
 tidyr        * 1.1.2      2020-08-27 [1] CRAN (R 4.0.2)                
 tidyselect     1.1.0      2020-05-11 [1] CRAN (R 4.0.2)                
 tidyverse    * 1.3.0      2019-11-21 [1] CRAN (R 4.0.2)                
 tweenr         1.0.1      2018-12-14 [1] CRAN (R 4.0.3)                
 vctrs          0.3.4      2020-08-29 [1] CRAN (R 4.0.2)                
 viridisLite    0.3.0      2018-02-01 [1] CRAN (R 4.0.2)                
 webshot        0.5.2      2019-11-22 [1] CRAN (R 4.0.3)                
 withr          2.3.0      2020-09-22 [1] CRAN (R 4.0.2)                
 xfun           0.16       2020-07-24 [1] CRAN (R 4.0.2)                
 xml2         * 1.3.2      2020-04-23 [1] CRAN (R 4.0.2)                
 yaml           2.2.1      2020-02-01 [1] CRAN (R 4.0.2)                
 zip            2.1.1      2020-08-27 [1] CRAN (R 4.0.2)                

[1] C:/Users/anabo/OneDrive/Documentos/R/win-library/4.0
[2] C:/Program Files/R/R-4.0.2/library


LS0tDQp0aXRsZTogIkVuZXJnaWFzIFJlbm92YWJsZXMiDQpzdWJ0aXRsZTogIkFuYSBNYXLDrWEgQm9ycmFzIENlYm9sbGEgKGFib2NlQGFsdW1uaS51di5lcykiDQphdXRob3I6ICJVbml2ZXJzaXRhdCBkZSBWYWzDqG5jaWEiDQpkYXRlOiAiNyBkZSBFbmVybyBkZSAyMDIxIg0Kb3V0cHV0Og0KICBodG1sX2RvY3VtZW50Og0KICAgIHRoZW1lOiBwYXBlcg0KICAgIGhpZ2hsaWdodDogdGV4dG1hdGUgDQogICAgdG9jOiB0cnVlDQogICAgdG9jX2RlcHRoOiAzIA0KICAgIHRvY19mbG9hdDogDQogICAgICBjb2xsYXBzZWQ6IHRydWUNCiAgICAgIHNtb290aF9zY3JvbGw6IHRydWUNCiAgICBzZWxmX2NvbnRhaW5lZDogdHJ1ZQ0KICAgIG51bWJlcl9zZWN0aW9uczogZmFsc2UNCiAgICBkZl9wcmludDoga2FibGUNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQplZGl0b3Jfb3B0aW9uczogDQogIGNodW5rX291dHB1dF90eXBlOiBjb25zb2xlDQotLS0NCg0KPEZPTlQgQ09MT1I9IlB1cnBsZSI+UHJveWVjdG8gcmVhbGl6YWRvIHBhcmEgbGEgYXNpZ25hdHVyYScnUHJvZ3JhbWFjacOzbiB5IG1hbmVqbyBkZSBkYXRvcyBlbiBsYSBlcmEgZGVsIEJpZyBEYXRhIiBpbXBhcnRpZGEgcG9yIGVsIHByb2Zlc29yIFBlZHJvIEouIFDDqXJleiBlbiBlbCBHcmFkbyBkZSBFY29ub23DrWEgZGUgbGEgVW5pdmVyc2lkYWQgZGUgVmFsZW5jaWEuIExhIHDDoWdpbmEgd2ViIGRlIGxhIGFzaWduYXR1cmEgc2UgcHVlZGUgdmVyIFthcXXDrV0oIGh0dHBzOi8vcGVyZXpwNDQuZ2l0aHViLmlvL2ludHJvLWRzLTIwLTIxLXdlYikgLiBMb3MgdHJhYmFqb3MgZWxhYm9yYWRvcyBwb3IgbnVlc3Ryb3MgY29tcGHDsWVyb3MgZGUgY3Vyc28gcHVlZGVuIHZlcnNlIFthcXXDrV0oaHR0cHM6Ly9wZXJlenA0NC5naXRodWIuaW8vaW50cm8tZHMtMjAtMjEtd2ViLzA3LXRyYWJham9zLmh0bWwpPC9GT05UPg0KDQpgYGB7ciBwYWNrYWdlcy1zZXR1cCwgaW5jbHVkZSA9IEZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGtsaXBweSkgICMtIHJlbW90ZXM6Omluc3RhbGxfZ2l0aHViKCJybGVzdXIva2xpcHB5IikNCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KGNvd3Bsb3QpDQpsaWJyYXJ5KHhtbDIpDQpsaWJyYXJ5KG1hZ2ljaykNCmxpYnJhcnkobWFwcykNCmxpYnJhcnkoZ2dhbmltYXRlKQ0KbGlicmFyeShrYWJsZUV4dHJhKQ0KbGlicmFyeShsZWFmbGV0KSAjaW5zdGFsbC5wYWNrYWdlcygibGVhZmxldCIpDQpgYGANCg0KYGBge3IgY2h1bmstc2V0dXAsIGluY2x1ZGUgPSBGQUxTRX0NCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgZXZhbCA9IFRSVUUsIG1lc3NhZ2UgPSBGQUxTRSwgd2FybmluZyA9IEZBTFNFLCANCiAgICAgICAgICAgICAgICAgICAgICAjcmVzdWx0cyA9ICJob2xkIiwNCiAgICAgICAgICAgICAgICAgICAgICBjYWNoZSA9IEZBTFNFLCBjYWNoZS5wYXRoID0gIi9jYWNoZXMvIiwgY29tbWVudCA9ICIjPiIsDQogICAgICAgICAgICAgICAgICAgICAgI2ZpZy53aWR0aCA9IDcsICNmaWcuaGVpZ2h0PSA3LCAgIA0KICAgICAgICAgICAgICAgICAgICAgICNvdXQud2lkdGggPSA3LCBvdXQuaGVpZ2h0ID0gNywNCiAgICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZSA9IFRSVUUsICBmaWcuc2hvdyA9ICJob2xkIiwNCiAgICAgICAgICAgICAgICAgICAgICBmaWcuYXNwID0gNy85LCBvdXQud2lkdGggPSAiNjAlIiwgZmlnLmFsaWduID0gImNlbnRlciIpDQojLSBwYXJhIG1lam9yYXIgbG9zIGdyw6FmaWNvcywgYnVlbm8gZW4gcmVhbGlkYWQgcGFyYSBxdWUgc2UgdmVhbiBpZ3VhbCBlbiBkaXN0aW50b3MgU08NCiMtIGh0dHBzOi8vd3d3Lmp1bXBpbmdyaXZlcnMuY29tL2Jsb2cvci1rbml0ci1tYXJrZG93bi1wbmctcGRmLWdyYXBoaWNzLw0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGRldiA9ICJwbmciLCBkZXYuYXJncyA9IGxpc3QodHlwZSA9ICJjYWlyby1wbmciKSkNCmBgYA0KDQpgYGB7ciBvcHRpb25zLXNldHVwLCBpbmNsdWRlID0gRkFMU0V9DQpvcHRpb25zKHNjaXBlbiA9IDk5OSkgIy0gcGFyYSBxdWl0YXIgbGEgbm90YWNpw7NuIGNpZW50w61maWNhDQpvcHRpb25zKCJ5YW1sLmV2YWwuZXhwciIgPSBUUlVFKSAjLSBodHRwczovL2dpdGh1Yi5jb20vdmlraW5nL3IteWFtbC9pc3N1ZXMvNDcgIChsbyBwdXNlIHggZWwgcGIgY29uIGVsIHdhcm5pbmcpIEVuIHJlYWxpZGFkIGNyZW8gcXVlIG1lam9yIHNlcsOtYSBwb25lcmxvIGVuIFJQcm9maWxlDQpgYGANCg0KDQpgYGB7ciBrbGlwcHksIGVjaG8gPSBGQUxTRX0NCmtsaXBweTo6a2xpcHB5KHBvc2l0aW9uID0gYygidG9wIiwgInJpZ2h0IikpICMtIHJlbW90ZXM6Omluc3RhbGxfZ2l0aHViKCJybGVzdXIva2xpcHB5IikNCmBgYA0KDQotLS0tLS0tLS0tLS0tLS0tLQ0KIA0KDQojIyAgPEZPTlQgQ09MT1I9IkJsdWUiPiAxLiBJbnRyb2R1Y2Npw7NuIDwvRk9OVD4NCg0KTGFzIGVuZXJnw61hcyByZW5vdmFibGVzIHNvbiBhcXVlbGxhcyBxdWUgc2Ugb2J0aWVuZW4gZGUgZnVlbnRlcyBuYXR1cmFsZXMgaW5hZ290YWJsZXMgYSBlc2NhbGEgaHVtYW5hLCBiaWVuIHBvcnF1ZSBlbCByZWN1cnNvIGRpc3BvbmUgZGUgdW5hIGNhbnRpZGFkIGRlIGVuZXJnw61hIGlubWVuc2EsIGJpZW4gcG9ycXVlIGVsIHJlY3Vyc28gdGllbmUgbGEgY2FwYWNpZGFkIGRlIHJlZ2VuZXJhcnNlIGRlIG1hbmVyYSBuYXR1cmFsLg0KDQpFeGlzdGVuIGRpZmVyZW50ZXMgZnVlbnRlcyBkZSBlbmVyZ8OtYSByZW5vdmFibGU6DQo+IC0gc2Vnw7puIGxvcyByZWN1cnNvcyBuYXR1cmFsZXMgdXRpbGl6YWRvcyBwYXJhIGxhIGdlbmVyYWNpw7NuIGRlIGVuZXJnw61hOiBlw7NsaWNhLCBoaWRyYXVsaWNhLCB0w6lybWljYSwgc29sYXIsIC4uLg0KPiAtIGVuIGZ1bmNpw7NuIGRlIGxhIGVuZXJnw61hIGZpbmFsIGNvbnNlZ3VpZGEgYSBwYXJ0aXIgZGUgZWxsYXM6IGVuZXJnw61hIGVsw6ljdHJpY2EsIGVuZXJnw61hIHTDqXJtaWNhIHkgYmlvY2FyYnVyYW50ZXMuDQoNCkxhIHV0aWxpemFjacOzbiBkZSBlbmVyZ8OtYXMgcmVub3ZhYmxlcyBlcyBtdXkgYW50aWd1YS4gTG9zIG1vbGlub3MgeSBsYSBuYXZlZ2FjacOzbiBhIHZlbGEgc29uIGRvcyBlamVtcGxvcyBjbGFyb3MgZGUgZXN0ZSB1c28uIEVuIGxhIGFjdHVhbGlkYWQsIGxhcyBlbmVyZ8OtYXMgcmVub3ZhYmxlcyBjb25zdGl0dXllbiBmdWVudGVzIGRlIGFiYXN0ZWNpbWllbnRvIGVuZXJnw6l0aWNvIGF1dMOzY3RvbmFzIHkgcmVzcGV0dW9zYXMgY29uIGVsIG1lZGlvIGFtYmllbnRlLg0KDQpFcyBwb3IgZWxsbyBxdWUgZWwgb2JqZXRpdm8gZGUgZXN0ZSB0cmFiYWpvIGVzIGFuYWxpemFyIGxhIHNpdHVhY2nDs24gZGUgbGFzIGVuZXJnaWFzIHJlbm92YWJsZXMgZW4gRXNwYcOxYS4NCg0KYGBge3J9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiaHR0cHM6Ly93d3cuZW5lcmdpYXMtcmVub3ZhYmxlcy5jb20vZmljaGVyb2VuZXJnaWFzL2ZvdG9zL3Bhbm9yYW1hL2FtcGxpYWRhL3Mvc2NobmVpZGVyLWVsZWN0cmljLXRlbmRlbmNpYXMtOS0zLTIwMjAuanBnIikNCg0KYGBgDQoNCg0KIyMgIDxGT05UIENPTE9SPSJCbHVlIj4gMi4gRGF0b3MgcGFyYSBsYSByZWFsaXphY2nDs24gZGVsIHByb3llY3RvIDwvRk9OVD4gey50YWJzZXR9DQoNCiMjIyBPcmlnZW46ICoqR2l0aHViKioNCg0KRXN0b3MgZGF0b3MgaGFuIHNpZG8gZmFjaWxlcyBkZSBvYnRlbmVyLCB5YSBxdWUgbG9zIGhlIGNvcGlhZG8gZGlyZWN0YW1lbnRlIGVuIEdpdEh1Yi4gU8OzbiBkYXRvcyByZWFsZXMgZGUgcMOhZ2luYXMgb2ZpY2lhbGVzIGRlIGVzdGFkw61zdGljYS4gTG9zIGhlIGNvbG9jYWRvIHlvIGVuIHZleiBkZSBkZXNjYXJnYXJsb3MgcG9ycXVlIG5vIG1lIGRhYmEgbGEgb3BjacOzbi4NCg0KTG9zIGRhdG9zIHV0aWxpemFkb3MgcGFyYSBsYSBlbGFib3JhY2nDs24gZGVsIHByZXNlbnRlIHByb3llY3RvIHNvbiBleHRyYWlkb3MgLCBwcmluY2lwYWxtZW50ZSBkZSBsYSBiYXNlIGRlIGRhdG9zIGRlIGxhICBww6FnaW5hIG9maWNpYWwgZGVsICoqSW5zdGl0dXRvIE5hY2lvbmFsIGRlIEVzdGFkw61zdGljYSoqICgqSU5FKikgLCBxdWUgcHVlZGUgdmVyc2UgW2FxdcOtXShodHRwczovL3d3dy5pbmUuZXMvZHluZ3MvSU5FYmFzZS9saXN0YW9wZXJhY2lvbmVzLmh0bSkgeSBkZSBvdHJhcyBww6FnaW5hcyBvZmljaWFsZXMgY29tbyBlc3RhZMOtc3RpY2EuY29tIG8gUkVFIChSZWQgRWzDqWN0cmljYSBkZSBFc3Bhw7FhKSBjb21vIHBvZGVtb3MgdmVyIHJlc3BlY3RpdmFtZW50ZSBbYXF1w61dKGh0dHBzOi8vd3d3LmVzLmVzdGFkaXN0aWNhLmNvbSkgeSAgW2FxdcOtXShodHRwczovL3d3dy5yZWUuZXMvZXMvZGF0b3MvcHVibGljYWNpb25lcy9pbmZvcm1lLWRlLWVuZXJnaWFzLXJlbm92YWJsZXMvaW5mb3JtZS0yMDE5KQ0KDQoNCiMjIyBDYXJnYSBkZSBkYXRvcw0KYGBge3J9DQojTG9zIHBhcXVldGVzIHF1ZSBoZSB1dGlsaXphZG8gcGFyYSByZWFsaXphciBlbCB0cmFiYWpvIHNvbjoNCmxpYnJhcnkocmlvKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShwYXRjaHdvcmspDQpsaWJyYXJ5KG1hcHMpDQpsaWJyYXJ5KGdnYW5pbWF0ZSkNCg0KI0ltcG9ydG8gbG9zIGRhdG9zDQoNCiNDb25zdW1vIHBhcnRpY2lwYWNpb24gI2JhcnJlcw0KdXJsIDwtICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQW5hTWFyaWExMTk4L3RyYWJham9fQmlnRGF0YS9tYWluL2NvbnN1bW8uY3N2Ig0KYWE8LSByaW86OmltcG9ydCh1cmwsIHNldGNsYXNzPSJ0aWJibGUiKQ0KDQojRGVwZW5kZW5jaWEgZW5lcmfDqXRpY2ENCnVybDEgPC0gImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9BbmFNYXJpYTExOTgvdHJhYmFqb19CaWdEYXRhL21haW4vZGVwZW5kZWNpYS5jc3YiDQpiYjwtIHJpbzo6aW1wb3J0KHVybDEsIHNldGNsYXNzPSJ0aWJibGUiKQ0KDQojRW5lcmdpYXMgTXVuZG8NCnVybDIgPC0gImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9BbmFNYXJpYTExOTgvdHJhYmFqb19CaWdEYXRhL21haW4vZW5lcmdpYXMuY3N2Ig0KY2M8LSByaW86OmltcG9ydCh1cmwyLCBzZXRjbGFzcz0idGliYmxlIikNCg0KI0VuZXJnaWFzIEVzcGHDsWENCnVybDMgPC0gImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9BbmFNYXJpYTExOTgvdHJhYmFqb19CaWdEYXRhL21haW4vZW5lcmdpYXNFUy5jc3YiDQpkZDwtIHJpbzo6aW1wb3J0KHVybDMsIHNldGNsYXNzPSJ0aWJibGUiKQ0KDQojRW1wbGVvDQp1cmw0IDwtICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vQW5hTWFyaWExMTk4L3RyYWJham9fQmlnRGF0YS9tYWluL2VtcGxlby5jc3YiDQplZTwtIHJpbzo6aW1wb3J0KHVybDQsIHNldGNsYXNzPSJ0aWJibGUiKQ0KDQpgYGANCg0KDQojIyA8Rk9OVCBDT0xPUj0iQmx1ZSI+IDMuIEVuZXJnw61hIHJlbm92YWJsZSBlbiBlbCBtdW5kbyAgIDwvRk9OVD4gey50YWJzZXR9DQoNCiMjIyAqKk11bmRvKioNCg0KRWwgY3JlY2ltaWVudG8gYSBuaXZlbCBtdW5kaWFsIGRlbCBjb25zdW1vIGRlIGVuZXJnw61hIHByaW1hcmlhIHByb2NlZGVudGUgZGUgZnVlbnRlcyByZW5vdmFibGVzIGZ1ZSBkZWwgNywxJSwgZW4gZWwgYcOxbyAyMDE4LiANCg0KTGFzIGVuZXJnw61hcyByZW5vdmFibGVzIGF1bWVudGFyb24gc3UgY29udHJpYnVjacOzbiBhbCBjb25zdW1vIGRlIGVuZXJnw61hIHByaW1hcmlhIGVuIHVuIDAsNCUsIHNpdHXDoW5kb3NlIGVuIGVsIDEwLDglIGRlbCB0b3RhbC4gDQoNCkFsIGlndWFsIHF1ZSBlbiBsb3Mgw7psdGltb3MgYcOxb3MsIGxhcyBlbmVyZ8OtYXMgcmVub3ZhYmxlcyBzaWd1ZW4gc2llbmRvIGxhIGN1YXJ0YSBmdWVudGUgZW4gY29uc3VtbyBkZSBlbmVyZ8OtYSBwcmltYXJpYSBlbiBlbCBtdW5kby4gDQoNCkVsIGNvbnN1bW8gbXVuZGlhbCBkZSBwZXRyw7NsZW8gZGlzbWludXnDsyBlbiAwLDUgcHVudG9zIHBvcmNlbnR1YWxlcyBoYXN0YSBzaXR1YXJzZSBlbiBlbCAzMyw2JSB5LCBhIHBlc2FyIGRlIGxhIHJlZHVjY2nDs24gbWFudHV2byBsYSBwcmltZXJhIHBvc2ljacOzbi4gDQoNClRyYXMgZXN0YSBwcmltZXJhIGZ1ZW50ZSBlbmVyZ8OpdGljYSBzZSBwb3NpY2lvbsOzIGVsIGNhcmLDs24sIHF1ZSB0YW1iacOpbiBkaXNtaW51ecOzIGVuIHTDqXJtaW5vcyBwb3JjZW50dWFsZXMgcGFzYW5kbyBkZWwgMjcsNiUgaGFzdGEgZWwgMjcsMiUuIEVsIGdhcyBuYXR1cmFsLCBlbiBjYW1iaW8sIGF1bWVudMOzIGEgbml2ZWwgZ2xvYmFsIHN1IGN1b3RhIGRlIHBhcnRpY2lwYWNpw7NuIGVuIGxhIGVuZXJnw61hIHByaW1hcmlhLiBDb24gdW4gYXVtZW50byBkZSAwLDUgcHVudG9zIHBvcmNlbnR1YWxlcywgcmVwcmVzZW50w7MgZWwgMjMsOSUgZGUgbGEgZW5lcmfDrWEuDQoNCkVuIGNvbmp1bnRvLCBlbCB1c28gZGUgY29tYnVzdGlibGVzIGbDs3NpbGVzIHJlcHJlc2VudGEgZWwgODQsNyUgZGVsIHRvdGFsIGRlIGVuZXJnw61hIHByaW1hcmlhIGNvbnN1bWlkYSBhIG5pdmVsIG11bmRpYWwuIEZpbmFsbWVudGUsIGxhIGVuZXJnw61hIG51Y2xlYXIgcmVwcmVzZW50w7MgZWwgNCw0JSBkZWwgY29uc3VtbyBkZSBlbmVyZ8OtYSBwcmltYXJpYSBlbiBlbCBtdW5kbywgbG8gcXVlIHN1cG9uZSB1biBlc3RhbmNhbWllbnRvIGRlIHN1IGN1b3RhIGRlIGVuZXJnw61hLiBFbiAyMDE4LCBlbCBjb25zdW1vIGdsb2JhbCBkZSBlbmVyZ8OtYSBlbiBlbCBtdW5kbyBjcmVjacOzIHVuIDIsOSUuDQoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQprbml0cjo6aW5jbHVkZV9ncmFwaGljcygiaHR0cHM6Ly9wcmV2aWV3cy4xMjNyZi5jb20vaW1hZ2VzL3lldmdlbmlqZC95ZXZnZW5pamQxNzA4L3lldmdlbmlqZDE3MDgwMDAwNC84MzIzNzc4MC1sb2dvLWRlLWxhLWVjb2xvZyVDMyVBRGEtcyVDMyVBRG1ib2xvLWRlbC1tdW5kby1lY29sJUMzJUIzZ2ljby1pY29uby1jb25jZXB0by1lY29sJUMzJUIzZ2ljby1wYXJhLWVsLWxvZ28tZGUtbGEtZW1wcmVzYS12ZWN0b3IuanBnIikNCg0KYGBgDQoNCiMjIyBHcsOhZmljbw0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCnVybDIgPC0gImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9BbmFNYXJpYTExOTgvdHJhYmFqb19CaWdEYXRhL21haW4vZW5lcmdpYXMuY3N2Ig0KY2M8LSByaW86OmltcG9ydCh1cmwyLCBzZXRjbGFzcz0idGliYmxlIikNCg0KcDIgPC0gY2MgJT4lIGdncGxvdChhZXMoeCA9IFRpcGUseSA9IENvbnN1bW8sZmlsbCA9IFRpcGUpKSArDQogICAgICAgICAgICAgICBnZW9tX2JhcihzdGF0ID0gImlkZW50aXR5IiwgY29sb3IgPSAiYmxhY2siKSArDQogICAgZmFjZXRfd3JhcCh2YXJzKFRpcGUpLG5yb3cgPSA1LCBuY29sID0gNSkgKw0KICAgICAgICAgICAgICAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsIGRpcmVjdGlvbiA9IC0xKSArDQogICAgICAgICAgICAgICBsYWJzKGZpbGw9IlBhw61zZXMiLA0KICAgICAgICAgICAgICAgeD1OVUxMLA0KICAgICAgICAgICAgICAgeT0iJSBzb2JyZSBlbCB0b3RhbCBkZSBlbmVyZ2lhIiwNCiAgICAgICAgICAgICAgIHRpdGxlPSJFbmVyZ2lhIiwNCiAgICAgICAgICAgICAgIGNhcHRpb249IkZ1ZW50ZTogQVBQQSBSZW5vdmFibGUiKSArDQogICAgICAgICAgICAgICB0aGVtZSggcGxvdC5iYWNrZ3JvdW5kID0gZWxlbWVudF9yZWN0KCBmaWxsID0gIiNlOGQ3YTMiKSwNCiAgICAgICAgICAgICAgcGFuZWwuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdCggZmlsbCA9ICJjb3Juc2lsazIiLCBjb2xvdXIgPSAibGF2ZW5kZXJibHVzaCIsIHNpemUgPSAwLjEgKSwNCiAgICAgICAgICAgICAgcGFuZWwuZ3JpZCAgPSBlbGVtZW50X2xpbmUoIGNvbG91ciA9ImdyZXkiKSwNCiAgICAgICAgICAgICAgYXhpcy50aWNrcyA9IGVsZW1lbnRfYmxhbmsoKSwNCiAgICAgICAgICAgICAgYXhpcy50ZXh0LnggPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoaGp1c3QgPSAwLjUpLA0KICAgICAgICAgICAgICBwYW5lbC5ib3JkZXIgPSBlbGVtZW50X3JlY3QoZmlsbCA9IE5BLGNvbG91ciA9ICJibGFjayIpLA0KICAgICAgICAgICAgICBsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdCggZmlsbCA9ICJjb3Juc2lsazIiLCBjb2xvdXIgPSAiYmxhY2siICksDQogICAgICAgICAgICAgIHBsb3QubWFyZ2luID0gbWFyZ2luKHQgPSA1LCByID0gMjUsIGIgPSA1LDE1KSwNCiAgICAgICAgICAgICAgc3RyaXAuYmFja2dyb3VuZCA9IGVsZW1lbnRfcmVjdChmaWxsID0gIiNlOGQ3YTMiLGNvbG91ciA9IE5VTEwpKQ0KDQpwMg0KDQpgYGANCg0KYGBge3IgZXZhbCA9IFRSVUUsIGVjaG8gPSBGQUxTRSwgIG91dC53aWR0aD0iODAlIn0NCg0KcCA8LSBsZWFmbGV0KCkgJT4lDQogIGFkZFRpbGVzKCkgJT4lIA0KICBzZXRWaWV3KGxuZyA9IC0yLjQzNTk3MywgbGF0ID0gNTIuMzc4MDUxLCB6b29tID0gMSkgJT4lDQogIGFkZE1hcmtlcnMobG5nID0gMi4yNTgwNjMsIGxhdCA9IDQxLjU2OTQ2OSwgcG9wdXAgPSAiR1AgRVNQQcORQSIpDQpwDQoNCmBgYA0KDQoNCiMjIDxGT05UIENPTE9SPSJCbHVlIj4gNC4gRW5lcmfDrWFzIHJlbm92YWJsZXMgZW4gRXNwYcOxYTwvRk9OVD4NCg0KDQpMYXMgY2lmcmFzIHNlIGJhc2FuIGVuIGxhIGdlbmVyYWNpw7NuIGJydXRhIGRlIGVuZXJnw61hIGEgcGFydGlyIGRlIGZ1ZW50ZXMgcmVub3ZhYmxlcywgaW5jbHV5ZW5kbyBsYSBlw7NsaWNhLCBnZW90w6lybWljYSwgc29sYXIsIGJpb21hc2EgeSBlbCBhcHJvdmVjaGFtaWVudG8gZW5lcmfDqXRpY28gZGUgcmVzaWR1b3MsIHNpbiB0ZW5lciBlbiBjdWVudGEgZWwgc3VtaW5pc3RybyB0cmFuc2Zyb250ZXJpem8gZGUgZWxlY3RyaWNpZGFkLg0KDQogRXN0YSBlc3RhZMOtc3RpY2EgbXVlc3RyYSBsYSBldm9sdWNpw7NuIGFudWFsIGRlbCBwb3JjZW50YWplIGRlIGVuZXJnw61hIHByb2NlZGVudGUgZGUgZnVlbnRlcyByZW5vdmFibGVzIHNvYnJlIGVsIGNvbnN1bW8gYnJ1dG8gZmluYWwgZGUgZW5lcmfDrWEgZW4gRXNwYcOxYSBkZSAyMDA0IGEgMjAxOC4gRW4gZWwgYcOxbyAyMDE4LCBlbiB0b3JubyBhbCAxNyw1JSBkZWwgY29uc3VtbyBicnV0byBmaW5hbCBkZSBlbmVyZ8OtYSBlbiBFc3Bhw7FhIGNvcnJlc3BvbmRpw7MgYSBmdWVudGVzIGRlIGVuZXJnw61hIHJlbm92YWJsZXMuDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KI1BhcnRpY2lwYWNpw7NuIGVuZXJnaWFzIHJlbm92YWJsZXMNCnVybCA8LSAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0FuYU1hcmlhMTE5OC90cmFiYWpvX0JpZ0RhdGEvbWFpbi9jb25zdW1vLmNzdiINCmFhPC0gcmlvOjppbXBvcnQodXJsLCBzZXRjbGFzcz0idGliYmxlIikNCg0KI0dyw6FmaWNvDQpwIDwtIGdncGxvdChhYSwgYWVzKHg9RGF0ZSwgeT1Db25zdW1vLCBjb2xvcj0gRGF0ZSkpICArIGdlb21fcG9pbnQoICkgKyBnZW9tX2xpbmUoKSArDQogIGxhYnModGl0bGUgPSAiRXNwYcOxYSAyMDA0LTIwMTgiICwgc3VidGl0bGU9IlBhcnRpY2lwYWNpw7NuIGVuZXJnaWFzIHJlbm92YWJsZXMgZW4gZWwgY29uc3VtbyBkZSBlbmVyZ2lhIHRvdGFsIiwgeD0iRGF0ZSIsIHk9IkNvbnN1bW8oJSkiLCBzb3VyY2UgPSAiQVBQQSBSZW5vdmFibGVzIikNCnANCmBgYA0KDQojIyMgPEZPTlQgQ09MT1I9IkJsdWUiPiA0LjEgVGlwb2xvZ2lhIEVuZXJnaWFzIFJlbm92YWJsZXMgPC9GT05UPg0KDQpMYXMgZW5lcmfDrWFzIHJlbm92YWJsZXMgdGllbmVuIHVuYSBkaXN0cmlidWNpw7NuIGRlc2lndWFsIGVuIEVzcGHDsWEuDQpFbiBsbyByZWZlcmVudGUgYWwgc2VjdG9yIGVsw6ljdHJpY28sIG51ZXN0cm8gcGHDrXMgaGEgc2lkbyB1biByZWZlcmVudGUgZW4gaW50ZWdyYWNpw7NuIGRlIHJlbm92YWJsZXMgZW4gZWwgc2lzdGVtYSBlbMOpY3RyaWNvLiBQb3IgZWxsbywgYSBwZXNhciBkZWwgcGFyw7NuIGRlIGxvcyDDumx0aW1vcyBhw7FvcywgbcOhcyBkZWwgMzclIGRlIG51ZXN0cmEgZWxlY3RyaWNpZGFkIGZ1ZSByZW5vdmFibGUgZW4gMjAxOC4gDQoNCkVuIGVsIGHDsW8gMjAxOCBsYXMgZW5lcmfDrWFzIHJlbm92YWJsZXMgaGFuIGF1bWVudGFkbyBzdSBwYXJ0aWNpcGFjacOzbiBlbiBlbCBjb25zdW1vIGRlIGVuZXJnw61hIHByaW1hcmlhLiBMYXMgY2F1c2FzIGRlIGVzdGUgYXVtZW50byBmdWVyb24gbGEgcmVjdXBlcmFjacOzbiBkZSBsYSBnZW5lcmFjacOzbiBoaWRyw6F1bGljYSB0cmFzIGxhIHNlcXXDrWEgZGUgMjAxNywgbGEgbnVldmEgcG90ZW5jaWEgaW1wdWxzYWRhIHBvciBsYXMgc3ViYXN0YXMgeSBsYSBjb21wZXRpdGl2aWRhZCBhbGNhbnphZGEgcG9yIGFsZ3VuYXMgdGVjbm9sb2fDrWFzLg0KDQpFbiBFc3Bhw7FhIGxhIGVuZXJnw61hIHJlbm92YWJsZSBhdW1lbnTDsyB1biA4LDIlIGVuIDIwMTggaGFzdGEgcmVwcmVzZW50YXIgZWwgMTMsOSUgZGVsIHRvdGFsIGRlIGVuZXJnw61hIHByaW1hcmlhLCBsbyBxdWUgbGFzIHBvc2ljaW9uYSBlbiB0ZXJjZXIgbHVnYXIsIHBvciBkZXRyw6FzIGRlIGxvcyBwcm9kdWN0b3MgcGV0cm9sw61mZXJvcyAoNDQsOSUpIHkgZGVsIGdhcyBuYXR1cmFsICgyMSwxJSkuIFBvciBkZWJham8gZGUgbGFzIHJlbm92YWJsZXMgc2Ugc2l0dWFyb24gbGEgbnVjbGVhciBjb24gdW4gMTEsMyUgZGUgcGFydGljaXBhY2nDs24geSBlbCBjYXJiw7NuIGNvbiB1biA4LDYlDQoNCmBgYHtyLCBlY2hvPUZBTFNFfQ0KDQojRGVzY2FyZ28gZGF0b3MNCnVybDMgPC0gImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9BbmFNYXJpYTExOTgvdHJhYmFqb19CaWdEYXRhL21haW4vZW5lcmdpYXNFUy5jc3YiDQpkZDwtIHJpbzo6aW1wb3J0KHVybDMsIHNldGNsYXNzPSJ0aWJibGUiKQ0KDQojR3LDoWZpY28gYmFycmFzIHRpcG8gZW5lcmdpYXMgcmVub3ZhYmxlcyBFc3Bhw7FhDQpwMyA8LSBnZ3Bsb3QoZGQsYWVzKFRpcGUsQ29uc3Vtbyxjb2xvciA9IFRpcGUsZmlsbD0gVGlwZSkpICsNCiAgZ2VvbV9iYXIocG9zaXRpb24gPSAic3RhY2siLCAgd2lkdGggPS4xOCxzdGF0PSJpZGVudGl0eSIpICsNCiAgY29vcmRfZmxpcCgpKw0KICBnZW9tX3RleHQoYWVzKGxhYmVsPSBDb25zdW1vICxoanVzdD0tLjAzLCAgY29sb3VyPSJibGFjayIpLHNpemU9My4yKSsNCg0KICB0aGVtZShheGlzLmxpbmUgPSBlbGVtZW50X2xpbmUoY29sb3IgPSAib3JhbmdlIixzaXplPTEpKSsNCiAgICAgIHRoZW1lKHBhbmVsLmJhY2tncm91bmQ9ZWxlbWVudF9ibGFuaygpKSsNCiAgICAgIHNjYWxlX3hfZGlzY3JldGUoKSArDQogICAgeGxhYihOVUxMKSt5bGFiKE5VTEwpKw0KICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIsDQogICAgICAgICAgICAgICAgICAgICBheGlzLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDgsZmFjZT0iYm9sZCIpLA0KICAgICAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemU9MTQsZmFjZSA9ICJib2xkIikpICsNCiAgZ2d0aXRsZSgiQ29uc3VtbyBuYWNpb25hbCBkZSBlbmVyZ2lhcyByZW5vdmFibGVzIGVuIEVzcGHDsWEgZW4gMjAxNiAiICxzdWJ0aXRsZSA9ICJFbiBtaWxlcyBkZSB0b25lbGFkYXMgZXF1aXZhbGVudGVzIGRlIHBldHLDs2xlbyIpDQpwMw0KYGBgDQoNCg0KDQojIyMgPEZPTlQgQ09MT1I9IkJsdWUiPiA0LjIgRUZFQ1RPUyBQT1NJVElWT1MgZGVsIHVzbyBkZSBFbmVyZ2lhcyBSZW5vdmFibGVzIDwvRk9OVD4NCg0KPi0gQ29udHJpYnVjacOzbiBhbCBjb25zdW1vIA0KDQpFbiByZWxhY2nDs24gY29uIGxhIGVuZXJnw61hIGZpbmFsIHN1IGNvbnN1bW8gZW4gRXNwYcOxYSBhdW1lbnTDsyB1biAzLDQlIGVuIHJlbGFjacOzbiBhbCBhw7FvIDIwMTcuIEVuIDIwMTggbGFzIGVuZXJnw61hcyByZW5vdmFibGVzIHJlcHJlc2VudGFyb24gZWwgMTUsMSUgZGVsIGNvbnN1bW8gdG90YWwgZGUgZW5lcmfDrWEgZmluYWwuIA0KDQpFc3RlIHZhbG9yIGF1bWVudGEgcmVzcGVjdG8gYSAyMDE3LCBjdWFuZG8gc2UgYWxjYW56w7MgZWwgMTMsOSUsIGRlYmlkbyBhbCBhdW1lbnRvIGRlIGxhIHBhcnRpY2lwYWNpw7NuIHJlbm92YWJsZSwgZnVuZGFtZW50YWxtZW50ZSBwb3IgbGEgcmVjdXBlcmFjacOzbiBkZSBsYSBnZW5lcmFjacOzbiBoaWRyw6F1bGljYSBwYXJhIGdlbmVyYWNpw7NuIGVsw6ljdHJpY2EgeSBoYWJlciBleHBlcmltZW50YWRvIHVuIGHDsW8gY29uIGJ1ZW4gcmVjdXJzbyBlw7NsaWNvLiANCg0KTGFzIHRlY25vbG9nw61hcyByZW5vdmFibGVzIHTDqXJtaWNhcyBhdW1lbnRhcm9uIGTDqWJpbG1lbnRlIHN1IGNvbnRyaWJ1Y2nDs24sIGF1bWVudGFuZG8gc3UgcGFydGljaXBhY2nDs24gdW4gMCwzJSwgcmVwcmVzZW50YW5kbyB1biA2LDclIGRlbCB0b3RhbC4NCg0KTGEgZW5lcmfDrWEgZmluYWwgYnJ1dGEgcHJvY2VkZW50ZSBkZSBlbmVyZ8OtYSByZW5vdmFibGUgZW4gMjAxOCBmdWUgZGVsIDE3LDMlMSwgZXN0ZSB2YWxvciBlcyB1bmEgbWVkaWRhIGRlIHJlZmVyZW5jaWEgcGFyYSBlbCBjdW1wbGltaWVudG8gZGVsIG9iamV0aXZvIGRlbCAyMCUgYSAyMDIwLiANCg0KRWwgZGVzY2Vuc28gZnVlIGRlYmlkbyBhIHVuIGF1bWVudG8gZGUgbGEgZGVtYW5kYSB5IHVuYSByZWR1Y2Npw7NuIGRlIGxhIHByb2R1Y2Npw7NuIHNvbGFyLCBhIHBlc2FyIGRlIGxhIG1heW9yIHByb2R1Y2Npw7NuIGhpZHLDoXVsaWNhIHkgZcOzbGljYSBvIGVsIHJlcHVudGUgZXhwZXJpbWVudGFkbyBwb3IgbG9zIHNlY3RvcmVzIHTDqXJtaWNvcy4NCg0KDQoNCmBgYHtyLGVjaG8gPSBGQUxTRX0NCmVsX3VybCA8LSAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3hpNzY1L1RyYWJham9HcnVwby9tYWluL2VtcGxlb190dXIuY3N2Ig0KDQplbXBsZW8gPC0gcmlvOjppbXBvcnQoZWxfdXJsKQ0KDQojR3LDoWZpY28NCg0KYGBgDQoNCj4tIERpc21pbnVjacOzbiBkZXBlbmRlbmNpYSBlbmVyZ8OpdGljYQ0KDQpFc3Bhw7FhIHNpZW1wcmUgc2UgaGEgY2FyYWN0ZXJpemFkbyBwb3Igc3UgYWx0w61zaW1hIGRlcGVuZGVuY2lhIGVuZXJnw6l0aWNhIGRlIGxvcyBjb21idXN0aWJsZXMgZsOzc2lsZXMsIGxhIGN1YWwgcmVnaXN0csOzIHN1IG3DoXhpbW8gaGlzdMOzcmljbyBlbiAyMDA4LCBjdWFuZG8gbGxlZ8OzIGEgYWxjYW56YXIgZWwgODEsMyUuIEdyYWNpYXMgYSBsYSBnZW5lcmFjacOzbiBjb24gZW5lcmfDrWFzIHJlbm92YWJsZXMsIGxhIGRlcGVuZGVuY2lhIGZ1ZSBkaXNtaW51eWVuZG8gYcOxbyB0cmFzIGHDsW8gaGFzdGEgbG9zIGHDsW9zIDIwMTIgeSAyMDEzLCBjdWFuZG8gbGEgZGVwZW5kZW5jaWEgc2UgcmVkdWpvIGFsIDcwLDIlLiANCg0KRGViaWRvIGEgbGEgbW9yYXRvcmlhIHJlbm92YWJsZSBlc3RhIGRpc21pbnVjacOzbiBzZSBpbnRlcnJ1bXBpw7MsIG1hbnRlbmnDqW5kb3NlIGVuIGVsIGVudG9ybm8gZGVsIDczJSBsb3MgYcOxb3Mgc2lndWllbnRlcywgYSBleGNlcGNpw7NuIGRlIDIwMTYuIEVuIDIwMTcsIGRlYmlkbyBhIGxhIGZ1ZXJ0ZSBzZXF1w61hLCBsYSBkZXBlbmRlbmNpYSBzZSBkaXNwYXLDsyBoYXN0YSBlbCA3Myw5JSwgY2lmcmEgcXVlIHNlIGhhIG1vZGVyYWRvIGVuIDIwMTgsIGHDsW8gZW4gZWwgcXVlIGxhIGRlcGVuZGVuY2lhIGVuZXJnw6l0aWNhIHNlIHNpdHXDsyBlbiBlbCA3Myw0JS4gDQoNClBvciBjb25zaWd1aWVudGUsIHNpbiB0ZW5lciBlbiBjdWVudGEgbGEgZW5lcmfDrWEgbnVjbGVhciwgbGEgY3VhbCBzZSBjb25zaWRlcmEgYXV0w7NjdG9uYSwgYXVucXVlIG5vIHNlYSBuYWNpb25hbCBlbCBvcmlnZW4gZGVsIG1hdGVyaWFsIGVtcGxlYWRvIGNvbW8gY29tYnVzdGlibGUsIG51ZXN0cm8gcGHDrXMgc2Ugc2l0w7phIGNlcmNhIGRlIHZlaW50ZSBwdW50b3MgcG9yY2VudHVhbGVzIHBvciBlbmNpbWEgZGUgbGEgbWVkaWEgZGUgbG9zIDI4IHBhw61zZXMgZGUgbGEgVW5pw7NuIEV1cm9wZWEsIGN1eWEgZGVwZW5kZW5jaWEgYWxjYW56w7MgZWwgNTUsMSUgZW4gMjAxNy4gDQoNCkxhcyBlbmVyZ8OtYXMgcmVub3ZhYmxlcywgYWwgc2VyIGZ1ZW50ZXMgZGUgZW5lcmfDrWEgbGltcGlhcywgYXV0w7NjdG9uYXMgZSBpbmFnb3RhYmxlcywgcmVzdWx0YW4gdW5hIGhlcnJhbWllbnRhIGZ1bmRhbWVudGFsIHkgbmVjZXNhcmlhIHBhcmEgc29sdWNpb25hciBlc3RlIGdyYXZlIHByb2JsZW1hIGRlIGRlcGVuZGVuY2lhIGVuZXJnw6l0aWNhLCBxdWUgdmllbmUgYWZlY3RhbmRvIGEgbnVlc3RybyBwYcOtcyBkZXNkZSBoYWNlIHRhbnRvIHRpZW1wby4NCg0KYGBge3IsIGVjaG89RkFMU0V9DQojR3LDoWZpY28gZGUgbGluZWFzDQoNCnVybDEgPC0gImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9BbmFNYXJpYTExOTgvdHJhYmFqb19CaWdEYXRhL21haW4vZGVwZW5kZWNpYS5jc3YiDQpiYjwtIHJpbzo6aW1wb3J0KHVybDEsIHNldGNsYXNzPSJ0aWJibGUiKQ0KDQojQXJyZWdsYXIgZGF0b3MNCmJiIDwtIGJiICU+JSBtdXRhdGUoIENvdW50cnkgPSBzdHJpbmdyOjpzdHJfcmVwbGFjZV9hbGwoQ291bnRyeSAsIHBhdHRlcm4gPSAiW8KxXSIgLCByZXBsYWNlbWVudCA9ICJ5IiApKQ0KYmIgPC0gYmIgJT4lIG11dGF0ZSggQ291bnRyeSA9IHN0cmluZ3I6OnN0cl9yZXBsYWNlX2FsbChDb3VudHJ5ICwgcGF0dGVybiA9ICJbw4NdIiAsIHJlcGxhY2VtZW50ID0gIm4iICkpDQoNCiNHcsOhZmljbw0KcDEgPC0gZ2dwbG90KGJiLCBhZXMoeD0gRGF0ZSwgeT0gRGVwZW5kZW5jaWEgLCBncm91cD1Db3VudHJ5LCBjb2xvcj1Db3VudHJ5KSkgKyBnZW9tX2xpbmUoKSArIGZhY2V0X2dyaWQoQ291bnRyeSB+IC4pICsNCiAgZXhwYW5kX2xpbWl0cyh5PTIpICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSArIGxhYnModGl0bGUgPSAiIERlcGVuZGVuY2lhIGVuZXJnw6l0aWNhIDIwMTEtMjAxOCAiLCAgY2FwdGlvbiA9ICJTb3VyY2U6QVBQQSBSZW5vdmFibGVzIiwNCiAgICAgICAgICAgICAgeCA9ICJGZWNoYSAiLA0KICAgICAgICAgICAgICB5ID0gTlVMTCwNCiAgICAgICAgICAgICAgY29sb3IgPSAiQ29udGluZW50ZSIsDQogICAgICAgICAgICAgIHN1YnRpdGxlID0gIkVuIHBvcmNlbnRhZ2VzIikNCg0KcGxvdGx5OjpnZ3Bsb3RseShwMSkNCg0KYGBgDQoNCg0KDQojIyMgPEZPTlQgQ09MT1I9IkJsdWUiPiA0LjMgRW1wbGVvIDwvRk9OVD4gDQoNCkNvbiB1biBpbmNyZW1lbnRvIGRlbCAzLDMlIHJlc3BlY3RvIGFsIGHDsW8gYW50ZXJpb3IsIGVsIFNlY3RvciBSZW5vdmFibGUgcmVnaXN0csOzIHVuIHRvdGFsIGRlIDgxLjI5NCBlbXBsZW9zIGVuIHTDqXJtaW5vcyBnbG9iYWxlcyBlbiAyMDE4LiBMYSBjcmVhY2nDs24gZGUgZW1wbGVvIGRlIGZvcm1hIG5ldGEgcmVzcGVjdG8gYSAyMDE3IGZ1ZSwgcG9yIHRhbnRvLCBkZSAyLjYyNyBudWV2b3MgcHVlc3RvcyBkZSB0cmFiYWpvLg0KDQpBIHBlc2FyIGRlbCBjb250aW51byBjcmVjaW1pZW50byBkZSBsYSBjcmVhY2nDs24gZGUgbnVldm9zIHB1ZXN0b3MgZGUgdHJhYmFqbyBlbiBlbCBTZWN0b3IsIGHDum4gc2Ugc2l0w7phIGxlam9zIGRlIGFsY2FuemFyIGxhcyBtYXlvcmVzIHRhc2FzIGRlIGVtcGxlbyBxdWUgdml2aW1vcyBlbiBlbCBhw7FvIDIwMDgsIGxsZWdhbmRvIGEgdW5hIGNpZnJhIGNlcmNhbmEgYSAxNDUuMDAwIGVtcGxlb3MgZGlyZWN0b3MgZSBpbmRpcmVjdG9zLg0KDQpMYXMgdGVjbm9sb2fDrWFzIHF1ZSBjcmVhcm9uIG51ZXZvcyBwdWVzdG9zIGRlIHRyYWJham8gbmV0b3MgZW4gMjAxOCBmdWVyb24gbGEgZcOzbGljYSAoMS45NjEpLCBsYSBzb2xhciBmb3Rvdm9sdGFpY2EgKDk2NiksIGxvcyBiaW9jYXJidXJhbnRlcyAoMTU4KSwgbGEgbWluaWhpZHLDoXVsaWNhICg1MyksIGxhIGdlb3Rlcm1pYSBkZSBiYWphIGVudGFscMOtYSAoMTMpLCBsYSBtYXJpbmEgKDExKSBsYSBzb2xhciB0w6lybWljYSAoOSksIGxhIG1pbmllw7NsaWNhICgzKSB5IGxhIGdlb3Rlcm1pYSBkZSBhbHRhIGVudGFscMOtYSAoMykuIFBvciBlbCBjb250cmFyaW8sIGRlc3RydXllcm9uIGVtcGxlbyBzb2xhbWVudGUgbGEgYmlvbWFzYSAoLTUwNykgeSBsYSBzb2xhciB0ZXJtb2Vsw6ljdHJpY2EgKC00MykuDQoNCg0KYGBge3IsIGVjaG89RkFMU0V9DQoNCiNDYXJnbyBkYXRvcw0KdXJsNCA8LSAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0FuYU1hcmlhMTE5OC90cmFiYWpvX0JpZ0RhdGEvbWFpbi9lbXBsZW8uY3N2Ig0KZWU8LSByaW86OmltcG9ydCh1cmw0LCBzZXRjbGFzcz0idGliYmxlIikNCg0KI1RhYmxhDQprYWJsZShlZSkgJT4lDQogIGthYmxlRXh0cmE6OmthYmxlX3N0eWxpbmcoZml4ZWRfdGhlYWQgPSBsaXN0KGVuYWJsZWQgPSBULCBiYWNrZ3JvdW5kID0gImxpZ2h0Ymx1ZSIpKSAlPiUNCiAga2FibGVfcGFwZXIoZnVsbF93aWR0aCA9IEYpICU+JSByb3dfc3BlYygxMCwgYm9sZCA9IFQsIGNvbG9yID0gInJlZCIpICU+JSByb3dfc3BlYygxMSwgYm9sZCA9IFQsIGNvbG9yID0gInJlZCIpICU+JQ0KICBjb2x1bW5fc3BlYygyLCBjb2xvciA9ICJibGFjayIsDQogICAgICAgICAgICAgIGxpbmsgPSAiaHR0cHM6Ly93d3cudHVkbi5jb20vZnV0Ym9sL3ByZW1pZXItbGVhZ3VlL2p1cmdlbi1rbG9wcC15LWtldmluLWRlLWJydXluZS1zb24tZWwtbWVqb3ItdGVjbmljby15LWp1Z2Fkb3ItZGUtbGEtcHJlbWllci1sZWFndWUiKQ0KDQoNCmBgYA0KDQoNCiMjIDxGT05UIENPTE9SPSJCbHVlIj4gNS4gTWVkaW8gYW1iaWVudGUgPC9GT05UPiANCg0KQWxndW5vcyBkZSBsb3MgYmVuZWZpY2lvcyBkZSBsYXMgZW5lcmfDrWFzIHJlbm92YWJsZXMgc2UgcHJvZHVjZW4gYWwgc3VzdGl0dWlyIGVuZXJnw61hcyBmw7NzaWxlcyB5IGNvbnRhbWluYW50ZXMgY29uIGVuZXJnw61hcyBsaW1waWFzLiBFc3RvcyBiZW5lZmljaW9zLCBjb21vIGVsIGltcGFjdG8gcG9zaXRpdm8gZW4gbGEgYmFsYW56YSBjb21lcmNpYWwgeSBlbCBhaG9ycm8gZW4gZGVyZWNob3MgZGUgZW1pc2nDs24sIHNvbiBlY29uw7NtaWNhbWVudGUgY3VhbnRpZmljYWJsZXMuIA0KDQpHcmFjaWFzIGFsIGltcGFjdG8gZW4gbGEgZ2VuZXJhY2nDs24gZWzDqWN0cmljYSwgZW5lcmfDrWEgdMOpcm1pY2EgeSBsb3MgYmlvY2FyYnVyYW50ZXMsIGVsIFNlY3RvciBkZSBsYXMgRW5lcmfDrWFzIFJlbm92YWJsZXMgZXZpdMOzIGVuIDIwMTggbGEgaW1wb3J0YWNpw7NuIGRlIDIwLjczMi4yNDAgdG9uZWxhZGFzIGVxdWl2YWxlbnRlcyBkZSBwZXRyw7NsZW8gKHRlcCkgZGUgY29tYnVzdGlibGVzIGbDs3NpbGVzLCBxdWUgZ2VuZXLDsyB1biBhaG9ycm8gZWNvbsOzbWljbyBlcXVpdmFsZW50ZSBkZSA4LjU0NyBtaWxsb25lcyBkZSBldXJvcy4gDQoNCkVsIGF1bWVudG8gZGVsIGFob3JybyAoKzIyJSkgc2UgZGViZSBhIGRvcyByYXpvbmVzOiB1bmEgbWF5b3Igc3VzdGl0dWNpw7NuIGRlIHRvbmVsYWRhcyBkZSBjb21idXN0aWJsZSBmw7NzaWwgc3VzdGl0dWlkYXMgeSB1biBhdW1lbnRvIGRlbCBjb3N0ZSBkZSBsYXMgbWF0ZXJpYXMgcHJpbWFzIGRlIG9yaWdlbiBmw7NzaWwuDQoNCkxhcyB0ZWNub2xvZ8OtYXMgcmVub3ZhYmxlcyB0YW1iacOpbiBldml0YXJvbiBxdWUgc2UgZW1pdGllcmFuIGEgbGEgYXRtw7NzZmVyYSA1Ni42NTkuMjI2IHRvbmVsYWRhcyBkZSBDTzIsIGxvIHF1ZSBwZXJtaXRpw7MgYWhvcnJhciBwYWdvcyBlbiBjb25jZXB0byBkZSBkZXJlY2hvcyBkZSBlbWlzacOzbiBwb3IgdmFsb3IgZGUgODk5IG1pbGxvbmVzIGRlIGV1cm9zLiBFbCBhaG9ycm8gZWNvbsOzbWljbyBoYSBhdW1lbnRhZG8gZW4gdW4gMTcxJSwgZnJ1dG8gZGVsIGZ1ZXJ0ZSBpbmNyZW1lbnRvIGRlbCAxNjglIGRlbCBwcmVjaW8gbWVkaW8gZGUgbG9zIGRlcmVjaG9zIGRlIGVtaXNpw7NuIHBvciB0b25lbGFkYSBkZSBDTzIgZXZpdGFkYS4NCg0KDQpgYGB7ciwgZWNobz1GQUxTRX0NCmtuaXRyOjppbmNsdWRlX2dyYXBoaWNzKCJodHRwczovL3d3dy5tZXRlb3JvbG9naWFlbnJlZC5jb20vd3AtY29udGVudC91cGxvYWRzLzIwMTcvMDkvZGVzaGllbG8uanBnLndlYnAiKQ0KDQpgYGANCg0KDQojIyA8Rk9OVCBDT0xPUj0iQmx1ZSI+IDYuIEVuIHRpZW1wb3MgZGUgQ09WSUQtMTk8L0ZPTlQ+DQoNCkNvbiBsYSBudWV2YSBzaXR1YWNpw7NuIHNhbml0YXJpYSBsYXMgcGVyc29uYXMgZXN0YW4gbcOhcyBhdGVudGFzIGEgc3Ugc2FsdWQgeSBhIHN1ICoqZW50b3JubyoqLiBFc3RvIGhhY2UgcXVlIHNlYW4gbcOhcyBjb25zY2llbnRlcyBkZSBsb3MgcmVjdXJzb3MgcXVlIHRlbmVtb3MuDQoNCkhlbW9zIHBvZGlkbyBjb21wcm9iYXIgcXVlIGVsIG1lZGlvYW1iaWVudGUgbm8gc29sbyB0aWVuZSBjb3NhcyBwb3NpdGl2YXMgY29tbyBmdWVudGVzIGRlIGVuZXJnaWFzIG5hdHVyYWxlcyBzaW7DsiB0YW1iaWVuIG5lZ2F0aXZhcyBjb21vIGwnYXBhcmljacOzbiBkZSB2aXJ1cyBvIGFuaW1hbGVzIGxldGFsZXMuIEVzdGUgYW1iaWVudGUgc2UgdmUgYWZlY3RhZG8gc2kgbm8gc2UgY3VpZGEuDQoNClRhbWJpw6luIGRlbGFudGUgZGUgdW5hIHNpdHVhY2nDs24gYXPDrSB2ZW1vcyBhZmVjdGFkYSBzaWduaWZpY2F0aXZhbWVudGUgbnVlc3RyYSBlY29ub21pYSB5YSBxdWUgZW5lcmdldGljYW1lbnRlIGRlcGVuZGVtb3MgbXVjaG8gZGVsIGV4dGVyaW9yLiBEZSBoZWNobywgRXNwYcOxYSBmaWd1cmEgIGVudHJlIGxvcyBwYcOtc2VzIG3DoXMgZ29scGVhZG9zIHBvciBsYSBwYW5kZW1pYS4NCg0KUG9yIGxvIHF1ZSBpbmNlbnRpdmEgYSBpbnZlcnRpciB5IHByaW9yaXphciBvdHJvIHRpcG8gZGUgZW5lcmfDrWFzIHByb2NlZGVudGVzIGRlIHJlY3Vyc29zIG5hdHVyYWxlcyBwYXJhIGxsZWdhciBhIGRpc21pbnVpciBlc3RhIGRlcGVuZGVuY2lhIHkgbWVqb3JhciBudWVzdHJvIHBhw61zLg0KDQoNCmBgYHtyfQ0Ka25pdHI6OmluY2x1ZGVfZ3JhcGhpY3MoImh0dHBzOi8vc3RhdGljMy5hYmMuZXMvbWVkaWEvZWNvbm9taWEvMjAyMC8wNC8yMC9lbmVyZ2lhLXJlbm92YWJsZS1ramNCLS02MjB4MzQ5QGFiYy5qcGciKQ0KDQpgYGANCg0KDQoNCiMjIDxGT05UIENPTE9SPSJCbHVlIj4gNy4gQ29uY2x1c2lvbmVzPC9GT05UPg0KDQpDb24gZXN0ZSB0cmFiYWpvIGhlIHBvZGlkbyBhbmFsaXphciBsYSBpbXBvcnRhbmNpYSBkZSBsYXMgZW5lcmdpYXMgcmVub3ZhYmxlcyBlbiBFc3Bhw7FhLCB0YW50byBkZW50cm8gZGUgZXN0YSwgYW5hbGl6YW5kbyBsb3MgdGlwb3MgZGUgZW5lcmdpYXMgcXVlIG3DoXMgc2UgdXRpbGl6YW4sIGNvbW8gZW4gZWwgZXh0ZXJpb3IgdmllbmRvIGxhIHBvc2ljacOzbiBkZSBsYXMgZW5lcmdpYXMgcmVub3ZhYmxlcyByZXNwZWN0byBhIGxhIHJlc3RhIGRlIGVuZXJnaWFzIGEgbml2ZWwgZ2xvYmFsLiANCg0KUG9yIG90cmEgcGFydGUgaGUgdmlzdG8gcXVlIGVuIGxvcyDDumx0aW1vcyBhw7FvcyB0YW50byBsYSBpbnZlcnNpw7NuIGNvbW8gZWwgY29uc3VtbyBkZSBlbmVyZ2lhcyByZW5vdmFibGVzIGhhbiBhdW1lbnRhZG8gY29uc2lkZXJhYmxlbWVudGUgZW4gbGEgZWNvbm9taWEgZXNwYcOxb2xhLg0KDQpQZXJvIG5vIHNvbG8gZXNvLHRhbWJpw6luIGhlIHZpc3RvIGNvbW8gaGEgcGVzYXIgZGUgc2VyIHVuIHNlY3RvciBlbiBjcmVjaW1pZW50bywgZXN0ZSBjcmVjaW1pZW50byBzZSBoYSByZWR1Y2lkbyBkZWJpZG8gYSBsYSBsbGVnYWRhIGRlIGxhIG51ZXZhIHNpdHVhY2nDs24gc2FuaXRhcmlhLg0KDQpBc8OtIHF1ZSBjcmVvIHF1ZSBlcyBpbXBvcnRhbnRlIHNlZ3VpciBpbnZpcnRpZW5kbyBlbiBlc3RlIHRpcG8gZGUgZW5lcmdpYXMgeSBidXNjYXIgbnVldmFzIGZvcm1hcyBkZSBjb25zdW1vIGRlIGVuZXJnaWFzIHJlbm92YWJsZXMgcXVlIG5vcyBwZXJtaXRhbiByZWR1Y2lyIGVsIHVzbyBkZWwgcmVzdG8gZGUgZW5lcmdpYXMuDQoNCg0KIyMgPEZPTlQgQ09MT1I9IkJsdWUiPiA4LiBCaWJsaW9ncmFmaWEgPC9GT05UPg0KDQo+LSBQw6FnaW5hIG9maWNpYWwgZGVsIEluc3RpdHV0byBOYWNpb25hbCBkZSBFc3RhZMOtc3RpY2EuIFthcXXDrV0oaHR0cHM6Ly93d3cuaW5lLmVzL2R5bmdzL0lORWJhc2UvbGlzdGFvcGVyYWNpb25lcy5odG0pDQoNCj4tIFDDoWdpbmEgZGUgYW5hbGlzaXMgZXN0YWTDrXN0aWNvcyBbYXF1w61dKGh0dHBzOi8vZXMuc3RhdGlzdGEuY29tL3RlbWFzLzY2NzUvbGFzLWVuZXJnaWFzLXJlbm92YWJsZXMtZW4tZXNwYW5hLyM6fjp0ZXh0PSUyMExhcyUyMGVuZXJnJUMzJUFEYXMlMjByZW5vdmFibGVzJTIwZW4lMjBFc3BhJUMzJUIxYSUyMC0lMjBEYXRvcyxFbmVyZyVDMyVBRGElMjBzb2xhciUyMGZvdG92b2x0YWljYSUyMDYlMjBFbmVyZyVDMyVBRGElMjBoaWRyJUMzJUExdWxpY2ElMjBNb3JlJTIwKQ0KDQo+LSBSZWQgRWzDqWN0cmljYSBkZSBFc3Bhw7FhICgqKlJFRSoqKSBbYXF1w61dKGh0dHBzOi8vd3d3LnJlZS5lcy9lcy9kYXRvcy9wdWJsaWNhY2lvbmVzL2luZm9ybWUtZGUtZW5lcmdpYXMtcmVub3ZhYmxlcy9pbmZvcm1lLTIwMTkpDQoNCg0KPi0gQVBQQSBSZW5vdmFibGVzW2FxdcOtXShodHRwczovL3d3dy5hcHBhLmVzL2VuZXJnaWFzLXJlbm92YWJsZXMvcmVub3ZhYmxlcy1lbi1lc3BhbmEvIzp+OnRleHQ9RW4lMjBFc3BhJUMzJUIxYSUyMGxhJTIwZW5lcmclQzMlQURhJTIwcmVub3ZhYmxlLG5hdHVyYWwlMjAoMjElMkMxJTI1KS4pDQoNCiANCg0KDQoNCg0KDQotLS0tLS0tLS0tLS0tLS0tDQoNCjxicj48YnI+DQoNClBhcmEgYWNhYmFyIGVzdGUgY2h1bmsgcGFyYSBpbmNsdWlyIHR1IGBzZXNzaW9uIGluZm9gOg0KDQpgYGB7cn0NCnNlc3Npb25pbmZvOjpzZXNzaW9uX2luZm8oKSAlPiUgZGV0YWlsczo6ZGV0YWlscyhzdW1tYXJ5ID0gJ2N1cnJlbnQgc2Vzc2lvbiBpbmZvJykgDQpgYGANCg==