PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iRVVDLUtSIj8+CjwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFN0cmljdC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiIGxhbmc9ImtvIiB4bWw6bGFuZz0ia28iPjxoZWFkPgo8bWV0YSBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9RVVDLUtSIiBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIC8+CjwhLS0KICAgICAgICBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWAogICAgICAgICAgICAgIFRoaXMgZmlsZSBpcyBnZW5lcmF0ZWQgZnJvbSB4bWwgc291cmNlOiBETyBOT1QgRURJVAogICAgICAgIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYCiAgICAgIC0tPgo8dGl0bGU+SFBVWL+hvK0gsO28urTJIMClvK259iC9x8fgx8+x4iAtIEFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvdGl0bGU+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJhbGwiIHR5cGU9InRleHQvY3NzIiB0aXRsZT0iTWFpbiBzdHlsZXNoZWV0IiAvPgo8bGluayBocmVmPSIuLi9zdHlsZS9jc3MvbWFudWFsLWxvb3NlLTEwMHBjLmNzcyIgcmVsPSJhbHRlcm5hdGUgc3R5bGVzaGVldCIgbWVkaWE9ImFsbCIgdHlwZT0idGV4dC9jc3MiIHRpdGxlPSJObyBTaWRlYmFyIC0gRGVmYXVsdCBmb250IHNpemUiIC8+CjxsaW5rIGhyZWY9Ii4uL3N0eWxlL2Nzcy9tYW51YWwtcHJpbnQuY3NzIiByZWw9InN0eWxlc2hlZXQiIG1lZGlhPSJwcmludCIgdHlwZT0idGV4dC9jc3MiIC8+PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vc3R5bGUvY3NzL3ByZXR0aWZ5LmNzcyIgLz4KPHNjcmlwdCBzcmM9Ii4uL3N0eWxlL3NjcmlwdHMvcHJldHRpZnkubWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgo8L3NjcmlwdD4KCjxsaW5rIGhyZWY9Ii4uL2ltYWdlcy9mYXZpY29uLmljbyIgcmVsPSJzaG9ydGN1dCBpY29uIiAvPjwvaGVhZD4KPGJvZHkgaWQ9Im1hbnVhbC1wYWdlIiBjbGFzcz0ibm8tc2lkZWJhciI+PGRpdiBpZD0icGFnZS1oZWFkZXIiPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+uPC14jwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj7B9r3Dvu616TwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPr/rvu48L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj6758DMxq64yjwvYT48L3A+CjxwIGNsYXNzPSJhcGFjaGUiPkFwYWNoZSBIVFRQIFNlcnZlciBWZXJzaW9uIDIuNDwvcD4KPGltZyBhbHQ9IiIgc3JjPSIuLi9pbWFnZXMvZmVhdGhlci5wbmciIC8+PC9kaXY+CjxkaXYgY2xhc3M9InVwIj48YSBocmVmPSIuLyI+PGltZyB0aXRsZT0iJmx0Oy0iIGFsdD0iJmx0Oy0iIHNyYz0iLi4vaW1hZ2VzL2xlZnQuZ2lmIiAvPjwvYT48L2Rpdj4KPGRpdiBpZD0icGF0aCI+CjxhIGhyZWY9Imh0dHA6Ly93d3cuYXBhY2hlLm9yZy8iPkFwYWNoZTwvYT4gJmd0OyA8YSBocmVmPSJodHRwOi8vaHR0cGQuYXBhY2hlLm9yZy8iPkhUVFAgU2VydmVyPC9hPiAmZ3Q7IDxhIGhyZWY9Imh0dHA6Ly9odHRwZC5hcGFjaGUub3JnL2RvY3MvIj5Eb2N1bWVudGF0aW9uPC9hPiAmZ3Q7IDxhIGhyZWY9Ii4uLyI+VmVyc2lvbiAyLjQ8L2E+ICZndDsgPGEgaHJlZj0iLi8iPlBsYXRmb3JtIFNwZWNpZmljIE5vdGVzPC9hPjwvZGl2PjxkaXYgaWQ9InBhZ2UtY29udGVudCI+PGRpdiBpZD0icHJlYW1ibGUiPjxoMT5IUFVYv6G8rSCw7by6tMkgwKW8rbn2IL3Hx+DHz7HiPC9oMT4KPGRpdiBjbGFzcz0idG9wbGFuZyI+CjxwPjxzcGFuPrChtMnH0SC+8L7uOiA8L3NwYW4+PGEgaHJlZj0iLi4vZW4vcGxhdGZvcm0vcGVyZi1ocC5odG1sIiBocmVmbGFuZz0iZW4iIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRW5nbGlzaCI+Jm5ic3A7ZW4mbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4vZnIvcGxhdGZvcm0vcGVyZi1ocC5odG1sIiBocmVmbGFuZz0iZnIiIHJlbD0iYWx0ZXJuYXRlIiB0aXRsZT0iRnJhbiYjMjMxO2FpcyI+Jm5ic3A7ZnImbmJzcDs8L2E+IHwKPGEgaHJlZj0iLi4va28vcGxhdGZvcm0vcGVyZi1ocC5odG1sIiB0aXRsZT0iS29yZWFuIj4mbmJzcDtrbyZuYnNwOzwvYT48L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJvdXRvZmRhdGUiPsDMILmuvK20wiDD1r3Fxscgufi/qsDMIL7GtNW0z7TZLgogICAgICAgICAgICDD1rHZv6Eguq+w5rXIILO7v+vAuiC/tb7uILmuvK24piDC/LDtx8+8vL/kLjwvZGl2PgoKCjxwcmU+RGF0ZTogV2VkLCAwNSBOb3YgMTk5NyAxNjo1OTozNCAtMDgwMApGcm9tOiBSaWNrIEpvbmVzICZsdDs8YSBocmVmPSJtYWlsdG86cmFqQGN1cC5ocC5jb20iPnJhakBjdXAuaHAuY29tPC9hPiZndDsKUmVwbHktVG86IDxhIGhyZWY9Im1haWx0bzpyYWpAY3VwLmhwLmNvbSI+cmFqQGN1cC5ocC5jb208L2E+Ck9yZ2FuaXphdGlvbjogTmV0d29yayBQZXJmb3JtYW5jZQpTdWJqZWN0OiBIUC1VWCB0dW5pbmcgdGlwczwvcHJlPgoKICAgIDxwPsDMILHbwLogvLq0ycfiu/MgxuTAzMH2v6Egw9+wocfSIEhQLVVYILy6tMnH4rvzIMbBwMy02S48L3A+CgogICAgPHA+SFAtVVggOS5YtMI6IDEwLjIwwLi3ziC+97HXt7nAzLXlx8+28zxiciAvPgogICAgSFAtVVggMTAuWzAwfDAxfDEwXcC6OiAxMC4yMMC4t84gvvex17e5wMy15cfPtvM8L3A+CgogICAgPHA+SFAtVVggMTAuMjDAujo8L3A+CgogICAgPHA+w9ax2SBBUlBBIFRyYW5zcG9ydCDG0MShILjwwL3AuyC8s8Shx9G02S4gsde3r7jpIFRDUAogICAgv6yw4cOjseIgx9i9rMXXwMy67SDFqbHiuKYgvLPBpMfSILz2IMDWtNkuILHiuruwqsC6CiAgICAyNTYgsLPAzLDtLCAywMcgsMW17MGmsPawqsC4t84gwfbBpMfYvt8gx9G02S4gYWRit84gxL+zzsDHCiAgICAqZGlzYyogwMy5zMH2uKYgvPbBpMfPv6kgvLPBpMfRtNkuILqvvPa47cC6CiAgICA8Y29kZT50Y3BfaGFzaF9zaXplPC9jb2RlPsDMtNkuIDxjb2RlPnRjcF9oYXNoX3NpemU8L2NvZGU+CiAgICC6r7z2sKrAzCAzMrrxxq7AzLnHt84gZGlzYyDAzLnMwfa4piC89sGkx9K2pyC53bXlvcMgMTa68cauCiAgICCwqsC7ILHit8/Hz7TCICI8Y29kZT53PC9jb2RlPiIgtOu9xSAzMrrxxq4gsKrAuyCx4rfPx8+0wgogICAgIjxjb2RlPlc8L2NvZGU+IrimILvnv+vH2L7fIMfRtNkuPC9wPgoKICAgIDxwPr7utrIgsKrAuyCw7bimse4/IDxhIGhyZWY9ImZ0cDovL2Z0cC5jdXAuaHAuY29tL2Rpc3QvbmV0d29ya2luZy90b29scy9jb25uaGlzdCI+ZnRwOi8vZnRwLmN1cC5ocC5jb20vZGlzdC9uZXR3b3JraW5nL3Rvb2xzL2Nvbm5oaXN0PC9hPsDHCiAgICCw4bD6uKYguriw7SwgvcO9usXbv6EgwbjA58fPtMIgVENQIL+ssOEgw9Gws7z2uKYgu+zG7LrBtvMuCiAgICDAzCC8/cDauKYgx9i9rMXXwMy67SDFqbHit84gs6q0qyCwqsDMILvztOfI9yAoMTAgwMzHzykgwNvAuLjpCiAgICDBwbTZLiBIUMDHIFNQRUN3ZWI5NiCw4bD6v6G8rSDAz7ndwPvAziC8s8GkwLsgurwgvPYgwNa02S4KICAgILDhsPq0wiA8YSBocmVmPSJodHRwOi8vd3d3LnNwZWNiZW5jaC5vcmcvIj5odHRwOi8vd3d3LnNwZWNiZW5jaC5vcmcvPC9hPr+hCiAgICDA1rTZLiBIUC1VWCC9w726xdvAzCDDyrTnIDEwMDC5+CBTUEVDd2ViOTYgv6yw4cC7IMfPtMIgsOa/7AogICAgPGNvZGU+VElNRV9XQUlUPC9jb2RlPrChIDYww8q287jpIDYwLDAwMLCzwMcgVENQICK/rLDhIsC7CiAgICDD38D7x9G02bTCILbmwMy02S48L3A+CgogICAgPHA+PGEgaHJlZj0iZnRwOi8vZnRwLmN1cC5ocC5jb20vZGlzdC9uZXR3b3JraW5nL21pc2MvbGlzdGVucSI+ZnRwOi8vZnRwLmN1cC5ocC5jb20vZGlzdC9uZXR3b3JraW5nL21pc2MvbGlzdGVucTwvYT64pgogICAgvcfH4MfPv6kgvcO9usXbwMcgv6yw4bTrseLH4LfEILHtwMy4piC+yyC89iDA1rTZLjwvcD4KCiAgICA8cD5QQS04MDAwseK53SC9w726xdu/obytIL7GxsTEobimIL3Hx+DH0bTZuOksIL7GxsTEoQogICAgvcfH4MbEwM/AzCDFqyDG5MDMwfbFqbHiuKYgu+e/68fPtbW3zyAiY2hhdHIix9G02S4guO23ycC6CiAgICAiPGNvZGU+Y2hhdHIgK3BpIEwgJmx0O73Hx+DGxMDPJmd0OzwvY29kZT4iwMy02S4gvcfH4MbEwM/AuwogICAgvcfH4MfPtMIgR0lEv6EgPGNvZGU+TUxPQ0s8L2NvZGU+ILHHx9HAzCC53bXlvcMgx8q/5MfPtNkuCiAgICA8Y29kZT5NTE9DSzwvY29kZT4gus6/qb+hILTrx9i8rbTCIDxjb2RlPlNldHByaXZncnAoMW0pPC9jb2RlPrimCiAgICDC/LDtx8+28y4gvPbBpMjEIEdsYW5jZbimIL3Hx+DHz7+pILytufbAxyC43rjwuK6/tb+qwLsgu+zG7Lq4uOkKICAgILvztOfH0SB0ZXh0ILy8sde41causKEgwOGw3MDWwL3AuyDIrsDOx9IgvPYgwNa02S48L3A+CgogICAgPHA+tNnB38fBt868vL26IL3DvbrF27+hvK0gvsbGxMShuKYgvcfH4MfRtNm46Swgx8G3zry8vbq4pgogICAgx8G3zry8vbq/oSC56MGkx8+0wiA8Y29kZT5tcGN0bCgpPC9jb2RlPrimILvnv+vH0SDA28C6CiAgICDHwbfOsde3pcC7IMDbvLrH2LrBtvMuILTcvPjH0SA8Y29kZT5waWQgJSBudW1jcHU8L2NvZGU+CiAgICC+y7DtuK7B8sC4t861tSDD5rrQx9IgsM3AzLTZLiDAzCC6zrrQwLogvtXAuLfOILzSvbrE2rXlv6EKICAgIMb3x9S1ySC89iDA1rTZLjwvcD4KCiAgICA8cD48Y29kZT5GSU5fV0FJVF8yPC9jb2RlPiC/rLDhwMcgsLO89rChILDGwaS9ure0tNm46SwKICAgIG5ldHR1bmXAuyC757/rx8+/qSA8Y29kZT50Y3Bfa2VlcHN0YXJ0PC9jb2RlPiCwqsC7IMHZwM8KICAgILz2IMDWtNkuILHXt6+zqiDBtr3Jx9i+3yDH0bTZIC0gNLrQILq4tNkgwNuw1CC8s8Gkx8/B9iC4trbzLgogICAgPGNvZGU+dGNwX2hhc2hfc2l6ZTwvY29kZT64piDA3yC8s8Gkx8+/tLTZuOksCiAgICA8Y29kZT5GSU5fV0FJVF8yPC9jb2RlPiCwqsDMIMS/tbUgKL3Jwfa+7iCx4rq7sKrAziAyvcOwo7W1KQogICAgua7Bpr74tNkgLSC6uMXrILy6tMm/oSDFqyC/tcfiwLsgwdbB9iC+yrTCtNkuPC9wPgoKICAgIDxwPr7VwLi3ziC80r26xNq15b+hIMb3x9S1ySC6zrrQwMwgtPUgwNbB9ri4LCC/qbHivK0gwdnAzrTZLgogICAgsPy9ycDMIMDWtNm46SC43sDPwLsgwdax5iC52bb1tNkuPC9wPgoKICAgIDxwPrHXt7MgwMy4uCw8L3A+CgogICAgPHA+cmljayBqb25lczwvcD4KCiAgICA8cD48YSBocmVmPSJodHRwOi8vd3d3LmN1cC5ocC5jb20vbmV0cGVyZi9OZXRwZXJmUGFnZS5odG1sIj5odHRwOi8vd3d3LmN1cC5ocC5jb20vbmV0cGVyZi9OZXRwZXJmUGFnZS5odG1sPC9hPjwvcD4KCiAgPC9kaXY+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJib3R0b21sYW5nIj4KPHA+PHNwYW4+sKG0ycfRIL7wvu46IDwvc3Bhbj48YSBocmVmPSIuLi9lbi9wbGF0Zm9ybS9wZXJmLWhwLmh0bWwiIGhyZWZsYW5nPSJlbiIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJFbmdsaXNoIj4mbmJzcDtlbiZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9mci9wbGF0Zm9ybS9wZXJmLWhwLmh0bWwiIGhyZWZsYW5nPSJmciIgcmVsPSJhbHRlcm5hdGUiIHRpdGxlPSJGcmFuJiMyMzE7YWlzIj4mbmJzcDtmciZuYnNwOzwvYT4gfAo8YSBocmVmPSIuLi9rby9wbGF0Zm9ybS9wZXJmLWhwLmh0bWwiIHRpdGxlPSJLb3JlYW4iPiZuYnNwO2tvJm5ic3A7PC9hPjwvcD4KPC9kaXY+PGRpdiBjbGFzcz0idG9wIj48YSBocmVmPSIjcGFnZS1oZWFkZXIiPjxpbWcgc3JjPSIuLi9pbWFnZXMvdXAuZ2lmIiBhbHQ9InRvcCIgLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0ic2VjdGlvbiI+PGgyPjxhIGlkPSJjb21tZW50c19zZWN0aW9uIiBuYW1lPSJjb21tZW50c19zZWN0aW9uIj5Db21tZW50czwvYT48L2gyPjxkaXYgY2xhc3M9Indhcm5pbmciPjxzdHJvbmc+Tm90aWNlOjwvc3Ryb25nPjxiciAvPlRoaXMgaXMgbm90IGEgUSZhbXA7QSBzZWN0aW9uLiBDb21tZW50cyBwbGFjZWQgaGVyZSBzaG91bGQgYmUgcG9pbnRlZCB0b3dhcmRzIHN1Z2dlc3Rpb25zIG9uIGltcHJvdmluZyB0aGUgZG9jdW1lbnRhdGlvbiBvciBzZXJ2ZXIsIGFuZCBtYXkgYmUgcmVtb3ZlZCBieSBvdXIgbW9kZXJhdG9ycyBpZiB0aGV5IGFyZSBlaXRoZXIgaW1wbGVtZW50ZWQgb3IgY29uc2lkZXJlZCBpbnZhbGlkL29mZi10b3BpYy4gUXVlc3Rpb25zIG9uIGhvdyB0byBtYW5hZ2UgdGhlIEFwYWNoZSBIVFRQIFNlcnZlciBzaG91bGQgYmUgZGlyZWN0ZWQgYXQgZWl0aGVyIG91ciBJUkMgY2hhbm5lbCwgI2h0dHBkLCBvbiBGcmVlbm9kZSwgb3Igc2VudCB0byBvdXIgPGEgaHJlZj0iaHR0cHM6Ly9odHRwZC5hcGFjaGUub3JnL2xpc3RzLmh0bWwiPm1haWxpbmcgbGlzdHM8L2E+LjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+PCEtLS8vLS0+PCFbQ0RBVEFbLy8+PCEtLQp2YXIgY29tbWVudHNfc2hvcnRuYW1lID0gJ2h0dHBkJzsKdmFyIGNvbW1lbnRzX2lkZW50aWZpZXIgPSAnaHR0cDovL2h0dHBkLmFwYWNoZS5vcmcvZG9jcy8yLjQvcGxhdGZvcm0vcGVyZi1ocC5odG1sJzsKKGZ1bmN0aW9uKHcsIGQpIHsKICAgIGlmICh3LmxvY2F0aW9uLmhvc3RuYW1lLnRvTG93ZXJDYXNlKCkgPT0gImh0dHBkLmFwYWNoZS5vcmciKSB7CiAgICAgICAgZC53cml0ZSgnPGRpdiBpZD0iY29tbWVudHNfdGhyZWFkIj48XC9kaXY+Jyk7CiAgICAgICAgdmFyIHMgPSBkLmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpOwogICAgICAgIHMudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnOwogICAgICAgIHMuYXN5bmMgPSB0cnVlOwogICAgICAgIHMuc3JjID0gJ2h0dHBzOi8vY29tbWVudHMuYXBhY2hlLm9yZy9zaG93X2NvbW1lbnRzLmx1YT9zaXRlPScgKyBjb21tZW50c19zaG9ydG5hbWUgKyAnJnBhZ2U9JyArIGNvbW1lbnRzX2lkZW50aWZpZXI7CiAgICAgICAgKGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXSB8fCBkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdib2R5JylbMF0pLmFwcGVuZENoaWxkKHMpOwogICAgfQogICAgZWxzZSB7IAogICAgICAgIGQud3JpdGUoJzxkaXYgaWQ9ImNvbW1lbnRzX3RocmVhZCI+Q29tbWVudHMgYXJlIGRpc2FibGVkIGZvciB0aGlzIHBhZ2UgYXQgdGhlIG1vbWVudC48XC9kaXY+Jyk7CiAgICB9Cn0pKHdpbmRvdywgZG9jdW1lbnQpOwovLy0tPjwhXV0+PC9zY3JpcHQ+PC9kaXY+PGRpdiBpZD0iZm9vdGVyIj4KPHAgY2xhc3M9ImFwYWNoZSI+Q29weXJpZ2h0IDIwMjEgVGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLjxiciAvPkxpY2Vuc2VkIHVuZGVyIHRoZSA8YSBocmVmPSJodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAiPkFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMDwvYT4uPC9wPgo8cCBjbGFzcz0ibWVudSI+PGEgaHJlZj0iLi4vbW9kLyI+uPC14jwvYT4gfCA8YSBocmVmPSIuLi9tb2QvZGlyZWN0aXZlcy5odG1sIj7B9r3Dvu616TwvYT4gfCA8YSBocmVmPSJodHRwOi8vd2lraS5hcGFjaGUub3JnL2h0dHBkL0ZBUSI+RkFRPC9hPiB8IDxhIGhyZWY9Ii4uL2dsb3NzYXJ5Lmh0bWwiPr/rvu48L2E+IHwgPGEgaHJlZj0iLi4vc2l0ZW1hcC5odG1sIj6758DMxq64yjwvYT48L3A+PC9kaXY+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwhLS0vLy0tPjwhW0NEQVRBWy8vPjwhLS0KaWYgKHR5cGVvZihwcmV0dHlQcmludCkgIT09ICd1bmRlZmluZWQnKSB7CiAgICBwcmV0dHlQcmludCgpOwp9Ci8vLS0+PCFdXT48L3NjcmlwdD4KPC9ib2R5PjwvaHRtbD4=