Introducción a la programación en Rstudio
Sebastián Alonso Sosa Pérez
Introducción a R y Rstudio
Creado: 18-02-2021
1.Introducción
En la actualidad existen diversos paquetes estadísticos de paga, como por ejemplo SPSS, Stata, SAS, Minitab, etc, que tratan en la medida de ofrecer la mayor cantidad de técnicas estadísticas posibles. R surge frente a estas opciones como un software libre a fin de que la descarga del mismo está abierta en la red cualquier usuario con acceso a internet puede obtener dicho software. En la siguiente sesión se explicará las características principales de R, su historia, sus usos y el uso básico del programa; a fin de que el estudiante comprenda la importancia del uso de este lenguaje de programación para la ciencia en general.
Link para descarga de algunos sotfware estadisticos:
2. ¿Qué es R?
R es un lenguaje de programación que se creó especialmente para el análisis estadístico. A diferencia de la mayoría de los programas que se usan frecuentemente, este se maneja a través de una consola en donde se indican ordenes por medio de códigos. La importancia de R radica en que al ser éste un software libre, su descarga está abierta para cualquier usuario que cuente con internet.
3. Usos de R
El lenguaje de programación R es muy utilizado en la actualidad en diferentes campos de la ciencia, entre los principales podemos distinguir los siguientes:
Estadística: Aplicación de técnicas de muestreo, técnicas básicas y avanzadas de estadística (pruebas de hipótesis, análisis de varianzas, etc.).
Econometría: Aplicación de técnicas de análisis para datos de corte transversal, de series de tiempo y de panel.
Ciencias biológicas: Análisis de modelos de elección discreta para la estimación de probabilidades, análisis de supervivencia, entre otros.
4. Instalación de R y Rstudio
En esta sección se vera como instalar R y después su editor de código Rstudio.
4.1. Descarga de R
Para descargra R dar click en este link.


5. R como calculadora
R puede servirnos como calculadora, ya que ofrece diversos tipos de herramientas para el cálculo numérico. Se usa de la siguiente manera:
Como se observa R es una potente herramienta no sólo para análisis estadístico, sino que también puede ser utilizado para el cálculo numérico. A continuación, se presentan las principales funciones que R ofrece para hacer operaciones matemáticas:
5.1. Operadores aritméticos

5.2. Operadores lógicos
Los operadores lógicos se describen en la siguiente tabla.

5.3. Operadores de comparación
Los operadores de comparación se muestran en la siguiente tabla.

Los operadores de comparación son útiles, principalmente, en las sentencias de control: if, while, etc, aunque si las usamos en la consola, R nos responderá como si se tratase de una operación lógica.
6. Espacio y directorio de trabajo
El “workspace” es el espacio de trabajo en que se incluyen todos los objetos definidos por el usuario (ya veremos qué son estos objetos, que incluyen variables, vectores, dataframes…), se almacena en memoria intermedia mientras trabajas con R. Cuando termina una sesión de R el propio R te pregunta si quieres guardar el “workspace” para usos futuros. Este espacio, “workspace”, se recarga al volver a iniciar la sesión. Directorio de trabajo o “working directory” es el directorio donde por defecto “lee” R. También es donde guardará el workspace al finalizar la sesión y donde buscará un workspace guardado al inicio. Si se quiere que R lea un fichero que no esté en “working directory” hay que especificar la ruta completa. Estas son las funciones asociadas al wokspace:

7. Paquetes en R
Los paquetes de R permiten incrementar la capacidad de R: funciones, importación, exportación y manipulación de datos, gráficos, técnicas estadísticas, creación de informes etc. Son bibliotecas de código gratuitas creadas por la comunidad de usuarios y disponibles en varios repositorios como Comprehensive R Archive Network (CRAN) o Bioconductor.
7.1. Instalar paquetes
Existen básicamente dos formas para instalar paquetes en R una puede ser yendo a Paquetes > Instalar paquete(s), donde se deberá seleccionar el “CRAN mirror”.

La otra forma es haciendo uso del comando ´´´install.packages()´´´. Al igual que la forma anterior también se deberá iniciar el CRAN Mirror para instalar el paquete.
7.2. Cargar librerías
Una vez instalado el paquete se debe cargar el mismo a fin de que se puedan usar las funciones relacionadas a dicha librería. Para eso se debe uso del comando library(“”).

