PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5tb2RfeG1sMmVuYyAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4uL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHk+CjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZmVhdGhlci5wbmciIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLyI+VmVyc2lvbiAyLjQ8L2E+ICZndDsgPGEgaHJlZj0iLi8iPk1vZHVsZXM8L2E+PC9kaXY+CjxkaXYgaWQ9InBhZ2UtY29udGVudCI+CjxkaXYgaWQ9InByZWFtYmxlIj48aDE+QXBhY2hlIE1vZHVsZSBtb2RfeG1sMmVuYzwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbW9kL21vZF94bWwyZW5jLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9tb2QvbW9kX3htbDJlbmMuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT48L3A+CjwvZGl2Pgo8dGFibGUgY2xhc3M9Im1vZHVsZSI+PHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+RW5oYW5jZWQgY2hhcnNldC9pbnRlcm5hdGlvbmFsaXNhdGlvbiBzdXBwb3J0IGZvciBsaWJ4bWwyLWJhc2VkCmZpbHRlciBtb2R1bGVzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNNb2R1bGVJZGVudGlmaWVyIj5Nb2R1bGWgSWRlbnRpZmllcjo8L2E+PC90aD48dGQ+eG1sMmVuY19tb2R1bGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTb3VyY2VGaWxlIj5Tb3VyY2WgRmlsZTo8L2E+PC90aD48dGQ+bW9kX3htbDJlbmMuYzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdHk6PC9hPjwvdGg+PHRkPlZlcnNpb24gMi40IGFuZCBsYXRlci4gIEF2YWlsYWJsZSBhcyBhIHRoaXJkLXBhcnR5IG1vZHVsZQpmb3IgMi4yLnggdmVyc2lvbnM8L3RkPjwvdHI+PC90YWJsZT4KPGgzPlN1bW1hcnk8L2gzPgoKICAgIDxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIGVuaGFuY2VkIGludGVybmF0aW9uYWxpc2F0aW9uIHN1cHBvcnQgZm9yCiAgICBtYXJrdXAtYXdhcmUgZmlsdGVyIG1vZHVsZXMgc3VjaCBhcyA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2h0bWwuaHRtbCI+bW9kX3Byb3h5X2h0bWw8L2E+PC9jb2RlPi4KICAgIEl0IGNhbiBhdXRvbWF0aWNhbGx5IGRldGVjdCB0aGUgZW5jb2Rpbmcgb2YgaW5wdXQgZGF0YSBhbmQgZW5zdXJlCiAgICB0aGV5IGFyZSBjb3JyZWN0bHkgcHJvY2Vzc2VkIGJ5IHRoZSA8YSBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvIj5saWJ4bWwyPC9hPiBwYXJzZXIsIGluY2x1ZGluZyBjb252ZXJ0aW5nIHRvIFVuaWNvZGUgKFVURi04KSB3aGVyZQogICAgbmVjZXNzYXJ5LiAgSXQgY2FuIGFsc28gY29udmVydCBkYXRhIHRvIGFuIGVuY29kaW5nIG9mIGNob2ljZQogICAgYWZ0ZXIgbWFya3VwIHByb2Nlc3NpbmcsIGFuZCB3aWxsIGVuc3VyZSB0aGUgY29ycmVjdCA8dmFyPmNoYXJzZXQ8L3Zhcj4KICAgIHZhbHVlIGlzIHNldCBpbiB0aGUgSFRUUCA8dmFyPkNvbnRlbnQtVHlwZTwvdmFyPiBoZWFkZXIuPC9wPgo8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48aDM+VG9waWNzPC9oMz4KPHVsIGlkPSJ0b3BpY3MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiN1c2FnZSI+VXNhZ2U8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYXBpIj5Qcm9ncmFtbWluZyBBUEk8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc25pZmZpbmciPkRldGVjdGluZyBhbiBFbmNvZGluZzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNvdXRwdXQiPk91dHB1dCBFbmNvZGluZzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNhbGlhcyI+VW5zdXBwb3J0ZWQgRW5jb2RpbmdzPC9hPjwvbGk+CjwvdWw+PGgzIGNsYXNzPSJkaXJlY3RpdmVzIj5EaXJlY3RpdmVzPC9oMz4KPHVsIGlkPSJ0b2MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiN4bWwyZW5jYWxpYXMiPnhtbDJFbmNBbGlhczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiN4bWwyZW5jZGVmYXVsdCI+eG1sMkVuY0RlZmF1bHQ8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjeG1sMnN0YXJ0cGFyc2UiPnhtbDJTdGFydFBhcnNlPC9hPjwvbGk+CjwvdWw+CjxoMz5CdWdmaXggY2hlY2tsaXN0PC9oMz48dWwgY2xhc3M9InNlZWFsc28iPjxsaT48YSBocmVmPSJodHRwczovL3d3dy5hcGFjaGUub3JnL2Rpc3QvaHR0cGQvQ0hBTkdFU18yLjQiPmh0dHBkIGNoYW5nZWxvZzwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL2J6LmFwYWNoZS5vcmcvYnVnemlsbGEvYnVnbGlzdC5jZ2k/YnVnX3N0YXR1cz1fX29wZW5fXyZhbXA7bGlzdF9pZD0xNDQ1MzImYW1wO3Byb2R1Y3Q9QXBhY2hlJTIwaHR0cGQtMiZhbXA7cXVlcnlfZm9ybWF0PXNwZWNpZmljJmFtcDtvcmRlcj1jaGFuZ2VkZGF0ZSUyMERFU0MlMkNwcmlvcml0eSUyQ2J1Z19zZXZlcml0eSZhbXA7Y29tcG9uZW50PW1vZF94bWwyZW5jIj5Lbm93biBpc3N1ZXM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cHM6Ly9iei5hcGFjaGUub3JnL2J1Z3ppbGxhL2VudGVyX2J1Zy5jZ2k/cHJvZHVjdD1BcGFjaGUlMjBodHRwZC0yJmFtcDtjb21wb25lbnQ9bW9kX3htbDJlbmMiPlJlcG9ydCBhIGJ1ZzwvYT48L2xpPjwvdWw+PGgzPlNlZSBhbHNvPC9oMz4KPHVsIGNsYXNzPSJzZWVhbHNvIj4KPGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2xpPjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InVzYWdlIiBpZD0idXNhZ2UiPlVzYWdlPC9hPjwvaDI+CiAgICA8cD5UaGVyZSBhcmUgdHdvIHVzYWdlIHNjZW5hcmlvczogd2l0aCBtb2R1bGVzIHByb2dyYW1tZWQgdG8gd29yawogICAgd2l0aCBtb2RfeG1sMmVuYywgYW5kIHdpdGggdGhvc2UgdGhhdCBhcmUgbm90IGF3YXJlIG9mIGl0OjwvcD4KICAgIDxkbD4KICAgIDxkdD5GaWx0ZXIgbW9kdWxlcyBlbmFibGVkIGZvciBtb2RfeG1sMmVuYzwvZHQ+PGRkPgogICAgPHA+TW9kdWxlcyBzdWNoIGFzIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHlfaHRtbC5odG1sIj5tb2RfcHJveHlfaHRtbDwvYT48L2NvZGU+IHZlcnNpb24gMy4xCiAgICBhbmQgdXAgdXNlIHRoZSA8Y29kZT54bWwyZW5jX2NoYXJzZXQ8L2NvZGU+IG9wdGlvbmFsIGZ1bmN0aW9uIHRvIHJldHJpZXZlCiAgICB0aGUgY2hhcnNldCBhcmd1bWVudCB0byBwYXNzIHRvIHRoZSBsaWJ4bWwyIHBhcnNlciwgYW5kIG1heSB1c2UgdGhlCiAgICA8Y29kZT54bWwyZW5jX2ZpbHRlcjwvY29kZT4gb3B0aW9uYWwgZnVuY3Rpb24gdG8gcG9zdHByb2Nlc3MgdG8gYW5vdGhlcgogICAgZW5jb2RpbmcuICBVc2luZyBtb2RfeG1sMmVuYyB3aXRoIGFuIGVuYWJsZWQgbW9kdWxlLCBubyBjb25maWd1cmF0aW9uCiAgICBpcyBuZWNlc3Nhcnk6IHRoZSBvdGhlciBtb2R1bGUgd2lsbCBjb25maWd1cmUgbW9kX3htbDJlbmMgZm9yIHlvdQogICAgKHRob3VnaCB5b3UgbWF5IHN0aWxsIHdhbnQgdG8gY3VzdG9taXNlIGl0IHVzaW5nIHRoZSBjb25maWd1cmF0aW9uCiAgICBkaXJlY3RpdmVzIGJlbG93KS48L3A+CiAgICA8L2RkPgogICAgPGR0Pk5vbi1lbmFibGVkIG1vZHVsZXM8L2R0PjxkZD4KICAgIDxwPlRvIHVzZSBpdCB3aXRoIGEgbGlieG1sMi1iYXNlZCBtb2R1bGUgdGhhdCBpc24ndCBleHBsaWNpdGx5IGVuYWJsZWQgZm9yCiAgICBtb2RfeG1sMmVuYywgeW91IHdpbGwgaGF2ZSB0byBjb25maWd1cmUgdGhlIGZpbHRlciBjaGFpbiB5b3Vyc2VsZi4KICAgIFNvIHRvIHVzZSBpdCB3aXRoIGEgZmlsdGVyIDxzdHJvbmc+Zm9vPC9zdHJvbmc+IHByb3ZpZGVkIGJ5IGEgbW9kdWxlCiAgICA8c3Ryb25nPm1vZF9mb288L3N0cm9uZz4gdG8gaW1wcm92ZSB0aGUgbGF0dGVyJ3MgaTE4biBzdXBwb3J0IHdpdGggSFRNTAogICAgYW5kIFhNTCwgeW91IGNvdWxkIHVzZTwvcD4KICAgIDxwcmU+PGNvZGU+CiAgICBGaWx0ZXJQcm92aWRlciBpY29udiAgICB4bWwyZW5jIENvbnRlbnQtVHlwZSAkdGV4dC9odG1sCiAgICBGaWx0ZXJQcm92aWRlciBpY29udiAgICB4bWwyZW5jIENvbnRlbnQtVHlwZSAkeG1sCiAgICBGaWx0ZXJQcm92aWRlciBtYXJrdXAgICBmb28gQ29udGVudC1UeXBlICR0ZXh0L2h0bWwKICAgIEZpbHRlclByb3ZpZGVyIG1hcmt1cCAgIGZvbyBDb250ZW50LVR5cGUgJHhtbAogICAgRmlsdGVyQ2hhaW4gICAgIGljb252IG1hcmt1cAogICAgPC9jb2RlPjwvcHJlPgogICAgPHA+PHN0cm9uZz5tb2RfZm9vPC9zdHJvbmc+IHdpbGwgbm93IHN1cHBvcnQgYW55IGNoYXJhY3RlciBzZXQgc3VwcG9ydGVkIGJ5IGVpdGhlcgogICAgKG9yIGJvdGgpIG9mIGxpYnhtbDIgb3IgYXByX3hsYXRlL2ljb252LjwvcD4KICAgIDwvZGQ+PC9kbD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iYXBpIiBpZD0iYXBpIj5Qcm9ncmFtbWluZyBBUEk8L2E+PC9oMj4KICAgIDxwPlByb2dyYW1tZXJzIHdyaXRpbmcgbGlieG1sMi1iYXNlZCBmaWx0ZXIgbW9kdWxlcyBhcmUgZW5jb3VyYWdlZCB0bwogICAgZW5hYmxlIHRoZW0gZm9yIG1vZF94bWwyZW5jLCB0byBwcm92aWRlIHN0cm9uZyBpMThuIHN1cHBvcnQgZm9yIHlvdXIKICAgIHVzZXJzIHdpdGhvdXQgcmVpbnZlbnRpbmcgdGhlIHdoZWVsLiAgVGhlIHByb2dyYW1taW5nIEFQSSBpcyBleHBvc2VkIGluCiAgICA8dmFyPm1vZF94bWwyZW5jLmg8L3Zhcj4sIGFuZCBhIHVzYWdlIGV4YW1wbGUgaXMKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHlfaHRtbC5odG1sIj5tb2RfcHJveHlfaHRtbDwvYT48L2NvZGU+LjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ic25pZmZpbmciIGlkPSJzbmlmZmluZyI+RGV0ZWN0aW5nIGFuIEVuY29kaW5nPC9hPjwvaDI+CiAgICA8cD5Vbmxpa2UgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9jaGFyc2V0X2xpdGUuaHRtbCI+bW9kX2NoYXJzZXRfbGl0ZTwvYT48L2NvZGU+LCBtb2RfeG1sMmVuYyBpcyBkZXNpZ25lZAogICAgdG8gd29yayB3aXRoIGRhdGEgd2hvc2UgZW5jb2RpbmcgY2Fubm90IGJlIGtub3duIGluIGFkdmFuY2UgYW5kIHRodXMKICAgIGNvbmZpZ3VyZWQuICBJdCB0aGVyZWZvcmUgdXNlcyAnc25pZmZpbmcnIHRlY2huaXF1ZXMgdG8gZGV0ZWN0IHRoZQogICAgZW5jb2Rpbmcgb2YgSFRUUCBkYXRhIGFzIGZvbGxvd3M6PC9wPgogICAgPG9sPgogICAgICAgIDxsaT5JZiB0aGUgSFRUUCA8dmFyPkNvbnRlbnQtVHlwZTwvdmFyPiBoZWFkZXIgaW5jbHVkZXMgYQogICAgICAgIDx2YXI+Y2hhcnNldDwvdmFyPiBwYXJhbWV0ZXIsIHRoYXQgaXMgdXNlZC48L2xpPgogICAgICAgIDxsaT5JZiB0aGUgZGF0YSBzdGFydCB3aXRoIGFuIFhNTCBCeXRlIE9yZGVyIE1hcmsgKEJPTSkgb3IgYW4KICAgICAgICBYTUwgZW5jb2RpbmcgZGVjbGFyYXRpb24sIHRoYXQgaXMgdXNlZC48L2xpPgogICAgICAgIDxsaT5JZiBhbiBlbmNvZGluZyBpcyBkZWNsYXJlZCBpbiBhbiBIVE1MIDxjb2RlPiZsdDtNRVRBJmd0OzwvY29kZT4KICAgICAgICBlbGVtZW50LCB0aGF0IGlzIHVzZWQuPC9saT4KICAgICAgICA8bGk+SWYgbm9uZSBvZiB0aGUgYWJvdmUgbWF0Y2gsIHRoZSBkZWZhdWx0IHZhbHVlIHNldCBieQogICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPnhtbDJFbmNEZWZhdWx0PC9jb2RlPiBpcyB1c2VkLjwvbGk+CiAgICA8L29sPgogICAgPHA+VGhlIHJ1bGVzIGFyZSBhcHBsaWVkIGluIG9yZGVyLiAgQXMgc29vbiBhcyBhIG1hdGNoIGlzIGZvdW5kLAogICAgaXQgaXMgdXNlZCBhbmQgZGV0ZWN0aW9uIGlzIHN0b3BwZWQuPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJvdXRwdXQiIGlkPSJvdXRwdXQiPk91dHB1dCBFbmNvZGluZzwvYT48L2gyPgo8cD48YSBocmVmPSJodHRwOi8veG1sc29mdC5vcmcvIj5saWJ4bWwyPC9hPiBhbHdheXMgdXNlcyBVVEYtOCAoVW5pY29kZSkKaW50ZXJuYWxseSwgYW5kIGxpYnhtbDItYmFzZWQgZmlsdGVyIG1vZHVsZXMgd2lsbCBvdXRwdXQgdGhhdCBieSBkZWZhdWx0Lgptb2RfeG1sMmVuYyBjYW4gY2hhbmdlIHRoZSBvdXRwdXQgZW5jb2RpbmcgdGhyb3VnaCB0aGUgQVBJLCBidXQgdGhlcmUKaXMgY3VycmVudGx5IG5vIHdheSB0byBjb25maWd1cmUgdGhhdCBkaXJlY3RseS48L3A+CjxwPkNoYW5naW5nIHRoZSBvdXRwdXQgZW5jb2Rpbmcgc2hvdWxkIChpbiB0aGVvcnksIGF0IGxlYXN0KSBuZXZlciBiZQpuZWNlc3NhcnksIGFuZCBpcyBub3QgcmVjb21tZW5kZWQgZHVlIHRvIHRoZSBleHRyYSBwcm9jZXNzaW5nIGxvYWQgb24KdGhlIHNlcnZlciBvZiBhbiB1bm5lY2Vzc2FyeSBjb252ZXJzaW9uLjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iYWxpYXMiIGlkPSJhbGlhcyI+VW5zdXBwb3J0ZWQgRW5jb2RpbmdzPC9hPjwvaDI+CjxwPklmIHlvdSBhcmUgd29ya2luZyB3aXRoIGVuY29kaW5ncyB0aGF0IGFyZSBub3Qgc3VwcG9ydGVkIGJ5IGFueSBvZgp0aGUgY29udmVyc2lvbiBtZXRob2RzIGF2YWlsYWJsZSBvbiB5b3VyIHBsYXRmb3JtLCB5b3UgY2FuIHN0aWxsIGFsaWFzCnRoZW0gdG8gYSBzdXBwb3J0ZWQgZW5jb2RpbmcgdXNpbmcgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+eG1sMkVuY0FsaWFzPC9jb2RlPi48L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJ4bWwyRW5jQWxpYXMiIGlkPSJ4bWwyRW5jQWxpYXMiPnhtbDJFbmNBbGlhczwvYT4gPGEgbmFtZT0ieG1sMmVuY2FsaWFzIiBpZD0ieG1sMmVuY2FsaWFzIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5SZWNvZ25pc2UgQWxpYXNlcyBmb3IgZW5jb2RpbmcgdmFsdWVzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPnhtbDJFbmNBbGlhcyA8dmFyPmNoYXJzZXQgYWxpYXMgW2FsaWFzIC4uLl08L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5CYXNlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF94bWwyZW5jPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBzZXJ2ZXItd2lkZSBkaXJlY3RpdmUgYWxpYXNlcyBvbmUgb3IgbW9yZSBlbmNvZGluZyB0byBhbm90aGVyCiAgICBlbmNvZGluZy4gIFRoaXMgZW5hYmxlcyBlbmNvZGluZ3Mgbm90IHJlY29nbmlzZWQgYnkgbGlieG1sMiB0byBiZSBoYW5kbGVkCiAgICBpbnRlcm5hbGx5IGJ5IGxpYnhtbDIncyBlbmNvZGluZyBzdXBwb3J0IHVzaW5nIHRoZSB0cmFuc2xhdGlvbiB0YWJsZSBmb3IKICAgIGEgcmVjb2duaXNlZCBlbmNvZGluZy4gIFRoaXMgc2VydmVzIHR3byBwdXJwb3NlczogdG8gc3VwcG9ydCBjaGFyYWN0ZXIgc2V0cwogICAgKG9yIG5hbWVzKSBub3QgcmVjb2duaXNlZCBlaXRoZXIgYnkgbGlieG1sMiBvciBpY29udiwgYW5kIHRvIHNraXAKICAgIGNvbnZlcnNpb24gZm9yIGFuIGVuY29kaW5nIHdoZXJlIGl0IGlzIGtub3duIHRvIGJlIHVubmVjZXNzYXJ5LjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJ4bWwyRW5jRGVmYXVsdCIgaWQ9InhtbDJFbmNEZWZhdWx0Ij54bWwyRW5jRGVmYXVsdDwvYT4gPGEgbmFtZT0ieG1sMmVuY2RlZmF1bHQiIGlkPSJ4bWwyZW5jZGVmYXVsdCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+U2V0cyBhIGRlZmF1bHQgZW5jb2RpbmcgdG8gYXNzdW1lIHdoZW4gYWJzb2x1dGVseSBubyBpbmZvcm1hdGlvbgpjYW4gYmUgPGEgaHJlZj0iI3NuaWZmaW5nIj5hdXRvbWF0aWNhbGx5IGRldGVjdGVkPC9hPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT54bWwyRW5jRGVmYXVsdCA8dmFyPm5hbWU8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3RvcnksIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5CYXNlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF94bWwyZW5jPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+VmVyc2lvbiAyLjQuMCBhbmQgbGF0ZXI7IGF2YWlsYWJsZSBhcyBhIHRoaXJkLXBhcnR5Cm1vZHVsZSBmb3IgZWFybGllciB2ZXJzaW9ucy48L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5JZiB5b3UgYXJlIHByb2Nlc3NpbmcgZGF0YSB3aXRoIGtub3duIGVuY29kaW5nIGJ1dCBubyBlbmNvZGluZwogICAgaW5mb3JtYXRpb24sIHlvdSBjYW4gc2V0IHRoaXMgZGVmYXVsdCB0byBoZWxwIG1vZF94bWwyZW5jIHByb2Nlc3MKICAgIHRoZSBkYXRhIGNvcnJlY3RseS4gIEZvciBleGFtcGxlLCB0byB3b3JrIHdpdGggdGhlIGRlZmF1bHQgdmFsdWUKICAgIG9mIExhdGluMSAoPHZhcj5pc28tODg1OS0xPC92YXI+IHNwZWNpZmllZCBpbiBIVFRQLzEuMCwgdXNlPC9wPgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPnhtbDJFbmNEZWZhdWx0IGlzby04ODU5LTE8L3ByZT4KCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0ieG1sMlN0YXJ0UGFyc2UiIGlkPSJ4bWwyU3RhcnRQYXJzZSI+eG1sMlN0YXJ0UGFyc2U8L2E+IDxhIG5hbWU9InhtbDJzdGFydHBhcnNlIiBpZD0ieG1sMnN0YXJ0cGFyc2UiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkFkdmlzZSB0aGUgcGFyc2VyIHRvIHNraXAgbGVhZGluZyBqdW5rLjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT54bWwyU3RhcnRQYXJzZSA8dmFyPmVsZW1lbnQgW2VsZW1lbnQgLi4uXTwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3htbDJlbmM8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5TcGVjaWZ5IHRoYXQgdGhlIG1hcmt1cCBwYXJzZXIgc2hvdWxkIHN0YXJ0IGF0IHRoZSBmaXJzdCBpbnN0YW5jZQogICAgb2YgYW55IG9mIHRoZSBlbGVtZW50cyBzcGVjaWZpZWQuICBUaGlzIGNhbiBiZSB1c2VkIGFzIGEgd29ya2Fyb3VuZAogICAgd2hlcmUgYSBicm9rZW4gYmFja2VuZCBpbnNlcnRzIGxlYWRpbmcganVuayB0aGF0IG1lc3NlcyB1cCB0aGUgcGFyc2VyICg8YSBocmVmPSJodHRwOi8vYmFodW1idWcud29yZHByZXNzLmNvbS8yMDA2LzEwLzEyL21vZF9wcm94eV9odG1sLXJldmlzaXRlZC8iPmV4YW1wbGUgaGVyZTwvYT4pLjwvcD4KICAgIDxwPkl0IHNob3VsZCBuZXZlciBiZSB1c2VkIGZvciBYTUwsIG5vciB3ZWxsLWZvcm1lZCBIVE1MLjwvcD4KCjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9tb2QvbW9kX3htbDJlbmMuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2ZyL21vZC9tb2RfeG1sMmVuYy5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2gyPjxkaXYgY2xhc3M9Indhcm5pbmciPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPjxiciAvPlRoaXMgaXMgbm90IGEgUSZhbXA7QSBzZWN0aW9uLiBDb21tZW50cyBwbGFjZWQgaGVyZSBzaG91bGQgYmUgcG9pbnRlZCB0b3dhcmRzIHN1Z2dlc3Rpb25zIG9uIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBvciBzZXJ2ZXIsIGFuZCBtYXkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBvdXIgbW9kZXJhdG9ycyBpZiB0aGV5IGFyZSBlaXRoZXIgaW1wbGVtZW50ZWQgb3IgY29uc2lkZXJlZCBpbnZhbGlkL29mZi10b3BpYy4gUXVlc3Rpb25zIG9uIGhvdyB0byBtYW5hZ2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgZWl0aGVyIG91ciBJUkMgY2hhbm5lbCwgI2h0dHBkLCBvbiBGcmVlbm9kZSwgb3Igc2VudCB0byBvdXIgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvbGlzdHMuaHRtbCI+bWFpbGluZyBsaXN0czwvYT4uPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCnZhciBjb21tZW50c19zaG9ydG5hbWUgPSAnaHR0cGQnOwp2YXIgY29tbWVudHNfaWRlbnRpZmllciA9ICdodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9tb2QvbW9kX3htbDJlbmMuaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgeyAKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPkNvbW1lbnRzIGFyZSBkaXNhYmxlZCBmb3IgdGhpcyBwYWdlIGF0IHRoZSBtb21lbnQuPFwvZGl2PicpOwogICAgfQp9KSh3aW5kb3csIGRvY3VtZW50KTsKLy8tLT48IV1dPjwvc2NyaXB0PjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAyMDE2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi48YnIgLz5MaWNlbnNlZCB1bmRlciB0aGUgPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wIj5BcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjA8L2E+LjwvcD4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=