Unsorted complementary list

Darwin/Mac OS X

The existing Darwin binaries have been built through buildbot in 2013 and links
to them can be found on the dedicated


Rubenvb has built a number of toolchains including some for less common setups.
They are split into two categories: toolchains targeting

GCC with the MCF thread model

GCC with the MCF thread model is a series of x86
and x64 native toolchains built by LH_Mouse. The MCF thread model involves the
mcfgthread library to provide minimum
yet complete C++11 thread support. Disregarding POSIX or Windows XP
compatibility, it implements (hopefully the most) efficient mutexes and
condition variables that are competitive with even native slim reader/write
(SRW) locks and condition variables since Windows Vista.

Store of binaries on SourceForge

A very large number of other binaries and sources are hosted in the File
Release System on Sourceforge which
might have what you are after.

Setup Python for compilation of extensions

Note: This section is only required if you want to build 64-bit Python extensions. No actions are required here if you are going to build 32-bit Python extensions.

Before you can built any Python extensions using MinGW-w64 (which includes via SWIG), some preparation is required. One C header file, pyconfig.h has to be patched, and linker definitions for python27.dll have to be prepared for the compiler. Follow these instructions to sort it out.

First download, build, and install a utility called ‘gendef’ which builds library *.def files that MinGW-w64 can use when linhing to DLLs. This is because the python27.lib file distributed with Python doesn’t work with MinGW-w64. In your MSYS shell, type

Now prepare a new python27.def file from the installed copy of python27.dll in c:\windows\system32:

  • Using Windows Explorer, copy the file c:\windows\system32\python27.dll into the folder c:\Python27\Libs
  • Using MSYS, enter the following:
cd /c/Python27/libs
mv python27.lib old-python27.lib
gendef python27.dll

If this works OK, you should have a new file c:\Python27\Libs\python27.def.

Next, patch the c:\Python27\include\pyconfig.h file:

  • Open the file c:\Python27\include\pyconfig.h using gedit
  • Search for the text #ifdef _WIN64, which in our copy of this file was at line 141, and cut out the following three lines:
#ifdef _WIN64
#define MS_WIN64

Search for the text #ifdef _MSC_VER, which in our copy of this file was at line 107. Paste in the cut-out lines, ABOVE the #ifdef _MSC_VER. Alternatively, if you don’t want to do this last step, you could just make sure you define MS_WIN64 before you #include «Python.h» in your source code.

We are finding that the above steps give correct behaviour on Windows 7. If future releases cause problems, the following may be useful for testing:

  • swigtest.tar.gz (900 byte tarball)
  • pytest.tar.gz (test of building Python bindings without SWIG, 1.1k tarball)

Debug helloworld.cpp

Next, you’ll create a file to configure VS Code to launch the GDB debugger when you press F5 to debug the program.

  1. From the main menu, choose Run > Add Configuration… and then choose C++ (GDB/LLDB).
  2. You’ll then see a dropdown for various predefined debugging configurations. Choose g++.exe build and debug active file.

VS Code creates a file, opens it in the editor, and builds and runs ‘helloworld’.

The setting specifies the program you want to debug. Here it is set to the active file folder and active filename with the extension , which if is the active file will be .

By default, the C++ extension won’t add any breakpoints to your source code and the value is set to .

Change the value to to cause the debugger to stop on the method when you start debugging.

Start a debugging session

  1. Go back to so that it is the active file.
  2. Press F5 or from the main menu choose Run > Start Debugging. Before you start stepping through the source code, let’s take a moment to notice several changes in the user interface:
  • The Integrated Terminal appears at the bottom of the source code editor. In the Debug Output tab, you see output that indicates the debugger is up and running.

  • The editor highlights the first statement in the method. This is a breakpoint that the C++ extension automatically sets for you:

  • The Run view on the left shows debugging information. You’ll see an example later in the tutorial.

  • At the top of the code editor, a debugging control panel appears. You can move this around the screen by grabbing the dots on the left side.



This is the set of scripts to build Qt : either with «MinGW-builds» based toolchains under MSYS, or, to build Qt : with

MSYS2 repo (also based on «MinGW-builds») based toolchains under MSYS2.

  • If you want to use pre-compiled or pre-built Qt & QtCreator binary files, then follow one of these:
    • The «MSYS2» based Qt binary builds (pre-built) can be downloaded from


