diff --git a/main.cpp b/main.cpp
index c72a2a4..0f543b2 100644
--- a/main.cpp
+++ b/main.cpp
@@ -4,6 +4,8 @@
 #include "text.h"
 #include "svg.h"
 #include <curl/curl.h>
+#include <sstream>
+#include <string>
 
 using namespace std;
 
@@ -13,6 +15,13 @@ struct Input
     size_t bin_count{};
 };
 
+size_t write_data(void* items, size_t item_size, size_t item_count, void* ctx) {
+     size_t data_size = item_size * item_count;
+     stringstream* buffer = reinterpret_cast<stringstream*>(ctx);
+     buffer->write(reinterpret_cast<const char*>(items), data_size);
+    return data_size;
+}
+
 Input
 input_data(istream& in, bool prompt)
 {
@@ -41,29 +50,43 @@ input_data(istream& in, bool prompt)
     return cin;
 }
 
-int main(int argc, char* argv[])
-{
-    curl_global_init(CURL_GLOBAL_ALL);
-    CURL *curl = curl_easy_init();
-    if(curl) {
+Input
+download(const string& address) {
+    stringstream buffer;
+
+    CURL* curl = curl_easy_init();
+    if(curl){
         CURLcode res;
-        curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
+        curl_easy_setopt(curl, CURLOPT_URL, address.c_str());
+        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
+        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
+
         res = curl_easy_perform(curl);
-        curl_easy_cleanup(curl);
 
-        if (res != 0){
-        cerr << curl_easy_strerror(res);
-        exit(1);
+        if(!res) {
+            curl_off_t ul;
+            res = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD_T, &ul);
+            if(!res) {
+                cerr<<"Uploaded bytes" << ul << endl;
+            }
         }
-    curl_easy_cleanup(curl);
 
+        if (res != 0){
+            cerr << curl_easy_strerror(res);
+            exit(1);
+        }
+        curl_easy_cleanup(curl);
     }
+    return input_data(buffer, false);
+}
 
+int main(int argc, char* argv[])
+{
+    Input input;
     if (argc > 1) {
-        for (int i = 0; i < argc; i++) {
-            cerr << "argv[" << i << "] = " << argv[i] << endl;
-        }
-        return 0;
+        input = download(argv[1]);
+    } else {
+        input = input_data(cin, true);
     }
 
     size_t max_count;