<?php 
 
 
/*Глобальная функция, которая получает число $n и возвращает текстовую форму написания суммы*/ 
function  summ_to_text ( $n )  { 
 
/*Эта функция разбивает число на группы трехзначных чисел*/ 
function  splittingIntoGroups ( $n )  { 
 
$splitArray = [ ] ; 
for  ( $i = $n ;  $i >= 1 ;  $i = $i + 0 )  { 
	$i = $i / 1000 ; 
	$splitArray [ ] = $t ; 
	} 
	return  $splitArray ; 
} 
 
/*Эта функция определяет правильную форму имени разряда суммы для числа $dischargeValue из ячейки $x массива $dischargeArray*/ 
function  discharge_sum ( $dischargeValue , $x )  { 
$dischargeArray =  [   'roubles' =>  [ 'рубль' ,  'рубля' ,  'рублей' ] , 
					'thousand' =>  [ 'тысяча' , 'тысячи' , 'тысяч' ] , 
					'million' =>  [ 'миллион' , 'миллиона' , 'миллионов' ] 
	] ; 
$regexpLastNumber1 = '/^[1]$/' ; 
$regexpLastNumber2to4 = '/^[0]?[0]?[2-4]$/' ; 
$regexpLastNumber10to19 = '/[0-9]?[1][0-9]$/' ; 
$regexpLastNumberX1 = '/[0-9]?[0,2-9][1]$/' ; 
$regexpLastNumberX2toX4 = '/[0-9]?[0,2-9][2-4]$/' ; 
if  ( preg_match ( $regexpLastNumber1 , $dischargeValue ) ) { 	$wordAfterN = $dischargeArray [ $x ] [ 0 ] ; 
} 
elseif  ( preg_match ( $regexpLastNumber2to4 , $dischargeValue ) ) { 	$wordAfterN = $dischargeArray [ $x ] [ 1 ] ; 
} 
elseif  ( preg_match ( $regexpLastNumber10to19 , $dischargeValue ) ) { 	$wordAfterN = $dischargeArray [ $x ] [ 2 ] ; 
} 
elseif  ( preg_match ( $regexpLastNumberX1 , $dischargeValue ) ) { 	$wordAfterN = $dischargeArray [ $x ] [ 0 ] ; 
} 
elseif  ( preg_match ( $regexpLastNumberX2toX4 , $dischargeValue ) ) { 	$wordAfterN = $dischargeArray [ $x ] [ 1 ] ; 
} 
elseif  ( $dischargeValue == null ) { 
	$wordAfterN = '' ; 
} 
else { 
	$wordAfterN = $dischargeArray [ $x ] [ 2 ] ; 
} 
return  $wordAfterN ; 
} 
 
/*Эта функция возвращает написание трехзначных чисел из массива прописью*/ 
function  smallNumberToText ( $spelN )  { 
	$spelling =  [ 0    =>   'ноль' ,                                      10   =>   'десять' ,        100  =>   'сто' , 
        1    =>   'один' ,          11   =>   'одиннадцать' ,       20   =>   'двадцать' ,      200  =>   'двести' , 
        2    =>   'два' ,           12   =>   'двенадцать' ,        30   =>   'тридцать' ,      300  =>   'триста' , 
        3    =>   'три' ,           13   =>   'тринадцать' ,        40   =>   'сорок' ,         400  =>   'четыреста' , 
        4    =>   'четыре' ,        14   =>   'четырнадцать' ,      50   =>   'пятьдесят' ,     500  =>   'пятьсот' , 
        5    =>   'пять' ,          15   =>   'пятнадцать' ,        60   =>   'шестьдесят' ,    600  =>   'шестьсот' , 
        6    =>   'шесть' ,         16   =>   'шестнадцать' ,       70   =>   'семьдесят' ,     700  =>   'семьсот' ,     
        7    =>   'семь' ,          17   =>   'семнадцать' ,        80   =>   'восемьдесят' ,    800  =>   'восемьсот' , 
        8    =>   'восемь' ,        18   =>   'восемнадцать' ,      90   =>   'девяносто' ,      900  =>   'девятьсот' , 
        9    =>   'девять' ,        19   =>   'девятнадцать'     ] ; 
	$regexp1to9 = '/[0-9]?[0-9]?[1-9]$/' ; 
	$regexp10to19 =  '/[0-9]?[1][0-9]$/' ; 
	$regexp20to90 =  '/[0-9]?[2-9][0-9]$/' ; 
	$regexp100to900 =  '/[1-9][0-9][0-9]$/' ; 
 
	$text = null ; 
		foreach  ( $spelN  as  $n )  { 
			$numberInWords = '' ; 
		$x = ( $n % 100 ) % 10 ; 
		$numberInWords = $spelling [ $x ]  .  ' ' ; 
	} 
			$numberInWords = $spelling [ $y ]  .  ' ' ; 
		} 
			$z = ( floor ( $n % 100 / 10 ) ) * 10 ;  		$numberInWords = $spelling [ $z ]  .  ' '  .  $numberInWords  .  ' ' ; 
		} 
			$numberInWords = $spelling [ $w ]  .  ' '  .  $numberInWords  .  '' ; 
		} 
		$textArray [ ] = $numberInWords ; 
		} 
		return  $textArray ; 
} 
 
