ื“ื™ ื–ืขืงืกื˜ ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹ืคึผืึทื˜ืฉืึทื– ืคึฟืึทืจ ื“ื™ ืœื™ื ื•ืงืก ืงืขืจืŸ ืžื™ื˜ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ื“ื™ ืจื•ืกื˜ ืฉืคึผืจืึทืš

Miguel Ojeda, ื“ืขืจ ืžื—ื‘ืจ ืคื•ืŸ ื“ื™ Rust-for-Linux ืคึผืจื•ื™ืขืงื˜, ืคืืจื’ืขืœื™ื™ื’ื˜ ื“ื™ ืžืขืœื“ื•ื ื’ ืคื•ืŸ ื•ื•6 ืงืึทืžืคึผืึธื•ื ืึทื ืฅ ืคึฟืึทืจ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ืžื™ื˜ืœ ื“ืจื™ื•ื•ืขืจืก ืื™ืŸ ื“ื™ Rust ืฉืคึผืจืึทืš ืคึฟืึทืจ ื‘ืึทื˜ืจืึทื›ื˜ื•ื ื’ ื“ื•ืจืš ืœื™ื ื•ืงืก ืงืขืจืŸ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก. ื“ืืก ืื™ื– ื“ื™ ื–ื™ื‘ืขื˜ืข ืื•ื™ืกื’ืื‘ืข ืคื•ืŸ โ€‹โ€‹ื“ื™ ืคึผืึทื˜ืฉืึทื–, ื’ืขื ื•ืžืขืŸ ืื™ืŸ ื—ืฉื‘ื•ืŸ ื“ื™ ืขืจืฉื˜ืขืจ ื•ื•ืขืจืกื™ืข, ืืจื•ื™ืก ืึธืŸ ืึท ื•ื•ืขืจืกื™ืข ื ื•ืžืขืจ. ื–ืฉืึทื•ื•ืขืจ ืฉื˜ื™ืฆืŸ ืื™ื– ื’ืขืจืขื›ื ื˜ ื•ื•ื™ ื™ืงืกืคึผืขืจืžืขื ืึทืœ, ืึธื‘ืขืจ ืื™ื– ืฉื•ื™ืŸ ืึทืจื™ื™ึทื ื’ืขืจืขื›ื ื˜ ืื™ืŸ ื“ื™ ืœื™ื ื•ืงืก-ื•ื•ื™ื™ึทื˜ืขืจ ืฆื•ื•ื™ื™ึทื’ ืื•ืŸ ืื™ื– ื’ืขื ื•ื’ ื“ืขื•ื•ืขืœืึธืคึผืขื“ ืฆื• ืึธื ื”ื™ื™ื‘ืŸ ืืจื‘ืขื˜ืŸ ืื•ื™ืฃ ืงืจื™ื™ื™ื˜ื™ื ื’ ืึทื‘ืกื˜ืจืึทืงืฆื™ืข ืœื™ื™ึทืขืจืก ืื™ื‘ืขืจ ืงืขืจืŸ ืกืึทื‘ืกื™ืกื˜ืึทืžื–, ื•ื•ื™ ื’ืขื–ื•ื ื˜ ื•ื•ื™ ืฉืจื™ื™ื‘ืŸ ื“ืจื™ื•ื•ืขืจืก ืื•ืŸ ืžืึทื“ื–ืฉื•ืœื–. ื“ื™ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืื™ื– ืคืึทื ื“ืึทื“ ื“ื•ืจืš Google ืื•ืŸ ื“ื™ ISRG (Internet Security Research Group), ื•ื•ืึธืก ืื™ื– ื“ืขืจ ื’ืจื™ื ื“ืขืจ ืคื•ืŸ ื“ื™ Let's Encrypt ืคึผืจื•ื™ืขืงื˜ ืื•ืŸ ืคึผืจืึทืžืึธื•ืฅ ื”ื˜ื˜ืคึผืก ืื•ืŸ ื“ื™ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ื˜ืขืงื ืึทืœืึทื“ื–ืฉื™ื– ืฆื• ืคึฟืึทืจื‘ืขืกืขืจืŸ ืื™ื ื˜ืขืจื ืขื˜ ื–ื™ื›ืขืจื”ื™ื™ื˜.

