PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5TU0wvVExTIFN0cm9uZyBFbmNyeXB0aW9uOiBBbiBJbnRyb2R1Y3Rpb24gLSBBcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjQ8L3RpdGxlPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik1haW4gc3R5bGVzaGVldCIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1sb29zZS0xMDBwYy5jc3MiIHJlbD0iYWx0ZXJuYXRlIHN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTm8gU2lkZWJhciAtIERlZmF1bHQgZm9udCBzaXplIiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLXByaW50LmNzcyIgcmVsPSJzdHlsZXNoZWV0IiBtZWRpYT0icHJpbnQiIHR5cGU9InRleHQvY3NzIiAvPjxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhyZWY9Ii4uL3N0eWxlL2Nzcy9wcmV0dGlmeS5jc3MiIC8+CjxzY3JpcHQgc3JjPSIuLi9zdHlsZS9zY3JpcHRzL3ByZXR0aWZ5Lm1pbi5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KPC9zY3JpcHQ+Cgo8bGluayBocmVmPSIuLi9pbWFnZXMvZmF2aWNvbi5pY28iIHJlbD0ic2hvcnRjdXQgaWNvbiIgLz48L2hlYWQ+Cjxib2R5IGlkPSJtYW51YWwtcGFnZSI+PGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9mZWF0aGVyLnBuZyIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi4vIj5WZXJzaW9uIDIuNDwvYT4gJmd0OyA8YSBocmVmPSIuLyI+U1NML1RMUzwvYT48L2Rpdj48ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPjxkaXYgaWQ9InByZWFtYmxlIj48aDE+U1NML1RMUyBTdHJvbmcgRW5jcnlwdGlvbjogQW4gSW50cm9kdWN0aW9uPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9zc2wvc3NsX2ludHJvLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9zc2wvc3NsX2ludHJvLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFu52FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vamEvc3NsL3NzbF9pbnRyby5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPjwvcD4KPC9kaXY+CgoKPHA+QXMgYW4gaW50cm9kdWN0aW9uIHRoaXMgY2hhcHRlciBpcyBhaW1lZCBhdCByZWFkZXJzIHdobyBhcmUgZmFtaWxpYXIKd2l0aCB0aGUgV2ViLCBIVFRQLCBhbmQgQXBhY2hlLCBidXQgYXJlIG5vdCBzZWN1cml0eSBleHBlcnRzLiBJdCBpcyBub3QKaW50ZW5kZWQgdG8gYmUgYSBkZWZpbml0aXZlIGd1aWRlIHRvIHRoZSBTU0wgcHJvdG9jb2wsIG5vciBkb2VzIGl0IGRpc2N1c3MKc3BlY2lmaWMgdGVjaG5pcXVlcyBmb3IgbWFuYWdpbmcgY2VydGlmaWNhdGVzIGluIGFuIG9yZ2FuaXphdGlvbiwgb3IgdGhlCmltcG9ydGFudCBsZWdhbCBpc3N1ZXMgb2YgcGF0ZW50cyBhbmQgaW1wb3J0IGFuZCBleHBvcnQgcmVzdHJpY3Rpb25zLgpSYXRoZXIsIGl0IGlzIGludGVuZGVkIHRvIHByb3ZpZGUgYSBjb21tb24gYmFja2dyb3VuZCB0byA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3NzbC5odG1sIj5tb2Rfc3NsPC9hPjwvY29kZT4gdXNlcnMgYnkgcHVsbGluZyB0b2dldGhlciB2YXJpb3VzIGNvbmNlcHRzLCBkZWZpbml0aW9ucywKYW5kIGV4YW1wbGVzIGFzIGEgc3RhcnRpbmcgcG9pbnQgZm9yIGZ1cnRoZXIgZXhwbG9yYXRpb24uPC9wPgo8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48dWwgaWQ9InRvYyI+PGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjY3J5cHRvZ3JhcGhpY3RlY2giPkNyeXB0b2dyYXBoaWMgVGVjaG5pcXVlczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNjZXJ0aWZpY2F0ZXMiPkNlcnRpZmljYXRlczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzc2wiPlNlY3VyZSBTb2NrZXRzIExheWVyIChTU0wpPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3JlZmVyZW5jZXMiPlJlZmVyZW5jZXM8L2E+PC9saT4KPC91bD48aDM+U2VlIGFsc288L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2xpPjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImNyeXB0b2dyYXBoaWN0ZWNoIiBpZD0iY3J5cHRvZ3JhcGhpY3RlY2giPkNyeXB0b2dyYXBoaWMgVGVjaG5pcXVlczwvYT48L2gyPgoKPHA+VW5kZXJzdGFuZGluZyBTU0wgcmVxdWlyZXMgYW4gdW5kZXJzdGFuZGluZyBvZiBjcnlwdG9ncmFwaGljCmFsZ29yaXRobXMsIG1lc3NhZ2UgZGlnZXN0IGZ1bmN0aW9ucyAoYWthLiBvbmUtd2F5IG9yIGhhc2ggZnVuY3Rpb25zKSwgYW5kCmRpZ2l0YWwgc2lnbmF0dXJlcy4gVGhlc2UgdGVjaG5pcXVlcyBhcmUgdGhlIHN1YmplY3Qgb2YgZW50aXJlIGJvb2tzIChzZWUKZm9yIGluc3RhbmNlIFs8YSBocmVmPSIjQUM5NiI+QUM5NjwvYT5dKSBhbmQgcHJvdmlkZSB0aGUgYmFzaXMgZm9yIHByaXZhY3ksCmludGVncml0eSwgYW5kIGF1dGhlbnRpY2F0aW9uLjwvcD4KCjxoMz48YSBuYW1lPSJjcnlwdG9ncmFwaGljYWxnbyIgaWQ9ImNyeXB0b2dyYXBoaWNhbGdvIj5DcnlwdG9ncmFwaGljIEFsZ29yaXRobXM8L2E+PC9oMz4KCiAgICA8cD5TdXBwb3NlIEFsaWNlIHdhbnRzIHRvIHNlbmQgYSBtZXNzYWdlIHRvIGhlciBiYW5rIHRvIHRyYW5zZmVyIHNvbWUKICAgIG1vbmV5LiBBbGljZSB3b3VsZCBsaWtlIHRoZSBtZXNzYWdlIHRvIGJlIHByaXZhdGUsIHNpbmNlIGl0IHdpbGwKICAgIGluY2x1ZGUgaW5mb3JtYXRpb24gc3VjaCBhcyBoZXIgYWNjb3VudCBudW1iZXIgYW5kIHRyYW5zZmVyIGFtb3VudC4gT25lCiAgICBzb2x1dGlvbiBpcyB0byB1c2UgYSBjcnlwdG9ncmFwaGljIGFsZ29yaXRobSwgYSB0ZWNobmlxdWUgdGhhdCB3b3VsZAogICAgdHJhbnNmb3JtIGhlciBtZXNzYWdlIGludG8gYW4gZW5jcnlwdGVkIGZvcm0sIHVucmVhZGFibGUgdW50aWwgaXQgaXMKICAgIGRlY3J5cHRlZC4gT25jZSBpbiB0aGlzIGZvcm0sIHRoZSBtZXNzYWdlIGNhbiBvbmx5IGJlCiAgICBkZWNyeXB0ZWQgYnkgdXNpbmcgYSBzZWNyZXQga2V5LiBXaXRob3V0IHRoZSBrZXkgdGhlIG1lc3NhZ2UgaXMgdXNlbGVzczoKICAgIGdvb2QgY3J5cHRvZ3JhcGhpYyBhbGdvcml0aG1zIG1ha2UgaXQgc28gZGlmZmljdWx0CiAgICBmb3IgaW50cnVkZXJzIHRvIGRlY29kZSB0aGUgb3JpZ2luYWwgdGV4dCB0aGF0IGl0IGlzbid0IHdvcnRoIHRoZWlyCiAgICBlZmZvcnQuPC9wPgoKICAgIDxwPlRoZXJlIGFyZSB0d28gY2F0ZWdvcmllcyBvZiBjcnlwdG9ncmFwaGljIGFsZ29yaXRobXM6IGNvbnZlbnRpb25hbAogICAgYW5kIHB1YmxpYyBrZXkuPC9wPgoKICAgIDxkbD4KICAgIDxkdD5Db252ZW50aW9uYWwgY3J5cHRvZ3JhcGh5PC9kdD4KICAgIDxkZD5hbHNvIGtub3duIGFzIHN5bW1ldHJpYyBjcnlwdG9ncmFwaHksIHJlcXVpcmVzIHRoZSBzZW5kZXIgYW5kCiAgICByZWNlaXZlciB0byBzaGFyZSBhIGtleTogYSBzZWNyZXQgcGllY2Ugb2YgaW5mb3JtYXRpb24gdGhhdCBtYXkgYmUKICAgIHVzZWQgdG8gZW5jcnlwdCBvciBkZWNyeXB0IGEgbWVzc2FnZS4gQXMgbG9uZyBhcyB0aGlzIGtleSBpcyBrZXB0CiAgICBzZWNyZXQsIG5vYm9keSBvdGhlciB0aGFuIHRoZSBzZW5kZXIgb3IgcmVjaXBpZW50IGNhbiByZWFkIHRoZSBtZXNzYWdlLgogICAgSWYgQWxpY2UgYW5kIHRoZSBiYW5rIGtub3cgYSBzZWNyZXQga2V5LCB0aGVuIHRoZXkgY2FuIHNlbmQgZWFjaCBvdGhlcgogICAgcHJpdmF0ZSBtZXNzYWdlcy4gVGhlIHRhc2sgb2Ygc2hhcmluZyBhIGtleSBiZXR3ZWVuIHNlbmRlciBhbmQgcmVjaXBpZW50CiAgICBiZWZvcmUgY29tbXVuaWNhdGluZywgd2hpbGUgYWxzbyBrZWVwaW5nIGl0IHNlY3JldCBmcm9tIG90aGVycywgY2FuIGJlCiAgICBwcm9ibGVtYXRpYy48L2RkPgoKICAgIDxkdD5QdWJsaWMga2V5IGNyeXB0b2dyYXBoeTwvZHQ+CiAgICA8ZGQ+YWxzbyBrbm93biBhcyBhc3ltbWV0cmljIGNyeXB0b2dyYXBoeSwgc29sdmVzIHRoZSBrZXkgZXhjaGFuZ2UKICAgIHByb2JsZW0gYnkgZGVmaW5pbmcgYW4gYWxnb3JpdGhtIHdoaWNoIHVzZXMgdHdvIGtleXMsIGVhY2ggb2Ygd2hpY2gKICAgIG1heSBiZSB1c2VkIHRvIGVuY3J5cHQgYSBtZXNzYWdlLiBJZiBvbmUga2V5IGlzIHVzZWQgdG8gZW5jcnlwdCBhCiAgICBtZXNzYWdlIHRoZW4gdGhlIG90aGVyIG11c3QgYmUgdXNlZCB0byBkZWNyeXB0IGl0LiBUaGlzIG1ha2VzIGl0CiAgICBwb3NzaWJsZSB0byByZWNlaXZlIHNlY3VyZSBtZXNzYWdlcyBieSBzaW1wbHkgcHVibGlzaGluZyBvbmUga2V5CiAgICAodGhlIHB1YmxpYyBrZXkpIGFuZCBrZWVwaW5nIHRoZSBvdGhlciBzZWNyZXQgKHRoZSBwcml2YXRlIGtleSkuPC9kZD4KICAgIDwvZGw+CgogICAgPHA+QW55b25lIGNhbiBlbmNyeXB0IGEgbWVzc2FnZSB1c2luZyB0aGUgcHVibGljIGtleSwgYnV0IG9ubHkgdGhlCiAgICBvd25lciBvZiB0aGUgcHJpdmF0ZSBrZXkgd2lsbCBiZSBhYmxlIHRvIHJlYWQgaXQuIEluIHRoaXMgd2F5LCBBbGljZQogICAgY2FuIHNlbmQgcHJpdmF0ZSBtZXNzYWdlcyB0byB0aGUgb3duZXIgb2YgYSBrZXktcGFpciAodGhlIGJhbmspLCBieQogICAgZW5jcnlwdGluZyB0aGVtIHVzaW5nIHRoZWlyIHB1YmxpYyBrZXkuIE9ubHkgdGhlIGJhbmsgd2lsbCBiZSBhYmxlIHRvCiAgICBkZWNyeXB0IHRoZW0uPC9wPgoKCjxoMz48YSBuYW1lPSJtZXNzYWdlZGlnZXN0cyIgaWQ9Im1lc3NhZ2VkaWdlc3RzIj5NZXNzYWdlIERpZ2VzdHM8L2E+PC9oMz4KCiAgICA8cD5BbHRob3VnaCBBbGljZSBtYXkgZW5jcnlwdCBoZXIgbWVzc2FnZSB0byBtYWtlIGl0IHByaXZhdGUsIHRoZXJlCiAgICBpcyBzdGlsbCBhIGNvbmNlcm4gdGhhdCBzb21lb25lIG1pZ2h0IG1vZGlmeSBoZXIgb3JpZ2luYWwgbWVzc2FnZSBvcgogICAgc3Vic3RpdHV0ZSBpdCB3aXRoIGEgZGlmZmVyZW50IG9uZSwgaW4gb3JkZXIgdG8gdHJhbnNmZXIgdGhlIG1vbmV5CiAgICB0byB0aGVtc2VsdmVzLCBmb3IgaW5zdGFuY2UuIE9uZSB3YXkgb2YgZ3VhcmFudGVlaW5nIHRoZSBpbnRlZ3JpdHkKICAgIG9mIEFsaWNlJ3MgbWVzc2FnZSBpcyBmb3IgaGVyIHRvIGNyZWF0ZSBhIGNvbmNpc2Ugc3VtbWFyeSBvZiBoZXIKICAgIG1lc3NhZ2UgYW5kIHNlbmQgdGhpcyB0byB0aGUgYmFuayBhcyB3ZWxsLiBVcG9uIHJlY2VpcHQgb2YgdGhlIG1lc3NhZ2UsCiAgICB0aGUgYmFuayBjcmVhdGVzIGl0cyBvd24gc3VtbWFyeSBhbmQgY29tcGFyZXMgaXQgd2l0aCB0aGUgb25lIEFsaWNlCiAgICBzZW50LiBJZiB0aGUgc3VtbWFyaWVzIGFyZSB0aGUgc2FtZSB0aGVuIHRoZSBtZXNzYWdlIGhhcyBiZWVuIHJlY2VpdmVkCiAgICBpbnRhY3QuPC9wPgoKICAgIDxwPkEgc3VtbWFyeSBzdWNoIGFzIHRoaXMgaXMgY2FsbGVkIGEgPGRmbj5tZXNzYWdlIGRpZ2VzdDwvZGZuPiwgPGVtPm9uZS13YXkKICAgIGZ1bmN0aW9uPC9lbT4gb3IgPGVtPmhhc2ggZnVuY3Rpb248L2VtPi4gTWVzc2FnZSBkaWdlc3RzIGFyZSB1c2VkIHRvIGNyZWF0ZQogICAgYSBzaG9ydCwgZml4ZWQtbGVuZ3RoIHJlcHJlc2VudGF0aW9uIG9mIGEgbG9uZ2VyLCB2YXJpYWJsZS1sZW5ndGggbWVzc2FnZS4KICAgIERpZ2VzdCBhbGdvcml0aG1zIGFyZSBkZXNpZ25lZCB0byBwcm9kdWNlIGEgdW5pcXVlIGRpZ2VzdCBmb3IgZWFjaAogICAgbWVzc2FnZS4gTWVzc2FnZSBkaWdlc3RzIGFyZSBkZXNpZ25lZCB0byBtYWtlIGl0IGltcHJhY3RpY2FsbHkgZGlmZmljdWx0CiAgICB0byBkZXRlcm1pbmUgdGhlIG1lc3NhZ2UgZnJvbSB0aGUgZGlnZXN0IGFuZCAoaW4gdGhlb3J5KSBpbXBvc3NpYmxlIHRvCiAgICBmaW5kIHR3byBkaWZmZXJlbnQgbWVzc2FnZXMgd2hpY2ggY3JlYXRlIHRoZSBzYW1lIGRpZ2VzdCAtLSB0aHVzCiAgICBlbGltaW5hdGluZyB0aGUgcG9zc2liaWxpdHkgb2Ygc3Vic3RpdHV0aW5nIG9uZSBtZXNzYWdlIGZvciBhbm90aGVyIHdoaWxlCiAgICBtYWludGFpbmluZyB0aGUgc2FtZSBkaWdlc3QuPC9wPgoKICAgIDxwPkFub3RoZXIgY2hhbGxlbmdlIHRoYXQgQWxpY2UgZmFjZXMgaXMgZmluZGluZyBhIHdheSB0byBzZW5kIHRoZSBkaWdlc3QKICAgIHRvIHRoZSBiYW5rIHNlY3VyZWx5OyBpZiB0aGUgZGlnZXN0IGlzIG5vdCBzZW50IHNlY3VyZWx5LCBpdHMgaW50ZWdyaXR5IG1heQogICAgYmUgY29tcHJvbWlzZWQgYW5kIHdpdGggaXQgdGhlIHBvc3NpYmlsaXR5IGZvciB0aGUgYmFuayB0byBkZXRlcm1pbmUgdGhlCiAgICBpbnRlZ3JpdHkgb2YgdGhlIG9yaWdpbmFsIG1lc3NhZ2UuIE9ubHkgaWYgdGhlIGRpZ2VzdCBpcyBzZW50IHNlY3VyZWx5IGNhbgogICAgdGhlIGludGVncml0eSBvZiB0aGUgYXNzb2NpYXRlZCBtZXNzYWdlIGJlIGRldGVybWluZWQuPC9wPgoKICAgIDxwPk9uZSB3YXkgdG8gc2VuZCB0aGUgZGlnZXN0IHNlY3VyZWx5IGlzIHRvIGluY2x1ZGUgaXQgaW4gYSBkaWdpdGFsCiAgICBzaWduYXR1cmUuPC9wPgoKCjxoMz48YSBuYW1lPSJkaWdpdGFsc2lnbmF0dXJlcyIgaWQ9ImRpZ2l0YWxzaWduYXR1cmVzIj5EaWdpdGFsIFNpZ25hdHVyZXM8L2E+PC9oMz4KPHA+V2hlbiBBbGljZSBzZW5kcyBhIG1lc3NhZ2UgdG8gdGhlIGJhbmssIHRoZSBiYW5rIG5lZWRzIHRvIGVuc3VyZSB0aGF0IHRoZQptZXNzYWdlIGlzIHJlYWxseSBmcm9tIGhlciwgc28gYW4gaW50cnVkZXIgY2Fubm90IHJlcXVlc3QgYSB0cmFuc2FjdGlvbgppbnZvbHZpbmcgaGVyIGFjY291bnQuIEEgPGVtPmRpZ2l0YWwgc2lnbmF0dXJlPC9lbT4sIGNyZWF0ZWQgYnkgQWxpY2UgYW5kCmluY2x1ZGVkIHdpdGggdGhlIG1lc3NhZ2UsIHNlcnZlcyB0aGlzIHB1cnBvc2UuPC9wPgoKPHA+RGlnaXRhbCBzaWduYXR1cmVzIGFyZSBjcmVhdGVkIGJ5IGVuY3J5cHRpbmcgYSBkaWdlc3Qgb2YgdGhlIG1lc3NhZ2UgYW5kCm90aGVyIGluZm9ybWF0aW9uIChzdWNoIGFzIGEgc2VxdWVuY2UgbnVtYmVyKSB3aXRoIHRoZSBzZW5kZXIncyBwcml2YXRlIGtleS4KVGhvdWdoIGFueW9uZSBjYW4gPGVtPmRlY3J5cHQ8L2VtPiB0aGUgc2lnbmF0dXJlIHVzaW5nIHRoZSBwdWJsaWMga2V5LCBvbmx5IHRoZQpzZW5kZXIga25vd3MgdGhlIHByaXZhdGUga2V5LiBUaGlzIG1lYW5zIHRoYXQgb25seSB0aGUgc2VuZGVyIGNhbiBoYXZlIHNpZ25lZAp0aGUgbWVzc2FnZS4gSW5jbHVkaW5nIHRoZSBkaWdlc3QgaW4gdGhlIHNpZ25hdHVyZSBtZWFucyB0aGUgc2lnbmF0dXJlIGlzIG9ubHkKZ29vZCBmb3IgdGhhdCBtZXNzYWdlOyBpdCBhbHNvIGVuc3VyZXMgdGhlIGludGVncml0eSBvZiB0aGUgbWVzc2FnZSBzaW5jZSBubyBvbmUKY2FuIGNoYW5nZSB0aGUgZGlnZXN0IGFuZCBzdGlsbCBzaWduIGl0LjwvcD4KPHA+VG8gZ3VhcmQgYWdhaW5zdCBpbnRlcmNlcHRpb24gYW5kIHJldXNlIG9mIHRoZSBzaWduYXR1cmUgYnkgYW4gaW50cnVkZXIgYXQgYQpsYXRlciBkYXRlLCB0aGUgc2lnbmF0dXJlIGNvbnRhaW5zIGEgdW5pcXVlIHNlcXVlbmNlIG51bWJlci4gVGhpcyBwcm90ZWN0cwp0aGUgYmFuayBmcm9tIGEgZnJhdWR1bGVudCBjbGFpbSBmcm9tIEFsaWNlIHRoYXQgc2hlIGRpZCBub3Qgc2VuZCB0aGUgbWVzc2FnZQotLSBvbmx5IHNoZSBjb3VsZCBoYXZlIHNpZ25lZCBpdCAobm9uLXJlcHVkaWF0aW9uKS48L3A+Cgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJjZXJ0aWZpY2F0ZXMiIGlkPSJjZXJ0aWZpY2F0ZXMiPkNlcnRpZmljYXRlczwvYT48L2gyPgoKPHA+QWx0aG91Z2ggQWxpY2UgY291bGQgaGF2ZSBzZW50IGEgcHJpdmF0ZSBtZXNzYWdlIHRvIHRoZSBiYW5rLCBzaWduZWQKaXQgYW5kIGVuc3VyZWQgdGhlIGludGVncml0eSBvZiB0aGUgbWVzc2FnZSwgc2hlIHN0aWxsIG5lZWRzIHRvIGJlIHN1cmUKdGhhdCBzaGUgaXMgcmVhbGx5IGNvbW11bmljYXRpbmcgd2l0aCB0aGUgYmFuay4gVGhpcyBtZWFucyB0aGF0IHNoZSBuZWVkcwp0byBiZSBzdXJlIHRoYXQgdGhlIHB1YmxpYyBrZXkgc2hlIGlzIHVzaW5nIGlzIHBhcnQgb2YgdGhlIGJhbmsncyBrZXktcGFpciwKYW5kIG5vdCBhbiBpbnRydWRlcidzLiBTaW1pbGFybHksIHRoZSBiYW5rIG5lZWRzIHRvIHZlcmlmeSB0aGF0IHRoZSBtZXNzYWdlCnNpZ25hdHVyZSByZWFsbHkgd2FzIHNpZ25lZCBieSB0aGUgcHJpdmF0ZSBrZXkgdGhhdCBiZWxvbmdzIHRvIEFsaWNlLjwvcD4KCjxwPklmIGVhY2ggcGFydHkgaGFzIGEgY2VydGlmaWNhdGUgd2hpY2ggdmFsaWRhdGVzIHRoZSBvdGhlcidzIGlkZW50aXR5LApjb25maXJtcyB0aGUgcHVibGljIGtleSBhbmQgaXMgc2lnbmVkIGJ5IGEgdHJ1c3RlZCBhZ2VuY3ksIHRoZW4gYm90aApjYW4gYmUgYXNzdXJlZCB0aGF0IHRoZXkgYXJlIGNvbW11bmljYXRpbmcgd2l0aCB3aG9tIHRoZXkgdGhpbmsgdGhleSBhcmUuClN1Y2ggYSB0cnVzdGVkIGFnZW5jeSBpcyBjYWxsZWQgYSA8ZW0+Q2VydGlmaWNhdGUgQXV0aG9yaXR5PC9lbT4gYW5kCmNlcnRpZmljYXRlcyBhcmUgdXNlZCBmb3IgYXV0aGVudGljYXRpb24uPC9wPgoKPGgzPjxhIG5hbWU9ImNlcnRpZmljYXRlY29udGVudHMiIGlkPSJjZXJ0aWZpY2F0ZWNvbnRlbnRzIj5DZXJ0aWZpY2F0ZSBDb250ZW50czwvYT48L2gzPgoKICAgIDxwPkEgY2VydGlmaWNhdGUgYXNzb2NpYXRlcyBhIHB1YmxpYyBrZXkgd2l0aCB0aGUgcmVhbCBpZGVudGl0eSBvZgogICAgYW4gaW5kaXZpZHVhbCwgc2VydmVyLCBvciBvdGhlciBlbnRpdHksIGtub3duIGFzIHRoZSBzdWJqZWN0LiBBcwogICAgc2hvd24gaW4gPGEgaHJlZj0iI3RhYmxlMSI+VGFibGUgMTwvYT4sIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzdWJqZWN0CiAgICBpbmNsdWRlcyBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiAodGhlIGRpc3Rpbmd1aXNoZWQgbmFtZSkgYW5kIHRoZQogICAgcHVibGljIGtleS4gSXQgYWxzbyBpbmNsdWRlcyB0aGUgaWRlbnRpZmljYXRpb24gYW5kIHNpZ25hdHVyZSBvZiB0aGUKICAgIENlcnRpZmljYXRlIEF1dGhvcml0eSB0aGF0IGlzc3VlZCB0aGUgY2VydGlmaWNhdGUgYW5kIHRoZSBwZXJpb2Qgb2YKICAgIHRpbWUgZHVyaW5nIHdoaWNoIHRoZSBjZXJ0aWZpY2F0ZSBpcyB2YWxpZC4gSXQgbWF5IGhhdmUgYWRkaXRpb25hbAogICAgaW5mb3JtYXRpb24gKG9yIGV4dGVuc2lvbnMpIGFzIHdlbGwgYXMgYWRtaW5pc3RyYXRpdmUgaW5mb3JtYXRpb24KICAgIGZvciB0aGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5J3MgdXNlLCBzdWNoIGFzIGEgc2VyaWFsIG51bWJlci48L3A+CgogICAgPGg0PjxhIG5hbWU9InRhYmxlMSIgaWQ9InRhYmxlMSI+VGFibGUgMTogQ2VydGlmaWNhdGUgSW5mb3JtYXRpb248L2E+PC9oND4KICAgIAogICAgPHRhYmxlPgogICAgCiAgICA8dHI+PHRoPlN1YmplY3Q8L3RoPgogICAgICAgIDx0ZD5EaXN0aW5ndWlzaGVkIE5hbWUsIFB1YmxpYyBLZXk8L3RkPjwvdHI+CiAgICA8dHI+PHRoPklzc3VlcjwvdGg+CiAgICAgICAgPHRkPkRpc3Rpbmd1aXNoZWQgTmFtZSwgU2lnbmF0dXJlPC90ZD48L3RyPgogICAgPHRyPjx0aD5QZXJpb2Qgb2YgVmFsaWRpdHk8L3RoPgogICAgICAgIDx0ZD5Ob3QgQmVmb3JlIERhdGUsIE5vdCBBZnRlciBEYXRlPC90ZD48L3RyPgogICAgPHRyPjx0aD5BZG1pbmlzdHJhdGl2ZSBJbmZvcm1hdGlvbjwvdGg+CiAgICAgICAgPHRkPlZlcnNpb24sIFNlcmlhbCBOdW1iZXI8L3RkPjwvdHI+CiAgICA8dHI+PHRoPkV4dGVuZGVkIEluZm9ybWF0aW9uPC90aD4KICAgICAgICA8dGQ+QmFzaWMgQ29uc3RyYWludHMsIE5ldHNjYXBlIEZsYWdzLCBldGMuPC90ZD48L3RyPgogICAgPC90YWJsZT4KICAgIAoKICAgIDxwPkEgZGlzdGluZ3Vpc2hlZCBuYW1lIGlzIHVzZWQgdG8gcHJvdmlkZSBhbiBpZGVudGl0eSBpbiBhIHNwZWNpZmljCiAgICBjb250ZXh0IC0tIGZvciBpbnN0YW5jZSwgYW4gaW5kaXZpZHVhbCBtaWdodCBoYXZlIGEgcGVyc29uYWwKICAgIGNlcnRpZmljYXRlIGFzIHdlbGwgYXMgb25lIGZvciB0aGVpciBpZGVudGl0eSBhcyBhbiBlbXBsb3llZS4KICAgIERpc3Rpbmd1aXNoZWQgbmFtZXMgYXJlIGRlZmluZWQgYnkgdGhlIFguNTA5IHN0YW5kYXJkIFs8YSBocmVmPSIjWDUwOSI+WDUwOTwvYT5dLCB3aGljaCBkZWZpbmVzIHRoZSBmaWVsZHMsIGZpZWxkIG5hbWVzIGFuZAogICAgYWJicmV2aWF0aW9ucyB1c2VkIHRvIHJlZmVyIHRvIHRoZSBmaWVsZHMgKHNlZSA8YSBocmVmPSIjdGFibGUyIj5UYWJsZQogICAgMjwvYT4pLjwvcD4KCiAgICA8aDQ+PGEgbmFtZT0idGFibGUyIiBpZD0idGFibGUyIj5UYWJsZSAyOiBEaXN0aW5ndWlzaGVkIE5hbWUgSW5mb3JtYXRpb248L2E+PC9oND4KICAgIAogICAgPHRhYmxlIGNsYXNzPSJib3JkZXJlZCI+CiAgICAKICAgIDx0cj48dGg+RE4gRmllbGQ8L3RoPgogICAgICAgIDx0aD5BYmJyZXYuPC90aD4KICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPgogICAgICAgIDx0aD5FeGFtcGxlPC90aD48L3RyPgogICAgPHRyPjx0ZD5Db21tb24gTmFtZTwvdGQ+CiAgICAgICAgPHRkPkNOPC90ZD4KICAgICAgICA8dGQ+TmFtZSBiZWluZyBjZXJ0aWZpZWQ8L3RkPgogICAgICAgIDx0ZD5DTj1Kb2UgQXZlcmFnZTwvdGQ+PC90cj4KICAgIDx0cj48dGQ+T3JnYW5pemF0aW9uIG9yIENvbXBhbnk8L3RkPgogICAgICAgIDx0ZD5PPC90ZD4KICAgICAgICA8dGQ+TmFtZSBpcyBhc3NvY2lhdGVkIHdpdGggdGhpczxiciAvPm9yZ2FuaXphdGlvbjwvdGQ+CiAgICAgICAgPHRkPk89U25ha2UgT2lsLCBMdGQuPC90ZD48L3RyPgogICAgPHRyPjx0ZD5Pcmdhbml6YXRpb25hbCBVbml0PC90ZD4KICAgICAgICA8dGQ+T1U8L3RkPgogICAgICAgIDx0ZD5OYW1lIGlzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIDxiciAvPm9yZ2FuaXphdGlvbiB1bml0LCBzdWNoCiAgICAgICAgYXMgYSBkZXBhcnRtZW50PC90ZD4KICAgICAgICA8dGQ+T1U9UmVzZWFyY2ggSW5zdGl0dXRlPC90ZD48L3RyPgogICAgPHRyPjx0ZD5DaXR5L0xvY2FsaXR5PC90ZD4KICAgICAgICA8dGQ+TDwvdGQ+CiAgICAgICAgPHRkPk5hbWUgaXMgbG9jYXRlZCBpbiB0aGlzIENpdHk8L3RkPgogICAgICAgIDx0ZD5MPVNuYWtlIENpdHk8L3RkPjwvdHI+CiAgICA8dHI+PHRkPlN0YXRlL1Byb3ZpbmNlPC90ZD4KICAgICAgICA8dGQ+U1Q8L3RkPgogICAgICAgIDx0ZD5OYW1lIGlzIGxvY2F0ZWQgaW4gdGhpcyBTdGF0ZS9Qcm92aW5jZTwvdGQ+CiAgICAgICAgPHRkPlNUPURlc2VydDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+Q291bnRyeTwvdGQ+CiAgICAgICAgPHRkPkM8L3RkPgogICAgICAgIDx0ZD5OYW1lIGlzIGxvY2F0ZWQgaW4gdGhpcyBDb3VudHJ5IChJU08gY29kZSk8L3RkPgogICAgICAgIDx0ZD5DPVhaPC90ZD48L3RyPgogICAgPC90YWJsZT4KICAgIAoKICAgIDxwPkEgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IG1heSBkZWZpbmUgYSBwb2xpY3kgc3BlY2lmeWluZyB3aGljaAogICAgZGlzdGluZ3Vpc2hlZCBmaWVsZCBuYW1lcyBhcmUgb3B0aW9uYWwgYW5kIHdoaWNoIGFyZSByZXF1aXJlZC4gSXQKICAgIG1heSBhbHNvIHBsYWNlIHJlcXVpcmVtZW50cyB1cG9uIHRoZSBmaWVsZCBjb250ZW50cywgYXMgbWF5IHVzZXJzIG9mCiAgICBjZXJ0aWZpY2F0ZXMuIEZvciBleGFtcGxlLCBhIE5ldHNjYXBlIGJyb3dzZXIgcmVxdWlyZXMgdGhhdCB0aGUKICAgIENvbW1vbiBOYW1lIGZvciBhIGNlcnRpZmljYXRlIHJlcHJlc2VudGluZyBhIHNlcnZlciBtYXRjaGVzIGEgd2lsZGNhcmQKICAgIHBhdHRlcm4gZm9yIHRoZSBkb21haW4gbmFtZSBvZiB0aGF0IHNlcnZlciwgc3VjaAogICAgYXMgPGNvZGU+Ki5zbmFrZW9pbC5jb208L2NvZGU+LjwvcD4KCiAgICA8cD5UaGUgYmluYXJ5IGZvcm1hdCBvZiBhIGNlcnRpZmljYXRlIGlzIGRlZmluZWQgdXNpbmcgdGhlIEFTTi4xCiAgICBub3RhdGlvbiBbPGEgaHJlZj0iI0FTTjEiPkFTTjE8L2E+XSBbPGEgaHJlZj0iI1BLQ1MiPlBLQ1M8L2E+XS4gVGhpcwogICAgbm90YXRpb24gZGVmaW5lcyBob3cgdG8gc3BlY2lmeSB0aGUgY29udGVudHMgYW5kIGVuY29kaW5nIHJ1bGVzCiAgICBkZWZpbmUgaG93IHRoaXMgaW5mb3JtYXRpb24gaXMgdHJhbnNsYXRlZCBpbnRvIGJpbmFyeSBmb3JtLiBUaGUgYmluYXJ5CiAgICBlbmNvZGluZyBvZiB0aGUgY2VydGlmaWNhdGUgaXMgZGVmaW5lZCB1c2luZyBEaXN0aW5ndWlzaGVkIEVuY29kaW5nCiAgICBSdWxlcyAoREVSKSwgd2hpY2ggYXJlIGJhc2VkIG9uIHRoZSBtb3JlIGdlbmVyYWwgQmFzaWMgRW5jb2RpbmcgUnVsZXMKICAgIChCRVIpLiBGb3IgdGhvc2UgdHJhbnNtaXNzaW9ucyB3aGljaCBjYW5ub3QgaGFuZGxlIGJpbmFyeSwgdGhlIGJpbmFyeQogICAgZm9ybSBtYXkgYmUgdHJhbnNsYXRlZCBpbnRvIGFuIEFTQ0lJIGZvcm0gYnkgdXNpbmcgQmFzZTY0IGVuY29kaW5nCiAgICBbPGEgaHJlZj0iI01JTUUiPk1JTUU8L2E+XS4gV2hlbiBwbGFjZWQgYmV0d2VlbiBiZWdpbiBhbmQgZW5kIGRlbGltaXRlcgogICAgbGluZXMgKGFzIGJlbG93KSwgdGhpcyBlbmNvZGVkIHZlcnNpb24gaXMgY2FsbGVkIGEgUEVNICgiUHJpdmFjeSBFbmhhbmNlZAogICAgTWFpbCIpIGVuY29kZWQgY2VydGlmaWNhdGUuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlIG9mIGEgUEVNLWVuY29kZWQgY2VydGlmaWNhdGUgKHNuYWtlb2lsLmNydCk8L2gzPjxwcmU+LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM3akNDQWxlZ0F3SUJBZ0lCQVRBTkJna3Foa2lHOXcwQkFRUUZBRENCcVRFTE1Ba0dBMVVFQmhNQ1dGa3gKRlRBVEJnTlZCQWdUREZOdVlXdGxJRVJsYzJWeWRERVRNQkVHQTFVRUJ4TUtVMjVoYTJVZ1ZHOTNiakVYTUJVRwpBMVVFQ2hNT1UyNWhhMlVnVDJsc0xDQk1kR1F4SGpBY0JnTlZCQXNURlVObGNuUnBabWxqWVhSbElFRjFkR2h2CmNtbDBlVEVWTUJNR0ExVUVBeE1NVTI1aGEyVWdUMmxzSUVOQk1SNHdIQVlKS29aSWh2Y05BUWtCRmc5allVQnoKYm1GclpXOXBiQzVrYjIwd0hoY05PVGd4TURJeE1EZzFPRE0yV2hjTk9Ua3hNREl4TURnMU9ETTJXakNCcHpFTApNQWtHQTFVRUJoTUNXRmt4RlRBVEJnTlZCQWdUREZOdVlXdGxJRVJsYzJWeWRERVRNQkVHQTFVRUJ4TUtVMjVoCmEyVWdWRzkzYmpFWE1CVUdBMVVFQ2hNT1UyNWhhMlVnVDJsc0xDQk1kR1F4RnpBVkJnTlZCQXNURGxkbFluTmwKY25abGNpQlVaV0Z0TVJrd0Z3WURWUVFERXhCM2QzY3VjMjVoYTJWdmFXd3VaRzl0TVI4d0hRWUpLb1pJaHZjTgpBUWtCRmhCM2QzZEFjMjVoYTJWdmFXd3VaRzl0TUlHZk1BMEdDU3FHU0liM0RRRUJBUVVBQTRHTkFEQ0JpUUtCCmdRREg5R2UvczJ6Y0grZGErclBUeC9EUFJwM3hHakhaNEdHNnBDbXZBRElFdEJ0S0JGQWNaNjRuK0R5N05wOGIKdktSK3l5NURHUWlpanNIMUQvajhIbEdFK3E0VFo4T0ZrN0JOQkZhekh4RmJZSTRPS01pQ3hkS3pkaWYxeWZhYQpsV29BTkZsQXpsU2RieGVHVkhvVDBLK2dUNXczVXh3Wkt2MkRMYkNUekxaeVB3SURBUUFCb3lZd0pEQVBCZ05WCkhSTUVDREFHQVFIL0FnRUFNQkVHQ1dDR1NBR0crRUlCQVFRRUF3SUFRREFOQmdrcWhraUc5dzBCQVFRRkFBT0IKZ1FBWlVJSEFMNEQwOW9FNkx2Mms1NkdwMzhPQkR1SUx2d0xnMXYxS0w4bVFSK0tGamdoQ3J0cHFhenRacWNEdAoycTJRb3l1bENnU3pIYkVHbWkwRXNka1BmZzZtcDBwZW5zc0lGZVBZTkkrLzh1OUhUNEx1S01KWDE1aHhCYW03CmRVSHpJQ3hCVkMxbG5IeVlHakR1QU1oZTM5NmxZQW44YkNsZDEvTDROTUdCQ1E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tPC9wcmU+PC9kaXY+CgoKPGgzPjxhIG5hbWU9ImNlcnRpZmljYXRlYXV0aG9yaXRpZXMiIGlkPSJjZXJ0aWZpY2F0ZWF1dGhvcml0aWVzIj5DZXJ0aWZpY2F0ZSBBdXRob3JpdGllczwvYT48L2gzPgoKICAgIDxwPkJ5IHZlcmlmeWluZyB0aGUgaW5mb3JtYXRpb24gaW4gYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0CiAgICBiZWZvcmUgZ3JhbnRpbmcgdGhlIGNlcnRpZmljYXRlLCB0aGUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IGFzc3VyZXMKICAgIGl0c2VsZiBvZiB0aGUgaWRlbnRpdHkgb2YgdGhlIHByaXZhdGUga2V5IG93bmVyIG9mIGEga2V5LXBhaXIuCiAgICBGb3IgaW5zdGFuY2UsIGlmIEFsaWNlIHJlcXVlc3RzIGEgcGVyc29uYWwgY2VydGlmaWNhdGUsIHRoZQogICAgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IG11c3QgZmlyc3QgbWFrZSBzdXJlIHRoYXQgQWxpY2UgcmVhbGx5IGlzIHRoZQogICAgcGVyc29uIHRoZSBjZXJ0aWZpY2F0ZSByZXF1ZXN0IGNsYWltcyBzaGUgaXMuPC9wPgoKICAgIDxoND48YSBuYW1lPSJjZXJ0aWZpY2F0ZWNoYWlucyIgaWQ9ImNlcnRpZmljYXRlY2hhaW5zIj5DZXJ0aWZpY2F0ZSBDaGFpbnM8L2E+PC9oND4KICAgIAogICAgICAgIDxwPkEgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IG1heSBhbHNvIGlzc3VlIGEgY2VydGlmaWNhdGUgZm9yCiAgICAgICAgYW5vdGhlciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkuIFdoZW4gZXhhbWluaW5nIGEgY2VydGlmaWNhdGUsCiAgICAgICAgQWxpY2UgbWF5IG5lZWQgdG8gZXhhbWluZSB0aGUgY2VydGlmaWNhdGUgb2YgdGhlIGlzc3VlciwgZm9yIGVhY2gKICAgICAgICBwYXJlbnQgQ2VydGlmaWNhdGUgQXV0aG9yaXR5LCB1bnRpbCByZWFjaGluZyBvbmUgd2hpY2ggc2hlIGhhcwogICAgICAgIGNvbmZpZGVuY2UgaW4uIFNoZSBtYXkgZGVjaWRlIHRvIHRydXN0IG9ubHkgY2VydGlmaWNhdGVzIHdpdGggYQogICAgICAgIGxpbWl0ZWQgY2hhaW4gb2YgaXNzdWVycywgdG8gcmVkdWNlIGhlciByaXNrIG9mIGEgImJhZCIgY2VydGlmaWNhdGUKICAgICAgICBpbiB0aGUgY2hhaW4uPC9wPgogICAgCgogICAgPGg0PjxhIG5hbWU9InJvb3RsZXZlbGNhIiBpZD0icm9vdGxldmVsY2EiPkNyZWF0aW5nIGEgUm9vdC1MZXZlbCBDQTwvYT48L2g0PgogICAgCiAgICAgICAgPHA+QXMgbm90ZWQgZWFybGllciwgZWFjaCBjZXJ0aWZpY2F0ZSByZXF1aXJlcyBhbiBpc3N1ZXIgdG8gYXNzZXJ0CiAgICAgICAgdGhlIHZhbGlkaXR5IG9mIHRoZSBpZGVudGl0eSBvZiB0aGUgY2VydGlmaWNhdGUgc3ViamVjdCwgdXAgdG8KICAgICAgICB0aGUgdG9wLWxldmVsIENlcnRpZmljYXRlIEF1dGhvcml0eSAoQ0EpLiBUaGlzIHByZXNlbnRzIGEgcHJvYmxlbToKICAgICAgICB3aG8gY2FuIHZvdWNoIGZvciB0aGUgY2VydGlmaWNhdGUgb2YgdGhlIHRvcC1sZXZlbAogICAgICAgIGF1dGhvcml0eSwgd2hpY2ggaGFzIG5vIGlzc3Vlcj8gSW4gdGhpcyB1bmlxdWUgY2FzZSwgdGhlCiAgICAgICAgY2VydGlmaWNhdGUgaXMgInNlbGYtc2lnbmVkIiwgc28gdGhlIGlzc3VlciBvZiB0aGUgY2VydGlmaWNhdGUgaXMKICAgICAgICB0aGUgc2FtZSBhcyB0aGUgc3ViamVjdC4gQnJvd3NlcnMgYXJlIHByZWNvbmZpZ3VyZWQgdG8gdHJ1c3Qgd2VsbC1rbm93bgogICAgICAgIGNlcnRpZmljYXRlIGF1dGhvcml0aWVzLCBidXQgaXQgaXMgaW1wb3J0YW50IHRvIGV4ZXJjaXNlIGV4dHJhIGNhcmUgaW4KICAgICAgICB0cnVzdGluZyBhIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlLiBUaGUgd2lkZSBwdWJsaWNhdGlvbiBvZiBhCiAgICAgICAgcHVibGljIGtleSBieSB0aGUgcm9vdCBhdXRob3JpdHkgcmVkdWNlcyB0aGUgcmlzayBpbiB0cnVzdGluZyB0aGlzCiAgICAgICAga2V5IC0tIGl0IHdvdWxkIGJlIG9idmlvdXMgaWYgc29tZW9uZSBlbHNlIHB1YmxpY2l6ZWQgYSBrZXkKICAgICAgICBjbGFpbWluZyB0byBiZSB0aGUgYXV0aG9yaXR5LjwvcD4KCiAgICAgICAgPHA+QSBudW1iZXIgb2YgY29tcGFuaWVzLCBzdWNoIGFzIDxhIGhyZWY9Imh0dHA6Ly93d3cudGhhd3RlLmNvbS8iPlRoYXd0ZTwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly93d3cudmVyaXNpZ24uY29tLyI+VmVyaVNpZ248L2E+CiAgICAgICAgaGF2ZSBlc3RhYmxpc2hlZCB0aGVtc2VsdmVzIGFzIENlcnRpZmljYXRlIEF1dGhvcml0aWVzLiBUaGVzZQogICAgICAgIGNvbXBhbmllcyBwcm92aWRlIHRoZSBmb2xsb3dpbmcgc2VydmljZXM6PC9wPgoKICAgICAgICA8dWw+CiAgICAgICAgPGxpPlZlcmlmeWluZyBjZXJ0aWZpY2F0ZSByZXF1ZXN0czwvbGk+CiAgICAgICAgPGxpPlByb2Nlc3NpbmcgY2VydGlmaWNhdGUgcmVxdWVzdHM8L2xpPgogICAgICAgIDxsaT5Jc3N1aW5nIGFuZCBtYW5hZ2luZyBjZXJ0aWZpY2F0ZXM8L2xpPgogICAgICAgIDwvdWw+CgogICAgICAgIDxwPkl0IGlzIGFsc28gcG9zc2libGUgdG8gY3JlYXRlIHlvdXIgb3duIENlcnRpZmljYXRlIEF1dGhvcml0eS4KICAgICAgICBBbHRob3VnaCByaXNreSBpbiB0aGUgSW50ZXJuZXQgZW52aXJvbm1lbnQsIGl0IG1heSBiZSB1c2VmdWwKICAgICAgICB3aXRoaW4gYW4gSW50cmFuZXQgd2hlcmUgdGhlIG9yZ2FuaXphdGlvbiBjYW4gZWFzaWx5IHZlcmlmeSB0aGUKICAgICAgICBpZGVudGl0aWVzIG9mIGluZGl2aWR1YWxzIGFuZCBzZXJ2ZXJzLjwvcD4KICAgIAoKICAgIDxoND48YSBuYW1lPSJjZXJ0aWZpY2F0ZW1hbmFnZW1lbnQiIGlkPSJjZXJ0aWZpY2F0ZW1hbmFnZW1lbnQiPkNlcnRpZmljYXRlIE1hbmFnZW1lbnQ8L2E+PC9oND4KICAgIAogICAgICAgIDxwPkVzdGFibGlzaGluZyBhIENlcnRpZmljYXRlIEF1dGhvcml0eSBpcyBhIHJlc3BvbnNpYmlsaXR5IHdoaWNoCiAgICAgICAgcmVxdWlyZXMgYSBzb2xpZCBhZG1pbmlzdHJhdGl2ZSwgdGVjaG5pY2FsIGFuZCBtYW5hZ2VtZW50CiAgICAgICAgZnJhbWV3b3JrLiBDZXJ0aWZpY2F0ZSBBdXRob3JpdGllcyBub3Qgb25seSBpc3N1ZSBjZXJ0aWZpY2F0ZXMsCiAgICAgICAgdGhleSBhbHNvIG1hbmFnZSB0aGVtIC0tIHRoYXQgaXMsIHRoZXkgZGV0ZXJtaW5lIGZvciBob3cgbG9uZwogICAgICAgIGNlcnRpZmljYXRlcyByZW1haW4gdmFsaWQsIHRoZXkgcmVuZXcgdGhlbSBhbmQga2VlcCBsaXN0cyBvZgogICAgICAgIGNlcnRpZmljYXRlcyB0aGF0IHdlcmUgaXNzdWVkIGluIHRoZSBwYXN0IGJ1dCBhcmUgbm8gbG9uZ2VyIHZhbGlkCiAgICAgICAgKENlcnRpZmljYXRlIFJldm9jYXRpb24gTGlzdHMsIG9yIENSTHMpLjwvcD4KCiAgICAgICAgPHA+Rm9yIGV4YW1wbGUsIGlmIEFsaWNlIGlzIGVudGl0bGVkIHRvIGEgY2VydGlmaWNhdGUgYXMgYW4KICAgICAgICBlbXBsb3llZSBvZiBhIGNvbXBhbnkgYnV0IGhhcyBub3cgbGVmdAogICAgICAgIHRoYXQgY29tcGFueSwgaGVyIGNlcnRpZmljYXRlIG1heSBuZWVkIHRvIGJlIHJldm9rZWQuCiAgICAgICAgQmVjYXVzZSBjZXJ0aWZpY2F0ZXMgYXJlIG9ubHkgaXNzdWVkIGFmdGVyIHRoZSBzdWJqZWN0J3MgaWRlbnRpdHkgaGFzCiAgICAgICAgYmVlbiB2ZXJpZmllZCBhbmQgY2FuIHRoZW4gYmUgcGFzc2VkIGFyb3VuZCB0byBhbGwgdGhvc2Ugd2l0aCB3aG9tCiAgICAgICAgdGhlIHN1YmplY3QgbWF5IGNvbW11bmljYXRlLCBpdCBpcyBpbXBvc3NpYmxlIHRvIHRlbGwgZnJvbSB0aGUKICAgICAgICBjZXJ0aWZpY2F0ZSBhbG9uZSB0aGF0IGl0IGhhcyBiZWVuIHJldm9rZWQuCiAgICAgICAgVGhlcmVmb3JlIHdoZW4gZXhhbWluaW5nIGNlcnRpZmljYXRlcyBmb3IgdmFsaWRpdHkKICAgICAgICBpdCBpcyBuZWNlc3NhcnkgdG8gY29udGFjdCB0aGUgaXNzdWluZyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgdG8KICAgICAgICBjaGVjayBDUkxzIC0tIHRoaXMgaXMgdXN1YWxseSBub3QgYW4gYXV0b21hdGVkIHBhcnQgb2YgdGhlIHByb2Nlc3MuPC9wPgoKICAgICAgICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Tm90ZTwvaDM+CiAgICAgICAgPHA+SWYgeW91IHVzZSBhIENlcnRpZmljYXRlIEF1dGhvcml0eSB0aGF0IGJyb3dzZXJzIGFyZSBub3QgY29uZmlndXJlZAogICAgICAgIHRvIHRydXN0IGJ5IGRlZmF1bHQsIGl0IGlzIG5lY2Vzc2FyeSB0byBsb2FkIHRoZSBDZXJ0aWZpY2F0ZQogICAgICAgIEF1dGhvcml0eSBjZXJ0aWZpY2F0ZSBpbnRvIHRoZSBicm93c2VyLCBlbmFibGluZyB0aGUgYnJvd3NlciB0bwogICAgICAgIHZhbGlkYXRlIHNlcnZlciBjZXJ0aWZpY2F0ZXMgc2lnbmVkIGJ5IHRoYXQgQ2VydGlmaWNhdGUgQXV0aG9yaXR5LgogICAgICAgIERvaW5nIHNvIG1heSBiZSBkYW5nZXJvdXMsIHNpbmNlIG9uY2UgbG9hZGVkLCB0aGUgYnJvd3NlciB3aWxsCiAgICAgICAgYWNjZXB0IGFsbCBjZXJ0aWZpY2F0ZXMgc2lnbmVkIGJ5IHRoYXQgQ2VydGlmaWNhdGUgQXV0aG9yaXR5LjwvcD4KICAgICAgICA8L2Rpdj4KICAgIAoKCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InNzbCIgaWQ9InNzbCI+U2VjdXJlIFNvY2tldHMgTGF5ZXIgKFNTTCk8L2E+PC9oMj4KCjxwPlRoZSBTZWN1cmUgU29ja2V0cyBMYXllciBwcm90b2NvbCBpcyBhIHByb3RvY29sIGxheWVyIHdoaWNoIG1heSBiZQpwbGFjZWQgYmV0d2VlbiBhIHJlbGlhYmxlIGNvbm5lY3Rpb24tb3JpZW50ZWQgbmV0d29yayBsYXllciBwcm90b2NvbAooZS5nLiBUQ1AvSVApIGFuZCB0aGUgYXBwbGljYXRpb24gcHJvdG9jb2wgbGF5ZXIgKGUuZy4gSFRUUCkuIFNTTCBwcm92aWRlcwpmb3Igc2VjdXJlIGNvbW11bmljYXRpb24gYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlciBieSBhbGxvd2luZyBtdXR1YWwKYXV0aGVudGljYXRpb24sIHRoZSB1c2Ugb2YgZGlnaXRhbCBzaWduYXR1cmVzIGZvciBpbnRlZ3JpdHkgYW5kIGVuY3J5cHRpb24KZm9yIHByaXZhY3kuPC9wPgoKPHA+VGhlIHByb3RvY29sIGlzIGRlc2lnbmVkIHRvIHN1cHBvcnQgYSByYW5nZSBvZiBjaG9pY2VzIGZvciBzcGVjaWZpYwphbGdvcml0aG1zIHVzZWQgZm9yIGNyeXB0b2dyYXBoeSwgZGlnZXN0cyBhbmQgc2lnbmF0dXJlcy4gVGhpcyBhbGxvd3MKYWxnb3JpdGhtIHNlbGVjdGlvbiBmb3Igc3BlY2lmaWMgc2VydmVycyB0byBiZSBtYWRlIGJhc2VkIG9uIGxlZ2FsLCBleHBvcnQKb3Igb3RoZXIgY29uY2VybnMgYW5kIGFsc28gZW5hYmxlcyB0aGUgcHJvdG9jb2wgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgbmV3CmFsZ29yaXRobXMuIENob2ljZXMgYXJlIG5lZ290aWF0ZWQgYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlciB3aGVuCmVzdGFibGlzaGluZyBhIHByb3RvY29sIHNlc3Npb24uPC9wPgoKPGgzPjxhIG5hbWU9InRhYmxlNCIgaWQ9InRhYmxlNCI+VGFibGUgNDogVmVyc2lvbnMgb2YgdGhlIFNTTCBwcm90b2NvbDwvYT48L2gzPgoKICAgIDx0YWJsZSBjbGFzcz0iYm9yZGVyZWQiPgogICAgCiAgICA8dHI+PHRoPlZlcnNpb248L3RoPgogICAgICAgIDx0aD5Tb3VyY2U8L3RoPgogICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+CiAgICA8L3RyPgogICAgPHRyPjx0ZD5TU0wgdjIuMDwvdGQ+CiAgICAgICAgPHRkPlZlbmRvciBTdGFuZGFyZCAoZnJvbSBOZXRzY2FwZSBDb3JwLik8L3RkPgogICAgICAgIDx0ZD5GaXJzdCBTU0wgcHJvdG9jb2wgZm9yIHdoaWNoIGltcGxlbWVudGF0aW9ucyBleGlzdDwvdGQ+CiAgICA8L3RyPgogICAgPHRyPjx0ZD5TU0wgdjMuMDwvdGQ+CiAgICAgICAgPHRkPkV4cGlyZWQgSW50ZXJuZXQgRHJhZnQgKGZyb20gTmV0c2NhcGUgQ29ycC4pIFs8YSBocmVmPSIjU1NMMyI+U1NMMzwvYT5dPC90ZD4KICAgICAgICA8dGQ+UmV2aXNpb25zIHRvIHByZXZlbnQgc3BlY2lmaWMgc2VjdXJpdHkgYXR0YWNrcywgYWRkIG5vbi1SU0EKICAgICAgICBjaXBoZXJzIGFuZCBzdXBwb3J0IGZvciBjZXJ0aWZpY2F0ZSBjaGFpbnM8L3RkPgogICAgPC90cj4KICAgIDx0cj48dGQ+VExTIHYxLjA8L3RkPgogICAgICAgIDx0ZD5Qcm9wb3NlZCBJbnRlcm5ldCBTdGFuZGFyZCAoZnJvbSBJRVRGKSBbPGEgaHJlZj0iI1RMUzEiPlRMUzE8L2E+XTwvdGQ+CiAgICAgICAgPHRkPlJldmlzaW9uIG9mIFNTTCAzLjAgdG8gdXBkYXRlIHRoZSBNQUMgbGF5ZXIgdG8gSE1BQywgYWRkIGJsb2NrCiAgICAgICAgcGFkZGluZyBmb3IgYmxvY2sgY2lwaGVycywgbWVzc2FnZSBvcmRlciBzdGFuZGFyZGl6YXRpb24gYW5kIG1vcmUKICAgICAgICBhbGVydCBtZXNzYWdlcy48L3RkPgogICAgPC90cj4KICAgIDx0cj48dGQ+VExTIHYxLjE8L3RkPgogICAgICAgIDx0ZD5Qcm9wb3NlZCBJbnRlcm5ldCBTdGFuZGFyZCAoZnJvbSBJRVRGKSBbPGEgaHJlZj0iI1RMUzExIj5UTFMxMTwvYT5dPC90ZD4KICAgICAgICA8dGQ+VXBkYXRlIG9mIFRMUyAxLjAgdG8gYWRkIHByb3RlY3Rpb24gYWdhaW5zdCBDaXBoZXIgYmxvY2sgY2hhaW5pbmcKICAgICAgICAoQ0JDKSBhdHRhY2tzLjwvdGQ+CiAgICA8L3RyPgogICAgPHRyPjx0ZD5UTFMgdjEuMjwvdGQ+CiAgICAgICAgPHRkPlByb3Bvc2VkIEludGVybmV0IFN0YW5kYXJkIChmcm9tIElFVEYpIFs8YSBocmVmPSIjVExTMTIiPlRMUzEyPC9hPl08L3RkPgogICAgICAgIDx0ZD5VcGRhdGUgb2YgVExTIDEuMiBkZXByZWNhdGluZyBNRDUgYXMgaGFzaCwgYW5kIGFkZGluZyBpbmNvbXBhdGliaWxpdHkKICAgICAgICB0byBTU0wgc28gaXQgd2lsbCBuZXZlciBuZWdvdGlhdGUgdGhlIHVzZSBvZiBTU0x2Mi48L3RkPgogICAgPC90cj4KICAgIDwvdGFibGU+CgoKPHA+VGhlcmUgYXJlIGEgbnVtYmVyIG9mIHZlcnNpb25zIG9mIHRoZSBTU0wgcHJvdG9jb2wsIGFzIHNob3duIGluCjxhIGhyZWY9IiN0YWJsZTQiPlRhYmxlIDQ8L2E+LiBBcyBub3RlZCB0aGVyZSwgb25lIG9mIHRoZSBiZW5lZml0cyBpbgpTU0wgMy4wIGlzIHRoYXQgaXQgYWRkcyBzdXBwb3J0IG9mIGNlcnRpZmljYXRlIGNoYWluIGxvYWRpbmcuIFRoaXMgZmVhdHVyZQphbGxvd3MgYSBzZXJ2ZXIgdG8gcGFzcyBhIHNlcnZlciBjZXJ0aWZpY2F0ZSBhbG9uZyB3aXRoIGlzc3VlciBjZXJ0aWZpY2F0ZXMKdG8gdGhlIGJyb3dzZXIuIENoYWluIGxvYWRpbmcgYWxzbyBwZXJtaXRzIHRoZSBicm93c2VyIHRvIHZhbGlkYXRlIHRoZQpzZXJ2ZXIgY2VydGlmaWNhdGUsIGV2ZW4gaWYgQ2VydGlmaWNhdGUgQXV0aG9yaXR5IGNlcnRpZmljYXRlcyBhcmUgbm90Cmluc3RhbGxlZCBmb3IgdGhlIGludGVybWVkaWF0ZSBpc3N1ZXJzLCBzaW5jZSB0aGV5IGFyZSBpbmNsdWRlZCBpbiB0aGUKY2VydGlmaWNhdGUgY2hhaW4uIFNTTCAzLjAgaXMgdGhlIGJhc2lzIGZvciB0aGUgVHJhbnNwb3J0IExheWVyIFNlY3VyaXR5Cls8YSBocmVmPSIjVExTMSI+VExTPC9hPl0gcHJvdG9jb2wgc3RhbmRhcmQsIGN1cnJlbnRseSBpbiBkZXZlbG9wbWVudCBieQp0aGUgSW50ZXJuZXQgRW5naW5lZXJpbmcgVGFzayBGb3JjZSAoSUVURikuPC9wPgoKPGgzPjxhIG5hbWU9InNlc3Npb24iIGlkPSJzZXNzaW9uIj5Fc3RhYmxpc2hpbmcgYSBTZXNzaW9uPC9hPjwvaDM+CgogICAgPHA+VGhlIFNTTCBzZXNzaW9uIGlzIGVzdGFibGlzaGVkIGJ5IGZvbGxvd2luZyBhIGhhbmRzaGFrZSBzZXF1ZW5jZQogICAgYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlciwgYXMgc2hvd24gaW4gPGEgaHJlZj0iI2ZpZ3VyZTEiPkZpZ3VyZSAxPC9hPi4gVGhpcyBzZXF1ZW5jZSBtYXkgdmFyeSwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIHNlcnZlcgogICAgaXMgY29uZmlndXJlZCB0byBwcm92aWRlIGEgc2VydmVyIGNlcnRpZmljYXRlIG9yIHJlcXVlc3QgYSBjbGllbnQKICAgIGNlcnRpZmljYXRlLiBBbHRob3VnaCBjYXNlcyBleGlzdCB3aGVyZSBhZGRpdGlvbmFsIGhhbmRzaGFrZSBzdGVwcwogICAgYXJlIHJlcXVpcmVkIGZvciBtYW5hZ2VtZW50IG9mIGNpcGhlciBpbmZvcm1hdGlvbiwgdGhpcyBhcnRpY2xlCiAgICBzdW1tYXJpemVzIG9uZSBjb21tb24gc2NlbmFyaW8uIFNlZSB0aGUgU1NMIHNwZWNpZmljYXRpb24gZm9yIHRoZSBmdWxsCiAgICByYW5nZSBvZiBwb3NzaWJpbGl0aWVzLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Tm90ZTwvaDM+CiAgICA8cD5PbmNlIGFuIFNTTCBzZXNzaW9uIGhhcyBiZWVuIGVzdGFibGlzaGVkLCBpdCBtYXkgYmUgcmV1c2VkLiBUaGlzCiAgICBhdm9pZHMgdGhlIHBlcmZvcm1hbmNlIHBlbmFsdHkgb2YgcmVwZWF0aW5nIHRoZSBtYW55IHN0ZXBzIG5lZWRlZAogICAgdG8gc3RhcnQgYSBzZXNzaW9uLiBUbyBkbyB0aGlzLCB0aGUgc2VydmVyIGFzc2lnbnMgZWFjaCBTU0wgc2Vzc2lvbiBhCiAgICB1bmlxdWUgc2Vzc2lvbiBpZGVudGlmaWVyIHdoaWNoIGlzIGNhY2hlZCBpbiB0aGUgc2VydmVyIGFuZCB3aGljaCB0aGUKICAgIGNsaWVudCBjYW4gdXNlIGluIGZ1dHVyZSBjb25uZWN0aW9ucyB0byByZWR1Y2UgdGhlIGhhbmRzaGFrZSB0aW1lCiAgICAodW50aWwgdGhlIHNlc3Npb24gaWRlbnRpZmllciBleHBpcmVzIGZyb20gdGhlIGNhY2hlIG9mIHRoZSBzZXJ2ZXIpLjwvcD4KICAgIDwvZGl2PgoKICAgIDxwIGNsYXNzPSJmaWd1cmUiPgogICAgPGltZyBzcmM9Ii4uL2ltYWdlcy9zc2xfaW50cm9fZmlnMS5naWYiIGFsdD0iIiB3aWR0aD0iNDIzIiBoZWlnaHQ9IjMyNyIgLz48YnIgLz4KICAgIDxhIGlkPSJmaWd1cmUxIiBuYW1lPSJmaWd1cmUxIj48ZGZuPkZpZ3VyZSAxPC9kZm4+PC9hPjogU2ltcGxpZmllZCBTU0wKICAgIEhhbmRzaGFrZSBTZXF1ZW5jZTwvcD4KCiAgICA8cD5UaGUgZWxlbWVudHMgb2YgdGhlIGhhbmRzaGFrZSBzZXF1ZW5jZSwgYXMgdXNlZCBieSB0aGUgY2xpZW50IGFuZAogICAgc2VydmVyLCBhcmUgbGlzdGVkIGJlbG93OjwvcD4KCiAgICA8b2w+CiAgICA8bGk+TmVnb3RpYXRlIHRoZSBDaXBoZXIgU3VpdGUgdG8gYmUgdXNlZCBkdXJpbmcgZGF0YSB0cmFuc2ZlcjwvbGk+CiAgICA8bGk+RXN0YWJsaXNoIGFuZCBzaGFyZSBhIHNlc3Npb24ga2V5IGJldHdlZW4gY2xpZW50IGFuZCBzZXJ2ZXI8L2xpPgogICAgPGxpPk9wdGlvbmFsbHkgYXV0aGVudGljYXRlIHRoZSBzZXJ2ZXIgdG8gdGhlIGNsaWVudDwvbGk+CiAgICA8bGk+T3B0aW9uYWxseSBhdXRoZW50aWNhdGUgdGhlIGNsaWVudCB0byB0aGUgc2VydmVyPC9saT4KICAgIDwvb2w+CgogICAgPHA+VGhlIGZpcnN0IHN0ZXAsIENpcGhlciBTdWl0ZSBOZWdvdGlhdGlvbiwgYWxsb3dzIHRoZSBjbGllbnQgYW5kCiAgICBzZXJ2ZXIgdG8gY2hvb3NlIGEgQ2lwaGVyIFN1aXRlIHN1cHBvcnRlZCBieSBib3RoIG9mIHRoZW0uIFRoZSBTU0wzLjAKICAgIHByb3RvY29sIHNwZWNpZmljYXRpb24gZGVmaW5lcyAzMSBDaXBoZXIgU3VpdGVzLiBBIENpcGhlciBTdWl0ZSBpcwogICAgZGVmaW5lZCBieSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6PC9wPgoKICAgIDx1bD4KICAgIDxsaT5LZXkgRXhjaGFuZ2UgTWV0aG9kPC9saT4KICAgIDxsaT5DaXBoZXIgZm9yIERhdGEgVHJhbnNmZXI8L2xpPgogICAgPGxpPk1lc3NhZ2UgRGlnZXN0IGZvciBjcmVhdGluZyB0aGUgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlIChNQUMpPC9saT4KICAgIDwvdWw+CgogICAgPHA+VGhlc2UgdGhyZWUgZWxlbWVudHMgYXJlIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbnMgdGhhdCBmb2xsb3cuPC9wPgoKCjxoMz48YSBuYW1lPSJrZXlleGNoYW5nZSIgaWQ9ImtleWV4Y2hhbmdlIj5LZXkgRXhjaGFuZ2UgTWV0aG9kPC9hPjwvaDM+CgogICAgPHA+VGhlIGtleSBleGNoYW5nZSBtZXRob2QgZGVmaW5lcyBob3cgdGhlIHNoYXJlZCBzZWNyZXQgc3ltbWV0cmljCiAgICBjcnlwdG9ncmFwaHkga2V5IHVzZWQgZm9yIGFwcGxpY2F0aW9uIGRhdGEgdHJhbnNmZXIgd2lsbCBiZSBhZ3JlZWQKICAgIHVwb24gYnkgY2xpZW50IGFuZCBzZXJ2ZXIuIFNTTCAyLjAgdXNlcyBSU0Ega2V5IGV4Y2hhbmdlIG9ubHksIHdoaWxlCiAgICBTU0wgMy4wIHN1cHBvcnRzIGEgY2hvaWNlIG9mIGtleSBleGNoYW5nZSBhbGdvcml0aG1zIGluY2x1ZGluZwogICAgUlNBIGtleSBleGNoYW5nZSAod2hlbiBjZXJ0aWZpY2F0ZXMgYXJlIHVzZWQpLCBhbmQgRGlmZmllLUhlbGxtYW4ga2V5CiAgICBleGNoYW5nZSAoZm9yIGV4Y2hhbmdpbmcga2V5cyB3aXRob3V0IGNlcnRpZmljYXRlcywgb3Igd2l0aG91dCBwcmlvcgogICAgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIGNsaWVudCBhbmQgc2VydmVyKS48L3A+CgogICAgPHA+T25lIHZhcmlhYmxlIGluIHRoZSBjaG9pY2Ugb2Yga2V5IGV4Y2hhbmdlIG1ldGhvZHMgaXMgZGlnaXRhbAogICAgc2lnbmF0dXJlcyAtLSB3aGV0aGVyIG9yIG5vdCB0byB1c2UgdGhlbSwgYW5kIGlmIHNvLCB3aGF0IGtpbmQgb2YKICAgIHNpZ25hdHVyZXMgdG8gdXNlLiBTaWduaW5nIHdpdGggYSBwcml2YXRlIGtleSBwcm92aWRlcyBwcm90ZWN0aW9uCiAgICBhZ2FpbnN0IGEgbWFuLWluLXRoZS1taWRkbGUtYXR0YWNrIGR1cmluZyB0aGUgaW5mb3JtYXRpb24gZXhjaGFuZ2UKICAgIHVzZWQgdG8gZ2VuZXJhdGluZyB0aGUgc2hhcmVkIGtleSBbPGEgaHJlZj0iI0FDOTYiPkFDOTY8L2E+LCBwNTE2XS48L3A+CgoKPGgzPjxhIG5hbWU9ImNpcGhlcnRyYW5zZmVyIiBpZD0iY2lwaGVydHJhbnNmZXIiPkNpcGhlciBmb3IgRGF0YSBUcmFuc2ZlcjwvYT48L2gzPgoKICAgIDxwPlNTTCB1c2VzIGNvbnZlbnRpb25hbCBzeW1tZXRyaWMgY3J5cHRvZ3JhcGh5LCBhcyBkZXNjcmliZWQgZWFybGllciwKICAgIGZvciBlbmNyeXB0aW5nIG1lc3NhZ2VzIGluIGEgc2Vzc2lvbi4KICAgIFRoZXJlIGFyZSBuaW5lIGNob2ljZXMgb2YgaG93IHRvIGVuY3J5cHQsIGluY2x1ZGluZyB0aGUgb3B0aW9uIG5vdCB0bwogICAgZW5jcnlwdDo8L3A+CgogICAgPHVsPgogICAgPGxpPk5vIGVuY3J5cHRpb248L2xpPgogICAgPGxpPlN0cmVhbSBDaXBoZXJzCiAgICAgICAgPHVsPgogICAgICAgIDxsaT5SQzQgd2l0aCA0MC1iaXQga2V5czwvbGk+CiAgICAgICAgPGxpPlJDNCB3aXRoIDEyOC1iaXQga2V5czwvbGk+CiAgICAgICAgPC91bD48L2xpPgogICAgPGxpPkNCQyBCbG9jayBDaXBoZXJzCiAgICAgICAgPHVsPjxsaT5SQzIgd2l0aCA0MCBiaXQga2V5PC9saT4KICAgICAgICA8bGk+REVTIHdpdGggNDAgYml0IGtleTwvbGk+CiAgICAgICAgPGxpPkRFUyB3aXRoIDU2IGJpdCBrZXk8L2xpPgogICAgICAgIDxsaT5UcmlwbGUtREVTIHdpdGggMTY4IGJpdCBrZXk8L2xpPgogICAgICAgIDxsaT5JZGVhICgxMjggYml0IGtleSk8L2xpPgogICAgICAgIDxsaT5Gb3J0ZXp6YSAoOTYgYml0IGtleSk8L2xpPgogICAgICAgIDwvdWw+PC9saT4KICAgIDwvdWw+CgogICAgPHA+IkNCQyIgcmVmZXJzIHRvIENpcGhlciBCbG9jayBDaGFpbmluZywgd2hpY2ggbWVhbnMgdGhhdCBhCiAgICBwb3J0aW9uIG9mIHRoZSBwcmV2aW91c2x5IGVuY3J5cHRlZCBjaXBoZXIgdGV4dCBpcyB1c2VkIGluIHRoZQogICAgZW5jcnlwdGlvbiBvZiB0aGUgY3VycmVudCBibG9jay4gIkRFUyIgcmVmZXJzIHRvIHRoZSBEYXRhIEVuY3J5cHRpb24KICAgIFN0YW5kYXJkIFs8YSBocmVmPSIjQUM5NiI+QUM5NjwvYT4sIGNoMTJdLCB3aGljaCBoYXMgYSBudW1iZXIgb2YKICAgIHZhcmlhbnRzIChpbmNsdWRpbmcgREVTNDAgYW5kIDNERVNfRURFKS4gIklkZWEiIGlzIGN1cnJlbnRseSBvbmUgb2YKICAgIHRoZSBiZXN0IGFuZCBjcnlwdG9ncmFwaGljYWxseSBzdHJvbmdlc3QgYWxnb3JpdGhtcyBhdmFpbGFibGUsCiAgICBhbmQgIlJDMiIgaXMgYSBwcm9wcmlldGFyeSBhbGdvcml0aG0gZnJvbSBSU0EgRFNJIFs8YSBocmVmPSIjQUM5NiI+QUM5NjwvYT4sIGNoMTNdLjwvcD4KCgo8aDM+PGEgbmFtZT0iZGlnZXN0ZnVudGlvbiIgaWQ9ImRpZ2VzdGZ1bnRpb24iPkRpZ2VzdCBGdW5jdGlvbjwvYT48L2gzPgoKICAgIDxwPlRoZSBjaG9pY2Ugb2YgZGlnZXN0IGZ1bmN0aW9uIGRldGVybWluZXMgaG93IGEgZGlnZXN0IGlzIGNyZWF0ZWQKICAgIGZyb20gYSByZWNvcmQgdW5pdC4gU1NMIHN1cHBvcnRzIHRoZSBmb2xsb3dpbmc6PC9wPgoKICAgIDx1bD4KICAgIDxsaT5ObyBkaWdlc3QgKE51bGwgY2hvaWNlKTwvbGk+CiAgICA8bGk+TUQ1LCBhIDEyOC1iaXQgaGFzaDwvbGk+CiAgICA8bGk+U2VjdXJlIEhhc2ggQWxnb3JpdGhtIChTSEEtMSksIGEgMTYwLWJpdCBoYXNoPC9saT4KICAgIDwvdWw+CgogICAgPHA+VGhlIG1lc3NhZ2UgZGlnZXN0IGlzIHVzZWQgdG8gY3JlYXRlIGEgTWVzc2FnZSBBdXRoZW50aWNhdGlvbiBDb2RlCiAgICAoTUFDKSB3aGljaCBpcyBlbmNyeXB0ZWQgd2l0aCB0aGUgbWVzc2FnZSB0byB2ZXJpZnkgaW50ZWdyaXR5IGFuZCB0bwogICAgcHJvdGVjdCBhZ2FpbnN0IHJlcGxheSBhdHRhY2tzLjwvcD4KCgo8aDM+PGEgbmFtZT0iaGFuZHNoYWtlIiBpZD0iaGFuZHNoYWtlIj5IYW5kc2hha2UgU2VxdWVuY2UgUHJvdG9jb2w8L2E+PC9oMz4KCiAgICA8cD5UaGUgaGFuZHNoYWtlIHNlcXVlbmNlIHVzZXMgdGhyZWUgcHJvdG9jb2xzOjwvcD4KCiAgICA8dWw+CiAgICA8bGk+VGhlIDxkZm4+U1NMIEhhbmRzaGFrZSBQcm90b2NvbDwvZGZuPgogICAgZm9yIHBlcmZvcm1pbmcgdGhlIGNsaWVudCBhbmQgc2VydmVyIFNTTCBzZXNzaW9uIGVzdGFibGlzaG1lbnQuPC9saT4KICAgIDxsaT5UaGUgPGRmbj5TU0wgQ2hhbmdlIENpcGhlciBTcGVjIFByb3RvY29sPC9kZm4+IGZvciBhY3R1YWxseQogICAgZXN0YWJsaXNoaW5nIGFncmVlbWVudCBvbiB0aGUgQ2lwaGVyIFN1aXRlIGZvciB0aGUgc2Vzc2lvbi48L2xpPgogICAgPGxpPlRoZSA8ZGZuPlNTTCBBbGVydCBQcm90b2NvbDwvZGZuPiBmb3IgY29udmV5aW5nIFNTTCBlcnJvcgogICAgbWVzc2FnZXMgYmV0d2VlbiBjbGllbnQgYW5kIHNlcnZlci48L2xpPgogICAgPC91bD4KCiAgICA8cD5UaGVzZSBwcm90b2NvbHMsIGFzIHdlbGwgYXMgYXBwbGljYXRpb24gcHJvdG9jb2wgZGF0YSwgYXJlCiAgICBlbmNhcHN1bGF0ZWQgaW4gdGhlIDxkZm4+U1NMIFJlY29yZCBQcm90b2NvbDwvZGZuPiwgYXMgc2hvd24gaW4KICAgIDxhIGhyZWY9IiNmaWd1cmUyIj5GaWd1cmUgMjwvYT4uIEFuIGVuY2Fwc3VsYXRlZCBwcm90b2NvbCBpcwogICAgdHJhbnNmZXJyZWQgYXMgZGF0YSBieSB0aGUgbG93ZXIgbGF5ZXIgcHJvdG9jb2wsIHdoaWNoIGRvZXMgbm90CiAgICBleGFtaW5lIHRoZSBkYXRhLiBUaGUgZW5jYXBzdWxhdGVkIHByb3RvY29sIGhhcyBubyBrbm93bGVkZ2Ugb2YgdGhlCiAgICB1bmRlcmx5aW5nIHByb3RvY29sLjwvcD4KCiAgICA8cCBjbGFzcz0iZmlndXJlIj4KICAgIDxpbWcgc3JjPSIuLi9pbWFnZXMvc3NsX2ludHJvX2ZpZzIuZ2lmIiBhbHQ9IiIgd2lkdGg9IjQyOCIgaGVpZ2h0PSIyMTciIC8+PGJyIC8+CiAgICA8YSBpZD0iZmlndXJlMiIgbmFtZT0iZmlndXJlMiI+PGRmbj5GaWd1cmUgMjwvZGZuPjwvYT46IFNTTCBQcm90b2NvbCBTdGFjawogICAgPC9wPgoKICAgIDxwPlRoZSBlbmNhcHN1bGF0aW9uIG9mIFNTTCBjb250cm9sIHByb3RvY29scyBieSB0aGUgcmVjb3JkIHByb3RvY29sCiAgICBtZWFucyB0aGF0IGlmIGFuIGFjdGl2ZSBzZXNzaW9uIGlzIHJlbmVnb3RpYXRlZCB0aGUgY29udHJvbCBwcm90b2NvbHMKICAgIHdpbGwgYmUgdHJhbnNtaXR0ZWQgc2VjdXJlbHkuIElmIHRoZXJlIHdhcyBubyBwcmV2aW91cyBzZXNzaW9uLAogICAgdGhlIE51bGwgY2lwaGVyIHN1aXRlIGlzIHVzZWQsIHdoaWNoIG1lYW5zIHRoZXJlIHdpbGwgYmUgbm8gZW5jcnlwdGlvbiBhbmQKICAgIG1lc3NhZ2VzIHdpbGwgaGF2ZSBubyBpbnRlZ3JpdHkgZGlnZXN0cywgdW50aWwgdGhlIHNlc3Npb24gaGFzIGJlZW4KICAgIGVzdGFibGlzaGVkLjwvcD4KCgo8aDM+PGEgbmFtZT0iZGF0YXRyYW5zZmVyIiBpZD0iZGF0YXRyYW5zZmVyIj5EYXRhIFRyYW5zZmVyPC9hPjwvaDM+CgogICAgPHA+VGhlIFNTTCBSZWNvcmQgUHJvdG9jb2wsIHNob3duIGluIDxhIGhyZWY9IiNmaWd1cmUzIj5GaWd1cmUgMzwvYT4sCiAgICBpcyB1c2VkIHRvIHRyYW5zZmVyIGFwcGxpY2F0aW9uIGFuZCBTU0wgQ29udHJvbCBkYXRhIGJldHdlZW4gdGhlCiAgICBjbGllbnQgYW5kIHNlcnZlciwgd2hlcmUgbmVjZXNzYXJ5IGZyYWdtZW50aW5nIHRoaXMgZGF0YSBpbnRvIHNtYWxsZXIgdW5pdHMsCiAgICBvciBjb21iaW5pbmcgbXVsdGlwbGUgaGlnaGVyIGxldmVsIHByb3RvY29sIGRhdGEgbWVzc2FnZXMgaW50byBzaW5nbGUKICAgIHVuaXRzLiBJdCBtYXkgY29tcHJlc3MsIGF0dGFjaCBkaWdlc3Qgc2lnbmF0dXJlcywgYW5kIGVuY3J5cHQgdGhlc2UKICAgIHVuaXRzIGJlZm9yZSB0cmFuc21pdHRpbmcgdGhlbSB1c2luZyB0aGUgdW5kZXJseWluZyByZWxpYWJsZSB0cmFuc3BvcnQKICAgIHByb3RvY29sIChOb3RlOiBjdXJyZW50bHksIG5vIG1ham9yIFNTTCBpbXBsZW1lbnRhdGlvbnMgaW5jbHVkZSBzdXBwb3J0CiAgICBmb3IgY29tcHJlc3Npb24pLjwvcD4KCiAgICA8cCBjbGFzcz0iZmlndXJlIj4KICAgIDxpbWcgc3JjPSIuLi9pbWFnZXMvc3NsX2ludHJvX2ZpZzMuZ2lmIiBhbHQ9IiIgd2lkdGg9IjQyMyIgaGVpZ2h0PSIzMjMiIC8+PGJyIC8+CiAgICA8YSBpZD0iZmlndXJlMyIgbmFtZT0iZmlndXJlMyI+PGRmbj5GaWd1cmUgMzwvZGZuPjwvYT46IFNTTCBSZWNvcmQgUHJvdG9jb2wKICAgIDwvcD4KCgo8aDM+PGEgbmFtZT0ic2VjdXJlaHR0cCIgaWQ9InNlY3VyZWh0dHAiPlNlY3VyaW5nIEhUVFAgQ29tbXVuaWNhdGlvbjwvYT48L2gzPgoKICAgIDxwPk9uZSBjb21tb24gdXNlIG9mIFNTTCBpcyB0byBzZWN1cmUgV2ViIEhUVFAgY29tbXVuaWNhdGlvbiBiZXR3ZWVuCiAgICBhIGJyb3dzZXIgYW5kIGEgd2Vic2VydmVyLiBUaGlzIGRvZXMgbm90IHByZWNsdWRlIHRoZSB1c2Ugb2YKICAgIG5vbi1zZWN1cmVkIEhUVFAgLSB0aGUgc2VjdXJlIHZlcnNpb24gKGNhbGxlZCBIVFRQUykgaXMgdGhlIHNhbWUgYXMKICAgIHBsYWluIEhUVFAgb3ZlciBTU0wsIGJ1dCB1c2VzIHRoZSBVUkwgc2NoZW1lIDxjb2RlPmh0dHBzPC9jb2RlPgogICAgcmF0aGVyIHRoYW4gPGNvZGU+aHR0cDwvY29kZT4sIGFuZCBhIGRpZmZlcmVudCBzZXJ2ZXIgcG9ydCAoYnkgZGVmYXVsdCwKICAgIHBvcnQgNDQzKS4gVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGEgbGFyZ2UgcGFydCBvZiB3aGF0IDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc3NsLmh0bWwiPm1vZF9zc2w8L2E+PC9jb2RlPiBwcm92aWRlcyBmb3IgdGhlIEFwYWNoZSB3ZWJzZXJ2ZXIuPC9wPgoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0icmVmZXJlbmNlcyIgaWQ9InJlZmVyZW5jZXMiPlJlZmVyZW5jZXM8L2E+PC9oMj4KCjxkbD4KPGR0PjxhIGlkPSJBQzk2IiBuYW1lPSJBQzk2Ij5bQUM5Nl08L2E+PC9kdD4KPGRkPkJydWNlIFNjaG5laWVyLCA8cT5BcHBsaWVkIENyeXB0b2dyYXBoeTwvcT4sIDJuZCBFZGl0aW9uLCBXaWxleSwKMTk5Ni4gU2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cuY291bnRlcnBhbmUuY29tLyI+aHR0cDovL3d3dy5jb3VudGVycGFuZS5jb20vPC9hPiBmb3IgdmFyaW91cyBvdGhlciBtYXRlcmlhbHMgYnkgQnJ1Y2UKU2NobmVpZXIuPC9kZD4KCjxkdD48YSBpZD0iQVNOMSIgbmFtZT0iQVNOMSI+W0FTTjFdPC9hPjwvZHQ+CjxkZD5JVFUtVCBSZWNvbW1lbmRhdGlvbiBYLjIwOCwgPHE+U3BlY2lmaWNhdGlvbiBvZiBBYnN0cmFjdCBTeW50YXggTm90YXRpb24KT25lIChBU04uMSk8L3E+LCBsYXN0IHVwZGF0ZWQgMjAwOC4gU2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cuaXR1LmludC9JVFUtVC9hc24xLyI+aHR0cDovL3d3dy5pdHUuaW50L0lUVS1UL2FzbjEvPC9hPi4KPC9kZD4KCjxkdD48YSBpZD0iWDUwOSIgbmFtZT0iWDUwOSI+W1g1MDldPC9hPjwvZHQ+CjxkZD5JVFUtVCBSZWNvbW1lbmRhdGlvbiBYLjUwOSwgPHE+VGhlIERpcmVjdG9yeSAtIEF1dGhlbnRpY2F0aW9uCkZyYW1ld29yazwvcT4uIEZvciByZWZlcmVuY2VzLCBzZWUgPGEgaHJlZj0iaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9YLjUwOSI+aHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9YLjUwOTwvYT4uCjwvZGQ+Cgo8ZHQ+PGEgaWQ9IlBLQ1MiIG5hbWU9IlBLQ1MiPltQS0NTXTwvYT48L2R0Pgo8ZGQ+PHE+UHVibGljIEtleSBDcnlwdG9ncmFwaHkgU3RhbmRhcmRzIChQS0NTKTwvcT4sClJTQSBMYWJvcmF0b3JpZXMgVGVjaG5pY2FsIE5vdGVzLCBTZWUgPGEgaHJlZj0iaHR0cDovL3d3dy5yc2FzZWN1cml0eS5jb20vcnNhbGFicy9wa2NzLyI+aHR0cDovL3d3dy5yc2FzZWN1cml0eS5jb20vcnNhbGFicy9wa2NzLzwvYT4uPC9kZD4KCjxkdD48YSBpZD0iTUlNRSIgbmFtZT0iTUlNRSI+W01JTUVdPC9hPjwvZHQ+CjxkZD5OLiBGcmVlZCwgTi4gQm9yZW5zdGVpbiwgPHE+TXVsdGlwdXJwb3NlIEludGVybmV0IE1haWwgRXh0ZW5zaW9ucwooTUlNRSkgUGFydCBPbmU6IEZvcm1hdCBvZiBJbnRlcm5ldCBNZXNzYWdlIEJvZGllczwvcT4sIFJGQzIwNDUuClNlZSBmb3IgaW5zdGFuY2UgPGEgaHJlZj0iaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NSI+aHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjA0NTwvYT4uPC9kZD4KCjxkdD48YSBpZD0iU1NMMyIgbmFtZT0iU1NMMyI+W1NTTDNdPC9hPjwvZHQ+CjxkZD5BbGFuIE8uIEZyZWllciwgUGhpbGlwIEthcmx0b24sIFBhdWwgQy4gS29jaGVyLCA8cT5UaGUgU1NMIFByb3RvY29sClZlcnNpb24gMy4wPC9xPiwgMTk5Ni4gU2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cubmV0c2NhcGUuY29tL2VuZy9zc2wzL2RyYWZ0MzAyLnR4dCI+aHR0cDovL3d3dy5uZXRzY2FwZS5jb20vZW5nL3NzbDMvZHJhZnQzMDIudHh0PC9hPi48L2RkPgoKPGR0PjxhIGlkPSJUTFMxIiBuYW1lPSJUTFMxIj5bVExTMV08L2E+PC9kdD4KPGRkPlRpbSBEaWVya3MsIENocmlzdG9waGVyIEFsbGVuLCA8cT5UaGUgVExTIFByb3RvY29sIFZlcnNpb24gMS4wPC9xPiwKMTk5OS4gU2VlIDxhIGhyZWY9Imh0dHA6Ly9pZXRmLm9yZy9yZmMvcmZjMjI0Ni50eHQiPmh0dHA6Ly9pZXRmLm9yZy9yZmMvcmZjMjI0Ni50eHQ8L2E+LjwvZGQ+Cgo8ZHQ+PGEgaWQ9IlRMUzExIiBuYW1lPSJUTFMxMSI+W1RMUzExXTwvYT48L2R0Pgo8ZGQ+PHE+VGhlIFRMUyBQcm90b2NvbCBWZXJzaW9uIDEuMTwvcT4sCjIwMDYuIFNlZSA8YSBocmVmPSJodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MzQ2Ij5odHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM0MzQ2PC9hPi48L2RkPgoKPGR0PjxhIGlkPSJUTFMxMiIgbmFtZT0iVExTMTIiPltUTFMxMl08L2E+PC9kdD4KPGRkPjxxPlRoZSBUTFMgUHJvdG9jb2wgVmVyc2lvbiAxLjI8L3E+LAoyMDA4LiBTZWUgPGEgaHJlZj0iaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTI0NiI+aHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNTI0NjwvYT4uPC9kZD4KPC9kbD4KPC9kaXY+PC9kaXY+CjxkaXYgY2xhc3M9ImJvdHRvbWxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vc3NsL3NzbF9pbnRyby5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvc3NsL3NzbF9pbnRyby5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2phL3NzbC9zc2xfaW50cm8uaHRtbCIgaHJlZmxhbmc9ImphIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkphcGFuZXNlIj4mbmJzcDtqYSZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgYWx0PSJ0b3AiIC8+PC9hPjwvZGl2PjxkaXYgY2xhc3M9InNlY3Rpb24iPjxoMj48YSBpZD0iY29tbWVudHNfc2VjdGlvbiIgbmFtZT0iY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvc3NsL3NzbF9pbnRyby5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7IAogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTYgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQppZiAodHlwZW9mKHByZXR0eVByaW50KSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHByZXR0eVByaW50KCk7Cn0KLy8tLT48IV1dPjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==