Los script para la clase se encuentr en este link
LS0tDQpvdXRwdXQ6DQogIGh0bWxfZG9jdW1lbnQ6IA0KICAgIGNvZGVfZG93bmxvYWQ6IHRydWUNCiAgICAjIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGhpZ2hsaWdodDogemVuYnVybg0KICAgICMgbnVtYmVyX3NlY3Rpb25zOiB5ZXMNCiAgICB0aGVtZTogImZsYXRseSINCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCi0tLQ0KDQpgYGB7ciBzZXR1cCxpbmNsdWRlPUZBTFNFfQ0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBUUlVFLCB3YXJuaW5nID0gRkFMU0UsIG1lc3NhZ2UgPSBGQUxTRSwgY2FjaGUgPSBUUlVFKQ0KDQpgYGANCg0KPGNlbnRlcj4NCiFbXSh1bml2ZXJpZGFkLmpwZykNCjwvY2VudGVyPg0KPGNlbnRlcj4NCiAgICA8Yj5JbnRyb2R1Y2Npw7NuIGEgbGEgcHJvZ3JhbWFjacOzbiBlbiBSc3R1ZGlvPC9iPjxicj4NCiAgICA8Yj5TZWJhc3Rpw6FuIEFsb25zbyBTb3NhIFDDqXJlejwvYj4NCjxicj4NCg0KPGgxPjxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4qX19JbnRyb2R1Y2Npw7NuIGEgUiB5IFJzdHVkaW8gX18qPC9zcGFuPjwvaDE+DQo8L2NlbnRlcj4NCjxjZW50ZXI+DQo8aT5DcmVhZG86ICAgICAxOC0wMi0yMDIxIA0KPC9jZW50ZXI+DQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPipfXzEuSW50cm9kdWNjacOzbl9fKjwvc3Bhbj4NCg0KRW4gbGEgYWN0dWFsaWRhZCBleGlzdGVuIGRpdmVyc29zIHBhcXVldGVzIGVzdGFkw61zdGljb3MgZGUgcGFnYSwgY29tbw0KcG9yIGVqZW1wbG8gU1BTUywgU3RhdGEsIFNBUywgTWluaXRhYiwgZXRjLCBxdWUgdHJhdGFuIGVuIGxhIG1lZGlkYSBkZQ0Kb2ZyZWNlciBsYSBtYXlvciBjYW50aWRhZCBkZSB0w6ljbmljYXMgZXN0YWTDrXN0aWNhcyBwb3NpYmxlcy4gUiBzdXJnZSBmcmVudGUNCmEgZXN0YXMgb3BjaW9uZXMgY29tbyB1biBzb2Z0d2FyZSBsaWJyZSBhIGZpbiBkZSBxdWUgbGEgZGVzY2FyZ2EgZGVsDQptaXNtbyBlc3TDoSBhYmllcnRhIGVuIGxhIHJlZCBjdWFscXVpZXIgdXN1YXJpbyBjb24gYWNjZXNvIGEgaW50ZXJuZXQNCnB1ZWRlIG9idGVuZXIgZGljaG8gc29mdHdhcmUuDQpFbiBsYSBzaWd1aWVudGUgc2VzacOzbiBzZSBleHBsaWNhcsOhIGxhcyBjYXJhY3RlcsOtc3RpY2FzIHByaW5jaXBhbGVzIGRlIFIsIHN1DQpoaXN0b3JpYSwgc3VzIHVzb3MgeSBlbCB1c28gYsOhc2ljbyBkZWwgcHJvZ3JhbWE7IGEgZmluIGRlIHF1ZSBlbCBlc3R1ZGlhbnRlDQpjb21wcmVuZGEgbGEgaW1wb3J0YW5jaWEgZGVsIHVzbyBkZSBlc3RlIGxlbmd1YWplIGRlIHByb2dyYW1hY2nDs24NCnBhcmEgbGEgY2llbmNpYSBlbiBnZW5lcmFsLg0KDQpMaW5rIHBhcmEgZGVzY2FyZ2EgZGUgYWxndW5vcyBzb3Rmd2FyZSBlc3RhZGlzdGljb3M6IA0KDQp8IFByb2dyYW1hICAgIAl8IERlc2NhcmdhIAl8DQp8LS0tLS0tLS0tLS0tLQl8LS0tLS0tLS0tLQl8DQp8IFIgeSBSc3R1ZGlvIAl8IFtMaW5rXShodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZHJpdmUvZm9sZGVycy8xcVR5TGxoNlJ5SGFXX0cxdHlPb0FKcUJocU9rYmNRX0E/dXNwPXNoYXJpbmcpICAgICAJfA0KfCBQeXRob24gICAgICAJfCBbTGlua10oaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2RyaXZlL2ZvbGRlcnMvMTJELVFCN1pQVWpwYUdUaS1FS0h3dEJabGI5ZDZHMzM5P3VzcD1zaGFyaW5nKSAgICAgCXwNCnwgRXZpZXdzICAgICAgCXwgW0xpbmtdKGh0dHBzOi8vZHJpdmUuZ29vZ2xlLmNvbS9kcml2ZS9mb2xkZXJzLzFWWDZSaTBDcl9YcjFvRm9NdmZDdkJDWmNENDBEODhndj91c3A9c2hhcmluZykgICAgIAl8DQp8IFN0YXRhICAgICAgIAl8IFtMaW5rXShodHRwczovL2RyaXZlLmdvb2dsZS5jb20vZHJpdmUvZm9sZGVycy8xb2tjeU5XVmVRdklLZDdkYmV2RG1pZEs5LVlFdnp6T3M/dXNwPXNoYXJpbmcpICAgICAJfA0KfCBTcHNzICAgICAgICAJfCBbTGlua10oaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2RyaXZlL2ZvbGRlcnMvMUt2NGhGTVBYbmhHZHdUMzVTRFJ3QVowZkJXbXgtZFRSP3VzcD1zaGFyaW5nKSAgICAgCXwNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+Kl9fMi4gwr9RdcOpIGVzIFI/X18qPC9zcGFuPg0KDQpSIGVzIHVuIGxlbmd1YWplIGRlIHByb2dyYW1hY2nDs24gcXVlIHNlIGNyZcOzIGVzcGVjaWFsbWVudGUgcGFyYSBlbA0KYW7DoWxpc2lzIGVzdGFkw61zdGljby4gQSBkaWZlcmVuY2lhIGRlIGxhIG1heW9yw61hIGRlIGxvcyBwcm9ncmFtYXMgcXVlIHNlDQp1c2FuIGZyZWN1ZW50ZW1lbnRlLCBlc3RlIHNlIG1hbmVqYSBhIHRyYXbDqXMgZGUgdW5hIGNvbnNvbGEgZW4gZG9uZGUNCnNlIGluZGljYW4gb3JkZW5lcyBwb3IgbWVkaW8gZGUgY8OzZGlnb3MuDQpMYSBpbXBvcnRhbmNpYSBkZSBSIHJhZGljYSBlbiBxdWUgYWwgc2VyIMOpc3RlIHVuIHNvZnR3YXJlIGxpYnJlLCBzdQ0KZGVzY2FyZ2EgZXN0w6EgYWJpZXJ0YSBwYXJhIGN1YWxxdWllciB1c3VhcmlvIHF1ZSBjdWVudGUgY29uIGludGVybmV0Lg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4qX18zLiBVc29zIGRlIFJfXyo8L3NwYW4+DQoNCkVsIGxlbmd1YWplIGRlIHByb2dyYW1hY2nDs24gUiBlcyBtdXkgdXRpbGl6YWRvIGVuIGxhIGFjdHVhbGlkYWQgZW4NCmRpZmVyZW50ZXMgY2FtcG9zIGRlIGxhIGNpZW5jaWEsIGVudHJlIGxvcyBwcmluY2lwYWxlcyBwb2RlbW9zIGRpc3Rpbmd1aXINCmxvcyBzaWd1aWVudGVzOg0KDQoqKkVzdGFkw61zdGljYSoqOiBBcGxpY2FjacOzbiBkZSB0w6ljbmljYXMgZGUgbXVlc3RyZW8sIHTDqWNuaWNhcyBiw6FzaWNhcyB5DQphdmFuemFkYXMgZGUgZXN0YWTDrXN0aWNhIChwcnVlYmFzIGRlIGhpcMOzdGVzaXMsIGFuw6FsaXNpcyBkZSB2YXJpYW56YXMsDQpldGMuKS4NCg0KKipFY29ub21ldHLDrWEqKjogQXBsaWNhY2nDs24gZGUgdMOpY25pY2FzIGRlIGFuw6FsaXNpcyBwYXJhIGRhdG9zIGRlIGNvcnRlDQp0cmFuc3ZlcnNhbCwgZGUgc2VyaWVzIGRlIHRpZW1wbyB5IGRlIHBhbmVsLg0KDQoqKkNpZW5jaWFzIGJpb2zDs2dpY2FzKio6IEFuw6FsaXNpcyBkZSBtb2RlbG9zIGRlIGVsZWNjacOzbiBkaXNjcmV0YSBwYXJhIGxhDQplc3RpbWFjacOzbiBkZSBwcm9iYWJpbGlkYWRlcywgYW7DoWxpc2lzIGRlIHN1cGVydml2ZW5jaWEsIGVudHJlIG90cm9zLg0KDQojIDxzcGFuIHN0eWxlPSJjb2xvcjpibHVlIj4qX180LiBJbnN0YWxhY2nDs24gZGUgUiB5IFJzdHVkaW9fXyo8L3NwYW4+DQoNCkVuIGVzdGEgc2VjY2nDs24gc2UgdmVyYSBjb21vIGluc3RhbGFyIFIgeSBkZXNwdcOpcyBzdSBlZGl0b3IgZGUgY8OzZGlnbyBSc3R1ZGlvLiANCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPipfXzQuMS4gRGVzY2FyZ2EgZGUgUl9fKjwvc3Bhbj4NCg0KUGFyYSBkZXNjYXJncmEgUiBkYXIgY2xpY2sgZW4gZXN0ZSBbbGlua10oaHR0cHM6Ly9jcmFuLnItcHJvamVjdC5vcmcvYmluL3dpbmRvd3MvYmFzZS8pLg0KDQohW10oUi5wbmcpDQoNCiFbXShSMi5wbmcpDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPipfXzUuIFIgY29tbyBjYWxjdWxhZG9yYV9fKjwvc3Bhbj4NCg0KUiBwdWVkZSBzZXJ2aXJub3MgY29tbyBjYWxjdWxhZG9yYSwgeWEgcXVlIG9mcmVjZSBkaXZlcnNvcyB0aXBvcyBkZQ0KaGVycmFtaWVudGFzIHBhcmEgZWwgY8OhbGN1bG8gbnVtw6lyaWNvLg0KU2UgdXNhIGRlIGxhIHNpZ3VpZW50ZSBtYW5lcmE6DQoNCiFbXShyMy5wbmcpDQpDb21vIHNlIG9ic2VydmEgUiBlcyB1bmEgcG90ZW50ZSBoZXJyYW1pZW50YSBubyBzw7NsbyBwYXJhIGFuw6FsaXNpcw0KZXN0YWTDrXN0aWNvLCBzaW5vIHF1ZSB0YW1iacOpbiBwdWVkZSBzZXIgdXRpbGl6YWRvIHBhcmEgZWwgY8OhbGN1bG8NCm51bcOpcmljby4NCkEgY29udGludWFjacOzbiwgc2UgcHJlc2VudGFuIGxhcyBwcmluY2lwYWxlcyBmdW5jaW9uZXMgcXVlIFIgb2ZyZWNlIHBhcmENCmhhY2VyIG9wZXJhY2lvbmVzIG1hdGVtw6F0aWNhczoNCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPipfXzUuMS4gIE9wZXJhZG9yZXMgYXJpdG3DqXRpY29zX18qPC9zcGFuPg0KDQohW10oUjQucG5nKQ0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+Kl9fNS4yLiBPcGVyYWRvcmVzIGzDs2dpY29zIF9fKjwvc3Bhbj4NCg0KTG9zIG9wZXJhZG9yZXMgbMOzZ2ljb3Mgc2UgZGVzY3JpYmVuIGVuIGxhIHNpZ3VpZW50ZSB0YWJsYS4NCg0KIVtdKFI1LnBuZykNCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPipfXzUuMy4gT3BlcmFkb3JlcyBkZSBjb21wYXJhY2nDs24gX18qPC9zcGFuPg0KDQpMb3Mgb3BlcmFkb3JlcyBkZSBjb21wYXJhY2nDs24gc2UgbXVlc3RyYW4gZW4gbGEgc2lndWllbnRlIHRhYmxhLg0KDQohW10oUjYucG5nKQ0KDQpMb3Mgb3BlcmFkb3JlcyBkZSBjb21wYXJhY2nDs24gc29uIMO6dGlsZXMsIHByaW5jaXBhbG1lbnRlLCBlbiBsYXMNCnNlbnRlbmNpYXMgZGUgY29udHJvbDogaWYsIHdoaWxlLCBldGMsIGF1bnF1ZSBzaSBsYXMgdXNhbW9zIGVuIGxhIGNvbnNvbGEsIFINCm5vcyByZXNwb25kZXLDoSBjb21vIHNpIHNlIHRyYXRhc2UgZGUgdW5hIG9wZXJhY2nDs24gbMOzZ2ljYS4NCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPipfXzUuNC4gRnVuY2lvbmVzIG1hdGVtw6F0aWNhcyBfXyo8L3NwYW4+DQoNCkxhcyBmdW5jaW9uZXMgbWF0ZW3DoXRpY2FzIHByZWRlZmluaWRhcyBlbiBSLCBzZSBwdWVkZW4gZW5nbG9iYXIgZW4NCmNpbmNvIGNhdGVnb3LDrWFzOiBGdW5jaW9uZXMgZGUgU2lnbm8sIEZ1bmNpb25lcyBUcmlnb25vbcOpdHJpY2FzLA0KRnVuY2lvbmVzIEhpcGVyYsOzbGljYXMsIEZ1bmNpb25lcyBkZSBSZWRvbmRlbyB5IEZ1bmNpb25lcw0KRXhwb25lbmNpYWxlcy9Mb2dhcsOtdG1pY2FzLg0KDQohW10oUjcucG5nKQ0KIVtdKFI4LnBuZykNCiFbXShSOS5wbmcpDQohW10oUjEwLnBuZykNCiFbXShSMTEucG5nKQ0KIVtdKFIxMi5wbmcpDQoNCiMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPipfXzYuIEVzcGFjaW8geSBkaXJlY3RvcmlvIGRlIHRyYWJham8gX18qPC9zcGFuPg0KDQpFbCDigJx3b3Jrc3BhY2XigJ0gZXMgZWwgZXNwYWNpbyBkZSB0cmFiYWpvIGVuIHF1ZSBzZSBpbmNsdXllbiB0b2RvcyBsb3MNCm9iamV0b3MgZGVmaW5pZG9zIHBvciBlbCB1c3VhcmlvICh5YSB2ZXJlbW9zIHF1w6kgc29uIGVzdG9zIG9iamV0b3MsIHF1ZQ0KaW5jbHV5ZW4gdmFyaWFibGVzLCB2ZWN0b3JlcywgZGF0YWZyYW1lc+KApiksIHNlIGFsbWFjZW5hIGVuIG1lbW9yaWENCmludGVybWVkaWEgbWllbnRyYXMgdHJhYmFqYXMgY29uIFIuDQpDdWFuZG8gdGVybWluYSB1bmEgc2VzacOzbiBkZSBSIGVsIHByb3BpbyBSIHRlIHByZWd1bnRhIHNpIHF1aWVyZXMgZ3VhcmRhcg0KZWwg4oCcd29ya3NwYWNl4oCdIHBhcmEgdXNvcyBmdXR1cm9zLiBFc3RlIGVzcGFjaW8sIOKAnHdvcmtzcGFjZeKAnSwgc2UgcmVjYXJnYQ0KYWwgdm9sdmVyIGEgaW5pY2lhciBsYSBzZXNpw7NuLiBEaXJlY3RvcmlvIGRlIHRyYWJham8gbyDigJx3b3JraW5nIGRpcmVjdG9yeeKAnSBlcw0KZWwgZGlyZWN0b3JpbyBkb25kZSBwb3IgZGVmZWN0byDigJxsZWXigJ0gUi4gVGFtYmnDqW4gZXMgZG9uZGUgZ3VhcmRhcsOhIGVsDQp3b3Jrc3BhY2UgYWwgZmluYWxpemFyIGxhIHNlc2nDs24geSBkb25kZSBidXNjYXLDoSB1biB3b3Jrc3BhY2UgZ3VhcmRhZG8NCmFsIGluaWNpby4gU2kgc2UgcXVpZXJlIHF1ZSBSIGxlYSB1biBmaWNoZXJvIHF1ZSBubyBlc3TDqSBlbiDigJx3b3JraW5nDQpkaXJlY3RvcnnigJ0gaGF5IHF1ZSBlc3BlY2lmaWNhciBsYSBydXRhIGNvbXBsZXRhLg0KRXN0YXMgc29uIGxhcyBmdW5jaW9uZXMgYXNvY2lhZGFzIGFsIHdva3NwYWNlOg0KDQohW10oUjEzLnBuZykNCg0KIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+Kl9fNy4gUGFxdWV0ZXMgZW4gUiBfXyo8L3NwYW4+DQoNCkxvcyBwYXF1ZXRlcyBkZSBSIHBlcm1pdGVuIGluY3JlbWVudGFyIGxhIGNhcGFjaWRhZCBkZSBSOiBmdW5jaW9uZXMsDQppbXBvcnRhY2nDs24sIGV4cG9ydGFjacOzbiB5IG1hbmlwdWxhY2nDs24gZGUgZGF0b3MsIGdyw6FmaWNvcywgdMOpY25pY2FzDQplc3RhZMOtc3RpY2FzLCBjcmVhY2nDs24gZGUgaW5mb3JtZXMgZXRjLiBTb24gYmlibGlvdGVjYXMgZGUgY8OzZGlnbw0KZ3JhdHVpdGFzIGNyZWFkYXMgcG9yIGxhIGNvbXVuaWRhZCBkZSB1c3VhcmlvcyB5IGRpc3BvbmlibGVzIGVuIHZhcmlvcw0KcmVwb3NpdG9yaW9zIGNvbW8gQ29tcHJlaGVuc2l2ZSBSIEFyY2hpdmUgTmV0d29yayAoQ1JBTikgbw0KQmlvY29uZHVjdG9yLg0KDQojIyA8c3BhbiBzdHlsZT0iY29sb3I6Ymx1ZSI+Kl9fNy4xLiBJbnN0YWxhciBwYXF1ZXRlcyBfXyo8L3NwYW4+DQoNCkV4aXN0ZW4gYsOhc2ljYW1lbnRlIGRvcyBmb3JtYXMgcGFyYSBpbnN0YWxhciBwYXF1ZXRlcyBlbiBSIHVuYSBwdWVkZQ0Kc2VyIHllbmRvIGEgUGFxdWV0ZXMgPiBJbnN0YWxhciBwYXF1ZXRlKHMpLCBkb25kZSBzZSBkZWJlcsOhIHNlbGVjY2lvbmFyDQplbCDigJxDUkFOIG1pcnJvcuKAnS4NCg0KIVtdKFIxNC5wbmcpDQoNCkxhIG90cmEgZm9ybWEgZXMgaGFjaWVuZG8gdXNvIGRlbCBjb21hbmRvIMK0wrTCtGluc3RhbGwucGFja2FnZXMoKcK0wrTCtC4gQWwgaWd1YWwNCnF1ZSBsYSBmb3JtYSBhbnRlcmlvciB0YW1iacOpbiBzZSBkZWJlcsOhIGluaWNpYXIgZWwgQ1JBTiBNaXJyb3IgcGFyYQ0KaW5zdGFsYXIgZWwgcGFxdWV0ZS4NCg0KIyMgPHNwYW4gc3R5bGU9ImNvbG9yOmJsdWUiPipfXzcuMi4gQ2FyZ2FyIGxpYnJlcsOtYXMgX18qPC9zcGFuPg0KDQpVbmEgdmV6IGluc3RhbGFkbyBlbCBwYXF1ZXRlIHNlIGRlYmUgY2FyZ2FyIGVsIG1pc21vIGEgZmluIGRlIHF1ZSBzZQ0KcHVlZGFuIHVzYXIgbGFzIGZ1bmNpb25lcyByZWxhY2lvbmFkYXMgYSBkaWNoYSBsaWJyZXLDrWEuIFBhcmEgZXNvIHNlIGRlYmUNCnVzbyBkZWwgY29tYW5kbyBsaWJyYXJ5KOKAnOKAnSkuDQoNCiFbXShSMTUucG5nKQ0KDQpMb3Mgc2NyaXB0IHBhcmEgbGEgY2xhc2Ugc2UgZW5jdWVudHIgZW4gZXN0ZSBbbGlua10oaHR0cHM6Ly9kcml2ZS5nb29nbGUuY29tL2RyaXZlL2ZvbGRlcnMvMVpyYUFubDJNYTdNWThjTmJkZV82YnA1MWoxNTdlc3BFP3VzcD1zaGFyaW5nKQ==