ืื™ืŸ ื“ื™ ื ื™ื™ึทืข ื•ื•ืขืจืกื™ืข:

  • ื“ื™ ื˜ืึธืึธืœืงื™ื˜ ืื•ืŸ ืึท ื•ื•ืึทืจื™ืึทื ื˜ ืคื•ืŸ ื“ื™ ืึทืœืœืึธืง ื‘ื™ื‘ืœื™ืึธื˜ืขืง, ื‘ืืคืจื™ื™ื˜ ืคื•ืŸ ืžืขื’ืœืขืš ื“ื•ืจ ืคื•ืŸ ืึท "ืคึผืึทื ื™ืง" ืฉื˜ืึทื˜ ื•ื•ืขืŸ ืขืจืจืึธืจืก ืคืึทืœืŸ, ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜ ืฆื• ื“ื™ ืžืขืœื“ื•ื ื’ ืคื•ืŸ Rust 1.60, ื•ื•ืึธืก ืกื˜ื™ื™ื‘ืึทืœื™ื™ื–ื™ื– ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ื“ื™ "ืžื™ื™ึทื‘ืข_ื•ื ื™ื ื™ื˜_ืขืงืกื˜ืจืึท" ืžืึธื“ืข ื’ืขื ื™ืฆื˜ ืื™ืŸ ืงืขืจืŸ ืคึผืึทื˜ืฉืึทื–.
  • ืฆื•ื’ืขืœื™ื™ื’ื˜ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ืœื•ื™ืคืŸ ื˜ืขืกืฅ ืคึฟื•ืŸ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ (ื˜ืขืกื˜ืก ื•ื•ืึธืก ื–ืขื ืขืŸ ืื•ื™ืš ื’ืขื ื™ืฆื˜ ื•ื•ื™ ื‘ื™ื™ืฉืคื™ืœืŸ ืื™ืŸ ื“ื™ ื“ืึทืงื™ื•ืžืขื ื˜ื™ื™ืฉืึทืŸ), ื“ื•ืจืš ืฆื•ื ื•ื™ืคื ืขืžืขืŸ-ืฆื™ื™ื˜ ืงืึทื ื•ื•ืขืจื–ืฉืึทืŸ ืคื•ืŸ ื˜ืขืกืฅ ื˜ื™ื™ื“ ืฆื• ื“ื™ ืงืขืจืŸ ืึทืคึผื™ ืื™ืŸ KUnit ื˜ืขืกืฅ ืขืงืกืึทืงื™ื•ื˜ืึทื“ ื‘ืขืฉืึทืก ืงืขืจืŸ ืœืึธื•ื“ื™ื ื’.
  • ืจืขืงื•ื•ื™ืจืขืžืขื ืฅ ื”ืึธื‘ืŸ ืฉื•ื™ืŸ ืื ื’ืขื ื•ืžืขืŸ ืึทื– ื˜ืขืกืฅ ื–ืึธืœ ื ื™ืฉื˜ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ืŸ ืึท ืงืœื™ืคึผืคึผื™ ืœื™ื ื˜ืขืจ ื•ื•ืืจืขื ื•ื ื’, ืคึผื•ื ืงื˜ ื•ื•ื™ ื–ืฉืึทื•ื•ืขืจ ืงืขืจืŸ ืงืึธื“.
  • ืึทืŸ ืขืจืฉื˜ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ "ื ืขืฅ" ืžืึธื“ื•ืœืข ืžื™ื˜ ื ืขืฅ ืคืึทื ื’ืงืฉืึทื ื– ืื™ื– ืคืืจื’ืขืœื™ื™ื’ื˜. ืจืึทืกื˜ ืงืึธื“ ื”ืื˜ ืึทืงืกืขืก ืฆื• ืงืขืจืŸ ื ืขืฅ ืกื˜ืจืึทืงื˜ืฉืขืจื– ืึทื–ืึท ื•ื•ื™ ื ืึทืžืขืกืคึผืึทืกืข (ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ ื“ื™ ืกื˜ืจื•ืงื˜ื•ืจ ื ืขืฅ ืงืขืจืŸ ืกื˜ืจื•ืงื˜ื•ืจ), SkBuff (struct sk_buff), TcpListener, TcpStream (struct socket), Ipv4Addr (struct in_addr), SocketAddrV4 (struct sockaddr_in) ืื•ืŸ ื–ื™ื™ืขืจ IPv6 ื™ืงื•ื•ื™ื•ื•ืึทืœืึทื ืฅ. .
  • ืขืก ืื™ื– ืขืจืฉื˜ ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ื™ื™ืกื™ื ื’ืงืจืึทื ืึทืก ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ื˜ืขืงื ื™ืงืก (ืึทืกื™ื ืง), ื™ืžืคึผืœืึทืžืขื ืึทื“ ืื™ืŸ ื“ื™ ืคืึธืจืขื ืคื•ืŸ ื“ื™ ืงืึทืกื™ื ืง ืžืึธื“ื•ืœืข. ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ, ืื™ืจ ืงืขื ืขืŸ ืฉืจื™ื™ึทื‘ืŸ ื™ื™ืกื™ื ื’ืงืจืึทื ืึทืก ืงืึธื“ ืฆื• ืžืึทื ื™ืคึผื•ืœื™ืจืŸ ื˜ืงืคึผ ืกืึธืงืงืขืฅ: async fn echo_server (ืกื˜ืจื™ื: TcpStream) -> ืจืขื–ื•ืœื˜ืึทื˜ {let mut buf = [0u8; 1024]; ืฉืœื™ื™ืฃ { ืœืึธื–ืŸ n = ืกื˜ืจื™ื.ืจืขื“ (&ืžื•ื˜ ื‘ื•ืฃ).ืึทื•ื•ื™ื™ื˜?; ืื•ื™ื‘ n == 0 {ืฆื•ืจื™ืงืงื•ืžืขืŸ Ok (()); } stream.write_all(&buf[..n]).ืึทื•ื•ื™ื™ื˜?; } }
  • ืฆื•ื’ืขืœื™ื™ื’ื˜ ื ืขืฅ :: ืคื™ืœื˜ืขืจ ืžืึธื“ื•ืœืข ืคึฟืึทืจ ืžืึทื ื™ืคึผื™ืึทืœื™ื™ื˜ื™ื ื’ ื ืขืฅ ืคึผืึทืงืึทื˜ ืคื™ืœื˜ืขืจืก. ืฆื•ื’ืขืœื™ื™ื’ื˜ ื‘ื™ื™ึทืฉืคึผื™ืœ rust_netfilter.rs ืžื™ื˜ ืึท ืคื™ืœื˜ืขืจ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืื™ืŸ ื“ื™ ืจื•ืกื˜ ืฉืคึผืจืึทืš.
  • ืฆื•ื’ืขื’ืขื‘ืŸ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ืึท ืคึผืฉื•ื˜ ืžื•ื˜ืขืงืก ืกืžื•ื˜ืขืงืก :: ืžื•ื˜ืขืงืก, ื•ื•ืึธืก ื˜ื•ื˜ ื ื™ืฉื˜ ื“ืึทืจืคืŸ ืคึผื™ื ื™ื ื’.
  • ืฆื•ื’ืขื’ืขื‘ืŸ ืึท NoWaitLock ืฉืœืึธืก ื•ื•ืึธืก ืงื™ื™ื ืžืึธืœ ื•ื•ืึทืจื˜ืŸ ืคึฟืึทืจ ืึท ืžืขืœื“ื•ื ื’, ืื•ืŸ ืื•ื™ื‘ ืขืก ืื™ื– ืคืึทืจื ื•ืžืขืŸ ื“ื•ืจืš ืืŸ ืื ื“ืขืจ ืคืึธื“ืขื, ืึท ื˜ืขื•ืช ืื™ื– ื’ืขืžืืœื“ืŸ ื•ื•ืขืŸ ืื™ืจ ืคึผืจื•ื•ื•ืŸ ืฆื• ืงืจื™ื’ืŸ ื“ืขื ืฉืœืึธืก ืึทื ืฉื˜ืึธื˜ ืคื•ืŸ ืกื˜ืึธืคึผืคึผื™ื ื’ ื“ื™ ืงืึทืœืœืขืจ.
  • ืฆื•ื’ืขื’ืขื‘ืŸ ืึท RawSpinLock ืฉืœืึธืก ื™ื™ื“ืขื ืึทืคื™ื™ื“ ืžื™ื˜ raw_spinlock_t ืื™ืŸ ื“ื™ ืงืขืจืŸ, ื’ืขื•ื•ืขื ื“ื˜ ืฆื• ืกืขืงืฉืึทื ื– ื•ื•ืึธืก ืงืขื ืขืŸ ื ื™ืฉื˜ ื–ื™ื™ืŸ ืœื™ื™ื“ื™ืง.
  • ืฆื•ื’ืขื’ืขื‘ืŸ ARef ื˜ื™ืคึผ ืคึฟืึทืจ ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ืฆื• ืึท ื›ื™ื™ืคืขืฅ ืฆื• ื•ื•ืึธืก ื“ื™ ืจืขืคึฟืขืจืขื ืฅ ืงืึทื•ื ื˜ื™ื ื’ ืžืขืงืึทื ื™ื–ืึทื ืื™ื– ื’ืขื•ื•ืขื ื“ื˜ (ืฉื˜ืขื ื“ื™ืง ืจืขืงืึธื•ื ื˜ืขื“).
  • ื“ื™ rustc_codegen_gcc ื‘ืึทืงืขื ื“, ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื ื•ืฆืŸ ื“ื™ libgccjit ื‘ื™ื‘ืœื™ืึธื˜ืขืง ืคื•ืŸ ื“ื™ GCC ืคึผืจื•ื™ืขืงื˜ ื•ื•ื™ ืึท ืงืึธื“ ื’ืขื ืขืจืึทื˜ืึธืจ ืื™ืŸ rustc ืฆื• ืฆื•ืฉื˜ืขืœืŸ rustc ืฉื˜ื™ืฆืŸ ืคึฟืึทืจ ืึทืจืงืึทื˜ืขืงื˜ืฉืขืจื– ืื•ืŸ ืึธืคึผื˜ื™ืžื™ื–ืึทื˜ื™ืึธื ืก ื‘ื ื™ืžืฆื ืื™ืŸ GCC, ื”ืื˜ ื™ืžืคึผืœืึทืžืขื ืึทื“ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื‘ืึธืึธื˜ืกื˜ืจืึทืคึผื™ื ื’ ื“ื™ Rustc ืงืึทืžืคึผื™ื™ืœืขืจ. ืงืึทืžืคึผื™ื™ืœืขืจ ื”ืขื›ืขืจื•ื ื’ ืžื™ื˜ืœ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื ื•ืฆืŸ ืึท GCC-ื‘ืื–ื™ืจื˜ ืงืึธื“ ื’ืขื ืขืจืึทื˜ืึธืจ ืื™ืŸ Rustc ืฆื• ื‘ื•ื™ืขืŸ ื“ื™ Rustc ืงืึทืžืคึผื™ื™ืœืขืจ ื–ื™ืš. ืื™ืŸ ืึทื“ื™ืฉืึทืŸ, ื“ื™ ืœืขืฆื˜ืข ืžืขืœื“ื•ื ื’ ืคื•ืŸ GCC 12.1 ื›ื•ืœืœ ืคื™ืงืกื™ื– ืฆื• libgccjit ื ื™ื™ื˜ื™ืง ืคึฟืึทืจ rustc_codegen_gcc ืฆื• ืึทืจื‘ืขื˜ืŸ ืจื™ื›ื˜ื™ืง. ืคึผืจืขืคึผืขืจื™ื™ืฉืึทื ื– ื–ืขื ืขืŸ ืึทื ื“ืขืจื•ื•ื™ื™ ืฆื• ืฆื•ืฉื˜ืขืœืŸ ื“ื™ ืคื™ื™ื™ืงื™ื™ื˜ ืฆื• ื™ื ืกื˜ืึทืœื™ืจืŸ rustc_codegen_gcc ื ื™ืฆืŸ ื“ื™ ืจื•ืกื˜ืึธืคึผ ื ื•ืฆืŸ.
  • ื“ื™ ืคึผืจืึธื’ืจืขืก ืื™ืŸ ื“ืขืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ืคื•ืŸ ื“ื™ GCC ืคืจืึธื ื˜ืขื ื“ ื’ืงืงืจืก ืžื™ื˜ ื“ื™ ื™ืžืคึผืœืึทืžืขื ื˜ื™ื™ืฉืึทืŸ ืคื•ืŸ ื“ื™ Rust ืฉืคึผืจืึทืš ืงืึทืžืคึผื™ื™ืœืขืจ ื‘ืื–ื™ืจื˜ ืื•ื™ืฃ GCC ืื™ื– ื‘ืืžืขืจืงื˜. ืขืก ื–ืขื ืขืŸ ื“ืขืจื•ื•ื™ื™ึทืœ ืฆื•ื•ื™ื™ ืคื•ืœ-ืฆื™ื™ื˜ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ืืจื‘ืขื˜ืŸ ืื•ื™ืฃ gccrs.