/*Эта функция меняет фразы "один тысяча" и "две тысяча" на "одна тысяча" и "две тысячи" соответственно*/ 
function  correct_thousand ( $arrayN )  { 
	$regexp1thousand = '/один\\s/ui' ; 
	$regexp2thousand = '/два\\s/ui' ; 
$arrayN [ 1 ] = preg_replace ( $regexp1thousand , 'одна ' , $arrayN [ 1 ] ) ; $arrayN [ 1 ] = preg_replace ( $regexp2thousand , 'две ' , $arrayN [ 1 ] ) ; return ( $arrayN ) ; 
} 
 
/*Эта функция удаляет лишние пробелы, которые появляются в случае отсутствия разрядов миллионов и тысяч*/ 
function  delete_double_space ( $textForDeleteSpace )  { 
	$regexpDoubleSpace = '/(\\s){2,}/ui' ; 
	$textAfterDeleteDoubleSpace = preg_replace ( $regexpDoubleSpace , ' ' , $textForDeleteSpace ) ;  	return  $textAfterDeleteDoubleSpace ; 
} 
 
/*Получаем массив трехзначных чисел*/ 
$splitArray =  splittingIntoGroups ( $n ) ; 
 
/*Создаем массив для записи имен разрядов*/ 
$dischargeArraySpelN =  [ 'roubles' => null ,  'thousand' => null ,  'million' => null ] ; 
 
/*Определяем правильные имена разрядов и поочередно записываем их в массив*/ 
$wordAfterRoubles =  discharge_sum( $splitArray [ 0 ] , 'roubles' ) ; 
if  ( $splitArray [ 0 ] == 0 ) { 
		$wordAfterRoubles = 'рублей' ; 
	} 
