Tabla de datos de jobs in data e importacion de ggplot:

jobs_in_data <- read.csv("jobs_in_data.csv")
print(jobs_in_data)
library(ggplot2)

Gráfica 1:

ggplot(jobs_in_data, aes(job_category, salary/1000)) + 
  geom_boxplot() +
  ggtitle("Data Science: Salary distribution by job category") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

Preguntas sobre la gráfica 1:

A. ¿Cuál es la categoría de trabajo donde el salario es más uniforme? Explique por qué. Respuesta: El puesto de trabajo con el salario más uniforme es Cloud and Database. Esto se debe a que es el espacio de trabajo con la menor diferencia en distancia en las velas. Analizando esta información, sabemos que es el puesto de trabajo con menor diferencia en la paga laboral de todas las opciones.

B. ¿Cuál es la categoría de trabajo donde el salario varía más? Explique por qué. Respuesta: El salario que varía más con la paga de su salario es Machine Learning and AI. A simple vista, la respuesta es Data Science and Research, pero el cuerpo de la vela es más ancho en el primer empleo mencionado, indicando que sus precios de apertura y cierre es incluso mayor la diferencia.

C. ¿Cuál es la categoría de trabajo en donde se gana más salario en promedio? Explique por qué. Respuesta: En promedio, el trabajo mejor pagado es Machine Learning and AI. Esto se puede ver en la gráfica al ser la vela que está más alto ubicada en relación a los demás. Una posible explicación a esto se la demanda en el sector de inteligencias artificiales en la tecnología actual.

D. ¿Cuál es la categoría de trabajo en donde se gana menos salario en promedio? Explique por qué. Respuesta: Por su parte, la categoría donde se gana menos en el promedio del salario es en Data Quality and Operations. Se puede observar con la misma lógica que la pregunta pasada, al ser la vela con una menor ubicación en la escala se puede deducir. Una posible explicación es que las operaciones de este trabajo en los últimos años han sido muy soportadas por herramientas de inteligencia artificial.

Gráfica 2:

ggplot(jobs_in_data, aes(job_category, fill = work_setting)) + 
  geom_bar() +
  ggtitle("Data Science: Count by job category") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

Preguntas de la gráfica 2:

A. ¿Cuál es la categoría de trabajo donde existe mayor cantidad de puestos y es mejor pagado? Explique por qué. Respuesta: El trabajo que tiene una mayor oferta de trabajo es Data Science and Research, mientras que el mejor pagado es Machine Learning and AI. Sin embargo, como se está preguntando por el puesto que combine ambas características, se tomará Data Science and Research. De hecho, es el trabajo que tiene el mejor y el peor puesto de trabajo según el salario. Por lo tanto, su rango de salarios es bastante amplio. Una explicación a esto es la alta demanda ya sea con fines tecnológicos, científicos y de investigación. Las discrepancias en el rango de sus salarios se deben a los mismos sectores que los requieren, según el presupuesto requerido es la paga dada.

B. ¿Cuál es la categoría de trabajo donde existe un buen salario pero hay pocos puestos disponibles? Explique por qué. Respuesta: Este trabajo sería Cloud and Database. De hecho, en la gráfica de conteo de salarios, la muestra visual es casi nula. Se sabe que la cantidad total es de cinco personas. Además, su promedio de salario es uno de los más altos y más comprimidos, por lo que se puede observar que tienen una igualdad distinguida. Seguidamente, una de las razones de esto puede ser la demanda de compañías de profesionales especializados en este campo. No obstante, como son sistemas montados en servidores, el mantenimiento puede ser dado por una misma persona.

C. ¿Cuál es la categoría de trabajo peor pagado y con menor cantidad de puestos disponibles? Explique por qué. Respuesta: Este trabajo sería Data Quality and Operations. Se ve que es uno de los trabajos con menor conteo y también es uno de los trabajos peores pagados. Una razón a esto puede ser la baja demanda de estos profesionales y el reemplazo de este campo por el mantenimiento automático por inteligencia artificial.

D. ¿Cuál es la categoría de trabajo con mayor cantidad de puestos pero salarios bajos? Explique por qué. Respuesta: Este sería el trabajo de Data Engineering. Es uno de los trabajos con más demanda pero de los peores pagados. Una posible explicación a esto es su alta demanda y gran cantidad de personas aspirantes, logra satisfacer los puestos laborales, pero no ofrece una competitividad salarial ideal.

