<?php 
 
 
/* Возвращает соответствующую числу форму слова: 1 рубль, 2 рубля, 5 рублей */ 
function  inclineWord( $number ,  $word1 ,  $word2 ,  $word3 )  { 
 
    if  ( $number  %  100  >  10  and $number  %  100  <  20 )  { 
        $number  %=  100 ; 
    }  elseif  ( $number  >  0 )  { 
        $number  %=  10 ; 
    } 
 
    if  ( $number  ==  1 )  { 
        $word  =  $word1 ; 
    }  elseif  ( $number  >=  2  and $number  <=  4 )  { 
        $word  =  $word2 ; 
    }  elseif  ( $number  >=  5  and $number  <=  9  or $number  >  10  and $number  <  20  or $number  ==  0 )  { 
        $word  =  $word3 ; 
    } 
 
    return  $word ; 
} 
 
/*  
    Преобразует числа от 0 до 999 в текст. Параметр $isFemale равен нулю,  
    если мы считаем число для мужского рода (один рубль),  
    и 1 — для женского (одна тысяча). Параметр $totalNumberLength  
    помогает определить число ноль. 
*/ 
function  smallNumberToText( $number ,  $isFemale ,  $totalNumberLength )  { 
 
        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   =>   'девятнадцать'     
    ) ; 
 
    if  ( $isFemale )  { 
            1    =>   'одна' ,   
            2    =>   'две' 
        ) ; 
        $spelling  =  array_replace( $spelling ,  $femaleSpelling ) ; 
    } 
 
    if  ( $number  >  0 )  { 
 
 
	    // Разделение числа на единичный массив 
	    for  ( $i  =  0 ;  $i  <  $lengthOfNumber ;  $i ++ )  { 
            // Объединение чисел с особой формой 
	        if  ( $i  ==  0  and $number  %  100  >  10  and $number  %  100  <  20 )  { 
	            $numbers [ ]  =  ( $number  %  100 ) ; 
	            $number  =  floor ( $number  /  100 ) ;  	        }  else  { 
	            $numbers [ ]  =  ( $number  %  10 ) ; 
	            $number  =  floor ( $number  /  10 ) ;  	        } 
	    } 
 
	    $arraySize  =  count ( $numbers ) ;          /* 
        Подбор множителя, с его помощью из словаря запрашиваются сотни/десятки. 
 
        Например, если размер ранее полученного массива с числами равен двум  
        и длина числа тоже равна двум, то множитель устанавливает значение 10. 
        В цикле, которой следует ниже, после итерации множитель уменьшается до 1. 
        */ 
	    $mult  =  ( $arraySize  >  1 )  ? ( ( $lengthOfNumber  ==  3 )  ? 100  :  10 )  :  1 ; 
 
        /* Берет по порядку значения из массива, делает запрос в словарь  
        и записывает полученное текстовое значение в массив $words */ 
	    for  ( $i  =  0 ;  $i  <  $arraySize ;  $i ++ )  { 
	        if  ( $numbers [ $i ]  !=  0 )  { 
	            $words [ ]  =  $spelling [ $numbers [ $i ]  *  $mult ] ; 
	        } 
            // Уменьшение множителя для следующей итерации 
	        $mult  =  ( $lengthOfNumber  ==  3  and $arraySize  ==  2 )  ? 1  :  $mult  /  10 ; 
	    } 
 
 
    }  elseif  ( $totalNumberLength  <  1 )  { 
        $text  =  $spelling [ $number ] ; 
    }  else  { 
        $text  =  null ; 
    } 
 
    return  $text ; 
} 
 
