PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJlbiIgeG1sOmxhbmc9ImVuIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5odHRwZCAtIEFwYWNoZSBIeXBlcnRleHQgVHJhbnNmZXIgUHJvdG9jb2wgU2VydmVyIC0gQXBhY2hlIEhUVFAgU2VydmVyIFZlcnNpb24gMi40PC90aXRsZT4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJNYWluIHN0eWxlc2hlZXQiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtbG9vc2UtMTAwcGMuY3NzIiByZWw9ImFsdGVybmF0ZSBzdHlsZXNoZWV0IiBtZWRpYT0iYWxsIiB0eXBlPSJ0ZXh0L2NzcyIgdGl0bGU9Ik5vIFNpZGViYXIgLSBEZWZhdWx0IGZvbnQgc2l6ZSIgLz4KPGxpbmsgaHJlZj0iLi4vc3R5bGUvY3NzL21hbnVhbC1wcmludC5jc3MiIHJlbD0ic3R5bGVzaGVldCIgbWVkaWE9InByaW50IiB0eXBlPSJ0ZXh0L2NzcyIgLz48bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9zdHlsZS9jc3MvcHJldHRpZnkuY3NzIiAvPgo8c2NyaXB0IHNyYz0iLi4vc3R5bGUvc2NyaXB0cy9wcmV0dGlmeS5taW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cjwvc2NyaXB0PgoKPGxpbmsgaHJlZj0iLi4vaW1hZ2VzL2Zhdmljb24uaWNvIiByZWw9InNob3J0Y3V0IGljb24iIC8+PC9oZWFkPgo8Ym9keSBpZD0ibWFudWFsLXBhZ2UiPjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYXJ5PC9hPiB8IDxhIGhyZWY9Ii4uL3NpdGVtYXAuaHRtbCI+U2l0ZW1hcDwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZmVhdGhlci5naWYiIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLyI+VmVyc2lvbiAyLjQ8L2E+ICZndDsgPGEgaHJlZj0iLi8iPlByb2dyYW1zPC9hPjwvZGl2PjxkaXYgaWQ9InBhZ2UtY29udGVudCI+PGRpdiBpZD0icHJlYW1ibGUiPjxoMT5odHRwZCAtIEFwYWNoZSBIeXBlcnRleHQgVHJhbnNmZXIgUHJvdG9jb2wgU2VydmVyPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPkF2YWlsYWJsZSBMYW5ndWFnZXM6IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9wcm9ncmFtcy9odHRwZC5odG1sIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvcHJvZ3JhbXMvaHR0cGQuaHRtbCIgaHJlZmxhbmc9ImZyIiByZWw9ImFsdGVybmF0ZSIgdGl0bGU9IkZyYW7nYWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9rby9wcm9ncmFtcy9odHRwZC5odG1sIiBocmVmbGFuZz0ia28iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi90ci9wcm9ncmFtcy9odHRwZC5odG1sIiBocmVmbGFuZz0idHIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iVPxya+dlIj4mbmJzcDt0ciZuYnNwOzwvYT48L3A+CjwvZGl2PgoKICAgICA8cD48Y29kZT5odHRwZDwvY29kZT4gaXMgdGhlIEFwYWNoZSBIeXBlclRleHQgVHJhbnNmZXIgUHJvdG9jb2wKICAgICAoSFRUUCkgc2VydmVyIHByb2dyYW0uICBJdCBpcyBkZXNpZ25lZCB0byBiZSBydW4gYXMgYSBzdGFuZGFsb25lCiAgICAgZGFlbW9uIHByb2Nlc3MuIFdoZW4gdXNlZCBsaWtlIHRoaXMgaXQgd2lsbCBjcmVhdGUgYSBwb29sIG9mCiAgICAgY2hpbGQgcHJvY2Vzc2VzIG9yIHRocmVhZHMgdG8gaGFuZGxlIHJlcXVlc3RzLjwvcD4KCiAgICAgPHA+SW4gZ2VuZXJhbCwgPGNvZGU+aHR0cGQ8L2NvZGU+IHNob3VsZCBub3QgYmUgaW52b2tlZCBkaXJlY3RseSwKICAgICBidXQgcmF0aGVyIHNob3VsZCBiZSBpbnZva2VkIHZpYSA8Y29kZSBjbGFzcz0icHJvZ3JhbSI+PGEgaHJlZj0iLi4vcHJvZ3JhbXMvYXBhY2hlY3RsLmh0bWwiPmFwYWNoZWN0bDwvYT48L2NvZGU+IG9uIFVuaXgtYmFzZWQgc3lzdGVtcyBvciA8YSBocmVmPSIuLi9wbGF0Zm9ybS93aW5kb3dzLmh0bWwjd2luc3ZjIj5hcyBhIHNlcnZpY2Ugb24gV2luZG93cyBOVCwKICAgICAyMDAwIGFuZCBYUDwvYT4gYW5kIDxhIGhyZWY9Ii4uL3BsYXRmb3JtL3dpbmRvd3MuaHRtbCN3aW5jb25zIj5hcwogICAgIGEgY29uc29sZSBhcHBsaWNhdGlvbiBvbiBXaW5kb3dzIDl4IGFuZCBNRTwvYT4uPC9wPgo8L2Rpdj4KPGRpdiBpZD0icXVpY2t2aWV3Ij48dWwgaWQ9InRvYyI+PGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjc3lub3BzaXMiPlN5bm9wc2lzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI29wdGlvbnMiPk9wdGlvbnM8L2E+PC9saT4KPC91bD48aDM+U2VlIGFsc288L2gzPjx1bCBjbGFzcz0ic2VlYWxzbyI+PGxpPjxhIGhyZWY9Ii4uL2ludm9raW5nLmh0bWwiPlN0YXJ0aW5nIEFwYWNoZSBodHRwZDwvYT48L2xpPjxsaT48YSBocmVmPSIuLi9zdG9wcGluZy5odG1sIj5TdG9wcGluZyBBcGFjaGUgaHR0cGQ8L2E+PC9saT48bGk+PGEgaHJlZj0iLi4vY29uZmlndXJpbmcuaHRtbCI+Q29uZmlndXJhdGlvbiBGaWxlczwvYT48L2xpPjxsaT48YSBocmVmPSIuLi9wbGF0Zm9ybS8iPlBsYXRmb3JtLXNwZWNpZmljIERvY3VtZW50YXRpb248L2E+PC9saT48bGk+PGNvZGUgY2xhc3M9InByb2dyYW0iPjxhIGhyZWY9Ii4uL3Byb2dyYW1zL2FwYWNoZWN0bC5odG1sIj5hcGFjaGVjdGw8L2E+PC9jb2RlPjwvbGk+PC91bD48dWwgY2xhc3M9InNlZWFsc28iPjxsaT48YSBocmVmPSIjY29tbWVudHNfc2VjdGlvbiI+Q29tbWVudHM8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJzeW5vcHNpcyIgaWQ9InN5bm9wc2lzIj5TeW5vcHNpczwvYT48L2gyPgogICAgIDxwPjxjb2RlPjxzdHJvbmc+aHR0cGQ8L3N0cm9uZz4gWyAtPHN0cm9uZz5kPC9zdHJvbmc+CiAgICAgPHZhcj5zZXJ2ZXJyb290PC92YXI+IF0gWyAtPHN0cm9uZz5mPC9zdHJvbmc+IDx2YXI+Y29uZmlnPC92YXI+IF0KICAgICBbIC08c3Ryb25nPkM8L3N0cm9uZz4gPHZhcj5kaXJlY3RpdmU8L3Zhcj4gXSBbIC08c3Ryb25nPmM8L3N0cm9uZz4KICAgICA8dmFyPmRpcmVjdGl2ZTwvdmFyPiBdIFsgLTxzdHJvbmc+RDwvc3Ryb25nPiA8dmFyPnBhcmFtZXRlcjwvdmFyPiBdCiAgICAgWyAtPHN0cm9uZz5lPC9zdHJvbmc+IDx2YXI+bGV2ZWw8L3Zhcj4gXSBbIC08c3Ryb25nPkU8L3N0cm9uZz4KICAgICA8dmFyPmZpbGU8L3Zhcj4gXQogICAgIFsgPHN0cm9uZz4tazwvc3Ryb25nPiBzdGFydHxyZXN0YXJ0fGdyYWNlZnVsfHN0b3B8Z3JhY2VmdWwtc3RvcCBdCiAgICAgWyAtPHN0cm9uZz5SPC9zdHJvbmc+IDx2YXI+ZGlyZWN0b3J5PC92YXI+IF0gWyAtPHN0cm9uZz5oPC9zdHJvbmc+IF0KICAgICBbIC08c3Ryb25nPmw8L3N0cm9uZz4gXSBbIC08c3Ryb25nPkw8L3N0cm9uZz4gXSBbIC08c3Ryb25nPlM8L3N0cm9uZz4gXQogICAgIFsgLTxzdHJvbmc+dDwvc3Ryb25nPiBdIFsgLTxzdHJvbmc+djwvc3Ryb25nPiBdIFsgLTxzdHJvbmc+Vjwvc3Ryb25nPiBdCiAgICAgWyAtPHN0cm9uZz5YPC9zdHJvbmc+IF0gWyAtPHN0cm9uZz5NPC9zdHJvbmc+IF0gWyAtPHN0cm9uZz5UPC9zdHJvbmc+IF0KICAgICA8L2NvZGU+PC9wPgoKICAgICA8cD5PbiA8YSBocmVmPSIuLi9wbGF0Zm9ybS93aW5kb3dzLmh0bWwiPldpbmRvd3Mgc3lzdGVtczwvYT4sIHRoZQogICAgIGZvbGxvd2luZyBhZGRpdGlvbmFsIGFyZ3VtZW50cyBhcmUgYXZhaWxhYmxlOjwvcD4KCiAgICAgPHA+PGNvZGU+PHN0cm9uZz5odHRwZDwvc3Ryb25nPiBbIC08c3Ryb25nPms8L3N0cm9uZz4KICAgICBpbnN0YWxsfGNvbmZpZ3x1bmluc3RhbGwgXSBbIC08c3Ryb25nPm48L3N0cm9uZz4gPHZhcj5uYW1lPC92YXI+IF0KICAgICBbIC08c3Ryb25nPnc8L3N0cm9uZz4gXTwvY29kZT48L3A+CjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9Im9wdGlvbnMiIGlkPSJvcHRpb25zIj5PcHRpb25zPC9hPjwvaDI+Cgo8ZGw+CjxkdD48Y29kZT4tZCA8dmFyPnNlcnZlcnJvb3Q8L3Zhcj48L2NvZGU+PC9kdD4KCjxkZD5TZXQgdGhlIGluaXRpYWwgdmFsdWUgZm9yIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI3NlcnZlcnJvb3QiPlNlcnZlclJvb3Q8L2E+PC9jb2RlPiBkaXJlY3RpdmUgdG8KPHZhcj5zZXJ2ZXJyb290PC92YXI+LiAgVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgU2VydmVyUm9vdApkaXJlY3RpdmUgaW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZS4gVGhlIGRlZmF1bHQgaXMKPGNvZGU+L3Vzci9sb2NhbC9hcGFjaGUyPC9jb2RlPi48L2RkPgoKPGR0Pjxjb2RlPi1mIDx2YXI+Y29uZmlnPC92YXI+PC9jb2RlPjwvZHQ+Cgo8ZGQ+VXNlcyB0aGUgZGlyZWN0aXZlcyBpbiB0aGUgZmlsZSA8dmFyPmNvbmZpZzwvdmFyPiBvbiBzdGFydHVwLiBJZgo8dmFyPmNvbmZpZzwvdmFyPiBkb2VzIG5vdCBiZWdpbiB3aXRoIGEgLywgdGhlbiBpdCBpcyB0YWtlbiB0byBiZSBhCnBhdGggcmVsYXRpdmUgdG8gdGhlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjc2VydmVycm9vdCI+U2VydmVyUm9vdDwvYT48L2NvZGU+LiBUaGUgZGVmYXVsdCBpcwo8Y29kZT5jb25mL2h0dHBkLmNvbmY8L2NvZGU+LjwvZGQ+Cgo8ZHQ+PGNvZGU+LWsgPGNvZGU+c3RhcnR8cmVzdGFydHxncmFjZWZ1bHxzdG9wfGdyYWNlZnVsLXN0b3A8L2NvZGU+PC9jb2RlPjwvZHQ+Cgo8ZGQ+U2lnbmFscyA8Y29kZT5odHRwZDwvY29kZT4gdG8gc3RhcnQsIHJlc3RhcnQsIG9yIHN0b3AuICBTZWUgPGEgaHJlZj0iLi4vc3RvcHBpbmcuaHRtbCI+U3RvcHBpbmcgQXBhY2hlIGh0dHBkPC9hPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi48L2RkPgoKPGR0Pjxjb2RlPi1DIDx2YXI+ZGlyZWN0aXZlPC92YXI+PC9jb2RlPjwvZHQ+Cgo8ZGQ+UHJvY2VzcyB0aGUgY29uZmlndXJhdGlvbiA8dmFyPmRpcmVjdGl2ZTwvdmFyPiBiZWZvcmUgcmVhZGluZwpjb25maWcgZmlsZXMuPC9kZD4KCjxkdD48Y29kZT4tYyA8dmFyPmRpcmVjdGl2ZTwvdmFyPjwvY29kZT48L2R0PgoKPGRkPlByb2Nlc3MgdGhlIGNvbmZpZ3VyYXRpb24gPHZhcj5kaXJlY3RpdmU8L3Zhcj4gYWZ0ZXIgcmVhZGluZyBjb25maWcKZmlsZXMuPC9kZD4KCgo8ZHQ+PGNvZGU+LUQgPHZhcj5wYXJhbWV0ZXI8L3Zhcj48L2NvZGU+PC9kdD4KCjxkZD5TZXRzIGEgY29uZmlndXJhdGlvbiA8dmFyPnBhcmFtZXRlciA8L3Zhcj53aGljaCBjYW4gYmUgdXNlZCB3aXRoCjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjaWZkZWZpbmUiPiZsdDtJZkRlZmluZSZndDs8L2E+PC9jb2RlPiBzZWN0aW9ucwppbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyB0byBjb25kaXRpb25hbGx5IHNraXAgb3IgcHJvY2VzcyBjb21tYW5kcwphdCBzZXJ2ZXIgc3RhcnR1cCBhbmQgcmVzdGFydC4gQWxzbyBjYW4gYmUgdXNlZCB0byBzZXQgY2VydGFpbgpsZXNzLWNvbW1vbiBzdGFydHVwIHBhcmFtZXRlcnMgaW5jbHVkaW5nIDxjb2RlPi1ETk9fREVUQUNIPC9jb2RlPgoocHJldmVudCB0aGUgcGFyZW50IGZyb20gZm9ya2luZykgYW5kIDxjb2RlPi1ERk9SRUdST1VORDwvY29kZT4KKHByZXZlbnQgdGhlIHBhcmVudCBmcm9tIGNhbGxpbmcgPGNvZGU+c2V0c2lkKCk8L2NvZGU+IGV0IGFsKS48L2RkPgoKPGR0Pjxjb2RlPi1lIDx2YXI+bGV2ZWw8L3Zhcj48L2NvZGU+PC9kdD4KCjxkZD5TZXRzIHRoZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI2xvZ2xldmVsIj5Mb2dMZXZlbDwvYT48L2NvZGU+IHRvCjx2YXI+bGV2ZWw8L3Zhcj4gZHVyaW5nIHNlcnZlciBzdGFydHVwLiAgVGhpcyBpcyB1c2VmdWwgZm9yCnRlbXBvcmFyaWx5IGluY3JlYXNpbmcgdGhlIHZlcmJvc2l0eSBvZiB0aGUgZXJyb3IgbWVzc2FnZXMgdG8gZmluZApwcm9ibGVtcyBkdXJpbmcgc3RhcnR1cC48L2RkPgoKPGR0Pjxjb2RlPi1FIDx2YXI+ZmlsZTwvdmFyPjwvY29kZT48L2R0PgoKPGRkPlNlbmQgZXJyb3IgbWVzc2FnZXMgZHVyaW5nIHNlcnZlciBzdGFydHVwIHRvIDx2YXI+ZmlsZTwvdmFyPi48L2RkPgoKPGR0Pjxjb2RlPi1oPC9jb2RlPjwvZHQ+Cgo8ZGQ+T3V0cHV0IGEgc2hvcnQgc3VtbWFyeSBvZiBhdmFpbGFibGUgY29tbWFuZCBsaW5lIG9wdGlvbnMuPC9kZD4KCjxkdD48Y29kZT4tbDwvY29kZT48L2R0PgoKPGRkPk91dHB1dCBhIGxpc3Qgb2YgbW9kdWxlcyBjb21waWxlZCBpbnRvIHRoZSBzZXJ2ZXIuICBUaGlzIHdpbGwKPHN0cm9uZz5ub3Q8L3N0cm9uZz4gbGlzdCBkeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcyBpbmNsdWRlZCB1c2luZwp0aGUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zby5odG1sI2xvYWRtb2R1bGUiPkxvYWRNb2R1bGU8L2E+PC9jb2RlPiBkaXJlY3RpdmUuPC9kZD4KCjxkdD48Y29kZT4tTDwvY29kZT48L2R0PgoKPGRkPk91dHB1dCBhIGxpc3Qgb2YgZGlyZWN0aXZlcyBwcm92aWRlZCBieSBzdGF0aWMgbW9kdWxlcywgdG9nZXRoZXIgd2l0aCBleHBlY3RlZCBhcmd1bWVudHMgYW5kCnBsYWNlcyB3aGVyZSB0aGUgZGlyZWN0aXZlIGlzIHZhbGlkLiBEaXJlY3RpdmVzIHByb3ZpZGVkIGJ5IHNoYXJlZCBtb2R1bGVzIGFyZSBub3QgbGlzdGVkLjwvZGQ+Cgo8ZHQ+PGNvZGU+LU08L2NvZGU+PC9kdD4KCjxkZD5EdW1wIGEgbGlzdCBvZiBsb2FkZWQgU3RhdGljIGFuZCBTaGFyZWQgTW9kdWxlcy48L2RkPgoKPGR0Pjxjb2RlPi1TPC9jb2RlPjwvZHQ+Cgo8ZGQ+U2hvdyB0aGUgc2V0dGluZ3MgYXMgcGFyc2VkIGZyb20gdGhlIGNvbmZpZyBmaWxlIChjdXJyZW50bHkgb25seQpzaG93cyB0aGUgdmlydHVhbGhvc3Qgc2V0dGluZ3MpLjwvZGQ+Cgo8ZHQ+PGNvZGU+LVQ8L2NvZGU+IChBdmFpbGFibGUgaW4gMi4zLjggYW5kIGxhdGVyKTwvZHQ+Cgo8ZGQ+U2tpcCBkb2N1bWVudCByb290IGNoZWNrIGF0IHN0YXJ0dXAvcmVzdGFydC48L2RkPgoKPGR0Pjxjb2RlPi10PC9jb2RlPjwvZHQ+Cgo8ZGQ+UnVuIHN5bnRheCB0ZXN0cyBmb3IgY29uZmlndXJhdGlvbiBmaWxlcyBvbmx5LiAgVGhlIHByb2dyYW0KaW1tZWRpYXRlbHkgZXhpdHMgYWZ0ZXIgdGhlc2Ugc3ludGF4IHBhcnNpbmcgdGVzdHMgd2l0aCBlaXRoZXIgYSByZXR1cm4gY29kZQpvZiAwIChTeW50YXggT0spIG9yIHJldHVybiBjb2RlIG5vdCBlcXVhbCB0byAwIChTeW50YXggRXJyb3IpLiAgSWYgLUQKPHZhcj5EVU1QPC92YXI+Xzx2YXI+VkhPU1RTIDwvdmFyPmlzIGFsc28gc2V0LCBkZXRhaWxzIG9mIHRoZSB2aXJ0dWFsIGhvc3QKY29uZmlndXJhdGlvbiB3aWxsIGJlIHByaW50ZWQuIElmIC1EIDx2YXI+RFVNUDwvdmFyPl88dmFyPk1PRFVMRVMgPC92YXI+IGlzCnNldCwgYWxsIGxvYWRlZCBtb2R1bGVzIHdpbGwgYmUgcHJpbnRlZC48L2RkPgoKPGR0Pjxjb2RlPi12PC9jb2RlPjwvZHQ+Cgo8ZGQ+UHJpbnQgdGhlIHZlcnNpb24gb2YgPGNvZGU+aHR0cGQ8L2NvZGU+LCBhbmQgdGhlbiBleGl0LjwvZGQ+Cgo8ZHQ+PGNvZGU+LVY8L2NvZGU+PC9kdD4KCjxkZD5QcmludCB0aGUgdmVyc2lvbiBhbmQgYnVpbGQgcGFyYW1ldGVycyBvZiA8Y29kZT5odHRwZDwvY29kZT4sIGFuZAp0aGVuIGV4aXQuPC9kZD4KCjxkdD48Y29kZT4tWDwvY29kZT48L2R0PgoKPGRkPlJ1biBodHRwZCBpbiBkZWJ1ZyBtb2RlLiAgT25seSBvbmUgd29ya2VyIHdpbGwgYmUgc3RhcnRlZCBhbmQgdGhlCnNlcnZlciB3aWxsIG5vdCBkZXRhY2ggZnJvbSB0aGUgY29uc29sZS48L2RkPgoKPC9kbD4KCjxwPlRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGFyZSBhdmFpbGFibGUgb25seSBvbiB0aGUgPGEgaHJlZj0iLi4vcGxhdGZvcm0vd2luZG93cy5odG1sIj5XaW5kb3dzIHBsYXRmb3JtPC9hPjo8L3A+Cgo8ZGw+Cgo8ZHQ+PGNvZGU+LWsgaW5zdGFsbHxjb25maWd8dW5pbnN0YWxsPC9jb2RlPjwvZHQ+Cgo8ZGQ+SW5zdGFsbCBBcGFjaGUgaHR0cGQgYXMgYSBXaW5kb3dzIE5UIHNlcnZpY2U7IGNoYW5nZSBzdGFydHVwIG9wdGlvbnMgZm9yCnRoZSBBcGFjaGUgaHR0cGQgc2VydmljZTsgYW5kIHVuaW5zdGFsbCB0aGUgQXBhY2hlIGh0dHBkIHNlcnZpY2UuPC9kZD4KCjxkdD48Y29kZT4tbiA8dmFyPm5hbWU8L3Zhcj48L2NvZGU+PC9kdD4KCjxkZD5UaGUgPHZhcj5uYW1lPC92YXI+IG9mIHRoZSBBcGFjaGUgaHR0cGQgc2VydmljZSB0byBzaWduYWwuPC9kZD4KCjxkdD48Y29kZT4tdzwvY29kZT48L2R0PgoKPGRkPktlZXAgdGhlIGNvbnNvbGUgd2luZG93IG9wZW4gb24gZXJyb3Igc28gdGhhdCB0aGUgZXJyb3IgbWVzc2FnZSBjYW4KYmUgcmVhZC48L2RkPgoKPC9kbD4KCjwvZGl2PjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+QXZhaWxhYmxlIExhbmd1YWdlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL3Byb2dyYW1zL2h0dHBkLmh0bWwiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9wcm9ncmFtcy9odHRwZC5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL2tvL3Byb2dyYW1zL2h0dHBkLmh0bWwiIGhyZWZsYW5nPSJrbyIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPiB8CjxhIGhyZWY9Ii4uL3RyL3Byb2dyYW1zL2h0dHBkLmh0bWwiIGhyZWZsYW5nPSJ0ciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJU/HJr52UiPiZuYnNwO3RyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2gyPjxkaXYgY2xhc3M9Indhcm5pbmciPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPjxiciAvPlRoaXMgaXMgbm90IGEgUSZhbXA7QSBzZWN0aW9uLiBDb21tZW50cyBwbGFjZWQgaGVyZSBzaG91bGQgYmUgcG9pbnRlZCB0b3dhcmRzIHN1Z2dlc3Rpb25zIG9uIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBvciBzZXJ2ZXIsIGFuZCBtYXkgYmUgcmVtb3ZlZCBhZ2FpbiBieSBvdXIgbW9kZXJhdG9ycyBpZiB0aGV5IGFyZSBlaXRoZXIgaW1wbGVtZW50ZWQgb3IgY29uc2lkZXJlZCBpbnZhbGlkL29mZi10b3BpYy4gUXVlc3Rpb25zIG9uIGhvdyB0byBtYW5hZ2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgZWl0aGVyIG91ciBJUkMgY2hhbm5lbCwgI2h0dHBkLCBvbiBGcmVlbm9kZSwgb3Igc2VudCB0byBvdXIgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvbGlzdHMuaHRtbCI+bWFpbGluZyBsaXN0czwvYT4uPC9kaXY+CjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCnZhciBjb21tZW50c19zaG9ydG5hbWUgPSAnaHR0cGQnOwp2YXIgY29tbWVudHNfaWRlbnRpZmllciA9ICdodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy9kb2NzLzIuNC9wcm9ncmFtcy9odHRwZC5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7IAogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMTUgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+TW9kdWxlczwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj5EaXJlY3RpdmVzPC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93aWtpLmFwYWNoZS5vcmcvaHR0cGQvRkFRIj5GQVE8L2E+IHwgPGEgaHJlZj0iLi4vZ2xvc3NhcnkuaHRtbCI+R2xvc3Nhcnk8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5TaXRlbWFwPC9hPjwvcD48L2Rpdj48c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQppZiAodHlwZW9mKHByZXR0eVByaW50KSAhPT0gJ3VuZGVmaW5lZCcpIHsKICAgIHByZXR0eVByaW50KCk7Cn0KLy8tLT48IV1dPjwvc2NyaXB0Pgo8L2JvZHk+PC9odG1sPg==