To build Qt, these are required:

  • Internet connection
  • Either use MSYS or MSYS2. Do not use both, (unless you know what you are doing).

Initial Setup

  • Either use MSYS, or MSYS2. Do not use both, (unless you know what you are doing).
    • If you are going to use MSYS: extract or install MSYS into C:directory
    • If you are going to use MSYS2: extract or install MSYS2 into C:2 directory
  • Prepare MSYS or MSYS2 for development environment: pre-install build related required dependencies & components.
  • Run MSYS (or MSYS2)
  • run git checkout scripts:

Building Qt

Now scripts provide building Qt-4.8.4, Qt-5.0.0, Qt-5.0.1, Qt-5.0.2, Qt5 from git with latest release of QtCreator, qbs(from git). Buildinq Qt is simple by run:

For example,

build 32-bit Qt-5.0.0 with QtCreator-2.7.0 and install them into C:/QtSDK/Qt32-5.0.0, Qt dependencies and prerequisites will be installed into C:/QtSDK/ported32.

For building Qt5 from git you need specify branch what you want to build. If you don’t specify branch then by default building stable branch.

This command download qt5 from git stable branch and try to build 32-bit version of Qt5.

Note: If you want to move Qt directory elsewhere than after moving you need to execute from QTDIR:

Other useful options are:

Notes: Do not use (or try to avoid using) different type of toolchains for building different sub-components for the same/main project, when targeted for same platform/OS. If you are using MinGW-w64 based toolchains from MSYS2\mingw32 or MSYS2\mingw64, then for all sub-components build and for main project build, use same MSYS2 toolchains. If you are using MinGW toolchain, then for all of your sub-components & main project build, use same MinGW toolchain. If you are using MinGW-w64 toolchains from «MinGW-builds», then for all sub-components and for main project build, use same MinGW-builds toolchains.

Инструкция по установке MinGW-w64

1. Скачать установщик mingw-w64-install.exe отсюда и запустить его.

Нажимаем next. Установщик скачивает информацию о доступных пакетах MinGW.

2. На следующей странице вы можете выбрать, какой вариант MinGW устанавливать: версия компилятора (последняя доступная будет 7.2.0 на начало 2018 г.), архитектуру (можно заменить 32-битную архитектуру i686 на 64-битную x86_64), другие параметры менять не следует.

3. В следующем окне задается путь для установки компилятора. Запомните этот путь или укажите другой.

4. Установщик скачивает нужные пакеты. Ждем завершения процесса.

5. Ждем появления сообщения «Click Next to continue the installation» и нажимаем Next.

6. Установка закончена.

После установки подкаталог bin каталога, куда был установлен MinGW, рекомендуется добавить в системную переменную PATH.

Building from source

The toolchain can be compiled for installation in the current Unix
environment, fetching sources as needed:

To reduce the size of the installation, removing some files that
aren’t necessary after building, run:

It can also be built, reproducibly, into a Docker image:

Individual components of the toolchain can be (re)built by running
the standalone shellscripts listed within . However, if
the source already is checked out, no effort is made to check out a
different version (if the build scripts have been updated to prefer
a different version) — and likewise, if configure flags in the build-*.sh
scripts have changed, you might need to wipe the build directory under
each project for the new configure options to be taken into use.

Pre-built toolchains and packages