function  numberToText( $number )  { 
 
        0  =>  array ( 0  =>  'рубль' ,  1  =>  'рубля' ,  2  =>  'рублей' ) ,          1  =>  array ( 0  =>  'тысяча' ,  1  =>  'тысячи' ,  2  =>  'тысяч' ) ,          2  =>  array ( 0  =>  'миллион' ,  1  =>  'миллиона' ,  2  =>  'миллионов' )      ) ; 
 
 
    $divisibleNumber  =  $number ; 
    // Цикл выполняется N-е кол-во раз в зависимости от длины числа или один раз для обработки нуля 
    for  ( $x  =  0 ;  $x  <  ceil ( $lengthOfNumber  /  3 )  or 
$x  ==  0 ;  $x ++ )  {   
        // Делит число на массив по три единицы 
        $numbers [ ]  =  $divisibleNumber  %  1000 ; 
        $divisibleNumber  =  floor ( $divisibleNumber  /  1000 ) ;   
        // Берет от тысячного числа в массиве $numbers последнюю цифру и проверяет на женственный род 
        $isFemale  =  ( $x  ==  1  and $numbers [ 1 ]  %  10  ==  1  or $x  ==  1  and $numbers [ 1 ]  %  10  ==  2 )  ? 1  :  0 ; 
 
        $numberInText  =  smallNumberToText( $numbers [ $x ] ,  $isFemale ,  $lengthOfNumber ) ; 
        $inclinedWord  =  inclineWord( $numbers [ $x ] ,  $spelling [ $x ] [ 0 ] ,  $spelling [ $x ] [ 1 ] ,  $spelling [ $x ] [ 2 ] ) ; 
 
        // Формирование и запись результата 
        if  ( $x  ==  0 )  { 
            if  ( $numberInText )  { 
                $text  =  $numberInText ; 
            } 
                $text  =  $text . ' ' . "($number )" . ' ' . $inclinedWord ; 
            }  else  { 
                $text  =  "($number )" . ' ' . $inclinedWord ; 
            } 
        }  else  { 
            if  ( $numberInText )  { 
                $text  =  $numberInText . ' ' . $inclinedWord . ' ' . $text ; 
            } 
        } 
    } 
 
    return  $text ; 
} 
 
/* Вызовем функцию несколько раз */ 
 
$text1  =  numberToText( $amount1 ) ; 
 
echo  "На вашем счету {$text1} \n " ; 
 
$text2  =  numberToText( $amount2 ) ; 
 
echo  "На вашем счету {$text2} \n " ; 
 
$text3  =  numberToText( $amount3 ) ; 
 
echo  "На вашем счету {$text3} \n " ; 
 
