рдпреВрдирд┐рдЯреА 3 рдбреА: рдСрдЯреЛрдореИрдЯрд┐рдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореИрдиреЗрдЬрд░ рдПрдЧреНрд░реАрдЧреЗрдЯрд░

рдкрд░рд┐рдЪрдп


рдпрд╣ рд▓реЗрдЦ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдмрдВрдзрдХреЛрдВ (рд╕рд┐рдВрдЧрд▓рдЯреЙрдиреЛрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ) рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдмреАрдЪ рдмрд╛рддрдЪреАрдд рдХреЗ рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЧрдарди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рд▓рд┐рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдПрдХ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд╡рд░реНрдЧ рдмрдирд╛рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдпрд╛ ред

рдХрд╛рд░реНрдп


рдореИрдВ рдЗрд╕ рдирддреАрдЬреЗ рдкрд░ рдкрд╣реБрдВрдЪрд╛ рдХрд┐ рд╣рд░ рдмрд╛рд░ рдЕрдкрдиреА рдХрд▓рдо рд╕реЗ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд╡рд░реНрдЧ рдореЗрдВ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЛ рд╣рдереМрдбрд╝рд╛ рджреЗрдирд╛ рдмреЗрддрд╣рд╛рд╢рд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдПрдХ рдирдпрд╛ рдкреНрд░рдмрдВрдзрдХ рдмрдирд╛рддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд╡рд░реНрдЧ рдЦреЛрд▓рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдмрджрд▓рд╛рд╡ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд░реНрдпрд╛рдкреНрдд рдЕрдиреБрднрд╡ рдХреЗ рд╕рд╛рде, рдЖрдк рдРрд╕реА рдердХрд╛рдК рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдереЗ: рдПрдХрд▓ рдФрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд▓реЗрдХреНрдЯрд░ рдХреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдирд┐рд░реНрдорд╛рдгред

рдХрдХреНрд╖рд╛-рд╕рд┐рдВрдЧрд▓рдЯрди


using UnityEngine;
public class Singleton<T>: MonoBehaviour where T: MonoBehaviour
{
	public static T instance { get; private set; }

	public void Awake()
	{
		if (instance == null)
		{
			instance = GetComponent<T>();
			ManagersAregator.addManager(instance);
		}
		else
		{
			Debug.Log($"<color=red>   {typeof(T).ToString()}</color>");
			Destroy(gameObject);
		}
	}

	public void OnDestroy()
	{
		ManagersAregator.removeManager<T>();
	}
}

рдПрдХрддрд╛ рдореЗрдВ рдХреНрд▓рд╛рд╕рд┐рдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЙрджрд╛рд╣рд░рдг рд╕реНрдерд┐рд░ рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ ред рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдЧрдиреЗ () рд╡рд┐рдзрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рддрд╛ рд╣реИ ред рдпрджрд┐ рдирд╣реАрдВ, рддреЛ рд╣рдореЗрдВ рдЗрд╕ рдЦреЛрдЬрд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╕рдВрджрд░реНрдн рдорд┐рд▓рддрд╛ рд╣реИ ред рд▓реЗрдХрд┐рди рдЬрдмрд╕реЗ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, рд╡рд░реНрдЧ рдХрд╛ рдПрдХ "рдЯреЗрдореНрдкрд▓реЗрдЯ" рдЪрд░ рдЯреА рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЙрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЯреА рдШрдЯрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕ рдкрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИред рдпрджрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдирд╖реНрдЯ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдСрдмреНрдЬреЗрдХреНрдЯ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдкреНрд░рддрд┐ рдореЗрдВ рдордВрдЪ рдкрд░ рд╣реЛрдЧрд╛ред рдЕрд╡реЗрдХ ()

рд╡рд┐рдзрд┐ рдореЗрдВрдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдСрдирдбреЗрд╕реНрдЯреНрд░реЙрдп () рд╡рд┐рдзрд┐ рдореЗрдВ, рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд╡рд░реНрдЧ рд╕реЗ рддрддреНрд╡ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред MyClass

рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

public class MyClass: Singleton<MyClass>

рдпрджрд┐ рдЖрдкрдХреЛ MyClass рд╡рд░реНрдЧ рдореЗрдВ Awake () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдЖрдзрд╛рд░ рдХреАрд╡рд░реНрдб ( рдЖрдзрд╛рд░ рдФрд░ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ :

new void Awake()
	{
		base.Awake(); //  Awake() -
		// 
	}

рдХреНрд▓рд╛рд╕ рдПрдЧреНрд░реАрдЧреЗрдЯрд░


using System.Collections.Generic;
using UnityEngine;

public static class ManagersAregator
{
	static Dictionary<string, MonoBehaviour> Managers = new Dictionary<string, MonoBehaviour>();

	public static void addManager<T>(T newManager)
	{
		string keyWord = typeof(T).ToString();

		if(Managers.ContainsKey(keyWord))
		{
			Debug.Log($"[ManagersAregator]  -{newManager}-   -{keyWord}-  ");
		}
		else
		{
			Managers.Add(keyWord, newManager as MonoBehaviour);
			Debug.Log($"<color=green>[ManagersAregator]    -{newManager}-   -{keyWord}-</color>");
		}
	}

	public static T getManager<T>(string callback) where T: Singleton<T>
	{
		string keyWord = typeof(T).ToString();

		if(Managers.ContainsKey(keyWord))
		{
			Debug.Log($"<color=yellow>[{callback}]   -{keyWord}-</color>");

			MonoBehaviour mbTemp = null;
			T manager = null;

			if(Managers.TryGetValue(keyWord, out mbTemp))
			{
				manager = (T)mbTemp;
				Debug.Log($"<color=green>[{callback}]  -{manager}- </color>");
			}
			else
			{
				Debug.Log($"<color=red>[{callback}]    -{keyWord}-</color>");
			}

			return manager;
		}

		Debug.Log($"<color=red>[ManagersAregator]    -{keyWord}-   .</color>");
		return null;
	}

	public static void removeManager<T>()
	{
		string keyWord = typeof(T).ToString();

		if(Managers.ContainsKey(keyWord))
		{
			Managers.Remove(keyWord);
			Debug.Log($"[ManagersAregator]    -{keyWord}-   ");
		}
		else
		{
			Debug.Log($"[ManagersAregator]    -{keyWord}-   .");
		}
	}
}

рд╡рд░реНрдЧ рд╕реНрдерд┐рд░ рд╣реИ, рдЕрд░реНрдерд╛рдд рдЙрд╕рдХреЗ рдкрд╛рд╕ рдордВрдЪ рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдХрд┐рд╕реА рднреА рд╕рдордп рдХрд┐рд╕реА рднреА рджреГрд╢реНрдп рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред

рд╕рднреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░рдмрдВрдзрдХ (рдПрдХрд▓) рдкреНрд░рдмрдВрдзрдХ рдкреНрд░рдмрдВрдзрдХ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИрдВ ред рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдмрдВрдзрдХ рдХреА рдХреБрдВрдЬреА рдЙрд╕ рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рд╡рд░реНрдЧ рдирд╛рдо рд╣реИред рд╢рд╛рдпрдж рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдирдП рд▓реЛрдЧ рд╕рд╡рд╛рд▓ рдкреВрдЫреЗрдВрдЧреЗ: "рдмрд╛рд╣, рд▓реЗрдХрд┐рди рдпрд╣ рдХреМрди рд╕рд╛ рд╢рдмреНрджрдХреЛрд╢ рд╣реИ рдЬреЛ рдореЛрдиреЛрдмреЗрд╣реЗрд╡рд┐рдпрд░ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ , рдФрд░ рд╕рднреА рд╡рд░реНрдЧ рд╕рд┐рдВрдЧрд▓рдЯрди рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рддреЗ рд╣реИрдВ ?"ред рдпрд╣ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрддреНрддрд░ рдХрд┐рд╕реА рднреА рд╡рд░реНрдЧ рдХреЗ рдкреНрд░рдмрдВрдзрдХреЛрдВ рдХреЗ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рдХреБрдВрдЬреА рд╣реИред

рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдореЗрдВ, рдПрдХ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдХреЗ рд▓рд┐рдП рдЕрдкрдХрд╛рд╕реНрдЯрд┐рдВрдЧ - рдЯрд╛рдЗрдк рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИ ред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдПрдХрддрд╛ рдореЗрдВ рд╕рднреА рд╡рд░реНрдЧ рдореЛрдиреЛрдмреЛрдПрд╣реЛрд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ ,рдЙрдиреНрд╣реЗрдВ рдореЛрдиреЛрдмреЗрд╣рд┐рдмреЛрд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдЗрд╕рд▓рд┐рдП, рдореИрдиреЗрдЬрд░реНрд╕ рдбрд┐рдХреНрд╢рдирд░реА рдореЗрдВ рдХреЗрд╡рд▓ рдореЛрдиреЛрдмреЗрд╣реМрд░ рд╡рд░реНрдЧ рдХреА рд╡рд╕реНрддреБрдПрдВ рд╣реИрдВ ред

рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рддрд░реАрдХреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

void addManager<T>(T newManager)

рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╕рд┐рдВрдЧрд▓рдЯрди рд╡рд░реНрдЧ рдХреЗ рдЕрд╡реЗрдХ () рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ ред рддрд░реНрдХ рдЙрджрд╛рд╣рд░рдг рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рдЪрд░ рд╣реИ ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рдХреБрдВрдЬреА рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рд╕реЗ рдмрдирд╛рдИ рдЬрд╛рддреА рд╣реИ , рдЬреЛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣реИ , рдФрд░ рдкреНрд░рдмрдВрдзрдХ рдХреЛ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

T getManager<T>(string callback) where T: Singleton<T>

рдлрд╝рдВрдХреНрд╢рди рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрд╕ рд╡рд░реНрдЧ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХрдВрд╕реЛрд▓ рдЙрд╕ рдХрдХреНрд╖рд╛ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ рд╡рд┐рдзрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред OtherMyClass рд╡рд░реНрдЧ рдореЗрдВ рдЗрд╕ рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг :

public class AnotherMyClass: MonoBehaviour
	void Start()
	{
		string cb = GetType().ToString(); //     
		MyClass MC = ManagersAregator.getManager<MyClass >(cb);
	}

рдХрдВрд╕реЛрд▓ рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рд▓рдЯрдХрд╛ рд╣реЛрдЧрд╛: " рд╣реВ ** I, рдлрд┐рд░ рд╕реЗ рдХрд░реЗрдВ [OtherMyClass] рдкреНрд░рдмрдВрдзрдХ -MyClass- рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред"

void removeManager<T>()

рдбрд┐рдХреНрд╢рдирд░реА рдореЗрдВ рдЯрд╛рдЗрдк рдЯреА рдХреЗ рдкреНрд░рдмрдВрдзрдХ рдХреЛ рд╣рдЯрд╛ рджреЗрддрд╛ рд╣реИ рдЕрдЧрд░ рд╡рд╣ рдбрд┐рдХреНрд╢рдирд░реА рдореЗрдВ рдирд┐рд╣рд┐рдд рд╣реИред

рд╕рд╛рд░рд╛рдВрд╢


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдЧреНрд░реАрдЧреЗрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рддреАрди рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдХреЗрд╡рд▓ getManager рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ ред рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд▓рд╕ рд╕рднреА рдЕрд╡рд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдмрдЧ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЕрдЪреНрдЫреА рджреГрд╢реНрдпрддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рджреЗрдЦрдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрдЧрд╛ рдХрд┐ рдХрд┐рд╕ рд╕рдордп, рдХреМрди рд╕рд╛ рд╡рд░реНрдЧ рдХреБрдЫ рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдкрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рд▓реЗрдЦ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛ рдФрд░ рдЖрдкрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдкрд╛рдпрд╛!

All Articles