Universidad Nacional De Colombia- Sede Bogota
Facultad De Ciencias Agrarias
Diego Arturo Gonzalez Delgadillo
24/06/2020
1.Introduccion
El estudio de las variables climatologicas en los territorios permite extraer informacion importante y de gran utilidad, que puede ser usada con diferentes fines economicos, sociales y culturales. Una de las variables climatologicas mas importantes es la precipitacion. La precipitacion es un fenómeno meteorológico por el cual el vapor de agua se condensa y llega al suelo en forma de nieve, granizo, rocío y principalmente agua lluvia.(IDEAM., 2005). El agua es importante para la existencia de los seres vivos y para el ecosistema. El conocimiento de la distribución de la precipitación permite mejorar la planificación, contar con un calendario agrícola, conocer la disponibilidad de agua o escasez de agua en una localidad, etc. En los diferentes países, los principales factores que condicionan la precipitación son la presencia de la cordillera de los andes, el Anticiclón del Pacífico Sur, la corriente de Humboldt y las perturbaciones de la Circulación General de la Atmósfera.(IDEAM., 2005). La cantidad de precipitación se mide con un pluviómetro, dispositivo que cuenta con una probeta graduada, o con el pluviógrafo, que tiene una banda registradora. La medición de la precipitación mediante estaciones in situ posee grandes limitaciones en términos de cobertura geográfica y uniformidad temporal. Por un lado existen zonas de difícil acceso donde la instalación y seguimiento de estaciones resulta inviable y por otro lado las series de tiempo de las estaciones instaladas suelen presentar datos faltantes y una gran variedad de periodos de registro. Adicionalmente se pueden presentar errores de medición o de sistematización de los datos en el caso de estaciones manuales; aun así siguen siendo la forma más directa para la medición de la precipitación y su información sirve como insumo para la calibración y validación de diferentes productos de precipitación tales como modelos, mediciones satelitales y de radar. (Viviana et al., 2016)
A nivel practico, el muestreo de precipitacion en extensiones de terreno muy amplias, por ejemlo, el departamento de Arauca en Colombia, resulta una tarea ardua y costosa, en especial cuando en Colombia la distribución espacial de las estaciones de medición de precipitación es bastante inequitativa; aproximadamente la mitad se encuentran ubicadas en la región Andina que corresponde al 19% del territorio colombiano, en contraste con la región Amazonía y Orinoquía que juntas alcanzan un 57% del área y tan solo el 12% (Viviana et al., 2016). Una solucion para este problema es el uso de datos de precipitacion global junto con rasters de la zona de estudio y asi lograr interpolar valores y celdas (rasters), que arrojara una superficie continua, esto junto a herramientas de mapeo, se logra conseguir una representacion grafica del departamento que muestre de manera clara, sencilla e interactiva datos de precipitacion en un momento especifico del año.
La interpolacion consiste el cálculo de los valores desconocidos de una variable espacial a partir de otros valores cuyo valor es conocido. Los métodos de interpolación permiten generar superficies continuas a partir de medidas en localizaciones puntuales (muestra o puntos muestrales). Cuando se habla de interpolación espacial mediante Sistemas de Información Geográfica se podueden distinguir una serie de métodos que se clasifican según su naturaleza:
*Deterministas: Generan superficies continuas mediante el grado de similitud o suavizado. Dentro de esta categoría encontramos los métodos globales, locales, IDW y Spline.
*Geoestadísticos: Generan superficies continuas a partir de las propiedades estadísticas de los datos de partida. Dentro de esta categoría encontramos Kriging y Cokriging.(Luis. 2020 )
El objetivo de este trabajo es representar mapas de precipitacion en el departamento de Arauca, para la ultima semana de abril, haciendo uso de datos CHIRPS V2.0 y de al menos 3 tecnicas de interpolacion diferentes y hacer una comparacion entre ellas; Ademas se pretende analizar la informacion obtenida para proponer una hipotesis sobre la condicion del recurso hidrico en el departamento.
2.Describcion de la Zona de Estudio
El departamento de Arauca se localiza en el sector norte de la Orinoquía colombiana en el límite con Venezuela y está compuesto por siete municipios: Arauca (ciudad capital), Arauquita, Cravo Norte, Fortul, Puerto Rondón, Saravena y Tame; su superficie es de 23.818 km2 que corresponde al 2,1% del total nacional. El departamento limita por el norte con el río Arauca, que lo separa de la República de Venezuela; por el este, con la República de Venezuela; por el sur, con los ríos Meta y Casanare, que lo separan de los departamentos del Vichada y Casanare; y por el oeste, con el departamento de Boyacá. (Min Trabajo et al., 2015)
Geografia e Hidrologia
El departamento de Arauca está compuesto por tres conjuntos morfológicos: la Cordillera Oriental, el Piedemonte Llanero y la Llanura Aluvial: La Cordillera Oriental, en el occidente, representa el 15% de la superficie departamental, aproximadamente. Contiene elevaciones desde los 500 metros en límites con el piedemonte llanero, hasta los 5.380 m en la Sierra Nevada del Cocuy, la cual tiene entre sus accidentes más notables los cerros de La Plaza, La Piedra, El Diamante, Los Altos, Nievecitas, Los Osos y las cuchillas Altamira y El Salitre. El área de piedemonte está conformada por conos, abanicos aluviales y terrazas de relieve plano a inclinado, cubierta de vegetación de sabana y bosque ecuatorial. Y la llanura aluvial, o zona de sabanas, que se extiende desde el piedemonte hasta los límites con la República Bolivariana de Venezuela, el modelado es de terrazas y llanuras aluviales de desborde, cubierta por vegetación de sabana inundable y por bosque de galería en las vegas de los ríos y caños.(Min Trabajo et al., 2013).
Las características fisiográficas del departamento, según el documento de los mapas de situación nutricional en Colombia 2010, son:
- El 58,0% es susceptible a inundaciones.
- Un 42,0% es vulnerable a sequías.
- El 19,5% del territorio presenta bosques naturales.
- Un 11,5% corresponde a reservas forestales.
- Un poco más del 7,0% pertenece a parques nacionales naturales.
- Los suelos tienden a ser viejos, con tendencia a la acidez, y de baja fertilidad natural que desfavorecen el desarrollo de varios proyectos agrícolas y moldean la ganadería que tiene que hacerse de forma extensiva (Min Salud et al., 2010).
La red hidrográfica es extensa; todo el sistema fluvial desagua en dirección occidente – oriente hacia el Orinoco, a través de los ríos Arauca, Casanare, Tocoragua, Tame, Cravo Norte, Ele, Lipa, San Miguel y el Conjunto Negro – Cinaruco, además de numerosas quebradas, caños y lagunas.(SCN, 2015).Las cuencas de los ríos Arauca y Casanare tienen una gran importancia pues, además de ser ecosistemas estratégicos para la región, son un referente básico para la sub-regionalización del territorio araucano, para los procesos de planeación y negociación binacional; además sirven como vías de comunicación y como fuentes de subsistencia por el recurso pesquero. (SPNN, 2013)
Clima
En Arauca, la temporada de lluvia es opresiva y nublada, la temporada seca es bochornosa y mayormente nublada y es muy caliente durante todo el año. Durante el transcurso del año, la temperatura generalmente varía de 22 °C a 36 °C y rara vez baja a menos de 21 °C o sube a más de 39 °C.(IDEAM., 2020). El departamento de Arrauca esta clasificado como de clima calido humedo y calido semihumedo, segun el sistema caldas-lang.
El promedio de lluvia total anual es de 1804 mm. Durante el año, presenta una temporada seca y una temporada de lluvias. La temporada seca se extiende de diciembre a marzo. En estos meses llueve entre 0 y 5 día al mes. De mayo a octubre se presenta la temporada de mayores lluvias; la frecuencia de días llluviosos en estos meses es de 18 a 21. Los meses de abril y noviembre pueden considerarse de transición y en promedio registran alrededor de 8-10 días con lluvia por mes.(IDEAM., 2020)
ning昼㹡n argumento finito para min; retornando Infningun argumento finito para max; retornando -Inf
Condisiones socieconomicas Y Demografia
Según el Departamento Administrativo Nacional de Estadística (DANE), la proyección de la población para el departamento de Arauca en el 2012 fue de 253.565 personas, el cual representa el 0,5% de la población colombiana;Asi mismo el total de personas con Necesidades Básicas Insatisfechas (NBI) del departamento de Arauca es de 35,9%, mayor en 8,1 puntos porcentuales al total nacional (27,8%). Por su parte, las personas en miseria según esta metodología se encuentran en 14,0, mayor al total nacional en 3,4 puntos porcentuales. El componente más crítico del indicador de NBI del departamento de Arauca es la vivienda, con una participación en el total de 19%: en cabecera con 15,5% y el resto. De 44,7%, que expresa una baja calidad de las vivienda, por ser viviendas móviles, o ubicadas en refugios naturales o bajo puentes, sin paredes, con paredes de tela, de materiales de desecho o con pisos de tierra (en zona rural el piso de tierra debe estar asociado a paredes de material semipermanente o perecedero).(DANE., 2013)
Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1

3.Describcion de Datos y Metodos
3.1. Datos
Entre los recursos disponibles para la descarga de datos de precipitación mundial diaria se encuentra CHIRPS V2.0 (Climate Hazards Group InfraRed Precipitation with Station data).CHIRPS V2.0 puede ofrecer datos diarios de precipitación desde hace más de 30 años y con una resolución de 0,05 y 0,25 grados (5,5 y 28 km aproximadamente) en formatos BIL, TIF o NetCDF estan disponible al público desde 2014.(Viviana et al., 2016)
CHIRPS V2.0 nace de la colaboración entre el Servicio Geológico de los EEUU (USGS) y el Earth Resources Observation and Science (EROS). Sus datos de precipitación difieren de los que habitualmente podrías utilizar ya que presentan un trasfondo analítico doble. La estimación de la precipitación de CHIRPS V2.0 no está ligada únicamente a estaciones meteorológicas sino que combina estaciones meteorológicas junto a estimaciones de precipitación basadas en satélites de la NASA y NOAA. Con esta fusión de recursos se evita el sesgo que sufren las estimas de los pluviómetros en zonas rurales (por escasez de estaciones) y las estimas de datos satélites en territorios complejos obteniendo un producto mixto mejorado.(Funk et al., 2015)
CHIRPS V2.0 conserva características importantes de la precipitación como la media y la estacionalidad en las tres escalas de tiempo. La varianza está mejor representada en las escalas mensual y anual; en la escala diaria es menor en CHIRPS que en IDEAM, lo cual se ve reflejado a su vez en las diferentes medidas del error y en el análisis de probabilidad. La base de datos CHIRPS es un insumo valioso para el estudio y la gestión del agua en Colombia (Viviana et al., 2016)
Los datos usados en este trabajo fueron descargados en el siguiente link: https://data.chc.ucsb.edu/products/CHIRPS-2.0/, el dia 13 de junio del año 2020 y corresponden a la precipitacion de la ultima semana de abril del mismo año.
Ademas del uso de los datos CHIRPS V2.0, en este trabajo se empleo un raster en formato sph, para delimitar el area de estudio y lograr las interpolaciones, estos datos fueron obtenidos del siguiente enlace: https://www.dane.gov.co/index.php/estadisticas-por-tema/agropecuario/censo-nacional-agropecuario-2014
3.2. Metodos
Para cumplir con el objetivo de este trabajo, se utilizaron diferentes metodos de interpolacion espacial.
En primer lugar se uso los Polígonos de Thiessen los cuales permite establecer relaciones matemáticas entre elementos generando zonas de influencia con unas premisas matemáticas específicas.(Geoinnova., 2020) En este caso, la relación parte de una nube de puntos sobre los que se generan una serie de polígonos. Los puntos se unen entre sí y se proyectan matrices entre los segmentos de unión siendo dichas matrices los lados de los polígonos resultantes.Los lados de los polígonos generados, son equidistantes a los puntos vecinos y tratan de encontrar la menor distancia posible. Los lados de cada polígono se encuentran a la misma distancia de un punto que de otro.
En segundo lugar se uso la interpolación mediante distancia inversa ponderada (IDW), la cual determina los valores de celda a través de una combinación ponderada linealmente de un conjunto de puntos de muestra. La ponderación es una función de la distancia inversa. La superficie que se interpola debe ser la de una variable dependiente de la ubicación. Este método supone que la variable que se representa cartográficamente disminuye su influencia a mayor distancia desde su ubicación de muestra.(ESRI., 2020). En este caso puntual al trata de una variable continua como la precipitacion, se asimila que los valores son poco fluctuantes en zonas cercanas, lo que mpermite delimitar areas de forma claro segun la variabilidad de la precipitacion.
En tercer lugar se utilizo Kriging, segun el portal ArcMap de ESRI(2020), Kriging es un procedimiento geoestadístico avanzado que genera una superficie estimada a partir de un conjunto de puntos dispersados con valores z, está basado en modelos estadísticos que incluyen la autocorrelación, es decir, las relaciones estadísticas entre los puntos medidos. El método Kriging cuantifica la estructura espacial de los datos mediante el uso de variogramas llamados algunas veces semivariogramas debido a su similitud en el cálculo y los predice mediantela interpolación, usando estadística. Se asume que los datos más cercanos a un punto conocido tienen mayor peso o influencia sobre la interpolación, influencia que va disminuyendo conforme se aleja del punto de interés. Asi mismo supone que la distancia o la dirección entre los puntos de muestra reflejan una correlación espacial que puede utilizarse para explicar la variación en la superficie, en este caso puntual la precipitacion. Se asume que los datos más cercanos a un punto conocido tienen mayor peso o influencia sobre la interpolación, influencia que va disminuyendo conforme se aleja del punto de interés.
4. Presentacion de Resultados
Para la elaboracion de las interpolaciones y por consiguiente de los mapas se siguieron varios pasos, se empezo procesando los datos CHIRPS , para delimitar el area de estudio se cargo un archivo sph y se procedio a recortarlo, y poner una "mascara que permitiria asegurar un correcto corte en un futuro, este fue el resultado.

En un segundo momento se procedio a convertir el raster en puntos, Y se guardan los puntos en el disco en un formato diferente para tener un soporte en caso de que salga mal.

Posteriormente se convirtio esto de una caracteristica espacial a una plana, para poder interpolar, a su ves se disolvieron los limites internos y se conviertieron ahora en un marco espacial. En un tercer momento se realizo una interseccion con la herramienta sf entre los codigos de los municipios del departamentos y los datos de precipitacion, para que asi cada territorio tuviera un nombre y valor. Se reproyecto esto a cordenadas geograficas magna y asi mismo se convirtio en un objeto espacial y esto se guardo en un conjuto de datos intermedio en formato sph.
INTERPOLACION DE LOS DATOS DE PRECIPITACION
1.Polígonos de Thiessen
Se empezo crando una superficie teselada y se procedio a plotear el resultado

2. Interpolación Ponderada de Distancia Inversa (IDW)
Se comenzo creando una cuadrícula vacía donde hubiese un numero n determinado de celdas, se averigua el tamaño esperado del griolla de salida para agregar la informacion de la proyeccion y posteriormente interpolar los valores, se convierte a un objeto raster y se recorta. Este fue el resultado
The argument auto.palette.mapping is deprecated. Please use midpoint for numeric data and stretch.palette for categorical data to control the palette mapping.

Otra visualizacionmas interactiva
ning昼㹡n argumento finito para min; retornando Infningun argumento finito para max; retornando -Inf
Aqui se presenta una interpolacion afinada y su distorcion, se muestra una grafica entre la precipitacion observada y la esperada a partir de la interpolacion.

El error cuadrático medio (RMSE) se puede calcular desde IDW
[1] 1.063745
Validacion Cruzada
Con el fin de conocer y medir la incertidumbre se crea una superficie interpolada, al cual se le va a crear un raster recortado, este es el resultado

Kriging
Se necesita crear un modelo de variograma con una ecuacion polinomial de primer orden, necesaria para lainterpolacion kriging

Generacion de la Superficie Kriging
En primer lugar se genera el modelo de tendencia, se realiza la interpolacion y se convierte la superficie kriged en un objeto ráster para el recorte, este es el resultado
The argument auto.palette.mapping is deprecated. Please use midpoint for numeric data and stretch.palette for categorical data to control the palette mapping.

Una mejor visualizacion mas interactiva
ning昼㹡n argumento finito para min; retornando Infningun argumento finito para max; retornando -Inf
Mapas de Varianza e Intervalo de Confianza.
Con el fin de encontrar la incertidumbre real de los resultados, se realizan dos mapas que visualizan la confianza a diferentes porcentajes.

Mapa del Intervalo de Confianza del 95%