Gráfica 3:

ggplot(jobs_in_data, aes(experience_level, salary/1000)) + 
  geom_violin() +
  ggtitle("Salaries by experience level")

Preguntas de la gráfica 3:

A. En promedio, ¿cuál es el nivel de experiencia con los peores salarios? Explique por qué. Respuesta: Los peores salarios son para el nivel Entry-level. La explicación a esto es que son los miembros más nuevos de la compañía, por lo que su experiencia es mínima, lo que les da menor carga de trabajo y responsabilidad, lo que origina el menor salario.

B. En promedio, ¿cuál es el nivel de experiencia con los mejores salarios? Explique por qué. Respuesta: Sería el nivel executive. Es el que tiene el salario mejor repartido, ya que aunque hay personas con salarios bajos, también tiene un promedio bastante alto y una población considerable de personas con altos salarios.

C. ¿Cuál es el nivel de experiencia que tiene el salario más alto? Explique por qué. Respuesta: Este nivel sería Mid-Level, aunque la población que lo tiene es extremadamente reducida. Una razón a este fenómeno puede ser que hayan encontrado un excelente puesto de trabajo que no se abre de manera muy recurrente.

D. ¿Cuál es el nivel de experiencia que tiene un rango de salarios más amplio? Explique por qué. Respuesta: Este sería el Mid-Level. Así como tiene el salario más alto, también tiene una cantidad considerable de personas que tienen salarios reducidos. Una razón a este fenómeno es la cantidad y variabilidad de puestos de trabajos tan grandes que hay.

Gráfica 4:

ggplot(jobs_in_data, aes(experience_level, fill = as.factor(work_year))) + 
  geom_bar() + 
  facet_wrap(~work_setting, ncol = 3) +
  labs(fill = "Work Year") +
  ggtitle("Experience level: Count by working setting and year") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust=1))

Preguntas de la gráfica 4:

A. ¿Cuál es el año donde más se crearon trabajos remotos para personas con nivel senior? Explique por qué. Respuesta: El año donde se crearon más trabajos remotos para seniors fue en el 2023. Esto según los datos proporcionados por el dataset, además de ser corroborados en la gráfica al tener un margen de más del doble que el año más próximo, el 2022.

B. ¿Qué nivel de experiencia tenía más posibilidad de obtener un puesto remoto en el 2023? Explique por qué. Respuesta: El nivel de experiencia con más posibilidades de obtener un puesto remoto en 2023 fue el nivel senior. En proporción a la cantidad de empleos abiertos por año, es definitivamente el que más cantidad tiene, incluso llegando a superar por más del doble al segundo lugar que es el mid-level. Una posible explicación a este fenómeno es la salida de la pandemia, donde las empresas se dieron cuenta de que no había necesidad de seguir estando presencialmente, lo que aumentó la oferta remota. Además, gracias a la misma pandemia, se abrieron una gran cantidad de puestos laborales que lograron alcanzar el estatus de senior para ese entonces.

C. ¿Para cuál nivel de experiencia se crearon, a través de los años, una mayor proporción de trabajos? Explique por qué. Respuesta: La mayor demanda siempre se ha visto para el nivel senior, en especial a partir del 2022. Una posible razón a esto es que las empresas buscan desarrolladores confiables que produzcan código y solventen problemas sin necesidad de cometer errores de principiantes.

D. ¿Cuál fue el año en el que solo se ofrecieron trabajos presenciales para ejecutivos? Explique por qué. Respuesta: Fue un poco en el 2022 y en el 2023. Una posible respuesta a esto fue la salida de la pandemia del COVID-19, generando un regreso a la presencialidad para los trabajadores de las empresas.

