Content-Type: multipart/related; start=; boundary=----------KSbGLDcyGFNPlO3OpSn9x8 Content-Location: http://forum.qip.ru/showthread.php?t=23054 Subject: =?utf-8?Q?sTranslit=20-=20=D0=B0=D0=BB=D1=8C=D1=82=D0=B5=D1=80=D0=BD=D0=B0=D1=82=D0=B8=D0=B2=D0=BD=D1=8B=D0=B9=20=D1=82=D1=80=D0=B0=D0=BD=D1=81=D0=BB=D0=B8=D1=82=20=D0=B4=D0=BB=D1=8F=20QIP=20-=20QIP=20Forum?= MIME-Version: 1.0 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=showthread.htm Content-Type: text/html; charset=windows-1251; name=showthread.htm Content-Id: Content-Location: http://forum.qip.ru/showthread.php?t=23054 Content-Transfer-Encoding: 8bit sTranslit - альтернативный транслит для QIP - QIP Forum
QIP Home QIP Forum

Вернуться   QIP Forum > Все для QIP Infium > QIP Infium. Доступные модули и утилиты. Plugins.
Добро пожаловать, opiums
Ваш последний визит: Сегодня в 15:58
Личные сообщения: Новых 0, всего 2.

QIP Infium. Доступные модули и утилиты. Plugins. Здесь постить сами модули(плагины), утилиты и темы для их обсуждения.

Ответ
 
Опции темы Поиск в этой теме Оценить тему Опции просмотра
Старый 03.02.2008, 04:02   #1
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 655
Quote selected
По умолчанию sTranslit - альтернативный транслит для QIP



Если у вас есть контакт у которого ПК не понимает кириллицы, то в qip предусмотрена отправка текста транслитом, но вот расшифровки приходящего сообщения из транслита в нормальный текст - нет.
Этот плагин для qip infium исправит эту ситуацию.


Основные возможности:
  • выбор контактов, для которых надо применять транслитацию;
  • возможность использования встроенной транслитации для исходящих сообщений;
  • настройка транслитерации прямо из окна настройки плагина;
  • возможность вставки оригинального текста при транслитерации входящего сообщения;
  • обработка смайлов - смайлы при отправке транслитом не изменяются, не зависимо от того какой набор смайлов у вас установлен;
  • обработка URL, не будет преобразование http://qip.ru в хттп://квип.ру ;
  • перевод интерфейса на русский и другие языки;
  • возможность включить транслитерацию всех входящих сообщений, но отправлять транслит только для выбранных, плагин самостоятельно определяет является ли пришедший текст транслитом;
Снимки экрана:

sTranslit : персональные настройки



sTranslit : создание базы смайлов





Скачать: sTranslit_04.7z (235 Кб)


История внесенных изменений:
0.1 ( 26 октября 2007 )
- Первая опубликованная версия. 0.2 ( 28 октября 2007 )
+ Добавлена возможность редактировать таблицы транслита из окна настроек плагина.
+ Добавлена возможность включать оригинальный текст в транслитированое сообщение.
+ Полностью переписан алгоритм транслитации, чтоб учитывать при транслитации с транслита на кириллицу парные буквы ( sh, ch и др. )
* Исправлено : плагин не давал удалить UIN или Name из списка пользователей для транслитации.

0.3 ( 6 декабря 2007 )
+ Добавлена обработка смайлов - смайлы при расшифровке из транслита больше не переводятся, не зависимо от того какой набор смайлов у вас установлен;
+ Добавлена обработка URL, не будет преобразование ;
+ Добавлена возможность перевод интерфейса на русский и другие языки;
0.3.1 ( 8 марта 2008 )
+ Теперь текст для выбранных контактов будет уходить в транслите, но в историю будет записан оригинальный текст;
0.3.2 ( 14 марта 2008) - Критическое обновление
* Исправлено : плагин блокировал отправку сообщений контактам вне списка

0.4 ( 9 апреля 2009 )
* Исправлено: плагин при определенных смайлах мог завесить QIP.
+ Добавлено: по кнопке в окне сообщений будет открыто окно позволяющее быстро настроить плагин.
* Удален выбор языка из настроек, так как в текущей версии SDK язык можно получить от QIP.
* Плагин переведен на SDK 1.6, требуется QIP Infium 9019 и выше.



Это не OpenSource - код собственнический.

Последний раз редактировалось Shedko, 11.04.2009 в 00:43.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 03.02.2008, 04:23   #2
QIP User
 
Аватар для Bарк
 
Регистрация: 24.03.2007
Сообщений: 237
Quote selected
По умолчанию

Юморлист)) Эт точно. Плагин неплохой, в свое время пользовал, когда одна знакомая на самсунговском телефоне сидела, с аськой без поддержки написания русским языком....
Bарк вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 03.02.2008, 18:39   #3
QIP Newcomer
 
Регистрация: 06.01.2008
Сообщений: 20
Quote selected
По умолчанию

Спасибо за плагин, пришелся как раз кстати. Правда, пришлось подредактировать список букв , перенести наверх в списке Ю, Я... А так - зачОт!
EzheVika вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 05.02.2008, 02:03   #4
Nightly tester
 
Аватар для x2088
 
Регистрация: 18.12.2007
Сообщений: 1,582
Quote selected
По умолчанию

Единого варианта транслита не существует, у транслита основанного на английском языке есть недостаток - он однонаправленный, т.е после преобразования преобразовать по тем же правилам обратно - нельзя. Этот транслит выглядит странно и непривычно, зато он лишён этого недостатка. Привыкнуть не сложно, к томуже не надо ломать голову «как прочитать это» и «как написать эту букву». Все составные буквы состоят не более чем из двух букв – их 8, а так же в нем даже буква «Ё» есть.

Его в таком виде можно вставить в QIP, после доработки по двум доп. правилам для обратного перевода (Знак_подчёркивания замените на пробел). Даже плагины не нужны, но кому что нравится, на вкус и цвет как говорится.

Перевод в транслит:

Код:
А=A	и=i	Т=T	ы=iq
а=a	Й=J	т=t	Ь=X
Б=B	й=j	У=U	ь=x
б=b	К=K	у=u	Э=Eq
В=V	к=k	Ф=F	э=eq
в=v	Л=L	ф=f	Ю=Uq
Г=G	л=l	Х=H	ю=uq
г=g	М=M	х=h	Я=Aq
Д=D	м=m	Ц=Cq	я=aq
д=d	Н=N	ц=cq	_КВ=_Q
Е=E	н=n	Ч=C	_кв=_q
е=e	О=O	ч=c	_КС=_X
Ё=Y	о=o	Ш=Sq	_кс=_x
ё=y	П=P	ш=sq	ЁКС=YX
Ж=Gq	п=p	Щ=W	ёкс=yx
ж=gq	Р=R	щ=w	ОКС=OX
З=Z	р=r	Ъ=Xq	окс=ox
з=z	С=S	ъ=xq
И=I	с=s	Ы=Iq
Перевод из транслита:

Код:
A=А	i=и	T=Т	iq=ы
a=а	J=Й	t=т	X=Ь
B=Б	j=й	U=У	x=ь
b=б	K=К	u=у	Eq=Э
V=В	k=к	F=Ф	eq=э
v=в	L=Л	f=ф	Uq=Ю
G=Г	l=л	H=Х	uq=ю
g=г	M=М	h=х	Aq=Я
D=Д	m=м	Cq=Ц	aq=я
d=д	N=Н	cq=ц	_Q=_КВ
E=Е	n=н	C=Ч	_q=_кв
e=е	O=О	c=ч	_X=_КС
Y=Ё	o=о	Sq=Ш	_x=_кс
y=ё	P=П	sq=ш	YX=ЁКС
Gq=Ж	p=п	W=Щ	yx=ёкс
gq=ж	R=Р	w=щ	OX=ОКС
Z=З	r=р	Xq=Ъ	ox=окс
z=з	S=С	xq=ъ
I=И	s=с	Iq=Ы
Q - в начале слова и после букв кроме A, C, E, G, I, S, U, X читается как «КВ»
X - в начале слова и после гласных букв (A, E, I, O, U) читается как «КС»

Последний раз редактировалось x2088, 05.02.2008 в 20:09. Причина: Добавлено сообщение
x2088 вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 05.02.2008, 05:11   #5
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 655
Quote selected
По умолчанию

Цитата:
Сообщение от x2088 Посмотреть сообщение
Его в таком виде можно вставить в QIP, после доработки по двум доп. правилам для обратного перевода (Знак_подчёркивания замените на пробел). Даже плагины не нужны, но кому что нравится, на вкус и цвет как говорится.
Полностью согласен, что здесь "на вкус и цвет как говорится." =) именно поэтому и все таблицы хранятся в простых текстовых файлах, которые Вы и вольны изменять на свой вкус.

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

P.S. для x2088
удалите пожалуйста дубляж из своего сообщения, а то продублировали его 2 раза.
__________________
Programming is like sex: one mistake and you have to support it for life.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 16.02.2008, 04:54   #6
QIP Newcomer
 
Регистрация: 09.03.2005
Сообщений: 23
Quote selected
По умолчанию

Давайте всем пользователям ссылку на ГОСТ транслита. Пусть повышают грамотность ;)
__________________
8-ой пользователь на форуме, по времени регистрации
error вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 27.02.2008, 19:21   #7
QIP Newcomer
 
Регистрация: 31.01.2007
Сообщений: 4
Quote selected
По умолчанию

q и x вообще не стоит использовать

считаю что надо так:

Код:
a=a
б=b
в=v
г=g
д=d
е=e
ё=yo (не использую)
ж=zh или j (чаще j)
з=z
и=i
й=y (или i если есть сочетание с y)
к=k
л=l
м=m
н=n
о=o
п=p
р=r
с=s
т=t
у=u
ф=f
х=h
ц=с (или ts)
ч=ch
ш=sh
щ=sch
ъ=`
ы=yi (или i)
ь=`
э=ye (или e)
ю=yu
я=ya
DarkENgeL вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Sponsored Links
Старый 09.03.2008, 00:13   #8
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 655
Quote selected
По умолчанию

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

новую версию 0.3.1 берем в первом сообщении.
__________________
Programming is like sex: one mistake and you have to support it for life.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 13.03.2008, 22:38   #9
QIP Newcomer
 
Регистрация: 22.01.2008
Сообщений: 2
Отправить сообщение для Pacamaxa с помощью ICQ
Quote selected
По умолчанию

Не отправляет сообщения при использования этого плагина, но при включении функции "Использовать транслитацию плагином для исходящих сообщений для выбранных пользователей" и занесением его всписок дает возможность отправить сообщение. Но тем кто не в списке, невозможно отправить.
Не работает кнопка "Создать базу смайлов"
Pacamaxa вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 14.03.2008, 05:27   #10
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 655
Quote selected
По умолчанию

Цитата:
Сообщение от Pacamaxa Посмотреть сообщение
Не отправляет сообщения при использования этого плагина, но при включении функции "Использовать транслитацию плагином для исходящих сообщений для выбранных пользователей" и занесением его всписок дает возможность отправить сообщение. Но тем кто не в списке, невозможно отправить.
спасибо за подробное сообщение, исправил в версии 0.3.2 - в первом сообщении

касательно базы смайлов - проверьте права на файлы "sTranslit\smiles.txt" и "sTranslit\smiles_bad.txt"
__________________
Programming is like sex: one mistake and you have to support it for life.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 11.05.2008, 16:21   #11
Nightly tester
 
Аватар для x2088
 
Регистрация: 18.12.2007
Сообщений: 1,582
Quote selected
По умолчанию

У меня появился вопрос (поскольку я так и не пользовался этим плагином из-за ненадобности).

- Переводит ли плагин заглавные и строчные буквы др. в др.?

Причина вопроса:

В транслите как не крути нужно использовать составные буквы. На примере своего транслита объясню, взяв слово "Жизнь".

Жизнь = Gqiznx

Как видно из написания первая состовная буква написана И ЗАГЛАВНОЙ, И СТРОЧНОЙ буквой, поэтому необходимо создать равенство между "GQ", "Gq" и "gQ" (все возможные вариации, где есть Заглавные буквы), переводя их в "Ж", а из "Ж" только в "Gq" или в "GQ" (опционально). Строчная буква переводиться подобным образом не должна (её отличие в том, что в её составе НЕТ Заглавных букв).

Такой перевод позволит сократить список трансляции в 2 раза, поскольку не надо будет дублировать одну и ту же букву для строчного и заглавного написания.

Тоже самое хочу добавить и для написания большими буквами в середине слова.

~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~* ~*~*~*~*~*~*~*~

DarkENgeL, если вам придётся отправлять сообщения в транслите, человеку, который плохо знает русский, то ему придётся очень туго, тем более с транслитом, в котором есть неоднозначности, тем более в таком количестве.
x2088 вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 30.06.2008, 20:40   #12
QIP Newcomer
 
Регистрация: 24.07.2007
Сообщений: 127
Quote selected
По умолчанию

При включенном плагине QIPBot отказывается воспринимать пришедшие сообщения ;(
sTranslit перехватывает все сообщения на себя ?
Joy_ вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 03.07.2008, 21:47   #13
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 655
Quote selected
По умолчанию

Цитата:
Сообщение от Joy_ Посмотреть сообщение
При включенном плагине QIPBot отказывается воспринимать пришедшие сообщения ;( sTranslit перехватывает все сообщения на себя ?
не понял немного =), он что не дает их обрабатывать боту или что иное ?
__________________
Programming is like sex: one mistake and you have to support it for life.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 21.07.2008, 22:42   #14
QIP Newcomer
 
Аватар для blast1986
 
Регистрация: 15.11.2007
Сообщений: 124
Send Message via Jabber to blast1986
Quote selected
По умолчанию

Внес в плагин одного чел-ка. При разговоре с ним (после 2-3 принятых мною сообщений) QIP зависает...
Удалил плагин - все работает идеально
blast1986 вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Старый 22.07.2008, 05:45   #15
QIP Elder
 
Аватар для Shedko
 
Регистрация: 25.10.2006
Сообщений: 655
Quote selected
По умолчанию

Цитата:
Сообщение от blast1986 Посмотреть сообщение
При разговоре с ним (после 2-3 принятых мною сообщений)
можно узнать какой текст получил плагин, что завис, и какие у вас таблицы преобразования. (translit.txt translit_ru.txt smiles.txt smiles_bad.txt)
__________________
Programming is like sex: one mistake and you have to support it for life.
Shedko вне форума Пожаловаться на это сообщение   Ответить с цитированием Мульти-цитирование этого сообщения Быстрый ответ на это сообщение
Ответ


Быстрый ответ
Сообщение:
Убрать форматирование текста
Полужирный
Курсив
Подчёркнутый

Вставить рисунок
Вставить тег цитаты [QUOTE] вокруг выделенного текста
 
Уменьшить размер
Увеличить размер
Опции


Ваши права в разделе
Вы можете создавать темы
Вы можете отвечать на сообщения
Вы можете прикреплять файлы
Вы можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +7, время: 16:22.


Работает на vBulletin®.
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
©2004 - 2008 QIP.RU
------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=bg.jpg Content-Type: image/jpeg; name=bg.jpg Content-Location: http://forum.qip.ru/qipstyle/bg.jpg Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAPAAA/+4ADkFkb2Jl AGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoKDBAMDAwMDAwQ DA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AA EQgAEAAQAwERAAIRAQMRAf/EAFwAAQEAAAAAAAAAAAAAAAAAAAAIAQEBAQAAAAAA AAAAAAAAAAAAAgUQAAAFBAMBAAAAAAAAAAAAAAABESFRQWGxwXGB4bIRAQEBAQAA AAAAAAAAAAAAAADwwWH/2gAMAwEAAhEDEQA/AKVw/F2iSGdWpMMSe/JhWA61Ve1L eQroUXTXaJIK0f/Z ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=bgl.gif Content-Type: image/gif; name=bgl.gif Content-Location: http://forum.qip.ru/qipstyle/bgl.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAOYAAPj89/3+/PX69Pr9+fP58fT68vX68/z9+/z9+/P48fT68vv9 +vv9+/v9+vv9+vn9+Pj79/v9+/T48vT68vv9+vL48ff79fv9+vX78/v9+fv9+vr9 +fT68vv9+vr9+v3+/Pj79/X68/f79f3+/fb79fX79Pr9+vT68vL48PT68vf79ff7 9vj89/P48fT58vz9+/z9+/r9+fb79Pf79vX78/3+/PT68vv9+/T58vT58vf79fr9 +fb69fP68f3+/PL48fP68fz9+/n9+P3+/fb79Pj79/L48ff79fn89/f79fb79fj7 9/X68/P48fj89/f79fL48ff79ff79fr9+vv9+/n89/j89/f79/f79vn8+PT58/f7 9/f79fr9+ff79fj89/T48vn8+Pn7+Pr9+fz9+/j79/v9+/L48Pr9+ff79v7+/fn8 9/j89/n89/3+/PT48vv9+vr9+f3+/fz9+/X79Pn8+fL58fX79Pv9+vf79fb69fT4 8vr9+bOzs7Ozs7OzsywAAAAAEAAQAAAH/4AKIwAVDgMEZR80BR0DNkcIMgJzEG8L Gi5PBytgHxlnYS8CBWQQCV0NIVs3KjgNFEYWASITCAAJHm4EBjBXLW0eOQABAgIB EBIPG0xpcHolDBE5FjVEBlRrUBoLWjoHYgkZDwQgDCQYZlYKFA0tWRF0KBdDBSxy SSl4AAQbh+VCBdhEADJDzR0FAQgZIrDkwIwfMRyxeKFEgC0cDjRwoDEgjoEYCzis qDEqCKENDbBguIDGThUfLmRJqXXLxBQRGPg4OXHhgYRhxY41ieKAi4EDO1BkYKAg DwwZKW7cqtOhBI8DX/aMecChCAISJzqYMABgwAQvC5BIoDCih44AKgNCBAIAOw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=line2.gif Content-Type: image/gif; name=line2.gif Content-Location: http://forum.qip.ru/qipstyle/line2.gif Content-Transfer-Encoding: Base64 R0lGODlhCQAoAPcAAOXl5fT09O7u7vX19eHh4fHx8cjIyPLy8tTU1Obm5tnZ2e3t 7dDQ0M3NzfPz88PDw93d3evr68HBwbe3t7+/v+jo6Onp6cXFxQcHBwcHBwcHBwcH BwcHBwcHBwcHBwcHBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAJACgAAAiMAAEIHEiwoMGDCBMmTMCw YUMLECNGjECxYkUBGDNq3MiRY4GPIEEeGEmSZICTKFOqRDmgpcuXMGPGXInSgc2b N2meDMlzgc+fPztirEC0aFECSJMmhcC0aVMFUKNGRUC1alUGWLNmbcC1a1cDYMOG vUC2bNkHaNOmlcC2bVsKcOPGnUC3bl2xeJXqDQgAOw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=line3.gif Content-Type: image/gif; name=line3.gif Content-Location: http://forum.qip.ru/qipstyle/line3.gif Content-Transfer-Encoding: Base64 R0lGODlhHAA0APcAAM/3rafLjs72rKXJjMz0q6rOkLbbmbnfnMDmobLXlr/loMry qajMjrPYl7jem8Hnoq3RkqXIjLXambTZmK7Sk6bJjabKjavPka/TlM31q6bJjLfd msvyqq/UlMrxqazQkcnwqM71rM30q872rafKjc31rMXspbrgnbTZl6nNj6zQkrzi n7fcmsbtpsjvp8TqpMLoosPpo8fup67Tk6jMj6jLjrjdm7HWlanNkKvQkbvhnb/m obXamKnMj8PqpMbtpcTrpcjwqLHVlbDVlbDUlL3jn8z0qs/2rcTrpMzzq8jvqMXr pcnxqbvgncLoo8fvp77koMfupsvzqr7kn8vzq8PppKrPkK3SkszzqqbLjafLjb7l oMbuprzinqbKjM73ranOj6nOkMnvqLzhnrLWlsPqo8vyqbPXl8vzqbvinbHWlrbc mbrfnL3insjup8nxqLvinsbup6XJjbfcm6zRkbPYlqjNj7nfm6rNkK3Sk8/2rLzj nqvPkM30rMjwp77jn832rK3Rk73kn8Lpo6vOkLvgnMbspcftp7/koKzRkrrhncrz qsHnocDnorDUlb3jnsXtprbbmrXbmafKjq/Ulcbtp7LYl6/VlMPrpMHoorDVlMXs pLrgnLvhnrHVlq/Tk8v0qsXtpcnwqanMjr/lobDVlsTspb7joKfMjsHooc73rLPZ mMfvqMHporHXlqrOj7DWlcftpsTqpb7locHpo8rwqKrNj8ryqrnem8Dnoa3Tk8nw p8LppKjLj6zSk8Hoo6vQkKnLj7zinbbcmsz1rM71q6fJjcPqpazRk7rfm8Lqo8bs psv0q6jNjsDmoLjdnMrxqMrxqsLposPrpabIjL3joLndm6nNjq3Qks32q872q73i n7Tambzhna7TksDoorXbmMDooa7SkqzPkc/3rLLXlwAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAcADQAAAj/AAEIHEiwoMGDCBMqXMiw oUOER/R8OTLiC7kRRyiOkKhKFYAjH7/oASBSAAABIUaMEMBSwMoQLVW2ZLky5pES MEOEKFYCUAadPUv0FJAtQwltgEL81BlChNA+GTIQIyAiqtWofUSIyLpVqFERBAgY CUsWrIgkScgaMZIWLNmwIqRIoYKWLjO2VORi2WsElBEqWKgYwSIFCygqt8xwWMxh keLFZtAs4iCFQ+TFi9BERrN4wQIPnj17GA269IJbokN/Bh3tTa1ab0CA8MAkNog3 TEQxAVGbNwjduz2AgOZHTBA/SoIoSW58F3PZykH4CeICuRjjMmS4eKKd1RM3LsC7 /xgf3oWMJ6yUfHdznnuUQ7FicakUJYqMOO/jcJHBpQX9SvxxcUgc+P0QSguQGPLD Dy208AMkP5jgoAkMNriMgpC0cKAhJpgAxBJAhAiECUuU2KEpS2wyIombLGGKhyZs IssLPmCChA8vvICEjjlicgyOO9qIxDQvzAgEEmX4UEYMg8QQQxU+VBHDkrxA+aQy UioZgw9PlgEDDE44kQkMv4A5iJkwtAIDLdK0cqYTa4Ip5gN0ftMInQ80kkoqeD7A SCZ4MvJALnc+EA4jOyCQCwKJ7pAoo84gIOmkkj5qKQIKkIKIApxuusWmnM4SqgJb kFoqKZyWWsQfU5wyxaqrQv8BhSBTCDLrFFBUg6sgfxTxKhSndFHECns8sscKbRTb BbIrILtss9swW0Syj+gAhzBwpKFDF2OkkcYY2Y7RSSdj6GCutd18q0MnXRSiCCcn xFtIvJwookgTTcSbb74nNMGJDvsWcsDABN9xABsDI3zAHXewYTAbCidD8AEO4OKA AzbYgPHGF+NigzUaX7yxxs9cvMEcG7DAQsorn5zyBi+zgLINMsPMsgEGrLFGJAbw 3DPOBgwD9Bo5Az20ATxIkDQPkigtATdJSyABOJJE3bTUWPPAwwQTrIIC11+jIDbX YIdN9gQoeP11A3XU0QDbb5/xdgNnWPK22w3YLbfedCf/kAAZrvjttxoJBC743wmU gzjhZJDhdymeCKGGEELAMsQNsEh+w+ZCbH5DKTd0PoQnk3syxCUdDKE6JR1c4ggR lxChyRCUEOGII7UTQUQHmvBOxCcdfIJBB8MXj8EMHSSPwfHLE9+88BhQMIMuFFAg TvXeUC999TNsP0P3eXCfRx4QXJHIFRCkH0gg6V+BDPvtlw9BIOhDkIcvEKigAh0f 0EHH/on4QAD1h40P6M+AH0ggBAyogg9cwIEXiCAfckDBHIxjghSMoAYj+AFgRDAH fCBEAUZYACvwwQojRGEJU0jCAogwhYQIAx5wEIZX4AEPYSgAGHCwQ1u8Yoc0tAUP wWeowzDgIAU9sEMKkDiKHjTDDj1AYgpGkQIapACK10BiFK1oBwZ4MRi9YAANakAD GnjRi2WsgRjPeEYyMiAAAUAFHOcIRzkGoAYB0AIctYDHGvTxjgGwAAlIoAUSZGES JJjEJCyQhUAaMgCDzMIg80iCAGRBCxWwQCY1oEkLeKECFfDCJ41Bgkx6EpSm9IIF LKCBAQxAAxWQgytdKQcN2PKWGpADKC3wyli+MgKujAAwI0CNYQ5AmMY85jGB2Uph BgQAOw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=line5.gif Content-Type: image/gif; name=line5.gif Content-Location: http://forum.qip.ru/qipstyle/line5.gif Content-Transfer-Encoding: Base64 R0lGODlhBAAjANUAAM3Nzfn5+c7Ozubm5vX19f7//tLS0v////z8/evr69vb28/P z9DQ0NHR0ezr6/7+/9LT0+Dh4eHh4Pz8/Nzb283OztLS0/X19v38/PDx8fHw8dPS 0tfW1tbX1//+/ubm5eHg4ebl5s7Pz9DR0fDw8PDw8fHx8NbW1uDh4NHS0tvc2+Hg 4Nzb3M/Q0ODg4PHw8Nvb3Ovr7AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAEACMAAAZjQAVFAZNEUK7BIDSIORwJ DcmUIRAuhIA2gJggMIXHo3AoHwpozwSDQGwDWGumpHkl7g7l4CNZRUAqLEIcJx0c BhAWG4iKBgYpBg0NIw0MDC0MCwsiCwICFZ6fAgCkpaanqKlBADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=line1.gif Content-Type: image/gif; name=line1.gif Content-Location: http://forum.qip.ru/qipstyle/line1.gif Content-Transfer-Encoding: Base64 R0lGODlhAwBYAPcAAND4rsXtp871rM/3rcHopMTrpsryqrjencjvqbngns72rbbc nL7mo77kob7losbuqKzRlbzjocfuqLrioLvioLnfnsnwqbPZm8nxqbHXmc30rMLp pLrhn9D/rsvzq8Pqpb/mo8Tspsz0rAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAADAFgAQAhyADsI5ECQgMEHCEUoBMCw ocOHDRdIbECxgEUMGBVohMjxYYaPFUJSGMmg5IaTIVIiWGmgpYCXA2J2nElzJoSb F3Ie2Jmg54SfEYI6GAqiqEECH5JaLBCgqYSnFqK2NOChqoarLwXEHFCzq9evYDmu RBAQADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=vbulletin_global.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_global.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_global.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIEhh bmRsZSBGaXJlYnVnIGNhbGxzIHdoZW4gRmlyZWJ1ZyBpcyBub3QgYXZhaWxhYmxl IChnZXRmaXJlYnVnLmNvbSkKKi8KaWYgKCF3aW5kb3cuY29uc29sZSB8fCAhY29u c29sZS5maXJlYnVnKQp7Cgl3aW5kb3cuY29uc29sZSA9IHt9OwoJdmFyIG5hbWVz ID0gWyJsb2ciLCAiZGVidWciLCAiaW5mbyIsICJ3YXJuIiwgImVycm9yIiwgImFz c2VydCIsICJkaXIiLCAiZGlyeG1sIiwgImdyb3VwIiwgImdyb3VwRW5kIiwgInRp bWUiLCAidGltZUVuZCIsICJjb3VudCIsICJ0cmFjZSIsICJwcm9maWxlIiwgInBy b2ZpbGVFbmQiXTsKCWZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyAr K2kpIHdpbmRvdy5jb25zb2xlW25hbWVzW2ldXSA9IGZ1bmN0aW9uKCkge307Cn0K Ci8qKgoqIEhhbmRsZSBZVUkgY3VzdG9tIGV2ZW50IGNhbGxzIHdoZW4gWVVJIGlz IG5vdCBhdmFpbGFibGUgKGNsaWVudHNjcmlwdC95dWkveWFob28tZG9tLWV2ZW50 LmpzKQoqLwppZiAodHlwZW9mIFlBSE9PID09ICJ1bmRlZmluZWQiKQp7CglmdW5j dGlvbiBudWxsX2V2ZW50KCkgeyB0aGlzLmZpcmUgPSBmdW5jdGlvbigpIHt9OyB0 aGlzLnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge307IH07Cn0KCi8qKgoqIFNldHVw IFZhcmlhYmxlcwoqCiogQHZhcglzdHJpbmcJU0VTU0lPTlVSTCAtIHN0b3JlcyB0 aGUgc2Vzc2lvbiBVUkwKKiBAdmFyCXN0cmluZwlTRUNVUklUWVRPS0VOIC0gc3Rv cmVzIGFuIGFudGktQ1NSRiB2YWx1ZQoqIEB2YXIJYXJyYXkJdmJwaHJhc2UgLSBz dG9yZXMgdGV4dCBwaHJhc2VzCiogQHZhcglhcnJheQl2Ql9FZGl0b3IgLSBhcnJh eSBvZiB2Ql9UZXh0X0VkaXRvciBvYmplY3RzCiogQHZhcglib29sZWFuCWlnbm9y ZXF1b3RlY2hhcnMgLSBpZ25vcmUgY2hhcmFjdGVycyBpbnNpZGUgW3F1b3RlXSB0 YWdzIGZvciBtZXNzYWdlIGxlbmd0aCBjaGVjawoqIEB2YXIJaW50ZWdlcglwYWdl bmF2Y291bnRlciAtIGNvdW50cyB0aGUgbnVtYmVyIG9mIHBhZ2VuYXYgaW5zdGFu Y2VzIGVuY291bnRlcmVkIHNvIGZhcgoqIEB2YXIJYm9vbGVhbglpc19yZWdleHAg LSBkb2VzIHdpbmRvdy5yZWdFeHAgZXhpc3Q/IC0gQ2F0Y2ggZXJyb3JzIHdpdGgg bGVzcyBjYXBhYmxlIGJyb3dzZXJzCiogQHZhcglib29sZWFuCUFKQVhfQ29tcGF0 aWJsZSAtIGRvZXMgdGhlIGN1cnJlbnQgYnJvd3NlciBzdXBwb3J0IEFKQVg/Ciog QHZhcglzdHJpbmcJcG9pbnRlcl9jdXJzb3IgLSBoZWxwIG91dCBvbGQgdmVyc2lv bnMgb2YgSUUgdGhhdCBkb24ndCB1bmRlcnN0YW5kIHN0eWxlLmN1cnNvciA9IHBv aW50ZXIKKi8KdmFyIFNFU1NJT05VUkwgICAgICAgPSAodHlwZW9mKFNFU1NJT05V UkwpID09ICJ1bmRlZmluZWQiID8gIiIgOiBTRVNTSU9OVVJMKTsKdmFyIFNFQ1VS SVRZVE9LRU4gICAgPSAodHlwZW9mKFNFQ1VSSVRZVE9LRU4pID09ICJ1bmRlZmlu ZWQiID8gIiIgOiBTRUNVUklUWVRPS0VOKTsKdmFyIHZicGhyYXNlICAgICAgICAg PSAodHlwZW9mKHZicGhyYXNlKSA9PSAidW5kZWZpbmVkIiA/IG5ldyBBcnJheSgp IDogdmJwaHJhc2UpOwp2YXIgdkJfRWRpdG9yICAgICAgICA9IG5ldyBBcnJheSgp Owp2YXIgaWdub3JlcXVvdGVjaGFycyA9IGZhbHNlOwp2YXIgcGFnZW5hdmNvdW50 ZXIgICA9IDA7CnZhciBpc19yZWdleHAgICAgICAgID0gKHdpbmRvdy5SZWdFeHAp ID8gdHJ1ZSA6IGZhbHNlOwp2YXIgQUpBWF9Db21wYXRpYmxlICA9IGZhbHNlOwp2 YXIgcG9pbnRlcl9jdXJzb3IgICA9IChpc19pZSA/ICdoYW5kJyA6ICdwb2ludGVy Jyk7CgovKioKKiBEZWZpbmUgdGhlIGJyb3dzZXIgbG9hZGluZyB0aGUgcGFnZQoq CiogQHZhcglzdHJpbmcJdXNlckFnZW50IFVzZXJhZ2VudCBzdHJpbmcKKiBAdmFy CWJvb2xlYW4JaXNfb3BlcmEgIE9wZXJhCiogQHZhcglib29sZWFuCWlzX3NhZiAg ICBTYWZhcmkKKiBAdmFyCWJvb2xlYW4JaXNfd2VidHYgIFdlYlRWCiogQHZhcgli b29sZWFuCWlzX2llICAgICBJbnRlcm5ldCBFeHBsb3JlcgoqIEB2YXIJYm9vbGVh bglpc19pZTQgICAgSW50ZXJuZXQgRXhwbG9yZXIgNAoqIEB2YXIJYm9vbGVhbglp c19pZTcgICAgSW50ZXJuZXQgRXhwbG9yZXIgNwoqIEB2YXIJYm9vbGVhbglpc19w czMgICAgUGxheXN0YXRpb24gMwoqIEB2YXIJYm9vbGVhbglpc19tb3ogICAgTW96 aWxsYSAvIEZpcmVmb3ggLyBDYW1pbm8KKiBAdmFyCWJvb2xlYW4JaXNfa29uICAg IEtvbnF1ZXJvcgoqIEB2YXIJYm9vbGVhbglpc19ucyAgICAgTmV0c2NhcGUKKiBA dmFyCWJvb2xlYW4JaXNfbnM0ICAgIE5ldHNjYXBlIDQKKiBAdmFyCWJvb2xlYW4J aXNfbWFjICAgIENsaWVudCBpcyBydW5uaW5nIE1hY09TCiovCnZhciB1c2VyQWdl bnQgPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCk7CnZhciBpc19v cGVyYSAgPSAoKHVzZXJBZ2VudC5pbmRleE9mKCdvcGVyYScpICE9IC0xKSB8fCAo dHlwZW9mKHdpbmRvdy5vcGVyYSkgIT0gJ3VuZGVmaW5lZCcpKTsKdmFyIGlzX3Nh ZiAgICA9ICgodXNlckFnZW50LmluZGV4T2YoJ2FwcGxld2Via2l0JykgIT0gLTEp IHx8IChuYXZpZ2F0b3IudmVuZG9yID09ICdBcHBsZSBDb21wdXRlciwgSW5jLicp KTsKdmFyIGlzX3dlYnR2ICA9ICh1c2VyQWdlbnQuaW5kZXhPZignd2VidHYnKSAh PSAtMSk7CnZhciBpc19pZSAgICAgPSAoKHVzZXJBZ2VudC5pbmRleE9mKCdtc2ll JykgIT0gLTEpICYmICghaXNfb3BlcmEpICYmICghaXNfc2FmKSAmJiAoIWlzX3dl YnR2KSk7CnZhciBpc19pZTQgICAgPSAoKGlzX2llKSAmJiAodXNlckFnZW50Lmlu ZGV4T2YoJ21zaWUgNC4nKSAhPSAtMSkpOwp2YXIgaXNfaWU3ICAgID0gKChpc19p ZSkgJiYgKHVzZXJBZ2VudC5pbmRleE9mKCdtc2llIDcuJykgIT0gLTEpKTsKdmFy IGlzX3BzMyAgICA9ICh1c2VyQWdlbnQuaW5kZXhPZigncGxheXN0YXRpb24gMycp ICE9IC0xKTsKdmFyIGlzX21veiAgICA9ICgobmF2aWdhdG9yLnByb2R1Y3QgPT0g J0dlY2tvJykgJiYgKCFpc19zYWYpKTsKdmFyIGlzX2tvbiAgICA9ICh1c2VyQWdl bnQuaW5kZXhPZigna29ucXVlcm9yJykgIT0gLTEpOwp2YXIgaXNfbnMgICAgID0g KCh1c2VyQWdlbnQuaW5kZXhPZignY29tcGF0aWJsZScpID09IC0xKSAmJiAodXNl ckFnZW50LmluZGV4T2YoJ21vemlsbGEnKSAhPSAtMSkgJiYgKCFpc19vcGVyYSkg JiYgKCFpc193ZWJ0dikgJiYgKCFpc19zYWYpKTsKdmFyIGlzX25zNCAgICA9ICgo aXNfbnMpICYmIChwYXJzZUludChuYXZpZ2F0b3IuYXBwVmVyc2lvbikgPT0gNCkp Owp2YXIgaXNfbWFjICAgID0gKHVzZXJBZ2VudC5pbmRleE9mKCdtYWMnKSAhPSAt MSk7CgovKioKKiBXb3JrYXJvdW5kIGZvciBoZWlub3VzIElFIGJ1ZyAtIGFkZCBz cGVjaWFsIHZCbGVuZ3RoIHByb3BlcnR5IHRvIGFsbCBzdHJpbmdzCiogVGhpcyBt ZXRob2QgaXMgYXBwbGllZCB0byBBTEwgc3RyaW5nIG9iamVjdHMgYXV0b21hdGlj YWxseQoqCiogQHJldHVybglpbnRlZ2VyCiovClN0cmluZy5wcm90b3R5cGUudkJs ZW5ndGggPSBmdW5jdGlvbigpCnsKCXJldHVybiAoaXNfaWUgJiYgdGhpcy5pbmRl eE9mKCJcbiIpICE9IC0xKSA/IHRoaXMucmVwbGFjZSgvXHI/XG4vZywgIl8iKS5s ZW5ndGggOiB0aGlzLmxlbmd0aDsKfQoKLyoqCiogT3ZlcnJpZGVzIElFJ3Mgb3Jp Z2luYWwgU3RyaW5nLnByb3RvdHlwZS5zdWJzdHIgdG8gYWNjZXB0IG5lZ2F0aXZl IHZhbHVlcwoqCiogQHBhcmFtCWludGVnZXIJU3Vic3RyaW5nIHN0YXJ0IHBvc2l0 aW9uCiogQHBhcmFtCWludGVnZXIJU3Vic3RyaW5nIGxlbmd0aAoqCiogQHJldHVy bglzdHJpbmcKKi8KaWYgKCIxMjM0Ii5zdWJzdHIoLTIsIDIpID09ICIxMiIpIC8v ICh3aGljaCB3b3VsZCBiZSBpbmNvcnJlY3QpCnsKCVN0cmluZy5wcm90b3R5cGUu c3Vic3RyX29yaWcgPSBTdHJpbmcucHJvdG90eXBlLnN1YnN0cjsKCglTdHJpbmcu cHJvdG90eXBlLnN1YnN0ciA9IGZ1bmN0aW9uKHN0YXJ0LCBsZW5ndGgpCgl7CgkJ aWYgKHR5cGVvZihsZW5ndGgpID09ICJ1bmRlZmluZWQiKQoJCXsKCQkJcmV0dXJu IHRoaXMuc3Vic3RyX29yaWcoKHN0YXJ0IDwgMCA/IHRoaXMubGVuZ3RoICsgc3Rh cnQgOiBzdGFydCkpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4gdGhpcy5zdWJz dHJfb3JpZygoc3RhcnQgPCAwID8gdGhpcy5sZW5ndGggKyBzdGFydCA6IHN0YXJ0 KSwgbGVuZ3RoKTsKCQl9Cgl9Owp9CgovKioKKiBEZWZpbmUgQXJyYXkuc2hpZnQo KSBmb3IgYnJvd3NlcnMgdGhhdCBkb24ndCBoYXZlIGl0CiovCmlmICh0eXBlb2Yg QXJyYXkucHJvdG90eXBlLnNoaWZ0ID09PSAndW5kZWZpbmVkJykKewoJQXJyYXku cHJvdG90eXBlLnNoaWZ0ID0gZnVuY3Rpb24oKQoJewoJCWZvcih2YXIgaSA9IDAs IGIgPSB0aGlzWzBdLCBsID0gdGhpcy5sZW5ndGgtMTsgaSA8IGw7IGkrKykKCQl7 CgkJCXRoaXNbaV0gPSB0aGlzW2kgKyAxXTsKCQl9CgkJdGhpcy5sZW5ndGgtLTsK CQlyZXR1cm4gYjsKCX07Cn0KCi8qKgoqIEZ1bmN0aW9uIHRvIGVtdWxhdGUgZG9j dW1lbnQuZ2V0RWxlbWVudEJ5SWQKKgoqIEBwYXJhbQlzdHJpbmcJT2JqZWN0IElE CioKKiBAcmV0dXJuCW1peGVkCW51bGwgaWYgbm90IGZvdW5kLCBvYmplY3QgaWYg Zm91bmQKKi8KZnVuY3Rpb24gZmV0Y2hfb2JqZWN0KGlkbmFtZSkKewoJaWYgKGRv Y3VtZW50LmdldEVsZW1lbnRCeUlkKQoJewoJCXJldHVybiBkb2N1bWVudC5nZXRF bGVtZW50QnlJZChpZG5hbWUpOwoJfQoJZWxzZSBpZiAoZG9jdW1lbnQuYWxsKQoJ ewoJCXJldHVybiBkb2N1bWVudC5hbGxbaWRuYW1lXTsKCX0KCWVsc2UgaWYgKGRv Y3VtZW50LmxheWVycykKCXsKCQlyZXR1cm4gZG9jdW1lbnQubGF5ZXJzW2lkbmFt ZV07Cgl9CgllbHNlCgl7CgkJcmV0dXJuIG51bGw7Cgl9Cn0KCi8qKgoqIEZ1bmN0 aW9uIHRvIGVtdWxhdGUgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUKKgoq IEBwYXJhbQlvYmplY3QJUGFyZW50IG9iamVjdCAoZWc6IGRvY3VtZW50KQoqIEBw YXJhbQlzdHJpbmcJVGFnIHR5cGUgKGVnOiAndGQnKQoqCiogQHJldHVybglhcnJh eQoqLwpmdW5jdGlvbiBmZXRjaF90YWdzKHBhcmVudG9iaiwgdGFnKQp7CglpZiAo cGFyZW50b2JqID09IG51bGwpCgl7CgkJcmV0dXJuIG5ldyBBcnJheSgpOwoJfQoJ ZWxzZSBpZiAodHlwZW9mIHBhcmVudG9iai5nZXRFbGVtZW50c0J5VGFnTmFtZSAh PSAndW5kZWZpbmVkJykKCXsKCQlyZXR1cm4gcGFyZW50b2JqLmdldEVsZW1lbnRz QnlUYWdOYW1lKHRhZyk7Cgl9CgllbHNlIGlmIChwYXJlbnRvYmouYWxsICYmIHBh cmVudG9iai5hbGwudGFncykKCXsKCQlyZXR1cm4gcGFyZW50b2JqLmFsbC50YWdz KHRhZyk7Cgl9CgllbHNlCgl7CgkJcmV0dXJuIG5ldyBBcnJheSgpOwoJfQp9Cgov KioKKiBGdW5jdGlvbiB0byBjb3VudCB0aGUgbnVtYmVyIG9mIHRhZ3MgaW4gYW4g b2JqZWN0CioKKiBAcGFyYW0Jb2JqZWN0CVBhcmVudCBvYmplY3QgKGVnOiBkb2N1 bWVudCkKKiBAcGFyYW0Jc3RyaW5nCVRhZyB0eXBlIChlZzogJ3RkJykKKgoqIEBy ZXR1cm4JaW50ZWdlcgoqLwpmdW5jdGlvbiBmZXRjaF90YWdfY291bnQocGFyZW50 b2JqLCB0YWcpCnsKCXJldHVybiBmZXRjaF90YWdzKHBhcmVudG9iaiwgdGFnKS5s ZW5ndGg7Cn0KCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIEV2 ZW50IGhhbmRsZXJzCgovKioKKiBIYW5kbGVzIHRoZSBkaWZmZXJlbnQgZXZlbnQg bW9kZWxzIG9mIGRpZmZlcmVudCBicm93c2VycyBhbmQgcHJldmVudHMgZXZlbnQg YnViYmxpbmcKKgoqIEBwYXJhbQlldmVudAlFdmVudCBvYmplY3QKKgoqIEByZXR1 cm4JZXZlbnQKKi8KZnVuY3Rpb24gZG9fYW5fZShldmVudG9iaikKewoJaWYgKCFl dmVudG9iaiB8fCBpc19pZSkKCXsKCQl3aW5kb3cuZXZlbnQucmV0dXJuVmFsdWUg PSBmYWxzZTsKCQl3aW5kb3cuZXZlbnQuY2FuY2VsQnViYmxlID0gdHJ1ZTsKCQly ZXR1cm4gd2luZG93LmV2ZW50OwoJfQoJZWxzZQoJewoJCWV2ZW50b2JqLnN0b3BQ cm9wYWdhdGlvbigpOwoJCWV2ZW50b2JqLnByZXZlbnREZWZhdWx0KCk7CgkJcmV0 dXJuIGV2ZW50b2JqOwoJfQp9CgovKioKKiBIYW5kbGVzIHRoZSBkaWZmZXJlbnQg ZXZlbnQgbW9kZWxzIG9mIGRpZmZlcmVudCBicm93c2VycyBhbmQgcHJldmVudHMg ZXZlbnQgYnViYmxpbmcgaW4gYSBsZXNzZXIgd2F5IHRoYW4gZG9fYW5fZSgpCioK KiBAcGFyYW0JZXZlbnQJRXZlbnQgb2JqZWN0CioKKiBAcmV0dXJuCWV2ZW50Ciov CmZ1bmN0aW9uIGVfYnlfZ3VtKGV2ZW50b2JqKQp7CglpZiAoIWV2ZW50b2JqIHx8 IGlzX2llKQoJewoJCXdpbmRvdy5ldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlOwoJ CXJldHVybiB3aW5kb3cuZXZlbnQ7Cgl9CgllbHNlCgl7CgkJaWYgKGV2ZW50b2Jq LnRhcmdldC50eXBlID09ICdzdWJtaXQnKQoJCXsKCQkJLy8gbmF1Z2h0eSBzYWZh cmkKCQkJZXZlbnRvYmoudGFyZ2V0LmZvcm0uc3VibWl0KCk7CgkJfQoJCWV2ZW50 b2JqLnN0b3BQcm9wYWdhdGlvbigpOwoJCXJldHVybiBldmVudG9iajsKCX0KfQoK Ly8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gTWVzc2FnZSBtYW5p cHVsYXRpb24gYW5kIHZhbGlkYXRpb24KCi8qKgoqIENoZWNrcyB0aGF0IGEgbWVz c2FnZSBpcyB2YWxpZCBmb3Igc3VibWlzc2lvbiB0byBQSFAKKgoqIEBwYXJhbQlz dHJpbmcJTWVzc2FnZSB0ZXh0CiogQHBhcmFtCW1peGVkCUVpdGhlciBzdWJqZWN0 IHRleHQgKGlmIHlvdSB3YW50IHRvIG1ha2Ugc3VyZSBpdCBleGlzdHMpIG9yIDAg aWYgeW91IGRvbid0IGNhcmUKKiBAcGFyYW0JaW50ZWdlcglNaW5pbXVtIGFjY2Vw dGFibGUgY2hhcmFjdGVyIGxpbWl0IGZvciB0aGUgbWVzc2FnZQoqCiogQHJldHVy bglib29sZWFuCiovCmZ1bmN0aW9uIHZhbGlkYXRlbWVzc2FnZShtZXNzYWdldGV4 dCwgc3ViamVjdHRleHQsIG1pbmNoYXJzKQp7CglpZiAoaXNfa29uIHx8IGlzX3Nh ZiB8fCBpc193ZWJ0dikKCXsKCQkvLyBpZ25vcmUgbGVzcy10aGFuLWNhcGFibGUg YnJvd3NlcnMKCQlyZXR1cm4gdHJ1ZTsKCX0KCWVsc2UgaWYgKHN1YmplY3R0ZXh0 Lmxlbmd0aCA8IDEpCgl7CgkJLy8gc3ViamVjdCBub3Qgc3BlY2lmaWVkCgkJYWxl cnQodmJwaHJhc2VbJ211c3RfZW50ZXJfc3ViamVjdCddKTsKCQlyZXR1cm4gZmFs c2U7Cgl9CgllbHNlCgl7CgkJdmFyIHN0cmlwcGVkID0gUEhQLnRyaW0oc3RyaXBj b2RlKG1lc3NhZ2V0ZXh0LCBmYWxzZSwgaWdub3JlcXVvdGVjaGFycykpOwoKCQlp ZiAoc3RyaXBwZWQubGVuZ3RoIDwgbWluY2hhcnMpCgkJewoJCQkvLyBtaW5pbXVt IG1lc3NhZ2UgbGVuZ3RoIG5vdCBtZXQKCQkJYWxlcnQoY29uc3RydWN0X3BocmFz ZSh2YnBocmFzZVsnbWVzc2FnZV90b29fc2hvcnQnXSwgbWluY2hhcnMpKTsKCQkJ cmV0dXJuIGZhbHNlOwoJCX0KCQllbHNlIGlmICh0eXBlb2YoZG9jdW1lbnQuZm9y bXMudmJmb3JtKSAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YoZG9jdW1lbnQuZm9y bXMudmJmb3JtLmltYWdlc3RhbXApICE9ICd1bmRlZmluZWQnKQoJCXsKCQkJLy8g VGhpcyBmb3JtIGhhcyBpbWFnZSB2ZXJpZmljYXRpb24gZW5hYmxlZAoJCQlkb2N1 bWVudC5mb3Jtcy52YmZvcm0uaW1hZ2VzdGFtcC5mYWlsZWQgPSBmYWxzZTsKCgkJ CWlmIChkb2N1bWVudC5mb3Jtcy52YmZvcm0uaW1hZ2VzdGFtcC52YWx1ZS5sZW5n dGggIT0gNikKCQkJewoJCQkJYWxlcnQodmJwaHJhc2VbJ2NvbXBsZXRlX2ltYWdl X3ZlcmlmaWNhdGlvbiddKTsKCQkJCWRvY3VtZW50LmZvcm1zLnZiZm9ybS5pbWFn ZXN0YW1wLmZhaWxlZCA9IHRydWU7CgkJCQlkb2N1bWVudC5mb3Jtcy52YmZvcm0u aW1hZ2VzdGFtcC5mb2N1cygpOwoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCWVs c2UKCQkJewoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQl9CgkJZWxzZQoJCXsKCQkJ Ly8gZXZlcnl0aGluZyBzZWVtcyBvawoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9Cn0K CgovKioKKiBTdHJpcHMgcXVvdGVzIGFuZCBiYmNvZGUgdGFncyBmcm9tIHRleHQK KgoqIEBwYXJhbQlzdHJpbmcJVGV4dCB0byBtYW5pcHVsYXRlCiogQHBhcmFtCWJv b2xlYW4JSWYgdHJ1ZSwgc3RyaXAgPHg+IG90aGVyd2lzZSBzdHJpcCBbeF0KKiBA cGFyYW0JYm9vbGVhbglJZiB0cnVlLCBzdHJpcCBhbGwgW3F1b3RlXS4uLmNvbnRl bnRzLi4uWy9xdW90ZV0KKgoqIEByZXR1cm4Jc3RyaW5nCiovCmZ1bmN0aW9uIHN0 cmlwY29kZShzdHIsIGlzaHRtbCwgc3RyaXBxdW90ZXMpCnsKCWlmICghaXNfcmVn ZXhwKQoJewoJCXJldHVybiBzdHI7Cgl9CgoJaWYgKHN0cmlwcXVvdGVzKQoJewoJ CXZhciBzdGFydF90aW1lID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7CgoJCXdoaWxl ICgoc3RhcnRpbmRleCA9IFBIUC5zdHJpcG9zKHN0ciwgJ1txdW90ZScpKSAhPT0g ZmFsc2UpCgkJewoJCQlpZiAobmV3IERhdGUoKS5nZXRUaW1lKCkgLSBzdGFydF90 aW1lID4gMjAwMCkKCQkJewoJCQkJLy8gd2hpbGUgbG9vcCBoYXMgYmVlbiBydW5u aW5nIGZvciBvdmVyIDIgc2Vjb25kcyBhbmQgaGFzIHByb2JhYmx5IGdvbmUgaW5m aW5pdGUKCQkJCWJyZWFrOwoJCQl9CgoJCQlpZiAoKHN0b3BpbmRleCA9IFBIUC5z dHJpcG9zKHN0ciwgJ1svcXVvdGVdJykpICE9PSBmYWxzZSkKCQkJewoJCQkJZnJh Z21lbnQgPSBzdHIuc3Vic3RyKHN0YXJ0aW5kZXgsIHN0b3BpbmRleCAtIHN0YXJ0 aW5kZXggKyA4KTsKCQkJCXN0ciA9IHN0ci5yZXBsYWNlKGZyYWdtZW50LCAnJyk7 CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQlicmVhazsKCQkJfQoJCQlzdHIgPSBQSFAu dHJpbShzdHIpOwoJCX0KCX0KCglpZiAoaXNodG1sKQoJewoJCS8vIGV4ZW1wdCBp bWFnZSB0YWdzIC0tIHRoZXkgbmVlZCB0byBjb3VudCBhcyBjaGFyYWN0ZXJzIGlu IHRoZSBzdHJpbmcKCQkvLyBhcyB0aGUgZG8gYXMgQkIgY29kZXMKCQlzdHIgPSBz dHIucmVwbGFjZSgvPGltZ1tePl0rc3JjPSIoW14iXSspIltePl0qPi9naSwgJyQx Jyk7CgoJCXZhciBodG1sMSA9IG5ldyBSZWdFeHAoIjwoXFx3KylbXj5dKj4iLCAn Z2knKTsKCQl2YXIgaHRtbDIgPSBuZXcgUmVnRXhwKCI8XFwvXFx3Kz4iLCAnZ2kn KTsKCgkJc3RyID0gc3RyLnJlcGxhY2UoaHRtbDEsICcnKTsKCQlzdHIgPSBzdHIu cmVwbGFjZShodG1sMiwgJycpOwoKCQl2YXIgaHRtbDMgPSBuZXcgUmVnRXhwKCco Jm5ic3A7KScsICdnaScpOwoJCXN0ciA9IHN0ci5yZXBsYWNlKGh0bWwzLCAnICcp OwoJfQoJZWxzZQoJewoJCXZhciBiYmNvZGUxID0gbmV3IFJlZ0V4cCgiXFxbKFxc dyspKD1bXlxcXV0qKT9cXF0iLCAnZ2knKTsKCQl2YXIgYmJjb2RlMiA9IG5ldyBS ZWdFeHAoIlxcW1xcLyhcXHcrKVxcXSIsICdnaScpOwoKCQlzdHIgPSBzdHIucmVw bGFjZShiYmNvZGUxLCAnJyk7CgkJc3RyID0gc3RyLnJlcGxhY2UoYmJjb2RlMiwg JycpOwoJfQoKCXJldHVybiBzdHI7Cn0KCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjCi8vIHZCX1BIUF9FbXVsYXRvciBjbGFzcwovLyAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwoKLyoqCiogUEhQIEZ1bmN0aW9uIEVtdWxhdG9y IENsYXNzCiovCmZ1bmN0aW9uIHZCX1BIUF9FbXVsYXRvcigpCnsKfQoKLy8gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLy8gdkJfUEhQX0VtdWxhdG9yIE1l dGhvZHMKCi8qKgoqIEZpbmQgYSBzdHJpbmcgd2l0aGluIGEgc3RyaW5nIChjYXNl IGluc2Vuc2l0aXZlKQoqCiogQHBhcmFtCXN0cmluZwlIYXlzdGFjawoqIEBwYXJh bQlzdHJpbmcJTmVlZGxlCiogQHBhcmFtCWludGVnZXIJT2Zmc2V0CioKKiBAcmV0 dXJuCW1peGVkCU5vdCBmb3VuZDogZmFsc2UgLyBGb3VuZDogaW50ZWdlciBwb3Np dGlvbgoqLwp2Ql9QSFBfRW11bGF0b3IucHJvdG90eXBlLnN0cmlwb3MgPSBmdW5j dGlvbihoYXlzdGFjaywgbmVlZGxlLCBvZmZzZXQpCnsKCWlmICh0eXBlb2Ygb2Zm c2V0ID09ICd1bmRlZmluZWQnKQoJewoJCW9mZnNldCA9IDA7Cgl9CgoJaW5kZXgg PSBoYXlzdGFjay50b0xvd2VyQ2FzZSgpLmluZGV4T2YobmVlZGxlLnRvTG93ZXJD YXNlKCksIG9mZnNldCk7CgoJcmV0dXJuIChpbmRleCA9PSAtMSA/IGZhbHNlIDog aW5kZXgpOwp9CgovKioKKiBUcmltcyBsZWFkaW5nIHdoaXRlc3BhY2UKKgoqIEBw YXJhbQlzdHJpbmcJU3RyaW5nIHRvIHRyaW0KKgoqIEByZXR1cm4Jc3RyaW5nCiov CnZCX1BIUF9FbXVsYXRvci5wcm90b3R5cGUubHRyaW0gPSBmdW5jdGlvbihzdHIp CnsKCXJldHVybiBzdHIucmVwbGFjZSgvXlxzKy9nLCAnJyk7Cn0KCi8qKgoqIFRy aW1zIHRyYWlsaW5nIHdoaXRlc3BhY2UKKgoqIEBwYXJhbQlzdHJpbmcJU3RyaW5n IHRvIHRyaW0KKgoqIEByZXR1cm4Jc3RyaW5nCiovCnZCX1BIUF9FbXVsYXRvci5w cm90b3R5cGUucnRyaW0gPSBmdW5jdGlvbihzdHIpCnsKCXJldHVybiBzdHIucmVw bGFjZSgvKFxzKykkL2csICcnKTsKfQoKLyoqCiogVHJpbXMgbGVhZGluZyBhbmQg dHJhaWxpbmcgd2hpdGVzcGFjZQoqCiogQHBhcmFtCXN0cmluZwlTdHJpbmcgdG8g dHJpbQoqCiogQHJldHVybglzdHJpbmcKKi8KdkJfUEhQX0VtdWxhdG9yLnByb3Rv dHlwZS50cmltID0gZnVuY3Rpb24oc3RyKQp7CglyZXR1cm4gdGhpcy5sdHJpbSh0 aGlzLnJ0cmltKHN0cikpOwp9CgovKioKKiBFbXVsYXRpb24gb2YgUEhQJ3MgcHJl Z19xdW90ZSgpCioKKiBAcGFyYW0Jc3RyaW5nCVN0cmluZyB0byBwcm9jZXNzCioK KiBAcmV0dXJuCXN0cmluZwoqLwp2Ql9QSFBfRW11bGF0b3IucHJvdG90eXBlLnBy ZWdfcXVvdGUgPSBmdW5jdGlvbihzdHIpCnsKCS8vIHJlcGxhY2UgKyB7IH0gKCAp IFsgXSB8IC8gPyBeICQgXCAuID0gISA8ID4gOiAqIHdpdGggYmFja3NsYXNoK2No YXJhY3RlcgoJcmV0dXJuIHN0ci5yZXBsYWNlKC8oXCt8XHt8XH18XCh8XCl8XFt8 XF18XHx8XC98XD98XF58XCR8XFx8XC58XD18XCF8XDx8XD58XDp8XCopL2csICJc XCQxIik7Cn0KCi8qKgoqIEVtdWxhdGVzIFBIUCdzIHByZWdfbWF0Y2hfYWxsKCku Li4gc29ydCBvZgoqCiogQHBhcmFtCXN0cmluZwlIYXlzdGFjawoqIEBwYXJhbQlz dHJpbmcJUmVndWxhciBleHByZXNzaW9uIC0gdG8gYmUgaW5zZXJ0ZWQgaW50byBS ZWdFeHAoeCkKKgoqIEByZXR1cm4JbWl4ZWQJQXJyYXkgb24gbWF0Y2gsIGZhbHNl IG9uIG5vIG1hdGNoCiovCnZCX1BIUF9FbXVsYXRvci5wcm90b3R5cGUubWF0Y2hf YWxsID0gZnVuY3Rpb24oc3RyaW5nLCByZWdleCkKewoJdmFyIGdtYXRjaCA9IHN0 cmluZy5tYXRjaChSZWdFeHAocmVnZXgsICJnaW0iKSk7CglpZiAoZ21hdGNoKQoJ ewoJCXZhciBtYXRjaGVzID0gbmV3IEFycmF5KCk7CgoJCXZhciBpcmVnZXggPSBu ZXcgUmVnRXhwKHJlZ2V4LCAiaW0iKTsKCQlmb3IgKHZhciBpID0gMDsgaSA8IGdt YXRjaC5sZW5ndGg7IGkrKykKCQl7CgkJCW1hdGNoZXNbbWF0Y2hlcy5sZW5ndGhd ID0gZ21hdGNoW2ldLm1hdGNoKGlyZWdleCk7CgkJfQoKCQlyZXR1cm4gbWF0Y2hl czsKCX0KCWVsc2UKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KCi8qKgoqIEVtdWxh dGVzIHVuaHRtbHNwZWNpYWxjaGFycyBpbiB2QnVsbGV0aW4KKgoqIEBwYXJhbQlz dHJpbmcJU3RyaW5nIHRvIHByb2Nlc3MKKgoqIEByZXR1cm4Jc3RyaW5nCiovCnZC X1BIUF9FbXVsYXRvci5wcm90b3R5cGUudW5odG1sc3BlY2lhbGNoYXJzID0gZnVu Y3Rpb24oc3RyKQp7CglmID0gbmV3IEFycmF5KC8mbHQ7L2csIC8mZ3Q7L2csIC8m cXVvdDsvZywgLyZhbXA7L2cpOwoJciA9IG5ldyBBcnJheSgnPCcsICc+JywgJyIn LCAnJicpOwoKCWZvciAodmFyIGkgaW4gZikKCXsKCQlzdHIgPSBzdHIucmVwbGFj ZShmW2ldLCByW2ldKTsKCX0KCglyZXR1cm4gc3RyOwp9CgovKioKKiBVbmVzY2Fw ZSBDREFUQSBmcm9tIHZCX0FKQVhfWE1MX0J1aWxkZXIgUEhQIGNsYXNzCioKKiBA cGFyYW0Jc3RyaW5nCUVzY2FwZWQgQ0RBVEEKKgoqIEByZXR1cm4Jc3RyaW5nCiov CnZCX1BIUF9FbXVsYXRvci5wcm90b3R5cGUudW5lc2NhcGVfY2RhdGEgPSBmdW5j dGlvbihzdHIpCnsKCXZhciByMSA9IC88XD1cIVw9XFtcPUNcPURcPUFcPVRcPUFc PVxbL2c7Cgl2YXIgcjIgPSAvXF1cPVxdXD0+L2c7CgoJcmV0dXJuIHN0ci5yZXBs YWNlKHIxLCAnPCFbQ0RBVEFbJykucmVwbGFjZShyMiwgJ11dPicpOwp9CgovKioK KiBFbXVsYXRlcyBQSFAncyBodG1sc3BlY2lhbGNoYXJzKCkKKgoqIEBwYXJhbQlz dHJpbmcJU3RyaW5nIHRvIHByb2Nlc3MKKgoqIEByZXR1cm4Jc3RyaW5nCiovCnZC X1BIUF9FbXVsYXRvci5wcm90b3R5cGUuaHRtbHNwZWNpYWxjaGFycyA9IGZ1bmN0 aW9uKHN0cikKewoJLy92YXIgZiA9IG5ldyBBcnJheSgvJig/ISNbMC05XSs7KS9n LCAvPC9nLCAvPi9nLCAvIi9nKTsKCXZhciBmID0gbmV3IEFycmF5KAoJCShpc19t YWMgJiYgaXNfaWUgPyBuZXcgUmVnRXhwKCcmJywgJ2cnKSA6IG5ldyBSZWdFeHAo JyYoPyEjWzAtOV0rOyknLCAnZycpKSwKCQluZXcgUmVnRXhwKCc8JywgJ2cnKSwK CQluZXcgUmVnRXhwKCc+JywgJ2cnKSwKCQluZXcgUmVnRXhwKCciJywgJ2cnKQoJ KTsKCXZhciByID0gbmV3IEFycmF5KAoJCScmYW1wOycsCgkJJyZsdDsnLAoJCScm Z3Q7JywKCQknJnF1b3Q7JwoJKTsKCglmb3IgKHZhciBpID0gMDsgaSA8IGYubGVu Z3RoOyBpKyspCgl7CgkJc3RyID0gc3RyLnJlcGxhY2UoZltpXSwgcltpXSk7Cgl9 CgoJcmV0dXJuIHN0cjsKfQoKLyoqCiogU2VhcmNoZXMgYW4gYXJyYXkgZm9yIGEg dmFsdWUKKgoqIEBwYXJhbQlzdHJpbmcJTmVlZGxlCiogQHBhcmFtCWFycmF5CUhh eXN0YWNrCiogQHBhcmFtCWJvb2xlYW4JQ2FzZSBpbnNlbnNpdGl2ZQoqCiogQHJl dHVybglpbnRlZ2VyCU5vdCBmb3VuZDogLTEgLyBGb3VuZDogaW50ZWdlciBpbmRl eAoqLwp2Ql9QSFBfRW11bGF0b3IucHJvdG90eXBlLmluX2FycmF5ID0gZnVuY3Rp b24oaW5lZWRsZSwgaGF5c3RhY2ssIGNhc2VpbnNlbnNpdGl2ZSkKewoJdmFyIG5l ZWRsZSA9IG5ldyBTdHJpbmcoaW5lZWRsZSk7CgoJaWYgKGNhc2VpbnNlbnNpdGl2 ZSkKCXsKCQluZWVkbGUgPSBuZWVkbGUudG9Mb3dlckNhc2UoKTsKCQlmb3IgKHZh ciBpIGluIGhheXN0YWNrKQoJCXsKCQkJaWYgKGhheXN0YWNrW2ldLnRvTG93ZXJD YXNlKCkgPT0gbmVlZGxlKQoJCQl7CgkJCQlyZXR1cm4gaTsKCQkJfQoJCX0KCX0K CWVsc2UKCXsKCQlmb3IgKHZhciBpIGluIGhheXN0YWNrKQoJCXsKCQkJaWYgKGhh eXN0YWNrW2ldID09IG5lZWRsZSkKCQkJewoJCQkJcmV0dXJuIGk7CgkJCX0KCQl9 Cgl9CglyZXR1cm4gLTE7Cn0KCi8qKgoqIEVtdWxhdGVzIFBIUCdzIHN0cnBhZCgp CioKKiBAcGFyYW0Jc3RyaW5nCVRleHQgdG8gcGFkCiogQHBhcmFtCWludGVnZXIJ TGVuZ3RoIHRvIHBhZAoqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHdpdGggd2hpY2gg dG8gcGFkCioKKiBAcmV0dXJuCXN0cmluZwoqLwp2Ql9QSFBfRW11bGF0b3IucHJv dG90eXBlLnN0cl9wYWQgPSBmdW5jdGlvbih0ZXh0LCBsZW5ndGgsIHBhZHN0cmlu ZykKewoJdGV4dCA9IG5ldyBTdHJpbmcodGV4dCk7CglwYWRzdHJpbmcgPSBuZXcg U3RyaW5nKHBhZHN0cmluZyk7CgoJaWYgKHRleHQubGVuZ3RoIDwgbGVuZ3RoKQoJ ewoJCXBhZHRleHQgPSBuZXcgU3RyaW5nKHBhZHN0cmluZyk7CgoJCXdoaWxlIChw YWR0ZXh0Lmxlbmd0aCA8IChsZW5ndGggLSB0ZXh0Lmxlbmd0aCkpCgkJewoJCQlw YWR0ZXh0ICs9IHBhZHN0cmluZzsKCQl9CgoJCXRleHQgPSBwYWR0ZXh0LnN1YnN0 cigwLCAobGVuZ3RoIC0gdGV4dC5sZW5ndGgpKSArIHRleHQ7Cgl9CgoJcmV0dXJu IHRleHQ7Cn0KCi8qKgoqIEEgc29ydCBvZiBlbXVsYXRpb24gb2YgUEhQJ3MgdXJs ZW5jb2RlIC0gbm90IDEwMCUgdGhlIHNhbWUsIGJ1dCBhY2NvbXBsaXNoZXMgdGhl IHNhbWUgdGhpbmcKKgoqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHRvIGVuY29kZQoq CiogQHJldHVybglzdHJpbmcKKi8KdkJfUEhQX0VtdWxhdG9yLnByb3RvdHlwZS51 cmxlbmNvZGUgPSBmdW5jdGlvbih0ZXh0KQp7Cgl0ZXh0ID0gZXNjYXBlKHRleHQu dG9TdHJpbmcoKSkucmVwbGFjZSgvXCsvZywgIiUyQiIpOwoKCS8vIHRoaXMgZXNj YXBlcyAxMjggLSAyNTUsIGFzIEpTIHVzZXMgdGhlIHVuaWNvZGUgY29kZSBwb2lu dHMgZm9yIHRoZW0uCgkvLyBUaGlzIGNhdXNlcyBwcm9ibGVtcyB3aXRoIHN1Ym1p dHRpbmcgdGV4dCB2aWEgQUpBWCB3aXRoIHRoZSBVVEYtOCBjaGFyc2V0LgoJdmFy IG1hdGNoZXMgPSB0ZXh0Lm1hdGNoKC8oJShbMC05QS1GXXsyfSkpL2dpKTsKCWlm IChtYXRjaGVzKQoJewoJCWZvciAodmFyIG1hdGNoaWQgPSAwOyBtYXRjaGlkIDwg bWF0Y2hlcy5sZW5ndGg7IG1hdGNoaWQrKykKCQl7CgkJCXZhciBjb2RlID0gbWF0 Y2hlc1ttYXRjaGlkXS5zdWJzdHJpbmcoMSwzKTsKCQkJaWYgKHBhcnNlSW50KGNv ZGUsIDE2KSA+PSAxMjgpCgkJCXsKCQkJCXRleHQgPSB0ZXh0LnJlcGxhY2UobWF0 Y2hlc1ttYXRjaGlkXSwgJyV1MDAnICsgY29kZSk7CgkJCX0KCQl9Cgl9CgoJLy8g JTI1IGdldHMgdHJhbnNsYXRlZCB0byAlIGJ5IFBIUCwgc28gaWYgeW91IGhhdmUg JTI1dTEyMzQsCgkvLyB3ZSBzZWUgaXQgYXMgJXUxMjM0IGFuZCBpdCBnZXRzIHRy YW5zbGF0ZWQuIFNvIG1ha2UgaXQgJXUwMDI1dTEyMzQsCgkvLyB3aGljaCB3aWxs IHByaW50IGFzICV1MTIzNCEKCXRleHQgPSB0ZXh0LnJlcGxhY2UoJyUyNScsICcl dTAwMjUnKTsKCglyZXR1cm4gdGV4dDsKfQoKLyoqCiogV29ya3MgYSBiaXQgbGlr ZSB1Y2ZpcnN0LCBidXQgd2l0aCBzb21lIGV4dHJhIG9wdGlvbnMKKgoqIEBwYXJh bQlzdHJpbmcJU3RyaW5nIHdpdGggd2hpY2ggdG8gd29yawoqIEBwYXJhbQlzdHJp bmcJQ3V0IG9mZiBzdHJpbmcgYmVmb3JlIGZpcnN0IG9jY3VyZW5jZSBvZiB0aGlz IHN0cmluZwoqCiogQHJldHVybglzdHJpbmcKKi8KdkJfUEhQX0VtdWxhdG9yLnBy b3RvdHlwZS51Y2ZpcnN0ID0gZnVuY3Rpb24oc3RyLCBjdXRvZmYpCnsKCWlmICh0 eXBlb2YgY3V0b2ZmICE9ICd1bmRlZmluZWQnKQoJewoJCXZhciBjdXRwb3MgPSBz dHIuaW5kZXhPZihjdXRvZmYpOwoJCWlmIChjdXRwb3MgPiAwKQoJCXsKCQkJc3Ry ID0gc3RyLnN1YnN0cigwLCBjdXRwb3MpOwoJCX0KCX0KCglzdHIgPSBzdHIuc3Bs aXQoJyAnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKQoJ ewoJCXN0cltpXSA9IHN0cltpXS5zdWJzdHIoMCwgMSkudG9VcHBlckNhc2UoKSAr IHN0cltpXS5zdWJzdHIoMSk7Cgl9CglyZXR1cm4gc3RyLmpvaW4oJyAnKTsKfQoK Ly8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gdkJfQUpBWF9IYW5k bGVyCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovKioKKiBYTUwg U2VuZGVyIENsYXNzCioKKiBAcGFyYW0JYm9vbGVhbglTaG91bGQgY29ubmVjdGlv bnMgYmUgYXN5bmNyb25vdXM/CiovCmZ1bmN0aW9uIHZCX0FKQVhfSGFuZGxlcihh c3luYykKewoJLyoqCgkqIFNob3VsZCBjb25uZWN0aW9ucyBiZSBhc3luY2hyb25v dXM/CgkqCgkqIEB2YXIJYm9vbGVhbgoJKi8KCXRoaXMuYXN5bmMgPSBhc3luYyA/ IHRydWUgOiBmYWxzZTsKfQoKLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLy8gdkJfQUpBWF9IYW5kbGVyIG1ldGhvZHMKCi8qKgoqIEluaXRpYWxpemVz IHRoZSBYTUwgaGFuZGxlcgoqCiogQHJldHVybglib29sZWFuCVRydWUgaWYgaGFu ZGxlciBjcmVhdGVkIE9LCiovCnZCX0FKQVhfSGFuZGxlci5wcm90b3R5cGUuaW5p dCA9IGZ1bmN0aW9uKCkKewoJaWYgKHR5cGVvZiB2Yl9kaXNhYmxlX2FqYXggIT0g J3VuZGVmaW5lZCcgJiYgdmJfZGlzYWJsZV9hamF4ID09IDIpCgl7CgkJLy8gZGlz YWJsZSBhbGwgYWpheCBmZWF0dXJlcwoJCXJldHVybiBmYWxzZTsKCX0KCglpZiAo dHlwZW9mIFhNTEh0dHBSZXF1ZXN0ICE9ICJ1bmRlZmluZWQiKQoJewoJCXRoaXMu aGFuZGxlciA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwoJCXJldHVybiAodGhpcy5o YW5kbGVyLnNldFJlcXVlc3RIZWFkZXIgPyB0cnVlIDogZmFsc2UpOwoJfQoJZWxz ZSBpZiAoaXNfaWUgJiYgIWlzX2llNykKCXsKCQl0aGlzLmhhbmRsZXIgPSBldmFs KCJuZXcgQSIgKyAiY3RpdiIgKyAiZVgiICsgIk9iIiArICJqZWN0KCdNaWNyIiAr ICJvc29mdC5YTSIgKyAiTEhUVFAnKTsiKTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWVs c2UKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0KCi8qKgoqIERldGVjdHMgaWYgdGhl IGJyb3dzZXIgaXMgZnVsbHkgY29tcGF0aWJsZQoqCiogQHJldHVybglib29sZWFu CiovCnZCX0FKQVhfSGFuZGxlci5wcm90b3R5cGUuaXNfY29tcGF0aWJsZSA9IGZ1 bmN0aW9uKCkKewoJaWYgKHR5cGVvZiB2Yl9kaXNhYmxlX2FqYXggIT0gJ3VuZGVm aW5lZCcgJiYgdmJfZGlzYWJsZV9hamF4ID09IDIpCgl7CgkJLy8gZGlzYWJsZSBh bGwgYWpheCBmZWF0dXJlcwoJCXJldHVybiBmYWxzZTsKCX0KCglpZiAoaXNfaWUg JiYgIWlzX2llNCkgeyByZXR1cm4gdHJ1ZTsgfQoJZWxzZSBpZiAodHlwZW9mIFhN TEh0dHBSZXF1ZXN0ICE9ICd1bmRlZmluZWQnKQoJewoJCXRyeSB7IHJldHVybiBY TUxIdHRwUmVxdWVzdC5wcm90b3R5cGUuc2V0UmVxdWVzdEhlYWRlciA/IHRydWUg OiBmYWxzZTsgfQoJCWNhdGNoKGUpCgkJewoJCQl0cnkgeyB2YXIgdGVzdGVyID0g bmV3IFhNTEh0dHBSZXF1ZXN0KCk7IHJldHVybiB0ZXN0ZXIuc2V0UmVxdWVzdEhl YWRlciA/IHRydWUgOiBmYWxzZTsgfQoJCQljYXRjaChlKSB7IHJldHVybiBmYWxz ZTsgfQoJCX0KCX0KCWVsc2UgeyByZXR1cm4gZmFsc2U7IH0KfQoKLyoqCiogQ2hl Y2tzIGlmIHRoZSBzeXN0ZW0gaXMgcmVhZHkKKgoqIEByZXR1cm4JYm9vbGVhbglG YWxzZSBpZiByZWFkeQoqLwp2Ql9BSkFYX0hhbmRsZXIucHJvdG90eXBlLm5vdF9y ZWFkeSA9IGZ1bmN0aW9uKCkKewoJcmV0dXJuICh0aGlzLmhhbmRsZXIucmVhZHlT dGF0ZSAmJiAodGhpcy5oYW5kbGVyLnJlYWR5U3RhdGUgPCA0KSk7Cn0KCi8qKgoq IE9uUmVhZHlTdGF0ZUNoYW5nZSBldmVudCBoYW5kbGVyCioKKiBAcGFyYW0JZnVu Y3Rpb24KKi8KdkJfQUpBWF9IYW5kbGVyLnByb3RvdHlwZS5vbnJlYWR5c3RhdGVj aGFuZ2UgPSBmdW5jdGlvbihldmVudCkKewoJaWYgKCF0aGlzLmhhbmRsZXIpCgl7 CgkJaWYgICghdGhpcy5pbml0KCkpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJ fQoJaWYgKHR5cGVvZiBldmVudCA9PSAnZnVuY3Rpb24nKQoJewoJCXRoaXMuaGFu ZGxlci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBldmVudDsKCX0KCWVsc2UKCXsKCQlh bGVydCgnWE1MIFNlbmRlciBPblJlYWR5U3RhdGUgZXZlbnQgaXMgbm90IGEgZnVu Y3Rpb24nKTsKCX0KCglyZXR1cm4gZmFsc2U7Cn0KCi8qKgoqIFNlbmRzIGRhdGEK KgoqIEBwYXJhbQlzdHJpbmcJRGVzdGluYXRpb24gVVJMCiogQHBhcmFtCXN0cmlu ZwlSZXF1ZXN0IERhdGEKKgoqIEByZXR1cm4JbWl4ZWQJUmV0dXJuIG1lc3NhZ2UK Ki8KdkJfQUpBWF9IYW5kbGVyLnByb3RvdHlwZS5zZW5kID0gZnVuY3Rpb24oZGVz dHVybCwgZGF0YXN0cmVhbSkKewoJaWYgKCF0aGlzLmhhbmRsZXIpCgl7CgkJaWYg KCF0aGlzLmluaXQoKSkKCQl7CgkJCXJldHVybiBmYWxzZTsKCQl9Cgl9CglpZiAo IXRoaXMubm90X3JlYWR5KCkpCgl7CgkJdGhpcy5oYW5kbGVyLm9wZW4oJ1BPU1Qn LCBkZXN0dXJsLCB0aGlzLmFzeW5jKTsKCQl0aGlzLmhhbmRsZXIuc2V0UmVxdWVz dEhlYWRlcignQ29udGVudC1UeXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0t dXJsZW5jb2RlZCcpOwoJCXRoaXMuaGFuZGxlci5zZW5kKGRhdGFzdHJlYW0gKyAn JnNlY3VyaXR5dG9rZW49JyArIFNFQ1VSSVRZVE9LRU4gKyAnJnM9JyArIGZldGNo X3Nlc3Npb25oYXNoKCkpOwoKCQlpZiAoIXRoaXMuYXN5bmMgJiYgdGhpcy5oYW5k bGVyLnJlYWR5U3RhdGUgPT0gNCAmJiB0aGlzLmhhbmRsZXIuc3RhdHVzID09IDIw MCkKCQl7CgkJCXJldHVybiB0cnVlOwoJCX0KCX0KCXJldHVybiBmYWxzZTsKfQoK LyoqCiogRmV0Y2hlcyB0aGUgY29udGVudHMgb2YgYW4gWE1MIG5vZGUKKgoqIEBw YXJhbQlvYmplY3QJWE1MIG5vZGUKKgoqIEByZXR1cm4Jc3RyaW5nCVhNTCBub2Rl IGNvbnRlbnRzCiovCnZCX0FKQVhfSGFuZGxlci5wcm90b3R5cGUuZmV0Y2hfZGF0 YSA9IGZ1bmN0aW9uKHhtbF9ub2RlKQp7CglpZiAoeG1sX25vZGUgJiYgeG1sX25v ZGUuZmlyc3RDaGlsZCAmJiB4bWxfbm9kZS5maXJzdENoaWxkLm5vZGVWYWx1ZSkK CXsKCQlyZXR1cm4gUEhQLnVuZXNjYXBlX2NkYXRhKHhtbF9ub2RlLmZpcnN0Q2hp bGQubm9kZVZhbHVlKTsKCX0KCWVsc2UKCXsKCQlyZXR1cm4gJyc7Cgl9Cn0KCi8v IHdlIGNhbiBjaGVjayB0aGlzIHZhcmlhYmxlIHRvIHNlZSBpZiBicm93c2VyIGlz IEFKQVggY29tcGF0aWJsZQpBSkFYX0NvbXBhdGlibGUgPSB2Ql9BSkFYX0hhbmRs ZXIucHJvdG90eXBlLmlzX2NvbXBhdGlibGUoKTsKY29uc29sZS5pbmZvKCJCcm93 c2VyIGlzJXMgQUpBWCBjb21wYXRpYmxlIiwgQUpBWF9Db21wYXRpYmxlID8gIiIg OiAiIE5PVCIpOwoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g dkJfSGlkZGVuX0Zvcm0KLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK Ci8qKgoqIEZvcm0gR2VuZXJhdG9yIENsYXNzCioKKiBCdWlsZHMgYSBmb3JtIGZp bGxlZCB3aXRoIGhpZGRlbiBmaWVsZHMgZm9yIGludmlzaWJsZSBzdWJtaXQgdmlh IFBPU1QKKgoqIEBwYXJhbQlzdHJpbmcJU2NyaXB0IChteV90YXJnZXRfc2NyaXB0 LnBocCkKKi8KZnVuY3Rpb24gdkJfSGlkZGVuX0Zvcm0oc2NyaXB0KQp7Cgl0aGlz LmFjdGlvbiA9IHNjcmlwdDsKCXRoaXMudmFyaWFibGVzID0gbmV3IEFycmF5KCk7 Cn0KCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIHZCX0hpZGRl bl9Gb3JtIG1ldGhvZHMKCi8qKgoqIEFkZHMgYSBoaWRkZW4gaW5wdXQgZmllbGQg dG8gdGhlIGZvcm0gb2JqZWN0CioKKiBAcGFyYW0Jc3RyaW5nCU5hbWUgYXR0cmli dXRlCiogQHBhcmFtCXN0cmluZwlWYWx1ZSBhdHRyaWJ1dGUKKi8KdkJfSGlkZGVu X0Zvcm0ucHJvdG90eXBlLmFkZF92YXJpYWJsZSA9IGZ1bmN0aW9uKG5hbWUsIHZh bHVlKQp7Cgl0aGlzLnZhcmlhYmxlc1t0aGlzLnZhcmlhYmxlcy5sZW5ndGhdID0g bmV3IEFycmF5KG5hbWUsIHZhbHVlKTsKCWNvbnNvbGUubG9nKCJ2Ql9IaWRkZW5f Rm9ybSA6OiBhZGRfdmFyaWFibGUoJXMpIiwgbmFtZSk7Cn07CgovKioKKiBGZXRj aGVzIGFsbCBmb3JtIGVsZW1lbnRzIGluc2lkZSBhbiBIVE1MIGVsZW1lbnQgYW5k IHBlcmZvcm1zICdhZGRfaW5wdXQoKScgb24gdGhlbQoqCiogQHBhcmFtCW9iamVj dAlIVE1MIGVsZW1lbnQgdG8gc2VhcmNoCiovCnZCX0hpZGRlbl9Gb3JtLnByb3Rv dHlwZS5hZGRfdmFyaWFibGVzX2Zyb21fb2JqZWN0ID0gZnVuY3Rpb24ob2JqKQp7 CglpZiAoIW9iaikKCXsKCQlyZXR1cm47Cgl9Cgljb25zb2xlLmluZm8oInZCX0hp ZGRlbl9Gb3JtIDo6IGFkZF92YXJpYWJsZXNfZnJvbV9vYmplY3QoJXMpIiwgb2Jq LmlkKTsKCXZhciBpbnB1dHMgPSBmZXRjaF90YWdzKG9iaiwgJ2lucHV0Jyk7Cglm b3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykKCXsKCQlzd2l0 Y2ggKGlucHV0c1tpXS50eXBlKQoJCXsKCQkJY2FzZSAnY2hlY2tib3gnOgoJCQlj YXNlICdyYWRpbyc6CgkJCQlpZiAoaW5wdXRzW2ldLmNoZWNrZWQpCgkJCQl7CgkJ CQkJdGhpcy5hZGRfdmFyaWFibGUoaW5wdXRzW2ldLm5hbWUsIGlucHV0c1tpXS52 YWx1ZSk7CgkJCQl9CgkJCQlicmVhazsKCQkJY2FzZSAndGV4dCc6CgkJCWNhc2Ug J2hpZGRlbic6CgkJCWNhc2UgJ3Bhc3N3b3JkJzoKCQkJCXRoaXMuYWRkX3Zhcmlh YmxlKGlucHV0c1tpXS5uYW1lLCBpbnB1dHNbaV0udmFsdWUpOwoJCQkJYnJlYWs7 CgkJCWRlZmF1bHQ6CgkJCQljb250aW51ZTsKCQl9Cgl9CgoJdmFyIHRleHRhcmVh cyA9IGZldGNoX3RhZ3Mob2JqLCAndGV4dGFyZWEnKTsKCWZvciAodmFyIGkgPSAw OyBpIDwgdGV4dGFyZWFzLmxlbmd0aDsgaSsrKQoJewoJCXRoaXMuYWRkX3Zhcmlh YmxlKHRleHRhcmVhc1tpXS5uYW1lLCB0ZXh0YXJlYXNbaV0udmFsdWUpOwoJfQoK CXZhciBzZWxlY3RzID0gZmV0Y2hfdGFncyhvYmosICdzZWxlY3QnKTsKCWZvciAo dmFyIGkgPSAwOyBpIDwgc2VsZWN0cy5sZW5ndGg7IGkrKykKCXsKCQlpZiAoc2Vs ZWN0c1tpXS5tdWx0aXBsZSkKCQl7CgkJCWZvciAodmFyIGogPSAwOyBqIDwgc2Vs ZWN0c1tpXS5vcHRpb25zLmxlbmd0aDsgaisrKQoJCQl7CgkJCQlpZiAoc2VsZWN0 c1tpXS5vcHRpb25zW2pdLnNlbGVjdGVkKQoJCQkJewoJCQkJCXRoaXMuYWRkX3Zh cmlhYmxlKHNlbGVjdHNbaV0ubmFtZSwgc2VsZWN0c1tpXS5vcHRpb25zW2pdLnZh bHVlKTsKCQkJCX0KCQkJfQoJCX0KCQllbHNlCgkJewoJCQl0aGlzLmFkZF92YXJp YWJsZShzZWxlY3RzW2ldLm5hbWUsIHNlbGVjdHNbaV0ub3B0aW9uc1tzZWxlY3Rz W2ldLnNlbGVjdGVkSW5kZXhdLnZhbHVlKTsKCQl9Cgl9Cn07CgovKioKKiBGZXRj aGVzIGEgdmFyaWFibGUgdmFsdWUKKgoqIEBwYXJhbQlzdHJpbmcJVmFyaWFibGUg bmFtZQoqCiogQHJldHVybgltaXhlZAlWYXJpYWJsZSB2YWx1ZQoqLwp2Ql9IaWRk ZW5fRm9ybS5wcm90b3R5cGUuZmV0Y2hfdmFyaWFibGUgPSBmdW5jdGlvbih2YXJu YW1lKQp7Cglmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMudmFyaWFibGVzLmxlbmd0 aDsgaSsrKQoJewoJCWlmICh0aGlzLnZhcmlhYmxlc1tpXVswXSA9PSB2YXJuYW1l KQoJCXsKCQkJcmV0dXJuIHRoaXMudmFyaWFibGVzW2ldWzFdOwoJCX0KCX0KCgly ZXR1cm4gbnVsbDsKfTsKCi8qKgoqIFN1Ym1pdHMgdGhlIGhpZGRlbiBmb3JtIG9i amVjdAoqLwp2Ql9IaWRkZW5fRm9ybS5wcm90b3R5cGUuc3VibWl0X2Zvcm0gPSBm dW5jdGlvbigpCnsKCXRoaXMuZm9ybSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo J2Zvcm0nKTsKCXRoaXMuZm9ybS5tZXRob2QgPSAncG9zdCc7Cgl0aGlzLmZvcm0u YWN0aW9uID0gdGhpcy5hY3Rpb247CgoJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlz LnZhcmlhYmxlcy5sZW5ndGg7IGkrKykKCXsKCQl2YXIgaW5wdXRvYmogPSBkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpOwoKCQlpbnB1dG9iai50eXBlICA9 ICdoaWRkZW4nOwoJCWlucHV0b2JqLm5hbWUgID0gdGhpcy52YXJpYWJsZXNbaV1b MF07CgkJaW5wdXRvYmoudmFsdWUgPSB0aGlzLnZhcmlhYmxlc1tpXVsxXTsKCgkJ dGhpcy5mb3JtLmFwcGVuZENoaWxkKGlucHV0b2JqKTsKCX0KCgljb25zb2xlLmlu Zm8oInZCX0hpZGRlbl9Gb3JtIDo6IHN1Ym1pdF9mb3JtKCkgLT4gJXMiLCB0aGlz LmFjdGlvbik7Cglkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuZm9ybSku c3VibWl0KCk7Cn07CgovKioKKiBCdWlsZHMgYSBVUkkgcXVlcnkgc3RyaW5nIGZy b20gdGhlIGdpdmVuIHZhcmlhYmxlcwoqLwp2Ql9IaWRkZW5fRm9ybS5wcm90b3R5 cGUuYnVpbGRfcXVlcnlfc3RyaW5nID0gZnVuY3Rpb24oKQp7Cgl2YXIgcXVlcnlf c3RyaW5nID0gJyc7CgoJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLnZhcmlhYmxl cy5sZW5ndGg7IGkrKykKCXsKCQlxdWVyeV9zdHJpbmcgKz0gdGhpcy52YXJpYWJs ZXNbaV1bMF0gKyAnPScgKyBQSFAudXJsZW5jb2RlKHRoaXMudmFyaWFibGVzW2ld WzFdKSArICcmJzsKCX0KCgljb25zb2xlLmluZm8oInZCX0hpZGRlbl9Gb3JtIDo6 IFF1ZXJ5IFN0cmluZyA9ICVzIiwgcXVlcnlfc3RyaW5nKTsKCXJldHVybiBxdWVy eV9zdHJpbmc7Cn0KCi8qKgoqIExlZ2FjeSBmdW5jdGlvbnMgZm9yIGJhY2t3YXJk IGNvbXBhdGFiaWxpdHkKKi8KdkJfSGlkZGVuX0Zvcm0ucHJvdG90eXBlLmFkZF9p bnB1dCA9IHZCX0hpZGRlbl9Gb3JtLnByb3RvdHlwZS5hZGRfdmFyaWFibGU7CnZC X0hpZGRlbl9Gb3JtLnByb3RvdHlwZS5hZGRfaW5wdXRzX2Zyb21fb2JqZWN0ID0g dkJfSGlkZGVuX0Zvcm0ucHJvdG90eXBlLmFkZF92YXJpYWJsZXNfZnJvbV9vYmpl Y3Q7CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyBXaW5kb3cg b3BlbmVycyBhbmQgaW5zdGFudCBtZXNzZW5nZXIgd3JhcHBlcnMKCi8qKgoqIE9w ZW5zIGEgZ2VuZXJpYyBicm93c2VyIHdpbmRvdwoqCiogQHBhcmFtCXN0cmluZwlV UkwKKiBAcGFyYW0JaW50ZWdlcglXaWR0aAoqIEBwYXJhbQlpbnRlZ2VyCUhlaWdo dAoqIEBwYXJhbQlzdHJpbmcJT3B0aW9uYWwgV2luZG93IElECiovCmZ1bmN0aW9u IG9wZW5XaW5kb3codXJsLCB3aWR0aCwgaGVpZ2h0LCB3aW5kb3dpZCkKewoJcmV0 dXJuIHdpbmRvdy5vcGVuKAoJCXVybCwKCQkodHlwZW9mIHdpbmRvd2lkID09ICd1 bmRlZmluZWQnID8gJ3ZCUG9wdXAnIDogd2luZG93aWQpLAoJCSdzdGF0dXNiYXI9 bm8sbWVudWJhcj1ubyx0b29sYmFyPW5vLHNjcm9sbGJhcnM9eWVzLHJlc2l6YWJs ZT15ZXMnCgkJKyAodHlwZW9mIHdpZHRoICE9ICd1bmRlZmluZWQnID8gKCcsd2lk dGg9JyArIHdpZHRoKSA6ICcnKSArICh0eXBlb2YgaGVpZ2h0ICE9ICd1bmRlZmlu ZWQnID8gKCcsaGVpZ2h0PScgKyBoZWlnaHQpIDogJycpCgkpOwp9CgovKioKKiBP cGVucyBjb250cm9sIHBhbmVsIGhlbHAgd2luZG93CioKKiBAcGFyYW0Jc3RyaW5n CVNjcmlwdCBuYW1lCiogQHBhcmFtCXN0cmluZwlBY3Rpb24gdHlwZQoqIEBwYXJh bQlzdHJpbmcJT3B0aW9uIHZhbHVlCioKKiBAcmV0dXJuCXdpbmRvdwoqLwpmdW5j dGlvbiBqc19vcGVuX2hlbHAoc2NyaXB0bmFtZSwgYWN0aW9udHlwZSwgb3B0aW9u dmFsKQp7CglyZXR1cm4gb3BlbldpbmRvdygKCQknaGVscC5waHA/cz0nICsgU0VT U0lPTkhBU0ggKyAnJmRvPWFuc3dlciZwYWdlPScgKyBzY3JpcHRuYW1lICsgJyZw YWdlYWN0aW9uPScgKyBhY3Rpb250eXBlICsgJyZvcHRpb249JyArIG9wdGlvbnZh bCwKCQk2MDAsIDQ1MCwgJ2hlbHB3aW5kb3cnCgkpOwp9CgovKioKKiBPcGVucyBh IHdpbmRvdyB0byBzaG93IGEgbGlzdCBvZiBhdHRhY2htZW50cyBpbiBhIHRocmVh ZCAobWlzYy5waHA/ZG89c2hvd2F0dGFjaG1lbnRzKQoqCiogQHBhcmFtCWludGVn ZXIJVGhyZWFkIElECioKKiBAcmV0dXJuCXdpbmRvdwoqLwpmdW5jdGlvbiBhdHRh Y2htZW50cyh0aHJlYWRpZCkKewoJcmV0dXJuIG9wZW5XaW5kb3coCgkJJ21pc2Mu cGhwPycgKyBTRVNTSU9OVVJMICsgJ2RvPXNob3dhdHRhY2htZW50cyZ0PScgKyB0 aHJlYWRpZCwKCQk0ODAsIDMwMAoJKTsKfQoKLyoqCiogT3BlbnMgYSB3aW5kb3cg dG8gc2hvdyBhIGxpc3Qgb2YgcG9zdGVycyBpbiBhIHRocmVhZCAobWlzYy5waHA/ ZG89d2hvcG9zdGVkKQoqCiogQHBhcmFtCWludGVnZXIJVGhyZWFkIElECioKKiBA cmV0dXJuCXdpbmRvdwoqLwpmdW5jdGlvbiB3aG8odGhyZWFkaWQpCnsKCXJldHVy biBvcGVuV2luZG93KAoJCSdtaXNjLnBocD8nICsgU0VTU0lPTlVSTCArICdkbz13 aG9wb3N0ZWQmdD0nICsgdGhyZWFkaWQsCgkJMjMwLCAzMDAKCSk7Cn0KCi8qKgoq IE9wZW5zIGFuIElNIFdpbmRvdwoqCiogQHBhcmFtCXN0cmluZwlJTSB0eXBlCiog QHBhcmFtCWludGVnZXIJVXNlciBJRAoqIEBwYXJhbQlpbnRlZ2VyCVdpZHRoIG9m IHdpbmRvdwoqIEBwYXJhbQlpbnRlZ2VyCUhlaWdodCBvZiB3aW5kb3cKKgoqIEBy ZXR1cm4Jd2luZG93CiovCmZ1bmN0aW9uIGltd2luZG93KGltdHlwZSwgdXNlcmlk LCB3aWR0aCwgaGVpZ2h0KQp7CglyZXR1cm4gb3BlbldpbmRvdygKCQknc2VuZG1l c3NhZ2UucGhwPycgKyBTRVNTSU9OVVJMICsgJ2RvPWltJnR5cGU9JyArIGltdHlw ZSArICcmdT0nICsgdXNlcmlkLAoJCXdpZHRoLCBoZWlnaHQKCSk7Cn0KCi8qKgoq IFNlbmRzIGFuIE1TTiBtZXNzYWdlCioKKiBAcGFyYW0Jc3RyaW5nCVRhcmdldCBN U04gaGFuZGxlCioKKiBAcmV0dXJuCWJvb2xlYW4JZmFsc2UKKi8KZnVuY3Rpb24g U2VuZE1TTk1lc3NhZ2UobmFtZSkKewoJaWYgKCFpc19pZSkKCXsKCQlhbGVydCh2 YnBocmFzZVsnbXNuX2Z1bmN0aW9uc19vbmx5X3dvcmtfaW5faWUnXSk7CgkJcmV0 dXJuIGZhbHNlOwoJfQoJZWxzZQoJewoJCU1zZ3JPYmouSW5zdGFudE1lc3NhZ2Uo bmFtZSk7CgkJcmV0dXJuIGZhbHNlOwoJfQp9CgovKioKKiBBZGRzIGFuIE1TTiBD b250YWN0IChyZXF1aXJlcyBNU04pCioKKiBAcGFyYW0Jc3RyaW5nCU1TTiBoYW5k bGUKKgoqIEByZXR1cm4JYm9vbGVhbglmYWxzZQoqLwpmdW5jdGlvbiBBZGRNU05D b250YWN0KG5hbWUpCnsKCWlmICghaXNfaWUpCgl7CgkJYWxlcnQodmJwaHJhc2Vb J21zbl9mdW5jdGlvbnNfb25seV93b3JrX2luX2llJ10pOwoJCXJldHVybiBmYWxz ZTsKCX0KCWVsc2UKCXsKCQlNc2dyT2JqLkFkZENvbnRhY3QoMCwgbmFtZSk7CgkJ cmV0dXJuIGZhbHNlOwoJfQp9CgovKioKKiBEZXRlY3RzIENhcHMtTG9jayB3aGVu IGEga2V5IGlzIHByZXNzZWQKKgoqIEBwYXJhbQlldmVudAoqCiogQHJldHVybgli b29sZWFuCVRydWUgaWYgQ2Fwcy1Mb2NrIGlzIG9uCiovCmZ1bmN0aW9uIGRldGVj dF9jYXBzX2xvY2soZSkKewoJZSA9IChlID8gZSA6IHdpbmRvdy5ldmVudCk7CgoJ dmFyIGtleWNvZGUgPSAoZS53aGljaCA/IGUud2hpY2ggOiAoZS5rZXlDb2RlID8g ZS5rZXlDb2RlIDogKGUuY2hhckNvZGUgPyBlLmNoYXJDb2RlIDogMCkpKTsKCXZh ciBzaGlmdGVkID0gKGUuc2hpZnRLZXkgfHwgKGUubW9kaWZpZXJzICYmIChlLm1v ZGlmaWVycyAmIDQpKSk7Cgl2YXIgY3RybGVkID0gKGUuY3RybEtleSB8fCAoZS5t b2RpZmllcnMgJiYgKGUubW9kaWZpZXJzICYgMikpKTsKCgkvLyBpZiBjaGFyYWN0 ZXJzIGFyZSB1cHBlcmNhc2Ugd2l0aG91dCBzaGlmdCwgb3IgbG93ZXJjYXNlIHdp dGggc2hpZnQsIGNhcHMtbG9jayBpcyBvbi4KCXJldHVybiAoa2V5Y29kZSA+PSA2 NSAmJiBrZXljb2RlIDw9IDkwICYmICFzaGlmdGVkICYmICFjdHJsZWQpIHx8IChr ZXljb2RlID49IDk3ICYmIGtleWNvZGUgPD0gMTIyICYmIHNoaWZ0ZWQpOwp9Cgov KioKKiBDb25maXJtcyBsb2ctb3V0IHJlcXVlc3QKKgoqIEBwYXJhbQlzdHJpbmcJ TG9nLW91dCBjb25maXJtYXRpb24gbWVzc2FnZQoqCiogQHJldHVybglib29sZWFu CiovCmZ1bmN0aW9uIGxvZ19vdXQoY29uZmlybWF0aW9uX21lc3NhZ2UpCnsKCXZh ciBodCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCJodG1sIilbMF07 CglodC5zdHlsZS5maWx0ZXIgPSAicHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWlj cm9zb2Z0LkJhc2ljSW1hZ2UoZ3JheXNjYWxlPTEpIjsKCWlmIChjb25maXJtKGNv bmZpcm1hdGlvbl9tZXNzYWdlKSkKCXsKCQlyZXR1cm4gdHJ1ZTsKCX0KCWVsc2UK CXsKCQlodC5zdHlsZS5maWx0ZXIgPSAiIjsKCQlyZXR1cm4gZmFsc2U7Cgl9Cn0K Ci8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIENvb2tpZSBoYW5k bGVycwoKLyoqCiogU2V0cyBhIGNvb2tpZQoqCiogQHBhcmFtCXN0cmluZwlDb29r aWUgbmFtZQoqIEBwYXJhbQlzdHJpbmcJQ29va2llIHZhbHVlCiogQHBhcmFtCWRh dGUJQ29va2llIGV4cGlyeSBkYXRlCiovCmZ1bmN0aW9uIHNldF9jb29raWUobmFt ZSwgdmFsdWUsIGV4cGlyZXMpCnsKCWNvbnNvbGUubG9nKCJTZXQgQ29va2llIDo6 ICVzID0gJyVzJyIsIG5hbWUsIHZhbHVlKTsKCWRvY3VtZW50LmNvb2tpZSA9IG5h bWUgKyAnPScgKyBlc2NhcGUodmFsdWUpICsgJzsgcGF0aD0vJyArICh0eXBlb2Yg ZXhwaXJlcyAhPSAndW5kZWZpbmVkJyA/ICc7IGV4cGlyZXM9JyArIGV4cGlyZXMu dG9HTVRTdHJpbmcoKSA6ICcnKTsKfQoKLyoqCiogRGVsZXRlcyBhIGNvb2tpZQoq CiogQHBhcmFtCXN0cmluZwlDb29raWUgbmFtZQoqLwpmdW5jdGlvbiBkZWxldGVf Y29va2llKG5hbWUpCnsKCWNvbnNvbGUubG9nKCJEZWxldGUgQ29va2llIDo6ICVz IiwgbmFtZSk7Cglkb2N1bWVudC5jb29raWUgPSBuYW1lICsgJz0nICsgJzsgZXhw aXJlcz1UaHUsIDAxLUphbi03MCAwMDowMDowMSBHTVQnICsgICc7IHBhdGg9Lyc7 Cn0KCi8qKgoqIEZldGNoZXMgdGhlIHZhbHVlIG9mIGEgY29va2llCioKKiBAcGFy YW0Jc3RyaW5nCUNvb2tpZSBuYW1lCioKKiBAcmV0dXJuCXN0cmluZwoqLwpmdW5j dGlvbiBmZXRjaF9jb29raWUobmFtZSkKewoJY29va2llX25hbWUgPSBuYW1lICsg Jz0nOwoJY29va2llX2xlbmd0aCA9IGRvY3VtZW50LmNvb2tpZS5sZW5ndGg7Cglj b29raWVfYmVnaW4gPSAwOwoJd2hpbGUgKGNvb2tpZV9iZWdpbiA8IGNvb2tpZV9s ZW5ndGgpCgl7CgkJdmFsdWVfYmVnaW4gPSBjb29raWVfYmVnaW4gKyBjb29raWVf bmFtZS5sZW5ndGg7CgkJaWYgKGRvY3VtZW50LmNvb2tpZS5zdWJzdHJpbmcoY29v a2llX2JlZ2luLCB2YWx1ZV9iZWdpbikgPT0gY29va2llX25hbWUpCgkJewoJCQl2 YXIgdmFsdWVfZW5kID0gZG9jdW1lbnQuY29va2llLmluZGV4T2YgKCc7JywgdmFs dWVfYmVnaW4pOwoJCQlpZiAodmFsdWVfZW5kID09IC0xKQoJCQl7CgkJCQl2YWx1 ZV9lbmQgPSBjb29raWVfbGVuZ3RoOwoJCQl9CgkJCXZhciBjb29raWVfdmFsdWUg PSB1bmVzY2FwZShkb2N1bWVudC5jb29raWUuc3Vic3RyaW5nKHZhbHVlX2JlZ2lu LCB2YWx1ZV9lbmQpKTsKCQkJY29uc29sZS5sb2coIkZldGNoIENvb2tpZSA6OiAl cyA9ICclcyciLCBuYW1lLCBjb29raWVfdmFsdWUpOwoJCQlyZXR1cm4gY29va2ll X3ZhbHVlOwoJCX0KCQljb29raWVfYmVnaW4gPSBkb2N1bWVudC5jb29raWUuaW5k ZXhPZignICcsIGNvb2tpZV9iZWdpbikgKyAxOwoJCWlmIChjb29raWVfYmVnaW4g PT0gMCkKCQl7CgkJCWJyZWFrOwoJCX0KCX0KCWNvbnNvbGUubG9nKCJGZXRjaCBD b29raWUgOjogJXMgKG51bGwpIiwgbmFtZSk7CglyZXR1cm4gbnVsbDsKfQoKLy8g IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gRm9ybSBlbGVtZW50IG1h bmFnZXJzICh1c2VkIGZvciAnY2hlY2sgYWxsJyB0eXBlIHN5c3RlbXMpCgovKioK KiBTZXRzIGFsbCBjaGVja2JveGVzLCByYWRpbyBidXR0b25zIG9yIHNlbGVjdHMg aW4gYSBnaXZlbiBmb3JtIHRvIGEgZ2l2ZW4gc3RhdGUsIHdpdGggZXhjZXB0aW9u cwoqCiogQHBhcmFtCW9iamVjdAlGb3JtIG9iamVjdAoqIEBwYXJhbQlzdHJpbmcJ VGFyZ2V0IGVsZW1lbnQgdHlwZSAob25lIG9mICdyYWRpbycsICdzZWxlY3Qtb25l JywgJ2NoZWNrYm94JykKKiBAcGFyYW0Jc3RyaW5nCVNlbGVjdGVkIG9wdGlvbiBp biBjYXNlIG9mICdyYWRpbycKKiBAcGFyYW0JYXJyYXkJQXJyYXkgb2YgZWxlbWVu dCBuYW1lcyB0byBiZSBleGNsdWRlZAoqIEBwYXJhbQltaXhlZAlWYWx1ZSB0byBn aXZlIHRvIGZvdW5kIGVsZW1lbnRzCiovCmZ1bmN0aW9uIGpzX3RvZ2dsZV9hbGwo Zm9ybW9iaiwgZm9ybXR5cGUsIG9wdGlvbiwgZXhjbHVkZSwgc2V0dG8pCnsKCWZv ciAodmFyIGkgPTA7IGkgPCBmb3Jtb2JqLmVsZW1lbnRzLmxlbmd0aDsgaSsrKQoJ ewoJCXZhciBlbG0gPSBmb3Jtb2JqLmVsZW1lbnRzW2ldOwoJCWlmIChlbG0udHlw ZSA9PSBmb3JtdHlwZSAmJiBQSFAuaW5fYXJyYXkoZWxtLm5hbWUsIGV4Y2x1ZGUs IGZhbHNlKSA9PSAtMSkKCQl7CgkJCXN3aXRjaCAoZm9ybXR5cGUpCgkJCXsKCQkJ CWNhc2UgJ3JhZGlvJzoKCQkJCQlpZiAoZWxtLnZhbHVlID09IG9wdGlvbikgLy8g b3B0aW9uID09ICcnIGV2YWx1YXRlcyB0cnVlIHdoZW4gb3B0aW9uID0gMAoJCQkJ CXsKCQkJCQkJZWxtLmNoZWNrZWQgPSBzZXR0bzsKCQkJCQl9CgkJCQlicmVhazsK CQkJCWNhc2UgJ3NlbGVjdC1vbmUnOgoJCQkJCWVsbS5zZWxlY3RlZEluZGV4ID0g c2V0dG87CgkJCQlicmVhazsKCQkJCWRlZmF1bHQ6CgkJCQkJZWxtLmNoZWNrZWQg PSBzZXR0bzsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQp9CgovKioKKiBTZXRzIGFs bCA8c2VsZWN0PiBlbGVtZW50cyB0byB0aGUgc2VsZWN0ZWRJbmRleCBzcGVjaWZp ZWQgYnkgdGhlICdzZWxlY3RhbGwnIGVsZW1lbnQKKgoqIEBwYXJhbQlvYmplY3QJ Rm9ybSBvYmplY3QKKi8KZnVuY3Rpb24ganNfc2VsZWN0X2FsbChmb3Jtb2JqKQp7 CglleGNsdWRlID0gbmV3IEFycmF5KCk7CglleGNsdWRlWzBdID0gJ3NlbGVjdGFs bCc7Cglqc190b2dnbGVfYWxsKGZvcm1vYmosICdzZWxlY3Qtb25lJywgJycsIGV4 Y2x1ZGUsIGZvcm1vYmouc2VsZWN0YWxsLnNlbGVjdGVkSW5kZXgpOwp9CgovKioK KiBTZXRzIGFsbCA8aW5wdXQgdHlwZT0iY2hlY2tib3giIC8+IGVsZW1lbnRzIHRv IGhhdmUgdGhlIHNhbWUgY2hlY2tlZCBzdGF0dXMgYXMgJ2FsbGJveCcKKgoqIEBw YXJhbQlvYmplY3QJRm9ybSBvYmplY3QKKi8KZnVuY3Rpb24ganNfY2hlY2tfYWxs KGZvcm1vYmopCnsKCWV4Y2x1ZGUgPSBuZXcgQXJyYXkoKTsKCWV4Y2x1ZGVbMF0g PSAna2VlcGF0dGFjaG1lbnRzJzsKCWV4Y2x1ZGVbMV0gPSAnYWxsYm94JzsKCWV4 Y2x1ZGVbMl0gPSAncmVtb3ZlYWxsJzsKCWpzX3RvZ2dsZV9hbGwoZm9ybW9iaiwg J2NoZWNrYm94JywgJycsIGV4Y2x1ZGUsIGZvcm1vYmouYWxsYm94LmNoZWNrZWQp Owp9CgovKioKKiBTZXRzIGFsbCA8aW5wdXQgdHlwZT0icmFkaW8iIC8+IGdyb3Vw cyB0byBoYXZlIGEgcGFydGljdWxhciBvcHRpb24gY2hlY2tlZAoqCiogQHBhcmFt CW9iamVjdAlGb3JtIG9iamVjdAoqIEBwYXJhbQltaXhlZAlTZWxlY3RlZCBvcHRp b24KKi8KZnVuY3Rpb24ganNfY2hlY2tfYWxsX29wdGlvbihmb3Jtb2JqLCBvcHRp b24pCnsKCWV4Y2x1ZGUgPSBuZXcgQXJyYXkoKTsKCWV4Y2x1ZGVbMF0gPSAndXNl dXNlcmdyb3VwJzsKCWpzX3RvZ2dsZV9hbGwoZm9ybW9iaiwgJ3JhZGlvJywgb3B0 aW9uLCBleGNsdWRlLCB0cnVlKTsKfQoKLyoqCiogQWxpYXMgdG8ganNfY2hlY2tf YWxsCiovCmZ1bmN0aW9uIGNoZWNrYWxsKGZvcm1vYmopCnsKCWpzX2NoZWNrX2Fs bChmb3Jtb2JqKTsKfQoKLyoqCiogQWxpYXMgdG8ganNfY2hlY2tfYWxsX29wdGlv bgoqLwpmdW5jdGlvbiBjaGVja2FsbF9vcHRpb24oZm9ybW9iaiwgb3B0aW9uKQp7 Cglqc19jaGVja19hbGxfb3B0aW9uKGZvcm1vYmosIG9wdGlvbik7Cn0KCi8qKgoq IFJlc2l6ZSBmdW5jdGlvbiBmb3IgQ1AgdGV4dGFyZWFzCioKKiBAcGFyYW0JaW50 ZWdlcglJZiBwb3NpdGl2ZSwgc2l6ZSB1cCwgb3RoZXJ3aXNlIHNpemUgZG93bgoq IEBwYXJhbQlzdHJpbmcJSUQgb2YgdGhlIHRleHRhcmVhCioKKiBAcmV0dXJuCWJv b2xlYW4JZmFsc2UKKi8KZnVuY3Rpb24gcmVzaXplX3RleHRhcmVhKHRvLCBpZCkK ewoJdmFyIHRleHRhcmVhID0gZmV0Y2hfb2JqZWN0KGlkKTsKCgl0ZXh0YXJlYS5z dHlsZS53aWR0aCA9IHBhcnNlSW50KHRleHRhcmVhLm9mZnNldFdpZHRoKSArICh0 byA8IDAgPyAtMTAwIDogMTAwKSArICJweCI7Cgl0ZXh0YXJlYS5zdHlsZS5oZWln aHQgPSBwYXJzZUludCh0ZXh0YXJlYS5vZmZzZXRIZWlnaHQpICsgKHRvIDwgMCA/ IC0xMDAgOiAxMDApICsgInB4IjsKCglyZXR1cm4gZmFsc2U7Cn0KCi8vICMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIENvbGxhcHNpYmxlIGVsZW1lbnQg aGFuZGxlcnMKCi8qKgoqIFRvZ2dsZXMgdGhlIGNvbGxhcHNlIHN0YXRlIG9mIGFu IG9iamVjdCwgYW5kIHNhdmVzIHN0YXRlIHRvICd2YnVsbGV0aW5fY29sbGFwc2Un IGNvb2tpZQoqCiogQHBhcmFtCXN0cmluZwlVbmlxdWUgSUQgZm9yIHRoZSBjb2xs YXBzZSBncm91cAoqCiogQHJldHVybglib29sZWFuCWZhbHNlCiovCmZ1bmN0aW9u IHRvZ2dsZV9jb2xsYXBzZShvYmppZCkKewoJaWYgKCFpc19yZWdleHApCgl7CgkJ cmV0dXJuIGZhbHNlOwoJfQoKCW9iaiA9IGZldGNoX29iamVjdCgnY29sbGFwc2Vv YmpfJyArIG9iamlkKTsKCWltZyA9IGZldGNoX29iamVjdCgnY29sbGFwc2VpbWdf JyArIG9iamlkKTsKCWNlbCA9IGZldGNoX29iamVjdCgnY29sbGFwc2VjZWxfJyAr IG9iamlkKTsKCglpZiAoIW9iaikKCXsKCQkvLyBub3RoaW5nIHRvIGNvbGxhcHNl IQoJCWlmIChpbWcpCgkJewoJCQkvLyBoaWRlIHRoZSBjbGlja3kgaW1hZ2UgaWYg dGhlcmUgaXMgb25lCgkJCWltZy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCX0K CQlyZXR1cm4gZmFsc2U7Cgl9CgoJaWYgKG9iai5zdHlsZS5kaXNwbGF5ID09ICdu b25lJykKCXsKCQlvYmouc3R5bGUuZGlzcGxheSA9ICcnOwoJCXNhdmVfY29sbGFw c2VkKG9iamlkLCBmYWxzZSk7CgkJaWYgKGltZykKCQl7CgkJCWltZ19yZSA9IG5l dyBSZWdFeHAoIl9jb2xsYXBzZWRcXC5naWYkIik7CgkJCWltZy5zcmMgPSBpbWcu c3JjLnJlcGxhY2UoaW1nX3JlLCAnLmdpZicpOwoJCX0KCQlpZiAoY2VsKQoJCXsK CQkJY2VsX3JlID0gbmV3IFJlZ0V4cCgiXih0aGVhZHx0Y2F0KShfY29sbGFwc2Vk KSQiKTsKCQkJY2VsLmNsYXNzTmFtZSA9IGNlbC5jbGFzc05hbWUucmVwbGFjZShj ZWxfcmUsICckMScpOwoJCX0KCX0KCWVsc2UKCXsKCQlvYmouc3R5bGUuZGlzcGxh eSA9ICdub25lJzsKCQlzYXZlX2NvbGxhcHNlZChvYmppZCwgdHJ1ZSk7CgkJaWYg KGltZykKCQl7CgkJCWltZ19yZSA9IG5ldyBSZWdFeHAoIlxcLmdpZiQiKTsKCQkJ aW1nLnNyYyA9IGltZy5zcmMucmVwbGFjZShpbWdfcmUsICdfY29sbGFwc2VkLmdp ZicpOwoJCX0KCQlpZiAoY2VsKQoJCXsKCQkJY2VsX3JlID0gbmV3IFJlZ0V4cCgi Xih0aGVhZHx0Y2F0KSQiKTsKCQkJY2VsLmNsYXNzTmFtZSA9IGNlbC5jbGFzc05h bWUucmVwbGFjZShjZWxfcmUsICckMV9jb2xsYXBzZWQnKTsKCQl9Cgl9CglyZXR1 cm4gZmFsc2U7Cn0KCi8qKgoqIFVwZGF0ZXMgdmJ1bGxldGluX2NvbGxhcHNlIGNv b2tpZSB3aXRoIGNvbGxhcHNlIHByZWZlcmVuY2VzCioKKiBAcGFyYW0Jc3RyaW5n CVVuaXF1ZSBJRCBmb3IgdGhlIGNvbGxhcHNlIGdyb3VwCiogQHBhcmFtCWJvb2xl YW4JQWRkIGEgY29va2llCiovCmZ1bmN0aW9uIHNhdmVfY29sbGFwc2VkKG9iamlk LCBhZGRjb2xsYXBzZWQpCnsKCXZhciBjb2xsYXBzZWQgPSBmZXRjaF9jb29raWUo J3ZidWxsZXRpbl9jb2xsYXBzZScpOwoJdmFyIHRtcCA9IG5ldyBBcnJheSgpOwoK CWlmIChjb2xsYXBzZWQgIT0gbnVsbCkKCXsKCQljb2xsYXBzZWQgPSBjb2xsYXBz ZWQuc3BsaXQoJ1xuJyk7CgoJCWZvciAodmFyIGkgaW4gY29sbGFwc2VkKQoJCXsK CQkJaWYgKGNvbGxhcHNlZFtpXSAhPSBvYmppZCAmJiBjb2xsYXBzZWRbaV0gIT0g JycpCgkJCXsKCQkJCXRtcFt0bXAubGVuZ3RoXSA9IGNvbGxhcHNlZFtpXTsKCQkJ fQoJCX0KCX0KCglpZiAoYWRkY29sbGFwc2VkKQoJewoJCXRtcFt0bXAubGVuZ3Ro XSA9IG9iamlkOwoJfQoKCWV4cGlyZXMgPSBuZXcgRGF0ZSgpOwoJZXhwaXJlcy5z ZXRUaW1lKGV4cGlyZXMuZ2V0VGltZSgpICsgKDEwMDAgKiA4NjQwMCAqIDM2NSkp OwoJc2V0X2Nvb2tpZSgndmJ1bGxldGluX2NvbGxhcHNlJywgdG1wLmpvaW4oJ1xu JyksIGV4cGlyZXMpOwp9CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwovLyBFdmVudCBIYW5kbGVycyBmb3IgUGFnZU5hdiBtZW51cwoKLyoqCiogQ2xh c3MgdG8gaGFuZGxlIHBhZ2VuYXYgZXZlbnRzCiovCmZ1bmN0aW9uIHZCcGFnZW5h digpCnsKfQoKLyoqCiogSGFuZGxlcyBjbGlja3Mgb24gcGFnZW5hdiBtZW51IGNv bnRyb2wgb2JqZWN0cwoqLwp2QnBhZ2VuYXYucHJvdG90eXBlLmNvbnRyb2xvYmpf b25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXRoaXMuX29uY2xpY2soZSk7Cgl2YXIg aW5wdXRzID0gZmV0Y2hfdGFncyh0aGlzLm1lbnUubWVudW9iaiwgJ2lucHV0Jyk7 Cglmb3IgKHZhciBpID0gMDsgaSA8IGlucHV0cy5sZW5ndGg7IGkrKykKCXsKCQlp ZiAoaW5wdXRzW2ldLnR5cGUgPT0gJ3RleHQnKQoJCXsKCQkJaW5wdXRzW2ldLmZv Y3VzKCk7CgkJCWJyZWFrOwoJCX0KCX0KfTsKCi8qKgoqIFN1Ym1pdHMgdGhlIHBh Z2VuYXYgZm9ybS4uLiBzb3J0IG9mCiovCnZCcGFnZW5hdi5wcm90b3R5cGUuZm9y bV9nb3RvcGFnZSA9IGZ1bmN0aW9uKGUpCnsKCWlmICgocGFnZW51bSA9IHBhcnNl SW50KGZldGNoX29iamVjdCgncGFnZW5hdl9pdHh0JykudmFsdWUsIDEwKSkgPiAw KQoJewoJCXdpbmRvdy5sb2NhdGlvbiA9IHRoaXMuYWRkciArICcmcGFnZT0nICsg cGFnZW51bTsKCX0KCXJldHVybiBmYWxzZTsKfTsKCi8qKgoqIEhhbmRsZXMgY2xp Y2tzIG9uIHRoZSAnR28nIGJ1dHRvbiBpbiBwYWdlbmF2IHBvcHVwcwoqLwp2QnBh Z2VuYXYucHJvdG90eXBlLmlidG5fb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXJl dHVybiB0aGlzLmZvcm0uZ290b3BhZ2UoKTsKfTsKCi8qKgoqIEhhbmRsZXMga2V5 cHJlc3NlcyBpbiB0aGUgdGV4dCBpbnB1dCBvZiBwYWdlbmF2IHBvcHVwcwoqLwp2 QnBhZ2VuYXYucHJvdG90eXBlLml0eHRfb25rZXlwcmVzcyA9IGZ1bmN0aW9uKGUp CnsKCXJldHVybiAoKGUgPyBlIDogd2luZG93LmV2ZW50KS5rZXlDb2RlID09IDEz ID8gdGhpcy5mb3JtLmdvdG9wYWdlKCkgOiB0cnVlKTsKfTsKCi8vICMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIERIVE1MIFBvcHVwIE1lbnUgSGFuZGxp bmcgKGNvbXBsZW1lbnRzIHZidWxsZXRpbl9tZW51LmpzKQoKLyoqCiogV3JhcHBl ciBmb3IgdkJtZW51LnJlZ2lzdGVyCioKKiBAcGFyYW0Jc3RyaW5nCUNvbnRyb2wg SUQKKiBAcGFyYW0JYm9vbGVhbglObyBpbWFnZSAodHJ1ZSkKKiBAcGFyYW0JYm9v bGVhbglEb2VzIG5vdGhpbmcgYW55IG1vcmUKKi8KZnVuY3Rpb24gdmJtZW51X3Jl Z2lzdGVyKGNvbnRyb2xpZCwgbm9pbWFnZSwgZGF0ZWZpZWxkKQp7CglpZiAodHlw ZW9mKHZCbWVudSkgPT0gIm9iamVjdCIpCgl7CgkJcmV0dXJuIHZCbWVudS5yZWdp c3Rlcihjb250cm9saWQsIG5vaW1hZ2UpOwoJfQoJZWxzZQoJewoJCXJldHVybiBm YWxzZTsKCX0KfQoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g U3R1ZmYgdGhhdCByZWFsbHkgZG9lc24ndCBmaXQgYW55d2hlcmUgZWxzZQoKLyoq CiogU2V0cyBhbiBlbGVtZW50IGFuZCBhbGwgaXRzIGNoaWxkcmVuIHRvIGJlICd1 bnNlbGVjdGFibGUnCioKKiBAcGFyYW0Jb2JqZWN0CU9iamVjdCB0byBiZSBtYWRl IHVuc2VsZWN0YWJsZQoqLwpmdW5jdGlvbiBzZXRfdW5zZWxlY3RhYmxlKG9iaikK ewoJaWYgKCFpc19pZTQgJiYgdHlwZW9mIG9iai50YWdOYW1lICE9ICd1bmRlZmlu ZWQnKQoJewoJCWlmIChvYmouaGFzQ2hpbGROb2RlcygpKQoJCXsKCQkJZm9yICh2 YXIgaSA9IDA7IGkgPCBvYmouY2hpbGROb2Rlcy5sZW5ndGg7IGkrKykKCQkJewoJ CQkJc2V0X3Vuc2VsZWN0YWJsZShvYmouY2hpbGROb2Rlc1tpXSk7CgkJCX0KCQl9 CgkJb2JqLnVuc2VsZWN0YWJsZSA9ICdvbic7Cgl9Cn0KCi8qKgoqIEZldGNoZXMg dGhlIHNlc3Npb25oYXNoIGZyb20gdGhlIFNFU1NJT05VUkwgdmFyaWFibGUKKgoq IEByZXR1cm4Jc3RyaW5nCiovCmZ1bmN0aW9uIGZldGNoX3Nlc3Npb25oYXNoKCkK ewoJcmV0dXJuIChTRVNTSU9OVVJMID09ICcnID8gJycgOiBTRVNTSU9OVVJMLnN1 YnN0cigyLCAzMikpOwp9CgovKioKKiBFbXVsYXRlcyB0aGUgUEhQIHZlcnNpb24g b2YgdkJ1bGxldGluJ3MgY29uc3RydWN0X3BocmFzZSgpIHNwcmludGYgd3JhcHBl cgoqCiogQHBhcmFtCXN0cmluZwlTdHJpbmcgY29udGFpbmluZyAlMSRzIHR5cGUg cmVwbGFjZW1lbnQgbWFya2VycwoqIEBwYXJhbQlzdHJpbmcJRmlyc3QgcmVwbGFj ZW1lbnQKKiBAcGFyYW0Jc3RyaW5nCU50aCByZXBsYWNlbWVudAoqCiogQHJldHVy bglzdHJpbmcKKi8KZnVuY3Rpb24gY29uc3RydWN0X3BocmFzZSgpCnsKCWlmICgh YXJndW1lbnRzIHx8IGFyZ3VtZW50cy5sZW5ndGggPCAxIHx8ICFpc19yZWdleHAp Cgl7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXZhciBhcmdzID0gYXJndW1lbnRzOwoJ dmFyIHN0ciA9IGFyZ3NbMF07Cgl2YXIgcmU7CgoJZm9yICh2YXIgaSA9IDE7IGkg PCBhcmdzLmxlbmd0aDsgaSsrKQoJewoJCXJlID0gbmV3IFJlZ0V4cCgiJSIgKyBp ICsgIlxcJHMiLCAnZ2knKTsKCQlzdHIgPSBzdHIucmVwbGFjZShyZSwgYXJnc1tp XSk7Cgl9CglyZXR1cm4gc3RyOwp9CgovKioKKiBIYW5kbGVzIHRoZSBxdWljayBz dHlsZS9sYW5ndWFnZSBvcHRpb25zIGluIHRoZSBmb290ZXIKKgoqIEBwYXJhbQlv YmplY3QJU2VsZWN0IG9iamVjdAoqIEBwYXJhbQlzdHJpbmcJVHlwZSAoc3R5bGUg b3IgbGFuZ3VhZ2UpCiovCmZ1bmN0aW9uIHN3aXRjaF9pZChzZWxlY3RvYmosIHR5 cGUpCnsKCXZhciBpZCA9IHNlbGVjdG9iai5vcHRpb25zW3NlbGVjdG9iai5zZWxl Y3RlZEluZGV4XS52YWx1ZTsKCglpZiAoaWQgPT0gJycpCgl7CgkJcmV0dXJuOwoJ fQoKCXZhciB1cmwgPSBuZXcgU3RyaW5nKHdpbmRvdy5sb2NhdGlvbik7Cgl2YXIg ZnJhZ21lbnQgPSBuZXcgU3RyaW5nKCcnKTsKCgkvLyBnZXQgcmlkIG9mIGZyYWdt ZW50Cgl1cmwgPSB1cmwuc3BsaXQoJyMnKTsKCgkvLyBkZWFsIHdpdGggdGhlIGZy YWdtZW50IGZpcnN0CglpZiAodXJsWzFdKQoJewoJCWZyYWdtZW50ID0gJyMnICsg dXJsWzFdOwoJfQoKCS8vIGRlYWwgd2l0aCB0aGUgbWFpbiB1cmwKCXVybCA9IHVy bFswXTsKCgkvLyByZW1vdmUgaWQ9eCYgZnJvbSBtYWluIGJpdAoJaWYgKHVybC5p bmRleE9mKHR5cGUgKyAnaWQ9JykgIT0gLTEgJiYgaXNfcmVnZXhwKQoJewoJCXJl ID0gbmV3IFJlZ0V4cCh0eXBlICsgImlkPVxcZCsmPyIpOwoJCXVybCA9IHVybC5y ZXBsYWNlKHJlLCAnJyk7Cgl9CgoJLy8gYWRkIHRoZSA/IHRvIHRoZSB1cmwgaWYg bmVlZGVkCglpZiAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSkKCXsKCQl1cmwgKz0g Jz8nOwoJfQoJZWxzZQoJewoJCS8vIG1ha2Ugc3VyZSB0aGF0IHdlIGhhdmUgYSB2 YWxpZCBjaGFyYWN0ZXIgdG8gam9pbiBvdXIgaWQgYml0CgkJbGFzdGNoYXIgPSB1 cmwuc3Vic3RyKHVybC5sZW5ndGggLSAxKTsKCQlpZiAobGFzdGNoYXIgIT0gJyYn ICYmIGxhc3RjaGFyICE9ICc/JykKCQl7CgkJCXVybCArPSAnJic7CgkJfQoJfQoK CXdpbmRvdy5sb2NhdGlvbiA9IHVybCArIHR5cGUgKyAnaWQ9JyArIGlkICsgZnJh Z21lbnQ7Cn0KCi8qKgoqIFRha2VzIHRoZSAnYWx0JyBhdHRyaWJ1dGUgZm9yIGFu IGltYWdlIGFuZCBhdHRhY2hlcyBpdCB0byB0aGUgJ3RpdGxlJyBhdHRyaWJ1dGUK KgoqIEBwYXJhbQlvYmplY3QJSW1hZ2Ugb2JqZWN0CiovCmZ1bmN0aW9uIGltZ19h bHRfMl90aXRsZShpbWcpCnsKCWlmICghaW1nLnRpdGxlICYmIGltZy5hbHQgIT0g JycpCgl7CgkJaW1nLnRpdGxlID0gaW1nLmFsdDsKCX0KfQoKLy8gIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gSW5pdGlhbGl6ZSBhIFBvc3RCaXQKCi8q KgoqIFRoaXMgZnVuY3Rpb24gcnVucyBhbGwgdGhlIG5lY2Vzc2FyeSBKYXZhc2Ny aXB0IGNvZGUgb24gYSBQb3N0Qml0CiogYWZ0ZXIgaXQgaGFzIGJlZW4gbG9hZGVk IHZpYSBBSkFYLiBEb24ndCB1c2UgdGhpcyBtZXRob2QgYmVmb3JlIGEKKiBjb21w bGV0ZSBwYWdlIGxvYWQgb3IgeW91J2xsIGhhdmUgcHJvYmxlbXMuCioKKiBAcGFy YW0Jb2JqZWN0CU9iamVjdCBjb250YWluaW5nIHBvc3RiaXRzCiovCmZ1bmN0aW9u IFBvc3RCaXRfSW5pdChvYmosIHBvc3RpZCkKewoJY29uc29sZS5sb2coIlBvc3RC aXQgSW5pdDogJWQiLCBwb3N0aWQpOwoKCWlmICh0eXBlb2YgdkJtZW51ICE9ICd1 bmRlZmluZWQnKQoJewoJCS8vIGluaXQgcHJvZmlsZSBtZW51KHMpCgkJdmFyIGRp dnMgPSBmZXRjaF90YWdzKG9iaiwgJ2RpdicpOwoJCWZvciAodmFyIGkgPSAwOyBp IDwgZGl2cy5sZW5ndGg7IGkrKykKCQl7CgkJCWlmIChkaXZzW2ldLmlkICYmIGRp dnNbaV0uaWQuc3Vic3RyKDAsIDkpID09ICdwb3N0bWVudV8nKQoJCQl7CgkJCQl2 Qm1lbnUucmVnaXN0ZXIoZGl2c1tpXS5pZCwgdHJ1ZSk7CgkJCX0KCQl9Cgl9CgoJ aWYgKHR5cGVvZiB2Ql9RdWlja0VkaXRvciAhPSAndW5kZWZpbmVkJykKCXsKCQkv LyBpbml0IHF1aWNrIGVkaXQgY29udHJvbHMKCQl2Ql9BSkFYX1F1aWNrRWRpdF9J bml0KG9iaik7Cgl9CgoJaWYgKHR5cGVvZiB2Ql9RdWlja1JlcGx5ICE9ICd1bmRl ZmluZWQnKQoJewoJCS8vIGluaXQgcXVpY2sgcmVwbHkgYnV0dG9uCgkJcXJfaW5p dF9idXR0b25zKG9iaik7Cgl9CgoJaWYgKHR5cGVvZiBtcV9pbml0ICE9ICd1bmRl ZmluZWQnKQoJewoJCS8vIGluaXQgcXVpY2sgcmVwbHkgYnV0dG9uCgkJbXFfaW5p dChvYmopOwoJfQoKCWlmICh0eXBlb2YgdkJyZXAgIT0gJ3VuZGVmaW5lZCcpCgl7 CgkJaWYgKHR5cGVvZiBwb3N0aWQgIT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHBv c3RpZCAhPSAnbnVsbCcpCgkJewoJCQl2YnJlcF9yZWdpc3Rlcihwb3N0aWQpOwoJ CX0KCX0KCglpZiAodHlwZW9mIGlubGluZU1vZCAhPSAndW5kZWZpbmVkJykKCXsK CQlpbV9pbml0KG9iaik7Cgl9Cn0KCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCi8vIE1haW4gdkJ1bGxldGluIEphdmFzY3JpcHQgSW5pdGlhbGl6YXRp b24KCi8qKgoqIFRoaXMgZnVuY3Rpb24gcnVucyAoYWxtb3N0KSBhdCB0aGUgZW5k IG9mIHNjcmlwdCBsb2FkaW5nIG9uIG1vc3QgdkJ1bGxldGluIHBhZ2VzCioKKiBJ dCBzZXRzIHVwIHRoaW5ncyBsaWtlIGltYWdlIGFsdC0+dGl0bGUgdGFncywgdHVy bnMgb24gdGhlIHBvcHVwIG1lbnUgc3lzdGVtIGV0Yy4KKgoqIEByZXR1cm4JYm9v bGVhbgoqLwpmdW5jdGlvbiB2QnVsbGV0aW5faW5pdCgpCnsKCS8vIGRvbid0IGJv dGhlciBkb2luZyBhbnkgZXhjaXRpbmcgc3R1ZmYgZm9yIFdlYlRWCglpZiAoaXNf d2VidHYpCgl7CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8vIHNldCAndGl0bGUnIHRh Z3MgZm9yIGltYWdlIGVsZW1lbnRzCgl2YXIgaW1ncyA9IGZldGNoX3RhZ3MoZG9j dW1lbnQsICdpbWcnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgaW1ncy5sZW5ndGg7 IGkrKykKCXsKCQlpbWdfYWx0XzJfdGl0bGUoaW1nc1tpXSk7Cgl9CgoJLy8gZmlu YWxpemUgcG9wdXAgbWVudXMKCWlmICh0eXBlb2YgdkJtZW51ID09ICdvYmplY3Qn KQoJewoJCS8vIGNsb3NlIGFsbCBtZW51cyBvbiBkb2N1bWVudCBjbGljayBvciBy ZXNpemUKCQlpZiAodHlwZW9mKFlBSE9PKSAhPSAidW5kZWZpbmVkIikKCQl7CgkJ CVlBSE9PLnV0aWwuRXZlbnQub24oZG9jdW1lbnQsICJjbGljayIsIHZibWVudV9o aWRlKTsKCQkJWUFIT08udXRpbC5FdmVudC5vbih3aW5kb3csICJyZXNpemUiLCB2 Ym1lbnVfaGlkZSk7CgkJfQoJCWVsc2UgaWYgKHdpbmRvdy5hdHRhY2hFdmVudCAm JiAhaXNfc2FmKQoJCXsKCQkJZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uY2xpY2sn LCB2Ym1lbnVfaGlkZSk7CgkJCXdpbmRvdy5hdHRhY2hFdmVudCgnb25yZXNpemUn LCB2Ym1lbnVfaGlkZSk7CgkJfQoJCWVsc2UgaWYgKGRvY3VtZW50LmFkZEV2ZW50 TGlzdGVuZXIgJiYgIWlzX3NhZikKCQl7CgkJCWRvY3VtZW50LmFkZEV2ZW50TGlz dGVuZXIoJ2NsaWNrJywgdmJtZW51X2hpZGUsIGZhbHNlKTsKCQkJd2luZG93LmFk ZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHZibWVudV9oaWRlLCBmYWxzZSk7CgkJ fQoJCWVsc2UKCQl7CgkJCXdpbmRvdy5vbmNsaWNrID0gdmJtZW51X2hpZGU7CgkJ CXdpbmRvdy5vbnJlc2l6ZSA9IHZibWVudV9oaWRlOwoJCX0KCgkJLy8gYWRkIHBv cHVwcyB0byBwYWdlbmF2IGVsZW1lbnRzCgkJdmFyIHBhZ2VuYXZzID0gZmV0Y2hf dGFncyhkb2N1bWVudCwgJ3RkJyk7CgkJZm9yICh2YXIgbiA9IDA7IG4gPCBwYWdl bmF2cy5sZW5ndGg7IG4rKykKCQl7CgkJCWlmIChwYWdlbmF2c1tuXS5oYXNDaGls ZE5vZGVzKCkgJiYgcGFnZW5hdnNbbl0uZmlyc3RDaGlsZC5uYW1lICYmIHBhZ2Vu YXZzW25dLmZpcnN0Q2hpbGQubmFtZS5pbmRleE9mKCdQYWdlTmF2JykgIT0gLTEp CgkJCXsKCQkJCXZhciBhZGRyID0gcGFnZW5hdnNbbl0udGl0bGU7CgkJCQlwYWdl bmF2c1tuXS50aXRsZSA9ICcnOwoJCQkJcGFnZW5hdnNbbl0uaW5uZXJIVE1MID0g Jyc7CgkJCQlwYWdlbmF2c1tuXS5pZCA9ICdwYWdlbmF2LicgKyBuOwoJCQkJdmFy IHBuID0gdkJtZW51LnJlZ2lzdGVyKHBhZ2VuYXZzW25dLmlkKTsKCQkJCWlmIChp c19zYWYpCgkJCQl7CgkJCQkJcG4uY29udHJvbG9iai5fb25jbGljayA9IHBuLmNv bnRyb2xvYmoub25jbGljazsKCQkJCQlwbi5jb250cm9sb2JqLm9uY2xpY2sgPSB2 QnBhZ2VuYXYucHJvdG90eXBlLmNvbnRyb2xvYmpfb25jbGljazsKCQkJCX0KCQkJ fQoJCX0KCgkJLy8gcHJvY2VzcyB0aGUgcGFnZW5hdnMgcG9wdXAgZm9ybQoJCWlm ICh0eXBlb2YgYWRkciAhPSAndW5kZWZpbmVkJykKCQl7CgkJCWZldGNoX29iamVj dCgncGFnZW5hdl9mb3JtJykuYWRkciA9IGFkZHI7CgkJCWZldGNoX29iamVjdCgn cGFnZW5hdl9mb3JtJykuZ290b3BhZ2UgPSB2QnBhZ2VuYXYucHJvdG90eXBlLmZv cm1fZ290b3BhZ2U7CgkJCWZldGNoX29iamVjdCgncGFnZW5hdl9pYnRuJykub25j bGljayA9IHZCcGFnZW5hdi5wcm90b3R5cGUuaWJ0bl9vbmNsaWNrOwoJCQlmZXRj aF9vYmplY3QoJ3BhZ2VuYXZfaXR4dCcpLm9ua2V5cHJlc3MgPSB2QnBhZ2VuYXYu cHJvdG90eXBlLml0eHRfb25rZXlwcmVzczsKCQl9CgoJCS8vIGFjdGl2YXRlIHRo ZSBtZW51IHN5c3RlbQoJCXZCbWVudS5hY3RpdmF0ZSh0cnVlKTsKCX0KCgkvLyB0 aGUgbmV3IGluaXQgc3lzdGVtCgl2QnVsbGV0aW4uaW5pdCgpOwoKCXJldHVybiB0 cnVlOwp9CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyB2QnVs bGV0aW4gSmF2YXNjcmlwdCBGcmFtZXdvcmsKCi8qKgoqIEdlbmVyYWwgY2xhc3Mg Zm9yIGhhbmRsaW5nIGN1c3RvbSBldmVudHMgYW5kIGN1c3RvbSBjb250cm9scwoq LwpmdW5jdGlvbiB2QnVsbGV0aW5fRnJhbWV3b3JrKCkKewoJLyoqCgkqIEB2YXIJ YXJyYXkJQXJyYXkgb2YgZWxlbWVudHMgdG8gYmUgcGFzc2VkIHRvIGNvbnRyb2wg aW5pdCBmdW5jdGlvbnMKCSogQHZhcglhcnJheQlBcnJheSBvZiBBSkFYIGxvYWQv c2F2ZSBVUkxzCgkqIEB2YXIJYXJyYXkJQXJyYXkgb2YgWVVJIGN1c3RvbSBldmVu dHMKCSogQHZhcglkYXRlCUN1cnJlbnQgdGltZQoJKi8KCXRoaXMuZWxlbWVudHMg PSBuZXcgQXJyYXkoKTsKCXRoaXMuYWpheHVybHMgPSBuZXcgQXJyYXkoKTsKCXRo aXMuZXZlbnRzID0gbmV3IEFycmF5KCk7Cgl0aGlzLnRpbWUgPSBuZXcgRGF0ZSgp OwoKCS8vIGN1c3RvbSBldmVudCB0byBmaXJlIGR1cmluZyBjbGFzcyBpbml0Cgl0 aGlzLmFkZF9ldmVudCgic3lzdGVtSW5pdCIpOwp9CgovKioKKiBJbml0aWFsaXpl cyB0aGUgb2JqZWN0IC0gdXN1YWxseSBjYWxsZWQgYXQgZW5kIG9mIGZvb3RlciB0 ZW1wbGF0ZQoqLwp2QnVsbGV0aW5fRnJhbWV3b3JrLnByb3RvdHlwZS5pbml0ID0g ZnVuY3Rpb24oKQp7Cgl0aGlzLmV2ZW50cy5zeXN0ZW1Jbml0LmZpcmUoKTsKCWNv bnNvbGUuaW5mbygiU3lzdGVtIEluaXQgRmlyZWQiKTsKfQoKLyoqCiogRW11bGF0 ZXMgT09QIGNsYXNzIGV4dGVuc2lvbgoqCiogQHBhcmFtCW9iamVjdAlFeHRlbmRl ZCBjbGFzcwoqIEBwYXJhbQlvYmplY3QJQmFzZSBjbGFzcwoqLwp2QnVsbGV0aW5f RnJhbWV3b3JrLnByb3RvdHlwZS5leHRlbmQgPSBmdW5jdGlvbihzdWJDbGFzcywg YmFzZUNsYXNzKQp7CiAgIGZ1bmN0aW9uIGluaGVyaXRhbmNlKCkge30KICAgaW5o ZXJpdGFuY2UucHJvdG90eXBlID0gYmFzZUNsYXNzLnByb3RvdHlwZTsKCiAgIHN1 YkNsYXNzLnByb3RvdHlwZSA9IG5ldyBpbmhlcml0YW5jZSgpOwogICBzdWJDbGFz cy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzczsKICAgc3ViQ2xhc3Mu YmFzZUNvbnN0cnVjdG9yID0gYmFzZUNsYXNzOwogICBzdWJDbGFzcy5zdXBlckNs YXNzID0gYmFzZUNsYXNzLnByb3RvdHlwZTsKfQoKLyoqCiogUmVnaXN0ZXJzIGEg Y3VzdG9tIGNvbnRyb2wgZm9yIGxhdGVyIGluaXRpYWxpemF0aW9uCiogQXJndW1l bnRzIDEtbiBhcmUgc3RvcmVkIGZvciBsYXRlciB1c2UKKgoqIEBwYXJhbQlzdHJp bmcJQ29udHJvbCB0eXBlICh2Ql9EYXRlUGlja2VyIGV0Yy4pCiogQHBhcmFtCXN0 cmluZwlIVE1MIGVsZW1lbnQgSUQKKi8KdkJ1bGxldGluX0ZyYW1ld29yay5wcm90 b3R5cGUucmVnaXN0ZXJfY29udHJvbCA9IGZ1bmN0aW9uKGNvbnRyb2x0eXBlLCBl bGVtZW50KQp7Cgl2YXIgYXJncyA9IG5ldyBBcnJheSgpOwoJZm9yICh2YXIgaSA9 IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspCgl7CgkJYXJncy5wdXNoKGFy Z3VtZW50c1tpXSk7Cgl9CglpZiAoIXRoaXMuZWxlbWVudHNbY29udHJvbHR5cGVd KQoJewoJCWNvbnNvbGUuaW5mbygiQ3JlYXRpbmcgYXJyYXkgdkJ1bGxldGluLmVs ZW1lbnRzW1wiJXNcIl0iLCBjb250cm9sdHlwZSk7CgkJdGhpcy5lbGVtZW50c1tj b250cm9sdHlwZV0gPSBuZXcgQXJyYXkoKTsKCX0KCXZhciB4ID0gdGhpcy5lbGVt ZW50c1tjb250cm9sdHlwZV0ucHVzaChhcmdzKTsKCWNvbnNvbGUubG9nKCJ2QnVs bGV0aW4uZWxlbWVudHNbXCIlc1wiXVslZF0gPSAlcyIsIGNvbnRyb2x0eXBlLCB4 LTEsIGFyZ3Muam9pbigiLCAiKSk7Cn0KCi8qKgoqIFJlZ2lzdGVycyBBSkFYIGxv YWQvc2F2ZSB1cmxzIGZvciBhIGNvbnRyb2wKKgoqIEBwYXJhbQlGZXRjaCBVUkwK KiBAcGFyYW0JU2F2ZSBVUkwKKiBAcGFyYW0JTGlzdCBvZiBlbGVtZW50cyB0byB3 aGljaCB0aGVzZSBVUkxzIGFwcGx5CiovCnZCdWxsZXRpbl9GcmFtZXdvcmsucHJv dG90eXBlLnJlZ2lzdGVyX2FqYXhfdXJscyA9IGZ1bmN0aW9uKGZldGNoLCBzYXZl LCBlbGVtZW50cykKewoJdmFyIGZldGNoID0gZmV0Y2guc3BsaXQoIj8iKTsgZmV0 Y2hbMV0gPSBTRVNTSU9OVVJMICsgInNlY3VyaXR5dG9rZW49IiArIFNFQ1VSSVRZ VE9LRU4gKyAiJmFqYXg9MSYiICsgZmV0Y2hbMV0ucmVwbGFjZSgvXHsoXGQrKSg6 XHcrKT9cfS9naSwgJyUkMSRzJyk7Cgl2YXIgc2F2ZSAgPSAgc2F2ZS5zcGxpdCgi PyIpOyAgc2F2ZVsxXSA9IFNFU1NJT05VUkwgKyAic2VjdXJpdHl0b2tlbj0iICsg U0VDVVJJVFlUT0tFTiArICImYWpheD0xJiIgKyBzYXZlWzFdLnJlcGxhY2UoL1x7 KFxkKykoOlx3Kyk/XH0vZ2ksICclJDEkcycpOwoKCWNvbnNvbGUubG9nKCJSZWdp c3RlciBBSkFYIFVSTHMgZm9yICVzIiwgZWxlbWVudHMpOwoKCWZvciAodmFyIGkg PSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspCgl7CgkJdGhpcy5hamF4dXJs c1tlbGVtZW50c1tpXV0gPSBuZXcgQXJyYXkoZmV0Y2gsIHNhdmUpOwoJfQp9Cgov KioKKiBSZWdpc3RlciBhIGN1c3RvbSBldmVudAoqCiogQHBhcmFtCXN0cmluZwlF dmVudCBuYW1lCiovCnZCdWxsZXRpbl9GcmFtZXdvcmsucHJvdG90eXBlLmFkZF9l dmVudCA9IGZ1bmN0aW9uKGV2ZW50bmFtZSkKewoJdGhpcy5ldmVudHNbZXZlbnRu YW1lXSA9ICh0eXBlb2YgWUFIT08gIT0gJ3VuZGVmaW5lZCcgPyBuZXcgWUFIT08u dXRpbC5DdXN0b21FdmVudChldmVudG5hbWUpIDogbmV3IG51bGxfZXZlbnQoKSk7 Cn0KCi8qKgoqIEJDOiBQYXNzIGNvbnNvbGUgY2FsbHMgdG8gRmlyZWJ1ZyBpZiBp dCdzIGF2YWlsYWJsZQoqLwp2QnVsbGV0aW5fRnJhbWV3b3JrLnByb3RvdHlwZS5j b25zb2xlID0gY29uc29sZS5sb2c7CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIwoKLy8gaW5pdGlhbGl6ZSB0aGUgUEhQIGZ1bmN0aW9uIGVtdWxhdG9y CnZhciBQSFAgPSBuZXcgdkJfUEhQX0VtdWxhdG9yKCk7CgovLyBDcmVhdGUgYW4g aW5zdGFuY2Ugb2YgdGhlIHZCdWxsZXRpbiBGcmFtZXdvcmsgb2JqZWN0CnZhciB2 QnVsbGV0aW4gPSBuZXcgdkJ1bGxldGluX0ZyYW1ld29yaygpOwoKLyo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKfHwgIyBE b3dubG9hZGVkOiAwNTo1MiwgVHVlIEp1biAyNHRoIDIwMDgKfHwgIyBDVlM6ICRS Q1NmaWxlJCAtICRSZXZpc2lvbjogMjY0MTMgJAp8fCAjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwpcKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=vbulletin_menu.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_menu.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_menu.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCnZCdWxsZXRp bi5hZGRfZXZlbnQoInZCbWVudVNob3ciKTsKdkJ1bGxldGluLmFkZF9ldmVudCgi dkJtZW51SGlkZSIpOwoKLyoqCiogdkJ1bGxldGluIHBvcHVwIG1lbnUgZXhhbXBs ZSB1c2FnZToKKgoqIFRvIGNyZWF0ZSBhIG5ldyBwb3B1cCBtZW51OgoqIAk8ZWxl bWVudCBpZD0ieCI+Q2xpY2sgbWUgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPiB2Ym1lbnVfcmVnaXN0ZXIoJ3gnKTsgPC9zY3JpcHQ+PC9lbGVtZW50Pgoq IFRoZSBtZW51IGNsYXNzIGV4cGVjdHMgYW4gZWxlbWVudCB3aXRoIHRoZSBpZCBv ZiB4X21lbnUgdGhhdCBjb250YWlucyB0aGUgbWVudS4KKgk8ZGl2IGlkPSJ4X21l bnUiIGNsYXNzPSJ2Ym1lbnVfcG9wdXAiPiAuLi4gPC9kaXY+CiovCgovLyAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyB2Ql9Qb3B1cF9IYW5kbGVyCi8v ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovKioKKiB2QnVsbGV0aW4g cG9wdXAgbWVudSByZWdpc3RyeQoqLwpmdW5jdGlvbiB2Ql9Qb3B1cF9IYW5kbGVy KCkKewoJLyoqCgkqIE9wdGlvbnM6CgkqCgkqIEB2YXIJaW50ZWdlcglOdW1iZXIg b2Ygc3RlcHMgdG8gdXNlIGluIHNsaWRpbmcgbWVudXMgb3BlbgoJKiBAdmFyCWJv b2xlYW4JVXNlIG9wYWNpdHkgZmFjZSBpbiBtZW51IG9wZW4/CgkqLwoJdGhpcy5v cGVuX3N0ZXBzID0gMTA7Cgl0aGlzLm9wZW5fZmFkZSA9IGZhbHNlOwoKCXRoaXMu YWN0aXZlID0gZmFsc2U7CgoJdGhpcy5tZW51cyA9IG5ldyBBcnJheSgpOwoJdGhp cy5hY3RpdmVtZW51ID0gbnVsbDsKCgl0aGlzLmhpZGRlbl9zZWxlY3RzID0gbmV3 IEFycmF5KCk7Cn07CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQov LyB2Ql9Qb3B1cF9IYW5kbGVyIG1ldGhvZHMKCi8qKgoqIEFjdGl2YXRlIC8gRGVh Y3RpdmF0ZSB0aGUgbWVudSBzeXN0ZW0KKgoqIEBwYXJhbQlib29sZWFuCUFjdGl2 ZSBzdGF0ZSBmb3IgbWVudXMKKi8KdkJfUG9wdXBfSGFuZGxlci5wcm90b3R5cGUu YWN0aXZhdGUgPSBmdW5jdGlvbihhY3RpdmUpCnsKCXRoaXMuYWN0aXZlID0gYWN0 aXZlOwoJY29uc29sZS5sb2coInZCbWVudSA6OiBTeXN0ZW0gQWN0aXZhdGVkIik7 Cn07CgovKioKKiBSZWdpc3RlciBhIGNvbnRyb2wgb2JqZWN0IGFzIGEgbWVudSBj b250cm9sCioKKiBAcGFyYW0Jc3RyaW5nCUlEIG9mIHRoZSBjb250cm9sIG9iamVj dAoqIEBwYXJhbQlib29sZWFuCURpc2FibGUgbWVudSBwb3AgaW1hZ2UgYWRkaXRp b24KKiBAcGFyYW0JYm9vbGVhbglEaXNhYmxlIG1lbnUgc2xpZGUgb3BlbgoqCiog QHJldHVybgl2Ql9Qb3B1cF9NZW51CiovCnZCX1BvcHVwX0hhbmRsZXIucHJvdG90 eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oY29udHJvbGtleSwgbm9pbWFnZSwgbm9z bGlkZSkKewoJLy9jb25zb2xlLmxvZygidkJtZW51IDo6IHJlZ2lzdGVyaW5nICcl cyciLCBjb250cm9sa2V5KTsKCXRoaXMubWVudXNbY29udHJvbGtleV0gPSBuZXcg dkJfUG9wdXBfTWVudShjb250cm9sa2V5LCBub2ltYWdlLCBub3NsaWRlKTsKCgly ZXR1cm4gdGhpcy5tZW51c1tjb250cm9sa2V5XTsKfTsKCi8qKgoqIEhpZGUgYWN0 aXZlIG1lbnUKKi8KdkJfUG9wdXBfSGFuZGxlci5wcm90b3R5cGUuaGlkZSA9IGZ1 bmN0aW9uKCkKewoJaWYgKHRoaXMuYWN0aXZlbWVudSAhPSBudWxsKQoJewoJCXRo aXMubWVudXNbdGhpcy5hY3RpdmVtZW51XS5oaWRlKCk7Cgl9Cn07CgoKLy8gIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gaW5pdGlhbGl6ZSBtZW51IHJl Z2lzdHJ5Cgp2YXIgdkJtZW51ID0gbmV3IHZCX1BvcHVwX0hhbmRsZXIoKTsKCi8q KgoqIEZ1bmN0aW9uIHRvIGFsbG93IGFueXRoaW5nIHRvIGhpZGUgYWxsIG1lbnVz CioKKiBAcGFyYW0JZXZlbnQJRXZlbnQgb2JqZWN0CioKKiBAcmV0dXJuCW1peGVk CiovCmZ1bmN0aW9uIHZibWVudV9oaWRlKGUpCnsKCWlmIChlICYmIGUuYnV0dG9u ICYmIGUuYnV0dG9uICE9IDEgJiYgZS50eXBlID09ICdjbGljaycpCgl7CgkJcmV0 dXJuIHRydWU7Cgl9CgllbHNlCgl7CgkJdkJtZW51LmhpZGUoKTsKCX0KfTsKCi8v ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIHZCX1BvcHVwX01lbnUK Ly8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCi8qKgoqIHZCdWxsZXRp biBwb3B1cCBtZW51IGNsYXNzIGNvbnN0cnVjdG9yCioKKiBNYW5hZ2VzIGEgc2lu Z2xlIG1lbnUgYW5kIGNvbnRyb2wgb2JqZWN0CiogSW5pdGlhbGl6ZXMgY29udHJv bCBvYmplY3QKKgoqIEBwYXJhbQlzdHJpbmcJSUQgb2YgdGhlIGNvbnRyb2wgb2Jq ZWN0CiogQHBhcmFtCWJvb2xlYW4JRGlzYWJsZSBtZW51IHBvcCBpbWFnZSBhZGRp dGlvbgoqIEBwYXJhbQlib29sZWFuCURpc2FibGUgbWVudSBzbGlkZSBvcGVuCiov CmZ1bmN0aW9uIHZCX1BvcHVwX01lbnUoY29udHJvbGtleSwgbm9pbWFnZSwgbm9z bGlkZSkKewoJdGhpcy5jb250cm9sa2V5ID0gY29udHJvbGtleTsKCXRoaXMubWVu dW5hbWUgPSB0aGlzLmNvbnRyb2xrZXkuc3BsaXQoJy4nKVswXSArICdfbWVudSc7 CgoJdGhpcy5pbml0X2NvbnRyb2wobm9pbWFnZSk7CgoJaWYgKGZldGNoX29iamVj dCh0aGlzLm1lbnVuYW1lKSkKCXsKCQl0aGlzLmluaXRfbWVudSgpOwoJfQoKCXRo aXMuc2xpZGVfb3BlbiA9ICgoaXNfb3BlcmEgfHwgbm9zbGlkZSkgPyBmYWxzZSA6 IHRydWUpOwoJdGhpcy5vcGVuX3N0ZXBzID0gdkJtZW51Lm9wZW5fc3RlcHM7CgoJ dkJ1bGxldGluLmFkZF9ldmVudCgidkJtZW51U2hvd18iICsgdGhpcy5jb250cm9s a2V5KTsKCXZCdWxsZXRpbi5hZGRfZXZlbnQoInZCbWVudUhpZGVfIiArIHRoaXMu Y29udHJvbGtleSk7Cn07CgovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQovLyB2Ql9Qb3B1cF9NZW51IG1ldGhvZHMKCi8qKgoqIEluaXRpYWxpemUgdGhl IGNvbnRyb2wgb2JqZWN0CiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLmluaXRf Y29udHJvbCA9IGZ1bmN0aW9uKG5vaW1hZ2UpCnsKCXRoaXMuY29udHJvbG9iaiA9 IGZldGNoX29iamVjdCh0aGlzLmNvbnRyb2xrZXkpOwoJdGhpcy5jb250cm9sb2Jq LnN0YXRlID0gZmFsc2U7CgoJaWYgKHRoaXMuY29udHJvbG9iai5maXJzdENoaWxk ICYmICh0aGlzLmNvbnRyb2xvYmouZmlyc3RDaGlsZC50YWdOYW1lID09ICdURVhU QVJFQScgfHwgdGhpcy5jb250cm9sb2JqLmZpcnN0Q2hpbGQudGFnTmFtZSA9PSAn SU5QVVQnKSkKCXsKCQkvLyBkbyBub3RoaW5nCgl9CgllbHNlCgl7CgkJaWYgKCFu b2ltYWdlICYmICEoaXNfbWFjICYmIGlzX2llKSkKCQl7CgkJCXZhciBzcGFjZSA9 IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcgJyk7CgkJCXRoaXMuY29udHJvbG9i ai5hcHBlbmRDaGlsZChzcGFjZSk7CgoJCQl2YXIgaW1nID0gZG9jdW1lbnQuY3Jl YXRlRWxlbWVudCgnaW1nJyk7CgkJCWltZy5zcmMgPSBJTUdESVJfTUlTQyArICcv bWVudV9vcGVuLmdpZic7CgkJCWltZy5ib3JkZXIgPSAwOwoJCQlpbWcudGl0bGUg PSAnJzsKCQkJaW1nLmFsdCA9ICcnOwoJCQl0aGlzLmNvbnRyb2xvYmouYXBwZW5k Q2hpbGQoaW1nKTsKCQl9CgoJCXRoaXMuY29udHJvbG9iai51bnNlbGVjdGFibGUg PSB0cnVlOwoJCWlmICghbm9pbWFnZSkKCQl7CgkJCXRoaXMuY29udHJvbG9iai5z dHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNvcjsKCQl9CgkJdGhpcy5jb250cm9s b2JqLm9uY2xpY2sgPSB2Ql9Qb3B1cF9FdmVudHMucHJvdG90eXBlLmNvbnRyb2xv Ympfb25jbGljazsKCQl0aGlzLmNvbnRyb2xvYmoub25tb3VzZW92ZXIgPSB2Ql9Q b3B1cF9FdmVudHMucHJvdG90eXBlLmNvbnRyb2xvYmpfb25tb3VzZW92ZXI7Cgl9 Cn07CgovKioKKiBJbml0IHRoZSBwb3B1cCBtZW51IG9iamVjdAoqLwp2Ql9Qb3B1 cF9NZW51LnByb3RvdHlwZS5pbml0X21lbnUgPSBmdW5jdGlvbigpCnsKCXRoaXMu bWVudW9iaiA9IGZldGNoX29iamVjdCh0aGlzLm1lbnVuYW1lKTsKCglpZiAodGhp cy5tZW51b2JqICYmICF0aGlzLm1lbnVvYmouaW5pdGlhbGl6ZWQpCgl7CgkJdGhp cy5tZW51b2JqLmluaXRpYWxpemVkID0gdHJ1ZTsKCQl0aGlzLm1lbnVvYmoub25j bGljayA9IGVfYnlfZ3VtOwoJCXRoaXMubWVudW9iai5zdHlsZS5wb3NpdGlvbiA9 ICdhYnNvbHV0ZSc7CgkJdGhpcy5tZW51b2JqLnN0eWxlLnpJbmRleCA9IDUwOwoK CQkvLyBpbml0IHBvcHVwIGZpbHRlcnMgKGllIG9ubHkpCgkJaWYgKGlzX2llICYm ICFpc19tYWMpCgkJewoJCQl0aGlzLm1lbnVvYmouc3R5bGUuZmlsdGVyICs9ICJw cm9naWQ6RFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuYWxwaGEoZW5hYmxlZD0x LG9wYWNpdHk9MTAwKSI7CgkJCXRoaXMubWVudW9iai5zdHlsZS5maWx0ZXIgKz0g InByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5zaGFkb3coZGlyZWN0 aW9uPTEzNSxjb2xvcj0jOEU4RThFLHN0cmVuZ3RoPTMpIjsKCQl9CgoJCXRoaXMu aW5pdF9tZW51X2NvbnRlbnRzKCk7Cgl9Cn07CgovKioKKiBJbml0IHRoZSBwb3B1 cCBtZW51IGNvbnRlbnRzCiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLmluaXRf bWVudV9jb250ZW50cyA9IGZ1bmN0aW9uKCkKewoJdmFyIHRkcyA9IGZldGNoX3Rh Z3ModGhpcy5tZW51b2JqLCAndGQnKTsKCWZvciAodmFyIGkgPSAwOyBpIDwgdGRz Lmxlbmd0aDsgaSsrKQoJewoJCWlmICh0ZHNbaV0uY2xhc3NOYW1lID09ICd2Ym1l bnVfb3B0aW9uJykKCQl7CgkJCWlmICh0ZHNbaV0udGl0bGUgJiYgdGRzW2ldLnRp dGxlID09ICdub2hpbGl0ZScpCgkJCXsKCQkJCS8vIG5vdCBhbiBhY3RpdmUgY2Vs bAoJCQkJdGRzW2ldLnRpdGxlID0gJyc7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQkv LyBjcmVhdGUgYSByZWZlcmVuY2UgYmFjayB0byB0aGUgbWVudSBjbGFzcwoJCQkJ dGRzW2ldLmNvbnRyb2xrZXkgPSB0aGlzLmNvbnRyb2xrZXk7CgoJCQkJLy8gaGFu ZGxlIG1vdXNlb3ZlciAvIG1vdXNlb3V0IGhpZ2hsaWdodGluZyBldmVudHMKCQkJ CXRkc1tpXS5vbm1vdXNlb3ZlciA9IHZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUu bWVudW9wdGlvbl9vbm1vdXNlb3ZlcjsKCQkJCXRkc1tpXS5vbm1vdXNlb3V0ID0g dkJfUG9wdXBfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2VvdXQ7 CgoJCQkJdmFyIGxpbmtzID0gZmV0Y2hfdGFncyh0ZHNbaV0sICdhJyk7CgkJCQlp ZiAobGlua3MubGVuZ3RoID09IDEpCgkJCQl7CgkJCQkJLyogT2sgd2UgaGF2ZSBh IGxpbmssIHdlIHNob3VsZCB1c2UgdGhpcyBpZgoJCQkJCTEuIFRoZXJlIGlzIG5v IG9uY2xpY2sgZXZlbnQgaW4gdGhlIGxpbmsKCQkJCQkyLiBUaGVyZSBpcyBubyBv bmNsaWNrIGV2ZW50IG9uIHRoZSBjZWxsCgkJCQkJMy4gVGhlIG9uY2xpY2sgZXZl bnQgZm9yIHRoZSBjZWxsIHNob3VsZCBlcXVhbCB0aGUgbGluayBpZiB0aGUgYWJv dmUgYXJlIHRydWUKCgkJCQkJSWYgd2UgZmluZCBhIGJyb3dzZXIgdGhhdHMgZ2V0 cyBjb25mdXNlZCB3ZSBtYXkgbmVlZCB0byBzZXQgcmVtb3ZlX2xpbmsgdG8gdHJ1 ZSBmb3IgaXQuCgkJCQkJKi8KCgkJCQkJdGRzW2ldLmNsYXNzTmFtZSA9IHRkc1tp XS5jbGFzc05hbWUgKyAnIHZibWVudV9vcHRpb25fYWxpbmsnOwoJCQkJCXRkc1tp XS5pc2xpbmsgPSB0cnVlOwoKCQkJCQl2YXIgbGlua29iaiA9IGxpbmtzWzBdOwoJ CQkJCXZhciByZW1vdmVfbGluayA9IGZhbHNlOwoKCQkJCQl0ZHNbaV0udGFyZ2V0 ID0gbGlua29iai5nZXRBdHRyaWJ1dGUoJ3RhcmdldCcpOwoKCQkJCQlpZiAodHlw ZW9mIGxpbmtvYmoub25jbGljayA9PSAnZnVuY3Rpb24nKQoJCQkJCXsKCQkJCQkJ dGRzW2ldLm9mdW5jID0gbGlua29iai5vbmNsaWNrOwoJCQkJCQl0ZHNbaV0ub25j bGljayA9IHZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbmNs aWNrX2Z1bmN0aW9uOwoJCQkJCQlyZW1vdmVfbGluayA9IHRydWU7CgkJCQkJfQoJ CQkJCWVsc2UgaWYgKHR5cGVvZiB0ZHNbaV0ub25jbGljayA9PSAnZnVuY3Rpb24n KQoJCQkJCXsKCQkJCQkJdGRzW2ldLm9mdW5jID0gdGRzW2ldLm9uY2xpY2s7CgkJ CQkJCXRkc1tpXS5vbmNsaWNrID0gdkJfUG9wdXBfRXZlbnRzLnByb3RvdHlwZS5t ZW51b3B0aW9uX29uY2xpY2tfZnVuY3Rpb247CgkJCQkJCXJlbW92ZV9saW5rID0g dHJ1ZTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJdGRzW2ldLmhyZWYg PSBsaW5rb2JqLmhyZWY7CgkJCQkJCXRkc1tpXS5vbmNsaWNrID0gdkJfUG9wdXBf RXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29uY2xpY2tfbGluazsKCQkJCQl9 CgoJCQkJCWlmIChyZW1vdmVfbGluaykKCQkJCQl7CgkJCQkJCXZhciBuZXdsaW5r ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpOwoJCQkJCQluZXdsaW5rLmlu bmVySFRNTCA9IGxpbmtvYmouaW5uZXJIVE1MOwoJCQkJCQluZXdsaW5rLmhyZWYg PSAnIyc7CgkJCQkJCW5ld2xpbmsub25jbGljayA9IGZ1bmN0aW9uKGUpIHsgZSA9 IGUgPyBlIDogd2luZG93LmV2ZW50OyBlLnJldHVyblZhbHVlID0gZmFsc2U7IHJl dHVybiBmYWxzZTsgfTsKCQkJCQkJdGRzW2ldLmluc2VydEJlZm9yZShuZXdsaW5r LCBsaW5rb2JqKTsKCQkJCQkJdGRzW2ldLnJlbW92ZUNoaWxkKGxpbmtvYmopOwoJ CQkJCX0KCQkJCX0KCQkJCWVsc2UgaWYgKHR5cGVvZiB0ZHNbaV0ub25jbGljayA9 PSAnZnVuY3Rpb24nKQoJCQkJewoJCQkJCXRkc1tpXS5vZnVuYyA9IHRkc1tpXS5v bmNsaWNrOwoJCQkJCXRkc1tpXS5vbmNsaWNrID0gdkJfUG9wdXBfRXZlbnRzLnBy b3RvdHlwZS5tZW51b3B0aW9uX29uY2xpY2tfZnVuY3Rpb247CgkJCQl9CgkJCX0K CQl9Cgl9Cn07CgovKioKKiBTaG93IHRoZSBtZW51CioKKiBAcGFyYW0Jb2JqZWN0 CVRoZSBjb250cm9sIG9iamVjdCBjYWxsaW5nIHRoZSBtZW51CiogQHBhcmFtCWJv b2xlYW4JVXNlIHNsaWRlIChmYWxzZSkgb3Igb3BlbiBpbnN0YW50bHk/ICh0cnVl KQoqLwp2Ql9Qb3B1cF9NZW51LnByb3RvdHlwZS5zaG93ID0gZnVuY3Rpb24ob2Jq LCBpbnN0YW50KQp7CglpZiAoIXZCbWVudS5hY3RpdmUpCgl7CgkJcmV0dXJuIGZh bHNlOwoJfQoJZWxzZSBpZiAoIXRoaXMubWVudW9iaikKCXsKCQl0aGlzLmluaXRf bWVudSgpOwoJfQoKCWlmICghdGhpcy5tZW51b2JqIHx8IHZCbWVudS5hY3RpdmVt ZW51ID09IHRoaXMuY29udHJvbGtleSkKCXsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJ Y29uc29sZS5sb2coInZCbWVudSA6OiBTaG93ICclcyciLCB0aGlzLmNvbnRyb2xr ZXkpOwoKCWlmICh2Qm1lbnUuYWN0aXZlbWVudSAhPSBudWxsICYmIHZCbWVudS5h Y3RpdmVtZW51ICE9IHRoaXMuY29udHJvbGtleSkKCXsKCQl2Qm1lbnUubWVudXNb dkJtZW51LmFjdGl2ZW1lbnVdLmhpZGUoKTsKCX0KCgl2Qm1lbnUuYWN0aXZlbWVu dSA9IHRoaXMuY29udHJvbGtleTsKCgl0aGlzLm1lbnVvYmouc3R5bGUuZGlzcGxh eSA9ICcnOwoJaWYgKHRoaXMuc2xpZGVfb3BlbikKCXsKCQl0aGlzLm1lbnVvYmou c3R5bGUuY2xpcCA9ICdyZWN0KGF1dG8sIDBweCwgMHB4LCBhdXRvKSc7Cgl9CgoJ dGhpcy5zZXRfbWVudV9wb3NpdGlvbihvYmopOwoKCWlmICghaW5zdGFudCAmJiB0 aGlzLnNsaWRlX29wZW4pCgl7CgkJdGhpcy5pbnRlcnZhbFggPSBNYXRoLmNlaWwo dGhpcy5tZW51b2JqLm9mZnNldFdpZHRoIC8gdGhpcy5vcGVuX3N0ZXBzKTsKCQl0 aGlzLmludGVydmFsWSA9IE1hdGguY2VpbCh0aGlzLm1lbnVvYmoub2Zmc2V0SGVp Z2h0IC8gdGhpcy5vcGVuX3N0ZXBzKTsKCQl0aGlzLnNsaWRlKCh0aGlzLmRpcmVj dGlvbiA9PSAnbGVmdCcgPyAwIDogdGhpcy5tZW51b2JqLm9mZnNldFdpZHRoKSwg MCwgMCk7Cgl9CgllbHNlIGlmICh0aGlzLm1lbnVvYmouc3R5bGUuY2xpcCAmJiB0 aGlzLnNsaWRlX29wZW4pCgl7CgkJdGhpcy5tZW51b2JqLnN0eWxlLmNsaXAgPSAn cmVjdChhdXRvLCBhdXRvLCBhdXRvLCBhdXRvKSc7Cgl9CgoJLy8gZGVhbCB3aXRo IElFIHB1dHRpbmcgPHNlbGVjdD4gZWxlbWVudHMgb24gdG9wIG9mIGV2ZXJ5dGhp bmcKCXRoaXMuaGFuZGxlX292ZXJsYXBzKHRydWUpOwoKCWlmICh0aGlzLmNvbnRy b2xvYmouZWRpdG9yaWQpCgl7CgkJdGhpcy5jb250cm9sb2JqLnN0YXRlID0gdHJ1 ZTsKCQkvL3RoaXMuY29udHJvbG9iai5lZGl0b3IubWVudV9jb250ZXh0KHRoaXMu Y29udHJvbG9iaiwgJ21vdXNlZG93bicpOwoJCXZCX0VkaXRvclt0aGlzLmNvbnRy b2xvYmouZWRpdG9yaWRdLm1lbnVfY29udGV4dCh0aGlzLmNvbnRyb2xvYmosICdt b3VzZWRvd24nKTsKCX0KCgl2QnVsbGV0aW4uZXZlbnRzWyJ2Qm1lbnVTaG93XyIg KyB0aGlzLmNvbnRyb2xrZXldLmZpcmUodGhpcy5jb250cm9sa2V5KTsKCXZCdWxs ZXRpbi5ldmVudHMudkJtZW51U2hvdy5maXJlKHRoaXMuY29udHJvbGtleSk7Cn07 CgovKioKKiBQb3NpdGlvbiB0aGUgbWVudSByZWxhdGl2ZSB0byBhIHJlZmVyZW5j ZSBlbGVtZW50CioKKiBAcGFyYW0Jb2JqZWN0CVJlZmVyZW5jZSBIVE1MIGVsZW1l bnQKKi8KdkJfUG9wdXBfTWVudS5wcm90b3R5cGUuc2V0X21lbnVfcG9zaXRpb24g PSBmdW5jdGlvbihvYmopCnsKCXRoaXMucG9zID0gdGhpcy5mZXRjaF9vZmZzZXQo b2JqKTsKCXRoaXMubGVmdHB4ID0gdGhpcy5wb3NbJ2xlZnQnXTsKCXRoaXMudG9w cHggPSB0aGlzLnBvc1sndG9wJ10gKyBvYmoub2Zmc2V0SGVpZ2h0OwoKCWlmICgo dGhpcy5sZWZ0cHggKyB0aGlzLm1lbnVvYmoub2Zmc2V0V2lkdGgpID49IGRvY3Vt ZW50LmJvZHkuY2xpZW50V2lkdGggJiYgKHRoaXMubGVmdHB4ICsgb2JqLm9mZnNl dFdpZHRoIC0gdGhpcy5tZW51b2JqLm9mZnNldFdpZHRoKSA+IDApCgl7CgkJdGhp cy5sZWZ0cHggPSB0aGlzLmxlZnRweCArIG9iai5vZmZzZXRXaWR0aCAtIHRoaXMu bWVudW9iai5vZmZzZXRXaWR0aDsKCQl0aGlzLmRpcmVjdGlvbiA9ICdyaWdodCc7 Cgl9CgllbHNlCgl7CgkJdGhpcy5kaXJlY3Rpb24gPSAnbGVmdCcKCX0KCgl0aGlz Lm1lbnVvYmouc3R5bGUubGVmdCA9IHRoaXMubGVmdHB4ICsgJ3B4JzsKCXRoaXMu bWVudW9iai5zdHlsZS50b3AgID0gdGhpcy50b3BweCArICdweCc7Cn07CgovKioK KiBIaWRlIHRoZSBtZW51CiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLmhpZGUg PSBmdW5jdGlvbihlKQp7CglpZiAoZSAmJiBlLmJ1dHRvbiAmJiBlLmJ1dHRvbiAh PSAxKQoJewoJCS8vIGdldCBhcm91bmQgc29tZSBjb250ZXh0IG1lbnUgaXNzdWVz IGV0Yy4KCQlyZXR1cm4gdHJ1ZTsKCX0KCgljb25zb2xlLmxvZygidkJtZW51IDo6 IEhpZGUgJyVzJyIsIHRoaXMuY29udHJvbGtleSk7CgoJdGhpcy5zdG9wX3NsaWRl KCk7CgoJdGhpcy5tZW51b2JqLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgoJdGhp cy5oYW5kbGVfb3ZlcmxhcHMoZmFsc2UpOwoKCWlmICh0aGlzLmNvbnRyb2xvYmou ZWRpdG9yaWQpCgl7CgkJdGhpcy5jb250cm9sb2JqLnN0YXRlID0gZmFsc2U7CgkJ dkJfRWRpdG9yW3RoaXMuY29udHJvbG9iai5lZGl0b3JpZF0ubWVudV9jb250ZXh0 KHRoaXMuY29udHJvbG9iaiwgJ21vdXNlb3V0Jyk7Cgl9CgoJdkJtZW51LmFjdGl2 ZW1lbnUgPSBudWxsOwoKCXZCdWxsZXRpbi5ldmVudHNbInZCbWVudUhpZGVfIiAr IHRoaXMuY29udHJvbGtleV0uZmlyZSh0aGlzLmNvbnRyb2xrZXkpOwoJdkJ1bGxl dGluLmV2ZW50cy52Qm1lbnVIaWRlLmZpcmUodGhpcy5jb250cm9sa2V5KTsKfTsK Ci8qKgoqIEhvdmVyIGJlaGF2aW91ciBmb3IgY29udHJvbCBvYmplY3QKKi8KdkJf UG9wdXBfTWVudS5wcm90b3R5cGUuaG92ZXIgPSBmdW5jdGlvbihvYmopCnsKCWlm ICh2Qm1lbnUuYWN0aXZlbWVudSAhPSBudWxsKQoJewoJCWlmICh2Qm1lbnUubWVu dXNbdkJtZW51LmFjdGl2ZW1lbnVdLmNvbnRyb2xrZXkgIT0gdGhpcy5pZCkKCQl7 CgkJCXRoaXMuc2hvdyhvYmosIHRydWUpOwoJCX0KCX0KfTsKCi8qKgoqIFNsaWRl cyBtZW51IG9wZW4KKgoqIEBwYXJhbQlpbnRlZ2VyCUNsaXAgWAoqIEBwYXJhbQlp bnRlZ2VyCUNsaXAgWQoqIEBwYXJhbQlpbnRlZ2VyCU9wYWNpdHkgKDAtMTAwKQoq Lwp2Ql9Qb3B1cF9NZW51LnByb3RvdHlwZS5zbGlkZSA9IGZ1bmN0aW9uKGNsaXBY LCBjbGlwWSwgb3BhY2l0eSkKewoJaWYgKHRoaXMuZGlyZWN0aW9uID09ICdsZWZ0 JyAmJiAoY2xpcFggPCB0aGlzLm1lbnVvYmoub2Zmc2V0V2lkdGggfHwgY2xpcFkg PCB0aGlzLm1lbnVvYmoub2Zmc2V0SGVpZ2h0KSkKCXsKCQlpZiAodkJtZW51Lm9w ZW5fZmFkZSAmJiBpc19pZSkKCQl7CgkJCW9wYWNpdHkgKz0gMTA7CgkJCXRoaXMu bWVudW9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0 LmFscGhhJykub3BhY2l0eSA9IG9wYWNpdHk7CgkJfQoKCQljbGlwWCArPSB0aGlz LmludGVydmFsWDsKCQljbGlwWSArPSB0aGlzLmludGVydmFsWTsKCgkJdGhpcy5t ZW51b2JqLnN0eWxlLmNsaXAgPSAicmVjdChhdXRvLCAiICsgY2xpcFggKyAicHgs ICIgKyBjbGlwWSArICJweCwgYXV0bykiOwoJCXRoaXMuc2xpZGV0aW1lciA9IHNl dFRpbWVvdXQoInZCbWVudS5tZW51c1t2Qm1lbnUuYWN0aXZlbWVudV0uc2xpZGUo IiArIGNsaXBYICsgIiwgIiArIGNsaXBZICsgIiwgIiArIG9wYWNpdHkgKyAiKTsi LCAwKTsKCX0KCWVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09ICdyaWdodCcgJiYg KGNsaXBYID4gMCB8fCBjbGlwWSA8IHRoaXMubWVudW9iai5vZmZzZXRIZWlnaHQp KQoJewoJCWlmICh2Qm1lbnUub3Blbl9mYWRlICYmIGlzX2llKQoJCXsKCQkJb3Bh Y2l0eSArPSAxMDsKCQkJbWVudW9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFu c2Zvcm0uTWljcm9zb2Z0LmFscGhhJykub3BhY2l0eSA9IG9wYWNpdHk7CgkJfQoK CQljbGlwWCAtPSB0aGlzLmludGVydmFsWDsKCQljbGlwWSArPSB0aGlzLmludGVy dmFsWTsKCgkJdGhpcy5tZW51b2JqLnN0eWxlLmNsaXAgPSAicmVjdChhdXRvLCAi ICsgdGhpcy5tZW51b2JqLm9mZnNldFdpZHRoICsgInB4LCAiICsgY2xpcFkgKyAi cHgsICIgKyBjbGlwWCArICJweCkiOwoJCXRoaXMuc2xpZGV0aW1lciA9IHNldFRp bWVvdXQoInZCbWVudS5tZW51c1t2Qm1lbnUuYWN0aXZlbWVudV0uc2xpZGUoIiAr IGNsaXBYICsgIiwgIiArIGNsaXBZICsgIiwgIiArIG9wYWNpdHkgKyAiKTsiLCAw KTsKCX0KCWVsc2UKCXsKCQl0aGlzLnN0b3Bfc2xpZGUoKTsKCX0KfTsKCi8qKgoq IEFib3J0IG1lbnUgc2xpZGVyCiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLnN0 b3Bfc2xpZGUgPSBmdW5jdGlvbigpCnsKCWNsZWFyVGltZW91dCh0aGlzLnNsaWRl dGltZXIpOwoKCXRoaXMubWVudW9iai5zdHlsZS5jbGlwID0gJ3JlY3QoYXV0bywg YXV0bywgYXV0bywgYXV0byknOwoKCWlmICh2Qm1lbnUub3Blbl9mYWRlICYmIGlz X2llKQoJewoJCXRoaXMubWVudW9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFu c2Zvcm0uTWljcm9zb2Z0LmFscGhhJykub3BhY2l0eSA9IDEwMDsKCX0KfTsKCi8q KgoqIEZldGNoIG9mZnNldCBvZiBhbiBvYmplY3QKKgoqIEBwYXJhbQlvYmplY3QJ VGhlIG9iamVjdCB0byBiZSBtZWFzdXJlZAoqCiogQHJldHVybglhcnJheQlUaGUg bWVhc3VyZWQgb2Zmc2V0cyBsZWZ0L3RvcAoqLwp2Ql9Qb3B1cF9NZW51LnByb3Rv dHlwZS5mZXRjaF9vZmZzZXQgPSBmdW5jdGlvbihvYmopCnsKCWlmIChvYmouZ2V0 Qm91bmRpbmdDbGllbnRSZWN0KQoJewoJCS8vIGJldHRlciwgbW9yZSBhY2N1cmF0 ZSBmdW5jdGlvbiBmb3IgSUUKCQl2YXIgcmVjdCA9IG9iai5nZXRCb3VuZGluZ0Ns aWVudFJlY3QoKTsKCgkJdmFyIHNjcm9sbFRvcCA9IE1hdGgubWF4KGRvY3VtZW50 LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AsIGRvY3VtZW50LmJvZHkuc2Nyb2xs VG9wKTsKCQl2YXIgc2Nyb2xsTGVmdCA9IE1hdGgubWF4KGRvY3VtZW50LmRvY3Vt ZW50RWxlbWVudC5zY3JvbGxMZWZ0LCBkb2N1bWVudC5ib2R5LnNjcm9sbExlZnQp OwoKCQlpZiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmRpciA9PSAncnRsJykK CQl7CgkJCS8vIElFIHJldHVybnMgYSBwb3NpdGl2ZSBzY3JvbGxMZWZ0LCBidXQg d2UgbmVlZCBhIG5lZ2F0aXZlIHZhbHVlIHRvIGFjdHVhbGx5IGRvIHByb3BlciBj YWxjdWxhdGlvbnMuCgkJCS8vIFRoaXMgYWN0dWFsbHkgZmxpcHMgdGhlIHNjb2xs b2luZyB0byBiZSByZWxhdGl2ZSB0byB0aGUgZGlzdGFuY2Ugc2Nyb2xsZWQgZnJv bSB0aGUgZGVmYXVsdC4KCQkJc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQgKyBkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGggLSBkb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQuc2Nyb2xsV2lkdGg7CgkJfQoKCQlyZXR1cm4geyAnbGVmdCcg OiByZWN0LmxlZnQgKyBzY3JvbGxMZWZ0LCAndG9wJyA6IHJlY3QudG9wICsgc2Ny b2xsVG9wIH07Cgl9CgoJdmFyIGxlZnRfb2Zmc2V0ID0gb2JqLm9mZnNldExlZnQ7 Cgl2YXIgdG9wX29mZnNldCA9IG9iai5vZmZzZXRUb3A7CgoJd2hpbGUgKChvYmog PSBvYmoub2Zmc2V0UGFyZW50KSAhPSBudWxsKQoJewoJCWxlZnRfb2Zmc2V0ICs9 IG9iai5vZmZzZXRMZWZ0OwoJCXRvcF9vZmZzZXQgKz0gb2JqLm9mZnNldFRvcDsK CX0KCglyZXR1cm4geyAnbGVmdCcgOiBsZWZ0X29mZnNldCwgJ3RvcCcgOiB0b3Bf b2Zmc2V0IH07Cn07CgovKioKKiBEZXRlY3QgYW4gb3ZlcmxhcCBvZiBhbiBvYmpl Y3QgYW5kIGEgbWVudQoqCiogQHBhcmFtCW9iamVjdAlPYmplY3QgdG8gYmUgdGVz dGVkIGZvciBvdmVybGFwCiogQHBhcmFtCWFycmF5CUFycmF5IG9mIGRpbWVuc2lv bnMgZm9yIG1lbnUgb2JqZWN0CioKKiBAcmV0dXJuCWJvb2xlYW4JVHJ1ZSBpZiBv dmVybGFwCiovCnZCX1BvcHVwX01lbnUucHJvdG90eXBlLm92ZXJsYXBzID0gZnVu Y3Rpb24ob2JqLCBtKQp7Cgl2YXIgcyA9IG5ldyBBcnJheSgpOwoJdmFyIHBvcyA9 IHRoaXMuZmV0Y2hfb2Zmc2V0KG9iaik7CglzWydMJ10gPSBwb3NbJ2xlZnQnXTsK CXNbJ1QnXSA9IHBvc1sndG9wJ107CglzWydSJ10gPSBzWydMJ10gKyBvYmoub2Zm c2V0V2lkdGg7CglzWydCJ10gPSBzWydUJ10gKyBvYmoub2Zmc2V0SGVpZ2h0OwoK CglpZiAoc1snTCddID4gbVsnUiddIHx8IHNbJ1InXSA8IG1bJ0wnXSB8fCBzWydU J10gPiBtWydCJ10gfHwgc1snQiddIDwgbVsnVCddKQoJewoJCXJldHVybiBmYWxz ZTsKCX0KCXJldHVybiB0cnVlOwp9OwoKLyoqCiogSGFuZGxlIElFIG92ZXJsYXBw aW5nIDxzZWxlY3Q+IGVsZW1lbnRzCioKKiBAcGFyYW0JYm9vbGVhbglIaWRlICh0 cnVlKSBvciBzaG93IChmYWxzZSkgb3ZlcmxhcHBpbmcgPHNlbGVjdD4gZWxlbWVu dHMKKi8KdkJfUG9wdXBfTWVudS5wcm90b3R5cGUuaGFuZGxlX292ZXJsYXBzID0g ZnVuY3Rpb24oZG9oaWRlKQp7CglpZiAoaXNfaWUgJiYgIWlzX2llNykKCXsKCQl2 YXIgc2VsZWN0cyA9IGZldGNoX3RhZ3MoZG9jdW1lbnQsICdzZWxlY3QnKTsKCgkJ aWYgKGRvaGlkZSkKCQl7CgkJCXZhciBtZW51YXJlYSA9IG5ldyBBcnJheSgpOyBt ZW51YXJlYSA9IHsKCQkJCSdMJyA6IHRoaXMubGVmdHB4LAoJCQkJJ1InIDogdGhp cy5sZWZ0cHggKyB0aGlzLm1lbnVvYmoub2Zmc2V0V2lkdGgsCgkJCQknVCcgOiB0 aGlzLnRvcHB4LAoJCQkJJ0InIDogdGhpcy50b3BweCArIHRoaXMubWVudW9iai5v ZmZzZXRIZWlnaHQKCQkJfTsKCgkJCWZvciAodmFyIGkgPSAwOyBpIDwgc2VsZWN0 cy5sZW5ndGg7IGkrKykKCQkJewoJCQkJaWYgKHRoaXMub3ZlcmxhcHMoc2VsZWN0 c1tpXSwgbWVudWFyZWEpKQoJCQkJewoJCQkJCXZhciBoaWRlID0gdHJ1ZTsKCQkJ CQl2YXIgcyA9IHNlbGVjdHNbaV07CgkJCQkJd2hpbGUgKHMgPSBzLnBhcmVudE5v ZGUpCgkJCQkJewoJCQkJCQlpZiAocy5jbGFzc05hbWUgPT0gJ3ZibWVudV9wb3B1 cCcpCgkJCQkJCXsKCQkJCQkJCWhpZGUgPSBmYWxzZTsKCQkJCQkJCWJyZWFrOwoJ CQkJCQl9CgkJCQkJfQoKCQkJCQlpZiAoaGlkZSkKCQkJCQl7CgkJCQkJCXNlbGVj dHNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOwoJCQkJCQl2Qm1lbnUu aGlkZGVuX3NlbGVjdHMucHVzaChpKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJ ZWxzZQoJCXsKCQkJd2hpbGUgKHRydWUpCgkJCXsKCQkJCXZhciBpID0gdkJtZW51 LmhpZGRlbl9zZWxlY3RzLnBvcCgpOwoJCQkJaWYgKHR5cGVvZiBpID09ICd1bmRl ZmluZWQnIHx8IGkgPT0gbnVsbCkKCQkJCXsKCQkJCQlicmVhazsKCQkJCX0KCQkJ CWVsc2UKCQkJCXsKCQkJCQlzZWxlY3RzW2ldLnN0eWxlLnZpc2liaWxpdHkgPSAn dmlzaWJsZSc7CgkJCQl9CgkJCX0KCQl9Cgl9Cn07CgovLyAjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIwovLyBNZW51IGV2ZW50IGhhbmRsZXIgZnVuY3Rpb25z CgovKioKKiBDbGFzcyBjb250YWluaW5nIG1lbnUgcG9wdXAgZXZlbnQgaGFuZGxl cnMKKi8KZnVuY3Rpb24gdkJfUG9wdXBfRXZlbnRzKCkKewp9OwoKLyoqCiogSGFu ZGxlcyBjb250cm9sIG9iamVjdCBjbGljayBldmVudHMKKi8KdkJfUG9wdXBfRXZl bnRzLnByb3RvdHlwZS5jb250cm9sb2JqX29uY2xpY2sgPSBmdW5jdGlvbihlKQp7 CglpZiAodHlwZW9mIGRvX2FuX2UgPT0gJ2Z1bmN0aW9uJykKCXsKCQlkb19hbl9l KGUpOwoJCWlmICh2Qm1lbnUuYWN0aXZlbWVudSA9PSBudWxsIHx8IHZCbWVudS5t ZW51c1t2Qm1lbnUuYWN0aXZlbWVudV0uY29udHJvbGtleSAhPSB0aGlzLmlkKQoJ CXsKCQkJdkJtZW51Lm1lbnVzW3RoaXMuaWRdLnNob3codGhpcyk7CgkJfQoJCWVs c2UKCQl7CgkJCXZCbWVudS5tZW51c1t0aGlzLmlkXS5oaWRlKCk7CgkJfQoJfQp9 OwoKLyoqCiogSGFuZGxlcyBjb250cm9sIG9iamVjdCBtb3VzZW92ZXIgZXZlbnRz CiovCnZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUuY29udHJvbG9ial9vbm1vdXNl b3ZlciA9IGZ1bmN0aW9uKGUpCnsKCWlmICh0eXBlb2YgZG9fYW5fZSA9PSAnZnVu Y3Rpb24nKQoJewoJCWRvX2FuX2UoZSk7CgkJdkJtZW51Lm1lbnVzW3RoaXMuaWRd LmhvdmVyKHRoaXMpOwoJfQp9OwoKLyoqCiogSGFuZGxlcyBtZW51IG9wdGlvbiBj bGljayBldmVudHMgZm9yIG9wdGlvbnMgd2l0aCBvbmNsaWNrIGV2ZW50cwoqLwp2 Ql9Qb3B1cF9FdmVudHMucHJvdG90eXBlLm1lbnVvcHRpb25fb25jbGlja19mdW5j dGlvbiA9IGZ1bmN0aW9uKGUpCnsKCXRoaXMub2Z1bmMoZSk7Cgl2Qm1lbnUubWVu dXNbdGhpcy5jb250cm9sa2V5XS5oaWRlKCk7Cn07CgovKioKKiBIYW5kbGVzIG1l bnUgb3B0aW9uIGNsaWNrIGV2ZW50cyBmb3Igb3B0aW9ucyBjb250YWluaW5nIGxp bmtzCiovCnZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbmNs aWNrX2xpbmsgPSBmdW5jdGlvbihlKQp7CgllID0gZSA/IGUgOiB3aW5kb3cuZXZl bnQ7CgoJaWYgKGUuc2hpZnRLZXkgfHwgKHRoaXMudGFyZ2V0ICE9IG51bGwgJiYg dGhpcy50YXJnZXQgIT0gJycgJiYgdGhpcy50YXJnZXQudG9Mb3dlckNhc2UoKSAh PSAnX3NlbGYnKSkKCXsKCQlpZiAodGhpcy50YXJnZXQgIT0gbnVsbCAmJiB0aGlz LnRhcmdldC5jaGFyQXQoMCkgIT0gJ18nKQoJCXsKCQkJd2luZG93Lm9wZW4odGhp cy5ocmVmLCB0aGlzLnRhcmdldCk7CgkJfQoJCWVsc2UKCQl7CgkJCXdpbmRvdy5v cGVuKHRoaXMuaHJlZik7CgkJfQoJfQoJZWxzZQoJewoJCXdpbmRvdy5sb2NhdGlv biA9IHRoaXMuaHJlZjsKCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLy8gU2FmYXJpIGhh cyAiaXNzdWVzIiB3aXRoIHJlc2V0dGluZyB3aGF0IHdhcyBjbGlja2VkIG9uLCBz dXBlciBtaW5vciBhbmQgSSBkb250IGNhcmUKCWUuY2FuY2VsQnViYmxlID0gdHJ1 ZTsKCWlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsK CWlmIChlLnByZXZlbnREZWZhdWx0KSBlLnByZXZlbnREZWZhdWx0KCk7CgoJdkJt ZW51Lm1lbnVzW3RoaXMuY29udHJvbGtleV0uaGlkZSgpOwoJcmV0dXJuIGZhbHNl Owp9OwoKLyoqCiogSGFuZGxlcyBtZW51IG9wdGlvbiBtb3VzZW92ZXIgZXZlbnRz CiovCnZCX1BvcHVwX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbm1vdXNl b3ZlciA9IGZ1bmN0aW9uKGUpCnsKCXRoaXMuY2xhc3NOYW1lID0gJ3ZibWVudV9o aWxpdGUnICsgKHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVfaGlsaXRlX2FsaW5rJyA6 ICcnKTsKCXRoaXMuc3R5bGUuY3Vyc29yID0gcG9pbnRlcl9jdXJzb3I7Cn07Cgov KioKKiBIYW5kbGVzIG1lbnUgb3B0aW9uIG1vdXNlb3V0IGV2ZW50cwoqLwp2Ql9Q b3B1cF9FdmVudHMucHJvdG90eXBlLm1lbnVvcHRpb25fb25tb3VzZW91dCA9IGZ1 bmN0aW9uKGUpCnsKCXRoaXMuY2xhc3NOYW1lID0gJ3ZibWVudV9vcHRpb24nICsg KHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVfb3B0aW9uX2FsaW5rJyA6ICcnKTsKCXRo aXMuc3R5bGUuY3Vyc29yID0gJ2RlZmF1bHQnOwp9OwoKLyo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKfHwgIyBEb3dubG9h ZGVkOiAwNTo1MiwgVHVlIEp1biAyNHRoIDIwMDgKfHwgIyBDVlM6ICRSQ1NmaWxl JCAtICRSZXZpc2lvbjogMjY0NDYgJAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpc Kj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0qLw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=gal.js Content-Type: application/x-javascript; charset=windows-1251; name=gal.js Content-Location: http://forum.qip.ru/geek/gal/clientscript/gal.js Content-Transfer-Encoding: Base64 DQoNCi8vUG9wdXANCmZ1bmN0aW9uIGdhbF9yZWdpc3RlcihpZCwgc3R5bGVpZCwg cG9zaXRpb24sIG5vaW1hZ2UsIHgsIHkpDQp7DQogICAgICAgIGlmICh0eXBlb2Yg Z2FsID09ICdvYmplY3QnKQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgcmV0 dXJuIGdhbC5yZWdpc3RlcihpZCwgc3R5bGVpZCwgcG9zaXRpb24sIG5vaW1hZ2Us IHgsIHkpOw0KICAgICAgICB9DQogICAgICAgIC8vYWxlcnQoImdhbCByZWdpc3Rl cmVkICIgKyBpZCk7DQp9DQoNCnZhciBHRUVLX0dBTF9QT1BVUCAJCQk9IDE7DQp2 YXIgR0VFS19HQUxfRk9MTE9XIAkJPSAyOw0KdmFyIEdFRUtfR0FMX1NUSUNLIAkJ CT0gMzsNCg0KdmFyIEdFRUtfR0FMX0JPVFRPTV9MRUZUCT0gMTsNCnZhciBHRUVL X0dBTF9CT1RUT01fUklHSFQJPSAyOw0KdmFyIEdFRUtfR0FMX1RPUF9MRUZUIAkJ PSAzOw0KdmFyIEdFRUtfR0FMX1RPUF9SSUdIVCAJCT0gNDsNCg0KDQpmdW5jdGlv biBnZWVrX2dhbCgpDQp7DQoNCiAgICAgICAgdGhpcy5zbGlkZV9vcGVuID0gKGlz X29wZXJhIHx8IGlzX3NhZiA/IGZhbHNlIDogdHJ1ZSk7DQogICAgICAgIHRoaXMu b3Blbl9mYWRlID0gdHJ1ZTsNCiAgICAgICAgdGhpcy5hY3RpdmUgPSBmYWxzZTsN CiAgICAgICAgdGhpcy5wb3B1cHMgPSBuZXcgQXJyYXkoKTsNCiAgICAgICAgdGhp cy5hY3RpdmVwb3B1cCA9IG51bGw7DQogICAgICAgIHRoaXMuaGlkZGVuX3NlbGVj dHMgPSBuZXcgQXJyYXkoKTsNCn0NCg0KCQlnZWVrX2dhbC5wcm90b3R5cGUuZmV0 Y2hfb2Zmc2V0ID0gZnVuY3Rpb24ob2JqKQ0KCQl7DQoJCSAgICAgICAgdmFyIGwg PSBvYmoub2Zmc2V0TGVmdDsNCgkJICAgICAgICB2YXIgdCA9IG9iai5vZmZzZXRU b3A7DQoJCSAgICAgICAgdmFyIHIgPSBvYmoub2Zmc2V0V2lkdGg7DQoJCSAgICAg ICAgdmFyIGIgPSBvYmoub2Zmc2V0SGVpZ2h0DQoNCgkJICAgICAgICB3aGlsZSAo KG9iaiA9IG9iai5vZmZzZXRQYXJlbnQpICE9IG51bGwpDQoJCSAgICAgICAgew0K CQkgICAgICAgICAgICAgICAgbCArPSBvYmoub2Zmc2V0TGVmdDsNCgkJICAgICAg ICAgICAgICAgIHQgKz0gb2JqLm9mZnNldFRvcDsNCgkJICAgICAgICB9DQoNCgkJ ICAgICAgICB2YXIgciA9IHIgKyBsOw0KCQkgICAgICAgIHZhciBiID0gYiArIHQ7 DQoJCSAgICAgICAgdmFyIGggPSBiIC0gdDsNCgkJICAgICAgICB2YXIgdyA9IHIg LSBsOw0KDQoJCSAgICAgICAgcmV0dXJuIHsgJ2wnIDogbCwgJ3QnIDogdCwgJ3In IDogciwgJ2InIDogYiwgJ2gnIDogaCwgJ3cnIDogd307DQoJCX07DQoNCgkJZ2Vl a19nYWwucHJvdG90eXBlLmFjdGl2YXRlID0gZnVuY3Rpb24oYWN0aXZlKQ0KCQl7 DQoJCSAgICAgICAgdGhpcy5hY3RpdmUgPSBhY3RpdmU7DQoJCX07DQoNCgkJZ2Vl a19nYWwucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24oaWQsIHN0eWxlaWQs IHBvc2l0aW9uLCBub2ltYWdlLCB4LCB5KQ0KCQl7DQoJCSAgICAgICAgaWYgKCF0 aGlzLnBvcHVwc1tpZF0pDQoJCSAgICAgICAgew0KCQkJCQl0aGlzLnBvcHVwc1tp ZF0gPSBuZXcgZ2Vla19nYWxfcG9wdXAoaWQsIHN0eWxlaWQsIHBvc2l0aW9uLCBu b2ltYWdlLCB4LCB5KTsNCgkJICAgICAgICB9DQoJCSAgICAgICAgcmV0dXJuIHRo aXMucG9wdXBzW2lkXTsNCgkJfTsNCg0KCQlnZWVrX2dhbC5wcm90b3R5cGUuaGlk ZSA9IGZ1bmN0aW9uKGZvcmNlKQ0KCQl7DQoJCSAgICAgICAgaWYgKHRoaXMuYWN0 aXZlZ2FsICE9IG51bGwpDQoJCSAgICAgICAgew0KCQkgICAgICAgICAgICAgICAg dGhpcy5wb3B1cHNbdGhpcy5hY3RpdmVnYWxdLmhpZGUoZm9yY2UpOw0KCQkgICAg ICAgIH0NCgkJfTsNCg0KCQlnZWVrX2dhbC5wcm90b3R5cGUudGljayA9IGZ1bmN0 aW9uKCkNCgkJew0KCQkJdGhpcy5jbG9jayA9IHNldFRpbWVvdXQoImdhbC50aWNr KCk7IiwgdGhpcy50aWNrX2NvdW50KTsNCg0KCSAgICAgICAgaWYgKHRoaXMuYWN0 aXZlZ2FsID09IG51bGwpDQoJICAgICAgICB7DQoJICAgICAgICAJcmV0dXJuOw0K CSAgICAgICAgfQ0KDQoJICAgICAgICBpZiAodGhpcy5wb3B1cHNbdGhpcy5hY3Rp dmVnYWxdLnN0eWxlaWQgPT0gR0VFS19HQUxfU1RJQ0spDQoJICAgICAgICB7DQoJ ICAgICAgICAJcmV0dXJuOw0KCSAgICAgICAgfQ0KDQoJICAgICAgICBpZiAodGhp cy5wb3B1cHNbdGhpcy5hY3RpdmVnYWxdLnN0eWxlaWQgPT0gR0VFS19HQUxfRk9M TE9XKQ0KCSAgICAgICAgew0KCSAgICAgICAgCXRoaXMucG9wdXBzW3RoaXMuYWN0 aXZlZ2FsXS5wb3MgPSBnYWwuZmV0Y2hfb2Zmc2V0KGZldGNoX29iamVjdCh0aGlz LmFjdGl2ZWdhbCkpOw0KCSAgICAgICAgCXRoaXMucG9wdXBzW3RoaXMuYWN0aXZl Z2FsXS5yZXBvc2l0aW9uKHRoaXMubW91c2VYLCB0aGlzLm1vdXNlWSk7DQoJICAg ICAgICB9DQoNCgkgICAgICAgIGlmICh0aGlzLnRpY2tfY2xvY2sgPCAxMCkNCgkg ICAgICAgIHsNCgkgICAgICAgIAl0aGlzLnRpY2tfY2xvY2sgKys7DQoJICAgICAg ICAJcmV0dXJuOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZQ0KCSAgICAgICAg ew0KCSAgICAgICAgCXRoaXMudGlja19jbG9jayA9IDA7DQoJICAgICAgICB9DQoN CgkgICAgICAgIGlmICh0aGlzLnRpY2tfbG9ja2VkID09IHRydWUpDQoJICAgICAg ICB7DQoJICAgICAgICAJcmV0dXJuOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxz ZQ0KCSAgICAgICAgew0KCSAgICAgICAgCXRoaXMudGlja19sb2NrZWQgPSB0cnVl Ow0KCSAgICAgICAgfQ0KDQoJICAgICAgICB0aGlzLnRpY2tlciArKzsNCgkgICAg ICAgIC8vd2luZG93LnN0YXR1cyA9IHRoaXMudGlja2VyOw0KDQoJICAgICAgICB2 YXIgdGVzdCA9IGZhbHNlOw0KCSAgICAgICAgdmFyIHRlc3QyID0gZmFsc2U7DQoN CgkgICAgICAgIGlmICh0aGlzLmFjdGl2ZWdhbCAhPSBudWxsKQ0KCSAgICAgICAg ew0KCSAgICAgICAgCXRlc3QgPSB0aGlzLnBvcHVwc1t0aGlzLmFjdGl2ZWdhbF0u aGl0X3Rlc3QodGhpcy5tb3VzZVgsIHRoaXMubW91c2VZKTsNCgkgICAgICAgIAl0 ZXN0MiA9IHRoaXMucG9wdXBzW3RoaXMuYWN0aXZlZ2FsXS5hbmNob3JzW3RoaXMu YWN0aXZlbGlua10uaGl0X3Rlc3QodGhpcy5tb3VzZVgsIHRoaXMubW91c2VZKTsN Cg0KCSAgICAgICAgCS8vd2luZG93LnN0YXR1cyA9ICJjb250ZW50OiAiICsgdGVz dCArICIgbGluazogIiArdGVzdDI7DQoJICAgICAgICB9DQoNCgkgICAgICAgIGlm ICh0aGlzLnBvcHVwc1t0aGlzLmFjdGl2ZWdhbF0uc3R5bGVpZCA9PSBHRUVLX0dB TF9GT0xMT1cgJiYgIXRlc3QyKQ0KCSAgICAgICAgew0KCSAgICAgICAgCXRoaXMu aGlkZSgpOw0KCSAgICAgICAgfQ0KCSAgICAgICAgZWxzZQ0KCSAgICAgICAgew0K CQkgICAgICAgIGlmICghdGVzdCAmJiAhdGVzdDIpDQoJCSAgICAgICAgew0KCQkg ICAgICAgIAl0aGlzLmhpZGUoKTsNCg0KCQkgICAgICAgIH0NCgkgICAgICAgIH0N CgkgICAgICAgIHRoaXMudGlja19sb2NrZWQgPSBmYWxzZTsNCgkJfTsNCg0KDQov L2FuY2hvcnMNCg0KDQpmdW5jdGlvbiBnZWVrX2dhbF9hbmNob3IoaWQsIGNvbnRl bnRpZCwgbm9pbWFnZSkNCnsNCiAgICAgICAgdGhpcy5pZCA9IGlkOw0KICAgICAg ICB0aGlzLmNvbnRlbnRpZCA9IGNvbnRlbnRpZDsNCiAgICAgICAgdGhpcy5ub2lt YWdlID0gbm9pbWFnZTsNCiAgICAgICAgcmV0dXJuIHRoaXMucmVnaXN0ZXIoaWQs IGNvbnRlbnRpZCwgbm9pbWFnZSk7DQp9DQoNCgkJZ2Vla19nYWxfYW5jaG9yLnBy b3RvdHlwZS5oaXRfdGVzdCA9IGZ1bmN0aW9uKG1vdXNlWCwgbW91c2VZKQ0KCQl7 DQoNCgkJCXZhciBjbGllbnQgPSBnYWxfY2xpZW50YXJlYSgpOw0KDQoJCQl5ID0g bW91c2VZOw0KCQkJeCA9IG1vdXNlWDsNCg0KCQkJZSA9IGZldGNoX29iamVjdCh0 aGlzLmlkKTsNCgkJCWEgPSBnYWwuZmV0Y2hfb2Zmc2V0KGUpOw0KDQoJCQlhLnQg LT0gY2xpZW50Lmg7DQoJCQlhLmIgLT0gY2xpZW50Lmg7DQoNCgkJCWEubCAtPSBj bGllbnQudzsNCgkJCWEuciAtPSBjbGllbnQudzsNCg0KCQkJLy93aW5kb3cuc3Rh dHVzID0gbW91c2VYOw0KCSAgICAgICAgaWYgKCh4ID4gYS5sKSAmJiAoeCA8IChh LnIpKSAmJiAoeSA+IGEudCkgJiYgKHkgPCAoYS5iKSkpDQoJICAgICAgICB7DQoJ ICAgICAgICAJcmV0dXJuIHRydWU7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNl DQoJICAgICAgICB7DQoJICAgICAgICAJcmV0dXJuIGZhbHNlOw0KCSAgICAgICAg fQ0KDQoJCX07DQoNCgkJZ2Vla19nYWxfYW5jaG9yLnByb3RvdHlwZS5yZWdpc3Rl ciA9IGZ1bmN0aW9uKGlkLCBjb250ZW50aWQsIG5vaW1hZ2UpDQoJCXsNCgkJICAg ICAgICB0aGlzLmNvbnRlbnRpZCA9IGNvbnRlbnRpZDsNCg0KCQkgICAgICAgIGEg PSBmZXRjaF9vYmplY3QoaWQpOw0KCQkJCWEuY29udGVudGlkID0gY29udGVudGlk Ow0KCQkJCWEuc3R5bGUuY3Vyc29yID0gcG9pbnRlcl9jdXJzb3I7DQoJCSAgICAg ICAgLy9hLm9uY2xpY2sgPSBnZWVrX2dhbF9wb3B1cF9ldmVudHMucHJvdG90eXBl LmNvbnRyb2xvYmpfb25jbGljazsNCgkJICAgICAgICBhLm9ubW91c2VvdmVyID0g Z2Vla19nYWxfcG9wdXBfZXZlbnRzLnByb3RvdHlwZS5jb250cm9sb2JqX29ubW91 c2VvdmVyOw0KDQoJCSAgICAgICAgcmV0dXJuIHRoaXM7DQoJCX07DQoNCg0KLy9w b3B1cCBvYmplY3QNCg0KZnVuY3Rpb24gZ2Vla19nYWxfcG9wdXAoaWQsIHN0eWxl aWQsIHBvc2l0aW9uLCBub2ltYWdlLCB4LCB5KQ0Kew0KICAgICAgICB0aGlzLmlk ID0gaWQ7DQogICAgICAgIHRoaXMuc3R5bGVpZCA9IHN0eWxlaWQ7DQogICAgICAg IHRoaXMucG9zaXRpb25pZCA9IHBvc2l0aW9uOw0KICAgICAgICB0aGlzLm9wZW5f c3RlcHMgPSBnYWwub3Blbl9zdGVwczsNCiAgICAgICAgdGhpcy5vcGVuX2ZhZGUg PSBnYWwub3Blbl9mYWRlOw0KICAgICAgICB0aGlzLm9mZnggPSAoeCAqIDEpOw0K ICAgICAgICB0aGlzLm9mZnkgPSAoeSAqIDEpOw0KDQogICAgICAgIHRoaXMuZGly ZWN0aW9uID0gKHBvc2l0aW9uID09IDEgfHwgcG9zaXRpb24gPT0gMyA/ICdsZWZ0 JyA6ICdyaWdodCcpOw0KICAgICAgICB0aGlzLmFuY2hvcnMgPSBuZXcgQXJyYXko KTsNCg0KICAgICAgICB2YXIgYSA9IGZldGNoX3RhZ3MoZG9jdW1lbnQsICdhJyk7 DQoNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKQ0K ICAgICAgICB7DQogICAgICAgICAgICAgICAgaWYgKGFbaV0uaWQgJiYgYVtpXS5p ZC5zdWJzdHIoMCwgaWQubGVuZ3RoKSA9PSBpZCkNCiAgICAgICAgICAgICAgICB7 DQogICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcnNbYVtpXS5pZF0g PSBuZXcgZ2Vla19nYWxfYW5jaG9yKGFbaV0uaWQsIGlkLCBub2ltYWdlKTsNCiAg ICAgICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgdGhpcy50aWNrID0g Z2Vla19nYWxfcG9wdXBfZXZlbnRzLnByb3RvdHlwZS5jb250cm9sb2JqX3RpY2s7 DQogICAgICAgIGdhbC50aWNrKCk7DQp9DQoNCg0KCWdlZWtfZ2FsX3BvcHVwLnBy b3RvdHlwZS5pbml0X2dhbCA9IGZ1bmN0aW9uKCkNCgl7DQoJICAgICAgICB0aGlz LmdhbG9iaiA9IGZldGNoX29iamVjdCh0aGlzLmlkKTsNCg0KCSAgICAgICAgaWYg KHRoaXMuZ2Fsb2JqICYmICF0aGlzLmdhbG9iai5pbml0aWFsaXplZCkNCgkgICAg ICAgIHsNCgkgICAgICAgICAgICAgICAgdGhpcy5nYWxvYmouaW5pdGlhbGl6ZWQg PSB0cnVlOw0KCSAgICAgICAgICAgICAgICB0aGlzLmdhbG9iai5vbmNsaWNrID0g ZV9ieV9ndW07DQoJICAgICAgICAgICAgICAgIHRoaXMuZ2Fsb2JqLnN0eWxlLnBv c2l0aW9uID0gJ2Fic29sdXRlJzsNCgkgICAgICAgICAgICAgICAgdGhpcy5nYWxv Ymouc3R5bGUuekluZGV4ID0gNTA7DQoNCgkgICAgICAgICAgICAgICAgaWYgKGlz X2llICYmICFpc19tYWMpDQoJICAgICAgICAgICAgICAgIHsNCgkgICAgICAgICAg ICAgICAgICAgICAgICB0aGlzLmdhbG9iai5zdHlsZS5maWx0ZXIgKz0gInByb2dp ZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jvc29mdC5hbHBoYShlbmFibGVkPTEsb3Bh Y2l0eT0xMDApIjsNCgkgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdhbG9i ai5zdHlsZS5maWx0ZXIgKz0gInByb2dpZDpEWEltYWdlVHJhbnNmb3JtLk1pY3Jv c29mdC5zaGFkb3coZGlyZWN0aW9uPTEzNSxjb2xvcj0jOEU4RThFLHN0cmVuZ3Ro PTMpIjsNCgkgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgfQ0KCX07DQoNCgln ZWVrX2dhbF9wb3B1cC5wcm90b3R5cGUucmVwb3NpdGlvbiA9IGZ1bmN0aW9uKHgs IHkpDQoJew0KCQl2YXIgbCA9IDA7DQoJCXZhciB0ID0gMDsNCgkJdmFyIGNsaWVu dCA9IGdhbF9jbGllbnRhcmVhKCk7DQoJCXZhciBhbmNob3IgPSB0aGlzLnBvczsN Cg0KCQllID0gZmV0Y2hfb2JqZWN0KHRoaXMuaWQpOw0KDQoJCWlmIChlLnN0eWxl LmRpc3BsYXkgIT0gJycpDQoJCXsNCgkJCXJldHVybjsNCgkJfQ0KDQoJCWlmICh0 aGlzLnBvc2l0aW9uaWQgPT0gR0VFS19HQUxfQk9UVE9NX1JJR0hUKQ0KCQl7DQoN CgkJCWlmICh0aGlzLnN0eWxlaWQgPT0gR0VFS19HQUxfRk9MTE9XKQ0KICAgICAg ICAJew0KCQkJCWwgPSB4IC0gZS5vZmZzZXRXaWR0aCArIGNsaWVudC53IC0gMTAg KyB0aGlzLm9mZng7DQoJCQkJdCA9IHkgKyBjbGllbnQuaCArIHRoaXMub2ZmeTsN CiAgICAgICAgCX0NCiAgICAgICAgCWVsc2UNCiAgICAgICAgCXsNCiAgICAgICAg CQkvL2wgPSBhbmNob3IuciAtIGUub2Zmc2V0V2lkdGggKyBkb2N1bWVudC5kb2N1 bWVudEVsZW1lbnQuc2Nyb2xsTGVmdCArIHRoaXMub2ZmeDsNCiAgICAgICAgCQkv L3QgPSBhbmNob3IuYiAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxU b3AgKyB0aGlzLm9mZnk7DQoJCQkJbCA9IChhbmNob3IuciAtIGUub2Zmc2V0V2lk dGgpICsgdGhpcy5vZmZ4Ow0KICAgICAgICAgICAgICAgIHQgPSBhbmNob3IuYiAr IHRoaXMub2ZmeTsNCiAgICAgICAgCX0NCg0KCQl9DQoJCWVsc2UgaWYgKHRoaXMu cG9zaXRpb25pZCA9PSBHRUVLX0dBTF9UT1BfUklHSFQpDQoJCXsNCgkJCWlmICh0 aGlzLnN0eWxlaWQgPT0gR0VFS19HQUxfRk9MTE9XKQ0KICAgICAgICAJew0KCQkJ CWwgPSB4IC0gZS5vZmZzZXRXaWR0aCArIGNsaWVudC53IC0gMTAgKyB0aGlzLm9m Zng7DQoJCQkJdCA9IHkgLSBlLm9mZnNldEhlaWdodCArIGNsaWVudC5oICsgdGhp cy5vZmZ5Ow0KCSAgICAgICAgCWlmICh0IDwgKGNsaWVudC5oICsgMTApKQ0KCSAg ICAgICAgICAgIHsNCgkgICAgICAgICAgICAJdCA9IGNsaWVudC5oICsgMTAgKyB0 aGlzLm9mZnk7DQoJICAgICAgICAgICAgfQ0KICAgICAgICAJfQ0KICAgICAgICAJ ZWxzZQ0KICAgICAgICAJew0KCQkJCS8vbCA9IGFuY2hvci5yIC0gZS5vZmZzZXRX aWR0aCArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0ICsgdGhp cy5vZmZ4Ow0KCQkJCXQgPSBhbmNob3IudCAtIGUub2Zmc2V0SGVpZ2h0ICsgdGhp cy5vZmZ5OyAvL2RvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ANCgkg ICAgICAgIAlsID0gKGFuY2hvci5yIC0gZS5vZmZzZXRXaWR0aCkgKyB0aGlzLm9m Zng7DQoNCgkJCQlpZiAodCA8IDEpDQoJICAgICAgICAgICAgew0KCSAgICAgICAg ICAgIAl0ID0gYW5jaG9yLmIgKyB0aGlzLm9mZnk7DQoJICAgICAgICAgICAgfQ0K DQogICAgICAgIAl9DQoJCX0NCgkJZWxzZSBpZiAodGhpcy5wb3NpdGlvbmlkID09 IEdFRUtfR0FMX1RPUF9MRUZUKQ0KCQl7DQoNCgkJCWlmICh0aGlzLnN0eWxlaWQg PT0gR0VFS19HQUxfRk9MTE9XKQ0KICAgICAgICAJew0KCQkJCWwgPSB4ICsgY2xp ZW50LncgLSAxMCArIHRoaXMub2ZmeDsNCgkJCQl0ID0geSAtIGUub2Zmc2V0SGVp Z2h0ICsgY2xpZW50LmggKyB0aGlzLm9mZnk7DQogICAgICAgIAl9DQogICAgICAg IAllbHNlDQogICAgICAgIAl7DQoNCgkJCQkvL2wgPSBhbmNob3IubCAtIGRvY3Vt ZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0ICsgdGhpcy5vZmZ4Ow0KCQkJ CXQgPSBhbmNob3IudCAtIGUub2Zmc2V0SGVpZ2h0Oy8vIC0gZG9jdW1lbnQuZG9j dW1lbnRFbGVtZW50LnNjcm9sbFRvcDsNCgkJCQlsID0gYW5jaG9yLmwgKyB0aGlz Lm9mZng7DQoJICAgICAgICAJaWYgKHQgPCAxKQ0KCSAgICAgICAgICAgIHthbGVy dCAoInBvb3AiKTsNCgkgICAgICAgICAgICAJdCA9IGFuY2hvci5iICsgdGhpcy5v ZmZ5Ow0KCSAgICAgICAgICAgIH0NCiAgICAgICAgCX0NCg0KCQl9DQoJCWVsc2UN CgkJew0KCSAgICAgICAgaWYgKHRoaXMuc3R5bGVpZCA9PSBHRUVLX0dBTF9GT0xM T1cpDQoJICAgICAgICB7DQoJICAgICAgICAJbCA9IHggKyBjbGllbnQudyAtIDEw ICsgdGhpcy5vZmZ4Ow0KCSAgICAgICAgCXQgPSB5ICsgY2xpZW50LmggKyB0aGlz Lm9mZnk7DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlDQoJICAgICAgICB7DQog ICAgICAgICAgICAgICAgbCA9IGFuY2hvci5sICsgdGhpcy5vZmZ4Ow0KICAgICAg ICAgICAgICAgIHQgPSBhbmNob3IuYiArIHRoaXMub2ZmeTsNCgkgICAgICAgIH0N Cg0KCQl9DQoNCgkJaWYgKGwgPCAxKQ0KCQl7DQoJCQlsID0gMTA7DQoJCX0NCgkJ aWYgKGwgKyBlLm9mZnNldFdpZHRoICsgY2xpZW50LncgPiBjbGllbnQucikNCgkJ ew0KCQkJbCA9IGNsaWVudC5yIC0gZS5vZmZzZXRXaWR0aCAtIDIwOw0KCQl9DQoN CiAgICAgICAgZS5zdHlsZS5sZWZ0ID0gbCArICJweCI7DQogICAgICAgIGUuc3R5 bGUudG9wCT0gdCArICJweCI7DQoNCgl9Ow0KDQoNCglnZWVrX2dhbF9wb3B1cC5w cm90b3R5cGUuaGl0X3Rlc3QgPSBmdW5jdGlvbihtb3VzZVgsIG1vdXNlWSkNCgl7 DQoNCgkJdmFyIGNsaWVudCA9IGdhbF9jbGllbnRhcmVhKCk7DQoNCgkJeSA9IG1v dXNlWTsNCgkJeCA9IG1vdXNlWDsNCg0KCQllID0gZmV0Y2hfb2JqZWN0KHRoaXMu aWQpOw0KCQlhID0gZ2FsLmZldGNoX29mZnNldChlKTsNCg0KCQlhLnQgLT0gY2xp ZW50Lmg7DQoJCWEuYiAtPSBjbGllbnQuaDsNCg0KCQlhLmwgLT0gY2xpZW50Lnc7 DQoJCWEuciAtPSBjbGllbnQudzsNCg0KICAgICAgICBpZiAoKHggPiBhLmwpICYm ICh4IDwgKGEucikpICYmICh5ID4gYS50KSAmJiAoeSA8IChhLmIpKSkNCiAgICAg ICAgew0KICAgICAgICAJcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAgICAg ZWxzZQ0KICAgICAgICB7DQogICAgICAgIAlyZXR1cm4gZmFsc2U7DQogICAgICAg IH0NCg0KCX07DQoNCglnZWVrX2dhbF9wb3B1cC5wcm90b3R5cGUuc2hvdyA9IGZ1 bmN0aW9uKG9iaikNCgl7DQoJICAgICAgICBpZiAoIWdhbC5hY3RpdmUpDQoJICAg ICAgICB7DQoJICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCgkgICAgICAg IH0NCgkgICAgICAgIGVsc2UgaWYgKCF0aGlzLmdhbG9iaikNCgkgICAgICAgIHsN CgkgICAgICAgICAgICAgICAgdGhpcy5pbml0X2dhbCgpOw0KCSAgICAgICAgfQ0K DQoJICAgICAgICBpZiAoIXRoaXMuZ2Fsb2JqKQ0KCSAgICAgICAgew0KCSAgICAg ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQoJICAgICAgICB9DQoNCgkgICAgICAg IGlmIChnYWwuYWN0aXZlZ2FsICE9IG51bGwpDQoJICAgICAgICB7DQoJICAgICAg ICAgICAgZ2FsLnRpY2tfZGVjYXllciA9IDA7DQoJICAgICAgICAJZ2FsLnBvcHVw c1tnYWwuYWN0aXZlZ2FsXS5oaWRlKHRydWUpOw0KCSAgICAgICAgfQ0KDQoJICAg ICAgICAvL3dpbmRvdy5zdGF0dXMgPSAic3R5bGVpZCAiICsgdGhpcy5zdHlsZWlk ICsgIiBwb3NpdGlvbiAiICsgdGhpcy5wb3NpdGlvbmlkOw0KDQoJICAgICAgICBn YWwuYWN0aXZlZ2FsID0gdGhpcy5pZDsNCgkgICAgICAgIGdhbC5hY3RpdmVsaW5r ID0gb2JqLmlkOw0KDQoJICAgICAgICBpZiAoZ2FsLnRpY2tfZGVjYXkpDQoJICAg ICAgICB7DQoJICAgICAgICAJZ2FsLnRpY2tfZGVjYXllciA9IDE7DQoJICAgICAg ICB9DQoJCQl0aGlzLmdhbG9iai5zdHlsZS5jbGlwID0gJ3JlY3QoYXV0bywgYXV0 bywgYXV0bywgYXV0byknOw0KCQkJdGhpcy5jb250ZW50cG9zID0gZ2FsLmZldGNo X29mZnNldChmZXRjaF9vYmplY3QodGhpcy5pZCkpOw0KDQoJCQkvL2FsZXJ0KHRo aXMub2ZmeCArICIgOjogIiAgKyB0aGlzLm9mZnkpOw0KDQoJCQl0aGlzLmdhbG9i ai5zdHlsZS5kaXNwbGF5ID0gJyc7DQoNCgkgICAgICAgIGlmICh0aGlzLnBvc2l0 aW9uID09IEdFRUtfR0FMX0ZPTExPVykNCgkgICAgICAgIHsNCgkgICAgICAgIAl0 aGlzLnJlcG9zaXRpb24oZ2FsLm1vdXNlWCwgZ2FsLm1vdXNlWSk7DQoJICAgICAg ICB9DQoJICAgICAgICBlbHNlDQoJICAgICAgICB7DQoJCSAgICAgICAgdGhpcy5w b3MgPSBnYWwuZmV0Y2hfb2Zmc2V0KG9iaik7DQoJCSAgICAgICAgLy9hbGVydCh0 aGlzLnBvc1snbCddKTsNCgkJICAgICAgICAvL3RoaXMucG9zWydsJ10gPSAodGhp cy5vZmZ4ICogMSkgKyAodGhpcy5wb3NbJ2wnXSAqIDEpOw0KCQkgICAgICAgIC8v YWxlcnQodGhpcy5wb3NbJ2wnXSk7DQoJCSAgICAgICAgLy90aGlzLnBvc1sndCdd IC09IHRoaXMub2ZmeTsNCgkgICAgICAgIAl0aGlzLnJlcG9zaXRpb24oMCwgMCk7 DQoJICAgICAgICB9DQoNCg0KCQkJaWYgKGdhbC5zbGlkZV9vcGVuKQ0KCQkJew0K CQkJCXRoaXMuZ2Fsb2JqLnN0eWxlLmNsaXAgPSAncmVjdChhdXRvLCAwcHgsIDBw eCwgYXV0byknOw0KCQkJfQ0KDQoJCQlpZiAoZ2FsLnNsaWRlX29wZW4pDQoJCQl7 DQoJCQkJdGhpcy5pbnRlcnZhbFggPSBNYXRoLmNlaWwodGhpcy5nYWxvYmoub2Zm c2V0V2lkdGggLyB0aGlzLm9wZW5fc3RlcHMpOw0KCQkJCXRoaXMuaW50ZXJ2YWxZ ID0gTWF0aC5jZWlsKHRoaXMuZ2Fsb2JqLm9mZnNldEhlaWdodCAvIHRoaXMub3Bl bl9zdGVwcyk7DQoJCQkJdGhpcy5zbGlkZSgodGhpcy5kaXJlY3Rpb24gPT0gJ2xl ZnQnID8gMCA6IHRoaXMuZ2Fsb2JqLm9mZnNldFdpZHRoKSwgMCwgMCk7DQoJCQl9 DQoJCQllbHNlIGlmICh0aGlzLmdhbG9iai5zdHlsZS5jbGlwICYmIHRoaXMuc2xp ZGVfb3BlbikNCgkJCXsNCgkJCQl0aGlzLmdhbG9iai5zdHlsZS5jbGlwID0gJ3Jl Y3QoYXV0bywgYXV0bywgYXV0bywgYXV0byknOw0KCQkJfQ0KDQoJICAgICAgICB0 aGlzLmhhbmRsZV9vdmVybGFwcyh0cnVlKTsNCgkgICAgICAgIGdhbC50aWNrKCk7 DQoJfTsNCg0KCWdlZWtfZ2FsX3BvcHVwLnByb3RvdHlwZS5oaWRlID0gZnVuY3Rp b24oZSkNCgl7DQoNCgkJCWlmIChnYWwudGlja19kZWNheWVyID4gMCAmJiBlICE9 IHRydWUpDQoJCQl7DQoJCQkJdGhpcy5zbGlkZXRpbWVyID0gc2V0VGltZW91dCgi Z2FsLnBvcHVwc1tnYWwuYWN0aXZlZ2FsXS5kZWNheV9oaWRlKCkiLCBnYWwudGlj a19kZWNheSk7DQoJCQkJcmV0dXJuOw0KCQkJfQ0KDQoJCQl0aGlzLmdhbG9iai5z dHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KCSAgICAgICAgdGhpcy5oYW5kbGVfb3Zl cmxhcHMoZmFsc2UpOw0KCSAgICAgICAgdGhpcy5hY3RpdmVnYWwgPSBudWxsOw0K CSAgICAgICAgdGhpcy5hY3RpdmVsaW5rID0gbnVsbDsNCgkgICAgICAgIGNsZWFy VGltZW91dChnYWwuY2xvY2spOw0KCX07DQoNCglnZWVrX2dhbF9wb3B1cC5wcm90 b3R5cGUuZGVjYXlfaGlkZSA9IGZ1bmN0aW9uKCkNCgl7Ly9hbGVydCgieW8iKTsN CgkJZ2FsLnRpY2tfZGVjYXllciA9IG51bGw7DQoJfTsNCg0KCWdlZWtfZ2FsX3Bv cHVwLnByb3RvdHlwZS5ob3ZlciA9IGZ1bmN0aW9uKG9iaikNCgl7DQoJICAgICAg ICB0aGlzLnNob3cob2JqLCB0cnVlKTsNCgl9Ow0KDQoJZ2Vla19nYWxfcG9wdXAu cHJvdG90eXBlLm92ZXJsYXBzID0gZnVuY3Rpb24ob2JqLCBvYmoyKQ0KCXsNCgkg ICAgICAgIHZhciBzID0gbmV3IEFycmF5KCk7DQoJICAgICAgICB2YXIgcG9zID0g Z2FsLmZldGNoX29mZnNldChvYmopOw0KDQoJICAgICAgICBsID0gcG9zLmw7DQoJ ICAgICAgICB0ID0gcG9zLnQ7DQoJICAgICAgICByID0gbCArIG9iai5vZmZzZXRX aWR0aDsNCgkgICAgICAgIGggPSB0ICsgb2JqLm9mZnNldEhlaWdodDsNCg0KDQoJ ICAgICAgICBpZiAobCA+IG9iajIuciB8fCByIDwgb2JqMi5sIHx8IHQgPiBvYmoy LmIgfHwgaCA8IG9iajIudCkNCgkgICAgICAgIHsNCgkJCQlyZXR1cm4gZmFsc2U7 DQoJICAgICAgICB9DQoJICAgICAgICBlbHNlDQoJICAgICAgICB7DQoJICAgICAg ICAJcmV0dXJuIHRydWU7DQoJICAgICAgICB9DQoJfTsNCg0KCWdlZWtfZ2FsX3Bv cHVwLnByb3RvdHlwZS5oYW5kbGVfb3ZlcmxhcHMgPSBmdW5jdGlvbihkb2hpZGUp DQoJew0KCSAgICAgICAgaWYgKGlzX2llKQ0KCSAgICAgICAgew0KCSAgICAgICAg ICAgICAgICB2YXIgc2VsZWN0cyA9IGZldGNoX3RhZ3MoZG9jdW1lbnQsICdzZWxl Y3QnKTsNCg0KCSAgICAgICAgICAgICAgICBpZiAoZG9oaWRlKQ0KCSAgICAgICAg ICAgICAgICB7DQoJICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGdhbGFyZWEg PSBuZXcgQXJyYXkoKTsNCg0KCSAgICAgICAgICAgICAgICAgICAgICAgIGdhbGFy ZWEgPSB7DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbCcgOiB0 aGlzLmxlZnRweCwNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdy JyA6IHRoaXMubGVmdHB4ICsgdGhpcy5nYWxvYmoub2Zmc2V0V2lkdGgsDQoJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndCcgOiB0aGlzLnRvcHB4LA0K CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2gnIDogdGhpcy50b3Bw eCArIHRoaXMuZ2Fsb2JqLm9mZnNldEhlaWdodA0KCSAgICAgICAgICAgICAgICAg ICAgICAgIH07DQoNCgkgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBp ID0gMDsgaSA8IHNlbGVjdHMubGVuZ3RoOyBpKyspDQoJICAgICAgICAgICAgICAg ICAgICAgICAgew0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHRoaXMub3ZlcmxhcHMoc2VsZWN0c1tpXSwgZ2FsYXJlYSkpDQoJICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB7DQoJICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZhciBoaWRlID0gdHJ1ZTsNCgkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBzZWxlY3RzW2ld Ow0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGls ZSAocyA9IHMucGFyZW50Tm9kZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgew0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChzLmNsYXNzTmFtZSA9PSAndmJtZW51X3Bv cHVwJykNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBoaWRlID0gZmFsc2U7DQoJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB9DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IH0NCg0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoaGlkZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgew0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNlbGVjdHNbaV0uc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nOw0K CSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGFycmF5X3B1c2goZ2FsLmhpZGRlbl9zZWxlY3RzLCBpKTsNCgkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgICAgICAgICAgICAgIH0N CgkgICAgICAgICAgICAgICAgfQ0KCSAgICAgICAgICAgICAgICBlbHNlDQoJICAg ICAgICAgICAgICAgIHsNCgkgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAo dHJ1ZSkNCgkgICAgICAgICAgICAgICAgICAgICAgICB7DQoJICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGFycmF5X3BvcChnYWwuaGlkZGVu X3NlbGVjdHMpOw0KCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHR5cGVvZiBpID09ICd1bmRlZmluZWQnIHx8IGkgPT0gbnVsbCkNCgkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHsNCgkgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQoJICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9DQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBlbHNlDQoJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7DQoJICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdHNbaV0u c3R5bGUudmlzaWJpbGl0eSA9ICd2aXNpYmxlJzsNCgkgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIH0NCgkgICAgICAgICAgICAgICAgICAgICAgICB9DQoJ ICAgICAgICAgICAgICAgIH0NCgkgICAgICAgIH0NCgl9Ow0KDQoJZ2Vla19nYWxf cG9wdXAucHJvdG90eXBlLnNsaWRlID0gZnVuY3Rpb24oY2xpcFgsIGNsaXBZLCBv cGFjaXR5KQ0KCXsNCgkJaWYgKHRoaXMuZGlyZWN0aW9uID09ICdsZWZ0JyAmJiAo Y2xpcFggPCB0aGlzLmdhbG9iai5vZmZzZXRXaWR0aCB8fCBjbGlwWSA8IHRoaXMu Z2Fsb2JqLm9mZnNldEhlaWdodCkpDQoJCXsNCgkJCWlmIChnYWwub3Blbl9mYWRl ICYmIGlzX2llKQ0KCQkJew0KCQkJCW9wYWNpdHkgKz0gNTsNCgkJCQl0aGlzLmdh bG9iai5maWx0ZXJzLml0ZW0oJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmFs cGhhJykub3BhY2l0eSA9IG9wYWNpdHk7DQoJCQl9DQoNCgkJCWNsaXBYICs9IHRo aXMuaW50ZXJ2YWxYOw0KCQkJY2xpcFkgKz0gdGhpcy5pbnRlcnZhbFk7DQoNCgkJ CXRoaXMuZ2Fsb2JqLnN0eWxlLmNsaXAgPSAicmVjdChhdXRvLCAiICsgY2xpcFgg KyAicHgsICIgKyBjbGlwWSArICJweCwgYXV0bykiOw0KCQkJdGhpcy5zbGlkZXRp bWVyID0gc2V0VGltZW91dCgiZ2FsLnBvcHVwc1tnYWwuYWN0aXZlZ2FsXS5zbGlk ZSgiICsgY2xpcFggKyAiLCAiICsgY2xpcFkgKyAiLCAiICsgb3BhY2l0eSArICIp OyIsIDApOw0KCQl9DQoJCWVsc2UgaWYgKHRoaXMuZGlyZWN0aW9uID09ICdyaWdo dCcgJiYgKGNsaXBYID4gMCB8fCBjbGlwWSA8IHRoaXMuZ2Fsb2JqLm9mZnNldEhl aWdodCkpDQoJCXsNCgkJCWlmIChnYWwub3Blbl9mYWRlICYmIGlzX2llKQ0KCQkJ ew0KCQkJCW9wYWNpdHkgKz0gNTsNCgkJCQl0aGlzLmdhbG9iai5maWx0ZXJzLml0 ZW0oJ0RYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmFscGhhJykub3BhY2l0eSA9 IG9wYWNpdHk7DQoJCQl9DQoNCgkJCWNsaXBYIC09IHRoaXMuaW50ZXJ2YWxYOw0K CQkJY2xpcFkgKz0gdGhpcy5pbnRlcnZhbFk7DQoNCgkJCXRoaXMuZ2Fsb2JqLnN0 eWxlLmNsaXAgPSAicmVjdChhdXRvLCAiICsgdGhpcy5nYWxvYmoub2Zmc2V0V2lk dGggKyAicHgsICIgKyBjbGlwWSArICJweCwgIiArIGNsaXBYICsgInB4KSI7DQoJ CQl0aGlzLnNsaWRldGltZXIgPSBzZXRUaW1lb3V0KCJnYWwucG9wdXBzW2dhbC5h Y3RpdmVnYWxdLnNsaWRlKCIgKyBjbGlwWCArICIsICIgKyBjbGlwWSArICIsICIg KyBvcGFjaXR5ICsgIik7IiwgMCk7DQoJCX0NCgkJZWxzZQ0KCQl7DQoJCQl0aGlz LnN0b3Bfc2xpZGUoKTsNCgkJfQ0KCX07DQoNCglnZWVrX2dhbF9wb3B1cC5wcm90 b3R5cGUuc3RvcF9zbGlkZSA9IGZ1bmN0aW9uKCkNCgl7DQoJCWNsZWFyVGltZW91 dCh0aGlzLnNsaWRldGltZXIpOw0KDQoJCXRoaXMuZ2Fsb2JqLnN0eWxlLmNsaXAg PSAncmVjdChhdXRvLCBhdXRvLCBhdXRvLCBhdXRvKSc7DQoNCgkJaWYgKGdhbC5v cGVuX2ZhZGUgJiYgaXNfaWUpDQoJCXsNCgkJCXRoaXMuZ2Fsb2JqLmZpbHRlcnMu aXRlbSgnRFhJbWFnZVRyYW5zZm9ybS5NaWNyb3NvZnQuYWxwaGEnKS5vcGFjaXR5 ID0gMTAwOw0KCQl9DQoJfTsNCg0KLy9FdmVudHMNCg0KZnVuY3Rpb24gZ2Vla19n YWxfcG9wdXBfZXZlbnRzKCkNCnsNCn07DQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50 cy5wcm90b3R5cGUuY29udHJvbG9ial90aWNrID0gZnVuY3Rpb24oKQ0Kew0KICAg ICAgICBzZXRUaW1lb3V0KCJnYWwudGljaygpOyIsIDEwMCk7DQogICAgICAgIC8v YWxlcnQoInlvIik7DQp9Ow0KDQpnZWVrX2dhbF9wb3B1cF9ldmVudHMucHJvdG90 eXBlLmNvbnRyb2xvYmpfb25jbGljayA9IGZ1bmN0aW9uKGUpDQp7DQogICAgICAg IGlmICh0eXBlb2YgZG9fYW5fZSA9PSAnZnVuY3Rpb24nKQ0KICAgICAgICB7DQog ICAgICAgICAgICAgICAgZG9fYW5fZShlKTsNCiAgICAgICAgICAgICAgICBpZiAo Z2FsLmFjdGl2ZW1lbnUgPT0gbnVsbCB8fCBnYWwubWVudXNbZ2FsLmFjdGl2ZW1l bnVdLmNvbnRyb2xrZXkgIT0gdGhpcy5pZCkNCiAgICAgICAgICAgICAgICB7DQog ICAgICAgICAgICAgICAgICAgICAgICBnYWwucG9wdXBzW3RoaXMuaWRdLnNob3co dGhpcyk7DQogICAgICAgICAgICAgICAgICAgICAgICBnYWwuYWN0aXZlbGluayA9 IGUuaWQ7DQogICAgICAgICAgICAgICAgICAgICAgICAvL2FsZXJ0KHRoaXMuaWQg KyAiIFNTICIgKyBlLmlkKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg ICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAg ICAgICAgIGdhbC5wb3B1cHNbdGhpcy5pZF0uaGlkZSgpOw0KICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgfQ0KfTsNCg0KZ2Vla19nYWxfcG9wdXBfZXZlbnRzLnBy b3RvdHlwZS5jb250cm9sb2JqX29ubW91c2VvdmVyID0gZnVuY3Rpb24oZSkNCnsN CiAgICAgICAgaWYgKHR5cGVvZiBkb19hbl9lID09ICdmdW5jdGlvbicpDQogICAg ICAgIHsNCiAgICAgICAgICAgICAgICBkb19hbl9lKGUpOw0KICAgICAgICAgICAg ICAgIGdhbC5wb3B1cHNbdGhpcy5jb250ZW50aWRdLmhvdmVyKHRoaXMpOw0KICAg ICAgICB9DQp9Ow0KDQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50cy5wcm90b3R5cGUu Y29udHJvbG9ial9vbm1vdXNlb3V0ID0gZnVuY3Rpb24oZSkNCnsNCiAgICB2YXIg dGVtcHggPSAwOw0KICAgIGlmIChpc19pZSkNCiAgICB7DQogICAgICAgICAgICB0 ZW1wWCA9IGV2ZW50LmNsaWVudFg7DQogICAgICAgICAgICB0ZW1wWSA9IGV2ZW50 LmNsaWVudFk7DQogICAgfQ0KICAgIGVsc2UNCiAgICB7DQogICAgICAgICAgICB0 ZW1wWCA9IGUuY2xpZW50WCA7DQogICAgICAgICAgICB0ZW1wWSA9IGUuY2xpZW50 WTsNCiAgICB9DQogICAgdGhpcy5zdHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNv cjsNCn07DQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50cy5wcm90b3R5cGUubWVudW9w dGlvbl9vbmNsaWNrX2Z1bmN0aW9uID0gZnVuY3Rpb24oZSkNCnsNCiAgICAgICAg dGhpcy5vZnVuYyhlKTsNCiAgICAgICAgZ2FsLmdhbHNbdGhpcy5jb250cm9sa2V5 XS5oaWRlKCk7DQp9Ow0KDQpnZWVrX2dhbF9wb3B1cF9ldmVudHMucHJvdG90eXBl Lm1lbnVvcHRpb25fb25jbGlja19saW5rID0gZnVuY3Rpb24oZSkNCnsNCiAgICAg ICAgZSA9IGUgPyBlIDogd2luZG93LmV2ZW50Ow0KDQogICAgICAgIGlmIChlLnNo aWZ0S2V5KQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgd2luZG93Lm9wZW4o dGhpcy5ocmVmKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAgIHsN CiAgICAgICAgICAgICAgICB3aW5kb3cubG9jYXRpb24gPSB0aGlzLmhyZWY7DQog ICAgICAgIH0NCg0KICAgICAgICBlLmNhbmNlbEJ1YmJsZSA9IHRydWU7DQogICAg ICAgIGlmIChlLnN0b3BQcm9wYWdhdGlvbikgZS5zdG9wUHJvcGFnYXRpb24oKTsN CiAgICAgICAgaWYgKGUucHJldmVudERlZmF1bHQpIGUucHJldmVudERlZmF1bHQo KTsNCg0KICAgICAgICBnYWwuZ2Fsc1t0aGlzLmNvbnRyb2xrZXldLmhpZGUoKTsN CiAgICAgICAgcmV0dXJuIGZhbHNlOw0KfTsNCg0KZ2Vla19nYWxfcG9wdXBfZXZl bnRzLnByb3RvdHlwZS5wb3B1cG9wdGlvbl9vbm1vdXNlb3ZlciA9IGZ1bmN0aW9u KGUpDQp7DQogICAgICAgIHRoaXMuY2xhc3NOYW1lID0gJ3ZibWVudV9oaWxpdGUn ICsgKHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVfaGlsaXRlX2FsaW5rJyA6ICcnKTsN CiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNvcjsNCn07 DQoNCmdlZWtfZ2FsX3BvcHVwX2V2ZW50cy5wcm90b3R5cGUucG9wdXBvcHRpb25f b25tb3VzZW91dCA9IGZ1bmN0aW9uKGUpDQp7DQogICAgICAgIHRoaXMuY2xhc3NO YW1lID0gJ3ZibWVudV9vcHRpb24nICsgKHRoaXMuaXNsaW5rID8gJyB2Ym1lbnVf b3B0aW9uX2FsaW5rJyA6ICcnKTsNCiAgICAgICAgdGhpcy5zdHlsZS5jdXJzb3Ig PSAnZGVmYXVsdCc7DQp9Ow0KDQoNCi8vY29tbW9uIGZ1bmN0aW9ucw0KDQpmdW5j dGlvbiBnYWxfaGlkZShlKQ0Kew0KICAgICAgICBpZiAoZSAmJiBlLmJ1dHRvbiAm JiBlLmJ1dHRvbiAhPSAxICYmIGUudHlwZSA9PSAnY2xpY2snKQ0KICAgICAgICB7 DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgIH0NCiAgICAg ICAgZWxzZQ0KICAgICAgICB7DQogICAgICAgICAgICAgICAgZ2FsLmhpZGUodHJ1 ZSk7DQogICAgICAgIH0NCn07DQoNCg0KDQpmdW5jdGlvbiBnZWVrX2dhbF9hamF4 KG9iaiwgcG9zdGlkKQ0Kew0KICAgICAgICBpZiAodHlwZW9mIGdhbCAhPSAndW5k ZWZpbmVkJykNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIHZhciBkaXZzID0g ZmV0Y2hfdGFncyhvYmosICdkaXYnKTsNCiAgICAgICAgICAgICAgICBmb3IgKHZh ciBpID0gMDsgaSA8IGRpdnMubGVuZ3RoOyBpKyspDQogICAgICAgICAgICAgICAg ew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRpdnNbaV0uaWQgJiYgZGl2 c1tpXS5pZC5zdWJzdHIoMCwgOSkgPT0gJ3Bvc3RtZW51XycpDQogICAgICAgICAg ICAgICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGdhbC5yZWdpc3RlcihkaXZzW2ldLmlkLCB0cnVlKTsNCiAgICAgICAgICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgIH0NCn0NCg0K ZnVuY3Rpb24gZ2FsX2NsaWVudGFyZWEoKQ0Kew0KCSAgdmFyIHcgPSAwOw0KCSAg dmFyIGggPSAwOw0KCSAgdmFyIHIgPSAwOw0KCSAgdmFyIGIgPSAwOw0KDQoJICBp ZiAodHlwZW9mKHdpbmRvdy5pbm5lcldpZHRoKSA9PSAnbnVtYmVyJykNCgkgIHsN CgkgICAgciA9IHdpbmRvdy5pbm5lcldpZHRoOw0KCSAgICBiID0gd2luZG93Lmlu bmVySGVpZ2h0Ow0KDQoJICB9DQoJICBlbHNlIGlmKGRvY3VtZW50LmRvY3VtZW50 RWxlbWVudCAmJiAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRo IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpKQ0KCSAg ew0KCSAgICByID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRo Ow0KCSAgICBiID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdo dDsNCgkgIH0NCgkgIGVsc2UgaWYoZG9jdW1lbnQuYm9keSAmJiAoZG9jdW1lbnQu Ym9keS5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudEhlaWdodCkp DQoJICB7DQoJCXIgPSBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoOw0KCQliID0g ZG9jdW1lbnQuYm9keS5jbGllbnRIZWlnaHQ7DQoJICB9DQoJICBpZih0eXBlb2Yo d2luZG93LnBhZ2VZT2Zmc2V0KSA9PSAnbnVtYmVyJykNCgkgIHsNCgkgICAgaCA9 IHdpbmRvdy5wYWdlWU9mZnNldDsNCgkgICAgdyA9IHdpbmRvdy5wYWdlWE9mZnNl dDsNCgkgIH0NCgkgIGVsc2UgaWYoZG9jdW1lbnQuYm9keSAmJiAoZG9jdW1lbnQu Ym9keS5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSkNCgkg IHsNCgkgICAgaCA9IGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wOw0KCSAgICB3ID0g ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0Ow0KCSAgfQ0KCSAgZWxzZSBpZihkb2N1 bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVu dC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxU b3ApKQ0KCSAgew0KCSAgICBoID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNj cm9sbFRvcDsNCgkgICAgdyA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3Jv bGxMZWZ0Ow0KCSAgfQ0KCQkvL3dpbmRvdy5zdGF0dXMgPSAiIG53ICIgKyB3ICsg IiBuaCAiICsgaCArICIgc3QgIiArIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5z Y3JvbGxUb3A7DQoJICByZXR1cm4geyd3JyA6IHcsICdoJyA6IGgsICdyJyA6IHIs ICdiJyA6IGJ9Ow0KfQ0KDQpmdW5jdGlvbiBnYWxfbW91c2VfbW92ZShlKQ0Kew0K CWlmICh0eXBlb2YgZ2FsID09ICdvYmplY3QnKQ0KCXsNCg0KICAgICAgICAgICAg aWYgKGlzX2llKQ0KICAgICAgICAgICAgew0KCQkJCSAgICBnYWwubW91c2VYID0g ZXZlbnQuY2xpZW50WCArIGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdA0KCQkJCSAg ICBnYWwubW91c2VZID0gZXZlbnQuY2xpZW50WSArIGRvY3VtZW50LmJvZHkuc2Ny b2xsVG9wDQogICAgICAgICAgICB9DQogICAgICAgICAgICBlbHNlDQogICAgICAg ICAgICB7DQogICAgICAgICAgICAgICAgICAgIGdhbC5tb3VzZVggPSBlLmNsaWVu dFggOw0KICAgICAgICAgICAgICAgICAgICBnYWwubW91c2VZID0gZS5jbGllbnRZ Ow0KICAgICAgICAgICAgfQ0KDQoJfQ0KfQ0KDQovL0lOSQ0KDQpmdW5jdGlvbiBn ZWVrX2dhbF9yZWdpc3Rlcl9hbGwoKQ0Kew0KDQoJaWYgKHR5cGVvZiBnZWVrX2dh bF90b19yZWdpc3RlciA9PSBBcnJheSgpKQ0KCXsvL2FsZXJ0KCJ1bzIgIiArIGdl ZWtfZ2FsX3RvX3JlZ2lzdGVyLmxlbmd0aCk7DQogICAgICAgIGZvciAodmFyIGkg PSAwOyBpIDwgZ2Vla19nYWxfdG9fcmVnaXN0ZXIubGVuZ3RoOyBpKyspDQogICAg ICAgIHsNCiAgICAgICAgCWdhbC5yZWdpc3RlcihnZWVrX2dhbF90b19yZWdpc3Rl cltpXS5pZCwgZ2Vla19nYWxfdG9fcmVnaXN0ZXJbaV0uc3R5bGVpZCwgZ2Vla19n YWxfdG9fcmVnaXN0ZXJbaV0ucG9zaXRpdG9uaWQpOw0KICAgICAgICB9DQoJfQ0K fQ0KDQp2YXIgZ2FsID0gbmV3IGdlZWtfZ2FsKCk7DQoNCg0KDQppZiAodHlwZW9m IGdhbCA9PSAnb2JqZWN0JykNCnsNCg0KCQlnYWwub3Blbl9zdGVwcyA9IGdhbF9v cGVuX3N0ZXBzOw0KICAgICAgICBnYWwudGlja19jb3VudCA9IGdhbF90aWNrX2Nv dW50OyAvLyBUaWNrZXIgKGluIG1pbGxpc2Vjb25kcykuDQogICAgICAgIGdhbC50 aWNrX3N0ZXBzID0gZ2FsX3RpY2tfc3RlcHM7IC8vIENoZWNrZXIgKGV2ZXJ5IHgg YW1vdW50IG9mIHRpbWVzKQ0KICAgICAgICBnYWwudGlja19kZWNheSA9IGdhbF90 aWNrX2RlY2F5Ow0KICAgICAgICBnYWwudGlja19jbG9jayA9IDA7IAkJCSAvL2N1 cnJlbnQgdGljaw0KICAgICAgICBnYWwudGlja2VyID0gMDsNCiAgICAgICAgZ2Fs LmRlY2F5ID0gMDsNCg0KCQlpZiAod2luZG93LmF0dGFjaEV2ZW50ICYmICFpc19z YWYpDQogICAgICAgIHsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5hdHRhY2hF dmVudCgnb25jbGljaycsIGdhbF9oaWRlKTsNCiAgICAgICAgICAgICAgICB3aW5k b3cuYXR0YWNoRXZlbnQoJ29ucmVzaXplJywgZ2FsX2hpZGUpOw0KICAgICAgICB9 DQogICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIgJiYg IWlzX3NhZikNCiAgICAgICAgew0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmFk ZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZ2FsX2hpZGUsIGZhbHNlKTsNCiAgICAg ICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZ2Fs X2hpZGUsIGZhbHNlKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlDQogICAgICAg IHsNCiAgICAgICAgICAgICAgICB3aW5kb3cub25jbGljayA9IGdhbF9oaWRlOw0K ICAgICAgICAgICAgICAgIHdpbmRvdy5vbnJlc2l6ZSA9IGdhbF9oaWRlOw0KICAg ICAgICB9DQoNCiAgICAgICAgZ2FsLmFjdGl2YXRlKHRydWUpOw0KDQogICAgICAg IHZhciBvbGRvbmxvYWQgPSB3aW5kb3cub25sb2FkOw0KDQogICAgICAgIGlmICh0 eXBlb2Ygd2luZG93Lm9ubG9hZCAhPSAnZnVuY3Rpb24nKQ0KICAgICAgICB7DQoJ CQl3aW5kb3cub25sb2FkID0gZ2Vla19nYWxfcmVnaXN0ZXJfYWxsOw0KCQl9DQoJ CWVsc2UNCgkJew0KCQkgICAgd2luZG93Lm9ubG9hZCA9IGZ1bmN0aW9uKCkNCgkJ ICAgIHsNCgkJCQlpZiAob2xkb25sb2FkKQ0KCQkJCXsNCgkJCQkJb2xkb25sb2Fk KCk7DQoJCQkJfQ0KCQkJCWdlZWtfZ2FsX3JlZ2lzdGVyX2FsbCgpOw0KCQkJfTsN CgkJfQ0KDQoJdmFyIG9sZG1vdmUgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQu b25tb3VzZW1vdmU7DQoNCglpZiAodHlwZW9mIGRvY3VtZW50LmRvY3VtZW50RWxl bWVudC5vbm1vdXNlbW92ZSAhPSAnZnVuY3Rpb24nKQ0KCXsNCgkJZG9jdW1lbnQu b25tb3VzZW1vdmUgPSBnYWxfbW91c2VfbW92ZTsNCgl9DQoJZWxzZQ0KCXsNCgkg ICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50Lm9ubW91c2Vtb3ZlID0gZnVuY3Rp b24oKQ0KCSAgICB7DQoJCQlpZiAob2xkbW92ZSkNCgkJCXsNCgkJCQlvbGRtb3Zl KCk7DQoJCQl9DQoJCQlnYWxfbW91c2VfbW92ZSgpOw0KCQl9Ow0KCX0NCg0KDQoN Cn0NCg0K ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=vbulletin_post_loader.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_post_loader.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_post_loader.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIEF0 dGVtcHRzIHRvIGRpc3BsYXkgYSBwb3N0IHZpYSBBSkFYLCBmYWxsaW5nIGJhY2sg dG8gb3BlbmluZyBhIG5ldyB3aW5kb3cgaWYgQUpBWCBub3QgYXZhaWxhYmxlCioK KiBAcGFyYW0JaW50ZWdlcglQb3N0IElECioKKiBAcmV0dXJuCWJvb2xlYW4JRmFs c2UKKi8KZnVuY3Rpb24gZGlzcGxheV9wb3N0KHBvc3RpZCkKewoJaWYgKEFKQVhf Q29tcGF0aWJsZSkKCXsKCQl2Ql9Qb3N0TG9hZGVyW3Bvc3RpZF0gPSBuZXcgdkJf QUpBWF9Qb3N0TG9hZGVyKHBvc3RpZCk7CgkJdkJfUG9zdExvYWRlcltwb3N0aWRd LmluaXQoKTsKCX0KCWVsc2UKCXsKCQlwY19vYmogPSBmZXRjaF9vYmplY3QoJ3Bv c3Rjb3VudCcgKyB0aGlzLnBvc3RpZCk7CgkJb3BlbldpbmRvdygnc2hvd3Bvc3Qu cGhwPycgKyAoU0VTU0lPTlVSTCA/ICdzPScgKyBTRVNTSU9OVVJMIDogJycpICsg KHBjX29iaiAhPSBudWxsID8gJyZwb3N0Y291bnQ9JyArIFBIUC51cmxlbmNvZGUo cGNfb2JqLm5hbWUpIDogJycpICsgJyZwPScgKyBwb3N0aWQpOwoJfQoJcmV0dXJu IGZhbHNlOwp9OwoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g dkJfQUpBWF9Qb3N0TG9hZGVyCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjCgp2YXIgdkJfUG9zdExvYWRlciA9IG5ldyBBcnJheSgpOwoKLyoqCiogQ2xh c3MgdG8gbG9hZCBhIHBvc3RiaXQgdmlhIEFKQVgKKgoqIEBwYXJhbQlpbnRlZ2Vy CVBvc3QgSUQKKi8KZnVuY3Rpb24gdkJfQUpBWF9Qb3N0TG9hZGVyKHBvc3RpZCkK ewoJdGhpcy5wb3N0aWQgPSBwb3N0aWQ7Cgl0aGlzLmNvbnRhaW5lciA9IGZldGNo X29iamVjdCgnZWRpdCcgKyB0aGlzLnBvc3RpZCk7Cn07CgovKioKKiBJbml0aWF0 ZXMgdGhlIEFKQVggc2VuZCB0byBzaG93cG9zdC5waHAKKi8KdkJfQUpBWF9Qb3N0 TG9hZGVyLnByb3RvdHlwZS5pbml0ID0gZnVuY3Rpb24oKQp7CglpZiAodGhpcy5j b250YWluZXIpCgl7CgkJcG9zdGlkID0gdGhpcy5wb3N0aWQ7CgkJcGNfb2JqID0g ZmV0Y2hfb2JqZWN0KCdwb3N0Y291bnQnICsgdGhpcy5wb3N0aWQpOwoJCXRoaXMu YWpheCA9IG5ldyB2Ql9BSkFYX0hhbmRsZXIodHJ1ZSk7CgkJdGhpcy5hamF4Lm9u cmVhZHlzdGF0ZWNoYW5nZSh2Ql9Qb3N0TG9hZGVyW3Bvc3RpZF0uYWpheF9jaGVj ayk7CgkJdGhpcy5hamF4LnNlbmQoJ3Nob3dwb3N0LnBocD9wPScgKyB0aGlzLnBv c3RpZCwKCQkJJ2FqYXg9MSZwb3N0aWQ9JyArIHRoaXMucG9zdGlkICsKCQkJKHBj X29iaiAhPSBudWxsID8gJyZwb3N0Y291bnQ9JyArIFBIUC51cmxlbmNvZGUocGNf b2JqLm5hbWUpIDogJycpCgkJKTsKCX0KfTsKCi8qKgoqIE9ucmVhZHlzdGF0ZSBo YW5kbGVyIGZvciBBSkFYIHBvc3QgbG9hZGVyCioKKiBAcmV0dXJuCWJvb2xlYW4J RmFsc2UKKi8KdkJfQUpBWF9Qb3N0TG9hZGVyLnByb3RvdHlwZS5hamF4X2NoZWNr ID0gZnVuY3Rpb24oKQp7Cgl2YXIgQUpBWCA9IHZCX1Bvc3RMb2FkZXJbcG9zdGlk XS5hamF4LmhhbmRsZXI7CgoJaWYgKEFKQVgucmVhZHlTdGF0ZSA9PSA0ICYmIEFK QVguc3RhdHVzID09IDIwMCkKCXsKCQl2Ql9Qb3N0TG9hZGVyW3Bvc3RpZF0uZGlz cGxheShBSkFYLnJlc3BvbnNlWE1MKTsKCgkJaWYgKGlzX2llKQoJCXsKCQkJQUpB WC5hYm9ydCgpOwoJCX0KCX0KCglyZXR1cm4gZmFsc2U7Cn07CgovKioKKiBUYWtl cyB0aGUgQUpBWCBIVE1MIG91dHB1dCBhbmQgcmVwbGFjZXMgdGhlIGV4aXN0aW5n IHBvc3QgcGxhY2Vob2xkZXIgd2l0aCB0aGUgbmV3IEhUTUwKKgoqIEBwYXJhbQlz dHJpbmcJUG9zdGJpdCBIVE1MCiovCnZCX0FKQVhfUG9zdExvYWRlci5wcm90b3R5 cGUuZGlzcGxheSA9IGZ1bmN0aW9uKHBvc3RiaXRfeG1sKQp7CglpZiAoZmV0Y2hf dGFnX2NvdW50KHBvc3RiaXRfeG1sLCAncG9zdGJpdCcpKQoJewoJCXRoaXMuY29u dGFpbmVyLmlubmVySFRNTCA9IHRoaXMuYWpheC5mZXRjaF9kYXRhKGZldGNoX3Rh Z3MocG9zdGJpdF94bWwsICdwb3N0Yml0JylbMF0pOwoJCVBvc3RCaXRfSW5pdChm ZXRjaF9vYmplY3QoJ3Bvc3QnICsgdGhpcy5wb3N0aWQpLCB0aGlzLnBvc3RpZCk7 Cgl9CgllbHNlCgl7CS8vIHBhcnNpbmcgb2YgWE1MIGZhaWxlZCwgcHJvYmFibHkg SUUKCQlvcGVuV2luZG93KCdzaG93cG9zdC5waHA/JyArIChTRVNTSU9OVVJMID8g J3M9JyArIFNFU1NJT05VUkwgOiAnJykgKyAocGNfb2JqICE9IG51bGwgPyAnJnBv c3Rjb3VudD0nICsgUEhQLnVybGVuY29kZShwY19vYmoubmFtZSkgOiAnJykgKyAn JnA9JyArIHRoaXMucG9zdGlkKTsKCX0KfTsKCi8qPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PSpcCnx8ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCnx8ICMgRG93bmxvYWRlZDog MDU6NTIsIFR1ZSBKdW4gMjR0aCAyMDA4Cnx8ICMgQ1ZTOiAkUkNTZmlsZSQgLSAk UmV2aXNpb246IDE1MDkyICQKfHwgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKXCo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09Ki8= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=qiplogo.gif Content-Type: image/gif; name=qiplogo.gif Content-Location: http://forum.qip.ru/qipstyle/qiplogo.gif Content-Transfer-Encoding: Base64 R0lGODlhLAFVAPcAAKusqpulkyS+AMnwqbHTlL7mo7rioMz0rNvmysPCwn6Wacft pofVR2zSUaTEirOysrzhnYWVeObl5czrr+Lh4aOsm7G2q0bEAcHmoc/YxpeXlb29 umvMFpjZWbHXmazNkJSnhTXAAFTHAcS7yIKcbVXJMKXcZrbDqdHR0Gl6Wuvr687M zeDm18HDvYqkc5y6g6y3opSxfKi1nMbTt7/DuVnGGr3TqL7kodrZ2WHJAsrIycvC zaC+h6rKj9XV1d7d3azRlZCsenSKYi2/AJObjLbZmaTdi53ad4HHZ3XIPM/Qyrm5 uLbcnLnQpIyWg+nn58LbrLPZm7rgnsXqpKLBh5zQh8bspm58YtrS3HqOa8vktW6C XJm3gbzjoTrBAEvGFHPOKLndm8Trpry1u3KFYrrenIKOeOjo6K7QkoegcYXFTdjW 1rjendHgwbngnsLppPHu7uvl6+rr41prS1/BO3yKcY3VTajDkpnZZrCwr7zao4LS Qbnfno2gfcjKxuPb5c7EzzvFGoTTZZ64ira2tWfROZ6vkMbFxcPoo9/Y5GXHPc/K 0tXaz+Tj43SAaq3Dm2jRJ7e1smbLJMzJyo+ufXiPZeji683LzMXHwszMy8C/v4a7 ZtjY19PT08rLyY2od9XR1rjYnbPJn9zZ3bPchsXlqJ+dnbjbmtvc2r+5wdD4rqfH jHiGbTq/DZe0f8W+ynbBVomQgtfT19LT0evr5+Tl5eXj5XzPNsXtp871rM/3rcHo pMryqs72rdD/rr7losvzq8TspsPqpcvyqvTx8fbz8/f09M30rMnxqczzq+vp6e3r 6+/t7fLw8Mjup8TppLTXl+Df39vb28/Qz0hWPPHx7W+AYr7OsOTk5JG/dsDXqrPj jKq/krnilLrhm7ixu3/QUsHft8fuqLrgrRm8AELFJKrdnMXspqvPmZrfcerq6qDb YOvp67fdnLvfnMvJzbXUqbPeoMXrpdTV0pm3ca7Qna3ekYrEbo6wfYrYe73louPg 5rfWnHjQLarboHeJZywAAAAALAFVAAAI/wB9CRxIsKDBgwgTKlzIsKHDhxAjSpxI saLFixiBaNzIsaPHjyBDihxJsqTJkyhTqlzJsqXLlzA9yJxJs6bNmzhz6tzJs6fP n0CDCh1KtKjRo0ijKF3KtKnTp1CjSp1KtarVq1izat3KtavXr2CZiB1LtqzZs2jT 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 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=navbits_start.gif Content-Type: image/gif; name=navbits_start.gif Content-Location: http://forum.qip.ru/qipstyle/misc/navbits_start.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAPcAAL3Zs3HIfW7EenPKgGvAdr/ZtGq/dXOMdrHZqbTCuHXLgnHI fnXNgMPZt627sG3BebHZqlu6aXmgf1u3aVOtXrfZr4DZkH/XjrbZrsvWz2TDcG7B fEucWGXAcGe7cq3FsXPIgGi7dK/Zqb7Zs6vZpZurnmGza63ZqL/LwrvZtFOpXKGw pF6yac3Y0M3W0HvSiGa8cXDGfcnZuly4aZe+nFeuZVKlYHedfcXZuqCponTQg7fZ r4+xk2i/d2S6cG7CeWu/dni0fnijfrjRrrbBucnSzKi7rLrZsISdh2m/dLnZscXZ uW/Fe2S2bmS3b8zZv1yyaG3EeMTZt3XLgnnPh7bZr2e6cnOaeJ3KonTLgZ22oWS3 b3nQhsPZuI++jV22bM7Y0GrHdmC0amO0bbbLuWq/dW+XdFioYXSqeYa5iGvCd3ui gZOul0qXVXegfDZ1P1KdXcrVzW7MfqPFpMjZvFyyZ3bOgrHZq1eoZHDNfWi7c3y4 fai5q4y9i3fUhoCghGOzbrfZrl6qaWa5cW/Fe3ubfXvWiVClWsvZvYS6hHaffL3Z soG0grPBtqi/rFOqXZm6nNDY07TDuJarmUmCUYa5h9DZ0wAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAJYALAAAAAAPAA8AQAjJAC0JHEiwoKUgdQYZEBBg ip0LeDjYiICCIJhFAAAUKIChipIlPATGOSTGB4wkaqIsGPCGksE5UhDtKbGiUQIH RLBo6BAmjw4/hiz0GNIFRyAjAs+w2KKHgIAYIKjA+QIlksGrV138KcQHq8AWJ+6I 2DHiCAQEMtBMQvLBEaREaSox8tKgQgoAWjKoGGMFCJMBDF7I6fOEDglJlshQaOKB AKEAWbhsaFNjRhGBNB6ZcBKizIMfCgRNAESQjZkrN9ZIcKNIyIEclgICADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=navbits_finallink.gif Content-Type: image/gif; name=navbits_finallink.gif Content-Location: http://forum.qip.ru/qipstyle/misc/navbits_finallink.gif Content-Transfer-Encoding: Base64 R0lGODlhHgAPAPcAAAAAANnZ2XfOg3rShnXMgc7Y0H7Zi3zWiXFvcnnShHPHf3jN hHiefZe0m3qfgHbNgnXSgITZjlGCXJiwmE1/VNDZv27Ed3bQgnPMfmaRf3PJf3vV iNbZ0EByRsvWz1q0aMrWzXzYiaO0pnvYh83W0Gq/dYOKhniReIbZkXHLfXjQg8LL xXrThXqggHvZhGnKdbrDvWXDcJuXnnWde3Wce564nnt5ex4eHpCXknPLfpqSmG/J e6u/rWmBd2mNfMvUzn7Wi5aSll+BZTxuQn6WfYbJjjx/R3Wgi9TZy7O6tZTZl3jY hW9/cp2kn6OXoYjZjnTLgdXZzn6WfEeGUlyIc3HQfqi1qay6r2/KfJPZlnHHfXvW iGvCdlqjY47ZkmG+bHTJf6WmmqLWqG+AepK0p6KypqmkqLW/ty+dQXvRh2PZc1Wu Xp/IpW/Ge2zMeVV9Zau0nqK/mqG0opCnkaunq5enmHTLgW6Ecau6roTZjNXZzavJ qn3WimnBc4+jkoHZjXnVh5OnlnuhgV+la1l6Z7y9vHXNgXd7eHLJfn/XirrQvnqj gY2GjqO4pXiidHfRgnXMgYnZkKmqp3WdeYjZkI+nj3XNgKa6qNDZ0wAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAJgALAAAAAAeAA8AQAjoADEJHAhgoMGDCBMaLMgQ U8EbmIpUecRiwwE+QCIM6nHkzRmEBRUOLBAljAxGAQo5mZKljkiFHr5gSYGBgB0o DyAZGZIw5EtMezgEcGQiwKEyVmCAVCjGRZ4nlFBE8qKkhI0gOtaI+ImQy44cBCwJ ELBghIQMHX5wXcv2J4lKc/BgwpGkbcICFfTAkRQgAB00SIi05dHokpwacSackOIH gRkmagK1BeEGAqAtIQwY+LNEyBgyFK7YVfTC0AUVCQakSdSHkA8qK+xiYhOjjRZE GsAoGNDlgwXZAhvMcDCJhqAWDBbdaYIpIAA7 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=reply.gif Content-Type: image/gif; name=reply.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/reply.gif Content-Transfer-Encoding: Base64 R0lGODlhbgAaAPf/AIy0i5i6m26kbdHY1ZajmKrFrk5+WLO6tfT//I3aj9ng3dXg 23KEdOvs7P3+/mabZquPftq1mXatdIh2eWqgap/lqN7h4HzMgr3EvmuEbczZ0YbS hzZcT0RyU1yjX1aIXLzOwd7t6l+RYmefZ6OppnTDeVuOX4zSjVpzXoeQie7HpPj5 +pOalUxhVIKfhD5pUdXj3+vz8ZfgnJZ/fLeZh6+5scfRysvRzX7JgEJvUrXAuHy6 emV1aImKimOYZHCobzhPSsPIxaqxrHuyecCjl/X19oOsgub29n/BfeLn6MTWysmq mHXDeYvNiqXBqOvv7nOqcXW5dOby70p4VnuTfVqIXoLEgXy8etPi3tve3ZuonXN5 d7nAvJKzk/D9+321e+Dk4zliUHnJfW+7clOEWtba2IuWjrLJt3zEfNPd2pvfoZLZ lGGWY32ifWuba8fMyMHGwuPv7Pr+/WKRZW6xbYrYjdvl44fVisKijdHT0k91WLvI wGWpZW+/dI/dkmawadzm4oygjoysjaOzpYPMhM7Tz+78+oDEf3e2dc/c1d/q5VN/ WsfWy53jo35tblJsWFFxWIbIhcLPx4PKg+W+nWRjZefq6X+9ffD595+won3BfGp7 bXq8eHvGfYathnWcdYehieTs75CHi0JcT3jAeXfHfILQhX+WgXLAdtOujX7Ffn+o fXbGekRmUkyNVrbNu4Kpg+349cC/vWKAZG2RbaC9onnCeOv5+dLLzIanh2y4b3+5 fXmieMnOy5Pelm9hY4Wrh3igd32+fFx8YG2jbHaxdHO1cvLz83q/eTBSTvDz81Jl WIfMhXSNdo/TkOLy8HC0b4GrgKHmqtbk3nmLe3OucXivd3Cgb+r39aHoq8DSxleC XHm5eD9VTZnjn4PHgnW2dGm0a/z8/EppVGeUaKu0rvf399fY12OsZe/w8S5DRpfc mm9tcPv7+3nDerHCtK3Ps4F+goK/gMvKx9vj3trm4WFbXmyia66lppCPj4ioiUhu VfL19vTy8v///+fu8SH5BAEAAP8ALAAAAABuABoAQAj/AP/9s1HoBoYDB2qUEyJk EImHB2wMSEOxIsUBByRNHKABhsePIEOKBImlpMmTKFOqXAnSTpJQAmPK/Lcnl403 DsxYcCBnBSZMMeIoAgQojixHEShFwAOBgQ9wV6Jy4hT1CjhEAAJ0geVmBDdhYMOC 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 FxMBAQA7 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=post_old.gif Content-Type: image/gif; name=post_old.gif Content-Location: http://forum.qip.ru/qipstyle/statusicon/post_old.gif Content-Transfer-Encoding: Base64 R0lGODlhCgALAOYAADtXWJfNp4bElr/j0rTcx4HSk8Dk06bVuL/h1NTz6dPz6YDR knKGg7/h1HaNidLz58zy33yVj9b061N+Z4aemZbKqHWMiG+JgqjnuCk4O3GGg09n YbPbxqbit8by2brwy1R5ZrPbxlxwbpbMpuj/+XCDgaXUt5PYoofBmYXDlb3h0L7i 0UNmXr3h0dDz40VjXTtWWEZhWHKIhc7y43uTjiQwPWiEel9+cabTt2F0ckFiXic4 Pt338i09P7Xrxpbepcfs277g0yo5Rd/584zmnY/snztXWElaWlVsZ0N8WAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAEkALAAAAAAKAAsAQAdngEcRGgwMMjQ7SUkgJykC jwIoPzEODysDmAMtEjkWD0EICA0qMy49Nj4mB6sHOB9IQjpGALQAMCw1FCQKCb08 QBlJDgoIBsYGDUMlFx4cBM8EIRAiNx0jAdgBFRgbE0QLBeEFC0UvgQA7 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=menu_open.gif Content-Type: image/gif; name=menu_open.gif Content-Location: http://forum.qip.ru/qipstyle/misc/menu_open.gif Content-Transfer-Encoding: Base64 R0lGODlhCwAHANUAAP////3/+ne/dWyWap7Akb7du4fFh47QjfX/87/QsmdwYP7/ /fr/8en56Nvz2XuqerHRr3KjcOP14YrDib7fvIqpgOL/y3e/dPD/2JvbmlZ2UX64 fc3uuoehdPP/23esdrTWsnCYb4PEgnSGZJW+jMXfw2h3XMLjr6rJpna/cwAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAACkALAAAAAALAAcAAAY0wEOJUgBBUARSJZIBOJ8M z0lzcTwBCwzHJEiJJM+AZbRJmQ0NZ6DzMLsnCEAi5K5/FIN6EAA7 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=avatar118090_1.gif Content-Type: image/gif; name=avatar118090_1.gif Content-Location: http://forum.qip.ru/customavatars/avatar118090_1.gif Content-Transfer-Encoding: Base64 R0lGODlhUABQAPf/AAgJCAwXDBgaGAkkCRkmGRo4GigpKCg2KDY3NgtFCRdBFxBS CwRsBBlpETdNNzBbLi9mLzdxM0VGRUlWSVVWVV1oXVF7UWVlZW9ve29+b3R1dHJy fnV4dXx8fHR0gHp6hX5+iQabBQuVBwmcBgydCxWRFRGeEQ2gCRSkDRagFhmjFxui GxupESqMHDOdMyKuFiWvGSqzGzG4HyOlIyimKCypLDOrMzmvNzquOja6JD6wPT7A KEqpOECxKkCwP0a6Pkq5MVSMU1ibUkKuQkSyREe5QUq0REq1Sku8Q025SVupV1K+ SVO5U1u8W2+WbnqEen6cfWC/XWK+YmuxaHmueUXGLUjENEzKMlLNN1rTO2DXP1jJ R1rAU17CWF7TQmHNTWTHWmXaRGzUVnDfTnLWXHHbVXTZXGXBZGjDZWrCam3IZnDH bXHKannNbXPFc3XIdHrHcX3CfXvNdXvJennXZ33Tcm3gR3TlTHzqUoDNfYDabYDV dYTVeoTac4fZeojWfYnae4HuVYPoX4PwV4XxWIv0XJD3XpD4X4PiaIzhdY/2YJDi epL1ZZT1aZL4YZj1b5n6ap/ze6H6dqL5eIKDgoKCjIOJg4uLi4aGkImJk46OmJOU k5SUnZubm5eXoJ2dpYaqhZ+in5W+laOjo6Ojqqqrq6yss6uwq7OztLS0urq6vr29 woPMgojOiInVgozQjI3Yg5LVj5Pch5PZi5nei5TTlJrVmprblJzYmpbjgprkh5zr g6HcnKjGqKTboqjUpq3SrKjepKvcq77AvrHesaTjmKnmm6zrmaj4g7D7i7Lzl7b2 m7X5l7r3n7z6nqrgpK7hqq7ooLDmprLirrDppLXoq7ruqrjjtrn0orzwq7/wsMDn vsD1q8D7pMHysMLDw8XFysbIxsjIzM7O0cfZxtLS09XV2Nra3N7e4MPmwsboxMnr xsvpytDsztPt09nv2drw2uPj5Obm6OTp5Ovr6+/v8OPz4+r26u747vT09Pf3+PT6 9P7+/gAAAAAAAAD/ACH5BAEKAP8ALAAAAABQAFAAAAj/AP8JHEiwoMGDCBMqXMiw ocOHECNKnEixosWLGDMe1Mexo8ePIEOKHElSX0V+KOvRk8eypcuXMGPKnBmTnj6U /CCi1AeOlCdNQIMKHUq0qNGjRj15MmUOpUOU5jyBwERKldWrWLNq3cq1K1dUnipV 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 zviM0BiN0riMAQEAOw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=icon1.gif Content-Type: image/gif; name=icon1.gif Content-Location: http://forum.qip.ru/images/icons/icon1.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAKIEAJTWAJStUmtrAP///////wAAAAAAAAAAACH5BAEAAAQALAAA AAAQABAAAAM1SLrcTiI+J4B4MUerpRggmIUiRJ7k9Q1B67JBuaKnCr5uK9OoDeO6 gY8XGhKFkI4yM2k6HQkAOw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=stranslitlogonx7.png Content-Type: image/png; name=stranslitlogonx7.png Content-Location: http://img338.imageshack.us/img338/5594/stranslitlogonx7.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAANcAAABTCAYAAAAMXJJ7AAAACXBIWXMAAA7DAAAO wwHHb6hkAAAgAElEQVR4nOxdDXgU1bn+kmw2CQkJhF8hIEhoKggEwo8IFgsiolYv CsViVdpauHiLIlauqC29PFQpXr36yNWKeItaUQoVxXLlasWCgVQl/CTyH1SQPwEl aCDJJpvc9905E2ZnZ3ZnQ3azyr7PM5nNmfM3Z853vp9zzncSLr744vp+/frJ+YTy 8nJZs2ZNKX72be66xPHdhWvYsGEyf/58SUxMjEqBiV6vpH7zjSk0WSRB+1Wb0kI8 aRlSVVkrdXWNLycB+aW1cPl+u6sqJAHl6jhSfkZy13RrfOYKBQUFfWpqaipKSko+ PefMTOjbt2/3pKSktC1btuzg/wMGDCjwer1Ht23bdqipy4ojMnDV1tZKq1atBB8y OiVWVoocOGD7OKVjR0lvlS07j7ilsqpxRaSmiFx0Ee7uOq2sr77ye96pXY6jfPr3 7/8L3Cbiyub/9fX1xQkJCas9Hs+a7du3e+rq6v6GdivEo1saV1N7IN95uPURxV1R 9iYMgPPxc3ZTlxVHZODyGkb0qKC+XqQqCNXU1Phu1Z7g0eyQDTLomYvOWYPEpbtF Tp/2j4CBxJuRGTIfcIo/oUNPxs91iqiScF2L/6ekpqayw5eGX7s4zif4OFc9O3y0 wLKqq+2fK2L3eIJHM4NiYA9wqy5d8M+XX4rs3NlAqA3o1k2ke3epOVkbNC9wrKGK sBZCLJuuh0+YMCFp7969v8KzSuc1i+N8RfQ5FxWpYFRTq3X8mjCIKwViYN8+GteS sjLtMsIF3YtGm3bt5EtIiB99VBEqy178AyJaZQxcvnw5G+tJc2QQ4/W43S2a+Fjm crmmf/TRR0f159SXkNdv8bMrLi844NqUlJQ5RUVFPiIl0ZaVlTH9JFyUz3eruLaA TpYHMXEm8irEAPCSqsc0lDMJYRn49yvcF23evHlZqJeNIzJIJHE1C+eyuxRxeWqC R9Ov9BYiQy9Fr84ANRYViWzf7h8hNRURhvoIa88ekQ0bKCkGH1DQHj6lEJ3zVgdv dDWuFxH3AK6t+D0O0sCz+kN0+BHIb6PK7xncVuD/adXV1cv1OPv27VuM22O4aBhZ IxqB5dsV2K9fv87Qyd5Ffn2g/61U5TD90wijwWMRmxDlvJqfn3+3g3eIIwLwiYVR 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 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=f_personalm_9848d6d.png Content-Type: image/png; name=f_personalm_9848d6d.png Content-Location: http://img01.picoodle.com/img/img01/3/4/24/shedko/f_personalm_9848d6d.png Content-Transfer-Encoding: Base64 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 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=f_stranslit03m_ef0fa07.png Content-Type: image/png; name=f_stranslit03m_ef0fa07.png Content-Location: http://img06.picoodle.com/img/img06/3/4/9/shedko/f_stranslit03m_ef0fa07.png Content-Transfer-Encoding: Base64 iVBORw0KGgoAAAANSUhEUgAAAY4AAAHYCAIAAADVsZjBAAAABGdBTUEAALGPC/xh BQAAAAlwSFlzAAAASAAAAEgARslrPgAAKRNJREFUeNrt3XuUHVWd6PFdpzshJJCB dJpAeEWb7oQm8ghEeYz3Asq9gjroHXlkhRGXcB0hjjM8xMAMysMoL0GuCKPjKD54 OTDiVYFZPoCZe5UAF0IMTZsmykOCIQmBDIQk3X3q/lFJWam9a9euOnVO1e+c72dl ZVXvs2vXb++q8zt16tTD831fAUC1dUf/mD9/ftnxAID64x//ODY29vLLL4cl21LV /Pnzp06dumTJksHBwX322afsOAF0tPHx8d+vf22f975/y28eX7tmjVLK831//vz5 CxcuPOWUU36ybF3ZEQLANkf/+exnVq9ZdOw7165Z062Umjp16imnnPLTZes95ZUd GwBs8+v/s3LO0QdM+i8nKKW8I444YsmSJc+N7Vl2VABg0HtE37mHHNCtlBocHHz+ NxvKjgcADMaU193d3a2Umj59uue9VnY8AGAwVvf33HPPbqXUpEmTah5HqQBU0aiv VHiyApkKQDXFUlWt7HgAwGDU91SYqixfAM884UC98LPXfnvw0CMbjODMEw4M2vnO jZcf98HT9nv7nKwzWkqa5CufW/Tx869USn3r+kv/7oqvNXtxQJX5a1/6xS03rn7m 6UJam3ngQe8552+93r1j5aN1X0X2qhJT1Xd/PhxMfPS9cxZfe+vgYUWmA095nud9 7O8uC/584O5b9+ub47KIYEZ7STP85cc+/e0bLg0mWrA4oMr+9bKLF134iaOP+nwh rf3q109+7bKL//Lm78XKd/gCWKs5vetqNc+xpqNYg7f/41WXfPk7LovQIyk8NqNZ /Qee/4Vbmr0UQIQ3Xl1/1LsOeXNoWSGtHfWuQ65+db3+Lt7qK6XUtkNU3o5WPfPU DZeee8Ol50YLY/XOOH72Iw/eF9S5+9s3nnH87DOOn33/3beGry575KH77741Whhr NmzwjONnDy1besbxs5VSX7zgzDOOnx1d7re/ctmal563RBIt0SPxPO+RB+8LClc9 81QwEf4LlhuGuuyRh8K5Hrrv7jOOn33Dpee++LvfepE4Pc978Xe/DafDiUcevO+R B+9LigFoP0opf7xeHx2L/fvxihcX3bP03LuXnvMvS//1qed9rUSfpT465o/X9Vzk ed5YXanIsaodDqt/ftGpn/nSP8076rhYeqspL1rzpeeevXDJ15VSp511/mlnnb/x tfV//aF3vePwY/bvm6OUWvbIw2edf8XhRx1//l+dEBTqzYYN1pR3x0PPLjj2gH+4 /nsHzTsqulBPed6Oy1VKffH8jxpj0yP51S9/MvzUY9+6b9nOk3dRSt3x0LNKqdiC Vj2z/NSzzps99/DPnfuRr/7g36fvMfPBn/7guZVP3/HQsyNDyy4++y++fu/Sqbv1 hEt59OF/iwX/zJNLPc87+vgPJI0G0Jbq42Pjo1tjhfcPv3Tn7f/oeapWq516+ic9 v/5vv335zjtu6erq6urqOmXBOR/s7zU2pbRcpLbvVZmPVf2Pj35q1TNP7d83Z/qM mdHyMJUG5s47Kvhz44b1//Gze4eWPaqUenPja0HhUced5HnezP3eHhbqzYYN6hOh sy+4Uu/VpTd8P5rRTv+vfcGMeiS/+sVPTvrIxyZP2TXWQnRBQUcGDjpMKfXKSy/0 ztj7G9decukN3w8L//D7kYPmTQ/mGnrykSOPO/GH3/ta2MLQsqX7vK3/mPd8MGjN OBpAW/LHx8e3xlPV8bOmnb7w3Ltuv9n3/Ttvv/nU0z95+21f6+7urtVqpy9c9O69 d9VnCZpSpuPmYzt8Aazt8O+0/3nevm/v/9Sp716/dnVYGFQ3/vkvt35l8i67/M2l Xw4Lo6+G07Fm9cqxRST906uFJXok/+///lxZW4hN77TzzkkVlFJbt7719LJHZvUf GC3cZerU19av8ZJHg3/8a8t/Sqn62Nj4ls2xfyfu92fH7ftnpy1cNDY2Vq/Xb/ve TV1dXZ7nnX7Gp46aMfmk/XfTZxnfsrk+NqbnIq+mtvqRXwC7al2xTPbuE06+8bK/ Xbv6xRl77RsWdnm1aM3wz5/de/vF1/zz5k1vRgujlcPpWLN65bEtW2LBfOPav//A 6WfP3Pdt0cJYJGGJHsk5i69a+uD9AwceuvOUXZJaeOHZ4UOO+POVTz+plNprn1nh XGHhwIGHBpV/+eMfnHX+5bGY3z4wVym17NcPHX7Me5JGA2hL64ae+v2P7owVep7X 7/sbdt5vwcJFN/2vK7u6arVabdGnPz/4xguz//j8736jjDcfftukycqUizbtcKxq x6PuX7ro7Mf+42cf+/SlB88/ZocIdvyVLfzzkuu+9cULP375TXdEC6OVg2m92Vjl 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 MqqZNjaX63sdtx/jYKZubKnhhad6Wk5tzxSMaCXvVVne/+7JwjKXcRGFX0nQSKaz S73u16U7jsPicklwK6XGnDXCfA3mqOO++rJeveyyjspda81T8p0V8n0PN67p1IVa 5nK/QsJY0+UMzKTzhnOfVNngqLqf2527JJZPs/bXZcVZBqeojS1fqJYI/ba7bLs1 WpqqYtucy+W1mRpMraN/Klra0a+YTbqG1uVzrEnbjXt3Cok503exBj/VXVac4+yq iI3NPVSX+vb9r1h5poDbda9K5MkKLfhNJNN1YZlCjb5z/ISrtOz7bq3X+KJz9LfF ETab3Mu2K6LMY1WWjwvf4aJQl7mU9mnv+BmV6dqorNevuiw6/Lpkn9GlOy7D4nhJ sIusc+nHg1NHNUeELrNn3X5Sj+77Fbhsu23yXTmXK0e/t7vUN5a4NJj09ra341KS aRGWudwPBjsGkG9Yss7lMlDG8kz5K+tQZOpOUSX2HrmPfI7RztS+dNG7gI6XHQza 9pgo/UU+NVVTyleln6yAmE57x1a8vxUPr6OIPKwOoNOQqgAIQKoCIACpCoAApCoA ApCqAAhAqgIgAHcBBVBdYWpirwqAAKQqAAKQqgAIQKoCIACpCoAApCoAArT04Vqx Eu6wAcBRS/eq/IiWLbQTHlHbCX1sGQazmralqlr7rhi/Ax5R2wl9bBkGs1LC1FSJ u4CmPnnY/jTm2POHo7MYH1Gb9XnFxoCNj6I0NpLasjF+9/GJ9TE2r71HqTFnegp0 jjGxr2v7EhvZcuxPgU4KIDaqxoFNHWr7ekndQlSn3uW5/FSlb+J+8oNzjW+GpHep 4+KUtlHmeJJa6nNuUxdteWJlpngsiSN1OuszTuw1XcakkXHW11TSlpN1I7GPbVJ3 /LQHPqduDy7BZ90e2kb5qcoo3N+xfLJlYpzRstPUjGazthl9M7g8mtgStiXORobU vuOQu51Glpi05VjGxFjN/ZMvtnTltrJS2T8DGmlZqIqmqtiTsi17/plac6/sspQc T751YdmdtLz97MGkPsQsRy/0r6v51o77sSHLbku4ROOW4z7OLoMZq6Z3OevOaY6R b0azFddu51X52tN67W/v3AtqUrMurWXqo6U1x0e3Wp5+XFSm9nd89GYLlmgfoty5 oMDYXJrqqN2r8veqfO0JsfpnddJjxI1blf3Qo5/recWW4w6Ozbr0NFxWtI6x5UyH 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 kKoACECqAiAAqQqAAKQqAAKQqgAIQKoCIACpCoAApCoAApCqAAhAqgIgAKkKgACk KgACkKoACECqAiAAqQqAAKQqAAKQqgAIQKoCIACpCoAApCoAApCqAAhAqgIgAKkK gACkKgACkKoACECqAiAAqQqAAKQqAAKQqgAIQKoCIACpCoAApCoAApCqAAhAqgIg AKkKgACkKgACkKoACECqAiAAqQqAAKQqAAKQqgAIQKoCIACpCoAApCoAApCqAAhA qgIgAKkKgACkKgACkKoACECqAiAAqQqAAKQqAAKQqgAIQKoCIACpCoAApCoAApCq AAhAqgIgAKkKgACkKgACkKoACECqAiAAqQqAAKQqAAKQqgAIQKoCIACpCoAApCoA ApCqAAhAqgIgAKkKgACkKgACkKoACECqAiAAqQqAAKQqAAKQqgAIQKoCIACpCoAA pCoAApCqAAhAqgIgAKkKgACkKgACkKoACECqAiAAqQqAAKQqAAKQqgAIQKoCIACp CoAApCoAApCqAAhAqgIgAKkKgACkKgACkKoACECqAiAAqQqAAKQqAAKQqgAIQKoC IACpCoAApCoAApCqAAhAqgIgAKkKgACkKgACkKoACECqAiAAqQqAAKQqAAKQqgAI QKoCIEC3S6Vrvnxz2XEC6GjpqeqiC84tO0gA7e/111+3vJqequzzA0ALcKwKgACk KgACkKoACECqAiAAqQqAAKQqAAKQqgAI4HS2OlBN11133ejo6JYtW8oOpBg77bTT hAkTLrzwQrqsI1VBqquvvnrPPfc87bTTpk+fXnYsxVi3bt1dd9119dVXf/azn6XL MaQqSDU2NrZgwYLddttt06ZNZcdSjGnTpi1YsODaa6+lyzqOVUGq0dHRadOmbd68 uexACrN58+Zp06aNjo7SZR17VRDM933f98uOouAe0WUjUhVka7P3LV1OQqqCbB34 vu3ALitSFUTzfb9er1sq9PT0hNPr168vO16nHjXYZXHjwBdAdLqenp7o2zL2Z+do j3EgVUE2+2dy9NV169a1x1enHL2IzSJxHEhVkM09VYV6e3uDibVr1wZ/RifCV8MK llmic+mVo+1EKzS1yy6z+L4fC9IYYXRk7N3X6xSOVAXBxsbGNm7caKmgv9rX17dq 1apgure3N5gOqwUTegXLLOF0tCSoEy5Lr5BkypQpDXbZZRw2btxojDDsXfBSUG4f McugOUrtcoBUBdnsx5iNr0YL6/X6yMhI8LYcGRkJXopVUEr19/fHSoJZoiXRmmEL 0abCWUZGRprXZZdZ9A6GgfX19Y2MjPT39wf/J3VWL9GHqFikKsiW4wtgtNA4HSsc GBhYuXJl8OfAwEDwql4S1gxLYk2Fs/T394fThXfZZRbLCKxcuTIIL+xUNHK9JOis cYiKRaqCYKm/3EdfnTNnzvDwsNL2KcLygYEBYwXHkmD22KtJ+y9JYTfpZAXHvSo9 7Fh3ksbQsXf5uhwgVaFtDQ8Pz5kzJ/pnrDAo0cUqxNqxLM5eIXW5rRwH9464jJjj EDWCVAXZ7B/gQ0NDes2wMCgZGhrSJ5JmCQrDmuFcekl0IimSZnTZfRz0CGMtJw1I UmeL6qARqQqC5fs2lKoZbbr3qJQul4gvgOgIhb9vly9fXvFcUPHwmoRUBcE68I4o HdjlAKkKUk2YMGHDhg177733iy++WHYsxdh33303bNgwYcIEuqwjVUGq7u7ue+65 55RTTjnggAPKjqUYr7/++j333NPdnfiu7MAuhzyllO/7P1u+9p37Tyw7bCCbq666 anx83OV2tyJMmDChq6tr8eLFdDn06PNbl4xPenjeVFIVgOoKUxWPgQAgAKkKgACk KgACkKoACECqAiAAqQqAAKQqAAKQqgAI8Kfz2R99fmuO+dvqukkA1bPG26iU6p41 a9aBy14qOxgAsPFmzZpVdgxAuueee67sEFCm/w+EK9Nsc6TzJQAAAABJRU5ErkJg gg== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=user_offline.gif Content-Type: image/gif; name=user_offline.gif Content-Location: http://forum.qip.ru/qipstyle/statusicon/user_offline.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAPcAADddflZ9clW7eGSCgV+5eG1rdmWAgVJWZ0GJfKyqoVh1c1xZ TEZBNXd6i5CZqFvAdFy8daqllUNxcc7LwEBUY9HS3sPH0V3YflGef1K0dk2pe4OD ikiXel3BfYaGj2lpbMvL0efr+Ovr8mJ8flnSfejo8kubdebm737shE+ScrO1v1ac cLO0v+Pj7KH3rIfdk0VOWm5ufpaWnJC7q3l7iZ+fqIKAc0GAdoN+fmJiatXY6L/W 37bA0WfKetbX5dHX5GzOfa2wwa2uuW1qXsjI0l+wg6KnuX3+hz6Kf3L4hFxhaby9 y6jtvE+xeaWlqT5QY1O/fZutsoGTnjZbfUNEU9PX597f64aHkvDw9lmAc97l9MnK 2U9TZUKIfcTb5VV8cmW6fUNAQ02seEJQXtne7Nzd63L3ibGzwi0rP6j0t7O1xunp 9FSBcq2qo3N0fkWdhJmcrEymd9rZ2WjVdZSVoFGxe1KDcIafpVmpck6deKCwvEqk dzVVcMfT4tTV4Eacf46bqWzwjTp3iJajsFZ/cnl2aTt1f1WHcubq9k6td2trdaS+ wkKLfcvN1zYwKuPq95edqdnZ3re3vlGwdp+eptLS21eEcZGfrWzIe4+XqD9qeYuK jNDR3K3Zyle1dkhFOUtrbG94iKK7wLrO2o6RoDRoiMjEvszW5UhkaXeLlGhsflqI dZucqpGXqUhHUq2trdTX6PX1/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAALEALAAAAAAPAA8AQAjfAGMJFPhDz51BFgYK3MEo QBsinCpsUQOnARUlTC7FelHKQIRXTmRs+MCAQhI+A/skMpHikCU7K+b84aFwVJw3 GFYpYNMhEAdIAr3k+TIBi4gWlVjQcRMG1REHsYAYyoLjCqlWgKQcGJNmikKBVRbN EKXj68BTeDRAIXFBgAQVCrVkEDTARqEhCz6BMoOgUaxHmAAkkBMJhKQaHnI4ItDE T6cuI0ydKLHGyhJWNFzBcJEqxB5NmygJORPESKZQaKL08BELkZgbhBQViKGKyxMU SMooJANmkicID+oUgTUwIAA7 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=report.gif Content-Type: image/gif; name=report.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/report.gif Content-Transfer-Encoding: Base64 R0lGODlhFQARAPcAAOb05P////8AGf8AMfv7/P8AKP8AMv8yWjNDRzFCRhUpLf8A Ld/p3c0INP/E0OHp3P8qV/8rVcCboP+guPv6+/8JPRQoLf/v8sKgpCk8Qf/g597h 1dcALf8jUudHZL1da93k2P8CON3Nyd/X0P/H09/g1/8AHTRFSugmTDdITP93lPYF Nf+Opf+Wqf8GOf8aSJO3tKY+UeI9XP9dgN4BL/9ni//I0v++y/+2xf8tWf9qiV93 eN2KlPUAKtWPmNGHktfe1NmDjxMnLP8HOwQZHv8yW/8AHMYAJhQoLP8GOuRTbt7n 2//z9f9CaP8lVNTSy/v+/eJuf7tacAgcIeDm2//a4jhJTZzBveBJZrdjdf/D0f82 YP7+//+4xuoALOkwUv8AIv+rvJciOP/E0f8AMP4AKN7X0CY3O/8OPyE0OPj//72L k/9jg/8AL72Ejti7ueXy4xQnLLs1U/v7++Hp3f8HPv8mUdjIw+kbROVDX8y8uuTx 4v9Pcv+Hn8IVO9/i2ONnfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAAVABEAQAjTAAEIHDgQiJgPcAgqJKin B58AARAgmROgiwkqCwX+QCEjyJsNGUMOdFOgD0QSAsyIBEGjA0SIZ4hweckmikiB WQq0uCFAxM2BGMroCJBmihotRkqIfOJly8sUQghAxAGGzsIYdapAZGJjQg0nLgbg GfETAIMjFQzkKTtwCYcXEIt8YbunAZoAOzIEOOChrJ8QGgIksAAlQAQlN+UMGAPx hAKpAewACillQZiXVuJQeJmDx8I1ZFi8DADjSoALDlQM+bNQgoEmMyAkabMCi487 DxYGBAA7 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=quote.gif Content-Type: image/gif; name=quote.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/quote.gif Content-Transfer-Encoding: Base64 R0lGODlhRgAWAPf/AM7V0V6QYV2GYOLj43Gob9y2lcKjjanHrZaamLubh6+kpb7F weLr7LG5tO7FpGKXZODm56bEqJall4OrgouyjFuOYE5+WG6kbT5pUdDS0V5+YXTE en/IgNnb2oqqi7OVh4XJhMjJyWeHZ6mTkmmfaWuha8qsntCum2abZzVcT7TJuX2i foXTh+Xm5nexdXSdda+0sPr6+3GQc12XYF6kX3OlcpeAe5zgop2vn6yxrofVines ddTe29vf3YiHiZGIjJ/mqJPYlWxzblV7W+ns7UVzVO7w80t6VsmolWWTaKnAq2eX aJjfnWSlZFF5WcnQzHW5dIeXiny8esXQy5yonYzajzpjUEFuUrm7um2PbXjIfqKp pHR4eHqQfY7ckY/dkmqvaovTi6Stpu3t7XqcfLbAuURrU8PVy8nPy3q6eIemiaPn rF+PZFaHW8DHxHnAeauQfGSUZbzDvpWQk9DW1G+7cYXGhNTW1fDx8NDZ1sPJxmmX a8PMx/Lz81OEWvX19muda+K8m6TDp4Gbgubp6YTOhmJ/ZKi9qUt0VmGQZFCBWNvk 5LfNvHKKdYKjg4rYjHC+c7m/vW+acXWqc3Foa8DFwbigl4yujMXMyLS7ttDY1LzA v7a1taW4p73FwXmzeHfHfHPAdcrTzpTel9Ph3b/RxaG7pJrjoMbIyLvDvmiraKmu q3mheqO0pszW0f39/YubjdXa2FiDXaC6onmMe/39//v7+/P19czRzm20bmOQZV+M Y1mMXVl+Xv////7+/qS2p+Xs72WaZmSwZv7+/2SZZaCyo6S5psfOy3+/fGeTaI23 jfj5+a3IseDh4meVa2iVa3zFfHiYedWxikVkUofOhtbi3z9iUGWPZ0htVGFYW02M VnbGe3bHfe/v8G1pbNba2NLZ1Zfbm8HKxcPJyJCykIiyh4K5gI/VkGm1a6Cios6x painpqiLfod5fs3Qzn61e1aUW+nr6uvr7Ovt7kqCVoHMgrnCvv79/lNtWWlgY6W7 p47XjZDWkmmcaefu8SH5BAEAAP8ALAAAAABGABYAQAj/AP/9C8Yj07sQcipVwpKp QY5VOWA04BGsoigYbvJACCawo8ePIEOKDBmsmCowAcARcqPHE7JUetDg6+AuUCAk CbjIukCBwqc3UJYtO/eGg1EOIJJWqxamKbp+QYKIE8fkhtWr4oKEqRYNSi5VTWhs Y2StQjEUxTS8opcnz5Q5CHLM80XXlzcBFy6oqcvXFxW6HuLs9ZXI3zFfmuKwAUC3 ByFfrQI4oiuLFw66fZ74enLNCpmOPLb46tGhg7PTY+b1oWsrCqUEgQx8sCEkiqkD zZod2M27d4TfvwUJH05cEPDdzRidIcVRoIoZJC7E+duHiDM6T8bNgYtqDDNpk+Dt /xisxsUeup0E0B3Uqq4AbJcBCFBGRoOhLi0g7xpEt9ceVgIM0YUcvgCgyBHZCFTK M22Y0QBdeGTQAxpi0JLPNRiagcgRFnTYoSIghujhiEeUWGIRKKaY4hUsttgiBhhY YcUuDHjkSia+qAPDFqtgwRcxvrSQCgML6PPBNAnA4UMZi4zk5JNQkkLDMAH8Qkgk ZWCCzD0LuPEEMs7M8YElXBgiwh5gRMOCDjo84mYVVXghp5xf1GmnnXN6UcUjbOrA QiH2cKDFBqFAUkc6w1DwTykzqELAA2XEoMcCC3gSCx2xcDKCAyaMwAVeO3gA2Cf+ 0HVMCeWU84kLO1BwyQSXeP8gqwevKqHEIbPUMEE5l/R6STkTzHLIPsdI8sAM9QjA SAAolLAELb5AQAcdfLyFAAwLoIGFLZXs4cIkgw3ij3q+GDNEXT10QRc2JbQHgDIv 0IWDBrhAtsRkvuwSx2OZGCLBZmZggMg/pjwgTDFD3EHXL1jAcMdqfUmQCAkklGBx CdJp4ssx/hDg8ccg51UCCWg98EAAFfDShh8WHIEiizDCaAUGNQrkSiW+xEBMLbX8 0leQUwzEhzZwjKBOGXnUDOXSTHeUxyq+QKSOG1uIgUYOqND1RwMLvFaAAXDY4IMn EDRtNpRnlCBCX7Ywc0sffczzhzfffHBTAu0YMkMd3Gj/4bffoGgByuDdcMMNKBsk rvjijDdOaB25mNNROcMMw4s3A+jhRiqRbBILH+PwwY4NDnw9giFNQFEUB4FyUAib YfDjxRej1M4EE6ecAsTua/TuOxBr7H7KKPwUEk0ohw5DQzwM8NAoGDPo0YcbyGhO DjKRyDMHEg6cYIBOJFxCFwVQXECXEi6kkYYUySSjvhTwx9++FOsnkxQIduSfv/su EKAKWMhawXNKQIA4iOEXMfCZz4L0g3UogBMh0EANVjUYD7hgCejRBV0usQSNIeZn 4SBCOB5zC2D87BB/CEcPAMOLIyBCBQGIThxg4YtYIAMXfEBDJnyQA2fEgBm+kMAF /z4BLrqoYQfKoAswyPWXevlCGTUwIQAAcQEcPKYuwADEYKC4ghXWRRSIKEI2zlAB YZCgGIbwBRGmNYUG+GALGfDGK+jSAV1M4gL4yoQxLuMLXKjLF33IAn/y5Q9jFCgR gzGEBvJjjEQMUhbkggU1FuALNFwDA734xx7OIoxejMEIPIDAHX4QggHMkS8iaBYK diGAVgrACZrBQS92sQRArJINFVvCLibmj11IQxqyCGYFAsALJzjBD35ARC9kgCEZ WSEFKvjHIipgMifgzBfzUEcGWmALutADAMBoRC8C8IBiCAMFKKCYMNgggMJQjGTo PFgxTHaylK1MES1zWRFgJkwzGaXgnyv4iDU6AYMMbKELjWiEDKRBhhWswBEOZQUr XkBRikriohfdg0ahwdFnJOGjukhEIthA0pKyYRcoTekuSqqLZ7zAA4zoSEAAADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=multiquote_off.gif Content-Type: image/gif; name=multiquote_off.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/multiquote_off.gif Content-Transfer-Encoding: Base64 R0lGODlhGQAWAPcAAIWThrm8urjBuzdiQmeYZFRSU2OrXr7Av56xnWiQZHalckpK SktSTPn6+1pnWubr6NDV0YCjftbW15TKj6+2sM7W0ens62+karjovcjKycbRyfb7 +/T19LfBumSUYHGqbLW4tqitqunq68PNxcXGxcLIxIaohGWOY2udZsrTzePo5cbO yLW9t4KlgGy2Zmy4ZvHy8i4uLnG1aubo53Cta8rr0StZPM3Y0PX6+wAAAPLy8pec mUBvR+jo6YWngmJiYtHY0s7U0HGnaRMUFMXKyMDLwUh9Tb7EwbvFvv3//hscG9/j 4tzh3tXj2tXd2dLZ1WWXYS9aPrTLtqSppgsLCzQ3NmCTXSMjI/////j8/Nfd2pTG j9bc2M7Rz////tnc29/h4PL09NHb0sbXybvAvcHEwtXf2rfZuFl4WLf3veLp5v/+ /ovXhVqOV8jVzO719LS/uIaOiK/DsO3w8H6jfKK3o9nd3IOvgLTSt3+af2uWaLzG v3eqcYG4esjPy8vQzrPRtbXTts7V0dDh1ePu6dfc1+/y8VlYWRkXF322eKCkobjL t7nUuvz6+6fqqL/WwvXx8v38/Mzh0PP09fz8/WN6Y6awp660sMbPybnfu5W8kc/U 0dX33pylntHY1IzBh1ZbWHOebW+iaY6dj7jEufb4+ImEiJfIk5u/maHKn8rZzODi 4W2DbYOIg+H16YmLif38/drh3bO+tPT++Onx7/79/evy8O3z8n+ie7TdtbvNvOT6 7L7HwYyfi4fQgWptavr6+maxYfj5+b7hwvr6+bPMtbbNtcbJyYC3e2+panCVbtrc 2l9oX3LBb0FEQoO4fqbToqHbntDX0srSyrvPvsDVwnmceMzQ0IGZgcfNysHPw42T jsTSyCUnJykoKZKxkd7l4pG8jn++eWidY5axlsjQysrRzLLQtG+bbKyvrdPa1MzV 0NXZ1tLc09ve3WKoXXW6b0NzSd/l4TY/OmCQXmybaKS9o8ny0V9fX/L08/H09Dpn Q3OlbWenYWqoZfX6+yH5BAEAAP8ALAAAAAAZABYAAAj/AP/9u7SsC4kDBwKAKPMF wpcjim5tyJJlg8CL/0Jg2chxYwEqPzZqYUeFCogNODBewtJqx7YdcbAUyEETEZYu NGmms3iRCJYQIaZUYJEhJ80AB4zmyIIRCRYRYHrMgYElhtEfhZSqSfnv04taHTfm Q5RjSI4CrirloEIzlS+BL4IJW2OuQ4lyHdQt0bcqhylJjjDMqpIjU7NHhFwYyBdp U7Yj0o6pKGLrVQ5Iqtik2ZVDCQYXqAbJMPDAyx8u14KUAGIHS44rWIDA4zQqB4Jo 7+5Uk/FODBYkK4L4IcIEy4IcOrDM2MIoh7N74vwpKEajny4smATI6vAkCYMcGTgi /3hdY0IiGugCCfFnDwuljt5ySMAiDAuJHFXK90H2Qc85Ucl8gwUwFjygwgOgkBFL B+5gIYEDw+RyyjOJ8JMAICh8gAsWKcDhyRNMJOEEFxvV10443bCyBR8onIBHhqFg YcEIe2iwzhLSQMCCAFNstEgOAEBzgRUnSIGCEPV4EUYKntyggRYriDAJLMYd8ksO FBijiQcnjDHOBQQQU8oNTpjhhiC8ULXRcUZ5o4AyTYwjihUcCMMNOIY0EBZH+ORA CjMMEGANLQSg0IYKeyaKyBBnKEAAD+T8AwUURkyT6EaNzDBCHfM44MEA+0RBzT8R GGGDHB1xIE8RvaAxQBQ27CYDBT3x8GDrGwI1IYUlPQTQCQDY5NFCBD6YYIIPw9IR QQsmaPNPQAA7 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=quickreply.gif Content-Type: image/gif; name=quickreply.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/quickreply.gif Content-Transfer-Encoding: Base64 R0lGODlhGQAWAPf/AHuUgml5asXTzKKmpYB8f2yzbVVNUZahmDhbTlt+YcXLyOO8 k12EZUJtUq61r6eIeK+4sJSblq+yt42pk0hjU+7t7snPzdzi4ompjsunjNLY1nGu b2SsZmWYZuXm5ztjUIG7fnSEdcXMyc7U0ouLi/7TqrzCv8XIx87O1d3e3uzEm8vS z6eKiLWVg4GLg/39/bi4ueLl5luVXsHGxHq6eHacfL7FwfT19WOAZLzDwFqCXtbZ 2XS7dObo6GmeaeLj4rK2tll6XI6fjlmLXtrd3c7Ozvr6+ruajMqpl3N8duvt7lF7 WXyhgmuTckt6VkVyVO/w8YqEhoGkhm2ibHGpcNLZ2G6qbdXW1amqrWObZcPKx8DI xaesq2KMZH22e3iffj9qUVKDWmqgaqKfn4PFgXSHfdXV3IWniZOXlc/T04WAhGOY ZG6lbfj4+fP09fHy8+Lj5H+3fXatc8vR0MPJyL2/v/////7+/sfPzV2RYPT0/nuy eWyia/Pz/c/W1KSop+Dg6f79/5GZmXpwdpaSlcDAyHaWfunp8urq9Ozs9vv7+3+4 fIx6gGOQZGGWZNnc5m6hbW+ibeXq7mGiYuO/of7//v7////+/+7Go/PLp6W3rKG6 pp+BdMHGwm2icLCMcMrV0b+cftDU1KGfpOjp6WmrZ+vr7IKShICfhYuWjOrv87+g hFWJW4aoi3ONc6a8rbbJvPDw+vb3+MjLypuzoMjNy7yagsuwnXqKfWiLcXaYdubm 79HQ0K2vs7vEwJOOj7/Ax5mRk62wr7m7vry7u5V6b7+/x6qclKybmtKumbe6u7W6 tu/u8OPj7OPm52KKamCYYmacZ66QfHmwd3y4eoC+fvn6/MWjimZgYs2ojHisdXyz eo6bkKqqqPLz86qtrrCxs5OwmLKztLe0tNXc28DBwJmbm9Gwnt23mnCjb/Dw8PDx 8vHz8WBXXHardHWsdF53YcfKzpGSl/j4+sOfhMGekcbGztG0pa3AsmWSZtnZ4oGE id3d5vL082+gb/X1/yH5BAEAAP8ALAAAAAAZABYAQAj/AP/tEgdH1KwTJ+rAUCZO GLg6w/jp+dfHTC97+hBtKgBthJ1ZaeiIMKFghh1SgzBRQnIkRDoyPDjUoCWGjw47 blZoAEUIzYAedoIGDdJhTZ4hTnL9SyTIjik4HqAwq3CjjSKhuNplUHGtBad9xs5Q iRTCjixnHqqk0fLLBYly6l640hYnjpdtbBL8a/IEQaqgFXhdWcYtAAUEiD+AacAY zAdV/5oNsIOGywBhf4RqBhYLhQF6C0J9inKhgAw787TMEDHCxhYbc7YQIcHiVpIE XTpM4vAKw4ZoB+zM8KWlVooLRIixKHEOWYBGcqpVo2HlGQY+6XDYibFihR8/wXxy /8nxzU6nfO+oUOGTJ4GAaNF0aAj6YtyAIhU0BxWyxMkTxxP8AwgWdnhjhyV23KFf UChQZIYB0hwzSiH/HEKgMMKYs8IAEcxwgAlCSRCPARkssIo0xcjzjyenCVXJHYrc sM46PbzRBjZHqJCNLQ8kwMojsJjGzg0KWGCDAuXEkEYtInTDSAnoZNCCLjTEhEE4 BWQBgR0W7KDBHAqMAIQSUSCRSTL1JNEINWTQUEoTrWzgwyl2vBCUggUycs8YxFyR gDuLgACCF1YwcAYbkGhXxRYj4KHBCQT8kYIi/dhxgD977DHNO9EkMAEfU9ykBB5V kKOFGhHMwswlQbmhwxR8+FewRhgM4OODGDpAYU0VzpCiRjkp2KkZDkMMEYYTDRgi iSOOLOFAUD+MUcQPRgQViAXcwNPYBx8ggM8/egigSQREROBCGWUAoC4qUjDBxBdf 1ACvFAL8ExAAOw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=avatar213223_2.gif Content-Type: image/gif; name=avatar213223_2.gif Content-Location: http://forum.qip.ru/customavatars/avatar213223_2.gif Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEAYABgAAD/4QBmRXhpZgAASUkqAAgAAAAEABoBBQABAAAA PgAAABsBBQABAAAARgAAACgBAwABAAAAAgAAADEBAgAQAAAATgAAAAAAAABgAAAA AQAAAGAAAAABAAAAUGFpbnQuTkVUIHYzLjIwAP/bAEMAAgEBAQEBAgEBAQICAgIC BAMCAgICBQQEAwQGBQYGBgUGBgYHCQgGBwkHBgYICwgJCgoKCgoGCAsMCwoMCQoK Cv/bAEMBAgICAgICBQMDBQoHBgcKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKCgoKCv/AABEIAFAAUAMBIgACEQEDEQH/xAAfAAAB BQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgv/xAC1EAACAQMDAgQDBQUEBAAAAX0B AgMABBEFEiExQQYTUWEHInEUMoGRoQgjQrHBFVLR8CQzYnKCCQoWFxgZGiUmJygp KjQ1Njc4OTpDREVGR0hJSlNUVVZXWFlaY2RlZmdoaWpzdHV2d3h5eoOEhYaHiImK kpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4eLj 5OXm5+jp6vHy8/T19vf4+fr/xAAfAQADAQEBAQEBAQEBAAAAAAAAAQIDBAUGBwgJ Cgv/xAC1EQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGh scEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZ WmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1 tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEA AhEDEQA/APyT8RWOmx+KbjRdA8Uy36NePHaSokqG4XeQrhGAYFuDtIyM4r1Twj+x t+0Re2ba3ffD/WtL05bRrqXVNcDWNpFAM5kaacqgHHrX3/8ADr4d/s4HSLy+vPhZ LotzaSotsYY4rqeGQAnDx7FdcoNyk+hPIBI4n4reHtI1LwtPqGt/GbVZbLw7eLfa dps3h/JkuPMQKixylhJJhjtG3gkYwea/LaniNWr11Rp0eRdXK7vfty/qfsmH8OqE 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 eRh8POvg3J2jNedz/9k= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=avatar252472_2.gif Content-Type: image/gif; name=avatar252472_2.gif Content-Location: http://forum.qip.ru/customavatars/avatar252472_2.gif Content-Transfer-Encoding: Base64 /9j/4AAQSkZJRgABAQEASABIAAD//gA/Q1JFQVRPUjogZ2QtanBlZyB2MS4wICh1 c2luZyBJSkcgSlBFRyB2NjIpLCBkZWZhdWx0IHF1YWxpdHkKAP/bAEMACAYGBwYF CAcHBwkJCAoMFA0MCwsMGRITDxQdGh8eHRocHCAkLicgIiwjHBwoNyksMDE0NDQf Jzk9ODI8LjM0Mv/bAEMBCQkJDAsMGA0NGDIhHCEyMjIyMjIyMjIyMjIyMjIyMjIy MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMv/CABEIAFAAOQMBIgACEQED EQH/xAAbAAACAgMBAAAAAAAAAAAAAAAABQMEAQIHBv/EABgBAQEBAQEAAAAAAAAA AAAAAAABAwIE/9oADAMBAAIQAxAAAAHn4AO0nUOLzaC1VoA6gAZ6ZzRv59FkM0O+ YBRcrerlrSL44YJmnorOfEgu3rfLNk1r5wWWCp4eTNs1DZxqNIKOYZRL9yCaUr// xAAkEAACAQQBBAIDAAAAAAAAAAACAwEABBESBRATICIUIyExM//aAAgBAQABBQLr xtjN7cNDRvlwCdLG5/Nz5Wd4KpZ/TxiJmgI1SyYlnghEuIrcYoGtCnCowYjUOvEq jD2fa0pzYFvd8r2mW2Kx048A+G8IXJ5k7YftcPcHFY6WlxMJZjvaRsr0Y64RBx+q IqtD0awkEzUKkAmnSAVG0VisV7598xtFRkj0IJ6f/8QAGREBAAIDAAAAAAAAAAAA AAAAAQAxAhAw/9oACAEDAQE/AYRveCFx7f/EABwRAAEEAwEAAAAAAAAAAAAAAAAB AgMxEBEhMP/aAAgBAgEBPwEfWhtZnjV6cE9v/8QAKRAAAQMCBQIGAwAAAAAAAAAA AQACEQMhEiAxQVEQMhMiQnGBoQRhcv/aAAgBAQAGPwLrh9LblPbwYzmpvUcqv9nP R/GGgYB8p3vnpVzynEaTlOzW9x4TsNQQ1AVLiLSNlJHyF4jbs0mMhe4iC7AW+6dh Fp3TdvKCmMqkeGTeVSFHDGIxGTxp81Nxtzwo9J0nVSpwtceCsQZh/XGSpR2JDpVz MJ3mQVjaNOsKePtE9si4jdWM/KsIQDTiMXhaW6WMLu+le67PtdoWp6//xAAiEAAC AgEDBQEBAAAAAAAAAAABEQAhMUFRYRAgcYGRsdH/2gAIAQEAAT8h6mRUJs5t/g94 zIyPQr+wmBr+ncJklR6OEy8/3uwAJjFrOiNlMhgyO3bRHZYivoFZMGjDA3GMZjoV jzCvCyxLiiihvNXhAL5Bg+UAEElBsYOYPPrSQXMzSQ4BWOopoKy3DD3DJbB/YaRI UopIkY2DCpWIRopY9KlS/HChEAC6WCecXDKFnguEw09NCoTA9FU9yukBGXo2mhgE CClqGhYH4motOjURMZ2448wS2YLeNHFlhWAPiEmySIHaS0BtMqA8VFqbO5lbT//a AAwDAQACAAMAAAAQANKAAbBA+qfK7Fut1b7x/8QAGhEAAgMBAQAAAAAAAAAAAAAA ABABETEhIP/aAAgBAwEBPxA5mzZ5izSojFz3K//EABsRAAICAwEAAAAAAAAAAAAA AAERABAhMUGR/9oACAECAQE/EI5QU+xkdiDJP3k0pwhnMAxTmjOWswCv/8QAJBAB AQACAQMFAAMBAAAAAAAAAREAITFBUWEgcYGRoRCxwfD/2gAIAQEAAT8Q/lUma/oP l/rAHdffh/nqOc3roGeN+4FdpP79Wg4pxdTqqfq5bOVf16hPpC4LBLkDJX2Rz829 FU9Ex6sXQEQP2hemBizQ9HOnXbiDnINjWLrmc9sv9UD17dXw4ER9w4LPP8h34+OW riJTyX5L0wbQUSw4xAQOFgjcvGaswAQbi88fOCNprAAQB0WzFikNORh4YNtaJ6AD vSLfjBdJQHQ5TQ3zjYZAVwBP8yFooqfkpjOEnqIQl4Ek7Y2PO89maleMHJ75Gm/G A2hFJHdf+8YgxDacQnhuKxeixPz2w6lTR3RaaY1nnNqDTpl8ZQv7sVkSWiAblE33 msBGi4Ggw3DfHT2yUaXS52U1frAJCsmfrWSomiI0ld9L2KZVt81kzyZSqnmRH7w5 WBK8H1jUUeUZcouo2qD6whoSk2Y0u49mIYDLkV/cmP8A/9k= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=viewpost.gif Content-Type: image/gif; name=viewpost.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/viewpost.gif Content-Transfer-Encoding: Base64 R0lGODlhDAAMAPcAAP7+/k96W05zWpWZnk57XLrX0UhrV6/tra/urbjsuY6TmYzf ik99XLnsvKbPr527sMft2FaCYWR2dbLRx3nGfojgg3vTeqDym4zjg3bUeFeDYpzh mnrbe3+Xkofvg2rBcWW2bq66wILefqvvqH/mgcru3n3aenzEfszb3Xe9eXW7eYuk naHPpkhoVVhkaH6GjGSBcpuhppGko5ajprnYzcDa1sXM1aPipbrW0HjWePn7/Xzg fKrQtL3kyoCdj6XHtLPPxEVmVHvafaGsspSZnk10Wa7msHzAfnvYfDlbULrsv8DH z4K4h2J7csnt27DusP3+/qbxoD1nVs7w5pKbob/I0FBtXpn0lIPcgKzLvbvCyne4 e5TBm/P2+YOMkZm3qqriq5rrlJ3DqMPM046WnKTGtk97W1iGYrPQxpngm5y8rJHk j5evqXfGecfj3m2GfluuaZDzis/U3Ju7q7rsvL3GzZSwpLLguKLmoJSfo3jTeHPR dGmLd27McoDjfKjQscDryarPtqTFtPj6/YmQlQAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACwAAAAADAAMAAAIoQBRlHnwRc2PQDz+OGABxE0BGV7yzKBR wgmEKRhqTOgQAwAALXfoJABUAUcPMW8IeVwCBkEDLGiUGOECg4jHEBsOmMjyZAQe JlYGQAEw5kYOQVEuhDkiQMEgAHLS7JlzZc2JM2R0AKgjIk4fOwu2RHjRBUAVC348 fFiRQgMVjzba6MmwA4QPFXxcSGhCAYkQDiTgDEnSIoiBIgHMEGAghU1AADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=im_icq.gif Content-Type: image/gif; name=im_icq.gif Content-Location: http://forum.qip.ru/qipstyle/misc/im_icq.gif Content-Transfer-Encoding: Base64 R0lGODlhEQARAPfkAABDAARcJwBNABFUIABkGAI+AgAzAMvR2YyilQA/AN/i8NXZ 5gJBBBObHxVeKwA3ANjc6GvgcQlLF+Hi8X77gf//gd3h7RZmJLzFyewcg5YEVSGf ORZJIg+HFymNS3vyfhVhNEq6W/gPTjWiNyaVXytQLN3g7tMpgyddKSUbD0ugkMPL 0TGcW0O6fdc1VUKsQC6YLkSjRkOYgwl2Gh11ORd0MU3BZ4f9i0OgfjCWVFMzMzWi OI2wlgRVCG3hcQZdDi9mQC+yhYimnBdrOUy7SR5dIiaeOpeqqF6JLWzsbDSkQtzf 7GeQe0J2RDOSNC+PKCGIJyqAKjGBX13eX13SYEqKL1DDaTF8IRFJFD2pZJ2bIo4G VzKoa7XBw0KqbgtHDjqJPQdFCv/7e///TwtPDGLYYE96Vz9cSf9hmVZ+Yy6cPShB F1XQVgpSEGbhbc4ALWrxdhJzGNzP3gBkF//yVQBCAMvR2qTGrwBOANbZ5hFfKt/h 8L3HygBWHC+jNRdrKUq9S7cKSCxsMLDDvQZ9CnfxfI7/jwRXAT0PBErNSUa/dtye sC51YK3JuBFqFEaicnmTgv9KeWZ2KxBuGBR6QRKLGXvufk/KVTWkb2WYa0vFS+MA IABaAFDcaSCMMqwALTOmZ0icjLjExu3Aaf8xhmvkeQtVMjqDeDlrRS2ZSCGjIY3/ kC6dNliNXQBUAABIAP+6JgBOAR5PINnc6QuDG7HAvNTY4wlyPhJgH0nLTx+MHg9j Iv/5VXRuJQ92Qcais0BhE/AQPhOCFKBJa///ajwWCyKQOFyIYy2oNnaRjlavYoyj ljQgDQ9FFHHochh6J9PBJhqEOEt7HjhHMMAARUC2QzefeH2phDuabDqiOSVpSBZ+ ODNuOBFdDgB3ACaiJiKdLBRuTeDi8HPVcuHk8wAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAAOQALAAAAAARABEAAAj/AMkJFDjoWB5yFloJwjCw IblGqgg1mwVjCjI8yxwuIHctiRUQBTRFsAEKSEMwnMLI0pXl1JdqrFJZSzbwTiIl NSS8esaoCBs1HvSgaIKAXIxCXmRIGXAoHI1OLHY9KQNOwIFMlbCFUoEjgDQtVbYR ceZG0a0uCmIRoEQiyCM6Y2Ah8eToh4MjAk0wQ1QsRa8KxMRIqsPgQYk95Ca4CPbm E7VA0HiNGgcH0AhhAJYsioSG1AkN02YAu3LhxipLVGilkbNJRIYtaxpE6+OnBxYf hkpxYULu1zAd3TrE+dMm244EZL5t8AVhoLJcUCbhMvDigzEOkMzwaeiEQogcQ85E HrnUQptDgTy8GcFkSlwtV3OEnBcoihsqWwJX2HEYEAA7 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=avatar245520_6.gif Content-Type: image/gif; name=avatar245520_6.gif Content-Location: http://forum.qip.ru/customavatars/avatar245520_6.gif Content-Transfer-Encoding: Base64 R0lGODlhTwBPAPfHAFaEuVCs1u8bIgYHCbGys3Sax3ikzsnX6SZJYtvb21fD5TSH uUiWyP///21uby4vL5CQkAWv1nqr01V8tUSEu2WJu8jJyTCq04S02TVqj0dHSEp7 sxkzSvPz9Nrj7jl5tVdXV7PH3mqizlSVx4nN6jCXyFaLwE9vjOfu9oKt1GuUw0aM wXiz2u7z92udzIOmzEt1rjRrqznH42KTw+KhpWqSvmqo0mV7lDh1pBMjMGSNwVO3 3nm+5KW71YydunSUvbrM4myax5Gkv+zR02mDmVNleEVZa4a84Pb3+RKbxWOaxkSS webn7C1afFJ4sWmHqluPv2Ody0CGrO7z7mN7ruXr7g0SGpq51lSf0oKdxZirxmWx 3Eqez/Pz72yOvfPv7p2zzTC93tzj3XmivMXT5cLP2vb8/evr50EqL+fr5o7C5EN9 nfPv9CF/t+vn5nqVrui+vUFJU1eEqdXd5HGQxHKNo7iGiC1opNvd2D9mrENQYTdw sFBTiWSWxmuSrwdtgtbX3uPk3wO42ePLym+Wxr6/v/v7/ISx0ZuipC1zqOvn62Bt o+uIiTY8SXuwzytssvr3/vj89bDf6c/Pz0FBQU5NVAsTalNwsvj38zdgqDk5OXOf y0RosNvX3EqTs6WlpWJjY1OlxUN9u1ZfZE1NTUlOS+vr69fX19PT0+fn5+/v7+Pj 4+vr8OLj5+fn4+rv8eHn6e/r6+/v6ufj6OLn4uvv6tfX09/f3+fj4+/r79DT11FR UZycnOxiZtLX2R4eHn9/gJWx0V1dXU6NpzCAvTE8gwAAAP///wAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/h1CdWlsdCB3aXRoIEdJ RiBNb3ZpZSBHZWFyIDQuMAAh+QQFFADHACwAAAAATwBPAAAI/gBfvNiUxUAWgSle GCSo8EVCA5vGFChgwIDAihMLbLKoMGMBCWrUGChAaOLGFz9+TFRJJ6UXOnRITqTj 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 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=im_jabber.gif Content-Type: image/gif; name=im_jabber.gif Content-Location: http://forum.qip.ru/images/misc/im_jabber.gif Content-Transfer-Encoding: Base64 R0lGODlhEAAQAPcAAAAAAM4AANYhIdYxMdY5Od45Od5KSt5SUt5aWt5jY+djY+dr a+dzc+d7e+eEhOeMjO+MjO+lpe+tre+1tfe1tfe9vffGxvfOzvfW1vfe3v/OWv/e e//ehP/ejP/elP/e3v/npf/n5//vtf/vvf/31v/33v/35//39///9/////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////// /////////////////yH5BAEAAAAALAAAAAAQABAAAAiNAAEIBJDhQQIECyIMXCgQ QwABCRgsICDAAkOBFw6k2LjxwgAMF0+c4Mgxw4GLJFMuuMAwJUkJDVpuLJEyo0wQ HTho4CghgUwPJUhsGHligMWWJE6IAJHiBAIGFwFMGBkiRQgCMaM6QDAyBYIKUQU2 kMCggQWfYaUeYPBggoO0AAhMuDAhg0K4BhtMiBoQADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=vbulletin_multi_quote.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_multi_quote.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_multi_quote.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIElu aXRpYWxpemVzIHRoZSBNUSBpbWFnZXMsIHNvIHRoZXkgYXJlIGNsaWNrYWJsZS4g QWRkaXRpb25hbGx5LCBpdCByZWRvZXMKKiB0aGUgY29sb3Jpbmcgb2YgdGhlIGlt YWdlIGJhc2VkIG9uIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBjb29raWUuIFRo aXMKKiBpcyBoZWxwZnVsIGlmIGEgdXNlciB1c2VzIHRoZSBiYWNrIGJ1dHRvbi4K KgoqIEBwYXJhbQlvYmplY3QJVGhlIG9iamVjdCB0byBzZWFyY2ggd2l0aGluIGZv ciBNUSBpbWFnZXMuCiovCmZ1bmN0aW9uIG1xX2luaXQob2JqKQp7Cgl2YXIgY29v a2llX2lkcyA9IGZldGNoX2Nvb2tpZSgndmJ1bGxldGluX211bHRpcXVvdGUnKTsK CWlmIChjb29raWVfaWRzICE9IG51bGwgJiYgY29va2llX2lkcyAhPSAnJykKCXsK CQljb29raWVfaWRzID0gY29va2llX2lkcy5zcGxpdCgnLCcpOwoJfQoJZWxzZQoJ ewoJCWNvb2tpZV9pZHMgPSBuZXcgQXJyYXkoKTsKCX0KCgl2YXIgcG9zdGlkOwoK CXZhciBpbWFnZXMgPSBmZXRjaF90YWdzKG9iaiwgJ2ltZycpOwoJZm9yICh2YXIg aSA9IDA7IGkgPCBpbWFnZXMubGVuZ3RoOyBpKyspCgl7CgkJaWYgKGltYWdlc1tp XS5pZCAmJiBpbWFnZXNbaV0uaWQuc3Vic3RyKDAsIDMpID09ICdtcV8nKQoJCXsK CQkJcG9zdGlkID0gaW1hZ2VzW2ldLmlkLnN1YnN0cigzKTsKCQkJaW1hZ2VzW2ld Lm9uY2xpY2sgPSBmdW5jdGlvbihlKSB7IHJldHVybiBtcV9jbGljayh0aGlzLmlk LnN1YnN0cigzKSk7IH07CgkJCWNoYW5nZV9tcV9pbWFnZShwb3N0aWQsIChQSFAu aW5fYXJyYXkocG9zdGlkLCBjb29raWVfaWRzKSA+IC0xID8gdHJ1ZSA6IGZhbHNl KSk7CgkJfQoJfQp9CgovKioKKiBDYWxsYmFjayBmdW5jdGlvbiB0byB3aGVuIGFu IE1RIGltYWdlIGlzIGNsaWNrZWQuIE1vZGlmaWVzIHRoZSBjb29raWUgYW5kCiog dXBkYXRlcyB0aGUgbG9vayBvZiB0aGUgaW1hZ2UgdG8gc3VpdC4KKgoqIEBwYXJh bQlpbnRlZ2VyCVBvc3QgSUQgb2YgdGhlIGltYWdlIGNsaWNrZWQuCioKKiBAcmV0 dXJuCWZhbHNlCUFsd2F5cyByZXR1cm5zIGZhbHNlIHRvIGVuc3VyZSBhbnkgaHJl ZiBldmVudCBkb2VzIG5vdCBydW4KKi8KZnVuY3Rpb24gbXFfY2xpY2socG9zdGlk KQp7Cgl2YXIgY29va2llX2lkcyA9IGZldGNoX2Nvb2tpZSgndmJ1bGxldGluX211 bHRpcXVvdGUnKTsKCgl2YXIgY29va2llX3RleHQgPSBuZXcgQXJyYXkoKTsKCXZh ciBpc19zZWxlY3RlZCA9IGZhbHNlOwoKCWlmIChjb29raWVfaWRzICE9IG51bGwg JiYgY29va2llX2lkcyAhPSAnJykKCXsKCQljb29raWVfaWRzID0gY29va2llX2lk cy5zcGxpdCgnLCcpOwoKCQlmb3IgKGkgaW4gY29va2llX2lkcykKCQl7CgkJCWlm IChjb29raWVfaWRzW2ldID09IHBvc3RpZCkKCQkJewoJCQkJaXNfc2VsZWN0ZWQg PSB0cnVlOwoJCQl9CgkJCWVsc2UgaWYgKGNvb2tpZV9pZHNbaV0pCgkJCXsKCQkJ CWNvb2tpZV90ZXh0LnB1c2goY29va2llX2lkc1tpXSk7CgkJCX0KCQl9Cgl9CgoJ Ly8gZmxpcCB0aGUgaW1hZ2UgdG8gdGhlIG90aGVyIG9wdGlvbgoJY2hhbmdlX21x X2ltYWdlKHBvc3RpZCwgKGlzX3NlbGVjdGVkID8gZmFsc2UgOiB0cnVlKSk7CgoJ Ly8gaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcG9zdGlkIGluIHRoZSBjb29raWUsIGFk ZCBpdAoJaWYgKCFpc19zZWxlY3RlZCkKCXsKCQljb29raWVfdGV4dC5wdXNoKHBv c3RpZCk7CgkJaWYgKHR5cGVvZiBtcWxpbWl0ICE9ICd1bmRlZmluZWQnICYmIG1x bGltaXQgPiAwKQoJCXsKCQkJZm9yICh2YXIgaSA9IDA7IGkgPCAoY29va2llX3Rl eHQubGVuZ3RoIC0gbXFsaW1pdCk7IGkrKykKCQkJewoJCQkJdmFyIHJlbW92YWwg PSBjb29raWVfdGV4dC5zaGlmdCgpOwoJCQkJY2hhbmdlX21xX2ltYWdlKHJlbW92 YWwsIGZhbHNlKTsKCQkJfQoJCX0KCX0KCglzZXRfY29va2llKCd2YnVsbGV0aW5f bXVsdGlxdW90ZScsIGNvb2tpZV90ZXh0LmpvaW4oJywnKSk7CgoJcmV0dXJuIGZh bHNlOwp9CgovKioKKiBDaGFuZ2VzIHRoZSBNUSBpbWFnZSB0byBzaG93IGFzIGJl aW5nIHNlbGVjdGVkIG9yIHVuc2VsZWN0ZWQKKgoqIEBwYXJhbQlpbnRlZ2VyCUlE IG9mIHRoZSBwb3N0IHdob3NlIE1RIGJ1dHRvbiBpcyBjaGFuZ2luZwoqIEBwYXJh bQlib29sZWFuCVdoZXRoZXIgdG8gbWFrZSB0aGUgaW1hZ2Ugc2VsZWN0ZWQgb3Ig bm90CiovCmZ1bmN0aW9uIGNoYW5nZV9tcV9pbWFnZShwb3N0aWQsIHRvX3NlbGVj dGVkKQp7Cgl2YXIgbXFfb2JqID0gZmV0Y2hfb2JqZWN0KCdtcV8nICsgcG9zdGlk KTsKCWlmIChtcV9vYmopCgl7CgkJaWYgKHRvX3NlbGVjdGVkID09IHRydWUpCgkJ ewoJCQltcV9vYmouc3JjID0gbXFfb2JqLnNyYy5yZXBsYWNlKC9cL211bHRpcXVv dGVfb2ZmXC4oW2EtekEtWjAtOV0rKSQvLCAnL211bHRpcXVvdGVfb24uJDEnKTsK CQl9CgkJZWxzZQoJCXsKCQkJbXFfb2JqLnNyYyA9IG1xX29iai5zcmMucmVwbGFj ZSgvXC9tdWx0aXF1b3RlX29uXC4oW2EtekEtWjAtOV0rKSQvLCAnL211bHRpcXVv dGVfb2ZmLiQxJyk7CgkJfQoJfQp9CgptcV9pbml0KGZldGNoX29iamVjdCgncG9z dHMnKSk7CgovKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qXAp8fCAjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIwp8fCAjIERvd25sb2FkZWQ6IDA1OjUyLCBUdWUgSnVuIDI0dGgg MjAwOAp8fCAjIENWUzogJFJDU2ZpbGUkIC0gJFJldmlzaW9uOiAxNTE3NSAkCnx8 ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjClwqPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSov ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=vbulletin_textedit.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_textedit.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_textedit.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjExIFBhdGNoIExldmVsIDEKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8vICMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi8vIHZCX1RleHRfRWRpdG9yCgovKioK KiB2QnVsbGV0aW4gRWRpdG9yIENsYXNzCioKKiBBY3RpdmF0ZXMgYW55IEhUTUwg Y29udHJvbHMgZm9yIGFuIGVkaXRvcgoqCiogQHBhcmFtCXN0cmluZwlVbmlxdWUg a2V5IGZvciB0aGlzIGVkaXRvcgoqIEBwYXJhbQlib29sZWFuCUluaXRpYWxpc2Ug dG8gV1lTSVdZRyBtb2RlPwoqIEBwYXJhbQlzdHJpbmcJRm9ydW1pZCAvIENhbGVu ZGFyIGV0Yy4KKiBAcGFyYW0JYm9vbGVhbglQYXJzZSBzbWlsaWVzPwoqIEBwYXJh bQlzdHJpbmcJKE9wdGlvbmFsKSBJbml0aWFsIHRleHQgZm9yIHRoZSBlZGl0b3IK KiBAcGFyYW0Jc3RyaW5nCShPcHRpb25hbCkgRXh0cmEgYXJndW1lbnRzIHRvIHBh c3Mgd2hlbiBzd2l0Y2hpbmcgZWRpdG9yIG1vZGVzCiovCmZ1bmN0aW9uIHZCX1Rl eHRfRWRpdG9yKGVkaXRvcmlkLCBtb2RlLCBwYXJzZXR5cGUsIHBhcnNlc21pbGll cywgaW5pdGlhbF90ZXh0LCBhamF4X2V4dHJhKQp7CgkvKioKCSogTWlzY2VsbGFu ZW91cyB2YXJpYWJsZXMKCSoKCSogQHZhcglzdHJpbmcJVW5pcXVlIEVkaXRvciBJ RAoJKiBAdmFyCWJvb2xlYW4JV1lTSVdZRyBtb2RlCgkqIEB2YXIJYm9vbGVhbglI YXZlIHdlIGluaXRpYWxpemVkIHRoZSBlZGl0b3I/CgkqIEB2YXIJbWl4ZWQJUGFz c2VkIHBhcnNldHlwZSAoY29ycmVzcG9uZHMgdG8gYmJjb2RlcGFyc2UgZm9ydW1p ZCkKCSogQHZhcglib29sZWFuCVBhc3NlZCBwYXJzZXNtaWxpZXMgb3B0aW9uCgkq IEB2YXIJYm9vbGVhbglDYW4gd2UgdXNlIHZCbWVudSBwb3B1cHM/CgkqIEB2YXIJ b2JqZWN0CVRoZSBlbGVtZW50IGNvbnRhaW5pbmcgY29udHJvbHMKCSogQHZhcglv YmplY3QJVGhlIHRleHRhcmVhIG9iamVjdCBjb250YWluaW5nIHRoZSBpbml0aWFs IHRleHQKCSogQHZhcglhcnJheQlBcnJheSBjb250YWluaW5nIGFsbCBidXR0b24g b2JqZWN0cwoJKiBAdmFyCWFycmF5CUFycmF5IGNvbnRhaW5pbmcgYWxsIHBvcHVw IG9iamVjdHMKCSogQHZhcglvYmplY3QJQ3VycmVudCBwcm9tcHQoKSBlbXVsYXRp b24gcG9wdXAKCSogQHZhcglzdHJpbmcJU3RhdGUgb2YgdGhlIGZvbnQgY29udGV4 dCBjb250cm9sCgkqIEB2YXIJc3RyaW5nCVN0YXRlIG9mIHRoZSBzaXplIGNvbnRl eHQgY29udHJvbAoJKiBAdmFyCXN0cmluZwlTdGF0ZSBvZiB0aGUgY29sb3IgY29u dGV4dCBjb250cm9sCgkqIEB2YXIJc3RyaW5nCVN0cmluZyB0byBjb250YWluIHRo ZSBmYWtlICdjbGlwYm9hcmQnCgkqIEB2YXIJYm9vbGVhbglJcyB0aGUgZWRpdG9y ICdkaXNhYmxlZCc/IChxdWljayByZXBseSB1c2UpCgkqIEB2YXIJdkJfSGlzdG9y eQlIaXN0b3J5IG1hbmFnZXIgZm9yIHVuZG8vcmVkbyBzeXN0ZW1zCgkqIEB2YXIg IGludGVnZXIgSXMgdGhlIGVkaXRvciBtb2RlIHRyeWluZyB0byBiZSBjaGFuZ2Vk PwoJKi8KCXRoaXMuZWRpdG9yaWQgPSBlZGl0b3JpZDsKCXRoaXMud3lzaXd5Z19t b2RlID0gcGFyc2VJbnQobW9kZSwgMTApID8gMSA6IDA7Cgl0aGlzLmluaXRpYWxp emVkID0gZmFsc2U7Cgl0aGlzLnBhcnNldHlwZSA9ICh0eXBlb2YgcGFyc2V0eXBl ID09ICd1bmRlZmluZWQnID8gJ25vbmZvcnVtJyA6IHBhcnNldHlwZSk7Cgl0aGlz LmFqYXhfZXh0cmEgPSAodHlwZW9mIHBhcnNldHlwZSA9PSAndW5kZWZpbmVkJyA/ ICcnIDogYWpheF9leHRyYSk7Cgl0aGlzLnBhcnNlc21pbGllcyA9ICh0eXBlb2Yg cGFyc2VzbWlsaWVzID09ICd1bmRlZmluZWQnID8gMSA6IHBhcnNlc21pbGllcyk7 Cgl0aGlzLnBvcHVwbW9kZSA9ICh0eXBlb2YgdkJtZW51ID09ICd1bmRlZmluZWQn ID8gZmFsc2UgOiB0cnVlKTsKCXRoaXMuY29udHJvbGJhciA9IGZldGNoX29iamVj dCh0aGlzLmVkaXRvcmlkICsgJ19jb250cm9scycpOwoJdGhpcy50ZXh0b2JqID0g ZmV0Y2hfb2JqZWN0KHRoaXMuZWRpdG9yaWQgKyAnX3RleHRhcmVhJyk7Cgl0aGlz LmJ1dHRvbnMgPSBuZXcgQXJyYXkoKTsKCXRoaXMucG9wdXBzID0gbmV3IEFycmF5 KCk7Cgl0aGlzLnByb21wdF9wb3B1cCA9IG51bGw7Cgl0aGlzLmZvbnRzdGF0ZSA9 IG51bGw7Cgl0aGlzLnNpemVzdGF0ZSA9IG51bGw7Cgl0aGlzLmNvbG9yc3RhdGUg PSBudWxsOwoJdGhpcy5jbGlwYm9hcmQgPSAnJzsKCXRoaXMuZGlzYWJsZWQgPSBm YWxzZTsKCXRoaXMuaGlzdG9yeSA9IG5ldyB2Ql9IaXN0b3J5KCk7Cgl0aGlzLmlu Zmx1eCA9IDA7CgoJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCS8v IHZCX1RleHRfRWRpdG9yIG1ldGhvZHMKCgkvKioKCSogRWRpdG9yIGluaXRpYWxp emF0aW9uIHdyYXBwZXIKCSovCgl0aGlzLmluaXQgPSBmdW5jdGlvbigpCgl7CgkJ aWYgKHRoaXMuaW5pdGlhbGl6ZWQpCgkJewoJCQlyZXR1cm47CgkJfQoKCQl0aGlz LnRleHRvYmouZGlzYWJsZWQgPSBmYWxzZTsKCgkJaWYgKHRoaXMudGVtcGlmcmFt ZSkKCQl7CgkJCXRoaXMudGVtcGlmcmFtZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxk KHRoaXMudGVtcGlmcmFtZSk7CgkJfQoKCQl0aGlzLnNldF9lZGl0b3JfY29udGVu dHMoaW5pdGlhbF90ZXh0KTsKCgkJdGhpcy5zZXRfZWRpdG9yX2Z1bmN0aW9ucygp OwoKCQl0aGlzLmluaXRfY29udHJvbHMoKTsKCgkJdGhpcy5pbml0X3NtaWxpZXMo ZmV0Y2hfb2JqZWN0KHRoaXMuZWRpdG9yaWQgKyAnX3NtaWxpZWJveCcpKTsKCgkJ aWYgKHR5cGVvZiBzbWlsaWVfd2luZG93ICE9ICd1bmRlZmluZWQnICYmICFzbWls aWVfd2luZG93LmNsb3NlZCkKCQl7CgkJCXRoaXMuaW5pdF9zbWlsaWVzKHNtaWxp ZV93aW5kb3cuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NtaWxpZXRhYmxlJykp OwoJCX0KCgkJdGhpcy5jYXB0Y2hhID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQo ImltYWdlc3RhbXAiKTsKCQlpZiAodGhpcy5jYXB0Y2hhICE9IG51bGwpCgkJewoJ CQl0aGlzLmNhcHRjaGEuc2V0QXR0cmlidXRlKCJ0YWJJbmRleCIsIDEpOwoJCX0K CgkJdGhpcy5pbml0aWFsaXplZCA9IHRydWU7Cgl9OwoKCS8qKgoJKiBDaGVjayBp ZiB3ZSBuZWVkIHRvIHJlZm9jdXMgdGhlIGVkaXRvciB3aW5kb3cKCSovCgl0aGlz LmNoZWNrX2ZvY3VzID0gZnVuY3Rpb24oKQoJewoJCWlmICghdGhpcy5lZGl0d2lu Lmhhc2ZvY3VzKQoJCXsKCQkJdGhpcy5lZGl0d2luLmZvY3VzKCk7CgkJCWlmIChp c19vcGVyYSkKCQkJewoJCQkJLy8gc2VlIGh0dHA6Ly93d3cudmJ1bGxldGluLmNv bS9mb3J1bS9idWdzMzUucGhwP2RvPXZpZXcmYnVnaWQ9Njg3CgkJCQl0aGlzLmVk aXR3aW4uZm9jdXMoKTsKCQkJfQoJCX0KCX0KCgkvKioKCSogSW5pdCBidXR0b24g Y29udHJvbHMgZm9yIHRoZSBlZGl0b3IKCSovCgl0aGlzLmluaXRfY29udHJvbHMg PSBmdW5jdGlvbigpCgl7CgkJdmFyIGNvbnRyb2xzID0gbmV3IEFycmF5KCk7CgoJ CWlmICh0aGlzLmNvbnRyb2xiYXIgPT0gbnVsbCkKCQl7CgkJCXJldHVybjsKCQl9 CgoJCXZhciBidXR0b25zID0gZmV0Y2hfdGFncyh0aGlzLmNvbnRyb2xiYXIsICdk aXYnKTsKCQlmb3IgKHZhciBpID0gMDsgaSA8IGJ1dHRvbnMubGVuZ3RoOyBpKysp CgkJewoJCQlpZiAoYnV0dG9uc1tpXS5jbGFzc05hbWUgPT0gJ2ltYWdlYnV0dG9u JyAmJiBidXR0b25zW2ldLmlkKQoJCQl7CgkJCQljb250cm9sc1tjb250cm9scy5s ZW5ndGhdID0gYnV0dG9uc1tpXS5pZDsKCQkJfQoJCX0KCQlmb3IgKHZhciBpID0g MDsgaSA8IGNvbnRyb2xzLmxlbmd0aDsgaSsrKQoJCXsKCQkJdmFyIGNvbnRyb2wg PSBmZXRjaF9vYmplY3QoY29udHJvbHNbaV0pOwoKCQkJaWYgKGNvbnRyb2wuaWQu aW5kZXhPZih0aGlzLmVkaXRvcmlkICsgJ19jbWRfJykgIT0gLTEpCgkJCXsKCQkJ CXRoaXMuaW5pdF9jb21tYW5kX2J1dHRvbihjb250cm9sKTsKCQkJfQoJCQllbHNl IGlmIChjb250cm9sLmlkLmluZGV4T2YodGhpcy5lZGl0b3JpZCArICdfcG9wdXBf JykgIT0gLTEpCgkJCXsKCQkJCXRoaXMuaW5pdF9wb3B1cF9idXR0b24oY29udHJv bCk7CgkJCX0KCQl9CgoJCXNldF91bnNlbGVjdGFibGUodGhpcy5jb250cm9sYmFy KTsKCX07CgoJLyoqCgkqIEluaXQgU21pbGllcwoJKi8KCXRoaXMuaW5pdF9zbWls aWVzID0gZnVuY3Rpb24oc21pbGllX2NvbnRhaW5lcikKCXsKCQlpZiAoc21pbGll X2NvbnRhaW5lciAhPSBudWxsKQoJCXsKCQkJdmFyIHNtaWxpZXMgPSBmZXRjaF90 YWdzKHNtaWxpZV9jb250YWluZXIsICdpbWcnKTsKCQkJZm9yICh2YXIgaSA9IDA7 IGkgPCBzbWlsaWVzLmxlbmd0aDsgaSsrKQoJCQl7CgkJCQlpZiAoc21pbGllc1tp XS5pZCAmJiBzbWlsaWVzW2ldLmlkLmluZGV4T2YoJ19zbWlsaWVfJykgIT0gZmFs c2UpCgkJCQl7CgkJCQkJc21pbGllc1tpXS5zdHlsZS5jdXJzb3IgPSBwb2ludGVy X2N1cnNvcjsKCQkJCQlzbWlsaWVzW2ldLmVkaXRvcmlkID0gdGhpcy5lZGl0b3Jp ZDsKCQkJCQlzbWlsaWVzW2ldLm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9FdmVu dHMucHJvdG90eXBlLnNtaWxpZV9vbmNsaWNrOwoJCQkJCXNtaWxpZXNbaV0udW5z ZWxlY3RhYmxlID0gJ29uJzsKCQkJCX0KCQkJfQoJCX0KCX0KCgkvKioKCSogSW5p dCBjb21tYW5kIGJ1dHRvbiAoYiwgaSwgdSBldGMuKQoJKgoJKiBAcGFyYW0Jb2Jq ZWN0CUN1cnJlbnQgSFRNTCBidXR0b24gbm9kZQoJKi8KCXRoaXMuaW5pdF9jb21t YW5kX2J1dHRvbiA9IGZ1bmN0aW9uKG9iaikKCXsKCQlvYmouY21kID0gb2JqLmlk LnN1YnN0cihvYmouaWQuaW5kZXhPZignX2NtZF8nKSArIDUpOwoJCW9iai5lZGl0 b3JpZCA9IHRoaXMuZWRpdG9yaWQ7CgkJdGhpcy5idXR0b25zW29iai5jbWRdID0g b2JqOwoKCQlpZiAob2JqLmNtZCA9PSAnc3dpdGNobW9kZScpCgkJewoJCQlpZiAo QUpBWF9Db21wYXRpYmxlKQoJCQl7CgkJCQlvYmouc3RhdGUgPSB0aGlzLnd5c2l3 eWdfbW9kZSA/IHRydWUgOiBmYWxzZTsKCQkJCXRoaXMuc2V0X2NvbnRyb2xfc3R5 bGUob2JqLCAnYnV0dG9uJywgdGhpcy53eXNpd3lnX21vZGUgPyAnc2VsZWN0ZWQn IDogJ25vcm1hbCcpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJb2JqLnBhcmVudE5v ZGUucmVtb3ZlQ2hpbGQob2JqKTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQlvYmou c3RhdGUgPSBmYWxzZTsKCQkJb2JqLm1vZGUgPSAnbm9ybWFsJzsKCQl9CgoJCS8v IGV2ZW50IGhhbmRsZXJzCgkJb2JqLm9uY2xpY2sgPSBvYmoub25tb3VzZWRvd24g PSBvYmoub25tb3VzZW92ZXIgPSBvYmoub25tb3VzZW91dCA9IHZCX1RleHRfRWRp dG9yX0V2ZW50cy5wcm90b3R5cGUuY29tbWFuZF9idXR0b25fb25tb3VzZWV2ZW50 OwoJfQoKCS8qKgoJKiBJbml0IHBvcHVwIGJ1dHRvbiAoZm9yZWNvbG9yLCBmb250 bmFtZSBldGMuKQoJKgoJKiBAcGFyYW0Jb2JqZWN0CUN1cnJlbnQgSFRNTCBidXR0 b24gbm9kZQoJKi8KCXRoaXMuaW5pdF9wb3B1cF9idXR0b24gPSBmdW5jdGlvbihv YmopCgl7CgkJb2JqLmNtZCA9IG9iai5pZC5zdWJzdHIob2JqLmlkLmluZGV4T2Yo J19wb3B1cF8nKSArIDcpOwoKCQlpZiAodGhpcy5wb3B1cG1vZGUpCgkJewoJCQkv LyByZWdpc3RlciBwb3B1cCBtZW51IGNvbnRyb2wKCQkJdkJtZW51LnJlZ2lzdGVy KG9iai5pZCwgdHJ1ZSk7CgkJCXZCbWVudS5tZW51c1tvYmouaWRdLm9wZW5fc3Rl cHMgPSA1OwoKCQkJb2JqLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCQkJb2Jq LnN0YXRlID0gZmFsc2U7CgkJCXRoaXMuYnV0dG9uc1tvYmouY21kXSA9IG9iajsK CgkJCWlmIChvYmouY21kID09ICdmb250bmFtZScpCgkJCXsKCQkJCXRoaXMuZm9u dG91dCA9IGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19mb250X291dCcp OwoJCQkJdGhpcy5mb250b3V0LmlubmVySFRNTCA9IG9iai50aXRsZTsKCQkJCXRo aXMuZm9udG9wdGlvbnMgPSB7JycgOiB0aGlzLmZvbnRvdXR9OwoKCQkJCWZvciAo dmFyIG9wdGlvbiBpbiBmb250b3B0aW9ucykKCQkJCXsKCQkJCQl2YXIgZGl2ID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCQkJZGl2LmlkID0gdGhp cy5lZGl0b3JpZCArICdfZm9udG9wdGlvbl8nICsgZm9udG9wdGlvbnNbb3B0aW9u XTsKCQkJCQlkaXYuc3R5bGUud2lkdGggPSB0aGlzLmZvbnRvdXQuc3R5bGUud2lk dGg7CgkJCQkJZGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgkJCQkJZGl2Lmlu bmVySFRNTCA9IGZvbnRvcHRpb25zW29wdGlvbl07CgkJCQkJdGhpcy5mb250b3B0 aW9uc1tmb250b3B0aW9uc1tvcHRpb25dXSA9IHRoaXMuZm9udG91dC5wYXJlbnRO b2RlLmFwcGVuZENoaWxkKGRpdik7CgkJCQl9CgkJCX0KCQkJZWxzZSBpZiAob2Jq LmNtZCA9PSAnZm9udHNpemUnKQoJCQl7CgkJCQl0aGlzLnNpemVvdXQgPSBmZXRj aF9vYmplY3QodGhpcy5lZGl0b3JpZCArICdfc2l6ZV9vdXQnKTsKCQkJCXRoaXMu c2l6ZW91dC5pbm5lckhUTUwgPSBvYmoudGl0bGU7CgkJCQl0aGlzLnNpemVvcHRp b25zID0geycnIDogdGhpcy5zaXplb3V0fTsKCgkJCQlmb3IgKHZhciBvcHRpb24g aW4gc2l6ZW9wdGlvbnMpCgkJCQl7CgkJCQkJdmFyIGRpdiA9IGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoJ2RpdicpOwoJCQkJCWRpdi5pZCA9IHRoaXMuZWRpdG9yaWQg KyAnX3NpemVvcHRpb25fJyArIHNpemVvcHRpb25zW29wdGlvbl07CgkJCQkJZGl2 LnN0eWxlLndpZHRoID0gdGhpcy5zaXplb3V0LnN0eWxlLndpZHRoOwoJCQkJCWRp di5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoJCQkJCWRpdi5pbm5lckhUTUwgPSBz aXplb3B0aW9uc1tvcHRpb25dOwoJCQkJCXRoaXMuc2l6ZW9wdGlvbnNbc2l6ZW9w dGlvbnNbb3B0aW9uXV0gPSB0aGlzLnNpemVvdXQucGFyZW50Tm9kZS5hcHBlbmRD aGlsZChkaXYpOwoJCQkJfQoJCQl9CgoJCQkvLyBleHRlbmQgb25tb3VzZW92ZXIK CQkJb2JqLl9vbm1vdXNlb3ZlciA9IG9iai5vbm1vdXNlb3ZlcjsKCQkJLy8gZXh0 ZW5kIG9uY2xpY2sKCQkJb2JqLl9vbmNsaWNrID0gb2JqLm9uY2xpY2s7CgoJCQkv LyBldmVudCBoYW5kbGVycwoJCQlvYmoub25tb3VzZW92ZXIgPSBvYmoub25tb3Vz ZW91dCA9IG9iai5vbmNsaWNrID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3Rv dHlwZS5wb3B1cF9idXR0b25fb25tb3VzZWV2ZW50OwoKCQkJLy8gZXh0ZW5kIG1l bnUgc2hvdwoJCQl2Qm1lbnUubWVudXNbb2JqLmlkXS5fc2hvdyA9IHZCbWVudS5t ZW51c1tvYmouaWRdLnNob3c7CgkJCXZCbWVudS5tZW51c1tvYmouaWRdLnNob3cg PSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLnBvcHVwX2J1dHRvbl9z aG93OwoJCX0KCQllbHNlCgkJewoJCQl0aGlzLmJ1aWxkX3NlbGVjdChvYmopOwoJ CX0KCX0KCgkvKioKCSogUmVwbGFjZSB0aGUgcG9wdXAgY29udHJvbHMgd2l0aCA8 c2VsZWN0PiBtZW51cyBmb3IgcnViYmlzaCBicm93c2VycwoJKgoJKiBAcGFyYW0J b2JqZWN0CVRoZSBwb3B1cCBjb250cm9sIGVsZW1lbnQKCSovCgl0aGlzLmJ1aWxk X3NlbGVjdCA9IGZ1bmN0aW9uKG9iaikKCXsKCQl2YXIgc2VsID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7CgkJc2VsLmlkID0gdGhpcy5lZGl0b3Jp ZCArICdfc2VsZWN0XycgKyBvYmouY21kOwoJCXNlbC5lZGl0b3JpZCA9IHRoaXMu ZWRpdG9yaWQ7CgkJc2VsLmNtZCA9IG9iai5jbWQ7CgoJCXZhciBvcHQgPSBkb2N1 bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKCQlvcHQudmFsdWUgPSAnJzsK CQlvcHQudGV4dCA9IG9iai50aXRsZTsKCQlzZWwuYWRkKG9wdCwgaXNfaWUgPyBz ZWwub3B0aW9ucy5sZW5ndGggOiBudWxsKTsKCgkJdmFyIG9wdCA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwoJCW9wdC52YWx1ZSA9ICcnOwoJCW9w dC50ZXh0ID0gJyAnOwoJCXNlbC5hZGQob3B0LCBpc19pZSA/IHNlbC5vcHRpb25z Lmxlbmd0aCA6IG51bGwpOwoKCQlzd2l0Y2ggKG9iai5jbWQpCgkJewoJCQljYXNl ICdmb250bmFtZSc6CgkJCXsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgZm9udG9w dGlvbnMubGVuZ3RoOyBpKyspCgkJCQl7CgkJCQkJdmFyIG9wdCA9IGRvY3VtZW50 LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpOwoJCQkJCW9wdC52YWx1ZSA9IGZvbnRv cHRpb25zW2ldOwoJCQkJCW9wdC50ZXh0ID0gKGZvbnRvcHRpb25zW2ldLmxlbmd0 aCA+IDEwID8gKGZvbnRvcHRpb25zW2ldLnN1YnN0cigwLCAxMCkgKyAnLi4uJykg OiBmb250b3B0aW9uc1tpXSk7CgkJCQkJc2VsLmFkZChvcHQsIGlzX2llID8gc2Vs Lm9wdGlvbnMubGVuZ3RoIDogbnVsbCk7CgkJCQl9CgoJCQkJc2VsLm9uY2hhbmdl ID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5mb3JtYXR0aW5nX3Nl bGVjdF9vbmNoYW5nZTsKCQkJCWJyZWFrOwoJCQl9CgoJCQljYXNlICdmb250c2l6 ZSc6CgkJCXsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZW9wdGlvbnMubGVu Z3RoOyBpKyspCgkJCQl7CgkJCQkJdmFyIG9wdCA9IGRvY3VtZW50LmNyZWF0ZUVs ZW1lbnQoJ29wdGlvbicpOwoJCQkJCW9wdC52YWx1ZSA9IHNpemVvcHRpb25zW2ld OwoJCQkJCW9wdC50ZXh0ID0gc2l6ZW9wdGlvbnNbaV07CgkJCQkJc2VsLmFkZChv cHQsIGlzX2llID8gc2VsLm9wdGlvbnMubGVuZ3RoIDogbnVsbCk7CgkJCQl9CgoJ CQkJc2VsLm9uY2hhbmdlID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlw ZS5mb3JtYXR0aW5nX3NlbGVjdF9vbmNoYW5nZTsKCQkJCWJyZWFrOwoJCQl9CgoJ CQljYXNlICdmb3JlY29sb3InOgoJCQl7CgkJCQlmb3IgKHZhciBpIGluIGNvbG9y b3B0aW9ucykKCQkJCXsKCQkJCQl2YXIgb3B0ID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgnb3B0aW9uJyk7CgkJCQkJb3B0LnZhbHVlID0gY29sb3JvcHRpb25zW2ld OwoJCQkJCW9wdC50ZXh0ID0gUEhQLnRyaW0oKGNvbG9yb3B0aW9uc1tpXS5sZW5n dGggPiA1ID8gKGNvbG9yb3B0aW9uc1tpXS5zdWJzdHIoMCwgNSkgKyAnLi4uJykg OiBjb2xvcm9wdGlvbnNbaV0pLnJlcGxhY2UobmV3IFJlZ0V4cCgnKFtBLVpdKScs ICdnJyksICcgJDEnKSk7CgkJCQkJb3B0LnN0eWxlLmJhY2tncm91bmRDb2xvciA9 IGk7CgkJCQkJc2VsLmFkZChvcHQsIGlzX2llID8gc2VsLm9wdGlvbnMubGVuZ3Ro IDogbnVsbCk7CgkJCQl9CgoJCQkJc2VsLm9uY2hhbmdlID0gdkJfVGV4dF9FZGl0 b3JfRXZlbnRzLnByb3RvdHlwZS5mb3JtYXR0aW5nX3NlbGVjdF9vbmNoYW5nZTsK CQkJCWJyZWFrOwoJCQl9CgoJCQljYXNlICdzbWlsaWUnOgoJCQl7CgkJCQlmb3Ig KHZhciBjYXQgaW4gc21pbGllb3B0aW9ucykKCQkJCXsKCQkJCQlmb3IgKHZhciBz bWlsaWVpZCBpbiBzbWlsaWVvcHRpb25zW2NhdF0pCgkJCQkJewoJCQkJCQlpZiAo c21pbGllaWQgIT0gJ21vcmUnKQoJCQkJCQl7CgkJCQkJCQl2YXIgb3B0ID0gZG9j dW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7CgkJCQkJCQlvcHQudmFsdWUg PSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzFdOwoJCQkJCQkJb3B0LnRl eHQgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzFdOwoJCQkJCQkJb3B0 LnNtaWxpZWlkID0gc21pbGllaWQ7CgkJCQkJCQlvcHQuc21pbGllcGF0aCA9IHNt aWxpZW9wdGlvbnNbY2F0XVtzbWlsaWVpZF1bMF07CgkJCQkJCQlvcHQuc21pbGll dGl0bGUgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzJdOwoJCQkJCQkJ c2VsLmFkZChvcHQsIGlzX2llID8gc2VsLm9wdGlvbnMubGVuZ3RoIDogbnVsbCk7 CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgoJCQkJc2VsLm9uY2hhbmdlID0gdkJfVGV4 dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5zbWlsaWVzZWxlY3Rfb25jaGFuZ2U7 CgkJCQlicmVhazsKCQkJfQoKCQkJY2FzZSAnYXR0YWNoJzoKCQkJewoJCQkJc2Vs Lm9ubW91c2VvdmVyID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5h dHRhY2hzZWxlY3Rfb25tb3VzZW92ZXI7CgkJCQlzZWwub25jaGFuZ2UgPSB2Ql9U ZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmF0dGFjaHNlbGVjdF9vbmNoYW5n ZTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoKCQl3aGlsZSAob2JqLmhhc0NoaWxkTm9k ZXMoKSkKCQl7CgkJCW9iai5yZW1vdmVDaGlsZChvYmouZmlyc3RDaGlsZCk7CgkJ fQoKCQl0aGlzLmJ1dHRvbnNbb2JqLmNtZF0gPSBvYmouYXBwZW5kQ2hpbGQoc2Vs KTsKCX0KCgkvKioKCSogSW5pdCBtZW51IGNvbnRyb2xzIGZvciB0aGUgZWRpdG9y CgkqCgkqIEBwYXJhbQlvYmplY3QJSFRNTCBtZW51IG5vZGUKCSovCgl0aGlzLmlu aXRfcG9wdXBfbWVudSA9IGZ1bmN0aW9uKG9iaikKCXsKCQlpZiAodGhpcy5kaXNh YmxlZCkKCQl7CgkJCXJldHVybjsKCQl9CgoJCXN3aXRjaCAob2JqLmNtZCkKCQl7 CgkJCWNhc2UgJ2ZvbnRuYW1lJzoKCQkJewoJCQkJdmFyIG1lbnUgPSB0aGlzLmlu aXRfbWVudV9jb250YWluZXIoJ2ZvbnRuYW1lJywgJzIwMHB4JywgJzI1MHB4Jywg J2F1dG8nKTsKCQkJCXRoaXMuYnVpbGRfZm9udG5hbWVfcG9wdXAob2JqLCBtZW51 KTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2ZvbnRzaXplJzoKCQkJewoJCQkJ dmFyIG1lbnUgPSB0aGlzLmluaXRfbWVudV9jb250YWluZXIoJ2ZvbnRzaXplJywg J2F1dG8nLCAnYXV0bycsICd2aXNpYmxlJyk7CgkJCQl0aGlzLmJ1aWxkX2ZvbnRz aXplX3BvcHVwKG9iaiwgbWVudSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdm b3JlY29sb3InOgoJCQl7CgkJCQl2YXIgbWVudSA9IHRoaXMuaW5pdF9tZW51X2Nv bnRhaW5lcignZm9yZWNvbG9yJywgJ2F1dG8nLCAnYXV0bycsICd2aXNpYmxlJyk7 CgkJCQl0aGlzLmJ1aWxkX2ZvcmVjb2xvcl9wb3B1cChvYmosIG1lbnUpOwoJCQkJ YnJlYWs7CgkJCX0KCQkJY2FzZSAnc21pbGllJzoKCQkJewoJCQkJdmFyIG1lbnUg PSB0aGlzLmluaXRfbWVudV9jb250YWluZXIoJ3NtaWxpZScsICcxNzVweCcsICcy NTBweCcsICdhdXRvJyk7CgkJCQl0aGlzLmJ1aWxkX3NtaWxpZV9wb3B1cChvYmos IG1lbnUpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnYXR0YWNoJzoKCQkJewoJ CQkJaWYgKHR5cGVvZiB2Ql9BdHRhY2htZW50cyAhPSAndW5kZWZpbmVkJyAmJiB2 Ql9BdHRhY2htZW50cy5oYXNfYXR0YWNobWVudHMoKSkKCQkJCXsKCQkJCQl2YXIg bWVudSA9IHRoaXMuaW5pdF9tZW51X2NvbnRhaW5lcignYXR0YWNoJywgJ2F1dG8n LCAnYXV0bycsICd2aXNpYmxlJyk7CgkJCQkJdGhpcy5idWlsZF9hdHRhY2htZW50 c19wb3B1cChtZW51LCBvYmopOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXJl dHVybiBmZXRjaF9vYmplY3QoJ21hbmFnZV9hdHRhY2htZW50c19idXR0b24nKS5v bmNsaWNrKCk7CgkJCQl9CgkJCX0KCQl9CgoJCXRoaXMucG9wdXBzW29iai5jbWRd ID0gdGhpcy5jb250cm9sYmFyLmFwcGVuZENoaWxkKG1lbnUpOwoKCQlzZXRfdW5z ZWxlY3RhYmxlKG1lbnUpOwoJfTsKCgkvKioKCSogSW5pdCBNZW51IENvbnRhaW5l ciBESVYKCSoKCSogQHBhcmFtCXN0cmluZwlDb21tYW5kIHN0cmluZyAoZm9yZWNv bG9yLCBmb250bmFtZSBldGMuKQoJKiBAcGFyYW0Jc3RyaW5nCUNTUyB3aWR0aCBm b3IgdGhlIG1lbnUKCSogQHBhcmFtCXN0cmluZwlDU1MgaGVpZ2h0IGZvciB0aGUg bWVudQoJKiBAcGFyYW0Jc3RyaW5nCUNTUyBvdmVyZmxvdyBmb3IgdGhlIG1lbnUK CSoKCSogQHJldHVybglvYmplY3QJTmV3bHkgY3JlYXRlZCBtZW51IGVsZW1lbnQK CSovCgl0aGlzLmluaXRfbWVudV9jb250YWluZXIgPSBmdW5jdGlvbihjbWQsIHdp ZHRoLCBoZWlnaHQsIG92ZXJmbG93KQoJewoJCXZhciBtZW51ID0gZG9jdW1lbnQu Y3JlYXRlRWxlbWVudCgnZGl2Jyk7CgoJCW1lbnUuaWQgPSB0aGlzLmVkaXRvcmlk ICsgJ19wb3B1cF8nICsgY21kICsgJ19tZW51JzsKCQltZW51LmNsYXNzTmFtZSA9 ICd2Ym1lbnVfcG9wdXAnOwoJCW1lbnUuc3R5bGUuZGlzcGxheSA9ICdub25lJzsK CQltZW51LnN0eWxlLmN1cnNvciA9ICdkZWZhdWx0JzsKCQltZW51LnN0eWxlLnBh ZGRpbmcgPSAnM3B4JzsKCQltZW51LnN0eWxlLndpZHRoID0gd2lkdGg7CgkJbWVu dS5zdHlsZS5oZWlnaHQgPSBoZWlnaHQ7CgkJbWVudS5zdHlsZS5vdmVyZmxvdyA9 IG92ZXJmbG93OwoKCQlyZXR1cm4gbWVudTsKCX0KCgkvKioKCSogQnVpbGQgRm9u dCBOYW1lIFBvcHVwIENvbnRlbnRzCgkqCgkqIEBwYXJhbQlvYmplY3QJVGhlIGNv bnRyb2wgb2JqZWN0IGZvciB0aGUgbWVudQoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBt ZW51IGNvbnRhaW5lciBvYmplY3QKCSovCgl0aGlzLmJ1aWxkX2ZvbnRuYW1lX3Bv cHVwID0gZnVuY3Rpb24ob2JqLCBtZW51KQoJewoJCWZvciAodmFyIG4gaW4gZm9u dG9wdGlvbnMpCgkJewoJCQl2YXIgb3B0aW9uID0gZG9jdW1lbnQuY3JlYXRlRWxl bWVudCgnZGl2Jyk7CgkJCW9wdGlvbi5pbm5lckhUTUwgPSAnPGZvbnQgZmFjZT0i JyArIGZvbnRvcHRpb25zW25dICsgJyI+JyArIGZvbnRvcHRpb25zW25dICsgJzwv Zm9udD4nOwoJCQlvcHRpb24uY2xhc3NOYW1lID0gJ29mb250JzsKCQkJb3B0aW9u LnN0eWxlLnRleHRBbGlnbiA9ICdsZWZ0JzsKCQkJb3B0aW9uLnRpdGxlID0gZm9u dG9wdGlvbnNbbl07CgkJCW9wdGlvbi5jbWQgPSBvYmouY21kOwoJCQlvcHRpb24u Y29udHJvbGtleSA9IG9iai5pZDsKCQkJb3B0aW9uLmVkaXRvcmlkID0gdGhpcy5l ZGl0b3JpZDsKCQkJb3B0aW9uLm9ubW91c2VvdmVyID0gb3B0aW9uLm9ubW91c2Vv dXQgPSBvcHRpb24ub25tb3VzZXVwID0gb3B0aW9uLm9ubW91c2Vkb3duID0gdkJf VGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2Vl dmVudDsKCQkJb3B0aW9uLm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLmZvcm1hdHRpbmdfb3B0aW9uX29uY2xpY2s7CgkJCW1lbnUuYXBw ZW5kQ2hpbGQob3B0aW9uKTsKCQl9Cgl9CgoJLyoqCgkqIEJ1aWxkIEZvbnQgU2l6 ZSBQb3B1cCBDb250ZW50cwoJKgoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBjb250cm9s IG9iamVjdCBmb3IgdGhlIG1lbnUKCSogQHBhcmFtCW9iamVjdAlUaGUgbWVudSBj b250YWluZXIgb2JqZWN0CgkqLwoJdGhpcy5idWlsZF9mb250c2l6ZV9wb3B1cCA9 IGZ1bmN0aW9uKG9iaiwgbWVudSkKCXsKCQlmb3IgKHZhciBuIGluIHNpemVvcHRp b25zKQoJCXsKCQkJdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo J2RpdicpOwoJCQlvcHRpb24uaW5uZXJIVE1MID0gJzxmb250IHNpemU9IicgKyBz aXplb3B0aW9uc1tuXSArICciPicgKyBzaXplb3B0aW9uc1tuXSArICc8L2ZvbnQ+ JzsKCQkJb3B0aW9uLmNsYXNzTmFtZSA9ICdvc2l6ZSc7CgkJCW9wdGlvbi5zdHls ZS50ZXh0QWxpZ24gPSAnY2VudGVyJzsKCQkJb3B0aW9uLnRpdGxlID0gc2l6ZW9w dGlvbnNbbl07CgkJCW9wdGlvbi5jbWQgPSBvYmouY21kOwoJCQlvcHRpb24uY29u dHJvbGtleSA9IG9iai5pZDsKCQkJb3B0aW9uLmVkaXRvcmlkID0gdGhpcy5lZGl0 b3JpZDsKCQkJb3B0aW9uLm9ubW91c2VvdmVyID0gb3B0aW9uLm9ubW91c2VvdXQg PSBvcHRpb24ub25tb3VzZXVwID0gb3B0aW9uLm9ubW91c2Vkb3duID0gdkJfVGV4 dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2VldmVu dDsKCQkJb3B0aW9uLm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJv dG90eXBlLmZvcm1hdHRpbmdfb3B0aW9uX29uY2xpY2s7CgkJCW1lbnUuYXBwZW5k Q2hpbGQob3B0aW9uKTsKCQl9Cgl9CgoJLyoqCgkqIEJ1aWxkIEZvcmVDb2xvciBQ b3B1cCBDb250ZW50cwoJKgoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBjb250cm9sIG9i amVjdCBmb3IgdGhlIG1lbnUKCSogQHBhcmFtCW9iamVjdAlUaGUgbWVudSBjb250 YWluZXIgb2JqZWN0CgkqLwoJdGhpcy5idWlsZF9mb3JlY29sb3JfcG9wdXAgPSBm dW5jdGlvbihvYmosIG1lbnUpCgl7CgkJdmFyIGNvbG9yb3V0ID0gZmV0Y2hfb2Jq ZWN0KHRoaXMuZWRpdG9yaWQgKyAnX2NvbG9yX291dCcpOwoJCWNvbG9yb3V0LmVk aXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCQljb2xvcm91dC5vbmNsaWNrID0gdkJf VGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5jb2xvcm91dF9vbmNsaWNrOwoK CQl2YXIgdGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0YWJsZScpOwoJ CXRhYmxlLmNlbGxQYWRkaW5nID0gMDsKCQl0YWJsZS5jZWxsU3BhY2luZyA9IDA7 CgkJdGFibGUuYm9yZGVyID0gMDsKCgkJdmFyIGkgPSAwOwoJCWZvciAodmFyIGhl eCBpbiBjb2xvcm9wdGlvbnMpCgkJewoJCQlpZiAoaSAlIDggPT0gMCkKCQkJewoJ CQkJdmFyIHRyID0gdGFibGUuaW5zZXJ0Um93KC0xKTsKCQkJfQoJCQlpKys7CgoJ CQl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCWRp di5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcm9wdGlvbnNbaGV4XTsKCgkJ CXZhciBvcHRpb24gPSB0ci5pbnNlcnRDZWxsKC0xKTsKCQkJb3B0aW9uLnN0eWxl LnRleHRBbGlnbiA9ICdjZW50ZXInOwoJCQlvcHRpb24uY2xhc3NOYW1lID0gJ29j b2xvcic7CgkJCW9wdGlvbi5hcHBlbmRDaGlsZChkaXYpOwoJCQlvcHRpb24uY21k ID0gb2JqLmNtZDsKCQkJb3B0aW9uLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsK CQkJb3B0aW9uLmNvbnRyb2xrZXkgPSBvYmouaWQ7CgkJCW9wdGlvbi5jb2xvcm5h bWUgPSBjb2xvcm9wdGlvbnNbaGV4XTsKCQkJb3B0aW9uLmlkID0gdGhpcy5lZGl0 b3JpZCArICdfY29sb3JfJyArIGNvbG9yb3B0aW9uc1toZXhdOwoJCQlvcHRpb24u b25tb3VzZW92ZXIgPSBvcHRpb24ub25tb3VzZW91dCA9IG9wdGlvbi5vbm1vdXNl dXAgPSBvcHRpb24ub25tb3VzZWRvd24gPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLm1lbnVvcHRpb25fb25tb3VzZWV2ZW50OwoJCQlvcHRpb24ub25j bGljayA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuY29sb3JvcHRp b25fb25jbGljazsKCQl9CgoJCW1lbnUuYXBwZW5kQ2hpbGQodGFibGUpOwoJfQoK CS8qKgoJKiBCdWlsZCBTbWlsaWUgUG9wdXAgQ29udGVudHMKCSoKCSogQHBhcmFt CW9iamVjdAlUaGUgY29udHJvbCBvYmplY3QgZm9yIHRoZSBtZW51CgkqIEBwYXJh bQlvYmplY3QJVGhlIG1lbnUgY29udGFpbmVyIG9iamVjdAoJKi8KCXRoaXMuYnVp bGRfc21pbGllX3BvcHVwID0gZnVuY3Rpb24ob2JqLCBtZW51KQoJewoJCWZvciAo dmFyIGNhdCBpbiBzbWlsaWVvcHRpb25zKQoJCXsKCQkJdmFyIGNhdGVnb3J5ID0g ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCWNhdGVnb3J5LmNsYXNz TmFtZSA9ICd0aGVhZCc7CgkJCWNhdGVnb3J5LmlubmVySFRNTCA9IGNhdDsKCQkJ bWVudS5hcHBlbmRDaGlsZChjYXRlZ29yeSk7CgoJCQlmb3IgKHZhciBzbWlsaWVp ZCBpbiBzbWlsaWVvcHRpb25zW2NhdF0pCgkJCXsKCQkJCWlmIChzbWlsaWVpZCA9 PSAnbW9yZScpCgkJCQl7CgkJCQkJdmFyIG9wdGlvbiA9IGRvY3VtZW50LmNyZWF0 ZUVsZW1lbnQoJ2RpdicpOwoJCQkJCW9wdGlvbi5jbGFzc05hbWUgPSAndGhlYWQn OwoJCQkJCW9wdGlvbi5pbm5lckhUTUwgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21p bGllaWRdOwoJCQkJCW9wdGlvbi5zdHlsZS5jdXJzb3IgPSBwb2ludGVyX2N1cnNv cjsKCQkJCQlvcHRpb24uZWRpdG9yaWQgPSB0aGlzLmVkaXRvcmlkOwoJCQkJCW9w dGlvbi5jb250cm9sa2V5ID0gb2JqLmlkOwoJCQkJCW9wdGlvbi5vbmNsaWNrID0g dkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5zbWlsaWVtb3JlX29uY2xp Y2s7CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdmFyIG9wdGlvbiA9IGRvY3Vt ZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwoJCQkJCW9wdGlvbi5lZGl0b3JpZCA9 IHRoaXMuZWRpdG9yaWQ7CgkJCQkJb3B0aW9uLmNvbnRyb2xrZXkgPSBvYmouaWQ7 CgkJCQkJb3B0aW9uLnNtaWxpZWlkID0gc21pbGllaWQ7CgkJCQkJb3B0aW9uLnNt aWxpZXRleHQgPSBzbWlsaWVvcHRpb25zW2NhdF1bc21pbGllaWRdWzFdOwoJCQkJ CW9wdGlvbi5zbWlsaWV0aXRsZSA9IHNtaWxpZW9wdGlvbnNbY2F0XVtzbWlsaWVp ZF1bMl07CgoJCQkJCW9wdGlvbi5jbGFzc05hbWUgPSAnb3NtaWxpZSc7CgkJCQkJ b3B0aW9uLmlubmVySFRNTCA9ICc8aW1nIHNyYz0iJyArIHNtaWxpZW9wdGlvbnNb Y2F0XVtzbWlsaWVpZF1bMF0gKyAnIiBhbHQ9IicgKyBzbWlsaWVvcHRpb25zW2Nh dF1bc21pbGllaWRdWzJdICsgJyIgLz4gJyArIHNtaWxpZW9wdGlvbnNbY2F0XVtz bWlsaWVpZF1bMl07CgoJCQkJCW9wdGlvbi5vbm1vdXNlb3ZlciA9IG9wdGlvbi5v bm1vdXNlb3V0ID0gb3B0aW9uLm9ubW91c2Vkb3duID0gb3B0aW9uLm9ubW91c2V1 cCA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9v bm1vdXNlZXZlbnQ7CgoJCQkJCW9wdGlvbi5vbmNsaWNrID0gdkJfVGV4dF9FZGl0 b3JfRXZlbnRzLnByb3RvdHlwZS5zbWlsaWVvcHRpb25fb25jbGljazsKCQkJCX0K CgkJCQltZW51LmFwcGVuZENoaWxkKG9wdGlvbik7CgkJCX0KCQl9Cgl9CgoJLyoq CgkqIEJ1aWxkIEF0dGFjaG1lbnRzIFBvcHVwCgkqCgkqIEBwYXJhbQlvYmplY3QJ VGhlIGNvbnRyb2wgb2JqZWN0IGZvciB0aGUgbWVudQoJKiBAcGFyYW0Jb2JqZWN0 CVRoZSBtZW51IGNvbnRhaW5lciBvYmplY3QKCSovCgl0aGlzLmJ1aWxkX2F0dGFj aG1lbnRzX3BvcHVwID0gZnVuY3Rpb24obWVudSwgb2JqKQoJewoJCWlmICh0aGlz LnBvcHVwbW9kZSkKCQl7CgkJCXdoaWxlIChtZW51Lmhhc0NoaWxkTm9kZXMoKSkK CQkJewoJCQkJbWVudS5yZW1vdmVDaGlsZChtZW51LmZpcnN0Q2hpbGQpOwoJCQl9 CgoJCQl2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJ CWRpdi5lZGl0b3JpZCA9IHRoaXMuZWRpdG9yaWQ7CgkJCWRpdi5jb250cm9sa2V5 ID0gb2JqLmlkOwoJCQlkaXYuY2xhc3NOYW1lID0gJ3RoZWFkJzsKCQkJZGl2LnN0 eWxlLmN1cnNvciA9IHBvaW50ZXJfY3Vyc29yOwoJCQlkaXYuaW5uZXJIVE1MID0g ZmV0Y2hfb2JqZWN0KCdtYW5hZ2VfYXR0YWNobWVudHNfYnV0dG9uJykudmFsdWU7 CgkJCWRpdi50aXRsZSA9IGZldGNoX29iamVjdCgnbWFuYWdlX2F0dGFjaG1lbnRz X2J1dHRvbicpLnRpdGxlOwoJCQlkaXYub25jbGljayA9IHZCX1RleHRfRWRpdG9y X0V2ZW50cy5wcm90b3R5cGUuYXR0YWNobWFuYWdlX29uY2xpY2s7CgoJCQltZW51 LmFwcGVuZENoaWxkKGRpdik7CgoJCQl2YXIgYXR0YWNoX2NvdW50ID0gMDsKCQkJ Zm9yICh2YXIgaWQgaW4gdkJfQXR0YWNobWVudHMuYXR0YWNobWVudHMpCgkJCXsK CQkJCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJ CWRpdi5lZGl0b3JpZCA9IHRoaXMuZWRpdG9yaWQ7CgkJCQlkaXYuY29udHJvbGtl eSA9IG9iai5pZDsKCQkJCWRpdi5jbGFzc05hbWUgPSAnb3NtaWxpZSc7CgkJCQlk aXYuYXR0YWNobWVudGlkID0gaWQ7CgkJCQlkaXYuaW5uZXJIVE1MID0gJzxpbWcg c3JjPSInICsgdkJfQXR0YWNobWVudHMuYXR0YWNobWVudHNbaWRdWydpbWdwYXRo J10gKyAnIiBhbHQ9IiIgLz4gJyArIHZCX0F0dGFjaG1lbnRzLmF0dGFjaG1lbnRz W2lkXVsnZmlsZW5hbWUnXTsKCQkJCWRpdi5vbm1vdXNlb3ZlciA9IGRpdi5vbm1v dXNlb3V0ID0gZGl2Lm9ubW91c2Vkb3duID0gZGl2Lm9ubW91c2V1cCA9IHZCX1Rl eHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUubWVudW9wdGlvbl9vbm1vdXNlZXZl bnQ7CgkJCQlkaXYub25jbGljayA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90 b3R5cGUuYXR0YWNob3B0aW9uX29uY2xpY2s7CgoJCQkJbWVudS5hcHBlbmRDaGls ZChkaXYpOwoJCQkJYXR0YWNoX2NvdW50Kys7CgkJCX0KCQkJaWYgKGF0dGFjaF9j b3VudCA+IDEpCgkJCXsKCQkJCXZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVt ZW50KCdkaXYnKTsKCQkJCWRpdi5lZGl0b3JpZCA9IHRoaXMuZWRpdG9yaWQKCQkJ CWRpdi5jb250cm9sa2V5ID0gb2JqLmlkOwoJCQkJZGl2LmNsYXNzTmFtZSA9ICdv c21pbGllJzsKCQkJCWRpdi5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnOwoJCQkJ ZGl2LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJzI1cHgnOwoJCQkJZGl2LmlubmVySFRN TCA9IHZicGhyYXNlWydpbnNlcnRfYWxsJ107CgkJCQlkaXYub25tb3VzZW92ZXIg PSBkaXYub25tb3VzZW91dCA9IGRpdi5vbm1vdXNlZG93biA9IGRpdi5vbm1vdXNl dXAgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLm1lbnVvcHRpb25f b25tb3VzZWV2ZW50OwoJCQkJZGl2Lm9uY2xpY2sgPSB2Ql9UZXh0X0VkaXRvcl9F dmVudHMucHJvdG90eXBlLmF0dGFjaGluc2VydGFsbF9vbmNsaWNrOwoKCQkJCW1l bnUuYXBwZW5kQ2hpbGQoZGl2KTsKCQkJfQoJCX0KCQllbHNlCgkJewoJCQl3aGls ZSAobWVudS5vcHRpb25zLmxlbmd0aCA+IDIpCgkJCXsKCQkJCW1lbnUucmVtb3Zl KG1lbnUub3B0aW9ucy5sZW5ndGggLSAxKTsKCQkJfQoKCQkJZm9yICh2YXIgaWQg aW4gdkJfQXR0YWNobWVudHMuYXR0YWNobWVudHMpCgkJCXsKCQkJCXZhciBvcHQg PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTsKCQkJCW9wdC52YWx1 ZSA9IGlkOwoJCQkJb3B0LnRleHQgPSB2Ql9BdHRhY2htZW50cy5hdHRhY2htZW50 c1tpZF1bJ2ZpbGVuYW1lJ107CgkJCQltZW51LmFkZChvcHQsIGlzX2llID8gbWVu dS5vcHRpb25zLmxlbmd0aCA6IG51bGwpOwoJCQl9CgkJfQoKCQlzZXRfdW5zZWxl Y3RhYmxlKG1lbnUpOwoJfQoKCS8qKgoJKiBNZW51IENvbnRleHQKCSoKCSogQHBh cmFtCW9iamVjdAlUaGUgbWVudSBjb250YWluZXIgb2JqZWN0CgkqIEBwYXJhbQlz dHJpbmcJVGhlIHN0YXRlIG9mIHRoZSBjb250cm9sCgkqLwoJdGhpcy5tZW51X2Nv bnRleHQgPSBmdW5jdGlvbihvYmosIHN0YXRlKQoJewoJCWlmICh0aGlzLmRpc2Fi bGVkKQoJCXsKCQkJcmV0dXJuOwoJCX0KCgkJc3dpdGNoIChvYmouc3RhdGUpCgkJ ewoJCQljYXNlIHRydWU6IC8vIHNlbGVjdGVkIG1lbnUgaXMgb3BlbgoJCQl7CgkJ CQl0aGlzLnNldF9jb250cm9sX3N0eWxlKG9iaiwgJ2J1dHRvbicsICdkb3duJyk7 CgkJCQlicmVhazsKCQkJfQoKCQkJZGVmYXVsdDoKCQkJewoJCQkJc3dpdGNoIChz dGF0ZSkKCQkJCXsKCQkJCQljYXNlICdtb3VzZW91dCc6CgkJCQkJewoJCQkJCQl0 aGlzLnNldF9jb250cm9sX3N0eWxlKG9iaiwgJ2J1dHRvbicsICdub3JtYWwnKTsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ21vdXNlZG93bic6CgkJCQkJ ewoJCQkJCQl0aGlzLnNldF9jb250cm9sX3N0eWxlKG9iaiwgJ3BvcHVwJywgJ2Rv d24nKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ21vdXNldXAnOgoJ CQkJCWNhc2UgJ21vdXNlb3Zlcic6CgkJCQkJewoJCQkJCQl0aGlzLnNldF9jb250 cm9sX3N0eWxlKG9iaiwgJ2J1dHRvbicsICdob3ZlcicpOwoJCQkJCQlicmVhazsK CQkJCQl9CgkJCQl9CgkJCX0KCQl9Cgl9OwoKCS8qKgoJKiBCdXR0b24gQ29udGV4 dAoJKgoJKiBAcGFyYW0Jb2JqZWN0CVRoZSBidXR0b24gb2JqZWN0CgkqIEBwYXJh bQlzdHJpbmcJSW5jb21pbmcgZXZlbnQgdHlwZQoJKiBAcGFyYW0Jc3RyaW5nCUNv bnRyb2wgdHlwZSAtICdidXR0b24nIG9yICdtZW51JwoJKi8KCXRoaXMuYnV0dG9u X2NvbnRleHQgPSBmdW5jdGlvbihvYmosIHN0YXRlLCBjb250cm9sdHlwZSkKCXsK CQlpZiAodGhpcy5kaXNhYmxlZCkKCQl7CgkJCXJldHVybjsKCQl9CgoJCWlmICh0 eXBlb2YgY29udHJvbHR5cGUgPT0gJ3VuZGVmaW5lZCcpCgkJewoJCQljb250cm9s dHlwZSA9ICdidXR0b24nOwoJCX0KCgkJc3dpdGNoIChvYmouc3RhdGUpCgkJewoJ CQljYXNlIHRydWU6IC8vIHNlbGVjdGVkIGJ1dHRvbgoJCQl7CgkJCQlzd2l0Y2gg KHN0YXRlKQoJCQkJewoJCQkJCWNhc2UgJ21vdXNlb3Zlcic6CgkJCQkJY2FzZSAn bW91c2Vkb3duJzoKCQkJCQljYXNlICdtb3VzZXVwJzoKCQkJCQl7CgkJCQkJCXRo aXMuc2V0X2NvbnRyb2xfc3R5bGUob2JqLCBjb250cm9sdHlwZSwgJ2Rvd24nKTsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ21vdXNlb3V0JzoKCQkJCQl7 CgkJCQkJCXRoaXMuc2V0X2NvbnRyb2xfc3R5bGUob2JqLCAnYnV0dG9uJywgJ3Nl bGVjdGVkJyk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJ CQl9CgoJCQlkZWZhdWx0OiAvLyBub3Qgc2VsZWN0ZWQKCQkJewoJCQkJc3dpdGNo IChzdGF0ZSkKCQkJCXsKCQkJCQljYXNlICdtb3VzZW92ZXInOgoJCQkJCWNhc2Ug J21vdXNldXAnOgoJCQkJCXsKCQkJCQkJdGhpcy5zZXRfY29udHJvbF9zdHlsZShv YmosIGNvbnRyb2x0eXBlLCAnaG92ZXInKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJ CQkJCWNhc2UgJ21vdXNlZG93bic6CgkJCQkJewoJCQkJCQl0aGlzLnNldF9jb250 cm9sX3N0eWxlKG9iaiwgY29udHJvbHR5cGUsICdkb3duJyk7CgkJCQkJCWJyZWFr OwoJCQkJCX0KCQkJCQljYXNlICdtb3VzZW91dCc6CgkJCQkJewoJCQkJCQl0aGlz LnNldF9jb250cm9sX3N0eWxlKG9iaiwgY29udHJvbHR5cGUsICdub3JtYWwnKTsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9 OwoKCS8qKgoJKiBTZXQgQ29udHJvbCBTdHlsZQoJKgoJKiBAcGFyYW0Jb2JqZWN0 CVRoZSBvYmplY3QgdG8gYmUgc3R5bGVkCgkqIEBwYXJhbQlzdHJpbmcJQ29udHJv bCB0eXBlIC0gJ2J1dHRvbicgb3IgJ21lbnUnCgkqIEBwYXJhbQlzdHJpbmcJVGhl IG1vZGUgdG8gdXNlLCBjb3JyZXNwb25kaW5nIHRvIHRoZSBpc3R5bGVzIGFycmF5 CgkqLwoJdGhpcy5zZXRfY29udHJvbF9zdHlsZSA9IGZ1bmN0aW9uKG9iaiwgY29u dHJvbHR5cGUsIG1vZGUpCgl7CgkJaWYgKG9iai5tb2RlICE9IG1vZGUpCgkJewoJ CQlvYmoubW9kZSA9IG1vZGU7CgoJCQkvLyBjb25zdHJ1Y3QgdGhlIG5hbWUgb2Yg dGhlIGFwcHJvcHJpYXRlIGFycmF5IGtleSBmcm9tIHRoZSBpc3R5bGVzIGFycmF5 CgkJCWlzdHlsZSA9ICdwaV8nICsgY29udHJvbHR5cGUgKyAnXycgKyBvYmoubW9k ZTsKCgkJCS8vIHNldCBlbGVtZW50IGJhY2tncm91bmQsIGNvbG9yLCBwYWRkaW5n IGFuZCBib3JkZXIKCQkJaWYgKHR5cGVvZiBpc3R5bGVzICE9ICd1bmRlZmluZWQn ICYmIHR5cGVvZiBpc3R5bGVzW2lzdHlsZV0gIT0gJ3VuZGVmaW5lZCcpCgkJCXsK CQkJCW9iai5zdHlsZS5iYWNrZ3JvdW5kID0gaXN0eWxlc1tpc3R5bGVdWzBdOwoJ CQkJb2JqLnN0eWxlLmNvbG9yID0gaXN0eWxlc1tpc3R5bGVdWzFdOwoJCQkJaWYg KGNvbnRyb2x0eXBlICE9ICdtZW51JykKCQkJCXsKCQkJCQlvYmouc3R5bGUucGFk ZGluZyA9IGlzdHlsZXNbaXN0eWxlXVsyXTsKCQkJCX0KCQkJCW9iai5zdHlsZS5i b3JkZXIgPSBpc3R5bGVzW2lzdHlsZV1bM107CgoJCQkJdmFyIHRkcyA9IGZldGNo X3RhZ3Mob2JqLCAndGQnKTsKCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgdGRzLmxl bmd0aDsgaSsrKQoJCQkJewoJCQkJCXN3aXRjaCAodGRzW2ldLmNsYXNzTmFtZSkK CQkJCQl7CgkJCQkJCS8vIHNldCB0aGUgcmlnaHQtYm9yZGVyIGZvciBwb3B1cF9m ZWVkYmFjayBjbGFzcyBlbGVtZW50cwoJCQkJCQljYXNlICdwb3B1cF9mZWVkYmFj ayc6CgkJCQkJCXsKCQkJCQkJCXRkc1tpXS5zdHlsZS5ib3JkZXJSaWdodCA9ICht b2RlID09ICdub3JtYWwnID8gaXN0eWxlc1sncGlfbWVudV9ub3JtYWwnXVszXSA6 IGlzdHlsZXNbaXN0eWxlXVszXSk7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgoJCQkJ CQkvLyBzZXQgdGhlIGJvcmRlciBjb2xvdXIgZm9yIHBvcHVwX3BpY2tidXR0b24g Y2xhc3MgZWxlbWVudHMKCQkJCQkJY2FzZSAncG9wdXBfcGlja2J1dHRvbic6CgkJ CQkJCXsKCQkJCQkJCXRkc1tpXS5zdHlsZS5ib3JkZXJDb2xvciA9IChtb2RlID09 ICdub3JtYWwnID8gaXN0eWxlc1sncGlfbWVudV9ub3JtYWwnXVswXSA6IGlzdHls ZXNbaXN0eWxlXVswXSk7CgkJCQkJCX0KCQkJCQkJYnJlYWs7CgoJCQkJCQkvLyBz ZXQgdGhlIGxlZnQtcGFkZGluZyBhbmQgbGVmdC1ib3JkZXIgZm9yIGFsdF9waWNr YnV0dG9uIGVsZW1lbnRzCgkJCQkJCWNhc2UgJ2FsdF9waWNrYnV0dG9uJzoKCQkJ CQkJewoJCQkJCQkJaWYgKG9iai5zdGF0ZSkKCQkJCQkJCXsKCQkJCQkJCQl0ZHNb aV0uc3R5bGUucGFkZGluZ0xlZnQgPSBpc3R5bGVzWydwaV9idXR0b25fbm9ybWFs J11bMl07CgkJCQkJCQkJdGRzW2ldLnN0eWxlLmJvcmRlckxlZnQgPSBpc3R5bGVz WydwaV9idXR0b25fbm9ybWFsJ11bM107CgkJCQkJCQl9CgkJCQkJCQllbHNlCgkJ CQkJCQl7CgkJCQkJCQkJdGRzW2ldLnN0eWxlLnBhZGRpbmdMZWZ0ID0gaXN0eWxl c1tpc3R5bGVdWzJdOwoJCQkJCQkJCXRkc1tpXS5zdHlsZS5ib3JkZXJMZWZ0ID0g aXN0eWxlc1tpc3R5bGVdWzNdOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJ fQoJCQl9CgkJfQoJfTsKCgkvKioKCSogRm9ybWF0IHRleHQKCSoKCSogQHBhcmFt CWV2ZW50CUV2ZW50IG9iamVjdAoJKiBAcGFyYW0Jc3RyaW5nCUZvcm1hdHRpbmcg Y29tbWFuZAoJKiBAcGFyYW0Jc3RyaW5nCU9wdGlvbmFsIGFyZ3VtZW50IHRvIHRo ZSBmb3JtYXR0aW5nIGNvbW1hbmQKCSoKCSogQHJldHVybglib29sZWFuCgkqLwoJ dGhpcy5mb3JtYXQgPSBmdW5jdGlvbihlLCBjbWQsIGFyZykKCXsKCQllID0gZG9f YW5fZShlKTsKCgkJaWYgKHRoaXMuZGlzYWJsZWQpCgkJewoJCQlyZXR1cm4gZmFs c2U7CgkJfQoKCQlpZiAoY21kICE9ICdyZWRvJykKCQl7CgkJCXRoaXMuaGlzdG9y eS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRzKCkpOwoJCX0K CgkJaWYgKGNtZCA9PSAnc3dpdGNobW9kZScpCgkJewoJCQlzd2l0Y2hfZWRpdG9y X21vZGUodGhpcy5lZGl0b3JpZCk7CgkJCXJldHVybjsKCQl9CgkJZWxzZSBpZiAo Y21kLnN1YnN0cigwLCA2KSA9PSAncmVzaXplJykKCQl7CgkJCXRoaXMucmVzaXpl X2VkaXRvcihwYXJzZUludChjbWQuc3Vic3RyKDkpLCAxMCkgKiAocGFyc2VJbnQo Y21kLnN1YnN0cig3LCAxKSwgMTApID09ICcxJyA/IDEgOiAtMSkpOwoJCQlyZXR1 cm47CgkJfQoKCQl0aGlzLmNoZWNrX2ZvY3VzKCk7CgoJCWlmIChjbWQuc3Vic3Ry KDAsIDQpID09ICd3cmFwJykKCQl7CgkJCXZhciByZXQgPSB0aGlzLndyYXBfdGFn cyhjbWQuc3Vic3RyKDYpLCAoY21kLnN1YnN0cig0LCAxKSA9PSAnMScgPyB0cnVl IDogZmFsc2UpKTsKCQl9CgkJZWxzZSBpZiAodGhpc1tjbWRdKQoJCXsKCQkJdmFy IHJldCA9IHRoaXNbY21kXShlKTsKCQl9CgkJZWxzZQoJCXsKCQkJdHJ5CgkJCXsK CQkJCXZhciByZXQgPSB0aGlzLmFwcGx5X2Zvcm1hdChjbWQsIGZhbHNlLCAodHlw ZW9mIGFyZyA9PSAndW5kZWZpbmVkJyA/IHRydWUgOiBhcmcpKTsKCQkJfQoJCQlj YXRjaChlKQoJCQl7CgkJCQl0aGlzLmhhbmRsZV9lcnJvcihjbWQsIGUpOwoJCQkJ dmFyIHJldCA9IGZhbHNlOwoJCQl9CgkJfQoKCQlpZiAoY21kICE9ICd1bmRvJykK CQl7CgkJCXRoaXMuaGlzdG9yeS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9y X2NvbnRlbnRzKCkpOwoJCX0KCgkJdGhpcy5zZXRfY29udGV4dChjbWQpOwoKCQl0 aGlzLmNoZWNrX2ZvY3VzKCk7CgoJCXJldHVybiByZXQ7Cgl9OwoKCS8qKgoJKiBJ bnNlcnQgSW1hZ2UKCSoKCSogQHBhcmFtCWV2ZW50CUV2ZW50IG9iamVjdAoJKiBA cGFyYW0Jc3RyaW5nCShPcHRpb25hbCkgSW1hZ2UgVVJMCgkqCgkqIEByZXR1cm4J Ym9vbGVhbgoJKi8KCXRoaXMuaW5zZXJ0aW1hZ2UgPSBmdW5jdGlvbihlLCBpbWcp Cgl7CgkJaWYgKHR5cGVvZiBpbWcgPT0gJ3VuZGVmaW5lZCcpCgkJewoJCQlpbWcg PSB0aGlzLnNob3dfcHJvbXB0KHZicGhyYXNlWydlbnRlcl9pbWFnZV91cmwnXSwg J2h0dHA6Ly8nLCB0cnVlKTsKCQl9CgkJaWYgKGltZyA9IHRoaXMudmVyaWZ5X3By b21wdChpbWcpKQoJCXsKCQkJcmV0dXJuIHRoaXMuYXBwbHlfZm9ybWF0KCdpbnNl cnRpbWFnZScsIGZhbHNlLCBpbWcpOwoJCX0KCQllbHNlCgkJewoJCQlyZXR1cm4g ZmFsc2U7CgkJfQoJfTsKCgkvKioKCSogV3JhcCBUYWdzCgkqCgkqIEBwYXJhbQlz dHJpbmcJVGFnIHRvIHdyYXAKCSogQHBhcmFtCWJvb2xlYW4JVXNlIG9wdGlvbj8K CSogQHBhcmFtCXN0cmluZwkoT3B0aW9uYWwpIHNlbGVjdGVkIHRleHQKCSoKCSog QHJldHVybglib29sZWFuCgkqLwoJdGhpcy53cmFwX3RhZ3MgPSBmdW5jdGlvbih0 YWduYW1lLCB1c2VvcHRpb24sIHNlbGVjdGlvbikKCXsKCQl0YWduYW1lID0gdGFn bmFtZS50b1VwcGVyQ2FzZSgpOwoKCQlzd2l0Y2ggKHRhZ25hbWUpCgkJewoJCQlj YXNlICdDT0RFJzoKCQkJY2FzZSAnSFRNTCc6CgkJCWNhc2UgJ1BIUCc6CgkJCXsK CQkJCXRoaXMuYXBwbHlfZm9ybWF0KCdyZW1vdmVmb3JtYXQnKTsKCQkJfQoJCQli cmVhazsKCQl9CgoJCWlmICh0eXBlb2Ygc2VsZWN0aW9uID09ICd1bmRlZmluZWQn KQoJCXsKCQkJc2VsZWN0aW9uID0gdGhpcy5nZXRfc2VsZWN0aW9uKCk7CgkJCWlm IChzZWxlY3Rpb24gPT09IGZhbHNlKQoJCQl7CgkJCQlzZWxlY3Rpb24gPSAnJzsK CQkJfQoJCQllbHNlCgkJCXsKCQkJCXNlbGVjdGlvbiA9IG5ldyBTdHJpbmcoc2Vs ZWN0aW9uKTsKCQkJfQoJCX0KCgkJaWYgKHVzZW9wdGlvbiA9PT0gdHJ1ZSkKCQl7 CgkJCXZhciBvcHRpb24gPSB0aGlzLnNob3dfcHJvbXB0KGNvbnN0cnVjdF9waHJh c2UodmJwaHJhc2VbJ2VudGVyX3RhZ19vcHRpb24nXSwgKCdbJyArIHRhZ25hbWUg KyAnXScpKSwgJycsIGZhbHNlKTsKCQkJaWYgKG9wdGlvbiA9IHRoaXMudmVyaWZ5 X3Byb21wdChvcHRpb24pKQoJCQl7CgkJCQl2YXIgb3BlbnRhZyA9ICdbJyArIHRh Z25hbWUgKyAnPSInICsgb3B0aW9uICsgJyInICsgJ10nOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfQoJCWVsc2UgaWYgKHVzZW9w dGlvbiAhPT0gZmFsc2UpCgkJewoJCQl2YXIgb3BlbnRhZyA9ICdbJyArIHRhZ25h bWUgKyAnPSInICsgdXNlb3B0aW9uICsgJyInICsgJ10nOwoJCX0KCQllbHNlCgkJ ewoJCQl2YXIgb3BlbnRhZyA9ICdbJyArIHRhZ25hbWUgKyAnXSc7CgkJfQoKCQl2 YXIgY2xvc2V0YWcgPSAnWy8nICsgdGFnbmFtZSArICddJzsKCQl2YXIgdGV4dCA9 IG9wZW50YWcgKyBzZWxlY3Rpb24gKyBjbG9zZXRhZzsKCgkJdGhpcy5pbnNlcnRf dGV4dCh0ZXh0LCBvcGVudGFnLnZCbGVuZ3RoKCksIGNsb3NldGFnLnZCbGVuZ3Ro KCkpOwoKCQlyZXR1cm4gZmFsc2U7Cgl9OwoKCS8qKgoJKiBDaGVjayBTcGVsbGlu ZyAodXNlcyBpZVNwZWxsIGZyb20gd3d3Lmllc3BlbGwuY29tKQoJKgoJKiBFdmVu dHVhbGx5IHdlIGhvcGUgdG8gaW50ZWdyYXRlIFNwZWxsQm91bmQgKGh0dHA6Ly9z cGVsbGJvdW5kLnNvdXJjZWZvcmdlLm5ldCkgZm9yIEdlY2tvLgoJKi8KCXRoaXMu c3BlbGxpbmcgPSBmdW5jdGlvbigpCgl7CgkJaWYgKGlzX2llKQoJCXsKCQkJdHJ5 CgkJCXsKCQkJCS8vIGF0dGVtcHQgdG8gaW5zdGFudGlhdGUgaWVTcGVsbAoJCQkJ ZXZhbCgibmV3IEEiICsgImN0aXYiICsgImVYIiArICJPYiIgKyAiamVjdCgnaWVT cGVsbC4iICsgImllU3BlbGxFeHQiICsgImVuc2lvbicpLkNoZWNrRCIgKyAib2N1 bWVudE5vZGUodGhpcy5zcGVsbG9iaik7Iik7CgkJCX0KCQkJY2F0Y2goZSkKCQkJ ewoJCQkJLy8gYXNrIGlmIHVzZXIgd2FudHMgdG8gZG93bmxvYWQgaWVTcGVsbAoJ CQkJaWYgKGUubnVtYmVyID09IC0yMTQ2ODI3ODU5ICYmIGNvbmZpcm0odmJwaHJh c2VbJ2llc3BlbGxfbm90X2luc3RhbGxlZCddKSkKCQkJCXsKCQkJCQkvLyBvb2gg dGhleSBkby4uLgoJCQkJCXdpbmRvdy5vcGVuKCdodHRwOi8vd3d3Lmllc3BlbGwu Y29tL2Rvd25sb2FkLnBoJyArICdwJyk7CgkJCQl9CgkJCX0KCQl9CgkJZWxzZSBp ZiAoaXNfbW96KQoJCXsKCQkJLy8gYXR0ZW1wdCB0byBpbnN0YW50aWF0ZSBTcGVs bEJvdW5kLi4uIHdoZW4gaXQgc3VwcG9ydHMgdGhpcyBiZWhhdmlvdXIKCQl9Cgl9 OwoKCS8qKgoJKiBIYW5kbGUgRXJyb3IKCSoKCSogQHBhcmFtCXN0cmluZwlDb21t YW5kIG5hbWUKCSogQHBhcmFtCWV2ZW50CUV2ZW50IG9iamVjdAoJKi8KCXRoaXMu aGFuZGxlX2Vycm9yID0gZnVuY3Rpb24oY21kLCBlKQoJewoJfTsKCgkvKioKCSog U2hvdyBKUyBQcm9tcHQgYW5kIGZpbHRlciByZXN1bHQKCSoKCSogQHBhcmFtCXN0 cmluZwlUZXh0IGZvciB0aGUgZGlhbG9nCgkqIEBwYXJhbQlzdHJpbmcJRGVmYXVs dCB2YWx1ZSBmb3IgdGhlIGRpYWxvZwoJKiBAcGFyYW0Jc3RyaW5nCVdoZXRoZXIg dG8gZm9yY2UgTFRSIChmb3IgVVJMcywgZXRjKQoJKgoJKiBAcmV0dXJuCXN0cmlu ZwoJKi8KCXRoaXMuc2hvd19wcm9tcHQgPSBmdW5jdGlvbihkaWFsb2d0eHQsIGRl ZmF1bHR2YWwsIGZvcmNlbHRyKQoJewoJCWlmIChpc19pZTcpCgkJewoJCQkvLyBy ZXNwZWN0IGEgPGJhc2U+IHRhZyAoc2VlICMyMzA5NykKCQkJdmFyIGJhc2VfdGFn ID0gZmV0Y2hfdGFncyhkb2N1bWVudCwgJ2Jhc2UnKTsKCQkJaWYgKGJhc2VfdGFn ICYmIGJhc2VfdGFnWzBdICYmIGJhc2VfdGFnWzBdLmhyZWYpCgkJCXsKCQkJCXZh ciBtb2RhbF9wcmVmaXggPSBiYXNlX3RhZ1swXS5ocmVmOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJdmFyIG1vZGFsX3ByZWZpeCA9ICcnOwoJCQl9CgoJCQl2YXIgcmV0 dXJudmFsdWUgPSB3aW5kb3cuc2hvd01vZGFsRGlhbG9nKG1vZGFsX3ByZWZpeCAr ICJjbGllbnRzY3JpcHQvaWVwcm9tcHQuaHRtbD8iLCB7IHZhbHVlOiBkZWZhdWx0 dmFsLCBsYWJlbDogZGlhbG9ndHh0LCBkaXI6IGRvY3VtZW50LmRpciwgdGl0bGU6 IGRvY3VtZW50LnRpdGxlLCBmb3JjZWx0cjogKHR5cGVvZihmb3JjZWx0cikgIT0g InVuZGVmaW5lZCIgPyBmb3JjZWx0ciA6IGZhbHNlKSB9LCAiZGlhbG9nV2lkdGg6 MzIwcHg7IGRpYWxvZ0hlaWdodDoxNTBweDsgZGlhbG9nVG9wOiIgKyAocGFyc2VJ bnQod2luZG93LnNjcmVlblRvcCkgKyBwYXJzZUludCh3aW5kb3cuZXZlbnQuY2xp ZW50WSkgKyBwYXJzZUludChkb2N1bWVudC5ib2R5LnNjcm9sbFRvcCkgLSAxMDAp ICsgInB4OyBkaWFsb2dMZWZ0OiIgKyAocGFyc2VJbnQod2luZG93LnNjcmVlbkxl ZnQpICsgcGFyc2VJbnQod2luZG93LmV2ZW50LmNsaWVudFgpICsgcGFyc2VJbnQo ZG9jdW1lbnQuYm9keS5zY3JvbGxMZWZ0KSAtIDE2MCkgKyAicHg7IHJlc2l6YWJs ZTogTm87Iik7CgkJfQoJCWVsc2UKCQl7CgkJCXZhciByZXR1cm52YWx1ZSA9IHBy b21wdChkaWFsb2d0eHQsIGRlZmF1bHR2YWwpOwoJCX0KCgkJLy8gZGVhbCB3aXRo IHVuZXhwZWN0ZWQgcmV0dXJuIHZhbHVlCgkJaWYgKHR5cGVvZihyZXR1cm52YWx1 ZSkgPT0gInVuZGVmaW5lZCIpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWVs c2UgaWYgKHJldHVybnZhbHVlID09IGZhbHNlIHx8IHJldHVybnZhbHVlID09IG51 bGwpCgkJewoJCQlyZXR1cm4gcmV0dXJudmFsdWU7CgkJfQoJCWVsc2UKCQl7CgkJ CXJldHVybiBQSFAudHJpbShuZXcgU3RyaW5nKHJldHVybnZhbHVlKSk7CgkJfQoJ fTsKCgkvKioKCSogQ2xvc2VzIGFuIG9wZW4gcHJvbXB0IChlbXVsYXRvcikgd2lu ZG93IG9wZW5lZCBieSBzaG93X3Byb21wdCgpIHVuZGVyIElFNysKCSovCgl0aGlz LmNsb3NlX3Byb21wdCA9IGZ1bmN0aW9uKCkKCXsKCQlpZiAodGhpcy5wcm9tcHRf cG9wdXApCgkJewoJCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidkJfRWRpdG9y XzAwMSIpLnJlbW92ZUNoaWxkKHRoaXMucHJvbXB0X3BvcHVwKTsKCQkJdGhpcy5w cm9tcHRfcG9wdXAgPSBudWxsOwoJCX0KCgkJdGhpcy5jaGVja19mb2N1cygpOwoJ fQoKCS8qKgoJKiBWZXJpZnkgdGhlIHJldHVybiB2YWx1ZSBvZiBhIGphdmFzY3Jp cHQgcHJvbXB0CgkqCgkqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHRvIGJlIGNoZWNr ZWQKCSoKCSogQHJldHVybgltaXhlZAlGYWxzZSBvbiBmYWlsLCBzdHJpbmcgb24g c3VjY2VzcwoJKi8KCXRoaXMudmVyaWZ5X3Byb21wdCA9IGZ1bmN0aW9uKHN0cikK CXsKCQlzd2l0Y2goc3RyKQoJCXsKCQkJY2FzZSAnaHR0cDovLyc6CgkJCWNhc2Ug J251bGwnOgoJCQljYXNlICd1bmRlZmluZWQnOgoJCQljYXNlICdmYWxzZSc6CgkJ CWNhc2UgJyc6CgkJCWNhc2UgbnVsbDoKCQkJY2FzZSBmYWxzZToKCQkJCXJldHVy biBmYWxzZTsKCgkJCWRlZmF1bHQ6CgkJCQlyZXR1cm4gc3RyOwoJCX0KCX07CgoJ LyoqCgkqIE9wZW4gU21pbGllIFdpbmRvdwoJKgoJKiBAcGFyYW0JaW50ZWdlcglX aW5kb3cgd2lkdGgKCSogQHBhcmFtCWludGVnZXIJV2luZG93IGhlaWdodAoJKi8K CXRoaXMub3Blbl9zbWlsaWVfd2luZG93ID0gZnVuY3Rpb24od2lkdGgsIGhlaWdo dCkKCXsKCQlzbWlsaWVfd2luZG93ID0gb3BlbldpbmRvdygnbWlzYy5waHA/JyAr IFNFU1NJT05VUkwgKyAnZG89Z2V0c21pbGllcyZlZGl0b3JpZD0nICsgdGhpcy5l ZGl0b3JpZCwgd2lkdGgsIGhlaWdodCwgJ3NtaWxpZV93aW5kb3cnKTsKCgkJd2lu ZG93Lm9udW5sb2FkID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5z bWlsaWV3aW5kb3dfb251bmxvYWQ7Cgl9CgoJLyoqCgkqIFJlc2l6ZSBFZGl0b3IK CSoKCSogQHBhcmFtCWludGVnZXIJTnVtYmVyIG9mIHBpeGVscyBieSB3aGljaCB0 byByZXNpemUgdGhlIGVkaXRvcgoJKi8KCXRoaXMucmVzaXplX2VkaXRvciA9IGZ1 bmN0aW9uKGNoYW5nZSkKCXsKCQl2YXIgbmV3aGVpZ2h0ID0gcGFyc2VJbnQodGhp cy5lZGl0Ym94LnN0eWxlLmhlaWdodCwgMTApICsgY2hhbmdlOwoKCQlpZiAobmV3 aGVpZ2h0ID49IDEwMCkKCQl7CgkJCXRoaXMuZWRpdGJveC5zdHlsZS5oZWlnaHQg PSBuZXdoZWlnaHQgKyAncHgnOwoKCQkJLy8gcmVtZW1iZXIgdGhlIHNldHRpbmcg Zm9yIG5leHQgdGltZQoJCQlpZiAoY2hhbmdlICUgOTkgIT0gMCkKCQkJewoJCQkJ c2V0X2Nvb2tpZSgnZWRpdG9yX2hlaWdodCcsIG5ld2hlaWdodCk7CgkJCX0KCQl9 Cgl9OwoKCS8qKgoJKiBEZXN0cm95IFBvcHVwCgkqLwoJdGhpcy5kZXN0cm95X3Bv cHVwID0gZnVuY3Rpb24ocG9wdXBuYW1lKQoJewoJCXRoaXMucG9wdXBzW3BvcHVw bmFtZV0ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0aGlzLnBvcHVwc1twb3B1cG5h bWVdKTsKCQl0aGlzLnBvcHVwc1twb3B1cG5hbWVdID0gbnVsbDsKCX0KCgkvKioK CSogRGVzdHJveSBFZGl0b3IKCSovCgl0aGlzLmRlc3Ryb3kgPSBmdW5jdGlvbigp Cgl7CgkJLy8gcmVzZXQgYWxsIGJ1dHRvbnMgdG8gZGVmYXVsdCBzdGF0ZQoJCWZv ciAodmFyIGkgaW4gdGhpcy5idXR0b25zKQoJCXsKCQkJdGhpcy5zZXRfY29udHJv bF9zdHlsZSh0aGlzLmJ1dHRvbnNbaV0sICdidXR0b24nLCAnbm9ybWFsJyk7CgkJ fQoKCQkvLyBkZXN0cm95IHBvcHVwcwoJCWZvciAodmFyIG1lbnUgaW4gdGhpcy5w b3B1cHMpCgkJewoJCQl0aGlzLmRlc3Ryb3lfcG9wdXAobWVudSk7CgkJfQoKCQlp ZiAodGhpcy5mb250b3B0aW9ucykKCQl7CgkJCWZvciAodmFyIGkgaW4gdGhpcy5m b250b3B0aW9ucykKCQkJewoJCQkJaWYgKGkgIT0gJycpCgkJCQl7CgkJCQkJdGhp cy5mb250b3B0aW9uc1tpXS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZm9u dG9wdGlvbnNbaV0pOwoJCQkJfQoJCQl9CgkJCXRoaXMuZm9udG9wdGlvbnNbJydd LnN0eWxlLmRpc3BsYXkgPSAnJzsKCQl9CgoJCWlmICh0aGlzLnNpemVvcHRpb25z KQoJCXsKCQkJZm9yICh2YXIgaSBpbiB0aGlzLnNpemVvcHRpb25zKQoJCQl7CgkJ CQlpZiAoaSAhPSAnJykKCQkJCXsKCQkJCQl0aGlzLnNpemVvcHRpb25zW2ldLnBh cmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcy5zaXplb3B0aW9uc1tpXSk7CgkJCQl9 CgkJCX0KCQkJdGhpcy5zaXplb3B0aW9uc1snJ10uc3R5bGUuZGlzcGxheSA9ICcn OwoJCX0KCX07CgoJLyoqCgkqIENvbGxhcHNlIHRoZSBjdXJyZW50IHNlbGVjdGlv biBhbmQgcGxhY2UgdGhlIGN1cnNvciB3aGVyZSB0aGUgZW5kIG9mIHRoZQoJKiBz ZWxlY3Rpb24gd2FzLgoJKi8KCXRoaXMuY29sbGFwc2Vfc2VsZWN0aW9uX2VuZCA9 IGZ1bmN0aW9uKCkKCXsKCQlpZiAodGhpcy5lZGl0ZG9jLnNlbGVjdGlvbikKCQl7 CgkJCXZhciByYW5nZSA9IHRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY3JlYXRlUmFu Z2UoKTsKCQkJLy8gZml4IGZvciBob3JyaWJseSBjb25mdXNpbmcgSUUgYnVnIHdo ZXJlIGl0IHJhbmRvbWx5IG1ha2VzIHRleHQgd2hpdGUgZm9yIGZ1bnNpZXMKCQkJ Ly8gc2VlIDMuNSBidWcgIzI3OQoJCQlldmFsKCJyYW5nZS4iICsgIm1vdmUiICsg IignY2hhcmFjdGVyJywgLTEpOyIpOwoJCQlyYW5nZS5jb2xsYXBzZShmYWxzZSk7 CgkJCXJhbmdlLnNlbGVjdCgpOwoJCX0KCQllbHNlIGlmIChkb2N1bWVudC5zZWxl Y3Rpb24gJiYgZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKQoJCXsKCQkJ dmFyIHJhbmdlID0gZG9jdW1lbnQuc2VsZWN0aW9uLmNyZWF0ZVJhbmdlKCk7CgkJ CXJhbmdlLmNvbGxhcHNlKGZhbHNlKTsKCQkJcmFuZ2Uuc2VsZWN0KCk7CgkJfQoJ CWVsc2UgaWYgKHR5cGVvZih0aGlzLmVkaXRkb2Muc2VsZWN0aW9uU3RhcnQpICE9 ICd1bmRlZmluZWQnKQoJCXsKCQkJdmFyIG9wbiA9IHRoaXMuZWRpdGRvYy5zZWxl Y3Rpb25TdGFydCArIDA7CgkJCXZhciBzZWxfdGV4dCA9IHRoaXMuZWRpdGRvYy52 YWx1ZS5zdWJzdHIodGhpcy5lZGl0ZG9jLnNlbGVjdGlvblN0YXJ0LCB0aGlzLmVk aXRkb2Muc2VsZWN0aW9uRW5kIC0gdGhpcy5lZGl0ZG9jLnNlbGVjdGlvblN0YXJ0 KTsKCgkJCXRoaXMuZWRpdGRvYy5zZWxlY3Rpb25TdGFydCA9IHRoaXMuZWRpdGRv Yy5zZWxlY3Rpb25TdGFydCArIHNlbF90ZXh0LnZCbGVuZ3RoKCk7CgkJfQoJCWVs c2UgaWYgKHdpbmRvdy5nZXRTZWxlY3Rpb24pCgkJewoJCQkvLyBkb24ndCB0aGlu ayBJIGNhbiBkbyBhbnl0aGluZyBmb3IgdGhpcwoJCX0KCX0KCgkvLyA9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQoJLy8gV1lTSVdZRyBlZGl0b3IKCS8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CglpZiAodGhpcy53eXNpd3lnX21v ZGUpCgl7CgkJLyoqCgkJKiBEaXNhYmxlcyB0aGUgZWRpdG9yCgkJKgoJCSogQHBh cmFtCXN0cmluZwlJbml0aWFsIHRleHQgZm9yIHRoZSBlZGl0b3IKCQkqLwoJCXRo aXMuZGlzYWJsZV9lZGl0b3IgPSBmdW5jdGlvbih0ZXh0KQoJCXsKCQkJaWYgKCF0 aGlzLmRpc2FibGVkKQoJCQl7CgkJCQl0aGlzLmRpc2FibGVkID0gdHJ1ZTsKCgkJ CQl2YXIgaGlkZXIgPSBmZXRjaF9vYmplY3QodGhpcy5lZGl0b3JpZCArICdfaGlk ZXInKTsKCQkJCWlmIChoaWRlcikKCQkJCXsKCQkJCQloaWRlci5wYXJlbnROb2Rl LnJlbW92ZUNoaWxkKGhpZGVyKTsKCQkJCX0KCgkJCQl2YXIgZGl2ID0gZG9jdW1l bnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CgkJCQlkaXYuaWQgPSB0aGlzLmVkaXRv cmlkICsgJ19oaWRlcic7CgkJCQlkaXYuY2xhc3NOYW1lID0gJ3d5c2l3eWcnOwoJ CQkJZGl2LnN0eWxlLmJvcmRlciA9ICcycHggaW5zZXQnOwoJCQkJZGl2LnN0eWxl LndpZHRoID0gdGhpcy5lZGl0Ym94LnN0eWxlLndpZHRoOwoJCQkJZGl2LnN0eWxl LmhlaWdodCA9IHRoaXMuZWRpdGJveC5zdHlsZS5oZWlnaHQ7CgkJCQl2YXIgY2hp bGRkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKCQkJCWNoaWxk ZGl2LnN0eWxlLm1hcmdpbiA9ICc4cHgnOwoJCQkJY2hpbGRkaXYuaW5uZXJIVE1M ID0gdGV4dDsKCQkJCWRpdi5hcHBlbmRDaGlsZChjaGlsZGRpdik7CgkJCQl0aGlz LmVkaXRib3gucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChkaXYpOwoKCQkJCS8vIGFu ZCBoaWRlIHRoZSByZWFsIGVkaXRvcgoJCQkJdGhpcy5lZGl0Ym94LnN0eWxlLndp ZHRoID0gJzBweCc7CgkJCQl0aGlzLmVkaXRib3guc3R5bGUuaGVpZ2h0ID0gJzBw eCc7CgkJCQl0aGlzLmVkaXRib3guc3R5bGUuYm9yZGVyID0gJ25vbmUnOwoJCQl9 CgkJfTsKCgkJLyoqCgkJKiBFbmFibGVzIHRoZSBlZGl0b3IKCQkqCgkJKiBAcGFy YW0Jc3RyaW5nCUluaXRpYWwgdGV4dCBmb3IgdGhlIGVkaXRvcgoJCSovCgkJdGhp cy5lbmFibGVfZWRpdG9yID0gZnVuY3Rpb24odGV4dCkKCQl7CgkJCWlmICh0eXBl b2YgdGV4dCAhPSAndW5kZWZpbmVkJykKCQkJewoJCQkJdGhpcy5zZXRfZWRpdG9y X2NvbnRlbnRzKHRleHQpOwoJCQl9CgoJCQl2YXIgaGlkZXIgPSBmZXRjaF9vYmpl Y3QodGhpcy5lZGl0b3JpZCArICdfaGlkZXInKTsKCQkJaWYgKGhpZGVyKQoJCQl7 CgkJCQloaWRlci5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGhpZGVyKTsKCQkJfQoK CQkJdGhpcy5kaXNhYmxlZCA9IGZhbHNlOwoJCX07CgoJCS8qKgoJCSogUHV0cyB0 aGUgdGV4dCBpbnRvIHRoZSBlZGl0b3IKCQkqCgkJKiBAcGFyYW0Jc3RyaW5nCVRl eHQgdG8gd3JpdGUKCQkqLwoJCXRoaXMud3JpdGVfZWRpdG9yX2NvbnRlbnRzID0g ZnVuY3Rpb24odGV4dCwgZG9pbml0KQoJCXsKCQkJaWYgKHRleHQgPT0gJycpCgkJ CXsKCQkJCWlmIChpc19pZSkKCQkJCXsKCQkJCQl0ZXh0ID0gJzxwPjwvcD4nOwoJ CQkJfQoJCQkJZWxzZSBpZiAoaXNfbW96KQoJCQkJewoJCQkJCXRleHQgPSAnPGJy IC8+JzsKCQkJCX0KCQkJfQoJCQlpZiAodGhpcy5lZGl0ZG9jICYmIHRoaXMuZWRp dGRvYy5pbml0aWFsaXplZCkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuaW5u ZXJIVE1MID0gdGV4dDsKCQkJfQoJCQllbHNlCgkJCXsKCQkJCS8vIEZvcmNlIEZp cmVmb3ggMS4wIHRvIHJ1biBpdCBoZXJlIGFuZCBGaXJlZm94IDEuNSsgbGF0ZXIg b24sIHNlZSBCdWcgIzIyNjYxCgkJCQlpZiAoZG9pbml0ICYmIHR5cGVvZiBBcnJh eS5wcm90b3R5cGUubWFwID09ICd1bmRlZmluZWQnKSB7IHRoaXMuZWRpdGRvYy5k ZXNpZ25Nb2RlID0gJ29uJzsgfQoJCQkJdGhpcy5lZGl0ZG9jID0gdGhpcy5lZGl0 d2luLmRvY3VtZW50OyAvLyBTZWU6IGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20v d29ya3Nob3AvYXV0aG9yL2RodG1sL292ZXJ2aWV3L1hwU3AyQ29tcGF0LmFzcCNj YWNoaW5nCgkJCQl0aGlzLmVkaXRkb2Mub3BlbigndGV4dC9odG1sJywgJ3JlcGxh Y2UnKTsKCQkJCXRoaXMuZWRpdGRvYy53cml0ZSh0ZXh0KTsKCQkJCXRoaXMuZWRp dGRvYy5jbG9zZSgpOwoJCQkJaWYgKGRvaW5pdCkKCQkJCXsKCQkJCQl0aGlzLmVk aXRkb2MuYm9keS5jb250ZW50RWRpdGFibGUgPSB0cnVlOwoJCQkJCWlmICh0eXBl b2YgQXJyYXkucHJvdG90eXBlLm1hcCAhPSAndW5kZWZpbmVkJykKCQkJCQl7CgkJ CQkJCXRoaXMuZWRpdGRvYy5kZXNpZ25Nb2RlID0gJ29uJzsKCQkJCQl9CgkJCQl9 CgkJCQl0aGlzLmVkaXRkb2MuYm9keS5zcGVsbGNoZWNrID0gdHJ1ZTsKCgkJCQl0 aGlzLmVkaXRkb2MuaW5pdGlhbGl6ZWQgPSB0cnVlOwoKCQkJCXRoaXMuc2V0X2Vk aXRvcl9zdHlsZSgpOwoJCQl9CgoJCQl0aGlzLnNldF9kaXJlY3Rpb24oKTsKCQl9 CgoJCS8qKgoJCSogUHV0IHRoZSB0ZXh0IGludG8gdGhlIGVkaXRvcgoJCSovCgkJ dGhpcy5zZXRfZWRpdG9yX2NvbnRlbnRzID0gZnVuY3Rpb24oaW5pdGlhbF90ZXh0 KQoJCXsKCQkJaWYgKGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19pZnJh bWUnKSkKCQkJewoJCQkJdGhpcy5lZGl0Ym94ID0gZmV0Y2hfb2JqZWN0KHRoaXMu ZWRpdG9yaWQgKyAnX2lmcmFtZScpOwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJdmFy IGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpOwoJCQkJ aWYgKGlzX2llICYmIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCA9PSAnaHR0cHM6 JykKCQkJCXsKCQkJCQkvLyB3b3JrYXJvdW5kIGZvciBJRSB0aHJvd2luZyBpbnNl Y3VyZSBwYWdlIHdhcm5pbmdzCgkJCQkJaWZyYW1lLnNyYyA9ICdjbGllbnRzY3Jp cHQvaW5kZXguaHRtbCc7CgkJCQl9CgkJCQl0aGlzLmVkaXRib3ggPSB0aGlzLnRl eHRvYmoucGFyZW50Tm9kZS5hcHBlbmRDaGlsZChpZnJhbWUpOwoJCQkJdGhpcy5l ZGl0Ym94LmlkID0gdGhpcy5lZGl0b3JpZCArICdfaWZyYW1lJzsKCQkJCXRoaXMu ZWRpdGJveC50YWJJbmRleCA9IDE7CgkJCX0KCgkJCWlmICghaXNfaWUpCgkJCXsK CQkJCXRoaXMuZWRpdGJveC5zdHlsZS5ib3JkZXIgPSAnMnB4IGluc2V0JzsKCQkJ fQoJCQl0aGlzLmVkaXRib3guc3R5bGUud2lkdGggPSB0aGlzLnRleHRvYmouc3R5 bGUud2lkdGg7CgkJCXRoaXMuZWRpdGJveC5zdHlsZS5oZWlnaHQgPSB0aGlzLnRl eHRvYmouc3R5bGUuaGVpZ2h0OwoJCQl0aGlzLnRleHRvYmouc3R5bGUuZGlzcGxh eSA9ICdub25lJzsKCgkJCXRoaXMuZWRpdHdpbiA9IHRoaXMuZWRpdGJveC5jb250 ZW50V2luZG93OwoJCQl0aGlzLmVkaXRkb2MgPSB0aGlzLmVkaXR3aW4uZG9jdW1l bnQ7CgoJCQl0aGlzLndyaXRlX2VkaXRvcl9jb250ZW50cygodHlwZW9mIGluaXRp YWxfdGV4dCA9PSAndW5kZWZpbmVkJyA/ICB0aGlzLnRleHRvYmoudmFsdWUgOiBp bml0aWFsX3RleHQpLCB0cnVlKTsKCgkJCWlmICh0aGlzLmVkaXRkb2MuZGlyID09 ICdydGwnKQoJCQl7CgkJCS8vCXRoaXMuZWRpdGRvYy5leGVjQ29tbWFuZCgnanVz dGlmeXJpZ2h0JywgZmFsc2UsIG51bGwpOwoJCQl9CgkJCXRoaXMuc3BlbGxvYmog PSB0aGlzLmVkaXRkb2MuYm9keTsKCgkJCXRoaXMuZWRpdGRvYy5lZGl0b3JpZCA9 IHRoaXMuZWRpdG9yaWQ7CgkJCXRoaXMuZWRpdHdpbi5lZGl0b3JpZCA9IHRoaXMu ZWRpdG9yaWQ7CgkJfTsKCgkJLyoqCgkJKiBTZXRzIHRoZSB0ZXh0IGRpcmVjdGlv biBmb3IgdGhlIGVkaXRvcgoJCSovCgkJdGhpcy5zZXRfZGlyZWN0aW9uID0gZnVu Y3Rpb24oKQoJCXsKCQkJdGhpcy5lZGl0ZG9jLmRpciA9IHRoaXMudGV4dG9iai5k aXI7CgkJfTsKCgkJLyoqCgkJKiBTZXQgdGhlIENTUyBzdHlsZSBvZiB0aGUgZWRp dG9yCgkJKi8KCQl0aGlzLnNldF9lZGl0b3Jfc3R5bGUgPSBmdW5jdGlvbigpCgkJ ewoJCQlpZiAoZG9jdW1lbnQuc3R5bGVTaGVldHNbJ3ZidWxsZXRpbl9jc3MnXSkK CQkJewoJCQkJdmFyIHJ1bGVzID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbJ3ZidWxs ZXRpbl9jc3MnXS5ydWxlczsKCQkJCXZhciBuZXdjc3MgPSAnJzsKCgkJCQlmb3Ig KHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKQoJCQkJewoJCQkJCWlm IChydWxlc1tpXS5zZWxlY3RvclRleHQuaW5kZXhPZignLnd5c2l3eWcnKSA+PSAw IHx8IHJ1bGVzW2ldLnNlbGVjdG9yVGV4dCA9PSAnQk9EWScpCgkJCQkJewoJCQkJ CQluZXdjc3MgKz0gJyAnICsgcnVsZXNbaV0uc2VsZWN0b3JUZXh0ICsgJyB7ICcg KyBydWxlc1tpXS5zdHlsZS5jc3NUZXh0ICsgJyB9ICc7CgkJCQkJfQoJCQkJfQoK CQkJCWlmICghbmV3Y3NzKQoJCQkJewoJCQkJCS8vIGZhbGwgYmFjayBpbiBjYXNl IHRoZSBuZXcgbWV0aG9kIGRvZXNuJ3Qgd29yawoJCQkJCW5ld2NzcyA9IGRvY3Vt ZW50LnN0eWxlU2hlZXRzWyd2YnVsbGV0aW5fY3NzJ10uY3NzVGV4dDsKCQkJCX0K CgkJCQl0aGlzLmVkaXRkb2MuY3JlYXRlU3R5bGVTaGVldCgpLmNzc1RleHQgPSBu ZXdjc3MgKyAnIHAgeyBtYXJnaW46IDBweDsgfSc7CgkJCQl0aGlzLmVkaXRkb2Mu Ym9keS5jbGFzc05hbWUgPSAnd3lzaXd5Zyc7CgkJCX0KCQl9OwoKCQkvKioKCQkq IEluaXQgRWRpdG9yIEZ1bmN0aW9ucwoJCSovCgkJdGhpcy5zZXRfZWRpdG9yX2Z1 bmN0aW9ucyA9IGZ1bmN0aW9uKCkKCQl7CgkJCXRoaXMuZWRpdGRvYy5vbm1vdXNl dXAgPSB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmVkaXRkb2Nfb25t b3VzZXVwOwoJCQl0aGlzLmVkaXRkb2Mub25rZXl1cCA9IHZCX1RleHRfRWRpdG9y X0V2ZW50cy5wcm90b3R5cGUuZWRpdGRvY19vbmtleXVwOwoKCQkJaWYgKHRoaXMu ZWRpdGRvYy5hdHRhY2hFdmVudCkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLmJvZHku YXR0YWNoRXZlbnQoIm9ucmVzaXplc3RhcnQiLCB2Ql9UZXh0X0VkaXRvcl9FdmVu dHMucHJvdG90eXBlLmVkaXRkb2Nfb25yZXNpemVzdGFydCk7CgkJCX0KCgkJCXRo aXMuZWRpdHdpbi5vbmZvY3VzID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3Rv dHlwZS5lZGl0d2luX29uZm9jdXM7CgkJCXRoaXMuZWRpdHdpbi5vbmJsdXIgPSB2 Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmVkaXR3aW5fb25ibHVyOwoJ CX07CgoJCS8qKgoJCSogU2V0IENvbnRleHQKCQkqLwoJCXRoaXMuc2V0X2NvbnRl eHQgPSBmdW5jdGlvbihjbWQpCgkJewoJCQlmb3IgKHZhciBpIGluIGNvbnRleHRj b250cm9scykKCQkJewoJCQkJdmFyIG9iaiA9IGZldGNoX29iamVjdCh0aGlzLmVk aXRvcmlkICsgJ19jbWRfJyArIGNvbnRleHRjb250cm9sc1tpXSk7CgkJCQlpZiAo b2JqICE9IG51bGwpCgkJCQl7CgkJCQkJdmFyIHN0YXRlID0gdGhpcy5lZGl0ZG9j LnF1ZXJ5Q29tbWFuZFN0YXRlKGNvbnRleHRjb250cm9sc1tpXSk7CgkJCQkJLy9h bGVydCAoY29udGV4dGNvbnRyb2xzW2ldICsgJyAnICsgc3RhdGUgKyAnICcgKyBv Ymouc3RhdGUpOwoJCQkJCWlmIChvYmouc3RhdGUgIT0gc3RhdGUpCgkJCQkJewoJ CQkJCQlvYmouc3RhdGUgPSBzdGF0ZTsKCQkJCQkJdGhpcy5idXR0b25fY29udGV4 dChvYmosIChvYmouY21kID09IGNtZCA/ICdtb3VzZW92ZXInIDogJ21vdXNlb3V0 JykpOwoJCQkJCX0KCQkJCX0KCQkJfQoKCQkJdGhpcy5zZXRfZm9udF9jb250ZXh0 KCk7CgoJCQl0aGlzLnNldF9zaXplX2NvbnRleHQoKTsKCgkJCXRoaXMuc2V0X2Nv bG9yX2NvbnRleHQoKTsKCQl9OwoKCQkvKioKCQkqIFNldCBGb250IENvbnRleHQK CQkqLwoJCXRoaXMuc2V0X2ZvbnRfY29udGV4dCA9IGZ1bmN0aW9uKGZvbnRzdGF0 ZSkKCQl7CgkJCWlmICh0aGlzLmJ1dHRvbnNbJ2ZvbnRuYW1lJ10pCgkJCXsKCQkJ CWlmICh0eXBlb2YgZm9udHN0YXRlID09ICd1bmRlZmluZWQnKQoJCQkJewoJCQkJ CWZvbnRzdGF0ZSA9IHRoaXMuZWRpdGRvYy5xdWVyeUNvbW1hbmRWYWx1ZSgnZm9u dG5hbWUnKTsKCQkJCX0KCQkJCXN3aXRjaCAoZm9udHN0YXRlKQoJCQkJewoJCQkJ CWNhc2UgJyc6CgkJCQkJewoJCQkJCQlpZiAoIWlzX2llICYmIHdpbmRvdy5nZXRD b21wdXRlZFN0eWxlKQoJCQkJCQl7CgkJCQkJCQlmb250c3RhdGUgPSB0aGlzLmVk aXRkb2MuYm9keS5zdHlsZS5mb250RmFtaWx5OwoJCQkJCQl9CgkJCQkJfQoJCQkJ CWJyZWFrOwoKCQkJCQljYXNlIG51bGw6CgkJCQkJewoJCQkJCQlmb250c3RhdGUg PSAnJzsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgoJCQkJaWYgKGZvbnRzdGF0 ZSAhPSB0aGlzLmZvbnRzdGF0ZSkKCQkJCXsKCQkJCQl0aGlzLmZvbnRzdGF0ZSA9 IGZvbnRzdGF0ZTsKCQkJCQl2YXIgdGhpbmd5ID0gUEhQLnVjZmlyc3QodGhpcy5m b250c3RhdGUsICcsJyk7CgoJCQkJCWlmICh0aGlzLnBvcHVwbW9kZSkKCQkJCQl7 CgkJCQkJCWZvciAodmFyIGkgaW4gdGhpcy5mb250b3B0aW9ucykKCQkJCQkJewoJ CQkJCQkJdGhpcy5mb250b3B0aW9uc1tpXS5zdHlsZS5kaXNwbGF5ID0gKGkgPT0g dGhpbmd5ID8gJycgOiAnbm9uZScpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWVsc2UK CQkJCQl7CgkJCQkJCWZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5idXR0b25zWydm b250bmFtZSddLm9wdGlvbnMubGVuZ3RoOyBpKyspCgkJCQkJCXsKCQkJCQkJCWlm ICh0aGlzLmJ1dHRvbnNbJ2ZvbnRuYW1lJ10ub3B0aW9uc1tpXS52YWx1ZSA9PSB0 aGluZ3kpCgkJCQkJCQl7CgkJCQkJCQkJdGhpcy5idXR0b25zWydmb250bmFtZSdd LnNlbGVjdGVkSW5kZXggPSBpOwoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJ CQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfTsKCgkJLyoqCgkJKiBTZXQgU2l6ZSBD b250ZXh0CgkJKi8KCQl0aGlzLnNldF9zaXplX2NvbnRleHQgPSBmdW5jdGlvbihz aXplc3RhdGUpCgkJewoJCQlpZiAodGhpcy5idXR0b25zWydmb250c2l6ZSddKQoJ CQl7CgkJCQlpZiAodHlwZW9mIHNpemVzdGF0ZSA9PSAndW5kZWZpbmVkJykKCQkJ CXsKCQkJCQlzaXplc3RhdGUgPSB0aGlzLmVkaXRkb2MucXVlcnlDb21tYW5kVmFs dWUoJ2ZvbnRzaXplJyk7CgkJCQl9CgkJCQlzd2l0Y2ggKHNpemVzdGF0ZSkKCQkJ CXsKCQkJCQljYXNlIG51bGw6CgkJCQkJY2FzZSAnJzoKCQkJCQl7CgkJCQkJCWlm IChpc19tb3opCgkJCQkJCXsKCQkJCQkJCXNpemVzdGF0ZSA9IHRoaXMudHJhbnNs YXRlX2ZvbnRzaXplKHRoaXMuZWRpdGRvYy5ib2R5LnN0eWxlLmZvbnRTaXplKTsK CQkJCQkJfQoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmIChzaXplc3Rh dGUgIT0gdGhpcy5zaXplc3RhdGUpCgkJCQl7CgkJCQkJdGhpcy5zaXplc3RhdGUg PSBzaXplc3RhdGU7CgoJCQkJCWlmICh0aGlzLnBvcHVwbW9kZSkKCQkJCQl7CgkJ CQkJCWZvciAodmFyIGkgaW4gdGhpcy5zaXplb3B0aW9ucykKCQkJCQkJewoJCQkJ CQkJdGhpcy5zaXplb3B0aW9uc1tpXS5zdHlsZS5kaXNwbGF5ID0gKGkgPT0gdGhp cy5zaXplc3RhdGUgPyAnJyA6ICdub25lJyk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJ ZWxzZQoJCQkJCXsKCQkJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmJ1dHRv bnNbJ2ZvbnRzaXplJ10ub3B0aW9ucy5sZW5ndGg7IGkrKykKCQkJCQkJewoJCQkJ CQkJaWYgKHRoaXMuYnV0dG9uc1snZm9udHNpemUnXS5vcHRpb25zW2ldLnZhbHVl ID09IHRoaXMuc2l6ZXN0YXRlKQoJCQkJCQkJewoJCQkJCQkJCXRoaXMuYnV0dG9u c1snZm9udHNpemUnXS5zZWxlY3RlZEluZGV4ID0gaTsKCQkJCQkJCQlicmVhazsK CQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX07CgoJCS8qKgoJ CSogU2V0IENvbG9yIENvbnRleHQKCQkqLwoJCXRoaXMuc2V0X2NvbG9yX2NvbnRl eHQgPSBmdW5jdGlvbihjb2xvcnN0YXRlKQoJCXsKCQkJaWYgKHRoaXMuYnV0dG9u c1snZm9yZWNvbG9yJ10pCgkJCXsKCQkJCWlmICh0eXBlb2YgY29sb3JzdGF0ZSA9 PSAndW5kZWZpbmVkJykKCQkJCXsKCQkJCQljb2xvcnN0YXRlID0gdGhpcy5lZGl0 ZG9jLnF1ZXJ5Q29tbWFuZFZhbHVlKCdmb3JlY29sb3InKTsKCQkJCX0KCQkJCWlm IChjb2xvcnN0YXRlICE9IHRoaXMuY29sb3JzdGF0ZSkKCQkJCXsKCQkJCQlpZiAo dGhpcy5wb3B1cG1vZGUpCgkJCQkJewoJCQkJCQl2YXIgb2JqID0gZmV0Y2hfb2Jq ZWN0KHRoaXMuZWRpdG9yaWQgKyAnX2NvbG9yXycgKyB0aGlzLnRyYW5zbGF0ZV9j b2xvcl9jb21tYW5kdmFsdWUodGhpcy5jb2xvcnN0YXRlKSk7CgkJCQkJCWlmIChv YmogIT0gbnVsbCkKCQkJCQkJewoJCQkJCQkJb2JqLnN0YXRlID0gZmFsc2U7CgkJ CQkJCQl0aGlzLmJ1dHRvbl9jb250ZXh0KG9iaiwgJ21vdXNlb3V0JywgJ21lbnUn KTsKCQkJCQkJfQoKCQkJCQkJdGhpcy5jb2xvcnN0YXRlID0gY29sb3JzdGF0ZTsK CgkJCQkJCWVsbWlkID0gdGhpcy5lZGl0b3JpZCArICdfY29sb3JfJyArIHRoaXMu dHJhbnNsYXRlX2NvbG9yX2NvbW1hbmR2YWx1ZShjb2xvcnN0YXRlKTsKCQkJCQkJ dmFyIG9iaiA9IGZldGNoX29iamVjdChlbG1pZCk7CgkJCQkJCWlmIChvYmogIT0g bnVsbCkKCQkJCQkJewoJCQkJCQkJb2JqLnN0YXRlID0gdHJ1ZTsKCQkJCQkJCXRo aXMuYnV0dG9uX2NvbnRleHQob2JqLCAnbW91c2VvdXQnLCAnbWVudScpOwoJCQkJ CQl9CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJCQkJCXRoaXMuY29sb3JzdGF0 ZSA9IGNvbG9yc3RhdGU7CgoJCQkJCQljb2xvcnN0YXRlID0gdGhpcy50cmFuc2xh dGVfY29sb3JfY29tbWFuZHZhbHVlKHRoaXMuY29sb3JzdGF0ZSk7CgoJCQkJCQlm b3IgKHZhciBpID0gMDsgaSA8IHRoaXMuYnV0dG9uc1snZm9yZWNvbG9yJ10ub3B0 aW9ucy5sZW5ndGg7IGkrKykKCQkJCQkJewoJCQkJCQkJaWYgKHRoaXMuYnV0dG9u c1snZm9yZWNvbG9yJ10ub3B0aW9uc1tpXS52YWx1ZSA9PSBjb2xvcnN0YXRlKQoJ CQkJCQkJewoJCQkJCQkJCXRoaXMuYnV0dG9uc1snZm9yZWNvbG9yJ10uc2VsZWN0 ZWRJbmRleCA9IGk7CgkJCQkJCQkJYnJlYWs7CgkJCQkJCQl9CgkJCQkJCX0KCQkJ CQl9CgkJCQl9CgkJCX0KCQl9OwoKCQkvKioKCQkqIEZ1bmN0aW9uIHRvIHRyYW5z bGF0ZSB0aGUgb3V0cHV0IGZyb20gcXVlcnlDb21tYW5kU3RhdGUoJ2ZvcmVjb2xv cicpIGludG8gc29tZXRoaW5nIHVzZWZ1bAoJCSoKCQkqIEBwYXJhbQlzdHJpbmcJ T3V0cHV0IGZyb20gcXVlcnlDb21tYW5kU3RhdGUoJ2ZvcmVjb2xvcicpCgkJKgoJ CSogQHJldHVybglzdHJpbmcKCQkqLwoJCXRoaXMudHJhbnNsYXRlX2NvbG9yX2Nv bW1hbmR2YWx1ZSA9IGZ1bmN0aW9uKGZvcmVjb2xvcikKCQl7CgkJCXJldHVybiB0 aGlzLnRyYW5zbGF0ZV9zaWxseV9oZXgoKGZvcmVjb2xvciAmIDB4RkYpLnRvU3Ry aW5nKDE2KSwgKChmb3JlY29sb3IgPj4gOCkgJiAweEZGKS50b1N0cmluZygxNiks ICgoZm9yZWNvbG9yID4+IDE2KSAmIDB4RkYpLnRvU3RyaW5nKDE2KSk7CgkJfTsK CgkJLyoqCgkJKiBGdW5jdGlvbiB0byB0cmFuc2xhdGUgYSBoZXggbGlrZSBGIEFC IDkgdG8gIzBGQUIwOSBhbmQgdGhlbiB0byBjb2xvcm9wdGlvbnNbJyMwRkFCMDkn XQoJCSoKCQkqIEBwYXJhbQlzdHJpbmcJUmVkIHZhbHVlCgkJKiBAcGFyYW0Jc3Ry aW5nCUdyZWVuIHZhbHVlCgkJKiBAcGFyYW0Jc3RyaW5nCUJsdWUgdmFsdWUKCQkq CgkJKiBAcmV0dXJuCXN0cmluZwlPcHRpb24gZnJvbSBjb2xvcm9wdGlvbnMgYXJy YXkKCQkqLwoJCXRoaXMudHJhbnNsYXRlX3NpbGx5X2hleCA9IGZ1bmN0aW9uKHIs IGcsIGIpCgkJewoJCQlyZXR1cm4gY29sb3JvcHRpb25zWycjJyArIChQSFAuc3Ry X3BhZChyLCAyLCAwKSArIFBIUC5zdHJfcGFkKGcsIDIsIDApICsgUEhQLnN0cl9w YWQoYiwgMiwgMCkpLnRvVXBwZXJDYXNlKCldOwoJCX07CgoJCS8qKgoJCSogQXBw bHkgRm9ybWF0dGluZwoJCSovCgkJdGhpcy5hcHBseV9mb3JtYXQgPSBmdW5jdGlv bihjbWQsIGRpYWxvZywgYXJndW1lbnQpCgkJewoJCQl0aGlzLmVkaXRkb2MuZXhl Y0NvbW1hbmQoY21kLCAodHlwZW9mIGRpYWxvZyA9PSAndW5kZWZpbmVkJyA/IGZh bHNlIDogZGlhbG9nKSwgKHR5cGVvZiBhcmd1bWVudCA9PSAndW5kZWZpbmVkJyA/ IHRydWUgOiBhcmd1bWVudCkpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfTsKCgkJLyoq CgkJKiBJbnNlcnQgTGluawoJCSovCgkJdGhpcy5jcmVhdGVsaW5rID0gZnVuY3Rp b24oZSwgdXJsKQoJCXsKCQkJcmV0dXJuIHRoaXMuYXBwbHlfZm9ybWF0KCdjcmVh dGVsaW5rJywgaXNfaWUsICh0eXBlb2YgdXJsID09ICd1bmRlZmluZWQnID8gdHJ1 ZSA6IHVybCkpOwoJCX07CgoJCS8qKgoJCSogSW5zZXJ0IEVtYWlsIExpbmsKCQkq LwoJCXRoaXMuZW1haWwgPSBmdW5jdGlvbihlLCBlbWFpbCkKCQl7CgkJCWlmICh0 eXBlb2YgZW1haWwgPT0gJ3VuZGVmaW5lZCcpCgkJCXsKCQkJCWVtYWlsID0gdGhp cy5zaG93X3Byb21wdCh2YnBocmFzZVsnZW50ZXJfZW1haWxfbGluayddLCAnJywg dHJ1ZSk7CgkJCX0KCgkJCWVtYWlsID0gdGhpcy52ZXJpZnlfcHJvbXB0KGVtYWls KTsKCgkJCWlmIChlbWFpbCA9PT0gZmFsc2UpCgkJCXsKCQkJCXJldHVybiB0aGlz LmFwcGx5X2Zvcm1hdCgndW5saW5rJyk7CgkJCX0KCQkJZWxzZQoJCQl7CgkJCQl2 YXIgc2VsZWN0aW9uID0gdGhpcy5nZXRfc2VsZWN0aW9uKCk7CgkJCQlyZXR1cm4g dGhpcy5pbnNlcnRfdGV4dCgnPGEgaHJlZj0ibWFpbHRvOicgKyBlbWFpbCArICci PicgKyAoc2VsZWN0aW9uID8gc2VsZWN0aW9uIDogZW1haWwpICsgJzwvYT4nLCAo c2VsZWN0aW9uID8gdHJ1ZSA6IGZhbHNlKSk7CgkJCX0KCQl9OwoKCQkvKioKCQkq IEluc2VydCBTbWlsaWUKCQkqLwoJCXRoaXMuaW5zZXJ0X3NtaWxpZSA9IGZ1bmN0 aW9uKGUsIHNtaWxpZXRleHQsIHNtaWxpZXBhdGgsIHNtaWxpZWlkKQoJCXsKCQkJ dGhpcy5jaGVja19mb2N1cygpOwoKCQkJcmV0dXJuIHRoaXMuaW5zZXJ0X3RleHQo JzxpbWcgc3JjPSInICsgc21pbGllcGF0aCArICciIGJvcmRlcj0iMCIgYWx0PSIw IiBzbWlsaWVpZD0iJyArIHNtaWxpZWlkICsgJyIgLz4nLCBmYWxzZSk7CgkJfTsK CgkJLyoqCgkJKiBHZXQgRWRpdG9yIENvbnRlbnRzCgkJKi8KCQl0aGlzLmdldF9l ZGl0b3JfY29udGVudHMgPSBmdW5jdGlvbigpCgkJewoJCQlyZXR1cm4gdGhpcy5l ZGl0ZG9jLmJvZHkuaW5uZXJIVE1MOwoJCX07CgoJCS8qKgoJCSogR2V0IFNlbGVj dGVkIFRleHQKCQkqLwoJCXRoaXMuZ2V0X3NlbGVjdGlvbiA9IGZ1bmN0aW9uKCkK CQl7CgkJCXZhciByYW5nZSA9IHRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY3JlYXRl UmFuZ2UoKTsKCQkJaWYgKHJhbmdlLmh0bWxUZXh0ICYmIHJhbmdlLnRleHQpCgkJ CXsKCQkJCXJldHVybiByYW5nZS5odG1sVGV4dDsKCQkJfQoJCQllbHNlCgkJCXsK CQkJCXZhciBkb19ub3Rfc3RlYWxfdGhpc19jb2RlX2h0bWwgPSAnJzsKCQkJCWZv ciAodmFyIGkgPSAwOyBpIDwgcmFuZ2UubGVuZ3RoOyBpKyspCgkJCQl7CgkJCQkJ ZG9fbm90X3N0ZWFsX3RoaXNfY29kZV9odG1sICs9IHJhbmdlLml0ZW0oaSkub3V0 ZXJIVE1MOwoJCQkJfQoJCQkJcmV0dXJuIGRvX25vdF9zdGVhbF90aGlzX2NvZGVf aHRtbDsKCQkJfQoJCX07CgoJCS8qKgoJCSogUGFzdGUgSFRNTAoJCSovCgkJdGhp cy5pbnNlcnRfdGV4dCA9IGZ1bmN0aW9uKHRleHQsIG1vdmVzdGFydCwgbW92ZWVu ZCkKCQl7CgkJCXRoaXMuY2hlY2tfZm9jdXMoKTsKCgkJCWlmICh0eXBlb2YodGhp cy5lZGl0ZG9jLnNlbGVjdGlvbikgIT0gJ3VuZGVmaW5lZCcgJiYgdGhpcy5lZGl0 ZG9jLnNlbGVjdGlvbi50eXBlICE9ICdUZXh0JyAmJiB0aGlzLmVkaXRkb2Muc2Vs ZWN0aW9uLnR5cGUgIT0gJ05vbmUnKQoJCQl7CgkJCQltb3Zlc3RhcnQgPSBmYWxz ZTsKCQkJCXRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY2xlYXIoKTsKCQkJfQoKCQkJ dmFyIHNlbCA9IHRoaXMuZWRpdGRvYy5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsK CQkJc2VsLnBhc3RlSFRNTCh0ZXh0KTsKCgkJCWlmICh0ZXh0LmluZGV4T2YoJ1xu JykgPT0gLTEpCgkJCXsKCQkJCWlmIChtb3Zlc3RhcnQgPT09IGZhbHNlKQoJCQkJ ewoJCQkJCS8vIGRvIG5vdGhpbmcKCQkJCX0KCQkJCWVsc2UgaWYgKHR5cGVvZiBt b3Zlc3RhcnQgIT0gJ3VuZGVmaW5lZCcpCgkJCQl7CgkJCQkJc2VsLm1vdmVTdGFy dCgnY2hhcmFjdGVyJywgLXRleHQudkJsZW5ndGgoKSArbW92ZXN0YXJ0KTsKCQkJ CQlzZWwubW92ZUVuZCgnY2hhcmFjdGVyJywgLW1vdmVlbmQpOwoJCQkJfQoJCQkJ ZWxzZQoJCQkJewoJCQkJCXNlbC5tb3ZlU3RhcnQoJ2NoYXJhY3RlcicsIC10ZXh0 LnZCbGVuZ3RoKCkpOwoJCQkJfQoJCQkJc2VsLnNlbGVjdCgpOwoJCQl9CgkJfTsK CgkJLyoqCgkJKiBQcmVwYXJlIEZvcm0gRm9yIFN1Ym1pdAoJCSovCgkJdGhpcy5w cmVwYXJlX3N1Ym1pdCA9IGZ1bmN0aW9uKHN1YmplY3R0ZXh0LCBtaW5jaGFycykK CQl7CgkJCXRoaXMudGV4dG9iai52YWx1ZSA9IHRoaXMuZ2V0X2VkaXRvcl9jb250 ZW50cygpOwoKCQkJdmFyIHJldHVybnZhbHVlID0gdmFsaWRhdGVtZXNzYWdlKHN0 cmlwY29kZSh0aGlzLnRleHRvYmoudmFsdWUsIHRydWUpLCBzdWJqZWN0dGV4dCwg bWluY2hhcnMpOwoKCQkJaWYgKHJldHVybnZhbHVlKQoJCQl7CgkJCQlyZXR1cm4g cmV0dXJudmFsdWU7CgkJCX0KCQkJZWxzZSBpZiAodGhpcy5jYXB0Y2hhICE9IG51 bGwgJiYgdGhpcy5jYXB0Y2hhLmZhaWxlZCkKCQkJewoJCQkJcmV0dXJuIGZhbHNl OwoJCQl9CgkJCWVsc2UKCQkJewoJCQkJdGhpcy5jaGVja19mb2N1cygpOwoJCQkJ cmV0dXJuIGZhbHNlOwoJCQl9CgkJfQoKCQkvLyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQoJCS8vIE1vemlsbGEgV1lTSVdZRyBvbmx5CgkJLy8gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KCQlpZiAoaXNfbW96KQoJCXsKCQkJLyoq CgkJCSogU2V0IGVkaXRvciBjb250ZW50cwoJCQkqLwoJCQl0aGlzLl9zZXRfZWRp dG9yX2NvbnRlbnRzID0gdGhpcy5zZXRfZWRpdG9yX2NvbnRlbnRzOwoJCQl0aGlz LnNldF9lZGl0b3JfY29udGVudHMgPSBmdW5jdGlvbihpbml0aWFsX3RleHQpCgkJ CXsKCQkJCXRoaXMuX3NldF9lZGl0b3JfY29udGVudHMoaW5pdGlhbF90ZXh0KTsK CgkJCQl0aGlzLmVkaXRkb2MuYWRkRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLCB2 Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmVkaXRkb2Nfb25rZXlwcmVz cywgdHJ1ZSk7CgkJCX07CgoJCQkvKioKCQkJKiBTZXQgZWRpdG9yIHN0eWxlCgkJ CSovCgkJCXRoaXMuc2V0X2VkaXRvcl9zdHlsZSA9IGZ1bmN0aW9uKCkKCQkJewoJ CQkJZm9yICh2YXIgc3MgPSAwOyBzcyA8IGRvY3VtZW50LnN0eWxlU2hlZXRzLmxl bmd0aDsgc3MrKykKCQkJCXsKCQkJCQl0cnkKCQkJCQl7CgkJCQkJCWlmIChkb2N1 bWVudC5zdHlsZVNoZWV0c1tzc10uY3NzUnVsZXMubGVuZ3RoIDw9IDApCgkJCQkJ CXsKCQkJCQkJCWNvbnRpbnVlOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWNhdGNoKGUp CgkJCQkJeyAvLyB0cnlpbmcgdG8gYWNjZXNzIGEgc3R5bGVzaGVldCBvdXRzaWRl IHRoZSBhbGxvd2VkIGRvbWFpbgoJCQkJCQljb250aW51ZTsKCQkJCQl9CgkJCQkJ Zm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0c1tzc10uY3Nz UnVsZXMubGVuZ3RoOyBpKyspCgkJCQkJewoJCQkJCQlpZiAoZG9jdW1lbnQuc3R5 bGVTaGVldHNbc3NdLmNzc1J1bGVzW2ldLnNlbGVjdG9yVGV4dCA9PSAnLnd5c2l3 eWcnKQoJCQkJCQl7CgkJCQkJCQluZXdzcyA9IHRoaXMuZWRpdGRvYy5jcmVhdGVF bGVtZW50KCdzdHlsZScpOwoJCQkJCQkJbmV3c3MudHlwZSA9ICd0ZXh0L2Nzcyc7 CgkJCQkJCQluZXdzcy5pbm5lckhUTUwgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1tz c10uY3NzUnVsZXNbaV0uY3NzVGV4dCArICcgcCB7IG1hcmdpbjogMHB4OyB9JzsK CQkJCQkJCXRoaXMuZWRpdGRvYy5kb2N1bWVudEVsZW1lbnQuY2hpbGROb2Rlc1sw XS5hcHBlbmRDaGlsZChuZXdzcyk7CgkJCQkJCQl0aGlzLmVkaXRkb2MuYm9keS5j bGFzc05hbWUgPSAnd3lzaXd5Zyc7CgkJCQkJCQl0aGlzLmVkaXRkb2MuYm9keS5z dHlsZS5mb250RmFtaWx5ID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbc3NdLmNzc1J1 bGVzW2ldLnN0eWxlLmZvbnRGYW1pbHk7CgkJCQkJCQl0aGlzLmVkaXRkb2MuYm9k eS5zdHlsZS5mb250U2l6ZSA9IGRvY3VtZW50LnN0eWxlU2hlZXRzW3NzXS5jc3NS dWxlc1tpXS5zdHlsZS5mb250U2l6ZTsKCQkJCQkJCXJldHVybiBmYWxzZTsKCQkJ CQkJfQoJCQkJCX0KCQkJCX0KCQkJfTsKCgkJCS8qKgoJCQkqIFRyYW5zbGF0ZSBD b2xvciBDb21tYW5kIFZhbHVlCgkJCSovCgkJCXRoaXMudHJhbnNsYXRlX2NvbG9y X2NvbW1hbmR2YWx1ZSA9IGZ1bmN0aW9uKGZvcmVjb2xvcikKCQkJewoJCQkJaWYg KGZvcmVjb2xvciA9PSAnJyB8fCBmb3JlY29sb3IgPT0gbnVsbCkKCQkJCXsKCQkJ CQlmb3JlY29sb3IgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmVkaXRk b2MuYm9keSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnY29sb3InKTsKCQkJCX0K CgkJCQlpZiAoZm9yZWNvbG9yLnRvTG93ZXJDYXNlKCkuaW5kZXhPZigncmdiJykg PT0gMCkKCQkJCXsKCQkJCQl2YXIgbWF0Y2hlcyA9IGZvcmVjb2xvci5tYXRjaCgv XnJnYlxzKlwoKFswLTldKyksXHMqKFswLTldKyksXHMqKFswLTldKylcKSQvKTsK CQkJCQlpZiAobWF0Y2hlcykKCQkJCQl7CgkJCQkJCXJldHVybiB0aGlzLnRyYW5z bGF0ZV9zaWxseV9oZXgoKG1hdGNoZXNbMV0gJiAweEZGKS50b1N0cmluZygxNiks IChtYXRjaGVzWzJdICYgMHhGRikudG9TdHJpbmcoMTYpLCAobWF0Y2hlc1szXSAm IDB4RkYpLnRvU3RyaW5nKDE2KSk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7CgkJ CQkJCXJldHVybiB0aGlzLnRyYW5zbGF0ZV9jb2xvcl9jb21tYW5kdmFsdWUobnVs bCk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXJldHVybiBmb3Jl Y29sb3I7CgkJCQl9CgkJCX07CgoJCQkvKioKCQkJKiBUcmFuc2xhdGUgQ1NTIGZv bnRTaXplIHRvIEhUTUwgRm9udCBTaXplCgkJCSovCgkJCXRoaXMudHJhbnNsYXRl X2ZvbnRzaXplID0gZnVuY3Rpb24oY3Nzc2l6ZSkKCQkJewoJCQkJc3dpdGNoIChj c3NzaXplKQoJCQkJewoJCQkJCWNhc2UgJzcuNXB0JzoKCQkJCQljYXNlICcxMHB4 JzogcmV0dXJuIDE7CgkJCQkJY2FzZSAnMTBwdCc6IHJldHVybiAyOwoJCQkJCWNh c2UgJzEycHQnOiByZXR1cm4gMzsKCQkJCQljYXNlICcxNHB0JzogcmV0dXJuIDQ7 CgkJCQkJY2FzZSAnMThwdCc6IHJldHVybiA1OwoJCQkJCWNhc2UgJzI0cHQnOiBy ZXR1cm4gNjsKCQkJCQljYXNlICczNnB0JzogcmV0dXJuIDc7CgkJCQkJZGVmYXVs dDogICAgIHJldHVybiAnJzsKCQkJCX0KCQkJfQoKCQkJLyoqCgkJCSogQXBwbHkg Rm9ybWF0CgkJCSovCgkJCXRoaXMuX2FwcGx5X2Zvcm1hdCA9IHRoaXMuYXBwbHlf Zm9ybWF0OwoJCQl0aGlzLmFwcGx5X2Zvcm1hdCA9IGZ1bmN0aW9uKGNtZCwgZGlh bG9nLCBhcmcpCgkJCXsKCQkJCXRoaXMuZWRpdGRvYy5leGVjQ29tbWFuZCgndXNl Q1NTJywgZmFsc2UsIHRydWUpOwoJCQkJcmV0dXJuIHRoaXMuX2FwcGx5X2Zvcm1h dChjbWQsIGRpYWxvZywgYXJnKTsKCQkJfTsKCgkJCS8qKgoJCQkqIEluc2VydCBM aW5rCgkJCSovCgkJCXRoaXMuX2NyZWF0ZWxpbmsgPSB0aGlzLmNyZWF0ZWxpbms7 CgkJCXRoaXMuY3JlYXRlbGluayA9IGZ1bmN0aW9uKGUsIHVybCkKCQkJewoJCQkJ aWYgKHR5cGVvZiB1cmwgPT0gJ3VuZGVmaW5lZCcpCgkJCQl7CgkJCQkJdXJsID0g dGhpcy5zaG93X3Byb21wdCh2YnBocmFzZVsnZW50ZXJfbGlua191cmwnXSwgJ2h0 dHA6Ly8nLCB0cnVlKTsKCQkJCX0KCQkJCWlmICgodXJsID0gdGhpcy52ZXJpZnlf cHJvbXB0KHVybCkpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQlpZiAodGhpcy5nZXRf c2VsZWN0aW9uKCkpCgkJCQkJewoJCQkJCQl0aGlzLmFwcGx5X2Zvcm1hdCgndW5s aW5rJyk7CgkJCQkJCXRoaXMuX2NyZWF0ZWxpbmsoZSwgdXJsKTsKCQkJCQl9CgkJ CQkJZWxzZQoJCQkJCXsKCQkJCQkJdGhpcy5pbnNlcnRfdGV4dCgnPGEgaHJlZj0i JyArIHVybCArICciPicgKyB1cmwgKyAnPC9hPicpOwoJCQkJCX0KCQkJCX0KCQkJ CXJldHVybiB0cnVlOwoJCQl9OwoKCQkJLyoqCgkJCSogSW5zZXJ0IFNtaWxpZQoJ CQkqLwoJCQl0aGlzLmluc2VydF9zbWlsaWUgPSBmdW5jdGlvbihlLCBzbWlsaWV0 ZXh0LCBzbWlsaWVwYXRoLCBzbWlsaWVpZCkKCQkJewoJCQkJdGhpcy5jaGVja19m b2N1cygpOwoKCQkJCXRyeQoJCQkJewoJCQkJCXRoaXMuYXBwbHlfZm9ybWF0KCdJ bnNlcnRJbWFnZScsIGZhbHNlLCBzbWlsaWVwYXRoKTsKCQkJCQl2YXIgc21pbGll cyA9IGZldGNoX3RhZ3ModGhpcy5lZGl0ZG9jLmJvZHksICdpbWcnKTsKCQkJCQlm b3IgKHZhciBpID0gMDsgaSA8IHNtaWxpZXMubGVuZ3RoOyBpKyspCgkJCQkJewoJ CQkJCQlpZiAoc21pbGllc1tpXS5zcmMgPT0gc21pbGllcGF0aCkKCQkJCQkJewoJ CQkJCQkJaWYgKHNtaWxpZXNbaV0uZ2V0QXR0cmlidXRlKCdzbWlsaWVpZCcpIDwg MSkKCQkJCQkJCXsKCQkJCQkJCQlzbWlsaWVzW2ldLnNldEF0dHJpYnV0ZSgnc21p bGllaWQnLCBzbWlsaWVpZCk7CgkJCQkJCQkJc21pbGllc1tpXS5zZXRBdHRyaWJ1 dGUoJ2JvcmRlcicsICIwIik7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9 CgkJCQljYXRjaChlKQoJCQkJewoJCQkJCS8vIGZhaWxlZC4uLiBwcm9iYWJseSBk dWUgdG8gaW5zZXJ0aW5nIGEgc21pbGllIG92ZXIgYSBzbWlsaWUgaW4gbW96aWxs YQoJCQkJfQoJCQl9OwoKCQkJLyoqCgkJCSogR2V0IFNlbGVjdGlvbgoJCQkqLwoJ CQl0aGlzLmdldF9zZWxlY3Rpb24gPSBmdW5jdGlvbigpCgkJCXsKCQkJCXNlbGVj dGlvbiA9IHRoaXMuZWRpdHdpbi5nZXRTZWxlY3Rpb24oKTsKCQkJCXRoaXMuY2hl Y2tfZm9jdXMoKTsKCQkJCXJhbmdlID0gc2VsZWN0aW9uID8gc2VsZWN0aW9uLmdl dFJhbmdlQXQoMCkgOiB0aGlzLmVkaXRkb2MuY3JlYXRlUmFuZ2UoKTsKCQkJCXJl dHVybiB0aGlzLnJlYWRfbm9kZXMocmFuZ2UuY2xvbmVDb250ZW50cygpLCBmYWxz ZSk7CgkJCX07CgoJCQkvKioKCQkJKiBQYXN0ZSBUZXh0CgkJCSovCgkJCXRoaXMu aW5zZXJ0X3RleHQgPSBmdW5jdGlvbihzdHIpCgkJCXsKCQkJCXRoaXMuZWRpdGRv Yy5leGVjQ29tbWFuZCgnaW5zZXJ0SFRNTCcsIGZhbHNlLCBzdHIpOwoJCQkJLypm cmFnbWVudCA9IHRoaXMuZWRpdGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7 CgkJCQlob2xkZXIgPSB0aGlzLmVkaXRkb2MuY3JlYXRlRWxlbWVudCgnc3Bhbicp OwoJCQkJaG9sZGVyLmlubmVySFRNTCA9IHN0cjsKCgkJCQl3aGlsZSAoaG9sZGVy LmZpcnN0Q2hpbGQpCgkJCQl7CgkJCQkJZnJhZ21lbnQuYXBwZW5kQ2hpbGQoaG9s ZGVyLmZpcnN0Q2hpbGQpOwoJCQkJfQoKCQkJCXRoaXMuaW5zZXJ0X25vZGVfYXRf c2VsZWN0aW9uKGZyYWdtZW50KTsqLwoJCQl9OwoKCQkJLyoqCgkJCSogU2V0IGVk aXRvciBmdW5jdGlvbnMKCQkJKi8KCQkJdGhpcy5zZXRfZWRpdG9yX2Z1bmN0aW9u cyA9IGZ1bmN0aW9uKCkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLmFkZEV2ZW50TGlz dGVuZXIoJ21vdXNldXAnLCB2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBl LmVkaXRkb2Nfb25tb3VzZXVwLCB0cnVlKTsKCQkJCXRoaXMuZWRpdGRvYy5hZGRF dmVudExpc3RlbmVyKCdrZXl1cCcsIHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90 b3R5cGUuZWRpdGRvY19vbmtleXVwLCB0cnVlKTsKCQkJCXRoaXMuZWRpdHdpbi5h ZGRFdmVudExpc3RlbmVyKCdmb2N1cycsIHZCX1RleHRfRWRpdG9yX0V2ZW50cy5w cm90b3R5cGUuZWRpdHdpbl9vbmZvY3VzLCB0cnVlKTsKCQkJCXRoaXMuZWRpdHdp bi5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdkJfVGV4dF9FZGl0b3JfRXZlbnRz LnByb3RvdHlwZS5lZGl0d2luX29uYmx1ciwgdHJ1ZSk7CgkJCX07CgoKCQkJLyoq CgkJCSogQWRkIFJhbmdlIChNb3ppbGxhKQoJCQkqLwoJCQl0aGlzLmFkZF9yYW5n ZSA9IGZ1bmN0aW9uKG5vZGUpCgkJCXsKCQkJCXRoaXMuY2hlY2tfZm9jdXMoKTsK CQkJCXZhciBzZWwgPSB0aGlzLmVkaXR3aW4uZ2V0U2VsZWN0aW9uKCk7CgkJCQl2 YXIgcmFuZ2UgPSB0aGlzLmVkaXRkb2MuY3JlYXRlUmFuZ2UoKTsKCQkJCXJhbmdl LnNlbGVjdE5vZGVDb250ZW50cyhub2RlKTsKCQkJCXNlbC5yZW1vdmVBbGxSYW5n ZXMoKTsKCQkJCXNlbC5hZGRSYW5nZShyYW5nZSk7CgkJCX07CgoJCQkvKioKCQkJ KiBSZWFkIE5vZGVzIChNb3ppbGxhKQoJCQkqLwoJCQl0aGlzLnJlYWRfbm9kZXMg PSBmdW5jdGlvbihyb290LCB0b3B0YWcpCgkJCXsKCQkJCXZhciBodG1sID0gIiI7 CgkJCQl2YXIgbW96X2NoZWNrID0gL19tb3ovaTsKCgkJCQlzd2l0Y2ggKHJvb3Qu bm9kZVR5cGUpCgkJCQl7CgkJCQkJY2FzZSBOb2RlLkVMRU1FTlRfTk9ERToKCQkJ CQljYXNlIE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERToKCQkJCQl7CgkJCQkJ CXZhciBjbG9zZWQ7CgkJCQkJCWlmICh0b3B0YWcpCgkJCQkJCXsKCQkJCQkJCWNs b3NlZCA9ICFyb290Lmhhc0NoaWxkTm9kZXMoKTsKCQkJCQkJCWh0bWwgPSAnPCcg KyByb290LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKCQkJCQkJCXZhciBhdHRyID0g cm9vdC5hdHRyaWJ1dGVzOwoJCQkJCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBhdHRy Lmxlbmd0aDsgKytpKQoJCQkJCQkJewoJCQkJCQkJCXZhciBhID0gYXR0ci5pdGVt KGkpOwoJCQkJCQkJCWlmICghYS5zcGVjaWZpZWQgfHwgYS5uYW1lLm1hdGNoKG1v el9jaGVjaykgfHwgYS52YWx1ZS5tYXRjaChtb3pfY2hlY2spKQoJCQkJCQkJCXsK CQkJCQkJCQkJY29udGludWU7CgkJCQkJCQkJfQoKCQkJCQkJCQlodG1sICs9ICIg IiArIGEubmFtZS50b0xvd2VyQ2FzZSgpICsgJz0iJyArIGEudmFsdWUgKyAnIic7 CgkJCQkJCQl9CgkJCQkJCQlodG1sICs9IGNsb3NlZCA/ICIgLz4iIDogIj4iOwoJ CQkJCQl9CgkJCQkJCWZvciAodmFyIGkgPSByb290LmZpcnN0Q2hpbGQ7IGk7IGkg PSBpLm5leHRTaWJsaW5nKQoJCQkJCQl7CgkJCQkJCQlodG1sICs9IHRoaXMucmVh ZF9ub2RlcyhpLCB0cnVlKTsKCQkJCQkJfQoJCQkJCQlpZiAodG9wdGFnICYmICFj bG9zZWQpCgkJCQkJCXsKCQkJCQkJCWh0bWwgKz0gIjwvIiArIHJvb3QudGFnTmFt ZS50b0xvd2VyQ2FzZSgpICsgIj4iOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWJyZWFr OwoKCQkJCQljYXNlIE5vZGUuVEVYVF9OT0RFOgoJCQkJCXsKCQkJCQkJLy9odG1s ID0gaHRtbHNwZWNpYWxjaGFycyhyb290LmRhdGEpOwoJCQkJCQlodG1sID0gUEhQ Lmh0bWxzcGVjaWFsY2hhcnMocm9vdC5kYXRhKTsKCQkJCQl9CgkJCQkJYnJlYWs7 CgkJCQl9CgoJCQkJcmV0dXJuIGh0bWw7CgkJCX07CgoJCQkvKioKCQkJKiBJbnNl cnQgTm9kZSBhdCBTZWxlY3Rpb24gKE1vemlsbGEpCgkJCSovCgkJCXRoaXMuaW5z ZXJ0X25vZGVfYXRfc2VsZWN0aW9uID0gZnVuY3Rpb24odGV4dCkKCQkJewoJCQkJ dGhpcy5jaGVja19mb2N1cygpOwoKCQkJCXZhciBzZWwgPSB0aGlzLmVkaXR3aW4u Z2V0U2VsZWN0aW9uKCk7CgkJCQl2YXIgcmFuZ2UgPSBzZWwgPyBzZWwuZ2V0UmFu Z2VBdCgwKSA6IHRoaXMuZWRpdGRvYy5jcmVhdGVSYW5nZSgpOwoJCQkJc2VsLnJl bW92ZUFsbFJhbmdlcygpOwoJCQkJcmFuZ2UuZGVsZXRlQ29udGVudHMoKTsKCgkJ CQl2YXIgbm9kZSA9IHJhbmdlLnN0YXJ0Q29udGFpbmVyOwoJCQkJdmFyIHBvcyA9 IHJhbmdlLnN0YXJ0T2Zmc2V0OwoKCQkJCXN3aXRjaCAobm9kZS5ub2RlVHlwZSkK CQkJCXsKCQkJCQljYXNlIE5vZGUuRUxFTUVOVF9OT0RFOgoJCQkJCXsKCQkJCQkJ aWYgKHRleHQubm9kZVR5cGUgPT0gTm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RF KQoJCQkJCQl7CgkJCQkJCQlzZWxOb2RlID0gdGV4dC5maXJzdENoaWxkOwoJCQkJ CQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJc2VsTm9kZSA9IHRleHQ7CgkJ CQkJCX0KCQkJCQkJbm9kZS5pbnNlcnRCZWZvcmUodGV4dCwgbm9kZS5jaGlsZE5v ZGVzW3Bvc10pOwoJCQkJCQl0aGlzLmFkZF9yYW5nZShzZWxOb2RlKTsKCQkJCQl9 CgkJCQkJYnJlYWs7CgoJCQkJCWNhc2UgTm9kZS5URVhUX05PREU6CgkJCQkJewoJ CQkJCQlpZiAodGV4dC5ub2RlVHlwZSA9PSBOb2RlLlRFWFRfTk9ERSkKCQkJCQkJ ewoJCQkJCQkJdmFyIHRleHRfbGVuZ3RoID0gcG9zICsgdGV4dC5sZW5ndGg7CgkJ CQkJCQlub2RlLmluc2VydERhdGEocG9zLCB0ZXh0LmRhdGEpOwoJCQkJCQkJcmFu Z2UgPSB0aGlzLmVkaXRkb2MuY3JlYXRlUmFuZ2UoKTsKCQkJCQkJCXJhbmdlLnNl dEVuZChub2RlLCB0ZXh0X2xlbmd0aCk7CgkJCQkJCQlyYW5nZS5zZXRTdGFydChu b2RlLCB0ZXh0X2xlbmd0aCk7CgkJCQkJCQlzZWwuYWRkUmFuZ2UocmFuZ2UpOwoJ CQkJCQl9CgkJCQkJCWVsc2UKCQkJCQkJewoJCQkJCQkJbm9kZSA9IG5vZGUuc3Bs aXRUZXh0KHBvcyk7CgkJCQkJCQl2YXIgc2VsTm9kZTsKCQkJCQkJCWlmICh0ZXh0 Lm5vZGVUeXBlID09IE5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSkKCQkJCQkJ CXsKCQkJCQkJCQlzZWxOb2RlID0gdGV4dC5maXJzdENoaWxkOwoJCQkJCQkJfQoJ CQkJCQkJZWxzZQoJCQkJCQkJewoJCQkJCQkJCXNlbE5vZGUgPSB0ZXh0OwoJCQkJ CQkJfQoJCQkJCQkJbm9kZS5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh0ZXh0LCBu b2RlKTsKCQkJCQkJCXRoaXMuYWRkX3JhbmdlKHNlbE5vZGUpOwoJCQkJCQl9CgkJ CQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9OwoJCX0KCQkvLyA9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQoJCS8vIE9wZXJhIFdZU0lXWUcgb25seQoJCS8v ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJZWxzZSBpZiAoaXNfb3Bl cmEpCgkJewoJCQkvKioKCQkJCVRoZXJlIGFyZSBzZXZlcmFsIGlzc3VlcyB3aXRo IE9wZXJhIHdoaWNoIGlzIHdoeSB0aGlzIGNvZGUgaXMgZGlzYWJsZWQ6CgkJCQkJ MS4gRm9jdXMgaXNzdWVzLCB3aGVuIGEgYnV0dG9uIGlzIHByZXNzZWQgdGhlIGVk aXRvciBsb3NlcyBmb2N1cwoJCQkJCTIuIFN0eWxpbmcgaXMgbG9zdCB3aGVuIHdl IG1ha2UgYW55IGFkanVzdG1lbnRzIHRvIHRoZSBlZGl0b3IKCQkJCQkzLiBBZGRp bmcgYSBVUkwgaXMgZXZlciBsYXN0aW5nIGV2ZW4gaWYgeW91IHB1c2ggZW50ZXIK CQkJKi8KCQkJLyoqCgkJCSogU2V0IGVkaXRvciBzdHlsZQoJCQkqLwoJCQl0aGlz LnNldF9lZGl0b3Jfc3R5bGUgPSBmdW5jdGlvbigpCgkJCXsKCQkJCWZvciAodmFy IHNzID0gMDsgc3MgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IHNzKysp CgkJCQl7CgkJCQkJdHJ5CgkJCQkJewoJCQkJCQlpZiAoZG9jdW1lbnQuc3R5bGVT aGVldHNbc3NdLmNzc1J1bGVzLmxlbmd0aCA8PSAwKQoJCQkJCQl7CgkJCQkJCQlj b250aW51ZTsKCQkJCQkJfQoJCQkJCX0KCQkJCQljYXRjaChlKQoJCQkJCXsgLy8g dHJ5aW5nIHRvIGFjY2VzcyBhIHN0eWxlc2hlZXQgb3V0c2lkZSB0aGUgYWxsb3dl ZCBkb21haW4KCQkJCQkJY29udGludWU7CgkJCQkJfQoJCQkJCWZvciAodmFyIGkg PSAwOyBpIDwgZG9jdW1lbnQuc3R5bGVTaGVldHNbc3NdLmNzc1J1bGVzLmxlbmd0 aDsgaSsrKQoJCQkJCXsKCQkJCQkJaWYgKGRvY3VtZW50LnN0eWxlU2hlZXRzW3Nz XS5jc3NSdWxlc1tpXS5zZWxlY3RvclRleHQgPT0gJy53eXNpd3lnJykKCQkJCQkJ ewoJCQkJCQkJbmV3c3MgPSB0aGlzLmVkaXRkb2MuY3JlYXRlRWxlbWVudCgnc3R5 bGUnKTsKCQkJCQkJCW5ld3NzLnR5cGUgPSAndGV4dC9jc3MnOwoJCQkJCQkJbmV3 c3MuaW5uZXJIVE1MID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbc3NdLmNzc1J1bGVz W2ldLmNzc1RleHQgKyAnIHAgeyBtYXJnaW46IDBweDsgfSc7CgkJCQkJCQl0aGlz LmVkaXRkb2MuZG9jdW1lbnRFbGVtZW50LmNoaWxkTm9kZXNbMF0uYXBwZW5kQ2hp bGQobmV3c3MpOwoJCQkJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuY2xhc3NOYW1lID0g J3d5c2l3eWcnOwoJCQkJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuc3R5bGUuZm9udEZh bWlseSA9IGRvY3VtZW50LnN0eWxlU2hlZXRzW3NzXS5jc3NSdWxlc1tpXS5zdHls ZS5mb250RmFtaWx5OwoJCQkJCQkJdGhpcy5lZGl0ZG9jLmJvZHkuc3R5bGUuZm9u dFNpemUgPSBkb2N1bWVudC5zdHlsZVNoZWV0c1tzc10uY3NzUnVsZXNbaV0uc3R5 bGUuZm9udFNpemU7CgkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCX0KCQkJCQl9 CgkJCQl9CgkJCX07CgoJCQkvKioKCQkJKiBJbnNlcnQgTGluawoJCQkqLwoJCQl0 aGlzLl9jcmVhdGVsaW5rID0gdGhpcy5jcmVhdGVsaW5rOwoJCQl0aGlzLmNyZWF0 ZWxpbmsgPSBmdW5jdGlvbihlLCB1cmwpCgkJCXsKCQkJCWlmICh0eXBlb2YgdXJs ID09ICd1bmRlZmluZWQnKQoJCQkJewoJCQkJCXVybCA9IHRoaXMuc2hvd19wcm9t cHQodmJwaHJhc2VbJ2VudGVyX2xpbmtfdXJsJ10sICdodHRwOi8vJywgdHJ1ZSk7 CgkJCQl9CgkJCQlpZiAoKHVybCA9IHRoaXMudmVyaWZ5X3Byb21wdCh1cmwpKSAh PT0gZmFsc2UpCgkJCQl7CgkJCQkJaWYgKHRoaXMuZ2V0X3NlbGVjdGlvbigpKQoJ CQkJCXsKCQkJCQkJdGhpcy5hcHBseV9mb3JtYXQoJ3VubGluaycpOwoJCQkJCQl0 aGlzLl9jcmVhdGVsaW5rKGUsIHVybCk7CgkJCQkJfQoJCQkJCWVsc2UKCQkJCQl7 CgkJCQkJCXRoaXMuaW5zZXJ0X3RleHQoJzxhIGhyZWY9IicgKyB1cmwgKyAnIj4n ICsgdXJsICsgJzwvYT4nKTsKCQkJCQl9CgkJCQl9CgkJCQlyZXR1cm4gdHJ1ZTsK CQkJfTsKCgkJCS8qKgoJCQkqIEluc2VydCBTbWlsaWUKCQkJKi8KCQkJdGhpcy5p bnNlcnRfc21pbGllID0gZnVuY3Rpb24oZSwgc21pbGlldGV4dCwgc21pbGllcGF0 aCwgc21pbGllaWQpCgkJCXsKCQkJCXRoaXMuY2hlY2tfZm9jdXMoKTsKCgkJCQl0 cnkKCQkJCXsKCQkJCQl0aGlzLmFwcGx5X2Zvcm1hdCgnSW5zZXJ0SW1hZ2UnLCBm YWxzZSwgc21pbGllcGF0aCk7CgkJCQkJdmFyIHNtaWxpZXMgPSBmZXRjaF90YWdz KHRoaXMuZWRpdGRvYy5ib2R5LCAnaW1nJyk7CgkJCQkJZm9yICh2YXIgaSA9IDA7 IGkgPCBzbWlsaWVzLmxlbmd0aDsgaSsrKQoJCQkJCXsKCQkJCQkJaWYgKHNtaWxp ZXNbaV0uc3JjID09IHNtaWxpZXBhdGgpCgkJCQkJCXsKCQkJCQkJCWlmIChzbWls aWVzW2ldLmdldEF0dHJpYnV0ZSgnc21pbGllaWQnKSA8IDEpCgkJCQkJCQl7CgkJ CQkJCQkJc21pbGllc1tpXS5zZXRBdHRyaWJ1dGUoJ3NtaWxpZWlkJywgc21pbGll aWQpOwoJCQkJCQkJCXNtaWxpZXNbaV0uc2V0QXR0cmlidXRlKCdib3JkZXInLCAi MCIpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJY2F0Y2goZSkK CQkJCXsKCQkJCQkvLyBmYWlsZWQuLi4gcHJvYmFibHkgZHVlIHRvIGluc2VydGlu ZyBhIHNtaWxpZSBvdmVyIGEgc21pbGllIGluIG1vemlsbGEKCQkJCX0KCQkJfTsK CgkJCS8qKgoJCQkqIEdldCBTZWxlY3Rpb24KCQkJKi8KCQkJdGhpcy5nZXRfc2Vs ZWN0aW9uID0gZnVuY3Rpb24oKQoJCQl7CgkJCQlzZWxlY3Rpb24gPSB0aGlzLmVk aXR3aW4uZ2V0U2VsZWN0aW9uKCk7CgkJCQl0aGlzLmNoZWNrX2ZvY3VzKCk7CgkJ CQlyYW5nZSA9IHNlbGVjdGlvbiA/IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApIDog dGhpcy5lZGl0ZG9jLmNyZWF0ZVJhbmdlKCk7CgkJCQl2YXIgbHNzZXJpYWxpemVy ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlTFNTZXJpYWxpemVyKCk7 CgkJCQlyZXR1cm4gbHNzZXJpYWxpemVyLndyaXRlVG9TdHJpbmcocmFuZ2UuY2xv bmVDb250ZW50cygpKTsKCQkJfTsKCgkJCS8qKgoJCQkqIFBhc3RlIFRleHQKCQkJ Ki8KCQkJdGhpcy5pbnNlcnRfdGV4dCA9IGZ1bmN0aW9uKHN0cikKCQkJewoJCQkJ dGhpcy5lZGl0ZG9jLmV4ZWNDb21tYW5kKCdpbnNlcnRIVE1MJywgZmFsc2UsIHN0 cik7CgkJCX07CgkJfQoJfQoJLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KCS8vIFN0YW5kYXJkIGVkaXRvcgoJLy8gPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KCWVsc2UKCXsKCQl0aGlzLmRpc2FibGVfZWRpdG9yID0gZnVuY3Rp b24odGV4dCkKCQl7CgkJCWlmICghdGhpcy5kaXNhYmxlZCkKCQkJewoJCQkJdGhp cy5kaXNhYmxlZCA9IHRydWU7CgoJCQkJaWYgKHR5cGVvZiB0ZXh0ICE9ICd1bmRl ZmluZWQnKQoJCQkJewoJCQkJCXRoaXMuZWRpdGJveC52YWx1ZSA9IHRleHQ7CgkJ CQl9CgkJCQl0aGlzLmVkaXRib3guZGlzYWJsZWQgPSB0cnVlOwoJCQl9CgkJfTsK CgkJdGhpcy5lbmFibGVfZWRpdG9yID0gZnVuY3Rpb24odGV4dCkKCQl7CgkJCWlm ICh0eXBlb2YgdGV4dCAhPSAndW5kZWZpbmVkJykKCQkJewoJCQkJdGhpcy5lZGl0 Ym94LnZhbHVlID0gdGV4dDsKCQkJfQoJCQl0aGlzLmVkaXRib3guZGlzYWJsZWQg PSBmYWxzZTsKCgkJCXRoaXMuZGlzYWJsZWQgPSBmYWxzZTsKCQl9OwoKCQkvKioK CQkqIFdyaXRlcyBjb250ZW50cyB0byB0aGUgPHRleHRhcmVhPgoJCSoKCQkqIEBw YXJhbQlvYmplY3QJPHRleHRhcmVhPgoJCSogQHBhcmFtCXN0cmluZwlJbml0aWFs IHRleHQKCQkqLwoJCXRoaXMud3JpdGVfZWRpdG9yX2NvbnRlbnRzID0gZnVuY3Rp b24odGV4dCkKCQl7CgkJCXRoaXMudGV4dG9iai52YWx1ZSA9IHRleHQ7CgkJfQoK CQkvKioKCQkqIFB1dCB0aGUgdGV4dCBpbnRvIHRoZSBlZGl0b3IKCQkqLwoJCXRo aXMuc2V0X2VkaXRvcl9jb250ZW50cyA9IGZ1bmN0aW9uKGluaXRpYWxfdGV4dCkK CQl7CgkJCXZhciBpZnJhbWUgPSB0aGlzLnRleHRvYmoucGFyZW50Tm9kZS5nZXRF bGVtZW50c0J5VGFnTmFtZSgnaWZyYW1lJylbMF07CgkJCWlmIChpZnJhbWUpCgkJ CXsKCQkJCXRoaXMudGV4dG9iai5zdHlsZS5kaXNwbGF5ID0gJyc7CgkJCQl0aGlz LnRleHRvYmouc3R5bGUud2lkdGggPSBpZnJhbWUuc3R5bGUud2lkdGg7CgkJCQl0 aGlzLnRleHRvYmouc3R5bGUuaGVpZ2h0ID0gaWZyYW1lLnN0eWxlLmhlaWdodDsK CgkJCQlpZnJhbWUuc3R5bGUud2lkdGggPSAnMHB4JzsKCQkJCWlmcmFtZS5zdHls ZS5oZWlnaHQgPSAnMHB4JzsKCQkJCWlmcmFtZS5zdHlsZS5ib3JkZXIgPSAnbm9u ZSc7CgkJCX0KCgkJCXRoaXMuZWRpdHdpbiA9IHRoaXMudGV4dG9iajsKCQkJdGhp cy5lZGl0ZG9jID0gdGhpcy50ZXh0b2JqOwoJCQl0aGlzLmVkaXRib3ggPSB0aGlz LnRleHRvYmo7CgkJCXRoaXMuc3BlbGxvYmogPSB0aGlzLnRleHRvYmo7CgoJCQlp ZiAodHlwZW9mIGluaXRpYWxfdGV4dCAhPSAndW5kZWZpbmVkJykKCQkJewoJCQkJ dGhpcy53cml0ZV9lZGl0b3JfY29udGVudHMoaW5pdGlhbF90ZXh0KTsKCQkJfQoK CQkJdGhpcy5lZGl0ZG9jLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCQkJdGhp cy5lZGl0d2luLmVkaXRvcmlkID0gdGhpcy5lZGl0b3JpZDsKCgkJCXRoaXMuaGlz dG9yeS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRzKCkpOwoJ CX07CgoJCS8qKgoJCSogU2V0IHRoZSBDU1Mgc3R5bGUgb2YgdGhlIGVkaXRvcgoJ CSovCgkJdGhpcy5zZXRfZWRpdG9yX3N0eWxlID0gZnVuY3Rpb24oKQoJCXsKCQl9 OwoKCQkvKioKCQkqIEluaXQgRWRpdG9yIEZ1bmN0aW9ucwoJCSovCgkJdGhpcy5z ZXRfZWRpdG9yX2Z1bmN0aW9ucyA9IGZ1bmN0aW9uKCkKCQl7CgkJCWlmICh0aGlz LmVkaXRkb2MuYWRkRXZlbnRMaXN0ZW5lcikKCQkJewoJCQkJdGhpcy5lZGl0ZG9j LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJywgdkJfVGV4dF9FZGl0b3JfRXZl bnRzLnByb3RvdHlwZS5lZGl0ZG9jX29ua2V5cHJlc3MsIGZhbHNlKTsKCQkJfQoJ CQllbHNlIGlmIChpc19pZSkKCQkJewoJCQkJdGhpcy5lZGl0ZG9jLm9ua2V5ZG93 biA9IHZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdGRvY19vbmtl eXByZXNzOwoJCQl9CgoJCQl0aGlzLmVkaXR3aW4ub25mb2N1cyA9IHZCX1RleHRf RWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdHdpbl9vbmZvY3VzOwoJCQl0aGlz LmVkaXR3aW4ub25ibHVyID0gdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlw ZS5lZGl0d2luX29uYmx1cjsKCQl9OwoKCQkvKioKCQkqIFNldCBDb250ZXh0CgkJ Ki8KCQl0aGlzLnNldF9jb250ZXh0ID0gZnVuY3Rpb24oKQoJCXsKCQl9OwoKCQkv KioKCQkqIEFwcGx5IGZvcm1hdHRpbmcKCQkqLwoJCXRoaXMuYXBwbHlfZm9ybWF0 ID0gZnVuY3Rpb24oY21kLCBkaWFsb2csIGFyZ3VtZW50KQoJCXsKCQkJLy8gdW5k byAmIHJlZG8gYXJyYXkgcG9wcwoKCQkJc3dpdGNoIChjbWQpCgkJCXsKCQkJCWNh c2UgJ2JvbGQnOgoJCQkJY2FzZSAnaXRhbGljJzoKCQkJCWNhc2UgJ3VuZGVybGlu ZSc6CgkJCQl7CgkJCQkJdGhpcy53cmFwX3RhZ3MoY21kLnN1YnN0cigwLCAxKSwg ZmFsc2UpOwoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQljYXNlICdqdXN0aWZ5bGVm dCc6CgkJCQljYXNlICdqdXN0aWZ5Y2VudGVyJzoKCQkJCWNhc2UgJ2p1c3RpZnly aWdodCc6CgkJCQl7CgkJCQkJdGhpcy53cmFwX3RhZ3MoY21kLnN1YnN0cig3KSwg ZmFsc2UpOwoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQljYXNlICdpbmRlbnQnOgoJ CQkJewoJCQkJCXRoaXMud3JhcF90YWdzKGNtZCwgZmFsc2UpOwoJCQkJCXJldHVy bjsKCQkJCX0KCgkJCQljYXNlICdmb250bmFtZSc6CgkJCQl7CgkJCQkJdGhpcy53 cmFwX3RhZ3MoJ2ZvbnQnLCBhcmd1bWVudCk7CgkJCQkJcmV0dXJuOwoJCQkJfQoK CQkJCWNhc2UgJ2ZvbnRzaXplJzoKCQkJCXsKCQkJCQl0aGlzLndyYXBfdGFncygn c2l6ZScsIGFyZ3VtZW50KTsKCQkJCQlyZXR1cm47CgkJCQl9CgoJCQkJY2FzZSAn Zm9yZWNvbG9yJzoKCQkJCXsKCQkJCQl0aGlzLndyYXBfdGFncygnY29sb3InLCBh cmd1bWVudCk7CgkJCQkJcmV0dXJuOwoJCQkJfQoKCQkJCWNhc2UgJ2NyZWF0ZWxp bmsnOgoJCQkJewoJCQkJCXZhciBzZWwgPSB0aGlzLmdldF9zZWxlY3Rpb24oKTsK CQkJCQlpZiAoc2VsKQoJCQkJCXsKCQkJCQkJdGhpcy53cmFwX3RhZ3MoJ3VybCcs IGFyZ3VtZW50KTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsKCQkJCQkJdGhpcy53 cmFwX3RhZ3MoJ3VybCcsIGFyZ3VtZW50LCBhcmd1bWVudCk7CgkJCQkJfQoJCQkJ CXJldHVybjsKCQkJCX0KCgkJCQljYXNlICdpbnNlcnRpbWFnZSc6CgkJCQl7CgkJ CQkJdGhpcy53cmFwX3RhZ3MoJ2ltZycsIGZhbHNlLCBhcmd1bWVudCk7CgkJCQkJ cmV0dXJuOwoJCQkJfQoKCQkJCWNhc2UgJ3JlbW92ZWZvcm1hdCc6CgkJCQlyZXR1 cm47CgkJCX0KCgkJCS8vYWxlcnQoJ2NtZCA6OiAnICsgY21kICsgJ1xuZGlhbG9n IDo6ICcgKyBkaWFsb2cgKyAnXG5hcmd1bWVudCA6OiAnICsgYXJndW1lbnQpOwoJ CX07CgoJCXRoaXMudW5kbyA9IGZ1bmN0aW9uKCkKCQl7CgkJCXRoaXMuaGlzdG9y eS5hZGRfc25hcHNob3QodGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRzKCkpOwoJCQl0 aGlzLmhpc3RvcnkubW92ZV9jdXJzb3IoLTEpOwoJCQlpZiAoKHN0ciA9IHRoaXMu aGlzdG9yeS5nZXRfc25hcHNob3QoKSkgIT09IGZhbHNlKQoJCQl7CgkJCQl0aGlz LmVkaXRkb2MudmFsdWUgPSBzdHI7CgkJCX0KCQl9OwoKCQl0aGlzLnJlZG8gPSBm dW5jdGlvbigpCgkJewoJCQl0aGlzLmhpc3RvcnkubW92ZV9jdXJzb3IoMSk7CgkJ CWlmICgoc3RyID0gdGhpcy5oaXN0b3J5LmdldF9zbmFwc2hvdCgpKSAhPT0gZmFs c2UpCgkJCXsKCQkJCXRoaXMuZWRpdGRvYy52YWx1ZSA9IHN0cjsKCQkJfQoJCX07 CgoJCS8qKgoJCSogU3RyaXAgYSBzaW1wbGUgdGFnLi4uCgkJKi8KCQl0aGlzLnN0 cmlwX3NpbXBsZSA9IGZ1bmN0aW9uKHRhZywgc3RyLCBpdGVyYXRpb25zKQoJCXsK CQkJdmFyIG9wZW50YWcgPSAnWycgKyB0YWcgKyAnXSc7CgkJCXZhciBjbG9zZXRh ZyA9ICdbLycgKyB0YWcgKyAnXSc7CgoJCQlpZiAodHlwZW9mIGl0ZXJhdGlvbnMg PT0gJ3VuZGVmaW5lZCcpCgkJCXsKCQkJCWl0ZXJhdGlvbnMgPSAtMTsKCQkJfQoK CQkJd2hpbGUgKChzdGFydGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBvcGVudGFn KSkgIT09IGZhbHNlICYmIGl0ZXJhdGlvbnMgIT0gMCkKCQkJewoJCQkJaXRlcmF0 aW9ucyAtLTsKCQkJCWlmICgoc3RvcGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBj bG9zZXRhZykpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQl2YXIgdGV4dCA9IHN0ci5z dWJzdHIoc3RhcnRpbmRleCArIG9wZW50YWcubGVuZ3RoLCBzdG9waW5kZXggLSBz dGFydGluZGV4IC0gb3BlbnRhZy5sZW5ndGgpOwoJCQkJCXN0ciA9IHN0ci5zdWJz dHIoMCwgc3RhcnRpbmRleCkgKyB0ZXh0ICsgc3RyLnN1YnN0cihzdG9waW5kZXgg KyBjbG9zZXRhZy5sZW5ndGgpOwoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWJy ZWFrOwoJCQkJfQoJCQl9CgoJCQlyZXR1cm4gc3RyOwoJCX07CgoJCS8qKgoJCSog U3RyaXAgYSB0YWcgd2l0aCBhbiBvcHRpb24KCQkqLwoJCXRoaXMuc3RyaXBfY29t cGxleCA9IGZ1bmN0aW9uKHRhZywgc3RyLCBpdGVyYXRpb25zKQoJCXsKCQkJdmFy IG9wZW50YWcgPSAnWycgKyB0YWcgKyAnPSc7CgkJCXZhciBjbG9zZXRhZyA9ICdb LycgKyB0YWcgKyAnXSc7CgoJCQlpZiAodHlwZW9mIGl0ZXJhdGlvbnMgPT0gJ3Vu ZGVmaW5lZCcpCgkJCXsKCQkJCWl0ZXJhdGlvbnMgPSAtMTsKCQkJfQoKCQkJd2hp bGUgKChzdGFydGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBvcGVudGFnKSkgIT09 IGZhbHNlICYmIGl0ZXJhdGlvbnMgIT0gMCkKCQkJewoJCQkJaXRlcmF0aW9ucyAt LTsKCQkJCWlmICgoc3RvcGluZGV4ID0gUEhQLnN0cmlwb3Moc3RyLCBjbG9zZXRh ZykpICE9PSBmYWxzZSkKCQkJCXsKCQkJCQl2YXIgb3BlbmVuZCA9IFBIUC5zdHJp cG9zKHN0ciwgJ10nLCBzdGFydGluZGV4KTsKCQkJCQlpZiAob3BlbmVuZCAhPT0g ZmFsc2UgJiYgb3BlbmVuZCA+IHN0YXJ0aW5kZXggJiYgb3BlbmVuZCA8IHN0b3Bp bmRleCkKCQkJCQl7CgkJCQkJCXZhciB0ZXh0ID0gc3RyLnN1YnN0cihvcGVuZW5k ICsgMSwgc3RvcGluZGV4IC0gb3BlbmVuZCAtIDEpOwoJCQkJCQlzdHIgPSBzdHIu c3Vic3RyKDAsIHN0YXJ0aW5kZXgpICsgdGV4dCArIHN0ci5zdWJzdHIoc3RvcGlu ZGV4ICsgY2xvc2V0YWcubGVuZ3RoKTsKCQkJCQl9CgkJCQkJZWxzZQoJCQkJCXsK CQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCWJy ZWFrOwoJCQkJfQoJCQl9CgoJCQlyZXR1cm4gc3RyOwoJCX07CgoJCS8qKgoJCSog UmVtb3ZlIEZvcm1hdHRpbmcKCQkqLwoJCXRoaXMucmVtb3ZlZm9ybWF0ID0gZnVu Y3Rpb24oZSkKCQl7CgkJCXZhciBzaW1wbGVzdHJpcCA9IG5ldyBBcnJheSgnYics ICdpJywgJ3UnKTsKCQkJdmFyIGNvbXBsZXhzdHJpcCA9IG5ldyBBcnJheSgnZm9u dCcsICdjb2xvcicsICdzaXplJyk7CgoJCQl2YXIgc3RyID0gdGhpcy5nZXRfc2Vs ZWN0aW9uKCk7CgkJCWlmIChzdHIgPT09IGZhbHNlKQoJCQl7CgkJCQlyZXR1cm47 CgkJCX0KCgkJCS8vIHNpbXBsZSBzdHJpcHBlcgoJCQlmb3IgKHZhciB0YWcgaW4g c2ltcGxlc3RyaXApCgkJCXsKCQkJCXN0ciA9IHRoaXMuc3RyaXBfc2ltcGxlKHNp bXBsZXN0cmlwW3RhZ10sIHN0cik7CgkJCX0KCgkJCS8vIGNvbXBsZXggc3RyaXBw ZXIKCQkJZm9yICh2YXIgdGFnIGluIGNvbXBsZXhzdHJpcCkKCQkJewoJCQkJc3Ry ID0gdGhpcy5zdHJpcF9jb21wbGV4KGNvbXBsZXhzdHJpcFt0YWddLCBzdHIpOwoJ CQl9CgoJCQl0aGlzLmluc2VydF90ZXh0KHN0cik7CgkJfTsKCgkJLyoqCgkJKiBJ bnNlcnQgTGluawoJCSovCgkJdGhpcy5jcmVhdGVsaW5rID0gZnVuY3Rpb24oZSwg dXJsKQoJCXsKCQkJdGhpcy5wcm9tcHRfbGluaygndXJsJywgdXJsLCB2YnBocmFz ZVsnZW50ZXJfbGlua191cmwnXSwgJ2h0dHA6Ly8nKTsKCQl9OwoKCQkvKioKCQkq IFJlbW92ZSBMaW5rCgkJKi8KCQl0aGlzLnVubGluayA9IGZ1bmN0aW9uKGUpCgkJ ewoJCQl2YXIgc2VsID0gdGhpcy5nZXRfc2VsZWN0aW9uKCk7CgkJCXNlbCA9IHRo aXMuc3RyaXBfc2ltcGxlKCd1cmwnLCBzZWwpOwoJCQlzZWwgPSB0aGlzLnN0cmlw X2NvbXBsZXgoJ3VybCcsIHNlbCk7CgkJCXRoaXMuaW5zZXJ0X3RleHQoc2VsKTsK CQl9OwoKCQkvKioKCQkqIEluc2VydCBFbWFpbCBMaW5rCgkJKi8KCQl0aGlzLmVt YWlsID0gZnVuY3Rpb24oZSwgZW1haWwpCgkJewoJCQl0aGlzLnByb21wdF9saW5r KCdlbWFpbCcsIGVtYWlsLCB2YnBocmFzZVsnZW50ZXJfZW1haWxfbGluayddLCAn Jyk7CgkJfTsKCgkJLyoqCgkJKiBJbnNlcnQgU21pbGllCgkJKi8KCQl0aGlzLmlu c2VydF9zbWlsaWUgPSBmdW5jdGlvbihlLCBzbWlsaWV0ZXh0KQoJCXsKCQkJdGhp cy5jaGVja19mb2N1cygpOwoKCQkJcmV0dXJuIHRoaXMuaW5zZXJ0X3RleHQoc21p bGlldGV4dCwgc21pbGlldGV4dC5sZW5ndGgsIDApOwoJCX07CgoJCS8qKgoJCSog V3JhcHBlciBmb3IgTGluayAvIEVtYWlsIExpbmsgaW5zZXJ0CgkJKi8KCQl0aGlz LnByb21wdF9saW5rID0gZnVuY3Rpb24odGFnbmFtZSwgdmFsdWUsIHBocmFzZSwg aXByb21wdCkKCQl7CgkJCWlmICh0eXBlb2YgdmFsdWUgPT0gJ3VuZGVmaW5lZCcp CgkJCXsKCQkJCXZhbHVlID0gdGhpcy5zaG93X3Byb21wdChwaHJhc2UsIGlwcm9t cHQsIHRydWUpOwoJCQl9CgkJCWlmICgodmFsdWUgPSB0aGlzLnZlcmlmeV9wcm9t cHQodmFsdWUpKSAhPT0gZmFsc2UpCgkJCXsKCQkJCWlmICh0aGlzLmdldF9zZWxl Y3Rpb24oKSkKCQkJCXsKCQkJCQl0aGlzLmFwcGx5X2Zvcm1hdCgndW5saW5rJyk7 CgkJCQkJdGhpcy53cmFwX3RhZ3ModGFnbmFtZSwgdmFsdWUpOwoJCQkJfQoJCQkJ ZWxzZQoJCQkJewoJCQkJCXRoaXMud3JhcF90YWdzKHRhZ25hbWUsIHZhbHVlLCB2 YWx1ZSk7CgkJCQl9CgkJCX0KCQkJcmV0dXJuIHRydWU7CgkJfTsKCgkJLyoqCgkJ KiBJbnNlcnQgT3JkZXJlZCBMaXN0CgkJKi8KCQl0aGlzLmluc2VydG9yZGVyZWRs aXN0ID0gZnVuY3Rpb24oZSkKCQl7CgkJCXRoaXMuaW5zZXJ0bGlzdCh2YnBocmFz ZVsnaW5zZXJ0X29yZGVyZWRfbGlzdCddLCAnMScpOwoJCX07CgoJCS8qKgoJCSog SW5zZXJ0IFVub3JkZXJlZCBMaXN0CgkJKi8KCQl0aGlzLmluc2VydHVub3JkZXJl ZGxpc3QgPSBmdW5jdGlvbihlKQoJCXsKCQkJdGhpcy5pbnNlcnRsaXN0KHZicGhy YXNlWydpbnNlcnRfdW5vcmRlcmVkX2xpc3QnXSwgJycpOwoJCX07CgoJCS8qKgoJ CSogSW5zZXJ0IExpc3QKCQkqLwoJCXRoaXMuaW5zZXJ0bGlzdCA9IGZ1bmN0aW9u KHBocmFzZSwgbGlzdHR5cGUpCgkJewoJCQl2YXIgb3BlbnRhZyA9ICdbTElTVCcg KyAobGlzdHR5cGUgPyAoJz0nICsgbGlzdHR5cGUpIDogJycpICsgJ11cbic7CgkJ CXZhciBjbG9zZXRhZyA9ICdbL0xJU1RdJzsKCgkJCWlmICh0eHQgPSB0aGlzLmdl dF9zZWxlY3Rpb24oKSkKCQkJewoJCQkJdmFyIHJlZ2V4ID0gbmV3IFJlZ0V4cCgn KFtcclxuXSt8XltcclxuXSopKD8hXFxbXFwqXFxdfFxcW1xcLz9saXN0KSg/PVte XHJcbl0pJywgJ2dpJyk7CgkJCQl0eHQgPSBvcGVudGFnICsgUEhQLnRyaW0odHh0 KS5yZXBsYWNlKHJlZ2V4LCAnJDFbKl0nKSArICdcbicgKyBjbG9zZXRhZzsKCQkJ CXRoaXMuaW5zZXJ0X3RleHQodHh0LCB0eHQudkJsZW5ndGgoKSwgMCk7CgkJCX0K CQkJZWxzZQoJCQl7CgkJCQl0aGlzLmluc2VydF90ZXh0KG9wZW50YWcgKyBjbG9z ZXRhZywgb3BlbnRhZy5sZW5ndGgsIGNsb3NldGFnLmxlbmd0aCk7CgoJCQkJaWYg KGlzX2llNykKCQkJCXsKCQkJCQkvLyByZXNwZWN0IGEgPGJhc2U+IHRhZyAoc2Vl ICMyMzA5NykKCQkJCQl2YXIgYmFzZV90YWcgPSBmZXRjaF90YWdzKGRvY3VtZW50 LCAnYmFzZScpOwoJCQkJCXZhciBtb2RhbF9wcmVmaXg7CgkJCQkJaWYgKGJhc2Vf dGFnICYmIGJhc2VfdGFnWzBdICYmIGJhc2VfdGFnWzBdLmhyZWYpCgkJCQkJewoJ CQkJCQltb2RhbF9wcmVmaXggPSBiYXNlX3RhZ1swXS5ocmVmOwoJCQkJCX0KCQkJ CQllbHNlCgkJCQkJewoJCQkJCQltb2RhbF9wcmVmaXggPSAnJzsKCQkJCQl9CgkJ CQkJdmFyIGxpc3R2YWx1ZSA9IHdpbmRvdy5zaG93TW9kYWxEaWFsb2cobW9kYWxf cHJlZml4ICsgImNsaWVudHNjcmlwdC9pZXByb21wdC5odG1sPyIsIHsgJ3ZhbHVl JzogJycsICdsYWJlbCc6IHZicGhyYXNlWydlbnRlcl9saXN0X2l0ZW0nXSwgJ2Rp cic6IGRvY3VtZW50LmRpciwgJ3RpdGxlJzogZG9jdW1lbnQudGl0bGUsICdsaXN0 dHlwZSc6IGxpc3R0eXBlIH0sICJkaWFsb2dXaWR0aDozMjBweDsgZGlhbG9nSGVp Z2h0OjIzMnB4OyBkaWFsb2dUb3A6IiArIChwYXJzZUludCh3aW5kb3cuc2NyZWVu VG9wKSArIHBhcnNlSW50KHdpbmRvdy5ldmVudC5jbGllbnRZKSArIHBhcnNlSW50 KGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSAtIDEwMCkgKyAicHg7IGRpYWxvZ0xl ZnQ6IiArIChwYXJzZUludCh3aW5kb3cuc2NyZWVuTGVmdCkgKyBwYXJzZUludCh3 aW5kb3cuZXZlbnQuY2xpZW50WCkgKyBwYXJzZUludChkb2N1bWVudC5ib2R5LnNj cm9sbExlZnQpIC0gMTYwKSArICJweDsgcmVzaXphYmxlOiBObzsiKTsKCQkJCQlp ZiAodGhpcy52ZXJpZnlfcHJvbXB0KGxpc3R2YWx1ZSkpCgkJCQkJewoJCQkJCQl0 aGlzLmluc2VydF90ZXh0KGxpc3R2YWx1ZSwgbGlzdHZhbHVlLnZCbGVuZ3RoKCks IDApOwoJCQkJCX0KCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQl3aGlsZSAobGlz dHZhbHVlID0gdGhpcy5zaG93X3Byb21wdCh2YnBocmFzZVsnZW50ZXJfbGlzdF9p dGVtJ10sICcnLCBmYWxzZSkpCgkJCQkJewoJCQkJCQlsaXN0dmFsdWUgPSAnWypd JyArIGxpc3R2YWx1ZSArICdcbic7CgkJCQkJCXRoaXMuaW5zZXJ0X3RleHQobGlz dHZhbHVlLCBsaXN0dmFsdWUudkJsZW5ndGgoKSwgMCk7CgkJCQkJfQoJCQkJfQoJ CQl9CgkJfTsKCgkJLyoqCgkJKiBPdXRkZW50CgkJKi8KCQl0aGlzLm91dGRlbnQg PSBmdW5jdGlvbihlKQoJCXsKCQkJdmFyIHNlbCA9IHRoaXMuZ2V0X3NlbGVjdGlv bigpOwoJCQlzZWwgPSB0aGlzLnN0cmlwX3NpbXBsZSgnaW5kZW50Jywgc2VsLCAx KTsKCQkJdGhpcy5pbnNlcnRfdGV4dChzZWwpOwoJCX07CgoJCS8qKgoJCSogR2V0 IEVkaXRvciBDb250ZW50cwoJCSovCgkJdGhpcy5nZXRfZWRpdG9yX2NvbnRlbnRz ID0gZnVuY3Rpb24oKQoJCXsKCQkJcmV0dXJuIHRoaXMuZWRpdGRvYy52YWx1ZTsK CQl9OwoKCQkvKioKCQkqIEdldCBTZWxlY3RlZCBUZXh0CgkJKi8KCQl0aGlzLmdl dF9zZWxlY3Rpb24gPSBmdW5jdGlvbigpCgkJewoJCQlpZiAodHlwZW9mKHRoaXMu ZWRpdGRvYy5zZWxlY3Rpb25TdGFydCkgIT0gJ3VuZGVmaW5lZCcpCgkJCXsKCQkJ CXJldHVybiB0aGlzLmVkaXRkb2MudmFsdWUuc3Vic3RyKHRoaXMuZWRpdGRvYy5z ZWxlY3Rpb25TdGFydCwgdGhpcy5lZGl0ZG9jLnNlbGVjdGlvbkVuZCAtIHRoaXMu ZWRpdGRvYy5zZWxlY3Rpb25TdGFydCk7CgkJCX0KCQkJZWxzZSBpZiAoZG9jdW1l bnQuc2VsZWN0aW9uICYmIGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSkK CQkJewoJCQkJcmV0dXJuIGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgp LnRleHQ7CgkJCX0KCQkJZWxzZSBpZiAod2luZG93LmdldFNlbGVjdGlvbikKCQkJ ewoJCQkJcmV0dXJuIHdpbmRvdy5nZXRTZWxlY3Rpb24oKSArICcnOwoJCQl9CgkJ CWVsc2UKCQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfTsKCgkJLyoqCgkJ KiBQYXN0ZSBIVE1MCgkJKi8KCQl0aGlzLmluc2VydF90ZXh0ID0gZnVuY3Rpb24o dGV4dCwgbW92ZXN0YXJ0LCBtb3ZlZW5kKQoJCXsKCQkJdmFyIHNlbGVjdGlvbl9j aGFuZ2VkID0gZmFsc2U7CgoJCQl0aGlzLmNoZWNrX2ZvY3VzKCk7CgkJCQoJCQlp ZiAodHlwZW9mKHRoaXMuZWRpdGRvYy5zZWxlY3Rpb25TdGFydCkgIT0gJ3VuZGVm aW5lZCcpCgkJCXsKCQkJCXZhciBvcG4gPSB0aGlzLmVkaXRkb2Muc2VsZWN0aW9u U3RhcnQgKyAwOwoJCQkJdmFyIHNjcm9sbHBvcyA9IHRoaXMuZWRpdGRvYy5zY3Jv bGxUb3A7CgoJCQkJdGhpcy5lZGl0ZG9jLnZhbHVlID0gdGhpcy5lZGl0ZG9jLnZh bHVlLnN1YnN0cigwLCB0aGlzLmVkaXRkb2Muc2VsZWN0aW9uU3RhcnQpICsgdGV4 dCArIHRoaXMuZWRpdGRvYy52YWx1ZS5zdWJzdHIodGhpcy5lZGl0ZG9jLnNlbGVj dGlvbkVuZCk7CgoJCQkJaWYgKG1vdmVzdGFydCA9PT0gZmFsc2UpCgkJCQl7CgkJ CQkJLy8gZG8gbm90aGluZwoJCQkJfQoJCQkJZWxzZSBpZiAodHlwZW9mIG1vdmVz dGFydCAhPSAndW5kZWZpbmVkJykKCQkJCXsKCQkJCQl0aGlzLmVkaXRkb2Muc2Vs ZWN0aW9uU3RhcnQgPSBvcG4gKyBtb3Zlc3RhcnQ7CgkJCQkJdGhpcy5lZGl0ZG9j LnNlbGVjdGlvbkVuZCA9IG9wbiArIHRleHQudkJsZW5ndGgoKSAtIG1vdmVlbmQ7 CgkJCQl9CgkJCQllbHNlCgkJCQl7CgkJCQkJdGhpcy5lZGl0ZG9jLnNlbGVjdGlv blN0YXJ0ID0gb3BuOwoJCQkJCXRoaXMuZWRpdGRvYy5zZWxlY3Rpb25FbmQgPSBv cG4gKyB0ZXh0LnZCbGVuZ3RoKCk7CgkJCQl9CgkJCQl0aGlzLmVkaXRkb2Muc2Ny b2xsVG9wID0gc2Nyb2xscG9zOwoJCQl9CgkJCWVsc2UgaWYgKGRvY3VtZW50LnNl bGVjdGlvbiAmJiBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UpCgkJCXsK CQkJCXZhciBzZWwgPSBkb2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKTsK CQkJCXNlbC50ZXh0ID0gdGV4dC5yZXBsYWNlKC9ccj9cbi9nLCAnXHJcbicpOwoJ CQkJCQkJCQkJCQkKCQkJCWlmIChtb3Zlc3RhcnQgPT09IGZhbHNlKQoJCQkJewoJ CQkJCS8vIGRvIG5vdGhpbmcKCQkJCX0KCQkJCWVsc2UgaWYgKHR5cGVvZiBtb3Zl c3RhcnQgIT0gJ3VuZGVmaW5lZCcpCgkJCQl7CgkJCQkJaWYgKChtb3Zlc3RhcnQg LSB0ZXh0LnZCbGVuZ3RoKCkpICE9IDApCgkJCQkJewoJCQkJCQlzZWwubW92ZVN0 YXJ0KCdjaGFyYWN0ZXInLCBtb3Zlc3RhcnQgLSB0ZXh0LnZCbGVuZ3RoKCkpOwoJ CQkJCQlzZWxlY3Rpb25fY2hhbmdlZCA9IHRydWU7CgkJCQkJfQoJCQkJCWlmICht b3ZlZW5kICE9IDApCgkJCQkJewoJCQkJCQlzZWwubW92ZUVuZCgnY2hhcmFjdGVy JywgLW1vdmVlbmQpOwoJCQkJCQlzZWxlY3Rpb25fY2hhbmdlZCA9IHRydWU7CgkJ CQkJfQoJCQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXNlbC5tb3ZlU3RhcnQoJ2No YXJhY3RlcicsIC10ZXh0LnZCbGVuZ3RoKCkpOwoJCQkJCXNlbGVjdGlvbl9jaGFu Z2VkID0gdHJ1ZTsKCQkJCX0KCgkJCQlpZiAoc2VsZWN0aW9uX2NoYW5nZWQpCgkJ CQl7CgkJCQkJc2VsLnNlbGVjdCgpOwoJCQkJfQoJCQl9CgkJCWVsc2UKCQkJewoJ CQkJLy8gZmFpbGVkIC0ganVzdCBzdHVmZiBpdCBhdCB0aGUgZW5kIG9mIHRoZSBt ZXNzYWdlCgkJCQl0aGlzLmVkaXRkb2MudmFsdWUgKz0gdGV4dDsKCQkJfQoJCX07 CgoJCS8qKgoJCSogUHJlcGFyZSBGb3JtIEZvciBTdWJtaXQKCQkqLwoJCXRoaXMu cHJlcGFyZV9zdWJtaXQgPSBmdW5jdGlvbihzdWJqZWN0dGV4dCwgbWluY2hhcnMp CgkJewoJCQl2YXIgcmV0dXJudmFsdWUgPSB2YWxpZGF0ZW1lc3NhZ2UodGhpcy50 ZXh0b2JqLnZhbHVlLCBzdWJqZWN0dGV4dCwgbWluY2hhcnMpOwoKCQkJaWYgKHJl dHVybnZhbHVlKQoJCQl7CgkJCQlyZXR1cm4gcmV0dXJudmFsdWU7CgkJCX0KCQkJ ZWxzZSBpZiAodGhpcy5jYXB0Y2hhICE9IG51bGwgJiYgdGhpcy5jYXB0Y2hhLmZh aWxlZCkKCQkJewoJCQkJcmV0dXJuIHJldHVybnZhbHVlOwoJCQl9CgkJCWVsc2UK CQkJewoJCQkJdGhpcy5jaGVja19mb2N1cygpOwoJCQkJcmV0dXJuIGZhbHNlOwoJ CQl9CgkJfQoKCQkvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoJCS8v IFNhZmFyaSAvIE9sZCBPcGVyYSBTdGFuZGFyZCBFZGl0b3IgT25seQoJCS8vID09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09CgkJaWYgKGlzX3NhZiB8fCAoaXNf b3BlcmEgJiYgKCFvcGVyYS52ZXJzaW9uIHx8IG9wZXJhLnZlcnNpb24oKSA8IDgp KSkKCQl7CgkJCS8qKgoJCQkqIEluc2VydCBMaXN0IGZvciBTYWZhcmkgYW5kIG9s ZGVyIE9wZXJhCgkJCSovCgkJCXRoaXMuaW5zZXJ0bGlzdCA9IGZ1bmN0aW9uKHBo cmFzZSwgbGlzdHR5cGUpCgkJCXsKCQkJCXZhciBvcGVudGFnID0gJ1tMSVNUJyAr IChsaXN0dHlwZSA/ICgnPScgKyBsaXN0dHlwZSkgOiAnJykgKyAnXVxuJzsKCQkJ CXZhciBjbG9zZXRhZyA9ICdbL0xJU1RdJzsKCQkJCWlmICh0eHQgPSB0aGlzLmdl dF9zZWxlY3Rpb24oKSkKCQkJCXsKCQkJCQl2YXIgcmVnZXggPSBuZXcgUmVnRXhw KCcoW1xyXG5dK3xeW1xyXG5dKikoPyFcXFtcXCpcXF18XFxbXFwvP2xpc3QpKD89 W15cclxuXSknLCAnZ2knKTsKCQkJCQl0eHQgPSBvcGVudGFnICsgUEhQLnRyaW0o dHh0KS5yZXBsYWNlKHJlZ2V4LCAnJDFbKl0nKSArICdcbicgKyBjbG9zZXRhZzsK CQkJCQl0aGlzLmluc2VydF90ZXh0KHR4dCwgdHh0LnZCbGVuZ3RoKCksIDApOwoJ CQkJfQoJCQkJZWxzZQoJCQkJewoJCQkJCXRoaXMuaW5zZXJ0X3RleHQob3BlbnRh Zywgb3BlbnRhZy5sZW5ndGgsIDApOwoKCQkJCQl3aGlsZSAobGlzdHZhbHVlID0g cHJvbXB0KHZicGhyYXNlWydlbnRlcl9saXN0X2l0ZW0nXSwgJycpKQoJCQkJCXsK CQkJCQkJbGlzdHZhbHVlID0gJ1sqXScgKyBsaXN0dmFsdWUgKyAnXG4nOwoJCQkJ CQl0aGlzLmluc2VydF90ZXh0KGxpc3R2YWx1ZSwgbGlzdHZhbHVlLnZCbGVuZ3Ro KCksIDApOwoJCQkJCX0KCgkJCQkJdGhpcy5pbnNlcnRfdGV4dChjbG9zZXRhZywg Y2xvc2V0YWcubGVuZ3RoLCAwKTsKCQkJCX0KCQkJfTsKCQl9Cgl9CgoJLy8gZ2Vu dGxlbWVuLCBzdGFydCB5b3VyIGVuZ2luZXMuLi4KCXRoaXMuaW5pdCgpOwp9Cgov LyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQovLyBFZGl0b3IgZXZlbnQg aGFuZGxlciBmdW5jdGlvbnMKCi8qKgoqIENsYXNzIGNvbnRhaW5pbmcgZWRpdG9y IGV2ZW50IGhhbmRsZXJzCiovCmZ1bmN0aW9uIHZCX1RleHRfRWRpdG9yX0V2ZW50 cygpCnsKfQoKLyoqCiogSGFuZGxlcyBhIGNsaWNrIG9uIGEgc21pbGllIGluIHRo ZSBzbWlsaWVib3gKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5z bWlsaWVfb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXZCX0VkaXRvclt0aGlzLmVk aXRvcmlkXS5pbnNlcnRfc21pbGllKGUsCgkJdGhpcy5hbHQsCgkJdGhpcy5zcmMs CgkJdGhpcy5pZC5zdWJzdHIodGhpcy5pZC5sYXN0SW5kZXhPZignXycpICsgMSkK CSk7CgoJaWYgKHR5cGVvZiBzbWlsaWVfd2luZG93ICE9ICd1bmRlZmluZWQnICYm ICFzbWlsaWVfd2luZG93LmNsb3NlZCkKCXsKCQlzbWlsaWVfd2luZG93LmZvY3Vz KCk7Cgl9CgoJcmV0dXJuIGZhbHNlOwp9OwoKLyoqCiogSGFuZGxlcyBhIG1vdXNl IGV2ZW50IG9uIGEgY29tbWFuZCBidXR0b24KKi8KdkJfVGV4dF9FZGl0b3JfRXZl bnRzLnByb3RvdHlwZS5jb21tYW5kX2J1dHRvbl9vbm1vdXNlZXZlbnQgPSBmdW5j dGlvbihlKQp7CgllID0gZG9fYW5fZShlKTsKCglpZiAoZS50eXBlID09ICdjbGlj aycpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmZvcm1hdChlLCB0aGlz LmNtZCwgZmFsc2UsIHRydWUpOwoJfQoKCXZCX0VkaXRvclt0aGlzLmVkaXRvcmlk XS5idXR0b25fY29udGV4dCh0aGlzLCBlLnR5cGUpOwp9OwoKLyoqCiogSGFuZGxl cyBhIG1vdXNlIGV2ZW50IG9uIGEgcG9wdXAgY29udHJvbGxlciBidXR0b24KKi8K dkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5wb3B1cF9idXR0b25fb25t b3VzZWV2ZW50ID0gZnVuY3Rpb24oZSkKewoJZSA9IGRvX2FuX2UoZSk7CgoJaWYg KGUudHlwZSA9PSAnY2xpY2snKQoJewoJCXRoaXMuX29uY2xpY2soZSk7CgkJdkJf RWRpdG9yW3RoaXMuZWRpdG9yaWRdLm1lbnVfY29udGV4dCh0aGlzLCAnbW91c2Vv dmVyJyk7Cgl9CgllbHNlCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLm1l bnVfY29udGV4dCh0aGlzLCBlLnR5cGUpOwoJfQp9OwoKLyoqCiogT3ZlcnJpZGVz IHRoZSBzaG93KCkgZnVuY3Rpb24gZnJvbSB0aGUgdkJtZW51IHN5c3RlbQoqCiog QHBhcmFtCW9iamVjdAlDb250cm9sIG9iamVjdAoqIEBwYXJhbQlib29sZWFuCVNo b3cgaW5zdGFudGx5PwoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBl LnBvcHVwX2J1dHRvbl9zaG93ID0gZnVuY3Rpb24ob2JqLCBpbnN0YW50KQp7Cglp ZiAodHlwZW9mIHZCX0VkaXRvcltvYmouZWRpdG9yaWRdLnBvcHVwc1tvYmouY21k XSA9PSAndW5kZWZpbmVkJyB8fCB2Ql9FZGl0b3Jbb2JqLmVkaXRvcmlkXS5wb3B1 cHNbb2JqLmNtZF0gPT0gbnVsbCkKCXsKCQl2Ql9FZGl0b3Jbb2JqLmVkaXRvcmlk XS5pbml0X3BvcHVwX21lbnUob2JqKTsKCX0KCWVsc2UgaWYgKG9iai5jbWQgPT0g J2F0dGFjaCcgJiYgKHR5cGVvZiB2Ql9BdHRhY2htZW50cyA9PSAndW5kZWZpbmVk JyB8fCAhdkJfQXR0YWNobWVudHMuaGFzX2F0dGFjaG1lbnRzKCkpKQoJewoJCXJl dHVybiBmZXRjaF9vYmplY3QoJ21hbmFnZV9hdHRhY2htZW50c19idXR0b24nKS5v bmNsaWNrKCk7Cgl9Cgl0aGlzLl9zaG93KG9iaiwgaW5zdGFudCk7Cn07CgovKioK KiBIYW5kbGVzIGEgc2VsZWN0aW9uIGZyb20gYSBmb3JtYXR0aW5nIDxzZWxlY3Q+ IG1lbnUKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5mb3JtYXR0 aW5nX3NlbGVjdF9vbmNoYW5nZSA9IGZ1bmN0aW9uKGUpCnsKCXZhciBhcmcgPSB0 aGlzLm9wdGlvbnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZTsKCWlmIChhcmcg IT0gJycpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmZvcm1hdChlLCB0 aGlzLmNtZCwgYXJnKTsKCX0KCXRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7Cn07Cgov KioKKiBIYW5kbGVzIGEgc2VsZWN0aW9uIGZyb20gdGhlIHNtaWxpZXMgPHNlbGVj dD4gbWVudQoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLnNtaWxp ZXNlbGVjdF9vbmNoYW5nZSA9IGZ1bmN0aW9uKGUpCnsKCWlmICh0aGlzLm9wdGlv bnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSAhPSAnJykKCXsKCQl2Ql9FZGl0 b3JbdGhpcy5lZGl0b3JpZF0uaW5zZXJ0X3NtaWxpZShlLAoJCQl0aGlzLm9wdGlv bnNbdGhpcy5zZWxlY3RlZEluZGV4XS52YWx1ZSwKCQkJdGhpcy5vcHRpb25zW3Ro aXMuc2VsZWN0ZWRJbmRleF0uc21pbGllcGF0aCwKCQkJdGhpcy5vcHRpb25zW3Ro aXMuc2VsZWN0ZWRJbmRleF0uc21pbGllaWQKCQkpOwoJfQoJdGhpcy5zZWxlY3Rl ZEluZGV4ID0gMDsKfTsKCi8qKgoqIEhhbmRsZXMgYSBzZWxlY3Rpb24gZnJvbSB0 aGUgYXR0YWNobWVudCA8c2VsZWN0PiBtZW51CiovCnZCX1RleHRfRWRpdG9yX0V2 ZW50cy5wcm90b3R5cGUuYXR0YWNoc2VsZWN0X29uY2hhbmdlID0gZnVuY3Rpb24o ZSkKewoJdmFyIGFyZyA9IHRoaXMub3B0aW9uc1t0aGlzLnNlbGVjdGVkSW5kZXhd LnZhbHVlOwoJaWYgKGFyZyAhPSAnJykKCXsKCQl2Ql9FZGl0b3JbdGhpcy5lZGl0 b3JpZF0ud3JhcF90YWdzKCdhdHRhY2gnLCBmYWxzZSwgYXJnKTsKCX0KCXRoaXMu c2VsZWN0ZWRJbmRleCA9IDA7Cn07CgovKioKKiBIYW5kbGVzIGEgbW91c2Ugb3Zl ciBldmVudCBmb3IgdGhlIGF0dGFjaG1lbnQgPHNlbGVjdD4gbWVudQoqLwp2Ql9U ZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmF0dGFjaHNlbGVjdF9vbm1vdXNl b3ZlciA9IGZ1bmN0aW9uKGUpCnsKCWlmICh0aGlzLm9wdGlvbnMubGVuZ3RoIDw9 IDIpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmJ1aWxkX2F0dGFjaG1l bnRzX3BvcHVwKHRoaXMpOwoJCXJldHVybiB0cnVlOwoJfQp9OwoKLyoqCiogSGFu ZGxlcyBhIG1vdXNlIGV2ZW50IG9uIGEgbWVudSBvcHRpb24KKi8KdkJfVGV4dF9F ZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5tZW51b3B0aW9uX29ubW91c2VldmVudCA9 IGZ1bmN0aW9uKGUpCnsKCWUgPSBkb19hbl9lKGUpOwoJdkJfRWRpdG9yW3RoaXMu ZWRpdG9yaWRdLmJ1dHRvbl9jb250ZXh0KHRoaXMsIGUudHlwZSwgJ21lbnUnKTsK fTsKCi8qKgoqIEhhbmRsZXMgYSBjbGljayBvbiBhIGZvcm1hdHRpbmcgb3B0aW9u IGluIHRoZSBmb250L3NpemUgbWVudXMKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRz LnByb3RvdHlwZS5mb3JtYXR0aW5nX29wdGlvbl9vbmNsaWNrID0gZnVuY3Rpb24o ZSkKewoJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmZvcm1hdChlLCB0aGlzLmNt ZCwgdGhpcy5maXJzdENoaWxkLmlubmVySFRNTCk7Cgl2Qm1lbnUuaGlkZSgpOwp9 OwoKLyoqCiogSGFuZGxlcyBhIGNsaWNrIG9uIGEgY29sb3Igb3B0aW9uIGluIHRo ZSBjb2xvciBtZW51CiovCnZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUu Y29sb3JvcHRpb25fb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCWZldGNoX29iamVj dCh0aGlzLmVkaXRvcmlkICsgJ19jb2xvcl9iYXInKS5zdHlsZS5iYWNrZ3JvdW5k Q29sb3IgPSB0aGlzLmNvbG9ybmFtZTsKCXZCX0VkaXRvclt0aGlzLmVkaXRvcmlk XS5mb3JtYXQoZSwgdGhpcy5jbWQsIHRoaXMuY29sb3JuYW1lKTsKCXZCbWVudS5o aWRlKCk7Cn07CgovKioKKiBIYW5kbGVzIGEgY2xpY2sgb24gdGhlIGNvbG9yIGlu c3RhbnQtc2VsZWN0IGJ1dHRvbgoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJv dG90eXBlLmNvbG9yb3V0X29uY2xpY2sgPSBmdW5jdGlvbihlKQp7CgllID0gZG9f YW5fZShlKTsKCXZCX0VkaXRvclt0aGlzLmVkaXRvcmlkXS5mb3JtYXQoZSwgJ2Zv cmVjb2xvcicsIGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19jb2xvcl9i YXInKS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IpOwoJcmV0dXJuIGZhbHNlOwp9OwoK LyoqCiogSGFuZGxlcyBhIGNsaWNrIG9uIGEgc21pbGllIG9wdGlvbiBpbiB0aGUg c21pbGllIG1lbnUKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5z bWlsaWVvcHRpb25fb25jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXZCX0VkaXRvclt0 aGlzLmVkaXRvcmlkXS5idXR0b25fY29udGV4dCh0aGlzLCAnbW91c2VvdXQnLCAn bWVudScpOwoJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmluc2VydF9zbWlsaWUo ZSwgdGhpcy5zbWlsaWV0ZXh0LCBmZXRjaF90YWdzKHRoaXMsICdpbWcnKVswXS5z cmMsIHRoaXMuc21pbGllaWQpOwoJdkJtZW51LmhpZGUoKTsKfTsKCi8qKgoqIEhh bmRsZXMgYSBjbGljayBvbiB0aGUgJ01vcmUnIGxpbmsgaW4gdGhlIHNtaWxpZSBt ZW51CiovCnZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuc21pbGllbW9y ZV9vbmNsaWNrID0gZnVuY3Rpb24oZSkKewoJdkJfRWRpdG9yW3RoaXMuZWRpdG9y aWRdLm9wZW5fc21pbGllX3dpbmRvdyhzbWlsaWV3aW5kb3dfeCwgc21pbGlld2lu ZG93X3kpOwoJdkJtZW51LmhpZGUoKTsKfTsKCi8qKgoqIEhhbmRsZXMgYSBjbGlj ayBvbiB0aGUgJ01hbmFnZScgbGluayBpbiB0aGUgYXR0YWNobWVudHMgbWVudQoq Lwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBlLmF0dGFjaG1hbmFnZV9v bmNsaWNrID0gZnVuY3Rpb24oZSkKewoJdkJtZW51LmhpZGUoKTsKCWZldGNoX29i amVjdCgnbWFuYWdlX2F0dGFjaG1lbnRzX2J1dHRvbicpLm9uY2xpY2soKTsKfTsK Ci8qKgoqIEhhbmRsZXMgYSBjbGljayBvbiBhbiBhdHRhY2htZW50IG9wdGlvbiBp biB0aGUgYXR0YWNobWVudHMgbWVudQoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLmF0dGFjaG9wdGlvbl9vbmNsaWNrID0gZnVuY3Rpb24oZSkKewoJ dkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLmJ1dHRvbl9jb250ZXh0KHRoaXMsICdt b3VzZW91dCcsICdtZW51Jyk7Cgl2Ql9FZGl0b3JbdGhpcy5lZGl0b3JpZF0ud3Jh cF90YWdzKCdhdHRhY2gnLCBmYWxzZSwgdGhpcy5hdHRhY2htZW50aWQpOwoJdkJt ZW51LmhpZGUoKTsKfTsKCnZCX1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUu YXR0YWNoaW5zZXJ0YWxsX29uY2xpY2sgPSBmdW5jdGlvbihlKQp7Cgl2YXIgaW5z ZXJ0ID0gJyc7Cgl2YXIgYnJlYWtjaGFyID0gKHZCX0VkaXRvclt0aGlzLmVkaXRv cmlkXS53eXNpd3lnX21vZGUgPyAnPGJyIC8+PGJyIC8+JyA6ICdcclxuXHJcbicp OwoKCWZvciAodmFyIGlkIGluIHZCX0F0dGFjaG1lbnRzLmF0dGFjaG1lbnRzKQoJ ewoJCWluc2VydCArPSBpbnNlcnQgIT0gJycgPyBicmVha2NoYXIgOiAnJzsKCQlp bnNlcnQgKz0gJ1tBVFRBQ0hdJyArIGlkICsgJ1svQVRUQUNIXSc7Cgl9Cgl2Ql9F ZGl0b3JbdGhpcy5lZGl0b3JpZF0uaW5zZXJ0X3RleHQoaW5zZXJ0KTsKCXZCbWVu dS5oaWRlKCk7Cn0KCi8qKgoqIENsb3NlcyB0aGUgc21pbGllIHdpbmRvdyB3aGVu IHRoZSBtYWluIHBhZ2UgZXhpdHMKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnBy b3RvdHlwZS5zbWlsaWV3aW5kb3dfb251bmxvYWQgPSBmdW5jdGlvbihlKQp7Cglp ZiAodHlwZW9mIHNtaWxpZV93aW5kb3cgIT0gJ3VuZGVmaW5lZCcgJiYgIXNtaWxp ZV93aW5kb3cuY2xvc2VkKQoJewoJCXNtaWxpZV93aW5kb3cuY2xvc2UoKTsKCX0K fTsKCi8qKgoqIFNldHMgZWRpdHdpbi5oYXNmb2N1cyA9IHRydWUgb24gZm9jdXMK Ki8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5lZGl0d2luX29uZm9j dXMgPSBmdW5jdGlvbihlKQp7Cgl0aGlzLmhhc2ZvY3VzID0gdHJ1ZTsKfTsKCi8q KgoqIFNldHMgZWRpdHdpbi5oYXNmb2N1cyA9IGZhbHNlIG9uIGJsdXIKKi8KdkJf VGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5lZGl0d2luX29uYmx1ciA9IGZ1 bmN0aW9uKGUpCnsKCXRoaXMuaGFzZm9jdXMgPSBmYWxzZTsKfTsKCi8qKgoqIFNl dHMgY29udGV4dCBhbmQgaGlkZXMgbWVudXMgb24gbW91c2UgY2xpY2tzIGluIHRo ZSBlZGl0b3IKKi8KdkJfVGV4dF9FZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5lZGl0 ZG9jX29ubW91c2V1cCA9IGZ1bmN0aW9uKGUpCnsKCXZCX0VkaXRvclt0aGlzLmVk aXRvcmlkXS5zZXRfY29udGV4dCgpOwoJaWYgKHZCX0VkaXRvclt0aGlzLmVkaXRv cmlkXS5wb3B1cG1vZGUpCgl7CgkJdkJtZW51LmhpZGUoKTsKCX0KfTsKCi8qKgoq IFNldHMgY29udGV4dCBvbiBrZXkgcHJlc3NlcyBpbiB0aGUgZWRpdG9yCiovCnZC X1RleHRfRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdGRvY19vbmtleXVwID0g ZnVuY3Rpb24oZSkKewoJdkJfRWRpdG9yW3RoaXMuZWRpdG9yaWRdLnNldF9jb250 ZXh0KCk7Cn07CgovKioKKiBIYW5kbGUgYSBrZXlwcmVzcyBldmVudCBpbiB0aGUg ZWRpdG9yIHdpbmRvdwoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMucHJvdG90eXBl LmVkaXRkb2Nfb25rZXlwcmVzcyA9IGZ1bmN0aW9uKGUpCnsKCWlmICghZSkKCXsK CQllID0gd2luZG93LmV2ZW50OwoJfQoKCWlmIChlLmN0cmxLZXkpCgl7CgkJdmFy IGNvZGUgPSBlLmNoYXJDb2RlID8gZS5jaGFyQ29kZSA6IGUua2V5Q29kZTsKCQlz d2l0Y2ggKFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZSkudG9Mb3dlckNhc2UoKSkK CQl7CgkJCWNhc2UgJ2InOiBjbWQgPSAnYm9sZCc7IGJyZWFrOwoJCQljYXNlICdp JzogY21kID0gJ2l0YWxpYyc7IGJyZWFrOwoJCQljYXNlICd1JzogY21kID0gJ3Vu ZGVybGluZSc7IGJyZWFrOwoJCQlkZWZhdWx0OiByZXR1cm47CgkJfQoKCQllID0g ZG9fYW5fZShlKTsKCQl2Ql9FZGl0b3JbdGhpcy5lZGl0b3JpZF0uYXBwbHlfZm9y bWF0KGNtZCwgZmFsc2UsIG51bGwpOwoJCXJldHVybiBmYWxzZTsKCX0KCWVsc2Ug aWYgKGUua2V5Q29kZSA9PSA5KQoJewoJCS8vIGZpcnN0IGxldHMgdHJ5IHBvc3Qg aWNvbiwgdGhlbiBzdWJtaXQsIHRoZW4ganVzdCBsZXQgaXQgcHJvY2VlZCBtYWtp bmcgdGhlIHRhYgoJCS8vIHlvdSBjYW4ndCBzdXBwcmVzcyBldmVudHMgYSB0YWIg ZXZlbiBvbiBPcGVyYSBzbyBza2lwIHRoYXQgdG9vLgoJCXZhciBmaXJzdGljb24g PSBmZXRjaF9vYmplY3QoJ3JiX2ljb25pZF8wJyk7CgkJaWYgKGZpcnN0aWNvbiAh PSBudWxsKQoJCXsKCQkJZmlyc3RpY29uLmZvY3VzKCk7CgkJfQoJCWVsc2UgaWYg KGZldGNoX29iamVjdCh0aGlzLmVkaXRvcmlkICsgJ19zYXZlJykgIT0gbnVsbCAm JiAhaXNfb3BlcmEpCgkJewoJCQlmZXRjaF9vYmplY3QodGhpcy5lZGl0b3JpZCAr ICdfc2F2ZScpLmZvY3VzKCk7CgkJfQoJCWVsc2UgaWYgKGZldGNoX29iamVjdCgn cXJfc3VibWl0JykgIT0gbnVsbCAmJiAhaXNfb3BlcmEpCgkJewoJCQlmZXRjaF9v YmplY3QoJ3FyX3N1Ym1pdCcpLmZvY3VzKCk7CgkJfQoJCWVsc2UKCQl7CgkJCXJl dHVybjsKCQl9CgkJZSA9IGRvX2FuX2UoZSk7Cgl9Cn07CgovKioKKiBTdG9wIHJl c2l6aW5nIG9mIGltYWdlcyBpbiBJRQoqLwp2Ql9UZXh0X0VkaXRvcl9FdmVudHMu cHJvdG90eXBlLmVkaXRkb2Nfb25yZXNpemVzdGFydCA9IGZ1bmN0aW9uKGUpCnsK CWlmIChlLnNyY0VsZW1lbnQudGFnTmFtZSA9PSAnSU1HJykKCXsKCQlyZXR1cm4g ZmFsc2U7Cgl9Cn07CgovKioKKiBTYXZlIGVkaXRvciBjb250ZW50cyB0byB0ZXh0 YXJlYSBzbyBpZiB3ZSBoaXQgYmFjayAvIGZvcndhcmQgaXRzIG5vdCBsb3N0Ciog T25seSBhcHBlYXJzIHRvIHdvcmsgd2l0aCBGaXJlZm94IGF0IHRoZSBtb21lbnQK Ki8KZnVuY3Rpb24gc2F2ZV9pZnJhbWVfdG9fdGV4dGFyZWEoKQp7Cglmb3IgKHZh ciBlZGl0b3JpZCBpbiB2Ql9FZGl0b3IpCgl7CgkJaWYgKHZCX0VkaXRvcltlZGl0 b3JpZF0ud3lzaXd5Z19tb2RlICYmIHZCX0VkaXRvcltlZGl0b3JpZF0uaW5pdGlh bGl6ZWQpCgkJewoJCQl2Ql9FZGl0b3JbZWRpdG9yaWRdLnRleHRvYmoudmFsdWUg PSB2Ql9FZGl0b3JbZWRpdG9yaWRdLmdldF9lZGl0b3JfY29udGVudHMoKTsKCQl9 Cgl9Cn0KCmlmICh3aW5kb3cuYXR0YWNoRXZlbnQpCnsKCXdpbmRvdy5hdHRhY2hF dmVudCgnb25iZWZvcmV1bmxvYWQnLCBzYXZlX2lmcmFtZV90b190ZXh0YXJlYSk7 Cn0KZWxzZSBpZih3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcikKewoJd2luZG93LmFk ZEV2ZW50TGlzdGVuZXIoJ3VubG9hZCcsIHNhdmVfaWZyYW1lX3RvX3RleHRhcmVh LCB0cnVlKTsKfQoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8g RWRpdG9yIG1vZGUgc3dpdGNoZXIgc3lzdGVtCgovKioKKiBTd2l0Y2ggZWRpdG9y IGJldHdlZW4gc3RhbmRhcmQgYW5kIHd5c2l3eWcgbW9kZXMKKgoqIEBwYXJhbQlz dHJpbmcJRWRpdG9ySUQgKHZCX0VkaXRvclt4XSkKKi8KZnVuY3Rpb24gc3dpdGNo X2VkaXRvcl9tb2RlKGVkaXRvcmlkKQp7CglpZiAoQUpBWF9Db21wYXRpYmxlKQoJ ewoJCXZhciBtb2RlID0gKHZCX0VkaXRvcltlZGl0b3JpZF0ud3lzaXd5Z19tb2Rl ID8gMCA6IDEpOwoKCQlpZiAodkJfRWRpdG9yW2VkaXRvcmlkXS5pbmZsdXggPT0g MSkKCQl7CgkJCS8vIGFscmVhZHkgY2xpY2tlZCwgZ28gYXdheSEKCQkJcmV0dXJu OwoJCX0KCQllbHNlCgkJewoJCQl2Ql9FZGl0b3JbZWRpdG9yaWRdLmluZmx1eCA9 IDE7CgkJfQoKCQlpZiAodHlwZW9mIHZCbWVudSAhPSAndW5kZWZpbmVkJykKCQl7 CgkJCXZCbWVudS5oaWRlKCk7CgkJfQoKCQl2YXIgYWpheCA9IG5ldyB2Ql9BSkFY X0hhbmRsZXIodHJ1ZSk7CgkJYWpheC5vbnJlYWR5c3RhdGVjaGFuZ2UoZnVuY3Rp b24oKQoJCXsKCQkJaWYgKGFqYXguaGFuZGxlci5yZWFkeVN0YXRlID09IDQgJiYg YWpheC5oYW5kbGVyLnN0YXR1cyA9PSAyMDApCgkJCXsKCQkJCWlmIChhamF4Lmhh bmRsZXIucmVzcG9uc2VYTUwpCgkJCQl7CgkJCQkJLy8gZGVzdHJveWVyCgkJCQkJ dmFyIHBhcnNldHlwZSA9IHZCX0VkaXRvcltlZGl0b3JpZF0ucGFyc2V0eXBlOwoJ CQkJCXZhciBwYXJzZXNtaWxpZXMgPSB2Ql9FZGl0b3JbZWRpdG9yaWRdLnBhcnNl c21pbGllczsKCQkJCQl2YXIgYWpheF9leHRyYSA9IHZCX0VkaXRvcltlZGl0b3Jp ZF0uYWpheF9leHRyYTsKCgkJCQkJdkJfRWRpdG9yW2VkaXRvcmlkXS5kZXN0cm95 KCk7CgoJCQkJCXZhciBwYXJzZWRfdGV4dCA9IGFqYXguZmV0Y2hfZGF0YShmZXRj aF90YWdzKGFqYXguaGFuZGxlci5yZXNwb25zZVhNTCwgJ21lc3NhZ2UnKVswXSk7 CgkJCQkJdmFyIG1hdGNoZXMgPSBwYXJzZWRfdGV4dC5tYXRjaCgvJiMoWzAtOV0r KTsvZyk7CgkJCQkJaWYgKG1hdGNoZXMpCgkJCQkJewoJCQkJCQlmb3IgKHZhciBp ID0gMDsgdHlwZW9mIG1hdGNoZXNbaV0gIT0gJ3VuZGVmaW5lZCc7IGkrKykKCQkJ CQkJewoJCQkJCQkJaWYgKHN1Ym1hdGNoID0gbWF0Y2hlc1tpXS5tYXRjaCgvXiYj KFswLTldKyk7JC8pKQoJCQkJCQkJewoJCQkJCQkJCXBhcnNlZF90ZXh0ID0gcGFy c2VkX3RleHQucmVwbGFjZShzdWJtYXRjaFswXSwgU3RyaW5nLmZyb21DaGFyQ29k ZShzdWJtYXRjaFsxXSkpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoKCQkJCQkv LyByZW1vdmluZyB0aGlzIGxpbmUgYmVjYXVzZSBvZiBJRTcgZm9jdXMgaXNzdWVz IC0gb24gc2Vjb25kIGFjdGl2YXRpb24gb2YgSUU3IFdZV0lXWUcsIGZvY3VzIGlz IGxvc3QKCQkJCQkvL3ZCX0VkaXRvcltlZGl0b3JpZF0gPSBudWxsOyAvLyBjb2xs ZWN0IHRoZSBnYXJiYWdlCgoJCQkJCXZCX0VkaXRvcltlZGl0b3JpZF0gPSBuZXcg dkJfVGV4dF9FZGl0b3IoZWRpdG9yaWQsIG1vZGUsIHBhcnNldHlwZSwgcGFyc2Vz bWlsaWVzLCBwYXJzZWRfdGV4dCwgYWpheF9leHRyYSk7CgkJCQkJdkJfRWRpdG9y W2VkaXRvcmlkXS5jaGVja19mb2N1cygpOwoJCQkJCWZldGNoX29iamVjdChlZGl0 b3JpZCArICdfbW9kZScpLnZhbHVlID0gbW9kZTsKCQkJCX0KCgkJCQlpZiAoaXNf aWUpCgkJCQl7CgkJCQkJYWpheC5oYW5kbGVyLmFib3J0KCk7CgkJCQl9CgkJCX0K CQl9KTsKCgkJLy8gISFhdHRlbnRpb24KCQlhamF4LnNlbmQoJ2FqYXgucGhwP2Rv PWVkaXRvcnN3aXRjaCcsICdkbz1lZGl0b3Jzd2l0Y2gnCgkJCSsgJyZ0b3d5c2l3 eWc9JwkrIG1vZGUKCQkJKyAnJnBhcnNldHlwZT0nICsgdkJfRWRpdG9yW2VkaXRv cmlkXS5wYXJzZXR5cGUKCQkJKyAnJmFsbG93c21pbGllPScgKyB2Ql9FZGl0b3Jb ZWRpdG9yaWRdLnBhcnNlc21pbGllcwoJCQkrICcmbWVzc2FnZT0nICsgUEhQLnVy bGVuY29kZSh2Ql9FZGl0b3JbZWRpdG9yaWRdLmdldF9lZGl0b3JfY29udGVudHMo KSkKCQkJKyAodkJfRWRpdG9yW2VkaXRvcmlkXS5hamF4X2V4dHJhID8gKCcmJyAr IHZCX0VkaXRvcltlZGl0b3JpZF0uYWpheF9leHRyYSkgOiAnJykKCQkpOwoJfQp9 CgoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLy8gR2VuZXJpYyBn bG9iYWwgZWRpdG9yIHZhcmlhYmxlcwoKLyoqCiogRGVmaW5lIHdoaWNoIGJ1dHRv bnMgYXJlIGNvbnRleHQtY29udHJvbGxlZAoqCiogQHZhcglhcnJheQlDb250ZXh0 IGNvbnRyb2xzCiovCnZhciBjb250ZXh0Y29udHJvbHMgPSBuZXcgQXJyYXkoCgkn Ym9sZCcsCgknaXRhbGljJywKCSd1bmRlcmxpbmUnLAoJJ2p1c3RpZnlsZWZ0JywK CSdqdXN0aWZ5Y2VudGVyJywKCSdqdXN0aWZ5cmlnaHQnLAoJJ2luc2VydG9yZGVy ZWRsaXN0JywKCSdpbnNlcnR1bm9yZGVyZWRsaXN0JwopOwoKLyoqCiogRGVmaW5l IGF2YWlsYWJsZSBjb2xvciBuYW1lIG9wdGlvbnMgLSBrZXllZCB3aXRoIGhleCB2 YWx1ZQoqCiogQHZhcglhcnJheQlDb2xvciBvcHRpb25zCiovCnZhciBjb2xvcm9w dGlvbnMgPSBuZXcgQXJyYXkoKTsKY29sb3JvcHRpb25zID0gewoJJyMwMDAwMDAn IDogJ0JsYWNrJywKCScjQTA1MjJEJyA6ICdTaWVubmEnLAoJJyM1NTZCMkYnIDog J0RhcmtPbGl2ZUdyZWVuJywKCScjMDA2NDAwJyA6ICdEYXJrR3JlZW4nLAoJJyM0 ODNEOEInIDogJ0RhcmtTbGF0ZUJsdWUnLAoJJyMwMDAwODAnIDogJ05hdnknLAoJ JyM0QjAwODInIDogJ0luZGlnbycsCgknIzJGNEY0RicgOiAnRGFya1NsYXRlR3Jh eScsCgknIzhCMDAwMCcgOiAnRGFya1JlZCcsCgknI0ZGOEMwMCcgOiAnRGFya09y YW5nZScsCgknIzgwODAwMCcgOiAnT2xpdmUnLAoJJyMwMDgwMDAnIDogJ0dyZWVu JywKCScjMDA4MDgwJyA6ICdUZWFsJywKCScjMDAwMEZGJyA6ICdCbHVlJywKCScj NzA4MDkwJyA6ICdTbGF0ZUdyYXknLAoJJyM2OTY5NjknIDogJ0RpbUdyYXknLAoJ JyNGRjAwMDAnIDogJ1JlZCcsCgknI0Y0QTQ2MCcgOiAnU2FuZHlCcm93bicsCgkn IzlBQ0QzMicgOiAnWWVsbG93R3JlZW4nLAoJJyMyRThCNTcnIDogJ1NlYUdyZWVu JywKCScjNDhEMUNDJyA6ICdNZWRpdW1UdXJxdW9pc2UnLAoJJyM0MTY5RTEnIDog J1JveWFsQmx1ZScsCgknIzgwMDA4MCcgOiAnUHVycGxlJywKCScjODA4MDgwJyA6 ICdHcmF5JywKCScjRkYwMEZGJyA6ICdNYWdlbnRhJywKCScjRkZBNTAwJyA6ICdP cmFuZ2UnLAoJJyNGRkZGMDAnIDogJ1llbGxvdycsCgknIzAwRkYwMCcgOiAnTGlt ZScsCgknIzAwRkZGRicgOiAnQ3lhbicsCgknIzAwQkZGRicgOiAnRGVlcFNreUJs dWUnLAoJJyM5OTMyQ0MnIDogJ0RhcmtPcmNoaWQnLAoJJyNDMEMwQzAnIDogJ1Np bHZlcicsCgknI0ZGQzBDQicgOiAnUGluaycsCgknI0Y1REVCMycgOiAnV2hlYXQn LAoJJyNGRkZBQ0QnIDogJ0xlbW9uQ2hpZmZvbicsCgknIzk4RkI5OCcgOiAnUGFs ZUdyZWVuJywKCScjQUZFRUVFJyA6ICdQYWxlVHVycXVvaXNlJywKCScjQUREOEU2 JyA6ICdMaWdodEJsdWUnLAoJJyNEREEwREQnIDogJ1BsdW0nLAoJJyNGRkZGRkYn IDogJ1doaXRlJwp9OwoKLy8gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMK Ly8gdkJfSGlzdG9yeQovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoK ZnVuY3Rpb24gdkJfSGlzdG9yeSgpCnsKCXRoaXMuY3Vyc29yID0gLTE7Cgl0aGlz LnN0YWNrID0gbmV3IEFycmF5KCk7Cn0KCi8vID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Ci8vIHZCX0hpc3RvcnkgbWV0aG9kcwoKdkJfSGlzdG9yeS5wcm90 b3R5cGUubW92ZV9jdXJzb3IgPSBmdW5jdGlvbihpbmNyZW1lbnQpCnsKCXZhciB0 ZXN0ID0gdGhpcy5jdXJzb3IgKyBpbmNyZW1lbnQ7CglpZiAodGVzdCA+PSAwICYm IHRoaXMuc3RhY2tbdGVzdF0gIT0gbnVsbCAmJiB0eXBlb2YgdGhpcy5zdGFja1t0 ZXN0XSAhPSAndW5kZWZpbmVkJykKCXsKCQl0aGlzLmN1cnNvciArPSBpbmNyZW1l bnQ7Cgl9Cn07Cgp2Ql9IaXN0b3J5LnByb3RvdHlwZS5hZGRfc25hcHNob3QgPSBm dW5jdGlvbihzdHIpCnsKCWlmICh0aGlzLnN0YWNrW3RoaXMuY3Vyc29yXSA9PSBz dHIpCgl7CgkJcmV0dXJuOwoJfQoJZWxzZQoJewoJCXRoaXMuY3Vyc29yKys7CgkJ dGhpcy5zdGFja1t0aGlzLmN1cnNvcl0gPSBzdHI7CgoJCWlmICh0eXBlb2YgdGhp cy5zdGFja1t0aGlzLmN1cnNvciArIDFdICE9ICd1bmRlZmluZWQnKQoJCXsKCQkJ dGhpcy5zdGFja1t0aGlzLmN1cnNvciArIDFdID0gbnVsbDsKCQl9Cgl9Cn07Cgp2 Ql9IaXN0b3J5LnByb3RvdHlwZS5nZXRfc25hcHNob3QgPSBmdW5jdGlvbigpCnsK CWlmICh0eXBlb2YgdGhpcy5zdGFja1t0aGlzLmN1cnNvcl0gIT0gJ3VuZGVmaW5l ZCcgJiYgdGhpcy5zdGFja1t0aGlzLmN1cnNvcl0gIT0gbnVsbCkKCXsKCQlyZXR1 cm4gdGhpcy5zdGFja1t0aGlzLmN1cnNvcl07Cgl9CgllbHNlCgl7CgkJcmV0dXJu IGZhbHNlOwoJfQp9OwoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMKfHwgIyBEb3dubG9hZGVkOiAxNDo0MSwgVGh1IFNl cCAxOHRoIDIwMDgKfHwgIyBDVlM6ICRSQ1NmaWxlJCAtICRSZXZpc2lvbjogMjcw MjIgJAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcKj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0qLw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=vbulletin_editor.css Content-Type: text/css; charset=windows-1251; name=vbulletin_editor.css Content-Location: http://forum.qip.ru/clientscript/vbulletin_editor.css Content-Transfer-Encoding: 8bit /*======================================================================*\ || #################################################################### || || # vBulletin 3.6.10 Patch Level 2 || # ---------------------------------------------------------------- # || || # All code in this file is ©2000-2008 Jelsoft Enterprises Ltd. # || || # This file may not be redistributed in whole or significant part. # || || # ---------------- VBULLETIN IS NOT FREE SOFTWARE ---------------- # || || # http://www.vbulletin.com | http://www.vbulletin.com/license.html # || || #################################################################### || \*======================================================================*/ /* the container for the editor */ .vBulletin_editor { border: 2px groove; } /* the container for all the edit controls */ #controlbar, .controlbar { padding: 2px; } /* the WYSIWYG edit area itself */ #htmlbox { border: 2px inset; font: 10pt verdana; overflow: auto; } /* an individual button */ .imagebutton { left: 0px; top: 0px; } /* an individual WYSIWYG color element in the color popup */ .ocolor { padding: 2px; font-size: 1px; } /* WYSIWYG the part of the color element that gets colored */ .ocolor div { width: 10px; height: 10px; border: 1px solid #ACA899; } /* WYSIWYG font, size and smilie elements within popups */ .ofont, .osize, .osmilie, .otextlink { font: 11px tahoma; cursor: default; } /* style for WYSIWYG font option elements */ .ofont { padding: 0px 4px 0px 10px; font-size: 14px; height: 20px; } /* style for WYSIWYG size option elements */ .osize { padding: 0px 4px 0px 4px; width: 30px; } /* the smilie image within a WYSIWYG smilie popup */ .osmilie img { vertical-align: middle; margin: 4px; } /* text buttons within popup menus */ .otextlink { text-align: center; margin-top: 4px; height: 20px; } /* the left cell of a WYSIWYG popup menu control */ .popup_feedback { font: 11px tahoma; height: 18px; padding: 0px 3px 0px 3px; white-space: nowrap; overflow: hidden; } /* the container window for a WYSIWYG popup menu */ .popupwindow { border: 1px solid APPWORKSPACE; padding: 3px; position: absolute; left: 0px; top: 0px; z-index: 5; } /* the WYSIWYG color popup */ #popup_forecolor { padding: 3px; } /* the WYSIWYG font popup */ #popup_fontname { padding: 1px; overflow: auto; overflow-x: hidden; overflow-y: scroll; } /* the WYSIWYG size popup */ #popup_fontsize { padding: 1px; } /* the WYSIWYG smilie popup */ #popup_smilie { padding: 1px; overflow: auto; overflow-x: hidden; overflow-y: scroll; } /* the WYSIWYG attach popup */ #popup_attach { padding: 1px; overflow: auto; overflow-x: hidden; overflow-y: scroll; } /* the context-notification area for WYSIWYG font and size feedback */ #fontOut, #sizeOut, .popup_feedback div { height: 16px; border: 0px solid; padding: 0px 2px 0px 2px; cursor: default; font: 11px tahoma; overflow: hidden; } /*======================================================================*\ || #################################################################### || # Downloaded: 05:52, Tue Jun 24th 2008 || # CVS: $RCSfile$ - $Revision: 13470 $ || #################################################################### \*======================================================================*/ ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=vbulletin_quick_edit.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_quick_edit.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_quick_edit.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIElu aXRpYWxpemUgQUpBWCBwb3N0IGVkaXRpbmcKKgoqIEBwYXJhbQltaXhlZAlJRCBv ZiBlbGVtZW50IChvciBhY3R1YWwgZWxlbWVudCkgY29udGFpbmluZyBwb3N0Yml0 cwoqLwpmdW5jdGlvbiB2Ql9BSkFYX1F1aWNrRWRpdF9Jbml0KHBvc3RvYmopCnsK CWlmIChBSkFYX0NvbXBhdGlibGUpCgl7CgkJaWYgKHR5cGVvZiBwb3N0b2JqID09 ICdzdHJpbmcnKQoJCXsKCQkJcG9zdG9iaiA9IGZldGNoX29iamVjdChwb3N0b2Jq KTsKCQl9CgkJdmFyIGFuY2hvcnMgPSBmZXRjaF90YWdzKHBvc3RvYmosICdhJyk7 CgkJdmFyIHBvc3RpZCA9IDA7CgkJZm9yICh2YXIgaSA9IDA7IGkgPCBhbmNob3Jz Lmxlbmd0aDsgaSsrKQoJCXsKCQkJaWYgKGFuY2hvcnNbaV0ubmFtZSAmJiBhbmNo b3JzW2ldLm5hbWUuaW5kZXhPZigndkI6OlF1aWNrRWRpdDo6JykgIT0gLTEpCgkJ CXsKCQkJCWFuY2hvcnNbaV0ub25jbGljayA9IHZCX0FKQVhfUXVpY2tFZGl0b3Jf RXZlbnRzLnByb3RvdHlwZS5lZGl0YnV0dG9uX2NsaWNrOwoJCQl9CgkJfQoJfQp9 CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwovLyB2Ql9BSkFYX1F1 aWNrRWRpdG9yCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovKioK KiBDbGFzcyB0byBhbGxvdyBxdWljayBlZGl0aW5nIG9mIHBvc3RzIHdpdGhpbiBw b3N0Yml0IHZpYSBBSkFYCiovCmZ1bmN0aW9uIHZCX0FKQVhfUXVpY2tFZGl0b3Io KQp7Cgl0aGlzLnBvc3RpZCA9IG51bGw7Cgl0aGlzLm1lc3NhZ2VvYmogPSBudWxs OwoJdGhpcy5jb250YWluZXIgPSBudWxsOwoJdGhpcy5vcmlnaW5hbGh0bWwgPSBu dWxsOwoJdGhpcy5hamF4ID0gbnVsbDsKCXRoaXMuZWRpdHN0YXRlID0gZmFsc2U7 Cgl0aGlzLmVkaXRvcmNvdW50ZXIgPSAwOwoJdGhpcy5wZW5kaW5nID0gZmFsc2U7 Cn0KCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci8vIHZCX0FKQVhf UXVpY2tFZGl0b3IgbWV0aG9kcwoKLyoqCiogQ2hlY2sgaWYgdGhlIEFKQVggc3lz dGVtIGlzIHJlYWR5IGZvciB1cyB0byBwcm9jZWVkCioKKiBAcmV0dXJuCWJvb2xl YW4KKi8KdkJfQUpBWF9RdWlja0VkaXRvci5wcm90b3R5cGUucmVhZHkgPSBmdW5j dGlvbigpCnsKCWlmICh0aGlzLmVkaXRzdGF0ZSB8fCB0aGlzLnBlbmRpbmcpCgl7 CgkJcmV0dXJuIGZhbHNlOwoJfQoJZWxzZQoJewoJCXJldHVybiB0cnVlOwoJfQp9 OwoKLyoqCiogUHJlcGFyZSB0byBlZGl0IGEgc2luZ2xlIHBvc3QKKgoqIEBwYXJh bQlzdHJpbmcJTmFtZSBhdHRyaWJ1dGUgb2YgY2xpY2tlZCBsaW5rIC0gdGFrZXMg dGhlIGZvcm0gb2YgJ3ZCOjpRdWlja0VkaXQ6OiRwb3N0aWQnCioKKiBAcmV0dXJu CWJvb2xlYW4JZmFsc2UKKi8KdkJfQUpBWF9RdWlja0VkaXRvci5wcm90b3R5cGUu ZWRpdCA9IGZ1bmN0aW9uKGFuY2hvcl9uYW1lKQp7Cgl2YXIgdGVzdF9hamF4ID0g bmV3IHZCX0FKQVhfSGFuZGxlcih0cnVlKTsKCWlmICghdGVzdF9hamF4LmluaXQo KSB8fCAodHlwZW9mIHZiX2Rpc2FibGVfYWpheCAhPSAndW5kZWZpbmVkJyAmJiB2 Yl9kaXNhYmxlX2FqYXggPiAwKSkKCXsKCQkvLyBjb3VsZG4ndCBpbml0aWFsaXpl LCByZXR1cm4gdHJ1ZSB0byBhbGxvdyBjbGljayB0byBnbyB0aHJvdWdoCgkJcmV0 dXJuIHRydWU7Cgl9CgoJdmFyIHRtcHBvc3RpZCA9IGFuY2hvcl9uYW1lLnN1YnN0 cihhbmNob3JfbmFtZS5sYXN0SW5kZXhPZignOjonKSArIDIpOwoKCWlmICh0aGlz LnBlbmRpbmcpCgl7CgkJLy8gc29tZXRoaW5nIGlzIHdhaXRpbmcgdG8gY29tcGxl dGUKCQlyZXR1cm4gZmFsc2U7Cgl9CgllbHNlIGlmICghdGhpcy5yZWFkeSgpKQoJ ewoJCWlmICh0aGlzLnBvc3RpZCA9PSB0bXBwb3N0aWQpCgkJewoJCQl0aGlzLmZ1 bGxfZWRpdCgpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXRoaXMuYWJvcnQoKTsK CX0KCgl0aGlzLmVkaXRvcmNvdW50ZXIrKzsKCXRoaXMuZWRpdG9yaWQgPSAndkJf RWRpdG9yX1FFXycgKyB0aGlzLmVkaXRvcmNvdW50ZXI7CgoJdGhpcy5wb3N0aWQg PSB0bXBwb3N0aWQ7CgoJdGhpcy5tZXNzYWdlb2JqID0gZmV0Y2hfb2JqZWN0KCdw b3N0X21lc3NhZ2VfJyArIHRoaXMucG9zdGlkKTsKCXRoaXMub3JpZ2luYWxodG1s ID0gdGhpcy5tZXNzYWdlb2JqLmlubmVySFRNTDsKCgl0aGlzLnVuY2hhbmdlZCA9 IG51bGw7Cgl0aGlzLnVuY2hhbmdlZF9yZWFzb24gPSBudWxsOwoKCXRoaXMuZmV0 Y2hfZWRpdG9yKCk7CgoJdGhpcy5lZGl0c3RhdGUgPSB0cnVlOwoKCXJldHVybiBm YWxzZTsKfTsKCi8qKgoqIFNlbmQgYW4gQUpBWCByZXF1ZXN0IHRvIGZldGNoIHRo ZSBlZGl0b3IgSFRNTAoqLwp2Ql9BSkFYX1F1aWNrRWRpdG9yLnByb3RvdHlwZS5m ZXRjaF9lZGl0b3IgPSBmdW5jdGlvbigpCnsKCWlmIChmZXRjaF9vYmplY3QoJ3By b2dyZXNzXycgKyB0aGlzLnBvc3RpZCkpCgl7CgkJZmV0Y2hfb2JqZWN0KCdwcm9n cmVzc18nICsgdGhpcy5wb3N0aWQpLnN0eWxlLmRpc3BsYXkgPSAnJzsKCX0KCWRv Y3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ3dhaXQnOwoJdGhpcy5hamF4ID0g bmV3IHZCX0FKQVhfSGFuZGxlcih0cnVlKTsKCXRoaXMuYWpheC5vbnJlYWR5c3Rh dGVjaGFuZ2UodGhpcy5kaXNwbGF5X2VkaXRvcik7Cgl0aGlzLmFqYXguc2VuZCgn YWpheC5waHA/ZG89cXVpY2tlZGl0JnA9JyArIHRoaXMucG9zdGlkLCAnZG89cXVp Y2tlZGl0JnA9JyArIHRoaXMucG9zdGlkICsgJyZlZGl0b3JpZD0nICsgUEhQLnVy bGVuY29kZSh0aGlzLmVkaXRvcmlkKSk7Cgl0aGlzLnBlbmRpbmcgPSB0cnVlOwp9 OwoKLyoqCiogRGlzcGxheSB0aGUgZWRpdG9yIEhUTUwgd2hlbiBBSkFYIHNheXMg ZmV0Y2hfZWRpdG9yKCkgaXMgcmVhZHkKKi8KdkJfQUpBWF9RdWlja0VkaXRvci5w cm90b3R5cGUuZGlzcGxheV9lZGl0b3IgPSBmdW5jdGlvbigpCnsKCXZhciBBSkFY ID0gdkJfUXVpY2tFZGl0b3IuYWpheC5oYW5kbGVyOwoKCWlmIChBSkFYLnJlYWR5 U3RhdGUgPT0gNCAmJiBBSkFYLnN0YXR1cyA9PSAyMDApCgl7CgkJaWYgKGZldGNo X29iamVjdCgncHJvZ3Jlc3NfJyArIHZCX1F1aWNrRWRpdG9yLnBvc3RpZCkpCgkJ ewoJCQlmZXRjaF9vYmplY3QoJ3Byb2dyZXNzXycgKyB2Ql9RdWlja0VkaXRvci5w b3N0aWQpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CgkJfQoJCWRvY3VtZW50LmJv ZHkuc3R5bGUuY3Vyc29yID0gJ2F1dG8nOwoJCXZCX1F1aWNrRWRpdG9yLnBlbmRp bmcgPSBmYWxzZTsKCgkJaWYgKGZldGNoX3RhZ19jb3VudChBSkFYLnJlc3BvbnNl WE1MLCAnZGlzYWJsZWQnKSkKCQl7CgkJCS8vIHRoaXMgd2lsbCBmaXJlIGlmIHF1 aWNrIGVkaXQgaGFzIGJlZW4gZGlzYWJsZWQgYWZ0ZXIgdGhlIHNob3d0aHJlYWQg cGFnZSBpcyBsb2FkZWQKCQkJd2luZG93LmxvY2F0aW9uID0gJ2VkaXRwb3N0LnBo cD8nICsgU0VTU0lPTlVSTCArICdkbz1lZGl0cG9zdCZwb3N0aWQ9JyArIHZCX1F1 aWNrRWRpdG9yLnBvc3RpZDsKCQl9CgkJZWxzZSBpZiAoZmV0Y2hfdGFnX2NvdW50 KEFKQVgucmVzcG9uc2VYTUwsICdlcnJvcicpKQoJCXsKCQkJLy8gZG8gbm90aGlu ZwoJCX0KCQllbHNlCgkJewoJCQl2YXIgZWRpdG9yID0gZmV0Y2hfdGFncyhBSkFY LnJlc3BvbnNlWE1MLCAnZWRpdG9yJylbMF07CgkJCWlmICh0eXBlb2YgZWRpdG9y ID09ICd1bmRlZmluZWQnKQoJCQl7CgkJCQl3aW5kb3cubG9jYXRpb24gPSAiZWRp dHBvc3QucGhwPyIgKyBTRVNTSU9OVVJMICsgImRvPWVkaXRwb3N0JnBvc3RpZD0i ICsgdGhpcy5wb3N0aWQ7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJdmFyIHJl YXNvbiA9IGVkaXRvci5nZXRBdHRyaWJ1dGUoJ3JlYXNvbicpOwoKCQkJLy8gZGlz cGxheSB0aGUgZWRpdG9yCgkJCXZCX1F1aWNrRWRpdG9yLm1lc3NhZ2VvYmouaW5u ZXJIVE1MID0gdkJfUXVpY2tFZGl0b3IuYWpheC5mZXRjaF9kYXRhKGVkaXRvcik7 CgoJCQkvLyBkaXNwbGF5IHRoZSByZWFzb24KCQkJaWYgKGZldGNoX29iamVjdCh2 Ql9RdWlja0VkaXRvci5lZGl0b3JpZCArICdfZWRpdF9yZWFzb24nKSkKCQkJewoJ CQkJdkJfUXVpY2tFZGl0b3IudW5jaGFuZ2VkX3JlYXNvbiA9IFBIUC51bmh0bWxz cGVjaWFsY2hhcnMocmVhc29uKTsKCQkJCWZldGNoX29iamVjdCh2Ql9RdWlja0Vk aXRvci5lZGl0b3JpZCArICdfZWRpdF9yZWFzb24nKS52YWx1ZSA9IHZCX1F1aWNr RWRpdG9yLnVuY2hhbmdlZF9yZWFzb247CgkJCQlmZXRjaF9vYmplY3QodkJfUXVp Y2tFZGl0b3IuZWRpdG9yaWQgKyAnX2VkaXRfcmVhc29uJykub25rZXlwcmVzcyA9 IHZCX0FKQVhfUXVpY2tFZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5yZWFzb25fa2V5 X3RyYXA7CgkJCX0KCgkJCS8vIGluaXRpYWxpemUgdGhlIGVkaXRvcgoJCQl2Ql9F ZGl0b3JbdkJfUXVpY2tFZGl0b3IuZWRpdG9yaWRdID0gbmV3IHZCX1RleHRfRWRp dG9yKAoJCQkJdkJfUXVpY2tFZGl0b3IuZWRpdG9yaWQsCgkJCQllZGl0b3IuZ2V0 QXR0cmlidXRlKCdtb2RlJyksCgkJCQllZGl0b3IuZ2V0QXR0cmlidXRlKCdwYXJz ZXR5cGUnKSwKCQkJCWVkaXRvci5nZXRBdHRyaWJ1dGUoJ3BhcnNlc21pbGllcycp CgkJCSk7CgoJCQlpZiAoZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRv cmlkICsgJ19lZGl0b3InKSAmJiBmZXRjaF9vYmplY3QodkJfUXVpY2tFZGl0b3Iu ZWRpdG9yaWQgKyAnX2VkaXRvcicpLnNjcm9sbEludG9WaWV3KQoJCQl7CgkJCQlm ZXRjaF9vYmplY3QodkJfUXVpY2tFZGl0b3IuZWRpdG9yaWQgKyAnX2VkaXRvcicp LnNjcm9sbEludG9WaWV3KHRydWUpOwoJCQl9CgoJCQl2Ql9FZGl0b3JbdkJfUXVp Y2tFZGl0b3IuZWRpdG9yaWRdLmVkaXRib3guc3R5bGUud2lkdGggPSAnMTAwJSc7 CgkJCXZCX0VkaXRvclt2Ql9RdWlja0VkaXRvci5lZGl0b3JpZF0uY2hlY2tfZm9j dXMoKTsKCgkJCXZCX1F1aWNrRWRpdG9yLnVuY2hhbmdlZCA9IHZCX0VkaXRvclt2 Ql9RdWlja0VkaXRvci5lZGl0b3JpZF0uZ2V0X2VkaXRvcl9jb250ZW50cygpOwoK CQkJZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRvcmlkICsgJ19zYXZl Jykub25jbGljayA9IHZCX1F1aWNrRWRpdG9yLnNhdmU7CgkJCWZldGNoX29iamVj dCh2Ql9RdWlja0VkaXRvci5lZGl0b3JpZCArICdfYWJvcnQnKS5vbmNsaWNrID0g dkJfUXVpY2tFZGl0b3IuYWJvcnQ7CgkJCWZldGNoX29iamVjdCh2Ql9RdWlja0Vk aXRvci5lZGl0b3JpZCArICdfYWR2Jykub25jbGljayA9IHZCX1F1aWNrRWRpdG9y LmZ1bGxfZWRpdDsKCgkJCXZhciBkZWxidXR0b24gPSBmZXRjaF9vYmplY3QodkJf UXVpY2tFZGl0b3IuZWRpdG9yaWQgKyAnX2RlbGV0ZScpOwoJCQlpZiAoZGVsYnV0 dG9uKQoJCQl7CgkJCQlkZWxidXR0b24ub25jbGljayA9IHZCX1F1aWNrRWRpdG9y LnNob3dfZGVsZXRlOwoJCQl9CgkJfQoKCQlpZiAoaXNfaWUpCgkJewoJCQlBSkFY LmFib3J0KCk7CgkJfQoJfQp9OwoKLyoqCiogRGVzdHJveSB0aGUgZWRpdG9yLCBh bmQgdXNlIHRoZSBzcGVjaWZpZWQgdGV4dCBhcyB0aGUgcG9zdCBjb250ZW50cwoq CiogQHBhcmFtCXN0cmluZwlUZXh0IG9mIHBvc3QKKi8KdkJfQUpBWF9RdWlja0Vk aXRvci5wcm90b3R5cGUucmVzdG9yZSA9IGZ1bmN0aW9uKHBvc3RfaHRtbCwgdHlw ZSkKewoJdGhpcy5oaWRlX2Vycm9ycyh0cnVlKTsKCWlmICh0aGlzLmVkaXRvcmlk ICYmIHZCX0VkaXRvclt0aGlzLmVkaXRvcmlkXSAmJiB2Ql9FZGl0b3JbdGhpcy5l ZGl0b3JpZF0uaW5pdGlhbGl6ZWQpCgl7CgkJdkJfRWRpdG9yW3RoaXMuZWRpdG9y aWRdLmRlc3Ryb3koKTsKCX0KCWlmICh0eXBlID09ICd0YWJsZW9iaicpCgl7CgkJ Ly8gdXN1YWxseSBjYWxsZWQgd2hlbiBtZXNzYWdlIGlzIHNhdmVkCgkJZmV0Y2hf b2JqZWN0KCdlZGl0JyArIHRoaXMucG9zdGlkKS5pbm5lckhUTUwgPSBwb3N0X2h0 bWw7Cgl9CgllbHNlCgl7CgkJLy8gdXN1YWxseSBjYWxsZWQgd2hlbiBtZXNzYWdl IGVkaXQgaXMgY2FuY2VsbGVkCgkJdGhpcy5tZXNzYWdlb2JqLmlubmVySFRNTCA9 IHBvc3RfaHRtbDsKCX0KCgl0aGlzLmVkaXRzdGF0ZSA9IGZhbHNlOwp9OwoKLyoq CiogQ2FuY2VsIHRoZSBwb3N0IGVkaXQgYW5kIHJlc3RvcmUgZXZlcnl0aGluZyB0 byBob3cgaXQgc3RhcnRlZAoqCiogQHBhcmFtCWV2ZW50CUV2ZW50IG9iamVjdAoq Lwp2Ql9BSkFYX1F1aWNrRWRpdG9yLnByb3RvdHlwZS5hYm9ydCA9IGZ1bmN0aW9u KGUpCnsKCWlmIChmZXRjaF9vYmplY3QoJ3Byb2dyZXNzXycgKyB2Ql9RdWlja0Vk aXRvci5wb3N0aWQpKQoJewoJCWZldGNoX29iamVjdCgncHJvZ3Jlc3NfJyArIHZC X1F1aWNrRWRpdG9yLnBvc3RpZCkuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKCX0K CWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ2F1dG8nOwoJdkJfUXVpY2tF ZGl0b3IucmVzdG9yZSh2Ql9RdWlja0VkaXRvci5vcmlnaW5hbGh0bWwsICdtZXNz YWdlb2JqJyk7Cn07CgovKioKKiBQYXNzIHRoZSBlZGl0cyBhbG9uZyB0byB0aGUg ZnVsbCBlZGl0cG9zdC5waHAgaW50ZXJmYWNlCioKKiBAcGFyYW0JZXZlbnQJRXZl bnQgb2JqZWN0CiovCnZCX0FKQVhfUXVpY2tFZGl0b3IucHJvdG90eXBlLmZ1bGxf ZWRpdCA9IGZ1bmN0aW9uKGUpCnsKCXZhciBmb3JtID0gbmV3IHZCX0hpZGRlbl9G b3JtKCdlZGl0cG9zdC5waHA/ZG89ZWRpdHBvc3QmcG9zdGlkPScgKyB2Ql9RdWlj a0VkaXRvci5wb3N0aWQpOwoKCWZvcm0uYWRkX3ZhcmlhYmxlKCdkbycsICd1cGRh dGVwb3N0Jyk7Cglmb3JtLmFkZF92YXJpYWJsZSgncycsIGZldGNoX3Nlc3Npb25o YXNoKCkpOwoJZm9ybS5hZGRfdmFyaWFibGUoJ3NlY3VyaXR5dG9rZW4nLCBTRUNV UklUWVRPS0VOKTsKCWZvcm0uYWRkX3ZhcmlhYmxlKCdhZHZhbmNlZCcsIDEpOwoJ Ly8gRG9uJ3QgcHJldmlldyAtIHNlZSBlZGl0cG9zdC5waHAgaWYgeW91IHdhbnQg dG8ga25vdyB3aHkKCS8vZm9ybS5hZGRfdmFyaWFibGUoJ3ByZXZpZXcnLCAnWWVz Jyk7Cglmb3JtLmFkZF92YXJpYWJsZSgncG9zdGlkJywgdkJfUXVpY2tFZGl0b3Iu cG9zdGlkKTsKCWZvcm0uYWRkX3ZhcmlhYmxlKCd3eXNpd3lnJywgdkJfRWRpdG9y W3ZCX1F1aWNrRWRpdG9yLmVkaXRvcmlkXS53eXNpd3lnX21vZGUpOwoJZm9ybS5h ZGRfdmFyaWFibGUoJ21lc3NhZ2UnLCB2Ql9FZGl0b3JbdkJfUXVpY2tFZGl0b3Iu ZWRpdG9yaWRdLmdldF9lZGl0b3JfY29udGVudHMoKSk7Cglmb3JtLmFkZF92YXJp YWJsZSgncmVhc29uJywgZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRv cmlkICsgJ19lZGl0X3JlYXNvbicpLnZhbHVlKTsKCglmb3JtLnN1Ym1pdF9mb3Jt KCk7Cn0KCi8qKgoqIFNhdmUgdGhlIGVkaXRlZCBwb3N0IHZpYSBBSkFYCioKKiBA cGFyYW0JZXZlbnQJRXZlbnQgb2JqZWN0CiovCnZCX0FKQVhfUXVpY2tFZGl0b3Iu cHJvdG90eXBlLnNhdmUgPSBmdW5jdGlvbihlKQp7Cgl2YXIgbmV3dGV4dCA9IHZC X0VkaXRvclt2Ql9RdWlja0VkaXRvci5lZGl0b3JpZF0uZ2V0X2VkaXRvcl9jb250 ZW50cygpOwoJdmFyIG5ld3JlYXNvbiA9IHZCX0VkaXRvclt2Ql9RdWlja0VkaXRv ci5lZGl0b3JpZF07CgoJaWYgKG5ld3RleHQgPT0gdkJfUXVpY2tFZGl0b3IudW5j aGFuZ2VkICYmIG5ld3JlYXNvbiA9PSB2Ql9RdWlja0VkaXRvci51bmNoYW5nZWRf cmVhc29uKQoJewoJCXZCX1F1aWNrRWRpdG9yLmFib3J0KGUpOwoJfQoJZWxzZQoJ ewoJCWZldGNoX29iamVjdCh2Ql9RdWlja0VkaXRvci5lZGl0b3JpZCArICdfcG9z dGluZ19tc2cnKS5zdHlsZS5kaXNwbGF5ID0gJyc7CgkJZG9jdW1lbnQuYm9keS5z dHlsZS5jdXJzb3IgPSAnd2FpdCc7CgoJCXBjX29iaiA9IGZldGNoX29iamVjdCgn cG9zdGNvdW50JyArIHZCX1F1aWNrRWRpdG9yLnBvc3RpZCk7CgkJdkJfUXVpY2tF ZGl0b3IuYWpheCA9IG5ldyB2Ql9BSkFYX0hhbmRsZXIodHJ1ZSk7CgkJdkJfUXVp Y2tFZGl0b3IuYWpheC5vbnJlYWR5c3RhdGVjaGFuZ2UodkJfUXVpY2tFZGl0b3Iu dXBkYXRlKTsKCQl2Ql9RdWlja0VkaXRvci5hamF4LnNlbmQoJ2VkaXRwb3N0LnBo cD9kbz11cGRhdGVwb3N0JnBvc3RpZD0nICsgdkJfUXVpY2tFZGl0b3IucG9zdGlk LAoJCQknZG89dXBkYXRlcG9zdCZhamF4PTEmcG9zdGlkPScKCQkJKyB2Ql9RdWlj a0VkaXRvci5wb3N0aWQKCQkJKyAnJnd5c2l3eWc9JyArIHZCX0VkaXRvclt2Ql9R dWlja0VkaXRvci5lZGl0b3JpZF0ud3lzaXd5Z19tb2RlCgkJCSsgJyZtZXNzYWdl PScgKyBQSFAudXJsZW5jb2RlKG5ld3RleHQpCgkJCSsgJyZyZWFzb249JyArIFBI UC51cmxlbmNvZGUoZmV0Y2hfb2JqZWN0KHZCX1F1aWNrRWRpdG9yLmVkaXRvcmlk ICsgJ19lZGl0X3JlYXNvbicpLnZhbHVlKQoJCQkrIChwY19vYmogIT0gbnVsbCA/ ICcmcG9zdGNvdW50PScgKyBQSFAudXJsZW5jb2RlKHBjX29iai5uYW1lKSA6ICcn KQoJCSk7CgoJCXZCX1F1aWNrRWRpdG9yLnBlbmRpbmcgPSB0cnVlOwoJfQp9OwoK LyoqCiogU2hvdyB0aGUgZGVsZXRlIGRpYWxvZwoqLwp2Ql9BSkFYX1F1aWNrRWRp dG9yLnByb3RvdHlwZS5zaG93X2RlbGV0ZSA9IGZ1bmN0aW9uKCkKewoJdkJfUXVp Y2tFZGl0b3IuZGVsZXRlZGlhbG9nID0gZmV0Y2hfb2JqZWN0KCdxdWlja2VkaXRf ZGVsZXRlJyk7CglpZiAodkJfUXVpY2tFZGl0b3IuZGVsZXRlZGlhbG9nICYmIHZC X1F1aWNrRWRpdG9yLmRlbGV0ZWRpYWxvZy5zdHlsZS5kaXNwbGF5ICE9ICcnKQoJ ewoJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZWRpYWxvZy5zdHlsZS5kaXNwbGF5ID0g Jyc7CgoJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZWJ1dHRvbiA9IGZldGNoX29iamVj dCgncXVpY2tlZGl0X2RvZGVsZXRlJyk7CgkJdkJfUXVpY2tFZGl0b3IuZGVsZXRl YnV0dG9uLm9uY2xpY2sgPSB2Ql9RdWlja0VkaXRvci5kZWxldGVfcG9zdDsKCgkJ aWYgKGZldGNoX29iamVjdCgnZGVsX3JlYXNvbicpKQoJCXsKCQkJZmV0Y2hfb2Jq ZWN0KCdkZWxfcmVhc29uJykub25rZXlwcmVzcyA9IHZCX0FKQVhfUXVpY2tFZGl0 b3JfRXZlbnRzLnByb3RvdHlwZS5kZWxldGVfaXRlbXNfa2V5X3RyYXA7CgkJfQoK CQkvLyBkb24ndCBkbyB0aGlzIHN0dWZmIGZvciBicm93c2VycyB0aGF0IGRvbid0 IGhhdmUgYW55IGRlZmluZWQgZXZlbnRzCgkJLy8gdG8gZGV0ZWN0IGNoYW5nZWQg cmFkaW8gYnV0dG9ucyB3aXRoIGtleWJvYXJkIG5hdmlnYXRpb24KCQlpZiAoIWlz X29wZXJhICYmICFpc19zYWYpCgkJewoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVi dXR0b24uZGlzYWJsZWQgPSB0cnVlOwoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVv cHRpb25zID0gbmV3IEFycmF5KCk7CgoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVv cHRpb25zWydsZWF2ZSddID0gZmV0Y2hfb2JqZWN0KCdyYl9kZWxfbGVhdmUnKTsK CQkJdkJfUXVpY2tFZGl0b3IuZGVsZXRlb3B0aW9uc1snc29mdCddID0gZmV0Y2hf b2JqZWN0KCdyYl9kZWxfc29mdCcpOwoJCQl2Ql9RdWlja0VkaXRvci5kZWxldGVv cHRpb25zWydoYXJkJ10gPSBmZXRjaF9vYmplY3QoJ3JiX2RlbF9oYXJkJyk7CgoJ CQlmb3IgKHZhciBpIGluIHZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnMpCgkJ CXsKCQkJCWlmICh2Ql9RdWlja0VkaXRvci5kZWxldGVvcHRpb25zW2ldKQoJCQkJ ewoJCQkJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnNbaV0ub25jbGljayA9 IHZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnNbaV0ub25jaGFuZ2UgPSB2Ql9B SkFYX1F1aWNrRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZGVsZXRlX2J1dHRvbl9o YW5kbGVyOwoJCQkJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZW9wdGlvbnNbaV0ub25r ZXlwcmVzcyA9IHZCX0FKQVhfUXVpY2tFZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5k ZWxldGVfaXRlbXNfa2V5X3RyYXA7CgkJCQl9CgkJCX0KCQl9Cgl9Cn07CgovKioK KiBSdW4gdGhlIGRlbGV0ZSBzeXN0ZW0KKi8KdkJfQUpBWF9RdWlja0VkaXRvci5w cm90b3R5cGUuZGVsZXRlX3Bvc3QgPSBmdW5jdGlvbigpCnsKCXZhciBkb250ZGVs ZXRlID0gZmV0Y2hfb2JqZWN0KCdyYl9kZWxfbGVhdmUnKTsKCWlmIChkb250ZGVs ZXRlICYmIGRvbnRkZWxldGUuY2hlY2tlZCkKCXsKCQl2Ql9RdWlja0VkaXRvci5h Ym9ydCgpOwoJCXJldHVybjsKCX0KCgl2YXIgZm9ybSA9IG5ldyB2Ql9IaWRkZW5f Rm9ybSgnZWRpdHBvc3QucGhwJyk7CgoJZm9ybS5hZGRfdmFyaWFibGUoJ2RvJywg J2RlbGV0ZXBvc3QnKTsKCWZvcm0uYWRkX3ZhcmlhYmxlKCdzJywgZmV0Y2hfc2Vz c2lvbmhhc2goKSk7Cglmb3JtLmFkZF92YXJpYWJsZSgnc2VjdXJpdHl0b2tlbics IFNFQ1VSSVRZVE9LRU4pOwoJZm9ybS5hZGRfdmFyaWFibGUoJ3Bvc3RpZCcsIHZC X1F1aWNrRWRpdG9yLnBvc3RpZCk7Cglmb3JtLmFkZF92YXJpYWJsZXNfZnJvbV9v YmplY3QodkJfUXVpY2tFZGl0b3IuZGVsZXRlZGlhbG9nKTsKCglmb3JtLnN1Ym1p dF9mb3JtKCk7Cn07CgovKioKKiBDaGVjayBmb3IgZXJyb3JzIGV0Yy4gYW5kIGlu aXRpYWxpemUgcmVzdG9yZSB3aGVuIEFKQVggc2F5cyBzYXZlKCkgaXMgY29tcGxl dGUKKgoqIEByZXR1cm4JYm9vbGVhbglmYWxzZQoqLwp2Ql9BSkFYX1F1aWNrRWRp dG9yLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbigpCnsKCXZhciBBSkFYID0g dkJfUXVpY2tFZGl0b3IuYWpheC5oYW5kbGVyOwoKCWlmIChBSkFYLnJlYWR5U3Rh dGUgPT0gNCAmJiBBSkFYLnN0YXR1cyA9PSAyMDApCgl7CgkJdkJfUXVpY2tFZGl0 b3IucGVuZGluZyA9IGZhbHNlOwoJCWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29y ID0gJ2F1dG8nOwoJCWZldGNoX29iamVjdCh2Ql9RdWlja0VkaXRvci5lZGl0b3Jp ZCArICdfcG9zdGluZ19tc2cnKS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwoKCQkv LyB0aGlzIGlzIHRoZSBuaWNlIGVycm9yIGhhbmRsZXIsIG9mIHdoaWNoIFNhZmFy aSBtYWtlcyBhIG1lc3MKCQlpZiAoZmV0Y2hfdGFnX2NvdW50KEFKQVgucmVzcG9u c2VYTUwsICdlcnJvcicpKQoJCXsKCQkJdmFyIGVycm9ycyA9IGZldGNoX3RhZ3Mo QUpBWC5yZXNwb25zZVhNTCwgJ2Vycm9yJyk7CgoJCQl2YXIgZXJyb3JfaHRtbCA9 ICc8b2w+JzsKCQkJZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBp KyspCgkJCXsKCQkJCWVycm9yX2h0bWwgKz0gJzxsaT4nICsgdkJfUXVpY2tFZGl0 b3IuYWpheC5mZXRjaF9kYXRhKGVycm9yc1tpXSkgKyAnPC9saT4nOwoJCQl9CgkJ CWVycm9yX2h0bWwgKz0gJzwvb2w+JzsKCgkJCXZCX1F1aWNrRWRpdG9yLnNob3df ZXJyb3JzKCc8b2w+JyArIGVycm9yX2h0bWwgKyAnPC9vbD4nKTsKCQl9CgkJZWxz ZQoJCXsKCQkJdkJfUXVpY2tFZGl0b3IucmVzdG9yZSh2Ql9RdWlja0VkaXRvci5h amF4LmZldGNoX2RhdGEoZmV0Y2hfdGFncyhBSkFYLnJlc3BvbnNlWE1MLCAncG9z dGJpdCcpWzBdKSwgJ3RhYmxlb2JqJyk7CgkJCVBvc3RCaXRfSW5pdChmZXRjaF9v YmplY3QoJ3Bvc3QnICsgdkJfUXVpY2tFZGl0b3IucG9zdGlkKSwgdkJfUXVpY2tF ZGl0b3IucG9zdGlkKTsKCQl9CgoJCWlmIChpc19pZSkKCQl7CgkJCUFKQVguYWJv cnQoKTsKCQl9Cgl9CgoJcmV0dXJuIGZhbHNlOwp9OwoKLyoqCiogUG9wIHVwIGEg d2luZG93IHNob3dpbmcgZXJyb3JzCioKKiBAcGFyYW0Jc3RyaW5nCUVycm9yIEhU TUwKKi8KdkJfQUpBWF9RdWlja0VkaXRvci5wcm90b3R5cGUuc2hvd19lcnJvcnMg PSBmdW5jdGlvbihlcnJvcnRleHQpCnsKCWZldGNoX29iamVjdCgnYWpheF9wb3N0 X2Vycm9yc19tZXNzYWdlJykuaW5uZXJIVE1MID0gZXJyb3J0ZXh0OwoJdmFyIGVy cm9ydGFibGUgPSBmZXRjaF9vYmplY3QoJ2FqYXhfcG9zdF9lcnJvcnMnKTsKCWVy cm9ydGFibGUuc3R5bGUud2lkdGggPSAnNDAwcHgnOwoJZXJyb3J0YWJsZS5zdHls ZS56SW5kZXggPSA1MDA7Cgl2YXIgbWVhc3VyZXIgPSAoaXNfc2FmID8gJ2JvZHkn IDogJ2RvY3VtZW50RWxlbWVudCcpOwoJZXJyb3J0YWJsZS5zdHlsZS5sZWZ0ID0g KGlzX2llID8gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIDog c2VsZi5pbm5lcldpZHRoKSAvIDIgLSAyMDAgKyBkb2N1bWVudFttZWFzdXJlcl0u c2Nyb2xsTGVmdCArICdweCc7CgllcnJvcnRhYmxlLnN0eWxlLnRvcCA9IChpc19p ZSA/IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgOiBzZWxm LmlubmVySGVpZ2h0KSAvIDIgLSAxNTAgKyBkb2N1bWVudFttZWFzdXJlcl0uc2Ny b2xsVG9wICsgJ3B4JzsKCWVycm9ydGFibGUuc3R5bGUuZGlzcGxheSA9ICcnOwp9 OwoKLyoqCiogSGlkZSB0aGUgZXJyb3Igd2luZG93CiovCnZCX0FKQVhfUXVpY2tF ZGl0b3IucHJvdG90eXBlLmhpZGVfZXJyb3JzID0gZnVuY3Rpb24oc2tpcF9mb2N1 c19jaGVjaykKewoJdGhpcy5lcnJvcnMgPSBmYWxzZTsKCWZldGNoX29iamVjdCgn YWpheF9wb3N0X2Vycm9ycycpLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CglpZiAo c2tpcF9mb2N1c19jaGVjayAhPSB0cnVlKQoJewoJCXZCX0VkaXRvclt0aGlzLmVk aXRvcmlkXS5jaGVja19mb2N1cygpOwoJfQp9OwoKLy8gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLy8gdkJfQUpBWF9RdWlja0VkaXRvciBFdmVudCBIYW5k bGVycwoKLyoqCiogQ2xhc3MgdG8gaGFuZGxlIHF1aWNrIGVkaXRvciBldmVudHMK Ki8KZnVuY3Rpb24gdkJfQUpBWF9RdWlja0VkaXRvcl9FdmVudHMoKQp7Cn0KCi8q KgoqIEhhbmRsZXMgY2xpY2tzIG9uIGVkaXQgYnV0dG9ucyBvZiBwb3N0Yml0cwoq Lwp2Ql9BSkFYX1F1aWNrRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZWRpdGJ1dHRv bl9jbGljayA9IGZ1bmN0aW9uKGUpCnsKCXJldHVybiB2Ql9RdWlja0VkaXRvci5l ZGl0KHRoaXMubmFtZSk7Cn07CgovKioKKiBIYW5kbGVzIG1hbmlwdWxhdGlvbiBv ZiBmb3JtIGVsZW1lbnRzIGluIHRoZSBkZWxldGUgc2VjdGlvbgoqLwp2Ql9BSkFY X1F1aWNrRWRpdG9yX0V2ZW50cy5wcm90b3R5cGUuZGVsZXRlX2J1dHRvbl9oYW5k bGVyID0gZnVuY3Rpb24oZSkKewoJaWYgKHRoaXMuaWQgPT0gJ3JiX2RlbF9sZWF2 ZScgJiYgdGhpcy5jaGVja2VkKQoJewoJCXZCX1F1aWNrRWRpdG9yLmRlbGV0ZWJ1 dHRvbi5kaXNhYmxlZCA9IHRydWU7Cgl9CgllbHNlCgl7CgkJdkJfUXVpY2tFZGl0 b3IuZGVsZXRlYnV0dG9uLmRpc2FibGVkID0gZmFsc2U7Cgl9Cn0KCi8qKgoqIEtl eSB0cmFwcGVyIGZvciByZWFzb24gYm94CiovCnZCX0FKQVhfUXVpY2tFZGl0b3Jf RXZlbnRzLnByb3RvdHlwZS5yZWFzb25fa2V5X3RyYXAgPSBmdW5jdGlvbihlKQp7 CgllID0gZSA/IGUgOiB3aW5kb3cuZXZlbnQ7CgoJc3dpdGNoIChlLmtleUNvZGUp Cgl7CgkJY2FzZSA5OiAvLyB0YWIKCQl7CgkJCWZldGNoX29iamVjdCh2Ql9RdWlj a0VkaXRvci5lZGl0b3JpZCArICdfc2F2ZScpLmZvY3VzKCk7CgkJCXJldHVybiBm YWxzZTsKCQl9CgkJYnJlYWs7CgoJCWNhc2UgMTM6IC8vIGVudGVyCgkJewoJCQl2 Ql9RdWlja0VkaXRvci5zYXZlKCk7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJYnJl YWs7CgoJCWRlZmF1bHQ6CgkJewoJCQlyZXR1cm4gdHJ1ZTsKCQl9Cgl9Cn0KCi8q KgoqIEtleSB0cmFwcGVyIGZvciByZWFzb24gYm94CiovCnZCX0FKQVhfUXVpY2tF ZGl0b3JfRXZlbnRzLnByb3RvdHlwZS5kZWxldGVfaXRlbXNfa2V5X3RyYXAgPSBm dW5jdGlvbihlKQp7CgllID0gZSA/IGUgOiB3aW5kb3cuZXZlbnQ7CgoJaWYgKGUu a2V5Q29kZSA9PSAxMykgLy8gZW50ZXIKCXsKCQlpZiAodkJfUXVpY2tFZGl0b3Iu ZGVsZXRlYnV0dG9uLmRpc2FibGVkID09IGZhbHNlKQoJCXsKCQkJdkJfUXVpY2tF ZGl0b3IuZGVsZXRlX3Bvc3QoKTsKCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoKCXJl dHVybiB0cnVlOwp9CgovLyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwov LyBpbml0aWFsaXplIHRoZSBlZGl0b3IgY2xhc3MKCnZhciB2Ql9RdWlja0VkaXRv ciA9IG5ldyB2Ql9BSkFYX1F1aWNrRWRpdG9yKCk7CgovKj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0qXAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwp8fCAjIERvd25sb2Fk ZWQ6IDA1OjUyLCBUdWUgSnVuIDI0dGggMjAwOAp8fCAjIENWUzogJFJDU2ZpbGUk IC0gJFJldmlzaW9uOiAyNjQ0NiAkCnx8ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjClwq PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PSov ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=vbulletin_quick_reply.js Content-Type: application/x-javascript; name=vbulletin_quick_reply.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_quick_reply.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwNCnx8ICMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIHx8DQp8fCAjIHZCdWxsZXRpbiAzLjYuMTAgUGF0Y2ggTGV2ZWwgMg0KfHwg IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tICMgfHwNCnx8ICMgQ29weXJpZ2h0IKkyMDAwLTIw MDggSmVsc29mdCBFbnRlcnByaXNlcyBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQu IHx8DQp8fCAjIFRoaXMgZmlsZSBtYXkgbm90IGJlIHJlZGlzdHJpYnV0ZWQgaW4g d2hvbGUgb3Igc2lnbmlmaWNhbnQgcGFydC4gIyB8fA0KfHwgIyAtLS0tLS0tLS0t LS0tLS0tIFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0t LS0tLS0tICMgfHwNCnx8ICMgaHR0cDovL3d3dy52YnVsbGV0aW4uY29tIHwgaHR0 cDovL3d3dy52YnVsbGV0aW4uY29tL2xpY2Vuc2UuaHRtbCAjIHx8DQp8fCAjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyB8fA0KXCo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8N Cg0KdmFyIHFyX3JlcG9zdCA9IGZhbHNlOw0KdmFyIHFyX2Vycm9yc19zaG93biA9 IGZhbHNlOw0KdmFyIHFyX2FjdGl2ZSA9IGZhbHNlOw0KdmFyIHFyX3Bvc3Rpbmcg PSAwOw0KdmFyIGNsaWNrZWRlbG0gPSBmYWxzZTsNCg0KLyoqDQoqIEluaXRpYWxp emVzIHRoZSBxdWljayByZXBseSBzeXN0ZW0NCiovDQpmdW5jdGlvbiBxcl9pbml0 KCkNCnsNCglxcl9kaXNhYmxlX2NvbnRyb2xzKCk7DQoJcXJfaW5pdF9idXR0b25z KGZldGNoX29iamVjdCgncG9zdHMnKSk7DQp9DQoNCi8qKg0KKiBTdGVwcyB0aHJv dWdoIHRoZSBnaXZlbiBvYmplY3QgYWN0aXZhdGluZyBhbGwgcXVpY2sgcmVwbHkg YnV0dG9ucyBpdCBmaW5kcw0KKg0KKiBAcGFyYW0Jb2JqZWN0CUhUTUwgb2JqZWN0 IHRvIHNlYXJjaA0KKi8NCmZ1bmN0aW9uIHFyX2luaXRfYnV0dG9ucyhvYmopDQp7 DQoJdmFyIGFuY2hvcnMgPSBmZXRjaF90YWdzKG9iaiwgJ2EnKTsNCglmb3IgKHZh ciBpID0gMDsgaSA8IGFuY2hvcnMubGVuZ3RoOyBpKyspDQoJew0KCQlpZiAoYW5j aG9yc1tpXS5pZCAmJiBhbmNob3JzW2ldLmlkLnN1YnN0cigwLCAzKSA9PSAncXJf JykNCgkJew0KCQkJYW5jaG9yc1tpXS5vbmNsaWNrID0gZnVuY3Rpb24oZSkgeyBy ZXR1cm4gcXJfYWN0aXZhdGUodGhpcy5pZC5zdWJzdHIoMykpOyB9Ow0KCQl9DQoJ fQ0KfQ0KDQovKioNCiogRGlzYWJsZXMgdGhlIGNvbnRyb2xzIGluIHRoZSBxdWlj ayByZXBseSBzeXN0ZW0NCiovDQpmdW5jdGlvbiBxcl9kaXNhYmxlX2NvbnRyb2xz KCkNCnsNCglpZiAocmVxdWlyZV9jbGljaykNCgl7DQoJCWZldGNoX29iamVjdCgn cXJfcG9zdGlkJykudmFsdWUgPSAwOw0KDQoJCXZCX0VkaXRvcltRUl9FZGl0b3JJ RF0uZGlzYWJsZV9lZGl0b3IodmJwaHJhc2VbJ2NsaWNrX3F1aWNrX3JlcGx5X2lj b24nXSk7DQoNCgkJdmFyIHFyX3NpZyA9IGZldGNoX29iamVjdCgnY2Jfc2lnbmF0 dXJlJyk7DQoJCWlmIChxcl9zaWcgIT0gbnVsbCkNCgkJew0KCQkJcXJfc2lnLmRp c2FibGVkID0gdHJ1ZTsNCgkJfQ0KDQoJCWFjdGl2ZSA9IGZhbHNlOw0KCQlxcl9h Y3RpdmUgPSBmYWxzZTsNCgl9DQoJZWxzZQ0KCXsNCgkJdkJfRWRpdG9yW1FSX0Vk aXRvcklEXS53cml0ZV9lZGl0b3JfY29udGVudHMoJycpOw0KCQlxcl9hY3RpdmUg PSB0cnVlOw0KCX0NCg0KCWlmICh0aHJlYWRlZF9tb2RlICE9IDEpDQoJew0KCQlm ZXRjaF9vYmplY3QoJ3FyX3F1aWNrcmVwbHknKS5kaXNhYmxlZCA9IHRydWU7DQoJ fQ0KDQp9DQoNCi8qKg0KKiBBY3RpdmF0ZXMgdGhlIGNvbnRyb2xzIGluIHRoZSBx dWljayByZXBseSBzeXN0ZW0NCioNCiogQHBhcmFtCWludGVnZXIJUG9zdCBJRCBv ZiB0aGUgcG9zdCB0byB3aGljaCB3ZSBhcmUgcmVwbHlpbmcNCioNCiogQHJldHVy bglib29sZWFuCWZhbHNlDQoqLw0KZnVuY3Rpb24gcXJfYWN0aXZhdGUocG9zdGlk KQ0Kew0KCXZhciBxcl9jb2xsYXBzZSA9IGZldGNoX29iamVjdCgnY29sbGFwc2Vv YmpfcXVpY2tyZXBseScpOw0KCWlmIChxcl9jb2xsYXBzZSAmJiBxcl9jb2xsYXBz ZS5zdHlsZS5kaXNwbGF5ID09ICJub25lIikNCgl7DQoJCXRvZ2dsZV9jb2xsYXBz ZSgncXVpY2tyZXBseScpOw0KCX0NCg0KCWZldGNoX29iamVjdCgncXJfcG9zdGlk JykudmFsdWUgPSBwb3N0aWQ7DQoJZmV0Y2hfb2JqZWN0KCdxcl9wcmV2aWV3Jyku c2VsZWN0KCk7DQoJZmV0Y2hfb2JqZWN0KCdxcl9xdWlja3JlcGx5JykuZGlzYWJs ZWQgPSBmYWxzZTsNCg0KCXZhciBxcl9zaWcgPSBmZXRjaF9vYmplY3QoImNiX3Np Z25hdHVyZSIpOw0KCWlmIChxcl9zaWcpDQoJew0KCQlxcl9zaWcuZGlzYWJsZWQg PSBmYWxzZTsNCgkJLy8gV29ya2Fyb3VuZCBmb3IgMy41IEJ1ZyAjIDE2MTg6IFNl dCBjaGVja2VkIGFzIEZpcmVmb3ggPCAxLjUgImZvcmdldHMiIHRoYXQgd2hlbiBj aGVja2JveCBpcyBkaXNhYmxlZCB2aWEgSlMNCgkJcXJfc2lnLmNoZWNrZWQgPSB0 cnVlOw0KCX0NCg0KCWlmIChxcl9hY3RpdmUgPT0gZmFsc2UpDQoJew0KCQl2Ql9F ZGl0b3JbUVJfRWRpdG9ySURdLmVuYWJsZV9lZGl0b3IoJycpOw0KCX0NCg0KCWlm ICghaXNfaWUgJiYgdkJfRWRpdG9yW1FSX0VkaXRvcklEXS53eXNpd3lnX21vZGUp DQoJew0KCQlmZXRjaF9vYmplY3QoJ3FyX3Njcm9sbCcpLnNjcm9sbEludG9WaWV3 KGZhbHNlKTsNCgl9DQoNCgl2Ql9FZGl0b3JbUVJfRWRpdG9ySURdLmNoZWNrX2Zv Y3VzKCk7DQoNCglxcl9hY3RpdmUgPSB0cnVlOw0KDQoJcmV0dXJuIGZhbHNlOw0K fQ0KDQovKioNCiogQ2hlY2tzIHRoZSBjb250ZW50cyBvZiB0aGUgbmV3IHJlcGx5 IGFuZCBkZWNpZGVzIHdoZXRoZXIgb3Igbm90IHRvIGFsbG93IGl0IHRocm91Z2gN CioNCiogQHBhcmFtCW9iamVjdAk8Zm9ybT4gb2JqZWN0IGNvbnRhaW5pbmcgcXVp Y2sgcmVwbHkNCiogQHBhcmFtCWludGVnZXIJTWluaW11bSBhbGxvd2VkIGNoYXJh Y3RlcnMgaW4gbWVzc2FnZQ0KKg0KKiBAcmV0dXJuCWJvb2xlYW4NCiovDQpmdW5j dGlvbiBxcl9wcmVwYXJlX3N1Ym1pdChmb3Jtb2JqLCBtaW5jaGFycykNCnsNCglp ZiAocXJfcmVwb3N0ID09IHRydWUpDQoJew0KCQlyZXR1cm4gdHJ1ZTsNCgl9DQoN CglpZiAoIWFsbG93X2FqYXhfcXIgfHwgIUFKQVhfQ29tcGF0aWJsZSkNCgl7DQoJ CS8vIG5vdCBsYXN0IHBhZ2UsIG9yIHRocmVhZGVkIG1vZGUgLSBkbyBub3QgYXR0 ZW1wdCB0byB1c2UgQUpBWA0KCQlyZXR1cm4gcXJfY2hlY2tfZGF0YShmb3Jtb2Jq LCBtaW5jaGFycyk7DQoJfQ0KCWVsc2UgaWYgKHFyX2NoZWNrX2RhdGEoZm9ybW9i aiwgbWluY2hhcnMpKQ0KCXsNCgkJdmFyIHRlc3RfYWpheCA9IG5ldyB2Ql9BSkFY X0hhbmRsZXIodHJ1ZSk7DQoJCWlmICghdGVzdF9hamF4LmluaXQoKSB8fCAodHlw ZW9mIHZiX2Rpc2FibGVfYWpheCAhPSAndW5kZWZpbmVkJyAmJiB2Yl9kaXNhYmxl X2FqYXggPiAwKSkNCgkJew0KCQkJLy8gY291bGRuJ3QgaW5pdGlhbGl6ZSwgcmV0 dXJuIHRydWUgdG8gYWxsb3cgY2xpY2sgdG8gZ28gdGhyb3VnaA0KCQkJcmV0dXJu IHRydWU7DQoJCX0NCg0KCQlpZiAoaXNfaWUgJiYgdXNlckFnZW50LmluZGV4T2Yo J21zaWUgNS4nKSAhPSAtMSkNCgkJew0KCQkJLy8gSUUgNSBoYXMgcHJvYmxlbXMg d2l0aCBub24tQVNDSUkgY2hhcmFjdGVycyBiZWluZyByZXR1cm5lZCBieQ0KCQkJ Ly8gQUpBWC4gRG9uJ3QgdW5pdmVyc2FsbHkgZGlzYWJsZSBpdCwgYnV0IGlmIHdl J3JlIGdvaW5nIHRvIGJlIHNlbmRpbmcNCgkJCS8vIG5vbi1BU0NJSSwgbGV0J3Mg bm90IHVzZSBBSkFYLg0KCQkJaWYgKFBIUC51cmxlbmNvZGUoZm9ybW9iai5tZXNz YWdlLnZhbHVlKS5pbmRleE9mKCcldScpICE9IC0xKQ0KCQkJew0KCQkJCXJldHVy biB0cnVlOw0KCQkJfQ0KCQl9DQoNCgkJaWYgKHFyX3Bvc3RpbmcgPT0gMSkNCgkJ ew0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcXJfcG9z dGluZyA9IDE7DQoJCQlzZXRUaW1lb3V0KCJxcl9wb3N0aW5nID0gMCIsIDEwMDAp Ow0KCQl9DQoNCgkJaWYgKGNsaWNrZWRlbG0gPT0gZm9ybW9iai5wcmV2aWV3LnZh bHVlKQ0KCQl7DQoJCQlyZXR1cm4gdHJ1ZTsNCgkJfQ0KCQllbHNlDQoJCXsNCgkJ CXZhciBzdWJtaXRzdHJpbmcgPSAnYWpheD0xJzsNCgkJCWlmICh0eXBlb2YgYWph eF9sYXN0X3Bvc3QgIT0gJ3VuZGVmaW5lZCcpDQoJCQl7DQoJCQkJc3VibWl0c3Ry aW5nICs9ICcmYWpheF9sYXN0cG9zdD0nICsgUEhQLnVybGVuY29kZShhamF4X2xh c3RfcG9zdCk7DQoJCQl9DQoNCgkJCWZvciAoaSA9IDA7IGkgPCBmb3Jtb2JqLmVs ZW1lbnRzLmxlbmd0aDsgaSsrKQ0KCQkJew0KCQkJCXZhciBvYmogPSBmb3Jtb2Jq LmVsZW1lbnRzW2ldOw0KDQoJCQkJaWYgKG9iai5uYW1lICYmICFvYmouZGlzYWJs ZWQpDQoJCQkJew0KCQkJCQlzd2l0Y2ggKG9iai50eXBlKQ0KCQkJCQl7DQoJCQkJ CQljYXNlICd0ZXh0JzoNCgkJCQkJCWNhc2UgJ3RleHRhcmVhJzoNCgkJCQkJCWNh c2UgJ2hpZGRlbic6DQoJCQkJCQkJc3VibWl0c3RyaW5nICs9ICcmJyArIG9iai5u YW1lICsgJz0nICsgUEhQLnVybGVuY29kZShvYmoudmFsdWUpOw0KCQkJCQkJCWJy ZWFrOw0KCQkJCQkJY2FzZSAnY2hlY2tib3gnOg0KCQkJCQkJY2FzZSAncmFkaW8n Og0KCQkJCQkJCXN1Ym1pdHN0cmluZyArPSBvYmouY2hlY2tlZCA/ICcmJyArIG9i ai5uYW1lICsgJz0nICsgUEhQLnVybGVuY29kZShvYmoudmFsdWUpIDogJyc7DQoJ CQkJCQkJYnJlYWs7DQoJCQkJCQljYXNlICdzZWxlY3Qtb25lJzoNCgkJCQkJCQlz dWJtaXRzdHJpbmcgKz0gJyYnICsgb2JqLm5hbWUgKyAnPScgKyBQSFAudXJsZW5j b2RlKG9iai5vcHRpb25zW29iai5zZWxlY3RlZEluZGV4XS52YWx1ZSk7DQoJCQkJ CQkJYnJlYWs7DQoJCQkJCQljYXNlICdzZWxlY3QtbXVsdGlwbGUnOg0KCQkJCQkJ CWZvciAodmFyIGogPSAwOyBqIDwgb2JqLm9wdGlvbnMubGVuZ3RoOyBqKyspDQoJ CQkJCQkJew0KCQkJCQkJCQlzdWJtaXRzdHJpbmcgKz0gKG9iai5vcHRpb25zW2pd LnNlbGVjdGVkID8gJyYnICsgb2JqLm5hbWUgKyAnPScgKyBQSFAudXJsZW5jb2Rl KG9iai5vcHRpb25zW2pdLnZhbHVlKSA6ICcnKTsNCgkJCQkJCQl9DQoJCQkJCQkJ YnJlYWs7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoNCgkJCWZldGNoX29iamVjdCgn cXJfcG9zdGluZ19tc2cnKS5zdHlsZS5kaXNwbGF5ID0gJyc7DQoJCQlkb2N1bWVu dC5ib2R5LnN0eWxlLmN1cnNvciA9ICd3YWl0JzsNCg0KCQkJcXJfYWpheF9wb3N0 KGZvcm1vYmouYWN0aW9uLCBzdWJtaXRzdHJpbmcpOw0KCQkJcmV0dXJuIGZhbHNl Ow0KCQl9DQoJfQ0KCWVsc2UNCgl7DQoJCXJldHVybiBmYWxzZTsNCgl9DQp9DQoN Ci8qKg0KKiBXb3JrcyB3aXRoIGZvcm0gZGF0YSB0byBkZWNpZGUgd2hhdCB0byBk bw0KKg0KKiBAcGFyYW0Jb2JqZWN0CTxmb3JtPiBvYmplY3QgY29udGFpbmluZyBx dWljayByZXBseQ0KKiBAcGFyYW0JaW50ZWdlcglNaW5pbXVtIGFsbG93ZWQgY2hh cmFjdGVycyBpbiBtZXNzYWdlDQoqDQoqIEByZXR1cm4JYm9vbGVhbg0KKi8NCmZ1 bmN0aW9uIHFyX2NoZWNrX2RhdGEoZm9ybW9iaiwgbWluY2hhcnMpDQp7DQoJc3dp dGNoIChmZXRjaF9vYmplY3QoJ3FyX3Bvc3RpZCcpLnZhbHVlKQ0KCXsNCgkJY2Fz ZSAnMCc6DQoJCXsNCgkJCWFsZXJ0KHZicGhyYXNlWydjbGlja19xdWlja19yZXBs eV9pY29uJ10pOw0KCQkJcmV0dXJuIGZhbHNlOw0KCQl9DQoNCgkJY2FzZSAnd2hv IGNhcmVzJzoNCgkJew0KCQkJaWYgKHR5cGVvZiBmb3Jtb2JqLnF1aWNrcmVwbHkg IT0gJ3VuZGVmaW5lZCcpDQoJCQl7DQoJCQkJZm9ybW9iai5xdWlja3JlcGx5LmNo ZWNrZWQgPSBmYWxzZTsNCgkJCX0NCgkJCWJyZWFrOw0KCQl9DQoJfQ0KDQoJaWYg KGNsaWNrZWRlbG0gPT0gZm9ybW9iai5wcmV2aWV3LnZhbHVlKQ0KCXsNCgkJbWlu Y2hhcnMgPSAwOw0KCX0NCg0KCXJldHVybiB2Ql9FZGl0b3JbUVJfRWRpdG9ySURd LnByZXBhcmVfc3VibWl0KDAsIG1pbmNoYXJzKTsNCn0NCg0KLyoqDQoqIFNlbmRz IHF1aWNrIHJlcGx5IGRhdGEgdG8gbmV3cmVwbHkucGhwIHZpYSBBSkFYDQoqDQoq IEBwYXJhbQlzdHJpbmcJR0VUIHN0cmluZyBmb3IgYWN0aW9uIChuZXdyZXBseS5w aHApDQoqIEBwYXJhbQlzdHJpbmcJU3RyaW5nIHJlcHJlc2VudGluZyBmb3JtIGRh dGEgKCd4PTEmeT0yJno9MycgZXRjLikNCiovDQpmdW5jdGlvbiBxcl9hamF4X3Bv c3Qoc3VibWl0YWN0aW9uLCBzdWJtaXRzdHJpbmcpDQp7DQoJcXJfcmVwb3N0ID0g ZmFsc2U7DQoJeG1sID0gbmV3IHZCX0FKQVhfSGFuZGxlcih0cnVlKTsNCgl4bWwu b25yZWFkeXN0YXRlY2hhbmdlKHFyX2RvX2FqYXhfcG9zdCk7DQoJeG1sLnNlbmQo c3VibWl0YWN0aW9uLCBzdWJtaXRzdHJpbmcpOw0KfQ0KDQovKioNCiogSGFuZGxl cyBxdWljayByZXBseSBkYXRhIHdoZW4gQUpBWCBzYXlzIHFyX2FqYXhfcG9zdCgp IGlzIGNvbXBsZXRlDQoqLw0KZnVuY3Rpb24gcXJfZG9fYWpheF9wb3N0KCkNCnsN CglpZiAoeG1sLmhhbmRsZXIucmVhZHlTdGF0ZSA9PSA0ICYmIHhtbC5oYW5kbGVy LnN0YXR1cyA9PSAyMDApDQoJew0KCQlpZiAoeG1sLmhhbmRsZXIucmVzcG9uc2VY TUwpDQoJCXsNCgkJCWRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gJ2F1dG8n Ow0KCQkJZmV0Y2hfb2JqZWN0KCdxcl9wb3N0aW5nX21zZycpLnN0eWxlLmRpc3Bs YXkgPSAnbm9uZSc7DQoJCQlxcl9wb3N0aW5nID0gMDsNCg0KCQkJaWYgKGZldGNo X3RhZ19jb3VudCh4bWwuaGFuZGxlci5yZXNwb25zZVhNTCwgJ3Bvc3RiaXQnKSkN CgkJCXsNCgkJCQlhamF4X2xhc3RfcG9zdCA9IHhtbC5mZXRjaF9kYXRhKGZldGNo X3RhZ3MoeG1sLmhhbmRsZXIucmVzcG9uc2VYTUwsICd0aW1lJylbMF0pOw0KCQkJ CXFyX2Rpc2FibGVfY29udHJvbHMoKTsNCgkJCQlxcl9oaWRlX2Vycm9ycygpOw0K DQoJCQkJdmFyIHBvc3RiaXRzID0gZmV0Y2hfdGFncyh4bWwuaGFuZGxlci5yZXNw b25zZVhNTCwgJ3Bvc3RiaXQnKTsNCgkJCQlmb3IgKHZhciBpID0gMDsgaSA8IHBv c3RiaXRzLmxlbmd0aDsgaSsrKQ0KCQkJCXsNCgkJCQkJdmFyIG5ld2RpdiA9IGRv Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOw0KCQkJCQluZXdkaXYuaW5uZXJI VE1MID0geG1sLmZldGNoX2RhdGEocG9zdGJpdHNbaV0pOw0KCQkJCQl2YXIgbHAg PSBmZXRjaF9vYmplY3QoJ2xhc3Rwb3N0Jyk7DQoJCQkJCXZhciBscHBhcmVudCA9 IGxwLnBhcmVudE5vZGU7DQoJCQkJCXZhciBwb3N0Yml0ID0gbHBwYXJlbnQuaW5z ZXJ0QmVmb3JlKG5ld2RpdiwgbHApOw0KDQoJCQkJCVBvc3RCaXRfSW5pdChwb3N0 Yml0LCBwb3N0Yml0c1tpXS5nZXRBdHRyaWJ1dGUoJ3Bvc3RpZCcpKTsNCgkJCQl9 DQoNCgkJCQkvLyB1bmZvY3VzIHRoZSBxcl9zdWJtaXQgYnV0dG9uIHRvIHByZXZl bnQgYSBzcGFjZSBmcm9tIHJlc3VibWl0dGluZw0KCQkJCWlmIChmZXRjaF9vYmpl Y3QoJ3FyX3N1Ym1pdCcpKQ0KCQkJCXsNCgkJCQkJZmV0Y2hfb2JqZWN0KCdxcl9z dWJtaXQnKS5ibHVyKCk7DQoJCQkJfQ0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJ CWlmICghaXNfc2FmKQ0KCQkJCXsNCgkJCQkJLy8gdGhpcyBpcyB0aGUgbmljZSBl cnJvciBoYW5kbGVyLCBvZiB3aGljaCBTYWZhcmkgbWFrZXMgYSBtZXNzDQoJCQkJ CXZhciBlcnJvcnMgPSBmZXRjaF90YWdzKHhtbC5oYW5kbGVyLnJlc3BvbnNlWE1M LCAnZXJyb3InKTsNCg0KCQkJCQl2YXIgZXJyb3JfaHRtbCA9ICc8b2w+JzsNCgkJ CQkJZm9yICh2YXIgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyBpKyspDQoJCQkJ CXsNCgkJCQkJCWVycm9yX2h0bWwgKz0gJzxsaT4nICsgeG1sLmZldGNoX2RhdGEo ZXJyb3JzW2ldKSArICc8L2xpPic7DQoJCQkJCX0NCgkJCQkJZXJyb3JfaHRtbCAr PSAnPC9vbD4nOw0KDQoJCQkJCXFyX3Nob3dfZXJyb3JzKCc8b2w+JyArIGVycm9y X2h0bWwgKyAnPC9vbD4nKTsNCg0KCQkJCQlpZiAoaXNfaWUpDQoJCQkJCXsNCgkJ CQkJCXhtbC5oYW5kbGVyLmFib3J0KCk7DQoJCQkJCX0NCg0KCQkJCQlyZXR1cm4g ZmFsc2U7DQoJCQkJfQ0KDQoJCQkJLy8gdGhpcyBpcyB0aGUgbm90IHNvIG5pY2Ug ZXJyb3IgaGFuZGxlciwgd2hpY2ggaXMgYSBmYWxsYmFjayBpbiBjYXNlIHRoZSBw cmV2aW91cyBvbmUgZG9lc24ndCB3b3JrDQoNCgkJCQlxcl9yZXBvc3QgPSB0cnVl Ow0KCQkJCWZldGNoX29iamVjdCgncXJmb3JtJykuc3VibWl0KCk7DQoJCQl9DQoJ CX0NCgkJZWxzZQ0KCQl7DQoJCQlxcl9yZXBvc3QgPSB0cnVlOw0KCQkJZmV0Y2hf b2JqZWN0KCdxcmZvcm0nKS5zdWJtaXQoKTsNCgkJfQ0KDQoJCWlmIChpc19pZSkN CgkJew0KCQkJLy8gaW4gbXkgdGVzdHMsIEZGIGZyZWFrcyBvdXQgaWYgSSBkbyB0 aGlzIGFib3J0IGNhbGwgaGVyZS4uLg0KCQkJLy8gaG93ZXZlciwgaXQgc2VlbXMg dG8gYmUgbmVjZXNzYXJ5IChpbiBsb2NhbCB0ZXN0cykgZm9yIElFDQoJCQl4bWwu aGFuZGxlci5hYm9ydCgpOw0KCQl9DQoJfQ0KfQ0KDQovKioNCiogVW4taGlkZXMg dGhlIHF1aWNrIHJlcGx5IGVycm9ycyBlbGVtZW50DQoqDQoqIEBwYXJhbQlzdHJp bmcJRXJyb3IocykgdG8gc2hvdw0KKg0KKiBAcmV0dXJuCWJvb2xlYW4JZmFsc2UN CiovDQpmdW5jdGlvbiBxcl9zaG93X2Vycm9ycyhlcnJvcnRleHQpDQp7DQoJcXJf ZXJyb3JzX3Nob3duID0gdHJ1ZTsNCglmZXRjaF9vYmplY3QoJ3FyX2Vycm9yX3Rk JykuaW5uZXJIVE1MID0gZXJyb3J0ZXh0Ow0KCWZldGNoX29iamVjdCgncXJfZXJy b3JfdGJvZHknKS5zdHlsZS5kaXNwbGF5ID0gJyc7DQoJdkJfRWRpdG9yW1FSX0Vk aXRvcklEXS5jaGVja19mb2N1cygpOw0KCXJldHVybiBmYWxzZTsNCn0NCg0KLyoq DQoqIEhpZGVzIHRoZSBxdWljayByZXBseSBlcnJvcnMgZWxlbWVudA0KKg0KKiBA cmV0dXJuCWJvb2xlYW4JZmFsc2UNCiovDQpmdW5jdGlvbiBxcl9oaWRlX2Vycm9y cygpDQp7DQoJaWYgKHFyX2Vycm9yc19zaG93bikNCgl7DQoJCXFyX2Vycm9yc19z aG93biA9IHRydWU7DQoJCWZldGNoX29iamVjdCgncXJfZXJyb3JfdGJvZHknKS5z dHlsZS5kaXNwbGF5ID0gJ25vbmUnOw0KCQlyZXR1cm4gZmFsc2U7DQoJfQ0KfQ0K DQp2YXIgdkJfUXVpY2tSZXBseSA9IHRydWU7DQoNCi8qPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PSpcDQp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KfHwgIyBEb3dubG9h ZGVkOiAwNTo1MiwgVHVlIEp1biAyNHRoIDIwMDgNCnx8ICMgQ1ZTOiAkUkNTZmls ZSQgLSAkUmV2aXNpb246IDI0Mjc2ICQNCnx8ICMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj DQpcKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0qLw0KLy8g1ujy4PLgIOL75OXr5e3t 7uPuIPLl6vHy4CDoIO3o6iDiIO7y4uXyIC0gzeD34OvuDQpmdW5jdGlvbiBJbnNl cnQobmlja25hbWUsIHRleHQsIHBvc3RuYikNCnsNCiAgaWYgKHRleHQhPSIiKQ0K ICAgIHBhc3RlKCJbcXVvdGU9IituaWNrbmFtZSsiOyIrcG9zdG5iKyJdIit0ZXh0 KyJbL3F1b3RlXVxuIiwgMCk7DQogICAgZG9jdW1lbnQudmJmb3JtLm1lc3NhZ2Uu Zm9jdXMoKTsNCn0NCmZ1bmN0aW9uIHBhc3RlKHRleHQpDQp7DQogIHZCX0VkaXRv cltRUl9FZGl0b3JJRF0uY2hlY2tfZm9jdXMoKTsNCiAgdmFyIG90ID0gdkJfRWRp dG9yW1FSX0VkaXRvcklEXS5nZXRfZWRpdG9yX2NvbnRlbnRzKCk7DQogIGlmKG90 ICE9ICcnICYmIG90ICE9ICc8UD48L1A+JyAmJiBvdCAhPSAnPFA+Jm5ic3A7PC9Q PicgJiYgb3QgIT0gJzxCUiAvPicpDQogIHsNCiAgICBvdCArPSAodkJfRWRpdG9y W1FSX0VkaXRvcklEXS53eXNpd3lnX21vZGU/Jzxicj4nOidcbicpOw0KICB9DQog IGlmKG90ID09ICc8UD4mbmJzcDs8L1A+JykNCiAgew0KICAgIG90ID0gJyc7DQog IH0NCiAgdkJfRWRpdG9yW1FSX0VkaXRvcklEXS53cml0ZV9lZGl0b3JfY29udGVu dHMob3QgKyB0ZXh0LCBmYWxzZSk7DQp9DQpmdW5jdGlvbiBnZXRfc2VsZWN0aW9u KCkNCnsNCiAgaWYgKGRvY3VtZW50LmdldFNlbGVjdGlvbikNCiAgew0KICAgIHNl bGVjdGlvbiA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigpOw0KICAgIHNlbGVjdGlv biA9IHNlbGVjdGlvbi5yZXBsYWNlKC9cclxuXHJcbi9naSwgIl9kb3VibGVjYXJl dF8iKTsNCiAgICBzZWxlY3Rpb24gPSBzZWxlY3Rpb24ucmVwbGFjZSgvXHJcbi9n aSwgIiAiKTsNCiAgICB3aGlsZSAoc2VsZWN0aW9uLmluZGV4T2YoIiAgIikgIT0t MSkgc2VsZWN0aW9uID0gc2VsZWN0aW9uLnJlcGxhY2UoLyAgL2dpLCAiIik7DQog ICAgc2VsZWN0aW9uID0gc2VsZWN0aW9uLnJlcGxhY2UoL19kb3VibGVjYXJldF8v Z2ksICJcclxuXHJcbiIpOw0KICB9DQogIGVsc2UNCiAgICBzZWxlY3Rpb24gPSBk b2N1bWVudC5zZWxlY3Rpb24uY3JlYXRlUmFuZ2UoKS50ZXh0Ow0KfQ0KZnVuY3Rp b24gY2F0Y2hTZWxlY3Rpb24oKQ0Kew0KICBpZiAod2luZG93LmdldFNlbGVjdGlv bikNCiAgew0KICAgIHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKS50 b1N0cmluZygpOw0KICB9DQogIGVsc2UgaWYgKGRvY3VtZW50LmdldFNlbGVjdGlv bikNCiAgew0KICAgIHNlbGVjdGlvbiA9IGRvY3VtZW50LmdldFNlbGVjdGlvbigp Ow0KICB9DQogIGVsc2UgaWYgKGRvY3VtZW50LnNlbGVjdGlvbikNCiAgew0KICAg IHNlbGVjdGlvbiA9IGRvY3VtZW50LnNlbGVjdGlvbi5jcmVhdGVSYW5nZSgpLnRl eHQ7DQogIH0NCn0NCmZ1bmN0aW9uIGluc2VydG5pY2sobmlja25hbWUpDQp7DQog IHZhciBvdCA9IHZCX0VkaXRvcltRUl9FZGl0b3JJRF0uZ2V0X2VkaXRvcl9jb250 ZW50cygpOw0KICBpZihvdCAhPSAnJyAmJiBvdCAhPSAnPFA+PC9QPicgJiYgb3Qg IT0gJzxQPiZuYnNwOzwvUD4nICYmIG90ICE9ICc8QlIgLz4nKQ0KICB7DQogICAg b3QgKz0gKHZCX0VkaXRvcltRUl9FZGl0b3JJRF0ud3lzaXd5Z19tb2RlPyc8YnI+ JzonXG4nKTsNCiAgfQ0KICBpZihvdCA9PSAnPFA+Jm5ic3A7PC9QPicpDQogIHsN CiAgICBvdCA9ICcnOw0KICB9DQogIG90ICs9IHZCX0VkaXRvcltRUl9FZGl0b3JJ RF0ud3lzaXd5Z19tb2RlPyc8Yj4nICsgbmlja25hbWUgKyAnPC9iPiwgJzonW2Jd JyArIG5pY2tuYW1lICsgJ1svYl0sICc7DQogIHZCX0VkaXRvcltRUl9FZGl0b3JJ RF0uY2hlY2tfZm9jdXMoKTsNCiAgdkJfRWRpdG9yW1FSX0VkaXRvcklEXS53cml0 ZV9lZGl0b3JfY29udGVudHMob3QsIGZhbHNlKTsNCn0NCi8vINbo8uDy4CDi++Tl 6+Xt7e7j7iDy5erx8uAg6CDt6Oog4iDu8uLl8iAtIMru7eX2 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=collapse_tcat.gif Content-Type: image/gif; name=collapse_tcat.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/collapse_tcat.gif Content-Transfer-Encoding: Base64 R0lGODlhDwAPAOYAADVyM8jix/Pz85HDj+vr6/L48oi/hu7u7s7lzZ3Km+rv6p/L ndDlz5LEkDRxMqjPpvH38c3kzJ3Im/T59JvKmtDj0D+HPafNprDQr8zdzMfhxqfO pZLDkOPn46jPp0ukSf39/KrQqWKsX0udSMveyyZtKOTq5CBqIsrdyXbCcqvQqTd2 NXeqeDyCO5XTkt7x3UKNQDqJO+327ESZQiuALCBdIX6xgCloKOfy51WnUmu3aPX1 9bLdsD2JPtHo0ILJfTp8OJ3Jm2m5ZnTBcS6BL93o3YrLhmS1YfH58bvjuEyhSYvA iTiHOkSRQpirmODn3zN6NkCNPqnXp4rNhun06Y/Cj1GlTnKicjJ3MXnDdWK0X5bK lbzUu8riyVSqUbXNtF2xWmSxYdDjz2m4ZkmRRiJ3JOXt5EqfSTGBM5zIm/D57ylu Kjh3No29i4/QijZ5NM7YzzKDMu3t7UeWRKjOpzaBNc3hzUiVSdzn3Wa1YzB6L3/F fDqEOOnp6fT09P///yH5BAAAAAAALAAAAAAPAA8AAAfXgH2CfRkYEksSGBmDfQQE HRcJCBB/EAwLFx2OB08cAUhJLj9GUjIBHCYHcmkaL24/Q38iYXk+GnQHKBRqU1lH f8BkVjlUFCQbETwpWsAAwDAzVREbAwV7Qs0AQMB8dwUNBiBjYCMtbH9NFitYaCBL 1TpeSnPAfxZRcT3fHghbHx/NgNWhYQOBBzsJcJwB5sDBGwN/SuBJIMZPkABdYqy5 oYfIiRpOuKjY4cdMgwBFrkApw4QFnC9tFPgRIEBBiAUMJvyZcCmEApp+gvqp8GCA gQEPKgj1EwgAOw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=removeformat.gif Content-Type: image/gif; name=removeformat.gif Content-Location: http://forum.qip.ru/images/editor/removeformat.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJEDAP8AAAAA/wAAmf///yH5BAEAAAMALAAAAAAVABQAAAJDnI+p y+0/gArhSHYNrfHdXWUOQA0UIAhQ8KHps5Hu25SGO9CLHQmXjgCFUj4iBHcDLpAW VWPmzBUxngbxioVot1xtAQA7 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=separator.gif Content-Type: image/gif; name=separator.gif Content-Location: http://forum.qip.ru/images/editor/separator.gif Content-Transfer-Encoding: Base64 R0lGODlhBgAUAIAAAMXCuN/f3yH5BAEAAAEALAAAAAAGABQAAAISTGCJedy8lIuG Pgmnzhz7unkFADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=bold.gif Content-Type: image/gif; name=bold.gif Content-Location: http://forum.qip.ru/images/editor/bold.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAIABAAAAAN/f3yH5BAEAAAEALAAAAAAVABQAAAIkjI+py+0Po0yg 2iqt0ZDz52HdJY7AVjrhaaKsSqbTTNf2jSMFADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=italic.gif Content-Type: image/gif; name=italic.gif Content-Location: http://forum.qip.ru/images/editor/italic.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJECAICAgAAAAN/f3wAAACH5BAEAAAIALAAAAAAVABQAAAIglI+p y+0Po2yh1mkqwAJcrnFewAkhNpanZFnlC8fyHBUAOw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=underline.gif Content-Type: image/gif; name=underline.gif Content-Location: http://forum.qip.ru/images/editor/underline.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJECAICAgAAAAN/f3wAAACH5BAEAAAIALAAAAAAVABQAAAIplI+p y+0Po0yhBmEvrIdHj2mbCD5g6ZyiSa5pAAgA+lrTjWQ6zvc+XgAAOw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=color.gif Content-Type: image/gif; name=color.gif Content-Location: http://forum.qip.ru/images/editor/color.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAQAJEAAICAgAAAgJkzAN/f3yH5BAEAAAMALAAAAAAVABAAAAIqnI+p y53hGgggroBtmrhqk2XfBFIfhooReXSWOnArhHDehbYp/fX+nygAADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=clear.gif Content-Type: image/gif; name=clear.gif Content-Location: http://forum.qip.ru/clear.gif Content-Transfer-Encoding: Base64 R0lGODlhAQABAIAAAMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=menupop.gif Content-Type: image/gif; name=menupop.gif Content-Location: http://forum.qip.ru/images/editor/menupop.gif Content-Transfer-Encoding: Base64 R0lGODlhCwAQAIABAAAAAN/f3yH5BAEAAAEALAAAAAALABAAAAIPjI+py+0PDZhz 0Qai3jwWADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=createlink.gif Content-Type: image/gif; name=createlink.gif Content-Location: http://forum.qip.ru/images/editor/createlink.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUALMKAAAAgJCdsgCAgMHS7sDAwICAgACAAP///wAA/wAAAN/f3wAA AAAAAAAAAAAAAAAAACH5BAEAAAoALAAAAAAVABQAAARwUMlJq704y8K7ppxADIOR fEpxEEdgvKbGIStiI2+RFQgRBIAXLobhuWAAQfBUtB1hNuaFd4MZBAippQCoQgG6 TOKWKCcAZm3lnGCxEquVmtJO2wlzCTxRaBPwfQd5CnV2ZnhiboJxiBpphGYokpMY EQA7 ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=insertimage.gif Content-Type: image/gif; name=insertimage.gif Content-Location: http://forum.qip.ru/images/editor/insertimage.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAKIGAMDAwICAAICAgP//AP///wAAAN/f3wAAACH5BAEAAAYALAAA AAAVABQAAANaaLrc/jDKWaq92JVBuO/gUGhhKFQCMTZbyRVBsK1M4XawrGrfdxYC Eal3oy1aL2TIqLC9BCeRc8d6nk4AgJNpsAGh4ELWq/maoWIt94tuY7VljLwyqdvv eEMCADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=quote.gif Content-Type: image/gif; name=quote.gif Content-Location: http://forum.qip.ru/images/editor/quote.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJEDAP//AAAAAP///wAAACH5BAEAAAMALAAAAAAVABQAAAJLnI+p yz0BowwtiAuuyJcuy21aZn3dZAmlAo7umqSQGgCyYIa6irNaROv0YiLMa4iQWZa3 nMsISz6LPAZKiVRofras4wD5VsTksqMAADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=resize_1.gif Content-Type: image/gif; name=resize_1.gif Content-Location: http://forum.qip.ru/images/editor/resize_1.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAJAIABAE1NTQAAACH5BAEAAAEALAAAAAAVAAkAAAIUjI+py50AoVtx MmBVlPnUjmAgWAAAOw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=smilie.gif Content-Type: image/gif; name=smilie.gif Content-Location: http://forum.qip.ru/images/editor/smilie.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAUAJEDAE1NpgAAAP///wAAACH5BAEAAAMALAAAAAAVABQAAAJBnI+p y50AoUNQWCsduBy33XUAAwbBZXoKKKSWK4xPSMsUHdoHi6t3SzvFFqWOUPdrmWDI ZG5S4WQmg8iUis1qswUAOw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=resize_0.gif Content-Type: image/gif; name=resize_0.gif Content-Location: http://forum.qip.ru/images/editor/resize_0.gif Content-Transfer-Encoding: Base64 R0lGODlhFQAJAIABAE1NTQAAACH5BAEAAAEALAAAAAAVAAkAAAIUjI+pe8BvgIRL WlpxnbpZ14UiUgAAOw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=rating_5.gif Content-Type: image/gif; name=rating_5.gif Content-Location: http://forum.qip.ru/images/rating/rating_5.gif Content-Transfer-Encoding: Base64 R0lGODlhPAAMAPf/AP//yf//o///g///ZXeSwXmSvu3OcceDEK2wrOWva4udvoab wIGYwoKWv4iWtNaNLaZtEnaRwP//y3qTwP//tv//w///r///iJ+krv/inuq1Z8qz kuKfYbFvD+m7Yv//ypumuNrDb+HEi6VzG6ltCt2bH6RrEdbEjf/hW+izUv/lQ/TR hvXaVNDHl/7qTNuuZO7Ha4+Xp+zQW32VwJ6ksP//spaWpHiSwKSkp9CdZdq0SP/b Yc2/g///jPPWV3V6i3WRwP/oTpGgueXMZ///e//rRIGYwIqYvP/sjf//mZtuRf// kerQdv/yTZ2murZ4DXyUwZmhrP+4Sf//s5GVqJZmFZmdp4OYv///nP//zqWotIub uv//l///uduPL//RS//qP///pv//wv//t///rv/4rYmZtn6UvLGKXu7bZat9Iv// vv//Yv/mif//zf//nf/soP//0NvOhf//zJabsNrBbKSlqKKem7usnphoFf//m5du J/nlY3yWwv//iffPffjVmP/VW4KZwv/miv/ST///k//TW9qZYOHLbIWawaqgjNaN L9CsUqJ/RJihrpSbsq+RdP//Y6Z0GtmZX8OQWqBkEN7Ea6huD9OwT9izRvbfY7ir oPPIZv//x6GAT3eSv4OWuuWwa4WWuISXvo1vWfXVdqKIYneFofniX45xWn6Xwt/Q gnyVwn+XwejLdqZrBfPPg5FwVf//n6efkPPOb7GRbvXMarCuov//z6+wp//qQt6u YP+yQvXLaf+1R//WUv/XXqCLbvDLgOnXbKhpDXmKrOTKY/+yRaqvrurYbO7bafjV l9nGd/rYmOTOaf/oRbaqn4qZtOnPYP//sf//oPTSc/XeYvbfYP3RT//RTZObs4CV vLGwpf//pKZ7MKV9NYqWsoCXwv/wTfLNgfXOf7+LV5+nuZVuLKR/SHmUwnuVwXuV wqRnEP/pnImcvsyIE76KVP//hP//htybYHiIqp+BTZ+CUHiSwXiTwYSZvvrmZK6S dv//vaGLbPDKgXOPvyH5BAEAAP8ALAAAAAA8AAwAQAj/AP8JFBjFzMCDAwsiROgo 2sKDQmI8HBjxYaImhWCVigPvxsEFTZaMq4ar3KeDicQtEUbLDaUCBye46LECxocc Z2LOrHkz5z85w+owspYkW6Vz3yAEW5XMEiZNSQix2+MNQr9VyoxluqbnF7E8kl6Z apFmiA4fWFB0qDKCBDqyZtGqZUvC00FBKkwAmYjXRISJDJ5dwjcxQpAnMwofToxQ kb41FAK0mUfn4Cw+kCVPenTwDip+FLoNOqTtoBUWXcaEQcLBhmnUqlm7Hmhg1z2B E/5AO2jgBQGBN8htOujqxd9/QPzhOXgiBZSBIjYwdw5d+sIv9iYK/FJP+z9sjbwz 3VEjnvzEXJEOFJvIbcABehNvDXh3aiIGNiV+2Mevf2ArZ37MAQAZAhjCywO19BEO Ihdk0QmBgRzzACTrsMKMPFkAYEE8wPiyyD7pEMADERJIMMUFO0jhBRqqiEiiiSiq iIY6A8lATQ0VtEPKQjLIgmM7qSwkzRvTVABHLAuFwIUFYpShRJJLNvnkQQgUEcoo otgCiANUFpFAA6D0sgyXAyGjy5fbcNIMOAeBAIYGRxTgQQZUtPlmnHPWORAOVxyk gBMH8eknoAPZkc9B7phzEA1bHGSEFos2OtCjAgUEADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=rating_4.gif Content-Type: image/gif; name=rating_4.gif Content-Location: http://forum.qip.ru/images/rating/rating_4.gif Content-Transfer-Encoding: Base64 R0lGODlhPAAMAPfbAP//y3aRwP//iP//r9uuZHmSvoqYvP/inpaWpPPWV//4rf// uf/hW///nI+Xp///jO7bZaVzG///w//oTuizUpumuOXMZ8qzktuPL3qTwP//Ypmd p6WotP//turQdv//wt2bH///ppGguXyUwe7Ha32VwP//t+HEi4GYwP/qP9DHl5+k rv//e/TRhv//s5tuRf//yv//zn6UvNrDb6t9IouburZ4DbFvD56ksHeSwZZmFc2/ g9bEjZGVqPXaVP//l//bYeKfYf7qTHV6i9q0SLGKXv+4Sf/sjeq1Z///kaltCum7 YtCdZf//vYabwKKem6GLbKefkP//ZHyVwvDLgO3NcXeSwP/RS6ZrBf//m/nlY+Wv a4CVvIOWuujLdrCuovPOb+nPYNqZYP/qnoCXwqR/SPXOf3eSv///yaSlqPXLaaSk p9OwT7iroNnGd///o8yIE97Pg6RnEP//g+TKY6Z7MP/XXoiVtL+LV///zf/oRXmU wqJ/RJ+nuerYbP/tof/yTf/lQ///hP+1R/TSc4WawXuVwv//hoKWvnmSv4mcvpih rqRrEdaNLZhoFeSva4udvpduJ3eFoYqZtKZtEfniX7Gwpf//Zf/mif//x5Obs7us nt/Qgv//rvPIZt7Ea3iIqv/qQqhpDf/rRPDKgf//n+7baahuD8eCEP//scOQWnWR wPbfY4qWsq6Sdv3RT4GYwpSbsv//mZ+BTf/VW6qvrv//sqGAT4SZvv//nfLNgf/w TaZ0Gv//vvbfYNizRq2wrJmhrPjVl//WUn6XwniSwP/ST3uVwXiTwf//z45xWtaN L4OYv///pKKIYpFwVYKZwp2muuzQW4KWv//miv+yRdmZX6+RdImZtvrYmOHLbHOP vwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAEAANsALAAAAAA8AAwAQAj/ALcJHEiwoMBg2AwSXDRJ 4UARDhwKhCixohNASXQRSobnDMFCu5JQAZNHVSKCGYQ8aEECBhMZKFWydAmz4kBO fj6xYSXLmJxIdShBiWOKzi9fWYaJcsQLizMVECwQSdCAwQ0dEZSUgSqVqlWsSm7Z LAgtEKMADmHpOYXMYYAJNkq4hSt3bMEoWnp1eIPJWiyCTyo16dCMmhhNBDf4WGAi xJEgCBIvbvw4sl2BVQhYEVjMTBuCXgig3baK1CaCPCiMGHjiAmrVrF1fJnhlVsVX fCp6oKGb9+yCli6hAuXwixQ4khyu0ABiiHLmzmeT0SYgRqZOc2hVa3TN0BQ3h2Kg gxkgyM6gZa725NjBAgAAFwKAGMFQhNj69u/jzy9ybLa0UrZIMIYyBoWRSyoS/PGM QTP8MMAHCrzAoIMQSvgbMKNsgUgXaghzB0G1hPLINFx4kk0rBFWQAhIGFLDEAT2k uGKLL8Y42xrMEARJNASlgQtBivRBEA41EIQCB0MWOdCRAgUEADs= ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=vbulletin_ajax_threadrate.js Content-Type: application/x-javascript; charset=windows-1251; name=vbulletin_ajax_threadrate.js Content-Location: http://forum.qip.ru/clientscript/vbulletin_ajax_threadrate.js?v=3611 Content-Transfer-Encoding: Base64 Lyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMgfHwKfHwgIyB2QnVsbGV0aW4gMy42LjEwIFBhdGNoIExldmVsIDIKfHwgIyAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tICMgfHwKfHwgIyBDb3B5cmlnaHQgqTIwMDAtMjAwOCBK ZWxzb2Z0IEVudGVycHJpc2VzIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gfHwK fHwgIyBUaGlzIGZpbGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIGluIHdob2xl IG9yIHNpZ25pZmljYW50IHBhcnQuICMgfHwKfHwgIyAtLS0tLS0tLS0tLS0tLS0t IFZCVUxMRVRJTiBJUyBOT1QgRlJFRSBTT0ZUV0FSRSAtLS0tLS0tLS0tLS0tLS0t ICMgfHwKfHwgIyBodHRwOi8vd3d3LnZidWxsZXRpbi5jb20gfCBodHRwOi8vd3d3 LnZidWxsZXRpbi5jb20vbGljZW5zZS5odG1sICMgfHwKfHwgIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMgfHwKXCo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KCi8qKgoqIEFk ZHMgb25jbGljayBldmVudHMgdG8gYXBwcm9wcmlhdGUgZWxlbWVudHMgZm9yIHRo cmVhZCByYXRpbmcKKgoqIEBwYXJhbQlzdHJpbmcJVGhlIElEIG9mIHRoZSBmb3Jt IHRoYXQgY29udGFpbnMgdGhlIHJhdGluZyBvcHRpb25zCiovCmZ1bmN0aW9uIHZC X0FKQVhfVGhyZWFkUmF0ZV9Jbml0KGZvcm1pZCkKewoJdmFyIGZvcm1vYmogPSBm ZXRjaF9vYmplY3QoZm9ybWlkKTsKCglpZiAoQUpBWF9Db21wYXRpYmxlICYmICh0 eXBlb2YgdmJfZGlzYWJsZV9hamF4ID09ICd1bmRlZmluZWQnIHx8IHZiX2Rpc2Fi bGVfYWpheCA8IDIpICYmIGZvcm1vYmopCgl7CgkJZm9yICh2YXIgaSA9IDA7IGkg PCBmb3Jtb2JqLmVsZW1lbnRzLmxlbmd0aDsgaSsrKQoJCXsKCQkJLy9hbGVydCgx KTsKCQkJaWYgKGZvcm1vYmouZWxlbWVudHNbaV0udHlwZSA9PSAnc3VibWl0JykK CQkJewoJCQkJLy8gcHJldmVudCB0aGUgZm9ybSBmcm9tIHN1Ym1pdHRpbmcgd2hl biBjbGlja2luZyB0aGUgc3VibWl0IGJ1dHRvbgoJCQkJdmFyIHNidXR0b24gPSBm b3Jtb2JqLmVsZW1lbnRzW2ldOwoJCQkJdmFyIGJ1dHRvbiA9IGRvY3VtZW50LmNy ZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7CgkJCQlidXR0b24udHlwZSA9ICdidXR0b24n OwoJCQkJYnV0dG9uLmNsYXNzTmFtZSA9IHNidXR0b24uY2xhc3NOYW1lOwoJCQkJ YnV0dG9uLnZhbHVlICAgICA9IHNidXR0b24udmFsdWU7CgkJCQlidXR0b24ub25j bGljayAgID0gdkJfQUpBWF9UaHJlYWRSYXRlLnByb3RvdHlwZS5mb3JtX2NsaWNr OwoJCQkJc2J1dHRvbi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShidXR0b24sIHNi dXR0b24pOwoJCQkJc2J1dHRvbi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNidXR0 b24pOwoJCQl9CgkJfQoJfQp9OwoKLyoqCiogQ2xhc3MgdG8gaGFuZGxlIHRocmVh ZCByYXRpbmcKKgoqIEBwYXJhbQlvYmplY3QJVGhlIGZvcm0gb2JqZWN0IGNvbnRh aW5pbmcgdGhlIHZvdGUgb3B0aW9ucwoqLwpmdW5jdGlvbiB2Ql9BSkFYX1RocmVh ZFJhdGUoZm9ybW9iaikKewoJLy8gQUpBWCBoYW5kbGVyCgl0aGlzLnhtbF9zZW5k ZXIgPSBudWxsOwoKCS8vIHZCX0hpZGRlbl9Gb3JtIG9iamVjdCB0byBoYW5kbGUg Zm9ybSB2YXJpYWJsZXMKCXRoaXMucHNldWRvZm9ybSA9IG5ldyB2Ql9IaWRkZW5f Rm9ybSgndGhyZWFkcmF0ZS5waHAnKTsKCXRoaXMucHNldWRvZm9ybS5hZGRfdmFy aWFibGUoJ2FqYXgnLCAxKTsKCXRoaXMucHNldWRvZm9ybS5hZGRfdmFyaWFibGVz X2Zyb21fb2JqZWN0KGZvcm1vYmopOwoKCS8vIE91dHB1dCBvYmplY3QKCXRoaXMu b3V0cHV0X2VsZW1lbnRfaWQgPSAndGhyZWFkcmF0aW5nX2N1cnJlbnQnOwoKCS8v IENsb3N1cmUKCXZhciBtZSA9IHRoaXM7CgoJLyoqCgkqIE9uUmVhZHlTdGF0ZUNo YW5nZSBjYWxsYmFjay4gVXNlcyBhIGNsb3N1cmUgdG8ga2VlcCBzdGF0ZS4KCSog UmVtZW1iZXIgdG8gdXNlIG1lIGluc3RlYWQgb2YgdGhpcyBpbnNpZGUgdGhpcyBm dW5jdGlvbiEKCSovCgl0aGlzLmhhbmRsZV9hamF4X3Jlc3BvbnNlID0gZnVuY3Rp b24oKQoJewoJCWlmIChtZS54bWxfc2VuZGVyLmhhbmRsZXIucmVhZHlTdGF0ZSA9 PSA0ICYmIG1lLnhtbF9zZW5kZXIuaGFuZGxlci5zdGF0dXMgPT0gMjAwKQoJCXsK CQkJaWYgKG1lLnhtbF9zZW5kZXIuaGFuZGxlci5yZXNwb25zZVhNTCkKCQkJewoJ CQkJdmFyIG9iaiA9IGZldGNoX29iamVjdChtZS5vYmppZCk7CgkJCQkvLyBjaGVj ayBmb3IgZXJyb3IgZmlyc3QKCQkJCXZhciBlcnJvciA9IG1lLnhtbF9zZW5kZXIu ZmV0Y2hfZGF0YShmZXRjaF90YWdzKG1lLnhtbF9zZW5kZXIuaGFuZGxlci5yZXNw b25zZVhNTCwgJ2Vycm9yJylbMF0pOwoJCQkJaWYgKGVycm9yKQoJCQkJewoJCQkJ CS8vIEhpZGUgdGhyZWFkIHJhdGluZyBwb3B1cCBtZW51IG5vdwoJCQkJCWlmICh2 Qm1lbnUuYWN0aXZlbWVudSA9PSAndGhyZWFkcmF0aW5nJykKCQkJCQl7CgkJCQkJ CXZCbWVudS5oaWRlKCk7CgkJCQkJfQoJCQkJCWFsZXJ0KGVycm9yKTsKCQkJCX0K CQkJCWVsc2UKCQkJCXsKCQkJCQl2YXIgbmV3cmF0aW5nID0gbWUueG1sX3NlbmRl ci5mZXRjaF9kYXRhKGZldGNoX3RhZ3MobWUueG1sX3NlbmRlci5oYW5kbGVyLnJl c3BvbnNlWE1MLCAndm90ZWF2ZycpWzBdKTsKCQkJCQlpZiAobmV3cmF0aW5nICE9 ICcnKQoJCQkJCXsKCQkJCQkJZmV0Y2hfb2JqZWN0KG1lLm91dHB1dF9lbGVtZW50 X2lkKS5pbm5lckhUTUwgPSBuZXdyYXRpbmc7CgkJCQkJfQoJCQkJCS8vIEhpZGUg dGhyZWFkIHJhdGluZyBwb3B1cCBtZW51IG5vdwoJCQkJCWlmICh2Qm1lbnUuYWN0 aXZlbWVudSA9PSAndGhyZWFkcmF0aW5nJykKCQkJCQl7CgkJCQkJCXZCbWVudS5o aWRlKCk7CgkJCQkJfQoKCQkJCQl2YXIgbWVzc2FnZSA9IG1lLnhtbF9zZW5kZXIu ZmV0Y2hfZGF0YShmZXRjaF90YWdzKG1lLnhtbF9zZW5kZXIuaGFuZGxlci5yZXNw b25zZVhNTCwgJ21lc3NhZ2UnKVswXSk7CgkJCQkJaWYgKG1lc3NhZ2UpCgkJCQkJ ewoJCQkJCQlhbGVydChtZXNzYWdlKTsKCQkJCQl9CgkJCQl9CgkJCX0KCgkJCWlm IChpc19pZSkKCQkJewoJCQkJbWUueG1sX3NlbmRlci5oYW5kbGVyLmFib3J0KCk7 CgkJCX0KCQl9Cgl9Cn07CgovKioKKiBQbGFjZXMgdGhlIHZvdGUKKi8KdkJfQUpB WF9UaHJlYWRSYXRlLnByb3RvdHlwZS5yYXRlID0gZnVuY3Rpb24oKQp7CglpZiAo dGhpcy5wc2V1ZG9mb3JtLmZldGNoX3ZhcmlhYmxlKCd2b3RlJykgIT0gbnVsbCkK CXsKCQl0aGlzLnhtbF9zZW5kZXIgPSBuZXcgdkJfQUpBWF9IYW5kbGVyKHRydWUp OwoJCXRoaXMueG1sX3NlbmRlci5vbnJlYWR5c3RhdGVjaGFuZ2UodGhpcy5oYW5k bGVfYWpheF9yZXNwb25zZSk7CgkJdGhpcy54bWxfc2VuZGVyLnNlbmQoCgkJCSd0 aHJlYWRyYXRlLnBocD90PScgKyB0aHJlYWRpZCArICcmdm90ZT0nICsgUEhQLnVy bGVuY29kZSh0aGlzLnBzZXVkb2Zvcm0uZmV0Y2hfdmFyaWFibGUoJ3ZvdGUnKSks CgkJCXRoaXMucHNldWRvZm9ybS5idWlsZF9xdWVyeV9zdHJpbmcoKQoJCSk7Cgl9 Cn07CgovKioKKiBIYW5kbGVzIHRoZSBmb3JtICdzdWJtaXQnIGFjdGlvbgoqLwp2 Ql9BSkFYX1RocmVhZFJhdGUucHJvdG90eXBlLmZvcm1fY2xpY2sgPSBmdW5jdGlv bigpCnsKCXZhciBBSkFYX1RocmVhZFJhdGUgPSBuZXcgdkJfQUpBWF9UaHJlYWRS YXRlKHRoaXMuZm9ybSk7CglBSkFYX1RocmVhZFJhdGUucmF0ZSgpOwoJcmV0dXJu IGZhbHNlOwp9OwoKLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KlwKfHwgIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKfHwgIyBEb3dubG9hZGVkOiAwNTo1MiwgVHVlIEp1biAy NHRoIDIwMDgKfHwgIyBDVlM6ICRSQ1NmaWxlJCAtICRSZXZpc2lvbjogMTc2NDkg JAp8fCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpcKj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0qLw== ------------KSbGLDcyGFNPlO3OpSn9x8 Content-Disposition: inline; filename=collapse_thead.gif Content-Type: image/gif; name=collapse_thead.gif Content-Location: http://forum.qip.ru/qipstyle/buttons_rus_3/collapse_thead.gif Content-Transfer-Encoding: Base64 R0lGODlhDQANAOYAAEGMP4K4d+Ds4EicRlyZXGijZEyhSV+bXjyCO+ry61ytWmii ZDp8OPv9+6fIp2ahYzh3Nm+3baHEobrcuYS5eIe7es72rGGsX831q3+1dMfcx6/b lsbtp/L388btpc/3rI/CgIzAfWisZs72rcTspMfup6vKq464joO4d8TrpLHcl2Kd Y7Lfmd7r3kydSs/3rXi7dYC/funs6ZW5lNvo21+bX0SRQkeWROPl42GcYIzAftHi 0W2kbbvmn2ijZc73rLDOsJrAmM31rMv0qs73rdnn2tXl1XW6c7TZs5DCgFmQWJK7 k/3+/WSeZIrEiMfvqJvBm7rmnny9ep3CnZfJhbLfmJfJhq7WrK/SrWanZYSyhJ7K nWmharLdl7DXr8/2rcbtpjVyM02mS////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAACH5BAAAAAAALAAAAAANAA0AAAehgEQfIz0BPgQFAVE/L18W Q1YHUEUdNBI5VBgWQjpaGhMwCkdIOychGCwEGk5iYmMDBjFMK1UUUxOtY7oABl4O FAUCEa5jYbsXCQUHHQpiAwjFYQguDQcLwmIGumMMNsgLKA5XxMZjAFtAARtNDVLP EAwQSjI8G08VS0ZYWTciQTgzKpTgQCJJDQktxggwwQVECg4ewIDpkuEBgQcZVEQE EwgAOw== ------------KSbGLDcyGFNPlO3OpSn9x8--