5. Analisis de Resultados
Los Polígonos de Thiessen no presentan mayores complicaciones en su aplicación. Además de la información pluviométrica, requiere para su ejecución sólo de la ubicación espacial de la zona de estudio. No requiere de una inversión excesiva de tiempo, ni de materiales. A cada dato de precipitacion CHIRPS en forma de raster, se le asigna una superficie, la cual es obtenida representando los puntos en un plano y uniéndolos a través de rectas. A estas rectas posteriormente se les trazan sus mediatrices hasta que se intersectan entre sí, sabiendo esto se puede decir que los poligonos de thiessen son una herramienta util, rapida y sencilla que logra plasmar las precipitacion de la ultima semana de abril en el departamento de Arauca, el inconveniente esta en los limites de los poligonos, la diferencia numerica entre cada punto o seccion hace que hayan ciertas zonas agrupadas dentro de un rango de precipitacion cuando en verdad no pertenecen alli, se llegan a ignorar muchos valores por el echo de que se hace uso de poligonos unidos por mediatrices y no superficies continuas. A comparacion de los otros dos metodos, los poligonos de thiessen dan una perspectiva general y valida de la variable a estudiar, pero en cuestion de exactitud y precision se queda un poco atras.
El método de ponderación inverso a la distancia (IDW) es un algoritmo que calcula los valores de las celdas por medio de una composición ponderada de los datos de la muestra (Johnston et al. 2001). El metodo o modelo sugiere que el resultado predicho reduce su incidencia en la medida en que aumenta la separación entre el punto a evaluar y los puntos de su entorno. Es así como se acepta que los puntos más cercanos al centro poseen un mayor peso en el cálculo del valor definitivo de la celda.Basando se en los resultados se puede decir que el metodo IDW proyecta una precipitacion demasiado acertada sobre los valores reales, como se observa en la grafica donde se comparan ambos valores, los reales y los teoricos, asi mismo el error cuadrático medio (RMSE) que arrojo este metodo, fue pequeño. En los mapas elaborados se logra evidenciar dicha exactitud y precision, es muy acertado a los valores reales de precipitacion
Similar a IDW, Kriging también utiliza una ponderación, sin embargo, como un método probabilístico, Kriging depende de las relaciones espaciales y estadísticos para predecir puntos no medidos. Hasta el día de hoy, todos los interpoladores geoestadísticos están en el grupo de los Kriging (con sus variantes), los cuales ofrecen no solo predicciones y superficies de respuesta requeridas, sino también mapas de probabilidades y cuantiles (Johnston et al. 2001). El método Kriging cuantifica la estructura espacial de los datos mediante el uso de variogramas y los predice mediante la interpolación, usando estadística. Si se observan los resultados se puede denotar que el variograma o semivarigrama cuantifica la autocorrelación, porque grafican la varianza de todos los pares de datos según la distancia. Lo más probable es que las cosas más cercanas estén más relacionadas y tengan una pequeña varianza, mientras que las cosas lejanas están menos relacionadas y tienen una alta varianza; Pero a cierta distancia, la autocorrelación se vuelve independiente. Esto significa que ya no hay ninguna autocorrelación espacial o relación entre la cercanía de sus puntos de datos. Este concepto es la Primera Ley de Geografía de Tobler. Los datos de entrada, CHIRPS, se utilizan para construir una función matemática con un semivariograma, crear una superficie de predicción y, luego, validar el modelo con validación cruzada.Haciendo una comparacion entre Idw y kriging se puede decir que son muy parecidos y arrojan resultados similares, pero el que mejor exactitud y mayor confianza ofrece es Kirging, ya que este encuentra el patrón espacial a partir de unos datos iniciales. Luego predice valores desconocidos basados en ese patrón espacial. Con estas predicciones, kriging genera una medida de error o incertidumbre. Esto significa que se puede estimar la confianza en la superficie de la predicción que son verdades, no producto de la casualidad.
6. Conclusiones
El metodo o modelo de interpolacion mas efectivo para exresar la precipitacion CHIRPS en el departamento de Arauca, fue el metodo Kging, ya que ofrece mas precision y exactitud frente a la realidad, aunque la diferencia entre los resultados frente a IDW no fue muy amplia.
Dependiendo del la resolucion de los datos, los metodos van a variar, en algunos casos, como en este donde la resolucion supera los 5Km, la mejor interpolacion a usar es Kriging, ya que crea mapas con areas de trancision menos abruptas.
El metodo Kriging proporciona un análisis más elaborado y con un fundamento estadístico, porlo que este método puede ser el preferido cuando la densidad de muestreo o de datos sea mayor.
Cuando el distanciamiento es muy grande,los variogramas no son posibles de obtener, entonces el Kriging deja de ser una opción y comparativamente el IDW se perfila como el mejor metodo.
Los poligonos de thiessen son utiles para un primer acercamiento, a niveles mas detallados es recomendable usar IDR o Kriging
7. Referencias
Departamento Administrativo Nacional de Estadística - DANE. Sistema de Cuentas Nacionales - SCN. Consultado en junio de 2013. Disponible en internet: http://www.dane.gov.co/index. php?option=com_content&view=article&id=127&Itemid=84
Departamento Administrativo Nacional de Estadística - DANE. Necesidades Básicas Insatisfechas- NBI. Consultado en junio de 2020. Disponible en internet: http://www.dane.gov.co/index.php?option=com_content&view=article&id=231&Itemid=66
ESRI. (2020). Cómo funciona IDW. Consultado en junio del 2020. Disponible en internet: https://desktop.arcgis.com/es/arcmap/10.3/tools/spatial-analyst-toolbox/how-idw-works.htm
Funk, C., Peterson, P., Landsfeld, M., Pedreros, D., Verdin, J., Shukla, S., Michaelsen, J. (2015). The climate hazards infrared precipitation with stations—a new environmental record for monitoring extremes.
Geoinova Formacion. (2020). Cómo calcular polígonos de Thiessen con ArcGIS. Consultado en junio del 2020. Disonible en internet: https://geoinnova.org/cursos/calcular-poligonos-thiessen-arcgis/
Instituto de Hidrología, Meteorología y Estudios Ambientales (IDEAM).(2020). MAPAS DE PRECIPITACIÓN PROMEDIO EN COLOMBIA. Consultado en junio del 2020. Disponible en internet: http://www.ideam.gov.co/documents/21021/21141/precip+media+%5BModo+de+compatibilidad%5D.pdf/e0ae03be-8e3a-44f8-b5a2-2148a5aeff4d
Johnston K., Ver Hoef J.M., Krivoruchko K., Lucas N. (2001). Using ArcGis Geostatistical Analyst. ESRI.
Ministerio de Salud y Protección Social, y Programa Mundial de Alimentos de las Naciones Unidas. Convenio de Cooperación Técnica y Financiera 480 de 2010.
Ministerio del Trabajo y la Fundación Panamericana para el Desarrollo – FUPAD Colombia. (2013). Documento diagnóstico del departamento de Arauca.
Sistema de Parques Nacionales Naturales de Colombia (SPNN).(2013).Parques Nacionales Naturales de Colombia.
Viviana, U., Andrés, O., Oscar, M. (2016). VALIDACIÓN DE LA BASE DE DATOS DE PRECIPITACIÓN CHIRPS PARA COLOMBIA A ESCALA DIARIA, MENSUAL Y ANUAL EN EL PERIODO 1981-2014. Universidad Nacional de Colombia-Sede Medellin.
LS0tDQp0aXRsZTogIkNvbXBhcmFjaW9uIGVudHJlIGRpZmVyZW50ZXMgbWV0b2RvcyBkZSBwcmVjaXBpdGFjaW9uIGNvbiBkYXRvcyBkZSBwcmVjaXBpdGFjaW9uIENISVJQUywgZW4gZWwgRGVwYXJ0YW1lbnRvIGRlIEFyYXVjYSINCm91dHB1dDogaHRtbF9ub3RlYm9vaw0KLS0tDQojIyBVbml2ZXJzaWRhZCBOYWNpb25hbCBEZSBDb2xvbWJpYS0gU2VkZSBCb2dvdGENCiMjIEZhY3VsdGFkIERlIENpZW5jaWFzIEFncmFyaWFzDQojIyBEaWVnbyBBcnR1cm8gR29uemFsZXogRGVsZ2FkaWxsbw0KIyMgMjQvMDYvMjAyMA0KDQojIyAxLkludHJvZHVjY2lvbg0KDQpFbCBlc3R1ZGlvIGRlIGxhcyB2YXJpYWJsZXMgY2xpbWF0b2xvZ2ljYXMgZW4gbG9zIHRlcnJpdG9yaW9zIHBlcm1pdGUgZXh0cmFlciBpbmZvcm1hY2lvbiBpbXBvcnRhbnRlIHkgZGUgZ3JhbiB1dGlsaWRhZCwgcXVlIHB1ZWRlIHNlciB1c2FkYSBjb24gZGlmZXJlbnRlcyBmaW5lcyBlY29ub21pY29zLCBzb2NpYWxlcyB5IGN1bHR1cmFsZXMuIFVuYSBkZSBsYXMgdmFyaWFibGVzIGNsaW1hdG9sb2dpY2FzIG1hcyBpbXBvcnRhbnRlcyBlcyBsYSBwcmVjaXBpdGFjaW9uLiBMYSBwcmVjaXBpdGFjaW9uIGVzIHVuIGZlbsOzbWVubyBtZXRlb3JvbMOzZ2ljbyBwb3IgZWwgY3VhbCBlbCB2YXBvciBkZSBhZ3VhIHNlIGNvbmRlbnNhIHkgbGxlZ2EgYWwgc3VlbG8gZW4gZm9ybWEgZGUgbmlldmUsIGdyYW5pem8sIHJvY8OtbyB5IHByaW5jaXBhbG1lbnRlIGFndWEgbGx1dmlhLihJREVBTS4sIDIwMDUpLg0KRWwgYWd1YSBlcyBpbXBvcnRhbnRlIHBhcmEgbGEgZXhpc3RlbmNpYSBkZSBsb3Mgc2VyZXMgdml2b3MgeSBwYXJhIGVsIGVjb3Npc3RlbWEuIEVsDQpjb25vY2ltaWVudG8gZGUgbGEgZGlzdHJpYnVjacOzbiBkZSBsYSBwcmVjaXBpdGFjacOzbiBwZXJtaXRlIG1lam9yYXIgbGEgcGxhbmlmaWNhY2nDs24sDQpjb250YXIgY29uIHVuIGNhbGVuZGFyaW8gYWdyw61jb2xhLCBjb25vY2VyIGxhIGRpc3BvbmliaWxpZGFkIGRlIGFndWEgbyBlc2Nhc2V6IGRlDQphZ3VhIGVuIHVuYSBsb2NhbGlkYWQsIGV0Yy4gRW4gbG9zIGRpZmVyZW50ZXMgcGHDrXNlcywgbG9zIHByaW5jaXBhbGVzIGZhY3RvcmVzIHF1ZQ0KY29uZGljaW9uYW4gbGEgcHJlY2lwaXRhY2nDs24gc29uIGxhIHByZXNlbmNpYSBkZSBsYSBjb3JkaWxsZXJhIGRlIGxvcyBhbmRlcywgZWwNCkFudGljaWNsw7NuIGRlbCBQYWPDrWZpY28gU3VyLCBsYSBjb3JyaWVudGUgZGUgSHVtYm9sZHQgeSBsYXMgcGVydHVyYmFjaW9uZXMgZGUgbGENCkNpcmN1bGFjacOzbiBHZW5lcmFsIGRlIGxhIEF0bcOzc2ZlcmEuKElERUFNLiwgMjAwNSkuIExhIGNhbnRpZGFkIGRlIHByZWNpcGl0YWNpw7NuIHNlIG1pZGUgY29uIHVuIHBsdXZpw7NtZXRybywgZGlzcG9zaXRpdm8gcXVlIGN1ZW50YSBjb24gdW5hIHByb2JldGEgZ3JhZHVhZGEsIG8gY29uIGVsIHBsdXZpw7NncmFmbywgcXVlIHRpZW5lIHVuYSBiYW5kYSByZWdpc3RyYWRvcmEuDQpMYSBtZWRpY2nDs24gZGUgbGEgcHJlY2lwaXRhY2nDs24gbWVkaWFudGUgZXN0YWNpb25lcyBpbiBzaXR1IHBvc2VlIGdyYW5kZXMgbGltaXRhY2lvbmVzIGVuIHTDqXJtaW5vcyBkZSBjb2JlcnR1cmEgZ2VvZ3LDoWZpY2EgeSB1bmlmb3JtaWRhZCB0ZW1wb3JhbC4gUG9yIHVuIGxhZG8gZXhpc3RlbiB6b25hcyBkZSBkaWbDrWNpbCBhY2Nlc28gZG9uZGUgbGEgaW5zdGFsYWNpw7NuIHkgc2VndWltaWVudG8gZGUgZXN0YWNpb25lcyByZXN1bHRhIGludmlhYmxlIHkgcG9yIG90cm8gbGFkbyBsYXMgc2VyaWVzIGRlIHRpZW1wbyBkZSBsYXMgZXN0YWNpb25lcyBpbnN0YWxhZGFzIHN1ZWxlbiBwcmVzZW50YXIgZGF0b3MgZmFsdGFudGVzIHkgdW5hIGdyYW4gdmFyaWVkYWQgZGUgcGVyaW9kb3MgZGUgcmVnaXN0cm8uIEFkaWNpb25hbG1lbnRlIHNlIHB1ZWRlbiBwcmVzZW50YXIgZXJyb3JlcyBkZSBtZWRpY2nDs24gbyBkZSBzaXN0ZW1hdGl6YWNpw7NuIGRlIGxvcyBkYXRvcyBlbiBlbCBjYXNvIGRlICBlc3RhY2lvbmVzICBtYW51YWxlczsgIGF1biAgYXPDrSAgc2lndWVuICBzaWVuZG8gIGxhICBmb3JtYSAgbcOhcyAgZGlyZWN0YSAgcGFyYSAgbGEgIG1lZGljacOzbiAgZGUgIGxhIHByZWNpcGl0YWNpw7NuIHkgc3UgaW5mb3JtYWNpw7NuIHNpcnZlIGNvbW8gaW5zdW1vIHBhcmEgbGEgY2FsaWJyYWNpw7NuIHkgdmFsaWRhY2nDs24gZGUgZGlmZXJlbnRlcyBwcm9kdWN0b3MgZGUgcHJlY2lwaXRhY2nDs24gdGFsZXMgY29tbyBtb2RlbG9zLCBtZWRpY2lvbmVzIHNhdGVsaXRhbGVzIHkgZGUgcmFkYXIuIChWaXZpYW5hIGV0IGFsLiwgMjAxNikNCg0KQSBuaXZlbCBwcmFjdGljbywgZWwgbXVlc3RyZW8gZGUgcHJlY2lwaXRhY2lvbiBlbiBleHRlbnNpb25lcyBkZSB0ZXJyZW5vIG11eSBhbXBsaWFzLCBwb3IgZWplbWxvLCBlbCBkZXBhcnRhbWVudG8gZGUgQXJhdWNhIGVuIENvbG9tYmlhLCByZXN1bHRhIHVuYSB0YXJlYSBhcmR1YSB5IGNvc3Rvc2EsIGVuIGVzcGVjaWFsIGN1YW5kbyBlbiBDb2xvbWJpYSBsYSAgZGlzdHJpYnVjacOzbiBlc3BhY2lhbCBkZSBsYXMgIGVzdGFjaW9uZXMgZGUgbWVkaWNpw7NuICBkZSBwcmVjaXBpdGFjacOzbiAgZXMgYmFzdGFudGUgaW5lcXVpdGF0aXZhOyBhcHJveGltYWRhbWVudGUgbGEgbWl0YWQgc2UgZW5jdWVudHJhbiB1YmljYWRhcyBlbiBsYSByZWdpw7NuIEFuZGluYSBxdWUgY29ycmVzcG9uZGUgYWwgIDE5JSAgZGVsIHRlcnJpdG9yaW8gIGNvbG9tYmlhbm8sIGVuICBjb250cmFzdGUgIGNvbiAgbGEgcmVnacOzbiAgQW1hem9uw61hIHkgT3Jpbm9xdcOtYSAgcXVlIGp1bnRhcyBhbGNhbnphbiB1biA1NyUgZGVsIMOhcmVhIHkgdGFuIHNvbG8gZWwgMTIlIChWaXZpYW5hIGV0IGFsLiwgMjAxNikuIFVuYSBzb2x1Y2lvbiBwYXJhIGVzdGUgcHJvYmxlbWEgZXMgZWwgdXNvIGRlIGRhdG9zIGRlIHByZWNpcGl0YWNpb24gZ2xvYmFsIGp1bnRvIGNvbiByYXN0ZXJzIGRlIGxhIHpvbmEgZGUgZXN0dWRpbyB5IGFzaSBsb2dyYXIgaW50ZXJwb2xhciB2YWxvcmVzIHkgY2VsZGFzIChyYXN0ZXJzKSwgcXVlIGFycm9qYXJhIHVuYSBzdXBlcmZpY2llIGNvbnRpbnVhLCBlc3RvIGp1bnRvIGEgaGVycmFtaWVudGFzIGRlIG1hcGVvLCBzZSBsb2dyYSBjb25zZWd1aXIgdW5hIHJlcHJlc2VudGFjaW9uIGdyYWZpY2EgZGVsIGRlcGFydGFtZW50byBxdWUgbXVlc3RyZSBkZSBtYW5lcmEgY2xhcmEsIHNlbmNpbGxhIGUgaW50ZXJhY3RpdmEgZGF0b3MgZGUgcHJlY2lwaXRhY2lvbiBlbiB1biBtb21lbnRvIGVzcGVjaWZpY28gZGVsIGHDsW8uDQoNCkxhIGludGVycG9sYWNpb24gY29uc2lzdGUgZWwgY8OhbGN1bG8gZGUgbG9zIHZhbG9yZXMgZGVzY29ub2NpZG9zIGRlIHVuYSB2YXJpYWJsZSBlc3BhY2lhbCBhIHBhcnRpciBkZSBvdHJvcyB2YWxvcmVzIGN1eW8gdmFsb3IgZXMgY29ub2NpZG8uIExvcyBtw6l0b2RvcyBkZSBpbnRlcnBvbGFjacOzbiBwZXJtaXRlbiBnZW5lcmFyIHN1cGVyZmljaWVzIGNvbnRpbnVhcyBhIHBhcnRpciBkZSBtZWRpZGFzIGVuIGxvY2FsaXphY2lvbmVzIHB1bnR1YWxlcyAobXVlc3RyYSBvIHB1bnRvcyBtdWVzdHJhbGVzKS4gQ3VhbmRvIHNlIGhhYmxhIGRlIGludGVycG9sYWNpw7NuIGVzcGFjaWFsIG1lZGlhbnRlIFNpc3RlbWFzIGRlIEluZm9ybWFjacOzbiBHZW9ncsOhZmljYSBzZSBwb2R1ZWRlbiBkaXN0aW5ndWlyIHVuYSBzZXJpZSBkZSBtw6l0b2RvcyBxdWUgc2UgY2xhc2lmaWNhbiBzZWfDum4gc3UgbmF0dXJhbGV6YToNCg0KKkRldGVybWluaXN0YXM6IEdlbmVyYW4gc3VwZXJmaWNpZXMgY29udGludWFzIG1lZGlhbnRlIGVsIGdyYWRvIGRlIHNpbWlsaXR1ZCBvIHN1YXZpemFkby4gRGVudHJvIGRlIGVzdGEgY2F0ZWdvcsOtYSBlbmNvbnRyYW1vcyBsb3MgbcOpdG9kb3MgZ2xvYmFsZXMsIGxvY2FsZXMsIElEVyB5IFNwbGluZS4NCg0KKkdlb2VzdGFkw61zdGljb3M6IEdlbmVyYW4gc3VwZXJmaWNpZXMgY29udGludWFzIGEgcGFydGlyIGRlIGxhcyBwcm9waWVkYWRlcyBlc3RhZMOtc3RpY2FzIGRlIGxvcyBkYXRvcyBkZSBwYXJ0aWRhLiBEZW50cm8gZGUgZXN0YSBjYXRlZ29yw61hIGVuY29udHJhbW9zIEtyaWdpbmcgeSBDb2tyaWdpbmcuKEx1aXMuIDIwMjAgKQ0KDQpFbCBvYmpldGl2byBkZSBlc3RlIHRyYWJham8gZXMgcmVwcmVzZW50YXIgbWFwYXMgZGUgcHJlY2lwaXRhY2lvbiBlbiBlbCBkZXBhcnRhbWVudG8gZGUgQXJhdWNhLCBwYXJhIGxhIHVsdGltYSBzZW1hbmEgZGUgYWJyaWwsIGhhY2llbmRvIHVzbyBkZSBkYXRvcyBDSElSUFMgVjIuMCB5IGRlIGFsIG1lbm9zIDMgdGVjbmljYXMgZGUgaW50ZXJwb2xhY2lvbiBkaWZlcmVudGVzIHkgaGFjZXIgdW5hIGNvbXBhcmFjaW9uIGVudHJlIGVsbGFzOyBBZGVtYXMgc2UgcHJldGVuZGUgYW5hbGl6YXIgbGEgaW5mb3JtYWNpb24gb2J0ZW5pZGEgcGFyYSBwcm9wb25lciB1bmEgaGlwb3Rlc2lzIHNvYnJlIGxhIGNvbmRpY2lvbiBkZWwgcmVjdXJzbyBoaWRyaWNvIGVuIGVsIGRlcGFydGFtZW50by4NCg0KIyMgMi5EZXNjcmliY2lvbiBkZSBsYSBab25hIGRlIEVzdHVkaW8NCkVsIGRlcGFydGFtZW50byBkZSBBcmF1Y2Egc2UgbG9jYWxpemEgZW4gZWwgc2VjdG9yIG5vcnRlIGRlIGxhIE9yaW5vcXXDrWEgY29sb21iaWFuYSBlbiBlbCBsw61taXRlIGNvbiBWZW5lenVlbGEgeSBlc3TDoSBjb21wdWVzdG8gcG9yIHNpZXRlIG11bmljaXBpb3M6IEFyYXVjYSAoY2l1ZGFkIGNhcGl0YWwpLCBBcmF1cXVpdGEsIENyYXZvIE5vcnRlLCBGb3J0dWwsIFB1ZXJ0byBSb25kw7NuLCBTYXJhdmVuYSB5IFRhbWU7IHN1IHN1cGVyZmljaWUgZXMgZGUgMjMuODE4IGttMiBxdWUgY29ycmVzcG9uZGUgYWwgMiwxJSBkZWwgdG90YWwgbmFjaW9uYWwuIEVsIGRlcGFydGFtZW50byBsaW1pdGEgcG9yIGVsIG5vcnRlIGNvbiBlbCByw61vIEFyYXVjYSwgcXVlIGxvIHNlcGFyYSBkZSBsYSBSZXDDumJsaWNhIGRlIFZlbmV6dWVsYTsgcG9yIGVsIGVzdGUsIGNvbiBsYSBSZXDDumJsaWNhIGRlIFZlbmV6dWVsYTsgcG9yIGVsIHN1ciwgY29uIGxvcyByw61vcyBNZXRhIHkgQ2FzYW5hcmUsIHF1ZSBsbyBzZXBhcmFuIGRlIGxvcyBkZXBhcnRhbWVudG9zDQpkZWwgVmljaGFkYSB5IENhc2FuYXJlOyB5IHBvciBlbCBvZXN0ZSwgY29uIGVsIGRlcGFydGFtZW50byBkZSBCb3lhY8OhLiAoTWluIFRyYWJham8gZXQgYWwuLCAyMDE1KQ0KDQojIyMgR2VvZ3JhZmlhIGUgSGlkcm9sb2dpYSANCkVsIGRlcGFydGFtZW50byBkZSBBcmF1Y2EgZXN0w6EgY29tcHVlc3RvIHBvciB0cmVzIGNvbmp1bnRvcyBtb3Jmb2zDs2dpY29zOiBsYSBDb3JkaWxsZXJhIE9yaWVudGFsLCBlbCBQaWVkZW1vbnRlIExsYW5lcm8geSBsYSBMbGFudXJhIEFsdXZpYWw6DQpMYSBDb3JkaWxsZXJhIE9yaWVudGFsLCBlbiBlbCBvY2NpZGVudGUsIHJlcHJlc2VudGEgZWwgMTUlIGRlIGxhIHN1cGVyZmljaWUgZGVwYXJ0YW1lbnRhbCwNCmFwcm94aW1hZGFtZW50ZS4gQ29udGllbmUgZWxldmFjaW9uZXMgZGVzZGUgbG9zIDUwMCBtZXRyb3MgZW4gbMOtbWl0ZXMgY29uIGVsIHBpZWRlbW9udGUgbGxhbmVybywgaGFzdGEgbG9zIDUuMzgwIG0gZW4gbGEgU2llcnJhIE5ldmFkYSBkZWwgQ29jdXksIGxhIGN1YWwgdGllbmUgZW50cmUgc3VzIGFjY2lkZW50ZXMgbcOhcyBub3RhYmxlcyBsb3MgY2Vycm9zIGRlIExhIFBsYXphLCBMYSBQaWVkcmEsIEVsIERpYW1hbnRlLCBMb3MgQWx0b3MsIE5pZXZlY2l0YXMsIExvcyBPc29zIHkgbGFzIGN1Y2hpbGxhcyBBbHRhbWlyYSB5IEVsIFNhbGl0cmUuIEVsIMOhcmVhIGRlIHBpZWRlbW9udGUgZXN0w6EgY29uZm9ybWFkYSBwb3IgY29ub3MsIGFiYW5pY29zIGFsdXZpYWxlcyB5IHRlcnJhemFzIGRlIHJlbGlldmUgcGxhbm8gYSBpbmNsaW5hZG8sIGN1YmllcnRhIGRlIHZlZ2V0YWNpw7NuIGRlIHNhYmFuYSB5IGJvc3F1ZSBlY3VhdG9yaWFsLiBZIGxhIGxsYW51cmEgYWx1dmlhbCwgbyB6b25hIGRlIHNhYmFuYXMsIHF1ZSBzZSBleHRpZW5kZSBkZXNkZSBlbCBwaWVkZW1vbnRlIGhhc3RhIGxvcyBsw61taXRlcyBjb24gbGEgUmVww7pibGljYSBCb2xpdmFyaWFuYSBkZSBWZW5lenVlbGEsIGVsIG1vZGVsYWRvIGVzIGRlIHRlcnJhemFzIHkgbGxhbnVyYXMgYWx1dmlhbGVzIGRlIGRlc2JvcmRlLCBjdWJpZXJ0YSBwb3IgdmVnZXRhY2nDs24gZGUgc2FiYW5hIGludW5kYWJsZSB5IHBvciBib3NxdWUgZGUgZ2FsZXLDrWEgZW4gbGFzIHZlZ2FzIGRlIGxvcyByw61vcyB5DQpjYcOxb3MuKE1pbiBUcmFiYWpvIGV0IGFsLiwgMjAxMykuDQoNCkxhcyBjYXJhY3RlcsOtc3RpY2FzIGZpc2lvZ3LDoWZpY2FzIGRlbCBkZXBhcnRhbWVudG8sIHNlZ8O6biBlbCBkb2N1bWVudG8gZGUgbG9zIG1hcGFzIGRlIHNpdHVhY2nDs24gbnV0cmljaW9uYWwgZW4gQ29sb21iaWEgMjAxMCwgc29uOiANCg0KKyBFbCA1OCwwJSBlcyBzdXNjZXB0aWJsZSBhIGludW5kYWNpb25lcy4NCisgVW4gNDIsMCUgZXMgdnVsbmVyYWJsZSBhIHNlcXXDrWFzLg0KKyBFbCAxOSw1JSBkZWwgdGVycml0b3JpbyBwcmVzZW50YSBib3NxdWVzIG5hdHVyYWxlcy4NCisgVW4gMTEsNSUgY29ycmVzcG9uZGUgYSByZXNlcnZhcyBmb3Jlc3RhbGVzLg0KKyBVbiBwb2NvIG3DoXMgZGVsIDcsMCUgcGVydGVuZWNlIGEgcGFycXVlcyBuYWNpb25hbGVzIG5hdHVyYWxlcy4NCisgTG9zIHN1ZWxvcyB0aWVuZGVuIGEgc2VyIHZpZWpvcywgY29uIHRlbmRlbmNpYSBhIGxhIGFjaWRleiwgeSBkZSBiYWphIGZlcnRpbGlkYWQgbmF0dXJhbCBxdWUgZGVzZmF2b3JlY2VuIGVsIGRlc2Fycm9sbG8gZGUgdmFyaW9zIHByb3llY3RvcyBhZ3LDrWNvbGFzIHkgbW9sZGVhbiBsYSBnYW5hZGVyw61hIHF1ZSB0aWVuZSBxdWUgaGFjZXJzZSBkZSBmb3JtYSBleHRlbnNpdmEgKE1pbiBTYWx1ZCBldCBhbC4sIDIwMTApLiANCg0KTGEgcmVkIGhpZHJvZ3LDoWZpY2EgZXMgZXh0ZW5zYTsgdG9kbyBlbCBzaXN0ZW1hIGZsdXZpYWwgZGVzYWd1YSBlbiBkaXJlY2Npw7NuIG9jY2lkZW50ZSDigJMgb3JpZW50ZSBoYWNpYSBlbCBPcmlub2NvLCBhIHRyYXbDqXMgZGUgbG9zIHLDrW9zIEFyYXVjYSwgQ2FzYW5hcmUsIFRvY29yYWd1YSwgVGFtZSwgQ3Jhdm8gTm9ydGUsIEVsZSwgTGlwYSwgU2FuIE1pZ3VlbCB5IGVsIENvbmp1bnRvIE5lZ3JvIOKAkyBDaW5hcnVjbywgYWRlbcOhcyBkZSBudW1lcm9zYXMgcXVlYnJhZGFzLCBjYcOxb3MgeSBsYWd1bmFzLihTQ04sIDIwMTUpLkxhcyBjdWVuY2FzIGRlIGxvcyByw61vcyBBcmF1Y2EgeSBDYXNhbmFyZSB0aWVuZW4gdW5hIGdyYW4gaW1wb3J0YW5jaWEgcHVlcywgYWRlbcOhcyBkZSBzZXIgZWNvc2lzdGVtYXMgZXN0cmF0w6lnaWNvcyBwYXJhIGxhIHJlZ2nDs24sIHNvbiB1biByZWZlcmVudGUgYsOhc2ljbyBwYXJhIGxhIHN1Yi1yZWdpb25hbGl6YWNpw7NuIGRlbCB0ZXJyaXRvcmlvIGFyYXVjYW5vLCBwYXJhIGxvcyBwcm9jZXNvcyBkZSBwbGFuZWFjacOzbiB5IG5lZ29jaWFjacOzbiBiaW5hY2lvbmFsOyBhZGVtw6FzIHNpcnZlbiBjb21vIHbDrWFzIGRlIGNvbXVuaWNhY2nDs24geSBjb21vIGZ1ZW50ZXMgZGUgc3Vic2lzdGVuY2lhIHBvciBlbCByZWN1cnNvIHBlc3F1ZXJvLiAoU1BOTiwgMjAxMykNCg0KIyMjIENsaW1hDQpFbiBBcmF1Y2EsIGxhIHRlbXBvcmFkYSBkZSBsbHV2aWEgZXMgb3ByZXNpdmEgeSBudWJsYWRhLCBsYSB0ZW1wb3JhZGEgc2VjYSBlcyBib2Nob3Jub3NhIHkgbWF5b3JtZW50ZSBudWJsYWRhIHkgZXMgbXV5IGNhbGllbnRlIGR1cmFudGUgdG9kbyBlbCBhw7FvLiBEdXJhbnRlIGVsIHRyYW5zY3Vyc28gZGVsIGHDsW8sIGxhIHRlbXBlcmF0dXJhIGdlbmVyYWxtZW50ZSB2YXLDrWEgZGUgMjIgwrBDIGEgMzYgwrBDIHkgcmFyYSB2ZXogYmFqYSBhIG1lbm9zIGRlIDIxIMKwQyBvIHN1YmUgYSBtw6FzIGRlIDM5IMKwQy4oSURFQU0uLCAyMDIwKS4gRWwgZGVwYXJ0YW1lbnRvIGRlIEFycmF1Y2EgZXN0YSBjbGFzaWZpY2FkbyBjb21vIGRlIGNsaW1hIGNhbGlkbyBodW1lZG8geSBjYWxpZG8gc2VtaWh1bWVkbywgc2VndW4gZWwgc2lzdGVtYSBjYWxkYXMtbGFuZy4NCg0KRWwgcHJvbWVkaW8gZGUgbGx1dmlhIHRvdGFsIGFudWFsIGVzIGRlIDE4MDQgbW0uIER1cmFudGUgZWwgYcOxbywgcHJlc2VudGEgdW5hIHRlbXBvcmFkYSBzZWNhIHkgdW5hIHRlbXBvcmFkYSBkZSBsbHV2aWFzLiBMYSB0ZW1wb3JhZGEgc2VjYSBzZSBleHRpZW5kZSBkZSBkaWNpZW1icmUgYSBtYXJ6by4gRW4gZXN0b3MgbWVzZXMgbGx1ZXZlIGVudHJlIDAgeSA1IGTDrWEgYWwgbWVzLiBEZSBtYXlvIGEgb2N0dWJyZSBzZSBwcmVzZW50YSBsYSB0ZW1wb3JhZGEgZGUgbWF5b3JlcyBsbHV2aWFzOyBsYSBmcmVjdWVuY2lhIGRlIGTDrWFzIGxsbHV2aW9zb3MgZW4gZXN0b3MgbWVzZXMgZXMgZGUgMTggYSAyMS4gTG9zIG1lc2VzIGRlIGFicmlsIHkgbm92aWVtYnJlIHB1ZWRlbiBjb25zaWRlcmFyc2UgZGUgdHJhbnNpY2nDs24geSBlbiBwcm9tZWRpbyByZWdpc3RyYW4gYWxyZWRlZG9yIGRlIDgtMTAgZMOtYXMgY29uIGxsdXZpYSBwb3IgbWVzLihJREVBTS4sIDIwMjApIA0KYGBge3IgZWNobz1GQUxTRX0NCmxpYnJhcnkobGVhZmxldCkNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KcGFsIDwtIGNvbG9yTnVtZXJpYyhjKCJyZWQiLCAib3JhbmdlIiwgInllbGxvdyIsICJibHVlIiwgImRhcmtibHVlIiksIHZhbHVlcyhwcmVjaXAubWFzayksDQogIG5hLmNvbG9yID0gInRyYW5zcGFyZW50IikNCg0KbGVhZmxldCgpICU+JSBhZGRUaWxlcygpICU+JQ0KICBhZGRSYXN0ZXJJbWFnZShwcmVjaXAubWFzaywgY29sb3JzID0gcGFsLCBvcGFjaXR5ID0gMC42KSAlPiUNCiAgYWRkTGVnZW5kKHBhbCA9IHBhbCwgdmFsdWVzID0gdmFsdWVzKHByZWNpcC5tYXNrKSwNCiAgICB0aXRsZSA9ICJBcmF1Y2EgeSBwcmVjaXBpdGFjaW9uIENISVJQUyAoMjQvMDQtMzAvMDQpIGVuIG1tIikNCmBgYA0KIyMjIENvbmRpc2lvbmVzIHNvY2llY29ub21pY2FzIFkgRGVtb2dyYWZpYSANClNlZ8O6biBlbCBEZXBhcnRhbWVudG8gQWRtaW5pc3RyYXRpdm8gTmFjaW9uYWwgZGUgRXN0YWTDrXN0aWNhIChEQU5FKSwgbGEgcHJveWVjY2nDs24gZGUgbGEgcG9ibGFjacOzbiBwYXJhIGVsIGRlcGFydGFtZW50byBkZSBBcmF1Y2EgZW4gZWwgMjAxMiBmdWUgZGUgMjUzLjU2NSBwZXJzb25hcywgZWwgY3VhbCByZXByZXNlbnRhIGVsIDAsNSUgZGUgbGEgcG9ibGFjacOzbiBjb2xvbWJpYW5hO0FzaSBtaXNtbyBlbCB0b3RhbCBkZSBwZXJzb25hcyBjb24gTmVjZXNpZGFkZXMgQsOhc2ljYXMgSW5zYXRpc2ZlY2hhcyAoTkJJKSBkZWwgZGVwYXJ0YW1lbnRvIGRlIEFyYXVjYSBlcyBkZSAzNSw5JSwgbWF5b3IgZW4gOCwxIHB1bnRvcyBwb3JjZW50dWFsZXMgYWwgdG90YWwgbmFjaW9uYWwgKDI3LDglKS4gUG9yIHN1IHBhcnRlLCBsYXMgcGVyc29uYXMgZW4gbWlzZXJpYSBzZWfDum4gZXN0YSBtZXRvZG9sb2fDrWEgc2UgZW5jdWVudHJhbiBlbiAxNCwwLCBtYXlvciBhbCB0b3RhbCBuYWNpb25hbCBlbiAzLDQgcHVudG9zIHBvcmNlbnR1YWxlcy4gRWwgY29tcG9uZW50ZSBtw6FzIGNyw610aWNvIGRlbCBpbmRpY2Fkb3IgZGUgTkJJIGRlbCBkZXBhcnRhbWVudG8gZGUgQXJhdWNhIGVzIGxhIHZpdmllbmRhLCBjb24gdW5hIHBhcnRpY2lwYWNpw7NuIGVuIGVsIHRvdGFsIGRlIDE5JTogZW4gY2FiZWNlcmEgY29uIDE1LDUlIHkgZWwgcmVzdG8uIERlIDQ0LDclLCBxdWUgZXhwcmVzYSB1bmEgYmFqYSBjYWxpZGFkIGRlIGxhcyB2aXZpZW5kYSwgcG9yIHNlciB2aXZpZW5kYXMgbcOzdmlsZXMsIG8gdWJpY2FkYXMgZW4gcmVmdWdpb3MgbmF0dXJhbGVzIG8gYmFqbyBwdWVudGVzLCBzaW4gcGFyZWRlcywgY29uIHBhcmVkZXMgZGUgdGVsYSwgZGUgbWF0ZXJpYWxlcyBkZSBkZXNlY2hvIG8gY29uIHBpc29zIGRlIHRpZXJyYSAoZW4gem9uYSBydXJhbCBlbCBwaXNvIGRlIHRpZXJyYSBkZWJlIGVzdGFyIGFzb2NpYWRvIGEgcGFyZWRlcyBkZSBtYXRlcmlhbCBzZW1pcGVybWFuZW50ZSBvIHBlcmVjZWRlcm8pLihEQU5FLiwgMjAxMykgDQoNCmBgYHtyIGVjaG89RkFMU0V9DQpsaWJyYXJ5KHNmKQ0KbGlicmFyeShjYXJ0b2dyYXBoeSkNCm9wYXIgPC0gcGFyKG1hciA9IGMoMCwwLDEuMiwwKSkNCnBhcihiZz0iZ3JleTI1IikNCnBsb3Qoc3RfZ2VvbWV0cnkoTkJJX01VTklDX05VRVZPMiksIGNvbCA9ICIjOTlmZjk5IiwgYm9yZGVyID0gImdyZXkiLCANCiAgICAgYmcgPSAiZGVlcHNreWJsdWUzIiwgbHdkID0gMC41KQ0KY2hvcm9MYXllcigNCiAgeCA9IE5CSV9NVU5JQ19OVUVWTywgDQogIHZhciA9ICJOQkkiLA0KICBtZXRob2QgPSAiZ2VvbSIsDQogIG5jbGFzcz01LA0KICBjb2wgPSBjYXJ0by5wYWwocGFsMSA9ICJyZWQucGFsIiwgbjEgPSA1KSwNCiAgYm9yZGVyID0gIndoaXRlIiwgDQogIGx3ZCA9IDAuNSwNCiAgbGVnZW5kLnBvcyA9ICJ0b3ByaWdodCIsIA0KICBsZWdlbmQudGl0bGUudHh0ID0gIk5CSSIsDQogIGFkZCA9IFRSVUUNCikgDQpsYWJlbExheWVyKA0KICB4ID0gTkJJX01VTklDX05VRVZPMiwgDQogIHR4dCA9ICJNVU5JQ0lQSU8iLCANCiAgY29sPSAid2hpdGUiLCANCiAgY2V4ID0gMC43LCANCiAgZm9udCA9IDQsDQogIGhhbG8gPSBUUlVFLCANCiAgYmcgPSAiZ3JleTI1IiwgDQogIHIgPSAwLjEsIA0KICBvdmVybGFwID0gRkFMU0UsIA0KICBzaG93LmxpbmVzID0gRkFMU0UNCikNCmxheW91dExheWVyKA0KICB0aXRsZSA9ICJNVU5JQ0lQSU8gREUgQVJBVUNBIFkgU1VTIE5JVkVMRVMgREUgTkJJIiwgDQogIHNvdXJjZXMgPSAiRlVFTlRFOiBEQU5FLCAyMDEzIiwgIA0KICBhdXRob3IgPSAiRGllZ28gQXJ0dXJvIEdvbnphbGV6IERlbGdhZGlsbG8iLCANCiAgZnJhbWUgPSBUUlVFLA0KICBub3J0aCA9IFRSVUUsIA0KICB0YWJ0aXRsZSA9IFRSVUUsIA0KICB0aGVtZSA9ICJyZWQucGFsIg0KKSANCmBgYA0KIyMgMy5EZXNjcmliY2lvbiBkZSBEYXRvcyB5IE1ldG9kb3MNCg0KIyMjIDMuMS4gRGF0b3MNCkVudHJlIGxvcyByZWN1cnNvcyBkaXNwb25pYmxlcyBwYXJhIGxhIGRlc2NhcmdhIGRlIGRhdG9zIGRlIHByZWNpcGl0YWNpw7NuIG11bmRpYWwgZGlhcmlhIHNlIGVuY3VlbnRyYSBDSElSUFMgVjIuMCAoQ2xpbWF0ZSBIYXphcmRzIEdyb3VwIEluZnJhUmVkIFByZWNpcGl0YXRpb24gd2l0aCBTdGF0aW9uIGRhdGEpLkNISVJQUyBWMi4wIHB1ZWRlIG9mcmVjZXIgZGF0b3MgZGlhcmlvcyBkZSBwcmVjaXBpdGFjacOzbiBkZXNkZSBoYWNlIG3DoXMgZGUgMzAgYcOxb3MgeSBjb24gdW5hIHJlc29sdWNpw7NuIGRlIDAsMDUgeSAwLDI1IGdyYWRvcyAoNSw1IHkgMjgga20gYXByb3hpbWFkYW1lbnRlKSBlbiBmb3JtYXRvcyBCSUwsIFRJRiBvIE5ldENERiBlc3RhbiBkaXNwb25pYmxlIGFsIHDDumJsaWNvIGRlc2RlIDIwMTQuKFZpdmlhbmEgZXQgYWwuLCAyMDE2KSANCg0KQ0hJUlBTIFYyLjAgbmFjZSBkZSBsYSBjb2xhYm9yYWNpw7NuIGVudHJlIGVsIFNlcnZpY2lvIEdlb2zDs2dpY28gZGUgbG9zIEVFVVUgKFVTR1MpIHkgZWwgRWFydGggUmVzb3VyY2VzIE9ic2VydmF0aW9uIGFuZCBTY2llbmNlIChFUk9TKS4gU3VzIGRhdG9zIGRlIHByZWNpcGl0YWNpw7NuIGRpZmllcmVuIGRlIGxvcyBxdWUgaGFiaXR1YWxtZW50ZSBwb2Ryw61hcyB1dGlsaXphciB5YSBxdWUgcHJlc2VudGFuIHVuIHRyYXNmb25kbyBhbmFsw610aWNvIGRvYmxlLiBMYSBlc3RpbWFjacOzbiBkZSBsYSBwcmVjaXBpdGFjacOzbiBkZSBDSElSUFMgVjIuMCBubyBlc3TDoSBsaWdhZGEgw7puaWNhbWVudGUgYSBlc3RhY2lvbmVzIG1ldGVvcm9sw7NnaWNhcyBzaW5vIHF1ZSBjb21iaW5hIGVzdGFjaW9uZXMgbWV0ZW9yb2zDs2dpY2FzIGp1bnRvIGEgZXN0aW1hY2lvbmVzIGRlIHByZWNpcGl0YWNpw7NuIGJhc2FkYXMgZW4gc2F0w6lsaXRlcyBkZSBsYSBOQVNBIHkgTk9BQS4gQ29uIGVzdGEgZnVzacOzbiBkZSByZWN1cnNvcyBzZSBldml0YSBlbCBzZXNnbyBxdWUgc3VmcmVuIGxhcyBlc3RpbWFzIGRlIGxvcyBwbHV2acOzbWV0cm9zIGVuIHpvbmFzIHJ1cmFsZXMgKHBvciBlc2Nhc2V6IGRlIGVzdGFjaW9uZXMpIHkgbGFzIGVzdGltYXMgZGUgZGF0b3Mgc2F0w6lsaXRlcyBlbiB0ZXJyaXRvcmlvcyBjb21wbGVqb3Mgb2J0ZW5pZW5kbyB1biBwcm9kdWN0byBtaXh0byBtZWpvcmFkby4oRnVuayBldCBhbC4sIDIwMTUpDQoNCkNISVJQUyBWMi4wIGNvbnNlcnZhICBjYXJhY3RlcsOtc3RpY2FzICBpbXBvcnRhbnRlcyAgZGUgIGxhIHByZWNpcGl0YWNpw7NuIGNvbW8gbGEgbWVkaWEgeSBsYSBlc3RhY2lvbmFsaWRhZCBlbiBsYXMgdHJlcyBlc2NhbGFzIGRlIHRpZW1wby4gTGEgdmFyaWFuemEgZXN0w6EgbWVqb3IgcmVwcmVzZW50YWRhIGVuIGxhcyBlc2NhbGFzIG1lbnN1YWwgeSBhbnVhbDsgZW4gbGEgZXNjYWxhIGRpYXJpYSBlcyBtZW5vciBlbiBDSElSUFMgcXVlIGVuIElERUFNLCBsbyBjdWFsIHNlIHZlIHJlZmxlamFkbyBhIHN1IHZleiBlbiBsYXMgZGlmZXJlbnRlcyBtZWRpZGFzIGRlbCBlcnJvciB5IGVuIGVsIGFuw6FsaXNpcyBkZSBwcm9iYWJpbGlkYWQuIExhIGJhc2UgZGUgZGF0b3MgQ0hJUlBTIGVzIHVuIGluc3VtbyB2YWxpb3NvIHBhcmEgZWwgZXN0dWRpbyB5IGxhIGdlc3Rpw7NuIGRlbCBhZ3VhIGVuIENvbG9tYmlhIChWaXZpYW5hIGV0IGFsLiwgMjAxNikNCg0KTG9zIGRhdG9zIHVzYWRvcyBlbiBlc3RlIHRyYWJham8gZnVlcm9uIGRlc2NhcmdhZG9zIGVuIGVsIHNpZ3VpZW50ZSBsaW5rOiBodHRwczovL2RhdGEuY2hjLnVjc2IuZWR1L3Byb2R1Y3RzL0NISVJQUy0yLjAvLCBlbCBkaWEgMTMgZGUganVuaW8gZGVsIGHDsW8gMjAyMCB5IGNvcnJlc3BvbmRlbiBhIGxhIHByZWNpcGl0YWNpb24gZGUgbGEgdWx0aW1hIHNlbWFuYSBkZSBhYnJpbCBkZWwgbWlzbW8gYcOxby4NCg0KQWRlbWFzIGRlbCB1c28gZGUgbG9zIGRhdG9zIENISVJQUyBWMi4wLCBlbiBlc3RlIHRyYWJham8gc2UgZW1wbGVvIHVuIHJhc3RlciBlbiBmb3JtYXRvIHNwaCwgcGFyYSBkZWxpbWl0YXIgZWwgYXJlYSBkZSBlc3R1ZGlvIHkgbG9ncmFyIGxhcyBpbnRlcnBvbGFjaW9uZXMsIGVzdG9zIGRhdG9zIGZ1ZXJvbiBvYnRlbmlkb3MgZGVsIHNpZ3VpZW50ZSBlbmxhY2U6IGh0dHBzOi8vd3d3LmRhbmUuZ292LmNvL2luZGV4LnBocC9lc3RhZGlzdGljYXMtcG9yLXRlbWEvYWdyb3BlY3VhcmlvL2NlbnNvLW5hY2lvbmFsLWFncm9wZWN1YXJpby0yMDE0DQoNCg0KIyMjIDMuMi4gTWV0b2Rvcw0KUGFyYSBjdW1wbGlyIGNvbiBlbCBvYmpldGl2byBkZSBlc3RlIHRyYWJham8sIHNlIHV0aWxpemFyb24gZGlmZXJlbnRlcyBtZXRvZG9zIGRlIGludGVycG9sYWNpb24gZXNwYWNpYWwuIA0KDQpFbiBwcmltZXIgbHVnYXIgc2UgdXNvIGxvcyBQb2zDrWdvbm9zIGRlIFRoaWVzc2VuIGxvcyBjdWFsZXMgcGVybWl0ZSBlc3RhYmxlY2VyIHJlbGFjaW9uZXMgbWF0ZW3DoXRpY2FzIGVudHJlIGVsZW1lbnRvcyBnZW5lcmFuZG8gem9uYXMgZGUgaW5mbHVlbmNpYSBjb24gdW5hcyBwcmVtaXNhcyBtYXRlbcOhdGljYXMgZXNwZWPDrWZpY2FzLihHZW9pbm5vdmEuLCAyMDIwKSBFbiBlc3RlIGNhc28sIGxhIHJlbGFjacOzbiBwYXJ0ZSBkZSB1bmEgbnViZSBkZSBwdW50b3Mgc29icmUgbG9zIHF1ZSBzZSBnZW5lcmFuIHVuYSBzZXJpZSBkZSBwb2zDrWdvbm9zLiBMb3MgcHVudG9zIHNlIHVuZW4gZW50cmUgc8OtIHkgc2UgcHJveWVjdGFuIG1hdHJpY2VzIGVudHJlIGxvcyBzZWdtZW50b3MgZGUgdW5pw7NuIHNpZW5kbyBkaWNoYXMgbWF0cmljZXMgbG9zIGxhZG9zIGRlIGxvcyBwb2zDrWdvbm9zIHJlc3VsdGFudGVzLkxvcyBsYWRvcyBkZSBsb3MgcG9sw61nb25vcyBnZW5lcmFkb3MsIHNvbiBlcXVpZGlzdGFudGVzIGEgbG9zIHB1bnRvcyB2ZWNpbm9zIHkgdHJhdGFuIGRlIGVuY29udHJhciBsYSBtZW5vciBkaXN0YW5jaWEgcG9zaWJsZS4gTG9zIGxhZG9zIGRlIGNhZGEgcG9sw61nb25vIHNlIGVuY3VlbnRyYW4gYSBsYSBtaXNtYSBkaXN0YW5jaWEgZGUgdW4gcHVudG8gcXVlIGRlIG90cm8uDQoNCkVuIHNlZ3VuZG8gbHVnYXIgc2UgdXNvIGxhIGludGVycG9sYWNpw7NuIG1lZGlhbnRlIGRpc3RhbmNpYSBpbnZlcnNhIHBvbmRlcmFkYSAoSURXKSwgbGEgY3VhbCBkZXRlcm1pbmEgbG9zIHZhbG9yZXMgZGUgY2VsZGEgYSB0cmF2w6lzIGRlIHVuYSBjb21iaW5hY2nDs24gcG9uZGVyYWRhIGxpbmVhbG1lbnRlIGRlIHVuIGNvbmp1bnRvIGRlIHB1bnRvcyBkZSBtdWVzdHJhLiBMYSBwb25kZXJhY2nDs24gZXMgdW5hIGZ1bmNpw7NuIGRlIGxhIGRpc3RhbmNpYSBpbnZlcnNhLiBMYSBzdXBlcmZpY2llIHF1ZSBzZSBpbnRlcnBvbGEgZGViZSBzZXIgbGEgZGUgdW5hIHZhcmlhYmxlIGRlcGVuZGllbnRlIGRlIGxhIHViaWNhY2nDs24uIEVzdGUgbcOpdG9kbyBzdXBvbmUgcXVlIGxhIHZhcmlhYmxlIHF1ZSBzZSByZXByZXNlbnRhIGNhcnRvZ3LDoWZpY2FtZW50ZSBkaXNtaW51eWUgc3UgaW5mbHVlbmNpYSBhIG1heW9yIGRpc3RhbmNpYSBkZXNkZSBzdSB1YmljYWNpw7NuIGRlIG11ZXN0cmEuKEVTUkkuLCAyMDIwKS4gRW4gZXN0ZSBjYXNvIHB1bnR1YWwgYWwgdHJhdGEgZGUgdW5hIHZhcmlhYmxlIGNvbnRpbnVhIGNvbW8gbGEgcHJlY2lwaXRhY2lvbiwgc2UgYXNpbWlsYSBxdWUgbG9zIHZhbG9yZXMgc29uIHBvY28gZmx1Y3R1YW50ZXMgZW4gem9uYXMgY2VyY2FuYXMsIGxvIHF1ZSBtcGVybWl0ZSBkZWxpbWl0YXIgYXJlYXMgZGUgZm9ybWEgY2xhcm8gc2VndW4gbGEgdmFyaWFiaWxpZGFkIGRlIGxhIHByZWNpcGl0YWNpb24uDQoNCkVuIHRlcmNlciBsdWdhciBzZSB1dGlsaXpvIEtyaWdpbmcsIHNlZ3VuIGVsIHBvcnRhbCBBcmNNYXAgZGUgRVNSSSgyMDIwKSwgS3JpZ2luZyBlcyB1biBwcm9jZWRpbWllbnRvIGdlb2VzdGFkw61zdGljbyBhdmFuemFkbyBxdWUgZ2VuZXJhIHVuYSBzdXBlcmZpY2llIGVzdGltYWRhIGEgcGFydGlyIGRlIHVuIGNvbmp1bnRvIGRlIHB1bnRvcyBkaXNwZXJzYWRvcyBjb24gdmFsb3JlcyB6LCBlc3TDoSBiYXNhZG8gZW4gbW9kZWxvcyBlc3RhZMOtc3RpY29zIHF1ZSBpbmNsdXllbiBsYSBhdXRvY29ycmVsYWNpw7NuLCBlcyBkZWNpciwgbGFzIHJlbGFjaW9uZXMgZXN0YWTDrXN0aWNhcyBlbnRyZSBsb3MgcHVudG9zIG1lZGlkb3MuIEVsIG3DqXRvZG8gS3JpZ2luZyBjdWFudGlmaWNhIGxhIGVzdHJ1Y3R1cmEgZXNwYWNpYWwgZGUgbG9zIGRhdG9zIG1lZGlhbnRlIGVsIHVzbyBkZSB2YXJpb2dyYW1hcyBsbGFtYWRvcyBhbGd1bmFzIHZlY2VzIHNlbWl2YXJpb2dyYW1hcyBkZWJpZG8gYSBzdSBzaW1pbGl0dWQgZW4gZWwgY8OhbGN1bG8geSBsb3MgcHJlZGljZSBtZWRpYW50ZWxhIGludGVycG9sYWNpw7NuLCB1c2FuZG8gZXN0YWTDrXN0aWNhLiBTZSBhc3VtZSBxdWUgbG9zIGRhdG9zIG3DoXMgY2VyY2Fub3MgYSB1biBwdW50byBjb25vY2lkbyB0aWVuZW4gbWF5b3IgcGVzbyBvIGluZmx1ZW5jaWEgc29icmUgbGEgaW50ZXJwb2xhY2nDs24sIGluZmx1ZW5jaWEgcXVlIHZhIGRpc21pbnV5ZW5kbyBjb25mb3JtZSBzZSBhbGVqYSBkZWwgcHVudG8gZGUgaW50ZXLDqXMuIEFzaSBtaXNtbyBzdXBvbmUgcXVlIGxhIGRpc3RhbmNpYSBvIGxhIGRpcmVjY2nDs24gZW50cmUgbG9zIHB1bnRvcyBkZSBtdWVzdHJhIHJlZmxlamFuIHVuYSBjb3JyZWxhY2nDs24gZXNwYWNpYWwgcXVlIHB1ZWRlIHV0aWxpemFyc2UgcGFyYSBleHBsaWNhciBsYSB2YXJpYWNpw7NuIGVuIGxhIHN1cGVyZmljaWUsIGVuIGVzdGUgY2FzbyBwdW50dWFsIGxhIHByZWNpcGl0YWNpb24uIFNlIGFzdW1lIHF1ZSBsb3MgZGF0b3MgbcOhcyBjZXJjYW5vcyBhIHVuIHB1bnRvIGNvbm9jaWRvIHRpZW5lbiBtYXlvciBwZXNvIG8gaW5mbHVlbmNpYSBzb2JyZSBsYSBpbnRlcnBvbGFjacOzbiwgaW5mbHVlbmNpYSBxdWUgdmEgZGlzbWludXllbmRvIGNvbmZvcm1lIHNlIGFsZWphIGRlbCBwdW50byBkZSBpbnRlcsOpcy4gDQoNCiMjIDQuIFByZXNlbnRhY2lvbiBkZSBSZXN1bHRhZG9zDQoNClBhcmEgbGEgZWxhYm9yYWNpb24gZGUgbGFzIGludGVycG9sYWNpb25lcyB5IHBvciBjb25zaWd1aWVudGUgZGUgbG9zIG1hcGFzIHNlIHNpZ3VpZXJvbiB2YXJpb3MgcGFzb3MsIHNlIGVtcGV6byBwcm9jZXNhbmRvIGxvcyBkYXRvcyBDSElSUFMgLCBwYXJhIGRlbGltaXRhciBlbCBhcmVhIGRlIGVzdHVkaW8gc2UgY2FyZ28gdW4gYXJjaGl2byBzcGggeSBzZSBwcm9jZWRpbyBhIHJlY29ydGFybG8sIHkgcG9uZXIgdW5hICJtYXNjYXJhIHF1ZSBwZXJtaXRpcmlhIGFzZWd1cmFyIHVuIGNvcnJlY3RvIGNvcnRlIGVuIHVuIGZ1dHVybywgZXN0ZSBmdWUgZWwgcmVzdWx0YWRvLg0KYGBge3IgZWNobz1GQUxTRX0NCmxpYnJhcnkoa25pdHIpDQpsaWJyYXJ5KHJnZGFsKQ0KbGlicmFyeShyYXN0ZXIpDQpsaWJyYXJ5KHNmKQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHRtYXApDQpsaWJyYXJ5KGdzdGF0KQ0KbGlicmFyeShzcCkNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnByZWNpcCA8LSByYXN0ZXIoIkM6L1VzZXJzL0xpbmEgTWFyaWEgQXlhbGEuTGluYU1hcmlhQXlhbGEvRG9jdW1lbnRzL1IvVFJBQkFKT1MgR0VPTUFUSUNBL0FSQVVDQS9jaGlycHMtdjIuMC4yMDIwLjA0LjYudGlmIikNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnByZWNpcA0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KKGFvaSA8LSBzaGFwZWZpbGUoIkM6L1VzZXJzL0xpbmEgTWFyaWEgQXlhbGEuTGluYU1hcmlhQXlhbGEvRG9jdW1lbnRzL1IvVFJBQkFKT1MgR0VPTUFUSUNBL0FSQVVDQS9BRE1JTklTVFJBVElWTy9NR05fTVBJT19QT0xJVElDTy5zaHAiKSkNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnByZWNpcC5jcm9wIDwtIHJhc3Rlcjo6Y3JvcChwcmVjaXAsIGV4dGVudChhb2kpKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KcHJlY2lwLm1hc2sgPC0gbWFzayh4ID0gcHJlY2lwLmNyb3AsIG1hc2sgPSBhb2kpDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpwcmVjaXAubWFzayANCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnBsb3QocHJlY2lwLm1hc2ssIG1haW49ICJDSElSUFMgcHJlY2lwaXRhY2lvbmVzIGVuIEFyYXVjYSBkZXNkZSAyNi8wNCBoYXN0YSAzMC8wNCBlbiAyMDIwIFttbV0iKQ0KcGxvdChhb2ksIGFkZD1UUlVFKQ0KYGBgDQpFbiB1biBzZWd1bmRvIG1vbWVudG8gc2UgcHJvY2VkaW8gYSBjb252ZXJ0aXIgZWwgcmFzdGVyIGVuIHB1bnRvcywgWSBzZSBndWFyZGFuIGxvcyBwdW50b3MgZW4gZWwgZGlzY28gZW4gdW4gZm9ybWF0byBkaWZlcmVudGUgcGFyYSB0ZW5lciB1biBzb3BvcnRlIGVuIGNhc28gZGUgcXVlIHNhbGdhIG1hbC4NCmBgYHtyICBlY2hvPUZBTFNFfQ0KcHJlY2lwLnBvaW50cyA8LSByYXN0ZXJUb1BvaW50cyhwcmVjaXAubWFzaywgc3BhdGlhbCA9IFRSVUUpDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpwcmVjaXAucG9pbnRzDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpuYW1lcyhwcmVjaXAucG9pbnRzKSA8LSAicmFpbiINCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnByZWNpcC5wb2ludHMNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnN0cihwcmVjaXAucG9pbnRzKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KcGxvdChwcmVjaXAubWFzaywgbWFpbj0gIkNISVJQUyBwcmVjaXBpdGFjaW9uZXMgZW4gQXJhdWNhIGRlc2RlIDI2LzA0IGhhc3RhIDMwLzA0IGVuIDIwMjAgW21tIikNCnBsb3QoYW9pLCBhZGQ9VFJVRSkNCnBvaW50cyhwcmVjaXAucG9pbnRzJHgsIHByZWNpcC5wb2ludHMkeSwgY29sID0gInJlZCIsIGNleCA9IC42KQ0KYGBgDQpQb3N0ZXJpb3JtZW50ZSBzZSBjb252aXJ0aW8gZXN0byBkZSB1bmEgY2FyYWN0ZXJpc3RpY2EgZXNwYWNpYWwgYSB1bmEgcGxhbmEsIHBhcmEgcG9kZXIgaW50ZXJwb2xhciwgYSBzdSB2ZXMgc2UgZGlzb2x2aWVyb24gbG9zIGxpbWl0ZXMgaW50ZXJub3MgeSBzZSBjb252aWVydGllcm9uIGFob3JhIGVuIHVuIG1hcmNvIGVzcGFjaWFsLiBFbiB1biB0ZXJjZXIgbW9tZW50byBzZSByZWFsaXpvIHVuYSBpbnRlcnNlY2Npb24gY29uIGxhIGhlcnJhbWllbnRhIHNmIGVudHJlIGxvcyBjb2RpZ29zIGRlIGxvcyBtdW5pY2lwaW9zIGRlbCBkZXBhcnRhbWVudG9zIHkgbG9zIGRhdG9zIGRlIHByZWNpcGl0YWNpb24sIHBhcmEgcXVlIGFzaSBjYWRhIHRlcnJpdG9yaW8gdHV2aWVyYSB1biBub21icmUgeSB2YWxvci4gU2UgcmVwcm95ZWN0byBlc3RvIGEgY29yZGVuYWRhcyBnZW9ncmFmaWNhcyBtYWduYSB5IGFzaSBtaXNtbyBzZSBjb252aXJ0aW8gZW4gdW4gb2JqZXRvIGVzcGFjaWFsIHkgZXN0byBzZSBndWFyZG8gZW4gdW4gY29uanV0byBkZSBkYXRvcyBpbnRlcm1lZGlvIGVuIGZvcm1hdG8gc3BoLg0KYGBge3IgZWNobz1GQUxTRX0NCmxpYnJhcnkocmdkYWwpDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpnZW9qc29uaW86Omdlb2pzb25fd3JpdGUocHJlY2lwLnBvaW50cywgZmlsZSA9ICJDOi9Vc2Vycy9MaW5hIE1hcmlhIEF5YWxhLkxpbmFNYXJpYUF5YWxhL0RvY3VtZW50cy9SL1RSQUJBSk9TIEdFT01BVElDQS9BUkFVQ0EvcHBvaW50cy5nZW9qc29uIikNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnByZWNpcC5wb2ludHMgPC0gZ2VvanNvbmlvOjpnZW9qc29uX3JlYWQoIkM6L1VzZXJzL0xpbmEgTWFyaWEgQXlhbGEuTGluYU1hcmlhQXlhbGEvRG9jdW1lbnRzL1IvVFJBQkFKT1MgR0VPTUFUSUNBL0FSQVVDQS9wcG9pbnRzLmdlb2pzb24iLCB3aGF0PSJzcCIpDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpwcmVjaXAucG9pbnRzDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQooYW9pIDwtIHNoYXBlZmlsZSgiQzovVXNlcnMvTGluYSBNYXJpYSBBeWFsYS5MaW5hTWFyaWFBeWFsYS9Eb2N1bWVudHMvUi9UUkFCQUpPUyBHRU9NQVRJQ0EvQVJBVUNBL0FETUlOSVNUUkFUSVZPL01HTl9NUElPX1BPTElUSUNPLnNocCIpKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KQVJBVUNBX3NmIDwtICBzZjo6c3RfYXNfc2YoYW9pKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KKGJvcmRlcl9zZiA8LQ0KICBBUkFVQ0Ffc2YgJT4lDQogIHN1bW1hcmlzZShhcmVhID0gc3VtKE1QSU9fTkFSRUEpKSkNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCiAoYm9yZGVyIDwtIGFzKGJvcmRlcl9zZiwgJ1NwYXRpYWwnKSkNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCihBUkFVQ0Euc2YgPC0gc3RfYXNfc2YoYW9pKSAlPiUgbXV0YXRlKE1VTklDID0gTVBJT19DTk1CUiwgQ09ESUdPID0gTVBJT19DQ0RHTykgJT4lIHNlbGVjdChNVU5JQywgQ09ESUdPKSkNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnAuc2YgPC0gc3RfYXNfc2YocHJlY2lwLnBvaW50cykNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCihwcmVjaXAuc2YgPSBzdF9pbnRlcnNlY3Rpb24oQVJBVUNBLnNmLCBwLnNmKSkNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnAuc2YubWFnbmEgPC0gc3RfdHJhbnNmb3JtKHByZWNpcC5zZiwgY3JzPTMxMTYpDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpBUkFVQ0Euc2YubWFnbmEgPC0gc3RfdHJhbnNmb3JtKEFSQVVDQS5zZiwgY3JzPTMxMTYpDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQoocHJlY2lwMiA8LSBhcyhwLnNmLm1hZ25hLCAnU3BhdGlhbCcpKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0Kc2hhcGVmaWxlKHByZWNpcDIsIGZpbGVuYW1lPSdDOi9Vc2Vycy9MaW5hIE1hcmlhIEF5YWxhLkxpbmFNYXJpYUF5YWxhL0RvY3VtZW50cy9SL1RSQUJBSk9TIEdFT01BVElDQS9BUkFVQ0EvcHJlY2lwMi5zaHAnLCBvdmVyd3JpdGU9VFJVRSkNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnByZWNpcDIkcmFpbmZhbGwgPC0gcm91bmQocHJlY2lwMiRyYWluLCAxKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KcHJlY2lwMg0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KKEFSQVVDQTIgPC0gYXMoQVJBVUNBLnNmLm1hZ25hLCAnU3BhdGlhbCcpKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0Kc2hhcGVmaWxlKEFSQVVDQTIsIGZpbGVuYW1lPSdDOi9Vc2Vycy9MaW5hIE1hcmlhIEF5YWxhLkxpbmFNYXJpYUF5YWxhL0RvY3VtZW50cy9SL1RSQUJBSk9TIEdFT01BVElDQS9BUkFVQ0EvQVJBVUNBMi5zaHAnLCBvdmVyd3JpdGU9VFJVRSkNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnByZWNpcDJAYmJveCA8LSBBUkFVQ0EyQGJib3gNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnRtX3NoYXBlKEFSQVVDQTIpICsgdG1fcG9seWdvbnMoKSArDQogIHRtX3NoYXBlKHByZWNpcDIpICsNCiAgdG1fZG90cyhjb2w9InJhaW5mYWxsIiwgcGFsZXR0ZSA9ICJSZEJ1IiwgbWlkcG9pbnQgPSAxLjAsDQogICAgICAgICAgICAgdGl0bGU9IlByZWNpcGl0YWNpw7NuIG11ZXN0cmVhZGEsIGVuIG1tKSIsIHNpemU9MC4yKSArDQogIHRtX3RleHQoInJhaW5mYWxsIiwganVzdD0iY2VudGVyIiwgeG1vZD0uMSwgc2l6ZSA9IDAuNDUpICsNCiAgdG1fbGVnZW5kKGxlZ2VuZC5vdXRzaWRlPVRSVUUpDQpgYGANCiMjIyBJTlRFUlBPTEFDSU9OIERFIExPUyBEQVRPUyBERSBQUkVDSVBJVEFDSU9ODQoNCiMjIyMgMS5Qb2zDrWdvbm9zIGRlIFRoaWVzc2VuDQpTZSBlbXBlem8gY3JhbmRvIHVuYSBzdXBlcmZpY2llIHRlc2VsYWRhIHkgc2UgcHJvY2VkaW8gYSBwbG90ZWFyIGVsIHJlc3VsdGFkbw0KYGBge3IgZWNobz1GQUxTRX0NCmxpc3Qub2YucGFja2FnZXMgPC0gYygic3BhdHN0YXQuZGF0YSIsICJubG1lIiwgImRwbHlyIiwgInJhc3RlciIsICJycGFydCIsICJzcGF0c3RhdCIsICJnc3RhdCIpDQpuZXcucGFja2FnZXMgPC0gbGlzdC5vZi5wYWNrYWdlc1shKGxpc3Qub2YucGFja2FnZXMgJWluJSBpbnN0YWxsZWQucGFja2FnZXMoKVssIlBhY2thZ2UiXSldDQppZihsZW5ndGgobmV3LnBhY2thZ2VzKSkgaW5zdGFsbC5wYWNrYWdlcyhuZXcucGFja2FnZXMpDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpsaWJyYXJ5KHNwYXRzdGF0LmRhdGEpDQpsaWJyYXJ5KG5sbWUpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShyYXN0ZXIpDQpsaWJyYXJ5KHJwYXJ0KQ0KbGlicmFyeShzcGF0c3RhdCkNCmxpYnJhcnkoZ3N0YXQpDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQp0aCAgPC0gIGFzKGRpcmljaGxldChhcy5wcHAocHJlY2lwMikpLCAiU3BhdGlhbFBvbHlnb25zIikNCmNycyh0aCkgPC0gY3JzKHByZWNpcDIpDQpjcnMoQVJBVUNBMikgPC0gY3JzKHByZWNpcDIpDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpjcnModGgpIA0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KY3JzKHByZWNpcDIpDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQp0aC56ICAgICA8LSBvdmVyKHRoLCBwcmVjaXAyLCBmbj1tZWFuKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KdGguY2xwICAgPC0gcmFzdGVyOjppbnRlcnNlY3QoQVJBVUNBMix0aC5zcGRmKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KdG1fc2hhcGUodGguY2xwKSArIA0KICB0bV9wb2x5Z29ucyhjb2w9InJhaW5mYWxsIiwgcGFsZXR0ZT0iUmRCdSIsIG1pZHBvaW50PTkuMCwNCiAgICAgICAgICAgICAgdGl0bGU9IlBvbMOtZ29ub3MgZGUgVGhpZXNzZSBcblByZWNpcGl0YWNpw7NuIHByZXZpc3RhIFxuKGVuIG1tKQ0KIikgKw0KICB0bV9sZWdlbmQobGVnZW5kLm91dHNpZGU9VFJVRSkNCg0KYGBgDQoNCiMjIyMgMi4gSW50ZXJwb2xhY2nDs24gUG9uZGVyYWRhIGRlIERpc3RhbmNpYSBJbnZlcnNhIChJRFcpDQpTZSBjb21lbnpvIGNyZWFuZG8gdW5hIGN1YWRyw61jdWxhIHZhY8OtYSBkb25kZSBodWJpZXNlIHVuIG51bWVybyBuIGRldGVybWluYWRvIGRlIGNlbGRhcywgc2UgYXZlcmlndWEgZWwgdGFtYcOxbyBlc3BlcmFkbyBkZWwgZ3Jpb2xsYSBkZSBzYWxpZGEgcGFyYSBhZ3JlZ2FyIGxhIGluZm9ybWFjaW9uIGRlIGxhIHByb3llY2Npb24geSBwb3N0ZXJpb3JtZW50ZSBpbnRlcnBvbGFyIGxvcyB2YWxvcmVzLCBzZSBjb252aWVydGUgYSB1biBvYmpldG8gcmFzdGVyIHkgc2UgcmVjb3J0YS4gRXN0ZSBmdWUgZWwgcmVzdWx0YWRvDQpgYGB7ciBlY2hvPUZBTFNFfQ0KZ3JkICAgICAgICAgICAgICA8LSBhcy5kYXRhLmZyYW1lKHNwc2FtcGxlKHByZWNpcDIsICJyZWd1bGFyIiwgbj05MDAwMCkpDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpuYW1lcyhncmQpICAgICAgIDwtIGMoIlgiLCAiWSIpDQpjb29yZGluYXRlcyhncmQpIDwtIGMoIlgiLCAiWSIpDQpncmlkZGVkKGdyZCkgICAgIDwtIFRSVUUNCmZ1bGxncmlkKGdyZCkgICAgPC0gVFJVRSAgDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpwcm9qNHN0cmluZyhncmQpIDwtIHByb2o0c3RyaW5nKHByZWNpcDIpDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpQLmlkdyA8LSBnc3RhdDo6aWR3KHJhaW5mYWxsIH4gMSwgcHJlY2lwMiwgbmV3ZGF0YT1ncmQsIGlkcD0zLjApDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpyICAgICAgIDwtIHJhc3RlcihQLmlkdykNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnINCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCkFSQVVDQTINCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnIubSAgIDwtIHJhc3Rlcjo6bWFzayhyLCBBUkFVQ0EyKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0Kci5tDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQp0bV9zaGFwZShyLm0pICsgDQogIHRtX3Jhc3RlcihuPTcscGFsZXR0ZSA9ICJSZEJ1IiwgYXV0by5wYWxldHRlLm1hcHBpbmcgPSBGQUxTRSwNCiAgICAgICAgICAgIHRpdGxlPSINCkRpc3RhbmNpYSBpbnZlcnNhIHBvbmRlcmFkYSBJRFcpXG5QcmVjaXBpdGFjacOzbiBwcmV2aXN0YSAoZW4gbW0pIikgKyANCiAgdG1fc2hhcGUocHJlY2lwMikgKyB0bV9kb3RzKHNpemU9MC4yKSArDQogIHRtX2xlZ2VuZChsZWdlbmQub3V0c2lkZT1UUlVFKQ0KDQpgYGANCk90cmEgdmlzdWFsaXphY2lvbm1hcyBpbnRlcmFjdGl2YQ0KYGBge3IgZWNobz1GQUxTRX0NCmxpYnJhcnkobGVhZmxldCkNCmxpYnJhcnkoUkNvbG9yQnJld2VyKQ0KcGFsIDwtIGNvbG9yTnVtZXJpYyhjKCJyZWQiLCAib3JhbmdlIiwgInllbGxvdyIsICJibHVlIiwgImRhcmtibHVlIiksIHZhbHVlcyhwcmVjaXAubWFzayksDQogIG5hLmNvbG9yID0gInRyYW5zcGFyZW50IikNCg0KbGVhZmxldCgpICU+JSBhZGRUaWxlcygpICU+JQ0KICBhZGRSYXN0ZXJJbWFnZShyLm0sIGNvbG9ycyA9IHBhbCwgb3BhY2l0eSA9IDAuNikgJT4lDQogIGFkZExlZ2VuZChwYWwgPSBwYWwsIHZhbHVlcyA9IHZhbHVlcyhyLm0pLA0KICAgIHRpdGxlID0gIkxsdXZpYSBpbnRlcnBvbGFkYSBJRFcgZW4gQXJhdWNhIGRlbCAyNi4wNCBhbCAzMC4wNCBlbiAyMDIwIFttbV0iKQ0KYGBgDQpBcXVpIHNlIHByZXNlbnRhIHVuYSBpbnRlcnBvbGFjaW9uIGFmaW5hZGEgeSBzdSBkaXN0b3JjaW9uLCBzZSBtdWVzdHJhIHVuYSBncmFmaWNhIGVudHJlIGxhIHByZWNpcGl0YWNpb24gb2JzZXJ2YWRhIHkgbGEgZXNwZXJhZGEgYSBwYXJ0aXIgZGUgbGEgaW50ZXJwb2xhY2lvbi4NCmBgYHtyIGVjaG89RkFMU0V9DQpwcmVjaXAyDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpQIDwtIHByZWNpcDINCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCklEVy5vdXQgPC0gdmVjdG9yKGxlbmd0aCA9IGxlbmd0aChQKSkNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCmZvciAoaSBpbiAxOmxlbmd0aChQKSkgew0KICBJRFcub3V0W2ldIDwtIGdzdGF0OjppZHcocmFpbmZhbGwgfiAxLCBQWy1pLF0sIFBbaSxdLCBpZHA9My4wKSR2YXIxLnByZWQNCn0NCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCk9QIDwtIHBhcihwdHk9InMiLCBtYXI9Yyg0LDMsMCwwKSkNCiAgcGxvdChJRFcub3V0IH4gUCRyYWluZmFsbCwgYXNwPTEsIHhsYWI9Ik9ic2VydmVkIiwgeWxhYj0iUHJlZGljdGVkIiwgcGNoPTE2LA0KICAgICAgIGNvbD1yZ2IoMCwwLDAsMC41KSkNCiAgYWJsaW5lKGxtKElEVy5vdXQgfiBQJHJhaW5mYWxsKSwgY29sPSJyZWQiLCBsdz0yLGx0eT0yKQ0KICBhYmxpbmUoMCwxKQ0KYGBgDQpFbCBlcnJvciBjdWFkcsOhdGljbyBtZWRpbyAoUk1TRSkgc2UgcHVlZGUgY2FsY3VsYXIgZGVzZGUgSURXDQpgYGB7ciBlY2hvPUZBTFNFfQ0KcGFyKE9QKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0Kc3FydCggc3VtKChJRFcub3V0IC0gUCRyYWluZmFsbCleMikgLyBsZW5ndGgoUCkpDQpgYGANCiMjIyMgVmFsaWRhY2lvbiBDcnV6YWRhDQpDb24gZWwgZmluIGRlIGNvbm9jZXIgeSBtZWRpciBsYSBpbmNlcnRpZHVtYnJlIHNlIGNyZWEgdW5hIHN1cGVyZmljaWUgaW50ZXJwb2xhZGEsIGFsIGN1YWwgc2UgbGUgdmEgYSBjcmVhciB1biByYXN0ZXIgcmVjb3J0YWRvLCBlc3RlIGVzIGVsIHJlc3VsdGFkbw0KYGBge3IgZWNobz1GQUxTRX0NCmltZyA8LSBnc3RhdDo6aWR3KHJhaW5mYWxsfjEsIFAsIG5ld2RhdGE9Z3JkLCBpZHA9My4wKQ0KbiAgIDwtIGxlbmd0aChQKQ0KWmkgIDwtIG1hdHJpeChucm93ID0gbGVuZ3RoKGltZyR2YXIxLnByZWQpLCBuY29sID0gbikNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnN0IDwtIHN0YWNrKCkNCmZvciAoaSBpbiAxOm4pew0KICBaMSA8LSBnc3RhdDo6aWR3KHJhaW5mYWxsfjEsIFBbLWksXSwgbmV3ZGF0YT1ncmQsIGlkcD0zLjApDQogIHN0IDwtIGFkZExheWVyKHN0LHJhc3RlcihaMSxsYXllcj0xKSkNCiAgWmlbLGldIDwtIG4gKiBpbWckdmFyMS5wcmVkIC0gKG4tMSkgKiBaMSR2YXIxLnByZWQNCn0NCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NClpqIDwtIGFzLm1hdHJpeChhcHBseShaaSwgMSwgc3VtLCBuYS5ybT1UKSAvIG4gKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KYzEgPC0gYXBwbHkoWmksMiwnLScsWmopICAgICAgICAgICAgDQpjMSA8LSBhcHBseShjMV4yLCAxLCBzdW0sIG5hLnJtPVQgKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KQ0kgPC0gc3FydCggMS8obioobi0xKSkgKiBjMSkNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCmltZy5zaWcgICA8LSBpbWcNCmltZy5zaWckdiA8LSBDSSAvaW1nJHZhcjEucHJlZA0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KciA8LSByYXN0ZXIoaW1nLnNpZywgbGF5ZXI9InYiKQ0Kci5tIDwtIHJhc3Rlcjo6bWFzayhyLCBBUkFVQ0EyKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KdG1fc2hhcGUoci5tKSArIHRtX3Jhc3RlcihuPTcsdGl0bGU9IklEV1xuOTUlIEludGVydmFsbyBkZSBDb25maWFuemEgXG4oZW4gbW0pIikgKw0KICB0bV9zaGFwZShQKSArIHRtX2RvdHMoc2l6ZT0wLjIpICsNCiAgDQogIHRtX2xlZ2VuZChsZWdlbmQub3V0c2lkZT1UUlVFKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KZi4xIDwtIGFzLmZvcm11bGEocmFpbmZhbGwgfiBYICsgWSkNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NClAkWCA8LSBjb29yZGluYXRlcyhQKVssMV0NClAkWSA8LSBjb29yZGluYXRlcyhQKVssMl0NCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCmxtLjEgPC0gbG0oIGYuMSwgZGF0YT1QKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KZGF0LjFzdCA8LSBTcGF0aWFsR3JpZERhdGFGcmFtZShncmQsIGRhdGEuZnJhbWUodmFyMS5wcmVkID0gcHJlZGljdChsbS4xLCBuZXdkYXRhPWdyZCkpKSANCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnIgICA8LSByYXN0ZXIoZGF0LjFzdCkNCnIubSA8LSByYXN0ZXI6Om1hc2sociwgQVJBVUNBMikNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnRtX3NoYXBlKHIubSkgKyANCiAgdG1fcmFzdGVyKG49MTAsIHBhbGV0dGU9IlJkQnUiLCBhdXRvLnBhbGV0dGUubWFwcGluZz1GQUxTRSwgDQogICAgICAgICAgICB0aXRsZT0iQWp1c3RlIHBvbGlub21pYWwgZGUgMWVyIG9yZGVuXG5QcmVjaXBpdGFjaW9uIHByZXZpc3RhIChlbiBtbSkiKSArDQogIHRtX3NoYXBlKFApICsgdG1fZG90cyhzaXplPTAuMikgKw0KICB0bV9sZWdlbmQobGVnZW5kLm91dHNpZGU9VFJVRSkNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCmYuMiA8LSBhcy5mb3JtdWxhKHJhaW5mYWxsIH4gWCArIFkgKyBJKFgqWCkrSShZKlkpICsgSShYKlkpKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KUCRYIDwtIGNvb3JkaW5hdGVzKFApWywxXQ0KUCRZIDwtIGNvb3JkaW5hdGVzKFApWywyXQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KbG0uMiA8LSBsbSggZi4yLCBkYXRhPVApDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpkYXQuMm5kIDwtIFNwYXRpYWxHcmlkRGF0YUZyYW1lKGdyZCwgZGF0YS5mcmFtZSh2YXIxLnByZWQgPSBwcmVkaWN0KGxtLjIsIG5ld2RhdGE9Z3JkKSkpIA0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KciAgIDwtIHJhc3RlcihkYXQuMm5kKQ0Kci5tIDwtIHJhc3Rlcjo6bWFzayhyLCBBUkFVQ0EyKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KdG1fc2hhcGUoci5tKSArIA0KICB0bV9yYXN0ZXIobj0xMCwgcGFsZXR0ZT0iUmRCdSIsIGF1dG8ucGFsZXR0ZS5tYXBwaW5nPUZBTFNFLG1pZHBvaW50ID0gTkEsDQogICAgICAgICAgICB0aXRsZT0iQWp1c3RlIHBvbGlub21pYWwgZGUgMm5kIG9yZGVuXG5QcmVjaXBpdGFjaW9uIGVzcGVyYWRhXG4oZW4gbW0pIikgKw0KICB0bV9zaGFwZShQKSArIHRtX2RvdHMoc2l6ZT0wLjIpICsNCiAgdG1fbGVnZW5kKGxlZ2VuZC5vdXRzaWRlPVRSVUUpDQpgYGANCiMjIyMgS3JpZ2luZw0KU2UgbmVjZXNpdGEgY3JlYXIgdW4gbW9kZWxvIGRlIHZhcmlvZ3JhbWEgY29uIHVuYSBlY3VhY2lvbiBwb2xpbm9taWFsIGRlIHByaW1lciBvcmRlbiwgbmVjZXNhcmlhIHBhcmEgbGFpbnRlcnBvbGFjaW9uIGtyaWdpbmcNCmBgYHtyIGVjaG89RkFMU0V9DQpmLjEgPC0gYXMuZm9ybXVsYShyYWluZmFsbCB+IFggKyBZKSANCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnZhci5zbXBsIDwtIHZhcmlvZ3JhbShmLjEsIFAsIGNsb3VkID0gRkFMU0UsIGN1dG9mZj0xOTAwMDAsIHdpZHRoPTk1OTApDQpgYGANCmBgYHtyIGVjaG89RkFMU0V9DQpkYXQuZml0ICA8LSBmaXQudmFyaW9ncmFtKHZhci5zbXBsLCBmaXQucmFuZ2VzID0gVFJVRSwgZml0LnNpbGxzID0gVFJVRSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmdtKHBzaWxsPTMsIG1vZGVsPSJNYXQiLCByYW5nZT0xNTAwMDAsIG51Z2dldD0wLjApKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KZGF0LmZpdA0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KcGxvdCh2YXIuc21wbCwgZGF0LmZpdCwgeGxpbT1jKDAsMTgwMDAwKSkNCmBgYA0KIyMjIyBHZW5lcmFjaW9uIGRlIGxhIFN1cGVyZmljaWUgS3JpZ2luZw0KRW4gIHByaW1lciBsdWdhciBzZSBnZW5lcmEgZWwgbW9kZWxvIGRlIHRlbmRlbmNpYSwgc2UgcmVhbGl6YSBsYSBpbnRlcnBvbGFjaW9uIHkgc2UgY29udmllcnRlIGxhIHN1cGVyZmljaWUga3JpZ2VkIGVuIHVuIG9iamV0byByw6FzdGVyIHBhcmEgZWwgcmVjb3J0ZSwgZXN0ZSBlcyBlbCByZXN1bHRhZG8NCmBgYHtyIGVjaG89RkFMU0V9DQpmLjEgPC0gYXMuZm9ybXVsYShyYWluZmFsbCB+IFggKyBZKSANCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCmRhdC5rcmcgPC0ga3JpZ2UoIGYuMSwgUCwgZ3JkLCBkYXQuZml0KQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KciA8LSByYXN0ZXIoZGF0LmtyZykNCnIubSA8LSByYXN0ZXI6Om1hc2sociwgQVJBVUNBMikNCmBgYA0KYGBge3IgZWNobz1GQUxTRX0NCnIubQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KdG1fc2hhcGUoci5tKSArIA0KICB0bV9yYXN0ZXIobj0xMCwgcGFsZXR0ZT0iUmRCdSIsIGF1dG8ucGFsZXR0ZS5tYXBwaW5nPUZBTFNFLCANCiAgICAgICAgICAgIHRpdGxlPSJLcmlnaW5nIFVuaXZlcnNhbFxuUHJlY2lwaXRhY2lvbiBwcmV2aXN0YVxuKGVuIG1tKSIpICsNCiAgdG1fc2hhcGUoUCkgKyB0bV9kb3RzKHNpemU9MC4yKSArDQogIHRtX2xlZ2VuZChsZWdlbmQub3V0c2lkZT1UUlVFKQ0KYGBgDQpVbmEgbWVqb3IgdmlzdWFsaXphY2lvbiBtYXMgaW50ZXJhY3RpdmENCmBgYHtyIGVjaG89RkFMU0V9DQpsaWJyYXJ5KGxlYWZsZXQpDQpsaWJyYXJ5KFJDb2xvckJyZXdlcikNCnBhbCA8LSBjb2xvck51bWVyaWMoYygicmVkIiwgIm9yYW5nZSIsICJ5ZWxsb3ciLCAiYmx1ZSIsICJkYXJrYmx1ZSIpLCB2YWx1ZXMocHJlY2lwLm1hc2spLA0KICBuYS5jb2xvciA9ICJ0cmFuc3BhcmVudCIpDQoNCmxlYWZsZXQoKSAlPiUgYWRkVGlsZXMoKSAlPiUNCiAgYWRkUmFzdGVySW1hZ2Uoci5tLCBjb2xvcnMgPSBwYWwsIG9wYWNpdHkgPSAwLjYpICU+JQ0KICBhZGRMZWdlbmQocGFsID0gcGFsLCB2YWx1ZXMgPSB2YWx1ZXMoci5tKSwNCiAgICB0aXRsZSA9ICJLcmlnaW5nIGxsdXZpYSBpbnRlcnBvbGFkYSBlbiBBcmF1Y2EgZGVsIDI2LjA0IGFsIDMwLjA0IGVuIDIwMjAgW21tXSIpDQpgYGANCiMjIyBNYXBhcyBkZSBWYXJpYW56YSBlIEludGVydmFsbyBkZSBDb25maWFuemEuDQpDb24gZWwgZmluIGRlIGVuY29udHJhciBsYSBpbmNlcnRpZHVtYnJlIHJlYWwgZGUgbG9zIHJlc3VsdGFkb3MsIHNlIHJlYWxpemFuIGRvcyBtYXBhcyBxdWUgdmlzdWFsaXphbiBsYSBjb25maWFuemEgYSBkaWZlcmVudGVzIHBvcmNlbnRhamVzLg0KYGBge3IgZWNobz1GQUxTRX0NCnIgICA8LSByYXN0ZXIoZGF0LmtyZywgbGF5ZXI9InZhcjEudmFyIikNCnIubSA8LSByYXN0ZXI6Om1hc2sociwgQVJBVUNBMikNCg0KdG1fc2hhcGUoci5tKSArIA0KICB0bV9yYXN0ZXIobj03LCBwYWxldHRlID0iUmVkcyIsDQogICAgICAgICAgICB0aXRsZT0iSW50ZXJwb2xhY2nDs24gZGUgS3JpZ2luZ1xuTWFwYSBkZSB2YXJpYWNpw7NuXG4oZW4gbW0gYWwgY3VhZHJhZG8pIikgK3RtX3NoYXBlKFApICsgdG1fZG90cyhzaXplPTAuMDkpICsNCiAgdG1fbGVnZW5kKGxlZ2VuZC5vdXRzaWRlPVRSVUUpDQpgYGANCiMjIyBNYXBhIGRlbCBJbnRlcnZhbG8gZGUgQ29uZmlhbnphIGRlbCA5NSUgDQpgYGB7ciBlY2hvPUZBTFNFfQ0KciAgIDwtIHNxcnQocmFzdGVyKGRhdC5rcmcsIGxheWVyPSJ2YXIxLnZhciIpKSAqIDEuOTYNCnIubSA8LSByYXN0ZXI6Om1hc2sociwgQVJBVUNBMikNCg0KdG1fc2hhcGUoci5tKSArIA0KICB0bV9yYXN0ZXIobj03LCBwYWxldHRlID0iUmVkcyIsDQogICAgICAgICAgICB0aXRsZT0iSW50ZXJwb2xhY2nDs24gZGUgS3JpZ2luZ1xuOTUlIENJIG1hcFxuKGVuIG1tKSIpICt0bV9zaGFwZShQKSArIHRtX2RvdHMoc2l6ZT0wLjA5KSArDQogIHRtX2xlZ2VuZChsZWdlbmQub3V0c2lkZT1UUlVFKQ0KYGBgDQpgYGB7ciBlY2hvPUZBTFNFfQ0Kc2Vzc2lvbkluZm8oKQ0KYGBgDQojIyA1LiBBbmFsaXNpcyBkZSBSZXN1bHRhZG9zDQpMb3MgUG9sw61nb25vcyBkZSBUaGllc3NlbiBubyBwcmVzZW50YW4gbWF5b3JlcyBjb21wbGljYWNpb25lcyBlbiBzdSBhcGxpY2FjacOzbi4gQWRlbcOhcyBkZSBsYSBpbmZvcm1hY2nDs24gcGx1dmlvbcOpdHJpY2EsIHJlcXVpZXJlIHBhcmEgc3UgZWplY3VjacOzbiBzw7NsbyBkZSBsYSB1YmljYWNpw7NuIGVzcGFjaWFsIGRlIGxhIHpvbmEgZGUgZXN0dWRpby4gTm8gcmVxdWllcmUgZGUgdW5hIGludmVyc2nDs24gZXhjZXNpdmEgZGUgdGllbXBvLCBuaSBkZSBtYXRlcmlhbGVzLiBBIGNhZGEgZGF0byBkZSBwcmVjaXBpdGFjaW9uIENISVJQUyBlbiBmb3JtYSBkZSByYXN0ZXIsIHNlIGxlIGFzaWduYSB1bmEgc3VwZXJmaWNpZSwgbGEgY3VhbCBlcyBvYnRlbmlkYSByZXByZXNlbnRhbmRvIGxvcyBwdW50b3MgZW4gdW4gcGxhbm8geSB1bmnDqW5kb2xvcyBhIHRyYXbDqXMgZGUgcmVjdGFzLiBBIGVzdGFzIHJlY3RhcyBwb3N0ZXJpb3JtZW50ZSBzZSBsZXMgdHJhemFuIHN1cyBtZWRpYXRyaWNlcyBoYXN0YSBxdWUgc2UgaW50ZXJzZWN0YW4gZW50cmUgc8OtLCBzYWJpZW5kbyBlc3RvIHNlIHB1ZWRlIGRlY2lyIHF1ZSBsb3MgcG9saWdvbm9zIGRlIHRoaWVzc2VuIHNvbiB1bmEgaGVycmFtaWVudGEgdXRpbCwgcmFwaWRhIHkgc2VuY2lsbGEgcXVlIGxvZ3JhIHBsYXNtYXIgbGFzIHByZWNpcGl0YWNpb24gZGUgbGEgdWx0aW1hIHNlbWFuYSBkZSBhYnJpbCBlbiBlbCBkZXBhcnRhbWVudG8gZGUgQXJhdWNhLCBlbCBpbmNvbnZlbmllbnRlIGVzdGEgZW4gbG9zIGxpbWl0ZXMgZGUgbG9zIHBvbGlnb25vcywgbGEgZGlmZXJlbmNpYSBudW1lcmljYSBlbnRyZSBjYWRhIHB1bnRvIG8gc2VjY2lvbiBoYWNlIHF1ZSBoYXlhbiBjaWVydGFzIHpvbmFzIGFncnVwYWRhcyBkZW50cm8gZGUgdW4gcmFuZ28gZGUgcHJlY2lwaXRhY2lvbiBjdWFuZG8gZW4gdmVyZGFkIG5vIHBlcnRlbmVjZW4gYWxsaSwgc2UgbGxlZ2FuIGEgaWdub3JhciBtdWNob3MgdmFsb3JlcyBwb3IgZWwgZWNobyBkZSBxdWUgc2UgaGFjZSB1c28gZGUgcG9saWdvbm9zIHVuaWRvcyBwb3IgbWVkaWF0cmljZXMgeSBubyBzdXBlcmZpY2llcyBjb250aW51YXMuIEEgY29tcGFyYWNpb24gZGUgbG9zIG90cm9zIGRvcyBtZXRvZG9zLCBsb3MgcG9saWdvbm9zIGRlIHRoaWVzc2VuIGRhbiB1bmEgcGVyc3BlY3RpdmEgZ2VuZXJhbCB5IHZhbGlkYSBkZSBsYSB2YXJpYWJsZSBhIGVzdHVkaWFyLCBwZXJvIGVuIGN1ZXN0aW9uIGRlIGV4YWN0aXR1ZCB5IHByZWNpc2lvbiBzZSBxdWVkYSB1biBwb2NvIGF0cmFzLg0KDQpFbCBtw6l0b2RvIGRlIHBvbmRlcmFjacOzbiBpbnZlcnNvIGEgbGEgZGlzdGFuY2lhIChJRFcpIGVzIHVuIGFsZ29yaXRtbyBxdWUgY2FsY3VsYSBsb3MgdmFsb3JlcyBkZSBsYXMgY2VsZGFzIHBvciBtZWRpbyBkZSB1bmEgY29tcG9zaWNpw7NuIHBvbmRlcmFkYSBkZSBsb3MgZGF0b3MgZGUgbGEgbXVlc3RyYSAoSm9obnN0b24gZXQgYWwuIDIwMDEpLiBFbCBtZXRvZG8gbyBtb2RlbG8gc3VnaWVyZSBxdWUgZWwgcmVzdWx0YWRvIHByZWRpY2hvIHJlZHVjZSBzdSBpbmNpZGVuY2lhIGVuIGxhIG1lZGlkYSBlbiBxdWUgYXVtZW50YSBsYSBzZXBhcmFjacOzbiBlbnRyZSBlbCBwdW50byBhIGV2YWx1YXIgeSBsb3MgcHVudG9zIGRlIHN1IGVudG9ybm8uIEVzIGFzw60gY29tbyBzZSBhY2VwdGEgcXVlIGxvcyBwdW50b3MgbcOhcyBjZXJjYW5vcyBhbCBjZW50cm8gcG9zZWVuIHVuIG1heW9yIHBlc28gZW4gZWwgY8OhbGN1bG8gZGVsIHZhbG9yIGRlZmluaXRpdm8gZGUgbGEgY2VsZGEuQmFzYW5kbyBzZSBlbiBsb3MgcmVzdWx0YWRvcyBzZSBwdWVkZSBkZWNpciBxdWUgZWwgbWV0b2RvIElEVyBwcm95ZWN0YSB1bmEgcHJlY2lwaXRhY2lvbiBkZW1hc2lhZG8gYWNlcnRhZGEgc29icmUgbG9zIHZhbG9yZXMgcmVhbGVzLCBjb21vIHNlIG9ic2VydmEgZW4gbGEgZ3JhZmljYSBkb25kZSBzZSBjb21wYXJhbiBhbWJvcyB2YWxvcmVzLCBsb3MgcmVhbGVzIHkgbG9zIHRlb3JpY29zLCBhc2kgbWlzbW8gZWwgZXJyb3IgY3VhZHLDoXRpY28gbWVkaW8gKFJNU0UpIHF1ZSBhcnJvam8gZXN0ZSBtZXRvZG8sIGZ1ZSBwZXF1ZcOxby4gRW4gbG9zIG1hcGFzIGVsYWJvcmFkb3Mgc2UgbG9ncmEgZXZpZGVuY2lhciBkaWNoYSBleGFjdGl0dWQgeSBwcmVjaXNpb24sIGVzIG11eSBhY2VydGFkbyBhIGxvcyB2YWxvcmVzIHJlYWxlcyBkZSBwcmVjaXBpdGFjaW9uDQoNClNpbWlsYXIgYSBJRFcsIEtyaWdpbmcgdGFtYmnDqW4gdXRpbGl6YSB1bmEgcG9uZGVyYWNpw7NuLCBzaW4gZW1iYXJnbywgY29tbyB1biBtw6l0b2RvIHByb2JhYmlsw61zdGljbywgS3JpZ2luZyBkZXBlbmRlIGRlIGxhcyByZWxhY2lvbmVzIGVzcGFjaWFsZXMgeSBlc3RhZMOtc3RpY29zIHBhcmEgcHJlZGVjaXIgcHVudG9zIG5vIG1lZGlkb3MuIEhhc3RhIGVsIGTDrWEgZGUgaG95LCB0b2RvcyBsb3MgaW50ZXJwb2xhZG9yZXMgZ2VvZXN0YWTDrXN0aWNvcyBlc3TDoW4gZW4gZWwgZ3J1cG8gZGUgbG9zIEtyaWdpbmcgKGNvbiBzdXMgdmFyaWFudGVzKSwgbG9zIGN1YWxlcyBvZnJlY2VuIG5vIHNvbG8gcHJlZGljY2lvbmVzIHkgc3VwZXJmaWNpZXMgZGUgcmVzcHVlc3RhIHJlcXVlcmlkYXMsIHNpbm8gdGFtYmnDqW4gbWFwYXMgZGUgcHJvYmFiaWxpZGFkZXMgeSBjdWFudGlsZXMgKEpvaG5zdG9uIGV0IGFsLiAyMDAxKS4gRWwgbcOpdG9kbyBLcmlnaW5nIGN1YW50aWZpY2EgbGEgZXN0cnVjdHVyYSBlc3BhY2lhbCBkZSBsb3MgZGF0b3MgbWVkaWFudGUgZWwgdXNvIGRlIHZhcmlvZ3JhbWFzIHkgbG9zIHByZWRpY2UgbWVkaWFudGUgbGEgaW50ZXJwb2xhY2nDs24sIHVzYW5kbyBlc3RhZMOtc3RpY2EuIFNpIHNlIG9ic2VydmFuIGxvcyByZXN1bHRhZG9zIHNlIHB1ZWRlIGRlbm90YXIgcXVlIGVsIHZhcmlvZ3JhbWEgbyBzZW1pdmFyaWdyYW1hIGN1YW50aWZpY2EgbGEgYXV0b2NvcnJlbGFjacOzbiwgcG9ycXVlIGdyYWZpY2FuIGxhIHZhcmlhbnphIGRlIHRvZG9zIGxvcyBwYXJlcyBkZSBkYXRvcyBzZWfDum4gbGEgZGlzdGFuY2lhLiBMbyBtw6FzIHByb2JhYmxlIGVzIHF1ZSBsYXMgY29zYXMgbcOhcyBjZXJjYW5hcyBlc3TDqW4gbcOhcyByZWxhY2lvbmFkYXMgeSB0ZW5nYW4gdW5hIHBlcXVlw7FhIHZhcmlhbnphLCBtaWVudHJhcyBxdWUgbGFzIGNvc2FzIGxlamFuYXMgZXN0w6FuIG1lbm9zIHJlbGFjaW9uYWRhcyB5IHRpZW5lbiB1bmEgYWx0YSB2YXJpYW56YTsgUGVybyBhIGNpZXJ0YSBkaXN0YW5jaWEsIGxhIGF1dG9jb3JyZWxhY2nDs24gc2UgdnVlbHZlIGluZGVwZW5kaWVudGUuIEVzdG8gc2lnbmlmaWNhIHF1ZSB5YSBubyBoYXkgbmluZ3VuYSBhdXRvY29ycmVsYWNpw7NuIGVzcGFjaWFsIG8gcmVsYWNpw7NuIGVudHJlIGxhIGNlcmNhbsOtYSBkZSBzdXMgcHVudG9zIGRlIGRhdG9zLiBFc3RlIGNvbmNlcHRvIGVzIGxhIFByaW1lcmEgTGV5IGRlIEdlb2dyYWbDrWEgZGUgVG9ibGVyLiBMb3MgZGF0b3MgZGUgZW50cmFkYSwgQ0hJUlBTLCBzZSB1dGlsaXphbiBwYXJhIGNvbnN0cnVpciB1bmEgZnVuY2nDs24gbWF0ZW3DoXRpY2EgY29uIHVuIHNlbWl2YXJpb2dyYW1hLCBjcmVhciB1bmEgc3VwZXJmaWNpZSBkZSBwcmVkaWNjacOzbiB5LCBsdWVnbywgdmFsaWRhciBlbCBtb2RlbG8gY29uIHZhbGlkYWNpw7NuIGNydXphZGEuSGFjaWVuZG8gdW5hIGNvbXBhcmFjaW9uIGVudHJlIElkdyB5IGtyaWdpbmcgc2UgcHVlZGUgZGVjaXIgcXVlIHNvbiBtdXkgcGFyZWNpZG9zIHkgYXJyb2phbiByZXN1bHRhZG9zIHNpbWlsYXJlcywgcGVybyBlbCBxdWUgbWVqb3IgZXhhY3RpdHVkIHkgbWF5b3IgY29uZmlhbnphIG9mcmVjZSBlcyBLaXJnaW5nLCB5YSBxdWUgZXN0ZSBlbmN1ZW50cmEgZWwgcGF0csOzbiBlc3BhY2lhbCBhIHBhcnRpciBkZSB1bm9zIGRhdG9zIGluaWNpYWxlcy4gTHVlZ28gcHJlZGljZSB2YWxvcmVzIGRlc2Nvbm9jaWRvcyBiYXNhZG9zIGVuIGVzZSBwYXRyw7NuIGVzcGFjaWFsLiBDb24gZXN0YXMgcHJlZGljY2lvbmVzLCBrcmlnaW5nIGdlbmVyYSB1bmEgbWVkaWRhIGRlIGVycm9yIG8gaW5jZXJ0aWR1bWJyZS4gRXN0byBzaWduaWZpY2EgcXVlIHNlIHB1ZWRlIGVzdGltYXIgbGEgY29uZmlhbnphIGVuIGxhIHN1cGVyZmljaWUgZGUgbGEgcHJlZGljY2nDs24gcXVlIHNvbiB2ZXJkYWRlcywgbm8gcHJvZHVjdG8gZGUgbGEgY2FzdWFsaWRhZC4NCg0KIyMgNi4gQ29uY2x1c2lvbmVzDQoqIEVsIG1ldG9kbyBvIG1vZGVsbyBkZSBpbnRlcnBvbGFjaW9uIG1hcyBlZmVjdGl2byBwYXJhIGV4cmVzYXIgbGEgcHJlY2lwaXRhY2lvbiBDSElSUFMgZW4gZWwgZGVwYXJ0YW1lbnRvIGRlIEFyYXVjYSwgZnVlIGVsIG1ldG9kbyBLZ2luZywgeWEgcXVlIG9mcmVjZSBtYXMgcHJlY2lzaW9uIHkgZXhhY3RpdHVkIGZyZW50ZSBhIGxhIHJlYWxpZGFkLCBhdW5xdWUgbGEgZGlmZXJlbmNpYSBlbnRyZSBsb3MgcmVzdWx0YWRvcyBmcmVudGUgYSBJRFcgbm8gZnVlIG11eSBhbXBsaWEuDQoNCisgRGVwZW5kaWVuZG8gZGVsIGxhIHJlc29sdWNpb24gZGUgbG9zIGRhdG9zLCBsb3MgbWV0b2RvcyB2YW4gYSB2YXJpYXIsIGVuIGFsZ3Vub3MgY2Fzb3MsIGNvbW8gZW4gZXN0ZSBkb25kZSBsYSByZXNvbHVjaW9uIHN1cGVyYSBsb3MgNUttLCBsYSBtZWpvciBpbnRlcnBvbGFjaW9uIGEgdXNhciBlcyBLcmlnaW5nLCB5YSBxdWUgY3JlYSBtYXBhcyBjb24gYXJlYXMgZGUgdHJhbmNpc2lvbiBtZW5vcyBhYnJ1cHRhcy4gDQoNCisgRWwgbWV0b2RvIEtyaWdpbmcgcHJvcG9yY2lvbmEgdW4gYW7DoWxpc2lzIG3DoXMgZWxhYm9yYWRvIHkgY29uIHVuIGZ1bmRhbWVudG8gZXN0YWTDrXN0aWNvLCBwb3JsbyBxdWUgZXN0ZSBtw6l0b2RvIHB1ZWRlIHNlciBlbCBwcmVmZXJpZG8gY3VhbmRvIGxhIGRlbnNpZGFkIGRlIG11ZXN0cmVvIG8gZGUgZGF0b3Mgc2VhIG1heW9yLg0KDQorIEN1YW5kbyBlbCBkaXN0YW5jaWFtaWVudG8gZXMgbXV5IGdyYW5kZSxsb3MgdmFyaW9ncmFtYXMgbm8gc29uIHBvc2libGVzIGRlIG9idGVuZXIsDQplbnRvbmNlcyBlbCBLcmlnaW5nIGRlamEgZGUgc2VyIHVuYSBvcGNpw7NuIHkgY29tcGFyYXRpdmFtZW50ZSBlbCBJRFcgc2UgcGVyZmlsYSBjb21vIGVsIG1lam9yIG1ldG9kby4NCg0KKyBMb3MgcG9saWdvbm9zIGRlIHRoaWVzc2VuIHNvbiB1dGlsZXMgcGFyYSB1biBwcmltZXIgYWNlcmNhbWllbnRvLCBhIG5pdmVsZXMgbWFzIGRldGFsbGFkb3MgZXMgcmVjb21lbmRhYmxlIHVzYXIgSURSIG8gS3JpZ2luZw0KDQojIyA3LiBSZWZlcmVuY2lhcw0KRGVwYXJ0YW1lbnRvIEFkbWluaXN0cmF0aXZvIE5hY2lvbmFsIGRlIEVzdGFkw61zdGljYSAtIERBTkUuIFNpc3RlbWEgZGUgQ3VlbnRhcyBOYWNpb25hbGVzDQotIFNDTi4gQ29uc3VsdGFkbyBlbiBqdW5pbyBkZSAyMDEzLiBEaXNwb25pYmxlIGVuIGludGVybmV0OiBodHRwOi8vd3d3LmRhbmUuZ292LmNvL2luZGV4Lg0KcGhwP29wdGlvbj1jb21fY29udGVudCZ2aWV3PWFydGljbGUmaWQ9MTI3Jkl0ZW1pZD04NA0KDQpEZXBhcnRhbWVudG8gQWRtaW5pc3RyYXRpdm8gTmFjaW9uYWwgZGUgRXN0YWTDrXN0aWNhIC0gREFORS4gTmVjZXNpZGFkZXMgQsOhc2ljYXMgSW5zYXRpc2ZlY2hhcy0gTkJJLiBDb25zdWx0YWRvIGVuIGp1bmlvIGRlIDIwMjAuIERpc3BvbmlibGUgZW4gaW50ZXJuZXQ6IGh0dHA6Ly93d3cuZGFuZS5nb3YuY28vaW5kZXgucGhwP29wdGlvbj1jb21fY29udGVudCZ2aWV3PWFydGljbGUmaWQ9MjMxJkl0ZW1pZD02Ng0KDQpFU1JJLiAoMjAyMCkuIEPDs21vIGZ1bmNpb25hIElEVy4gQ29uc3VsdGFkbyBlbiBqdW5pbyBkZWwgMjAyMC4gRGlzcG9uaWJsZSBlbiBpbnRlcm5ldDogaHR0cHM6Ly9kZXNrdG9wLmFyY2dpcy5jb20vZXMvYXJjbWFwLzEwLjMvdG9vbHMvc3BhdGlhbC1hbmFseXN0LXRvb2xib3gvaG93LWlkdy13b3Jrcy5odG0gDQoNCkZ1bmssIEMuLCBQZXRlcnNvbiwgUC4sIExhbmRzZmVsZCwgTS4sIFBlZHJlcm9zLCBELiwgVmVyZGluLCBKLiwgU2h1a2xhLCBTLiwgTWljaGFlbHNlbiwgSi4gKDIwMTUpLiBUaGUgY2xpbWF0ZSBoYXphcmRzIGluZnJhcmVkIHByZWNpcGl0YXRpb24gd2l0aCBzdGF0aW9uc+KAlGEgbmV3IGVudmlyb25tZW50YWwgcmVjb3JkIGZvciBtb25pdG9yaW5nIGV4dHJlbWVzLiANCg0KR2VvaW5vdmEgRm9ybWFjaW9uLiAoMjAyMCkuIEPDs21vIGNhbGN1bGFyIHBvbMOtZ29ub3MgZGUgVGhpZXNzZW4gY29uIEFyY0dJUy4gQ29uc3VsdGFkbyBlbiBqdW5pbyBkZWwgMjAyMC4gRGlzb25pYmxlIGVuIGludGVybmV0OiBodHRwczovL2dlb2lubm92YS5vcmcvY3Vyc29zL2NhbGN1bGFyLXBvbGlnb25vcy10aGllc3Nlbi1hcmNnaXMvICAgDQoNCkluc3RpdHV0byBkZSBIaWRyb2xvZ8OtYSwgTWV0ZW9yb2xvZ8OtYSB5IEVzdHVkaW9zIEFtYmllbnRhbGVzIChJREVBTSkuKDIwMjApLiBNQVBBUyBERSBQUkVDSVBJVEFDScOTTiBQUk9NRURJTyBFTiBDT0xPTUJJQS4gQ29uc3VsdGFkbyBlbiBqdW5pbyBkZWwgMjAyMC4gRGlzcG9uaWJsZSBlbiBpbnRlcm5ldDogaHR0cDovL3d3dy5pZGVhbS5nb3YuY28vZG9jdW1lbnRzLzIxMDIxLzIxMTQxL3ByZWNpcCttZWRpYSslNUJNb2RvK2RlK2NvbXBhdGliaWxpZGFkJTVELnBkZi9lMGFlMDNiZS04ZTNhLTQ0ZjgtYjVhMi0yMTQ4YTVhZWZmNGQNCg0KSm9obnN0b24gSy4sIFZlciBIb2VmIEouTS4sIEtyaXZvcnVjaGtvIEsuLCBMdWNhcyBOLiAoMjAwMSkuIFVzaW5nIEFyY0dpcyBHZW9zdGF0aXN0aWNhbA0KQW5hbHlzdC4gRVNSSS4NCg0KTWluaXN0ZXJpbyBkZSBTYWx1ZCB5IFByb3RlY2Npw7NuIFNvY2lhbCwgeSBQcm9ncmFtYSBNdW5kaWFsIGRlIEFsaW1lbnRvcyBkZSBsYXMgTmFjaW9uZXMgVW5pZGFzLiBDb252ZW5pbyBkZSBDb29wZXJhY2nDs24gVMOpY25pY2EgeSBGaW5hbmNpZXJhIDQ4MCBkZSAyMDEwLiANCg0KTWluaXN0ZXJpbyBkZWwgVHJhYmFqbyB5IGxhIEZ1bmRhY2nDs24gUGFuYW1lcmljYW5hIHBhcmEgZWwgRGVzYXJyb2xsbyDigJMgRlVQQUQgQ29sb21iaWEuICgyMDEzKS4gRG9jdW1lbnRvIGRpYWduw7NzdGljbyBkZWwgZGVwYXJ0YW1lbnRvIGRlIEFyYXVjYS4NCg0KU2lzdGVtYSBkZSBQYXJxdWVzIE5hY2lvbmFsZXMgTmF0dXJhbGVzIGRlIENvbG9tYmlhIChTUE5OKS4oMjAxMykuUGFycXVlcyBOYWNpb25hbGVzIE5hdHVyYWxlcyBkZSBDb2xvbWJpYS4gDQoNClZpdmlhbmEsIFUuLCBBbmRyw6lzLCBPLiwgT3NjYXIsIE0uICgyMDE2KS4gVkFMSURBQ0nDk04gREUgTEEgQkFTRSBERSBEQVRPUyBERSBQUkVDSVBJVEFDScOTTiBDSElSUFMgUEFSQSBDT0xPTUJJQSBBIEVTQ0FMQSBESUFSSUEsIE1FTlNVQUwgWSBBTlVBTCBFTiBFTCBQRVJJT0RPIDE5ODEtMjAxNC4gVW5pdmVyc2lkYWQgTmFjaW9uYWwgZGUgQ29sb21iaWEtU2VkZSBNZWRlbGxpbi4gDQoNCg0KDQoNCg0KDQoNCg0KDQo=