PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD48IS0tCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgICAgICAgICBUaGlzIGZpbGUgaXMgZ2VuZXJhdGVkIGZyb20geG1sIHNvdXJjZTogRE8gTk9UIEVESVQKICAgICAgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAogICAgICAtLT4KPHRpdGxlPm1vZF9wcm94eSAtIEFwYWNoZSBIVFRQIFNlcnZlcjwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+CjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHk+CjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSIuLi9mYXEvIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD4KPHAgY2xhc3M9ImFwYWNoZSI+QXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi4zPC9wPgo8aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9mZWF0aGVyLmdpZiIgLz48L2Rpdj4KPGRpdiBjbGFzcz0idXAiPjxhIGhyZWY9Ii4vIj48aW1nIHRpdGxlPSImbHQ7LSIgYWx0PSImbHQ7LSIgc3JjPSIuLi9pbWFnZXMvbGVmdC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGlkPSJwYXRoIj4KPGEgaHJlZj0iaHR0cDovL3d3dy5hcGFjaGUub3JnLyI+QXBhY2hlPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnLyI+SFRUUCBTZXJ2ZXI8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi4vIj5WZXJzaW9uIDIuMzwvYT4gJmd0OyA8YSBocmVmPSIuLyI+TW9kdWxlczwvYT48L2Rpdj4KPGRpdiBpZD0icGFnZS1jb250ZW50Ij4KPGRpdiBpZD0icHJlYW1ibGUiPjxoMT5BcGFjaGUgTW9kdWxlIG1vZF9wcm94eTwvaDE+CjxkaXYgY2xhc3M9InRvcGxhbmciPgo8cD48c3Bhbj5BdmFpbGFibGUgTGFuZ3VhZ2VzOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vbW9kL21vZF9wcm94eS5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vamEvbW9kL21vZF9wcm94eS5odG1sIiBocmVmbGFuZz0iamEiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iSmFwYW5lc2UiPiZuYnNwO2phJm5ic3A7PC9hPjwvcD4KPC9kaXY+Cjx0YWJsZSBjbGFzcz0ibW9kdWxlIj48dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5IVFRQLzEuMSBwcm94eS9nYXRld2F5IHNlcnZlcjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNNb2R1bGVJZGVudGlmaWVyIj5Nb2R1bGWgSWRlbnRpZmllcjo8L2E+PC90aD48dGQ+cHJveHlfbW9kdWxlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjU291cmNlRmlsZSI+U291cmNloEZpbGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eS5jPC90ZD48L3RyPjwvdGFibGU+CjxoMz5TdW1tYXJ5PC9oMz4KCiAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+V2FybmluZzwvaDM+CiAgICAgIDxwPkRvIG5vdCBlbmFibGUgcHJveHlpbmcgd2l0aCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHlyZXF1ZXN0cyI+UHJveHlSZXF1ZXN0czwvYT48L2NvZGU+IHVudGlsIHlvdSBoYXZlIDxhIGhyZWY9IiNhY2Nlc3MiPnNlY3VyZWQgeW91ciBzZXJ2ZXI8L2E+LiBPcGVuIHByb3h5IHNlcnZlcnMgYXJlIGRhbmdlcm91cyBib3RoIHRvIHlvdXIKICAgICAgbmV0d29yayBhbmQgdG8gdGhlIEludGVybmV0IGF0IGxhcmdlLjwvcD4KICAgIDwvZGl2PgoKICAgIDxwPlRoaXMgbW9kdWxlIGltcGxlbWVudHMgYSBwcm94eS9nYXRld2F5IGZvciBBcGFjaGUuIEl0IGltcGxlbWVudHMKICAgIHByb3h5aW5nIGNhcGFiaWxpdHkgZm9yIDxjb2RlPkFKUDEzPC9jb2RlPiAoQXBhY2hlIEpTZXJ2ZSBQcm90b2NvbAogICAgdmVyc2lvbiAxLjMpLCA8Y29kZT5GVFA8L2NvZGU+LCA8Y29kZT5DT05ORUNUPC9jb2RlPiAoZm9yIFNTTCksCiAgICA8Y29kZT5IVFRQLzAuOTwvY29kZT4sIDxjb2RlPkhUVFAvMS4wPC9jb2RlPiwgYW5kIDxjb2RlPkhUVFAvMS4xPC9jb2RlPi4KICAgIFRoZSBtb2R1bGUgY2FuIGJlIGNvbmZpZ3VyZWQgdG8gY29ubmVjdCB0byBvdGhlciBwcm94eSBtb2R1bGVzIGZvciB0aGVzZQogICAgYW5kIG90aGVyIHByb3RvY29scy48L3A+CgogICAgPHA+QXBhY2hlJ3MgcHJveHkgZmVhdHVyZXMgYXJlIGRpdmlkZWQgaW50byBzZXZlcmFsIG1vZHVsZXMgaW4KICAgIGFkZGl0aW9uIHRvIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCI+bW9kX3Byb3h5PC9hPjwvY29kZT46CiAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2h0dHAuaHRtbCI+bW9kX3Byb3h5X2h0dHA8L2E+PC9jb2RlPiwgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eV9mdHAuaHRtbCI+bW9kX3Byb3h5X2Z0cDwvYT48L2NvZGU+LAogICAgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eV9hanAuaHRtbCI+bW9kX3Byb3h5X2FqcDwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2JhbGFuY2VyLmh0bWwiPm1vZF9wcm94eV9iYWxhbmNlcjwvYT48L2NvZGU+LAogICAgYW5kIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHlfY29ubmVjdC5odG1sIj5tb2RfcHJveHlfY29ubmVjdDwvYT48L2NvZGU+LiAgVGh1cywgaWYgeW91IHdhbnQgdG8gdXNlCiAgICBvbmUgb3IgbW9yZSBvZiB0aGUgcGFydGljdWxhciBwcm94eSBmdW5jdGlvbnMsIGxvYWQKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCI+bW9kX3Byb3h5PC9hPjwvY29kZT4gPGVtPmFuZDwvZW0+IHRoZSBhcHByb3ByaWF0ZSBtb2R1bGUocykKICAgIGludG8gdGhlIHNlcnZlciAoZWl0aGVyIHN0YXRpY2FsbHkgYXQgY29tcGlsZS10aW1lIG9yIGR5bmFtaWNhbGx5CiAgICB2aWEgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc28uaHRtbCNsb2FkbW9kdWxlIj5Mb2FkTW9kdWxlPC9hPjwvY29kZT4KICAgIGRpcmVjdGl2ZSkuPC9wPgoKICAgIDxwPkluIGFkZGl0aW9uLCBleHRlbmRlZCBmZWF0dXJlcyBhcmUgcHJvdmlkZWQgYnkgb3RoZXIgbW9kdWxlcy4KICAgIENhY2hpbmcgaXMgcHJvdmlkZWQgYnkgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9jYWNoZS5odG1sIj5tb2RfY2FjaGU8L2E+PC9jb2RlPiBhbmQgcmVsYXRlZAogICAgbW9kdWxlcy4gIFRoZSBhYmlsaXR5IHRvIGNvbnRhY3QgcmVtb3RlIHNlcnZlcnMgdXNpbmcgdGhlIFNTTC9UTFMKICAgIHByb3RvY29sIGlzIHByb3ZpZGVkIGJ5IHRoZSA8Y29kZT5TU0xQcm94eSo8L2NvZGU+IGRpcmVjdGl2ZXMgb2YKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc3NsLmh0bWwiPm1vZF9zc2w8L2E+PC9jb2RlPi4gIFRoZXNlIGFkZGl0aW9uYWwgbW9kdWxlcyB3aWxsIG5lZWQKICAgIHRvIGJlIGxvYWRlZCBhbmQgY29uZmlndXJlZCB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGVzZSBmZWF0dXJlcy48L3A+CjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjxoMyBjbGFzcz0iZGlyZWN0aXZlcyI+RGlyZWN0aXZlczwvaDM+Cjx1bCBpZD0idG9jIj4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYWxsb3djb25uZWN0Ij5BbGxvd0NPTk5FQ1Q8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbm9wcm94eSI+Tm9Qcm94eTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eSI+Jmx0O1Byb3h5Jmd0OzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eWJhZGhlYWRlciI+UHJveHlCYWRIZWFkZXI8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHlibG9jayI+UHJveHlCbG9jazwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eWRvbWFpbiI+UHJveHlEb21haW48L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHllcnJvcm92ZXJyaWRlIj5Qcm94eUVycm9yT3ZlcnJpZGU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHlpb2J1ZmZlcnNpemUiPlByb3h5SU9CdWZmZXJTaXplPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb3h5bWF0Y2giPiZsdDtQcm94eU1hdGNoJmd0OzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eW1heGZvcndhcmRzIj5Qcm94eU1heEZvcndhcmRzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb3h5cGFzcyI+UHJveHlQYXNzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb3h5cGFzc3JldmVyc2UiPlByb3h5UGFzc1JldmVyc2U8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHlwYXNzcmV2ZXJzZWNvb2tpZWRvbWFpbiI+UHJveHlQYXNzUmV2ZXJzZUNvb2tpZURvbWFpbjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eXBhc3NyZXZlcnNlY29va2llcGF0aCI+UHJveHlQYXNzUmV2ZXJzZUNvb2tpZVBhdGg8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHlwcmVzZXJ2ZWhvc3QiPlByb3h5UHJlc2VydmVIb3N0PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb3h5cmVjZWl2ZWJ1ZmZlcnNpemUiPlByb3h5UmVjZWl2ZUJ1ZmZlclNpemU8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHlyZW1vdGUiPlByb3h5UmVtb3RlPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3Byb3h5cmVtb3RlbWF0Y2giPlByb3h5UmVtb3RlTWF0Y2g8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjcHJveHlyZXF1ZXN0cyI+UHJveHlSZXF1ZXN0czwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eXRpbWVvdXQiPlByb3h5VGltZW91dDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNwcm94eXZpYSI+UHJveHlWaWE8L2E+PC9saT4KPC91bD4KPGgzPlRvcGljczwvaDM+Cjx1bCBpZD0idG9waWNzIj4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjZm9yd2FyZHJldmVyc2UiPkZvcndhcmQgYW5kIFJldmVyc2UgUHJveGllczwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNleGFtcGxlcyI+QmFzaWMgRXhhbXBsZXM8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYWNjZXNzIj5Db250cm9sbGluZyBhY2Nlc3MgdG8geW91ciBwcm94eTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNzdGFydHVwIj5TbG93IFN0YXJ0dXA8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjaW50cmFuZXQiPkludHJhbmV0IFByb3h5PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2VudnNldHRpbmdzIj5Qcm90b2NvbCBBZGp1c3RtZW50czwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNyZXF1ZXN0LWJvZGllcyI+UmVxdWVzdCBCb2R5czwvYT48L2xpPgo8L3VsPjxoMz5TZWUgYWxzbzwvaDM+Cjx1bCBjbGFzcz0ic2VlYWxzbyI+CjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2NhY2hlLmh0bWwiPm1vZF9jYWNoZTwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHlfaHR0cC5odG1sIj5tb2RfcHJveHlfaHR0cDwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHlfZnRwLmh0bWwiPm1vZF9wcm94eV9mdHA8L2E+PC9jb2RlPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2Nvbm5lY3QuaHRtbCI+bW9kX3Byb3h5X2Nvbm5lY3Q8L2E+PC9jb2RlPjwvbGk+CjxsaT48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5X2JhbGFuY2VyLmh0bWwiPm1vZF9wcm94eV9iYWxhbmNlcjwvYT48L2NvZGU+PC9saT4KPGxpPjxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2Rfc3NsLmh0bWwiPm1vZF9zc2w8L2E+PC9jb2RlPjwvbGk+CjwvdWw+PC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImZvcndhcmRyZXZlcnNlIiBpZD0iZm9yd2FyZHJldmVyc2UiPkZvcndhcmQgYW5kIFJldmVyc2UgUHJveGllczwvYT48L2gyPgogICAgICA8cD5BcGFjaGUgY2FuIGJlIGNvbmZpZ3VyZWQgaW4gYm90aCBhIDxkZm4+Zm9yd2FyZDwvZGZuPiBhbmQKICAgICAgPGRmbj5yZXZlcnNlPC9kZm4+IHByb3h5IG1vZGUuPC9wPgoKICAgICAgPHA+QW4gb3JkaW5hcnkgPGRmbj5mb3J3YXJkIHByb3h5PC9kZm4+IGlzIGFuIGludGVybWVkaWF0ZQogICAgICBzZXJ2ZXIgdGhhdCBzaXRzIGJldHdlZW4gdGhlIGNsaWVudCBhbmQgdGhlIDxlbT5vcmlnaW4KICAgICAgc2VydmVyPC9lbT4uICBJbiBvcmRlciB0byBnZXQgY29udGVudCBmcm9tIHRoZSBvcmlnaW4gc2VydmVyLAogICAgICB0aGUgY2xpZW50IHNlbmRzIGEgcmVxdWVzdCB0byB0aGUgcHJveHkgbmFtaW5nIHRoZSBvcmlnaW4gc2VydmVyCiAgICAgIGFzIHRoZSB0YXJnZXQgYW5kIHRoZSBwcm94eSB0aGVuIHJlcXVlc3RzIHRoZSBjb250ZW50IGZyb20gdGhlCiAgICAgIG9yaWdpbiBzZXJ2ZXIgYW5kIHJldHVybnMgaXQgdG8gdGhlIGNsaWVudC4gIFRoZSBjbGllbnQgbXVzdCBiZQogICAgICBzcGVjaWFsbHkgY29uZmlndXJlZCB0byB1c2UgdGhlIGZvcndhcmQgcHJveHkgdG8gYWNjZXNzIG90aGVyCiAgICAgIHNpdGVzLjwvcD4KCiAgICAgIDxwPkEgdHlwaWNhbCB1c2FnZSBvZiBhIGZvcndhcmQgcHJveHkgaXMgdG8gcHJvdmlkZSBJbnRlcm5ldAogICAgICBhY2Nlc3MgdG8gaW50ZXJuYWwgY2xpZW50cyB0aGF0IGFyZSBvdGhlcndpc2UgcmVzdHJpY3RlZCBieSBhCiAgICAgIGZpcmV3YWxsLiAgVGhlIGZvcndhcmQgcHJveHkgY2FuIGFsc28gdXNlIGNhY2hpbmcgKGFzIHByb3ZpZGVkCiAgICAgIGJ5IDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4pIHRvIHJlZHVjZSBuZXR3b3JrIHVzYWdlLjwvcD4KCiAgICAgIDxwPlRoZSBmb3J3YXJkIHByb3h5IGlzIGFjdGl2YXRlZCB1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5cmVxdWVzdHMiPlByb3h5UmVxdWVzdHM8L2E+PC9jb2RlPiBkaXJlY3RpdmUuICBCZWNhdXNlCiAgICAgIGZvcndhcmQgcHJveHlzIGFsbG93IGNsaWVudHMgdG8gYWNjZXNzIGFyYml0cmFyeSBzaXRlcyB0aHJvdWdoCiAgICAgIHlvdXIgc2VydmVyIGFuZCB0byBoaWRlIHRoZWlyIHRydWUgb3JpZ2luLCBpdCBpcyBlc3NlbnRpYWwgdGhhdAogICAgICB5b3UgPGEgaHJlZj0iI2FjY2VzcyI+c2VjdXJlIHlvdXIgc2VydmVyPC9hPiBzbyB0aGF0IG9ubHkKICAgICAgYXV0aG9yaXplZCBjbGllbnRzIGNhbiBhY2Nlc3MgdGhlIHByb3h5IGJlZm9yZSBhY3RpdmF0aW5nIGEKICAgICAgZm9yd2FyZCBwcm94eS48L3A+CgogICAgICA8cD5BIDxkZm4+cmV2ZXJzZSBwcm94eTwvZGZuPiwgYnkgY29udHJhc3QsIGFwcGVhcnMgdG8gdGhlCiAgICAgIGNsaWVudCBqdXN0IGxpa2UgYW4gb3JkaW5hcnkgd2ViIHNlcnZlci4gIE5vIHNwZWNpYWwKICAgICAgY29uZmlndXJhdGlvbiBvbiB0aGUgY2xpZW50IGlzIG5lY2Vzc2FyeS4gIFRoZSBjbGllbnQgbWFrZXMKICAgICAgb3JkaW5hcnkgcmVxdWVzdHMgZm9yIGNvbnRlbnQgaW4gdGhlIG5hbWUtc3BhY2Ugb2YgdGhlIHJldmVyc2UKICAgICAgcHJveHkuICBUaGUgcmV2ZXJzZSBwcm94eSB0aGVuIGRlY2lkZXMgd2hlcmUgdG8gc2VuZCB0aG9zZQogICAgICByZXF1ZXN0cywgYW5kIHJldHVybnMgdGhlIGNvbnRlbnQgYXMgaWYgaXQgd2FzIGl0c2VsZiB0aGUKICAgICAgb3JpZ2luLjwvcD4KCiAgICAgIDxwPkEgdHlwaWNhbCB1c2FnZSBvZiBhIHJldmVyc2UgcHJveHkgaXMgdG8gcHJvdmlkZSBJbnRlcm5ldAogICAgICB1c2VycyBhY2Nlc3MgdG8gYSBzZXJ2ZXIgdGhhdCBpcyBiZWhpbmQgYSBmaXJld2FsbC4gIFJldmVyc2UKICAgICAgcHJveGllcyBjYW4gYWxzbyBiZSB1c2VkIHRvIGJhbGFuY2UgbG9hZCBhbW9uZyBzZXZlcmFsIGJhY2stZW5kCiAgICAgIHNlcnZlcnMsIG9yIHRvIHByb3ZpZGUgY2FjaGluZyBmb3IgYSBzbG93ZXIgYmFjay1lbmQgc2VydmVyLgogICAgICBJbiBhZGRpdGlvbiwgcmV2ZXJzZSBwcm94aWVzIGNhbiBiZSB1c2VkIHNpbXBseSB0byBicmluZwogICAgICBzZXZlcmFsIHNlcnZlcnMgaW50byB0aGUgc2FtZSBVUkwgc3BhY2UuPC9wPgoKICAgICAgPHA+QSByZXZlcnNlIHByb3h5IGlzIGFjdGl2YXRlZCB1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5cGFzcyI+UHJveHlQYXNzPC9hPjwvY29kZT4gZGlyZWN0aXZlIG9yIHRoZQogICAgICA8Y29kZT5bUF08L2NvZGU+IGZsYWcgdG8gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sI3Jld3JpdGVydWxlIj5SZXdyaXRlUnVsZTwvYT48L2NvZGU+IGRpcmVjdGl2ZS4gIEl0IGlzCiAgICAgIDxzdHJvbmc+bm90PC9zdHJvbmc+IG5lY2Vzc2FyeSB0byB0dXJuIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm94eXJlcXVlc3RzIj5Qcm94eVJlcXVlc3RzPC9hPjwvY29kZT4gb24gaW4gb3JkZXIgdG8KICAgICAgY29uZmlndXJlIGEgcmV2ZXJzZSBwcm94eS48L3A+CiAgICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJleGFtcGxlcyIgaWQ9ImV4YW1wbGVzIj5CYXNpYyBFeGFtcGxlczwvYT48L2gyPgoKICAgIDxwPlRoZSBleGFtcGxlcyBiZWxvdyBhcmUgb25seSBhIHZlcnkgYmFzaWMgaWRlYSB0byBoZWxwIHlvdQogICAgZ2V0IHN0YXJ0ZWQuICBQbGVhc2UgcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBvbiB0aGUgaW5kaXZpZHVhbAogICAgZGlyZWN0aXZlcy48L3A+CgogICAgPHA+SW4gYWRkaXRpb24sIGlmIHlvdSB3aXNoIHRvIGhhdmUgY2FjaGluZyBlbmFibGVkLCBjb25zdWx0CiAgICB0aGUgZG9jdW1lbnRhdGlvbiBmcm9tIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfY2FjaGUuaHRtbCI+bW9kX2NhY2hlPC9hPjwvY29kZT4uPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxoMz5Gb3J3YXJkIFByb3h5PC9oMz48cD48Y29kZT4KICAgIFByb3h5UmVxdWVzdHMgT248YnIgLz4KICAgIFByb3h5VmlhIE9uPGJyIC8+CiAgICA8YnIgLz4KICAgICZsdDtQcm94eSAqJmd0OzxiciAvPgogICAgPHNwYW4gY2xhc3M9ImluZGVudCI+CiAgICAgIE9yZGVyIGRlbnksYWxsb3c8YnIgLz4KICAgICAgRGVueSBmcm9tIGFsbDxiciAvPgogICAgICBBbGxvdyBmcm9tIGludGVybmFsLmV4YW1wbGUuY29tPGJyIC8+CiAgICA8L3NwYW4+CiAgICAmbHQ7L1Byb3h5Jmd0OwogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+UmV2ZXJzZSBQcm94eTwvaDM+PHA+PGNvZGU+CiAgICBQcm94eVJlcXVlc3RzIE9mZjxiciAvPgogICAgPGJyIC8+CiAgICAmbHQ7UHJveHkgKiZndDs8YnIgLz4KICAgIDxzcGFuIGNsYXNzPSJpbmRlbnQiPgogICAgICBPcmRlciBkZW55LGFsbG93PGJyIC8+CiAgICAgIEFsbG93IGZyb20gYWxsPGJyIC8+CiAgICA8L3NwYW4+CiAgICAmbHQ7L1Byb3h5Jmd0OzxiciAvPgogICAgPGJyIC8+CiAgICBQcm94eVBhc3MgL2ZvbyBodHRwOi8vZm9vLmV4YW1wbGUuY29tL2JhcjxiciAvPgogICAgUHJveHlQYXNzUmV2ZXJzZSAvZm9vIGh0dHA6Ly9mb28uZXhhbXBsZS5jb20vYmFyCiAgICA8L2NvZGU+PC9wPjwvZGl2PgogICAgPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iYWNjZXNzIiBpZD0iYWNjZXNzIj5Db250cm9sbGluZyBhY2Nlc3MgdG8geW91ciBwcm94eTwvYT48L2gyPgogICAgICA8cD5Zb3UgY2FuIGNvbnRyb2wgd2hvIGNhbiBhY2Nlc3MgeW91ciBwcm94eSB2aWEgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm94eSI+Jmx0O1Byb3h5Jmd0OzwvYT48L2NvZGU+IGNvbnRyb2wgYmxvY2sgYXMgaW4KICAgICAgdGhlIGZvbGxvd2luZyBleGFtcGxlOjwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAgICZsdDtQcm94eSAqJmd0OzxiciAvPgogICAgICAgIDxzcGFuIGNsYXNzPSJpbmRlbnQiPgogICAgICAgICAgT3JkZXIgRGVueSxBbGxvdzxiciAvPgogICAgICAgICAgRGVueSBmcm9tIGFsbDxiciAvPgogICAgICAgICAgQWxsb3cgZnJvbSAxOTIuMTY4LjA8YnIgLz4KICAgICAgICA8L3NwYW4+CiAgICAgICAgJmx0Oy9Qcm94eSZndDsKICAgICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICAgIDxwPkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGFjY2VzcyBjb250cm9sIGRpcmVjdGl2ZXMsIHNlZQogICAgICA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2hvc3QuaHRtbCI+bW9kX2F1dGh6X2hvc3Q8L2E+PC9jb2RlPi48L3A+CgogICAgICA8cD5TdHJpY3RseSBsaW1pdGluZyBhY2Nlc3MgaXMgZXNzZW50aWFsIGlmIHlvdSBhcmUgdXNpbmcgYQogICAgICBmb3J3YXJkIHByb3h5ICh1c2luZyB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5cmVxdWVzdHMiPlByb3h5UmVxdWVzdHM8L2E+PC9jb2RlPiBkaXJlY3RpdmUpLgogICAgICBPdGhlcndpc2UsIHlvdXIgc2VydmVyIGNhbiBiZSB1c2VkIGJ5IGFueSBjbGllbnQgdG8gYWNjZXNzCiAgICAgIGFyYml0cmFyeSBob3N0cyB3aGlsZSBoaWRpbmcgaGlzIG9yIGhlciB0cnVlIGlkZW50aXR5LiAgVGhpcyBpcwogICAgICBkYW5nZXJvdXMgYm90aCBmb3IgeW91ciBuZXR3b3JrIGFuZCBmb3IgdGhlIEludGVybmV0IGF0IGxhcmdlLgogICAgICBXaGVuIHVzaW5nIGEgcmV2ZXJzZSBwcm94eSAodXNpbmcgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm94eXBhc3MiPlByb3h5UGFzczwvYT48L2NvZGU+IGRpcmVjdGl2ZSB3aXRoCiAgICAgIDxjb2RlPlByb3h5UmVxdWVzdHMgT2ZmPC9jb2RlPiksIGFjY2VzcyBjb250cm9sIGlzIGxlc3MKICAgICAgY3JpdGljYWwgYmVjYXVzZSBjbGllbnRzIGNhbiBvbmx5IGNvbnRhY3QgdGhlIGhvc3RzIHRoYXQgeW91CiAgICAgIGhhdmUgc3BlY2lmaWNhbGx5IGNvbmZpZ3VyZWQuPC9wPgoKICAgIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InN0YXJ0dXAiIGlkPSJzdGFydHVwIj5TbG93IFN0YXJ0dXA8L2E+PC9oMj4KICAgICAgPHA+SWYgeW91J3JlIHVzaW5nIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHlibG9jayI+UHJveHlCbG9jazwvYT48L2NvZGU+IGRpcmVjdGl2ZSwgaG9zdG5hbWVzJyBJUCBhZGRyZXNzZXMgYXJlIGxvb2tlZCB1cAogICAgICBhbmQgY2FjaGVkIGR1cmluZyBzdGFydHVwIGZvciBsYXRlciBtYXRjaCB0ZXN0LiBUaGlzIG1heSB0YWtlIGEgZmV3CiAgICAgIHNlY29uZHMgKG9yIG1vcmUpIGRlcGVuZGluZyBvbiB0aGUgc3BlZWQgd2l0aCB3aGljaCB0aGUgaG9zdG5hbWUgbG9va3VwcwogICAgICBvY2N1ci48L3A+CiAgICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJpbnRyYW5ldCIgaWQ9ImludHJhbmV0Ij5JbnRyYW5ldCBQcm94eTwvYT48L2gyPgogICAgICA8cD5BbiBBcGFjaGUgcHJveHkgc2VydmVyIHNpdHVhdGVkIGluIGFuIGludHJhbmV0IG5lZWRzIHRvIGZvcndhcmQKICAgICAgZXh0ZXJuYWwgcmVxdWVzdHMgdGhyb3VnaCB0aGUgY29tcGFueSdzIGZpcmV3YWxsIChmb3IgdGhpcywgY29uZmlndXJlCiAgICAgIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHlyZW1vdGUiPlByb3h5UmVtb3RlPC9hPjwvY29kZT4gZGlyZWN0aXZlCiAgICAgIHRvIGZvcndhcmQgdGhlIHJlc3BlY3RpdmUgPHZhcj5zY2hlbWU8L3Zhcj4gdG8gdGhlIGZpcmV3YWxsIHByb3h5KS4KICAgICAgSG93ZXZlciwgd2hlbiBpdCBoYXMgdG8KICAgICAgYWNjZXNzIHJlc291cmNlcyB3aXRoaW4gdGhlIGludHJhbmV0LCBpdCBjYW4gYnlwYXNzIHRoZSBmaXJld2FsbCB3aGVuCiAgICAgIGFjY2Vzc2luZyBob3N0cy4gVGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNub3Byb3h5Ij5Ob1Byb3h5PC9hPjwvY29kZT4KICAgICAgZGlyZWN0aXZlIGlzIHVzZWZ1bCBmb3Igc3BlY2lmeWluZyB3aGljaCBob3N0cyBiZWxvbmcgdG8gdGhlIGludHJhbmV0IGFuZAogICAgICBzaG91bGQgYmUgYWNjZXNzZWQgZGlyZWN0bHkuPC9wPgoKICAgICAgPHA+VXNlcnMgd2l0aGluIGFuIGludHJhbmV0IHRlbmQgdG8gb21pdCB0aGUgbG9jYWwgZG9tYWluIG5hbWUgZnJvbSB0aGVpcgogICAgICBXV1cgcmVxdWVzdHMsIHRodXMgcmVxdWVzdGluZyAiaHR0cDovL3NvbWVob3N0LyIgaW5zdGVhZCBvZgogICAgICA8Y29kZT5odHRwOi8vc29tZWhvc3QuZXhhbXBsZS5jb20vPC9jb2RlPi4gU29tZSBjb21tZXJjaWFsIHByb3h5IHNlcnZlcnMKICAgICAgbGV0IHRoZW0gZ2V0IGF3YXkgd2l0aCB0aGlzIGFuZCBzaW1wbHkgc2VydmUgdGhlIHJlcXVlc3QsIGltcGx5aW5nIGEKICAgICAgY29uZmlndXJlZCBsb2NhbCBkb21haW4uIFdoZW4gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm94eWRvbWFpbiI+UHJveHlEb21haW48L2E+PC9jb2RlPiBkaXJlY3RpdmUgaXMgdXNlZCBhbmQgdGhlIHNlcnZlciBpcyA8YSBocmVmPSIjcHJveHlyZXF1ZXN0cyI+Y29uZmlndXJlZCBmb3IgcHJveHkgc2VydmljZTwvYT4sIEFwYWNoZSBjYW4gcmV0dXJuCiAgICAgIGEgcmVkaXJlY3QgcmVzcG9uc2UgYW5kIHNlbmQgdGhlIGNsaWVudCB0byB0aGUgY29ycmVjdCwgZnVsbHkgcXVhbGlmaWVkLAogICAgICBzZXJ2ZXIgYWRkcmVzcy4gVGhpcyBpcyB0aGUgcHJlZmVycmVkIG1ldGhvZCBzaW5jZSB0aGUgdXNlcidzIGJvb2ttYXJrCiAgICAgIGZpbGVzIHdpbGwgdGhlbiBjb250YWluIGZ1bGx5IHF1YWxpZmllZCBob3N0cy48L3A+CiAgICA8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJlbnZzZXR0aW5ncyIgaWQ9ImVudnNldHRpbmdzIj5Qcm90b2NvbCBBZGp1c3RtZW50czwvYT48L2gyPgogICAgICA8cD5Gb3IgY2lyY3Vtc3RhbmNlcyB3aGVyZSA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5Lmh0bWwiPm1vZF9wcm94eTwvYT48L2NvZGU+IGlzIHNlbmRpbmcKICAgICAgcmVxdWVzdHMgdG8gYW4gb3JpZ2luIHNlcnZlciB0aGF0IGRvZXNuJ3QgcHJvcGVybHkgaW1wbGVtZW50CiAgICAgIGtlZXBhbGl2ZXMgb3IgSFRUUC8xLjEsIHRoZXJlIGFyZSB0d28gPGEgaHJlZj0iLi4vZW52Lmh0bWwiPmVudmlyb25tZW50IHZhcmlhYmxlczwvYT4gdGhhdCBjYW4gZm9yY2UgdGhlCiAgICAgIHJlcXVlc3QgdG8gdXNlIEhUVFAvMS4wIHdpdGggbm8ga2VlcGFsaXZlLiBUaGVzZSBhcmUgc2V0IHZpYSB0aGUKICAgICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9lbnYuaHRtbCNzZXRlbnYiPlNldEVudjwvYT48L2NvZGU+IGRpcmVjdGl2ZS48L3A+CgogICAgICA8cD5UaGVzZSBhcmUgdGhlIDxjb2RlPmZvcmNlLXByb3h5LXJlcXVlc3QtMS4wPC9jb2RlPiBhbmQKICAgICAgPGNvZGU+cHJveHktbm9rZWVwYWxpdmU8L2NvZGU+IG5vdGVzLjwvcD4KCiAgICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAgICZsdDtMb2NhdGlvbiAvYnVnZ3lhcHBzZXJ2ZXIvJmd0OzxiciAvPgogICAgICAgIDxzcGFuIGNsYXNzPSJpbmRlbnQiPgogICAgICAgICAgUHJveHlQYXNzIGh0dHA6Ly9idWdneWFwcHNlcnZlcjo3MDAxL2Zvby88YnIgLz4KICAgICAgICAgIFNldEVudiBmb3JjZS1wcm94eS1yZXF1ZXN0LTEuMCAxPGJyIC8+CiAgICAgICAgICBTZXRFbnYgcHJveHktbm9rZWVwYWxpdmUgMTxiciAvPgogICAgICAgIDwvc3Bhbj4KICAgICAgICAmbHQ7L0xvY2F0aW9uJmd0OwogICAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9InJlcXVlc3QtYm9kaWVzIiBpZD0icmVxdWVzdC1ib2RpZXMiPlJlcXVlc3QgQm9keXM8L2E+PC9oMj4KCiAgICA8cD5Tb21lIHJlcXVlc3QgbWV0aG9kcyBzdWNoIGFzIFBPU1QgaW5jbHVkZSBhIHJlcXVlc3QgYm9keS4KICAgIFRoZSBIVFRQIHByb3RvY29sIHJlcXVpcmVzIHRoYXQgcmVxdWVzdHMgd2hpY2ggaW5jbHVkZSBhIGJvZHkKICAgIGVpdGhlciB1c2UgY2h1bmtlZCB0cmFuc2ZlciBlbmNvZGluZyBvciBzZW5kIGEKICAgIDxjb2RlPkNvbnRlbnQtTGVuZ3RoPC9jb2RlPiByZXF1ZXN0IGhlYWRlci4gIFdoZW4gcGFzc2luZyB0aGVzZQogICAgcmVxdWVzdHMgb24gdG8gdGhlIG9yaWdpbiBzZXJ2ZXIsIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHlfaHR0cC5odG1sIj5tb2RfcHJveHlfaHR0cDwvYT48L2NvZGU+CiAgICB3aWxsIGFsd2F5cyBhdHRlbXB0IHRvIHNlbmQgdGhlIDxjb2RlPkNvbnRlbnQtTGVuZ3RoPC9jb2RlPi4gIEJ1dAogICAgaWYgdGhlIGJvZHkgaXMgbGFyZ2UgYW5kIHRoZSBvcmlnaW5hbCByZXF1ZXN0IHVzZWQgY2h1bmtlZAogICAgZW5jb2RpbmcsIHRoZW4gY2h1bmtlZCBlbmNvZGluZyBtYXkgYWxzbyBiZSB1c2VkIGluIHRoZSB1cHN0cmVhbQogICAgcmVxdWVzdC4gIFlvdSBjYW4gY29udHJvbCB0aGlzIHNlbGVjdGlvbiB1c2luZyA8YSBocmVmPSIuLi9lbnYuaHRtbCI+ZW52aXJvbm1lbnQgdmFyaWFibGVzPC9hPi4gIFNldHRpbmcKICAgIDxjb2RlPnByb3h5LXNlbmRjbDwvY29kZT4gZW5zdXJlcyBtYXhpbXVtIGNvbXBhdGliaWxpdHkgd2l0aAogICAgdXBzdHJlYW0gc2VydmVycyBieSBhbHdheXMgc2VuZGluZyB0aGUKICAgIDxjb2RlPkNvbnRlbnQtTGVuZ3RoPC9jb2RlPiwgd2hpbGUgc2V0dGluZwogICAgPGNvZGU+cHJveHktc2VuZGNodW5rZWQ8L2NvZGU+IG1pbmltaXplcyByZXNvdXJjZSB1c2FnZSBieSB1c2luZwogICAgY2h1bmtlZCBlbmNvZGluZy48L3A+CgogICAgPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IkFsbG93Q09OTkVDVCIgaWQ9IkFsbG93Q09OTkVDVCI+QWxsb3dDT05ORUNUPC9hPiA8YSBuYW1lPSJhbGxvd2Nvbm5lY3QiIGlkPSJhbGxvd2Nvbm5lY3QiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlBvcnRzIHRoYXQgYXJlIGFsbG93ZWQgdG8gPGNvZGU+Q09OTkVDVDwvY29kZT4gdGhyb3VnaCB0aGUKcHJveHk8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+QWxsb3dDT05ORUNUIDx2YXI+cG9ydDwvdmFyPiBbPHZhcj5wb3J0PC92YXI+XSAuLi48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+QWxsb3dDT05ORUNUIDQ0MyA1NjM8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+QWxsb3dDT05ORUNUPC9jb2RlPiBkaXJlY3RpdmUgc3BlY2lmaWVzIGEgbGlzdAogICAgb2YgcG9ydCBudW1iZXJzIHRvIHdoaWNoIHRoZSBwcm94eSA8Y29kZT5DT05ORUNUPC9jb2RlPiBtZXRob2QgbWF5CiAgICBjb25uZWN0LiAgVG9kYXkncyBicm93c2VycyB1c2UgdGhpcyBtZXRob2Qgd2hlbiBhIDxjb2RlPmh0dHBzPC9jb2RlPgogICAgY29ubmVjdGlvbiBpcyByZXF1ZXN0ZWQgYW5kIHByb3h5IHR1bm5lbGluZyBvdmVyIEhUVFAgaXMgaW4gZWZmZWN0LjwvcD4KCiAgICA8cD5CeSBkZWZhdWx0LCBvbmx5IHRoZSBkZWZhdWx0IGh0dHBzIHBvcnQgKDxjb2RlPjQ0MzwvY29kZT4pIGFuZCB0aGUKICAgIGRlZmF1bHQgc25ld3MgcG9ydCAoPGNvZGU+NTYzPC9jb2RlPikgYXJlIGVuYWJsZWQuIFVzZSB0aGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkFsbG93Q09OTkVDVDwvY29kZT4gZGlyZWN0aXZlIHRvIG92ZXJyaWRlIHRoaXMgZGVmYXVsdCBhbmQKICAgIGFsbG93IGNvbm5lY3Rpb25zIHRvIHRoZSBsaXN0ZWQgcG9ydHMgb25seS48L3A+CgogICAgPHA+Tm90ZSB0aGF0IHlvdSdsbCBuZWVkIHRvIGhhdmUgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eV9jb25uZWN0Lmh0bWwiPm1vZF9wcm94eV9jb25uZWN0PC9hPjwvY29kZT4gcHJlc2VudAogICAgaW4gdGhlIHNlcnZlciBpbiBvcmRlciB0byBnZXQgdGhlIHN1cHBvcnQgZm9yIHRoZSA8Y29kZT5DT05ORUNUPC9jb2RlPiBhdAogICAgYWxsLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJOb1Byb3h5IiBpZD0iTm9Qcm94eSI+Tm9Qcm94eTwvYT4gPGEgbmFtZT0ibm9wcm94eSIgaWQ9Im5vcHJveHkiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkhvc3RzLCBkb21haW5zLCBvciBuZXR3b3JrcyB0aGF0IHdpbGwgYmUgY29ubmVjdGVkIHRvCmRpcmVjdGx5PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPk5vUHJveHkgPHZhcj5ob3N0PC92YXI+IFs8dmFyPmhvc3Q8L3Zhcj5dIC4uLjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoaXMgZGlyZWN0aXZlIGlzIG9ubHkgdXNlZnVsIGZvciBBcGFjaGUgcHJveHkgc2VydmVycyB3aXRoaW4KICAgIGludHJhbmV0cy4gIFRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Ob1Byb3h5PC9jb2RlPiBkaXJlY3RpdmUgc3BlY2lmaWVzIGEKICAgIGxpc3Qgb2Ygc3VibmV0cywgSVAgYWRkcmVzc2VzLCBob3N0cyBhbmQvb3IgZG9tYWlucywgc2VwYXJhdGVkIGJ5CiAgICBzcGFjZXMuIEEgcmVxdWVzdCB0byBhIGhvc3Qgd2hpY2ggbWF0Y2hlcyBvbmUgb3IgbW9yZSBvZiB0aGVzZSBpcwogICAgYWx3YXlzIHNlcnZlZCBkaXJlY3RseSwgd2l0aG91dCBmb3J3YXJkaW5nIHRvIHRoZSBjb25maWd1cmVkCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHlyZW1vdGUiPlByb3h5UmVtb3RlPC9hPjwvY29kZT4gcHJveHkgc2VydmVyKHMpLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZTwvaDM+PHA+PGNvZGU+CiAgICAgIFByb3h5UmVtb3RlICAqICBodHRwOi8vZmlyZXdhbGwubXljb21wYW55LmNvbTo4MTxiciAvPgogICAgICBOb1Byb3h5ICAgICAgICAgLm15Y29tcGFueS5jb20gMTkyLjE2OC4xMTIuMC8yMQogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5UaGUgPHZhcj5ob3N0PC92YXI+IGFyZ3VtZW50cyB0byB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Tm9Qcm94eTwvY29kZT4KICAgIGRpcmVjdGl2ZSBhcmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdHlwZSBsaXN0OjwvcD4KCiAgICA8ZGw+CiAgICAKICAgIDxkdD48dmFyPjxhIG5hbWU9ImRvbWFpbiIgaWQ9ImRvbWFpbiI+RG9tYWluPC9hPjwvdmFyPjwvZHQ+CiAgICA8ZGQ+CiAgICA8cD5BIDxkZm4+RG9tYWluPC9kZm4+IGlzIGEgcGFydGlhbGx5IHF1YWxpZmllZCBETlMgZG9tYWluIG5hbWUsIHByZWNlZGVkCiAgICBieSBhIHBlcmlvZC4gSXQgcmVwcmVzZW50cyBhIGxpc3Qgb2YgaG9zdHMgd2hpY2ggbG9naWNhbGx5IGJlbG9uZyB0byB0aGUKICAgIHNhbWUgRE5TIGRvbWFpbiBvciB6b25lICg8ZW0+aS5lLjwvZW0+LCB0aGUgc3VmZml4ZXMgb2YgdGhlIGhvc3RuYW1lcyBhcmUKICAgIGFsbCBlbmRpbmcgaW4gPHZhcj5Eb21haW48L3Zhcj4pLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZXM8L2gzPjxwPjxjb2RlPgogICAgICAuY29tIC5hcGFjaGUub3JnLgogICAgPC9jb2RlPjwvcD48L2Rpdj4KCiAgICA8cD5UbyBkaXN0aW5ndWlzaCA8dmFyPkRvbWFpbjwvdmFyPnMgZnJvbSA8dmFyPjxhIGhyZWY9IiNob3N0bmFtZSI+SG9zdG5hbWU8L2E+PC92YXI+cyAoYm90aCBzeW50YWN0aWNhbGx5IGFuZCBzZW1hbnRpY2FsbHk7IGEgRE5TIGRvbWFpbiBjYW4KICAgIGhhdmUgYSBETlMgQSByZWNvcmQsIHRvbyEpLCA8dmFyPkRvbWFpbjwvdmFyPnMgYXJlIGFsd2F5cyB3cml0dGVuIHdpdGggYQogICAgbGVhZGluZyBwZXJpb2QuPC9wPgogICAgCiAgICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Tm90ZTwvaDM+CiAgICAgIDxwPkRvbWFpbiBuYW1lIGNvbXBhcmlzb25zIGFyZSBkb25lIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBjYXNlLCBhbmQKICAgICAgPHZhcj5Eb21haW48L3Zhcj5zIGFyZSBhbHdheXMgYXNzdW1lZCB0byBiZSBhbmNob3JlZCBpbiB0aGUgcm9vdCBvZiB0aGUKICAgICAgRE5TIHRyZWUsIHRoZXJlZm9yZSB0d28gZG9tYWlucyA8Y29kZT4uTXlEb21haW4uY29tPC9jb2RlPiBhbmQKICAgICAgPGNvZGU+Lm15ZG9tYWluLmNvbS48L2NvZGU+IChub3RlIHRoZSB0cmFpbGluZyBwZXJpb2QpIGFyZSBjb25zaWRlcmVkCiAgICAgIGVxdWFsLiBTaW5jZSBhIGRvbWFpbiBjb21wYXJpc29uIGRvZXMgbm90IGludm9sdmUgYSBETlMgbG9va3VwLCBpdCBpcyBtdWNoCiAgICAgIG1vcmUgZWZmaWNpZW50IHRoYW4gc3VibmV0IGNvbXBhcmlzb24uPC9wPgogICAgPC9kaXY+PC9kZD4KCiAgICAKICAgIDxkdD48dmFyPjxhIG5hbWU9InN1Ym5ldCIgaWQ9InN1Ym5ldCI+U3ViTmV0PC9hPjwvdmFyPjwvZHQ+CiAgICA8ZGQ+CiAgICA8cD5BIDxkZm4+U3ViTmV0PC9kZm4+IGlzIGEgcGFydGlhbGx5IHF1YWxpZmllZCBpbnRlcm5ldCBhZGRyZXNzIGluCiAgICBudW1lcmljIChkb3R0ZWQgcXVhZCkgZm9ybSwgb3B0aW9uYWxseSBmb2xsb3dlZCBieSBhIHNsYXNoIGFuZCB0aGUgbmV0bWFzaywKICAgIHNwZWNpZmllZCBhcyB0aGUgbnVtYmVyIG9mIHNpZ25pZmljYW50IGJpdHMgaW4gdGhlIDx2YXI+U3ViTmV0PC92YXI+LiBJdCBpcwogICAgdXNlZCB0byByZXByZXNlbnQgYSBzdWJuZXQgb2YgaG9zdHMgd2hpY2ggY2FuIGJlIHJlYWNoZWQgb3ZlciBhIGNvbW1vbgogICAgbmV0d29yayBpbnRlcmZhY2UuIEluIHRoZSBhYnNlbmNlIG9mIHRoZSBleHBsaWNpdCBuZXQgbWFzayBpdCBpcyBhc3N1bWVkCiAgICB0aGF0IG9taXR0ZWQgKG9yIHplcm8gdmFsdWVkKSB0cmFpbGluZyBkaWdpdHMgc3BlY2lmeSB0aGUgbWFzay4gKEluIHRoaXMKICAgIGNhc2UsIHRoZSBuZXRtYXNrIGNhbiBvbmx5IGJlIG11bHRpcGxlcyBvZiA4IGJpdHMgd2lkZS4pIEV4YW1wbGVzOjwvcD4KCiAgICA8ZGw+CiAgICA8ZHQ+PGNvZGU+MTkyLjE2ODwvY29kZT4gb3IgPGNvZGU+MTkyLjE2OC4wLjA8L2NvZGU+PC9kdD4KICAgIDxkZD50aGUgc3VibmV0IDE5Mi4xNjguMC4wIHdpdGggYW4gaW1wbGllZCBuZXRtYXNrIG9mIDE2IHZhbGlkIGJpdHMKICAgIChzb21ldGltZXMgdXNlZCBpbiB0aGUgbmV0bWFzayBmb3JtIDxjb2RlPjI1NS4yNTUuMC4wPC9jb2RlPik8L2RkPgogICAgPGR0Pjxjb2RlPjE5Mi4xNjguMTEyLjAvMjE8L2NvZGU+PC9kdD4KICAgIDxkZD50aGUgc3VibmV0IDxjb2RlPjE5Mi4xNjguMTEyLjAvMjE8L2NvZGU+IHdpdGggYSBuZXRtYXNrIG9mIDIxCiAgICB2YWxpZCBiaXRzIChhbHNvIHVzZWQgaW4gdGhlIGZvcm0gPGNvZGU+MjU1LjI1NS4yNDguMDwvY29kZT4pPC9kZD4KICAgIDwvZGw+CgogICAgPHA+QXMgYSBkZWdlbmVyYXRlIGNhc2UsIGEgPGVtPlN1Yk5ldDwvZW0+IHdpdGggMzIgdmFsaWQgYml0cyBpcyB0aGUKICAgIGVxdWl2YWxlbnQgdG8gYW4gPHZhcj48YSBocmVmPSIjaXBhZHIiPklQQWRkcjwvYT48L3Zhcj4sIHdoaWxlIGEgPHZhcj5TdWJOZXQ8L3Zhcj4gd2l0aCB6ZXJvCiAgICB2YWxpZCBiaXRzICg8ZW0+ZS5nLjwvZW0+LCAwLjAuMC4wLzApIGlzIHRoZSBzYW1lIGFzIHRoZSBjb25zdGFudAogICAgPHZhcj5fRGVmYXVsdF88L3Zhcj4sIG1hdGNoaW5nIGFueSBJUCBhZGRyZXNzLjwvcD48L2RkPgoKICAgIAogICAgPGR0Pjx2YXI+PGEgbmFtZT0iaXBhZGRyIiBpZD0iaXBhZGRyIj5JUEFkZHI8L2E+PC92YXI+PC9kdD4KICAgIDxkZD4KICAgIDxwPkEgPGRmbj5JUEFkZHI8L2Rmbj4gcmVwcmVzZW50cyBhIGZ1bGx5IHF1YWxpZmllZCBpbnRlcm5ldCBhZGRyZXNzIGluCiAgICBudW1lcmljIChkb3R0ZWQgcXVhZCkgZm9ybS4gVXN1YWxseSwgdGhpcyBhZGRyZXNzIHJlcHJlc2VudHMgYSBob3N0LCBidXQKICAgIHRoZXJlIG5lZWQgbm90IG5lY2Vzc2FyaWx5IGJlIGEgRE5TIGRvbWFpbiBuYW1lIGNvbm5lY3RlZCB3aXRoIHRoZQogICAgYWRkcmVzcy48L3A+CiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZTwvaDM+PHA+PGNvZGU+CiAgICAgIDE5Mi4xNjguMTIzLjcKICAgIDwvY29kZT48L3A+PC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5Ob3RlPC9oMz4KICAgICAgPHA+QW4gPHZhcj5JUEFkZHI8L3Zhcj4gZG9lcyBub3QgbmVlZCB0byBiZSByZXNvbHZlZCBieSB0aGUgRE5TIHN5c3RlbSwgc28KICAgICAgaXQgY2FuIHJlc3VsdCBpbiBtb3JlIGVmZmVjdGl2ZSBhcGFjaGUgcGVyZm9ybWFuY2UuPC9wPgogICAgPC9kaXY+PC9kZD4KCiAgICAKICAgIDxkdD48dmFyPjxhIG5hbWU9Imhvc3RuYW1lIiBpZD0iaG9zdG5hbWUiPkhvc3RuYW1lPC9hPjwvdmFyPjwvZHQ+CiAgICA8ZGQ+CiAgICA8cD5BIDxkZm4+SG9zdG5hbWU8L2Rmbj4gaXMgYSBmdWxseSBxdWFsaWZpZWQgRE5TIGRvbWFpbiBuYW1lIHdoaWNoIGNhbgogICAgYmUgcmVzb2x2ZWQgdG8gb25lIG9yIG1vcmUgPHZhcj48YSBocmVmPSIjaXBhZGRyIj5JUEFkZHJzPC9hPjwvdmFyPiB2aWEgdGhlCiAgICBETlMgZG9tYWluIG5hbWUgc2VydmljZS4gSXQgcmVwcmVzZW50cyBhIGxvZ2ljYWwgaG9zdCAoaW4gY29udHJhc3QgdG8KCTx2YXI+PGEgaHJlZj0iI2RvbWFpbiI+RG9tYWluPC9hPjwvdmFyPnMsIHNlZSBhYm92ZSkgYW5kIG11c3QgYmUgcmVzb2x2YWJsZQogICAgdG8gYXQgbGVhc3Qgb25lIDx2YXI+PGEgaHJlZj0iI2lwYWRkciI+SVBBZGRyPC9hPjwvdmFyPiAob3Igb2Z0ZW4gdG8gYSBsaXN0CiAgICBvZiBob3N0cyB3aXRoIGRpZmZlcmVudCA8dmFyPjxhIGhyZWY9IiNpcGFkZHIiPklQQWRkcjwvYT48L3Zhcj5zKS48L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkV4YW1wbGVzPC9oMz48cD48Y29kZT4KICAgICAgcHJlcC5haS5taXQuZWR1PGJyIC8+CiAgICAgIHd3dy5hcGFjaGUub3JnCiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5Ob3RlPC9oMz4KICAgICAgPHA+SW4gbWFueSBzaXR1YXRpb25zLCBpdCBpcyBtb3JlIGVmZmVjdGl2ZSB0byBzcGVjaWZ5IGFuIDx2YXI+PGEgaHJlZj0iI2lwYWRkciI+SVBBZGRyPC9hPjwvdmFyPiBpbiBwbGFjZSBvZiBhIDx2YXI+SG9zdG5hbWU8L3Zhcj4gc2luY2UgYQogICAgICBETlMgbG9va3VwIGNhbiBiZSBhdm9pZGVkLiBOYW1lIHJlc29sdXRpb24gaW4gQXBhY2hlIGNhbiB0YWtlIGEgcmVtYXJrYWJsZQogICAgICBkZWFsIG9mIHRpbWUgd2hlbiB0aGUgY29ubmVjdGlvbiB0byB0aGUgbmFtZSBzZXJ2ZXIgdXNlcyBhIHNsb3cgUFBQCiAgICAgIGxpbmsuPC9wPgogICAgICA8cD48dmFyPkhvc3RuYW1lPC92YXI+IGNvbXBhcmlzb25zIGFyZSBkb25lIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBjYXNlLAogICAgICBhbmQgPHZhcj5Ib3N0bmFtZTwvdmFyPnMgYXJlIGFsd2F5cyBhc3N1bWVkIHRvIGJlIGFuY2hvcmVkIGluIHRoZSByb290CiAgICAgIG9mIHRoZSBETlMgdHJlZSwgdGhlcmVmb3JlIHR3byBob3N0cyA8Y29kZT5XV1cuTXlEb21haW4uY29tPC9jb2RlPgogICAgICBhbmQgPGNvZGU+d3d3Lm15ZG9tYWluLmNvbS48L2NvZGU+IChub3RlIHRoZSB0cmFpbGluZyBwZXJpb2QpIGFyZQogICAgICBjb25zaWRlcmVkIGVxdWFsLjwvcD4KICAgICA8L2Rpdj48L2RkPgogICAgPC9kbD4KCjxoMz5TZWUgYWxzbzwvaDM+Cjx1bD4KPGxpPjxhIGhyZWY9Ii4uL2Rucy1jYXZlYXRzLmh0bWwiPkROUyBJc3N1ZXM8L2E+PC9saT4KPC91bD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlByb3h5IiBpZD0iUHJveHkiPiZsdDtQcm94eSZndDs8L2E+IDxhIG5hbWU9InByb3h5IiBpZD0icHJveHkiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkNvbnRhaW5lciBmb3IgZGlyZWN0aXZlcyBhcHBsaWVkIHRvIHByb3hpZWQgcmVzb3VyY2VzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPiZsdDtQcm94eSA8dmFyPndpbGRjYXJkLXVybDwvdmFyPiZndDsgLi4uJmx0Oy9Qcm94eSZndDs8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5EaXJlY3RpdmVzIHBsYWNlZCBpbiA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj4mbHQ7UHJveHkmZ3Q7PC9jb2RlPgogICAgc2VjdGlvbnMgYXBwbHkgb25seSB0byBtYXRjaGluZyBwcm94aWVkIGNvbnRlbnQuICBTaGVsbC1zdHlsZSB3aWxkY2FyZHMgYXJlCiAgICBhbGxvd2VkLjwvcD4KCiAgICA8cD5Gb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyB3aWxsIGFsbG93IG9ubHkgaG9zdHMgaW4KICAgIDxjb2RlPnlvdXJuZXR3b3JrLmV4YW1wbGUuY29tPC9jb2RlPiB0byBhY2Nlc3MgY29udGVudCB2aWEgeW91ciBwcm94eQogICAgc2VydmVyOjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgJmx0O1Byb3h5IComZ3Q7PGJyIC8+CiAgICAgIDxzcGFuIGNsYXNzPSJpbmRlbnQiPgogICAgICAgIE9yZGVyIERlbnksQWxsb3c8YnIgLz4KICAgICAgICBEZW55IGZyb20gYWxsPGJyIC8+CiAgICAgICAgQWxsb3cgZnJvbSB5b3VybmV0d29yay5leGFtcGxlLmNvbTxiciAvPgogICAgICA8L3NwYW4+CiAgICAgICZsdDsvUHJveHkmZ3Q7CiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPlRoZSBmb2xsb3dpbmcgZXhhbXBsZSB3aWxsIHByb2Nlc3MgYWxsIGZpbGVzIGluIHRoZSA8Y29kZT5mb288L2NvZGU+CiAgICBkaXJlY3Rvcnkgb2YgPGNvZGU+ZXhhbXBsZS5jb208L2NvZGU+IHRocm91Z2ggdGhlIDxjb2RlPklOQ0xVREVTPC9jb2RlPgogICAgZmlsdGVyIHdoZW4gdGhleSBhcmUgc2VudCB0aHJvdWdoIHRoZSBwcm94eSBzZXJ2ZXI6PC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICAmbHQ7UHJveHkgaHR0cDovL2V4YW1wbGUuY29tL2Zvby8qJmd0OzxiciAvPgogICAgICA8c3BhbiBjbGFzcz0iaW5kZW50Ij4KICAgICAgICBTZXRPdXRwdXRGaWx0ZXIgSU5DTFVERVM8YnIgLz4KICAgICAgPC9zcGFuPgogICAgICAmbHQ7L1Byb3h5Jmd0OwogICAgPC9jb2RlPjwvcD48L2Rpdj4KCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHlCYWRIZWFkZXIiIGlkPSJQcm94eUJhZEhlYWRlciI+UHJveHlCYWRIZWFkZXI8L2E+IDxhIG5hbWU9InByb3h5YmFkaGVhZGVyIiBpZD0icHJveHliYWRoZWFkZXIiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkRldGVybWluZXMgaG93IHRvIGhhbmRsZSBiYWQgaGVhZGVyIGxpbmVzIGluIGEKcmVzcG9uc2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlCYWRIZWFkZXIgSXNFcnJvcnxJZ25vcmV8U3RhcnRCb2R5PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5QmFkSGVhZGVyIElzRXJyb3I8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5hdmFpbGFibGUgaW4gQXBhY2hlIDIuMC40NCBhbmQgbGF0ZXI8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+UHJveHlCYWRIZWFkZXI8L2NvZGU+IGRpcmVjdGl2ZSBkZXRlcm1pbmVzIHRoZQogICAgYmVoYXZpb3VyIG9mIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcHJveHkuaHRtbCI+bW9kX3Byb3h5PC9hPjwvY29kZT4gaWYgaXQgcmVjZWl2ZXMgc3ludGFjdGljYWxseSBpbnZhbGlkCiAgICBoZWFkZXIgbGluZXMgKDxlbT5pLmUuPC9lbT4gY29udGFpbmluZyBubyBjb2xvbikuIFRoZSBmb2xsb3dpbmcgYXJndW1lbnRzCiAgICBhcmUgcG9zc2libGU6PC9wPgoKICAgIDxkbD4KICAgIDxkdD48Y29kZT5Jc0Vycm9yPC9jb2RlPjwvZHQ+CiAgICA8ZGQ+QWJvcnQgdGhlIHJlcXVlc3QgYW5kIGVuZCB1cCB3aXRoIGEgNTAyIChCYWQgR2F0ZXdheSkgcmVzcG9uc2UuIFRoaXMgaXMKICAgIHRoZSBkZWZhdWx0IGJlaGF2aW91ci48L2RkPgoKICAgIDxkdD48Y29kZT5JZ25vcmU8L2NvZGU+PC9kdD4KICAgIDxkZD5UcmVhdCBiYWQgaGVhZGVyIGxpbmVzIGFzIGlmIHRoZXkgd2VyZW4ndCBzZW50LjwvZGQ+CgogICAgPGR0Pjxjb2RlPlN0YXJ0Qm9keTwvY29kZT48L2R0PgogICAgPGRkPldoZW4gcmVjZWl2aW5nIHRoZSBmaXJzdCBiYWQgaGVhZGVyIGxpbmUsIGZpbmlzaCByZWFkaW5nIHRoZSBoZWFkZXJzIGFuZAogICAgdHJlYXQgdGhlIHJlbWFpbmRlciBhcyBib2R5LiBUaGlzIGhlbHBzIHRvIHdvcmsgYXJvdW5kIGJ1Z2d5IGJhY2tlbmQgc2VydmVycwogICAgd2hpY2ggZm9yZ2V0IHRvIGluc2VydCBhbiBlbXB0eSBsaW5lIGJldHdlZW4gdGhlIGhlYWRlcnMgYW5kIHRoZSBib2R5LjwvZGQ+CiAgICA8L2RsPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlByb3h5QmxvY2siIGlkPSJQcm94eUJsb2NrIj5Qcm94eUJsb2NrPC9hPiA8YSBuYW1lPSJwcm94eWJsb2NrIiBpZD0icHJveHlibG9jayI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+V29yZHMsIGhvc3RzLCBvciBkb21haW5zIHRoYXQgYXJlIGJhbm5lZCBmcm9tIGJlaW5nCnByb3hpZWQ8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlCbG9jayAqfDx2YXI+d29yZDwvdmFyPnw8dmFyPmhvc3Q8L3Zhcj58PHZhcj5kb21haW48L3Zhcj4KWzx2YXI+d29yZDwvdmFyPnw8dmFyPmhvc3Q8L3Zhcj58PHZhcj5kb21haW48L3Zhcj5dIC4uLjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Qcm94eUJsb2NrPC9jb2RlPiBkaXJlY3RpdmUgc3BlY2lmaWVzIGEgbGlzdCBvZgogICAgd29yZHMsIGhvc3RzIGFuZC9vciBkb21haW5zLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLiAgSFRUUCwgSFRUUFMsIGFuZAogICAgRlRQIGRvY3VtZW50IHJlcXVlc3RzIHRvIHNpdGVzIHdob3NlIG5hbWVzIGNvbnRhaW4gbWF0Y2hlZCB3b3JkcywKICAgIGhvc3RzIG9yIGRvbWFpbnMgYXJlIDxlbT5ibG9ja2VkPC9lbT4gYnkgdGhlIHByb3h5IHNlcnZlci4gVGhlIHByb3h5CiAgICBtb2R1bGUgd2lsbCBhbHNvIGF0dGVtcHQgdG8gZGV0ZXJtaW5lIElQIGFkZHJlc3NlcyBvZiBsaXN0IGl0ZW1zIHdoaWNoCiAgICBtYXkgYmUgaG9zdG5hbWVzIGR1cmluZyBzdGFydHVwLCBhbmQgY2FjaGUgdGhlbSBmb3IgbWF0Y2ggdGVzdCBhcwogICAgd2VsbC4gVGhhdCBtYXkgc2xvdyBkb3duIHRoZSBzdGFydHVwIHRpbWUgb2YgdGhlIHNlcnZlci48L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkV4YW1wbGU8L2gzPjxwPjxjb2RlPgogICAgICBQcm94eUJsb2NrIGpvZXMtZ2FyYWdlLmNvbSBzb21lLWhvc3QuY28udWsgcm9ja3kud290c2FtYXR0YXUuZWR1CiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPjxjb2RlPnJvY2t5LndvdHNhbWF0dGF1LmVkdTwvY29kZT4gd291bGQgYWxzbyBiZSBtYXRjaGVkIGlmIHJlZmVyZW5jZWQgYnkKICAgIElQIGFkZHJlc3MuPC9wPgoKICAgIDxwPk5vdGUgdGhhdCA8Y29kZT53b3RzYW1hdHRhdTwvY29kZT4gd291bGQgYWxzbyBiZSBzdWZmaWNpZW50IHRvIG1hdGNoCiAgICA8Y29kZT53b3RzYW1hdHRhdS5lZHU8L2NvZGU+LjwvcD4KCiAgICA8cD5Ob3RlIGFsc28gdGhhdDwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgUHJveHlCbG9jayAqCiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPmJsb2NrcyBjb25uZWN0aW9ucyB0byBhbGwgc2l0ZXMuPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlByb3h5RG9tYWluIiBpZD0iUHJveHlEb21haW4iPlByb3h5RG9tYWluPC9hPiA8YSBuYW1lPSJwcm94eWRvbWFpbiIgaWQ9InByb3h5ZG9tYWluIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5EZWZhdWx0IGRvbWFpbiBuYW1lIGZvciBwcm94aWVkIHJlcXVlc3RzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5RG9tYWluIDx2YXI+RG9tYWluPC92YXI+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgaXMgb25seSB1c2VmdWwgZm9yIEFwYWNoZSBwcm94eSBzZXJ2ZXJzIHdpdGhpbgogICAgaW50cmFuZXRzLiBUaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+UHJveHlEb21haW48L2NvZGU+IGRpcmVjdGl2ZSBzcGVjaWZpZXMKICAgIHRoZSBkZWZhdWx0IGRvbWFpbiB3aGljaCB0aGUgYXBhY2hlIHByb3h5IHNlcnZlciB3aWxsIGJlbG9uZyB0by4gSWYgYQogICAgcmVxdWVzdCB0byBhIGhvc3Qgd2l0aG91dCBhIGRvbWFpbiBuYW1lIGlzIGVuY291bnRlcmVkLCBhIHJlZGlyZWN0aW9uCiAgICByZXNwb25zZSB0byB0aGUgc2FtZSBob3N0IHdpdGggdGhlIGNvbmZpZ3VyZWQgPHZhcj5Eb21haW48L3Zhcj4gYXBwZW5kZWQKICAgIHdpbGwgYmUgZ2VuZXJhdGVkLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZTwvaDM+PHA+PGNvZGU+CiAgICAgIFByb3h5UmVtb3RlICAqICBodHRwOi8vZmlyZXdhbGwubXljb21wYW55LmNvbTo4MTxiciAvPgogICAgICBOb1Byb3h5ICAgICAgICAgLm15Y29tcGFueS5jb20gMTkyLjE2OC4xMTIuMC8yMTxiciAvPgogICAgICBQcm94eURvbWFpbiAgICAgLm15Y29tcGFueS5jb20KICAgIDwvY29kZT48L3A+PC9kaXY+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHlFcnJvck92ZXJyaWRlIiBpZD0iUHJveHlFcnJvck92ZXJyaWRlIj5Qcm94eUVycm9yT3ZlcnJpZGU8L2E+IDxhIG5hbWU9InByb3h5ZXJyb3JvdmVycmlkZSIgaWQ9InByb3h5ZXJyb3JvdmVycmlkZSI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+T3ZlcnJpZGUgZXJyb3IgcGFnZXMgZm9yIHByb3hpZWQgY29udGVudDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eUVycm9yT3ZlcnJpZGUgT258T2ZmPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5RXJyb3JPdmVycmlkZSBPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXR5OjwvYT48L3RoPjx0ZD5BdmFpbGFibGUgaW4gdmVyc2lvbiAyLjAgYW5kIGxhdGVyPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgaXMgdXNlZnVsIGZvciByZXZlcnNlLXByb3h5IHNldHVwcywgd2hlcmUgeW91IHdhbnQgdG8gCiAgICBoYXZlIGEgY29tbW9uIGxvb2sgYW5kIGZlZWwgb24gdGhlIGVycm9yIHBhZ2VzIHNlZW4gYnkgdGhlIGVuZCB1c2VyLiAKICAgIFRoaXMgYWxzbyBhbGxvd3MgZm9yIGluY2x1ZGVkIGZpbGVzICh2aWEKICAgIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfaW5jbHVkZS5odG1sIj5tb2RfaW5jbHVkZTwvYT48L2NvZGU+J3MgU1NJKSB0byBnZXQKICAgIHRoZSBlcnJvciBjb2RlIGFuZCBhY3QgYWNjb3JkaW5nbHkgKGRlZmF1bHQgYmVoYXZpb3Igd291bGQgZGlzcGxheQogICAgdGhlIGVycm9yIHBhZ2Ugb2YgdGhlIHByb3hpZWQgc2VydmVyLCB0dXJuaW5nIHRoaXMgb24gc2hvd3MgdGhlIFNTSQogICAgRXJyb3IgbWVzc2FnZSkuPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9IlByb3h5SU9CdWZmZXJTaXplIiBpZD0iUHJveHlJT0J1ZmZlclNpemUiPlByb3h5SU9CdWZmZXJTaXplPC9hPiA8YSBuYW1lPSJwcm94eWlvYnVmZmVyc2l6ZSIgaWQ9InByb3h5aW9idWZmZXJzaXplIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5EZXRlcm1pbmUgc2l6ZSBvZiBpbnRlcm5hbCBkYXRhIHRocm91Z2hwdXQgYnVmZmVyPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5SU9CdWZmZXJTaXplIDx2YXI+Ynl0ZXM8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlJT0J1ZmZlclNpemUgODE5MjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Qcm94eUlPQnVmZmVyU2l6ZTwvY29kZT4gZGlyZWN0aXZlIGFkanVzdHMgdGhlIHNpemUKICAgIG9mIHRoZSBpbnRlcm5hbCBidWZmZXIsIHdoaWNoIGlzIHVzZWQgYXMgYSBzY3JhdGNocGFkIGZvciB0aGUgZGF0YSBiZXR3ZWVuCiAgICBpbnB1dCBhbmQgb3V0cHV0LiBUaGUgc2l6ZSBtdXN0IGJlIGxlc3Mgb3IgZXF1YWwgPGNvZGU+ODE5MjwvY29kZT4uPC9wPgoKICAgIDxwPkluIGFsbW9zdCBldmVyeSBjYXNlIHRoZXJlJ3Mgbm8gcmVhc29uIHRvIGNoYW5nZSB0aGF0IHZhbHVlLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eU1hdGNoIiBpZD0iUHJveHlNYXRjaCI+Jmx0O1Byb3h5TWF0Y2gmZ3Q7PC9hPiA8YSBuYW1lPSJwcm94eW1hdGNoIiBpZD0icHJveHltYXRjaCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+Q29udGFpbmVyIGZvciBkaXJlY3RpdmVzIGFwcGxpZWQgdG8gcmVndWxhci1leHByZXNzaW9uLW1hdGNoZWQgCnByb3hpZWQgcmVzb3VyY2VzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPiZsdDtQcm94eU1hdGNoIDx2YXI+cmVnZXg8L3Zhcj4mZ3Q7IC4uLiZsdDsvUHJveHlNYXRjaCZndDs8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+Jmx0O1Byb3h5TWF0Y2gmZ3Q7PC9jb2RlPiBkaXJlY3RpdmUgaXMKICAgIGlkZW50aWNhbCB0byB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5Ij4mbHQ7UHJveHkmZ3Q7PC9hPjwvY29kZT4gZGlyZWN0aXZlLCBleGNlcHQgaXQgbWF0Y2hlcyBVUkxzCiAgICB1c2luZyA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuLi9nbG9zc2FyeS5odG1sI3JlZ2V4IiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5yZWd1bGFyIGV4cHJlc3Npb25zPC9hPi48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHlNYXhGb3J3YXJkcyIgaWQ9IlByb3h5TWF4Rm9yd2FyZHMiPlByb3h5TWF4Rm9yd2FyZHM8L2E+IDxhIG5hbWU9InByb3h5bWF4Zm9yd2FyZHMiIGlkPSJwcm94eW1heGZvcndhcmRzIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5NYXhpbWl1bSBudW1iZXIgb2YgcHJveGllcyB0aGF0IGEgcmVxdWVzdCBjYW4gYmUgZm9yd2FyZGVkCnRocm91Z2g8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlNYXhGb3J3YXJkcyA8dmFyPm51bWJlcjwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eU1heEZvcndhcmRzIDEwPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+QXZhaWxhYmxlIGluIEFwYWNoZSAyLjAgYW5kIGxhdGVyPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlByb3h5TWF4Rm9yd2FyZHM8L2NvZGU+IGRpcmVjdGl2ZSBzcGVjaWZpZXMgdGhlCiAgICBtYXhpbXVtIG51bWJlciBvZiBwcm94aWVzIHRocm91Z2ggd2hpY2ggYSByZXF1ZXN0IG1heSBwYXNzLCBpZiB0aGVyZSdzIG5vCiAgICA8Y29kZT5NYXgtRm9yd2FyZHM8L2NvZGU+IGhlYWRlciBzdXBwbGllZCB3aXRoIHRoZSByZXF1ZXN0LiBUaGlzIGlzCiAgICBzZXQgdG8gcHJldmVudCBpbmZpbml0ZSBwcm94eSBsb29wcywgb3IgYSBEb1MgYXR0YWNrLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhhbXBsZTwvaDM+PHA+PGNvZGU+CiAgICAgIFByb3h5TWF4Rm9yd2FyZHMgMTUKICAgIDwvY29kZT48L3A+PC9kaXY+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHlQYXNzIiBpZD0iUHJveHlQYXNzIj5Qcm94eVBhc3M8L2E+IDxhIG5hbWU9InByb3h5cGFzcyIgaWQ9InByb3h5cGFzcyI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+TWFwcyByZW1vdGUgc2VydmVycyBpbnRvIHRoZSBsb2NhbCBzZXJ2ZXIgVVJMLXNwYWNlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5UGFzcyBbPHZhcj5wYXRoPC92YXI+XSAhfDx2YXI+dXJsPC92YXI+IFs8dmFyPmtleT12YWx1ZTwvdmFyPiA8dmFyPmtleT12YWx1ZTwvdmFyPiAuLi5dXTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgYWxsb3dzIHJlbW90ZSBzZXJ2ZXJzIHRvIGJlIG1hcHBlZCBpbnRvIHRoZSBzcGFjZSBvZgogICAgdGhlIGxvY2FsIHNlcnZlcjsgdGhlIGxvY2FsIHNlcnZlciBkb2VzIG5vdCBhY3QgYXMgYSBwcm94eSBpbiB0aGUKICAgIGNvbnZlbnRpb25hbCBzZW5zZSwgYnV0IGFwcGVhcnMgdG8gYmUgYSBtaXJyb3Igb2YgdGhlIHJlbW90ZQogICAgc2VydmVyLiA8dmFyPnBhdGg8L3Zhcj4gaXMgdGhlIG5hbWUgb2YgYSBsb2NhbCB2aXJ0dWFsIHBhdGg7IDx2YXI+dXJsPC92YXI+CiAgICBpcyBhIHBhcnRpYWwgVVJMIGZvciB0aGUgcmVtb3RlIHNlcnZlciBhbmQgY2Fubm90IGluY2x1ZGUgYSBxdWVyeQogICAgc3RyaW5nLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5cmVxdWVzdHMiPlByb3h5UmVxdWVzdHM8L2E+PC9jb2RlPiBkaXJlY3RpdmUgc2hvdWxkCiAgICB1c3VhbGx5IGJlIHNldCA8c3Ryb25nPm9mZjwvc3Ryb25nPiB3aGVuIHVzaW5nCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Qcm94eVBhc3M8L2NvZGU+LjwvZGl2PgoKICAgIDxwPlN1cHBvc2UgdGhlIGxvY2FsIHNlcnZlciBoYXMgYWRkcmVzcyA8Y29kZT5odHRwOi8vZXhhbXBsZS5jb20vPC9jb2RlPjsKICAgIHRoZW48L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgIFByb3h5UGFzcyAvbWlycm9yL2Zvby8gaHR0cDovL2JhY2tlbmQuZXhhbXBsZS5jb20vCiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPndpbGwgY2F1c2UgYSBsb2NhbCByZXF1ZXN0IGZvcgogICAgPGNvZGU+aHR0cDovL2V4YW1wbGUuY29tL21pcnJvci9mb28vYmFyPC9jb2RlPiB0byBiZSBpbnRlcm5hbGx5IGNvbnZlcnRlZAogICAgaW50byBhIHByb3h5IHJlcXVlc3QgdG8gPGNvZGU+aHR0cDovL2JhY2tlbmQuZXhhbXBsZS5jb20vYmFyPC9jb2RlPi48L3A+CgogICAgPHA+VGhlIDxjb2RlPiE8L2NvZGU+IGRpcmVjdGl2ZSBpcyB1c2VmdWwgaW4gc2l0dWF0aW9ucyB3aGVyZSB5b3UgZG9uJ3Qgd2FudAogICAgdG8gcmV2ZXJzZS1wcm94eSBhIHN1YmRpcmVjdG9yeSwgPGVtPmUuZy48L2VtPjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48cD48Y29kZT4KICAgICAgUHJveHlQYXNzIC9taXJyb3IvZm9vL2kgITxiciAvPgogICAgICBQcm94eVBhc3MgL21pcnJvci9mb28gaHR0cDovL2JhY2tlbmQuZXhhbXBsZS5jb20KICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+d2lsbCBwcm94eSBhbGwgcmVxdWVzdHMgdG8gPGNvZGU+L21pcnJvci9mb288L2NvZGU+IHRvCiAgICA8Y29kZT5iYWNrZW5kLmV4YW1wbGUuY29tPC9jb2RlPiA8ZW0+ZXhjZXB0PC9lbT4gcmVxdWVzdHMgbWFkZSB0bwogICAgPGNvZGU+L21pcnJvci9mb28vaTwvY29kZT4uPC9wPgoKICAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5Ob3RlPC9oMz4KICAgICAgPHA+T3JkZXIgaXMgaW1wb3J0YW50LiB5b3UgbmVlZCB0byBwdXQgdGhlIGV4Y2x1c2lvbnMgPGVtPmJlZm9yZTwvZW0+IHRoZQogICAgICBnZW5lcmFsIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlByb3h5UGFzczwvY29kZT4gZGlyZWN0aXZlLjwvcD4KICAgIDwvZGl2PgoKICAgIDxwPkFzIG9mIEFwYWNoZSAyLjEsIHRoZSBhYmlsaXR5IHRvIHVzZSBwb29sZWQgY29ubmVjdGlvbnMgdG8gYSBiYWNrZW5kCiAgICBzZXJ2ZXIgaXMgYXZhaWxhYmxlLiBVc2luZyB0aGUgPGNvZGU+a2V5PXZhbHVlPC9jb2RlPiBwYXJhbWV0ZXJzIGl0IGlzCiAgICBwb3NzaWJsZSB0byB0dW5lIHRoaXMgY29ubmVjdGlvbiBwb29saW5nLiBUaGUgZGVmYXVsdCBmb3IgYSA8Y29kZT5IYXJkCiAgICBNYXhpbXVtPC9jb2RlPiBmb3IgdGhlIG51bWJlciBvZiBjb25uZWN0aW9ucyBpcyB0aGUgbnVtYmVyIG9mIHRocmVhZHMgcGVyCiAgICBwcm9jZXNzIGluIHRoZSBhY3RpdmUgTVBNLiBJbiB0aGUgUHJlZm9yayBNUE0sIHRoaXMgaXMgYWx3YXlzIDEsIHdoaWxlIHdpdGgKICAgIHRoZSBXb3JrZXIgTVBNIGl0IGlzIGNvbnRyb2xsZWQgYnkgdGhlCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5UaHJlYWRzUGVyQ2hpbGQ8L2NvZGU+LjwvcD4KCiAgICA8cD5TZXR0aW5nIDxjb2RlPm1pbjwvY29kZT4gd2lsbCBkZXRlcm1pbmUgaG93IG1hbnkgY29ubmVjdGlvbnMgd2lsbCBhbHdheXMgCiAgICBiZSBvcGVuIHRvIHRoZSBiYWNrZW5kIHNlcnZlci4gVXB0byB0aGUgU29mdCBNYXhpbXVtIG9yIDxjb2RlPnNtYXg8L2NvZGU+IAogICAgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIHdpbGwgYmUgY3JlYXRlZCBvbiBkZW1hbmQuIEFueSBjb25uZWN0aW9ucyBhYm92ZSAKICAgIDxjb2RlPnNtYXg8L2NvZGU+IGFyZSBzdWJqZWN0IHRvIGEgdGltZSB0byBsaXZlIG9yIDxjb2RlPnR0bDwvY29kZT4uICBBcGFjaGUKICAgIHdpbGwgbmV2ZXIgY3JlYXRlIG1vcmUgdGhhbiB0aGUgSGFyZCBNYXhpbXVtIG9yIDxjb2RlPm1heDwvY29kZT4gY29ubmVjdGlvbnMKICAgIHRvIHRoZSBiYWNrZW5kIHNlcnZlci48L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgICAgUHJveHlQYXNzIC9leGFtcGxlIGh0dHA6Ly9iYWNrZW5kLmV4YW1wbGUuY29tIHNtYXg9NSBtYXg9MjAgdHRsPTEyMCByZXRyeT0zMDAKICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHRhYmxlPgogICAgPHRyPjx0aD5QYXJhbWV0ZXI8L3RoPgogICAgICAgIDx0aD5EZWZhdWx0PC90aD4KICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+CiAgICA8dHI+PHRkPm1pbjwvdGQ+CiAgICAgICAgPHRkPjA8L3RkPgogICAgICAgIDx0ZD5NaW51bXVtIG51bWJlciBvZiBjb25uZWN0aW9ucyB0aGF0IHdpbGwgYWx3YXlzCiAgICAgICAgICAgIGJlIG9wZW4gdG8gdGhlIGJhY2tlbmQgc2VydmVyLjwvdGQ+PC90cj4KICAgIDx0cj48dGQ+bWF4PC90ZD4KICAgICAgICA8dGQ+MS4uLm48L3RkPgogICAgICAgIDx0ZD5IYXJkIE1heGltdW0gbnVtYmVyIG9mIGNvbm5lY3Rpb25zIHRoYXQgd2lsbCBiZQogICAgYWxsb3dlZCB0byB0aGUgYmFja2VuZCBzZXJ2ZXIuIFRoZSBkZWZhdWx0IGZvciBhIEhhcmQgTWF4aW11bQogICAgZm9yIHRoZSBudW1iZXIgb2YgY29ubmVjdGlvbnMgaXMgdGhlIG51bWJlciBvZiB0aHJlYWRzIHBlciBwcm9jZXNzIGluIHRoZSAKICAgIGFjdGl2ZSBNUE0uIEluIHRoZSBQcmVmb3JrIE1QTSwgdGhpcyBpcyBhbHdheXMgMSwgd2hpbGUgd2l0aCB0aGUgV29ya2VyIE1QTQogICAgaXQgaXMgY29udHJvbGxlZCBieSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+VGhyZWFkc1BlckNoaWxkPC9jb2RlPi4KICAgIEFwYWNoZSB3aWxsIG5ldmVyIGNyZWF0ZSBtb3JlIHRoYW4gdGhlIEhhcmQgTWF4aW11bSBjb25uZWN0aW9ucwogICAgdG8gdGhlIGJhY2tlbmQgc2VydmVyLjwvdGQ+PC90cj4KICAgIDx0cj48dGQ+c21heDwvdGQ+CiAgICAgICAgPHRkPm1heDwvdGQ+CiAgICAgICAgPHRkPlVwdG8gdGhlIFNvZnQgTWF4aW11bQogICAgbnVtYmVyIG9mIGNvbm5lY3Rpb25zIHdpbGwgYmUgY3JlYXRlZCBvbiBkZW1hbmQuIEFueSBjb25uZWN0aW9ucyBhYm92ZSAKICAgIDxjb2RlPnNtYXg8L2NvZGU+IGFyZSBzdWJqZWN0IHRvIGEgdGltZSB0byBsaXZlIG9yIDxjb2RlPnR0bDwvY29kZT4uCiAgICA8L3RkPjwvdHI+CiAgICA8dHI+PHRkPnR0bDwvdGQ+CiAgICAgICAgPHRkPi08L3RkPgogICAgICAgIDx0ZD5UaW1lIFRvIExpdmUgZm9yIHRoZSBpbmFjdGl2ZSBjb25uZWN0aW9ucyBhYm92ZSB0aGUKICAgICAgICA8Y29kZT5zbWF4PC9jb2RlPiBjb25uZWN0aW9ucyBpbiBzZWNvbmRzLiBBcGFjaGUgd2lsbCBjbG9zZSBhbGwKICAgICAgICBjb25uZWN0aW9ucyB0aGF0IGhhcyBub3QgYmVlbiB1c2VkIGluc2lkZSB0aGF0IHRpbWUgcGVyaW9kLgogICAgPC90ZD48L3RyPgogICAgPHRyPjx0ZD50aW1lb3V0PC90ZD4KICAgICAgICA8dGQ+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+VGltZW91dDwvY29kZT48L3RkPgogICAgICAgIDx0ZD5Db25uZWN0aW9uIHRpbWVvdXQgaW4gc2Vjb25kcy4KICAgICAgICBJZiBub3Qgc2V0IHRoZSBBcGFjaGUgd2lsbCB3YWl0IHVudGlsIHRoZSBmcmVlIGNvbm5lY3Rpb24KICAgICAgICBpcyBhdmFpbGFibGUuIFRoaXMgZGlyZWN0aXZlIGlzIHVzZWQgZm9yIGxpbWl0aW5nIHRoZSBudW1iZXIKICAgICAgICBvZiBjb25uZWN0aW9ucyB0byB0aGUgYmFja2VuZCBzZXJ2ZXIgdG9nZXRoZXIgd2l0aCA8Y29kZT5tYXg8L2NvZGU+CiAgICAgICAgcGFyYW1ldGVyLgogICAgPC90ZD48L3RyPgogICAgPHRyPjx0ZD5hY3F1aXJlPC90ZD4KICAgICAgICA8dGQ+LTwvdGQ+CiAgICAgICAgPHRkPklmIHNldCB0aGlzIHdpbGwgYmUgdGhlIG1heGltdW0gdGltZSB0byB3YWl0IGZvciBhIGZyZWUKICAgIGNvbm5lY3Rpb24gaW4gdGhlIGNvbm5lY3Rpb24gcG9vbC4gSWYgdGhlcmUgYXJlIG5vIGZyZWUgY29ubmVjdGlvbnMKICAgIGluIHRoZSBwb29sIHRoZSBBcGFjaGUgd2lsbCByZXR1cm4gPGNvZGU+U0VSVkVSX0JVU1k8L2NvZGU+IHN0YXR1cyB0bwogICAgdGhlIGNsaWVudC4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+a2VlcGFsaXZlPC90ZD4KICAgICAgICA8dGQ+T2ZmPC90ZD4KICAgICAgICA8dGQ+VGhpcyBwYXJhbWV0ZXIgc2hvdWxkIGJlIHVzZWQgd2hlbiB5b3UgaGF2ZSBhIGZpcmV3YWxsIGJldHdlZW4geW91cgogICAgQXBhY2hlIGFuZCB0aGUgYmFja2VuZCBzZXJ2ZXIsIHdobyB0ZW5kIHRvIGRyb3AgaW5hY3RpdmUgY29ubmVjdGlvbnMuCiAgICBUaGlzIGZsYWcgd2lsbCB0ZWxsIHRoZSBPcGVyYXRpbmcgU3lzdGVtIHRvIHNlbmQgPGNvZGU+S0VFUF9BTElWRTwvY29kZT4KICAgIG1lc3NhZ2VzIG9uIGluYWN0aXZlIGNvbm5lY3Rpb25zIChpbnRlcnZhbCBkZXBlbmRzIG9uIGdsb2JhbCBPUyBzZXR0aW5ncywKICAgIGdlbmVyYWxseSAxMjBtcyksIGFuZCB0aHVzIHByZXZlbnQgdGhlIGZpcmV3YWxsIHRvIGRyb3AgdGhlIGNvbm5lY3Rpb24uCiAgICBUbyBlbmFibGUga2VlcGFsaXZlIHNldCB0aGlzIHByb3BlcnR5IHZhbHVlIHRvIDxjb2RlPk9uPC9jb2RlPi4gCiAgICA8L3RkPjwvdHI+CiAgICA8dHI+PHRkPnJldHJ5PC90ZD4KICAgICAgICA8dGQ+NjA8L3RkPgogICAgICAgIDx0ZD5Db25uZWN0aW9uIHBvb2wgd29ya2VyIHJldHJ5IHRpbWVvdXQgaW4gc2Vjb25kcy4KICAgIElmIHRoZSBjb25uZWN0aW9uIHBvb2wgd29ya2VyIHRvIHRoZSBiYWNrZW5kIHNlcnZlciBpcyBpbiB0aGUgZXJyb3Igc3RhdGUsCiAgICBBcGFjaGUgd2lsbCBub3QgZm9yd2FyZCBhbnkgcmVxdWVzdHMgdG8gdGhhdCBzZXJ2ZXIgdW50aWwgdGhlIHRpbWVvdXQKICAgIGV4cGlyZXMuIFRoaXMgZW5hYmxlcyB0byBzaHV0IGRvd24gdGhlIGJhY2tlbmQgc2VydmVyIGZvciBtYWludGVuYW5jZSwKICAgIGFuZCBicmluZyBpdCBiYWNrIG9ubGluZSBsYXRlci4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+bG9hZGZhY3RvcjwvdGQ+CiAgICAgICAgPHRkPjE8L3RkPgogICAgICAgIDx0ZD5Xb3JrZXIgbG9hZCBmYWN0b3IuIFVzZWQgd2l0aCBCYWxhbmNlck1lbWJlci4KICAgICAgICAgSXQgaXMgYSBudW1iZXIgYmV0d2VlbiAxIGFuZCAxMDAgYW5kIGRlZmluZXMgdGhlIG5vcm1hbGl6ZWQgd2VpZ2h0ZWQKICAgICAgICAgbG9hZCBhcHBsaWVkIHRvIHRoZSB3b3JrZXIuCiAgICA8L3RkPjwvdHI+CiAgICA8dHI+PHRkPnJvdXRlPC90ZD4KICAgICAgICA8dGQ+LTwvdGQ+CiAgICAgICAgPHRkPlJvdXRlIG9mIHRoZSB3b3JrZXIgd2hlbiB1c2VkIGluc2lkZSBsb2FkIGJhbGFuY2VyLgogICAgICAgIFRoZSByb3V0ZSBpcyBhIHZhbHVlIGFwcGVuZGVkIHRvIHNlZXNpb24gaWQuCiAgICA8L3RkPjwvdHI+CiAgICA8dHI+PHRkPnJlZGlyZWN0PC90ZD4KICAgICAgICA8dGQ+LTwvdGQ+CiAgICAgICAgPHRkPlJlZGlyZWN0aW9uIFJvdXRlIG9mIHRoZSB3b3JrZXIuIFRoaXMgdmFsdWUgaXMgdXN1YWxseQogICAgICAgIHNldCBkeW5hbWljYWxseSB0byBlbmFibGUgc2FmZSByZW1vdmFsIG9mIHRoZSBub2RlIGZyb20KICAgICAgICB0aGUgY2x1c3Rlci4gSWYgc2V0IGFsbCByZXF1ZXN0cyB3aXRob3V0IHNlc3Npb24gaWQgd2lsbCBiZQogICAgICAgIHJlZGlyZWN0ZWQgdG8gdGhlIEJhbGFuY2VyTWVtYmVyIHRoYXQgaGFzIHJvdXRlIHBhcmFtZXRhcgogICAgICAgIGVxdWFsIGFzIHRoaXMgdmFsdWUuCiAgICA8L3RkPjwvdHI+CgogICAgPC90YWJsZT4KCiAgICA8cD5JZiB0aGUgUHJveHkgZGlyZWN0aXZlIHNjaGVtZSBzdGFydHMgd2l0aCB0aGUKICAgIDxjb2RlPmJhbGFuY2VyOi8vPC9jb2RlPiB0aGVuIGEgdmlydHVhbCB3b3JrZXIgdGhhdCBkb2VzIG5vdCByZWFsbHkKICAgIGNvbW11bmljYXRlIHdpdGggdGhlIGJhY2tlbmQgc2VydmVyIHdpbGwgYmUgY3JlYXRlZC4gSW5zdGVhZCBpdCBpcyByZXNwb25zaWJsZQogICAgZm9yIHRoZSBtYW5hZ2VtZW50IG9mIHNldmVyYWwgInJlYWwiIHdvcmtlcnMuIEluIHRoYXQgY2FzZSB0aGUgc3BlY2lhbCBzZXQgb2YKICAgIHBhcmFtZXRlcnMgY2FuIGJlIGFkZCB0byB0aGlzIHZpcnR1YWwgd29ya2VyLgogICAgPC9wPgogICAgPHRhYmxlPgogICAgPHRyPjx0aD5QYXJhbWV0ZXI8L3RoPgogICAgICAgIDx0aD5EZWZhdWx0PC90aD4KICAgICAgICA8dGg+RGVzY3JpcHRpb248L3RoPjwvdHI+CiAgICA8dHI+PHRkPmxibWV0aG9kPC90ZD4KICAgICAgICA8dGQ+LTwvdGQ+CiAgICAgICAgPHRkPkJhbGFuY2VyIGxvYWQtYmFsYW5jZSBtZXRob2QuIFNlbGVjdCB0aGUgbG9hZC1iYWxhbmNpbmcgc2NoZWR1bGVyCiAgICAgICAgbWV0aG9kIHRvIHVzZS4gRWl0aGVyIDxjb2RlPmJ5cmVxdWVzdHM8L2NvZGU+LCB0byBwZXJmb3JtIHdlaWdodGVkCiAgICAgICAgcmVxdWVzdCBjb3VudGluZyBvciA8Y29kZT5ieXRyYWZmaWM8L2NvZGU+LCB0byBwZXJmb3JtIHdlaWdodGVkCiAgICAgICAgdHJhZmZpYyBieXRlIGNvdW50IGJhbGFuY2luZy4gRGVmYXVsdCBpcyA8Y29kZT5ieXJlcXVlc3RzPC9jb2RlPi4KICAgIDwvdGQ+PC90cj4KICAgIDx0cj48dGQ+c3RpY2t5c2Vzc2lvbjwvdGQ+CiAgICAgICAgPHRkPi08L3RkPgogICAgICAgIDx0ZD5CYWxhbmNlciBzdGlja3kgc2Vzc2lvbiBuYW1lLiBUaGUgdmFsdWUgaXMgdXN1YWxseSBzZXQgdG8gc29tZXRoaW5nCiAgICAgICAgbGlrZSA8Y29kZT5KU0VTU0lPTklEPC9jb2RlPiBvciA8Y29kZT5QSFBTRVNTSU9OSUQ8L2NvZGU+LAogICAgICAgIGFuZCBpdCBkZXBlbmRzIG9uIHRoZSBiYWNrZW5kIGFwcGxpY2F0aW9uIHNlcnZlciB0aGF0IHN1cHBvcnQgc2Vzc2lvbnMuCiAgICA8L3RkPjwvdHI+CiAgICA8dHI+PHRkPm5vZmFpbG92ZXI8L3RkPgogICAgICAgIDx0ZD5PZmY8L3RkPgogICAgICAgIDx0ZD5JZiBzZXQgdG8gPGNvZGU+T248L2NvZGU+IHRoZSBzZXNzaW9uIHdpbGwgYnJlYWsgaWYgdGhlIHdvcmtlciBpcyBpbgogICAgICAgIGVycm9yIHN0YXRlIG9yIGRpc2FibGVkLiBTZXQgdGhpcyB2YWx1ZSB0byBPbiBpZiBiYWNrZW5kIHNlcnZlcnMgZG8gbm90CiAgICAgICAgc3VwcG9ydCBzZXNzaW9uIHJlcGxpY2F0aW9uLgogICAgPC90ZD48L3RyPgogICAgPHRyPjx0ZD50aW1lb3V0PC90ZD4KICAgICAgICA8dGQ+MDwvdGQ+CiAgICAgICAgPHRkPkJhbGFuY2VyIHRpbWVvdXQgaW4gc2Vjb25kcy4gSWYgc2V0IHRoaXMgd2lsbCBiZSB0aGUgbWF4aW11bSB0aW1lCiAgICAgICAgdG8gd2FpdCBmb3IgYSBmcmVlIHdvcmtlci4gRGVmYXVsdCBpcyBub3QgdG8gd2FpdC4gCiAgICA8L3RkPjwvdHI+CiAgICA8dHI+PHRkPm1heGF0dGVtcHRzPC90ZD4KICAgICAgICA8dGQ+MTwvdGQ+CiAgICAgICAgPHRkPk1heGltdW0gbnVtYmVyIG9mIGZhaWxvdmVyIGF0dGVtcHRzIGJlZm9yZSBnaXZpbmcgdXAuIAogICAgPC90ZD48L3RyPgogICAgCiAgICA8L3RhYmxlPgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgIFByb3h5UGFzcyAvc3BlY2lhbC1hcmVhIGh0dHA6Ly9zcGVjaWFsLmV4YW1wbGUuY29tLyBzbWF4PTUgbWF4PTEwPGJyIC8+CiAgICAgIFByb3h5UGFzcyAvIGJhbGFuY2VyOi8vbXljbHVzdGVyIHN0aWNreXNlc3Npb249anNlc3Npb25pZCBub2ZhaWxvdmVyPU9uPGJyIC8+CiAgICAgICZsdDtQcm94eSBiYWxhbmNlcjovL215Y2x1c3RlciZndDs8YnIgLz4KICAgICAgPHNwYW4gY2xhc3M9ImluZGVudCI+CiAgICAgICAgQmFsYW5jZXJNZW1iZXIgaHR0cDovLzEuMi4zLjQ6ODAwOTxiciAvPgogICAgICAgIEJhbGFuY2VyTWVtYmVyIGh0dHA6Ly8xLjIuMy41OjgwMDkgc21heD0xMDxiciAvPgogICAgICAgICMgTGVzcyBwb3dlcmZ1bCBzZXJ2ZXIsIGRvbid0IHNlbmQgYXMgbWFueSByZXF1ZXN0cyB0aGVyZTxiciAvPgogICAgICAgIEJhbGFuY2VyTWVtYmVyIGh0dHA6Ly8xLjIuMy42OjgwMDkgc21heD0xIGxvYWRmYWN0b3I9MjA8YnIgLz4KICAgICAgPC9zcGFuPgogICAgICAmbHQ7L1Byb3h5Jmd0OwogICAgPC9jb2RlPjwvcD48L2Rpdj4KICAgIAogICAgPHA+V2hlbiB1c2VkIGluc2lkZSBhIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjbG9jYXRpb24iPiZsdDtMb2NhdGlvbiZndDs8L2E+PC9jb2RlPiBzZWN0aW9uLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgb21pdHRlZCBhbmQgdGhlIGxvY2FsCiAgICBkaXJlY3RvcnkgaXMgb2J0YWluZWQgZnJvbSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNsb2NhdGlvbiI+Jmx0O0xvY2F0aW9uJmd0OzwvYT48L2NvZGU+LjwvcD4KCiAgICA8cD5JZiB5b3UgcmVxdWlyZSBhIG1vcmUgZmxleGlibGUgcmV2ZXJzZS1wcm94eSBjb25maWd1cmF0aW9uLCBzZWUgdGhlCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Jld3JpdGUuaHRtbCNyZXdyaXRlcnVsZSI+UmV3cml0ZVJ1bGU8L2E+PC9jb2RlPiBkaXJlY3RpdmUgd2l0aCB0aGUKICAgIDxjb2RlPltQXTwvY29kZT4gZmxhZy48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHlQYXNzUmV2ZXJzZSIgaWQ9IlByb3h5UGFzc1JldmVyc2UiPlByb3h5UGFzc1JldmVyc2U8L2E+IDxhIG5hbWU9InByb3h5cGFzc3JldmVyc2UiIGlkPSJwcm94eXBhc3NyZXZlcnNlIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5BZGp1c3RzIHRoZSBVUkwgaW4gSFRUUCByZXNwb25zZSBoZWFkZXJzIHNlbnQgZnJvbSBhIHJldmVyc2UKcHJveGllZCBzZXJ2ZXI8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlQYXNzUmV2ZXJzZSBbPHZhcj5wYXRoPC92YXI+XSA8dmFyPnVybDwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgbGV0cyBBcGFjaGUgYWRqdXN0IHRoZSBVUkwgaW4gdGhlIDxjb2RlPkxvY2F0aW9uPC9jb2RlPiwKICAgIDxjb2RlPkNvbnRlbnQtTG9jYXRpb248L2NvZGU+IGFuZCA8Y29kZT5VUkk8L2NvZGU+IGhlYWRlcnMgb24gSFRUUCByZWRpcmVjdAogICAgcmVzcG9uc2VzLiBUaGlzIGlzIGVzc2VudGlhbCB3aGVuIEFwYWNoZSBpcyB1c2VkIGFzIGEgcmV2ZXJzZSBwcm94eSB0byBhdm9pZAogICAgYnktcGFzc2luZyB0aGUgcmV2ZXJzZSBwcm94eSBiZWNhdXNlIG9mIEhUVFAgcmVkaXJlY3RzIG9uIHRoZSBiYWNrZW5kCiAgICBzZXJ2ZXJzIHdoaWNoIHN0YXkgYmVoaW5kIHRoZSByZXZlcnNlIHByb3h5LjwvcD4KCiAgICA8cD5Pbmx5IHRoZSBIVFRQIHJlc3BvbnNlIGhlYWRlcnMgc3BlY2lmaWNhbGx5IG1lbnRpb25lZCBhYm92ZQogICAgd2lsbCBiZSByZXdyaXR0ZW4uICBBcGFjaGUgd2lsbCBub3QgcmV3cml0ZSBvdGhlciByZXNwb25zZQogICAgaGVhZGVycywgbm9yIHdpbGwgaXQgcmV3cml0ZSBVUkwgcmVmZXJlbmNlcyBpbnNpZGUgSFRNTCBwYWdlcy4KICAgIFRoaXMgbWVhbnMgdGhhdCBpZiB0aGUgcHJveGllZCBjb250ZW50IGNvbnRhaW5zIGFic29sdXRlIFVSTAogICAgcmVmZXJlbmNlcywgdGhleSB3aWxsIGJ5LXBhc3MgdGhlIHByb3h5LiAgQSB0aGlyZC1wYXJ0eSBtb2R1bGUKICAgIHRoYXQgd2lsbCBsb29rIGluc2lkZSB0aGUgSFRNTCBhbmQgcmV3cml0ZSBVUkwgcmVmZXJlbmNlcyBpcyBOaWNrCiAgICBLZXcncyA8YSBocmVmPSJodHRwOi8vYXBhY2hlLndlYnRoaW5nLmNvbS9tb2RfcHJveHlfaHRtbC8iPm1vZF9wcm94eV9odG1sPC9hPi48L3A+CgogICAgPHA+PHZhcj5wYXRoPC92YXI+IGlzIHRoZSBuYW1lIG9mIGEgbG9jYWwgdmlydHVhbCBwYXRoLiA8dmFyPnVybDwvdmFyPiBpcyBhCiAgICBwYXJ0aWFsIFVSTCBmb3IgdGhlIHJlbW90ZSBzZXJ2ZXIgLSB0aGUgc2FtZSB3YXkgdGhleSBhcmUgdXNlZCBmb3IgdGhlCiAgICA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHlwYXNzIj5Qcm94eVBhc3M8L2E+PC9jb2RlPiBkaXJlY3RpdmUuPC9wPgoKICAgIDxwPkZvciBleGFtcGxlLCBzdXBwb3NlIHRoZSBsb2NhbCBzZXJ2ZXIgaGFzIGFkZHJlc3MKICAgIDxjb2RlPmh0dHA6Ly9leGFtcGxlLmNvbS88L2NvZGU+OyB0aGVuPC9wPgoKICAgIDxkaXYgY2xhc3M9ImV4YW1wbGUiPjxwPjxjb2RlPgogICAgICBQcm94eVBhc3MgICAgICAgICAvbWlycm9yL2Zvby8gaHR0cDovL2JhY2tlbmQuZXhhbXBsZS5jb20vPGJyIC8+CiAgICAgIFByb3h5UGFzc1JldmVyc2UgIC9taXJyb3IvZm9vLyBodHRwOi8vYmFja2VuZC5leGFtcGxlLmNvbS88YnIgLz4KICAgICAgUHJveHlQYXNzUmV2ZXJzZUNvb2tpZURvbWFpbiAgYmFja2VuZC5leGFtcGxlLmNvbSAgcHVibGljLmV4YW1wbGUuY29tPGJyIC8+CiAgICAgIFByb3h5UGFzc1JldmVyc2VDb29raWVQYXRoICAvICAvbWlycm9yL2Zvby8KICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+d2lsbCBub3Qgb25seSBjYXVzZSBhIGxvY2FsIHJlcXVlc3QgZm9yIHRoZQogICAgPGNvZGU+aHR0cDovL2V4YW1wbGUuY29tL21pcnJvci9mb28vYmFyPC9jb2RlPiB0byBiZSBpbnRlcm5hbGx5IGNvbnZlcnRlZAogICAgaW50byBhIHByb3h5IHJlcXVlc3QgdG8gPGNvZGU+aHR0cDovL2JhY2tlbmQuZXhhbXBsZS5jb20vYmFyPC9jb2RlPgogICAgKHRoZSBmdW5jdGlvbmFsaXR5IDxjb2RlPlByb3h5UGFzczwvY29kZT4gcHJvdmlkZXMgaGVyZSkuIEl0IGFsc28gdGFrZXMgY2FyZQogICAgb2YgcmVkaXJlY3RzIHRoZSBzZXJ2ZXIgPGNvZGU+YmFja2VuZC5leGFtcGxlLmNvbTwvY29kZT4gc2VuZHM6IHdoZW4KICAgIDxjb2RlPmh0dHA6Ly9iYWNrZW5kLmV4YW1wbGUuY29tL2JhcjwvY29kZT4gaXMgcmVkaXJlY3RlZCBieSBoaW0gdG8KICAgIDxjb2RlPmh0dHA6Ly9iYWNrZW5kLmV4YW1wbGUuY29tL3F1dXg8L2NvZGU+IEFwYWNoZSBhZGp1c3RzIHRoaXMgdG8KICAgIDxjb2RlPmh0dHA6Ly9leGFtcGxlLmNvbS9taXJyb3IvZm9vL3F1dXg8L2NvZGU+IGJlZm9yZSBmb3J3YXJkaW5nIHRoZSBIVFRQCiAgICByZWRpcmVjdCByZXNwb25zZSB0byB0aGUgY2xpZW50LiBOb3RlIHRoYXQgdGhlIGhvc3RuYW1lIHVzZWQgZm9yCiAgICBjb25zdHJ1Y3RpbmcgdGhlIFVSTCBpcyBjaG9zZW4gaW4gcmVzcGVjdCB0byB0aGUgc2V0dGluZyBvZiB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCN1c2VjYW5vbmljYWxuYW1lIj5Vc2VDYW5vbmljYWxOYW1lPC9hPjwvY29kZT4gZGlyZWN0aXZlLjwvcD4KCiAgICA8cD5Ob3RlIHRoYXQgdGhpcyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj5Qcm94eVBhc3NSZXZlcnNlPC9jb2RlPiBkaXJlY3RpdmUgY2FuCiAgICBhbHNvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcHJveHkgcGFzcy10aHJvdWdoIGZlYXR1cmUKICAgICg8Y29kZT5SZXdyaXRlUnVsZSAuLi4gIFtQXTwvY29kZT4pIGZyb20gPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9yZXdyaXRlLmh0bWwiPm1vZF9yZXdyaXRlPC9hPjwvY29kZT4KICAgIGJlY2F1c2UgaXQgZG9lc24ndCBkZXBlbmQgb24gYSBjb3JyZXNwb25kaW5nIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm94eXBhc3MiPlByb3h5UGFzczwvYT48L2NvZGU+IGRpcmVjdGl2ZS48L3A+CgogICAgPHA+V2hlbiB1c2VkIGluc2lkZSBhIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjbG9jYXRpb24iPiZsdDtMb2NhdGlvbiZndDs8L2E+PC9jb2RlPiBzZWN0aW9uLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgb21pdHRlZCBhbmQgdGhlIGxvY2FsCiAgICBkaXJlY3RvcnkgaXMgb2J0YWluZWQgZnJvbSB0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNsb2NhdGlvbiI+Jmx0O0xvY2F0aW9uJmd0OzwvYT48L2NvZGU+LjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eVBhc3NSZXZlcnNlQ29va2llRG9tYWluIiBpZD0iUHJveHlQYXNzUmV2ZXJzZUNvb2tpZURvbWFpbiI+UHJveHlQYXNzUmV2ZXJzZUNvb2tpZURvbWFpbjwvYT4gPGEgbmFtZT0icHJveHlwYXNzcmV2ZXJzZWNvb2tpZWRvbWFpbiIgaWQ9InByb3h5cGFzc3JldmVyc2Vjb29raWVkb21haW4iPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkFkanVzdHMgdGhlIERvbWFpbiBzdHJpbmcgaW4gU2V0LUNvb2tpZSBoZWFkZXJzIGZyb20gYSByZXZlcnNlLQpwcm94aWVkIHNlcnZlcjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eVBhc3NSZXZlcnNlQ29va2llRG9tYWluIDx2YXI+aW50ZXJuYWwtZG9tYWluPC92YXI+IDx2YXI+cHVibGljLWRvbWFpbjwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3QsIGRpcmVjdG9yeTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8L3RhYmxlPgo8cD5Vc2FnZSBpcyBiYXNpY2FsbHkgc2ltaWxhciB0bwo8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHlwYXNzcmV2ZXJzZSI+UHJveHlQYXNzUmV2ZXJzZTwvYT48L2NvZGU+LCBidXQgaW5zdGVhZCBvZgpyZXdyaXRpbmcgaGVhZGVycyB0aGF0IGFyZSBhIFVSTCwgdGhpcyByZXdyaXRlcyB0aGUgPGNvZGU+ZG9tYWluPC9jb2RlPgpzdHJpbmcgaW4gPGNvZGU+U2V0LUNvb2tpZTwvY29kZT4gaGVhZGVycy48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHlQYXNzUmV2ZXJzZUNvb2tpZVBhdGgiIGlkPSJQcm94eVBhc3NSZXZlcnNlQ29va2llUGF0aCI+UHJveHlQYXNzUmV2ZXJzZUNvb2tpZVBhdGg8L2E+IDxhIG5hbWU9InByb3h5cGFzc3JldmVyc2Vjb29raWVwYXRoIiBpZD0icHJveHlwYXNzcmV2ZXJzZWNvb2tpZXBhdGgiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkFkanVzdHMgdGhlIFBhdGggc3RyaW5nIGluIFNldC1Db29raWUgaGVhZGVycyBmcm9tIGEgcmV2ZXJzZS0KcHJveGllZCBzZXJ2ZXI8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlQYXNzUmV2ZXJzZUNvb2tpZVBhdGggPHZhcj5pbnRlcm5hbC1wYXRoPC92YXI+IDx2YXI+cHVibGljLXBhdGg8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0LCBkaXJlY3Rvcnk8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eTwvdGQ+PC90cj4KPC90YWJsZT4KPHA+VXNhZ2UgaXMgYmFzaWNhbGx5IHNpbWlsYXIgdG8KPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5cGFzc3JldmVyc2UiPlByb3h5UGFzc1JldmVyc2U8L2E+PC9jb2RlPiwgYnV0IGluc3RlYWQgb2YKcmV3cml0aW5nIGhlYWRlcnMgdGhhdCBhcmUgYSBVUkwsIHRoaXMgcmV3cml0ZXMgdGhlIDxjb2RlPnBhdGg8L2NvZGU+CnN0cmluZyBpbiA8Y29kZT5TZXQtQ29va2llPC9jb2RlPiBoZWFkZXJzLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eVByZXNlcnZlSG9zdCIgaWQ9IlByb3h5UHJlc2VydmVIb3N0Ij5Qcm94eVByZXNlcnZlSG9zdDwvYT4gPGEgbmFtZT0icHJveHlwcmVzZXJ2ZWhvc3QiIGlkPSJwcm94eXByZXNlcnZlaG9zdCI+RGlyZWN0aXZlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+VXNlIGluY29taW5nIEhvc3QgSFRUUCByZXF1ZXN0IGhlYWRlciBmb3IgcHJveHkKcmVxdWVzdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eVByZXNlcnZlSG9zdCBPbnxPZmY8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlQcmVzZXJ2ZUhvc3QgT2ZmPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+QXZhaWxhYmxlIGluIEFwYWNoZSAyLjAuMzEgYW5kIGxhdGVyLjwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPldoZW4gZW5hYmxlZCwgdGhpcyBvcHRpb24gd2lsbCBwYXNzIHRoZSBIb3N0OiBsaW5lIGZyb20gdGhlIGluY29taW5nCiAgICByZXF1ZXN0IHRvIHRoZSBwcm94aWVkIGhvc3QsIGluc3RlYWQgb2YgdGhlIGhvc3RuYW1lIHNwZWNpZmllZCBpbiB0aGUKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlByb3h5UGFzczwvY29kZT4gbGluZS48L3A+CgogICAgPHA+VGhpcyBvcHRpb24gc2hvdWxkIG5vcm1hbGx5IGJlIHR1cm5lZCA8Y29kZT5PZmY8L2NvZGU+LiBJdCBpcyBtb3N0bHkgCiAgICB1c2VmdWwgaW4gc3BlY2lhbCBjb25maWd1cmF0aW9ucyBsaWtlIHByb3hpZWQgbWFzcyBuYW1lLWJhc2VkIHZpcnR1YWwKICAgIGhvc3RpbmcsIHdoZXJlIHRoZSBvcmlnaW5hbCBIb3N0IGhlYWRlciBuZWVkcyB0byBiZSBldmFsdWF0ZWQgYnkgdGhlCiAgICBiYWNrZW5kIHNlcnZlci48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHlSZWNlaXZlQnVmZmVyU2l6ZSIgaWQ9IlByb3h5UmVjZWl2ZUJ1ZmZlclNpemUiPlByb3h5UmVjZWl2ZUJ1ZmZlclNpemU8L2E+IDxhIG5hbWU9InByb3h5cmVjZWl2ZWJ1ZmZlcnNpemUiIGlkPSJwcm94eXJlY2VpdmVidWZmZXJzaXplIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5OZXR3b3JrIGJ1ZmZlciBzaXplIGZvciBwcm94aWVkIEhUVFAgYW5kIEZUUApjb25uZWN0aW9uczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eVJlY2VpdmVCdWZmZXJTaXplIDx2YXI+Ynl0ZXM8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+RGVmYXVsdDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlSZWNlaXZlQnVmZmVyU2l6ZSAwPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPlByb3h5UmVjZWl2ZUJ1ZmZlclNpemU8L2NvZGU+IGRpcmVjdGl2ZSBzcGVjaWZpZXMgYW4KICAgIGV4cGxpY2l0IChUQ1AvSVApIG5ldHdvcmsgYnVmZmVyIHNpemUgZm9yIHByb3hpZWQgSFRUUCBhbmQgRlRQIGNvbm5lY3Rpb25zLAogICAgZm9yIGluY3JlYXNlZCB0aHJvdWdocHV0LiBJdCBoYXMgdG8gYmUgZ3JlYXRlciB0aGFuIDxjb2RlPjUxMjwvY29kZT4gb3Igc2V0CiAgICB0byA8Y29kZT4wPC9jb2RlPiB0byBpbmRpY2F0ZSB0aGF0IHRoZSBzeXN0ZW0ncyBkZWZhdWx0IGJ1ZmZlciBzaXplIHNob3VsZAogICAgYmUgdXNlZC48L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkV4YW1wbGU8L2gzPjxwPjxjb2RlPgogICAgICBQcm94eVJlY2VpdmVCdWZmZXJTaXplIDIwNDgKICAgIDwvY29kZT48L3A+PC9kaXY+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHlSZW1vdGUiIGlkPSJQcm94eVJlbW90ZSI+UHJveHlSZW1vdGU8L2E+IDxhIG5hbWU9InByb3h5cmVtb3RlIiBpZD0icHJveHlyZW1vdGUiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlJlbW90ZSBwcm94eSB1c2VkIHRvIGhhbmRsZSBjZXJ0YWluIHJlcXVlc3RzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5UmVtb3RlIDx2YXI+bWF0Y2g8L3Zhcj4gPHZhcj5yZW1vdGUtc2VydmVyPC92YXI+PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkZWZpbmVzIHJlbW90ZSBwcm94aWVzIHRvIHRoaXMgcHJveHkuIDx2YXI+bWF0Y2g8L3Zhcj4gaXMgZWl0aGVyIHRoZQogICAgbmFtZSBvZiBhIFVSTC1zY2hlbWUgdGhhdCB0aGUgcmVtb3RlIHNlcnZlciBzdXBwb3J0cywgb3IgYSBwYXJ0aWFsIFVSTAogICAgZm9yIHdoaWNoIHRoZSByZW1vdGUgc2VydmVyIHNob3VsZCBiZSB1c2VkLCBvciA8Y29kZT4qPC9jb2RlPiB0byBpbmRpY2F0ZQogICAgdGhlIHNlcnZlciBzaG91bGQgYmUgY29udGFjdGVkIGZvciBhbGwgcmVxdWVzdHMuIDx2YXI+cmVtb3RlLXNlcnZlcjwvdmFyPiBpcwogICAgYSBwYXJ0aWFsIFVSTCBmb3IgdGhlIHJlbW90ZSBzZXJ2ZXIuIFN5bnRheDo8L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PHA+PGNvZGU+CiAgICAgIDxkZm4+cmVtb3RlLXNlcnZlcjwvZGZuPiA9CiAgICAgICAgICA8dmFyPnNjaGVtZTwvdmFyPjovLzx2YXI+aG9zdG5hbWU8L3Zhcj5bOjx2YXI+cG9ydDwvdmFyPl0KICAgIDwvY29kZT48L3A+PC9kaXY+CgogICAgPHA+PHZhcj5zY2hlbWU8L3Zhcj4gaXMgZWZmZWN0aXZlbHkgdGhlIHByb3RvY29sIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8KICAgIGNvbW11bmljYXRlIHdpdGggdGhlIHJlbW90ZSBzZXJ2ZXI7IG9ubHkgPGNvZGU+aHR0cDwvY29kZT4gaXMgc3VwcG9ydGVkIGJ5CiAgICB0aGlzIG1vZHVsZS48L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkV4YW1wbGU8L2gzPjxwPjxjb2RlPgogICAgICBQcm94eVJlbW90ZSBodHRwOi8vZ29vZGd1eXMuY29tLyBodHRwOi8vbWlycm9yZ3V5cy5jb206ODAwMDxiciAvPgogICAgICBQcm94eVJlbW90ZSAqIGh0dHA6Ly9jbGV2ZXJzaXRlLmNvbTxiciAvPgogICAgICBQcm94eVJlbW90ZSBmdHAgaHR0cDovL2Z0cHByb3h5Lm15ZG9tYWluLmNvbTo4MDgwCiAgICA8L2NvZGU+PC9wPjwvZGl2PgoKICAgIDxwPkluIHRoZSBsYXN0IGV4YW1wbGUsIHRoZSBwcm94eSB3aWxsIGZvcndhcmQgRlRQIHJlcXVlc3RzLCBlbmNhcHN1bGF0ZWQKICAgIGFzIHlldCBhbm90aGVyIEhUVFAgcHJveHkgcmVxdWVzdCwgdG8gYW5vdGhlciBwcm94eSB3aGljaCBjYW4gaGFuZGxlCiAgICB0aGVtLjwvcD4KCiAgICA8cD5UaGlzIG9wdGlvbiBhbHNvIHN1cHBvcnRzIHJldmVyc2UgcHJveHkgY29uZmlndXJhdGlvbiAtIGEgYmFja2VuZAogICAgd2Vic2VydmVyIGNhbiBiZSBlbWJlZGRlZCB3aXRoaW4gYSB2aXJ0dWFsaG9zdCBVUkwgc3BhY2UgZXZlbiBpZiB0aGF0CiAgICBzZXJ2ZXIgaXMgaGlkZGVuIGJ5IGFub3RoZXIgZm9yd2FyZCBwcm94eS48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHlSZW1vdGVNYXRjaCIgaWQ9IlByb3h5UmVtb3RlTWF0Y2giPlByb3h5UmVtb3RlTWF0Y2g8L2E+IDxhIG5hbWU9InByb3h5cmVtb3RlbWF0Y2giIGlkPSJwcm94eXJlbW90ZW1hdGNoIj5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5SZW1vdGUgcHJveHkgdXNlZCB0byBoYW5kbGUgcmVxdWVzdHMgbWF0Y2hlZCBieSByZWd1bGFyCmV4cHJlc3Npb25zPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5UmVtb3RlTWF0Y2ggPHZhcj5yZWdleDwvdmFyPiA8dmFyPnJlbW90ZS1zZXJ2ZXI8L3Zhcj48L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dDo8L2E+PC90aD48dGQ+c2VydmVyIGNvbmZpZywgdmlydHVhbCBob3N0PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXM6PC9hPjwvdGg+PHRkPkV4dGVuc2lvbjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfcHJveHk8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5UaGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+UHJveHlSZW1vdGVNYXRjaDwvY29kZT4gaXMgaWRlbnRpY2FsIHRvIHRoZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI3Byb3h5cmVtb3RlIj5Qcm94eVJlbW90ZTwvYT48L2NvZGU+IGRpcmVjdGl2ZSwgZXhjZXB0IHRoZQogICAgZmlyc3QgYXJndW1lbnQgaXMgYSA8YSBjbGFzcz0iZ2xvc3NhcnlsaW5rIiBocmVmPSIuLi9nbG9zc2FyeS5odG1sI3JlZ2V4IiB0aXRsZT0ic2VlIGdsb3NzYXJ5Ij5yZWd1bGFyIGV4cHJlc3Npb248L2E+CiAgICBtYXRjaCBhZ2FpbnN0IHRoZSByZXF1ZXN0ZWQgVVJMLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eVJlcXVlc3RzIiBpZD0iUHJveHlSZXF1ZXN0cyI+UHJveHlSZXF1ZXN0czwvYT4gPGEgbmFtZT0icHJveHlyZXF1ZXN0cyIgaWQ9InByb3h5cmVxdWVzdHMiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkVuYWJsZXMgZm9yd2FyZCAoc3RhbmRhcmQpIHByb3h5IHJlcXVlc3RzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5UmVxdWVzdHMgT258T2ZmPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5UmVxdWVzdHMgT2ZmPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBhbGxvd3Mgb3IgcHJldmVudHMgQXBhY2hlIGZyb20gZnVuY3Rpb25pbmcgYXMgYSBmb3J3YXJkIHByb3h5CiAgICBzZXJ2ZXIuIChTZXR0aW5nIFByb3h5UmVxdWVzdHMgdG8gPGNvZGU+T2ZmPC9jb2RlPiBkb2VzIG5vdCBkaXNhYmxlIHVzZSBvZgogICAgdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNwcm94eXBhc3MiPlByb3h5UGFzczwvYT48L2NvZGU+IGRpcmVjdGl2ZS4pPC9wPgoKICAgIDxwPkluIGEgdHlwaWNhbCByZXZlcnNlIHByb3h5IGNvbmZpZ3VyYXRpb24sIHRoaXMgb3B0aW9uIHNob3VsZCBiZSBzZXQgdG8KICAgIDxjb2RlPk9mZjwvY29kZT4uPC9wPgoKICAgIDxwPkluIG9yZGVyIHRvIGdldCB0aGUgZnVuY3Rpb25hbGl0eSBvZiBwcm94eWluZyBIVFRQIG9yIEZUUCBzaXRlcywgeW91CiAgICBuZWVkIGFsc28gPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eV9odHRwLmh0bWwiPm1vZF9wcm94eV9odHRwPC9hPjwvY29kZT4gb3IgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eV9mdHAuaHRtbCI+bW9kX3Byb3h5X2Z0cDwvYT48L2NvZGU+CiAgICAob3IgYm90aCkgcHJlc2VudCBpbiB0aGUgc2VydmVyLjwvcD4KCiAgICA8ZGl2IGNsYXNzPSJ3YXJuaW5nIj48aDM+V2FybmluZzwvaDM+CiAgICAgIDxwPkRvIG5vdCBlbmFibGUgcHJveHlpbmcgd2l0aCA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjcHJveHlyZXF1ZXN0cyI+UHJveHlSZXF1ZXN0czwvYT48L2NvZGU+IHVudGlsIHlvdSBoYXZlIDxhIGhyZWY9IiNhY2Nlc3MiPnNlY3VyZWQgeW91ciBzZXJ2ZXI8L2E+LiAgT3BlbiBwcm94eSBzZXJ2ZXJzIGFyZSBkYW5nZXJvdXMKICAgICAgYm90aCB0byB5b3VyIG5ldHdvcmsgYW5kIHRvIHRoZSBJbnRlcm5ldCBhdCBsYXJnZS48L3A+CiAgICA8L2Rpdj4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJQcm94eVRpbWVvdXQiIGlkPSJQcm94eVRpbWVvdXQiPlByb3h5VGltZW91dDwvYT4gPGEgbmFtZT0icHJveHl0aW1lb3V0IiBpZD0icHJveHl0aW1lb3V0Ij5EaXJlY3RpdmU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5OZXR3b3JrIHRpbWVvdXQgZm9yIHByb3hpZWQgcmVxdWVzdHM8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheDo8L2E+PC90aD48dGQ+PGNvZGU+UHJveHlUaW1lb3V0IDx2YXI+c2Vjb25kczwvdmFyPjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5EZWZhdWx0OjwvYT48L3RoPjx0ZD48Y29kZT5Qcm94eVRpbWVvdXQgMzAwPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHQ6PC9hPjwvdGg+PHRkPnNlcnZlciBjb25maWcsIHZpcnR1YWwgaG9zdDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHVzOjwvYT48L3RoPjx0ZD5FeHRlbnNpb248L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX3Byb3h5PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl0eTo8L2E+PC90aD48dGQ+QXZhaWxhYmxlIGluIEFwYWNoZSAyLjAuMzEgYW5kIGxhdGVyPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+VGhpcyBkaXJlY3RpdmUgYWxsb3dzIGEgdXNlciB0byBzcGVjaWZpeSBhIHRpbWVvdXQgb24gcHJveHkgcmVxdWVzdHMuCiAgICBUaGlzIGlzIHVzZWZ1bCB3aGVuIHlvdSBoYXZlIGEgc2xvdy9idWdneSBhcHBzZXJ2ZXIgd2hpY2ggaGFuZ3MsIGFuZCB5b3UKICAgIHdvdWxkIHJhdGhlciBqdXN0IHJldHVybiBhIHRpbWVvdXQgYW5kIGZhaWwgZ3JhY2VmdWxseSBpbnN0ZWFkIG9mIHdhaXRpbmcKICAgIGhvd2V2ZXIgbG9uZyBpdCB0YWtlcyB0aGUgc2VydmVyIHRvIHJldHVybi48L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0iUHJveHlWaWEiIGlkPSJQcm94eVZpYSI+UHJveHlWaWE8L2E+IDxhIG5hbWU9InByb3h5dmlhIiBpZD0icHJveHl2aWEiPkRpcmVjdGl2ZTwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkluZm9ybWF0aW9uIHByb3ZpZGVkIGluIHRoZSA8Y29kZT5WaWE8L2NvZGU+IEhUVFAgcmVzcG9uc2UKaGVhZGVyIGZvciBwcm94aWVkIHJlcXVlc3RzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXg6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5VmlhIE9ufE9mZnxGdWxsfEJsb2NrPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0RlZmF1bHQiPkRlZmF1bHQ6PC9hPjwvdGg+PHRkPjxjb2RlPlByb3h5VmlhIE9mZjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0OjwvYT48L3RoPjx0ZD5zZXJ2ZXIgY29uZmlnLCB2aXJ0dWFsIGhvc3Q8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1czo8L2E+PC90aD48dGQ+RXh0ZW5zaW9uPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9wcm94eTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPlRoaXMgZGlyZWN0aXZlIGNvbnRyb2xzIHRoZSB1c2Ugb2YgdGhlIDxjb2RlPlZpYTo8L2NvZGU+IEhUVFAKICAgIGhlYWRlciBieSB0aGUgcHJveHkuIEl0cyBpbnRlbmRlZCB1c2UgaXMgdG8gY29udHJvbCB0aGUgZmxvdyBvZgogICAgcHJveHkgcmVxdWVzdHMgYWxvbmcgYSBjaGFpbiBvZiBwcm94eSBzZXJ2ZXJzLiAgU2VlIDxhIGhyZWY9Imh0dHA6Ly93d3cuaWV0Zi5vcmcvcmZjL3JmYzI2MTYudHh0Ij5SRkMgMjYxNjwvYT4gKEhUVFAvMS4xKSwgc2VjdGlvbgogICAgMTQuNDUgZm9yIGFuIGV4cGxhbmF0aW9uIG9mIDxjb2RlPlZpYTo8L2NvZGU+IGhlYWRlciBsaW5lcy48L3A+CgogICAgPHVsPgogICAgPGxpPklmIHNldCB0byA8Y29kZT5PZmY8L2NvZGU+LCB3aGljaCBpcyB0aGUgZGVmYXVsdCwgbm8gc3BlY2lhbCBwcm9jZXNzaW5nCiAgICBpcyBwZXJmb3JtZWQuIElmIGEgcmVxdWVzdCBvciByZXBseSBjb250YWlucyBhIDxjb2RlPlZpYTo8L2NvZGU+IGhlYWRlciwKICAgIGl0IGlzIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZC48L2xpPgoKICAgIDxsaT5JZiBzZXQgdG8gPGNvZGU+T248L2NvZGU+LCBlYWNoIHJlcXVlc3QgYW5kIHJlcGx5IHdpbGwgZ2V0IGEKICAgIDxjb2RlPlZpYTo8L2NvZGU+IGhlYWRlciBsaW5lIGFkZGVkIGZvciB0aGUgY3VycmVudCBob3N0LjwvbGk+CgogICAgPGxpPklmIHNldCB0byA8Y29kZT5GdWxsPC9jb2RlPiwgZWFjaCBnZW5lcmF0ZWQgPGNvZGU+VmlhOjwvY29kZT4gaGVhZGVyCiAgICBsaW5lIHdpbGwgYWRkaXRpb25hbGx5IGhhdmUgdGhlIEFwYWNoZSBzZXJ2ZXIgdmVyc2lvbiBzaG93biBhcyBhCiAgICA8Y29kZT5WaWE6PC9jb2RlPiBjb21tZW50IGZpZWxkLjwvbGk+CgogICAgPGxpPklmIHNldCB0byA8Y29kZT5CbG9jazwvY29kZT4sIGV2ZXJ5IHByb3h5IHJlcXVlc3Qgd2lsbCBoYXZlIGFsbCBpdHMKICAgIDxjb2RlPlZpYTo8L2NvZGU+IGhlYWRlciBsaW5lcyByZW1vdmVkLiBObyBuZXcgPGNvZGU+VmlhOjwvY29kZT4gaGVhZGVyIHdpbGwKICAgIGJlIGdlbmVyYXRlZC48L2xpPgogICAgPC91bD4KCjwvZGl2Pgo8L2Rpdj4KPGRpdiBjbGFzcz0iYm90dG9tbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9tb2QvbW9kX3Byb3h5Lmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9qYS9tb2QvbW9kX3Byb3h5Lmh0bWwiIGhyZWZsYW5nPSJqYSIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJKYXBhbmVzZSI+Jm5ic3A7amEmbmJzcDs8L2E+PC9wPgo8L2Rpdj48ZGl2IGlkPSJmb290ZXIiPgo8cCBjbGFzcz0iYXBhY2hlIj5Db3B5cmlnaHQgMTk5NS0yMDA1IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiBvciBpdHMgbGljZW5zb3JzLCBhcyBhcHBsaWNhYmxlLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Ii4uL2ZhcS8iPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FyeTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlNpdGVtYXA8L2E+PC9wPjwvZGl2Pgo8L2JvZHk+PC9odG1sPg==