Version Host GCC / Mingw-w64 Version Languages Additional Software in Package Manager
Arch Linux Ada, C, C++, Fortran, Obj-C, Obj-C++ many
Rolling Windows 5.4.0/5.0.2 Ada, C, C++, Fortran, Obj-C 5 (bzip2, libgcrypt, libgpg-error, minizip, xz, zlib)
Debian 7 (Wheezy) 4.6.3/2.0.3 Ada, C, C++, Fortran, Obj-C, Obj-C++, OCaml 2 (gdb, nsis)
Debian 8 (Jessie) 4.9.1/3.2.0
Debian 9 (Stretch) 6.3.0/5.0.0 9 (gdb, libassuan, libgcrypt, libgpg-error, libksba, libnpth, nsis, win-iconv, zlib)
Debian 10 (Buster) 8.3.0/6.0.0
Fedora 19 4.8.1/? Ada, C, C++, Fortran, Obj-C, Obj-C++ 149+
20210423 Windows, Linux LLVM 12.0.0/trunk C, C++ make
Rolling macOS C, C++, Fortran, Obj-C, Obj-C++ 1 (nsis)
Rolling Windows 7.2.0/5.0.3 C, C++, Fortran 4 (gdb, libiconf, python, zlib)
Rolling Windows Ada, C, C++, Fortran, Obj-C, Obj-C++, OCaml many
12.04 Precise Pangolin 4.6.3/2.0.1 Ada, C, C++, Fortran, Obj-C, Obj-C++, OCaml 2 (nsis, gdb)
14.04 Trusty Tahr 4.8.2/3.1.0
14.10 Utopic Unicorn 4.9.1/3.1.0
15.04 Vivid Vervet 4.9.2/3.2.0
15.10 Wily Werewolf 4.9.2/4.0.2
16.04 Xenial Xerus 5.3.1/4.0.4 3 (nsis, gdb, zlib)
1.5 Windows, Linux 4.8.3/3.3.0 C, C++ 91+


  • Community repository (toolchain)
  • AUR repository (additional packages)


Cygwin is a Unix-like environment and command-line
interface for Microsoft Windows. Its core is the cygwin1.dll library which
provides POSIX functionality on top of the Win32 API. It can be used as a build
environment which targets Windows directly and for which output doesn’t depend
on cygwin1.dll.

Installation is done through cygwin’s package manager:

As part of the numerous packages in cygwin, there are cross-compilation
toolchains which target both 32 bits and 64 bits; their names start with

Once they are installed, they should be used according to the general
cross-compilation approach.


LLVM-MinGW is a toolchain built with Clang, LLD, libc++, targeting
i686, x86_64, arm and aarch64 (ARM64), with releases both for running
as a cross compiler from Linux and for running on Windows. It supports
Address Sanitizer, Undefined Behaviour Sanitizer, and generating debug
info in PDB format.


To install just the 32-bit or just 64-bit compiler with dependencies, use:

A shortcut to install both:

Here is the list of Mingw-w64 packages on MacPorts.


Win-builds is a cross-platform project that makes building for Windows easy. It
supports building from both Windows and Linux systems and provides many
pre-built libraries which can be installed through a graphical package manager.

It aims for stability while still providing recent versions of software


Build helloworld.cpp

Next, you’ll create a file to tell VS Code how to build (compile) the program. This task will invoke the g++ compiler to create an executable file based on the source code.

From the main menu, choose Terminal > Configure Default Build Task. In the dropdown, which will display a tasks dropdown listing various predefined build tasks for C++ compilers. Choose g++.exe build active file, which will build the file that is currently displayed (active) in the editor.

This will create a file in a folder and open it in the editor.

Your new file should look similar to the JSON below:

The setting specifies the program to run; in this case that is g++. The array specifies the command-line arguments that will be passed to g++. These arguments must be specified in the order expected by the compiler. This task tells g++ to take the active file (), compile it, and create an executable file in the current directory () with the same name as the active file but with the extension (), resulting in for our example.

The value is what you will see in the tasks list; you can name this whatever you like.

The value in the object specifies that this task will be run when you press ⇧⌘B (Windows, Linux Ctrl+Shift+B). This property is for convenience only; if you set it to false, you can still run it from the Terminal menu with Tasks: Run Build Task.

Running the build

  1. Go back to . Your task builds the active file and you want to build .

  2. To run the build task defined in , press ⇧⌘B (Windows, Linux Ctrl+Shift+B) or from the Terminal main menu choose Run Build Task.

  3. When the task starts, you should see the Integrated Terminal panel appear below the source code editor. After the task completes, the terminal shows output from the compiler that indicates whether the build succeeded or failed. For a successful g++ build, the output looks something like this:

  4. Create a new terminal using the + button and you’ll have a new terminal with the folder as the working directory. Run and you should now see the executable .

  5. You can run in the terminal by typing (or if you use a PowerShell terminal).

Modifying tasks.json

You can modify your to build multiple C++ files by using an argument like instead of . This will build all files in your current folder. You can also modify the output filename by replacing with a hard-coded filename (for example ).

Create Hello World

From a Windows command prompt, create an empty folder called where you can place all your VS Code projects. Then create a sub-folder called , navigate into it, and open VS Code in that folder by entering the following commands:

