PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIiBsYW5nPSJmciIgeG1sOmxhbmc9ImZyIj48aGVhZD4KPG1ldGEgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PUlTTy04ODU5LTEiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgLz4KPCEtLQogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgICAgICAgICAgVGhpcyBmaWxlIGlzIGdlbmVyYXRlZCBmcm9tIHhtbCBzb3VyY2U6IERPIE5PVCBFRElUCiAgICAgICAgWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFgKICAgICAgLS0+Cjx0aXRsZT5tb2RfbHVhIC0gU2VydmV1ciBBcGFjaGUgSFRUUCBWZXJzaW9uIDIuNDwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4uL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHk+CjxkaXYgaWQ9InBhZ2UtaGVhZGVyIj4KPHAgY2xhc3M9Im1lbnUiPjxhIGhyZWY9Ii4uL21vZC8iPk1vZHVsZXM8L2E+IHwgPGEgaHJlZj0iLi4vbW9kL2RpcmVjdGl2ZXMuaHRtbCI+RGlyZWN0aXZlczwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPkdsb3NzYWlyZTwvYT4gfCA8YSBocmVmPSIuLi9zaXRlbWFwLmh0bWwiPlBsYW4gZHUgc2l0ZTwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPlNlcnZldXIgQXBhY2hlIEhUVFAgVmVyc2lvbiAyLjQ8L3A+CjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2ZlYXRoZXIucG5nIiAvPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ1cCI+PGEgaHJlZj0iLi8iPjxpbWcgdGl0bGU9IiZsdDstIiBhbHQ9IiZsdDstIiBzcmM9Ii4uL2ltYWdlcy9sZWZ0LmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgaWQ9InBhdGgiPgo8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvIj5BcGFjaGU8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvIj5TZXJ2ZXVyIEhUVFA8L2E+ICZndDsgPGEgaHJlZj0iaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8iPkRvY3VtZW50YXRpb248L2E+ICZndDsgPGEgaHJlZj0iLi4vIj5WZXJzaW9uIDIuNDwvYT4gJmd0OyA8YSBocmVmPSIuLyI+TW9kdWxlczwvYT48L2Rpdj4KPGRpdiBpZD0icGFnZS1jb250ZW50Ij4KPGRpdiBpZD0icHJlYW1ibGUiPjxoMT5Nb2R1bGUgQXBhY2hlIG1vZF9sdWE8L2gxPgo8ZGl2IGNsYXNzPSJ0b3BsYW5nIj4KPHA+PHNwYW4+TGFuZ3VlcyBEaXNwb25pYmxlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2RfbHVhLmh0bWwiIGhyZWZsYW5nPSJlbiIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9tb2QvbW9kX2x1YS5odG1sIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPjwvcD4KPC9kaXY+Cjx0YWJsZSBjbGFzcz0ibW9kdWxlIj48dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Gb3Vybml0IGRlcyBwb2ludHMgZCdlbnRy6WUgTHVhIGRhbnMgZGlmZulyZW50ZXMgcGFydGllcyBkdQp0cmFpdGVtZW50IGRlcyByZXF16nRlcyBodHRwZDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJtb2R1bGUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHV0OjwvYT48L3RoPjx0ZD5FeHDpcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNNb2R1bGVJZGVudGlmaWVyIj5JZGVudGlmaWNhdGV1cqBkZaBNb2R1bGU6PC9hPjwvdGg+PHRkPmx1YV9tb2R1bGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0ibW9kdWxlLWRpY3QuaHRtbCNTb3VyY2VGaWxlIj5GaWNoaWVyoFNvdXJjZTo8L2E+PC90aD48dGQ+bW9kX2x1YS5jPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9Im1vZHVsZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl06To8L2E+PC90aD48dGQ+dmVyc2lvbnMgMi4zIGV0IHN1cOlyaWV1cmVzPC90ZD48L3RyPjwvdGFibGU+CjxoMz5Tb21tYWlyZTwvaDM+Cgo8cD5DZSBtb2R1bGUgcGVybWV0IGQnYWpvdXRlciBhdSBzZXJ2ZXVyIGRlcyBleHRlbnNpb25zIHNvdXMgZm9ybWUgZGUKc2NyaXB0cyDpY3JpdHMgZGFucyBsZSBsYW5nYWdlIGRlIHByb2dyYW1tYXRpb24gTHVhLgo8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2x1YS5odG1sIj5tb2RfbHVhPC9hPjwvY29kZT4gZm91cm5pdCBkZSBub21icmV1c2VzIGV4dGVuc2lvbnMKKGhvb2tzKSBkaXNwb25pYmxlcyBhdmVjIGxlcyBtb2R1bGVzIG5hdGlmcyBkdSBzZXJ2ZXVyIEhUVFAgQXBhY2hlLApjb21tZSBsZXMgYXNzb2NpYXRpb25zIGRlIHJlcXXqdGVzIOAgZGVzIGZpY2hpZXJzLCBsYSBn6W7pcmF0aW9uIGRlCnLpcG9uc2VzIGR5bmFtaXF1ZXMsIGxlIGNvbnRy9GxlIGQnYWNj6HMsIGwnYXV0aGVudGlmaWNhdGlvbiBldApsJ2F1dG9yaXNhdGlvbi48L3A+Cgo8cD5Wb3VzIHRyb3V2ZXJleiBkYXZhbnRhZ2UgZCdpbmZvcm1hdGlvbnMg4CBwcm9wb3MgZHUgbGFuZ2FnZSBkZQpwcm9ncmFtbWF0aW9uIEx1YSBzdXIgPGEgaHJlZj0iaHR0cDovL3d3dy5sdWEub3JnLyI+bGUgc2l0ZSB3ZWIgZGUKTHVhPC9hPi48L3A+Cgo8ZGl2IGNsYXNzPSJub3RlIj48Y29kZT5tb2RfbHVhPC9jb2RlPiBlc3QgZW5jb3JlIGF1IHN0YWRlIGV4cOlyaW1lbnRhbC4gU29uIG1vZGUKZCd1dGlsaXNhdGlvbiBldCBzb24gY29tcG9ydGVtZW50IHBvdXJyb250IGNoYW5nZXIg4CB0b3V0IG1vbWVudCBqdXNxdSfgCmNlIHF1J2lsIHBhc3NlIGF1IHN0YWRlIHN0YWJsZSwgZXQgY2UgbeptZSBlbnRyZSBkZXV4IHZlcnNpb25zIHN0YWJsZXMKMi40LnguIE4nb3VibGV6IHBhcyBkZSBjb25zdWx0ZXIgbGUgZmljaGllciBDSEFOR0VTIGF2YW50IHRvdXRlIG1pc2Ug4Apqb3VyLjwvZGl2PgoKPGRpdiBjbGFzcz0id2FybmluZyI+PGgzPkF2ZXJ0aXNzZW1lbnQ8L2gzPgo8cD5DZSBtb2R1bGUgcG9zc+hkZSB1bmUgZ3JhbmRlIGNhcGFjaXTpIGQnYWN0aW9uIHN1ciBsZSBmb25jdHJpb25uZW1lbnQKZGUgaHR0cGQsIGNlIHF1aSBsdWkgY29uZuhyZSB1bmUgZ3JhbmRlIHB1aXNzYW5jZSwgbWFpcyBwZXV0IGF1c3NpCmluZHVpcmUgdW4gcmlzcXVlIGRlIHPpY3VyaXTpLiBJbCBlc3QgZOljb25zZWlsbOkgZCd1dGlsaXNlciBjZSBtb2R1bGUKc3VyIHVuIHNlcnZldXIgcGFydGFn6SBhdmVjIGRlcyB1dGlsaXNhdGV1cnMgYXV4cXVlbHMgdm91cyBuZSBwb3V2ZXogcGFzCmFjY29yZGVyIHVuZSBjb25maWFuY2UgYWJzb2x1ZSwgY2FyIGlsIHBldXQgcGVybWV0dHJlIGRlIG1vZGlmaWVyIGxlCmZvbmN0aW9ubmVtZW50IGludGVybmUgZGUgaHR0cGQuPC9wPgo8L2Rpdj4KCjwvZGl2Pgo8ZGl2IGlkPSJxdWlja3ZpZXciPjxoMz5TdWpldHM8L2gzPgo8dWwgaWQ9InRvcGljcyI+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2Jhc2ljY29uZiI+Q29uZmlndXJhdGlvbiBkZSBiYXNlPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3dyaXRpbmdoYW5kbGVycyI+RWNyaXJlIGRlcyBnZXN0aW9ubmFpcmVzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3dyaXRpbmdhdXRoenByb3ZpZGVycyI+RWNyaXR1cmUgZGUgZm91cm5pc3NldXJzIGQnYXV0b3Jpc2F0aW9uPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI3dyaXRpbmdob29rcyI+RWNyaXR1cmUgZGUgZm9uY3Rpb25zIGQnYWNjcm9jaGUKKGhvb2tzKTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNkYXRhc3RydWN0dXJlcyI+U3RydWN0dXJlcyBkZSBkb25u6WVzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2Z1bmN0aW9ucyI+Tel0aG9kZXMgZGUgbCdvYmpldCByZXF1ZXN0X3JlYzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsb2dnaW5nIj5Gb25jdGlvbnMgZGUgam91cm5hbGlzYXRpb248L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjYXBhY2hlMiI+UGFxdWV0IGFwYWNoZTI8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbW9kaWZ5aW5nX2J1Y2tldHMiPk1vZGlmaWNhdGlvbiBkZSBjb250ZW51IGF2ZWMgbGVzIGZpbHRyZXMgbHVhPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2RhdGFiYXNlcyI+Q29ubmVjdGl2aXTpIGF1eCBiYXNlcyBkZSBkb25u6WVzPC9hPjwvbGk+CjwvdWw+PGgzIGNsYXNzPSJkaXJlY3RpdmVzIj5EaXJlY3RpdmVzPC9oMz4KPHVsIGlkPSJ0b2MiPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsdWFhdXRoenByb3ZpZGVyIj5MdWFBdXRoelByb3ZpZGVyPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YWNvZGVjYWNoZSI+THVhQ29kZUNhY2hlPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YWhvb2thY2Nlc3NjaGVja2VyIj5MdWFIb29rQWNjZXNzQ2hlY2tlcjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsdWFob29rYXV0aGNoZWNrZXIiPkx1YUhvb2tBdXRoQ2hlY2tlcjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsdWFob29rY2hlY2t1c2VyaWQiPkx1YUhvb2tDaGVja1VzZXJJRDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsdWFob29rZml4dXBzIj5MdWFIb29rRml4dXBzPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YWhvb2tpbnNlcnRmaWx0ZXIiPkx1YUhvb2tJbnNlcnRGaWx0ZXI8L2E+PC9saT4KPGxpPjxpbWcgYWx0PSIiIHNyYz0iLi4vaW1hZ2VzL2Rvd24uZ2lmIiAvPiA8YSBocmVmPSIjbHVhaG9va2xvZyI+THVhSG9va0xvZzwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsdWFob29rbWFwdG9zdG9yYWdlIj5MdWFIb29rTWFwVG9TdG9yYWdlPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YWhvb2t0cmFuc2xhdGVuYW1lIj5MdWFIb29rVHJhbnNsYXRlTmFtZTwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsdWFob29rdHlwZWNoZWNrZXIiPkx1YUhvb2tUeXBlQ2hlY2tlcjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsdWFpbmhlcml0Ij5MdWFJbmhlcml0PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YWlucHV0ZmlsdGVyIj5MdWFJbnB1dEZpbHRlcjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsdWFtYXBoYW5kbGVyIj5MdWFNYXBIYW5kbGVyPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YW91dHB1dGZpbHRlciI+THVhT3V0cHV0RmlsdGVyPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YXBhY2thZ2VjcGF0aCI+THVhUGFja2FnZUNQYXRoPC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YXBhY2thZ2VwYXRoIj5MdWFQYWNrYWdlUGF0aDwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsdWFxdWlja2hhbmRsZXIiPkx1YVF1aWNrSGFuZGxlcjwvYT48L2xpPgo8bGk+PGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZG93bi5naWYiIC8+IDxhIGhyZWY9IiNsdWFyb290Ij5MdWFSb290PC9hPjwvbGk+CjxsaT48aW1nIGFsdD0iIiBzcmM9Ii4uL2ltYWdlcy9kb3duLmdpZiIgLz4gPGEgaHJlZj0iI2x1YXNjb3BlIj5MdWFTY29wZTwvYT48L2xpPgo8L3VsPgo8aDM+VHJhaXRlbWVudCBkZXMgYnVnczwvaDM+PHVsIGNsYXNzPSJzZWVhbHNvIj48bGk+PGEgaHJlZj0iaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9kaXN0L2h0dHBkL0NIQU5HRVNfMi40Ij5Kb3VybmFsIGRlcyBtb2RpZmljYXRpb25zIGRlIGh0dHBkPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHBzOi8vYnouYXBhY2hlLm9yZy9idWd6aWxsYS9idWdsaXN0LmNnaT9idWdfc3RhdHVzPV9fb3Blbl9fJmFtcDtsaXN0X2lkPTE0NDUzMiZhbXA7cHJvZHVjdD1BcGFjaGUlMjBodHRwZC0yJmFtcDtxdWVyeV9mb3JtYXQ9c3BlY2lmaWMmYW1wO29yZGVyPWNoYW5nZWRkYXRlJTIwREVTQyUyQ3ByaW9yaXR5JTJDYnVnX3NldmVyaXR5JmFtcDtjb21wb25lbnQ9bW9kX2x1YSI+UHJvYmzobWVzIGNvbm51czwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwczovL2J6LmFwYWNoZS5vcmcvYnVnemlsbGEvZW50ZXJfYnVnLmNnaT9wcm9kdWN0PUFwYWNoZSUyMGh0dHBkLTImYW1wO2NvbXBvbmVudD1tb2RfbHVhIj5TaWduYWxlciB1biBidWc8L2E+PC9saT48L3VsPjxoMz5Wb2lyIGF1c3NpPC9oMz4KPHVsIGNsYXNzPSJzZWVhbHNvIj4KPGxpPjxhIGhyZWY9IiNjb21tZW50c19zZWN0aW9uIj5Db21tZW50YWlyZXM8L2E+PC9saT48L3VsPjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJiYXNpY2NvbmYiIGlkPSJiYXNpY2NvbmYiPkNvbmZpZ3VyYXRpb24gZGUgYmFzZTwvYT48L2gyPgoKPHA+TGEgZGlyZWN0aXZlIGRlIGJhc2UgcG91ciBsZSBjaGFyZ2VtZW50IGR1IG1vZHVsZSBlc3Q8L3A+Cgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+TG9hZE1vZHVsZSBsdWFfbW9kdWxlIG1vZHVsZXMvbW9kX2x1YS5zbzwvcHJlPgoKCjxwPgo8Y29kZT5tb2RfbHVhPC9jb2RlPiBmb3Vybml0IHVuIGdlc3Rpb25uYWlyZSBub21t6Qo8Y29kZT5sdWEtc2NyaXB0PC9jb2RlPiBxdWkgcGV1dCDqdHJlIHV0aWxpc+kgYXZlYyB1bmUgZGlyZWN0aXZlCjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfbWltZS5odG1sI2FkZGhhbmRsZXIiPkFkZEhhbmRsZXI8L2E+PC9jb2RlPiBvdSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI3NldGhhbmRsZXIiPlNldEhhbmRsZXI8L2E+PC9jb2RlPiA6PC9wPgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPiZsdDtGaWxlcyAiKi5sdWEiJmd0OwogICAgU2V0SGFuZGxlciBsdWEtc2NyaXB0CiZsdDsvRmlsZXMmZ3Q7PC9wcmU+CgoKPHA+CkNlY2kgYXVyYSBwb3VyIGVmZmV0IGRlIGZhaXJlIHRyYWl0ZXIgbGVzIHJlcXXqdGVzIHBvdXIgbGVzIGZpY2hpZXJzCmRvbnQgbCdleHRlbnNpb24gZXN0IDxjb2RlPi5sdWE8L2NvZGU+IHBhciA8Y29kZT5tb2RfbHVhPC9jb2RlPiBlbgppbnZvcXVhbnQgY2V0dGUgZm9uY3Rpb24gZGUgPGNvZGU+Z2VzdGlvbjwvY29kZT4gZGUgZmljaGllci4KPC9wPgoKPHA+UG91ciBwbHVzIGRlIGTpdGFpbHMsIHZvaXIgbGEgZGlyZWN0aXZlCjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPkx1YU1hcEhhbmRsZXI8L2NvZGU+LgogPC9wPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJ3cml0aW5naGFuZGxlcnMiIGlkPSJ3cml0aW5naGFuZGxlcnMiPkVjcmlyZSBkZXMgZ2VzdGlvbm5haXJlczwvYT48L2gyPgo8cD5EYW5zIGwnQVBJIGR1IHNlcnZldXIgSFRUUCBBcGFjaGUsIHVuIGdlc3Rpb25uYWlyZSBlc3QgdW5lIHNvcnRlIGRlCnBvaW50IGQnYWNjcm9jaGUgKGhvb2spIHNw6WNpZmlxdWUgcmVzcG9uc2FibGUgZGUgbGEgZ+lu6XJhdGlvbiBkZSBsYQpy6XBvbnNlLiA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX3Byb3h5Lmh0bWwiPm1vZF9wcm94eTwvYT48L2NvZGU+LCA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2NnaS5odG1sIj5tb2RfY2dpPC9hPjwvY29kZT4gZXQKPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9zdGF0dXMuaHRtbCI+bW9kX3N0YXR1czwvYT48L2NvZGU+IHNvbnQgZGVzIGV4ZW1wbGVzIGRlIG1vZHVsZXMgY29tcG9ydGFudCB1bgpnZXN0aW9ubmFpcmUuPC9wPgoKPHA+PGNvZGU+bW9kX2x1YTwvY29kZT4gY2hlcmNoZSB0b3Vqb3VycyDgIGludm9xdWVyIHVuZSBmb25jdGlvbiBMdWEgcG91ciBsZQpnZXN0aW9ubmFpcmUsIHBsdXT0dCBxdWUgZGUgc2ltcGxlbWVudCDpdmFsdWVyIGxlIGNvcnBzIGQndW4gc2NyaXB0IGRhbnMKbGUgc3R5bGUgZGUgQ0dJLiBVbmUgZm9uY3Rpb24gZGUgZ2VzdGlvbm5haXJlIHNlIHBy6XNlbnRlIGNvbW1lIHN1aXQgOjwvcD4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+CjxzdHJvbmc+ZXhhbXBsZS5sdWE8L3N0cm9uZz48YnIgLz4KLS0gZXhlbXBsZSBkZSBnZXN0aW9ubmFpcmUKCnJlcXVpcmUgInN0cmluZyIKCi0tW1sKICAgICBJbCBzJ2FnaXQgZHUgbm9tIGRlIG3pdGhvZGUgcGFyIGTpZmF1dCBwb3VyIGxlcyBnZXN0aW9ubmFpcmVzIEx1YSA7CiAgICAgdm9pciBsZXMgbm9tcyBkZSBmb25jdGlvbnMgb3B0aW9ubmVscyBkYW5zIGxhIGRpcmVjdGl2ZQogICAgIEx1YU1hcEhhbmRsZXIgcG91ciBjaG9pc2lyIHVuIHBvaW50IGQnZW50cullIGRpZmbpcmVudC4KLS1dXQpmdW5jdGlvbiBoYW5kbGUocikKICAgIHIuY29udGVudF90eXBlID0gInRleHQvcGxhaW4iCgogICAgaWYgci5tZXRob2QgPT0gJ0dFVCcgdGhlbgogICAgCXI6cHV0cygiSGVsbG8gTHVhIFdvcmxkIVxuIikKICAgICAgICBmb3IgaywgdiBpbiBwYWlycyggcjpwYXJzZWFyZ3MoKSApIGRvCiAgICAgICAgICAgIHI6cHV0cyggc3RyaW5nLmZvcm1hdCgiJXM6ICVzXG4iLCBrLCB2KSApCiAgICAgICAgZW5kCiAgICBlbHNlaWYgci5tZXRob2QgPT0gJ1BPU1QnIHRoZW4KICAgIAlyOnB1dHMoIkhlbGxvIEx1YSBXb3JsZCFcbiIpCiAgICAgICAgZm9yIGssIHYgaW4gcGFpcnMoIHI6cGFyc2Vib2R5KCkgKSBkbwogICAgICAgICAgICByOnB1dHMoIHN0cmluZy5mb3JtYXQoIiVzOiAlc1xuIiwgaywgdikgKQogICAgICAgIGVuZAogICAgZWxzZQogICAgZWxzZWlmIHIubWV0aG9kID09ICdQVVQnIHRoZW4KLS0gbWVzc2FnZSBkJ2VycmV1ciBwZXJzb25uYWxpc+kKICAgICAgICByOnB1dHMoIlVuc3VwcG9ydGVkIEhUVFAgbWV0aG9kICIgLi4gci5tZXRob2QpCglyLnN0YXR1cyA9IDQwNQogICAgICAgIHJldHVybiBhcGFjaGUyLk9LCiAgICBlbHNlCi0tIG1lc3NhZ2UgZCdlcnJldXIgRXJyb3JEb2N1bWVudAogICAgICAgIHJldHVybiA1MDEKICAgIGVuZAogICAgcmV0dXJuIGFwYWNoZTIuT0sKZW5kPC9wcmU+CgoKPHA+CkNlIGdlc3Rpb25uYWlyZSBzZSBjb250ZW50ZSBkJ2FmZmljaGVyIGxlcyBhcmd1bWVudHMgY29k6XMgZCd1biB1cmkgb3UKZCd1biBmb3JtdWxhaXJlIGRhbnMgdW4gcGFnZSBhdSBmb3JtYXQgdGV4dGUuCjwvcD4KCjxwPgpDZWxhIHNpZ25pZmllIHF1ZSB2b3VzIHBvdXZleiAoZXQg6nRlcyBlbmNvdXJhZ+kg4CkgYXZvaXIgcGx1c2lldXJzCmdlc3Rpb25uYWlyZXMgKG91IHBvaW50cyBkJ2VudHLpZSwgb3UgZmlsdHJlcykgZGFucyBsZSBt6m1lIHNjcmlwdC4KPC9wPgoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0id3JpdGluZ2F1dGh6cHJvdmlkZXJzIiBpZD0id3JpdGluZ2F1dGh6cHJvdmlkZXJzIj5FY3JpdHVyZSBkZSBmb3Vybmlzc2V1cnMgZCdhdXRvcmlzYXRpb248L2E+PC9oMj4KCgo8cD48Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2NvcmUuaHRtbCI+bW9kX2F1dGh6X2NvcmU8L2E+PC9jb2RlPiBmb3Vybml0IHVuZSBpbnRlcmZhY2UgZCdhdXRvcmlzYXRpb24KZGUgaGF1dCBuaXZlYXUgYmllbiBwbHVzIGZhY2lsZSDgIHV0aWxpc2VyIHF1ZSBkYW5zIGxlcyBob29rcwpjb3JyZXNwb25kYW50cy4gTGUgcHJlbWllciBhcmd1bWVudCBkZSBsYSBkaXJlY3RpdmUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoel9jb3JlLmh0bWwjcmVxdWlyZSI+UmVxdWlyZTwvYT48L2NvZGU+IHBlcm1ldCBkZSBzcOljaWZpZXIgbGUKZm91cm5pc3NldXIgZCdhdXRvcmlzYXRpb24g4CB1dGlsaXNlci4gUG91ciBjaGFxdWUgZGlyZWN0aXZlIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfY29yZS5odG1sI3JlcXVpcmUiPlJlcXVpcmU8L2E+PC9jb2RlPiwKPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoel9jb3JlLmh0bWwiPm1vZF9hdXRoel9jb3JlPC9hPjwvY29kZT4gYXBwZWxsZXJhIGxlIGZvdXJuaXNzZXVyIGQnYXV0b3Jpc2F0aW9uCnNw6WNpZmnpLCBsZSByZXN0ZSBkZSBsYSBsaWduZSBjb25zdGl0dWFudCBsZXMgcGFyYW3odHJlcy4gTGUKZm91cm5pc3NldXIgY29uc2lk6XLpIHZhIGFsb3JzIHbpcmlmaWVyIGxlcyBhdXRvcmlzYXRpb25zIGV0IGZvdXJuaXIgbGUKculzdWx0YXQgZGFucyB1bmUgdmFsZXVyIGRlIHJldG91ci48L3A+Cgo8cD5FbiBn6W7pcmFsLCBsZSBmb3Vybmlzc2V1ciBhdXRoeiBlc3QgYXBwZWzpIGF2YW50IGwnYXV0aGVudGlmaWNhdGlvbi4KUydpbCBkb2l0IGNvbm5h7nRyZSBsZSBub20gZCd1dGlsaXNhdGV1ciBhdXRoZW50aWZp6SAob3Ugc2kKbCd1dGlsaXNhdGV1ciBlc3QgYXBwZWzpIOAg6nRyZSBhdXRoZW50aWZp6SksIGxlIGZvdXJuaXNzZXVyIGRvaXQKcmVudm95ZXIgPGNvZGU+YXBhY2hlMi5BVVRIWl9ERU5JRURfTk9fVVNFUjwvY29kZT4sIGNlIHF1aSB2YQpk6WNsYW5jaGVyIGxlIHByb2Nlc3N1cyBkJ2F1dGhlbnRpZmljYXRpb24gZXQgdW4gZGV1eGnobWUgYXBwZWwgZHUKZm91cm5pc3NldXIgYXV0aHouPC9wPgoKPHA+TGEgZm9uY3Rpb24gZHUgZm91cm5pc3NldXIgYXV0aHogY2ktZGVzc291cyBhY2NlcHRlIGRldXggYXJndW1lbnRzLAp1bmUgYWRyZXNzZSBJUCBldCB1biBub20gZCd1dGlsaXNhdGV1ci4gRWxsZSBhdXRvcmlzZSBsJ2FjY+hzIGRhbnMgbGUKY2FzIG/5IGxhIHJlcXXqdGUgcHJvdmllbnQgZGUgbCdhZHJlc3NlIElQIHNw6WNpZmnpZSwgb3Ugc2kKbCd1dGlsaXNhdGV1ciBhdXRoZW50aWZp6SBjb3JyZXNwb25kIGF1IHNlY29uZCBhcmd1bWVudCA6PC9wPgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPgo8c3Ryb25nPmF1dGh6X3Byb3ZpZGVyLmx1YTwvc3Ryb25nPjxiciAvPgoKcmVxdWlyZSAnYXBhY2hlMicKCmZ1bmN0aW9uIGF1dGh6X2NoZWNrX2ZvbyhyLCBpcCwgdXNlcikKICAgIGlmIHIudXNlcmFnZW50X2lwID09IGlwIHRoZW4KICAgICAgICByZXR1cm4gYXBhY2hlMi5BVVRIWl9HUkFOVEVECiAgICBlbHNlaWYgci51c2VyID09IG5pbCB0aGVuCiAgICAgICAgcmV0dXJuIGFwYWNoZTIuQVVUSFpfREVOSUVEX05PX1VTRVIKICAgIGVsc2VpZiByLnVzZXIgPT0gdXNlciB0aGVuCiAgICAgICAgcmV0dXJuIGFwYWNoZTIuQVVUSFpfR1JBTlRFRAogICAgZWxzZQogICAgICAgIHJldHVybiBhcGFjaGUyLkFVVEhaX0RFTklFRAogICAgZW5kCmVuZDwvcHJlPgoKCjxwPkxhIGNvbmZpZ3VyYXRpb24gc3VpdmFudGUgZW5yZWdpc3RyZSBjZXR0ZSBmb25jdGlvbiBlbiB0YW50IHF1ZQpmb3Vybmlzc2V1ciA8Y29kZT5mb288L2NvZGU+LCBldCBsYSBjb25maWd1cmUgcG9yIGwnVVJMIDxjb2RlPi88L2NvZGU+IDo8L3A+CjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5MdWFBdXRoelByb3ZpZGVyIGZvbyBhdXRoel9wcm92aWRlci5sdWEgYXV0aHpfY2hlY2tfZm9vCiZsdDtMb2NhdGlvbiAiLyImZ3Q7CiAgUmVxdWlyZSBmb28gMTAuMS4yLjMgam9obl9kb2UKJmx0Oy9Mb2NhdGlvbiZndDs8L3ByZT4KCgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJ3cml0aW5naG9va3MiIGlkPSJ3cml0aW5naG9va3MiPkVjcml0dXJlIGRlIGZvbmN0aW9ucyBkJ2FjY3JvY2hlCihob29rcyk8L2E+PC9oMj4KCjxwPkxlcyBmb25jdGlvbnMgZCdhY2Nyb2NoZSBk6XRlcm1pbmVudCBsYSBtYW5p6HJlIGRvbnQgbGVzIG1vZHVsZXMgKGV0CmxlcyBzY3JpcHRzIEx1YSkgcGFydGljaXBlbnQgYXUgdHJhaXRlbWVudCBkZXMgcmVxdep0ZXMuIENoYXF1ZSB0eXBlCmQnYWNjcm9jaGUgcHJvcG9z6SBwYXIgbGUgc2VydmV1ciBhIHVuIHL0bGUgc3DpY2lmaXF1ZSwgY29tbWUKbCdhc3NvY2lhdGlvbiBkZSByZXF16nRlcyBhdSBzeXN06G1lIGRlIGZpY2hpZXJzLCBsZSBjb250cvRsZSBkJ2FjY+hzLApvdSBsYSBk6WZpbml0aW9uIGRlIHR5cGVzIE1JTUUgOiA8L3A+Cgo8dGFibGUgY2xhc3M9ImJvcmRlcmVkIj48dHIgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgPHRoPlBoYXNlIGQnYWNjcm9jaGU8L3RoPgogICAgICAgIDx0aD5EaXJlY3RpdmUgbW9kX2x1YTwvdGg+CiAgICAgICAgPHRoPkRlc2NyaXB0aW9uPC90aD4KICAgIDwvdHI+Cjx0cj4KICAgICAgICA8dGQ+R2VzdGlvbm5haXJlIHJhcGlkZTwvdGQ+CiAgICAgICAgPHRkPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsdWFxdWlja2hhbmRsZXIiPkx1YVF1aWNrSGFuZGxlcjwvYT48L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+SWwgcydhZ2l0IGRlIGxhIHByZW1p6HJlIGFjY3JvY2hlIGFwcGVs6WUgbG9yc3F1J3VuZSByZXF16nRlCglhIOl06SBhc3NvY2npZSDgIHVuIHNlcnZldXIgb3UgdW4gc2VydmV1ciB2aXJ0dWVsLjwvdGQ+CiAgICA8L3RyPgo8dHIgY2xhc3M9Im9kZCI+CiAgICAgICAgPHRkPlBoYXNlIGRlIHRyYWR1Y3Rpb248L3RkPgogICAgICAgIDx0ZD48Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIjbHVhaG9va3RyYW5zbGF0ZW5hbWUiPkx1YUhvb2tUcmFuc2xhdGVOYW1lPC9hPjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5DZXR0ZSBwaGFzZSB0cmFkdWl0IGwnVVJJIGRlIGxhIHJlcXXqdGUgZW4gbm9tIGRlIGZpY2hpZXIKCXN1ciBsZSBzeXN06G1lLiBDZSBzb250IGRlcyBtb2R1bGVzIGNvbW1lCgk8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2FsaWFzLmh0bWwiPm1vZF9hbGlhczwvYT48L2NvZGU+IGV0IDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfcmV3cml0ZS5odG1sIj5tb2RfcmV3cml0ZTwvYT48L2NvZGU+IHF1aQoJaW50ZXJ2aWVubmVudCBhdSBjb3VycyBkZSBjZXR0ZSBwaGFzZS48L3RkPgogICAgPC90cj4KPHRyPgogICAgICAgIDx0ZD5DaG9peCBkdSBsaWV1IGRlIHN0b2NrYWdlIGRlIGxhIHJlc3NvdXJjZTwvdGQ+CiAgICAgICAgPHRkPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsdWFob29rbWFwdG9zdG9yYWdlIj5MdWFIb29rTWFwVG9TdG9yYWdlPC9hPjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5DZXR0ZSBwaGFzZSBk6WZpbml0IGxlIGxpZXUgZGUgc3RvY2thZ2UgZGUgbGEgcmVzc291cmNlIDoKCXBoeXNpcXVlLCBlbiBjYWNoZSBvdSBleHRlcm5lL21hbmRhdOkuIEVsbGUgZXN0IGFzc3Vy6WUgcGFyIGxlcwoJbW9kdWxlcyBkZSBtYW5kYXQgb3UgZGUgbWlzZSBlbiBjYWNoZS48L3RkPgogICAgPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgIDx0ZD5BdXRvcmlzYXRpb24gZCdhY2PoczwvdGQ+CiAgICAgICAgPHRkPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsdWFob29rYWNjZXNzY2hlY2tlciI+THVhSG9va0FjY2Vzc0NoZWNrZXI8L2E+PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkNldHRlIHBoYXNlIHbpcmlmaWUgc2kgdW4gY2xpZW50IGEgbCdhdXRvcmlzYXRpb24gZCdhY2PocyDgCglsYSByZXNzb3VyY2UuIEVsbGUgcydleOljdXRlIGF2YW50IGwnYXV0aGVudGlmaWNhdGlvbiBkZQoJbCd1dGlzYXRldXIgOyBpbCBmYXV0IGRvbmMg6nRyZSBwcnVkZW50LgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgo8dHI+CiAgICAgICAgPHRkPlbpcmlmaWNhdGlvbiBkZSBsJ2lkZW50aWZpYW50IHV0aWxpc2F0ZXVyPC90ZD4KICAgICAgICA8dGQ+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2x1YWhvb2tjaGVja3VzZXJpZCI+THVhSG9va0NoZWNrVXNlcklEPC9hPjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5DZXR0ZSBwaGFzZSB26XJpZmllIGwnaWRlbnRpZmlhbnQgZGUgbCd1dGlsaXNhdGV1ciBheWFudAoJZmFpdCBsJ29iamV0IGQndW5lIG7pZ29jaWF0aW9uLjwvdGQ+CiAgICA8L3RyPgo8dHIgY2xhc3M9Im9kZCI+CiAgICAgICAgPHRkPlbpcmlmaWNhdGlvbiBkZSBsJ2F1dG9yaXNhdGlvbiBkJ2FjY+hzPC90ZD4KICAgICAgICA8dGQ+PGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2x1YWhvb2thdXRoY2hlY2tlciI+THVhSG9va0F1dGhDaGVja2VyPC9hPjwvY29kZT4KCW91CiAgICAgICAgICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsdWFhdXRoenByb3ZpZGVyIj5MdWFBdXRoelByb3ZpZGVyPC9hPjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5DZXR0ZSBwaGFzZSB26XJpZmllIGwnYXV0b3Jpc2F0aW9uIGQnYWNj6HMgZCd1biB1dGlsaXNhdGV1cgoJZW4gZm9uY3Rpb24gZGVzIHNlcyBwYXJhbeh0cmVzIGRlIGNvbm5leGlvbiwgY29tbWUKCWwnaWRlbnRpZmlhbnQsIGxlIGNlcnRpZmljYXQsIGV0Yy4uLgogICAgICAgIDwvdGQ+CiAgICA8L3RyPgo8dHI+CiAgICAgICAgPHRkPlbpcmlmaWNhdGlvbiBkdSB0eXBlIGRlIGxhIHJlc3NvdXJjZTwvdGQ+CiAgICAgICAgPHRkPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsdWFob29rdHlwZWNoZWNrZXIiPkx1YUhvb2tUeXBlQ2hlY2tlcjwvYT48L2NvZGU+PC90ZD4KICAgICAgICA8dGQ+Q2V0dGUgcGhhc2UgYXNzaWduZSB1biB0eXBlIGRlIGNvbnRlbnUgZXQgdW4gZ2VzdGlvbm5haXJlIOAKCWxhIHJlc3NvdXJjZS48L3RkPgogICAgPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgIDx0ZD5EZXJuaWVycyBy6WdsYWdlczwvdGQ+CiAgICAgICAgPHRkPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsdWFob29rZml4dXBzIj5MdWFIb29rRml4dXBzPC9hPjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5DJ2VzdCBsYSBkZXJuaehyZSBwaGFzZSBhdmFudCBsJ2FjdGl2YXRpb24gZGVzIGdlc3Rpb25uYWlyZXMKCWRlIGNvbnRlbnUuIFRvdXRlIG1vZGlmaWNhdGlvbiBkZSBkZXJuaehyZSBtaW51dGUg4CBsYSByZXF16nRlCglkb2l0IOp0cmUgZWZmZWN0dellIGljaS48L3RkPgogICAgPC90cj4KPHRyPgogICAgICAgIDx0ZD5HZXN0aW9ubmFpcmUgZGUgY29udGVudTwvdGQ+CiAgICAgICAgPHRkPmZpY2hpZXJzIGZ4LiA8Y29kZT4ubHVhPC9jb2RlPiBvdSBkaXJlY3RpdmUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2x1YW1hcGhhbmRsZXIiPkx1YU1hcEhhbmRsZXI8L2E+PC9jb2RlPjwvdGQ+CiAgICAgICAgPHRkPkMnZXN0IGR1cmFudCBjZXR0ZSBwaGFzZSBxdWUgbGUgY29udGVudSBlc3QgdHJhaXTpLiBMZXMKCWZpY2hpZXJzIHNvbnQgbHVzLCBpbnRlcnBy6XTpcywgY2VydGFpbnMgc29udCBleOljdXTpcywgZXQgbGUKCXLpc3VsdGF0IG9idGVudSBlc3QgZW52b3npIGF1IGNsaWVudC48L3RkPgogICAgPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgIDx0ZD5Kb3VybmFsaXNhdGlvbjwvdGQ+CiAgICAgICAgPHRkPjxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsdWFob29rbG9nIj5MdWFIb29rTG9nPC9hPjwvY29kZT48L3RkPgogICAgICAgIDx0ZD5Mb3JzcXUndW5lIHJlcXXqdGUgYSDpdOkgdHJhaXTpZSwgcGx1c2lldXJzIHBoYXNlcyBkZQoJam91cm5hbGlzYXRpb24gaW50ZXJ2aWVubmVudCwgZXQgZW5yZWdpc3RyZW50IGxldXJzIHLpc3VsdGF0cwoJZGFucyBsZXMgZmljaGllcnMgZCdlcnJldXIgb3UgZCdhY2Pocy4gTW9kX2x1YSBwZXV0CglzJ2ludGVyY2FsZXIgYXUgZOlwYXJ0IGRlIGNlIHByb2Nlc3N1cyBldCBhaW5zaSBjb250cvRsZXIgbGEKCWpvdXJuYWxpc2F0aW9uLjwvdGQ+CiAgICA8L3RyPgo8L3RhYmxlPgoKPHA+TGVzIGZvbmN0aW9ucyBkJ2FjY3JvY2hlIHJl529pdmVudCBsJ29iamV0IGRlIGxhIHJlcXXqdGUgY29tbWUgc2V1bAphcmd1bWVudCAoc2F1ZiBMdWFBdXRoelByb3ZpZGVyIHF1aSByZedvaXQgYXVzc2kgZGVzIGFyZ3VtZW50cyBlbgpwcm92ZW5hbmNlIGRlIGxhIGRpcmVjdGl2ZSBSZXF1aXJlKS4gRWxsZXMgcGV1dmVudCByZW52b3llciB1bmUgdmFsZXVyLApzZWxvbiBsYSBmb25jdGlvbiwgbWFpcyBpbCBzJ2FnaXQgZW4gZ+lu6XJhbCBkJ3VuCmNvZGUgZCfpdGF0IEhUVFAgb3UgZGVzIHZhbGV1cnMgT0ssIERPTkUsIG91IERFQ0xJTkVELApxdWUgdm91cyBwb3V2ZXog6WNyaXJlIGRhbnMgTHVhIHNvdXMgbGEgZm9ybWUgPGNvZGU+YXBhY2hlMi5PSzwvY29kZT4sCjxjb2RlPmFwYWNoZTIuRE9ORTwvY29kZT4sIG91IDxjb2RlPmFwYWNoZTIuREVDTElORUQ8L2NvZGU+LjwvcD4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+CjxzdHJvbmc+dHJhbnNsYXRlX25hbWUubHVhPC9zdHJvbmc+PGJyIC8+Ci0tIGV4ZW1wbGUgZCdhY2Nyb2NoZSBxdWkgcunpY3JpdCB1biBVUkkgZW4gY2hlbWluIGR1IHN5c3TobWUgZGUgZmljaGllcnMuCgpyZXF1aXJlICdhcGFjaGUyJwoKZnVuY3Rpb24gdHJhbnNsYXRlX25hbWUocikKICAgIGlmIHIudXJpID09ICIvdHJhbnNsYXRlLW5hbWUiIHRoZW4KICAgICAgICByLmZpbGVuYW1lID0gci5kb2N1bWVudF9yb290IC4uICIvZmluZF9tZS50eHQiCiAgICAgICAgcmV0dXJuIGFwYWNoZTIuT0sKICAgIGVuZAogICAgLS0gb24gbmUgZ+hyZSBwYXMgY2V0dGUgVVJMIGV0IG9uIGRvbm5lIHNhIGNoYW5jZSDgIHVuIGF1dHJlIG1vZHVsZQogICAgcmV0dXJuIGFwYWNoZTIuREVDTElORUQKZW5kPC9wcmU+CgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj4KPHN0cm9uZz50cmFuc2xhdGVfbmFtZTIubHVhPC9zdHJvbmc+PGJyIC8+Ci0tW1sgZXhlbXBsZSBkJ2FjY3JvY2hlIHF1aSBy6eljcml0IHVuIFVSSSB2ZXJzIHVuIGF1dHJlIFVSSS4gSWwgcmVudm9pZQoJdW4gYXBhY2hlMi5ERUNMSU5FRCBwb3VyIHBlcm1ldHRyZSDgIHVuIGF1dHJlIGludGVycHLpdGV1ciBkJ1VSTCBkZQoJdHJhdmFpbGxlciBzdXIgbGEgc3Vic3RpdHV0aW9uLCB5IGNvbXByaXMgbCdhY2Nyb2NoZSB0cmFuc2xhdGVfbmFtZQoJZGUgYmFzZSBkb250IGxlcyB0YWJsZXMgZGUgY29ycmVzcG9uZGFuY2VzIHNlIGJhc2VudCBzdXIgRG9jdW1lbnRSb290LgoKICAgICBOb3RlOiB1dGlsaXNleiBsZSBkcmFwZWF1IGVhcmx5L2xhdGUgZGUgbGEgZGlyZWN0aXZlIHBvdXIKICAgICBsJ2V46WN1dGVyIGF2YW50IG91IGFwcuhzIG1vZF9hbGlhcy4KLS1dXQoKcmVxdWlyZSAnYXBhY2hlMicKCmZ1bmN0aW9uIHRyYW5zbGF0ZV9uYW1lKHIpCiAgICBpZiByLnVyaSA9PSAiL3RyYW5zbGF0ZS1uYW1lIiB0aGVuCiAgICAgICAgci51cmkgPSAiL2ZpbmRfbWUudHh0IgogICAgICAgIHJldHVybiBhcGFjaGUyLkRFQ0xJTkVECiAgICBlbmQKICAgIHJldHVybiBhcGFjaGUyLkRFQ0xJTkVECmVuZDwvcHJlPgoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZGF0YXN0cnVjdHVyZXMiIGlkPSJkYXRhc3RydWN0dXJlcyI+U3RydWN0dXJlcyBkZSBkb25u6WVzPC9hPjwvaDI+Cgo8ZGw+CjxkdD5yZXF1ZXN0X3JlYzwvZHQ+CiAgICAgICAgPGRkPgogICAgICAgIDxwPnJlcXVlc3RfcmVjIGVzdCBjb25zaWTpcullIGVuIHRhbnQgcXVlIGRvbm7pZSB1dGlsaXNhdGV1ci4KCUVsbGUgcG9zc+hkZSB1bmUgbel0YXRhYmxlIHF1aSB2b3VzIHBlcm1ldCBkJ2FjY29tcGxpciBkZXMKCWNob3NlcyBpbnTpcmVzc2FudGVzLiBQb3VyIGxhIHBsdXMgZ3JhbmRlIHBhcnRpZSwgZWxsZSBwb3Nz6GRlCglsZXMgbeptZXMgY2hhbXBzIHF1ZSBsYSBzdHJ1Y3R1cmUgcmVxdWVzdF9yZWMsIGxhCglwbHVwYXJ0IGQnZW50cmUgZXV4IOl0YW50IGFjY2Vzc2libGVzIGVuIGxlY3R1cmUgZXQg6WNyaXR1cmUgKGxlCgljb250ZW51IGRlcyBjaGFtcHMgZGUgbGEgdGFibGUgcGV1dCDqdHJlIG1vZGlmaeksIG1haXMgbGVzCgljaGFtcHMgZXV4LW3qbWVzIG5lIHBldXZlbnQgcGFzIOp0cmUg6XRhYmxpcyBlbiB0YW50IHF1ZSB0YWJsZXMKCWRpc3RpbmN0ZXMpLjwvcD4KCgk8dGFibGUgY2xhc3M9ImJvcmRlcmVkIj48dHIgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8dGg+PHN0cm9uZz5Ob208L3N0cm9uZz48L3RoPgogICAgICAgICAgPHRoPjxzdHJvbmc+VHlwZSBMdWE8L3N0cm9uZz48L3RoPgogICAgICAgICAgPHRoPjxzdHJvbmc+TW9kaWZpYWJsZTwvc3Ryb25nPjwvdGg+CgkgIDx0aD48c3Ryb25nPkRlc2NyaXB0aW9uPC9zdHJvbmc+PC90aD4KICAgICAgICA8L3RyPgo8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+YWxsb3dvdmVycmlkZXM8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPm5vbjwvdGQ+CiAgICAgICAgICA8dGQ+TCdvcHRpb24gQWxsb3dPdmVycmlkZSBzJ2FwcGxpcXVlIOAgbGEgcmVxdep0ZSBjb3VyYW50ZS48L3RkPgogICAgICAgIDwvdHI+Cjx0ciBjbGFzcz0ib2RkIj4KICAgICAgICAgIDx0ZD48Y29kZT5hcF9hdXRoX3R5cGU8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPm5vbjwvdGQ+CgkgIDx0ZD5DZSBjaGFtcCBjb250aWVudCBsZSB0eXBlIGQnYXV0aGVudGlmaWNhdGlvbiBlZmZlY3R16WUKCSAgKHBhciBleGVtcGxlIDxjb2RlPmJhc2ljPC9jb2RlPik8L3RkPgogICAgICAgIDwvdHI+Cjx0cj4KICAgICAgICAgIDx0ZD48Y29kZT5hcmdzPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+c3RyaW5nPC90ZD4KICAgICAgICAgIDx0ZD5vdWk8L3RkPgoJICA8dGQ+TGEgY2hh7m5lIGRlIHBhcmFt6HRyZXMgZGUgbGEgcmVxdep0ZSAocGFyIGV4ZW1wbGUKCSAgPGNvZGU+Zm9vPWJhciZhbXA7bmFtZT1qb2huc21pdGg8L2NvZGU+KTwvdGQ+CiAgICAgICAgPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgICAgPHRkPjxjb2RlPmFzc2JhY2t3YXJkczwvY29kZT48L3RkPgogICAgICAgICAgPHRkPmJvb2xlYW48L3RkPgogICAgICAgICAgPHRkPm5vbjwvdGQ+CgkgIDx0ZD5jb250aWVudCB0cnVlIHMnaWwgcydhZ2l0IGQndW5lIHJlcXXqdGUgZGUgc3R5bGUgSFRUUC8wLjkKCSAgKHBhciBleGVtcGxlIDxjb2RlPkdFVCAvZm9vPC9jb2RlPiAoc2FucyBjaGFtcHMgZCdlbi106nRlKSApPC90ZD4KICAgICAgICA8L3RyPgo8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+YXV0aF9uYW1lPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+c3RyaW5nPC90ZD4KICAgICAgICAgIDx0ZD5ub248L3RkPgogICAgICAgICAgPHRkPkxhIGNoYe5uZSBkJ2lkZW50aWZpY2F0aW9uIHV0aWxpc+llIHBvdXIgbGEgdulyaWZpY2F0aW9uCgkgIGRlIGwnYXV0b3Jpc2F0aW9uIGQnYWNj6HMgKHNpIGVsbGUgZXN0IGRpc3BvbmlibGUpLjwvdGQ+CiAgICAgICAgPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgICAgPHRkPjxjb2RlPmJhbm5lcjwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm9uPC90ZD4KICAgICAgICAgIDx0ZD5MYSBiYW5uaehyZSBkdSBzZXJ2ZXVyLCBwYXIgZXhlbXBsZSA8Y29kZT5BcGFjaGUgSFRUUAoJICBTZXJ2ZXIvMi40LjMgb3BlbnNzbC8wLjkuOGM8L2NvZGU+PC90ZD4KICAgICAgICA8L3RyPgo8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+YmFzaWNfYXV0aF9wdzwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm9uPC90ZD4KICAgICAgICAgIDx0ZD5MZSBtb3QgZGUgcGFzc2UgcG91ciBsJ2F1dGhlbnRpZmljYXRpb24gZGUgYmFzZSBlbnZveekKCSAgYXZlYyBsYSByZXF16nRlLCBzJ2lsIGV4aXN0ZTwvdGQ+CiAgICAgICAgPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgICAgPHRkPjxjb2RlPmNhbm9uaWNhbF9maWxlbmFtZTwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm9uPC90ZD4KCSAgPHRkPkxlIG5vbSBkZSBmaWNoaWVyIGNhbm9uaXF1ZSBkZSBsYSByZXF16nRlPC90ZD4KICAgICAgICA8L3RyPgo8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+Y29udGVudF9lbmNvZGluZzwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm9uPC90ZD4KCSAgPHRkPkxlIHR5cGUgZGUgY29kYWdlIGR1IGNvbnRlbnUgZGUgbGEgcmVxdep0ZSBjb3VyYW50ZTwvdGQ+CiAgICAgICAgPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgICAgPHRkPjxjb2RlPmNvbnRlbnRfdHlwZTwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+b3VpPC90ZD4KCSAgPHRkPkxlIHR5cGUgZGUgY29udGVudSBkZSBsYSByZXF16nRlIGNvdXJhbnRlLCB0ZWwgcXUnaWwgYSDpdOkKCSAgZOl0ZXJtaW7pIGF1IGNvdXJzIGRlIGxhIHBoYXNlIHR5cGVfY2hlY2sgKHBhciBleGVtcGxlCgkgIDxjb2RlPmltYWdlL2dpZjwvY29kZT4gb3UgPGNvZGU+dGV4dC9odG1sPC9jb2RlPik8L3RkPgogICAgICAgIDwvdHI+Cjx0cj4KICAgICAgICAgIDx0ZD48Y29kZT5jb250ZXh0X3ByZWZpeDwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm9uPC90ZD4KCSAgPHRkIC8+CiAgICAgICAgPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgICAgPHRkPjxjb2RlPmNvbnRleHRfZG9jdW1lbnRfcm9vdDwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm9uPC90ZD4KCSAgPHRkIC8+CiAgICAgICAgPC90cj4KPHRyPgogICAgICAgICAgPHRkPjxjb2RlPmRvY3VtZW50X3Jvb3Q8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPm5vbjwvdGQ+CgkgIDx0ZD5MYSByYWNpbmUgZGVzIGRvY3VtZW50cyBkdSBzZXJ2ZXVyPC90ZD4KICAgICAgICA8L3RyPgo8dHIgY2xhc3M9Im9kZCI+CiAgICAgICAgICA8dGQ+PGNvZGU+ZXJyX2hlYWRlcnNfb3V0PC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+dGFibGU8L3RkPgogICAgICAgICAgPHRkPm5vbjwvdGQ+CgkgIDx0ZD5MJ2VuLXTqdGUgTUlNRSBkZSBsJ2Vudmlyb25uZW1lbnQgcG91ciBsYSBy6XBvbnNlLCDpY3JpdAoJICBt6m1lIGVuIGNhcyBkJ2VycmV1ciBldCBjb25zZXJ26SBwZW5kYW50IGxlcyByZWRpcmVjdGlvbnMKCSAgaW50ZXJuZXM8L3RkPgogICAgICAgIDwvdHI+Cjx0cj4KICAgICAgICAgIDx0ZD48Y29kZT5maWxlbmFtZTwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+b3VpPC90ZD4KCSAgPHRkPkxlIG5vbSBkZSBmaWNoaWVyIGNvcnJlc3BvbmRhbnQg4CBsYSByZXF16nRlLCBwYXIgZXhlbXBsZQoJICAvd3d3L2V4YW1wbGUuY29tL2Zvby50eHQuIElsIHBldXQg6nRyZSBtb2RpZmnpIGF1IGNvdXJzIGRlcwoJICBwaGFzZXMgdHJhbnNsYXRlLW5hbWUgb3UgbWFwLXRvLXN0b3JhZ2UgZHUgdHJhaXRlbWVudCBkZSBsYQoJICByZXF16nRlIHBvdXIgcGVybWV0dHJlIGF1IGdlc3Rpb25uYWlyZSBwYXIgZOlmYXV0IChvdSBhdXgKCSAgZ2VzdGlvbm5haXJlcyBkZSBzY3JpcHQpIGRlIHNlcnZpciB1bmUgdmVyc2lvbiBkdSBmaWNoaWVyCgkgIGF1dHJlIHF1ZSBjZWxsZSBkZW1hbmTpZS48L3RkPgogICAgICAgIDwvdHI+Cjx0ciBjbGFzcz0ib2RkIj4KICAgICAgICAgIDx0ZD48Y29kZT5oYW5kbGVyPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+c3RyaW5nPC90ZD4KICAgICAgICAgIDx0ZD5vdWk8L3RkPgoJICA8dGQ+TGUgbm9tIGR1IDxhIGhyZWY9Ii4uL2hhbmRsZXIuaHRtbCI+Z2VzdGlvbm5haXJlPC9hPiBxdWkKCSAgZG9pdCB0cmFpdGVyIGxhIHJlcXXqdGUsIHBhciBleGVtcGxlIDxjb2RlPmx1YS1zY3JpcHQ8L2NvZGU+CgkgIHNpIGVsbGUgZG9pdCDqdHJlIHRyYWl06WUgcGFyIG1vZF9sdWEuIENldHRlIHZhbGV1ciBlc3QgZW4KCSAgZ+lu6XJhbCBk6WZpbmllIHZpYSBsZXMgZGlyZWN0aXZlcyA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX21pbWUuaHRtbCNhZGRoYW5kbGVyIj5BZGRIYW5kbGVyPC9hPjwvY29kZT4gb3UgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL2NvcmUuaHRtbCNzZXRoYW5kbGVyIj5TZXRIYW5kbGVyPC9hPjwvY29kZT4sIG1haXMgcGV1dCBhdXNzaSBsJ+p0cmUKCSAgdmlhIG1vZF9sdWEgcG91ciBwZXJtZXR0cmUg4CB1biBhdXRyZSBnZXN0aW9ubmFpcmUgZGUgdHJhaXRlcgoJICB1bmUgcmVxdep0ZSBzcOljaWZpcXVlIHF1aSBuZSBzZXJhaXQgcGFzIHRyYWl06WUgcGFyIGTpZmF1dAoJICBwYXIgY2UgZGVybmllci4KICAgICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgo8dHI+CgkgIDx0ZD48Y29kZT5oZWFkZXJzX2luPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+dGFibGU8L3RkPgogICAgICAgICAgPHRkPm91aTwvdGQ+CgkgIDx0ZD5MZXMgZW4tdOp0ZXMgTUlNRSBkZSBsJ2Vudmlyb25uZW1lbnQgZGUgbGEgcmVxdep0ZS4gSWwKCSAgcydhZ2l0IGRlcyBlbi106nRlcyBjb21tZSA8Y29kZT5Ib3N0LCBVc2VyLUFnZW50LAoJICBSZWZlcmVyPC9jb2RlPiwgZXRjLi4uPC90ZD4KICAgICAgICA8L3RyPgo8dHIgY2xhc3M9Im9kZCI+CiAgICAgICAgICA8dGQ+PGNvZGU+aGVhZGVyc19vdXQ8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD50YWJsZTwvdGQ+CiAgICAgICAgICA8dGQ+b3VpPC90ZD4KCSAgPHRkPkxlcyBlbi106nRlcyBNSU1FIGRlIGwnZW52aXJvbm5lbWVudCBkZSBsYSBy6XBvbnNlLjwvdGQ+CiAgICAgICAgPC90cj4KPHRyPgogICAgICAgICAgPHRkPjxjb2RlPmhvc3RuYW1lPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+c3RyaW5nPC90ZD4KICAgICAgICAgIDx0ZD5ub248L3RkPgoJICA8dGQ+TGUgbm9tIGQnaPR0ZSwgdGVsIHF1ZSBk6WZpbmkgcGFyIGwnZW4tdOp0ZQoJICA8Y29kZT5Ib3N0OjwvY29kZT4gb3UgcGFyIHVuIFVSSSBjb21wbGV0LjwvdGQ+CiAgICAgICAgPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgICAgPHRkPjxjb2RlPmlzX2h0dHBzPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+Ym9vbGVhbjwvdGQ+CiAgICAgICAgICA8dGQ+bm9uPC90ZD4KICAgICAgICAgIDx0ZD5JbmRpcXVlIHNpIGxhIHJlcXXqdGUg4CDpdOkgZmFpdGUgdmlhIEhUVFBTPC90ZD4KICAgICAgICA8L3RyPgo8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+aXNfaW5pdGlhbF9yZXE8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5ib29sZWFuPC90ZD4KICAgICAgICAgIDx0ZD5ub248L3RkPgogICAgICAgICAgPHRkPkluZGlxdWUgc2kgbGEgcmVxdep0ZSBjb3VyYW50ZSBlc3QgbGEgcmVxdep0ZSBpbml0aWFsZSBvdQoJICB1bmUgc291cy1yZXF16nRlLjwvdGQ+CiAgICAgICAgPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgICAgPHRkPjxjb2RlPmxpbWl0X3JlcV9ib2R5PC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+bnVtYmVyPC90ZD4KICAgICAgICAgIDx0ZD5ub248L3RkPgogICAgICAgICAgPHRkPkxhIHRhaWxsZSBtYXhpbWFsZSBkdSBjb3JwcyBkZSBsYSByZXF16nRlLCBvdSAwIHNpIGF1Y3VuZQoJICBsaW1pdGUuPC90ZD4KICAgICAgICA8L3RyPgo8dHI+Cgk8dGQ+PGNvZGU+bG9nX2lkPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+c3RyaW5nPC90ZD4KICAgICAgICAgIDx0ZD5ub248L3RkPgoJICA8dGQ+TCdpZGVudGlmaWFudCBkZSBsYSByZXF16nRlIGRhbnMgbGVzIGpvdXJuYXV4IGQnYWNj6HMgb3UKCSAgZCdlcnJldXIuPC90ZD4KICAgICAgICA8L3RyPgo8dHIgY2xhc3M9Im9kZCI+CiAgICAgICAgICA8dGQ+PGNvZGU+bWV0aG9kPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+c3RyaW5nPC90ZD4KICAgICAgICAgIDx0ZD5ub248L3RkPgoJICA8dGQ+TGEgbel0aG9kZSBkZSBsYSByZXF16nRlLCBwYXIgZXhlbXBsZSA8Y29kZT5HRVQ8L2NvZGU+IG91CgkgIDxjb2RlPlBPU1Q8L2NvZGU+LjwvdGQ+CiAgICAgICAgPC90cj4KPHRyPgogICAgICAgICAgPHRkPjxjb2RlPm5vdGVzPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+dGFibGU8L3RkPgogICAgICAgICAgPHRkPm91aTwvdGQ+CgkgIDx0ZD5VbmUgbGlzdGUgZGUgbm90ZXMgcXVpIHBldXZlbnQg6nRyZSB0cmFuc21pc2VzIGQndW4gbW9kdWxlCgkgIOAgbCdhdXRyZS48L3RkPgogICAgICAgIDwvdHI+Cjx0ciBjbGFzcz0ib2RkIj4KICAgICAgICAgIDx0ZD48Y29kZT5vcHRpb25zPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+c3RyaW5nPC90ZD4KICAgICAgICAgIDx0ZD5ub248L3RkPgogICAgICAgICAgPHRkPkxhIHZhbGV1ciBkZSBsYSBkaXJlY3RpdmUgT3B0aW9ucyBwb3VyIGxhIHJlcXXqdGUKCSAgY291cmFudGUuPC90ZD4KICAgICAgICA8L3RyPgo8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+cGF0aF9pbmZvPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+c3RyaW5nPC90ZD4KICAgICAgICAgIDx0ZD5ub248L3RkPgoJICA8dGQ+TGEgdmFsZXVyIGRlIFBBVEhfSU5GTyBleHRyYWl0ZSBkZSBsYSByZXF16nRlLjwvdGQ+CiAgICAgICAgPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgICAgPHRkPjxjb2RlPnBvcnQ8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5udW1iZXI8L3RkPgogICAgICAgICAgPHRkPm5vbjwvdGQ+CiAgICAgICAgICA8dGQ+TGUgcG9ydCBkdSBzZXJ2ZXVyIHV0aWxpc+kgcGFyIGxhIHJlcXXqdGUuPC90ZD4KICAgICAgICA8L3RyPgo8dHI+CiAgICAgICAgICA8dGQ+PGNvZGU+cHJvdG9jb2w8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPm5vbjwvdGQ+CgkgIDx0ZD5MZSBwcm90b2NvbGUgdXRpbGlz6SwgcGFyIGV4ZW1wbGUgPGNvZGU+SFRUUC8xLjE8L2NvZGU+PC90ZD4KICAgICAgICA8L3RyPgo8dHIgY2xhc3M9Im9kZCI+CiAgICAgICAgICA8dGQ+PGNvZGU+cHJveHlyZXE8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPm91aTwvdGQ+CgkgIDx0ZD5JbmRpcXVlIHMnaWwgcydhZ2l0IGQndW5lIHJlcXXqdGUgbWFuZGF06WUgb3Ugbm9uLiBDZXR0ZQoJICB2YWxldXIgZXN0IGVuIGfpbulyYWwgZOlmaW5pZSBhdSBjb3VycyBkZSBsYSBwaGFzZQoJICBwb3N0X3JlYWRfcmVxdWVzdC90cmFuc2xhdGVfbmFtZSBkdSB0cmFpdGVtZW50IGRlIGxhIHJlcXXqdGUuPC90ZD4KICAgICAgICA8L3RyPgo8dHI+CgkgIDx0ZD48Y29kZT5yYW5nZTwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm9uPC90ZD4KCSAgPHRkPkxlIGNvbnRlbnUgZGUgbCdlbi106nRlIDxjb2RlPlJhbmdlOjwvY29kZT4uPC90ZD4KICAgICAgICA8L3RyPgo8dHIgY2xhc3M9Im9kZCI+CiAgICAgICAgICA8dGQ+PGNvZGU+cmVtYWluaW5nPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+bnVtYmVyPC90ZD4KICAgICAgICAgIDx0ZD5ub248L3RkPgogICAgICAgICAgPHRkPkxlIG5vbWJyZSBkJ29jdGV0cyBkdSBjb3JwcyBkZSBsYSByZXF16nRlIHJlc3RhbnQg4CBsaXJlLjwvdGQ+CiAgICAgICAgPC90cj4KPHRyPgogICAgICAgICAgPHRkPjxjb2RlPnNlcnZlcl9idWlsdDwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm9uPC90ZD4KICAgICAgICAgIDx0ZD5MYSBkYXRlIGRlIGNvbXBpbGF0aW9uIGR1IHNlcnZldXIuPC90ZD4KICAgICAgICA8L3RyPgo8dHIgY2xhc3M9Im9kZCI+CiAgICAgICAgICA8dGQ+PGNvZGU+c2VydmVyX25hbWU8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPm5vbjwvdGQ+CiAgICAgICAgICA8dGQ+TGUgbm9tIGR1IHNlcnZldXIgcG91ciBjZXR0ZSByZXF16nRlLjwvdGQ+CiAgICAgICAgPC90cj4KPHRyPgogICAgICAgICAgPHRkPjxjb2RlPnNvbWVfYXV0aF9yZXF1aXJlZDwvY29kZT48L3RkPgogICAgICAgICAgPHRkPmJvb2xlYW48L3RkPgogICAgICAgICAgPHRkPm5vbjwvdGQ+CiAgICAgICAgICA8dGQ+SW5kaXF1ZSBzaSB1bmUgYXV0b3Jpc2F0aW9uIGVzdC/pdGFpdCByZXF1aXNlIHBvdXIgY2V0dGUKCSAgcmVxdep0ZS48L3RkPgogICAgICAgIDwvdHI+Cjx0ciBjbGFzcz0ib2RkIj4KICAgICAgICAgIDx0ZD48Y29kZT5zdWJwcm9jZXNzX2VudjwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnRhYmxlPC90ZD4KICAgICAgICAgIDx0ZD5vdWk8L3RkPgoJICA8dGQ+TGUgamV1IGRlIHZhcmlhYmxlcyBkJ2Vudmlyb25uZW1lbnQgcG91ciBjZXR0ZSByZXF16nRlLjwvdGQ+CiAgICAgICAgPC90cj4KPHRyPgogICAgICAgICAgPHRkPjxjb2RlPnN0YXJ0ZWQ8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5udW1iZXI8L3RkPgogICAgICAgICAgPHRkPm5vbjwvdGQ+CiAgICAgICAgICA8dGQ+TGUgbW9tZW50IG/5IGxlIHNlcnZldXIgYSDpdOkgKHJlKWTpbWFycuksIGVuIHNlY29uZGVzCgkgIGRlcHVpcyBlcG9jaCAoMWVyIGphbnZpZXIgMTk3MCk8L3RkPgogICAgICAgIDwvdHI+Cjx0ciBjbGFzcz0ib2RkIj4KCSAgPHRkPjxjb2RlPnN0YXR1czwvY29kZT48L3RkPgogICAgICAgICAgPHRkPm51bWJlcjwvdGQ+CiAgICAgICAgICA8dGQ+b3VpPC90ZD4KCSAgPHRkPkxlIGNvZGUgZGUgcmV0b3VyIChjb3VyYW50KSBwb3VyIGNldHRlIHJlcXXqdGUsIHBhcgoJICBleGVtcGxlIDxjb2RlPjIwMDwvY29kZT4gb3UgPGNvZGU+NDA0PC9jb2RlPi48L3RkPgogICAgICAgIDwvdHI+Cjx0cj4KICAgICAgICAgIDx0ZD48Y29kZT50aGVfcmVxdWVzdDwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm9uPC90ZD4KCSAgPHRkPkxhIGNoYe5uZSBkZSBsYSByZXF16nRlIHRlbGxlIHF1J2VsbGUgYSDpdOkgZW52b3npZSBwYXIgbGUKCSAgY2xpZW50LCBwYXIgZXhlbXBsZSA8Y29kZT5HRVQgL2Zvby9iYXIgSFRUUC8xLjE8L2NvZGU+LjwvdGQ+CiAgICAgICAgPC90cj4KPHRyIGNsYXNzPSJvZGQiPgogICAgICAgICAgPHRkPjxjb2RlPnVucGFyc2VkX3VyaTwvY29kZT48L3RkPgogICAgICAgICAgPHRkPnN0cmluZzwvdGQ+CiAgICAgICAgICA8dGQ+bm9uPC90ZD4KCSAgPHRkPkxhIHBhcnRpZSBVUkkgbm9uIGludGVycHLpdOllIGRlIGxhIHJlcXXqdGU8L3RkPgogICAgICAgIDwvdHI+Cjx0cj4KICAgICAgICAgIDx0ZD48Y29kZT51cmk8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPm91aTwvdGQ+CgkgIDx0ZD5MJ1VSSSBhcHLocyBpbnRlcnBy6XRhdGlvbiBwYXIgaHR0cGQ8L3RkPgogICAgICAgIDwvdHI+Cjx0ciBjbGFzcz0ib2RkIj4KICAgICAgICAgIDx0ZD48Y29kZT51c2VyPC9jb2RlPjwvdGQ+CiAgICAgICAgICA8dGQ+c3RyaW5nPC90ZD4KICAgICAgICAgIDx0ZD5vdWk8L3RkPgoJICA8dGQ+U2kgdW5lIGF1dGhlbnRpZmljYXRpb24gYSDpdOkgZWZmZWN0dellLCBub20gZGUKCSAgbCd1dGlsaXNhdGV1ciBhdXRoZW50aWZp6S48L3RkPgogICAgICAgIDwvdHI+Cjx0cj4KICAgICAgICAgIDx0ZD48Y29kZT51c2VyYWdlbnRfaXA8L2NvZGU+PC90ZD4KICAgICAgICAgIDx0ZD5zdHJpbmc8L3RkPgogICAgICAgICAgPHRkPm5vbjwvdGQ+CgkgIDx0ZD5MJ2FkcmVzc2UgSVAgZGUgbCdhZ2VudCBxdWkgYSBlbnZveekgbGEgcmVxdep0ZTwvdGQ+CiAgICAgICAgPC90cj4KPC90YWJsZT4KCTwvZGQ+CiAgICA8L2RsPgo8L2Rpdj48ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0ic2VjdGlvbiI+CjxoMj48YSBuYW1lPSJmdW5jdGlvbnMiIGlkPSJmdW5jdGlvbnMiPk3pdGhvZGVzIGRlIGwnb2JqZXQgcmVxdWVzdF9yZWM8L2E+PC9oMj4KCjxwPkwnb2JqZXQgcmVxdWVzdF9yZWMgcG9zc+hkZSAoYXUgbWluaW11bSkgbGVzIG3pdGhvZGVzIHN1aXZhbnRlcyA6PC9wPgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6Zmx1c2goKSAgIC0tIHZpZGUgbGUgdGFtcG9uIGRlIHNvcnRpZQogICAgICAgICAgICAtLSBSZW52b2llIHRydWUgc2kgbGUgdmlkYWdlIGEg6XTpIGVmZmVjdHXpIGF2ZWMgc3VjY+hzLAoJICAgIC0tIGZhbHNlIGRhbnMgbGUgY2FzIGNvbnRyYWlyZS4KCndoaWxlIG5vdXNfYXZvbnNfZGVzX2Rvbm7pZXNf4F9lbnZveWVyIGRvCiAgICByOnB1dHMoIkJsYSBibGEgYmxhXG4iKSAtLSBlbnZvaSBkZXMgZG9ubullcyDgIGVudm95ZXIgdmVycyBsZSB0YW1wb24KICAgIHI6Zmx1c2goKSAtLSB2aWRhZ2UgZHUgdGFtcG9uIChlbnZvaSBhdSBjbGllbnQpCiAgICByLnVzbGVlcCg1MDAwMDApIC0tIG1pc2UgZW4gYXR0ZW50ZSBwZW5kYW50IDAuNSBzZWNvbmRlcyBldCBib3VjbGFnZQplbmQ8L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjphZGRvdXRwdXRmaWx0ZXIobmFtZXxmdW5jdGlvbikgLS0gYWpvdXRlIHVuIGZpbHRyZSBlbiBzb3J0aWUKCnI6YWRkb3V0cHV0ZmlsdGVyKCJmb29GaWx0ZXIiKSAtLSBpbnPocmUgbGUgZmlsdHJlIGZvb0ZpbHRlciBkYW5zIGxlIGZsdXggZGUgc29ydGllPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6c2VuZGZpbGUoZmlsZW5hbWUpIC0tIGVudm9pZSB1biBmaWNoaWVyIGVudGllciBhdSBjbGllbnQgZW4gdXRpbGlzYW50IHNlbmRmaWxlIHMnaWwgZXN0CiAgICAgICAgICAgICAgICAgICAgIC0tIHN1cHBvcnTpIHBhciBsYSBwbGF0ZWZvcm1lIDoKCmlmIHVzZV9zZW5kZmlsZV90aGluZyB0aGVuCiAgICByOnNlbmRmaWxlKCIvdmFyL3d3dy9sYXJnZV9maWxlLmltZyIpCmVuZDwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOnBhcnNlYXJncygpIC0tIHJlbnZvaWUgZGV1eCB0YWJsZXMgOiB1bmUgdGFibGUgc3RhbmRhcmQgZGUgY291cGxlcwogICAgICAgICAgICAgIC0tIGNs6S92YWxldXIgcG91ciBsZXMgZG9ubullcyBHRVQgc2ltcGxlcywKICAgICAgICAgICAgICAtLSBldCB1bmUgYXV0cmUgcG91ciBsZXMgZG9ubullcwogICAgICAgICAgICAgIC0tIG11bHRpdmFsdellcyAocGFyIGV4ZW1wbGUgZm9vPTEmYW1wO2Zvbz0yJmFtcDtmb289MykgOgoKbG9jYWwgR0VULCBHRVRNVUxUSSA9IHI6cGFyc2VhcmdzKCkKcjpwdXRzKCJWb3RyZSBub20gZXN0IDogIiAuLiBHRVRbJ25hbWUnXSBvciAiVW5rbm93biIpPC9wcmU+CgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOnBhcnNlYm9keSgpKFtzaXplTGltaXRdKSAtLSBpbnRlcnBy6HRlIGxlIGNvcnBzIGRlIGxhCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHJlcXXqdGUgZW4gdGFudCBxdWUgUE9TVCBldCByZW52b2llCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGRldXggdGFibGVzIGx1YSwgY29tbWUgcjpwYXJzZWFyZ3MoKS4gVW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gbm9tYnJlIG9wdGlvbm5lbCBwZXV0IOp0cmUgZm91cm5pCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHBvdXIgc3DpY2lmaWVyIGxlIG5vbWJyZSBtYXhpbWFsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGQnb2N0ZXRzIOAgaW50ZXJwcul0ZXIuIExhCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHZhbGV1ciBwYXIgZOlmYXV0IGVzdCA4MTkyLgoKbG9jYWwgUE9TVCwgUE9TVE1VTFRJID0gcjpwYXJzZWJvZHkoMTAyNCoxMDI0KQpyOnB1dHMoIlZvdHJlIG5vbSBlc3QgOiAiIC4uIFBPU1RbJ25hbWUnXSBvciAiVW5rbm93biIpPC9wcmU+CgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOnB1dHMoImJvbmpvdXIiLCAiIGxlIG1vbmRlIiwgIiEiKSAtLSBhZmZpY2hhZ2UgZGFucyBsZSBjb3JwcyBkZSBsYSBy6XBvbnNlPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6d3JpdGUoInVuZSBzaW1wbGUgY2hh7m5lIikgLS0gYWZmaWNoYWdlIGRhbnMgbGUgY29ycHMgZGUgbGEgculwb25zZTwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOmVzY2FwZV9odG1sKCImbHQ7aHRtbCZndDt0ZXN0Jmx0Oy9odG1sJmd0OyIpIC0tIEVjaGFwcGUgbGUgY29kZSBIVE1MIGV0IHJlbnZvaWUgbGUgculzdWx0YXQ8L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjpiYXNlNjRfZW5jb2RlKHN0cmluZykgLS0gRW5jb2RlIHVuZSBjaGHubmUg4CBsJ2FpZGUgZHUgc3RhbmRhcmQgZGUgY29kYWdlIEJhc2U2NC4KCmxvY2FsIGVuY29kZWQgPSByOmJhc2U2NF9lbmNvZGUoIlRoaXMgaXMgYSB0ZXN0IikgLS0gcmV0dXJucyBWR2hwY3lCcGN5QmhJSFJsYzNRPTwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOmJhc2U2NF9kZWNvZGUoc3RyaW5nKSAtLSBE6WNvZGUgdW5lIGNoYe5uZSBjb2TpZSBlbiBCYXNlNjQuCgpsb2NhbCBkZWNvZGVkID0gcjpiYXNlNjRfZGVjb2RlKCJWR2hwY3lCcGN5QmhJSFJsYzNRPSIpIC0tIHJldHVybnMgJ1RoaXMgaXMgYSB0ZXN0JzwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOm1kNShzdHJpbmcpIC0tIENhbGN1bGUgZXQgcmVudm9pZSBsZSBjb25kZW5z6SBNRDUgZCd1bmUgY2hh7m5lIGVuIG1vZGUgYmluYWlyZSAoYmluYXJ5IHNhZmUpLgoKbG9jYWwgaGFzaCA9IHI6bWQ1KCJUaGlzIGlzIGEgdGVzdCIpIC0tIHJldHVybnMgY2UxMTRlNDUwMWQyZjRlMmRjZWEzZTE3YjU0NmYzMzk8L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjpzaGExKHN0cmluZykgLS0gQ2FsY3VsZSBldCByZW52b2llIGxlIGNvbmRlbnPpIFNIQTEgZCd1bmUgY2hh7m5lIGVuIG1vZGUgYmluYWlyZSAoYmluYXJ5IHNhZmUpLgoKbG9jYWwgaGFzaCA9IHI6c2hhMSgiVGhpcyBpcyBhIHRlc3QiKSAtLSByZXR1cm5zIGE1NGQ4OGUwNjYxMmQ4MjBiYzNiZTcyODc3Yzc0ZjI1N2I1NjFiMTk8L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjplc2NhcGUoc3RyaW5nKSAtLSBFY2hhcHBlIHVuZSBjaGHubmUgZGUgdHlwZSBVUkwuCgpsb2NhbCB1cmwgPSAiaHR0cDovL2Zvby5iYXIvMSAyIDMgJmFtcDsgNCArIDUiCmxvY2FsIGVzY2FwZWQgPSByOmVzY2FwZSh1cmwpIC0tIHJlbnZvaWUgJ2h0dHAlM2ElMmYlMmZmb28uYmFyJTJmMSsyKzMrJTI2KzQrJTJiKzUnPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6dW5lc2NhcGUoc3RyaW5nKSAtLSBE6XPpY2hhcHBlIHVuZSBjaGHubmUgZGUgdHlwZSBVUkwuCgpsb2NhbCB1cmwgPSAiaHR0cCUzYSUyZiUyZmZvby5iYXIlMmYxKzIrMyslMjYrNCslMmIrNSIKbG9jYWwgdW5lc2NhcGVkID0gcjp1bmVzY2FwZSh1cmwpIC0tIHJlbnZvaWUgJ2h0dHA6Ly9mb28uYmFyLzEgMiAzICZhbXA7IDQgKyA1JzwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOmNvbnN0cnVjdF91cmwoc3RyaW5nKSAtLSBDb25zdHJ1aXQgdW5lIFVSTCDgIHBhcnRpciBkJ3VuIFVSSQoKbG9jYWwgdXJsID0gcjpjb25zdHJ1Y3RfdXJsKHIudXJpKTwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yLm1wbV9xdWVyeShudW1iZXIpIC0tIEludGVycm9nZSBsZSBzZXJ2ZXVyIOAgcHJvcG9zIGRlIHNvbiBtb2R1bGUgTVBNIHZpYSBsYSByZXF16nRlIGFwX21wbV9xdWVyeS4KCmxvY2FsIG1wbSA9IHIubXBtX3F1ZXJ5KDE0KQppZiBtcG0gPT0gMSB0aGVuCiAgICByOnB1dHMoIkNlIHNlcnZldXIgdXRpbGlzZSBsZSBNUE0gRXZlbnQiKQplbmQ8L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjpleHByKHN0cmluZykgLS0gRXZhbHVlIHVuZSBjaGHubmUgZGUgdHlwZSA8YSBocmVmPSIuLi9leHByLmh0bWwiPmV4cHI8L2E+LgoKaWYgcjpleHByKCIle0hUVFBfSE9TVH0gPX4gL153d3cvIikgdGhlbgogICAgcjpwdXRzKCJDZSBub20gZCdo9HRlIGNvbW1lbmNlIHBhciB3d3ciKQplbmQ8L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjpzY29yZWJvYXJkX3Byb2Nlc3MoYSkgLS0gSW50ZXJyb2dlIGxlIHNlcnZldXIg4CBwcm9wb3MgZHUKICAgICAgICAgICAgICAgICAgICAgICAgLS0gcHJvY2Vzc3VzIOAgbGEgcG9zaXRpb24gPGNvZGU+YTwvY29kZT4uCgpsb2NhbCBwcm9jZXNzID0gcjpzY29yZWJvYXJkX3Byb2Nlc3MoMSkKcjpwdXRzKCJMZSBzZXJ2ZXVyIDEgYSBjb21tZSBQSUQgIiAuLiBwcm9jZXNzLnBpZCk8L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjpzY29yZWJvYXJkX3dvcmtlcihhLCBiKSAtLSBJbnRlcnJvZ2UgbGUgc2VydmV1ciDgIHByb3BvcyBkdQogICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHRocmVhZCA8Y29kZT5iPC9jb2RlPiwgZGFucyBsZSBwcm9jZXNzdXMgPGNvZGU+YTwvY29kZT4uCgpsb2NhbCB0aHJlYWQgPSByOnNjb3JlYm9hcmRfd29ya2VyKDEsIDEpCnI6cHV0cygiTCdJRCBkdSB0aHJlYWQgMSBkdSBzZXJ2ZXVyIDEgZXN0ICIgLi4gdGhyZWFkLnRpZCAuLiAiIGV0IHNvbgrpdGF0IGVzdCAiIC4uIHRocmVhZC5zdGF0dXMpPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6Y2xvY2soKSAtLSBSZW52b2llIGwnaGV1cmUgY291cmFudGUgYXZlYyB1bmUgcHLpY2lzaW9uIGQndW5lIG1pY3Jvc2Vjb25kZS48L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjpyZXF1ZXN0Ym9keShmaWxlbmFtZSkgLS0gTGl0IGV0IHJlbnZvaWUgbGUgY29ycHMgZCd1bmUgcmVxdep0ZS4KICAgICAgICAgICAgICAgICAgICAgICAgLS0gU2kgJ2ZpbGVuYW1lJyBlc3Qgc3DpY2lmaeksIGxlCiAgICAgICAgICAgICAgICAgICAgICAgIC0tIGNvcnBzIGRlIHJlcXXqdGUgbidlc3QgcGFzCiAgICAgICAgICAgICAgICAgICAgICAgIC0tIHJlbnZveeksIG1haXMgc2F1dmVnYXJk6SBkYW5zCiAgICAgICAgICAgICAgICAgICAgICAgIC0tIGxlIGZpY2hpZXIgY29ycmVzcG9uZGFudC4KCmxvY2FsIGlucHV0ID0gcjpyZXF1ZXN0Ym9keSgpCnI6cHV0cygiVm91cyBtJ2F2ZXogZW52b3npIGxlIGNvcnBzIGRlIHJlcXXqdGUgc3VpdmFudCA6XG4iKQpyOnB1dHMoaW5wdXQpPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6YWRkX2lucHV0X2ZpbHRlcihmaWx0ZXJfbmFtZSkgLS0gQWpvdXRlIGxlIGZpbHRyZSBlbiBlbnRy6WUgJ2ZpbHRlcl9uYW1lJy48L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjptb2R1bGVfaW5mbyhtb2R1bGVfbmFtZSkgLS0gSW50ZXJyb2dlIGxlIHNlcnZldXIg4CBwcm9wb3MgZCd1biBtb2R1bGUuCgpsb2NhbCBtb2QgPSByLm1vZHVsZV9pbmZvKCJtb2RfbHVhLmMiKQppZiBtb2QgdGhlbgogICAgZm9yIGssIHYgaW4gcGFpcnMobW9kLmNvbW1hbmRzKSBkbwogICAgICAgcjpwdXRzKCAoIiVzOiAlc1xuIik6Zm9ybWF0KGssdikpIC0tIGFmZmljaGUgdG91dGVzIGxlcyBkaXJlY3RpdmVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gaW1wbOltZW506WVzIHBhciBjZSBtb2R1bGUuCiAgICBlbmQKZW5kPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6bG9hZGVkX21vZHVsZXMoKSAtLSBSZW52b2llIHVuZSBsaXN0ZSBkZXMgbW9kdWxlcyBjaGFyZ+lzIHBhciBodHRwZC4KCmZvciBrLCBtb2R1bGUgaW4gcGFpcnMocjpsb2FkZWRfbW9kdWxlcygpKSBkbwogICAgcjpwdXRzKCJKJ2FpIGNoYXJn6SBsZSBtb2R1bGUgIiAuLiBtb2R1bGUgLi4gIlxuIikKZW5kPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6cnVudGltZV9kaXJfcmVsYXRpdmUoZmlsZW5hbWUpIC0tIEfpbuhyZSBsZSBub20gZCd1biBmaWNoaWVyIHJ1bi10aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIChwYXIgZXhlbXBsZSBsYSBt6W1vaXJlIHBhcnRhZ+llCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICJmaWxlIikgcmVsYXRpdmVtZW50IGF1IHLpcGVydG9pcmUgZGUgcnVuLXRpbWUuPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6c2VydmVyX2luZm8oKSAtLSBSZW52b2llIHVuZSB0YWJsZSBjb250ZW5hbnQgZGVzIGluZm9ybWF0aW9ucyDgCiAgICAgICAgICAgICAgICAtLSBwcm9wb3MgZHUgc2VydmV1ciwgY29tbWUgbGUgbm9tIGRlCiAgICAgICAgICAgICAgICAtLSBsJ2V46WN1dGFibGUgaHR0cGQsIGxlIG1vZHVsZSBtcG0gdXRpbGlz6SwgZXRjLi4uPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6c2V0X2RvY3VtZW50X3Jvb3QoZmlsZV9wYXRoKSAtLSBE6WZpbml0IGxhIHJhY2luZSBkZXMgZG9jdW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBwb3VyIGxhIHJlcXXqdGUg4CBmaWxlX3BhdGguPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6YWRkX3ZlcnNpb25fY29tcG9uZW50KGNvbXBvbmVudF9zdHJpbmcpIC0tIEFqb3V0ZSB1biDpbOltZW50IOAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gbGEgYmFubmnocmUgZHUgc2VydmV1ci48L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjpzZXRfY29udGV4dF9pbmZvKHByZWZpeCwgZG9jcm9vdCkgLS0gROlmaW5pdCBsZSBwculmaXhlIGV0IGxhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHJhY2luZSBkZXMgZG9jdW1lbnRzIGR1IGNvbnRleHRlIHBvdXIgdW5lIHJlcXXqdGUuPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6b3NfZXNjYXBlX3BhdGgoZmlsZV9wYXRoKSAtLSBDb252ZXJ0aXQgdW4gY2hlbWluIGR1IHN5c3TobWUgZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGZpY2hpZXJzIGVuIFVSTCBpbmTpcGVuZGFtbWVudCBkdSBzeXN06G1lIGQnZXhwbG9pdGF0aW9uLjwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOmVzY2FwZV9sb2dpdGVtKHN0cmluZykgLS0gRWNoYXBwZSB1bmUgY2hh7m5lIHBvdXIgam91cm5hbGlzYXRpb24uPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnIuc3RyY21wX21hdGNoKHN0cmluZywgcGF0dGVybikgLS0gVulyaWZpZSBzaSAnc3RyaW5nJyBjb3JyZXNwb25kIOAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAncGF0dGVybicgdmlhIGxhIGZvbmN0aW9uIHN0cmNtcF9tYXRjaCAoR0xPQnMpLiBQYXIgZXhlbXBsZSwgZXN0LWNlIHF1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICd3d3cuZXhhbXBsZS5jb20nIGNvcnJlc3BvbmQg4CAnKi5leGFtcGxlLmNvbScgPwoKbG9jYWwgbWF0Y2ggPSByLnN0cmNtcF9tYXRjaCgiZm9vYmFyLmNvbSIsICJmb28qLmNvbSIpCmlmIG1hdGNoIHRoZW4gCiAgICByOnB1dHMoImZvb2Jhci5jb20gbWF0Y2hlcyBmb28qLmNvbSIpCmVuZDwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOnNldF9rZWVwYWxpdmUoKSAtLSBE6WZpbml0IGwn6XRhdCBkZSBwZXJzaXN0YW5jZSBkJ3VuZSByZXF16nRlLgogICAgICAgICAgICAgICAgICAtLSBSZW52b2llIHRydWUgZGFucyBsYSBtZXN1cmUgZHUgcG9zc2libGUsIGZhbHNlIGRhbnMgbGUgY2FzIGNvbnRyYWlyZS48L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjptYWtlX2V0YWcoKSAtLSBH6W7ocmUgZXQgcmVudm9pZSBsZSBldGFnIHBvdXIgbGEgcmVxdep0ZSBjb3VyYW50ZS48L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjpzZW5kX2ludGVyaW1fcmVzcG9uc2UoY2xlYXIpIC0tIFJlbnZvaWUgdW5lIHLpcG9uc2UgZCdpbnTpcmltICgxeHgpIGF1CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBjbGllbnQuIFNpICdjbGVhcicgZXN0IHZyYWksIGxlcyBlbi106nRlcyBkaXNwb25pYmxlcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gc2Vyb250IGVudm956XMgZXQgZWZmYWPpcy48L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjpjdXN0b21fcmVzcG9uc2Uoc3RhdHVzX2NvZGUsIHN0cmluZykgLS0gR+lu6HJlIGV0IGTpZmluaXQgdW5lIHLpcG9uc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gcGVyc29ubmFsaXPpZSBwb3VyIHVuIGNvZGUgZCfpdGF0IHBhcnRpY3VsaWVyLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBMZSBmb25jdGlvbm5lbWVudCBlc3QgdHLocyBwcm9jaGUgZGUgY2VsdWkgZGUgbGEgZGlyZWN0aXZlIEVycm9yRG9jdW1lbnQuCgpyOmN1c3RvbV9yZXNwb25zZSg0MDQsICJCYWxldGVkISIpPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnIuZXhpc3RzX2NvbmZpZ19kZWZpbmUoc3RyaW5nKSAtLSBW6XJpZmllIHNpIHVuZSBk6WZpbml0aW9uIGRlIGNvbmZpZ3VyYXRpb24gZXhpc3RlLgoKaWYgci5leGlzdHNfY29uZmlnX2RlZmluZSgiRk9PIikgdGhlbgogICAgcjpwdXRzKCJodHRwZCBhIHByb2JhYmxlbWVudCDpdOkgbGFuY+kgYXZlYyBsJ29wdGlvbiAtREZPTywgb3UgRk9PIGEKICAgIOl06SBk6WZpbmkgZGFucyBsYSBjb25maWd1cmF0aW9uIikKZW5kPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6c3RhdGVfcXVlcnkoc3RyaW5nKSAtLSBJbnRlcnJvZ2UgbGUgc2VydmV1ciDgIHByb3BvcyBkZSBzb24g6XRhdC48L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjpzdGF0KGZpbGVuYW1lIFssd2FudGVkXSkgLS0gRXjpY3V0ZSBzdGF0KCkgc3VyIHVuIGZpY2hpZXIsIGV0IHJlbnZvaWUgdW5lIHRhYmxlIGNvbnRlbmFudAogICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBkZXMgaW5mb3JtYXRpb25zIOAgcHJvcG9zIGRlIGNlIGZpY2hpZXIuCgpsb2NhbCBpbmZvID0gcjpzdGF0KCIvdmFyL3d3dy9mb28udHh0IikKaWYgaW5mbyB0aGVuCiAgICByOnB1dHMoIkNlIGZpY2hpZXIgZXhpc3RlIGV0IGEg6XTpIG1vZGlmaekgcG91ciBsYSBkZXJuaehyZSBmb2lzIOAgOiAiIC4uIGluZm8ubW9kaWZpZWQpCmVuZDwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOnJlZ2V4KHN0cmluZywgcGF0dGVybiBbLGZsYWdzXSkgLS0gRXjpY3V0ZSB1bmUgcmVjaGVyY2hlIOAgYmFzZSBkJ2V4cHJlc3Npb24gcmF0aW9ubmVsbGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHN1ciB1bmUgY2hh7m5lLCBldCByZW52b2llIGxlcyDpdmVudHVlbGxlcyBjb3JyZXNwb25kYW5jZXMgdHJvdXbpZXMuCgpsb2NhbCBtYXRjaGVzID0gcjpyZWdleCgiZm9vIGJhciBiYXoiLCBbW2ZvbyAoXHcrKSAoXFMqKV1dKQppZiBtYXRjaGVzIHRoZW4KICAgIHI6cHV0cygiTCdleHByZXNzaW9uIHJhdGlvbm5lbGxlIGNvcnJlc3BvbmQgZXQgbGUgZGVybmllciBtb3QKICAgIGNhcHR1cukgKCQyKSBlc3QgOiAiIC4uIG1hdGNoZXNbMl0pCmVuZAoKLS0gRXhlbXBsZSBhdmVjIGluc2Vuc2liaWxpdOkg4CBsYSBjYXNzZSA6CmxvY2FsIG1hdGNoZXMgPSByOnJlZ2V4KCJGT08gYmFyIEJBeiIsIFtbKGZvbykgYmFyXV0sIDEpCgotLSBsZXMgZHJhcGVhdXggcGV1dmVudCDqdHJlIHVuZSBjb21iaWJhaXNvbiBiaXQg4CBiaXQgZGUgOgotLSAweDAxOiBpbnNlbnNpYmlsaXTpIOAgbGEgY2Fzc2UKLS0gMHgwMjogcmVjaGVyY2hlIG11bHRpbGlnbmU8L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+ci51c2xlZXAobWljcm9zZWNvbmRlcykgLS0gSW50ZXJyb21wdCBsJ2V46WN1dGlvbiBkdSBzY3JpcHQgcGVuZGFudCBsZSBub21icmUgZGUgbWljcm9zZWNvbmRlcyBzcOljaWZp6S48L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjpkYmFjcXVpcmUoZGJUeXBlWywgZGJQYXJhbXNdKSAtLSBBY3F1aWVydCB1bmUgY29ubmV4aW9uIOAgdW5lIGJhc2UgZGUgZG9ubullcyBldCByZW52b2llIHVuZSBjbGFzc2UgZGF0YWJhc2UuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gVm9pciAnPGEgaHJlZj0iI2RhdGFiYXNlcyI+Q29ubmVjdGl2aXTpIGF1eCBiYXNlcyBkZSBkb25u6WVzPC9hPicKCQkJCS0tIHBvdXIgcGx1cyBkZSBk6XRhaWxzLjwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOml2bV9zZXQoImtleSIsIHZhbHVlKSAtLSBE6WZpbmkgdW5lIHZhcmlhYmxlIEludGVyLVZNIGF2ZWMgdW5lIHZhbGV1ciBzcOljaWZpcXVlLgogICAgICAgICAgICAgICAgICAgICAgICAtLSBDZXMgdmFsZXVycyBzb250IGNvbnNlcnbpZXMgbeptZSBzaSBsYSBWTSBlc3QKCQkJLS0gYXJy6nTpZSBvdSBub24gdXRpbGlz6WUsIGV0IG5lIGRvaXZlbnQgZG9uYyDqdHJlCgkJCS0tIHV0aWxpc+llcyBxdWUgc2kgTWF4Q29ubmVjdGlvbnNQZXJDaGlsZCAmZ3Q7IDAuCgkJCS0tIExlcyB2YWxldXJzIHBldXZlbnQg6nRyZSBkZSB0eXBlIG51bWJlciwgc3RyaW5nCgkJCS0tIG91IGJvb2xlYW4gZXQgc29udCBzdG9ja+llcyBz6XBhcultZW50IHBvdXIKCQkJLS0gY2hhcXVlIHByb2Nlc3N1cyAoZWxsZXMgbmUgc2Vyb250IGRvbmMgcGFzIGQndW5lCgkJCS0tIGdyYW5kZSB1dGlsaXTpIHNpIGwnb24gdXRpbGlzZSBsZSBtcG0gcHJlZm9yaykuCiAgICAgICAgICAgICAgICAgICAgICAgIApyOml2bV9nZXQoImtleSIpICAgICAgICAtLSBMaXQgbGUgY29udGVudSBkJ3VuZSB2YXJpYWJsZSBk6WZpbmllIHZpYSBpdm1fc2V0LiBSZW52b2llCgkJCS0tIGxlIGNvbnRlbnUgZGUgbGEgdmFyaWFibGUgc2kgZWxsZSBleGlzdGUsIG91IG5pbAoJCQktLSBkYW5zIGxlIGNhcyBjb250cmFpcmUuCiAgICAgICAgICAgICAgICAgICAgICAgIAotLSBWb2ljaSB1biBleGVtcGxlIGRlIGxlY3R1cmUv6WNyaXR1cmUgcXVpIHNhdXZlZ2FyZGUgdW5lIHZhcmlhYmxlCi0tIGdsb2JhbGUgZW4gZGVob3JzIGRlIGxhIFZNIDoKZnVuY3Rpb24gaGFuZGxlKHIpCiAgICAtLSBMYSBwcmVtaehyZSBWTSBxdWkgZWZmZWN0dWUgbCdhcHBlbCBzdWl2YW50IG4nb2J0aWVuZHJhIGF1Y3VuZQogICAgLS0gdmFsZXVyLCBldCBkZXZyYSBsYSBjcullcgogICAgbG9jYWwgZm9vID0gcjppdm1fZ2V0KCJjYWNoZWRfZGF0YSIpCiAgICBpZiBub3QgZm9vIHRoZW4KICAgICAgICBmb28gPSBkb19zb21lX2NhbGNzKCkgLS0gc2ltdWxhdGlvbiBkZSB2YWxldXJzIGRlIHJldG91cgogICAgICAgIHI6aXZtX3NldCgiY2FjaGVkX2RhdGEiLCBmb28pIC0tIGTpZmluaXRpb24gZ2xvYmFsZSBkZSBsYSB2YXJpYWJsZQogICAgZW5kCiAgICByOnB1dHMoIkxhIGRvbm7pZSBlbiBjYWNoZSBlc3QgOiAiLCBmb28pCmVuZDwvcHJlPgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6aHRwYXNzd29yZChzdHJpbmcgWyxhbGdvcml0aG0gWyxjb3N0XV0pIC0tIEfpbuhyZSB1biBoYXNoIGRlIG1vdCBkZSBwYXNzZSDgIHBhcnRpciBkJ3VuZSBjaGHubmUuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGFsZ29yaXRobTogMCA9IEFQTUQ1IChk6WZhdXQpLCAxID0gU0hBLCAyID0gQkNSWVBULCAzID0gQ1JZUFQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGNvc3Q6IG5lIHMndXRpbGlzZSBxdSdhdmVjIGwnYWxnb3J5dGhtZSBCQ1JZUFQgKGTpZmF1dCA9IDUpLjwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOm1rZGlyKGRpciBbLG1vZGVdKSAtLSBDcullIHVuIHLpcGVydG9pcmUgZXQgZOlmaW5pdCBzb24gbW9kZSB2aWEgbGUgcGFyYW3odHJlIG9wdGlvbm5lbCBtb2RlLjwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOm1rcmRpcihkaXIgWyxtb2RlXSkgLS0gQ3LpZSBkZXMgculwZXJ0b2lyZXMgZGUgbWFuaehyZSBy6WN1cnNpdmUgZXQgZOlmaW5pdAogICAgICAgICAgICAgICAgICAgICAgLS0gbGV1ciBtb2RlIHZpYSBsZSBwYXJhbeh0cmUgb3B0aW9ubmVsIG1vZGUuPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6cm1kaXIoZGlyKSAtLSBTdXBwcmltZSB1biBy6XBlcnRvaXJlLjwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOnRvdWNoKGZpbGUgWyxtdGltZV0pIC0tIETpZmluaXQgbGEgZGF0ZSBkZSBtb2RpZmljYXRpb24gZCd1biBmaWNoaWVyIOAgbGEgZGF0ZSBjb3VyYW50ZSBvdSDgCiAgICAgICAgICAgICAgICAgICAgICAgLS0gbGEgdmFsZXVyIG9wdGlvbm5lbGxlIG10aW1lIGVuIG1zZWMuPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnI6Z2V0X2RpcmVudHJpZXMoZGlyKSAtLSBSZW52b2llIHVuZSB0YWJsZSBjb250ZW5hbnQgdG91dGVzIGxlcyBlbnRy6WVzIGRlIHLpcGVydG9pcmVzLgoKLS0gUmVudm9pZSB1biBjaGVtaW4gc291cyBmb3JtZSDpY2xhdOllIGVuIGNoZW1pbiwgZmljaGllciwgZXh0ZW5zaW9uCmZ1bmN0aW9uIGhhbmRsZShyKQogIGxvY2FsIGRpciA9IHIuY29udGV4dF9kb2N1bWVudF9yb290CiAgZm9yIF8sIGYgaW4gaXBhaXJzKHI6Z2V0X2RpcmVudHJpZXMoZGlyKSkgZG8KICAgIGxvY2FsIGluZm8gPSByOnN0YXQoZGlyIC4uICIvIiAuLiBmKQogICAgaWYgaW5mbyB0aGVuCiAgICAgIGxvY2FsIG10aW1lID0gb3MuZGF0ZShmbXQsIGluZm8ubXRpbWUgLyAxMDAwMDAwKQogICAgICBsb2NhbCBmdHlwZSA9IChpbmZvLmZpbGV0eXBlID09IDIpIGFuZCAiW2Rpcl0gIiBvciAiW2ZpbGVdIgogICAgICByOnB1dHMoICgiJXMgJXMgJTEwaSAlc1xuIik6Zm9ybWF0KGZ0eXBlLCBtdGltZSwgaW5mby5zaXplLCBmKSApCiAgICBlbmQKICBlbmQKZW5kPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPnIuZGF0ZV9wYXJzZV9yZmMoc3RyaW5nKSAtLSBJbnRlcnBy6HRlIHVuZSBjaGHubmUgZGF0ZS9oZXVyZSBldCByZW52b2llIGwn6XF1aXZhbGVudCBlbiBzZWNvbmRlcyBkZXB1aXMgZXBvY2hlLjwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOmdldGNvb2tpZShrZXkpIC0tIE9idGllbnQgdW4gY29va2llIEhUVFA8L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjpzZXRjb29raWUoa2V5LCB2YWx1ZSwgc2VjdXJlLCBleHBpcmVzKSAtLSBE6WZpbml0IHVuIGNvb2tpZSBIVFRQLCBwYXIgZXhlbXBsZSA6CnI6c2V0Y29va2llKCJmb28iLCAiYmFyIGFuZCBzdHVmZiIsIGZhbHNlLCBvcy50aW1lKCkgKyA4NjQwMCk8L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjp3c3VwZ3JhZGUoKSAtLSBNZXQg4CBqb3VyIHVuZSBjb25uZXhpb24gdmVycyBsZXMgV2ViU29ja2V0cyBzaSBwb3NzaWJsZSAoZXQgc2kgZGVtYW5k6SkgOgppZiByOndzdXBncmFkZSgpIHRoZW4gLS0gc2kgbGEgbWlzZSDgIGpvdXIgZXN0IHBvc3NpYmxlIDoKICAgIHI6d3N3cml0ZSgiQmllbnZlbnVlIGRhbnMgbGVzIHdlYnNvY2tldHMhIikgLS0g6WNyaXQgcXVlbHF1ZSBjaG9zZSDgIGwnaW50ZW50aW9uIGR1IGNsaWVudAogICAgcjp3c2Nsb3NlKCkgIC0tIEF1IHJldm9pciAhCmVuZDwvcHJlPgoKCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yOndzcmVhZCgpIC0tIExpdCB1biBjYWRyZSBkZSB3ZWJzb2NrZXQgZGVwdWlzIHVuZSBjb25uZXhpb24gdmVycyB3ZWJzb2NrZXQgbWlzZSDgIGpvdXIgKHZvaXIgY2ktZGVzc3VzKSA6CiAgICAgICAgICAgCmxvY2FsIGxpbmUsIGlzRmluYWwgPSByOndzcmVhZCgpIC0tIGlzRmluYWwgaW5kaXF1ZSBzJ2lsIHMnYWdpdCBkdSBjYWRyZSBmaW5hbC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gZGFucyBsZSBjYXMgY29udHJhaXJlLCBvbiBwZXV0IGxpcmUgbGVzIGNhZHJlcyBzdWl2YW50cwpyOndzd3JpdGUoIlZvdXMgYXZleiDpY3JpdCA6ICIgLi4gbGluZSk8L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjp3c3dyaXRlKGxpbmUpIC0tIOljcml0IHVuIGNhZHJlIHZlcnMgdW4gY2xpZW50IFdlYlNvY2tldCA6CnI6d3N3cml0ZSgiQm9uam91ciBsZSBNb25kZSAhIik8L3ByZT4KCgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cjp3c2Nsb3NlKCkgLS0gZmVybWUgdW5lIHJlcXXqdGUgV2ViU29ja2V0IGV0IGwnYWNo6HZlIHBvdXIgaHR0cGQgOgoKaWYgcjp3c3VwZ3JhZGUoKSB0aGVuCiAgICByOndzd3JpdGUoIkVjcmlyZSBxdWVscXVlIGNob3NlIDogIikKICAgIGxvY2FsIGxpbmUgPSByOndzcmVhZCgpIG9yICJub3RoaW5nIgogICAgcjp3c3dyaXRlKCJWb3VzIGF2ZXog6WNyaXQgOiAiIC4uIGxpbmUpOwogICAgcjp3c3dyaXRlKCJBdSByZXZvaXIgISIpCiAgICByOndzY2xvc2UoKQplbmQ8L3ByZT4KCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImxvZ2dpbmciIGlkPSJsb2dnaW5nIj5Gb25jdGlvbnMgZGUgam91cm5hbGlzYXRpb248L2E+PC9oMj4KCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj4JLS0gZXhlbXBsZXMgZGUgbWVzc2FnZXMgZGUgam91cm5hbGlzYXRpb24KCXI6dHJhY2UxKCJDZWNpIGVzdCB1biBtZXNzYWdlIGRlIGpvdXJuYWxpc2F0aW9uIGRlIG5pdmVhdQoJdHJhY2UiKSAtLSBsZXMgbml2ZWF1eCB2YWxpZGVzIHZvbnQgZGUgdHJhY2UxIOAgdHJhY2U4IAogICAgICAgIHI6ZGVidWcoIkNlY2kgZXN0IHVuIG1lc3NhZ2UgZGUgam91cm5hbGlzYXRpb24gZGUgbml2ZWF1IGRlYnVnIikKICAgICAgICByOmluZm8oIkNlY2kgZXN0IHVuIG1lc3NhZ2UgZGUgam91cm5hbGlzYXRpb24gZGUgbml2ZWF1IGluZm8iKQogICAgICAgIHI6bm90aWNlKCJDZWNpIGVzdCB1biBtZXNzYWdlIGRlIGpvdXJuYWxpc2F0aW9uIGRlIG5pdmVhdSBub3RpY2UiKQogICAgICAgIHI6d2FybigiQ2VjaSBlc3QgdW4gbWVzc2FnZSBkZSBqb3VybmFsaXNhdGlvbiBkZSBuaXZlYXUgd2FybiIpCiAgICAgICAgcjplcnIoIkNlY2kgZXN0IHVuIG1lc3NhZ2UgZGUgam91cm5hbGlzYXRpb24gZGUgbml2ZWF1IGVyciIpCiAgICAgICAgcjphbGVydCgiQ2VjaSBlc3QgdW4gbWVzc2FnZSBkZSBqb3VybmFsaXNhdGlvbiBkZSBuaXZlYXUgYWxlcnQiKQogICAgICAgIHI6Y3JpdCgiQ2VjaSBlc3QgdW4gbWVzc2FnZSBkZSBqb3VybmFsaXNhdGlvbiBkZSBuaXZlYXUgY3JpdCIpCiAgICAgICAgcjplbWVyZygiQ2VjaSBlc3QgdW4gbWVzc2FnZSBkZSBqb3VybmFsaXNhdGlvbiBkZSBuaXZlYXUgZW1lcmciKTwvcHJlPgoKCjwvZGl2PjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KPGgyPjxhIG5hbWU9ImFwYWNoZTIiIGlkPSJhcGFjaGUyIj5QYXF1ZXQgYXBhY2hlMjwvYT48L2gyPgo8cD5MZSBwYXF1ZXQgbm9tbekgPGNvZGU+YXBhY2hlMjwvY29kZT4gZXN0IGZvdXJuaSBhdmVjIChhdSBtaW5pbXVtKSBsZQpjb250ZW51IHN1aXZhbnQgOjwvcD4KPGRsPgogIDxkdD5hcGFjaGUyLk9LPC9kdD4KICA8ZGQ+Q29uc3RhbnRlIGludGVybmUgT0suIExlcyBnZXN0aW9ubmFpcmVzIHJlbnZlcnJvbnQgY2V0dGUgdmFsZXVyCiAgcydpbHMgb250IHRyYWl06SBsYSByZXF16nRlLjwvZGQ+CiAgPGR0PmFwYWNoZTIuREVDTElORUQ8L2R0PgogIDxkZD5Db25zdGFudGUgaW50ZXJuZSBERUNMSU5FRC4gTGVzIGdlc3Rpb25uYWlyZXMgcmVudmVycm9udCBjZXR0ZQogIHZhbGV1ciBzJ2lscyBuJ29udCBwYXMgbCdpbnRlbnRpb24gZGUgdHJhaXRlciBsYSByZXF16nRlLjwvZGQ+CiAgPGR0PmFwYWNoZTIuRE9ORTwvZHQ+CiAgPGRkPkNvbnN0YW50ZSBpbnRlcm5lIERPTkUuPC9kZD4KICA8ZHQ+YXBhY2hlMi52ZXJzaW9uPC9kdD4KICA8ZGQ+Q2hh7m5lIGNvbnRlbmFudCBsYSB2ZXJzaW9uIGR1IHNlcnZldXIgSFRUUCBBcGFjaGU8L2RkPgogIDxkdD5hcGFjaGUyLkhUVFBfTU9WRURfVEVNUE9SQVJJTFk8L2R0PgogIDxkZD5Db2RlIGQn6XRhdCBIVFRQPC9kZD4KICA8ZHQ+YXBhY2hlMi5QUk9YWVJFUV9OT05FLCBhcGFjaGUyLlBST1hZUkVRX1BST1hZLCBhcGFjaGUyLlBST1hZUkVRX1JFVkVSU0UsIGFwYWNoZTIuUFJPWFlSRVFfUkVTUE9OU0U8L2R0PgogIDxkZD5Db25zdGFudGVzIGludGVybmVzIHV0aWxpc+llcyBwYXIgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9wcm94eS5odG1sIj5tb2RfcHJveHk8L2E+PC9jb2RlPjwvZGQ+CiAgPGR0PmFwYWNoZTIuQVVUSFpfREVOSUVELCBhcGFjaGUyLkFVVEhaX0dSQU5URUQsIGFwYWNoZTIuQVVUSFpfTkVVVFJBTCwgYXBhY2hlMi5BVVRIWl9HRU5FUkFMX0VSUk9SLCBhcGFjaGUyLkFVVEhaX0RFTklFRF9OT19VU0VSPC9kdD4KICA8ZGQ+Y29uc3RhbnRlcyBpbnRlcm5lcyB1dGlsaXPpZXMgcGFyIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfYXV0aHpfY29yZS5odG1sIj5tb2RfYXV0aHpfY29yZTwvYT48L2NvZGU+PC9kZD4KCjwvZGw+CjxwPkxlcyBhdXRyZXMgY29kZXMgZCfpdGF0IEhUVFAgbmUgc29udCBwYXMgZW5jb3JlIGltcGzpbWVudOlzLjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0ibW9kaWZ5aW5nX2J1Y2tldHMiIGlkPSJtb2RpZnlpbmdfYnVja2V0cyI+TW9kaWZpY2F0aW9uIGRlIGNvbnRlbnUgYXZlYyBsZXMgZmlsdHJlcyBsdWE8L2E+PC9oMj4KICAgIAogICAgPHA+CiAgICBMZXMgZm9uY3Rpb25zIGRlIGZpbHRyYWdlIGltcGzpbWVudOllcyB2aWEgbGVzIGRpcmVjdGl2ZXMgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iI2x1YWlucHV0ZmlsdGVyIj5MdWFJbnB1dEZpbHRlcjwvYT48L2NvZGU+IG91IDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9IiNsdWFvdXRwdXRmaWx0ZXIiPkx1YU91dHB1dEZpbHRlcjwvYT48L2NvZGU+IHNvbnQgY29u53VlcyBjb21tZSBkZXMKICAgIGZvbmN0aW9ucyBkZSAz6G1lIHBoYXNlIG5vbiBibG9jYW50ZXMgdXRpbGlzYW50IGRlcyBzb3VzLXJvdXRpbmVzCiAgICBwb3VyIHN1c3BlbmRyZSBldCByZXByZW5kcmUgbCdleOljdXRpb24gZCd1bmUgZm9uY3Rpb24gbG9yc3F1ZSBkZXMKICAgIHBhcXVldHMgZGUgZG9ubullcyBzb250IGVudm956XMg4CBsYSBjaGHubmUgZGUgZmlsdHJhZ2UuIExhCiAgICBzdHJ1Y3R1cmUgZGUgYmFzZSBkJ3VuZSB0ZWxsZSBmb25jdGlvbiBlc3QgOgogICAgPC9wPgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPmZ1bmN0aW9uIGZpbHRlcihyKQogICAgLS0gTm91cyBpbmRpcXVvbnMgdG91dCBkJ2Fib3JkIHF1ZSBub3VzIHNvbW1lcyBwcup0cyDgIHJlY2V2b2lyIGRlcwogICAgLS0gYmxvY3MgZGUgZG9ubullcy4KICAgIC0tIEF2YW50IGNlY2ksIG5vdXMgcG91dm9ucyBk6WZpbmlyIG5vdHJlIGVudmlyb25uZW1lbnQsIHRlc3RlcgogICAgLS0gY2VydGFpbmVzIGNvbmRpdGlvbnMsIGV0LCBzaSBub3VzIGxlIGp1Z2VvbnMgbuljZXNzYWlyZSwgcmVmdXNlciBsZQogICAgLS0gZmlsdHJhZ2UgZCd1bmUgcmVxdep0ZSA6CiAgICBpZiBzb21ldGhpbmdfYmFkIHRoZW4KICAgICAgICByZXR1cm4gLS0gTGUgZmlsdHJhZ2UgZXN0IHNhdXTpCiAgICBlbmQKICAgIC0tIFNhbnMgc2UgcHLpb2NjdXBlciBkZXMgZG9ubullcyBxdWUgbm91cyBkZXZvbnMg6XZlbnR1ZWxsZW1lbnQgYWpvdXRlciwgdW4gYXJy6nQgZXN0IHLpYWxpc+kgaWNpLgogICAgLS0gTm90ZXIgcXVlIGxlcyBmaWx0cmVzIGRlIHNvcnRpZSBzb250IGxlcyBzZXVscyBjYXBhYmxlcyBkJ2Fqb3V0ZXIgZGVzIOls6W1lbnRzIGF1IGTpYnV0IGRlcyBkb25u6WVzLgogICAgLS0gTGVzIGZpbHRyZXMgZW4gZW50cullIHBldXZlbnQgYWpvdXRlciBkZXMg6WzpbWVudHMg4CBsYSBmaW4gZGVzIGRvbm7pZXMgYXUgc3RhZGUgZmluYWwuCgogICAgY29yb3V0aW5lLnlpZWxkKFtvcHRpb25hbCBoZWFkZXIgdG8gYmUgcHJlcGVuZGVkIHRvIHRoZSBjb250ZW50XSkKCiAgICAtLSBBcHLocyBjZXQgYXJy6nQsIG5vdXMgYWxsb25zIHJlY2V2b2lyIGQnYXV0cmVzIGJsb2NzIGRlIGRvbm7pZXMsIHVuIHBhciB1biA7CiAgICAtLSBub3VzIHBvdXZvbnMgbGVzIHRyYWl0ZXIgY29tbWUgaWwgbm91cyBwbGHudCBldCBwcm9j6WRlciDgIGxhIHLpcG9uc2UuCiAgICAtLSBDZXMgYmxvY3Mgc29udCBjb25zZXJ26XMgZGFucyBsYSB2YXJpYWJsZSBnbG9iYWxlICdidWNrZXQnLCBub3VzIHLpYWxpc29ucyBkb25jCiAgICAtLSB1bmUgYm91Y2xlIHBvdXIgdulyaWZpZXIgcXVlICdidWNrZXQnIG4nZXN0IHBhcyB2aWRlIDoKICAgIHdoaWxlIGJ1Y2tldCB+PSBuaWwgZG8KICAgICAgICBsb2NhbCBvdXRwdXQgPSBtYW5nbGUoYnVja2V0KSAtLSBEbyBzb21lIHN0dWZmIHRvIHRoZSBjb250ZW50CiAgICAgICAgY29yb3V0aW5lLnlpZWxkKG91dHB1dCkgLS0gUmV0dXJuIG91ciBuZXcgY29udGVudCB0byB0aGUgZmlsdGVyIGNoYWluCiAgICBlbmQKCiAgICAtLSBVbmUgZm9pcyBsZXMgYmxvY3MgZGUgZG9ubullcyDpcHVpc+lzLCAnYnVja2V0JyBlc3QgcG9zaXRpb25u6SDgIHVuZSB2YWxldXIgdmlkZSAoJ25pbCcpLAogICAgLS0gY2UgcXVpIHZhIG5vdXMgZmFpcmUgc29ydGlyIGRlIGNldHRlIGJvdWNsZSBldCBub3VzIGFtZW5lciDgIGwn6XRhcGUgc3VpdmFudGUuCiAgICAtLSBPbiBwZXV0IGFqb3V0ZXIgY2UgcXUnb24gdmV1dCDgIGxhIGZpbiBkZXMgZG9ubullcyDgIGNldHRlIOl0YXBlLCBxdWkgY29uc3RpdHVlIGxlIGRlcm5pZXIKICAgIC0tIGFycup0LiBMZXMgZmlsdHJlcyBkJ2VudHLpZSBjb21tZSBkZSBzb3J0aWUgcGV1dmVudCBzZXJ2aXIg4CBham91dGVyIGRlcyDpbOltZW50cyDgIGxhIGZpbgogICAgLS0gIGRlcyBkb25u6WVzIOAgY2V0dGUg6XRhcGUuCiAgICBjb3JvdXRpbmUueWllbGQoW29wdGlvbmFsIGZvb3RlciB0byBiZSBhcHBlbmRlZCB0byB0aGUgY29udGVudF0pCmVuZDwvcHJlPgoKPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9InNlY3Rpb24iPgo8aDI+PGEgbmFtZT0iZGF0YWJhc2VzIiBpZD0iZGF0YWJhc2VzIj5Db25uZWN0aXZpdOkgYXV4IGJhc2VzIGRlIGRvbm7pZXM8L2E+PC9oMj4KICAgIAogICAgPHA+TW9kX2x1YSBpbXBs6W1lbnRlIHVuZSBmb25jdGlvbm5hbGl06SBiYXNpcXVlIGRlIGNvbm5leGlvbiBhdXgKYmFzZXMgZGUgZG9ubullcyBwZXJtZXR0YW50IGQnZW52b3llciBkZXMgcmVxdep0ZXMgb3UgZCdleOljdXRlciBkZXMKY29tbWFuZGVzIGF1cHLocyBkZXMgbW90ZXVycyBkZSBiYXNlIGRlIGRvbm7pZXMgbGVzIHBsdXMgY291cmFudHMKKG15U1FMLCBQb3N0Z3JlU1FMLCBGcmVlVERTLCBPREJDLCBTUUxpdGUsIE9yYWNsZSksIGFpbnNpIHF1ZSBtb2RfZGJkLgogICAgPC9wPgogICAgPHA+TCdleGVtcGxlIHN1aXZhbnQgbW9udHJlIGNvbW1lbnQgc2UgY29ubmVjdGVyIOAgdW5lIGJhc2UgZGUKZG9ubullcyBldCBleHRyYWlyZSBkZXMgaW5mb3JtYXRpb25zIGQndW5lIHRhYmxlIDo8L3A+CiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+ZnVuY3Rpb24gaGFuZGxlKHIpCiAgICAtLSBjb25uZXhpb24g4CBsYSBiYXNlIGRlIGRvbm7pZXMKICAgIGxvY2FsIGRhdGFiYXNlLCBlcnIgPSByOmRiYWNxdWlyZSgibXlzcWwiLCAic2VydmVyPWxvY2FsaG9zdCx1c2VyPXNvbWV1c2VyLHBhc3M9c29tZXBhc3MsZGJuYW1lPW15ZGIiKQogICAgaWYgbm90IGVyciB0aGVuCiAgICAgICAgLS0gU+lsZWN0aW9uIGRlIGNlcnRhaW5lcyBpbmZvcm1hdGlvbnMKICAgICAgICBsb2NhbCByZXN1bHRzLCBlcnIgPSBkYXRhYmFzZTpzZWxlY3QociwgIlNFTEVDVCBgbmFtZWAsIGBhZ2VgIEZST00gYHBlb3BsZWAgV0hFUkUgMSIpCiAgICAgICAgaWYgbm90IGVyciB0aGVuCiAgICAgICAgICAgIGxvY2FsIHJvd3MgPSByZXN1bHRzKDApIC0tIGV4dHJhaXQgdG91cyBsZXMgZW5yZWdpc3RyZW1lbnRzIGVuIG1vZGUgc3luY2hyb25lCiAgICAgICAgICAgIGZvciBrLCByb3cgaW4gcGFpcnMocm93cykgZG8KICAgICAgICAgICAgICAgIHI6cHV0cyggc3RyaW5nLmZvcm1hdCgiTmFtZTogJXMsIEFnZTogJXMmbHQ7YnIvJmd0OyIsIHJvd1sxXSwgcm93WzJdKSApCiAgICAgICAgICAgIGVuZAogICAgICAgIGVsc2UKICAgICAgICAgICAgcjpwdXRzKCJEYXRhYmFzZSBxdWVyeSBlcnJvcjogIiAuLiBlcnIpCiAgICAgICAgZW5kCiAgICAgICAgZGF0YWJhc2U6Y2xvc2UoKQogICAgZWxzZQogICAgICAgIHI6cHV0cygiQ29ubmV4aW9uIOAgbGEgYmFzZSBkZSBkb25u6WVzIGltcG9zc2libGUgOiAiIC4uIGVycikKICAgIGVuZAplbmQ8L3ByZT4KCiAgICA8cD4KICAgIFBvdXIgdXRpbGlzZXIgPGNvZGUgY2xhc3M9Im1vZHVsZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9kYmQuaHRtbCI+bW9kX2RiZDwvYT48L2NvZGU+LCBzcOljaWZpZXoKPGNvZGU+bW9kX2RiZDwvY29kZT4gY29tbWUgdHlwZSBkZSBiYXNlIGRlIGRvbm7pZXMsIG91IGxhaXNzZXogbGUgY2hhbXAKdmlkZSA6CiAgICA8L3A+CiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+bG9jYWwgZGF0YWJhc2UgPSByOmRiYWNxdWlyZSgibW9kX2RiZCIpPC9wcmU+CgogICAgPGgzPjxhIG5hbWU9ImRhdGFiYXNlX29iamVjdCIgaWQ9ImRhdGFiYXNlX29iamVjdCI+TCdvYmpldCBkYXRhYmFzZSBldCBzZXMgbel0aG9kZXM8L2E+PC9oMz4KICAgICAgICAKICAgICAgICA8cD5MJ29iamV0IGRhdGFiYXNlIHJlbnZveekgcGFyIDxjb2RlPmRiYWNxdWlyZTwvY29kZT4gcG9zc+hkZQpsZXMgbel0aG9kZXMgc3VpdmFudGVzIDo8L3A+CiAgICAgICAgPHA+PHN0cm9uZz5T6WxlY3Rpb24gbm9ybWFsZSBldCByZXF16nRlIHZlcnMgdW5lIGJhc2UgZGUgZG9ubullcwo6PC9zdHJvbmc+PC9wPgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPi0tIEV46WN1dGlvbiBkJ3VuZSByZXF16nRlIGV0IHJlbnZvaWUgZHUgbm9tYnJlIGQnZW5yZWdpc3RyZW1lbnRzCmFmZmVjdOlzIDoKbG9jYWwgYWZmZWN0ZWQsIGVycm1zZyA9IGRhdGFiYXNlOnF1ZXJ5KHIsICJERUxFVEUgRlJPTSBgdGJsYCBXSEVSRSAxIikKCi0tIEV46WN1dGlvbiBkJ3VuZSByZXF16nRlIGV0IHJlbnZvaWUgZHUgculzdWx0YXQgcXVpIHBldXQg6nRyZSB1dGlsaXPpCmVuIG1vZGUgc3luY2hyb25lIG91IGFzeW5jaHJvbmUgOgpsb2NhbCByZXN1bHQsIGVycm1zZyA9IGRhdGFiYXNlOnNlbGVjdChyLCAiU0VMRUNUICogRlJPTSBgcGVvcGxlYCBXSEVSRSAxIik8L3ByZT4KCiAgICAgICAgPHA+PHN0cm9uZz5VdGlsaXNhdGlvbiBkZSByZXF16nRlcyBwculwYXLpZXMgKHJlY29tbWFuZOkpIDo8L3N0cm9uZz48L3A+CiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+LS0gQ3LpYXRpb24gZXQgZXjpY3V0aW9uIGQndW5lIHJlcXXqdGUgcHLpcGFy6WUgOgpsb2NhbCBzdGF0ZW1lbnQsIGVycm1zZyA9IGRhdGFiYXNlOnByZXBhcmUociwgIkRFTEVURSBGUk9NIGB0YmxgIFdIRVJFIGBhZ2VgICZndDsgJXUiKQppZiBub3QgZXJybXNnIHRoZW4KICAgIGxvY2FsIHJlc3VsdCwgZXJybXNnID0gc3RhdGVtZW50OnF1ZXJ5KDIwKSAtLSBleOljdXRlIGxhIHJlcXXqdGUgcG91ciBhZ2UgJmd0OyAyMAplbmQKCi0tIEV4dHJhaXQgdW5lIHJlcXXqdGUgcHLpcGFy6WUgZGVwdWlzIHVuZSBkaXJlY3RpdmUgREJEUHJlcGFyZVNRTCA6CmxvY2FsIHN0YXRlbWVudCwgZXJybXNnID0gZGF0YWJhc2U6cHJlcGFyZWQociwgInNvbWVUYWciKQppZiBub3QgZXJybXNnIHRoZW4KICAgIGxvY2FsIHJlc3VsdCwgZXJybXNnID0gc3RhdGVtZW50OnNlbGVjdCgiSm9obiBEb2UiLCAxMjMpIC0tIGluamVjdGUgbGVzIHZhbGV1cnMgIkpvaG4gRG9lIiBldCAxMjMgZGFucyBsYSByZXF16nRlCmVuZDwvcHJlPgoKICAgICAgICA8cD48c3Ryb25nPkVjaGFwcGVtZW50IGRlIHZhbGV1cnMsIGZlcm1ldHVyZSBkZSBsYSBiYXNlIGRvbm7pZXMsCmV0Yy4uLjwvc3Ryb25nPjwvcD4KICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj4tLSBFY2hhcHBlIHVuZSB2YWxldXIgcG91ciBwb3V2b2lyIGwndXRpbGlzZXIgZGFucyB1bmUgcmVxdep0ZSA6CmxvY2FsIGVzY2FwZWQgPSBkYXRhYmFzZTplc2NhcGUociwgW1siJ3xibGFibGFdXSkKCi0tIEZlcm1lIHVuZSBiYXNlIGRlIGRvbm7pZXMgZXQgbGli6HJlIGxlcyBsaWVucyB2ZXJzIGNldHRlIGRlcm5p6HJlIDoKZGF0YWJhc2U6Y2xvc2UoKQoKLS0gVulyaWZpZSBzaSB1bmUgY29ubmV4aW9uIOAgdW5lIGJhc2UgZGUgZG9ubullcyBlc3QgZW4gc2VydmljZSBldApvcOlyYXRpb25uZWxsZSA6CmxvY2FsIGNvbm5lY3RlZCA9IGRhdGFiYXNlOmFjdGl2ZSgpPC9wcmU+CgogICAgCiAgICA8aDM+PGEgbmFtZT0icmVzdWx0X3NldHMiIGlkPSJyZXN1bHRfc2V0cyI+VHJhdmFpbCBhdmVjIGxlcyBqZXV4IGQnZW5yZWdpc3RyZW1lbnRzIHJlbnZveelzIHBhciBsZXMgcmVxdep0ZXM8L2E+PC9oMz4KICAgIAogICAgPHA+TGVzIGpldXggZCdlbnJlZ2lzdHJlbWVudHMgcmVudm956XMgcGFyIDxjb2RlPmRiOnNlbGVjdDwvY29kZT4gb3UgcGFyIGRlcwpyZXF16nRlcyBwculwYXLpZXMgY3Lp6WVzIHBhciA8Y29kZT5kYjpwcmVwYXJlPC9jb2RlPiBwZXJtZXR0ZW50IGRlCnPpbGVjdGlvbm5lciBkZXMgZW5yZWdpc3RyZW1lbnRzIGVuIG1vZGUgc3luY2hyb25lIG91CmFzeW5jaHJvbmUsIHNlbG9uIGxlIG5vbWJyZSBkJ2VucmVnaXN0cmVtZW50cyBzcOljaWZp6SA6PGJyIC8+CiAgICA8Y29kZT5yZXN1bHQoMCk8L2NvZGU+IHPpbGVjdGlvbm5lIHRvdXMgbGVzIGVucmVnaXN0cmVtZW50cyBlbiBtb2RlCnN5bmNocm9uZSBlbiByZW52b3lhbnQgdW5lIHRhYmxlIGQnZW5yZWdpc3RyZW1lbnRzLjxiciAvPgogICAgPGNvZGU+cmVzdWx0KC0xKTwvY29kZT4gc+lsZWN0aW9ubmUgbGUgcHJvY2hhaW4gZW5yZWdpc3RyZW1lbnQgZGlzcG9uaWJsZSBlbgptb2RlIGFzeW5jaHJvbmUuPGJyIC8+CiAgICA8Y29kZT5yZXN1bHQoTik8L2NvZGU+IHPpbGVjdGlvbm5lIGwnZW5yZWdpc3RyZW1lbnQgbnVt6XJvCjxjb2RlPk48L2NvZGU+IGVuIG1vZGUgYXN5bmNocm9uZS4KICAgIDwvcD4KICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj4tLSBleHRyYWl0IHVuIGpldSBkJ2VucmVnaXN0cmVtZW50cyB2aWEgdW5lIHJlcXXqdGUgculndWxp6HJlIDoKbG9jYWwgcmVzdWx0LCBlcnIgPSBkYjpzZWxlY3QociwgIlNFTEVDVCAqIEZST00gYHRibGAgV0hFUkUgMSIpCgpsb2NhbCByb3dzID0gcmVzdWx0KDApIC0tIHPpbGVjdGlvbm5lIHRvdXMgbGVzIGVucmVnaXN0cmVtZW50cyBlbiBtb2RlIHN5bmNocm9uZQpsb2NhbCByb3cgPSByZXN1bHQoLTEpIC0tIHPpbGVjdGlvbm5lIGxlIHByb2NoYWluIGVucmVnaXN0cmVtZW50IGRpc3BvbmlibGUgZW4gbW9kZSBhc3luY2hyb25lCmxvY2FsIHJvdyA9IHJlc3VsdCgxMjM0KSAtLSBz6WxlY3Rpb25uZSBsJ2VucmVnaXN0cmVtZW50IDEyMzQgZW4gbW9kZSBhc3luY2hyb25lCmxvY2FsIHJvdyA9IHJlc3VsdCgtMSwgdHJ1ZSkgLS0gTGl0IGwnZW5yZWdpc3RyZW1lbnQgc3VpdmFudCBlbiB1dGlsaXNhbnQgbGVzIG5vbXMgZCdlbnJlZ2lzdHJlbWVudHMgY29tbWUgaW5kZXguPC9wcmU+CgogICAgPHA+SWwgZXN0IHBvc3NpYmxlIGRlIGNvbnN0cnVpcmUgdW5lIGZvbmN0aW9uIHF1aSByZW52b2llIHVuZQpmb25jdGlvbiBpdOlyYXRpdmUgcGVybWV0dGFudCBkZSB0cmFpdGVyIHRvdXMgbGVzIGVucmVnaXN0cmVtZW50IGVuIG1vZGUKc3luY2hyb25lIG91IGFzeW5jaHJvbmUgc2Vsb24gbGEgdmFsZXVyIGRlIGwnYXJndW1lbnQgYXN5bmMgOgogICAgPC9wPgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPmZ1bmN0aW9uIHJvd3MocmVzdWx0c2V0LCBhc3luYykKICAgIGxvY2FsIGEgPSAwCiAgICBsb2NhbCBmdW5jdGlvbiBnZXRuZXh0KCkKICAgICAgICBhID0gYSArIDEKICAgICAgICBsb2NhbCByb3cgPSByZXN1bHRzZXQoLTEpCiAgICAgICAgcmV0dXJuIHJvdyBhbmQgYSBvciBuaWwsIHJvdwogICAgZW5kCiAgICBpZiBub3QgYXN5bmMgdGhlbgogICAgICAgIHJldHVybiBwYWlycyhyZXN1bHRzZXQoMCkpCiAgICBlbHNlCiAgICAgICAgcmV0dXJuIGdldG5leHQsIHNlbGYKICAgIGVuZAplbmQKCmxvY2FsIHN0YXRlbWVudCwgZXJyID0gZGI6cHJlcGFyZShyLCAiU0VMRUNUICogRlJPTSBgdGJsYCBXSEVSRSBgYWdlYCAmZ3Q7ICV1IikKaWYgbm90IGVyciB0aGVuCiAgICAgLS0gc+lsZWN0aW9ubmUgZGVzIGVucmVnaXN0cmVtZW50cyBlbiBtb2RlIGFzeW5jaHJvbmUgOgogICAgbG9jYWwgcmVzdWx0LCBlcnIgPSBzdGF0ZW1lbnQ6c2VsZWN0KDIwKQogICAgaWYgbm90IGVyciB0aGVuCiAgICAgICAgZm9yIGluZGV4LCByb3cgaW4gcm93cyhyZXN1bHQsIHRydWUpIGRvCiAgICAgICAgICAgIC4uLi4KICAgICAgICBlbmQKICAgIGVuZAoKICAgICAtLSBz6WxlY3Rpb25uZSBkZXMgZW5yZWdpc3RyZW1lbnRzIGVuIG1vZGUgc3luY2hyb25lIDoKICAgIGxvY2FsIHJlc3VsdCwgZXJyID0gc3RhdGVtZW50OnNlbGVjdCgyMCkKICAgIGlmIG5vdCBlcnIgdGhlbgogICAgICAgIGZvciBpbmRleCwgcm93IGluIHJvd3MocmVzdWx0LCBmYWxzZSkgZG8KICAgICAgICAgICAgLi4uLgogICAgICAgIGVuZAogICAgZW5kCmVuZDwvcHJlPgoKICAgIAogICAgPGgzPjxhIG5hbWU9ImNsb3NpbmdfZGF0YWJhc2VzIiBpZD0iY2xvc2luZ19kYXRhYmFzZXMiPkZlcm1ldHVyZSBkJ3VuZSBjb25uZXhpb24g4CB1bmUgYmFzZSBkZSBkb25u6WVzPC9hPjwvaDM+CiAgICAgICAgCgogICAgPHA+TG9yc3F1J2VsbGVzIG5lIHNvbnQgcGx1cyB1dGlsaXPpZXMsIGxlcyBjb25uZXhpb25zIGF1eCBiYXNlcyBkZQpkb25u6WVzIGRvaXZlbnQg6nRyZSBmZXJt6WVzIGF2ZWMgPGNvZGU+ZGF0YWJhc2U6Y2xvc2UoKTwvY29kZT4uIFNpIHZvdXMKbmUgbGVzIGZlcm1leiBwYXMgbWFudWVsbGVtZW50LCBtb2RfbHVhIGxlcyBmZXJtZXJhIHBldXQt6nRyZSBlbiB0YW50CnF1ZSBy6XNpZHVzIGNvbGxlY3TpcywgbWFpcyBzaSBjZSBuJ2VzdCBwYXMgbGUgY2FzLCB2b3VzIHBvdXZleiBmaW5pcgpwYXMgYXZvaXIgdHJvcCBkZSBjb25uZXhpb25zIHZlcnMgbGEgYmFzZSBkZSBkb25u6WVzIGludXRpbGlz6WVzLiBMZXMKZGV1eCBtZXN1cmVzIHN1aXZhbnRlcyBzb250IHByYXRpcXVlbWVudCBpZGVudGlxdWVzIDoKICAgIDwvcD4KICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj4tLSBN6XRob2RlIDEgOiBmZXJtZXR1cmUgbWFudWVsbGUgZGUgbGEgY29ubmV4aW9uCmxvY2FsIGRhdGFiYXNlID0gcjpkYmFjcXVpcmUoIm1vZF9kYmQiKQpkYXRhYmFzZTpjbG9zZSgpIC0tIGMnZXN0IHRvdXQKCi0tIE3pdGhvZGUgMiA6IG9uIGxhaXNzZSBsZSBjb2xsZWN0ZXVyIGRlIHLpc2lkdXMgbGEgZmVybWVyCmxvY2FsIGRhdGFiYXNlID0gcjpkYmFjcXVpcmUoIm1vZF9kYmQiKQpkYXRhYmFzZSA9IG5pbCAtLSBvbiBjb3VwZSBsZSBsaWVuCmNvbGxlY3RnYXJiYWdlKCkgLS0gZmVybWV0dXJlIGRlIGxhIGNvbm5leGlvbiBwYXIgbGUgY29sbGVjdGV1ciBkZSBy6XNpZHVzPC9wcmU+CgogICAgCiAgICA8aDM+PGEgbmFtZT0iZGF0YWJhc2VfY2F2ZWF0IiBpZD0iZGF0YWJhc2VfY2F2ZWF0Ij5QculjYXV0aW9ucyDgIHByZW5kcmUgbG9yc3F1ZSBsJ29uIHRyYXZhaWxsZSBhdmVjIGxlcyBiYXNlcwpkZSBkb25u6WVzPC9hPjwvaDM+CiAgICAKICAgIDxwPkJpZW4gcXVlIGxlcyBmb25jdGlvbnMgPGNvZGU+cXVlcnk8L2NvZGU+IGV0IDxjb2RlPnJ1bjwvY29kZT4Kc29pZW50IHRvdWpvdXJzIGRpc3BvbmlibGVzLCBpbCBlc3QgcmVjb21tYW5k6SBkJ3V0aWxpc2VyIGRlcyByZXF16nRlcwpwculwYXLpZXMgY2hhcXVlIGZvaXMgcXVlIHBvc3NpYmxlLCBhZmluIGQndW5lIHBhcnQgZCdvcHRpbWlzZXIgbGVzCnBlcmZvcm1hbmNlcyAoc2kgdm90cmUgY29ubmV4aW9uIHJlc3RlIGxvbmd0ZW1wcyBlbiB2aWUpLCBldCBkJ2F1dHJlIHBhcnQKbWluaW1pc2VyIGxlIHJpc3F1ZSBkJ2F0dGFxdWVzIHBhciBpbmplY3Rpb24gU1FMLiBMZXMgZm9uY3Rpb25zCjxjb2RlPnJ1bjwvY29kZT4gZXQgPGNvZGU+cXVlcnk8L2NvZGU+IG5lIGRvaXZlbnQg6nRyZSB1dGlsaXPpZXMgcXVlCmxvcnNxdWUgbGEgcmVxdep0ZSBuZSBjb250aWVudCBwYXMgZGUgdmFyaWFibGVzIChyZXF16nRlIHN0YXRpcXVlKS4gRGFucwpsZSBjYXMgZGVzIHJlcXXqdGVzIGR5bmFtaXF1ZXMsIHV0aWxpc2V6IDxjb2RlPmRiOnByZXBhcmU8L2NvZGU+IG91Cjxjb2RlPmRiOnByZXBhcmVkPC9jb2RlPi4KICAgIDwvcD4KICAgIAoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Imx1YWF1dGh6cHJvdmlkZXIiIGlkPSJsdWFhdXRoenByb3ZpZGVyIj5EaXJlY3RpdmU8L2E+IDxhIG5hbWU9Ikx1YUF1dGh6UHJvdmlkZXIiIGlkPSJMdWFBdXRoelByb3ZpZGVyIj5MdWFBdXRoelByb3ZpZGVyPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+QnJhbmNoZSB1bmUgZm9uY3Rpb24gZm91cm5pc3NldXIgZCdhdXRvcmlzYXRpb24gZGFucyA8Y29kZSBjbGFzcz0ibW9kdWxlIj48YSBocmVmPSIuLi9tb2QvbW9kX2F1dGh6X2NvcmUuaHRtbCI+bW9kX2F1dGh6X2NvcmU8L2E+PC9jb2RlPgo8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheGU6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YUF1dGh6UHJvdmlkZXIgcHJvdmlkZXJfbmFtZSAvcGF0aC90by9sdWEvc2NyaXB0Lmx1YSBmdW5jdGlvbl9uYW1lPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHRlOjwvYT48L3RoPjx0ZD5jb25maWd1cmF0aW9uIGR1IHNlcnZldXI8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1dDo8L2E+PC90aD48dGQ+RXhw6XJpbWVudGFsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sdWE8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb21wYXRpYmlsaXR5Ij5Db21wYXRpYmlsaXTpOjwvYT48L3RoPjx0ZD5EaXNwb25pYmxlIGRlcHVpcyBsYSB2ZXJzaW9uIDIuNC4zIGR1IHNlcnZldXIgSFRUUCBBcGFjaGU8L3RkPjwvdHI+CjwvdGFibGU+CjxwPkxvcnNxdSd1bmUgZm9uY3Rpb24gbHVhIGEg6XTpIGVucmVnaXN0cullIGVuIHRhbnQgcXVlIGZvdXJuaXNzZXVyCmQnYXV0b3Jpc2F0aW9uLCBlbGxlIHBldXQg6nRyZSBhcHBlbOllIHZpYSBsYSBkaXJlY3RpdmUgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+PGEgaHJlZj0iLi4vbW9kL21vZF9hdXRoel9jb3JlLmh0bWwjcmVxdWlyZSI+UmVxdWlyZTwvYT48L2NvZGU+IDo8L3A+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkx1YVJvb3QgIi91c3IvbG9jYWwvYXBhY2hlMi9sdWEiCkx1YUF1dGh6UHJvdmlkZXIgZm9vIGF1dGh6Lmx1YSBhdXRoel9jaGVja19mb28KJmx0O0xvY2F0aW9uICIvIiZndDsKICBSZXF1aXJlIGZvbyBqb2huZG9lCiZsdDsvTG9jYXRpb24mZ3Q7PC9wcmU+Cgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cmVxdWlyZSAiYXBhY2hlMiIKZnVuY3Rpb24gYXV0aHpfY2hlY2tfZm9vKHIsIHdobykKICAgIGlmIHIudXNlciB+PSB3aG8gdGhlbiByZXR1cm4gYXBhY2hlMi5BVVRIWl9ERU5JRUQKICAgIHJldHVybiBhcGFjaGUyLkFVVEhaX0dSQU5URUQKZW5kPC9wcmU+CgoKCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJsdWFjb2RlY2FjaGUiIGlkPSJsdWFjb2RlY2FjaGUiPkRpcmVjdGl2ZTwvYT4gPGEgbmFtZT0iTHVhQ29kZUNhY2hlIiBpZD0iTHVhQ29kZUNhY2hlIj5MdWFDb2RlQ2FjaGU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Db25maWd1cmUgbGUgY2FjaGUgZGUgY29kZSBjb21waWzpLjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4ZTo8L2E+PC90aD48dGQ+PGNvZGU+THVhQ29kZUNhY2hlIHN0YXR8Zm9yZXZlcnxuZXZlcjwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5E6WZhdXQ6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YUNvZGVDYWNoZSBzdGF0PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHRlOjwvYT48L3RoPjx0ZD5jb25maWd1cmF0aW9uIGR1IHNlcnZldXIsIHNlcnZldXIgdmlydHVlbCwgculwZXJ0b2lyZSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPkFsbG93T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHV0OjwvYT48L3RoPjx0ZD5FeHDpcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPC90YWJsZT48cD4KICAgIENldHRlIGRpcmVjdGl2ZSBwZXJtZXQgZGUgZOlmaW5pciBsZSBjb21wb3J0ZW1lbnQgZHUgY2FjaGUgZGUgY29kZQogICAgZW4gbeltb2lyZS4gTGEgdmFsZXVyIHBhciBk6WZhdXQgZXN0IHN0YXQgOyBkYW5zIGNlIGNhcywgbGUgc2NyaXB0CiAgICBkdSBuaXZlYXUgbGUgcGx1cyBoYXV0IChldCBwYXMgbGVzIHNjcmlwdHMgaW5jbHVzKSBlc3QgdulyaWZp6SDgCiAgICBjaGFxdWUgZm9pcyBxdWUgY2UgZmljaGllciBlc3QgbuljZXNzYWlyZSwgZXQgZXN0IHJlY2hhcmfpIHNpIGxhCiAgICBkYXRlIGRlIG1vZGlmaWNhdGlvbiBlc3QgcGx1cyBy6WNlbnRlIHF1ZSBjZWxsZSBkdSBzY3JpcHQgZOlq4AogICAgY2hhcmfpLiBMZXMgYXV0cmVzIHZhbGV1cnMgcGVybWV0dGVudCByZXNwZWN0aXZlbWVudCBkZSBnYXJkZXIgbGUKICAgIGZpY2hpZXIgZW4gY2FjaGUgcGVycOl0dWVsbGVtZW50IChmb3JldmVyIC0gamFtYWlzIHbpcmlmaekgbmkKICAgIHJlbXBsYWPpKSwgb3UgZGUgbmUgamFtYWlzIGxlIG1ldHRyZSBlbiBjYWNoZSAobmV2ZXIpLjwvcD4KCiAgICA8cD5FbiBn6W7pcmFsLCBsZXMgdmFsZXVycyBzdGF0IGV0IGZvcmV2ZXIgc29udCB1dGlsaXPpZXMgcG91ciB1bgogICAgc2VydmV1ciBlbiBwcm9kdWN0aW9uLCBldCBsZXMgdmFsZXVycyBzdGF0IG91IG5ldmVyIHBvdXIgdW4gc2VydmV1cgogICAgZW4gZOl2ZWxvcHBlbWVudC48L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkV4ZW1wbGVzIDo8L2gzPjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5MdWFDb2RlQ2FjaGUgc3RhdApMdWFDb2RlQ2FjaGUgZm9yZXZlcgpMdWFDb2RlQ2FjaGUgbmV2ZXI8L3ByZT4KPC9kaXY+CgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Imx1YWhvb2thY2Nlc3NjaGVja2VyIiBpZD0ibHVhaG9va2FjY2Vzc2NoZWNrZXIiPkRpcmVjdGl2ZTwvYT4gPGEgbmFtZT0iTHVhSG9va0FjY2Vzc0NoZWNrZXIiIGlkPSJMdWFIb29rQWNjZXNzQ2hlY2tlciI+THVhSG9va0FjY2Vzc0NoZWNrZXI8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Gb3Vybml0IHVuIHBvaW50IGQnZW50cullIHBvdXIgbGEgcGhhc2UgYWNjZXNzX2NoZWNrZXIgZHUKdHJhaXRlbWVudCBkZSBsYSByZXF16nRlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXhlOjwvYT48L3RoPjx0ZD48Y29kZT5MdWFIb29rQWNjZXNzQ2hlY2tlciAgL2NoZW1pbi92ZXJzL2x1YS9zY3JpcHQubHVhICBob29rX2Z1bmN0aW9uX25hbWUgW2Vhcmx5fGxhdGVdPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHRlOjwvYT48L3RoPjx0ZD5jb25maWd1cmF0aW9uIGR1IHNlcnZldXIsIHNlcnZldXIgdmlydHVlbCwgculwZXJ0b2lyZSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPkFsbG93T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHV0OjwvYT48L3RoPjx0ZD5FeHDpcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdOk6PC9hPjwvdGg+PHRkPkxlIHRyb2lzaehtZSBhcmd1bWVudCBvcHRpb25uZWwgZXN0IGRpc3BvbmlibGUgZGVwdWlzIGxhCnZlcnNpb24gMi4zLjE1IGR1IHNlcnZldXIgSFRUUCBBcGFjaGUuPC90ZD48L3RyPgo8L3RhYmxlPgo8cD5Bam91dGUgdm90cmUgZm9uY3Rpb24gZCdhY2Nyb2NoZSDgIGxhIHBoYXNlIGFjY2Vzc19jaGVja2VyLiBVbmUKZm9uY3Rpb24gZCdhY2Nyb2NoZSBhY2Nlc3MgY2hlY2tlciByZW52b2llIGVuIGfpbulyYWwgT0ssIERFQ0xJTkVELCBvdQpIVFRQX0ZPUkJJRERFTi48L3A+CjxkaXYgY2xhc3M9Im5vdGUiPjxoMz5PcmRvbm5hbmNlbWVudDwvaDM+PHA+TGVzIGFyZ3VtZW50cyBvcHRpb25uZWxzCiAgICJlYXJseSIgb3UgImxhdGUiIHBlcm1ldHRlbnQgZGUgY29udHL0bGVyIGxlIG1vbWVudCBhdXF1ZWwgY2Ugc2NyaXB0CiAgIHMnZXjpY3V0ZSBwYXIgcmFwcG9ydCBhdXggYXV0cmVzIG1vZHVsZXMuPC9wPjwvZGl2PgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Imx1YWhvb2thdXRoY2hlY2tlciIgaWQ9Imx1YWhvb2thdXRoY2hlY2tlciI+RGlyZWN0aXZlPC9hPiA8YSBuYW1lPSJMdWFIb29rQXV0aENoZWNrZXIiIGlkPSJMdWFIb29rQXV0aENoZWNrZXIiPkx1YUhvb2tBdXRoQ2hlY2tlcjwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkZvdXJuaXQgdW4gcG9pbnQgZCdlbnRy6WUgcG91ciBsYSBwaGFzZSBhdXRoX2NoZWNrZXIgZHUKdHJhaXRlbWVudCBkZSBsYSByZXF16nRlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXhlOjwvYT48L3RoPjx0ZD48Y29kZT5MdWFIb29rQXV0aENoZWNrZXIgIC9jaGVtaW4vdmVycy9sdWEvc2NyaXB0Lmx1YSBob29rX2Z1bmN0aW9uX25hbWUgW2Vhcmx5fGxhdGVdPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHRlOjwvYT48L3RoPjx0ZD5jb25maWd1cmF0aW9uIGR1IHNlcnZldXIsIHNlcnZldXIgdmlydHVlbCwgculwZXJ0b2lyZSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPkFsbG93T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHV0OjwvYT48L3RoPjx0ZD5FeHDpcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdOk6PC9hPjwvdGg+PHRkPkxlIHRyb2lzaehtZSBhcmd1bWVudCBvcHRpb25uZWwgZXN0IGRpc3BvbmlibGUgZGVwdWlzIGxhCnZlcnNpb24gMi4zLjE1IGR1IHNlcnZldXIgSFRUUCBBcGFjaGUuPC90ZD48L3RyPgo8L3RhYmxlPgo8cD5JbnZvcXVlIHVuZSBmb25jdGlvbiBsdWEgYXUgY291cnMgZGUgbGEgcGhhc2UgYXV0aF9jaGVja2VyIGR1CnRyYWl0ZW1lbnQgZGUgbGEgcmVxdep0ZS4gQ2V0dGUgZGlyZWN0aXZlIHBldXQgcyd1dGlsaXNlciBwb3VyCmltcGzpbWVudGVyIHVuZSB26XJpZmljYXRpb24gYXJiaXRyYWlyZSBkZSBsJ2F1dGhlbnRpZmljYXRpb24gZXQgZGUKbCdhdXRvcmlzYXRpb24uIFZvaWNpIHVuIGV4ZW1wbGUgdHLocyBzaW1wbGUgOgo8L3A+CjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5yZXF1aXJlICdhcGFjaGUyJwoKLS0gZm9uY3Rpb24gZCdhY2Nyb2NoZSBhdXRoY2hlY2sgZmljdGl2ZQotLSBTaSBsYSByZXF16nRlIG5lIGNvbnRpZW50IGF1Y3VuZSBkb25u6WUgZCdhdXRoZW50aWZpY2F0aW9uLCBsJ2VuLXTqdGUKLS0gZGUgbGEgculwb25zZSBlc3QgZOlmaW5pIGV0IHVuIGNvZGUgNDAxIGVzdCByZW52b3npIGFmaW4gZGUgZGVtYW5kZXIgYXUKLS0gbmF2aWdhdGV1ciBkJ2VmZmVjdHVlciB1bmUgYXV0aGVudGlmaWNhdGlvbiBiYXNpcXVlLiBTaSBsYSByZXF16nRlCi0tIGNvbXBvcnRlIGRlcyBkb25u6WVzIGQnYXV0aGVudGlmaWNhdGlvbiwgZWxsZXMgbmUgc29udCBwYXMgdnJhaW1lbnQKLS0gY29uc3VsdOllcywgbWFpcyBvbiBhZG1ldCBsYSBwcmlzZSBlbiBjb21wdGUgZGUgbCd1dGlsaXNhdGV1ciAnZm9vJyBldAotLSBvbiBsYSB2YWxpZGUuIE9uIHbpcmlmaWUgZW5zdWl0ZSBzaSBsJ3V0aWxpc2F0ZXVyIGVzdCBiaWVuICdmb28nIGV0IG9uCi0tIGFjY2VwdGUgbGEgcmVxdep0ZS4KZnVuY3Rpb24gYXV0aGNoZWNrX2hvb2socikKCiAgIC0tIHJlY2hlcmNoZSBkZXMgaW5mb3JtYXRpb25zIGQnYXV0aGVudGlmaWNhdGlvbgogICBhdXRoID0gci5oZWFkZXJzX2luWydBdXRob3JpemF0aW9uJ10KICAgaWYgYXV0aCB+PSBuaWwgdGhlbgogICAgIC0tIGTpZmluaXRpb24gZCd1biB1dGlsaXNhdGV1ciBwYXIgZOlmYXV0CiAgICAgci51c2VyID0gJ2ZvbycKICAgZW5kCgogICBpZiByLnVzZXIgPT0gbmlsIHRoZW4KICAgICAgcjpkZWJ1ZygiYXV0aGNoZWNrOiB1c2VyIGlzIG5pbCwgcmV0dXJuaW5nIDQwMSIpCiAgICAgIHIuZXJyX2hlYWRlcnNfb3V0WydXV1ctQXV0aGVudGljYXRlJ10gPSAnQmFzaWMgcmVhbG09IldhbGx5V29ybGQiJwogICAgICByZXR1cm4gNDAxCiAgIGVsc2VpZiByLnVzZXIgPT0gImZvbyIgdGhlbgogICAgICByOmRlYnVnKCd1c2VyIGZvbzogT0snKQogICBlbHNlCiAgICAgIHI6ZGVidWcoImF1dGhjaGVjazogdXNlcj0nIiAuLiByLnVzZXIgLi4gIiciKQogICAgICByLmVycl9oZWFkZXJzX291dFsnV1dXLUF1dGhlbnRpY2F0ZSddID0gJ0Jhc2ljIHJlYWxtPSJXYWxseVdvcmxkIicKICAgICAgcmV0dXJuIDQwMQogICBlbmQKICAgcmV0dXJuIGFwYWNoZTIuT0sKZW5kPC9wcmU+Cgo8ZGl2IGNsYXNzPSJub3RlIj48aDM+T3Jkb25uYW5jZW1lbnQ8L2gzPjxwPkxlcyBhcmd1bWVudHMgb3B0aW9ubmVscwogICAiZWFybHkiIG91ICJsYXRlIiBwZXJtZXR0ZW50IGRlIGNvbnRy9GxlciBsZSBtb21lbnQgYXVxdWVsIGNlIHNjcmlwdAogICBzJ2V46WN1dGUgcGFyIHJhcHBvcnQgYXV4IGF1dHJlcyBtb2R1bGVzLjwvcD48L2Rpdj4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJsdWFob29rY2hlY2t1c2VyaWQiIGlkPSJsdWFob29rY2hlY2t1c2VyaWQiPkRpcmVjdGl2ZTwvYT4gPGEgbmFtZT0iTHVhSG9va0NoZWNrVXNlcklEIiBpZD0iTHVhSG9va0NoZWNrVXNlcklEIj5MdWFIb29rQ2hlY2tVc2VySUQ8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Gb3Vybml0IHVuIHBvaW50IGQnZW50cullIHBvdXIgbGEgcGhhc2UgY2hlY2tfdXNlcl9pZCBkdQp0cmFpdGVtZW50IGRlIGxhIHJlcXXqdGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheGU6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YUhvb2tDaGVja1VzZXJJRCAgL2NoZW1pbi92ZXJzL2x1YS9zY3JpcHQubHVhIGhvb2tfZnVuY3Rpb25fbmFtZSBbZWFybHl8bGF0ZV08L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dGU6PC9hPjwvdGg+PHRkPmNvbmZpZ3VyYXRpb24gZHUgc2VydmV1ciwgc2VydmV1ciB2aXJ0dWVsLCBy6XBlcnRvaXJlLCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+QWxsb3dPdmVycmlkZTo8L2E+PC90aD48dGQ+QWxsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXQ6PC9hPjwvdGg+PHRkPkV4cOlyaW1lbnRhbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfbHVhPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl06To8L2E+PC90aD48dGQ+TGUgdHJvaXNp6G1lIGFyZ3VtZW50IG9wdGlvbm5lbCBlc3QgZGlzcG9uaWJsZSBkZXB1aXMgbGEKdmVyc2lvbiAyLjMuMTUgZHUgc2VydmV1ciBIVFRQIEFwYWNoZS48L3RkPjwvdHI+CjwvdGFibGU+PHA+Li4uPC9wPgogICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+T3Jkb25uYW5jZW1lbnQ8L2gzPjxwPkxlcyBhcmd1bWVudHMgb3B0aW9ubmVscwogICAiZWFybHkiIG91ICJsYXRlIiBwZXJtZXR0ZW50IGRlIGNvbnRy9GxlciBsZSBtb21lbnQgYXVxdWVsIGNlIHNjcmlwdAogICBzJ2V46WN1dGUgcGFyIHJhcHBvcnQgYXV4IGF1dHJlcyBtb2R1bGVzLjwvcD48L2Rpdj4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJsdWFob29rZml4dXBzIiBpZD0ibHVhaG9va2ZpeHVwcyI+RGlyZWN0aXZlPC9hPiA8YSBuYW1lPSJMdWFIb29rRml4dXBzIiBpZD0iTHVhSG9va0ZpeHVwcyI+THVhSG9va0ZpeHVwczwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkZvdXJuaXQgdW4gcG9pbnQgZCdlbnRy6WUgcG91ciBsYSBwaGFzZSBkZSBjb3JyZWN0aW9uIGR1CnRyYWl0ZW1lbnQgZGUgbGEgcmVxdep0ZTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4ZTo8L2E+PC90aD48dGQ+PGNvZGU+THVhSG9va0ZpeHVwcyAgL2NoZW1pbi92ZXJzL2x1YS9zY3JpcHQubHVhIGhvb2tfZnVuY3Rpb25fbmFtZTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0ZTo8L2E+PC90aD48dGQ+Y29uZmlndXJhdGlvbiBkdSBzZXJ2ZXVyLCBzZXJ2ZXVyIHZpcnR1ZWwsIHLpcGVydG9pcmUsIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5BbGxvd092ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1dDo8L2E+PC90aD48dGQ+RXhw6XJpbWVudGFsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sdWE8L3RkPjwvdHI+CjwvdGFibGU+CjxwPgogICAgSWRlbSBMdWFIb29rVHJhbnNsYXRlTmFtZSwgbWFpcyBzJ2V46WN1dGUgZHVyYW50IGxhIHBoYXNlIGRlCiAgICBjb3JyZWN0aW9uLgo8L3A+Cgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0ibHVhaG9va2luc2VydGZpbHRlciIgaWQ9Imx1YWhvb2tpbnNlcnRmaWx0ZXIiPkRpcmVjdGl2ZTwvYT4gPGEgbmFtZT0iTHVhSG9va0luc2VydEZpbHRlciIgaWQ9Ikx1YUhvb2tJbnNlcnRGaWx0ZXIiPkx1YUhvb2tJbnNlcnRGaWx0ZXI8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Gb3Vybml0IHVuIHBvaW50IGQnZW50cullIHBvdXIgbGEgcGhhc2UgaW5zZXJ0X2ZpbHRlciBkdQp0cmFpdGVtZW50IGRlIGxhIHJlcXXqdGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheGU6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YUhvb2tJbnNlcnRGaWx0ZXIgIC9jaGVtaW4vdmVycy9sdWEvc2NyaXB0Lmx1YSBob29rX2Z1bmN0aW9uX25hbWU8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dGU6PC9hPjwvdGg+PHRkPmNvbmZpZ3VyYXRpb24gZHUgc2VydmV1ciwgc2VydmV1ciB2aXJ0dWVsLCBy6XBlcnRvaXJlLCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+QWxsb3dPdmVycmlkZTo8L2E+PC90aD48dGQ+QWxsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXQ6PC9hPjwvdGg+PHRkPkV4cOlyaW1lbnRhbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfbHVhPC90ZD48L3RyPgo8L3RhYmxlPjxwPk5vbiBlbmNvcmUgaW1wbOltZW506TwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Imx1YWhvb2tsb2ciIGlkPSJsdWFob29rbG9nIj5EaXJlY3RpdmU8L2E+IDxhIG5hbWU9Ikx1YUhvb2tMb2ciIGlkPSJMdWFIb29rTG9nIj5MdWFIb29rTG9nPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+UGVybWV0IHVuZSBpbnNlcnRpb24gZGFucyBsYSBwaGFzZSBkZSBqb3VybmFsaXNhdGlvbiBkdQp0cmFpdGVtZW50IGQndW5lIHJlcXXqdGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheGU6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YUhvb2tMb2cgIC9wYXRoL3RvL2x1YS9zY3JpcHQubHVhIGxvZ19mdW5jdGlvbl9uYW1lPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHRlOjwvYT48L3RoPjx0ZD5jb25maWd1cmF0aW9uIGR1IHNlcnZldXIsIHNlcnZldXIgdmlydHVlbCwgculwZXJ0b2lyZSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPkFsbG93T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHV0OjwvYT48L3RoPjx0ZD5FeHDpcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPC90YWJsZT4KPHA+CiAgICBDZSBkaXNwb3NpdGlmIGQnaW5zZXJ0aW9uIHNpbXBsZSBwZXJtZXQgZCdleOljdXRlciB1bmUgZm9uY3Rpb24KICAgIGxvcnNxdWUgaHR0cGQgZW50cmUgZGFucyBsYSBwaGFzZSBkZSBqb3VybmFsaXNhdGlvbiBkdSB0cmFpdGVtZW50CiAgICBkJ3VuZSByZXF16nRlLiBWb3VzIHBvdXZleiBhaW5zaSBham91dGVyIGRlcyBkb25u6WVzIOAgdm9zIHByb3ByZXMKICAgIGVudHLpZXMgZGUgam91cm5hbGlzYXRpb24sIG1hbmlwdWxlciBsZXMgZW50cullcyBkdSBqb3VybmFsIHN0YW5kYXJkCiAgICBhdmFudCBsZXVyIGVucmVnaXN0cmVtZW50IG91IGVtcOpjaGVyIGwnZW5yZWdpc3RyZW1lbnQgZCd1bmUgZW50cullCiAgICBkYW5zIGxlIGpvdXJuYWwuIFBvdXIgZW1w6mNoZXIgbCdlbnJlZ2lzdHJlbWVudCBub3JtYWwgZGVzIGVudHLpZXMKICAgIGR1IGpvdXJuYWwsIHJlbnZveWV6IHNpbXBsZW1lbnQgPGNvZGU+YXBhY2hlMi5ET05FPC9jb2RlPiBkYW5zIHZvdHJlCiAgICBnZXN0aW9ubmFpcmUgZGUgam91cm5hbGlzYXRpb24sIG91IGF1IGNvbnRyYWlyZSwgcmVudm95ZXoKICAgIDxjb2RlPmFwYWNoZTIuT0s8L2NvZGU+IHBvdXIgcXVlIGh0dHBkIGVmZmVjdHVlIHVuZSBqb3VybmFsaXNhdGlvbgogICAgbm9ybWFsZS4KPC9wPgo8cD5FeGVtcGxlIDo8L3A+CjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5MdWFIb29rTG9nICIvcGF0aC90by9zY3JpcHQubHVhIiBsb2dnZXI8L3ByZT4KCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj4tLSAvcGF0aC90by9zY3JpcHQubHVhIC0tCmZ1bmN0aW9uIGxvZ2dlcihyKQogICAgLS0gb24gam91ZSDgIHBpbGUgb3UgZmFjZSA6CiAgICAtLSBTaSBvbiBvYnRpZW50IDEsIG9uIOljcml0IGRhbnMgbm90cmUgcHJvcHJlIGpvdXJuYWwgTHVhIGV0IG9uIGRpdAogICAgLS0g4CBodHRwZCBkZSBuZSBwYXMgZW5yZWdpc3RyZXIgZCdlbnRy6WUgZGFucyBsZSBqb3VybmFsIHN0YW5kYXJkLi4KICAgIC0tIFNpIG9uIG9idGllbnQgMiwgb24gbmV0dG9pZSB1biBwZXUgbGVzIGRvbm7pZXMgYXZhbnQgcXVlIGh0dHBkIG5lCiAgICAtLSBsZXMgZW5yZWdpc3RyZSBkYW5zIGxlIGpvdXJuYWwgc3RhbmRhcmQuCgogICAgaWYgbWF0aC5yYW5kb20oMSwyKSA9PSAxIHRoZW4KICAgICAgICAtLSBPbiBlZmZlY3R1ZSBub3RyZSBwcm9wcmUgam91cm5hbGlzYXRpb24gZXQgbGUgam91cm5hbAoJLS0gc3RhbmRhcmQgbidlc3QgcGFzIGFsaW1lbnTpCiAgICAgICAgbG9jYWwgZiA9IGlvLm9wZW4oIi9mb28vc2VjcmV0LmxvZyIsICJhIikKICAgICAgICBpZiBmIHRoZW4KICAgICAgICAgICAgZjp3cml0ZSgiUXVlbHF1ZSBjaG9zZSBkZSBzZWNyZXQgZXN0IGFycml26SDgICIgLi4gci51cmkgLi4gIlxuIikKICAgICAgICAgICAgZjpjbG9zZSgpCiAgICAgICAgZW5kCiAgICAgICAgcmV0dXJuIGFwYWNoZTIuRE9ORSAtLSBPbiBkaXQg4CBodHRwZCBkZSBuZSByaWVuIGVucmVnaXN0cmVyCgkJCSAgICAtLWRhbnMgbGUgam91cm5hbCBzdGFuZGFyZAogICAgZWxzZQogICAgICAgIHIudXJpID0gci51cmk6Z3N1Yigic29tZXNlY3JldHN0dWZmIiwgIiIpIC0tIG5ldHRvaWUgbGVzIGRvbm7pZXMKICAgICAgICByZXR1cm4gYXBhY2hlMi5PSyAtLSBldCBodHRwZCBkb2l0IGFsb3JzIGxlcyBlbnJlZ2lzdHJlci4KICAgIGVuZAplbmQ8L3ByZT4KCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0ibHVhaG9va21hcHRvc3RvcmFnZSIgaWQ9Imx1YWhvb2ttYXB0b3N0b3JhZ2UiPkRpcmVjdGl2ZTwvYT4gPGEgbmFtZT0iTHVhSG9va01hcFRvU3RvcmFnZSIgaWQ9Ikx1YUhvb2tNYXBUb1N0b3JhZ2UiPkx1YUhvb2tNYXBUb1N0b3JhZ2U8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Gb3Vybml0IHVuIHBvaW50IGQnZW50cullIHBvdXIgbGEgcGhhc2UgbWFwX3RvX3N0b3JhZ2UgZHUKdHJhaXRlbWVudCBkZSBsYSByZXF16nRlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXhlOjwvYT48L3RoPjx0ZD48Y29kZT5MdWFIb29rTWFwVG9TdG9yYWdlICAvY2hlbWluL3ZlcnMvbHVhL3NjcmlwdC5sdWEgaG9va19mdW5jdGlvbl9uYW1lPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHRlOjwvYT48L3RoPjx0ZD5jb25maWd1cmF0aW9uIGR1IHNlcnZldXIsIHNlcnZldXIgdmlydHVlbCwgculwZXJ0b2lyZSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPkFsbG93T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHV0OjwvYT48L3RoPjx0ZD5FeHDpcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPklkZW50aXF1ZSDgIGxhIGRpcmVjdGl2ZQogICAgPGNvZGUgY2xhc3M9ImRpcmVjdGl2ZSI+THVhSG9va1RyYW5zbGF0ZU5hbWU8L2NvZGU+LCBtYWlzIHMnZXjpY3V0ZSDgIGxhCiAgICBwaGFzZSBtYXAtdG8tc3RvcmFnZSBkdSB0cmFpdGVtZW50IGRlIGxhIHJlcXXqdGUuIExlcyBtb2R1bGVzIGNvbW1lCiAgICBtb2RfY2FjaGUgYWdpc3NlbnQgcGVuZGFudCBjZXR0ZSBwaGFzZSwgY2UgcXVpIHBlcm1ldCBkZSBwculzZW50ZXIKICAgIHVuIGV4ZW1wbGUgaW506XJlc3NhbnQgZGUgY2UgcXVlIGwnb24gcGV1dCBmYWlyZSBpY2kgOjwvcD4KICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5MdWFIb29rTWFwVG9TdG9yYWdlICIvcGF0aC90by9sdWEvc2NyaXB0Lmx1YSIgY2hlY2tfY2FjaGU8L3ByZT4KCiAgICA8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+cmVxdWlyZSJhcGFjaGUyIgpjYWNoZWRfZmlsZXMgPSB7fQoKZnVuY3Rpb24gcmVhZF9maWxlKGZpbGVuYW1lKQogICAgbG9jYWwgaW5wdXQgPSBpby5vcGVuKGZpbGVuYW1lLCAiciIpCiAgICBpZiBpbnB1dCB0aGVuCiAgICAgICAgbG9jYWwgZGF0YSA9IGlucHV0OnJlYWQoIiphIikKICAgICAgICBjYWNoZWRfZmlsZXNbZmlsZW5hbWVdID0gZGF0YQogICAgICAgIGZpbGUgPSBjYWNoZWRfZmlsZXNbZmlsZW5hbWVdCiAgICAgICAgaW5wdXQ6Y2xvc2UoKQogICAgZW5kCiAgICByZXR1cm4gY2FjaGVkX2ZpbGVzW2ZpbGVuYW1lXQplbmQKCmZ1bmN0aW9uIGNoZWNrX2NhY2hlKHIpCiAgICBpZiByLmZpbGVuYW1lOm1hdGNoKCIlLnBuZyQiKSB0aGVuIC0tIE5lIGNvbmNlcm5lIHF1ZSBsZXMgZmljaGllcnMgUE5HCiAgICAgICAgbG9jYWwgZmlsZSA9IGNhY2hlZF9maWxlc1tyLmZpbGVuYW1lXSAtLSBW6XJpZmllIGxlcyBlbnRy6WVzIGR1IGNhY2hlCiAgICAgICAgaWYgbm90IGZpbGUgdGhlbgogICAgICAgICAgICBmaWxlID0gcmVhZF9maWxlKHIuZmlsZW5hbWUpICAtLSBMaXQgbGUgZmljaGllciB2ZXJzIGxlIGNhY2hlCiAgICAgICAgZW5kCiAgICAgICAgaWYgZmlsZSB0aGVuIC0tIFNpIGxlIGZpY2hpZXIgZXhpc3RlLCBvbiBsJ2Vudm9pZQogICAgICAgICAgICByLnN0YXR1cyA9IDIwMAogICAgICAgICAgICByOndyaXRlKGZpbGUpCiAgICAgICAgICAgIHI6aW5mbygoIiVzIGEg6XTpIGVudm956SBhdSBjbGllbnQgZGVwdWlzIGxlIGNhY2hlIik6Zm9ybWF0KHIuZmlsZW5hbWUpKQogICAgICAgICAgICByZXR1cm4gYXBhY2hlMi5ET05FIC0tIGNvdXQtY2lyY3VpdGUgbGUgZ2VzdGlvbm5haXJlIHBhciBk6WZhdXQgZGVzIGZpY2hpZXJzIFBORwogICAgICAgIGVuZAogICAgZW5kCiAgICByZXR1cm4gYXBhY2hlMi5ERUNMSU5FRCAtLSBTaSBub3VzIG4nYXZvbnMgcmllbiBldSDgIGZhaXJlLCBub3VzIGxhaXNzb25zIGxlcyBhdXRyZXMgcydlbiBjaGFyZ2VyCmVuZDwvcHJlPgoKCiAgICAKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Imx1YWhvb2t0cmFuc2xhdGVuYW1lIiBpZD0ibHVhaG9va3RyYW5zbGF0ZW5hbWUiPkRpcmVjdGl2ZTwvYT4gPGEgbmFtZT0iTHVhSG9va1RyYW5zbGF0ZU5hbWUiIGlkPSJMdWFIb29rVHJhbnNsYXRlTmFtZSI+THVhSG9va1RyYW5zbGF0ZU5hbWU8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Gb3Vybml0IHVuIHBvaW50IGQnZW50cullIOAgbGEgcGhhc2UgZHUgbm9tIGRlCnRyYWR1Y3Rpb24gZHUgdHJhaXRlbWVudCBkZSBsYSByZXF16nRlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXhlOjwvYT48L3RoPjx0ZD48Y29kZT5MdWFIb29rVHJhbnNsYXRlTmFtZSAgL2NoZW1pbi92ZXJzL2x1YS9zY3JpcHQubHVhICBub21fZm9uY3Rpb25faG9vayBbZWFybHl8bGF0ZV08L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dGU6PC9hPjwvdGg+PHRkPmNvbmZpZ3VyYXRpb24gZHUgc2VydmV1ciwgc2VydmV1ciB2aXJ0dWVsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPkFsbG93T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHV0OjwvYT48L3RoPjx0ZD5FeHDpcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdOk6PC9hPjwvdGg+PHRkPkxlIHRyb2lzaehtZSBhcmd1bWVudCBvcHRpb25uZWwgZXN0IGRpc3BvbmlibGUgZGVwdWlzIGxhCnZlcnNpb24gMi4zLjE1IGR1IHNlcnZldXIgSFRUUCBBcGFjaGUuPC90ZD48L3RyPgo8L3RhYmxlPjxwPgogICAgQ2V0dGUgZGlyZWN0aXZlIHBlcm1ldCBkJ2Fqb3V0ZXIgdW4gcG9pbnQgZCdlbnRy6WUgKOAKICAgIEFQUl9IT09LX01JRERMRSkg4CBsYSBwaGFzZSBkdSBub20gZGUgdHJhZHVjdGlvbiBkdSB0cmFpdGVtZW50IGRlIGxhCiAgICByZXF16nRlLiBMYSBmb25jdGlvbiBob29rIGFjY2VwdGUgdW4gc2V1bCBhcmd1bWVudCwgbGUgcmVxdWVzdF9yZWMsCiAgICBldCBkb2l0IHJlbnZveWVyIHVuIGNvZGUgZCfpdGF0IHF1aSBlc3Qgc29pdCB1biBjb2RlIGQnZXJyZXVyIEhUVFAsCiAgICBvdSB1bmUgY29uc3RhbnRlIGTpZmluaWUgZGFucyBsZSBtb2R1bGUgYXBhY2hlMiA6ICBhcGFjaGUyLk9LLAogICAgYXBhY2hlMi5ERUNMSU5FRCwgb3UgYXBhY2hlMi5ET05FLjwvcD4KCiAgICA8cD5Qb3VyIGNldXggcXVpIG5lIHNvbnQgcGFzIGZhbWlsaWVycyBhdmVjIGxlcyBwb2ludHMgZCdlbnRy6WUKICAgIChob29rKSwgZW4gZ3JvcywgY2hhcXVlIGhvb2sgc2VyYSBpbnZvcXXpIGp1c3F1J+AgY2UgcXVlIGwndW4KICAgIGQnZW50cmUgZXV4IHJlbnZvaWUgYXBhY2hlMi5PSy4gU2kgdW4gaG9vayBuJ2VmZmVjdHVlciBwYXMgbGEKICAgIHRyYWR1Y3Rpb24sIGlsIGRvaXQganVzdGUgcmVudm95ZXIgYXBhY2hlMi5ERUNMSU5FRC4gU2kgbGUKICAgIHRyYWl0ZW1lbnQgZGUgbGEgcmVxdep0ZSBkb2l0IOp0cmUgaW50ZXJyb21wdSwgbGEgdmFsZXVyIHJlbnZveellCiAgICBkb2l0IOp0cmUgYXBhY2hlMi5ET05FLjwvcD4KCiAgICA8cD5FeGVtcGxlIDo8L3A+Cgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+IyBodHRwZC5jb25mCkx1YUhvb2tUcmFuc2xhdGVOYW1lICIvc2NyaXB0cy9jb25mL2hvb2tzLmx1YSIgc2lsbHlfbWFwcGVyPC9wcmU+CgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPi0tIC9zY3JpcHRzL2NvbmYvaG9va3MubHVhIC0tCnJlcXVpcmUgImFwYWNoZTIiCmZ1bmN0aW9uIHNpbGx5X21hcHBlcihyKQogICAgaWYgci51cmkgPT0gIi8iIHRoZW4KICAgICAgICByLmZpbGVuYW1lID0gIi92YXIvd3d3L2hvbWUubHVhIgogICAgICAgIHJldHVybiBhcGFjaGUyLk9LCiAgICBlbHNlCiAgICAgICAgcmV0dXJuIGFwYWNoZTIuREVDTElORUQKICAgIGVuZAplbmQ8L3ByZT4KCgogICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Q29udGV4dGU8L2gzPjxwPkNldHRlIGRpcmVjdGl2ZSBuZSBwZXV0IOp0cmUKICAgdXRpbGlz6WUgbmkg4CBsJ2ludOlyaWV1ciBkJ3VuZSBzZWN0aW9uIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+IG91IDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjZmlsZXMiPiZsdDtGaWxlcyZndDs8L2E+PC9jb2RlPiwgbmkgZGFucyB1biBmaWNoaWVyIGh0YWNjZXNzLjwvcD48L2Rpdj4KCiAgIDxkaXYgY2xhc3M9Im5vdGUiPjxoMz5PcmRvbm5hbmNlbWVudDwvaDM+PHA+TGVzIGFyZ3VtZW50cyBvcHRpb25uZWxzCiAgICJlYXJseSIgb3UgImxhdGUiIHBlcm1ldHRlbnQgZGUgY29udHL0bGVyIGxlIG1vbWVudCBhdXF1ZWwgY2Ugc2NyaXB0CiAgIHMnZXjpY3V0ZSBwYXIgcmFwcG9ydCBhdXggYXV0cmVzIG1vZHVsZXMuPC9wPjwvZGl2PgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Imx1YWhvb2t0eXBlY2hlY2tlciIgaWQ9Imx1YWhvb2t0eXBlY2hlY2tlciI+RGlyZWN0aXZlPC9hPiA8YSBuYW1lPSJMdWFIb29rVHlwZUNoZWNrZXIiIGlkPSJMdWFIb29rVHlwZUNoZWNrZXIiPkx1YUhvb2tUeXBlQ2hlY2tlcjwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkZvdXJuaXQgdW4gcG9pbnQgZCdlbnRy6WUgcG91ciBsYSBwaGFzZSB0eXBlX2NoZWNrZXIgZHUKdHJhaXRlbWVudCBkZSBsYSByZXF16nRlPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXhlOjwvYT48L3RoPjx0ZD48Y29kZT5MdWFIb29rVHlwZUNoZWNrZXIgIC9jaGVtaW4vdmVycy9sdWEvc2NyaXB0Lmx1YSBob29rX2Z1bmN0aW9uX25hbWU8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dGU6PC9hPjwvdGg+PHRkPmNvbmZpZ3VyYXRpb24gZHUgc2VydmV1ciwgc2VydmV1ciB2aXJ0dWVsLCBy6XBlcnRvaXJlLCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+QWxsb3dPdmVycmlkZTo8L2E+PC90aD48dGQ+QWxsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXQ6PC9hPjwvdGg+PHRkPkV4cOlyaW1lbnRhbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfbHVhPC90ZD48L3RyPgo8L3RhYmxlPjxwPgogICAgQ2V0dGUgZGlyZWN0aXZlIGZvdXJuaXQgdW4gcG9pbnQgZCdlbnRy6WUgcG91ciBsYSBwaGFzZQogICAgdHlwZV9jaGVja2VyIGR1IHRyYWl0ZW1lbnQgZGUgbGEgcmVxdep0ZS4gQ2V0dGUgcGhhc2UKICAgIGNvcnJlc3BvbmQgYXUgbW9tZW50IG/5IGxhIHJlcXXqdGUgc2Ugdm9pdCBhc3NpZ25lciB1biB0eXBlIGV0IHVuCiAgICBnZXN0aW9ubmFpcmUgZGUgY29udGVudSwgZXQgcGV1dCBkb25jIOp0cmUgdXRpbGlz6WUgcG91ciBtb2RpZmllciBsZQogICAgdHlwZSBldCBsZSBnZXN0aW9ubmFpcmUgZW4gZm9uY3Rpb24gZGUgbCdlbnRy6WUgOgogICAgPC9wPgogICAgPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkx1YUhvb2tUeXBlQ2hlY2tlciAiL3BhdGgvdG8vbHVhL3NjcmlwdC5sdWEiIHR5cGVfY2hlY2tlcjwvcHJlPgoKICAgIDxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj4gICAgZnVuY3Rpb24gdHlwZV9jaGVja2VyKHIpCiAgICAgICAgaWYgci51cmk6bWF0Y2goIiUudG9fZ2lmJCIpIHRoZW4gLS0gZm9vLnBuZy50b19naWYgY29udmllbnQKICAgICAgICAgICAgci5jb250ZW50X3R5cGUgPSAiaW1hZ2UvZ2lmIiAtLSBhZmZlY3RhdGlvbiBkdSB0eXBlIGltYWdlL2dpZgogICAgICAgICAgICByLmhhbmRsZXIgPSAiZ2lmV2l6YXJkIiAgICAgIC0tIGZvcmNlIGxlIHRyYWl0ZW1lbnQgZGUgbGEgcmVxdep0ZSBwYXIgbGUgbW9kdWxlIGdpZldpemFyZAogICAgICAgICAgICByLmZpbGVuYW1lID0gci51cmk6Z3N1YigiJS50b19naWYkIiwgIiIpIC0tIGNvcnJpZ2UgbGUgbm9tIGR1IGZpY2hpZXIgZGVtYW5k6QogICAgICAgICAgICByZXR1cm4gYXBhY2hlMi5PSwogICAgICAgIGVuZAoKICAgICAgICByZXR1cm4gYXBhY2hlMi5ERUNMSU5FRAogICAgZW5kPC9wcmU+CgogICAgCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJsdWFpbmhlcml0IiBpZD0ibHVhaW5oZXJpdCI+RGlyZWN0aXZlPC9hPiA8YSBuYW1lPSJMdWFJbmhlcml0IiBpZD0iTHVhSW5oZXJpdCI+THVhSW5oZXJpdDwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkNvbnRy9GxlIGxhIG1hbmnocmUgZG9udCBsZXMgc2VjdGlvbnMgZGUgY29uZmlndXJhdGlvbgpwYXJlbnRlcyBzb250IGZ1c2lvbm7pZXMgZGFucyBsZXMgZW5mYW50czwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N5bnRheCI+U3ludGF4ZTo8L2E+PC90aD48dGQ+PGNvZGU+THVhSW5oZXJpdCBub25lfHBhcmVudC1maXJzdHxwYXJlbnQtbGFzdDwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZWZhdWx0Ij5E6WZhdXQ6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YUluaGVyaXQgcGFyZW50LWZpcnN0PC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHRlOjwvYT48L3RoPjx0ZD5jb25maWd1cmF0aW9uIGR1IHNlcnZldXIsIHNlcnZldXIgdmlydHVlbCwgculwZXJ0b2lyZSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPkFsbG93T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHV0OjwvYT48L3RoPjx0ZD5FeHDpcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdOk6PC9hPjwvdGg+PHRkPlZlcnNpb25zIDIuNC4wIGV0IHN1cOlyaWV1cmVzPC90ZD48L3RyPgo8L3RhYmxlPjxwPlBhciBk6WZhdXQsIHNpIGRlcyBkaXJlY3RpdmVzIEx1YUhvb2sqIHNlIHRyb3V2ZW50IGRhbnMKICAgIGRlcyBzZWN0aW9ucyBkZSBjb25maWd1cmF0aW9uIERpcmVjdG9yeSBvdSBMb2NhdGlvbiBxdWkgc2UKICAgIGNoZXZhdWNoZW50LCBsZXMgc2NyaXB0cwogICAgZOlmaW5pcyBkYW5zIGxlcyBzZWN0aW9ucyBsZXMgcGx1cyBzcOljaWZpcXVlcyBzJ2V46WN1dGVudAogICAgPGVtPmFwcuhzPC9lbT4gY2V1eCBk6WZpbmlzIGRhbnMgbGVzIHNlY3Rpb25zIHBsdXMgZ+lu6XJpcXVlcwogICAgKEx1YUluaGVyaXQgcGFyZW50LWZpcnN0KS4gVm91cyBwb3V2ZXogaW52ZXJzZXIgY2V0IG9yZHJlLCBvdSBmYWlyZQogICAgZW4gc29ydGUgcXVlIGxlIGNvbnRleHRlIHBhcmVudCBuZSBzJ2FwcGxpcXVlIHBhcyBkdSB0b3V0LjwvcD4KCiAgICA8cD5KdXNxdSdhdXggdmVyc2lvbnMgMi4zLngsIGxlIGNvbXBvcnRlbWVudCBwYXIgZOlmYXV0IGNvbnNpc3RhaXQg4AogICAgaWdub3JlciBsZXMgZGlyZWN0aXZlcyBMdWFIb29rKiBzaXR16WVzIGRhbnMgbGVzIHNlY3Rpb25zIGRlCiAgICBjb25maWd1cmF0aW9uIHBhcmVudGVzLjwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Imx1YWlucHV0ZmlsdGVyIiBpZD0ibHVhaW5wdXRmaWx0ZXIiPkRpcmVjdGl2ZTwvYT4gPGEgbmFtZT0iTHVhSW5wdXRGaWx0ZXIiIGlkPSJMdWFJbnB1dEZpbHRlciI+THVhSW5wdXRGaWx0ZXI8L2E+PC9oMj4KPHRhYmxlIGNsYXNzPSJkaXJlY3RpdmUiPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVzY3JpcHRpb24iPkRlc2NyaXB0aW9uOjwvYT48L3RoPjx0ZD5Gb3Vybml0IHVuZSBmb25jdGlvbiBMdWEgcG91ciBsZSBmaWx0cmFnZSBlbiBlbnRy6WU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheGU6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YUlucHV0RmlsdGVyIGZpbHRlcl9uYW1lIC9wYXRoL3RvL2x1YS9zY3JpcHQubHVhIGZ1bmN0aW9uX25hbWU8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dGU6PC9hPjwvdGg+PHRkPmNvbmZpZ3VyYXRpb24gZHUgc2VydmV1cjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHV0OjwvYT48L3RoPjx0ZD5FeHDpcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbXBhdGliaWxpdHkiPkNvbXBhdGliaWxpdOk6PC9hPjwvdGg+PHRkPkRpc3BvbmlibGUgZGVwdWlzIGxhIHZlcnNpb24gMi40LjUgZHUgc2VydmV1ciBIVFRQCkFwYWNoZTwvdGQ+PC90cj4KPC90YWJsZT4KPHA+Q2V0dGUgZGlyZWN0aXZlIHBlcm1ldCBkJ2Fqb3V0ZXIgdW4gZmlsdHJlIGVuIGVudHLpZSBzb3VzIGxhIGZvcm1lCmQndW5lIGZvbmN0aW9uIEx1YS4gQSBsJ2luc3RhciBkZXMgZmlsdHJlcyBlbiBzb3J0aWVzLCBsZXMgZmlsdHJlcyBlbgplbnRy6WUgZm9uY3Rpb25uZW50IGNvbW1lIGRlcyBzb3VzLXJvdXRpbmVzLCBpbnRlcnZlbmFudCBkYW5zIHVuIHByZW1pZXIKdGVtcHMgYXZhbnQgbCdlbnZvaSBkdSBjb250ZW51IGRlcyB0YW1wb25zLCBwdWlzIGNoYXF1ZSBmb2lzIHF1J3VuCnBhcXVldCBkZSBkb25u6WVzIGRvaXQg6nRyZSB0cmFuc21pcyDgIGxhIGNoYe5uZSwgZXQg6XZlbnR1ZWxsZW1lbnQKcHJvZHVpc2FudCB0b3V0ZSBkb25u6WUg4CBham91dGVyIGF1eCBkb25u6WVzIGVuIGVudHLpZS4gTGEgdmFyaWFibGUKZ2xvYmFsZSA8Y29kZT5idWNrZXQ8L2NvZGU+IGNvbnRpZW50IGxlcyBwYXF1ZXRzIGRlIGRvbm7pZXMgdGVscyBxdSdpbHMKc29udCB0cmFuc21pcyBhdSBzY3JpcHQgTHVhIDoKPC9wPgoKPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkx1YUlucHV0RmlsdGVyIG15SW5wdXRGaWx0ZXIgIi93d3cvZmlsdGVyLmx1YSIgaW5wdXRfZmlsdGVyCiZsdDtGaWxlcyAiKi5sdWEiJmd0OwogIFNldElucHV0RmlsdGVyIG15SW5wdXRGaWx0ZXIKJmx0Oy9GaWxlcyZndDs8L3ByZT4KCjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj4tLVtbCiAgICBFeGVtcGxlIGRlIGZpbHRyZSBlbiBlbnRy6WUgcXVpIGNvbnZlcnRpdCB0b3V0ZXMgbGVzIGRvbm7pZXMgUE9TVCBlbgogICAgbWFqdXNjdWxlcy4KXV0tLQpmdW5jdGlvbiBpbnB1dF9maWx0ZXIocikKICAgIHByaW50KCJsdWFJbnB1dEZpbHRlciBjYWxsZWQiKSAtLSBwb3VyIGTpYm9nYWdlCiAgICBjb3JvdXRpbmUueWllbGQoKSAtLSBhdHRlbmQgZGVzIHBhcXVldHMgZGUgZG9ubullcwogICAgd2hpbGUgYnVja2V0IGRvIC0tIFBvdXIgY2hhcXVlIHBhcXVldCwgZmFpcmUgLi4uCiAgICAgICAgbG9jYWwgb3V0cHV0ID0gc3RyaW5nLnVwcGVyKGJ1Y2tldCkgLS0gQ29udmVydGl0IHRvdXRlcyBsZXMgZG9ubullcyBQT1NUIGVuIG1hanVzY3VsZXMKICAgICAgICBjb3JvdXRpbmUueWllbGQob3V0cHV0KSAtLSBFbnZvaWUgbGVzIGRvbm7pZXMgdHJhaXTpZXMg4CBsYSBjaGHubmUgZGUgZmlsdHJhZ2UKICAgIGVuZAogICAgLS0gcGx1cyBhdWN1bmUgZG9ubullIOAgdHJhaXRlci4KICAgIGNvcm91dGluZS55aWVsZCgiJmFtcDtmaWx0ZXJTaWduYXR1cmU9MTIzNCIpIC0tIEFqb3V0ZSB1bmUgc2lnbmF0dXJlIOAgbGEgZmluCmVuZDwvcHJlPgoKPHA+CkxlIGZpbHRyZSBlbiBlbnRy6WUgcGV1dCBpbnRlcmRpcmUgb3Ugc2F1dGVyIHVuIGZpbHRyZSBzJ2lsIGVzdApjb25zaWTpcukgY29tbWUgaW5k6XNpcmFibGUgOgo8L3A+CjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctbHVhIj5mdW5jdGlvbiBpbnB1dF9maWx0ZXIocikKICAgIGlmIG5vdCBnb29kIHRoZW4KICAgICAgICByZXR1cm4gLS0gRW1w6mNoZSB0b3V0IHNpbXBsZW1lbnQgbGUgZmlsdHJhZ2UgZXQgdHJhbnNtZXQgbGUgY29udGVudSBvcmlnaW5hbAogICAgZW5kCiAgICBjb3JvdXRpbmUueWllbGQoKSAtLSBhdHRlbmQgZGVzIHBhcXVldHMgZGUgZG9ubullcwogICAgLi4uICAgICAgICAgICAgICAgLS0gaW5zZXJ0IGxlcyBmaWx0cmVzIGljaQplbmQ8L3ByZT4KCjxwPgpWb2lyICI8YSBocmVmPSIjbW9kaWZ5aW5nX2J1Y2tldHMiPk1vZGlmaWNhdGlvbiBkZSBjb250ZW51IGF2ZWMgbGVzCmZpbHRyZXMgTHVhPC9hPiIgcG91ciBwbHVzIGRlIGTpdGFpbHMuCjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJsdWFtYXBoYW5kbGVyIiBpZD0ibHVhbWFwaGFuZGxlciI+RGlyZWN0aXZlPC9hPiA8YSBuYW1lPSJMdWFNYXBIYW5kbGVyIiBpZD0iTHVhTWFwSGFuZGxlciI+THVhTWFwSGFuZGxlcjwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPk1ldCBlbiBjb3JyZXNwb25kYW5jZSB1biBjaGVtaW4gYXZlYyB1biBnZXN0aW9ubmFpcmUgbHVhPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXhlOjwvYT48L3RoPjx0ZD48Y29kZT5MdWFNYXBIYW5kbGVyIG1vZGVsZS11cmkgL2NoZW1pbi92ZXJzL2x1YS9zY3JpcHQubHVhCltub20tZm9uY3Rpb25dPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHRlOjwvYT48L3RoPjx0ZD5jb25maWd1cmF0aW9uIGR1IHNlcnZldXIsIHNlcnZldXIgdmlydHVlbCwgculwZXJ0b2lyZSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPkFsbG93T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHV0OjwvYT48L3RoPjx0ZD5FeHDpcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPkNldHRlIGRpcmVjdGl2ZSBwZXJtZXQgZGUgZmFpcmUgY29ycmVzcG9uZHJlIHVuIG1vZOhsZSBkJ3VyaSBhdmVjCiAgICB1bmUgZm9uY3Rpb24gZGUgZ2VzdGlvbm5haXJlIHNpdHXpZSBkYW5zIHVuIGZpY2hpZXIgc3DpY2lmaXF1ZS4gRWxsZQogICAgdXRpbGlzZSBsZXMgZXhwcmVzc2lvbnMgcmF0aW9ubmVsbGVzIFBDUkUgcG91ciBtZXR0cmUgZW4KICAgIGNvcnJlc3BvbmRhbmNlIGwndXJpLCBldCBzdXBwb3J0ZSBsZXMgZ3JvdXBlcyBkZSBjb3JyZXNwb25kYW5jZQogICAgZCdpbnRlcnBvbGF0aW9uIGRhbnMgbGUgY2hlbWluIGR1IGZpY2hpZXIgZXQgbGUgbm9tIGRlIGxhIGZvbmN0aW9uLgogICAgUHJlbmV6IGdhcmRlIGF1eCBwcm9ibOhtZXMgZGUgc+ljdXJpdOkgZW4g6WNyaXZhbnQgdm9zIGV4cHJlc3Npb25zCiAgICByYXRpb25uZWxsZXMuPC9wPgogICA8ZGl2IGNsYXNzPSJleGFtcGxlIj48aDM+RXhlbXBsZXMgOjwvaDM+PHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1jb25maWciPkx1YU1hcEhhbmRsZXIgIi8oXHcrKS8oXHcrKSIgIi9zY3JpcHRzLyQxLmx1YSIgImhhbmRsZV8kMiI8L3ByZT4KPC9kaXY+CiAgICAgICAgPHA+Q2V0dGUgZGlyZWN0aXZlIHZhIGZhaXJlIGNvcnJlc3BvbmRyZSBkZXMgdXJpIGNvbW1lCgkvcGhvdG9zL3Nob3c/aWQ9OSBhdSBmaWNoaWVyIC9zY3JpcHRzL3Bob3Rvcy5sdWEsIGV0IGludm9xdWVyYSBsYQoJZm9uY3Rpb24gZGUgZ2VzdGlvbm5haXJlIGhhbmRsZV9zaG93IGF1IG5pdmVhdSBkZSBsYSB2bSBsdWEKCWFwcuhzIGNoYXJnZW1lbnQgZGUgY2UgZmljaGllci48L3A+Cgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+THVhTWFwSGFuZGxlciAiL2JpbmdvIiAiL3NjcmlwdHMvd29tYmF0Lmx1YSI8L3ByZT4KCiAgICAgICAgPHA+Q2V0dGUgZGlyZWN0aXZlIGludm9xdWVyYSBsYSBmb25jdGlvbiAiaGFuZGxlIiBxdWkgZXN0IGxhCgl2YWxldXIgcGFyIGTpZmF1dCBzaSBhdWN1biBub20gZGUgZm9uY3Rpb24gc3DpY2lmaXF1ZSBuJ2VzdAoJc3DpY2lmaekuPC9wPgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Imx1YW91dHB1dGZpbHRlciIgaWQ9Imx1YW91dHB1dGZpbHRlciI+RGlyZWN0aXZlPC9hPiA8YSBuYW1lPSJMdWFPdXRwdXRGaWx0ZXIiIGlkPSJMdWFPdXRwdXRGaWx0ZXIiPkx1YU91dHB1dEZpbHRlcjwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkZvdXJuaXQgdW5lIGZvbmN0aW9uIEx1YSBwb3VyIGxlIGZpbHRyYWdlIGRlIGNvbnRlbnUgZW4Kc29ydGllPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3ludGF4Ij5TeW50YXhlOjwvYT48L3RoPjx0ZD48Y29kZT5MdWFPdXRwdXRGaWx0ZXIgZmlsdGVyX25hbWUgL3BhdGgvdG8vbHVhL3NjcmlwdC5sdWEgZnVuY3Rpb25fbmFtZTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0ZTo8L2E+PC90aD48dGQ+Y29uZmlndXJhdGlvbiBkdSBzZXJ2ZXVyPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXQ6PC9hPjwvdGg+PHRkPkV4cOlyaW1lbnRhbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfbHVhPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29tcGF0aWJpbGl0eSI+Q29tcGF0aWJpbGl06To8L2E+PC90aD48dGQ+RGlzcG9uaWJsZSDgIHBhcnRpciBkZSBsYSB2ZXJzaW9uIDIuNC41IGR1IHNlcnZldXIgSFRUUApBcGFjaGU8L3RkPjwvdHI+CjwvdGFibGU+CjxwPiZndDtDZXR0ZSBkaXJlY3RpdmUgcGVybWV0IGQnYWpvdXRlciB1biBmaWx0cmUgZW4gc29ydGllIHNvdXMgbGEgZm9ybWUKZCd1bmUgZm9uY3Rpb24gTHVhLiBBIGwnaW5zdGFyIGRlcyBmaWx0cmVzIGVuIHNvcnRpZXMsIGxlcyBmaWx0cmVzIGVuCmVudHLpZSBmb25jdGlvbm5lbnQgY29tbWUgZGVzIHNvdXMtcm91dGluZXMsIGludGVydmVuYW50IGRhbnMgdW4gcHJlbWllcgp0ZW1wcyBhdmFudCBsJ2Vudm9pIGR1IGNvbnRlbnUgZGVzIHRhbXBvbnMsIHB1aXMgY2hhcXVlIGZvaXMgcXUndW4KcGFxdWV0IGRlIGRvbm7pZXMgZG9pdCDqdHJlIHRyYW5zbWlzIOAgbGEgY2hh7m5lLCBldCDpdmVudHVlbGxlbWVudApwcm9kdWlzYW50IHRvdXRlIGRvbm7pZSDgIGFqb3V0ZXIgYXV4IGRvbm7pZXMgZW4gc29ydGllLiBMYSB2YXJpYWJsZQpnbG9iYWxlIDxjb2RlPmJ1Y2tldDwvY29kZT4gY29udGllbnQgbGVzIHBhcXVldHMgZGUgZG9ubullcyB0ZWxzIHF1J2lscwpzb250IHRyYW5zbWlzIGF1IHNjcmlwdCBMdWEgOgo8L3A+Cgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWNvbmZpZyI+THVhT3V0cHV0RmlsdGVyIG15T3V0cHV0RmlsdGVyICIvd3d3L2ZpbHRlci5sdWEiIG91dHB1dF9maWx0ZXIKJmx0O0ZpbGVzICIqLmx1YSImZ3Q7CiAgU2V0T3V0cHV0RmlsdGVyIG15T3V0cHV0RmlsdGVyCiZsdDsvRmlsZXMmZ3Q7PC9wcmU+Cgo8cHJlIGNsYXNzPSJwcmV0dHlwcmludCBsYW5nLWx1YSI+LS1bWwogICAgRXhlbXBsZSBkZSBmaWx0cmUgZW4gc29ydGllIHF1aSDpY2hhcHBlIHRvdXRlcyBsZXMgZW50aXTpcyBIVE1MIGVuCiAgICBzb3J0aWUKXV0tLQpmdW5jdGlvbiBvdXRwdXRfZmlsdGVyKHIpCiAgICBjb3JvdXRpbmUueWllbGQoIihIYW5kbGVkIGJ5IG15T3V0cHV0RmlsdGVyKSZsdDtici8mZ3Q7XG4iKSAtLSBBam91dGUgZGVzIGRvbm7pZXMgYXUgZOlidXQgZGUgbGEgc29ydGllLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gcHVpcyBhdHRlbmQgZGVzIHBhcXVldHMgZGUgZG9ubullcyDgIHRyYWl0ZXIKICAgIHdoaWxlIGJ1Y2tldCBkbyAtLSBQb3VyIGNoYXF1ZSBwYXF1ZXQsIGZhaXJlIC4uLgogICAgICAgIGxvY2FsIG91dHB1dCA9IHI6ZXNjYXBlX2h0bWwoYnVja2V0KSAtLSBFY2hhcHBlIGxlcyBkb25u6WVzIGVuIHNvcnRpZQogICAgICAgIGNvcm91dGluZS55aWVsZChvdXRwdXQpIC0tIEVudm9pZSBsZXMgZG9ubullcyB0cmFpdOllcyDgIGxhIGNoYe5uZQogICAgZW5kCiAgICAtLSBwbHVzIGF1Y3VuZSBkb25u6WUg4CB0cmFpdGVyLgplbmQ8L3ByZT4KCjxwPgpDb21tZSBsZXMgZmlscmVzIGVuIGVudHLpZSwgbGUgZmlsdHJlIGVuIHNvcnRpZSBwZXV0IGludGVyZGlyZSBvdSBzYXV0ZXIgdW4gZmlsdHJlIHMnaWwgZXN0CmNvbnNpZOly6SBjb21tZSBpbmTpc2lyYWJsZSA6CjwvcD4KPHByZSBjbGFzcz0icHJldHR5cHJpbnQgbGFuZy1sdWEiPmZ1bmN0aW9uIG91dHB1dF9maWx0ZXIocikKICAgIGlmIG5vdCByLmNvbnRlbnRfdHlwZTptYXRjaCgidGV4dC9odG1sIikgdGhlbgogICAgICAgIHJldHVybiAtLSBFbXDqY2hlIHRvdXQgc2ltcGxlbWVudCBsZSBmaWx0cmFnZSBldCB0cmFuc21ldCBsZSBjb250ZW51IG9yaWdpbmFsCiAgICBlbmQKICAgIGNvcm91dGluZS55aWVsZCgpIC0tIGF0dGVuZCBkZXMgcGFxdWV0cyBkZSBkb25u6WVzCiAgICAuLi4gICAgICAgICAgICAgICAtLSBpbnNlcnQgbGVzIGZpbHRyZXMgaWNpCmVuZDwvcHJlPgoKPGRpdiBjbGFzcz0ibm90ZSI+PGgzPkxlcyBmaWx0cmVzIEx1YSBhdmVjIDxjb2RlIGNsYXNzPSJtb2R1bGUiPjxhIGhyZWY9Ii4uL21vZC9tb2RfZmlsdGVyLmh0bWwiPm1vZF9maWx0ZXI8L2E+PC9jb2RlPjwvaDM+CjxwPkxvcnNxdSdvbiB1dGlsaXNlIHVuIGZpbHRyZSBMdWEgY29tbWUgZm91cm5pc3NldXIgc291cy1qYWNlbnQgdmlhIGxhCmRpcmVjdGl2ZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvbW9kX2ZpbHRlci5odG1sI2ZpbHRlcnByb3ZpZGVyIj5GaWx0ZXJQcm92aWRlcjwvYT48L2NvZGU+LCBsZQpmaWx0cmFnZSBuZSBmb25jdGlvbm5lcmEgcXVlIHNpIDx2YXI+ZmlsdGVyLW5hbWU8L3Zhcj4gZXN0IGlkZW50aXF1ZSDgCjx2YXI+cHJvdmlkZXItbmFtZTwvdmFyPi4KPC9wPiA8L2Rpdj4KCjxwPgpWb2lyICI8YSBocmVmPSIjbW9kaWZ5aW5nX2J1Y2tldHMiPk1vZGlmaWNhdGlvbiBkZSBjb250ZW51IGF2ZWMgbGVzCmZpbHRyZXMgTHVhPC9hPiIgcG91ciBwbHVzIGRlIGTpdGFpbHMuCjwvcD4KCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0ibHVhcGFja2FnZWNwYXRoIiBpZD0ibHVhcGFja2FnZWNwYXRoIj5EaXJlY3RpdmU8L2E+IDxhIG5hbWU9Ikx1YVBhY2thZ2VDUGF0aCIgaWQ9Ikx1YVBhY2thZ2VDUGF0aCI+THVhUGFja2FnZUNQYXRoPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+QWpvdXRlIHVuIHLpcGVydG9pcmUgYXUgcGFja2FnZS5jcGF0aCBkZSBsdWE8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheGU6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YVBhY2thZ2VDUGF0aCAvY2hlbWluL3ZlcnMvaW5jbHVkZS8/LnNvYTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0ZTo8L2E+PC90aD48dGQ+Y29uZmlndXJhdGlvbiBkdSBzZXJ2ZXVyLCBzZXJ2ZXVyIHZpcnR1ZWwsIHLpcGVydG9pcmUsIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5BbGxvd092ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1dDo8L2E+PC90aD48dGQ+RXhw6XJpbWVudGFsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sdWE8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5DZXR0ZSBkaXJlY3RpdmUgcGVybWV0IGQnYWpvdXRlciB1biBjaGVtaW4g4CBsYSBsaXN0ZSBkZXMgY2hlbWlucwogICAgZGUgcmVjaGVyY2hlIGRlcyBiaWJsaW90aOhxdWVzIHBhcnRhZ+llcyBkZSBsdWEuIENlY2kgbW9kaWZpZSBsZQogICAgcGFja2FnZS5jcGF0aCBkYW5zIGxlcyB2bXMgbHVhLjwvcD4KCgo8L2Rpdj4KPGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgYWx0PSJ0b3AiIHNyYz0iLi4vaW1hZ2VzL3VwLmdpZiIgLz48L2E+PC9kaXY+CjxkaXYgY2xhc3M9ImRpcmVjdGl2ZS1zZWN0aW9uIj48aDI+PGEgbmFtZT0ibHVhcGFja2FnZXBhdGgiIGlkPSJsdWFwYWNrYWdlcGF0aCI+RGlyZWN0aXZlPC9hPiA8YSBuYW1lPSJMdWFQYWNrYWdlUGF0aCIgaWQ9Ikx1YVBhY2thZ2VQYXRoIj5MdWFQYWNrYWdlUGF0aDwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkFqb3V0ZSB1biBy6XBlcnRvaXJlIGF1IHBhY2thZ2UucGF0aCBkZSBsdWE8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheGU6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YVBhY2thZ2VQYXRoIC9jaGVtaW4vdmVycy9pbmNsdWRlLz8ubHVhPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHRlOjwvYT48L3RoPjx0ZD5jb25maWd1cmF0aW9uIGR1IHNlcnZldXIsIHNlcnZldXIgdmlydHVlbCwgculwZXJ0b2lyZSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPkFsbG93T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHV0OjwvYT48L3RoPjx0ZD5FeHDpcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPC90YWJsZT48cD5DZXR0ZSBkaXJlY3RpdmUgcGVybWV0IGQnYWpvdXRlciB1biBjaGVtaW4g4CBsYSBsaXN0ZSBkZXMKICAgIGNoZW1pbnMgZGUgcmVjaGVyY2hlIGR1IG1vZHVsZSBsdWEuIEVsbGUgc3VpdCBsZXMgbeptZXMgY29udmVudGlvbnMKICAgIHF1ZSBsdWEuIENlY2kgbW9kaWZpZSBsZSBwYWNrYWdlLnBhdGggZGFucyBsZXMgdm1zIGx1YS48L3A+CgogICAgPGRpdiBjbGFzcz0iZXhhbXBsZSI+PGgzPkV4ZW1wbGVzIDo8L2gzPjxwcmUgY2xhc3M9InByZXR0eXByaW50IGxhbmctY29uZmlnIj5MdWFQYWNrYWdlUGF0aCAiL3NjcmlwdHMvbGliLz8ubHVhIgpMdWFQYWNrYWdlUGF0aCAiL3NjcmlwdHMvbGliLz8vaW5pdC5sdWEiPC9wcmU+CjwvZGl2PgoKPC9kaXY+CjxkaXYgY2xhc3M9InRvcCI+PGEgaHJlZj0iI3BhZ2UtaGVhZGVyIj48aW1nIGFsdD0idG9wIiBzcmM9Ii4uL2ltYWdlcy91cC5naWYiIC8+PC9hPjwvZGl2Pgo8ZGl2IGNsYXNzPSJkaXJlY3RpdmUtc2VjdGlvbiI+PGgyPjxhIG5hbWU9Imx1YXF1aWNraGFuZGxlciIgaWQ9Imx1YXF1aWNraGFuZGxlciI+RGlyZWN0aXZlPC9hPiA8YSBuYW1lPSJMdWFRdWlja0hhbmRsZXIiIGlkPSJMdWFRdWlja0hhbmRsZXIiPkx1YVF1aWNrSGFuZGxlcjwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPkZvdXJuaXQgdW4gcG9pbnQgZCdlbnRy6WUgcG91ciBsYSBnZXN0aW9uIHJhcGlkZSBkdQp0cmFpdGVtZW50IGRlIGxhIHJlcXXqdGU8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheGU6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YVF1aWNrSGFuZGxlciAvcGF0aC90by9zY3JpcHQubHVhIGhvb2tfZnVuY3Rpb25fbmFtZTwvY29kZT48L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNDb250ZXh0Ij5Db250ZXh0ZTo8L2E+PC90aD48dGQ+Y29uZmlndXJhdGlvbiBkdSBzZXJ2ZXVyLCBzZXJ2ZXVyIHZpcnR1ZWwsIHLpcGVydG9pcmUsIC5odGFjY2VzczwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI092ZXJyaWRlIj5BbGxvd092ZXJyaWRlOjwvYT48L3RoPjx0ZD5BbGw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTdGF0dXMiPlN0YXR1dDo8L2E+PC90aD48dGQ+RXhw6XJpbWVudGFsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjTW9kdWxlIj5Nb2R1bGU6PC9hPjwvdGg+PHRkPm1vZF9sdWE8L3RkPjwvdHI+CjwvdGFibGU+CiAgICA8cD5DZXR0ZSBwaGFzZSBzJ2V46WN1dGUganVzdGUgYXBy6HMgbCdhdHRyaWJ1dGlvbiBkZSBsYSByZXF16nRlIOAKICAgIHVuIHNlcnZldXIgdmlydHVlbCwgZXQgcGVybWV0IGQnZWZmZWN0dWVyIGNlcnRhaW5zIHRyYWl0ZW1lbnRzIGF2YW50CiAgICBsZSBk6XJvdWxlbWVudCBkZXMgYXV0cmVzIHBoYXNlcywgb3UgZGUgc2VydmlyIHVuZSByZXF16nRlIHNhbnMKICAgIGF2b2lyIOAgbGEgdHJhZHVpcmUsIGwnYXNzb2NpZXIg4CB1biBlc3BhY2UgZGUgc3RvY2thZ2UsIGV0Yy4uLgogICAgQ29tbWUgY2V0dGUgcGhhc2UgcydleOljdXRlIGF2YW50IHRvdXRlIGF1dHJlLCBsZXMgZGlyZWN0aXZlcyB0ZWxsZXMKICAgIHF1ZSA8Y29kZSBjbGFzcz0iZGlyZWN0aXZlIj48YSBocmVmPSIuLi9tb2QvY29yZS5odG1sI2xvY2F0aW9uIj4mbHQ7TG9jYXRpb24mZ3Q7PC9hPjwvY29kZT4gb3UKICAgIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+IG5lCiAgICBzb250IHBhcyBlbmNvcmUgcHJpc2VzIGVuIGNvbXB0ZSwgY2FyIExlcyBVUkkgbidvbnQgcGFzIGVuY29yZSDpdOkKICAgIGVudGnocmVtZW50IGludGVycHLpdOlzLgogICAgPC9wPgogICA8ZGl2IGNsYXNzPSJub3RlIj48aDM+Q29udGV4dGU8L2gzPjxwPkNldHRlIGRpcmVjdGl2ZSBuZSBwZXV0IOp0cmUKICAgdXRpbGlz6WUgbmkg4CBsJ2ludOlyaWV1ciBkJ3VuZSBzZWN0aW9uIDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjZGlyZWN0b3J5Ij4mbHQ7RGlyZWN0b3J5Jmd0OzwvYT48L2NvZGU+IG91IDxjb2RlIGNsYXNzPSJkaXJlY3RpdmUiPjxhIGhyZWY9Ii4uL21vZC9jb3JlLmh0bWwjZmlsZXMiPiZsdDtGaWxlcyZndDs8L2E+PC9jb2RlPiwgbmkgZGFucyB1biBmaWNoaWVyIGh0YWNjZXNzLjwvcD48L2Rpdj4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJsdWFyb290IiBpZD0ibHVhcm9vdCI+RGlyZWN0aXZlPC9hPiA8YSBuYW1lPSJMdWFSb290IiBpZD0iTHVhUm9vdCI+THVhUm9vdDwvYT48L2gyPgo8dGFibGUgY2xhc3M9ImRpcmVjdGl2ZSI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNEZXNjcmlwdGlvbiI+RGVzY3JpcHRpb246PC9hPjwvdGg+PHRkPlNw6WNpZmllIGxlIGNoZW1pbiBkZSBiYXNlIHBvdXIgbGEgculzb2x1dGlvbiBkZXMgY2hlbWlucwpyZWxhdGlmcyBkYW5zIGxlcyBkaXJlY3RpdmVzIGRlIG1vZF9sdWE8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheGU6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YVJvb3QgL2NoZW1pbi92ZXJzL3VuL3LpcGVydG9pcmU8L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjQ29udGV4dCI+Q29udGV4dGU6PC9hPjwvdGg+PHRkPmNvbmZpZ3VyYXRpb24gZHUgc2VydmV1ciwgc2VydmV1ciB2aXJ0dWVsLCBy6XBlcnRvaXJlLCAuaHRhY2Nlc3M8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNPdmVycmlkZSI+QWxsb3dPdmVycmlkZTo8L2E+PC90aD48dGQ+QWxsPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjU3RhdHVzIj5TdGF0dXQ6PC9hPjwvdGg+PHRkPkV4cOlyaW1lbnRhbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI01vZHVsZSI+TW9kdWxlOjwvYT48L3RoPjx0ZD5tb2RfbHVhPC90ZD48L3RyPgo8L3RhYmxlPgogICAgPHA+Q2V0dGUgZGlyZWN0aXZlIHBlcm1ldCBkZSBzcOljaWZpZXIgbGUgY2hlbWluIGRlIGJhc2UgcXVpIHNlcmEKICAgIHV0aWxpc+kgcG91ciDpdmFsdWVyIHRvdXMgbGVzIGNoZW1pbnMgcmVsYXRpZnMgZGFucyBtb2RfbHVhLiBFbgogICAgbCdhYnNlbmNlIGRlIGNldHRlIGRpcmVjdGl2ZSwgbGVzIGNoZW1pbnMgcmVsYXRpZnMgc29udCBy6XNvbHVzIHBhcgogICAgcmFwcG9ydCBhdSBy6XBlcnRvaXJlIGRlIHRyYXZhaWwgY291cmFudCwgY2UgcXVpIG5lIHNlcmEgcGFzCiAgICB0b3Vqb3VycyBhcHByb3ByaekgcG91ciB1biBzZXJ2ZXVyLjwvcD4KCjwvZGl2Pgo8ZGl2IGNsYXNzPSJ0b3AiPjxhIGhyZWY9IiNwYWdlLWhlYWRlciI+PGltZyBhbHQ9InRvcCIgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iZGlyZWN0aXZlLXNlY3Rpb24iPjxoMj48YSBuYW1lPSJsdWFzY29wZSIgaWQ9Imx1YXNjb3BlIj5EaXJlY3RpdmU8L2E+IDxhIG5hbWU9Ikx1YVNjb3BlIiBpZD0iTHVhU2NvcGUiPkx1YVNjb3BlPC9hPjwvaDI+Cjx0YWJsZSBjbGFzcz0iZGlyZWN0aXZlIj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0Rlc2NyaXB0aW9uIj5EZXNjcmlwdGlvbjo8L2E+PC90aD48dGQ+VW5lIHZhbGV1ciBwYXJtaSBvbmNlLCByZXF1ZXN0LCBjb25uLCB0aHJlYWQgLS0gbGEgdmFsZXVyIHBhciBk6WZhdXQgZXN0IG9uY2U8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNTeW50YXgiPlN5bnRheGU6PC9hPjwvdGg+PHRkPjxjb2RlPkx1YVNjb3BlIG9uY2V8cmVxdWVzdHxjb25ufHRocmVhZHxzZXJ2ZXIgW21pbl0gW21heF08L2NvZGU+PC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjRGVmYXVsdCI+ROlmYXV0OjwvYT48L3RoPjx0ZD48Y29kZT5MdWFTY29wZSBvbmNlPC9jb2RlPjwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI0NvbnRleHQiPkNvbnRleHRlOjwvYT48L3RoPjx0ZD5jb25maWd1cmF0aW9uIGR1IHNlcnZldXIsIHNlcnZldXIgdmlydHVlbCwgculwZXJ0b2lyZSwgLmh0YWNjZXNzPC90ZD48L3RyPgo8dHI+PHRoPjxhIGhyZWY9ImRpcmVjdGl2ZS1kaWN0Lmh0bWwjT3ZlcnJpZGUiPkFsbG93T3ZlcnJpZGU6PC9hPjwvdGg+PHRkPkFsbDwvdGQ+PC90cj4KPHRyPjx0aD48YSBocmVmPSJkaXJlY3RpdmUtZGljdC5odG1sI1N0YXR1cyI+U3RhdHV0OjwvYT48L3RoPjx0ZD5FeHDpcmltZW50YWw8L3RkPjwvdHI+Cjx0cj48dGg+PGEgaHJlZj0iZGlyZWN0aXZlLWRpY3QuaHRtbCNNb2R1bGUiPk1vZHVsZTo8L2E+PC90aD48dGQ+bW9kX2x1YTwvdGQ+PC90cj4KPC90YWJsZT4KICAgIDxwPkNldHRlIGRpcmVjdGl2ZSBwZXJtZXQgZGUgc3DpY2lmaWVyIGxhIGR1cullIGRlIHZpZSBkZQogICAgbCdpbnRlcnBy6XRldXIgTHVhIHF1aSBzZXJhIHV0aWxpc+kgZGFucyBjZSAiculwZXJ0b2lyZSIuIExhIHZhbGV1cgogICAgcGFyIGTpZmF1dCBlc3QgIm9uY2UiLjwvcD4KCiAgIDxkbD4KICAgIDxkdD5vbmNlOjwvZHQ+IDxkZD51dGlsaXNlIGwnaW50ZXJwcul0ZXVyIHVuZSBmb2lzLjwvZGQ+CgogICAgPGR0PnJlcXVlc3Q6PC9kdD4gPGRkPnV0aWxpc2UgbCdpbnRlcnBy6XRldXIgcG91ciB0cmFpdGVyIHRvdXQgY2UKICAgIHF1aSBlc3QgYmFz6SBzdXIgbGUgbeptZSBmaWNoaWVyIGRhbnMgbGEgcmVxdep0ZSwgZXQgcXVpIHNlIHRyb3V2ZQogICAgYXVzc2kgZGFucyBsYSBwb3J06WUgZGUgbGEgcmVxdep0ZS48L2RkPgoKICAgIDxkdD5jb25uOjwvZHQ+IDxkZD5pZGVtIHJlcXVlc3QsIG1haXMgYXR0YWNo6SDgIGNvbm5lY3Rpb25fcmVjPC9kZD4KCiAgICA8ZHQ+dGhyZWFkOjwvZHQ+IDxkZD5VdGlsaXNlIGwnaW50ZXJwcul0ZXVyIHBlbmRhbnQgdG91dGUgbGEgZHVy6WUKICAgIGRlIHZpZSBkdSB0aHJlYWQgcXVpIHRyYWl0ZSBsYSByZXF16nRlIChkaXNwb25pYmxlIHNldWxlbWVudCBhdmVjCiAgICBsZXMgTVBNcyB0aHJlYWTpcykuPC9kZD4KCiAgICA8ZHQ+c2VydmVyOjwvZHQ+ICA8ZGQ+TGUgY29tcG9ydGVtZW50IGVzdCBpY2kgZGlmZulyZW50LCBjYXIgbGEKICAgIHBvcnTpZSBkdSBzZXJ2ZXVyIHBy6XNlbnRlIHVuZSBkdXLpZSBkZSB2aWUgYXNzZXogbG9uZ3VlLCBldAogICAgcGx1c2lldXJzIHRocmVhZHMgdm9udCBwYXJ0YWdlciBsZSBt6m1lIHNlcnZlcl9yZWMuIFBvdXIgZ+lyZXIgdG91dAogICAgY2VjaSwgbGVzIOl0YXRzIGx1YSBkdSBzZXJ2ZXVyIHNvbnQgc3RvY2vpcyBkYW5zIHVuZSBsaXN0ZSBkZSByZXNzb3VyY2VzCiAgICBhcHIuIExlcyBhcmd1bWVudHMgPGNvZGU+bWluPC9jb2RlPiBldCA8Y29kZT5tYXg8L2NvZGU+IHBlcm1ldHRlbnQKICAgIGRlIHNw6WNpZmllciBsZXMgbm9tYnJlcyBtaW5pbWF1eCBldCBtYXhpbWF1eCBkJ+l0YXRzIGx1YSDgIHN0b2NrZXIKICAgIGRhbnMgbGEgbGlzdGUuPC9kZD4KICAgPC9kbD4KICAgPHA+RW4gZ+lu6XJhbCwgbGVzIHBvcnTpZXMgPGNvZGU+dGhyZWFkPC9jb2RlPiBldCA8Y29kZT5zZXJ2ZXI8L2NvZGU+CiAgIHNvbnQgMiDgIDMgZm9pcyBwbHVzIHJhcGlkZXMgcXVlIGxlcyBhdXRyZXMsIGNhciBlbGxlcyBuJ29udCBwYXMgYmVzb2luCiAgIGRlIHLpZ+lu6XJlciBkZSBub3V2ZWF1eCDpdGF0cyBMdWEg4CBjaGFxdWUgcmVxdep0ZSAoY29tbWUgYydlc3QgbGUKICAgY2FzIGF2ZWMgbGUgTVBNIGV2ZW50LCBv+SBt6m1lIGxlcyBjb25uZXhpb25zIHBlcnNpc3RhbnRlcyB1dGlsaXNlbnQgdW4KICAgbm91dmVhdSB0aHJlYWQgcG91ciBjaGFxdWUgcmVxdep0ZSkuIFNpIHZvdXMgcGVuc2V6IHF1ZSB2b3Mgc2NyaXB0cwogICBuJ2F1cm9udCBwYXMgZGUgcHJvYmzobWUgcydpbCBy6XV0aWxpc2VudCB1biDpdGF0LCBhbG9ycyBsZXMgcG9ydOllcwogICA8Y29kZT50aHJlYWQ8L2NvZGU+IG91IDxjb2RlPnNlcnZlcjwvY29kZT4gZG9pdmVudCDqdHJlIHV0aWxpc+llcyBjYXIKICAgZWxsZXMgcHLpc2VudGVyb250IGRlIG1laWxsZXVyZXMgcGVyZm9ybWFuY2VzLiBBbG9ycyBxdWUgbGEgcG9ydOllCiAgIDxjb2RlPnRocmVhZDwvY29kZT4gZm91cm5pcmEgbGVzIHLpcG9uc2VzIGxlcyBwbHVzIHJhcGlkZXMsIGxhIHBvcnTpZQogICA8Y29kZT5zZXJ2ZXI8L2NvZGU+IHV0aWxpc2VyYSBtb2lucyBkZSBt6W1vaXJlIGNhciBsZXMg6XRhdHMgc29udAogICByYXNzZW1ibOlzIGRhbnMgZGVzIGpldXgsIHBlcm1ldHRhbnQgcGFyIGV4ZW1wbGUg4CAxMDAwIHRocmVhZHMgZGUKICAgcGFydGFnZXIgMTAwIOl0YXRzIEx1YSwgbmUgbuljZXNzaXRhbnQgYWluc2kgcXVlIDEwJSBkZSBsYSBt6W1vaXJlCiAgIHJlcXVpc2UgcGFyIGxhIHBvcnTpZSA8Y29kZT50aHJlYWQ8L2NvZGU+LgogICAgPC9wPgoKPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+TGFuZ3VlcyBEaXNwb25pYmxlczogPC9zcGFuPjxhIGhyZWY9Ii4uL2VuL21vZC9tb2RfbHVhLmh0bWwiIGhyZWZsYW5nPSJlbiIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9tb2QvbW9kX2x1YS5odG1sIiB0aXRsZT0iRnJhbudhaXMiPiZuYnNwO2ZyJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50YWlyZXM8L2E+PC9oMj48ZGl2IGNsYXNzPSJ3YXJuaW5nIj48c3Ryb25nPk5vdGljZTo8L3N0cm9uZz48YnIgLz5UaGlzIGlzIG5vdCBhIFEmYW1wO0Egc2VjdGlvbi4gQ29tbWVudHMgcGxhY2VkIGhlcmUgc2hvdWxkIGJlIHBvaW50ZWQgdG93YXJkcyBzdWdnZXN0aW9ucyBvbiBpbXByb3ZpbmcgdGhlIGRvY3VtZW50YXRpb24gb3Igc2VydmVyLCBhbmQgbWF5IGJlIHJlbW92ZWQgYWdhaW4gYnkgb3VyIG1vZGVyYXRvcnMgaWYgdGhleSBhcmUgZWl0aGVyIGltcGxlbWVudGVkIG9yIGNvbnNpZGVyZWQgaW52YWxpZC9vZmYtdG9waWMuIFF1ZXN0aW9ucyBvbiBob3cgdG8gbWFuYWdlIHRoZSBBcGFjaGUgSFRUUCBTZXJ2ZXIgc2hvdWxkIGJlIGRpcmVjdGVkIGF0IGVpdGhlciBvdXIgSVJDIGNoYW5uZWwsICNodHRwZCwgb24gRnJlZW5vZGUsIG9yIHNlbnQgdG8gb3VyIDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvbW9kL21vZF9sdWEuaHRtbCc7CihmdW5jdGlvbih3LCBkKSB7CiAgICBpZiAody5sb2NhdGlvbi5ob3N0bmFtZS50b0xvd2VyQ2FzZSgpID09ICJodHRwZC5hcGFjaGUub3JnIikgewogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+PFwvZGl2PicpOwogICAgICAgIHZhciBzID0gZC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTsKICAgICAgICBzLnR5cGUgPSAndGV4dC9qYXZhc2NyaXB0JzsKICAgICAgICBzLmFzeW5jID0gdHJ1ZTsKICAgICAgICBzLnNyYyA9ICdodHRwczovL2NvbW1lbnRzLmFwYWNoZS5vcmcvc2hvd19jb21tZW50cy5sdWE/c2l0ZT0nICsgY29tbWVudHNfc2hvcnRuYW1lICsgJyZwYWdlPScgKyBjb21tZW50c19pZGVudGlmaWVyOwogICAgICAgIChkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF0gfHwgZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYm9keScpWzBdKS5hcHBlbmRDaGlsZChzKTsKICAgIH0KICAgIGVsc2UgeyAKICAgICAgICBkLndyaXRlKCc8ZGl2IGlkPSJjb21tZW50c190aHJlYWQiPkNvbW1lbnRzIGFyZSBkaXNhYmxlZCBmb3IgdGhpcyBwYWdlIGF0IHRoZSBtb21lbnQuPFwvZGl2PicpOwogICAgfQp9KSh3aW5kb3csIGRvY3VtZW50KTsKLy8tLT48IV1dPjwvc2NyaXB0PjwvZGl2PjxkaXYgaWQ9ImZvb3RlciI+CjxwIGNsYXNzPSJhcGFjaGUiPkNvcHlyaWdodCAyMDE2IFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi48YnIgLz5BdXRvcmlz6SBzb3VzIDxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMCI+QXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wPC9hPi48L3A+CjxwIGNsYXNzPSJtZW51Ij48YSBocmVmPSIuLi9tb2QvIj5Nb2R1bGVzPC9hPiB8IDxhIGhyZWY9Ii4uL21vZC9kaXJlY3RpdmVzLmh0bWwiPkRpcmVjdGl2ZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3dpa2kuYXBhY2hlLm9yZy9odHRwZC9GQVEiPkZBUTwvYT4gfCA8YSBocmVmPSIuLi9nbG9zc2FyeS5odG1sIj5HbG9zc2FpcmU8L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj5QbGFuIGR1IHNpdGU8L2E+PC9wPjwvZGl2PjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48IS0tLy8tLT48IVtDREFUQVsvLz48IS0tCmlmICh0eXBlb2YocHJldHR5UHJpbnQpICE9PSAndW5kZWZpbmVkJykgewogICAgcHJldHR5UHJpbnQoKTsKfQovLy0tPjwhXV0+PC9zY3JpcHQ+CjwvYm9keT48L2h0bWw+