ืฆื•ืจื™ืงืจื•ืคืŸ ืึทื– ื“ื™ ืคืืจื’ืขืœื™ื™ื’ื˜ ืขื ื“ืขืจื•ื ื’ืขืŸ ืžืึทื›ืŸ ืขืก ืžืขื’ืœืขืš ืฆื• ื ื•ืฆืŸ Rust ื•ื•ื™ ืึท ืฆื•ื•ื™ื™ื˜ ืฉืคึผืจืึทืš ืคึฟืึทืจ ื“ืขื•ื•ืขืœืึธืคึผื™ื ื’ ื“ืจื™ื•ื•ืขืจืก ืื•ืŸ ืงืขืจืŸ ืžืึทื“ื–ืฉื•ืœื–. ื–ืฉืึทื•ื•ืขืจ ืฉื˜ื™ืฆืŸ ืื™ื– ื“ืขืจืœืื ื’ื˜ ื•ื•ื™ ืึทืŸ ืึธืคึผืฆื™ืข ื•ื•ืึธืก ืื™ื– ื ื™ืฉื˜ ืขื ื™ื™ื‘ืึทืœื“ ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜ ืื•ืŸ ื˜ื•ื˜ ื ื™ืฉื˜ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ืŸ ื–ืฉืึทื•ื•ืขืจ ื™ื ืงืœื•ื“ืขื“ ื•ื•ื™ ืึท ืคืืจืœืื ื’ื˜ ื‘ื•ื™ืขืŸ ื“ืขืคึผืขื ื“ืขื ืกื™ ืคึฟืึทืจ ื“ื™ ืงืขืจืŸ. ื ื™ืฆืŸ ืจื•ืกื˜ ืคึฟืึทืจ ืฉืึธืคืขืจ ืึทื ื˜ื•ื•ื™ืงืœื•ื ื’ ื•ื•ืขื˜ ืœืึธื–ืŸ ืื™ืจ ืฆื• ืฉืึทืคึฟืŸ ืกืึทืคืขืจ ืื•ืŸ ื‘ืขืกืขืจ ื“ืจื™ื•ื•ืขืจืก ืžื™ื˜ ืžื™ื ื™ืžืึทืœ ืžื™, ืคืจื™ื™ ืคื•ืŸ ืคึผืจืึธื‘ืœืขืžืก ืึทื–ืึท ื•ื•ื™ ื–ื›ึผืจื•ืŸ ืึทืงืกืขืก ื ืึธืš ืคืจื™ื™, ื ืึทืœ ื˜ื™ื™ึทื˜ืœ ื“ื™ืคืขืจืึทื ืกื™ื– ืื•ืŸ ื‘ืึทืคืขืจ ืึธื•ื•ื•ืขืจืจืึทื ื–.

