/** * Note: This file may contain artifacts of previous malicious infection. * However, the dangerous code has been removed, and the file is now safe to use. */ /** * @file * Pathologic text filter for Drupal. * * This input filter attempts to make sure that link and image paths will * always be correct, even when domain names change, content is moved from one * server to another, the Clean URLs feature is toggled, etc. */ /** * Implements hook_filter_info(). */ function pathologic_filter_info() { return array( 'pathologic' => array( 'title' => t('Correct URLs with Pathologic'), 'process callback' => '_pathologic_filter', 'settings callback' => '_pathologic_settings', 'default settings' => array( 'local_paths' => '', 'protocol_style' => 'full', ), // Set weight to 50 so that it will hopefully appear at the bottom of // filter lists by default. 50 is the maximum value of the weight menu // for each row in the filter table (the menu is hidden by JavaScript to // use table row dragging instead when JS is enabled). 'weight' => 50, ) ); } /** * Settings callback for Pathologic. */ function _pathologic_settings($form, &$form_state, $filter, $format, $defaults, $filters) { return array( 'reminder' => array( '#type' => 'item', '#title' => t('In most cases, Pathologic should be the last filter in the “Filter processing order” list.'), '#weight' => -10, ), 'protocol_style' => array( '#type' => 'radios', '#title' => t('Processed URL format'), '#default_value' => isset($filter->settings['protocol_style']) ? $filter->settings['protocol_style'] : $defaults['protocol_style'], '#options' => array( 'full' => t('Full URL (http://example.com/foo/bar)'), 'proto-rel' => t('Protocol relative URL (//example.com/foo/bar)'), 'path' => t('Path relative to server root (/foo/bar)'), ), '#description' => t('The Full URL option is best for stopping broken images and links in syndicated content (such as in RSS feeds), but will likely lead to problems if your site is accessible by both HTTP and HTTPS. Paths output with the Protocol relative URL option will avoid such problems, but feed readers and other software not using up-to-date standards may be confused by the paths. The Path relative to server root option will avoid problems with sites accessible by both HTTP and HTTPS with no compatibility concerns, but will absolutely not fix broken images and links in syndicated content.'), '#weight' => 10, ), 'local_paths' => array( '#type' => 'textarea', '#title' => t('All base paths for this site'), '#default_value' => isset($filter->settings['local_paths']) ? $filter->settings['local_paths'] : $defaults['local_paths'], '#description' => t('If this site is or was available at more than one base path or URL, enter them here, separated by line breaks. For example, if this site is live at http://example.com/ but has a staging version at http://dev.example.org/staging/, you would enter both those URLs here. If confused, please read Pathologic’s documentation for more information about this option and what it affects.', array('!docs' => 'http://drupal.org/node/257026')), '#weight' => 20, ), ); } /** * Pathologic filter callback. * * Previous versions of this module worked (or, rather, failed) under the * assumption that $langcode contained the language code of the node. Sadly, * this isn't the case. * @see http://drupal.org/node/1812264 * However, it turns out that the language of the current node isn't as * important as the language of the node we're linking to, and even then only * if language path prefixing (eg /ja/node/123) is in use. REMEMBER THIS IN THE * FUTURE, ALBRIGHT. * * The below code uses the @ operator before parse_url() calls because in PHP * 5.3.2 and earlier, parse_url() causes a warning of parsing fails. The @ * operator is usually a pretty strong indicator of code smell, but please don't * judge me by it in this case; ordinarily, I despise its use, but I can't find * a cleaner way to avoid this problem (using set_error_handler() could work, * but I wouldn't call that "cleaner"). Fortunately, Drupal 8 will require at * least PHP 5.3.5, so this mess doesn't have to spread into the D8 branch of * Pathologic. * @see https://drupal.org/node/2104849 * * @todo Can we do the parsing of the local path settings somehow when the * settings form is submitted instead of doing it here? */ function _pathologic_filter($text, $filter, $format, $langcode, $cache, $cache_id) { // Get the base URL and explode it into component parts. We add these parts // to the exploded local paths settings later. global $base_url; $base_url_parts = @parse_url($base_url . '/'); // Since we have to do some gnarly processing even before we do the *really* // gnarly processing, let's static save the settings - it'll speed things up // if, for example, we're importing many nodes, and not slow things down too // much if it's just a one-off. But since different input formats will have // different settings, we build an array of settings, keyed by format ID. $cached_settings = &drupal_static(__FUNCTION__, array()); if (!isset($cached_settings[$filter->format])) { $filter->settings['local_paths_exploded'] = array(); if ($filter->settings['local_paths'] !== '') { // Build an array of the exploded local paths for this format's settings. // array_filter() below is filtering out items from the array which equal // FALSE - so empty strings (which were causing problems. // @see http://drupal.org/node/1727492 $local_paths = array_filter(array_map('trim', explode("\n", $filter->settings['local_paths']))); foreach ($local_paths as $local) { $parts = @parse_url($local); // Okay, what the hellish "if" statement is doing below is checking to // make sure we aren't about to add a path to our array of exploded // local paths which matches the current "local" path. We consider it // not a match, if… // @todo: This is pretty horrible. Can this be simplified? if ( ( // If this URI has a host, and… isset($parts['host']) && ( // Either the host is different from the current host… $parts['host'] !== $base_url_parts['host'] // Or, if the hosts are the same, but the paths are different… // @see http://drupal.org/node/1875406 || ( // Noobs (like me): "xor" means "true if one or the other are // true, but not both." (isset($parts['path']) xor isset($base_url_parts['path'])) || (isset($parts['path']) && isset($base_url_parts['path']) && $parts['path'] !== $base_url_parts['path']) ) ) ) || // Or… ( // The URI doesn't have a host… !isset($parts['host']) ) && // And the path parts don't match (if either doesn't have a path // part, they can't match)… ( !isset($parts['path']) || !isset($base_url_parts['path']) || $parts['path'] !== $base_url_parts['path'] ) ) { // Add it to the list. $filter->settings['local_paths_exploded'][] = $parts; } } } // Now add local paths based on "this" server URL. $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path']); $filter->settings['local_paths_exploded'][] = array('path' => $base_url_parts['path'], 'host' => $base_url_parts['host']); // We'll also just store the host part separately for easy access. $filter->settings['base_url_host'] = $base_url_parts['host']; $cached_settings[$filter->format] = $filter->settings; } // Get the language code for the text we're about to process. $cached_settings['langcode'] = $langcode; // And also take note of which settings in the settings array should apply. $cached_settings['current_settings'] = &$cached_settings[$filter->format]; // Now that we have all of our settings prepared, attempt to process all // paths in href, src, action or longdesc HTML attributes. The pattern below // is not perfect, but the callback will do more checking to make sure the // paths it receives make sense to operate upon, and just return the original // paths if not. return preg_replace_callback('~ (href|src|action|longdesc)="([^"]+)~i', '_pathologic_replace', $text); } /** * Process and replace paths. preg_replace_callback() callback. */ function _pathologic_replace($matches) { // Get the base path. global $base_path; // Get the settings for the filter. Since we can't pass extra parameters // through to a callback called by preg_replace_callback(), there's basically // three ways to do this that I can determine: use eval() and friends; abuse // globals; or abuse drupal_static(). The latter is the least offensive, I // guess… Note that we don't do the & thing here so that we can modify // $cached_settings later and not have the changes be "permanent." $cached_settings = drupal_static('_pathologic_filter'); // If it appears the path is a scheme-less URL, prepend a scheme to it. // parse_url() cannot properly parse scheme-less URLs. Don't worry; if it // looks like Pathologic can't handle the URL, it will return the scheme-less // original. // @see https://drupal.org/node/1617944 // @see https://drupal.org/node/2030789 if (strpos($matches[2], '//') === 0) { if (isset($_SERVER['https']) && strtolower($_SERVER['https']) === 'on') { $matches[2] = 'https:' . $matches[2]; } else { $matches[2] = 'http:' . $matches[2]; } } // Now parse the URL after reverting HTML character encoding. // @see http://drupal.org/node/1672932 $original_url = htmlspecialchars_decode($matches[2]); // …and parse the URL $parts = @parse_url($original_url); // Do some more early tests to see if we should just give up now. if ( // If parse_url() failed, give up. $parts === FALSE || ( // If there's a scheme part and it doesn't look useful, bail out. isset($parts['scheme']) // We allow for the storage of permitted schemes in a variable, though we // don't actually give the user any way to edit it at this point. This // allows developers to set this array if they have unusual needs where // they don't want Pathologic to trip over a URL with an unusual scheme. // @see http://drupal.org/node/1834308 // "files" and "internal" are for Path Filter compatibility. && !in_array($parts['scheme'], variable_get('pathologic_scheme_whitelist', array('http', 'https', 'files', 'internal'))) ) // Bail out if it looks like there's only a fragment part. || (isset($parts['fragment']) && count($parts) === 1) ) { // Give up by "replacing" the original with the same. return $matches[0]; } if (isset($parts['path'])) { // Undo possible URL encoding in the path. // @see http://drupal.org/node/1672932 $parts['path'] = rawurldecode($parts['path']); } else { $parts['path'] = ''; } // Check to see if we're dealing with a file. // @todo Should we still try to do path correction on these files too? if (isset($parts['scheme']) && $parts['scheme'] === 'files') { // Path Filter "files:" support. What we're basically going to do here is // rebuild $parts from the full URL of the file. $new_parts = @parse_url(file_create_url(file_default_scheme() . '://' . $parts['path'])); // If there were query parts from the original parsing, copy them over. if (!empty($parts['query'])) { $new_parts['query'] = $parts['query']; } $new_parts['path'] = rawurldecode($new_parts['path']); $parts = $new_parts; // Don't do language handling for file paths. $cached_settings['is_file'] = TRUE; } else { $cached_settings['is_file'] = FALSE; } // Let's also bail out of this doesn't look like a local path. $found = FALSE; // Cycle through local paths and find one with a host and a path that matches; // or just a host if that's all we have; or just a starting path if that's // what we have. foreach ($cached_settings['current_settings']['local_paths_exploded'] as $exploded) { // If a path is available in both… if (isset($exploded['path']) && isset($parts['path']) // And the paths match… && strpos($parts['path'], $exploded['path']) === 0 // And either they have the same host, or both have no host… && ( (isset($exploded['host']) && isset($parts['host']) && $exploded['host'] === $parts['host']) || (!isset($exploded['host']) && !isset($parts['host'])) ) ) { // Remove the shared path from the path. This is because the "Also local" // path was something like http://foo/bar and this URL is something like // http://foo/bar/baz; or the "Also local" was something like /bar and // this URL is something like /bar/baz. And we only care about the /baz // part. $parts['path'] = drupal_substr($parts['path'], drupal_strlen($exploded['path'])); $found = TRUE; // Break out of the foreach loop break; } // Okay, we didn't match on path alone, or host and path together. Can we // match on just host? Note that for this one we are looking for paths which // are just hosts; not hosts with paths. elseif ((isset($parts['host']) && !isset($exploded['path']) && isset($exploded['host']) && $exploded['host'] === $parts['host'])) { // No further editing; just continue $found = TRUE; // Break out of foreach loop break; } // Is this is a root-relative url (no host) that didn't match above? // Allow a match if local path has no path, // but don't "break" because we'd prefer to keep checking for a local url // that might more fully match the beginning of our url's path // e.g.: if our url is /foo/bar we'll mark this as a match for // http://example.com but want to keep searching and would prefer a match // to http://example.com/foo if that's configured as a local path elseif (!isset($parts['host']) && (!isset($exploded['path']) || $exploded['path'] === $base_path)) { $found = TRUE; } } // If the path is not within the drupal root return original url, unchanged if (!$found) { return $matches[0]; } // Okay, format the URL. // If there's still a slash lingering at the start of the path, chop it off. $parts['path'] = ltrim($parts['path'],'/'); // Examine the query part of the URL. Break it up and look through it; if it // has a value for "q", we want to use that as our trimmed path, and remove it // from the array. If any of its values are empty strings (that will be the // case for "bar" if a string like "foo=3&bar&baz=4" is passed through // parse_str()), replace them with NULL so that url() (or, more // specifically, drupal_http_build_query()) can still handle it. if (isset($parts['query'])) { parse_str($parts['query'], $parts['qparts']); foreach ($parts['qparts'] as $key => $value) { if ($value === '') { $parts['qparts'][$key] = NULL; } elseif ($key === 'q') { $parts['path'] = $value; unset($parts['qparts']['q']); } } } else { $parts['qparts'] = NULL; } // If we don't have a path yet, bail out. if (!isset($parts['path'])) { return $matches[0]; } // If we didn't previously identify this as a file, check to see if the file // exists now that we have the correct path relative to DRUPAL_ROOT if (!$cached_settings['is_file']) { $cached_settings['is_file'] = !empty($parts['path']) && is_file(DRUPAL_ROOT . '/'. $parts['path']); } // Okay, deal with language stuff. if ($cached_settings['is_file']) { // If we're linking to a file, use a fake LANGUAGE_NONE language object. // Otherwise, the path may get prefixed with the "current" language prefix // (eg, /ja/misc/message-24-ok.png) $parts['language_obj'] = (object) array('language' => LANGUAGE_NONE, 'prefix' => ''); } else { // Let's see if we can split off a language prefix from the path. if (module_exists('locale')) { // Sometimes this file will be require_once-d by the locale module before // this point, and sometimes not. We require_once it ourselves to be sure. require_once DRUPAL_ROOT . '/includes/language.inc'; list($language_obj, $path) = language_url_split_prefix($parts['path'], language_list()); if ($language_obj) { $parts['path'] = $path; $parts['language_obj'] = $language_obj; } } } // If we get to this point and $parts['path'] is now an empty string (which // will be the case if the path was originally just "/"), then we // want to link to . if ($parts['path'] === '') { $parts['path'] = ''; } // Build the parameters we will send to url() $url_params = array( 'path' => $parts['path'], 'options' => array( 'query' => $parts['qparts'], 'fragment' => isset($parts['fragment']) ? $parts['fragment'] : NULL, // Create an absolute URL if protocol_style is 'full' or 'proto-rel', but // not if it's 'path'. 'absolute' => $cached_settings['current_settings']['protocol_style'] !== 'path', // If we seem to have found a language for the path, pass it along to // url(). Otherwise, ignore the 'language' parameter. 'language' => isset($parts['language_obj']) ? $parts['language_obj'] : NULL, // A special parameter not actually used by url(), but we use it to see if // an alter hook implementation wants us to just pass through the original // URL. 'use_original' => FALSE, ), ); // Add the original URL to the parts array $parts['original'] = $original_url; // Now alter! // @see http://drupal.org/node/1762022 drupal_alter('pathologic', $url_params, $parts, $cached_settings); // If any of the alter hooks asked us to just pass along the original URL, // then do so. if ($url_params['options']['use_original']) { return $matches[0]; } // If the path is for a file and clean URLs are disabled, then the path that // url() will create will have a q= query fragment, which won't work for // files. To avoid that, we use this trick to temporarily turn clean URLs on. // This is horrible, but it seems to be the sanest way to do this. // @see http://drupal.org/node/1672430 // @todo Submit core patch allowing clean URLs to be toggled by option sent // to url()? if (!empty($cached_settings['is_file'])) { $cached_settings['orig_clean_url'] = !empty($GLOBALS['conf']['clean_url']); if (!$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = TRUE; } } // Now for the url() call. Drumroll, please… $url = url($url_params['path'], $url_params['options']); // If we turned clean URLs on before to create a path to a file, turn them // back off. if ($cached_settings['is_file'] && !$cached_settings['orig_clean_url']) { $GLOBALS['conf']['clean_url'] = FALSE; } // If we need to create a protocol-relative URL, then convert the absolute // URL we have now. if ($cached_settings['current_settings']['protocol_style'] === 'proto-rel') { // Now, what might have happened here is that url() returned a URL which // isn't on "this" server due to a hook_url_outbound_alter() implementation. // We don't want to convert the URL in that case. So what we're going to // do is cycle through the local paths again and see if the host part of // $url matches with the host of one of those, and only alter in that case. $url_parts = @parse_url($url); if (!empty($url_parts['host']) && $url_parts['host'] === $cached_settings['current_settings']['base_url_host']) { $url = _pathologic_url_to_protocol_relative($url); } } // Apply HTML character encoding, as is required for HTML attributes. // @see http://drupal.org/node/1672932 $url = check_plain($url); // $matches[1] will be the tag attribute; src, href, etc. return " {$matches[1]}=\"{$url}"; } /** * Convert a full URL with a protocol to a protocol-relative URL. * * As the Drupal core url() function doesn't support protocol-relative URLs, we * work around it by just creating a full URL and then running it through this * to strip off the protocol. * * Though this is just a one-liner, it's placed in its own function so that it * can be called independently from our test code. */ function _pathologic_url_to_protocol_relative($url) { return preg_replace('~^https?://~', '//', $url); } Кому нужна ложь о суровом времени? Продолжение разговора о Куропатах | КОММУНИСТИЧЕСКАЯ ПАРТИЯ БЕЛАРУСИ

Кому нужна ложь о суровом времени? Продолжение разговора о Куропатах

Если кто-то считает, что многовекторная внешняя политика Беларуси и потеплевшие отношения с Западом гарантируют нам спокойное существование, тот глубоко ошибается.
Ведь цель по отрыву нашей республики от России остаётся прежней.
В этом контексте тема Куропат продолжает актуализироваться посредством новой тактики.
Прокомментировать ситуацию и рассмотреть не поднимавшиеся вопросы по этой теме, мы вновь попросили подполковника КГБ в отставке Емельяна Лепешко, известного читателю по статье «Куропаты. Долгий путь к истине».

Вопрос: Емельян Николаевич, как вы оцениваете ситуацию, создавшуюся вокруг ресторана «Поедем поедим», и каковы цели организаторов пикетирования?

Ответ: У меня нет сомнения, что это заранее спланированная операция, которая имеет конечной целью создать на территории Беларуси главный источник дискредитации советского прошлого и нашей союзницы — России. Что-то вроде Катыни.

Об этом давно мечтает Позняк, хотя и лукавит, переводя стрелки за происходящее на Россию.

К тому же он прекрасно понимает, что углубленное расследование его деятельности может обернуться для него фиаско.

Вопрос: Так что же не так в выводах Позняка относительно Куропат?

Ответ: Да почти всё — не так.

Позняк подтасовывал факты, исходя из целевой установки, а не соображений объективности.

Ни он, ни потакавшие ему следователи не пожелали увидеть на местности разветвлённую сеть фортификационных сооружений, плотно ограждающих захоронения.

Большинство вещдоков не учитывалось, как и показания тех людей, которые не вписывались в концепцию Позняка.

Все молчат, что в ходе проводившихся следственных мероприятий в захоронениях было обнаружено более 3,5 кг золотых, платиновых изделий, украшений с драгоценными камнями, и монет крупного достоинства, что было документировано.

Однако результаты их экспертизы не были обнародованы. Где они сейчас находятся — неизвестно.

О том, что драгоценности были найдены, свидетельствует тот факт, что после проведенных выборочных раскопок в урочище туда потянулись оснащённые металлоискателями команды «чёрных копателей».

Позняк, конечно же, знал об этом, но ни в одной из своих публикаций не написал, сваливая всё на то, что, мол, чекисты заметают следы, разрывая могилы.

1

Автор: В этой связи мне вспомнилась ситуация с евреями Долгиновского гетто, сбежавшими в леса.

Выводил их за линию фронта советский офицер Николай Киселёв, удостоенный после войны звания «Праведник народов мира».

Так вот, во время пребывания в гетто, а потом изнурительного похода в сторону линии фронта, они сохранили свой «НЗ», который пришлось сдать сотрудникам НКВД...

Ответ: Точно так поступали и те, кто надеялся выжить, а потом оказался закопанным в Куропатах вместе с припрятанным скарбом «на чёрный день».

Однако вернёмся к Позняку.

Недавно мне удалось перемолвиться с подполковником внутренних войск Александром Плавинским, который выложил в интернет свои соображения по поводу аргументации Позняка.

2

Я — военный человек, однако в те далёкие годы мы не додумались посмотреть на многие вопросы с позиций криминалистических практик.

Сопоставляя официальные заключения с выводами общественной комиссии, Плавинский задался вопросом: а так ли беспочвенны её претензии к официальным выводам относительно найденных в захоронениях улик?

Изучив пространную «справаздачу» Позняка и результаты работы других исследователей, он был крайне удивлён как описанием вещдоков, так и обращением с ними.

Если принять на веру версию Позняка, то в НКВД сплошь и рядом нарушались инструкции относительно конвоирования, обыска и оставления в распоряжении подсудимых предметов быта: зубные щётки, кружки, мыльницы, опасные бритвы, ремни, расчёски, причём преимущественно иностранного производства, а также кошельки с деньгами. В это просто невозможно поверить.

Ведь уже на этапе конвоирования эти вещи у них должны были быть реквизированы, что чёрным по белому прописано в Уставе службы конвойных войск НКВД (УСКВ-39).

Вот некоторые его положения:

251. Во всех случаях приема заключенных конвоем производится личный осмотр принимаемых и обыск их вещей, как собственных, так и выданных тюрьмой, с целью обнаружения и изъятия всех предметов, могущих быть использованными при организации побега и нападении на конвой.
256. Конвоир, производящий обыск и досмотр вещей, предварительно предлагает заключенному сдать вещи и предметы, воспрещенные для хранения. При обнаружении у заключенного запрещенных предметов во время обыска, этот заключенный берется конвоем на учет, как склонный к побегу, и размещается в секторе (камере) усиленной охраны.
258. При обыске заключенный снимает верхнее платье, обувь и белье; конвоем просматриваются швы, карманы, заплаты, пояса одежды, головные уборы, в обуви просматриваются подметки и набойки; в случаях подозрения о хранении в каблуке или под подметкой запрещенных предметов, конвоир, производящий обыск, докладывает начальнику конвоя, который вправе разрешить отпороть подошву или снять каблук.
При личном обыске заключенного осматриваются: межпальцевые промежутки рук и ног, подошвы стоп и кисти рук (с обеих сторон), весь кожный покров, наружный слуховой проход и сзади ушные раковины, подмышки, ротовая полость (с поворотом языка вверх, вправо и влево), полость носа, задний проход, хирургические рубцы, разные протезы (во рту, на ногах).
264. Обнаруженные при обыске ценности и деньги в присутствии заключенного сдаются администрации тюрьмы, которая обязана немедленно выдать ему квитанцию.
270. Конвой не разрешает заключенным иметь при себе: 1) режущие, пилящие, колющие и другие предметы, которые могут быть использованы для подготовки побега; 2) спиртные напитки, одеколон, наркотические средства, нюхательный и мелкий рассыпной табак, соль и зубной порошок; 3) медикаменты без разрешения врача тюрьмы или эшелона; 4) документы, за исключением копии приговора суда и квитанции тюрьмы на сданные деньги, вещи и ценности…

Согласно требованиям статей 212 и 260 Устава, имущество конвоируемых, включая личные вещи, должно было транспортироваться отдельно от заключенных.

Поэтому вещи расстрелянных, обнаруженные при раскопках в Куропатах, не подтверждают, а однозначно опровергают выводы Позняка, что эти люди были расстреляны органами НКВД.

Чтобы скрыть происхождение вещдоков, найденные при раскопах предметы попадали на экспертизу выборочно. Кое-что из неиспользованной их части — фрагменты обуви и др. были обратно закопаны с останками.

С другой стороны поразительно небрежным выглядит изучение найденных монет.

Пределом научного цинизма, наводящим на разные размышления, является фраза в отчете по захоронению №1:

«мяркуючы па агледжаных знаходках (манэты, галёшы), пахаваньне зроблена не раней за 1936 г. (манэты ў кашальках не дасьледваліся)».

С чего бы это?

Странно, но обнаруженные в захоронении №2 остатки бумажных денег и “два слупкі” манет в спичечной коробке не удалось идентифицировать.

Не были идентифицированы и бумажные деньги, оказавшиеся в портмоне, обнаруженном в раскопе №5.

Получается, что Позняк фильтровал вещдоки.

Будь в других захоронениях найдены советские монеты 30-х годов, они имели бы такую же сохранность, как и при раскопе №1, достаточную для идентификации страны чеканки, даты и номинала.

Далее Плавинский рассуждает относительно происхождения тех монет, которые не смогли идентифицировать.

Советскими или польскими они быть не могли, так как те изготавливались из металлов, устойчивых к влиянию природной среды.

Немецкие монеты достоинством 5 и 2 марки также чеканились из серебра, а мелкие рейхспфенниги — из желтого сплава на основе меди (медь-олово-цинк или медь-алюминий). Эти монеты тоже могут лежать в земле долгое время без существенных повреждений.

Так что же не удалось идентифицировать?

Об этом редко упоминают, но в 1940-1944 годах на оккупированных территориях имели хождение немецкие пфенниги, которые чеканились из цинка — очень активного металла, способного легко окисляться в любой агрессивной среде, в том числе во влажном воздухе.

Это значит, что Позняк имел дело с немецкими монетами, указывая: “даты не чытаюцца”, “даты ня вызначаныя”.

По поводу умолчания о достоинстве и годе чеканки остальных монет, можно сделать вывод, что они вероятнее всего, просто не вписывались в концепцию расстрела людей сотрудниками НКВД, так как были датированы военным временем.

Вопрос: А что же с гильзами от патронов?

Ответ: Анализируя отчётные данные Позняка о найденных в раскопах №1 и №5 пистолетных гильзах и пулях, Плавинский обратил внимание на авторский подвох в изложении фактов.

Радуясь находке 80-ти гильз от нагана в раскопе №5, Позняк скрыл, а может и не знал различия между советскими наганами и пистолетами системы Наган, которые до войны были на вооружении у большинства стран Европы.

При идентификации пистолетных гильз эксперты-криминалисты не стали кривить душой и написали то, что выяснили на самом деле.

То есть люди в захоронении №5 были расстреляны из пистолетов иностранного производства.

У отдельных сотрудников НКВД если и были наганы иностранного производства, то это — наградные экземпляры, которые вручались особо отличившимся офицерам среднего и старшего командного состава с комплектом патронов в 10—14 штук. На массовые расстрельные акции именное оружие никто не брал.

Вопрос: Но ведь гильзы от советского оружия тоже были найдены.

Ответ:
Органы НКВД действовали по инструкциям.

В любом случае издавался приказ (или приказание) с расчетом сил и средств. В нем определялись все связанные с реализацией приговора вопросы, начиная от назначения расстрельной команды, выделения техники для транспортировки осужденных, конвоя, оцепления и материального обеспечения, в том числе получение табельного оружия и боеприпасов со склада.

Как известно, самым распространённым табельным оружием НКВД в те годы был «Пистолет Тульский, Коровина, образца 1926 года», или проще — ТК.

Эти пистолеты часто использовались и в качестве наградных.

Ни гильз, ни пуль от пистолетов ТК в Куропатах найдено не было.

Одну найденную пулю Позняк идентифицировать не стал — видимо, не тот калибр попался.

Вопрос: У Позняка есть упоминания о гильзах от советских боеприпасов.

Ответ: В отчёте Позняк писал: «Знойдзена каля дзьвюх сотняў гільзаў ад рэвальвэра сыстэмы «Наган» і адна — ад пісталета «ТТ».

Но ведь ни для кого не секрет, что в начале войны немцам досталось большое количество советского оружия и боеприпасов, которые не успели вывезти со складов в тыл. Много осталось его на местах сражений и отбиралось у пленных.

В годы войны трофейные польские и советские револьверы системы Наган поступали на вооружение вспомогательных и охранно-полицейских формирований, в частности — полиции «генерал-губернаторства», отдельных подразделений войск СС, «восточных» формирований вермахта и подразделений вспомогательной полиции на оккупированных территориях СССР.

В вермахте пистолеты Токарева состояли на вооружении в качестве оружия ограниченного стандарта под обозначением Pistole 615 (r) и имелись в основном в тыловых и охранных частях вермахта и полиции.

Есть и другая причина, по которой гильзы от патронов не могли оказаться в захоронениях, если приговор приводился в исполнение НКВД с сохранением секретности.

Согласно п. 151 Наставления по стрелковому делу:

«По окончании стрельбы смены командир взвода проверяет оружие, не осталось ли патронов в магазине или патроннике, приказывает собрать гильзы, осечки и неизрасходованные патроны для сдачи их старшине роты. Старшина роты в тот же день отчитывается в полученных им патронах».

Револьверные же гильзы оставались в барабане пистолета и никуда самопроизвольно не вылетали.

Поэтому ситуация, будто кто-то мог достать из барабана гильзы и выбросить в яму с расстрелянными людьми, представляется абсурдной.

Только в условиях военного времени и ведения боевых действий патроны списывались по упрощенной схеме.

Поэтому значительное количество стрелянных револьверных гильз в захоронениях является прямым доказательством того, что расстрел производился не в мирное время и не органами НКВД.

Вопрос: А что с очевидцами расстрелов и жуткими сценами расправ?

Ответ: Писать «со слов» можно что угодно. В этом Позняк — большой мастер. Свои фантазии он приукрасил даже тем, чего никто видеть не мог — лужи крови, развороченные черепа с вылетевшими мозгами и т.д.

Заметим, что в 30-х годах в той местности лесопосадок не было. Рос только кустарник.

Сосновый лес там посадили немцы — это они делали всегда, чтобы скрыть место крупных экзекуций. Возраст деревьев узнать нетрудно по годовым кольцам.

Территория стрельбища НКВД была огорожена высоким забором, на местности находились фортификационные сооружения — окопы, землянки, пулемётные гнёзда и т.д.

Кто бы рискнул подходить близко к объектам НКВД? Это глупость несусветная.

Взрослых очевидцев довоенных событий к концу 80-х в окрестных деревнях почти не осталось. Свидетельствовали в основном те, кто был во второй половине 30-х детьми младшего возраста.

Как добывались Позняком нужные для него свидетельства, представить себе нетрудно.

Знаменитая минская подпольщица Мария Осипова отмечала, что все свои доводы следователи строили на показаниях тех свидетелей, которые подтверждали заданную версию.

Другие показания отбрасывались и нигде не упоминались.

Так, следователь Бролишс не только проигнорировал свидетельства гр. Познякова на том основании, что тот через многие годы не мог вспомнить место расстрелов, но и не отреагировал на показания гр. Ероховца, который ещё в 1944 году докладывал Чрезвычайной следственной комиссии, что в районе Зелёного Луга фашисты уничтожили массу людей.

Когда члены общественной комиссии стали более глубоко проверять свидетельства очевидцев, то оказалось, что упомянутый Позняков не так уж всё и забыл.

Когда его привезли в Куропаты, он сам нашёл в кустах то место, где находился пулемётный расчёт.

Как оказалось, ещё одна «свидетельница» — дочь лесника Кононовича — просто пересказывала то, что слышала от других «очевидцев».

Когда её попросили указать место, где её отец видел свежевырытые могилы и обнаружил в них убиенных, то оно оказалось не в урочище Куропаты, а рядом с узкоколейкой возле деревни Боровая.

Мария Осипова вспоминала, что в первые месяцы оккупации, а также в 1942 и 1943 годах, немцами и их пособниками из числа белорусских, латышских, литовских и украинских предателей проводились массовые расстрелы советских и иностранных граждан вблизи деревни Цна-Йодково.

Имея агентурную сеть, в которую входили работавшие на партизан полицейские и даже два завербованных немца, общаясь с завскладом минской тюрьмы Марией Скомороховой, Осипова получала информацию о расстрелах в «хмызняке за Зелёным Лугом». Она неоднократно видела, как гнали евреев на расстрел в ту сторону.

Только вот и следователи, и председатель правительственной комиссии Нина Мазай всё пропускала мимо ушей, опасаясь, что её, как других высокопоставленных советских работников, смешают с грязью. И не безосновательно.

Но Осипова держала удар до конца.

В своей статье «Почерк расстрелов известен» от 10 декабря 1996 года она камня на камне не оставила от результатов прокурорского расследования конца 80-х, отметив, что 12 из 21 члена правительственной комиссии не согласились с выводами следствия.

Тем не менее, доказательства того, что убийства совершались фашистами, «просто-напросто отмели».

Чувствуя ситуацию, кто-то подтолкнул следователей и самого прокурора Тарнавского раздавать интервью налево и направо.

Ещё тогда Осипова располагала информацией, что в 20—40-х годах по всей Белоруссии органами НКВД—МГБ было расстреляно 25 054 человека. Как же могло случиться, что Куропатах следователи насчитали 30 тысяч жертв?

Можно ли было подтверждать версию о зверствах НКВД, когда в захоронениях по подсчётам комиссии оказалось 5,4 тысячи останков женщин, в то время как за все довоенные годы было расстреляно только 50 особ женского пола?

Неужели у прокуратуры не хватало ума запросить в КГБ эти и другие сведения?

Всё это было бы сделано, если бы прокуратура в то время не поддалась давлению и не легла под новых хозяев жизни.

Вопрос: У военных, в том числе НКВД, наверняка имелся свой «почерк» приведения приговоров в исполнение. Что вы скажете по этому поводу?

Ответ: Плавинский вполне резонно отмечает, что описанные Позняком сцены расправ НКВД — литературный вымысел, который просматривается почти в каждом абзаце его публикаций.

Особенно впечатлили его строки о том, как у жертв расстрела пороховые газы «праз выхадны кулявы пралом распырсквалі вакол кроў і мазгі».

Как военный человек, Плавинский компетентно заявляет, что при попадании пули от пистолета ТТ в голову человека, будь то с расстояния 1, 10 или 50 метров, мозги будут разлетаться одинаково, и пороховые газы к этому не имеют никакого отношения.

Вероятно, Позняку захотелось придать наукообразие своей «справаздачы», но он показал полное отсутствие представлений в этой области.

Позняк сам подтверждает, что, судя по описанию отверстий, образованных в черепах всех обнаруженных жертв, «почерк» был один — все они были расстреляны выстрелом в голову.

При этом «У большасьці чарапоў у лобнай частцы, збоку ці наверсе відаць вялікія, дыямэтрам да 5-6 см і нават больш, ірваныя адтуліны».

Подобное возможно при расстреле из мощных пистолетов типа револьвера калибра 7,62 мм или ТТ.

В таких случаях смерть наступает мгновенно.

А теперь обратимся к Наставлению по стрелковому делу.

«Для тренировочных целей в 30-е годы выпускался наган калибра 5,6 мм.
Этот наган имел точно такую же конструкцию, что и револьвер калибра 7,62 мм. В оперативной практике малокалиберный наган использовался для поражения противника в руку, ногу, плечо при необходимости взять его живым. Использовался он и для расстрелов…»

Револьвер, известный под названием «Наган — Смирнский», выпускался на Тульском заводе. Всего было выпущено примерно 3,5 тысячи штук калибра 5,6 мм.

Малокалиберная пуля этого пистолета при выстреле в голову гарантировано убивала человека. Но ее кинетической энергии было недостаточно, что бы «разнести» жертве череп. Человек умирал с маленькой дыркой в голове, при этом пуля оставалась внутри черепа.

Не располагая информацией об особенностях расстрела органами НКВД, Позняк просто посчитал, что это делалось точно так же, как и при фашистах во время оккупации.

Произведя раскопки множества захоронений, он так и не нашел ни одного черепа жертвы, расстрелянной «почерком» НКВД.

Как правило, расстрелы производились не на местности, а в местах содержания заключённых. Потом их ночью вывозили в разные места захоронений, а не концентрировали в одном.

Таким образом, ни патронных гильз, ни предметов личного пользования, тем более бритв, украшений или ещё чего-то в местах захоронений НКВД быть не могло.

Вопрос: Давайте поговорим о визите Гиммлера в Минск в 1941 году. С какой целью он сюда прибыл, и имело ли это связь с расстрелами в урочище, на которое были ориентированы указатели «Курпате юден»?

Ответ: В начале войны Гиммлер за действия вермахта на восточном фронте ответственности не нёс, потому его приезд в Минск в первую очередь был связан с изучением первого опыта реализации личного приказа Гитлера по уничтожению больших групп лиц еврейской национальности, в том числе привезенных из Европы.

Чуть не потеряв сознание при одной из расстрельных акций, когда на его китель брызнули мозги одной из жертв, он на совещании офицерского состава долго возмущался, кем же мы воспитываем исполнителей расстрельных акций, и ратовал за то, чтобы найти другие, «более гуманные способы» ликвидации ненужных людей.

5

По приезде в Германию он дал указание поставить в Минск около полдесятка «душегубок», что и было исполнено.

Весьма примечательным и даже знаковым свидетельством того, что не все офицеры СС были патологическими убийцами, служат воспоминания командира айнзацкоманды №8 штурмбанфюрера СС Отто Врадфиша, который задал Гиммлеру вопрос, кто же несёт ответственность за массовое уничтожение евреев?

Врадфиш пишет:

«Гиммлер сделал из своего ответа целую речь, в которой просил солдат айнзацкоманды №8, а также присутствовавших при этом офицеров госбезопасности, не беспокоиться, так как все приказы отданы лично Гитлером.
Стало быть, всё сводилось к гитлеровскому приказу, имеющему силу закона, и только он (Гиммлер) и Гитлер несут ответственность за их исполнение».

Из 6,5 тысячи немецких евреев, вывезенных в Минск, только 11 человек избежали расстрела.

После первых экзекуций немцы свои руки старались пачкать как можно реже, доверяя карательные и расстрельные акции местным и привозным предателям с Украины, Латвии и Литвы.

Поскольку немцы вооружали эти подразделения трофейным советским оружием, то вполне резонно полагать, что они-то и привлекались к расстрелам в местности «Курпате юден» в конце 1941 — начале 1942 годов.

Вопрос: Почему же тогда выезжавшие в Германию спецы не привезли никаких свидетельств о расстрелах в Куропатах?

Ответ: А вы уточните, кто туда ездил.

С другой стороны, зачем было немцам искать подтверждение тому, что дополняет Холокост новой аргументацией и опровергает миф о колоссальных масштабах убийств, совершённых НКВД на территории Белоруссии?

Ведь именно этот миф был одним из самых мощных аргументов в дискредитации властей и всего советского периода и остаётся таковым до сего времени.

И всё же нет сомнения, что правда рано или поздно восторжествует. Однако всему своё время...

* * *

Закончив беседу, я не стал задавать собеседнику вопрос, почему же правящие на постсоветском пространстве элиты не стремятся выяснить правду и положить конец домыслам и спекуляциям.

Его следует адресовать им самим.

Однако есть объективные обстоятельства, которые проливают свет на происходящее.

На смену социализму в начале 90-х годов пришёл общественный строй, где движущими силами являются ложь, лицемерие и разнузданность нравов, которая приводит к разрушению института семьи как главной образующей ячейки общества и государства.

Весь фокус состоит в том, что народы России и Беларуси, вкусив прелестей демократии после развала СССР, в основной своей массе повернулись к духовным ценностям христианства — вопреки тому, что делается на Западе.

Оказалось, что нашим людям нужна жизненная опора не на бардак и вседозволенность, а на традиционную для восточных славян мораль, которая большевиками была только видоизменена, но, по сути дела, имела не так уж много различий с религией.

Это и оказалось цементирующим началом, побуждающим к единению России и Беларуси.

Ведь единство — главный залог устойчивости того фрагмента капиталистического звена, который не вписался в общий концепт.

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

Валентин АНТИПЕНКО

Добавить комментарий

CAPTCHA
Этот вопрос задается для того, чтобы выяснить, являетесь ли Вы человеком или представляете из себя автоматическую спам-рассылку.
CAPTCHA на основе изображений
Введите символы, которые показаны на картинке.