diff --git a/.gitignore b/.gitignore
index f355734436c886675083f9db848b915653bbc43a..5dc8672711e2a0b98e0db4910017ab00dcfdacee 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@ build/
 .fetched_source
 list*
 test
+scripts/.resut.out
 logs/
 server/local_builds/
 /config
diff --git a/useful/stg312/.size.out b/useful/stg312/.size.out
index 04ddde3e3be9ef2536fc3d1adabf9e158555d969..b2a5411b4f58dd832e211adebe54449bc667b1ac 100644
--- a/useful/stg312/.size.out
+++ b/useful/stg312/.size.out
@@ -1 +1 @@
-6906932	heuhue.r1.tar.gz
+1725600	testando-sem-crc-2.r1.tar.gz
diff --git a/useful/stg312/.upid.out b/useful/stg312/.upid.out
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..c39cab2506cdae4bac0191b7f65efca588bed9d7 100644
--- a/useful/stg312/.upid.out
+++ b/useful/stg312/.upid.out
@@ -0,0 +1 @@
+{"uploadid":"QzD0kFOzZ5W22miyHCooFOsN85ypK4ZsjRp","status":"ok","code":"003","msg":"New upload succesful"}
\ No newline at end of file
diff --git a/useful/stg312/clone_stage4.sh b/useful/stg312/clone_stage4.sh
index b533badf6d6ce1f2cfdaf191c0da99f9caf839c6..237689e75003d5975e284e41e6ce10f0a5fb5a10 100755
--- a/useful/stg312/clone_stage4.sh
+++ b/useful/stg312/clone_stage4.sh
@@ -35,7 +35,7 @@ else
 					rm -rf  "$4"
 			fi
 			cd "$2"
-			/root/dnbd3/build/dnbd3-server --crc "$5"
+			#/root/dnbd3/build/dnbd3-server --crc "$5"
 			tar cvzf "$5".tar.gz user_data.info "$5" "$5".crc
 			split --verbose -n $7 "$5".tar.gz "$5".tar.gz.
 			du "$5".tar.gz > .size.out
