VGhlIGZvbGxvd2luZyBwZW9wbGUgaGF2ZSBjb21taXQgYWNjZXNzIHRvIHRoZSBTdWJ2ZXJzaW9uIHNvdXJjZXMuCk5vdGUgdGhhdCB0aGlzIGlzIG5vdCBhIGZ1bGwgbGlzdCBvZiBTdWJ2ZXJzaW9uJ3MgYXV0aG9ycywgaG93ZXZlciAtLQpmb3IgdGhhdCwgeW91J2QgbmVlZCB0byBsb29rIG92ZXIgdGhlIGxvZyBtZXNzYWdlcyB0byBzZWUgYWxsIHRoZQpwYXRjaCBjb250cmlidXRvcnMuCgpJZiB5b3UgaGF2ZSBhIHF1ZXN0aW9uIG9yIGNvbW1lbnQsIGl0J3MgcHJvYmFibHkgYmVzdCB0byBtYWlsCmRldkBzdWJ2ZXJzaW9uLnRpZ3Jpcy5vcmcsIHJhdGhlciB0aGFuIG1haWxpbmcgYW55IG9mIHRoZXNlIHBlb3BsZQpkaXJlY3RseS4KCkJsYW5rZXQgY29tbWl0IGFjY2VzczoKCiAgICAgICAgICBqaW1iICAgSmltIEJsYW5keSA8amltYkByZWRoYXQuY29tPgogICAgICAgc3Vzc21hbiAgIEJlbiBDb2xsaW5zLVN1c3NtYW4gPHN1c3NtYW5AY29sbGFiLm5ldD4KICAgICAgICBrZm9nZWwgICBLYXJsIEZvZ2VsIDxrZm9nZWxAY29sbGFiLm5ldD4KICAgICAgICBnc3RlaW4gICBHcmVnIFN0ZWluIDxnc3RlaW5AbHlyYS5vcmc+CiAgICAgICAgIGJyYW5lICAgQnJhbmtvIENpYmVqIDxicmFuZUB4YmMubnU+CiAgICAgICAgICAgam9lICAgSm9lIE9ydG9uIDxqb2VAbGlnaHQucGx1cy5jb20+CiAgICAgICBnaHVkc29uICAgR3JlZyBIdWRzb24gPGdodWRzb25AbWl0LmVkdT4KICAgICAgICAgIGZpdHogICBCcmlhbiBGaXR6cGF0cmljayA8Zml0ekByZWQtYmVhbi5jb20+CiAgICAgICAgZGFuaWVsICAgRGFuaWVsIFN0ZW5iZXJnIDxkYW5pZWxAaGF4eC5zZT4KICAgICAgY21waWxhdG8gICBDLiBNaWNoYWVsIFBpbGF0byA8Y21waWxhdG9AY29sbGFiLm5ldD4KICAgICAgICAga2V2aW4gICBLZXZpbiBQaWxjaC1CaXNzb24gPGtldmluQHBpbGNoaWUuaG9tZWlwLm5ldD4KICAgICAgICBwaGlsaXAgICBQaGlsaXAgTWFydGluIDxwaGlsaXBAY29kZW1hdHRlcnMuY28udWs+CiAgIGplcmVua3JhbnR6ICAgSnVzdGluIEVyZW5rcmFudHogPGp1c3RpbkBlcmVua3JhbnR6LmNvbT4KICAgICAgICByb29uZWcgICBHYXJyZXR0IFJvb25leSA8cm9vbmVnQGVsZWN0cmljamVsbHlmaXNoLm5ldD4KICAgICAgYmNvbGxpbnMgICBCZW4gQ29sbGlucyA8YmNvbGxpbnNAZGViaWFuLm9yZz4KICAgICAgICAgYmxhaXIgICBCbGFpciBaYWphYyA8YmxhaXJAb3JjYXdhcmUuY29tPgogICAgICAgc3RyaWtlciAgIFNhbmRlciBTdHJpa2VyIDxzdHJpa2VyQGFwYWNoZS5vcmc+CiAgICAgICAgIG5ha2VkICAgTnV1dHRpIEtvdGl2dW9yaSA8bmFrZWRAaWtpLmZpPgogICAgICAgZHdoZWRvbiAgIERhdmlkIEtpbWRvbiA8RGF2aWRfS2ltZG9uQGFsdW1uaS5obWMuZWR1PgogICAgICAgICAgIGRsciAgIERhbmllbCBSYWxsIDxkbHJAZmluZW1hbHRjb2RpbmcuY29tPgogICAgICAgICBrcmFhaSAgIE1hdHQgS3JhYWkgPGtyYWFpQGFsdW1uaS5jbXUuZWR1PgogICAgICAgICAgIG1iayAgIE1hcmsgQmVuZWRldHRvIEtpbmcgPG1ia0Bsb3dsYXRlbmN5LmNvbT4KICAgICAgICAgICBlcGcgICBFcmljIEdpbGxlc3BpZSA8ZXBnQHByZXR6ZWxuZXQub3JnPgogICAgICAgIGJkZW5ueSAgIEJyaWFuIERlbm55IDxicmlhbkBicmlhbmRlbm55Lm5ldD4KICAgICAgICAgICBqYWEgICBKYW5pIEF2ZXJiYWNoIDxqYWFAaWtpLmZpPgogICAganVsaWFuZm9hZCAgIEp1bGlhbiBGb2FkIDxqdWxpYW5mb2FkQGJ0b3BlbndvcmxkLmNvbT4KICAgICAgICAgYmxpc3MgICBUb2JpYXMgUmluZ3N0cm9tIDx0b2JpYXNAcmluZ3N0cm9tLm1pbmUubnU+CiAgICAgICBqcGllcGVyICAgSm9zaCBQaWVwZXIgPGpwaWVwZXJAYW5kcmV3LmNtdS5lZHU+CiAganN6YWttZWlzdGVyICAgSm9obiBTemFrbWVpc3RlciA8am9obkBzemFrbWVpc3Rlci5uZXQ+CiAgICAgIGRpb25pc29zICAgRXJpayBIdWVsc21hbm4gPGUuaHVlbHNtYW5uQGdteC5uZXQ+CgpDb21taXQgYWNjZXNzIGZvciBzcGVjaWZpYyBhcmVhczoKCiAgICAgICAgICB4ZWxhICAgQWxleGFuZGVyIE11ZWxsZXIgPGFsZXhAbGl0dGxlYmx1ZS5kZT4gICAgICAoSmF2YSBiaW5kaW5ncykKICAgICAgIHlvc2hpa2kgICBZb3NoaWtpIEhheWFzaGkgPHlvc2hpa2lAeGVtYWNzLm9yZz4gICAgICAgIChSdWJ5IGJpbmRpbmdzKQogICAgICAgICBkYXZpZCAgIERhdmlkIFN1bW1lcnMgPGRhdmlkQHN1bW1lcnNvZnQuZmF5LmFyLnVzPiAgKFJQTXMpCiAgICAgIHJhc3NpbG9uICAgQmlsbCBUdXR0IDxyYXNzaWxvbkBseXJhLm9yZz4gICAgICAgICAgICAgICAoV2luMzIgLyBDT00pCiAgICAgIGtib2hsaW5nICAgS2lyYnkgQy4gQm9obGluZyA8a2JvaGxpbmdAYmlyZGRvZy5jb20+ICAgICAodG9vbHMvZGV2KQogICAgICAgICAgIG5zZCAgIE5pY2sgRHVmZmVrIDxuaWNrQGR1ZmZlay5jb20+ICAgICAgICAgICAgICAgKGRvYykKICAgICAgIGZtYXRpYXMgICBG6WxpY2lhbm8gTWF0aWFzIDxmZWxpY2lhbm8ubWF0aWFzQGZyZWUuZnI+IChGcmVuY2ggZG9jcykKICAgICAgZGltZW50aXkgICBEbWl0cml5IE8uIFBvcGtvdiA8ZGltZW50aXlAZGltZW50aXkuaW5mbz4gIChSdXNzaWFuIGRvY3MpCiAgICAgICAgeHN0ZXZlICAgU3RlZmFuIFJlaWNo9nIgPHJlaWNob2VyQHdlYi5kZT4gICAgICAgICAgICAocHN2bikKICAgICAgam9zYW5kZXIgICBKb3N0ZWluIEFuZGVyc2VuIDxqb3N0ZWluQGpvc2FuZGVyLm5ldD4gICAgICh2YXJpb3VzKQogICAgICBiYWxsYmFjaCAgIE1pY2hhZWwgQmFsbGJhY2ggPGJhbGxiYWNoQHJ0ZW4ubmV0PiAgICAgICAgKHBhY2thZ2VzKQogICAgICBuaWVtZXllciAgIEd1c3Rhdm8gTmllbWV5ZXIgPG5pZW1leWVyQGNvbmVjdGl2YS5jb20+ICAgKHN2bnBlcm1zLnB5KQogICAgICAgIG1vcnRlbiAgIE1vcnRlbiBMdWR2aWdzZW4gPG1vcnRlbkAycHMuZGs+ICAgICAgICAgICAgKGJpbmRpbmdzKQogICAgICAgIHpicm93biAgIFphY2sgQnJvd24gPHpicm93bkB0dW1ibGVyaW5ncy5vcmc+ICAgICAgICAgKGRvYykKICAgICAgICBtbWFjZWsgICBNYXJrbyBNYWNlayA8TWFya28uTWFjZWtAZ214Lm5ldD4gICAgICAgICAgIChjdnMyc3ZuIGJyYW5jaCkKICAgICAgICAgIG1hc3MgICBEYXZpZCBXYWl0ZSA8bWFzc0Bha3VtYS5vcmc+ICAgICAgICAgICAgICAgIChjZXJ0cyBicmFuY2gpCiAgICAgIGplc3BlcnNtICAgSmVzcGVyIFN0ZWVuIE34bGxlciA8amVzcGVyQHNlbHNrYWJldC5vcmc+ICAoYmluZGluZ3MpCiAgICAgICAga25hY2tlICAgS2FpIE5hY2tlIDxrYWkubmFja2VAcmVkc3Rhci5kZT4gICAgICAgICAgICAoYmluZGluZ3MpCiAgICAgICAgbXByaWNlICAgTWljaGFlbCBQcmljZSA8bWljaGFlbC5wcmljZUBjb21wdXRlci5vcmc+ICAocmVsZWFzZXMpCiAgICAgICAgICAgcGxsICAgUGF1bCBsdXNzaWVyIDxwLmx1c3NpZXJAY29tY2FzdC5uZXQ+ICAgICAgICAocmVsZWFzZXMpCiAgICAgZ3Rob21wc29uICAgR2xlbm4gQS4gVGhvbXBzb24gPGd0aG9tcHNvbkBjZHIubmV0PiAgICAgICAoZnMvZGIgYnJhbmNoKQogICAgICAgICAgIGtvbiAgIEthbGxlIE9sYXZpIE5pZW1pdGFsbyA8a29uQGlraS5maT4gICAgICAgICAgKEVtYWNzIExpc3ApCiAgICAgICBwYXRyaWNrICAgUGF0cmljayBNYXl3ZWcgPG1heXdlZ0BxaW50LmRlPiAgICAgICAgICAgICAoSmF2YSBiaW5kaW5ncykKICAgICAgICAgICBkamggICBELkouIEhlYXAgPGRqQHNoYWR5dmFsZS5uZXQ+ICAgICAgICAgICAgICAgIChXaW4zMiBidWlsZCkKICAgICAgICAgIHJleTQgICBSdXNzZWxsIFlhbm9mc2t5IDxyZXk0QGNvbHVtYmlhLmVkdT4gICAgICAgIChiaW5kaW5ncykKICAgICAgICAgY2xrYW8gICBDaGlhLWxpYW5nIEthbyA8Y2xrYW9AY2xrYW8ub3JnPiAgICAgICAgICAgIChwZXJsIGJpbmRpbmdzKQogICAganJlcGVubmluZyAgIEphY2sgUmVwZW5uaW5nIDxqcmVwZW5uaW5nQGNvbGxhYi5uZXQ+ICAgICAgKHRvb2xzL2RldikKICAgICAgc2VyZ2V5bGkgICBTZXJnZXkgQS4gTGlwbmV2aWNoIDxzZXJnZXlAb3B0aW1hbHRlYy5jb20+IChuZW9uLTAuMjQgcG9ydCkKICAgICAgbG9uZXN0YXIgICBNYXJ0aW4gTUFVUkVSIDxtYXJ0aW4ubWF1cmVyQGVtYWlsLmRlPiAgICAgIChzdm5zaG93KQogICAgICAgICAgbWF4YiAgIE1heCBCb3dzaGVyIDxtYXhiQHVrZi5uZXQ+ICAgICAgICAgICAgICAgICAgKGN2czJzdm4pCiAgICAgICBzaGxvbWlmICAgU2hsb21pIEZpc2ggPHNobG9taWZAdmlwZS50ZWNobmlvbi5hYy5pbD4gICAoc3ZuLXB1c2gpCg==