SystemMonitoring
1.0.1
OTRS GmbH
http://otrs.org/
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
Main version.
Basic mail interface to System Monitoring Suites
Einfache Email Schnittstelle zur System Monitoring Suites
2.2.x
2007-10-10 11:17:41
opms.otrs.com
IyAtLQojIEtlcm5lbC9TeXN0ZW0vUG9zdE1hc3Rlci9GaWx0ZXIvU3lzdGVtTW9uaXRvcmluZy5wbSAtIEJhc2ljIFN5c3RlbSBNb25pdG9yaW5nIEludGVyZmFjZQojIENvcHlyaWdodCAoQykgMjAwMS0yMDA3IE9UUlMgR21iSCwgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBTeXN0ZW1Nb25pdG9yaW5nLnBtLHYgMS4xLjEuMSAyMDA3LzEwLzA0IDEzOjM0OjQxIGJiIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLnR4dC4KIyAtLQpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpQb3N0TWFzdGVyOjpGaWx0ZXI6OlN5c3RlbU1vbml0b3Jpbmc7CnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwoKJFZFUlNJT04gPSBxdygkUmV2aXNpb246IDEuMS4xLjEgJCkgWzFdOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpQb3N0TWFzdGVyOjpGaWx0ZXI6OlN5c3RlbU1vbml0b3JpbmcgLSBCYXNpYyBTeXN0ZW0gTW9uaXRvcmluZyBJbnRlcmZhY2UKCj1oZWFkMSBTWU5PUFNJUwoKVGhpcyBtb2R1bGUgaW1wbGVtZXRzIGEgYmFzaWMgaW50ZXJmYWNlIHRvIFN5c3RlbSBNb25pdG9yaW5nClN1aXRlcy4gSXQgd29ya3MgYnkgcmVjZWl2aW5nIGVtYWlsIG1lc3NhZ2VzIHNlbnQgYnkgdGhlIE1vbml0b3JpbmcKU3VpdGUuIE5ldyB0aWNrZXRzIGFyZSBjcmVhdGVkIGluIGNhc2Ugb2YgY29tcG9uZW50IGZhaWx1cmVzLiBPbmNlIGEKdGlja2V0IGhhcyBiZWVuIG9wZW5lZCBtZXNzYWdlcyByZWdhcmRpbmcgdGhlIGVmZmVjdGVkIGNvbXBvbmVudCBhcmUKYXR0YWNoZWQgdG8gdGhpcyB0aWNrZXQuIFdoZW4gdGhlIGNvbXBvbmVudCByZWNvdmVycywgdGhlIHRpY2tldCBzdGF0ZQpjYW4gYmUgY2hhbmdlZCBvciB0aGUgdGlja2V0IGNhbiBiZSBjbG9zZWQuCgpPbmNlIGEgb3BlbiB0aWNrZXQgZm9yIGEgZ2l2ZW4gSG9zdC9TZXJ2aWNlIGNvbWJpbmF0aW9uIGV4aXN0cywgYWxsCm1haWxzIGNvbmNlcm5pbmcgdGhpcyBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlCnRpY2tldCB1bnRpbCBpdCdzIGNsb3NlZC4KCj1jdXQKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CiAgICAkU2VsZi0+e0RlYnVnfSA9ICRQYXJhbXtEZWJ1Z30gfHwgMDsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yZWFjaCAocXcoQ29uZmlnT2JqZWN0IExvZ09iamVjdCBUaWNrZXRPYmplY3QgVGltZU9iamVjdCkpIHsKICAgICAgICAkU2VsZi0+eyRffSA9ICRQYXJhbXskX30gfHwgZGllICJHb3Qgbm8gJF8hIjsKICAgIH0KCiAgICAjIERlZmF1bHQgU2V0dGluZ3MKICAgICRTZWxmLT57Q29uZmlnfSA9IHsKICAgICAgICBTdGF0ZVJlZ0V4cCAgICAgICA9PiAnXHMqU3RhdGU6XHMrKFxTKyknLAogICAgICAgIEZyb21BZGRyZXNzUmVnRXhwID0+ICdzeXNtb25AZXhhbXBsZS5jb20nLAogICAgICAgIE5ld1RpY2tldFJlZ0V4cCAgID0+ICdDUklUSUNBTHxET1dOJywKICAgICAgICBDbG9zZVRpY2tldFJlZ0V4cCA9PiAnT0t8VVAnLAogICAgICAgIENsb3NlQWN0aW9uU3RhdGUgID0+ICdjbG9zZWQgc3VjY2Vzc2Z1bCcsCiAgICAgICAgQ2xvc2VQZW5kaW5nVGltZSAgPT4gNjAgKiA2MCAqIDI0ICogMiwgICAgICAgICAgICAgICAgICAgICAgICAjIDIgZGF5cwogICAgICAgIEhvc3RSZWdFeHAgICAgICAgID0+ICdccypBZGRyZXNzOlxzKyhcZCtcLlxkK1wuXGQrXC5cZCspXHMqJywKICAgICAgICBGcmVlVGV4dEhvc3QgICAgICA9PiAnMScsCiAgICAgICAgU2VydmljZVJlZ0V4cCAgICAgPT4gJ1xzKlNlcnZpY2U6XHMrKC4qKVxzKicsCiAgICAgICAgRGVmYXVsdFNlcnZpY2UgICAgPT4gJ0hvc3QnLAogICAgICAgIEZyZWVUZXh0U2VydmljZSAgID0+ICcyJywKICAgICAgICBTZW5kZXJUeXBlICAgICAgICA9PiAnc3lzdGVtJywKICAgICAgICBBcnRpY2xlVHlwZSAgICAgICA9PiAnbm90ZS1yZXBvcnQnLAogICAgfTsKICAgIHJldHVybiAkU2VsZjsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBUaGUgYWN0dWFsIGZpbHRlci4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKc3ViIFJ1biB7CiAgICBteSAkU2VsZiAgICAgICA9IHNoaWZ0OwogICAgbXkgJVBhcmFtICAgICAgPSBAXzsKICAgIG15ICRMb2dNZXNzYWdlID0gdW5kZWY7CgogICAgIyBnZXQgY29uZmlnIG9wdGlvbnMsIHVzZSBkZWZhdWx0cyB1bmxlc3MgdmFsdWUgc3BlY2lmaWVkCiAgICBpZiAoICRQYXJhbXtKb2JDb25maWd9ICYmIHJlZiggJFBhcmFte0pvYkNvbmZpZ30gKSBlcSAnSEFTSCcgKSB7CiAgICAgICAgZm9yZWFjaCAoIGtleXMoICV7ICRQYXJhbXtKb2JDb25maWd9IH0gKSApIHsKICAgICAgICAgICAgJFNlbGYtPntDb25maWd9eyRffQogICAgICAgICAgICAgICAgJiYgKCAkU2VsZi0+e0NvbmZpZ317JF99ID0gJFBhcmFte0pvYkNvbmZpZ30tPnskX30gKTsKICAgICAgICB9CiAgICB9CgogICAgIyBjaGVjayBpZiBzZW5kZXIgaXMgb2YgaW50ZXJlc3QKICAgIGlmICggICAkUGFyYW17R2V0UGFyYW19LT57RnJvbX0KICAgICAgICAmJiAkUGFyYW17R2V0UGFyYW19LT57RnJvbX0gPX4gLyRTZWxmLT57Q29uZmlnfXtGcm9tQWRkcmVzc1JlZ0V4cH0vICkKICAgIHsKCiAgICAgICAgIyBUcnkgdG8gZ2V0IFN0YXRlLCBIb3N0IGFuZCBTZXJ2aWNlCiAgICAgICAgZm9yIG15ICRsaW5lICggc3BsaXQgL1xuLywgJFBhcmFte0dldFBhcmFtfS0+e0JvZHl9ICkgewogICAgICAgICAgICBmb3IgKHF3ICggU3RhdGUgSG9zdCBTZXJ2aWNlICkpIHsKICAgICAgICAgICAgICAgICRsaW5lID1+IC8kU2VsZi0+e0NvbmZpZ317JF8uJ1JlZ0V4cCd9LwogICAgICAgICAgICAgICAgICAgICYmICggJFNlbGYtPnskX30gPSAkMSApOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAjIFdlIG5lZWQgU3RhdGUgYW5kIEhvc3QgdG8gcHJvY2VlZAogICAgICAgIGlmICggJFNlbGYtPntTdGF0ZX0gJiYgJFNlbGYtPntIb3N0fSApIHsKCiAgICAgICAgICAgICMgQ2hlY2sgZm9yIFNlcnZpY2UKICAgICAgICAgICAgJFNlbGYtPntTZXJ2aWNlfQogICAgICAgICAgICAgICAgfHwgKCAkU2VsZi0+e1NlcnZpY2V9ID0gJFNlbGYtPntDb25maWd9e0RlZmF1bHRTZXJ2aWNlfSApOwogICAgICAgICAgICAkTG9nTWVzc2FnZQogICAgICAgICAgICAgICAgPSAiIC0gSG9zdDogJFNlbGYtPntIb3N0fSwgU3RhdGU6ICRTZWxmLT57U3RhdGV9LCBTZXJ2aWNlOiAkU2VsZi0+e1NlcnZpY2V9IjsKCiAgICAgICAgICAgICMgSXMgdGhlcmUgYSB0aWNrZXQgZm9yIHRoaXMgSG9zdC9TZXJ2aWNlIHBhaXI/CiAgICAgICAgICAgIG15ICVxdWVyeSA9ICgKICAgICAgICAgICAgICAgIFJlc3VsdCAgICA9PiAnQVJSQVknLAogICAgICAgICAgICAgICAgTGltaXQgICAgID0+IDEsCiAgICAgICAgICAgICAgICBVc2VySUQgICAgPT4gMSwKICAgICAgICAgICAgICAgIFN0YXRlVHlwZSA9PiAnT3BlbicKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yIChxdyAoIEhvc3QgU2VydmljZSApKSB7CiAgICAgICAgICAgICAgICAkcXVlcnl7ICdUaWNrZXRGcmVlS2V5JyAuICRTZWxmLT57Q29uZmlnfXsgJ0ZyZWVUZXh0JyAuICRfIH0gfQogICAgICAgICAgICAgICAgICAgID0gJF87CiAgICAgICAgICAgICAgICAkcXVlcnl7ICdUaWNrZXRGcmVlVGV4dCcKICAgICAgICAgICAgICAgICAgICAgICAgLiAkU2VsZi0+e0NvbmZpZ317ICdGcmVlVGV4dCcgLiAkXyB9IH0gPSAkU2VsZi0+eyRffTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCBteSAkVGlja2V0SUQKICAgICAgICAgICAgICAgID0gKCAkU2VsZi0+e1RpY2tldE9iamVjdH0tPlRpY2tldFNlYXJjaCglcXVlcnkpIClbMF0gKQogICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgIyBBbHdheXMgdXNlIGZpcnN0IHJlc3VsdCwgdGhlcmUgc2hvdWxkIGJlIG9ubHkgb25lLi4uCiAgICAgICAgICAgICAgICAjIE9LLCBmb3VuZCB0aWNrZXQgdG8gZGVhbCB3aXRoCiAgICAgICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19LT57U3ViamVjdH0KICAgICAgICAgICAgICAgICAgICA9ICRTZWxmLT57VGlja2V0T2JqZWN0fS0+VGlja2V0U3ViamVjdEJ1aWxkKAogICAgICAgICAgICAgICAgICAgIFRpY2tldE51bWJlciA9PiAkU2VsZi0+e1RpY2tldE9iamVjdH0tPlRpY2tldE51bWJlckxvb2t1cCgKICAgICAgICAgICAgICAgICAgICAgICAgVGlja2V0SUQgPT4gJFRpY2tldElELAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgICA9PiAxCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICRQYXJhbXtHZXRQYXJhbX0tPntTdWJqZWN0fSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJFBhcmFte0dldFBhcmFtfS0+eydYLU9UUlMtRm9sbG93VXAtU2VuZGVyVHlwZSd9CiAgICAgICAgICAgICAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ317U2VuZGVyVHlwZX07CiAgICAgICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19LT57J1gtT1RSUy1Gb2xsb3dVcC1BcnRpY2xlVHlwZSd9CiAgICAgICAgICAgICAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ317QXJ0aWNsZVR5cGV9OwogICAgICAgICAgICAgICAgaWYgKCAkU2VsZi0+e1N0YXRlfSA9fiAvJFNlbGYtPntDb25maWd9e0Nsb3NlVGlja2V0UmVnRXhwfS8gKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAjIENsb3NlIFRpY2tldCBDb25kaXRpb24gLT4gVGFrZSBDbG9zZSBBY3Rpb24KICAgICAgICAgICAgICAgICAgICBpZiAoICRTZWxmLT57Q29uZmlnfXtDbG9zZUFjdGlvblN0YXRlfSBuZSAnT0xEJyApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJFBhcmFte0dldFBhcmFtfS0+eydYLU9UUlMtRm9sbG93VXAtU3RhdGUnfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ317Q2xvc2VBY3Rpb25TdGF0ZX07CiAgICAgICAgICAgICAgICAgICAgICAgICRQYXJhbXtHZXRQYXJhbX0tPnsnWC1PVFJTLVN0YXRlLVBlbmRpbmdUaW1lJ30KICAgICAgICAgICAgICAgICAgICAgICAgICAgID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJUaW1lU3RhbXAoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgJFNlbGYtPntDb25maWd9e0Nsb3NlUGVuZGluZ1RpbWV9ICk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICRMb2dNZXNzYWdlID0gJ1JlY292ZXJlZCcgLiAkTG9nTWVzc2FnZTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewoKICAgICAgICAgICAgICAgICAgICAjIEF0dGFjaCBub3RlIHRvIGV4aXN0aW5nIHRpY2tldAogICAgICAgICAgICAgICAgICAgICRMb2dNZXNzYWdlID0gJ05ldyBOb3RpY2UnIC4gJExvZ01lc3NhZ2U7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzaWYgKCAkU2VsZi0+e1N0YXRlfSA9fiAvJFNlbGYtPntDb25maWd9e05ld1RpY2tldFJlZ0V4cH0vICkgewoKICAgICMgQ3JlYXRlIFRpY2tldCBDb25kaXRpb24gLT4gQ3JlYXRlIG5ldyBUaWNrZXQgYW5kIHJlY29yZCBIb3N0IGFuZCBTZXJ2aWNlCiAgICAgICAgICAgICAgICBmb3IgKHF3ICggSG9zdCBTZXJ2aWNlICkpIHsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19LT57ICdYLU9UUlMtVGlja2V0S2V5JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgLiAkU2VsZi0+e0NvbmZpZ317ICdGcmVlVGV4dCcgLiAkXyB9IH0gPSAkXzsKICAgICAgICAgICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19LT57ICdYLU9UUlMtVGlja2V0VmFsdWUnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuICRTZWxmLT57Q29uZmlnfXsgJ0ZyZWVUZXh0JyAuICRfIH0gfQogICAgICAgICAgICAgICAgICAgICAgICA9ICRTZWxmLT57JF99OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJFBhcmFte0dldFBhcmFtfS0+eydYLU9UUlMtU2VuZGVyVHlwZSd9CiAgICAgICAgICAgICAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ317U2VuZGVyVHlwZX07CiAgICAgICAgICAgICAgICAkUGFyYW17R2V0UGFyYW19LT57J1gtT1RSUy1BcnRpY2xlVHlwZSd9CiAgICAgICAgICAgICAgICAgICAgPSAkU2VsZi0+e0NvbmZpZ317QXJ0aWNsZVR5cGV9OwogICAgICAgICAgICAgICAgJExvZ01lc3NhZ2UgPSAnTmV3IFRpY2tldCcgLiAkTG9nTWVzc2FnZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICAgICAjIE5vIGV4aXN0aW5nIHRpY2tldCBhbmQgbm8gb3BlbiBjb25kaXRpb24gLT4gZHJvcCBzaWxlbnRseQogICAgICAgICAgICAgICAgJFBhcmFte0dldFBhcmFtfS0+eydYLU9UUlMtSWdub3JlJ30gPSAneWVzJzsKICAgICAgICAgICAgICAgICRMb2dNZXNzYWdlCiAgICAgICAgICAgICAgICAgICAgPSAnTWFpbCBEcm9wcGVkLCBubyBtYXRjaGluZyB0aWNrZXQgZm91bmQsIG5vIG9wZW4gb24gdGhpcyBzdGF0ZScKICAgICAgICAgICAgICAgICAgICAuICRMb2dNZXNzYWdlOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkTG9nTWVzc2FnZQogICAgICAgICAgICAgICAgPSAnU3lzdGVtTW9uaXRvcmluZzogQ291bGQgbm90IGZpbmQgaG9zdCBhZGRyZXNzIGFuZC9vciBzdGF0ZSBpbiBtYWlsID0+IElnbm9yaW5nJzsKICAgICAgICB9CiAgICAgICAgaWYgKCRMb2dNZXNzYWdlKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ25vdGljZScsCiAgICAgICAgICAgICAgICBNZXNzYWdlICA9PiAnU3lzdGVtTW9uaXRvcmluZyBNYWlsOiAnIC4gJExvZ01lc3NhZ2UsCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgIH0KICAgIHJldHVybiAxOwp9CgoxOwoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBNb3JlIGRvY3VtZW50YXRpb24uLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCj1oZWFkMSBDT05GSUdVUkFUSU9OIE9QVElPTlMKClRvIGFsbG93IGZsZXhpYmxlIGludGVncmF0aW9uIGJldHdlZW4gT1RSUyBhbmQgYSBTeXN0ZW0gTW9uaXRvcmluZwpTdWl0ZSB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYXZhaWxhYmxlLiBUaGUgZGVmYXVsdAp2YWx1ZXMgKGFzIHNob3duIGJlbG93KSBzaG91bGQgYmUgc3VpdGFibGUgZm9yIGEgc3RhbmRhcmQgTmFnaW9zCmluc3RhbGxhdGlvbi4KCj1vdmVyCgo9aXRlbSAqIEM8RnJvbUFkZHJlc3NSZWdFeHA+CgpPbmx5IG1haWxzIG1hdGNoaW5nIHRoaXMgQzxGcm9tOj4gYWRkcmVzcyB3aWxsIGJlIGNvbnNpZGVyZWQgZm9yIHRoaXMKZmlsdGVyLiAgWW91IG5lZWQgdG8gYWRqdXN0IHRoaXMgc2V0dGluZyB0byB0aGUgZnJvbSBhZGRyZXNzIHlvdXIKU3lzdGVtIE1vbml0b3JpbmcgU3VpdGUgdXNlcyBmb3Igb3V0Z29pbmcgbWFpbHMuCgpEZWZhdWx0OiBDPCdzeXNtb25AbXlzeXN0ZW0uY29tJz4KCj1pdGVtICogQzxTdGF0ZVJlZ0V4cD4KClJlZ3VsYXIgRXhwcmVzc2lvbiB0byBleHRyYWN0IEM8U3RhdGU+CgpEZWZhdWx0OiBDPCdccypTdGF0ZTpccysoXFMrKSc+Cgo9aXRlbSAqIEM8TmV3VGlja2V0UmVnRXhwPgoKUmVndWxhciBleHByZXNzaW9uIGZvciBleHRyYWN0ZWQgQzxTdGF0ZT4gdG8gdHJpZ2dlciBuZXcgdGlja2V0CgpEZWZhdWx0OiBDPCdDUklUSUNBTHxET1dOJz4KCj1pdGVtICogQzxDbG9zZVRpY2tldFJlZ0V4cD4KClJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgZXh0cmFjdGVkIEM8U3RhdGU+IHRvIHRyaWdnZXIgdGlja2V0IHRyYW5zaXRpb24KdG8gQzxDbG9zZUFjdGlvblN0YXRlPgoKRGVmYXVsdDogQzwnT0t8VVAnPgoKPWl0ZW0gKiBDPENsb3NlQWN0aW9uU3RhdGU+CgpOZXcgc3RhdHVzIGZvciB0aWNrZXQgd2hlbiBzZXJ2aWNlIHJlY292ZXJlcy4gVGhpcyBjYW4gYmUgZWl0aGVyIEM8T0xEPiBpbgp3aGljaCBjYXNlIHRoZSBvbGQgc3RhdHVzIHN0YXlzLCBvciB0aGUgbmFtZSBvZiB0aGUgbmV3IHN0YXR1cy4gUGxlYXNlIG5vdGUsCnRoYXQgdGhpcyBzdGF0ZSBuZWVkcyB0byBiZSBjb25maWd1cmVkIGluIHlvdXIgT1RSUyBpbnN0YWxsYXRpb24gYXMgdmFsaWQKc3RhdGUuIElmIHRoZSBzdGF0ZSB5b3Ugc2V0IGhlcmUgZG9lcyBub3QgZXhpc3QsIHRoZSB0aWNrZXQgc3RhdGUgd2lsbCBub3QgYmUKYWx0ZXJlZC4KCkRlZmF1bHQ6IEM8J2Nsb3NlZCBzdWNjZXNzZnVsJz4KCj1pdGVtICogQzxDbG9zZVBlbmRpbmdUaW1lPgoKUGVuZGluZyB0aW1lIGluIHNlY29uZHMgZm9yICdQZW5kaW5nLi4uJyBzdGF0dXMgdGltZS4gKElnbm9yZWQgZm9yIG90aGVyIHN0YXR1cwp0eXBlcykuIFBsZWFzZSBub3RlIHRoYXQgdGhpcyBzZXR0aW5nIHdpbGwgYmUgaWdub3JlZCBieSBPVFJTIHZlcnNpb25zIG9sZGVyIHRoYW4KMi4yLiBPbiB0aGVzZSBzeXN0ZW1zIHRoZSBwZW5kaW5nIHRpbWUgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggdGhlIHRpY2tldCB3aWxsIGJlCnVzZWQsIHdoaWNoIG1heSBoYXZlIGluIHN1cnByaXNpbmcgZWZmZWN0cy4gSXQncyByZWNvbW1lbmRlZCBub3QgdG8gdXNlICdQZW5kaW5nLi4uJwpzdGF0ZXMgd2l0aCBPVFJTIHByaW9yIHRvIDIuMi4KCkRlZmF1bHQ6IEM8NjAqNjAqMjQqMj4gICgyIGRheXMpCgo9aXRlbSAqIEM8SG9zdFJlZ0V4cD4KClJlZ3VsYXIgZXhwcmVzc2lvbiB0byBleHRyYWN0IEM8SG9zdD4KCkRlZmF1bHQ6IEM8J1xzKkFkZHJlc3M6XHMrKFxkK1wuXGQrXC5cZCtcLlxkKylccyonPgoKPWl0ZW0gKiBDPEZyZWVUZXh0SG9zdD4KCkZyZWUgdGV4dCBmaWVsZCBpbmRleCB0byBzdG9yZSBDPEhvc3Q+CgpEZWZhdWx0OiBDPCcxJz4KCj1pdGVtICogQzxTZXJ2aWNlUmVnRXhwPgoKUmVndWxhciBleHByZXNzaW9uIHRvIGV4dHJhY3QgQzxTZXJ2aWNlPgoKRGVmYXVsdDogQzwnXHMqU2VydmljZTpccysoLiopXHMqJz4KCj1pdGVtICogQzxEZWZhdWx0U2VydmljZT4KCkRlZmF1bHQgZm9yIEM8U2VydmljZT47IHVzZWQgaWYgbm8gc2VydmljZSBjYW4gYmUgZXh0cmFjdGVkLCBpLmUuIGlmIGhvc3QKZ29lcyBET1dOL1VQCgpEZWZhdWx0OiBDPCdIb3N0Jz4KCj1pdGVtICogQzxGcmVlVGV4eVNlcnZpY2U+CgpGcmVlIHRleHQgZmllbGQgaW5kZXggdG8gc3RvcmUgc2VydmljZQoKRGVmYXVsdDogQzwnMic+Cgo9aXRlbSAqIEM8U2VuZGVyVHlwZT4KClNlbmRlciB0eXBlIHVzZWQgZm9yIGNyZWF0aW5nIHRpY2tldHMgYW5kIGF0dGFjaGluZyBub3RlcwoKRGVmYXVsdDogQzxzeXN0ZW0+Cgo9aXRlbSAqIEM8QXJ0aWNsZVR5cGU+CgpBcnRpY2xlIHR5cGUgdXNlZCB0byBhdHRhY2ggZm9sbG93IHVwIGVtYWlscyB0byBleGlzdGluZyB0aWNrZXRzCgpEZWZhdWx0OiBDPG5vdGUtcmVwb3J0PgoKPWJhY2sKCj1oZWFkMSBDT05UUk9MIEZMT1cKClRoZSBmb2xsb3dpbmcgZGlhZ3JhbSBpbGx1c3RyYXRlcyBob3cgbWFpbHMgYXJlIGhhbmRsZWQgYnkgdGhpcyBtb2R1bGUKYW5kIGluIHdoaWNoIGNhc2VzIHRoZXkgdHJpZ2dlciB3aGljaCBhY3Rpb24uIFByZXR0eSBtdWNoIGFsbCBjaGVja3MgYXJlCmNvbmZpZ2FibGUgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZ2l2ZW4gYnkgdGhlIHBhcmFtZXRlcnMgbGlzdGVkCmFib3ZlLgoKIE1haWwgbWF0Y2hlcyAnRnJvbUFkZHJlc3MnPwogfAogKy0+IE5PICAtPiBDb250aW51ZSB3aXRoIHJlZ3VsYXIgbWFpbCBwcm9jZXNzaW5nCiB8CiArLT4gWUVTIC0+IERvZXMgYSB0aWNrZXQgd2l0aCBtYXRjaGluZyBIb3N0L1NlcnZpY2UgY29tYmluYXRpb24KICAgICAgICAgICAgYWxyZWFkeSBleGlzdCBpbiBPVFJTPwogICAgICAgICAgICB8CiAgICAgICAgICAgICstPiBOTyAgLT4gRG9lcyAnU3RhdGU6JyBtYXRjaCAnTmV3VGlja2V0UmVnRXhwJz8KICAgICAgICAgICAgfCAgICAgICAgICB8CiAgICAgICAgICAgIHwgICAgICAgICAgKy0+IE5PICAtPiBTdG9wIHByb2Nlc3NpbmcgdGhpcyBtYWlsCiAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAoc2lsZW50IGRyb3ApCiAgICAgICAgICAgIHwgICAgICAgICAgfAogICAgICAgICAgICB8ICAgICAgICAgICstPiBZRVMgLT4gQ3JlYXRlIG5ldyB0aWNrZXQsIHJlY29yZCBIb3N0CiAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBhbmQgU2VydmljZSwgYXR0YWNoIG1haWwKICAgICAgICAgICAgfAogICAgICAgICAgICArLT4gWUVTIC0+IEF0dGFjaCBtYWlsIHRvIHRpY2tldAogICAgICAgICAgICAgICAgICAgIC0+IERvZXMgJ1N0YXRlOicgbWF0Y2ggJ0Nsb3NlVGlja2V0UmVnRXhwJz8KICAgICAgICAgICAgICAgICAgICAgICB8CiAgICAgICAgICAgICAgICAgICAgICAgKy0+IE5PICAtPiBDb250aW51ZSB3aXRoIHJlZ3VsYXIgbWFpbCBwcm9jZXNzaW5nCiAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICstPiBZRVMgLT4gQ2hhbmdlIHRpY2tldCB0eXBlIGFzIGNvbmZpZ3VyZWQgaW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdDbG9zZUFjdGlvblN0YXRlJwoKQmVzaWRlcyBvZiBhIGZldyBhZGRpdGlvbmFsIHNhbml0eSBjaGVja3MgdGhpcyBpcyBob3cgdGhlClN5c3RlbU1vbml0b3JpbmcgbW9kdWwgdHJlYXRzIGluY29taW5nIG1haWxzLiBCeSBjaGFuZ2luZyB0aGUgcmVndWxhcgpleHByZXNzaW9ucyBpdCBzaG91bGQgYmUgcG9zc2libGUgdG8gYWRvcHQgaXQgdG8gZGlmZmVyZW50IG1vbml0b3JpbmcKc3lzdGVtcy4KCj1jdXQK
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMSIgaW5pdD0iQXBwbGljYXRpb24iPgogIDxDVlM+JElkOiBTeXN0ZW1Nb25pdG9yaW5nLnhtbCx2IDEuMS4xLjEgMjAwNy8xMC8wNCAxMzozNDo0MSBiYiBFeHAgJDwvQ1ZTPgogIDxDb25maWdJdGVtIE5hbWU9IlBvc3RNYXN0ZXI6OlByZUZpbHRlck1vZHVsZSMjIzEtU3lzdGVtTW9uaXRvcmluZyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+QmFzaWMgbWFpbCBpbnRlcmZhY2UgdG8gU3lzdGVtIE1vbml0b3JpbmcgU3VpdGVzPC9EZXNjcmlwdGlvbj4KICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJkZSI+RWluZmFjaGUgRW1haWwgU2Nobml0dHN0ZWxsZSB6dSBTeXN0ZW0gTW9uaXRvcmluZyBTdWl0ZXM8L0Rlc2NyaXB0aW9uPgogICAgPEdyb3VwPlN5c3RlbU1vbml0b3Jpbmc8L0dyb3VwPgogICAgPFN1Ykdyb3VwPkNvcmU6OlBvc3RNYXN0ZXI8L1N1Ykdyb3VwPgogICAgPFNldHRpbmc+CiAgICAgIDxIYXNoPgogICAgICAgIDxJdGVtIEtleT0iTW9kdWxlIj5LZXJuZWw6OlN5c3RlbTo6UG9zdE1hc3Rlcjo6RmlsdGVyOjpTeXN0ZW1Nb25pdG9yaW5nPC9JdGVtPgogICAgICAgIDxJdGVtIEtleT0iRnJvbUFkZHJlc3NSZWdFeHAiPnN5c21vbkBleGFtcGxlLmNvbTwvSXRlbT4KICAgICAgICA8SXRlbSBLZXk9IlN0YXRlUmVnRXhwIj5ccypTdGF0ZTpccysoXFMrKTwvSXRlbT4KICAgICAgICA8SXRlbSBLZXk9Ikhvc3RSZWdFeHAiPlxzKkFkZHJlc3M6XHMrKFxkK1wuXGQrXC5cZCtcLlxkKylccyo8L0l0ZW0+CiAgICAgICAgPEl0ZW0gS2V5PSJTZXJ2aWNlUmVnRXhwIj5ccypTZXJ2aWNlOlxzKyguKilccyo8L0l0ZW0+CiAgICAgICAgPEl0ZW0gS2V5PSJOZXdUaWNrZXRSZWdFeHAiPkNSSVRJQ0FMfERPV048L0l0ZW0+CiAgICAgICAgPEl0ZW0gS2V5PSJDbG9zZVRpY2tldFJlZ0V4cCI+T0t8VVA8L0l0ZW0+CiAgICAgICAgPEl0ZW0gS2V5PSJDbG9zZUFjdGlvblN0YXRlIj5jbG9zZWQgc3VjY2Vzc2Z1bDwvSXRlbT4KICAgICAgICA8SXRlbSBLZXk9IkNsb3NlUGVuZGluZ1RpbWUiPjE3MjgwMDwvSXRlbT4KICAgICAgICA8SXRlbSBLZXk9IkRlZmF1bHRTZXJ2aWNlIj5Ib3N0PC9JdGVtPgogICAgICAgIDxJdGVtIEtleT0iRnJlZVRleHRIb3N0Ij4xPC9JdGVtPgogICAgICAgIDxJdGVtIEtleT0iRnJlZVRleHRTZXJ2aWNlIj4yPC9JdGVtPgogICAgICAgIDxJdGVtIEtleT0iU2VuZGVyVHlwZSI+c3lzdGVtPC9JdGVtPgogICAgICAgIDxJdGVtIEtleT0iQXJ0aWNsZVR5cGUiPm5vdGUtcmVwb3J0PC9JdGVtPgogICAgICA8L0hhc2g+CiAgICA8L1NldHRpbmc+CiAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPg==
TkFNRQogICAgS2VybmVsOjpTeXN0ZW06OlBvc3RNYXN0ZXI6OkZpbHRlcjo6U3lzdGVtTW9uaXRvcmluZyAtIEJhc2ljIFN5c3RlbQogICAgTW9uaXRvcmluZyBJbnRlcmZhY2UKClNZTk9QU0lTCiAgICBUaGlzIG1vZHVsZSBpbXBsZW1ldHMgYSBiYXNpYyBpbnRlcmZhY2UgdG8gU3lzdGVtIE1vbml0b3JpbmcgU3VpdGVzLiBJdAogICAgd29ya3MgYnkgcmVjZWl2aW5nIGVtYWlsIG1lc3NhZ2VzIHNlbnQgYnkgdGhlIE1vbml0b3JpbmcgU3VpdGUuIE5ldwogICAgdGlja2V0cyBhcmUgY3JlYXRlZCBpbiBjYXNlIG9mIGNvbXBvbmVudCBmYWlsdXJlcy4gT25jZSBhIHRpY2tldCBoYXMKICAgIGJlZW4gb3BlbmVkIG1lc3NhZ2VzIHJlZ2FyZGluZyB0aGUgZWZmZWN0ZWQgY29tcG9uZW50IGFyZSBhdHRhY2hlZCB0bwogICAgdGhpcyB0aWNrZXQuIFdoZW4gdGhlIGNvbXBvbmVudCByZWNvdmVycywgdGhlIHRpY2tldCBzdGF0ZSBjYW4gYmUKICAgIGNoYW5nZWQgb3IgdGhlIHRpY2tldCBjYW4gYmUgY2xvc2VkLgoKICAgIE9uY2UgYSBvcGVuIHRpY2tldCBmb3IgYSBnaXZlbiBIb3N0L1NlcnZpY2UgY29tYmluYXRpb24gZXhpc3RzLCBhbGwKICAgIG1haWxzIGNvbmNlcm5pbmcgdGhpcyBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIHdpbGwgYmUgYXR0YWNoZWQgdG8gdGhlCiAgICB0aWNrZXQgdW50aWwgaXQncyBjbG9zZWQuCgpDT05GSUdVUkFUSU9OIE9QVElPTlMKICAgIFRvIGFsbG93IGZsZXhpYmxlIGludGVncmF0aW9uIGJldHdlZW4gT1RSUyBhbmQgYSBTeXN0ZW0gTW9uaXRvcmluZyBTdWl0ZQogICAgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4gVGhlIGRlZmF1bHQgdmFsdWVzCiAgICAoYXMgc2hvd24gYmVsb3cpIHNob3VsZCBiZSBzdWl0YWJsZSBmb3IgYSBzdGFuZGFyZCBOYWdpb3MgaW5zdGFsbGF0aW9uLgoKICAgICogIkZyb21BZGRyZXNzUmVnRXhwIgogICAgICAgIE9ubHkgbWFpbHMgbWF0Y2hpbmcgdGhpcyAiRnJvbToiIGFkZHJlc3Mgd2lsbCBiZSBjb25zaWRlcmVkIGZvciB0aGlzCiAgICAgICAgZmlsdGVyLiBZb3UgbmVlZCB0byBhZGp1c3QgdGhpcyBzZXR0aW5nIHRvIHRoZSBmcm9tIGFkZHJlc3MgeW91cgogICAgICAgIFN5c3RlbSBNb25pdG9yaW5nIFN1aXRlIHVzZXMgZm9yIG91dGdvaW5nIG1haWxzLgoKICAgICAgICBEZWZhdWx0OiAnc3lzbW9uQG15c3lzdGVtLmNvbScKCiAgICAqICJTdGF0ZVJlZ0V4cCIKICAgICAgICBSZWd1bGFyIEV4cHJlc3Npb24gdG8gZXh0cmFjdCAiU3RhdGUiCgogICAgICAgIERlZmF1bHQ6ICdccypTdGF0ZTpccysoXFMrKScKCiAgICAqICJOZXdUaWNrZXRSZWdFeHAiCiAgICAgICAgUmVndWxhciBleHByZXNzaW9uIGZvciBleHRyYWN0ZWQgIlN0YXRlIiB0byB0cmlnZ2VyIG5ldyB0aWNrZXQKCiAgICAgICAgRGVmYXVsdDogJ0NSSVRJQ0FMfERPV04nCgogICAgKiAiQ2xvc2VUaWNrZXRSZWdFeHAiCiAgICAgICAgUmVndWxhciBleHByZXNzaW9uIGZvciBleHRyYWN0ZWQgIlN0YXRlIiB0byB0cmlnZ2VyIHRpY2tldAogICAgICAgIHRyYW5zaXRpb24gdG8gIkNsb3NlQWN0aW9uU3RhdGUiCgogICAgICAgIERlZmF1bHQ6ICdPS3xVUCcKCiAgICAqICJDbG9zZUFjdGlvblN0YXRlIgogICAgICAgIE5ldyBzdGF0dXMgZm9yIHRpY2tldCB3aGVuIHNlcnZpY2UgcmVjb3ZlcmVzLiBUaGlzIGNhbiBiZSBlaXRoZXIKICAgICAgICAiT0xEIiBpbiB3aGljaCBjYXNlIHRoZSBvbGQgc3RhdHVzIHN0YXlzLCBvciB0aGUgbmFtZSBvZiB0aGUgbmV3CiAgICAgICAgc3RhdHVzLiBQbGVhc2Ugbm90ZSwgdGhhdCB0aGlzIHN0YXRlIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQgaW4geW91cgogICAgICAgIE9UUlMgaW5zdGFsbGF0aW9uIGFzIHZhbGlkIHN0YXRlLiBJZiB0aGUgc3RhdGUgeW91IHNldCBoZXJlIGRvZXMgbm90CiAgICAgICAgZXhpc3QsIHRoZSB0aWNrZXQgc3RhdGUgd2lsbCBub3QgYmUgYWx0ZXJlZC4KCiAgICAgICAgRGVmYXVsdDogJ2Nsb3NlZCBzdWNjZXNzZnVsJwoKICAgICogIkNsb3NlUGVuZGluZ1RpbWUiCiAgICAgICAgUGVuZGluZyB0aW1lIGluIHNlY29uZHMgZm9yICdQZW5kaW5nLi4uJyBzdGF0dXMgdGltZS4gKElnbm9yZWQgZm9yCiAgICAgICAgb3RoZXIgc3RhdHVzIHR5cGVzKS4gUGxlYXNlIG5vdGUgdGhhdCB0aGlzIHNldHRpbmcgd2lsbCBiZSBpZ25vcmVkCiAgICAgICAgYnkgT1RSUyB2ZXJzaW9ucyBvbGRlciB0aGFuIDIuMi4gT24gdGhlc2Ugc3lzdGVtcyB0aGUgcGVuZGluZyB0aW1lCiAgICAgICAgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggdGhlIHRpY2tldCB3aWxsIGJlIHVzZWQsIHdoaWNoIG1heSBoYXZlIGluCiAgICAgICAgc3VycHJpc2luZyBlZmZlY3RzLiBJdCdzIHJlY29tbWVuZGVkIG5vdCB0byB1c2UgJ1BlbmRpbmcuLi4nIHN0YXRlcwogICAgICAgIHdpdGggT1RSUyBwcmlvciB0byAyLjIuCgogICAgICAgIERlZmF1bHQ6ICI2MCo2MCoyNCoyIiAoMiBkYXlzKQoKICAgICogIkhvc3RSZWdFeHAiCiAgICAgICAgUmVndWxhciBleHByZXNzaW9uIHRvIGV4dHJhY3QgIkhvc3QiCgogICAgICAgIERlZmF1bHQ6ICdccypBZGRyZXNzOlxzKyhcZCtcLlxkK1wuXGQrXC5cZCspXHMqJwoKICAgICogIkZyZWVUZXh0SG9zdCIKICAgICAgICBGcmVlIHRleHQgZmllbGQgaW5kZXggdG8gc3RvcmUgIkhvc3QiCgogICAgICAgIERlZmF1bHQ6ICcxJwoKICAgICogIlNlcnZpY2VSZWdFeHAiCiAgICAgICAgUmVndWxhciBleHByZXNzaW9uIHRvIGV4dHJhY3QgIlNlcnZpY2UiCgogICAgICAgIERlZmF1bHQ6ICdccypTZXJ2aWNlOlxzKyguKilccyonCgogICAgKiAiRGVmYXVsdFNlcnZpY2UiCiAgICAgICAgRGVmYXVsdCBmb3IgIlNlcnZpY2UiOyB1c2VkIGlmIG5vIHNlcnZpY2UgY2FuIGJlIGV4dHJhY3RlZCwgaS5lLiBpZgogICAgICAgIGhvc3QgZ29lcyBET1dOL1VQCgogICAgICAgIERlZmF1bHQ6ICdIb3N0JwoKICAgICogIkZyZWVUZXh5U2VydmljZSIKICAgICAgICBGcmVlIHRleHQgZmllbGQgaW5kZXggdG8gc3RvcmUgc2VydmljZQoKICAgICAgICBEZWZhdWx0OiAnMicKCiAgICAqICJTZW5kZXJUeXBlIgogICAgICAgIFNlbmRlciB0eXBlIHVzZWQgZm9yIGNyZWF0aW5nIHRpY2tldHMgYW5kIGF0dGFjaGluZyBub3RlcwoKICAgICAgICBEZWZhdWx0OiAic3lzdGVtIgoKICAgICogIkFydGljbGVUeXBlIgogICAgICAgIEFydGljbGUgdHlwZSB1c2VkIHRvIGF0dGFjaCBmb2xsb3cgdXAgZW1haWxzIHRvIGV4aXN0aW5nIHRpY2tldHMKCiAgICAgICAgRGVmYXVsdDogIm5vdGUtcmVwb3J0IgoKQ09OVFJPTCBGTE9XCiAgICBUaGUgZm9sbG93aW5nIGRpYWdyYW0gaWxsdXN0cmF0ZXMgaG93IG1haWxzIGFyZSBoYW5kbGVkIGJ5IHRoaXMgbW9kdWxlCiAgICBhbmQgaW4gd2hpY2ggY2FzZXMgdGhleSB0cmlnZ2VyIHdoaWNoIGFjdGlvbi4gUHJldHR5IG11Y2ggYWxsIGNoZWNrcyBhcmUKICAgIGNvbmZpZ2FibGUgdXNpbmcgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZ2l2ZW4gYnkgdGhlIHBhcmFtZXRlcnMgbGlzdGVkCiAgICBhYm92ZS4KCiAgICAgTWFpbCBtYXRjaGVzICdGcm9tQWRkcmVzcyc/CiAgICAgfAogICAgICstPiBOTyAgLT4gQ29udGludWUgd2l0aCByZWd1bGFyIG1haWwgcHJvY2Vzc2luZwogICAgIHwKICAgICArLT4gWUVTIC0+IERvZXMgYSB0aWNrZXQgd2l0aCBtYXRjaGluZyBIb3N0L1NlcnZpY2UgY29tYmluYXRpb24KICAgICAgICAgICAgICAgIGFscmVhZHkgZXhpc3QgaW4gT1RSUz8KICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICstPiBOTyAgLT4gRG9lcyAnU3RhdGU6JyBtYXRjaCAnTmV3VGlja2V0UmVnRXhwJz8KICAgICAgICAgICAgICAgIHwgICAgICAgICAgfAogICAgICAgICAgICAgICAgfCAgICAgICAgICArLT4gTk8gIC0+IFN0b3AgcHJvY2Vzc2luZyB0aGlzIG1haWwKICAgICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICAgICAoc2lsZW50IGRyb3ApCiAgICAgICAgICAgICAgICB8ICAgICAgICAgIHwKICAgICAgICAgICAgICAgIHwgICAgICAgICAgKy0+IFlFUyAtPiBDcmVhdGUgbmV3IHRpY2tldCwgcmVjb3JkIEhvc3QKICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICBhbmQgU2VydmljZSwgYXR0YWNoIG1haWwKICAgICAgICAgICAgICAgIHwKICAgICAgICAgICAgICAgICstPiBZRVMgLT4gQXR0YWNoIG1haWwgdG8gdGlja2V0CiAgICAgICAgICAgICAgICAgICAgICAgIC0+IERvZXMgJ1N0YXRlOicgbWF0Y2ggJ0Nsb3NlVGlja2V0UmVnRXhwJz8KICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICArLT4gTk8gIC0+IENvbnRpbnVlIHdpdGggcmVndWxhciBtYWlsIHByb2Nlc3NpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAgICAgICAgICAgICAgICAgICArLT4gWUVTIC0+IENoYW5nZSB0aWNrZXQgdHlwZSBhcyBjb25maWd1cmVkIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Nsb3NlQWN0aW9uU3RhdGUnCgogICAgQmVzaWRlcyBvZiBhIGZldyBhZGRpdGlvbmFsIHNhbml0eSBjaGVja3MgdGhpcyBpcyBob3cgdGhlCiAgICBTeXN0ZW1Nb25pdG9yaW5nIG1vZHVsIHRyZWF0cyBpbmNvbWluZyBtYWlscy4gQnkgY2hhbmdpbmcgdGhlIHJlZ3VsYXIKICAgIGV4cHJlc3Npb25zIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBhZG9wdCBpdCB0byBkaWZmZXJlbnQgbW9uaXRvcmluZwogICAgc3lzdGVtcy4KCg==