PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD48IS0tCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20geG1sIHNvdXJjZTogRE8gTk9UIEVESVQKICAgICAgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAogICAgICAtLT4KPHRpdGxlPm1vZF9sb2dfY29uZmlnIC0gQXBhY2hlIEhUVFAgU2VydmVyPC90aXRsZT4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz4KPGxpbmsgaHJlZj0iLi4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keT4KPGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Ii4uL2ZhcS8iPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPgo8cCBjbGFzcz0iYXBhY2hlIj5BcGFjaGUgSFRUUCBTZXJ2ZXIgVmVyc2lvbiAyLjM8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2ZlYXRoZXIuZ2lmIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4uL2ltYWdlcy9sZWZ0LmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgaWQ9InBhdGgiPgo8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIj5BcGFjaGU8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvIj5IVFRQIFNlcnZlcjwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLyI+RG9jdW1lbnRhdGlvbjwvYT4gJmd0OyA8YSBocmVmPSIuLi8iPlZlcnNpb24gMi4zPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4vIj5Nb2R1bGVzPC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYWdlLWNvbnRlbnQiPgo8ZGl2IGlkPSJwcmVhbWJsZSI+PGgxPkFwYWNoZSBNb2R1bGUgbW9kX2xvZ19jb25maWc8L2gxPgo8ZGl2IGNsYXNzPSJ0b3BsYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2RfbG9nX2NvbmZpZy5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vamEvbW9kL21vZF9sb2dfY29uZmlnLmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4va28vbW9kL21vZF9sb2dfY29uZmlnLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPjwvcD4KPC9kaXY+Cjx0YWJsZSBjbGFzcz0ibW9kdWxlIj48dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Mb2dnaW5nIG9mIHRoZSByZXF1ZXN0cyBtYWRlIHRvIHRoZSBzZXJ2ZXI8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+QmFzZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI01vZHVsZUlkZW50aWZpZXIiPk1vZHVsZaBJZGVudGlmaWVyOjwvYT48L3RoPjx0ZD5sb2dfY29uZmlnX21vZHVsZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI1NvdXJjZUZpbGUiPlNvdXJjZaBGaWxlOjwvYT48L3RoPjx0ZD5tb2RfbG9nX2NvbmZpZy5jPC90ZD48L3RyPjwvdGFibGU+CjxoMz5TdW1tYXJ5PC9oMz4KCiAgICA8cD5UaGlzIG1vZHVsZSBwcm92aWRlcyBmb3IgZmxleGlibGUgbG9nZ2luZyBvZiBjbGllbnQKICAgIHJlcXVlc3RzLiBMb2dzIGFyZSB3cml0dGVuIGluIGEgY3VzdG9taXphYmxlIGZvcm1hdCwgYW5kIG1heSBiZQogICAgd3JpdHRlbiBkaXJlY3RseSB0byBhIGZpbGUsIG9yIHRvIGFuIGV4dGVybmFsIHByb2dyYW0uCiAgICBDb25kaXRpb25hbCBsb2dnaW5nIGlzIHByb3ZpZGVkIHNvIHRoYXQgaW5kaXZpZHVhbCByZXF1ZXN0cyBtYXkKICAgIGJlIGluY2x1ZGVkIG9yIGV4Y2x1ZGVkIGZyb20gdGhlIGxvZ3MgYmFzZWQgb24gY2hhcmFjdGVyaXN0aWNzCiAgICBvZiB0aGUgcmVxdWVzdC48L3A+CgogICAgPHA+VGhyZWUgZGlyZWN0aXZlcyBhcmUgcHJvdmlkZWQgYnkgdGhpcyBtb2R1bGU6CiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjdHJhbnNmZXJsb2ciPlRyYW5zZmVyTG9nPC9hPjwvY29kZT4gdG8gY3JlYXRlCiAgICBhIGxvZyBmaWxlLCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbG9nZm9ybWF0Ij5Mb2dGb3JtYXQ8L2E+PC9jb2RlPgogICAgdG8gc2V0IGEgY3VzdG9tIGZvcm1hdCwgYW5kIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNjdXN0b21sb2ciPkN1c3RvbUxvZzwvYT48L2NvZGU+IHRvIGRlZmluZSBhIGxvZyBmaWxlIGFuZCBmb3JtYXQgaW4gb25lCiAgICBzdGVwLiBUaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+VHJhbnNmZXJMb2c8L2NvZGU+IGFuZCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5DdXN0b21Mb2c8L2NvZGU+IGRpcmVjdGl2ZXMgY2FuIGJlIHVzZWQgbXVsdGlwbGUgdGltZXMgaW4gZWFjaAogICAgc2VydmVyIHRvIGNhdXNlIGVhY2ggcmVxdWVzdCB0byBiZSBsb2dnZWQgdG8gbXVsdGlwbGUgZmlsZXMuPC9wPgo8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48aDMgY2xhc3M9ImRpcmVjdGl2ZXMiPkRpcmVjdGl2ZXM8L2gzPgo8dWwgaWQ9InRvYyI+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2J1ZmZlcmVkbG9ncyI+QnVmZmVyZWRMb2dzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2Nvb2tpZWxvZyI+Q29va2llTG9nPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2N1c3RvbWxvZyI+Q3VzdG9tTG9nPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2xvZ2Zvcm1hdCI+TG9nRm9ybWF0PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3RyYW5zZmVybG9nIj5UcmFuc2ZlckxvZzwvYT48L2xpPgo8L3VsPgo8aDM+VG9waWNzPC9oMz4KPHVsIGlkPSJ0b3BpY3MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNmb3JtYXRzIj5DdXN0b20gTG9nIEZvcm1hdHM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc2VjdXJpdHkiPlNlY3VyaXR5IENvbnNpZGVyYXRpb25zPC9hPjwvbGk+CjwvdWw+PGgzPlNlZSBhbHNvPC9oMz4KPHVsIGNsYXNzPSJzZWVhbHNvIj4KPGxpPjxhIGhyZWY9Ii4uL2xvZ3MuaHRtbCI+QXBhY2hlIExvZyBGaWxlczwvYT48L2xpPgo8L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJmb3JtYXRzIiBpZD0iZm9ybWF0cyI+Q3VzdG9tIExvZyBGb3JtYXRzPC9hPjwvaDI+CgogICAgPHA+VGhlIGZvcm1hdCBhcmd1bWVudCB0byB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xvZ2Zvcm1hdCI+TG9nRm9ybWF0PC9hPjwvY29kZT4gYW5kIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNjdXN0b21sb2ciPkN1c3RvbUxvZzwvYT48L2NvZGU+IGRpcmVjdGl2ZXMgaXMgYSBzdHJpbmcuIFRoaXMgc3RyaW5nIGlzCiAgICB1c2VkIHRvIGxvZyBlYWNoIHJlcXVlc3QgdG8gdGhlIGxvZyBmaWxlLiBJdCBjYW4gY29udGFpbiBsaXRlcmFsCiAgICBjaGFyYWN0ZXJzIGNvcGllZCBpbnRvIHRoZSBsb2cgZmlsZXMgYW5kIHRoZSBDLXN0eWxlIGNvbnRyb2wKICAgIGNoYXJhY3RlcnMgIlxuIiBhbmQgIlx0IiB0byByZXByZXNlbnQgbmV3LWxpbmVzIGFuZCB0YWJzLgogICAgTGl0ZXJhbCBxdW90ZXMgYW5kIGJhY2stc2xhc2hlcyBzaG91bGQgYmUgZXNjYXBlZCB3aXRoCiAgICBiYWNrLXNsYXNoZXMuPC9wPgoKICAgIDxwPlRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHJlcXVlc3QgaXRzZWxmIGFyZSBsb2dnZWQgYnkKICAgIHBsYWNpbmcgIjxjb2RlPiU8L2NvZGU+IiBkaXJlY3RpdmVzIGluIHRoZSBmb3JtYXQgc3RyaW5nLCB3aGljaCBhcmUKICAgIHJlcGxhY2VkIGluIHRoZSBsb2cgZmlsZSBieSB0aGUgdmFsdWVzIGFzIGZvbGxvd3M6PC9wPgoKICAgIDx0YWJsZSBjbGFzcz0iYm9yZGVyZWQiPjx0ciBjbGFzcz0iaGVhZGVyIj48dGg+Rm9ybWF0Jm5ic3A7U3RyaW5nPC90aD4KICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JSU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHBlcmNlbnQgc2lnbjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lYTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5SZW1vdGUgSVAtYWRkcmVzczwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lQTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5Mb2NhbCBJUC1hZGRyZXNzPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVCPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlNpemUgb2YgcmVzcG9uc2UgaW4gYnl0ZXMsIGV4Y2x1ZGluZyBIVFRQIGhlYWRlcnMuPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiViPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlNpemUgb2YgcmVzcG9uc2UgaW4gYnl0ZXMsIGV4Y2x1ZGluZyBIVFRQIGhlYWRlcnMuIEluIENMRiBmb3JtYXQsIDxlbT5pLmUuPC9lbT4KICAgICAgICBhICc8Y29kZT4tPC9jb2RlPicgcmF0aGVyIHRoYW4gYSAwIHdoZW4gbm8gYnl0ZXMgYXJlIHNlbnQuPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiV7PHZhcj5Gb29iYXI8L3Zhcj59QzwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgY29udGVudHMgb2YgY29va2llIDx2YXI+Rm9vYmFyPC92YXI+IGluIHRoZSByZXF1ZXN0IHNlbnQKICAgICAgICB0byB0aGUgc2VydmVyLjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lRDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgdGltZSB0YWtlbiB0byBzZXJ2ZSB0aGUgcmVxdWVzdCwgaW4gbWljcm9zZWNvbmRzLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lezx2YXI+Rk9PQkFSPC92YXI+fWU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGNvbnRlbnRzIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQogICAgICAgIDx2YXI+Rk9PQkFSPC92YXI+PC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVmPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkZpbGVuYW1lPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVoPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlJlbW90ZSBob3N0PC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVIPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSByZXF1ZXN0IHByb3RvY29sPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiV7PHZhcj5Gb29iYXI8L3Zhcj59aTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgY29udGVudHMgb2YgPGNvZGU+PHZhcj5Gb29iYXI8L3Zhcj46PC9jb2RlPiBoZWFkZXIgbGluZShzKQogICAgICAgIGluIHRoZSByZXF1ZXN0IHNlbnQgdG8gdGhlIHNlcnZlci48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JWw8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+UmVtb3RlIGxvZ25hbWUgKGZyb20gaWRlbnRkLCBpZiBzdXBwbGllZCkuIFRoaXMgd2lsbCByZXR1cm4gYQogICAgICAgIGRhc2ggdW5sZXNzIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfaWRlbnQuaHRtbCI+bW9kX2lkZW50PC9hPjwvY29kZT4gaXMgcHJlc2VudCBhbmQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9pZGVudC5odG1sI2lkZW50aXR5Y2hlY2siPklkZW50aXR5Q2hlY2s8L2E+PC9jb2RlPiBpcyBzZXQKICAgICAgICA8Y29kZT5PbjwvY29kZT4uPC90ZD48L3RyPgo8dHIgY2xhc3M9Im9kZCI+PHRkPjxjb2RlPiVtPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSByZXF1ZXN0IG1ldGhvZDwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lezx2YXI+Rm9vYmFyPC92YXI+fW48L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGNvbnRlbnRzIG9mIG5vdGUgPHZhcj5Gb29iYXI8L3Zhcj4gZnJvbSBhbm90aGVyCiAgICAgICAgbW9kdWxlLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lezx2YXI+Rm9vYmFyPC92YXI+fW88L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIGNvbnRlbnRzIG9mIDxjb2RlPjx2YXI+Rm9vYmFyPC92YXI+OjwvY29kZT4gaGVhZGVyIGxpbmUocykKICAgICAgICBpbiB0aGUgcmVwbHkuPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVwPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSBjYW5vbmljYWwgcG9ydCBvZiB0aGUgc2VydmVyIHNlcnZpbmcgdGhlIHJlcXVlc3Q8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JVA8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIHByb2Nlc3MgSUQgb2YgdGhlIGNoaWxkIHRoYXQgc2VydmljZWQgdGhlIHJlcXVlc3QuPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiV7PHZhcj5mb3JtYXQ8L3Zhcj59UDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgcHJvY2VzcyBJRCBvciB0aHJlYWQgaWQgb2YgdGhlIGNoaWxkIHRoYXQgc2VydmljZWQgdGhlIAogICAgICAgIHJlcXVlc3QuICBWYWxpZCBmb3JtYXRzIGFyZSA8Y29kZT5waWQ8L2NvZGU+LCA8Y29kZT50aWQ8L2NvZGU+LAogICAgICAgIGFuZCA8Y29kZT5oZXh0aWQ8L2NvZGU+LiAgPGNvZGU+aGV4dGlkPC9jb2RlPiByZXF1aXJlcyBBUFIgMS4yLjAgb3IgCiAgICAgICAgaGlnaGVyLgogICAgICAgIDwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lcTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgcXVlcnkgc3RyaW5nIChwcmVwZW5kZWQgd2l0aCBhIDxjb2RlPj88L2NvZGU+IGlmIGEgcXVlcnkKICAgICAgICBzdHJpbmcgZXhpc3RzLCBvdGhlcndpc2UgYW4gZW1wdHkgc3RyaW5nKTwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lcjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5GaXJzdCBsaW5lIG9mIHJlcXVlc3Q8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JXM8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+U3RhdHVzLiBGb3IgcmVxdWVzdHMgdGhhdCBnb3QgaW50ZXJuYWxseSByZWRpcmVjdGVkLCB0aGlzIGlzCiAgICAgICAgdGhlIHN0YXR1cyBvZiB0aGUgKm9yaWdpbmFsKiByZXF1ZXN0IC0tLSA8Y29kZT4lJmd0O3M8L2NvZGU+CiAgICAgICAgZm9yIHRoZSBsYXN0LjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4ldDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaW1lIHRoZSByZXF1ZXN0IHdhcyByZWNlaXZlZCAoc3RhbmRhcmQgZW5nbGlzaAogICAgICAgIGZvcm1hdCk8L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JXs8dmFyPmZvcm1hdDwvdmFyPn10PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSB0aW1lLCBpbiB0aGUgZm9ybSBnaXZlbiBieSBmb3JtYXQsIHdoaWNoIHNob3VsZCBiZSBpbgogICAgICAgIDxjb2RlPnN0cmZ0aW1lKDMpPC9jb2RlPiBmb3JtYXQuIChwb3RlbnRpYWxseSBsb2NhbGl6ZWQpPC90ZD48L3RyPgo8dHI+PHRkPjxjb2RlPiVUPC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPlRoZSB0aW1lIHRha2VuIHRvIHNlcnZlIHRoZSByZXF1ZXN0LCBpbiBzZWNvbmRzLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4ldTwvY29kZT48L3RkPgogICAgICAgIDx0ZD5SZW1vdGUgdXNlciAoZnJvbSBhdXRoOyBtYXkgYmUgYm9ndXMgaWYgcmV0dXJuIHN0YXR1cwogICAgICAgICg8Y29kZT4lczwvY29kZT4pIGlzIDQwMSk8L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JVU8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+VGhlIFVSTCBwYXRoIHJlcXVlc3RlZCwgbm90IGluY2x1ZGluZyBhbnkgcXVlcnkgc3RyaW5nLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4ldjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgY2Fub25pY2FsIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjc2VydmVybmFtZSI+U2VydmVyTmFtZTwvYT48L2NvZGU+CiAgICAgICAgb2YgdGhlIHNlcnZlciBzZXJ2aW5nIHRoZSByZXF1ZXN0LjwvdGQ+PC90cj4KPHRyPjx0ZD48Y29kZT4lVjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5UaGUgc2VydmVyIG5hbWUgYWNjb3JkaW5nIHRvIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI3VzZWNhbm9uaWNhbG5hbWUiPlVzZUNhbm9uaWNhbE5hbWU8L2E+PC9jb2RlPiBzZXR0aW5nLjwvdGQ+PC90cj4KPHRyIGNsYXNzPSJvZGQiPjx0ZD48Y29kZT4lWDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5Db25uZWN0aW9uIHN0YXR1cyB3aGVuIHJlc3BvbnNlIGlzIGNvbXBsZXRlZDoKCiAgICAgICAgPHRhYmxlPgogICAgICAgIAogICAgICAgIDx0cj48dGQ+PGNvZGU+WDwvY29kZT4gPTwvdGQ+CiAgICAgICAgICAgIDx0ZD5jb25uZWN0aW9uIGFib3J0ZWQgYmVmb3JlIHRoZSByZXNwb25zZSBjb21wbGV0ZWQuPC90ZD48L3RyPgogICAgICAgIDx0cj48dGQ+PGNvZGU+KzwvY29kZT4gPTwvdGQ+CiAgICAgICAgICAgIDx0ZD5jb25uZWN0aW9uIG1heSBiZSBrZXB0IGFsaXZlIGFmdGVyIHRoZSByZXNwb25zZSBpcwogICAgICAgICAgICBzZW50LjwvdGQ+PC90cj4KICAgICAgICA8dHI+PHRkPjxjb2RlPi08L2NvZGU+ID0gPC90ZD4KICAgICAgICAgICAgPHRkPmNvbm5lY3Rpb24gd2lsbCBiZSBjbG9zZWQgYWZ0ZXIgdGhlIHJlc3BvbnNlIGlzCiAgICAgICAgICAgIHNlbnQuPC90ZD48L3RyPgogICAgICAgIDwvdGFibGU+CgogICAgICAgIDxwPihUaGlzIGRpcmVjdGl2ZSB3YXMgPGNvZGU+JWM8L2NvZGU+IGluIGxhdGUgdmVyc2lvbnMgb2YgQXBhY2hlCiAgICAgICAgMS4zLCBidXQgdGhpcyBjb25mbGljdGVkIHdpdGggdGhlIGhpc3RvcmljYWwgc3NsCiAgICAgICAgPGNvZGU+JXs8dmFyPnZhcjwvdmFyPn1jPC9jb2RlPiBzeW50YXguKTwvcD48L3RkPjwvdHI+Cjx0cj48dGQ+PGNvZGU+JUk8L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+Qnl0ZXMgcmVjZWl2ZWQsIGluY2x1ZGluZyByZXF1ZXN0IGFuZCBoZWFkZXJzLCBjYW5ub3QgYmUgemVyby4KICAgICAgICBZb3UgbmVlZCB0byBlbmFibGUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9sb2dpby5odG1sIj5tb2RfbG9naW88L2E+PC9jb2RlPiB0byB1c2UgdGhpcy48L3RkPjwvdHI+Cjx0ciBjbGFzcz0ib2RkIj48dGQ+PGNvZGU+JU88L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+Qnl0ZXMgc2VudCwgaW5jbHVkaW5nIGhlYWRlcnMsIGNhbm5vdCBiZSB6ZXJvLiBZb3UgbmVlZCB0bwogICAgICAgIGVuYWJsZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2xvZ2lvLmh0bWwiPm1vZF9sb2dpbzwvYT48L2NvZGU+IHRvIHVzZSB0aGlzLjwvdGQ+PC90cj4KPC90YWJsZT4KCiAgICA8aDM+PGEgbmFtZT0ibW9kaWZpZXJzIiBpZD0ibW9kaWZpZXJzIj5Nb2RpZmllcnM8L2E+PC9oMz4KCiAgICAgIDxwPlBhcnRpY3VsYXIgaXRlbXMgY2FuIGJlIHJlc3RyaWN0ZWQgdG8gcHJpbnQgb25seSBmb3IKICAgICAgcmVzcG9uc2VzIHdpdGggc3BlY2lmaWMgSFRUUCBzdGF0dXMgY29kZXMgYnkgcGxhY2luZyBhCiAgICAgIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIHN0YXR1cyBjb2RlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlCiAgICAgICIlIi4gIEZvciBleGFtcGxlLCA8Y29kZT4iJTQwMCw1MDF7VXNlci1hZ2VudH1pIjwvY29kZT4gbG9ncwogICAgICA8Y29kZT5Vc2VyLWFnZW50PC9jb2RlPiBvbiA0MDAgZXJyb3JzIGFuZCA1MDEgZXJyb3JzIG9ubHkuICBGb3IKICAgICAgb3RoZXIgc3RhdHVzIGNvZGVzLCB0aGUgbGl0ZXJhbCBzdHJpbmcgPGNvZGU+Ii0iPC9jb2RlPiB3aWxsIGJlCiAgICAgIGxvZ2dlZC4gIFRoZSBzdGF0dXMgY29kZSBsaXN0IG1heSBiZSBwcmVjZWRlZCBieSBhCiAgICAgICI8Y29kZT4hPC9jb2RlPiIgdG8gaW5kaWNhdGUgbmVnYXRpb246CiAgICAgIDxjb2RlPiIlITIwMCwzMDQsMzAye1JlZmVyZXJ9aSI8L2NvZGU+IGxvZ3MgPGNvZGU+UmVmZXJlcjwvY29kZT4KICAgICAgb24gYWxsIHJlcXVlc3RzIHRoYXQgZG8gPGVtPm5vdDwvZW0+IHJldHVybiBvbmUgb2YgdGhlIHRocmVlCiAgICAgIHNwZWNpZmllZCBjb2Rlcy48L3A+CgogICAgICA8cD5UaGUgbW9kaWZpZXJzICImbHQ7IiBhbmQgIiZndDsiIGNhbiBiZSB1c2VkIGZvciByZXF1ZXN0cyB0aGF0CiAgICAgIGhhdmUgYmVlbiBpbnRlcm5hbGx5IHJlZGlyZWN0ZWQgdG8gY2hvb3NlIHdoZXRoZXIgdGhlIG9yaWdpbmFsCiAgICAgIG9yIGZpbmFsIChyZXNwZWN0aXZlbHkpIHJlcXVlc3Qgc2hvdWxkIGJlIGNvbnN1bHRlZC4gIEJ5CiAgICAgIGRlZmF1bHQsIHRoZSA8Y29kZT4lPC9jb2RlPiBkaXJlY3RpdmVzIDxjb2RlPiVzLCAlVSwgJVQsCiAgICAgICVELDwvY29kZT4gYW5kIDxjb2RlPiVyPC9jb2RlPiBsb29rIGF0IHRoZSBvcmlnaW5hbCByZXF1ZXN0CiAgICAgIHdoaWxlIGFsbCBvdGhlcnMgbG9vayBhdCB0aGUgZmluYWwgcmVxdWVzdC4gIFNvIGZvciBleGFtcGxlLAogICAgICA8Y29kZT4lJmd0O3M8L2NvZGU+IGNhbiBiZSB1c2VkIHRvIHJlY29yZCB0aGUgZmluYWwgc3RhdHVzIG9mCiAgICAgIHRoZSByZXF1ZXN0IGFuZCA8Y29kZT4lJmx0O3U8L2NvZGU+IGNhbiBiZSB1c2VkIHRvIHJlY29yZCB0aGUKICAgICAgb3JpZ2luYWwgYXV0aGVudGljYXRlZCB1c2VyIG9uIGEgcmVxdWVzdCB0aGF0IGlzIGludGVybmFsbHkKICAgICAgcmVkaXJlY3RlZCB0byBhbiB1bmF1dGhlbnRpY2F0ZWQgcmVzb3VyY2UuPC9wPgoKICAgIAoKICAgIDxoMz48YSBuYW1lPSJmb3JtYXQtbm90ZXMiIGlkPSJmb3JtYXQtbm90ZXMiPlNvbWUgTm90ZXM8L2E+PC9oMz4KCiAgICAgIDxwPkZvciBzZWN1cml0eSByZWFzb25zLCBzdGFydGluZyB3aXRoIHZlcnNpb24gMi4wLjQ2LAogICAgICBub24tcHJpbnRhYmxlIGFuZCBvdGhlciBzcGVjaWFsIGNoYXJhY3RlcnMgaW4gPGNvZGU+JXI8L2NvZGU+LAogICAgICA8Y29kZT4laTwvY29kZT4gYW5kIDxjb2RlPiVvPC9jb2RlPiBhcmUgZXNjYXBlZCB1c2luZwogICAgICA8Y29kZT5ceDx2YXI+aGg8L3Zhcj48L2NvZGU+IHNlcXVlbmNlcywgd2hlcmUgPHZhcj5oaDwvdmFyPgogICAgICBzdGFuZHMgZm9yIHRoZSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgcmF3CiAgICAgIGJ5dGUuIEV4Y2VwdGlvbnMgZnJvbSB0aGlzIHJ1bGUgYXJlIDxjb2RlPiI8L2NvZGU+IGFuZAogICAgICA8Y29kZT5cPC9jb2RlPiwgd2hpY2ggYXJlIGVzY2FwZWQgYnkgcHJlcGVuZGluZyBhIGJhY2tzbGFzaCwgYW5kCiAgICAgIGFsbCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIHdoaWNoIGFyZSB3cml0dGVuIGluIHRoZWlyIEMtc3R5bGUKICAgICAgbm90YXRpb24gKDxjb2RlPlxuPC9jb2RlPiwgPGNvZGU+XHQ8L2NvZGU+LCBldGMpLiAgSW4gdmVyc2lvbnMKICAgICAgcHJpb3IgdG8gMi4wLjQ2LCBubyBlc2NhcGluZyB3YXMgcGVyZm9ybWVkIG9uIHRoZXNlIHN0cmluZ3Mgc28KICAgICAgeW91IGhhZCB0byBiZSBxdWl0ZSBjYXJlZnVsIHdoZW4gZGVhbGluZyB3aXRoIHJhdyBsb2cgZmlsZXMuPC9wPgoKICAgICAgPHA+SW4gaHR0cGQgMi4wLCB1bmxpa2UgMS4zLCB0aGUgPGNvZGU+JWI8L2NvZGU+IGFuZAogICAgICA8Y29kZT4lQjwvY29kZT4gZm9ybWF0IHN0cmluZ3MgZG8gbm90IHJlcHJlc2VudCB0aGUgbnVtYmVyIG9mCiAgICAgIGJ5dGVzIHNlbnQgdG8gdGhlIGNsaWVudCwgYnV0IHNpbXBseSB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUKICAgICAgSFRUUCByZXNwb25zZSAod2hpY2ggd2lsbCBkaWZmZXIsIGZvciBpbnN0YW5jZSwgaWYgdGhlCiAgICAgIGNvbm5lY3Rpb24gaXMgYWJvcnRlZCwgb3IgaWYgU1NMIGlzIHVzZWQpLiAgVGhlIDxjb2RlPiVPPC9jb2RlPgogICAgICBmb3JtYXQgcHJvdmlkZWQgYnkgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9sb2dpby5odG1sIj5tb2RfbG9naW88L2E+PC9jb2RlPiB3aWxsIGxvZyB0aGUKICAgICAgYWN0dWFsIG51bWJlciBvZiBieXRlcyBzZW50IG92ZXIgdGhlIG5ldHdvcmsuPC9wPgoKICAgIAoKICAgIDxoMz48YSBuYW1lPSJleGFtcGxlcyIgaWQ9ImV4YW1wbGVzIj5FeGFtcGxlczwvYT48L2gzPgoKICAgICAgPHA+U29tZSBjb21tb25seSB1c2VkIGxvZyBmb3JtYXQgc3RyaW5ncyBhcmU6PC9wPgoKICAgICAgPGRsPgogICAgICAgIDxkdD5Db21tb24gTG9nIEZvcm1hdCAoQ0xGKTwvZHQ+CiAgICAgICAgPGRkPjxjb2RlPiIlaCAlbCAldSAldCBcIiVyXCIgJSZndDtzICViIjwvY29kZT48L2RkPgoKICAgICAgICA8ZHQ+Q29tbW9uIExvZyBGb3JtYXQgd2l0aCBWaXJ0dWFsIEhvc3Q8L2R0PgogICAgICAgIDxkZD48Y29kZT4iJXYgJWggJWwgJXUgJXQgXCIlclwiICUmZ3Q7cyAlYiI8L2NvZGU+PC9kZD4KCiAgICAgICAgPGR0Pk5DU0EgZXh0ZW5kZWQvY29tYmluZWQgbG9nIGZvcm1hdDwvZHQ+CiAgICAgICAgPGRkPjxjb2RlPiIlaCAlbCAldSAldCBcIiVyXCIgJSZndDtzICViIFwiJXtSZWZlcmVyfWlcIgogICAgICAgIFwiJXtVc2VyLWFnZW50fWlcIiI8L2NvZGU+PC9kZD4KCiAgICAgICAgPGR0PlJlZmVyZXIgbG9nIGZvcm1hdDwvZHQ+CiAgICAgICAgPGRkPjxjb2RlPiIle1JlZmVyZXJ9aSAtJmd0OyAlVSI8L2NvZGU+PC9kZD4KCiAgICAgICAgPGR0PkFnZW50IChCcm93c2VyKSBsb2cgZm9ybWF0PC9kdD4KICAgICAgICA8ZGQ+PGNvZGU+IiV7VXNlci1hZ2VudH1pIjwvY29kZT48L2RkPgogICAgICA8L2RsPgogICAgCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InNlY3VyaXR5IiBpZD0ic2VjdXJpdHkiPlNlY3VyaXR5IENvbnNpZGVyYXRpb25zPC9hPjwvaDI+CiAgICA8cD5TZWUgdGhlIDxhIGhyZWY9Ii4uL21pc2Mvc2VjdXJpdHlfdGlwcy5odG1sI3NlcnZlcnJvb3QiPnNlY3VyaXR5IHRpcHM8L2E+CiAgICBkb2N1bWVudCBmb3IgZGV0YWlscyBvbiB3aHkgeW91ciBzZWN1cml0eSBjb3VsZCBiZSBjb21wcm9taXNlZAogICAgaWYgdGhlIGRpcmVjdG9yeSB3aGVyZSBsb2dmaWxlcyBhcmUgc3RvcmVkIGlzIHdyaXRhYmxlIGJ5CiAgICBhbnlvbmUgb3RoZXIgdGhhbiB0aGUgdXNlciB0aGF0IHN0YXJ0cyB0aGUgc2VydmVyLjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkJ1ZmZlcmVkTG9ncyIgaWQ9IkJ1ZmZlcmVkTG9ncyI+QnVmZmVyZWRMb2dzPC9hPiA8YSBuYW1lPSJidWZmZXJlZGxvZ3MiIGlkPSJidWZmZXJlZGxvZ3MiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkJ1ZmZlciBsb2cgZW50cmllcyBpbiBtZW1vcnkgYmVmb3JlIHdyaXRpbmcgdG8gZGlzazwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5CdWZmZXJlZExvZ3MgT258T2ZmPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPkJ1ZmZlcmVkTG9ncyBPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZzwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5CYXNlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sb2dfY29uZmlnPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+QXZhaWxhYmxlIGluIHZlcnNpb25zIDIuMC40MSBhbmQgbGF0ZXIuPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkJ1ZmZlcmVkTG9nczwvY29kZT4gZGlyZWN0aXZlIGNhdXNlcwogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9sb2dfY29uZmlnLmh0bWwiPm1vZF9sb2dfY29uZmlnPC9hPjwvY29kZT4gdG8gc3RvcmUgc2V2ZXJhbCBsb2cgZW50cmllcyBpbgogICAgbWVtb3J5IGFuZCB3cml0ZSB0aGVtIHRvZ2V0aGVyIHRvIGRpc2ssIHJhdGhlciB0aGFuIHdyaXRpbmcgdGhlbQogICAgYWZ0ZXIgZWFjaCByZXF1ZXN0LiAgT24gc29tZSBzeXN0ZW1zLCB0aGlzIG1heSByZXN1bHQgaW4gbW9yZQogICAgZWZmaWNpZW50IGRpc2sgYWNjZXNzIGFuZCBoZW5jZSBoaWdoZXIgcGVyZm9ybWFuY2UuICBJdCBtYXkgYmUKICAgIHNldCBvbmx5IG9uY2UgZm9yIHRoZSBlbnRpcmUgc2VydmVyOyBpdCBjYW5ub3QgYmUgY29uZmlndXJlZAogICAgcGVyIHZpcnR1YWwtaG9zdC48L3A+CgogICAgPGRpdiBjbGFzcz0ibm90ZSI+VGhpcyBkaXJlY3RpdmUgaXMgZXhwZXJpbWVudGFsIGFuZCBzaG91bGQgYmUgdXNlZCB3aXRoCiAgICBjYXV0aW9uLjwvZGl2PgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkNvb2tpZUxvZyIgaWQ9IkNvb2tpZUxvZyI+Q29va2llTG9nPC9hPiA8YSBuYW1lPSJjb29raWVsb2ciIGlkPSJjb29raWVsb2ciPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlNldHMgZmlsZW5hbWUgZm9yIHRoZSBsb2dnaW5nIG9mIGNvb2tpZXM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+Q29va2llTG9nIDx2YXI+ZmlsZW5hbWU8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkJhc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2xvZ19jb25maWc8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5UaGlzIGRpcmVjdGl2ZSBpcyBkZXByZWNhdGVkLjwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Db29raWVMb2c8L2NvZGU+IGRpcmVjdGl2ZSBzZXRzIHRoZSAKICAgIGZpbGVuYW1lIGZvciBsb2dnaW5nIG9mIGNvb2tpZXMuIFRoZSBmaWxlbmFtZSBpcyByZWxhdGl2ZSB0byB0aGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjc2VydmVycm9vdCI+U2VydmVyUm9vdDwvYT48L2NvZGU+LiBUaGlzIGRpcmVjdGl2ZSBpcwogICAgaW5jbHVkZWQgb25seSBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIDxjb2RlPm1vZF9jb29raWVzPC9jb2RlPiwKICAgIGFuZCBpcyBkZXByZWNhdGVkLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJDdXN0b21Mb2ciIGlkPSJDdXN0b21Mb2ciPkN1c3RvbUxvZzwvYT4gPGEgbmFtZT0iY3VzdG9tbG9nIiBpZD0iY3VzdG9tbG9nIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5TZXRzIGZpbGVuYW1lIGFuZCBmb3JtYXQgb2YgbG9nIGZpbGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+Q3VzdG9tTG9nICA8dmFyPmZpbGU8L3Zhcj58PHZhcj5waXBlPC92YXI+Cjx2YXI+Zm9ybWF0PC92YXI+fDx2YXI+bmlja25hbWU8L3Zhcj4KW2Vudj1bIV08dmFyPmVudmlyb25tZW50LXZhcmlhYmxlPC92YXI+XTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+QmFzZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfbG9nX2NvbmZpZzwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5DdXN0b21Mb2c8L2NvZGU+IGRpcmVjdGl2ZSBpcyB1c2VkIHRvCiAgICBsb2cgcmVxdWVzdHMgdG8gdGhlIHNlcnZlci4gQSBsb2cgZm9ybWF0IGlzIHNwZWNpZmllZCwgYW5kIHRoZQogICAgbG9nZ2luZyBjYW4gb3B0aW9uYWxseSBiZSBtYWRlIGNvbmRpdGlvbmFsIG9uIHJlcXVlc3QKICAgIGNoYXJhY3RlcmlzdGljcyB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMuPC9wPgoKICAgIDxwPlRoZSBmaXJzdCBhcmd1bWVudCwgd2hpY2ggc3BlY2lmaWVzIHRoZSBsb2NhdGlvbiB0byB3aGljaAogICAgdGhlIGxvZ3Mgd2lsbCBiZSB3cml0dGVuLCBjYW4gdGFrZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0d28KICAgIHR5cGVzIG9mIHZhbHVlczo8L3A+CgogICAgPGRsPgogICAgICA8ZHQ+PHZhcj5maWxlPC92YXI+PC9kdD4KICAgICAgPGRkPkEgZmlsZW5hbWUsIHJlbGF0aXZlIHRvIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI3NlcnZlcnJvb3QiPlNlcnZlclJvb3Q8L2E+PC9jb2RlPi48L2RkPgoKICAgICAgPGR0Pjx2YXI+cGlwZTwvdmFyPjwvZHQ+CiAgICAgIDxkZD5UaGUgcGlwZSBjaGFyYWN0ZXIgIjxjb2RlPnw8L2NvZGU+IiwgZm9sbG93ZWQgYnkgdGhlIHBhdGgKICAgICAgdG8gYSBwcm9ncmFtIHRvIHJlY2VpdmUgdGhlIGxvZyBpbmZvcm1hdGlvbiBvbiBpdHMgc3RhbmRhcmQKICAgICAgaW5wdXQuCgogICAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+U2VjdXJpdHk6PC9oMz4KICAgICAgPHA+SWYgYSBwcm9ncmFtIGlzIHVzZWQsIHRoZW4gaXQgd2lsbCBiZSBydW4gYXMgdGhlIHVzZXIgd2hvCiAgICAgIHN0YXJ0ZWQgPGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2h0dHBkLmh0bWwiPmh0dHBkPC9hPjwvY29kZT4uIFRoaXMgd2lsbCBiZSByb290IGlmIHRoZSBzZXJ2ZXIgd2FzCiAgICAgIHN0YXJ0ZWQgYnkgcm9vdDsgYmUgc3VyZSB0aGF0IHRoZSBwcm9ncmFtIGlzIHNlY3VyZS48L3A+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+Tm90ZTwvaDM+CiAgICAgICAgPHA+V2hlbiBlbnRlcmluZyBhIGZpbGUgcGF0aCBvbiBub24tVW5peCBwbGF0Zm9ybXMsIGNhcmUgc2hvdWxkIGJlIHRha2VuCiAgICAgICAgdG8gbWFrZSBzdXJlIHRoYXQgb25seSBmb3J3YXJkIHNsYXNoZWQgYXJlIHVzZWQgZXZlbiB0aG91Z2ggdGhlIHBsYXRmb3JtCiAgICAgICAgbWF5IGFsbG93IHRoZSB1c2Ugb2YgYmFjayBzbGFzaGVzLiBJbiBnZW5lcmFsIGl0IGlzIGEgZ29vZCBpZGVhIHRvIGFsd2F5cyAKICAgICAgICB1c2UgZm9yd2FyZCBzbGFzaGVzIHRocm91Z2hvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuPC9wPgogICAgICA8L2Rpdj48L2RkPgogICAgPC9kbD4KCiAgICA8cD5UaGUgc2Vjb25kIGFyZ3VtZW50IHNwZWNpZmllcyB3aGF0IHdpbGwgYmUgd3JpdHRlbiB0byB0aGUKICAgIGxvZyBmaWxlLiBJdCBjYW4gc3BlY2lmeSBlaXRoZXIgYSA8dmFyPm5pY2tuYW1lPC92YXI+IGRlZmluZWQgYnkKICAgIGEgcHJldmlvdXMgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2xvZ2Zvcm1hdCI+TG9nRm9ybWF0PC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZSwgb3IgaXQgY2FuIGJlIGFuIGV4cGxpY2l0IDx2YXI+Zm9ybWF0PC92YXI+IHN0cmluZyBhcwogICAgZGVzY3JpYmVkIGluIHRoZSA8YSBocmVmPSIjZm9ybWF0cyI+bG9nIGZvcm1hdHM8L2E+IHNlY3Rpb24uPC9wPgoKICAgIDxwPkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIHR3byBzZXRzIG9mIGRpcmVjdGl2ZXMgaGF2ZQogICAgZXhhY3RseSB0aGUgc2FtZSBlZmZlY3Q6PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAjIEN1c3RvbUxvZyB3aXRoIGZvcm1hdCBuaWNrbmFtZTxiciAvPgogICAgICBMb2dGb3JtYXQgIiVoICVsICV1ICV0IFwiJXJcIiAlJmd0O3MgJWIiIGNvbW1vbjxiciAvPgogICAgICBDdXN0b21Mb2cgbG9ncy9hY2Nlc3NfbG9nIGNvbW1vbjxiciAvPgogICAgICA8YnIgLz4KICAgICAgIyBDdXN0b21Mb2cgd2l0aCBleHBsaWNpdCBmb3JtYXQgc3RyaW5nPGJyIC8+CiAgICAgIEN1c3RvbUxvZyBsb2dzL2FjY2Vzc19sb2cgIiVoICVsICV1ICV0IFwiJXJcIiAlJmd0O3MgJWIiCiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPlRoZSB0aGlyZCBhcmd1bWVudCBpcyBvcHRpb25hbCBhbmQgY29udHJvbHMgd2hldGhlciBvcgogICAgbm90IHRvIGxvZyBhIHBhcnRpY3VsYXIgcmVxdWVzdCBiYXNlZCBvbiB0aGUKICAgIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgYSBwYXJ0aWN1bGFyIHZhcmlhYmxlIGluIHRoZSBzZXJ2ZXIKICAgIGVudmlyb25tZW50LiBJZiB0aGUgc3BlY2lmaWVkIDxhIGhyZWY9Ii4uL2Vudi5odG1sIj5lbnZpcm9ubWVudAogICAgdmFyaWFibGU8L2E+IGlzIHNldCBmb3IgdGhlIHJlcXVlc3QgKG9yIGlzIG5vdCBzZXQsIGluIHRoZSBjYXNlCiAgICBvZiBhICc8Y29kZT5lbnY9ITx2YXI+bmFtZTwvdmFyPjwvY29kZT4nIGNsYXVzZSksIHRoZW4gdGhlCiAgICByZXF1ZXN0IHdpbGwgYmUgbG9nZ2VkLjwvcD4KCiAgICA8cD5FbnZpcm9ubWVudCB2YXJpYWJsZXMgY2FuIGJlIHNldCBvbiBhIHBlci1yZXF1ZXN0CiAgICBiYXNpcyB1c2luZyB0aGUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zZXRlbnZpZi5odG1sIj5tb2Rfc2V0ZW52aWY8L2E+PC9jb2RlPgogICAgYW5kL29yIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sIj5tb2RfcmV3cml0ZTwvYT48L2NvZGU+IG1vZHVsZXMuIEZvcgogICAgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gcmVjb3JkIHJlcXVlc3RzIGZvciBhbGwgR0lGCiAgICBpbWFnZXMgb24geW91ciBzZXJ2ZXIgaW4gYSBzZXBhcmF0ZSBsb2dmaWxlIGJ1dCBub3QgaW4geW91ciBtYWluCiAgICBsb2csIHlvdSBjYW4gdXNlOjwvcD4KICAgIAogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgIFNldEVudklmIFJlcXVlc3RfVVJJIFwuZ2lmJCBnaWYtaW1hZ2U8YnIgLz4KICAgICAgQ3VzdG9tTG9nIGdpZi1yZXF1ZXN0cy5sb2cgY29tbW9uIGVudj1naWYtaW1hZ2U8YnIgLz4KICAgICAgQ3VzdG9tTG9nIG5vbmdpZi1yZXF1ZXN0cy5sb2cgY29tbW9uIGVudj0hZ2lmLWltYWdlCiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPk9yLCB0byByZXByb2R1Y2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBvbGQgUmVmZXJlcklnbm9yZQogICAgZGlyZWN0aXZlLCB5b3UgbWlnaHQgdXNlIHRoZSBmb2xsb3dpbmc6PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgU2V0RW52SWYgUmVmZXJlciBleGFtcGxlXC5jb20gbG9jYWxyZWZlcmVyPGJyIC8+CiAgICBDdXN0b21Mb2cgcmVmZXJlci5sb2cgcmVmZXJlciBlbnY9IWxvY2FscmVmZXJlcgogICAgPC9jb2RlPjwvcD48L2Rpdj4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJMb2dGb3JtYXQiIGlkPSJMb2dGb3JtYXQiPkxvZ0Zvcm1hdDwvYT4gPGEgbmFtZT0ibG9nZm9ybWF0IiBpZD0ibG9nZm9ybWF0Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5EZXNjcmliZXMgYSBmb3JtYXQgZm9yIHVzZSBpbiBhIGxvZyBmaWxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPkxvZ0Zvcm1hdCA8dmFyPmZvcm1hdDwvdmFyPnw8dmFyPm5pY2tuYW1lPC92YXI+Cls8dmFyPm5pY2tuYW1lPC92YXI+XTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Mb2dGb3JtYXQgIiVoICVsICV1ICV0IFwiJXJcIiAlJmd0O3MgJWIiPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5CYXNlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sb2dfY29uZmlnPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhlIGFjY2VzcyBsb2cKICAgIGZpbGUuPC9wPgoKICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Mb2dGb3JtYXQ8L2NvZGU+IGRpcmVjdGl2ZSBjYW4gdGFrZSBvbmUgb2YgdHdvCiAgICBmb3Jtcy4gSW4gdGhlIGZpcnN0IGZvcm0sIHdoZXJlIG9ubHkgb25lIGFyZ3VtZW50IGlzIHNwZWNpZmllZCwKICAgIHRoaXMgZGlyZWN0aXZlIHNldHMgdGhlIGxvZyBmb3JtYXQgd2hpY2ggd2lsbCBiZSB1c2VkIGJ5IGxvZ3MKICAgIHNwZWNpZmllZCBpbiBzdWJzZXF1ZW50IDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlRyYW5zZmVyTG9nPC9jb2RlPgogICAgZGlyZWN0aXZlcy4gVGhlIHNpbmdsZSBhcmd1bWVudCBjYW4gc3BlY2lmeSBhbiBleHBsaWNpdAogICAgPHZhcj5mb3JtYXQ8L3Zhcj4gYXMgZGlzY3Vzc2VkIGluIHRoZSA8YSBocmVmPSIjZm9ybWF0cyI+Y3VzdG9tIGxvZwogICAgZm9ybWF0czwvYT4gc2VjdGlvbiBhYm92ZS4gQWx0ZXJuYXRpdmVseSwgaXQgY2FuIHVzZSBhCiAgICA8dmFyPm5pY2tuYW1lPC92YXI+IHRvIHJlZmVyIHRvIGEgbG9nIGZvcm1hdCBkZWZpbmVkIGluIGEKICAgIHByZXZpb3VzIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkxvZ0Zvcm1hdDwvY29kZT4gZGlyZWN0aXZlIGFzIGRlc2NyaWJlZAogICAgYmVsb3cuPC9wPgoKICAgIDxwPlRoZSBzZWNvbmQgZm9ybSBvZiB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TG9nRm9ybWF0PC9jb2RlPiAKICAgIGRpcmVjdGl2ZSBhc3NvY2lhdGVzIGFuIGV4cGxpY2l0IDx2YXI+Zm9ybWF0PC92YXI+IHdpdGggYQogICAgPHZhcj5uaWNrbmFtZTwvdmFyPi4gVGhpcyA8dmFyPm5pY2tuYW1lPC92YXI+IGNhbiB0aGVuIGJlIHVzZWQgaW4KICAgIHN1YnNlcXVlbnQgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TG9nRm9ybWF0PC9jb2RlPiBvcgogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2N1c3RvbWxvZyI+Q3VzdG9tTG9nPC9hPjwvY29kZT4gZGlyZWN0aXZlcwogICAgcmF0aGVyIHRoYW4gcmVwZWF0aW5nIHRoZSBlbnRpcmUgZm9ybWF0IHN0cmluZy4gQQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+TG9nRm9ybWF0PC9jb2RlPiBkaXJlY3RpdmUgdGhhdCBkZWZpbmVzIGEgbmlja25hbWUKICAgIDxzdHJvbmc+ZG9lcyBub3RoaW5nIGVsc2U8L3N0cm9uZz4gLS0gdGhhdCBpcywgaXQgPGVtPm9ubHk8L2VtPgogICAgZGVmaW5lcyB0aGUgbmlja25hbWUsIGl0IGRvZXNuJ3QgYWN0dWFsbHkgYXBwbHkgdGhlIGZvcm1hdCBhbmQgbWFrZQogICAgaXQgdGhlIGRlZmF1bHQuIFRoZXJlZm9yZSwgaXQgd2lsbCBub3QgYWZmZWN0IHN1YnNlcXVlbnQKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiN0cmFuc2ZlcmxvZyI+VHJhbnNmZXJMb2c8L2E+PC9jb2RlPiBkaXJlY3RpdmVzLgogICAgSW4gYWRkaXRpb24sIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkxvZ0Zvcm1hdDwvY29kZT4gY2Fubm90IHVzZSBvbmUgbmlja25hbWUKICAgIHRvIGRlZmluZSBhbm90aGVyIG5pY2tuYW1lLiBOb3RlIHRoYXQgdGhlIG5pY2tuYW1lIHNob3VsZCBub3QgY29udGFpbgogICAgcGVyY2VudCBzaWducyAoPGNvZGU+JTwvY29kZT4pLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZTwvaDM+PHA+PGNvZGU+CiAgICAgIExvZ0Zvcm1hdCAiJXYgJWggJWwgJXUgJXQgXCIlclwiICUmZ3Q7cyAlYiIgdmhvc3RfY29tbW9uCiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlRyYW5zZmVyTG9nIiBpZD0iVHJhbnNmZXJMb2ciPlRyYW5zZmVyTG9nPC9hPiA8YSBuYW1lPSJ0cmFuc2ZlcmxvZyIgaWQ9InRyYW5zZmVybG9nIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5TcGVjaWZ5IGxvY2F0aW9uIG9mIGEgbG9nIGZpbGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+VHJhbnNmZXJMb2cgPHZhcj5maWxlPC92YXI+fDx2YXI+cGlwZTwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+QmFzZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfbG9nX2NvbmZpZzwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoaXMgZGlyZWN0aXZlIGhhcyBleGFjdGx5IHRoZSBzYW1lIGFyZ3VtZW50cyBhbmQgZWZmZWN0IGFzCiAgICB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2N1c3RvbWxvZyI+Q3VzdG9tTG9nPC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZSwgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgaXQgZG9lcyBub3QgYWxsb3cgdGhlIGxvZyBmb3JtYXQKICAgIHRvIGJlIHNwZWNpZmllZCBleHBsaWNpdGx5IG9yIGZvciBjb25kaXRpb25hbCBsb2dnaW5nIG9mIHJlcXVlc3RzLgogICAgSW5zdGVhZCwgdGhlIGxvZyBmb3JtYXQgaXMgZGV0ZXJtaW5lZCBieSB0aGUgbW9zdCByZWNlbnRseSBzcGVjaWZpZWQKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsb2dmb3JtYXQiPkxvZ0Zvcm1hdDwvYT48L2NvZGU+IGRpcmVjdGl2ZQogICAgd2hpY2ggZG9lcyBub3QgZGVmaW5lIGEgbmlja25hbWUuIENvbW1vbiBMb2cgRm9ybWF0IGlzIHVzZWQgaWYgbm8KICAgIG90aGVyIGZvcm1hdCBoYXMgYmVlbiBzcGVjaWZpZWQuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5FeGFtcGxlPC9oMz48cD48Y29kZT4KICAgICAgTG9nRm9ybWF0ICIlaCAlbCAldSAldCBcIiVyXCIgJSZndDtzICViIFwiJXtSZWZlcmVyfWlcIiBcIiV7VXNlci1hZ2VudH1pXCIiPGJyIC8+CiAgICAgIFRyYW5zZmVyTG9nIGxvZ3MvYWNjZXNzX2xvZwogICAgPC9jb2RlPjwvcD48L2Rpdj4KCjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9tb2QvbW9kX2xvZ19jb25maWcuaHRtbCIgdGl0bGU9IkVuZ2xpc2giPiZuYnNwO2VuJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2phL21vZC9tb2RfbG9nX2NvbmZpZy5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2tvL21vZC9tb2RfbG9nX2NvbmZpZy5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT48L3A+CjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAxOTk1LTIwMDUgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG9yIGl0cyBsaWNlbnNvcnMsIGFzIGFwcGxpY2FibGUuPGJyIC8+TGljZW5zZWQgdW5kZXIgdGhlIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iLi4vZmFxLyI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+PC9kaXY+CjwvYm9keT48L2h0bWw+