ื–ืฉืึทื•ื•ืขืจ ืขื ืคืึธืจืกื™ื– ื–ื™ืงืึธืจืŸ ื–ื™ื›ืขืจืงื™ื™ึทื˜ ืื™ืŸ ื“ื™ ืงืึทืžืคึผื™ื™ืœื™ื ื’ ืฆื™ื™ื˜ ื“ื•ืจืš ืจืขืคึฟืขืจืขื ืฅ ืงืึธื ื˜ืจืึธืœื™ืจื•ื ื’, ืึธื‘ื“ื–ืฉืขืงื˜ ืึธื•ื ืขืจืฉื™ืคึผ ืื•ืŸ ืึทื‘ื“ื–ืฉืขืงืฅ ืœืขื‘ืŸ ื˜ืจืึทืงื™ื ื’ (ืกืงืึธืคึผืขืก), ืื•ืŸ ื“ื•ืจืš ื™ื•ื•ืึทืœื™ื•ื™ื™ื˜ื™ื ื’ ื“ื™ ืจื™ื›ื˜ื™ืง ื–ื™ืงืึธืจืŸ ืึทืงืกืขืก ืื™ืŸ ืจื•ื ื˜ื™ืžืข. ื–ืฉืึทื•ื•ืขืจ ืื•ื™ืš ืคึผืจืึธื•ื•ื™ื“ืขืก ืฉื•ืฅ ืงืขื’ืŸ ื™ื ื˜ืึทื“ื–ืฉืขืจ ืึธื•ื•ื•ืขืจืคืœืึธื•ื–, ืจื™ืงื•ื•ื™ื™ืขืจื– ืึทื– ื“ื™ ื•ื•ืขืจื™ืึทื‘ืึทืœ ื•ื•ืึทืœื•ืขืก ื–ืขื ืขืŸ ื™ื ื™ื˜ื™ืึทืœื™ื™ื–ื“ ืื™ื™ื“ืขืจ ื ื•ืฆืŸ, ื”ืื˜ ื‘ืขืกืขืจ ื˜ืขื•ืช ื”ืึทื ื“ืœื™ื ื’ ืื™ืŸ ื“ืขืจ ื ืึธืจืžืึทืœ ื‘ื™ื‘ืœื™ืึธื˜ืขืง, ื ื™ืฆื˜ ื“ืขื ื‘ืึทื’ืจื™ืฃ ืคื•ืŸ ื™ืžืคึผื™ื•ืึทื˜ืึทื‘ืึทืœ ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ืื•ืŸ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ื“ื•ืจืš ืคืขืœื™ืงื™ื™ึทื˜, ืื•ืŸ ืึธืคืคืขืจืก ืฉื˜ืึทืจืง ืกื˜ืึทื˜ื™ืง ื˜ื™ื™ืคึผื™ื ื’ ืฆื• ืžื™ื ืึทืžื™ื™ื– ืœืึทื“ื–ืฉื™ืงืึทืœ ืขืจืจืึธืจืก.

ืžืงื•ืจ: opennet.ru

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’