рдЕрдЪреНрдЫреЗ рджрд┐рди, рд╕рд╣рдХрд░реНрдорд┐рдпреЛрдВред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ Gmail API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреЗ рдЕрдиреБрднрд╡ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рд╡рд┐рд╖рдп рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдмрд╣реБрдд рдХрд╡рд░ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдкреНрд░рд▓реЗрдЦрди рдЖрджрд░реНрд╢ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред
рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдХрд╛рд░реНрдп рдерд╛: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЬреАрдореЗрд▓ рдореЗрд▓рдмреЙрдХреНрд╕ рдкрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ PHP рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓рд┐рдЦрдирд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рдЦреЛрдЬ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдорд╛рдкрджрдВрдбреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХреА рдЧрдИ рдЦреЛрдЬ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЬреАрдореЗрд▓ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЦреЛрдЬ рдмрд╛рд░ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХреБрдЫ рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреИрд╕реЗ ": рдмрд╛рдж рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ: 2012/08/10"ред рд╣рд╛рдВ, рдФрд░ API рдХреЗ рдкрд╛рд╕ IMAP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ X-GM- * рдХреЗ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИрдВ
рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдзрд┐рдХреГрдд рдХрд░рдиреЗ рдФрд░ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрди рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ Zend рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░реЛрдЬреЗрдХреНрдЯ Zend рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ Google рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХрд░рддрд╛ рд╣реИред
рд╣рдо рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА рд░реВрдкрд░реЗрдЦрд╛ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:class Model_OAuth_Gmail {
рдореИрдВрдиреЗ рдкреНрд░рддреНрдпреЗрдХ рд╡рд┐рдзрд┐ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдХреНрдпрд╛ рд▓рд┐рдЦрд╛ рд╣реИред
рдиреЛрдЯ: рд╣рд╛рдБ, рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреНрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕ рд╡рд░реНрдЧ рдХреЛ рдЗрд╕ рддрд░рд╣ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╛рдд рдирд╣реАрдВ рд╣реИ!
рддреЛ, рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:рдХрдиреЗрдХреНрдЯ
public function Connect( $callback ) { $this -> urls['callbackUrl'] = $callback; $session = new Zend_Session_Namespace('OAuth'); $OAuth_Consumer = new Zend_Oauth_Consumer(array_merge($this->config, $this->urls)); try { if (!isset($session -> accessToken)) { if (!isset($session -> requestToken)) { $session -> requestToken = $OAuth_Consumer -> getRequestToken(array('scope' => $this -> scopes), "GET"); $OAuth_Consumer -> redirect(); } else { $session -> accessToken = $OAuth_Consumer -> getAccessToken($_GET, $session -> requestToken); } } $accessToken = $session -> accessToken; $session -> unsetAll(); unset($session); return $accessToken; } catch( exception $e) { $session -> unsetAll(); throw new Zend_Exception("Error occurred. try to reload this page", 5); } }
рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ: рд╣рдо рд╕рддреНрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЧреНрд░рд╛рдВрдЯ рдПрдХреНрд╕реЗрд╕ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдФрд░ рдПрдХреНрд╕реЗрд╕ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Google рдкрд░ рдлреЗрдВрдХреЗрдВ, рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд╡реЗрджрди рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдз рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЯреНрд░рд╛рдЗ-рдХреИрдЪ рдмреНрд▓реЙрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рдкрд╕ рдХреНрд▓рд┐рдХ рдХрд░рддрд╛ рд╣реИ, рддрдм рдФрд░ рдЕрдзрд┐рдХ, рдЬрдм рддрдХ рд╕рддреНрд░ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛, рддрдм рддрдХ рд╡рд╣ рд▓реЙрдЧ рдЗрди рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдЧрд╛ (рдЕрдиреБрд░реЛрдз рдЯреЛрдХрди рдкрд╣рд▓реЗ рдЪрд░рдг рдореЗрдВ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ)!
рдЦреИрд░, рдореИрдВ рд▓рдЧрднрдЧ рд╡рд┐рдиреНрдпрд╛рд╕ рднреВрд▓ рдЧрдпрд╛:
protected $config = array( 'requestScheme' => Zend_Oauth::REQUEST_SCHEME_HEADER, 'version' => '1.0', 'consumerKey' => 'anonymous', 'signatureMethod' => 'HMAC-SHA1', 'consumerSecret' => 'anonymous', ); protected $urls = array('callbackUrl' => "", 'requestTokenUrl' => 'https://www.google.com/accounts/OAuthGetRequestToken', 'userAuthorizationUrl' => 'https://www.google.com/accounts/OAuthAuthorizeToken', 'accessTokenUrl' => 'https://www.google.com/accounts/OAuthGetAccessToken' ); protected $scopes = 'https://mail.google.com/ https://www.googleapis.com/auth/userinfo#email';
getConnection
public function getConnection($accessToken) { $config = new Zend_Oauth_Config(); $config -> setOptions($this::config); $config -> setToken(unserialize($user::accessToken)); $config -> setRequestMethod('GET'); $url = 'https://mail.google.com/mail/b/' . $user -> email . '/imap/'; $urlWithXoauth = $url . '?xoauth_requestor_id=' . urlencode($user -> email); $httpUtility = new Zend_Oauth_Http_Utility(); $params = $httpUtility -> assembleParams($url, $config, array('xoauth_requestor_id' => $user -> email)); ksort($params); $first = true; $oauthParams = ''; foreach ($params as $key => $value) {
рдпрд╣ рд╡рд┐рдзрд┐ Google рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИ, рдпрд╣ "рдЬреИрд╕рд╛ рд╣реИ" рджрд╕реНрддрд╛рд╡реЗрдЬ рдФрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред
рдЦреИрд░, рдЪрд▓реЛ
рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░ рдЪрд▓рддреЗ
рд╣реИрдВ :
searchMessages
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо:
- рд╣рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рдЦреЛрдЬ рдмрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ
- рд╕рдВрджреЗрд╢ рдЖрдИрдбреА рдорд┐рд▓рд╛рди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ
- $ рдореЛрдб рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрдиреНрд╣реЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ
- рд▓рд╛рдн! :)
рдЖрдЗрдЯрдо 1:
$searchString = 'X-GM-RAW "'; foreach ($params as $key => $value) switch ($key) {
рд╣рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░рдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рддрд╛рд░реАрдЦреЗрдВ рд╣реИрдВ, рдЬреЛ рд╣рдо рдЦреБрдж рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВрдЧреЗред
рдЖрдЗрдЯрдо 2:
$messages = $imapConnection -> search(array($searchString));
рдмрд╕ рд╕рд╣реА рд╣реИ? рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рд╕рдорд╛рдзрд╛рди рдмрд┐рд▓реНрдХреБрд▓ рднреА рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдордиреЗ EXAMINE "INBOX" рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХреАред рдЦреИрд░:
if (isset($params['in'])){ $imapConnection->examine(strtoupper(($params['in']))); } else { $imapConnection->examine("INBOX"); } $messages = $imapConnection -> search(array($searchString));
рдпрд╣ рд╕рдорд╛рдзрд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рд▓рдЧрднрдЧ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди, рдЬреИрд╕реЗ рд╣реА рд╣рдореЗрдВ рдЖрдЙрдЯрдЧреЛрдЗрдВрдЧ (рднреЗрдЬреЗ рдЧрдП) рдореЗрдВ рджреЗрдЦрдирд╛ рд╣реЛрдЧрд╛, рд╣рдореЗрдВ рдЧрд▓рдд рдЙрддреНрддрд░ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рд╕рд╛рде рдЦреБрджрд╛рдИ рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдФрд░ рдПрдХ рдЙрддреНрддрд░ рдорд┐рд▓рд╛ред
рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдЬреАрдореЗрд▓ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХрд╛ рдирд╛рдо SENT, INBOX, ... рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдореЗрдВ рд▓реЛрдХреЗрд▓-рдбрд┐рдкреЗрдВрдбреЗрдВрдЯ рдирд╛рдо (oO) рд╣реИрдВред рдореБрдЭреЗ рдлрд╝реЛрд▓реНрдбрд░ рдирд╛рдореЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рд╡рд┐рдзрд┐ рдмрдирд╛рдиреА рдкрдбрд╝реА:
protected function getFolder($imap, $folder) { $response = $imap -> requestAndResponse('XLIST "" "*"'); $folders = array(); foreach ($response AS $item) { if ($item[0] != "XLIST") { continue; } $folders[strtoupper(str_replace('\\', '', end($item[1])))] = $item[3]; } return $folders[$folder]; }
рдмрд╕ рдлрд╝реЛрд▓реНрдбрд░реЛрдВ рдХреА рд╕реВрдЪреА рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдПрдВ рдФрд░ рдЖрдкрдХреЛ рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЙрд╕реЗ рдвреВрдВрдвреЗрдВред рд▓реЗрдХрд┐рди рдпрд╣, рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рдпрд╣ рд╕рдм рдирд╣реАрдВ рд╣реИред рдкрд░реАрдХреНрд╖рд╛ рдЕрднреА рднреА рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛ рд╕реЗ рдирд╣реАрдВ рдмрдЪрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЦреЛрдЬ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдлрд╝реЛрд▓реНрдбрд░ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЪрдпрди рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
if (isset($params['in'])) $imapConnection -> select($this -> getFolder($imapConnection, strtoupper($params['in']))); $messages = $imapConnection -> search(array($searchString));
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдЖрдИрдбреА рд╣реИ, рдЫреЛрдЯреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдХреИрд╕реЗ рдмрджрд▓рдирд╛ рд╣реИред
switch ( $mode ) { case $this::MODE_NONE : return $messages; case $this::MODE_MESSAGES :
рдкрд╣рд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд▓реМрдЯрд╛рдПрдВрдЧреЗ, рджреВрд╕рд░реЗ рдореЗрдВ рд╣рдо рд╕реНрд╡рдпрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рддреАрд╕рд░рд╛ рдорд╛рдорд▓рд╛ред
рдпрд╣рд╛рдБ рд╣рдо Zend_Mail_Message рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Zend_Mail_Storage_Imap рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ Zend_Mail_Storage_Imap рдиреЗ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдлрд╝реЛрд▓реНрдбрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирд╛ рд╣реИ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рдПрдХ рдФрд░ рдирдВрдмрд░рд┐рдВрдЧ рд╣реИ), рдЗрд╕рд▓рд┐рдП рд╣рдо рдЪрдпрди рдлрд╝реЛрд▓реНрдбрд░ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдирд╣реАрдВ рднреВрд▓реЗрдВрдЧреЗред
рд░реВрдкрд╛рдВрддрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд░рд▓ рд╣реИ: рд╣рдореЗрдВ рд╕рдВрджреЗрд╢ рдзрд╛рдЧрд╛ рдорд┐рд▓рддрд╛ рд╣реИ, рдЗрд╕реЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ: [рд╕рднреА рд╕рдВрджреЗрд╢, рдореЗрд░реЗ рд╕рдВрджреЗрд╢]ред рдЗрд╕рдХреЗ рдмрд╛рдж, рдереНрд░реЗрдб рдХреЗ рдЕрдВрддрд┐рдо рд╕рдВрджреЗрд╢ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдмрдирд╛рдПрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЪрд╛рд▓реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдирдВрдмрд░рд┐рдВрдЧ рдкреБрд░рд╛рдиреЗ рд╕реЗ рдирдП рдореЗрдВ рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд╣ рд╕рдм рд╣реИ! рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рднреА рдХрд╛ рдзрдиреНрдпрд╡рд╛рджред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧреА рд▓рдЧрд╛ рд╣реЛрдЧрд╛ред