Importar arquivos comma separated values (extensão .csv)
\(>\) dados1 <- read.csv(file.choose(), header=TRUE)
Próprio para quando queremos escolher um arquivo .csv de uma lista de arquivos, navegando até o diretório onde está este arquivo. Arquivos com linha de cabeçalho devem ter o argumento da função header como TRUE ou T. Caso contrário, FALSE ou F.
\(>\) dados2 <- read.table(file.choose(), header=T, sep=“,”)
Nesta última opção é usado um comando mais genérico. Neste caso é importante avisar que os dados estão separados por vírgula.
Vale lembrar que há duas maneiras rápidas de obtermos informaçoes sobre um determinado comando do R. Tomando como exemplo o comando read.table, a primeira opção é
\(>\) help(read.table)
O help pode também ser acessado diretamente através da aba help. Outra opção é
\(>\) ?(read.table)
enquanto a terceira opção é clicar na aba “help”.
O endereço do arquivo poderia ser informado imediatamente através do comando
\(>\) dados2 <- read.table(/users/SouEu/MiniManuais/ArquivoDados.csv, header=T, sep=“,”)
Importar arquivos tab separated (extensão .txt)
\(>\) dados3 <- read.delim(file.choose(), header=T)
\(>\) dados4 <- read.table(file.choose(), header=T, sep=“\(\backslash\)t”)}
Na opção acima é necessário indicar que os dados estão separados por um tab.
Importar arquivos Excel (extensão .xlsx ou .xls)
Para isto usamos um pacote que já está instalado no R. Basta ir no Files/Import Dataset/From Excel ou ir na aba Environment e depois na opção Import Dataset escolhendo a opção From Excel. Além de um preview dos dados, aparecerá a opção de manter ou renomear o arquivo de dados, escolher uma worksheet da planilha Excel, informar o range da planilha onde está o banco de dados, limitar o número de linhas a serem importadas, definir o número de linhas iniciais que devem ser desconsideradas, informar se a planilha tem ou não cabeçalho, redefinir o tipo de cada variável, informar códigos usados para missing values, escolher a opção de pular determinadas colunas da base de dados. A medida que opções são feitas, é possivel visualizar ou mesmo copiar a linha de comando relativa aquele conjunto de opções. Pode ser útil copiar e colar o código para que não seja necessário usar a caixa de diálogo em uma próxima vez que aquela base de dados for analisada.
Definir o diretório de trabalho
Criar novos diretórios para cada novo trabalho é uma boa prática.
\(>\) getwd()
Informa qual o diretório que você está salvando seu trabalho, enquanto
\(>\) setwd(“/users/SouEu/MiniManuais”)
ou apenas
\(>\) setwd(“~/MiniManuais”)
quando você já estiver no caminho certo e quer apenas especificar um sub diretório. Quando estamos trabalhando com mais de um diretório simultaneamente pode ser interessante fazer
\(>\) projeto1 <- /users/SouEu/MiniManuais
e
\(>\) setwd(projeto1)
quando necessário. Outra opção é ir no menu do R e usar a opção Session/Set Working Diretorio
Remover arquivos do workspace
Algumas vezes é necessário remover dados do workpace. Isto pode ser feito através do comando
\(>\) rm(dados4)
Analise primária de dados que foram importados
Podemos querer inicialmente apenas saber o tamanho do conjunto de dados. Para isto podemos conhecer o número de linhas de de colunas do conjunto de dados usando o comando
\(>\) dim(dados1)
Para visualizar uma pequena porção dos dados (na realidade as primeiras seis linhas), usamos
\(>\) head(dados1)
Ou ainda as últimas seis linhas através do comando
\(>\) tail(dados1)
Outra opção de visualização sumária é atraves de
\(>\) str(dados1)
Para ver uma parte intermediaria do arquivo (por exemplo, todas as colunas entre as linhas 6 e 9), apresentamos duas opções
\(>\) dados1[c(6,7,8,9), ]
ou ainda
\(>\) dados1[6:9, ]
Poderiamos checar os nomes das variáveis dentro do conjunto de dados através do comando
\(>\) names(dados1)
Qualquer análise inicial precisaria extrair os dados de interesse do conjunto de dados. No exemplo a seguir queremos conhecer a média da variável \(var1\)
\(>\) mean(dados1$var1)
Para evitar precisar dar o nome e o sobrenome da variavel, separados por um cifrão (dados1$var1) a opção seria anexar (attach) o conjunto de dados ao workspace
\(>\) attach(dados1)
Para reverter a operação devemos usar o comando
\(>\) detach(dados1)
Podemos tambem verificar a categoria de uma variável através de
\(>\) classe(var1)
Caso a variável var1 seja categórica (ou “factor”), podemos checar seus níveis
\(>\) levels(var1)
Uma rápida análise descritiva pode ser obtida por
\(>\) summary(dados1)
Uma situação comum é ter uma coluna com dados categóricos cujas categorias foram assinaladas com números. Precisamos dizer ao R que não se trata de uma variável numérica e sim categórica. Isto pode ser feito através de
\(>\) var1 <- as.factor(var1)
Exportar dados
O comando mais flexivel para a necessidade de importar dados é o
\(>\) write.table(DadosParaExportar, file=“ArquivoDadosExportados.csv”, sep=“,”)
No exemplo acima o primeiro parâmetro é o nome do objeto com os dados a serem exportados, o segundo parâmetro é o nome do novo arquivo onde os dados serão gravados e o terceiro parâmetro é o separador dos dados, no caso do exempo uma virgula, gerando um arquivo .csv. É possível salvar o arquivo em um diretório diferente do diretório de trabalho indicando o caminho no parâmetro file=“/users/SouEu/MiniManuais/ArquivoDadosExportados.csv”.
Outras opções interessantes de serem mecionadas são os arquivos separados pela tecla \(tab\) ou por espaços. No primeiro caso é padrao salvar com extensão “tsv” (ou “txt”) e colocar o parâmetro sep=“\(\backslash\)t”. No segundo caso o padrão é salvar com extensão e colocar o parâmetro sep=" " com um espaço entre as aspas e extensão “txt”.
LS0tDQp0aXRsZTogIkltcG9ydGFyL0V4cG9ydGFyIGRhZG9zIGNvbSBvIFIiDQpzdWJ0aXRsZTogIklNRS1VU1AgLSBNQUUzOTkgLSAgcHJvZi4gRsOhYmlvIE1hY2hhZG8iDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCiMjIEltcG9ydGFyIGFycXVpdm9zIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMgKGV4dGVuc8OjbyAuY3N2KQ0KDQokPiQgZGFkb3MxIDwtIHJlYWQuY3N2KGZpbGUuY2hvb3NlKCksIGhlYWRlcj1UUlVFKQ0KDQpQcsOzcHJpbyBwYXJhIHF1YW5kbyBxdWVyZW1vcyBlc2NvbGhlciB1bSBhcnF1aXZvIC5jc3YgZGUgdW1hIGxpc3RhIGRlIGFycXVpdm9zLCBuYXZlZ2FuZG8gYXTDqSBvIGRpcmV0w7NyaW8gb25kZSBlc3TDoSBlc3RlIGFycXVpdm8uIEFycXVpdm9zIGNvbSBsaW5oYSBkZSBjYWJlw6dhbGhvIGRldmVtIHRlciBvIGFyZ3VtZW50byBkYSBmdW7Dp8OjbyBoZWFkZXIgY29tbyBUUlVFIG91IFQuIENhc28gY29udHLDoXJpbywgRkFMU0Ugb3UgRi4NCg0KJD4kIGRhZG9zMiA8LSByZWFkLnRhYmxlKGZpbGUuY2hvb3NlKCksIGhlYWRlcj1ULCBzZXA9IiwiKQ0KDQpOZXN0YSDDumx0aW1hIG9ww6fDo28gw6kgdXNhZG8gdW0gY29tYW5kbyBtYWlzIGdlbsOpcmljby4gTmVzdGUgY2FzbyDDqSBpbXBvcnRhbnRlIGF2aXNhciBxdWUgb3MgZGFkb3MgZXN0w6NvIHNlcGFyYWRvcyBwb3IgdsOtcmd1bGEuDQoNClZhbGUgbGVtYnJhciBxdWUgaMOhIGR1YXMgbWFuZWlyYXMgcsOhcGlkYXMgZGUgb2J0ZXJtb3MgaW5mb3JtYcOnb2VzIHNvYnJlIHVtIGRldGVybWluYWRvIGNvbWFuZG8gZG8gUi4gVG9tYW5kbyBjb21vIGV4ZW1wbG8gbyBjb21hbmRvIHJlYWQudGFibGUsIGEgcHJpbWVpcmEgb3DDp8OjbyDDqQ0KDQokPiQgaGVscChyZWFkLnRhYmxlKQ0KDQpPIGhlbHAgcG9kZSB0YW1iw6ltIHNlciBhY2Vzc2FkbyBkaXJldGFtZW50ZSBhdHJhdsOpcyBkYSBhYmEgaGVscC4gT3V0cmEgb3DDp8OjbyDDqQ0KDQokPiQgPyhyZWFkLnRhYmxlKQ0KDQplbnF1YW50byBhIHRlcmNlaXJhIG9ww6fDo28gw6kgY2xpY2FyIG5hIGFiYSAiaGVscCIuDQoNCk8gZW5kZXJlw6dvIGRvIGFycXVpdm8gcG9kZXJpYSBzZXIgaW5mb3JtYWRvIGltZWRpYXRhbWVudGUgYXRyYXbDqXMgZG8gY29tYW5kbw0KDQokPiQgZGFkb3MyIDwtIHJlYWQudGFibGUoL3VzZXJzL1NvdUV1L01pbmlNYW51YWlzL0FycXVpdm9EYWRvcy5jc3YsIGhlYWRlcj1ULCBzZXA9IiwiKQ0KDQojIyBJbXBvcnRhciBhcnF1aXZvcyB0YWIgc2VwYXJhdGVkIChleHRlbnPDo28gLnR4dCkNCg0KJD4kIGRhZG9zMyA8LSByZWFkLmRlbGltKGZpbGUuY2hvb3NlKCksIGhlYWRlcj1UKQ0KDQokPiQgZGFkb3M0IDwtIHJlYWQudGFibGUoZmlsZS5jaG9vc2UoKSwgaGVhZGVyPVQsIHNlcD0iJFxiYWNrc2xhc2gkdCIpfQ0KDQpOYSBvcMOnw6NvIGFjaW1hIMOpIG5lY2Vzc8OhcmlvIGluZGljYXIgcXVlIG9zIGRhZG9zIGVzdMOjbyBzZXBhcmFkb3MgcG9yIHVtIHRhYi4NCg0KIyMgSW1wb3J0YXIgYXJxdWl2b3MgRXhjZWwgKGV4dGVuc8OjbyAueGxzeCBvdSAueGxzKQ0KDQpQYXJhIGlzdG8gdXNhbW9zIHVtIHBhY290ZSBxdWUgasOhIGVzdMOhIGluc3RhbGFkbyBubyBSLiBCYXN0YSBpciBubw0KRmlsZXMvSW1wb3J0IERhdGFzZXQvRnJvbSBFeGNlbCBvdSBpciBuYSBhYmEgRW52aXJvbm1lbnQgZSBkZXBvaXMgbmEgb3DDp8OjbyBJbXBvcnQgRGF0YXNldCBlc2NvbGhlbmRvIGEgb3DDp8OjbyBGcm9tIEV4Y2VsLiBBbMOpbSBkZSB1bSBwcmV2aWV3IGRvcyBkYWRvcywgYXBhcmVjZXLDoSBhIG9ww6fDo28gZGUgbWFudGVyIG91IHJlbm9tZWFyIG8gYXJxdWl2byBkZSBkYWRvcywgZXNjb2xoZXIgdW1hIHdvcmtzaGVldCBkYSBwbGFuaWxoYSBFeGNlbCwgaW5mb3JtYXIgbyByYW5nZSBkYSBwbGFuaWxoYSBvbmRlIGVzdMOhIG8gYmFuY28gZGUgZGFkb3MsIGxpbWl0YXIgbyBuw7ptZXJvIGRlIGxpbmhhcyBhIHNlcmVtIGltcG9ydGFkYXMsIGRlZmluaXIgbyBuw7ptZXJvIGRlIGxpbmhhcyBpbmljaWFpcyBxdWUgZGV2ZW0gc2VyIGRlc2NvbnNpZGVyYWRhcywgaW5mb3JtYXIgc2UgYSBwbGFuaWxoYSB0ZW0gb3UgbsOjbyBjYWJlw6dhbGhvLCByZWRlZmluaXIgbyB0aXBvIGRlIGNhZGEgdmFyacOhdmVsLCBpbmZvcm1hciBjw7NkaWdvcyB1c2Fkb3MgcGFyYSBtaXNzaW5nIHZhbHVlcywgZXNjb2xoZXIgYSBvcMOnw6NvIGRlIHB1bGFyIGRldGVybWluYWRhcyBjb2x1bmFzIGRhIGJhc2UgZGUgZGFkb3MuIEEgbWVkaWRhIHF1ZSBvcMOnw7VlcyBzw6NvIGZlaXRhcywgw6kgcG9zc2l2ZWwgdmlzdWFsaXphciBvdSBtZXNtbyBjb3BpYXIgYSBsaW5oYSBkZSBjb21hbmRvIHJlbGF0aXZhIGFxdWVsZSBjb25qdW50byBkZSBvcMOnw7Vlcy4gUG9kZSBzZXIgw7p0aWwgY29waWFyIGUgY29sYXIgbyBjw7NkaWdvIHBhcmEgcXVlIG7Do28gc2VqYSBuZWNlc3PDoXJpbyB1c2FyIGEgY2FpeGEgZGUgZGnDoWxvZ28gZW0gdW1hIHByw7N4aW1hIHZleiBxdWUgYXF1ZWxhIGJhc2UgZGUgZGFkb3MgZm9yIGFuYWxpc2FkYS4NCg0KIyMgRGVmaW5pciBvIGRpcmV0w7NyaW8gZGUgdHJhYmFsaG8NCg0KQ3JpYXIgbm92b3MgZGlyZXTDs3Jpb3MgcGFyYSBjYWRhIG5vdm8gdHJhYmFsaG8gw6kgdW1hIGJvYSBwcsOhdGljYS4NCg0KJD4kIGdldHdkKCkNCg0KSW5mb3JtYSBxdWFsIG8gZGlyZXTDs3JpbyBxdWUgdm9jw6ogZXN0w6Egc2FsdmFuZG8gc2V1IHRyYWJhbGhvLCBlbnF1YW50bw0KDQokPiQgc2V0d2QoIi91c2Vycy9Tb3VFdS9NaW5pTWFudWFpcyIpDQoNCm91IGFwZW5hcw0KDQokPiQgc2V0d2QoIn4vTWluaU1hbnVhaXMiKQ0KDQpxdWFuZG8gdm9jw6ogasOhIGVzdGl2ZXIgbm8gY2FtaW5obyBjZXJ0byBlIHF1ZXIgYXBlbmFzIGVzcGVjaWZpY2FyIHVtIHN1YiBkaXJldMOzcmlvLiBRdWFuZG8gZXN0YW1vcyB0cmFiYWxoYW5kbyBjb20gbWFpcyBkZSB1bSBkaXJldMOzcmlvIHNpbXVsdGFuZWFtZW50ZSBwb2RlIHNlciBpbnRlcmVzc2FudGUgZmF6ZXINCg0KJD4kIHByb2pldG8xIDwtIC91c2Vycy9Tb3VFdS9NaW5pTWFudWFpcw0KDQplDQoNCiQ+JCBzZXR3ZChwcm9qZXRvMSkNCg0KcXVhbmRvIG5lY2Vzc8OhcmlvLiBPdXRyYSBvcMOnw6NvIMOpIGlyIG5vIG1lbnUgZG8gUiBlIHVzYXIgYSBvcMOnw6NvIFNlc3Npb24vU2V0IFdvcmtpbmcgRGlyZXRvcmlvDQoNCg0KDQojIyBSZW1vdmVyIGFycXVpdm9zIGRvIHdvcmtzcGFjZQ0KDQpBbGd1bWFzIHZlemVzIMOpIG5lY2Vzc8OhcmlvIHJlbW92ZXIgZGFkb3MgZG8gd29ya3BhY2UuIElzdG8gcG9kZSBzZXIgZmVpdG8gYXRyYXbDqXMgZG8gY29tYW5kbw0KDQokPiQgcm0oZGFkb3M0KQ0KDQojIyBBbmFsaXNlIHByaW3DoXJpYSBkZSBkYWRvcyBxdWUgZm9yYW0gaW1wb3J0YWRvcw0KDQpQb2RlbW9zIHF1ZXJlciBpbmljaWFsbWVudGUgYXBlbmFzIHNhYmVyIG8gdGFtYW5obyBkbyBjb25qdW50byBkZSBkYWRvcy4gUGFyYSBpc3RvIHBvZGVtb3MgY29uaGVjZXIgbyBuw7ptZXJvIGRlIGxpbmhhcyBkZSBkZSBjb2x1bmFzIGRvIGNvbmp1bnRvIGRlIGRhZG9zIHVzYW5kbyBvIGNvbWFuZG8NCg0KJD4kIGRpbShkYWRvczEpDQoNClBhcmEgdmlzdWFsaXphciB1bWEgcGVxdWVuYSBwb3LDp8OjbyBkb3MgZGFkb3MgKG5hIHJlYWxpZGFkZSBhcyBwcmltZWlyYXMgDQpzZWlzIGxpbmhhcyksIHVzYW1vcw0KDQokPiQgaGVhZChkYWRvczEpDQoNCk91IGFpbmRhIGFzIMO6bHRpbWFzIHNlaXMgbGluaGFzIGF0cmF2w6lzIGRvIGNvbWFuZG8NCg0KJD4kIHRhaWwoZGFkb3MxKQ0KDQpPdXRyYSBvcMOnw6NvIGRlIHZpc3VhbGl6YcOnw6NvIHN1bcOhcmlhIMOpIGF0cmF2ZXMgZGUNCg0KJD4kIHN0cihkYWRvczEpDQoNClBhcmEgdmVyIHVtYSBwYXJ0ZSBpbnRlcm1lZGlhcmlhIGRvIGFycXVpdm8gKHBvciBleGVtcGxvLCB0b2RhcyBhcyBjb2x1bmFzIGVudHJlIGFzIGxpbmhhcyA2IGUgOSksIGFwcmVzZW50YW1vcyBkdWFzIG9ww6fDtWVzDQoNCiQ+JCBkYWRvczFbYyg2LDcsOCw5KSwgXQ0KDQpvdSBhaW5kYQ0KDQokPiQgZGFkb3MxWzY6OSwgXQ0KDQpQb2RlcmlhbW9zIGNoZWNhciBvcyBub21lcyBkYXMgdmFyacOhdmVpcyBkZW50cm8gZG8gY29uanVudG8gZGUgZGFkb3MgYXRyYXbDqXMgZG8gY29tYW5kbw0KDQokPiQgbmFtZXMoZGFkb3MxKQ0KDQpRdWFscXVlciBhbsOhbGlzZSBpbmljaWFsIHByZWNpc2FyaWEgZXh0cmFpciBvcyBkYWRvcyBkZSBpbnRlcmVzc2UgZG8gY29uanVudG8gZGUgZGFkb3MuIE5vIGV4ZW1wbG8gYSBzZWd1aXIgcXVlcmVtb3MgY29uaGVjZXIgYSBtw6lkaWEgZGEgdmFyacOhdmVsICR2YXIxJA0KDQokPiQgbWVhbihkYWRvczEkdmFyMSkNCg0KUGFyYSBldml0YXIgcHJlY2lzYXIgZGFyIG8gbm9tZSBlIG8gc29icmVub21lIGRhIHZhcmlhdmVsLCBzZXBhcmFkb3MgcG9yIHVtIGNpZnLDo28gKGRhZG9zMSR2YXIxKSBhIG9ww6fDo28gc2VyaWEgYW5leGFyIChhdHRhY2gpIG8gY29uanVudG8gZGUgZGFkb3MgYW8gd29ya3NwYWNlDQoNCiQ+JCBhdHRhY2goZGFkb3MxKQ0KDQpQYXJhIHJldmVydGVyIGEgb3BlcmHDp8OjbyBkZXZlbW9zIHVzYXIgbyBjb21hbmRvDQoNCiQ+JCBkZXRhY2goZGFkb3MxKQ0KDQpQb2RlbW9zIHRhbWJlbSB2ZXJpZmljYXIgYSBjYXRlZ29yaWEgZGUgdW1hIHZhcmnDoXZlbCBhdHJhdsOpcyBkZQ0KDQokPiQgY2xhc3NlKHZhcjEpDQoNCkNhc28gYSB2YXJpw6F2ZWwgdmFyMSBzZWphIGNhdGVnw7NyaWNhIChvdSAiZmFjdG9yIiksIHBvZGVtb3MgY2hlY2FyIHNldXMgbsOtdmVpcw0KDQokPiQgbGV2ZWxzKHZhcjEpDQoNClVtYSByw6FwaWRhIGFuw6FsaXNlIGRlc2NyaXRpdmEgcG9kZSBzZXIgb2J0aWRhIHBvcg0KDQokPiQgc3VtbWFyeShkYWRvczEpDQoNClVtYSBzaXR1YcOnw6NvIGNvbXVtIMOpIHRlciB1bWEgY29sdW5hIGNvbSBkYWRvcyBjYXRlZ8Ozcmljb3MgY3VqYXMgY2F0ZWdvcmlhcyBmb3JhbSBhc3NpbmFsYWRhcyBjb20gbsO6bWVyb3MuIFByZWNpc2Ftb3MgZGl6ZXIgYW8gUiBxdWUgbsOjbyBzZSB0cmF0YSBkZSB1bWEgdmFyacOhdmVsIG51bcOpcmljYSBlIHNpbSBjYXRlZ8OzcmljYS4gSXN0byBwb2RlIHNlciBmZWl0byBhdHJhdsOpcyBkZQ0KDQokPiQgdmFyMSA8LSBhcy5mYWN0b3IodmFyMSkNCg0KDQojIyBFeHBvcnRhciBkYWRvcw0KDQpPIGNvbWFuZG8gbWFpcyBmbGV4aXZlbCBwYXJhIGEgbmVjZXNzaWRhZGUgZGUgaW1wb3J0YXIgZGFkb3Mgw6kgbw0KDQokPiQgd3JpdGUudGFibGUoRGFkb3NQYXJhRXhwb3J0YXIsIGZpbGU9IkFycXVpdm9EYWRvc0V4cG9ydGFkb3MuY3N2Iiwgc2VwPSIsIikNCg0KTm8gZXhlbXBsbyBhY2ltYSBvIHByaW1laXJvIHBhcsOibWV0cm8gw6kgbyBub21lIGRvIG9iamV0byBjb20gb3MgZGFkb3MgYSBzZXJlbSBleHBvcnRhZG9zLCBvIHNlZ3VuZG8gcGFyw6JtZXRybyDDqSBvIG5vbWUgZG8gbm92byBhcnF1aXZvIG9uZGUgb3MgZGFkb3Mgc2Vyw6NvIGdyYXZhZG9zIGUgbyB0ZXJjZWlybyBwYXLDom1ldHJvIMOpIG8gc2VwYXJhZG9yIGRvcyBkYWRvcywgbm8gY2FzbyBkbyBleGVtcG8gdW1hIHZpcmd1bGEsIGdlcmFuZG8gdW0gYXJxdWl2byAuY3N2LiDDiSBwb3Nzw612ZWwgc2FsdmFyIG8gYXJxdWl2byBlbSB1bSBkaXJldMOzcmlvIGRpZmVyZW50ZSBkbyBkaXJldMOzcmlvIGRlIHRyYWJhbGhvIGluZGljYW5kbyBvIGNhbWluaG8gbm8gcGFyw6JtZXRybyBmaWxlPSIvdXNlcnMvU291RXUvTWluaU1hbnVhaXMvQXJxdWl2b0RhZG9zRXhwb3J0YWRvcy5jc3YiLg0KDQpPdXRyYXMgb3DDp8O1ZXMgaW50ZXJlc3NhbnRlcyBkZSBzZXJlbSBtZWNpb25hZGFzIHPDo28gb3MgYXJxdWl2b3Mgc2VwYXJhZG9zIHBlbGEgdGVjbGEgJHRhYiQgb3UgcG9yIGVzcGHDp29zLiBObyBwcmltZWlybyBjYXNvIMOpIHBhZHJhbyBzYWx2YXIgY29tIGV4dGVuc8OjbyAidHN2IiAob3UgInR4dCIpIGUgY29sb2NhciBvIHBhcsOibWV0cm8gc2VwPSIkXGJhY2tzbGFzaCR0Ii4gTm8gc2VndW5kbyBjYXNvIG8gcGFkcsOjbyDDqSBzYWx2YXIgY29tIGV4dGVuc8OjbyBlIGNvbG9jYXIgbyBwYXLDom1ldHJvIHNlcD0iICIgY29tIHVtIGVzcGHDp28gZW50cmUgYXMgYXNwYXMgZSBleHRlbnPDo28gInR4dCIu