diff --git a/useful/stg312/openslx_gui b/useful/stg312/openslx_gui
index 4b3a28a9778424b8988c0491d134cd3d04757dde..f85970bf66db33352eb881a20c42cd7551632f7a 100755
Binary files a/useful/stg312/openslx_gui and b/useful/stg312/openslx_gui differ
diff --git a/useful/stg312/upload-utils.c b/useful/stg312/upload-utils.c
index d80fb82438def4bdce876e0ff2fecd8ac1366e59..e9a0785cc2044ab3fcbdacfeed18c7d9329d04ff 100644
--- a/useful/stg312/upload-utils.c
+++ b/useful/stg312/upload-utils.c
@@ -387,7 +387,7 @@ void faz_upload_dummy(GtkWidget *w, gpointer p){
 //função de teste que faz upload da imagem teste.r1
 void faz_upload_teste(GtkWidget *w, gpointer p){
 
-    GtkWidget *loading;
+    GtkWidget *loading, *window_stg4_upload_confirm;
 	GtkBuilder *builder;
     int i;
     struct dados *data = malloc(sizeof(*data));
@@ -402,6 +402,7 @@ void faz_upload_teste(GtkWidget *w, gpointer p){
     builder = gtk_builder_new();
 	gtk_builder_add_from_file (builder, "openslx_gui_v01.glade", NULL);
     loading = GTK_WIDGET(gtk_builder_get_object(builder, "loading_screen"));
+    window_stg4_upload_confirm = GTK_WIDGET(gtk_builder_get_object(builder, "window_stg4_upload_confirm"));
 
     gtk_widget_show_all(loading);
     strcpy(argv[0], "./upload");
@@ -412,6 +413,7 @@ void faz_upload_teste(GtkWidget *w, gpointer p){
     g_spawn_async_with_pipes(NULL, argv,NULL,G_SPAWN_DO_NOT_REAP_CHILD,NULL,NULL, &pid, NULL, NULL, NULL, NULL);
     handler = sai_do_script;
     data->dado6 = loading;
+    data->dado1 = window_stg4_upload_confirm;
     data->pid = pid;
     g_child_watch_add(pid, handler, data);
     stg4_tela_confirmacao_upload(NULL, p);
diff --git a/useful/stg312/utils.c b/useful/stg312/utils.c
index 5a536f30f23b73e200414ee487078091f6468371..34370a58fbfe629989e3a7560efec5345b49a23d 100644
--- a/useful/stg312/utils.c
+++ b/useful/stg312/utils.c
@@ -18,481 +18,6 @@
 #include <sys/types.h>
 #include <signal.h>
 
-/*
-int checa_upload_antigo(){
-
-    FILE *upload_in_progress;
-    char *old_upload;
-    old_upload = malloc(255*sizeof(char));
-
-    upload_in_progress = fopen(".progress.out", "a+");
-    printf("Linha %d\n", __LINE__);
-    rewind(upload_in_progress);
-    fscanf(upload_in_progress, "%s", old_upload);
-    printf("Linha %d\n", __LINE__);
-
-    puts(old_upload);
-    if(!(strcmp(old_upload, "Upload"))){
-        return 1;
-    }
-    return 0;
-}
-
-int calcula_tempo_upload(){
-
-    FILE *velocidade_upload;
-    velocidade_upload = fopen(".speed.out", "r");
-
-    char *velocidade;
-    velocidade =  malloc(255*sizeof(char));
-    int velocidade_f;
-
-    fscanf(velocidade_upload, "%s", velocidade);
-    puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
-    puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
-    puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
-    puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
-    puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
-    puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
-    puts(velocidade);
-    fscanf(velocidade_upload, "%s", velocidade);
-    puts(velocidade);
-    puts("vai calcular");
-    velocidade_f = atoi(velocidade);
-    puts("calculou");
-    puts("chegou aqui");
-    return((1953)/velocidade_f*3); // *3 para levar em conta problemas de rede.
-}
-
-//Função que gera o arquivo de dados do usuario, tanto os que foram recebidos do banco quanto informaçõs de sistema. Esse arquivo
-// sera submetido junto à imagem quando o upload for feito.
-void gera_arquivo_dados_usuario(){
-
-    user_info dados_do_user;
-    pega_dados_do_usuario(&dados_do_user);
-    FILE *user_data_file;
-    user_data_file = fopen("user_data.info", "wr");
-
-    fputs("Nome do criador da imagem: ", user_data_file);
-    fputs(dados_do_user.name, user_data_file);
-    fputs("\nLogin do criador da imagem: ", user_data_file);
-    fputs(dados_do_user.login, user_data_file);
-    fputs("\nEmail do criador da imagem: ", user_data_file);
-    fputs(dados_do_user.email, user_data_file);
-    fputs("\nCidade do criador da imagem: ", user_data_file);
-    fputs(dados_do_user.city, user_data_file);
-
-    time_t timer;
-    time(&timer);
-    fputs("\nData da criação da imagem: ", user_data_file);
-    fputs(ctime(&timer), user_data_file);
-
-    fclose(user_data_file);
-    system("uname -a >> user_data.info");
-    system("lsb_release -a >> user_data.info");
-
-
-
-
-}
-
-//Função que checa o arquivo .login.out para verificar o suceso do login.
-int checa_sucesso_do_login(){
-
-    FILE *login;
-    char *user_data_str;
-    login = fopen(".login.out", "r");;
-    user_data_str = malloc(2550*sizeof(char));
-    fgets(user_data_str,2550*sizeof(char), login );
-
-    printf("%zu tamanho da string\n", strlen(user_data_str));
-    puts(user_data_str);
-
-    json_t *root;
-    json_error_t error;
-    root = json_loads(user_data_str,0, &error);
-    printf("Linha %d\n", __LINE__);
-
-    if(!root){
-        puts("erro ao carregar dados!");
-        //exit(0);
-    }
-    printf("Linha %d\n", __LINE__);
-
-    if(!json_is_object(root))
-    {
-        fprintf(stderr, "error: root is not an array\n");
-        json_decref(root);
-    }
-    printf("Linha %d\n", __LINE__);
-
-    json_t  *sha;
-    printf("Linha %d\n", __LINE__);
-
-    const char *message_text;
-    printf("Linha %d\n", __LINE__);
-
-    sha = json_object_get(root, "status");
-    printf("Linha %d\n", __LINE__);
-
-    if(json_is_string(sha))
-    {
-        printf("Linha %d\n", __LINE__);
-        message_text = json_string_value(sha);
-        printf("Linha %d\n", __LINE__);
-        puts(message_text);
-        printf("Linha %d\n", __LINE__);
-    }else{
-        printf("Linha %d\n", __LINE__);
-        puts("error, not string");
-        return 0;
-        printf("Linha %d\n", __LINE__);
-    }
-
-    if(!(strcmp("ok", message_text))){
-        printf("Linha %d\n", __LINE__);
-        puts(message_text);
-        return 1;
-    }
-
-    printf("Linha %d\n", __LINE__);
-    return 0;
-
-
-}
-
-//Função que utiliza o arquivo gerado pela chamada Curl com os dados do usuario e coloca eles na estrutura user_info *dados
-void pega_dados_do_usuario(user_info *dados){
-
-    FILE *user_data;
-    char *user_data_str;
-    user_data_str = malloc(2550*sizeof(char));
-    user_data = fopen(".data.out", "r");
-    fgets(user_data_str,2550*sizeof(char), user_data );
-    puts("User data: ");
-    puts(user_data_str);
-    puts("User data end ");
-
-    json_t *root;
-    json_error_t error;
-    root = json_loads(user_data_str,0, &error);
-    if(!root){
-        puts("erro ao carregar dados!");
-        //exit(0);
-    }
-
-    if(!json_is_object(root))
-    {
-        fprintf(stderr, "error: root is not an array\n");
-        json_decref(root);
-    }
-
-    json_t  *sha;
-    const char *message_text;
-    sha = json_object_get(root, "name");
-    if(json_is_string(sha))
-    {
-        message_text = json_string_value(sha);
-        puts(message_text);
-        strcpy(dados->name, message_text);
-    }else{
-        dados->name[0] = '\0';
-        puts("error, not string");
-    }
-
-    sha = json_object_get(root, "login");
-    if(json_is_string(sha))
-    {
-        message_text = json_string_value(sha);
-        puts(message_text);
-        strcpy(dados->login, message_text);
-
-    }else{
-        dados->login[0] = '\0';
-        puts("error, not string");
-    }
-
-    sha = json_object_get(root, "email");
-    if(json_is_string(sha))
-    {
-        message_text = json_string_value(sha);
-        puts(message_text);
-        strcpy(dados->email, message_text);
-
-    }else{
-        dados->email[0] = '\0';
-        puts("error, not string");
-    }
-
-    sha = json_object_get(root, "city");
-    if(json_is_string(sha))
-    {
-        message_text = json_string_value(sha);
-        puts(message_text);
-        strcpy(dados->city, message_text);
-
-    }else{
-        dados->city[0] = '\0';
-        puts("error, not string");
-    }
-}
-
-int checa_sucesso_get_info(){
-
-    FILE *user_data;
-    char *user_data_str;
-    user_data_str = malloc(2550*sizeof(char));
-    user_data = fopen(".data.out", "r");
-    fgets(user_data_str,2550*sizeof(char), user_data );
-    puts("User data: ");
-    puts(user_data_str);
-    puts("User data end ");
-
-    json_t *root;
-    json_error_t error;
-    root = json_loads(user_data_str,0, &error);
-    if(!root){
-        puts("erro ao carregar dados!");
-        //exit(0);
-    }
-
-    if(!json_is_object(root))
-    {
-        fprintf(stderr, "error: root is not an array\n");
-        json_decref(root);
-    }
-
-    json_t  *sha;
-    const char *message_text;
-    sha = json_object_get(root, "status");
-    if(json_is_string(sha))
-    {
-        message_text = json_string_value(sha);
-        puts(message_text);
-        if(!(strcmp(message_text, "ok"))){
-            return 1;
-        }
-        return 0;
-    }else{
-        puts("Erro Crítico. Não encontrou a mensagem de erro. Se esse erro persistir, informe o suporte técnico.");
-        return 0;
-    }
-
-
-}
-//Função que faz o Login do usuario no sistema. Utiliza a biblioteca Libcurlc para realizar as requisições http.
-// Guarda as saidas em arquivos para uso posterios. Guarda o cookie para uso posterios tbm
-int faz_login_dummy(GtkWidget *w, gpointer p){
-    dados *data_ant = p;
-    tela_principal(NULL, data_ant);
-    return 1;
-}
-
-int faz_login(GtkWidget *w, gpointer p){
-
-    dados *data_ant = p;
-    CURL *curl;
-    char *data = malloc(255*sizeof(char));
-    strcpy(data, "login=");
-    char * resp;
-    FILE *dados_do_user, *login_out;
-    resp = malloc(255*sizeof(char));
-    puts("teste");
-    puts(gtk_entry_get_text(GTK_ENTRY(data_ant->dado3)));
-    strcat(data, gtk_entry_get_text(GTK_ENTRY(data_ant->dado3)));
-    strcat(data, "&passwd=");
-    strcat(data, gtk_entry_get_text(GTK_ENTRY(data_ant->dado4)));
-    strcat(data, "&request=login");
-    puts(data);
-
-    dados_do_user = fopen(".data.out", "wr");
-    login_out = fopen(".login.out", "wr");
-
-
-    curl = curl_easy_init();
-    if(curl) {
-
-        curl_easy_setopt(curl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:44.0) Gecko/20100101 Firefox/44.0");
-        curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1 );
-        curl_easy_setopt(curl, CURLOPT_WRITEDATA, login_out);
-        curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookie");
-        curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookie");
-
-        curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
-        curl_easy_setopt(curl, CURLOPT_HEADER, 0);
-
-        //curl_easy_setopt(curl, CURLOPT_URL, "http://192.168.0.6/slx-admin/api.php?do=webservice");
-        curl_easy_setopt(curl, CURLOPT_URL, API_URL);
-        curl_easy_setopt(curl, CURLOPT_POST, 1);
-        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
-        puts("Fazendo login.");
-        curl_easy_perform(curl);
-
-        puts("teste 2");
-        fclose(login_out);
-        printf("Linha antes checagem %d\n", __LINE__);
-        if(checa_sucesso_do_login()){
-
-            printf("Linha %d\n", __LINE__);
-            char *data2="request=getinfo";
-            curl_easy_setopt(curl, CURLOPT_WRITEDATA, dados_do_user);
-            curl_easy_setopt(curl, CURLOPT_POST, 1);
-            curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
-            curl_easy_setopt(curl, CURLOPT_HEADER, 0);
-            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data2);
-            printf("Linha %d\n", __LINE__);
-            puts("pegando informação.");
-            curl_easy_perform(curl);
-            fclose(dados_do_user);
-            if(!(checa_sucesso_get_info())){ //nao conseguiu pegar informações
-
-                puts("Erro ao carregar informações do usuário. Por favor tente novamente. Se o erro persistir avisse o suporte técnico.");
-
-            }
-            //curl_easy_setopt(curl, CURLOPT_URL, "192.168.0.5/apply/upload");
-            //res = curl_easy_perform(curl);
-
-            if(curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &resp) == CURLE_OK)
-                puts(resp);
-            else
-                puts("Nao pegou dados");
-            curl_easy_cleanup(curl);
-            puts("teste");
-            if(checa_upload_antigo()){
-                tela_upload_antigo(NULL, data_ant);
-            }else{
-                if(data_ant->control == 0){
-                    tela_principal(NULL, data_ant);
-                }
-            }
-            return 1;
-        }
-        printf("Linha %d\n", __LINE__);
-    }
-    printf("Linha %d\n", __LINE__);
-    gtk_label_set_text(GTK_LABEL(data_ant->dado5), "Login nao encontrado!");
-    printf("Linha %d\n", __LINE__);
-    return 0;
-}
-
-void pega_upload_id(char *id){
-
-    FILE *user_data;
-    char *user_data_str;
-    user_data_str = malloc(2550*sizeof(char));
-    user_data = fopen(".upid.out", "r");
-    fgets(user_data_str,2550*sizeof(char), user_data );
-    puts("User data: ");
-    puts(user_data_str);
-    puts("User data end ");
-
-    json_t *root;
-    json_error_t error;
-    root = json_loads(user_data_str,0, &error);
-    if(!root){
-        puts("erro ao carregar dados!");
-        //exit(0);
-    }
-
-    if(!json_is_object(root))
-    {
-        fprintf(stderr, "error: root is not an array\n");
-        json_decref(root);
-    }
-
-    json_t  *sha;
-    const char *message_text;
-    sha = json_object_get(root, "uploadid");
-    if(json_is_string(sha))
-    {
-        message_text = json_string_value(sha);
-        puts(message_text);
-    }else{
-        puts("error, not string");
-    }
-
-    strcpy(id, message_text);
-}
-
-//Função que faz o upload da imagem + dados para a api do site. Atualmente faz upload só de UM arquivo
-void faz_upload_dummy(GtkWidget *w, gpointer p){
-    stg4_tela_confirmacao_upload(NULL, p);
-}//Função de teste dummy
-
-//função de teste que faz upload da imagem teste.r1
-void faz_upload_teste(GtkWidget *w, gpointer p){
-
-    GtkWidget *loading;
-	GtkBuilder *builder;
-    int i;
-    struct dados *data = malloc(sizeof(*data));
-    GPid pid;
-	GChildWatchFunc handler;
-	char **argv;
-	argv = malloc(10*sizeof(char*));
-	for (i=0; i < 10; i++){
-		argv[i] = malloc(255*sizeof(char));
-	}
-
-    builder = gtk_builder_new();
-	gtk_builder_add_from_file (builder, "openslx_gui_v01.glade", NULL);
-    loading = GTK_WIDGET(gtk_builder_get_object(builder, "loading_screen"));
-
-    gtk_widget_show_all(loading);
-    strcpy(argv[0], "./upload");
-    strcpy(argv[1], "/home/ent13/Desktop/pasta-teste");
-    strcpy(argv[2], "teste");
-    strcpy(argv[3], ".r1");
-    argv[4] = NULL;
-    g_spawn_async_with_pipes(NULL, argv,NULL,G_SPAWN_DO_NOT_REAP_CHILD,NULL,NULL, &pid, NULL, NULL, NULL, NULL);
-    handler = sai_do_script;
-    data->dado6 = loading;
-    data->pid = pid;
-    g_child_watch_add(pid, handler, data);
-    stg4_tela_confirmacao_upload(NULL, p);
-
-}
-
-void faz_upload(GtkWidget *w, gpointer p){
-
-    GtkWidget *loading;
-	dados *data_ant = p;
-	GtkBuilder *builder;
-    struct dados *data = malloc(sizeof(*data));
-    int i;
-    GPid pid;
-	GChildWatchFunc handler;
-    char **argv;
-	argv = malloc(10*sizeof(char*));
-	for (i=0; i < 10; i++){
-		argv[i] = malloc(255*sizeof(char));
-	}
-
-    builder = gtk_builder_new();
-	gtk_builder_add_from_file (builder, "openslx_gui_v01.glade", NULL);
-    loading = GTK_WIDGET(gtk_builder_get_object(builder, "loading_screen"));
-
-    gtk_widget_show_all(loading);
-    strcpy(argv[0], "./upload");
-    strcpy(argv[1], gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(data_ant->dado4)));
-    strcpy(argv[2], gtk_entry_get_text(GTK_ENTRY(data_ant->dado3)));
-    strcpy(argv[3], ".r1");
-    argv[4] = NULL;
-    g_spawn_async_with_pipes(NULL, argv,NULL,G_SPAWN_DO_NOT_REAP_CHILD,NULL,NULL, &pid, NULL, NULL, NULL, NULL);
-    handler = sai_do_script;
-    data->dado6 = loading;
-    data->pid = pid;
-    g_child_watch_add(pid, handler, data);
-    stg4_tela_confirmacao_upload(NULL, p);
-
-}
-*/
 //FUnção que acha o caminho para o tm-scripts, utilizada no arquivo clone_stage4.sh
 void acha_tm_scripts(char *path){
 
@@ -773,6 +298,7 @@ void sai_do_script(GPid pid, gint status, gpointer p){
 	loading = data_ant->dado6;
 	pid = data_ant->pid;
 	gtk_widget_hide(loading);
+	//gtk_widget_show(window);
 	checa_sucesso();
 	g_spawn_close_pid(pid);