The «code .» command opens VS Code in the current working folder, which becomes your «workspace». As you go through the tutorial, you will see three files created in a folder in the workspace:

  • (build instructions)
  • (debugger settings)
  • (compiler path and IntelliSense settings)

In the File Explorer title bar, select the New File button and name the file .

Add hello world source code

Now paste in this source code:

Now press ⌘S (Windows, Linux Ctrl+S) to save the file. Notice how the file you just added appears in the File Explorer view (⇧⌘E (Windows, Linux Ctrl+Shift+E)) in the side bar of VS Code:

You can also enable to automatically save your file changes, by checking Auto Save in the main File menu.

The Activity Bar on the far left lets you open different views such as Search, Source Control, and Run. You’ll look at the Run view later in this tutorial. You can find out more about the other views in the VS Code User Interface documentation.


MinGW is a minimal GNU/GCC environment for Windows. MSYS is a command-line environment based on MinGW that mimics the Linux environment sufficiently well to allow a large portion of Linux-compatible software to also be compilable under Windows. There are many different combinations of ways to set up this environment. And things are made quite a bit more complicated by the fact that the official MinGW project does not support the 64-bit fork MinGW-w64, and as yet (Aug 2013) there is no nicely-integrated environment that supports installing everything automatically. Based on our experience in particular with difficulties in building recent versions of IPOPT, this is therefore our current preferred approach:

Screenshot of MinGW-get-setup showing selected installation options

Open gedit and edit the file c:\mingw\32\var\lib\mingw-get\data\profile.xml and replace the entire contents of the file with the following text:

/* Highlighting theme: Kwrite Editor */

