diff --git a/main.cpp b/main.cpp
index 5f965b8..1eae58c 100644
--- a/main.cpp
+++ b/main.cpp
@@ -1,8 +1,11 @@
 #include <iostream>
+#include <sstream>
+#include <string>
 #include <vector>
+#include <curl/curl.h>
 #include "histogram.h"
+#include "text.h"
 #include "svg.h"
-#include <curl/curl.h>
 
 using namespace std;
 
@@ -12,11 +15,11 @@ struct Input {
 };
 
 Input input_data(istream& in, bool prompt) {
-    size_t number_count;
-
     if (prompt) {
-        cerr << "Enter number count: ";
+        cerr << "Enter number count, numbers and bin count: ";
     }
+
+    size_t number_count;
     in >> number_count;
 
     Input input;
@@ -26,40 +29,59 @@ Input input_data(istream& in, bool prompt) {
         in >> input.numbers[i];
     }
 
-    if (prompt) {
-        cerr << "Enter bin count: ";
-    }
     in >> input.bin_count;
+
     return input;
 }
 
-int main(int argc, char* argv[]) {
+size_t write_data(void* items, size_t item_size, size_t item_count, void* ctx) {
+    size_t data_size = item_size * item_count;
 
-    if (argc > 1) {
-        cout << "���������� ����������: " << argc << endl;
-        for (int i = 0; i < argc; ++i) {
-            cout << "argv[" << i << "] = " << argv[i] << endl;
-        }
-        return 0;
-    }
+    stringstream* buffer = reinterpret_cast<stringstream*>(ctx);
+
+    buffer->write(reinterpret_cast<const char*>(items), data_size);
 
+    return data_size;
+}
+
+Input download(const string& address) {
+    stringstream buffer;
+
+    CURL* curl = curl_easy_init();
+    if (curl) {
+        curl_easy_setopt(curl, CURLOPT_URL, address.c_str());
+
+        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data);
+        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
 
-    CURLcode res = curl_global_init(CURL_GLOBAL_ALL);
-    if (res != CURLE_OK) {
-        cerr << "curl_global_init() failed: " << curl_easy_strerror(res) << endl;
-        return 1;
+        CURLcode res = curl_easy_perform(curl);
+        if (res != CURLE_OK) {
+            cerr << "cURL error: " << curl_easy_strerror(res) << endl;
+            curl_easy_cleanup(curl);
+            exit(1);
+        }
+
+        curl_easy_cleanup(curl);
+    } else {
+        cerr << "curl_easy_init() failed" << endl;
+        exit(1);
     }
 
+    return input_data(buffer, false);
+}
+
+int main(int argc, char* argv[]) {
+    Input input;
 
-    auto in = input_data(cin, true);
+    if (argc > 1) {
+        input = download(argv[1]);
+    } else {
+        input = input_data(cin, true);
+    }
 
-    // ��������� �����������
-    auto bins = make_histogram(in.numbers, in.bin_count);
+    const auto bins = make_histogram(input.numbers, input.bin_count);
     show_histogram_svg(bins);
 
-    // ���������� ������ cURL
-    curl_global_cleanup();
-
     return 0;
 }
 /*#include <iostream>