$numbers  =  [ 999999999 ,  0 ,  1 ,  11012013 ,  7000008 ,  1002 ,  1000 ,  7000000 ] ; 
foreach  ( $numbers  as  $number )  { 
    $amount4  =  $number ; 
    $text4  =  numberToText( $amount4 ) ; 
 
    echo  "На вашем счету {$text4} \n " ; 
} 
PD9waHAKCmVycm9yX3JlcG9ydGluZygtMSk7CgovKiDQktC+0LfQstGA0LDRidCw0LXRgiDRgdC+0L7RgtCy0LXRgtGB0YLQstGD0Y7RidGD0Y4g0YfQuNGB0LvRgyDRhNC+0YDQvNGDINGB0LvQvtCy0LA6IDEg0YDRg9Cx0LvRjCwgMiDRgNGD0LHQu9GPLCA1INGA0YPQsdC70LXQuSAqLwpmdW5jdGlvbiBpbmNsaW5lV29yZCgkbnVtYmVyLCAkd29yZDEsICR3b3JkMiwgJHdvcmQzKSB7CgogICAgaWYgKCRudW1iZXIgJSAxMDAgPiAxMCBhbmQgJG51bWJlciAlIDEwMCA8IDIwKSB7CiAgICAgICAgJG51bWJlciAlPSAxMDA7CiAgICB9IGVsc2VpZiAoJG51bWJlciA+IDApIHsKICAgICAgICAkbnVtYmVyICU9IDEwOwogICAgfQoKICAgIGlmICgkbnVtYmVyID09IDEpIHsKICAgICAgICAkd29yZCA9ICR3b3JkMTsKICAgIH0gZWxzZWlmICgkbnVtYmVyID49IDIgYW5kICRudW1iZXIgPD0gNCkgewogICAgICAgICR3b3JkID0gJHdvcmQyOwogICAgfSBlbHNlaWYgKCRudW1iZXIgPj0gNSBhbmQgJG51bWJlciA8PSA5IG9yICRudW1iZXIgPiAxMCBhbmQgJG51bWJlciA8IDIwIG9yICRudW1iZXIgPT0gMCkgewogICAgICAgICR3b3JkID0gJHdvcmQzOwogICAgfQoKICAgIHJldHVybiAkd29yZDsKfQoKLyogCiAgICDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINGH0LjRgdC70LAg0L7RgiAwINC00L4gOTk5INCyINGC0LXQutGB0YIuINCf0LDRgNCw0LzQtdGC0YAgJGlzRmVtYWxlINGA0LDQstC10L0g0L3Rg9C70Y4sIAogICAg0LXRgdC70Lgg0LzRiyDRgdGH0LjRgtCw0LXQvCDRh9C40YHQu9C+INC00LvRjyDQvNGD0LbRgdC60L7Qs9C+INGA0L7QtNCwICjQvtC00LjQvSDRgNGD0LHQu9GMKSwgCiAgICDQuCAxIOKAlCDQtNC70Y8g0LbQtdC90YHQutC+0LPQviAo0L7QtNC90LAg0YLRi9GB0Y/Rh9CwKS4g0J/QsNGA0LDQvNC10YLRgCAkdG90YWxOdW1iZXJMZW5ndGggCiAgICDQv9C+0LzQvtCz0LDQtdGCINC+0L/RgNC10LTQtdC70LjRgtGMINGH0LjRgdC70L4g0L3QvtC70YwuCiovCmZ1bmN0aW9uIHNtYWxsTnVtYmVyVG9UZXh0KCRudW1iZXIsICRpc0ZlbWFsZSwgJHRvdGFsTnVtYmVyTGVuZ3RoKSB7CgogICAgJHNwZWxsaW5nID0gYXJyYXkoCiAgICAgICAgMCAgID0+ICAn0L3QvtC70YwnLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMCAgPT4gICfQtNC10YHRj9GC0YwnLCAgICAgICAxMDAgPT4gICfRgdGC0L4nLAogICAgICAgIDEgICA9PiAgJ9C+0LTQuNC9JywgICAgICAgICAxMSAgPT4gICfQvtC00LjQvdC90LDQtNGG0LDRgtGMJywgICAgICAyMCAgPT4gICfQtNCy0LDQtNGG0LDRgtGMJywgICAgIDIwMCA9PiAgJ9C00LLQtdGB0YLQuCcsCiAgICAgICAgMiAgID0+ICAn0LTQstCwJywgICAgICAgICAgMTIgID0+ICAn0LTQstC10L3QsNC00YbQsNGC0YwnLCAgICAgICAzMCAgPT4gICfRgtGA0LjQtNGG0LDRgtGMJywgICAgIDMwMCA9PiAgJ9GC0YDQuNGB0YLQsCcsCiAgICAgICAgMyAgID0+ICAn0YLRgNC4JywgICAgICAgICAgMTMgID0+ICAn0YLRgNC40L3QsNC00YbQsNGC0YwnLCAgICAgICA0MCAgPT4gICfRgdC+0YDQvtC6JywgICAgICAgIDQwMCA9PiAgJ9GH0LXRgtGL0YDQtdGB0YLQsCcsCiAgICAgICAgNCAgID0+ICAn0YfQtdGC0YvRgNC1JywgICAgICAgMTQgID0+ICAn0YfQtdGC0YvRgNC90LDQtNGG0LDRgtGMJywgICAgIDUwICA9PiAgJ9C/0Y/RgtGM0LTQtdGB0Y/RgicsICAgIDUwMCA9PiAgJ9C/0Y/RgtGM0YHQvtGCJywKICAgICAgICA1ICAgPT4gICfQv9GP0YLRjCcsICAgICAgICAgMTUgID0+ICAn0L/Rj9GC0L3QsNC00YbQsNGC0YwnLCAgICAgICA2MCAgPT4gICfRiNC10YHRgtGM0LTQtdGB0Y/RgicsICAgNjAwID0+ICAn0YjQtdGB0YLRjNGB0L7RgicsCiAgICAgICAgNiAgID0+ICAn0YjQtdGB0YLRjCcsICAgICAgICAxNiAgPT4gICfRiNC10YHRgtC90LDQtNGG0LDRgtGMJywgICAgICA3MCAgPT4gICfRgdC10LzRjNC00LXRgdGP0YInLCAgICA3MDAgPT4gICfRgdC10LzRjNGB0L7RgicsICAgIAogICAgICAgIDcgICA9PiAgJ9GB0LXQvNGMJywgICAgICAgICAxNyAgPT4gICfRgdC10LzQvdCw0LTRhtCw0YLRjCcsICAgICAgIDgwICA9PiAgJ9Cy0L7RgdC10LzRjNC00LXRgdGP0YInLCAgIDgwMCA9PiAgJ9Cy0L7RgdC10LzRjNGB0L7RgicsCiAgICAgICAgOCAgID0+ICAn0LLQvtGB0LXQvNGMJywgICAgICAgMTggID0+ICAn0LLQvtGB0LXQvNC90LDQtNGG0LDRgtGMJywgICAgIDkwICA9PiAgJ9C00LXQstGP0L3QvtGB0YLQvicsICAgICA5MDAgPT4gICfQtNC10LLRj9GC0YzRgdC+0YInLAogICAgICAgIDkgICA9PiAgJ9C00LXQstGP0YLRjCcsICAgICAgIDE5ICA9PiAgJ9C00LXQstGP0YLQvdCw0LTRhtCw0YLRjCcgICAgCiAgICApOwoKICAgIGlmICgkaXNGZW1hbGUpIHsKICAgICAgICAkZmVtYWxlU3BlbGxpbmcgPSBhcnJheSgKICAgICAgICAgICAgMSAgID0+ICAn0L7QtNC90LAnLCAgCiAgICAgICAgICAgIDIgICA9PiAgJ9C00LLQtScKICAgICAgICApOwogICAgICAgICRzcGVsbGluZyA9IGFycmF5X3JlcGxhY2UoJHNwZWxsaW5nLCAkZmVtYWxlU3BlbGxpbmcpOwogICAgfQogICAgCiAgICBpZiAoJG51bWJlciA+IDApIHsKCgkgICAgJGxlbmd0aE9mTnVtYmVyID0gZmxvb3IobG9nMTAoJG51bWJlcikgKyAxKTsKCSAgICAKCSAgICAvLyDQoNCw0LfQtNC10LvQtdC90LjQtSDRh9C40YHQu9CwINC90LAg0LXQtNC40L3QuNGH0L3Ri9C5INC80LDRgdGB0LjQsgoJICAgIGZvciAoJGkgPSAwOyAkaSA8ICRsZW5ndGhPZk51bWJlcjsgJGkrKykgewogICAgICAgICAgICAvLyDQntCx0YrQtdC00LjQvdC10L3QuNC1INGH0LjRgdC10Lsg0YEg0L7RgdC+0LHQvtC5INGE0L7RgNC80L7QuQoJICAgICAgICBpZiAoJGkgPT0gMCBhbmQgJG51bWJlciAlIDEwMCA+IDEwIGFuZCAkbnVtYmVyICUgMTAwIDwgMjApIHsKCSAgICAgICAgICAgICRudW1iZXJzW10gPSAoJG51bWJlciAlIDEwMCk7CgkgICAgICAgICAgICAkbnVtYmVyID0gZmxvb3IoJG51bWJlciAvIDEwMCk7CgkgICAgICAgIH0gZWxzZSB7CgkgICAgICAgICAgICAkbnVtYmVyc1tdID0gKCRudW1iZXIgJSAxMCk7CgkgICAgICAgICAgICAkbnVtYmVyID0gZmxvb3IoJG51bWJlciAvIDEwKTsKCSAgICAgICAgfQoJICAgIH0KCSAgICAKCSAgICAkbnVtYmVycyA9IGFycmF5X3JldmVyc2UoJG51bWJlcnMpOwoJICAgICRhcnJheVNpemUgPSBjb3VudCgkbnVtYmVycyk7CiAgICAgICAgLyoKICAgICAgICDQn9C+0LTQsdC+0YAg0LzQvdC+0LbQuNGC0LXQu9GPLCDRgSDQtdCz0L4g0L/QvtC80L7RidGM0Y4g0LjQtyDRgdC70L7QstCw0YDRjyDQt9Cw0L/RgNCw0YjQuNCy0LDRjtGC0YHRjyDRgdC+0YLQvdC4L9C00LXRgdGP0YLQutC4LgoKICAgICAgICDQndCw0L/RgNC40LzQtdGALCDQtdGB0LvQuCDRgNCw0LfQvNC10YAg0YDQsNC90LXQtSDQv9C+0LvRg9GH0LXQvdC90L7Qs9C+INC80LDRgdGB0LjQstCwINGBINGH0LjRgdC70LDQvNC4INGA0LDQstC10L0g0LTQstGD0LwgCiAgICAgICAg0Lgg0LTQu9C40L3QsCDRh9C40YHQu9CwINGC0L7QttC1INGA0LDQstC90LAg0LTQstGD0LwsINGC0L4g0LzQvdC+0LbQuNGC0LXQu9GMINGD0YHRgtCw0L3QsNCy0LvQuNCy0LDQtdGCINC30L3QsNGH0LXQvdC40LUgMTAuCiAgICAgICAg0JIg0YbQuNC60LvQtSwg0LrQvtGC0L7RgNC+0Lkg0YHQu9C10LTRg9C10YIg0L3QuNC20LUsINC/0L7RgdC70LUg0LjRgtC10YDQsNGG0LjQuCDQvNC90L7QttC40YLQtdC70Ywg0YPQvNC10L3RjNGI0LDQtdGC0YHRjyDQtNC+IDEuCiAgICAgICAgKi8KCSAgICAkbXVsdCA9ICgkYXJyYXlTaXplID4gMSkgPyAoKCRsZW5ndGhPZk51bWJlciA9PSAzKSA/IDEwMCA6IDEwKSA6IDE7CgogICAgICAgIC8qINCR0LXRgNC10YIg0L/QviDQv9C+0YDRj9C00LrRgyDQt9C90LDRh9C10L3QuNGPINC40Lcg0LzQsNGB0YHQuNCy0LAsINC00LXQu9Cw0LXRgiDQt9Cw0L/RgNC+0YEg0LIg0YHQu9C+0LLQsNGA0YwgCiAgICAgICAg0Lgg0LfQsNC/0LjRgdGL0LLQsNC10YIg0L/QvtC70YPRh9C10L3QvdC+0LUg0YLQtdC60YHRgtC+0LLQvtC1INC30L3QsNGH0LXQvdC40LUg0LIg0LzQsNGB0YHQuNCyICR3b3JkcyAqLwoJICAgIGZvciAoJGkgPSAwOyAkaSA8ICRhcnJheVNpemU7ICRpKyspIHsKCSAgICAgICAgaWYgKCRudW1iZXJzWyRpXSAhPSAwKSB7CgkgICAgICAgICAgICAkd29yZHNbXSA9ICRzcGVsbGluZ1skbnVtYmVyc1skaV0gKiAkbXVsdF07CgkgICAgICAgIH0KICAgICAgICAgICAgLy8g0KPQvNC10L3RjNGI0LXQvdC40LUg0LzQvdC+0LbQuNGC0LXQu9GPINC00LvRjyDRgdC70LXQtNGD0Y7RidC10Lkg0LjRgtC10YDQsNGG0LjQuAoJICAgICAgICAkbXVsdCA9ICgkbGVuZ3RoT2ZOdW1iZXIgPT0gMyBhbmQgJGFycmF5U2l6ZSA9PSAyKSA/IDEgOiAkbXVsdCAvIDEwOwoJICAgIH0KCQoJICAgICR0ZXh0ID0gaW1wbG9kZSgnICcsICR3b3Jkcyk7CgogICAgfSBlbHNlaWYgKCR0b3RhbE51bWJlckxlbmd0aCA8IDEpIHsKICAgICAgICAkdGV4dCA9ICRzcGVsbGluZ1skbnVtYmVyXTsKICAgIH0gZWxzZSB7CiAgICAgICAgJHRleHQgPSBudWxsOwogICAgfQoKICAgIHJldHVybiAkdGV4dDsKfQoKZnVuY3Rpb24gbnVtYmVyVG9UZXh0KCRudW1iZXIpIHsKCiAgICAkc3BlbGxpbmcgPSBhcnJheSgKICAgICAgICAwID0+IGFycmF5KDAgPT4gJ9GA0YPQsdC70YwnLCAxID0+ICfRgNGD0LHQu9GPJywgMiA9PiAn0YDRg9Cx0LvQtdC5JyksCiAgICAgICAgMSA9PiBhcnJheSgwID0+ICfRgtGL0YHRj9GH0LAnLCAxID0+ICfRgtGL0YHRj9GH0LgnLCAyID0+ICfRgtGL0YHRj9GHJyksCiAgICAgICAgMiA9PiBhcnJheSgwID0+ICfQvNC40LvQu9C40L7QvScsIDEgPT4gJ9C80LjQu9C70LjQvtC90LAnLCAyID0+ICfQvNC40LvQu9C40L7QvdC+0LInKQogICAgKTsKICAgIAogICAgJGxlbmd0aE9mTnVtYmVyID0gZmxvb3IobG9nMTAoJG51bWJlcikgKyAxKTsKCiAgICAkZGl2aXNpYmxlTnVtYmVyID0gJG51bWJlcjsKICAgIC8vINCm0LjQutC7INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8gTi3QtSDQutC+0Lst0LLQviDRgNCw0Lcg0LIg0LfQsNCy0LjRgdC40LzQvtGB0YLQuCDQvtGCINC00LvQuNC90Ysg0YfQuNGB0LvQsCDQuNC70Lgg0L7QtNC40L0g0YDQsNC3INC00LvRjyDQvtCx0YDQsNCx0L7RgtC60Lgg0L3Rg9C70Y8KICAgIGZvciAoJHggPSAwOyAkeCA8IGNlaWwoJGxlbmd0aE9mTnVtYmVyIC8gMykgb3IgJHggPT0gMDsgJHgrKykgewoKICAgICAgICAvLyDQlNC10LvQuNGCINGH0LjRgdC70L4g0L3QsCDQvNCw0YHRgdC40LIg0L/QviDRgtGA0Lgg0LXQtNC40L3QuNGG0YsKICAgICAgICAkbnVtYmVyc1tdID0gJGRpdmlzaWJsZU51bWJlciAlIDEwMDA7CiAgICAgICAgJGRpdmlzaWJsZU51bWJlciA9IGZsb29yKCRkaXZpc2libGVOdW1iZXIgLyAxMDAwKTsKCiAgICAgICAgLy8g0JHQtdGA0LXRgiDQvtGCINGC0YvRgdGP0YfQvdC+0LPQviDRh9C40YHQu9CwINCyINC80LDRgdGB0LjQstC1ICRudW1iZXJzINC/0L7RgdC70LXQtNC90Y7RjiDRhtC40YTRgNGDINC4INC/0YDQvtCy0LXRgNGP0LXRgiDQvdCwINC20LXQvdGB0YLQstC10L3QvdGL0Lkg0YDQvtC0CiAgICAgICAgJGlzRmVtYWxlID0gKCR4ID09IDEgYW5kICRudW1iZXJzWzFdICUgMTAgPT0gMSBvciAkeCA9PSAxIGFuZCAkbnVtYmVyc1sxXSAlIDEwID09IDIpID8gMSA6IDA7CgogICAgICAgICRudW1iZXJJblRleHQgPSBzbWFsbE51bWJlclRvVGV4dCgkbnVtYmVyc1skeF0sICRpc0ZlbWFsZSwgJGxlbmd0aE9mTnVtYmVyKTsKICAgICAgICAkaW5jbGluZWRXb3JkID0gaW5jbGluZVdvcmQoJG51bWJlcnNbJHhdLCAkc3BlbGxpbmdbJHhdWzBdLCAkc3BlbGxpbmdbJHhdWzFdLCAkc3BlbGxpbmdbJHhdWzJdKTsKCiAgICAgICAgLy8g0KTQvtGA0LzQuNGA0L7QstCw0L3QuNC1INC4INC30LDQv9C40YHRjCDRgNC10LfRg9C70YzRgtCw0YLQsAogICAgICAgIGlmICgkeCA9PSAwKSB7CiAgICAgICAgICAgIGlmICgkbnVtYmVySW5UZXh0KSB7CiAgICAgICAgICAgICAgICAkdGV4dCA9ICRudW1iZXJJblRleHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGlzc2V0KCR0ZXh0KSkgewogICAgICAgICAgICAgICAgJHRleHQgPSAkdGV4dC4nICcuIigkbnVtYmVyKSIuJyAnLiRpbmNsaW5lZFdvcmQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGV4dCA9ICIoJG51bWJlcikiLicgJy4kaW5jbGluZWRXb3JkOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKCRudW1iZXJJblRleHQpIHsKICAgICAgICAgICAgICAgICR0ZXh0ID0gJG51bWJlckluVGV4dC4nICcuJGluY2xpbmVkV29yZC4nICcuJHRleHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuICR0ZXh0Owp9CgovKiDQktGL0LfQvtCy0LXQvCDRhNGD0L3QutGG0LjRjiDQvdC10YHQutC+0LvRjNC60L4g0YDQsNC3ICovCgokYW1vdW50MSA9IG10X3JhbmQoMSw5OTk5OTk5OSk7CiR0ZXh0MSA9IG51bWJlclRvVGV4dCgkYW1vdW50MSk7CiAKZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YMgeyR0ZXh0MX1cbiI7CiAKJGFtb3VudDIgPSBtdF9yYW5kKDEsOTk5OTk5OTkpOwokdGV4dDIgPSBudW1iZXJUb1RleHQoJGFtb3VudDIpOwogCmVjaG8gItCd0LAg0LLQsNGI0LXQvCDRgdGH0LXRgtGDIHskdGV4dDJ9XG4iOwogCiRhbW91bnQzID0gbXRfcmFuZCgxLDk5OTk5OTk5KTsKJHRleHQzID0gbnVtYmVyVG9UZXh0KCRhbW91bnQzKTsKIAplY2hvICLQndCwINCy0LDRiNC10Lwg0YHRh9C10YLRgyB7JHRleHQzfVxuIjsKCiRudW1iZXJzID0gWzk5OTk5OTk5OSwgMCwgMSwgMTEwMTIwMTMsIDcwMDAwMDgsIDEwMDIsIDEwMDAsIDcwMDAwMDBdOwpmb3JlYWNoICgkbnVtYmVycyBhcyAkbnVtYmVyKSB7CiAgICAkYW1vdW50NCA9ICRudW1iZXI7CiAgICAkdGV4dDQgPSBudW1iZXJUb1RleHQoJGFtb3VudDQpOwogICAgIAogICAgZWNobyAi0J3QsCDQstCw0YjQtdC8INGB0YfQtdGC0YMgeyR0ZXh0NH1cbiI7Cn0=