LS0tDQp0aXRsZTogIlRhcmVhIDEgLSBTYW1pciBDYWJyZXJhIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCg0KVGFibGEgZGUgZGF0b3MgZGUgam9icyBpbiBkYXRhIGUgaW1wb3J0YWNpb24gZGUgZ2dwbG90Og0KDQpgYGB7cn0NCmxpYnJhcnkoZ2dwbG90MikNCmpvYnNfaW5fZGF0YSA8LSByZWFkLmNzdigiam9ic19pbl9kYXRhLmNzdiIpDQpwcmludChqb2JzX2luX2RhdGEpDQpgYGANCg0KDQpHcsOhZmljYSAxOiANCg0KYGBge3J9DQpnZ3Bsb3Qoam9ic19pbl9kYXRhLCBhZXMoam9iX2NhdGVnb3J5LCBzYWxhcnkvMTAwMCkpICsgDQogIGdlb21fYm94cGxvdCgpICsNCiAgZ2d0aXRsZSgiRGF0YSBTY2llbmNlOiBTYWxhcnkgZGlzdHJpYnV0aW9uIGJ5IGpvYiBjYXRlZ29yeSIpICsNCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgdmp1c3QgPSAwLjUsIGhqdXN0PTEpKQ0KYGBgDQpQcmVndW50YXMgc29icmUgbGEgZ3LDoWZpY2EgMToNCg0KQS4gwr9DdcOhbCBlcyBsYSBjYXRlZ29yw61hIGRlIHRyYWJham8gZG9uZGUgZWwgc2FsYXJpbyBlcyBtw6FzIHVuaWZvcm1lPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogRWwgcHVlc3RvIGRlIHRyYWJham8gY29uIGVsIHNhbGFyaW8gbcOhcyB1bmlmb3JtZSBlcyBDbG91ZCBhbmQgRGF0YWJhc2UuIEVzdG8gc2UgZGViZSBhIHF1ZSBlcyBlbCBlc3BhY2lvIGRlIHRyYWJham8gY29uIGxhIG1lbm9yIGRpZmVyZW5jaWEgZW4gZGlzdGFuY2lhIGVuIGxhcyB2ZWxhcy4gQW5hbGl6YW5kbyBlc3RhIGluZm9ybWFjacOzbiwgc2FiZW1vcyBxdWUgZXMgZWwgcHVlc3RvIGRlIHRyYWJham8gY29uIG1lbm9yIGRpZmVyZW5jaWEgZW4gbGEgcGFnYSBsYWJvcmFsIGRlIHRvZGFzIGxhcyBvcGNpb25lcy4NCg0KQi4gwr9DdcOhbCBlcyBsYSBjYXRlZ29yw61hIGRlIHRyYWJham8gZG9uZGUgZWwgc2FsYXJpbyB2YXLDrWEgbcOhcz8gRXhwbGlxdWUgcG9yIHF1w6kuDQpSZXNwdWVzdGE6IEVsIHNhbGFyaW8gcXVlIHZhcsOtYSBtw6FzIGNvbiBsYSBwYWdhIGRlIHN1IHNhbGFyaW8gZXMgTWFjaGluZSBMZWFybmluZyBhbmQgQUkuIEEgc2ltcGxlIHZpc3RhLCBsYSByZXNwdWVzdGEgZXMgRGF0YSBTY2llbmNlIGFuZCBSZXNlYXJjaCwgcGVybyBlbCBjdWVycG8gZGUgbGEgdmVsYSBlcyBtw6FzIGFuY2hvIGVuIGVsIHByaW1lciBlbXBsZW8gbWVuY2lvbmFkbywgaW5kaWNhbmRvIHF1ZSBzdXMgcHJlY2lvcyBkZSBhcGVydHVyYSB5IGNpZXJyZSBlcyBpbmNsdXNvIG1heW9yIGxhIGRpZmVyZW5jaWEuDQoNCkMuIMK/Q3XDoWwgZXMgbGEgY2F0ZWdvcsOtYSBkZSB0cmFiYWpvIGVuIGRvbmRlIHNlIGdhbmEgbcOhcyBzYWxhcmlvIGVuIHByb21lZGlvPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogRW4gcHJvbWVkaW8sIGVsIHRyYWJham8gbWVqb3IgcGFnYWRvIGVzIE1hY2hpbmUgTGVhcm5pbmcgYW5kIEFJLiBFc3RvIHNlIHB1ZWRlIHZlciBlbiBsYSBncsOhZmljYSBhbCBzZXIgbGEgdmVsYSBxdWUgZXN0w6EgbcOhcyBhbHRvIHViaWNhZGEgZW4gcmVsYWNpw7NuIGEgbG9zIGRlbcOhcy4gVW5hIHBvc2libGUgZXhwbGljYWNpw7NuIGEgZXN0byBzZSBsYSBkZW1hbmRhIGVuIGVsIHNlY3RvciBkZSBpbnRlbGlnZW5jaWFzIGFydGlmaWNpYWxlcyBlbiBsYSB0ZWNub2xvZ8OtYSBhY3R1YWwuDQoNCkQuIMK/Q3XDoWwgZXMgbGEgY2F0ZWdvcsOtYSBkZSB0cmFiYWpvIGVuIGRvbmRlIHNlIGdhbmEgbWVub3Mgc2FsYXJpbyBlbiBwcm9tZWRpbz8gRXhwbGlxdWUgcG9yIHF1w6kuDQpSZXNwdWVzdGE6IFBvciBzdSBwYXJ0ZSwgbGEgY2F0ZWdvcsOtYSBkb25kZSBzZSBnYW5hIG1lbm9zIGVuIGVsIHByb21lZGlvIGRlbCBzYWxhcmlvIGVzIGVuIERhdGEgUXVhbGl0eSBhbmQgT3BlcmF0aW9ucy4gU2UgcHVlZGUgb2JzZXJ2YXIgY29uIGxhIG1pc21hIGzDs2dpY2EgcXVlIGxhIHByZWd1bnRhIHBhc2FkYSwgYWwgc2VyIGxhIHZlbGEgY29uIHVuYSBtZW5vciB1YmljYWNpw7NuIGVuIGxhIGVzY2FsYSBzZSBwdWVkZSBkZWR1Y2lyLiBVbmEgcG9zaWJsZSBleHBsaWNhY2nDs24gZXMgcXVlIGxhcyBvcGVyYWNpb25lcyBkZSBlc3RlIHRyYWJham8gZW4gbG9zIMO6bHRpbW9zIGHDsW9zIGhhbiBzaWRvIG11eSBzb3BvcnRhZGFzIHBvciBoZXJyYW1pZW50YXMgZGUgaW50ZWxpZ2VuY2lhIGFydGlmaWNpYWwuDQoNCg0KDQpHcsOhZmljYSAyOiANCg0KYGBge3J9DQpnZ3Bsb3Qoam9ic19pbl9kYXRhLCBhZXMoam9iX2NhdGVnb3J5LCBmaWxsID0gd29ya19zZXR0aW5nKSkgKyANCiAgZ2VvbV9iYXIoKSArDQogIGdndGl0bGUoIkRhdGEgU2NpZW5jZTogQ291bnQgYnkgam9iIGNhdGVnb3J5IikgKw0KICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCB2anVzdCA9IDAuNSwgaGp1c3Q9MSkpDQpgYGANClByZWd1bnRhcyBkZSBsYSBncsOhZmljYSAyOg0KDQpBLiDCv0N1w6FsIGVzIGxhIGNhdGVnb3LDrWEgZGUgdHJhYmFqbyBkb25kZSBleGlzdGUgbWF5b3IgY2FudGlkYWQgZGUgcHVlc3RvcyB5IGVzIG1lam9yIHBhZ2Fkbz8gRXhwbGlxdWUgcG9yIHF1w6kuDQpSZXNwdWVzdGE6IEVsIHRyYWJham8gcXVlIHRpZW5lIHVuYSBtYXlvciBvZmVydGEgZGUgdHJhYmFqbyBlcyBEYXRhIFNjaWVuY2UgYW5kIFJlc2VhcmNoLCBtaWVudHJhcyBxdWUgZWwgbWVqb3IgcGFnYWRvIGVzIE1hY2hpbmUgTGVhcm5pbmcgYW5kIEFJLiBTaW4gZW1iYXJnbywgY29tbyBzZSBlc3TDoSBwcmVndW50YW5kbyBwb3IgZWwgcHVlc3RvIHF1ZSBjb21iaW5lIGFtYmFzIGNhcmFjdGVyw61zdGljYXMsIHNlIHRvbWFyw6EgRGF0YSBTY2llbmNlIGFuZCBSZXNlYXJjaC4gRGUgaGVjaG8sIGVzIGVsIHRyYWJham8gcXVlIHRpZW5lIGVsIG1lam9yIHkgZWwgcGVvciBwdWVzdG8gZGUgdHJhYmFqbyBzZWfDum4gZWwgc2FsYXJpby4gUG9yIGxvIHRhbnRvLCBzdSByYW5nbyBkZSBzYWxhcmlvcyBlcyBiYXN0YW50ZSBhbXBsaW8uIFVuYSBleHBsaWNhY2nDs24gYSBlc3RvIGVzIGxhIGFsdGEgZGVtYW5kYSB5YSBzZWEgY29uIGZpbmVzIHRlY25vbMOzZ2ljb3MsIGNpZW50w61maWNvcyB5IGRlIGludmVzdGlnYWNpw7NuLiBMYXMgZGlzY3JlcGFuY2lhcyBlbiBlbCByYW5nbyBkZSBzdXMgc2FsYXJpb3Mgc2UgZGViZW4gYSBsb3MgbWlzbW9zIHNlY3RvcmVzIHF1ZSBsb3MgcmVxdWllcmVuLCBzZWfDum4gZWwgcHJlc3VwdWVzdG8gcmVxdWVyaWRvIGVzIGxhIHBhZ2EgZGFkYS4NCg0KQi4gwr9DdcOhbCBlcyBsYSBjYXRlZ29yw61hIGRlIHRyYWJham8gZG9uZGUgZXhpc3RlIHVuIGJ1ZW4gc2FsYXJpbyBwZXJvIGhheSBwb2NvcyBwdWVzdG9zIGRpc3BvbmlibGVzPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogRXN0ZSB0cmFiYWpvIHNlcsOtYSBDbG91ZCBhbmQgRGF0YWJhc2UuIERlIGhlY2hvLCBlbiBsYSBncsOhZmljYSBkZSBjb250ZW8gZGUgc2FsYXJpb3MsIGxhIG11ZXN0cmEgdmlzdWFsIGVzIGNhc2kgbnVsYS4gU2Ugc2FiZSBxdWUgbGEgY2FudGlkYWQgdG90YWwgZXMgZGUgY2luY28gcGVyc29uYXMuIEFkZW3DoXMsIHN1IHByb21lZGlvIGRlIHNhbGFyaW8gZXMgdW5vIGRlIGxvcyBtw6FzIGFsdG9zIHkgbcOhcyBjb21wcmltaWRvcywgcG9yIGxvIHF1ZSBzZSBwdWVkZSBvYnNlcnZhciBxdWUgdGllbmVuIHVuYSBpZ3VhbGRhZCBkaXN0aW5ndWlkYS4gU2VndWlkYW1lbnRlLCB1bmEgZGUgbGFzIHJhem9uZXMgZGUgZXN0byBwdWVkZSBzZXIgbGEgZGVtYW5kYSBkZSBjb21wYcOxw61hcyBkZSBwcm9mZXNpb25hbGVzIGVzcGVjaWFsaXphZG9zIGVuIGVzdGUgY2FtcG8uIE5vIG9ic3RhbnRlLCBjb21vIHNvbiBzaXN0ZW1hcyBtb250YWRvcyBlbiBzZXJ2aWRvcmVzLCBlbCBtYW50ZW5pbWllbnRvIHB1ZWRlIHNlciBkYWRvIHBvciB1bmEgbWlzbWEgcGVyc29uYS4NCg0KQy4gwr9DdcOhbCBlcyBsYSBjYXRlZ29yw61hIGRlIHRyYWJham8gcGVvciBwYWdhZG8geSBjb24gbWVub3IgY2FudGlkYWQgZGUgcHVlc3RvcyBkaXNwb25pYmxlcz8gRXhwbGlxdWUgcG9yIHF1w6kuDQpSZXNwdWVzdGE6IEVzdGUgdHJhYmFqbyBzZXLDrWEgRGF0YSBRdWFsaXR5IGFuZCBPcGVyYXRpb25zLiBTZSB2ZSBxdWUgZXMgdW5vIGRlIGxvcyB0cmFiYWpvcyBjb24gbWVub3IgY29udGVvIHkgdGFtYmnDqW4gZXMgdW5vIGRlIGxvcyB0cmFiYWpvcyBwZW9yZXMgcGFnYWRvcy4gVW5hIHJhesOzbiBhIGVzdG8gcHVlZGUgc2VyIGxhIGJhamEgZGVtYW5kYSBkZSBlc3RvcyBwcm9mZXNpb25hbGVzIHkgZWwgcmVlbXBsYXpvIGRlIGVzdGUgY2FtcG8gcG9yIGVsIG1hbnRlbmltaWVudG8gYXV0b23DoXRpY28gcG9yIGludGVsaWdlbmNpYSBhcnRpZmljaWFsLg0KDQpELiDCv0N1w6FsIGVzIGxhIGNhdGVnb3LDrWEgZGUgdHJhYmFqbyBjb24gbWF5b3IgY2FudGlkYWQgZGUgcHVlc3RvcyBwZXJvIHNhbGFyaW9zIGJham9zPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogRXN0ZSBzZXLDrWEgZWwgdHJhYmFqbyBkZSBEYXRhIEVuZ2luZWVyaW5nLiBFcyB1bm8gZGUgbG9zIHRyYWJham9zIGNvbiBtw6FzIGRlbWFuZGEgcGVybyBkZSBsb3MgcGVvcmVzIHBhZ2Fkb3MuIFVuYSBwb3NpYmxlIGV4cGxpY2FjacOzbiBhIGVzdG8gZXMgc3UgYWx0YSBkZW1hbmRhIHkgZ3JhbiBjYW50aWRhZCBkZSBwZXJzb25hcyBhc3BpcmFudGVzLCBsb2dyYSBzYXRpc2ZhY2VyIGxvcyBwdWVzdG9zIGxhYm9yYWxlcywgcGVybyBubyBvZnJlY2UgdW5hIGNvbXBldGl0aXZpZGFkIHNhbGFyaWFsIGlkZWFsLg0KDQoNCkdyw6FmaWNhIDM6IA0KDQpgYGB7cn0NCmdncGxvdChqb2JzX2luX2RhdGEsIGFlcyhleHBlcmllbmNlX2xldmVsLCBzYWxhcnkvMTAwMCkpICsgDQogIGdlb21fdmlvbGluKCkgKw0KICBnZ3RpdGxlKCJTYWxhcmllcyBieSBleHBlcmllbmNlIGxldmVsIikNCmBgYA0KUHJlZ3VudGFzIGRlIGxhIGdyw6FmaWNhIDM6DQoNCkEuIEVuIHByb21lZGlvLCDCv2N1w6FsIGVzIGVsIG5pdmVsIGRlIGV4cGVyaWVuY2lhIGNvbiBsb3MgcGVvcmVzIHNhbGFyaW9zPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogTG9zIHBlb3JlcyBzYWxhcmlvcyBzb24gcGFyYSBlbCBuaXZlbCBFbnRyeS1sZXZlbC4gTGEgZXhwbGljYWNpw7NuIGEgZXN0byBlcyBxdWUgc29uIGxvcyBtaWVtYnJvcyBtw6FzIG51ZXZvcyBkZSBsYSBjb21wYcOxw61hLCBwb3IgbG8gcXVlIHN1IGV4cGVyaWVuY2lhIGVzIG3DrW5pbWEsIGxvIHF1ZSBsZXMgZGEgbWVub3IgY2FyZ2EgZGUgdHJhYmFqbyB5IHJlc3BvbnNhYmlsaWRhZCwgbG8gcXVlIG9yaWdpbmEgZWwgbWVub3Igc2FsYXJpby4NCg0KQi4gRW4gcHJvbWVkaW8sIMK/Y3XDoWwgZXMgZWwgbml2ZWwgZGUgZXhwZXJpZW5jaWEgY29uIGxvcyBtZWpvcmVzIHNhbGFyaW9zPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogU2Vyw61hIGVsIG5pdmVsIGV4ZWN1dGl2ZS4gRXMgZWwgcXVlIHRpZW5lIGVsIHNhbGFyaW8gbWVqb3IgcmVwYXJ0aWRvLCB5YSBxdWUgYXVucXVlIGhheSBwZXJzb25hcyBjb24gc2FsYXJpb3MgYmFqb3MsIHRhbWJpw6luIHRpZW5lIHVuIHByb21lZGlvIGJhc3RhbnRlIGFsdG8geSB1bmEgcG9ibGFjacOzbiBjb25zaWRlcmFibGUgZGUgcGVyc29uYXMgY29uIGFsdG9zIHNhbGFyaW9zLg0KDQpDLiDCv0N1w6FsIGVzIGVsIG5pdmVsIGRlIGV4cGVyaWVuY2lhIHF1ZSB0aWVuZSBlbCBzYWxhcmlvIG3DoXMgYWx0bz8gRXhwbGlxdWUgcG9yIHF1w6kuDQpSZXNwdWVzdGE6IEVzdGUgbml2ZWwgc2Vyw61hIE1pZC1MZXZlbCwgYXVucXVlIGxhIHBvYmxhY2nDs24gcXVlIGxvIHRpZW5lIGVzIGV4dHJlbWFkYW1lbnRlIHJlZHVjaWRhLiBVbmEgcmF6w7NuIGEgZXN0ZSBmZW7Ds21lbm8gcHVlZGUgc2VyIHF1ZSBoYXlhbiBlbmNvbnRyYWRvIHVuIGV4Y2VsZW50ZSBwdWVzdG8gZGUgdHJhYmFqbyBxdWUgbm8gc2UgYWJyZSBkZSBtYW5lcmEgbXV5IHJlY3VycmVudGUuDQoNCkQuIMK/Q3XDoWwgZXMgZWwgbml2ZWwgZGUgZXhwZXJpZW5jaWEgcXVlIHRpZW5lIHVuIHJhbmdvIGRlIHNhbGFyaW9zIG3DoXMgYW1wbGlvPyBFeHBsaXF1ZSBwb3IgcXXDqS4NClJlc3B1ZXN0YTogRXN0ZSBzZXLDrWEgZWwgTWlkLUxldmVsLiBBc8OtIGNvbW8gdGllbmUgZWwgc2FsYXJpbyBtw6FzIGFsdG8sIHRhbWJpw6luIHRpZW5lIHVuYSBjYW50aWRhZCBjb25zaWRlcmFibGUgZGUgcGVyc29uYXMgcXVlIHRpZW5lbiBzYWxhcmlvcyByZWR1Y2lkb3MuIFVuYSByYXrDs24gYSBlc3RlIGZlbsOzbWVubyBlcyBsYSBjYW50aWRhZCB5IHZhcmlhYmlsaWRhZCBkZSBwdWVzdG9zIGRlIHRyYWJham9zIHRhbiBncmFuZGVzIHF1ZSBoYXkuDQoNCg0KR3LDoWZpY2EgNDogDQoNCmBgYHtyfQ0KZ2dwbG90KGpvYnNfaW5fZGF0YSwgYWVzKGV4cGVyaWVuY2VfbGV2ZWwsIGZpbGwgPSBhcy5mYWN0b3Iod29ya195ZWFyKSkpICsgDQogIGdlb21fYmFyKCkgKyANCiAgZmFjZXRfd3JhcCh+d29ya19zZXR0aW5nLCBuY29sID0gMykgKw0KICBsYWJzKGZpbGwgPSAiV29yayBZZWFyIikgKw0KICBnZ3RpdGxlKCJFeHBlcmllbmNlIGxldmVsOiBDb3VudCBieSB3b3JraW5nIHNldHRpbmcgYW5kIHllYXIiKSArDQogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gOTAsIHZqdXN0ID0gMC41LCBoanVzdD0xKSkNCmBgYA0KUHJlZ3VudGFzIGRlIGxhIGdyw6FmaWNhIDQ6DQoNCkEuIMK/Q3XDoWwgZXMgZWwgYcOxbyBkb25kZSBtw6FzIHNlIGNyZWFyb24gdHJhYmFqb3MgcmVtb3RvcyBwYXJhIHBlcnNvbmFzIGNvbiBuaXZlbCBzZW5pb3I/IEV4cGxpcXVlIHBvciBxdcOpLg0KUmVzcHVlc3RhOiBFbCBhw7FvIGRvbmRlIHNlIGNyZWFyb24gbcOhcyB0cmFiYWpvcyByZW1vdG9zIHBhcmEgc2VuaW9ycyBmdWUgZW4gZWwgMjAyMy4gRXN0byBzZWfDum4gbG9zIGRhdG9zIHByb3BvcmNpb25hZG9zIHBvciBlbCBkYXRhc2V0LCBhZGVtw6FzIGRlIHNlciBjb3Jyb2JvcmFkb3MgZW4gbGEgZ3LDoWZpY2EgYWwgdGVuZXIgdW4gbWFyZ2VuIGRlIG3DoXMgZGVsIGRvYmxlIHF1ZSBlbCBhw7FvIG3DoXMgcHLDs3hpbW8sIGVsIDIwMjIuDQoNCkIuIMK/UXXDqSBuaXZlbCBkZSBleHBlcmllbmNpYSB0ZW7DrWEgbcOhcyBwb3NpYmlsaWRhZCBkZSBvYnRlbmVyIHVuIHB1ZXN0byByZW1vdG8gZW4gZWwgMjAyMz8gRXhwbGlxdWUgcG9yIHF1w6kuDQpSZXNwdWVzdGE6IEVsIG5pdmVsIGRlIGV4cGVyaWVuY2lhIGNvbiBtw6FzIHBvc2liaWxpZGFkZXMgZGUgb2J0ZW5lciB1biBwdWVzdG8gcmVtb3RvIGVuIDIwMjMgZnVlIGVsIG5pdmVsIHNlbmlvci4gRW4gcHJvcG9yY2nDs24gYSBsYSBjYW50aWRhZCBkZSBlbXBsZW9zIGFiaWVydG9zIHBvciBhw7FvLCBlcyBkZWZpbml0aXZhbWVudGUgZWwgcXVlIG3DoXMgY2FudGlkYWQgdGllbmUsIGluY2x1c28gbGxlZ2FuZG8gYSBzdXBlcmFyIHBvciBtw6FzIGRlbCBkb2JsZSBhbCBzZWd1bmRvIGx1Z2FyIHF1ZSBlcyBlbCBtaWQtbGV2ZWwuIFVuYSBwb3NpYmxlIGV4cGxpY2FjacOzbiBhIGVzdGUgZmVuw7NtZW5vIGVzIGxhIHNhbGlkYSBkZSBsYSBwYW5kZW1pYSwgZG9uZGUgbGFzIGVtcHJlc2FzIHNlIGRpZXJvbiBjdWVudGEgZGUgcXVlIG5vIGhhYsOtYSBuZWNlc2lkYWQgZGUgc2VndWlyIGVzdGFuZG8gcHJlc2VuY2lhbG1lbnRlLCBsbyBxdWUgYXVtZW50w7MgbGEgb2ZlcnRhIHJlbW90YS4gQWRlbcOhcywgZ3JhY2lhcyBhIGxhIG1pc21hIHBhbmRlbWlhLCBzZSBhYnJpZXJvbiB1bmEgZ3JhbiBjYW50aWRhZCBkZSBwdWVzdG9zIGxhYm9yYWxlcyBxdWUgbG9ncmFyb24gYWxjYW56YXIgZWwgZXN0YXR1cyBkZSBzZW5pb3IgcGFyYSBlc2UgZW50b25jZXMuDQoNCkMuIMK/UGFyYSBjdcOhbCBuaXZlbCBkZSBleHBlcmllbmNpYSBzZSBjcmVhcm9uLCBhIHRyYXbDqXMgZGUgbG9zIGHDsW9zLCB1bmEgbWF5b3IgcHJvcG9yY2nDs24gZGUgdHJhYmFqb3M/IEV4cGxpcXVlIHBvciBxdcOpLg0KUmVzcHVlc3RhOiBMYSBtYXlvciBkZW1hbmRhIHNpZW1wcmUgc2UgaGEgdmlzdG8gcGFyYSBlbCBuaXZlbCBzZW5pb3IsIGVuIGVzcGVjaWFsIGEgcGFydGlyIGRlbCAyMDIyLiBVbmEgcG9zaWJsZSByYXrDs24gYSBlc3RvIGVzIHF1ZSBsYXMgZW1wcmVzYXMgYnVzY2FuIGRlc2Fycm9sbGFkb3JlcyBjb25maWFibGVzIHF1ZSBwcm9kdXpjYW4gY8OzZGlnbyB5IHNvbHZlbnRlbiBwcm9ibGVtYXMgc2luIG5lY2VzaWRhZCBkZSBjb21ldGVyIGVycm9yZXMgZGUgcHJpbmNpcGlhbnRlcy4NCg0KRC4gwr9DdcOhbCBmdWUgZWwgYcOxbyBlbiBlbCBxdWUgc29sbyBzZSBvZnJlY2llcm9uIHRyYWJham9zIHByZXNlbmNpYWxlcyBwYXJhIGVqZWN1dGl2b3M/IEV4cGxpcXVlIHBvciBxdcOpLg0KUmVzcHVlc3RhOiBGdWUgdW4gcG9jbyBlbiBlbCAyMDIyIHkgZW4gZWwgMjAyMy4gVW5hIHBvc2libGUgcmVzcHVlc3RhIGEgZXN0byBmdWUgbGEgc2FsaWRhIGRlIGxhIHBhbmRlbWlhIGRlbCBDT1ZJRC0xOSwgZ2VuZXJhbmRvIHVuIHJlZ3Jlc28gYSBsYSBwcmVzZW5jaWFsaWRhZCBwYXJhIGxvcyB0cmFiYWphZG9yZXMgZGUgbGFzIGVtcHJlc2FzLg0K