$dischargeArraySpelN [ roubles] = $wordAfterRoubles ; 
$wordAfterThousand =  discharge_sum( $splitArray [ 1 ] , 'thousand' ) ; 
$dischargeArraySpelN [ thousand] = $wordAfterThousand ; 
$wordAfterMillion =  discharge_sum( $splitArray [ 2 ] , 'million' ) ; 
$dischargeArraySpelN [ million] = $wordAfterMillion ; 
/*Переводим массив трехзначных чисел в текстовую форму и одновременно его переворачиваем, т.к. foreach записало массив в обратном порядке*/ 
$numberInTextArray =  array_reverse   ( smallNumberToText 
( $splitArray ) ) ; /*Проверяем, нужно ли исправить окончание разряда тысяч*/ 
$numberInTextArray =  correct_thousand ( $numberInTextArray ) ; 
if  ( $n == 0 ) { 
	$numberInTextArray [ 0 ] = '0 ' ; 
} 
/*Собираем текст*/ 
$text =  $numberInTextArray [ 2 ] . $wordAfterMillion . ' ' . $numberInTextArray [ 1 ] . $wordAfterThousand . ' ' . $numberInTextArray [ 0 ] . $wordAfterRoubles ; 
/*Удаляем лишние пробелы*/ 
$text =  delete_double_space ( $text ) ; 
 
	return  ( $text ) ; 
} 
$text =  summ_to_text( 11012013 ) ; 
echo  ( $text ) ; 
 
				PD9waHAKIAplcnJvcl9yZXBvcnRpbmcoLTEpOwptYl9pbnRlcm5hbF9lbmNvZGluZygndXRmLTgnKTsKCi8q0JPQu9C+0LHQsNC70YzQvdCw0Y8g0YTRg9C90LrRhtC40Y8sINC60L7RgtC+0YDQsNGPINC/0L7Qu9GD0YfQsNC10YIg0YfQuNGB0LvQviAkbiDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDRgtC10LrRgdGC0L7QstGD0Y4g0YTQvtGA0LzRgyDQvdCw0L/QuNGB0LDQvdC40Y8g0YHRg9C80LzRiyovCmZ1bmN0aW9uIHN1bW1fdG9fdGV4dCAoJG4pIHsKCi8q0K3RgtCwINGE0YPQvdC60YbQuNGPINGA0LDQt9Cx0LjQstCw0LXRgiDRh9C40YHQu9C+INC90LAg0LPRgNGD0L/Qv9GLINGC0YDQtdGF0LfQvdCw0YfQvdGL0YUg0YfQuNGB0LXQuyovCmZ1bmN0aW9uIHNwbGl0dGluZ0ludG9Hcm91cHMgKCRuKSB7Cgokc3BsaXRBcnJheT1bXTsKZm9yICgkaT0kbjsgJGk+PTE7ICRpPSRpKzApIHsKCSRpPSRpLzEwMDA7CgkkdD1yb3VuZCgxMDAwKmZtb2QoJGksMSkpOwoJJGk9Zmxvb3IoJGkpOwoJJHNwbGl0QXJyYXlbXT0kdDsKCX0KCXJldHVybiAkc3BsaXRBcnJheTsKfQoKLyrQrdGC0LAg0YTRg9C90LrRhtC40Y8g0L7Qv9GA0LXQtNC10LvRj9C10YIg0L/RgNCw0LLQuNC70YzQvdGD0Y4g0YTQvtGA0LzRgyDQuNC80LXQvdC4INGA0LDQt9GA0Y/QtNCwINGB0YPQvNC80Ysg0LTQu9GPINGH0LjRgdC70LAgJGRpc2NoYXJnZVZhbHVlINC40Lcg0Y/Rh9C10LnQutC4ICR4INC80LDRgdGB0LjQstCwICRkaXNjaGFyZ2VBcnJheSovCmZ1bmN0aW9uIGRpc2NoYXJnZV9zdW0gKCRkaXNjaGFyZ2VWYWx1ZSwkeCkgewokZGlzY2hhcmdlQXJyYXk9IFsgICdyb3VibGVzJz0+IFsn0YDRg9Cx0LvRjCcsICfRgNGD0LHQu9GPJywgJ9GA0YPQsdC70LXQuSddLAoJCQkJCSd0aG91c2FuZCc9PiBbJ9GC0YvRgdGP0YfQsCcsJ9GC0YvRgdGP0YfQuCcsJ9GC0YvRgdGP0YcnXSwKCQkJCQknbWlsbGlvbic9PiBbJ9C80LjQu9C70LjQvtC9Jywn0LzQuNC70LvQuNC+0L3QsCcsJ9C80LjQu9C70LjQvtC90L7QsiddCgldOwokcmVnZXhwTGFzdE51bWJlcjE9Jy9eWzFdJC8nOwokcmVnZXhwTGFzdE51bWJlcjJ0bzQ9Jy9eWzBdP1swXT9bMi00XSQvJzsKJHJlZ2V4cExhc3ROdW1iZXIxMHRvMTk9Jy9bMC05XT9bMV1bMC05XSQvJzsKJHJlZ2V4cExhc3ROdW1iZXJYMT0nL1swLTldP1swLDItOV1bMV0kLyc7CiRyZWdleHBMYXN0TnVtYmVyWDJ0b1g0PScvWzAtOV0/WzAsMi05XVsyLTRdJC8nOwppZiAocHJlZ19tYXRjaCgkcmVnZXhwTGFzdE51bWJlcjEsJGRpc2NoYXJnZVZhbHVlKSl7Cgkkd29yZEFmdGVyTj0kZGlzY2hhcmdlQXJyYXlbJHhdWzBdOwp9CmVsc2VpZiAocHJlZ19tYXRjaCgkcmVnZXhwTGFzdE51bWJlcjJ0bzQsJGRpc2NoYXJnZVZhbHVlKSl7Cgkkd29yZEFmdGVyTj0kZGlzY2hhcmdlQXJyYXlbJHhdWzFdOwp9CmVsc2VpZiAocHJlZ19tYXRjaCgkcmVnZXhwTGFzdE51bWJlcjEwdG8xOSwkZGlzY2hhcmdlVmFsdWUpKXsKCSR3b3JkQWZ0ZXJOPSRkaXNjaGFyZ2VBcnJheVskeF1bMl07Cn0KZWxzZWlmIChwcmVnX21hdGNoKCRyZWdleHBMYXN0TnVtYmVyWDEsJGRpc2NoYXJnZVZhbHVlKSl7Cgkkd29yZEFmdGVyTj0kZGlzY2hhcmdlQXJyYXlbJHhdWzBdOwp9CmVsc2VpZiAocHJlZ19tYXRjaCgkcmVnZXhwTGFzdE51bWJlclgydG9YNCwkZGlzY2hhcmdlVmFsdWUpKXsKCSR3b3JkQWZ0ZXJOPSRkaXNjaGFyZ2VBcnJheVskeF1bMV07Cn0KZWxzZWlmICgkZGlzY2hhcmdlVmFsdWU9PW51bGwpewoJJHdvcmRBZnRlck49Jyc7Cn0KZWxzZXsKCSR3b3JkQWZ0ZXJOPSRkaXNjaGFyZ2VBcnJheVskeF1bMl07Cn0KcmV0dXJuICR3b3JkQWZ0ZXJOOwp9CgovKtCt0YLQsCDRhNGD0L3QutGG0LjRjyDQstC+0LfQstGA0LDRidCw0LXRgiDQvdCw0L/QuNGB0LDQvdC40LUg0YLRgNC10YXQt9C90LDRh9C90YvRhSDRh9C40YHQtdC7INC40Lcg0LzQsNGB0YHQuNCy0LAg0L/RgNC+0L/QuNGB0YzRjiovCmZ1bmN0aW9uIHNtYWxsTnVtYmVyVG9UZXh0ICgkc3BlbE4pIHsKCSRzcGVsbGluZz0gWzAgICA9PiAgJ9C90L7Qu9GMJywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTAgID0+ICAn0LTQtdGB0Y/RgtGMJywgICAgICAgMTAwID0+ICAn0YHRgtC+JywKICAgICAgICAxICAgPT4gICfQvtC00LjQvScsICAgICAgICAgMTEgID0+ICAn0L7QtNC40L3QvdCw0LTRhtCw0YLRjCcsICAgICAgMjAgID0+ICAn0LTQstCw0LTRhtCw0YLRjCcsICAgICAyMDAgPT4gICfQtNCy0LXRgdGC0LgnLAogICAgICAgIDIgICA9PiAgJ9C00LLQsCcsICAgICAgICAgIDEyICA9PiAgJ9C00LLQtdC90LDQtNGG0LDRgtGMJywgICAgICAgMzAgID0+ICAn0YLRgNC40LTRhtCw0YLRjCcsICAgICAzMDAgPT4gICfRgtGA0LjRgdGC0LAnLAogICAgICAgIDMgICA9PiAgJ9GC0YDQuCcsICAgICAgICAgIDEzICA9PiAgJ9GC0YDQuNC90LDQtNGG0LDRgtGMJywgICAgICAgNDAgID0+ICAn0YHQvtGA0L7QuicsICAgICAgICA0MDAgPT4gICfRh9C10YLRi9GA0LXRgdGC0LAnLAogICAgICAgIDQgICA9PiAgJ9GH0LXRgtGL0YDQtScsICAgICAgIDE0ICA9PiAgJ9GH0LXRgtGL0YDQvdCw0LTRhtCw0YLRjCcsICAgICA1MCAgPT4gICfQv9GP0YLRjNC00LXRgdGP0YInLCAgICA1MDAgPT4gICfQv9GP0YLRjNGB0L7RgicsCiAgICAgICAgNSAgID0+ICAn0L/Rj9GC0YwnLCAgICAgICAgIDE1ICA9PiAgJ9C/0Y/RgtC90LDQtNGG0LDRgtGMJywgICAgICAgNjAgID0+ICAn0YjQtdGB0YLRjNC00LXRgdGP0YInLCAgIDYwMCA9PiAgJ9GI0LXRgdGC0YzRgdC+0YInLAogICAgICAgIDYgICA9PiAgJ9GI0LXRgdGC0YwnLCAgICAgICAgMTYgID0+ICAn0YjQtdGB0YLQvdCw0LTRhtCw0YLRjCcsICAgICAgNzAgID0+ICAn0YHQtdC80YzQtNC10YHRj9GCJywgICAgNzAwID0+ICAn0YHQtdC80YzRgdC+0YInLCAgICAKICAgICAgICA3ICAgPT4gICfRgdC10LzRjCcsICAgICAgICAgMTcgID0+ICAn0YHQtdC80L3QsNC00YbQsNGC0YwnLCAgICAgICA4MCAgPT4gICfQstC+0YHQtdC80YzQtNC10YHRj9GCJywgICA4MDAgPT4gICfQstC+0YHQtdC80YzRgdC+0YInLAogICAgICAgIDggICA9PiAgJ9Cy0L7RgdC10LzRjCcsICAgICAgIDE4ICA9PiAgJ9Cy0L7RgdC10LzQvdCw0LTRhtCw0YLRjCcsICAgICA5MCAgPT4gICfQtNC10LLRj9C90L7RgdGC0L4nLCAgICAgOTAwID0+ICAn0LTQtdCy0Y/RgtGM0YHQvtGCJywKICAgICAgICA5ICAgPT4gICfQtNC10LLRj9GC0YwnLCAgICAgICAxOSAgPT4gICfQtNC10LLRj9GC0L3QsNC00YbQsNGC0YwnICAgIF07CgkkcmVnZXhwMXRvOT0nL1swLTldP1swLTldP1sxLTldJC8nOwoJJHJlZ2V4cDEwdG8xOT0gJy9bMC05XT9bMV1bMC05XSQvJzsKCSRyZWdleHAyMHRvOTA9ICcvWzAtOV0/WzItOV1bMC05XSQvJzsKCSRyZWdleHAxMDB0bzkwMD0gJy9bMS05XVswLTldWzAtOV0kLyc7CgkKCSRzcGVsTj1hcnJheV9yZXZlcnNlKCRzcGVsTik7CgkkdGV4dD1udWxsOwoJCWZvcmVhY2ggKCRzcGVsTiBhcyAkbikgewoJCQkkbnVtYmVySW5Xb3Jkcz0nJzsKCQlpZiAocHJlZ19tYXRjaCgkcmVnZXhwMXRvOSwkbikpIHsKCQkkeD0oJG4lMTAwKSUxMDsKCQkkbnVtYmVySW5Xb3Jkcz0kc3BlbGxpbmdbJHhdIC4gJyAnOwoJfQoJCWlmIChwcmVnX21hdGNoKCRyZWdleHAxMHRvMTksJG4pKSB7CgkJCSR5PWZsb29yKCRuJTEwMCk7CgkJCSRudW1iZXJJbldvcmRzPSRzcGVsbGluZ1skeV0gLiAnICc7CgkJfQoJCQlpZiAocHJlZ19tYXRjaCAoJHJlZ2V4cDIwdG85MCwkbikpIHsKCQkJJHo9KGZsb29yKCRuJTEwMC8xMCkpKjEwOwoJCSRudW1iZXJJbldvcmRzPSRzcGVsbGluZ1skel0gLiAnICcgLiAkbnVtYmVySW5Xb3JkcyAuICcgJzsKCQl9CgkJaWYgKHByZWdfbWF0Y2ggKCRyZWdleHAxMDB0bzkwMCwkbikpIHsKCQkJJHc9KGZsb29yKCRuLzEwMCkpKjEwMDsKCQkJJG51bWJlckluV29yZHM9JHNwZWxsaW5nWyR3XSAuICcgJyAuICRudW1iZXJJbldvcmRzIC4gJyc7CgkJfQoJCSR0ZXh0QXJyYXlbXT0kbnVtYmVySW5Xb3JkczsKCQl9CgkJcmV0dXJuICR0ZXh0QXJyYXk7Cn0KCi8q0K3RgtCwINGE0YPQvdC60YbQuNGPINC80LXQvdGP0LXRgiDRhNGA0LDQt9GLICLQvtC00LjQvSDRgtGL0YHRj9GH0LAiINC4ICLQtNCy0LUg0YLRi9GB0Y/Rh9CwIiDQvdCwICLQvtC00L3QsCDRgtGL0YHRj9GH0LAiINC4ICLQtNCy0LUg0YLRi9GB0Y/Rh9C4IiDRgdC+0L7RgtCy0LXRgtGB0YLQstC10L3QvdC+Ki8KZnVuY3Rpb24gY29ycmVjdF90aG91c2FuZCAoJGFycmF5TikgewoJJHJlZ2V4cDF0aG91c2FuZD0nL9C+0LTQuNC9XFxzL3VpJzsKCSRyZWdleHAydGhvdXNhbmQ9Jy/QtNCy0LBcXHMvdWknOwokYXJyYXlOWzFdPXByZWdfcmVwbGFjZSgkcmVnZXhwMXRob3VzYW5kLCfQvtC00L3QsCAnLCRhcnJheU5bMV0pOwokYXJyYXlOWzFdPXByZWdfcmVwbGFjZSgkcmVnZXhwMnRob3VzYW5kLCfQtNCy0LUgJywkYXJyYXlOWzFdKTsKcmV0dXJuKCRhcnJheU4pOwp9CgovKtCt0YLQsCDRhNGD0L3QutGG0LjRjyDRg9C00LDQu9GP0LXRgiDQu9C40YjQvdC40LUg0L/RgNC+0LHQtdC70YssINC60L7RgtC+0YDRi9C1INC/0L7Rj9Cy0LvRj9GO0YLRgdGPINCyINGB0LvRg9GH0LDQtSDQvtGC0YHRg9GC0YHRgtCy0LjRjyDRgNCw0LfRgNGP0LTQvtCyINC80LjQu9C70LjQvtC90L7QsiDQuCDRgtGL0YHRj9GHKi8KZnVuY3Rpb24gZGVsZXRlX2RvdWJsZV9zcGFjZSAoJHRleHRGb3JEZWxldGVTcGFjZSkgewoJJHJlZ2V4cERvdWJsZVNwYWNlPScvKFxccyl7Mix9L3VpJzsKCSR0ZXh0QWZ0ZXJEZWxldGVEb3VibGVTcGFjZT1wcmVnX3JlcGxhY2UoJHJlZ2V4cERvdWJsZVNwYWNlLCcgJywkdGV4dEZvckRlbGV0ZVNwYWNlKTsKCXJldHVybiAkdGV4dEFmdGVyRGVsZXRlRG91YmxlU3BhY2U7Cn0KCi8q0J/QvtC70YPRh9Cw0LXQvCDQvNCw0YHRgdC40LIg0YLRgNC10YXQt9C90LDRh9C90YvRhSDRh9C40YHQtdC7Ki8KJHNwbGl0QXJyYXk9IHNwbGl0dGluZ0ludG9Hcm91cHMgKCRuKTsKCi8q0KHQvtC30LTQsNC10Lwg0LzQsNGB0YHQuNCyINC00LvRjyDQt9Cw0L/QuNGB0Lgg0LjQvNC10L0g0YDQsNC30YDRj9C00L7QsiovCiRkaXNjaGFyZ2VBcnJheVNwZWxOPSBbJ3JvdWJsZXMnPT5udWxsLCAndGhvdXNhbmQnPT5udWxsLCAnbWlsbGlvbic9Pm51bGxdOwoKLyrQntC/0YDQtdC00LXQu9GP0LXQvCDQv9GA0LDQstC40LvRjNC90YvQtSDQuNC80LXQvdCwINGA0LDQt9GA0Y/QtNC+0LIg0Lgg0L/QvtC+0YfQtdGA0LXQtNC90L4g0LfQsNC/0LjRgdGL0LLQsNC10Lwg0LjRhSDQsiDQvNCw0YHRgdC40LIqLwokd29yZEFmdGVyUm91Ymxlcz0gZGlzY2hhcmdlX3N1bSgkc3BsaXRBcnJheVswXSwncm91YmxlcycpOwppZiAoJHNwbGl0QXJyYXlbMF09PTApewoJCSR3b3JkQWZ0ZXJSb3VibGVzPSfRgNGD0LHQu9C10LknOwoJfQokZGlzY2hhcmdlQXJyYXlTcGVsTltyb3VibGVzXT0kd29yZEFmdGVyUm91YmxlczsKJHdvcmRBZnRlclRob3VzYW5kPSBkaXNjaGFyZ2Vfc3VtKCRzcGxpdEFycmF5WzFdLCd0aG91c2FuZCcpOwokZGlzY2hhcmdlQXJyYXlTcGVsTlt0aG91c2FuZF09JHdvcmRBZnRlclRob3VzYW5kOwokd29yZEFmdGVyTWlsbGlvbj0gZGlzY2hhcmdlX3N1bSgkc3BsaXRBcnJheVsyXSwnbWlsbGlvbicpOwokZGlzY2hhcmdlQXJyYXlTcGVsTlttaWxsaW9uXT0kd29yZEFmdGVyTWlsbGlvbjsKLyrQn9C10YDQtdCy0L7QtNC40Lwg0LzQsNGB0YHQuNCyINGC0YDQtdGF0LfQvdCw0YfQvdGL0YUg0YfQuNGB0LXQuyDQsiDRgtC10LrRgdGC0L7QstGD0Y4g0YTQvtGA0LzRgyDQuCDQvtC00L3QvtCy0YDQtdC80LXQvdC90L4g0LXQs9C+INC/0LXRgNC10LLQvtGA0LDRh9C40LLQsNC10LwsINGCLtC6LiBmb3JlYWNoINC30LDQv9C40YHQsNC70L4g0LzQsNGB0YHQuNCyINCyINC+0LHRgNCw0YLQvdC+0Lwg0L/QvtGA0Y/QtNC60LUqLwokbnVtYmVySW5UZXh0QXJyYXk9IGFycmF5X3JldmVyc2UgKHNtYWxsTnVtYmVyVG9UZXh0ICgkc3BsaXRBcnJheSkpOwovKtCf0YDQvtCy0LXRgNGP0LXQvCwg0L3Rg9C20L3QviDQu9C4INC40YHQv9GA0LDQstC40YLRjCDQvtC60L7QvdGH0LDQvdC40LUg0YDQsNC30YDRj9C00LAg0YLRi9GB0Y/RhyovCiRudW1iZXJJblRleHRBcnJheT0gY29ycmVjdF90aG91c2FuZCAoJG51bWJlckluVGV4dEFycmF5KTsKaWYgKCRuPT0wKXsKCSRudW1iZXJJblRleHRBcnJheVswXT0nMCAnOwp9Ci8q0KHQvtCx0LjRgNCw0LXQvCDRgtC10LrRgdGCKi8KJHRleHQ9ICRudW1iZXJJblRleHRBcnJheVsyXS4kd29yZEFmdGVyTWlsbGlvbi4nICcuJG51bWJlckluVGV4dEFycmF5WzFdLiR3b3JkQWZ0ZXJUaG91c2FuZC4nICcuJG51bWJlckluVGV4dEFycmF5WzBdLiR3b3JkQWZ0ZXJSb3VibGVzOwovKtCj0LTQsNC70Y/QtdC8INC70LjRiNC90LjQtSDQv9GA0L7QsdC10LvRiyovCiR0ZXh0PSBkZWxldGVfZG91YmxlX3NwYWNlICgkdGV4dCk7CgoJcmV0dXJuICgkdGV4dCk7Cn0KJHRleHQ9IHN1bW1fdG9fdGV4dCgxMTAxMjAxMyk7CmVjaG8gKCR0ZXh0KTs=