body.hl { background-color:#e0eaee; }
pre.hl { color:#000000; background-color:#e0eaee; font-size:10pt; font-family:’Courier New’;}
.hl.num { color:#b07e00; }
.hl.esc { color:#ff00ff; }
.hl.str { color:#bf0303; }
.hl.pps { color:#818100; }
.hl.slc { color:#838183; font-style:italic; } { color:#838183; font-style:italic; }
.hl.ppc { color:#008200; }
.hl.opt { color:#000000; }
.hl.lin { color:#555555; }
.hl.kwa { color:#000000; font-weight:bold; }
.hl.kwb { color:#0057ae; }
.hl.kwc { color:#000000; font-weight:bold; }
.hl.kwd { color:#010181; }


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<profile project="MinGW" application="mingw-get">
  <repository uri=""/>
  <system-map id="default">
    <sysroot subsystem="mingw32" path="%R" />
    <sysroot subsystem="MSYS" path="%R/../msys" />

From the Windows ‘Start’ menu open a command prompt window and run the following, which will take a few minutes:

c:\mingw\32\bin\mingw-get install msys-core msys-base msys-vim msys-wget msys-patch msys-flex msys-bison

Using gedit, create the file c:\mingw\msys\etc\fstab with the following content:

c:/mingw/32   /mingw
  • Using Windows Explorer, create a shortcut to the file c:\mingw\msys\msys.bat and place the shortcut on the desktop. You may wish to set the icon of the shortcut to the icon file c:\mingw\msys\msys.ico.
  • Double-click your new desktop shortcut to msys.bat. You should see a console window as follows:


NoteThe use of target’s host-part-name mingw64 is strongly discuraged. Most checks in binutils, gdb, gcc, etc (and all their testsuites) are using still mingw32.


To install the MinGW Toolchain, start with emerging the crossdev tool:

We use a target descriptor to tell crossdev, what to build: .


After crossdev is installed, the most basic command of interest will install the MinGW cross-toolchain for 64 bit:

To install the toolchain for 32 bit (which also uses MinGW-w64 runtime), use:

You may either use the cross compiler directly, or use the cross-emerge wrapper symlink.

For example:

The resulting .exe can be found here:

You may also wish to configure the cross-portage environment found in:

Good luck!



Crossdev will automatically create /etc/portage/package.keywords/cross-x86_64-w64-mingw32 and /etc/portage/package.use/cross-x86_64-w64-mingw32 (or their 32-bit counterparts). Since by default some critical use flags like , or are not disabled it might be necessary to override the auto created use flags by

NoteUsers with hardened profiles have to disable the following use flags (at lease for x86_64-w64-mingw32-gcc) and :

If not set already set add crossdev-overlay to repos.conf:


location = /usr/local/portage-crossdev

Now with the crossdev tool installed, emerge the MinGW toolchain.

Toolchain installation

To build the 64-bit windows toolchain:

To build the 32-bit windows toolchain:

NoteIf you have already installed from stable please note that and should be the same version. If you get a conflict, consider using .

Adding the or options may cause issues; they have been known to not build. will enable GDB and likely will work, but it is not very useful on Linux because MinGW GCC by default makes PE’s (EXE files), not ELF files, and gdb has no idea how to run an EXE file on Linux. A remote debugger (with a Windows target machine) is a possibility but a long shot.


  • GCJ sources will not compile due to missing makespec files that do not get installed (copying from MinGW from Windows does not work either).
  • Sanitize may cause compilation failures for at least gcc-4.9, maybe newer.
  • OpenMP was once forcefully disabled in the ebuild, but now honors the use flag setting. However it may still cause compilation issues when set.

Compiling other parts of the runtime

MinGW-w64-runtime supplies some development tools and libraries, in particular a pthreads implementation which has features the one below does not. Before you take this step, make sure to backup the contents of /etc/portage/package.use/cross-x86_64-w64-mingw32 as this next step will overwrite it with a new line for the runtime. If you don’t edit this file to add in the old contents back into this file, when you do a update looking for changes in use flags, emerge will try to re-emerge the compilers with the multilib flag on.

CODE Contents of /etc/portage/package.use/cross-x86_64-w64-mingw32 after this step.

cross-x86_64-w64-mingw32/mingw64-runtime libraries idl tools -selinux -multilib

To install:


cross-i686-w64-mingw32/gcc -libssp
cross-x86_64-w64-mingw32/gcc -libssp


cross-i686-w64-mingw32/gcc libssp
cross-x86_64-w64-mingw32/gcc libssp

Step 5

Write a program

Fig: C++ code

Now once you have the code copied. It’s time to test the installation. Remember to change the image location to your target image. Make sure you do that otherwise empty Mat will be created.


Double check that the include ,lib and bin folder of the install folder are targeted by your g++ compilation command.

If your command worked with no error. If there are linker errors then would advice to check whether linked dll are existing in the folder included by the command.

Fig: Phew !!! That worked.

So hopefully you got a similar out put of size of the image currently being used.

Hope this tutorial helps you start your journey into the rabbit hole of C++ and Computer Vision. For more such content to follow this blog and if you found this helpful maybe a few claps. ….

Hopefully in the next version we will try to support cuda for Opencv DNN module.

Create applications for free

MinGW is an open-source development software that allows you to create Microsoft Windows applications. The software is formerly known as mingw32, and is written in C and C++ by the developers of MinGW Project. It was created to support the GCC—a collection of compilers for programming languages—of Microsoft Windows systems.

GCC is also called GNU Compiler Collection. The native Windows port of the GCC includes extensions to the MSVC (Microsoft Visual C++) runtime, which will support the functionality of C99—an old version of the C language standard. All software created through MinGW can be executed on 64-bit Windows platforms.

What is MinGW used for?

MinGW is a software that is responsible for compiling systems based on the GNU, GCC, and Binutils projects, and compiles and links the codes that need to run on all Win32 systems. The software provides compilers for Fortran, C, C++, and other tools. What you can find great about this software is that it doesn’t rely on third-party C runtime DLL (dynamic-link library) files. However, within the program, it has a lot of jargon that can be overwhelming. 

Its name “MinGW” means Minimalist GNU for Windows. Hence, the software does not attempt to give you a POSIX runtime environment for POSIX application deployment. If you want POSIX app deployment, you can consider using Cygwin instead. Another great thing about this software is that it gives you every open-source programming toolset that you need to develop Windows applications. Therefore, this program is perfect for the easy and intuitive installation of GNU compiler collections.

Installation can be a nightmare

If you’re relatively new to programming, then this software is not the best option for you. You can opt for PowerShell, which is also a free open-source software. Now, while MinGW is known for its ease of use, the downloads are all over the place and there are several other kinds of downloads on top of each other. On top of that, the auto-installer does not work properly. There are also a lot of errors whenever you update from your sync repositories.

You can check out the internet for tutorials on how to install and use the program. However, most of them are conflicting. There are some broken links even on the official website, so it is really confusing, making installation a nightmare. One of the main reasons behind this issue is that the project has not been well-maintained by its developers, so it has become outdated. However, that doesn’t discount the fact that the program is great for building native Windows apps.

Outdated but works just fine

Overall, MinGW is still a useful program if you want a unique way to use scripts natively on Windows. The software also makes it easy to search Windows files in a UNIX manner through its find command. However, you can experience quite a lot of issues when it comes to installing. Sometimes, you are going to have to do it manually. Still, this program is great for a minimalist way to get the job done.


MSYS2 («минимальная система 2») — это дистрибутив программного обеспечения и платформа разработки для Microsoft Windows , основанная на Mingw-w64 и Cygwin , которая помогает развертывать код из мира Unix в Windows. Он играет ту же роль, что и старый MSYS в MinGW.

MSYS2 разделяет эту цель по переносу кода Unix на машины Windows с несколькими другими проектами, в первую очередь Cygwin и Windows Subsystem for Linux (WSL). WSL позволяет исполнять двоичные файлы Linux ELF в Windows с ограниченной поддержкой вызовов ядра и значительными ограничениями в графических приложениях. Cygwin предоставляет полную среду POSIX (как Windows DLL ), в которой приложения, скомпилированные как Windows EXE, работают так же, как и в Unix.

Вместо того, чтобы предоставлять полную среду, как это делает Cygwin, MSYS2 ставит себе задачу стать платформой для разработки и развертывания.

  • Существует основная среда MSYS2 (аналогичная коду эмуляции Cygwin и фактически производная от него) с диспетчером пакетов и стандартным системным инструментом Unix. Таким образом, при управлении самим MSYS2 стандартные инструменты Unix могут использоваться без изменений с помощью эмулируемой среды. Также можно установить инструменты сборки в эмулируемой среде MSYS2, если пользователь хочет создать программное обеспечение, которое зависит от уровня эмуляции POSIX вместо собственного API.
  • Кроме того, предусмотрены четыре среды, содержащие собственные компиляторы, инструменты сборки и библиотеки, которые можно напрямую использовать для сборки 32-разрядных или 64-разрядных программ Windows. Последние программы, созданные с использованием двух собственных сред, не используют никакой эмуляции и могут запускаться или распространяться как собственные программы Windows. Это среды MINGW64 и MINGW32 (исходные среды MinGW-w64 с использованием gcc, msvcrt и libstdc ++), UCRT64 (адаптация MINGW64 к ucrt) и CLANG64 (адаптация UCRT64 к clang и libc ++). Хотя Cygwin также предоставляет компиляторы и библиотеки MinGW-w64, набор доступных библиотек меньше, и ими не так легко управлять из-за того, что они не помещаются в отдельные префиксы.

Основная среда MSYS2 предоставляет диспетчер пакетов ( Pacman от Arch Linux ), оболочку bash и другие программы Unix . Он использует библиотеку времени выполнения msys-2.0.dll (~ 20 МБ), производную от библиотеки Cygwin cygwin1.dll , и регулярно обновляется для отслеживания развития Cygwin. Он задуман как среда разработки, которой разработчики могут управлять (используя pacman) и запускать свои инструменты. Функции, признанные ненужными для разработки, удаляются.

Как и Cygwin, MSYS2 поддерживает преобразование пути для запущенного из него программного обеспечения, отличного от MSYS2. Например, можно использовать команду для запуска редактора, который откроет файл с путем Windows .

MSYS2 и его среда bash используются Git и GNU Octave для их официального распространения Windows.

PDB support

To produce debug info in PDB format, you currently need to do the following

  • Add to the compilation commands (e.g. in
    ), together with using as usual to
    enable debug info in general.
  • Add to linking commands. This creates a PDB file at the same
    location as the output EXE/DLL, but with a PDB extension. (By passing
    or one can explicitly specify
    the name of the output PDB file.)

Even though LLVM supports this, there are a few caveats with using it when
building in MinGW mode:

  • Microsoft debuggers might have assumptions about the C++ ABI used, which
    doesn’t hold up with the Itanium ABI used in MinGW.
  • This is unimplemented for the armv7 target, and while implemented for aarch64,
    it doesn’t seem to work properly there yet.
Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *