<?php
/*«Grammar Nazi». Напиши скрипт, проверяющий текст на наличие злостных ошибок:
нет пробела после запятой, точки с запятой, восклицательного знака, вопросительного знака, двоеточия
«жи» или «ши» написано с буквой ы
в тексте есть слово «координально» или «сдесь», «зделал», «зделаю», «зделан»
в тексте есть слова «а» или «но» без запятой перед ними.
(можешь добавить еще несколько правил, если хорошо знаешь русский язык)
В случае обнаружения ошибки скрипт должен писать сообщение об этом и выводить кусок текста с ошибкой (чтобы было понятно, что не так).*/
$coolStory = /*<<<EOF*/
"Утра, анон. Жывотные Хочу принести тебе прохладную. В общем захотел координально я найти денег, нет, даже не так. Так сдесь как у меня никогда не было девушек, за зделают руку не держался, снимал только шлюх. Я решил зарегаться на мамбе и посмотреть там тянок. В общем ничего толком не вышло из этого, но мне начали писать парни с целью ебли, некоторые предлогали деньги. И вот попался один довольно няшный кун. Вследствие чего я смог заработать 10к деревяных за ночь. Мне был окак-то все равно, что с мужиком и понял, что от этого нихуевый профит + этот кун какой-то финансовый директор. В общем списались, после созвонились и я приехал к концу рабочего дня к нему на работу, пили водку, разговаривали, он довольно умный, интересно было с ним болтать, там долго сидели. А скажу сразу, что я еблан и взял деньги только утром, то есть после моей работы, это была ммоя первая ошибка. Так что мы пили, разговаривали о политике, немного о религии, эволюцию, спорт и тому подобное,он еще аниму смотрит иногда и гоняет в старкрафт, через несколько часов мы поебались в каком-то конференц-зале, ничего особенного, ожидал большего, сисурити. Тут вторая была моя ошибка. что не сказал ему одеть гондон, кстати, сосать член довольно легко и не противно, тем более он относительно скорострел, так что после минут 5-7 я был сверху, потом снизу, так же мало чего чувствовал, ни боли, ни удовольствия, так наше соитие с ласками продолжались минут 20.После он засунл, я рядом в обнимку, довольно мило. После я проснулся и сидел за пекой у него и кушал. После он проснулся, я сказал про деньги, он мне их отдал и я пошел домой, он сказал, что вечером созвонимся. Щас мысль идет с него брать деньги + гулять и сидеть в кафе за его счет и тому подобное, ибо он при деньгах и довольно милый. Или же искать еще \" клиентов\" .
Реквестую ваши стори о похождениях но и спрашиваю советы, что и как дальше а действовать.
Пикрандом." ;
/*
EOF
;*/
$regExp = "/координально|сдесь|здела[лнюет]{1,2}|\\ s+а\\ s+|\\ s+но\\ s+|[,\\ .!\\ ?:;][^\\ s]|[a-яё]*жы|шы/iu" ;
"/координально/ui" => "- Ошибка в слове \" кардинально\" ." ,
"/сдесь/ui" => "- Не \" сдесь\" , а \" здесь\" ." ,
"/здела[лнюет]{1,2}/ui" => "- Приставки \" з\" нет в русском языке." ,
"/\\ s+а\\ s+/ui" => "- Пропущена запятая перед союзом \" а\" ." ,
"/\\ s+но\\ s+/ui" => "- Пропущена запятая перед союзом \" но\" ." ,
"/[a-яё]*жы|шы/ui" => "\" - Жи-Ши\" пиши с \" и\" !" ,
"/[,\\ .!\\ ?:;][^\\ s]/ui" => "- Пропущен пробел после знака препинания."
) ;
/*
$possibleErrors = array (
1 => array ( "pattern" => "/координально/ui",
"message" => "- Ошибка в слове \"кардинально\"."
),
2 => array ( "pattern" => "/сдесь/ui",
"message" => "- Не \"сдесь\", а \"здесь\"."
),
3 => array ( "pattern" => "/здела[лнюет]{1,2}/ui",
"message" => "- Приставки \"з\" нет в русском языке."
),
4 => array ( "pattern" => "/\\s+а\\s+/ui" ,
"message" => "- Пропущена запятая перед союзом \"а\"."
),
5 => array ( "pattern" => "/\\s+но\\s+/ui",
"message" => "- Пропущена запятая перед союзом \"но\"."
),
6 => array ( "pattern" => "/[,\\.!\\?:;][^\\s]/ui",
"message" => "- Пропущен пробел после знака препинания."
),
7 => array ( "pattern" => "/[a-яё]*жы|шы/ui" ,
"message" => "- \"Жи-Ши\" пиши с \"и\"!"
),
); */
/*foreach ($possibleErrors as $pattern => $message) { */
//}
/*foreach ($possibleErrors as $pattern => $message) {
$matches = preg_grep($pattern, $errs);
}
*/
/*var_dump($errs); */
$matches = $errs [ 0 ] ;
$number = count ( $matches ) ; /*var_dump($number); */
for ( $i = 0 ; $i < $number ; $i ++ ) {
/*echo $matches[$i][0] . " - "; */
foreach ( $possibleErrors as $key => $value ) {
/*echo $key . "\n"; */
$position = $matches [ $i ] [ 1 ] - 30 ;
/*echo $position."\n"; */
echo "..." ;
$context = mb_substr ( $coolStory , $position , 60 ) ; echo $context . "\n " ;
echo "..." ;
echo $value ;
break ;
/*echo "\n Есть совпадение \n"; */
}
}
}
/*
$matches = $errs[0];
$number = count($matches);
var_dump($number);
for ($i=0; $i < count($matches); $i++) {
foreach ($possibleErrors as $pattern => $message) {
if (preg_match($pattern, $matches[$i][0])) {
echo "..." . mb_substr($coolStory, $matches[$i][1] - 10, 20) . "... $message \n";
}
}
}
?>
*/
?>
PD9waHAKLyrCq0dyYW1tYXIgTmF6acK7LiDQndCw0L/QuNGI0Lgg0YHQutGA0LjQv9GCLCDQv9GA0L7QstC10YDRj9GO0YnQuNC5INGC0LXQutGB0YIg0L3QsCDQvdCw0LvQuNGH0LjQtSDQt9C70L7RgdGC0L3Ri9GFINC+0YjQuNCx0L7QujoKCiAgICDQvdC10YIg0L/RgNC+0LHQtdC70LAg0L/QvtGB0LvQtSDQt9Cw0L/Rj9GC0L7QuSwg0YLQvtGH0LrQuCDRgSDQt9Cw0L/Rj9GC0L7QuSwg0LLQvtGB0LrQu9C40YbQsNGC0LXQu9GM0L3QvtCz0L4g0LfQvdCw0LrQsCwg0LLQvtC/0YDQvtGB0LjRgtC10LvRjNC90L7Qs9C+INC30L3QsNC60LAsINC00LLQvtC10YLQvtGH0LjRjwogICAgwqvQttC4wrsg0LjQu9C4IMKr0YjQuMK7INC90LDQv9C40YHQsNC90L4g0YEg0LHRg9C60LLQvtC5INGLCiAgICDQsiDRgtC10LrRgdGC0LUg0LXRgdGC0Ywg0YHQu9C+0LLQviDCq9C60L7QvtGA0LTQuNC90LDQu9GM0L3QvsK7INC40LvQuCDCq9GB0LTQtdGB0YzCuywgwqvQt9C00LXQu9Cw0LvCuywgwqvQt9C00LXQu9Cw0Y7CuywgwqvQt9C00LXQu9Cw0L3CuwogICAg0LIg0YLQtdC60YHRgtC1INC10YHRgtGMINGB0LvQvtCy0LAgwqvQsMK7INC40LvQuCDCq9C90L7CuyDQsdC10Lcg0LfQsNC/0Y/RgtC+0Lkg0L/QtdGA0LXQtCDQvdC40LzQuC4KICAgICjQvNC+0LbQtdGI0Ywg0LTQvtCx0LDQstC40YLRjCDQtdGJ0LUg0L3QtdGB0LrQvtC70YzQutC+INC/0YDQsNCy0LjQuywg0LXRgdC70Lgg0YXQvtGA0L7RiNC+INC30L3QsNC10YjRjCDRgNGD0YHRgdC60LjQuSDRj9C30YvQuikKCtCSINGB0LvRg9GH0LDQtSDQvtCx0L3QsNGA0YPQttC10L3QuNGPINC+0YjQuNCx0LrQuCDRgdC60YDQuNC/0YIg0LTQvtC70LbQtdC9INC/0LjRgdCw0YLRjCDRgdC+0L7QsdGJ0LXQvdC40LUg0L7QsSDRjdGC0L7QvCDQuCDQstGL0LLQvtC00LjRgtGMINC60YPRgdC+0Log0YLQtdC60YHRgtCwINGBINC+0YjQuNCx0LrQvtC5ICjRh9GC0L7QsdGLINCx0YvQu9C+INC/0L7QvdGP0YLQvdC+LCDRh9GC0L4g0L3QtSDRgtCw0LopLiovCgplcnJvcl9yZXBvcnRpbmcoLTEpOwptYl9pbnRlcm5hbF9lbmNvZGluZygndXRmLTgnKTsKCiRjb29sU3RvcnkgPSAvKjw8PEVPRiovCiLQo9GC0YDQsCwg0LDQvdC+0L0uINCW0YvQstC+0YLQvdGL0LUg0KXQvtGH0YMg0L/RgNC40L3QtdGB0YLQuCDRgtC10LHQtSDQv9GA0L7RhdC70LDQtNC90YPRji4g0JIg0L7QsdGJ0LXQvCDQt9Cw0YXQvtGC0LXQuyDQutC+0L7RgNC00LjQvdCw0LvRjNC90L4g0Y8g0L3QsNC50YLQuCDQtNC10L3QtdCzLCDQvdC10YIsINC00LDQttC1INC90LUg0YLQsNC6LiDQotCw0LogINGB0LTQtdGB0Ywg0LrQsNC6INGDINC80LXQvdGPINC90LjQutC+0LPQtNCwINC90LUg0LHRi9C70L4g0LTQtdCy0YPRiNC10LosINC30LAg0LfQtNC10LvQsNGO0YIg0YDRg9C60YMg0L3QtSDQtNC10YDQttCw0LvRgdGPLCDRgdC90LjQvNCw0Lsg0YLQvtC70YzQutC+INGI0LvRjtGFLiDQryDRgNC10YjQuNC7INC30LDRgNC10LPQsNGC0YzRgdGPINC90LAg0LzQsNC80LHQtSDQuCDQv9C+0YHQvNC+0YLRgNC10YLRjCDRgtCw0Lwg0YLRj9C90L7Qui4g0JIg0L7QsdGJ0LXQvCDQvdC40YfQtdCz0L4g0YLQvtC70LrQvtC8INC90LUg0LLRi9GI0LvQviDQuNC3INGN0YLQvtCz0L4sINC90L4g0LzQvdC1INC90LDRh9Cw0LvQuCDQv9C40YHQsNGC0Ywg0L/QsNGA0L3QuCDRgSDRhtC10LvRjNGOINC10LHQu9C4LCDQvdC10LrQvtGC0L7RgNGL0LUg0L/RgNC10LTQu9C+0LPQsNC70Lgg0LTQtdC90YzQs9C4LiDQmCDQstC+0YIg0L/QvtC/0LDQu9GB0Y8g0L7QtNC40L0g0LTQvtCy0L7Qu9GM0L3QviDQvdGP0YjQvdGL0Lkg0LrRg9C9LiDQktGB0LvQtdC00YHRgtCy0LjQtSDRh9C10LPQviDRjyDRgdC80L7QsyDQt9Cw0YDQsNCx0L7RgtCw0YLRjCAxMNC6INC00LXRgNC10LLRj9C90YvRhSDQt9CwINC90L7Rh9GMLiDQnNC90LUg0LHRi9C7INC+0LrQsNC6LdGC0L4g0LLRgdC1INGA0LDQstC90L4sINGH0YLQviDRgSDQvNGD0LbQuNC60L7QvCDQuCDQv9C+0L3Rj9C7LCDRh9GC0L4g0L7RgiDRjdGC0L7Qs9C+INC90LjRhdGD0LXQstGL0Lkg0L/RgNC+0YTQuNGCICsg0Y3RgtC+0YIg0LrRg9C9INC60LDQutC+0Lkt0YLQviDRhNC40L3QsNC90YHQvtCy0YvQuSDQtNC40YDQtdC60YLQvtGALiDQkiDQvtCx0YnQtdC8INGB0L/QuNGB0LDQu9C40YHRjCwg0L/QvtGB0LvQtSDRgdC+0LfQstC+0L3QuNC70LjRgdGMINC4INGPINC/0YDQuNC10YXQsNC7INC6INC60L7QvdGG0YMg0YDQsNCx0L7Rh9C10LPQviDQtNC90Y8g0Log0L3QtdC80YMg0L3QsCDRgNCw0LHQvtGC0YMsINC/0LjQu9C4INCy0L7QtNC60YMsINGA0LDQt9Cz0L7QstCw0YDQuNCy0LDQu9C4LCDQvtC9INC00L7QstC+0LvRjNC90L4g0YPQvNC90YvQuSwg0LjQvdGC0LXRgNC10YHQvdC+INCx0YvQu9C+INGBINC90LjQvCDQsdC+0LvRgtCw0YLRjCwg0YLQsNC8INC00L7Qu9Cz0L4g0YHQuNC00LXQu9C4LiDQkCDRgdC60LDQttGDINGB0YDQsNC30YMsINGH0YLQviDRjyDQtdCx0LvQsNC9INC4INCy0LfRj9C7INC00LXQvdGM0LPQuCDRgtC+0LvRjNC60L4g0YPRgtGA0L7QvCwg0YLQviDQtdGB0YLRjCDQv9C+0YHQu9C1INC80L7QtdC5INGA0LDQsdC+0YLRiywg0Y3RgtC+INCx0YvQu9CwINC80LzQvtGPINC/0LXRgNCy0LDRjyDQvtGI0LjQsdC60LAuINCi0LDQuiDRh9GC0L4g0LzRiyDQv9C40LvQuCwg0YDQsNC30LPQvtCy0LDRgNC40LLQsNC70Lgg0L4g0L/QvtC70LjRgtC40LrQtSwg0L3QtdC80L3QvtCz0L4g0L4g0YDQtdC70LjQs9C40LgsINGN0LLQvtC70Y7RhtC40Y4sINGB0L/QvtGA0YIg0Lgg0YLQvtC80YMg0L/QvtC00L7QsdC90L7QtSzQvtC9INC10YnQtSDQsNC90LjQvNGDINGB0LzQvtGC0YDQuNGCINC40L3QvtCz0LTQsCDQuCDQs9C+0L3Rj9C10YIg0LIg0YHRgtCw0YDQutGA0LDRhNGCLCDRh9C10YDQtdC3INC90LXRgdC60L7Qu9GM0LrQviDRh9Cw0YHQvtCyINC80Ysg0L/QvtC10LHQsNC70LjRgdGMINCyINC60LDQutC+0Lwt0YLQviDQutC+0L3RhNC10YDQtdC90YYt0LfQsNC70LUsINC90LjRh9C10LPQviDQvtGB0L7QsdC10L3QvdC+0LPQviwg0L7QttC40LTQsNC7INCx0L7Qu9GM0YjQtdCz0L4sINGB0LjRgdGD0YDQuNGC0LguINCi0YPRgiDQstGC0L7RgNCw0Y8g0LHRi9C70LAg0LzQvtGPINC+0YjQuNCx0LrQsC4g0YfRgtC+INC90LUg0YHQutCw0LfQsNC7INC10LzRgyDQvtC00LXRgtGMINCz0L7QvdC00L7QvSwg0LrRgdGC0LDRgtC4LCDRgdC+0YHQsNGC0Ywg0YfQu9C10L0g0LTQvtCy0L7Qu9GM0L3QviDQu9C10LPQutC+INC4INC90LUg0L/RgNC+0YLQuNCy0L3Qviwg0YLQtdC8INCx0L7Qu9C10LUg0L7QvSDQvtGC0L3QvtGB0LjRgtC10LvRjNC90L4g0YHQutC+0YDQvtGB0YLRgNC10LssINGC0LDQuiDRh9GC0L4g0L/QvtGB0LvQtSDQvNC40L3Rg9GCIDUtNyDRjyDQsdGL0Lsg0YHQstC10YDRhdGDLCDQv9C+0YLQvtC8INGB0L3QuNC30YMsINGC0LDQuiDQttC1INC80LDQu9C+INGH0LXQs9C+INGH0YPQstGB0YLQstC+0LLQsNC7LCDQvdC4INCx0L7Qu9C4LCDQvdC4INGD0LTQvtCy0L7Qu9GM0YHRgtCy0LjRjywg0YLQsNC6INC90LDRiNC1INGB0L7QuNGC0LjQtSDRgSDQu9Cw0YHQutCw0LzQuCDQv9GA0L7QtNC+0LvQttCw0LvQuNGB0Ywg0LzQuNC90YPRgiAyMC7Qn9C+0YHQu9C1INC+0L0g0LfQsNGB0YPQvdC7LCDRjyDRgNGP0LTQvtC8INCyINC+0LHQvdC40LzQutGDLCDQtNC+0LLQvtC70YzQvdC+INC80LjQu9C+LiDQn9C+0YHQu9C1INGPINC/0YDQvtGB0L3Rg9C70YHRjyDQuCDRgdC40LTQtdC7INC30LAg0L/QtdC60L7QuSDRgyDQvdC10LPQviDQuCDQutGD0YjQsNC7LiDQn9C+0YHQu9C1INC+0L0g0L/RgNC+0YHQvdGD0LvRgdGPLCDRjyDRgdC60LDQt9Cw0Lsg0L/RgNC+INC00LXQvdGM0LPQuCwg0L7QvSDQvNC90LUg0LjRhSDQvtGC0LTQsNC7INC4INGPINC/0L7RiNC10Lsg0LTQvtC80L7QuSwg0L7QvSDRgdC60LDQt9Cw0LssINGH0YLQviDQstC10YfQtdGA0L7QvCDRgdC+0LfQstC+0L3QuNC80YHRjy4g0KnQsNGBINC80YvRgdC70Ywg0LjQtNC10YIg0YEg0L3QtdCz0L4g0LHRgNCw0YLRjCDQtNC10L3RjNCz0LggKyDQs9GD0LvRj9GC0Ywg0Lgg0YHQuNC00LXRgtGMINCyINC60LDRhNC1INC30LAg0LXQs9C+INGB0YfQtdGCINC4INGC0L7QvNGDINC/0L7QtNC+0LHQvdC+0LUsINC40LHQviDQvtC9INC/0YDQuCDQtNC10L3RjNCz0LDRhSDQuCDQtNC+0LLQvtC70YzQvdC+INC80LjQu9GL0LkuINCY0LvQuCDQttC1INC40YHQutCw0YLRjCDQtdGJ0LUgXCLQutC70LjQtdC90YLQvtCyXCIuCtCg0LXQutCy0LXRgdGC0YPRjiDQstCw0YjQuCDRgdGC0L7RgNC4INC+INC/0L7RhdC+0LbQtNC10L3QuNGP0YUg0L3QviAg0Lgg0YHQv9GA0LDRiNC40LLQsNGOINGB0L7QstC10YLRiywg0YfRgtC+INC4INC60LDQuiDQtNCw0LvRjNGI0LUg0LAg0LTQtdC50YHRgtCy0L7QstCw0YLRjC4K0J/QuNC60YDQsNC90LTQvtC8LiI7Ci8qCkVPRiAKOyovCiRyZWdFeHAgPSAiL9C60L7QvtGA0LTQuNC90LDQu9GM0L3QvnzRgdC00LXRgdGMfNC30LTQtdC70LBb0LvQvdGO0LXRgl17MSwyfXxcXHMr0LBcXHMrfFxccyvQvdC+XFxzK3xbLFxcLiFcXD86O11bXlxcc118W2Et0Y/RkV0q0LbRi3zRiNGLL2l1IjsgCgokcG9zc2libGVFcnJvcnMgPSBhcnJheSgKCSAgICAgICAgICAgICAgICAgICAgIi/QutC+0L7RgNC00LjQvdCw0LvRjNC90L4vdWkiICAgICAgICA9PiAiLSDQntGI0LjQsdC60LAg0LIg0YHQu9C+0LLQtSBcItC60LDRgNC00LjQvdCw0LvRjNC90L5cIi4iLAoJICAgICAgICAgICAgICAgICAgICAiL9GB0LTQtdGB0YwvdWkiICAgICAgICAgICAgICAgPT4gIi0g0J3QtSBcItGB0LTQtdGB0YxcIiwg0LAgXCLQt9C00LXRgdGMXCIuIiwKCSAgICAgICAgICAgICAgICAgICAgIi/Qt9C00LXQu9CwW9C70L3RjtC10YJdezEsMn0vdWkiICAgICA9PiAiLSDQn9GA0LjRgdGC0LDQstC60LggXCLQt1wiINC90LXRgiDQsiDRgNGD0YHRgdC60L7QvCDRj9C30YvQutC1LiIsCgkgICAgICAgICAgICAgICAgICAgICIvXFxzK9CwXFxzKy91aSIgICAgICAgICAgID0+ICItINCf0YDQvtC/0YPRidC10L3QsCDQt9Cw0L/Rj9GC0LDRjyDQv9C10YDQtdC0INGB0L7RjtC30L7QvCBcItCwXCIuIiwKCSAgICAgICAgICAgICAgICAgICAgIi9cXHMr0L3QvlxccysvdWkiICAgICAgICAgID0+ICItINCf0YDQvtC/0YPRidC10L3QsCDQt9Cw0L/Rj9GC0LDRjyDQv9C10YDQtdC0INGB0L7RjtC30L7QvCBcItC90L5cIi4iLAoJICAgICAgICAgICAgICAgICAgICAiL1thLdGP0ZFdKtC20Yt80YjRiy91aSIgICAgPT4gIlwiLSDQltC4LdCo0LhcIiDQv9C40YjQuCDRgSBcItC4XCIhIiwKCSAgICAgICAgICAgICAgICAgICAgIi9bLFxcLiFcXD86O11bXlxcc10vdWkiICA9PiAiLSDQn9GA0L7Qv9GD0YnQtdC9INC/0YDQvtCx0LXQuyDQv9C+0YHQu9C1INC30L3QsNC60LAg0L/RgNC10L/QuNC90LDQvdC40Y8uIgoJICAgICAgICAgICAgICAgICAgICApOyAKLyoKJHBvc3NpYmxlRXJyb3JzID0gYXJyYXkgKAoJICAgICAgICAgICAgICAgICAxID0+IGFycmF5ICggInBhdHRlcm4iID0+ICIv0LrQvtC+0YDQtNC40L3QsNC70YzQvdC+L3VpIiwgICAgICAgIAoJICAgICAgICAgICAgICAgICAJICAgICAgICAgIm1lc3NhZ2UiID0+ICItINCe0YjQuNCx0LrQsCDQsiDRgdC70L7QstC1IFwi0LrQsNGA0LTQuNC90LDQu9GM0L3QvlwiLiIKCSAgICAgICAgICAgICAgICAgCSAgICAgICAgKSwKCSAgICAgICAgICAgICAgICAgMiA9PiBhcnJheSAoICJwYXR0ZXJuIiA9PiAiL9GB0LTQtdGB0YwvdWkiLAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lc3NhZ2UiID0+ICItINCd0LUgXCLRgdC00LXRgdGMXCIsINCwIFwi0LfQtNC10YHRjFwiLiIKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICApLAoJICAgICAgICAgICAgICAgICAzID0+IGFycmF5ICggInBhdHRlcm4iID0+ICIv0LfQtNC10LvQsFvQu9C90Y7QtdGCXXsxLDJ9L3VpIiwgCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVzc2FnZSIgPT4gIi0g0J/RgNC40YHRgtCw0LLQutC4IFwi0LdcIiDQvdC10YIg0LIg0YDRg9GB0YHQutC+0Lwg0Y/Qt9GL0LrQtS4iCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgICAKCSAgICAgICAgICAgICAgICAgNCA9PiBhcnJheSAoICJwYXR0ZXJuIiA9PiAiL1xccyvQsFxccysvdWkiICwgCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVzc2FnZSIgPT4gIi0g0J/RgNC+0L/Rg9GJ0LXQvdCwINC30LDQv9GP0YLQsNGPINC/0LXRgNC10LQg0YHQvtGO0LfQvtC8IFwi0LBcIi4iCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwKCSAgICAgICAgICAgICAgICAgNSA9PiBhcnJheSAoICJwYXR0ZXJuIiA9PiAiL1xccyvQvdC+XFxzKy91aSIsIAoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWVzc2FnZSIgPT4gIi0g0J/RgNC+0L/Rg9GJ0LXQvdCwINC30LDQv9GP0YLQsNGPINC/0LXRgNC10LQg0YHQvtGO0LfQvtC8IFwi0L3QvlwiLiIKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICApLCAgIAoJICAgICAgICAgICAgICAgICA2ID0+IGFycmF5ICggInBhdHRlcm4iID0+ICIvWyxcXC4hXFw/OjtdW15cXHNdL3VpIiwKCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lc3NhZ2UiID0+ICItINCf0YDQvtC/0YPRidC10L0g0L/RgNC+0LHQtdC7INC/0L7RgdC70LUg0LfQvdCw0LrQsCDQv9GA0LXQv9C40L3QsNC90LjRjy4iCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgICAgICAgCgkgICAgICAgICAgICAgICAgIDcgPT4gYXJyYXkgKCAicGF0dGVybiIgPT4gIi9bYS3Rj9GRXSrQttGLfNGI0YsvdWkiICwgCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZXNzYWdlIiA9PiAiLSBcItCW0Lgt0KjQuFwiINC/0LjRiNC4INGBIFwi0LhcIiEiCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgICAgICAgICAgICAKCSAgICAgICAgICAgICAgICAgICAgIAoJICAgICAgICAgICAgICAgKTsgKi8KJGVycnMgPSBhcnJheSgpOwoKLypmb3JlYWNoICgkcG9zc2libGVFcnJvcnMgYXMgJHBhdHRlcm4gPT4gJG1lc3NhZ2UpIHsgKi8KCXByZWdfbWF0Y2hfYWxsKCRyZWdFeHAsICRjb29sU3RvcnksICRlcnJzLCBQUkVHX09GRlNFVF9DQVBUVVJFKTsJCi8vfQovKmZvcmVhY2ggKCRwb3NzaWJsZUVycm9ycyBhcyAkcGF0dGVybiA9PiAkbWVzc2FnZSkgewoJJG1hdGNoZXMgPSBwcmVnX2dyZXAoJHBhdHRlcm4sICRlcnJzKTsKfQoqLwovKnZhcl9kdW1wKCRlcnJzKTsgKi8KJG1hdGNoZXMgPSAkZXJyc1swXTsKdmFyX2R1bXAoJG1hdGNoZXMpOyAKJG51bWJlciA9IGNvdW50KCRtYXRjaGVzKTsKLyp2YXJfZHVtcCgkbnVtYmVyKTsgKi8KCgogZm9yICgkaT0wOyAkaSA8ICRudW1iZXI7ICRpKyspIHsKIAkvKmVjaG8gJG1hdGNoZXNbJGldWzBdIC4gIiAtICI7ICovCiAJZm9yZWFjaCAoJHBvc3NpYmxlRXJyb3JzIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAJCS8qZWNobyAka2V5IC4gIlxuIjsgKi8KIAkJaWYgKHByZWdfbWF0Y2goJGtleSwgJG1hdGNoZXNbJGldWzBdKSkgewogCQkJJHBvc2l0aW9uID0gJG1hdGNoZXNbJGldWzFdIC0gMzA7CiAJCQkvKmVjaG8gJHBvc2l0aW9uLiJcbiI7ICovCiAJCQllY2hvICIuLi4iOwogCQkJJGNvbnRleHQgPSBtYl9zdWJzdHIoJGNvb2xTdG9yeSwgJHBvc2l0aW9uLCA2MCk7CiAJCQllY2hvICRjb250ZXh0IC4iXG4iOwogCQkJZWNobyAiLi4uIjsKIAkJCWVjaG8gJHZhbHVlOwoKIAkJCWJyZWFrOwogCQkJLyplY2hvICJcbiDQldGB0YLRjCDRgdC+0LLQv9Cw0LTQtdC90LjQtSBcbiI7ICovCiAJICAgIH0gCiAJfQogfQoKLyoKJG1hdGNoZXMgPSAkZXJyc1swXTsKJG51bWJlciA9IGNvdW50KCRtYXRjaGVzKTsKdmFyX2R1bXAoJG51bWJlcik7Cgpmb3IgKCRpPTA7ICRpIDwgY291bnQoJG1hdGNoZXMpOyAkaSsrKSB7CiAgICBmb3JlYWNoICgkcG9zc2libGVFcnJvcnMgYXMgJHBhdHRlcm4gPT4gJG1lc3NhZ2UpIHsKICAgIAlpZiAocHJlZ19tYXRjaCgkcGF0dGVybiwgJG1hdGNoZXNbJGldWzBdKSkgewogICAgCQllY2hvICIuLi4iIC4gbWJfc3Vic3RyKCRjb29sU3RvcnksICRtYXRjaGVzWyRpXVsxXSAtIDEwLCAyMCkgLiAiLi4uICRtZXNzYWdlIFxuIjsKICAgIAl9CiAgICB9Cn0KPz4KKi8KPz4=