PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iSVNPLTg4NTktMSI/Pgo8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxL0RURC94aHRtbDEtdHJhbnNpdGlvbmFsLmR0ZCI+CjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj48aGVhZD48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIiAvPjxsaW5rIHJlbD0iU0hPUlRDVVQgSUNPTiIgaHJlZj0iL2Zhdmljb24uaWNvIiAvPjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+ClREIHtmb250LWZhbWlseTogVmVyZGFuYSxBcmlhbCxIZWx2ZXRpY2F9CkJPRFkge2ZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLEhlbHZldGljYTsgbWFyZ2luLXRvcDogMmVtOyBtYXJnaW4tbGVmdDogMGVtOyBtYXJnaW4tcmlnaHQ6IDBlbX0KSDEge2ZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLEhlbHZldGljYX0KSDIge2ZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLEhlbHZldGljYX0KSDMge2ZvbnQtZmFtaWx5OiBWZXJkYW5hLEFyaWFsLEhlbHZldGljYX0KQTpsaW5rLCBBOnZpc2l0ZWQsIEE6YWN0aXZlIHsgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmUgfQo8L3N0eWxlPjx0aXRsZT5QeXRob24gYW5kIGJpbmRpbmdzPC90aXRsZT48L2hlYWQ+PGJvZHkgYmdjb2xvcj0iIzhiNzc2NSIgdGV4dD0iIzAwMDAwMCIgbGluaz0iI2EwNjA2MCIgdmxpbms9IiMwMDAwMDAiPjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxscGFkZGluZz0iNSIgY2VsbHNwYWNpbmc9IjAiIGFsaWduPSJjZW50ZXIiPjx0cj48dGQgd2lkdGg9IjEyMCI+PGEgaHJlZj0iaHR0cDovL3N3cGF0LmZmaWkub3JnLyI+PGltZyBzcmM9ImVwYXRlbnRzLnBuZyIgYWx0PSJBY3Rpb24gYWdhaW5zdCBzb2Z0d2FyZSBwYXRlbnRzIiAvPjwvYT48L3RkPjx0ZCB3aWR0aD0iMTgwIj48YSBocmVmPSJodHRwOi8vd3d3Lmdub21lLm9yZy8iPjxpbWcgc3JjPSJnbm9tZTIucG5nIiBhbHQ9Ikdub21lMiBMb2dvIiAvPjwvYT48YSBocmVmPSJodHRwOi8vd3d3LnczLm9yZy9TdGF0dXMiPjxpbWcgc3JjPSJ3M2MucG5nIiBhbHQ9IlczQyBMb2dvIiAvPjwvYT48YSBocmVmPSJodHRwOi8vd3d3LnJlZGhhdC5jb20vIj48aW1nIHNyYz0icmVkaGF0LmdpZiIgYWx0PSJSZWQgSGF0IExvZ28iIC8+PC9hPjxkaXYgYWxpZ249ImxlZnQiPjxhIGhyZWY9Imh0dHA6Ly94bWxzb2Z0Lm9yZy8iPjxpbWcgc3JjPSJMaWJ4bWwyLUxvZ28tMTgweDE2OC5naWYiIGFsdD0iTWFkZSB3aXRoIExpYnhtbDIgTG9nbyIgLz48L2E+PC9kaXY+PC90ZD48dGQ+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjkwJSIgY2VsbHBhZGRpbmc9IjIiIGNlbGxzcGFjaW5nPSIwIiBhbGlnbj0iY2VudGVyIiBiZ2NvbG9yPSIjMDAwMDAwIj48dHI+PHRkPjx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMSIgY2VsbHBhZGRpbmc9IjMiIGJnY29sb3I9IiNmZmZhY2QiPjx0cj48dGQgYWxpZ249ImNlbnRlciI+PGgxPlRoZSBYTUwgQyBwYXJzZXIgYW5kIHRvb2xraXQgb2YgR25vbWU8L2gxPjxoMj5QeXRob24gYW5kIGJpbmRpbmdzPC9oMj48L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iNCIgY2VsbHNwYWNpbmc9IjAiIHdpZHRoPSIxMDAlIiBhbGlnbj0iY2VudGVyIj48dHI+PHRkIGJnY29sb3I9IiM4Yjc3NjUiPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPjx0cj48dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIyMDAiIGJnY29sb3I9IiM4Yjc3NjUiPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMSIgd2lkdGg9IjEwMCUiIGJnY29sb3I9IiMwMDAwMDAiPjx0cj48dGQ+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMyI+PHRyPjx0ZCBjb2xzcGFuPSIxIiBiZ2NvbG9yPSIjZWVjZmExIiBhbGlnbj0iY2VudGVyIj48Y2VudGVyPjxiPkRldmVsb3BlciBNZW51PC9iPjwvY2VudGVyPjwvdGQ+PC90cj48dHI+PHRkIGJnY29sb3I9IiNmZmZhY2QiPjxmb3JtIGFjdGlvbj0ic2VhcmNoLnBocCIgZW5jdHlwZT0iYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiBtZXRob2Q9ImdldCI+PGlucHV0IG5hbWU9InF1ZXJ5IiB0eXBlPSJ0ZXh0IiBzaXplPSIyMCIgdmFsdWU9IiIgLz48aW5wdXQgbmFtZT0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTZWFyY2ggLi4uIiAvPjwvZm9ybT48dWw+PGxpPjxhIGhyZWY9ImluZGV4Lmh0bWwiIHN0eWxlPSJmb250LXdlaWdodDpib2xkIj5NYWluIE1lbnU8L2E+PC9saT48bGk+PGEgaHJlZj0iaHRtbC9pbmRleC5odG1sIiBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZCI+UmVmZXJlbmNlIE1hbnVhbDwvYT48L2xpPjxsaT48YSBocmVmPSJleGFtcGxlcy9pbmRleC5odG1sIiBzdHlsZT0iZm9udC13ZWlnaHQ6Ym9sZCI+Q29kZSBFeGFtcGxlczwvYT48L2xpPjxsaT48YSBocmVmPSJndWlkZWxpbmVzLmh0bWwiPlhNTCBHdWlkZWxpbmVzPC9hPjwvbGk+PGxpPjxhIGhyZWY9InR1dG9yaWFsL2luZGV4Lmh0bWwiPlR1dG9yaWFsPC9hPjwvbGk+PGxpPjxhIGhyZWY9InhtbHJlYWRlci5odG1sIj5UaGUgUmVhZGVyIEludGVyZmFjZTwvYT48L2xpPjxsaT48YSBocmVmPSJDaGFuZ2VMb2cuaHRtbCI+Q2hhbmdlTG9nPC9hPjwvbGk+PGxpPjxhIGhyZWY9IlhTTFQuaHRtbCI+WFNMVDwvYT48L2xpPjxsaT48YSBocmVmPSJweXRob24uaHRtbCI+UHl0aG9uIGFuZCBiaW5kaW5nczwvYT48L2xpPjxsaT48YSBocmVmPSJhcmNoaXRlY3R1cmUuaHRtbCI+bGlieG1sMiBhcmNoaXRlY3R1cmU8L2E+PC9saT48bGk+PGEgaHJlZj0idHJlZS5odG1sIj5UaGUgdHJlZSBvdXRwdXQ8L2E+PC9saT48bGk+PGEgaHJlZj0iaW50ZXJmYWNlLmh0bWwiPlRoZSBTQVggaW50ZXJmYWNlPC9hPjwvbGk+PGxpPjxhIGhyZWY9InhtbG1lbS5odG1sIj5NZW1vcnkgTWFuYWdlbWVudDwvYT48L2xpPjxsaT48YSBocmVmPSJ4bWxpby5odG1sIj5JL08gSW50ZXJmYWNlczwvYT48L2xpPjxsaT48YSBocmVmPSJsaWJyYXJ5Lmh0bWwiPlRoZSBwYXJzZXIgaW50ZXJmYWNlczwvYT48L2xpPjxsaT48YSBocmVmPSJlbnRpdGllcy5odG1sIj5FbnRpdGllcyBvciBubyBlbnRpdGllczwvYT48L2xpPjxsaT48YSBocmVmPSJuYW1lc3BhY2VzLmh0bWwiPk5hbWVzcGFjZXM8L2E+PC9saT48bGk+PGEgaHJlZj0idXBncmFkZS5odG1sIj5VcGdyYWRpbmcgMS54IGNvZGU8L2E+PC9saT48bGk+PGEgaHJlZj0idGhyZWFkcy5odG1sIj5UaHJlYWQgc2FmZXR5PC9hPjwvbGk+PGxpPjxhIGhyZWY9IkRPTS5odG1sIj5ET00gUHJpbmNpcGxlczwvYT48L2xpPjxsaT48YSBocmVmPSJleGFtcGxlLmh0bWwiPkEgcmVhbCBleGFtcGxlPC9hPjwvbGk+PGxpPjxhIGhyZWY9InhtbC5odG1sIj5mbGF0IHBhZ2U8L2E+LCA8YSBocmVmPSJzaXRlLnhzbCI+c3R5bGVzaGVldDwvYT48L2xpPjwvdWw+PC90ZD48L3RyPjwvdGFibGU+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIxIiBjZWxscGFkZGluZz0iMyI+PHRyPjx0ZCBjb2xzcGFuPSIxIiBiZ2NvbG9yPSIjZWVjZmExIiBhbGlnbj0iY2VudGVyIj48Y2VudGVyPjxiPkFQSSBJbmRleGVzPC9iPjwvY2VudGVyPjwvdGQ+PC90cj48dHI+PHRkIGJnY29sb3I9IiNmZmZhY2QiPjx1bD48bGk+PGEgaHJlZj0iQVBJY2h1bmswLmh0bWwiPkFscGhhYmV0aWM8L2E+PC9saT48bGk+PGEgaHJlZj0iQVBJY29uc3RydWN0b3JzLmh0bWwiPkNvbnN0cnVjdG9yczwvYT48L2xpPjxsaT48YSBocmVmPSJBUElmdW5jdGlvbnMuaHRtbCI+RnVuY3Rpb25zL1R5cGVzPC9hPjwvbGk+PGxpPjxhIGhyZWY9IkFQSWZpbGVzLmh0bWwiPk1vZHVsZXM8L2E+PC9saT48bGk+PGEgaHJlZj0iQVBJc3ltYm9scy5odG1sIj5TeW1ib2xzPC9hPjwvbGk+PC91bD48L3RkPjwvdHI+PC90YWJsZT48dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjEiIGNlbGxwYWRkaW5nPSIzIj48dHI+PHRkIGNvbHNwYW49IjEiIGJnY29sb3I9IiNlZWNmYTEiIGFsaWduPSJjZW50ZXIiPjxjZW50ZXI+PGI+UmVsYXRlZCBsaW5rczwvYj48L2NlbnRlcj48L3RkPjwvdHI+PHRyPjx0ZCBiZ2NvbG9yPSIjZmZmYWNkIj48dWw+PGxpPjxhIGhyZWY9Imh0dHA6Ly9tYWlsLmdub21lLm9yZy9hcmNoaXZlcy94bWwvIj5NYWlsIGFyY2hpdmU8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3htbHNvZnQub3JnL1hTTFQvIj5YU0xUIGxpYnhzbHQ8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3BoZC5jcy51bmliby5pdC9nZG9tZTIvIj5ET00gZ2RvbWUyPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuYWxla3NleS5jb20veG1sc2VjLyI+WE1MLURTaWcgeG1sc2VjPC9hPjwvbGk+PGxpPjxhIGhyZWY9ImZ0cDovL3htbHNvZnQub3JnLyI+RlRQPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuemxhdGtvdmljLmNvbS9wcm9qZWN0cy9saWJ4bWwvIj5XaW5kb3dzIGJpbmFyaWVzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cuYmxhc3R3YXZlLm9yZy9wYWNrYWdlcy5waHAvbGlieG1sMiI+U29sYXJpcyBiaW5hcmllczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmV4cGxhaW4uY29tLmF1L29zcy9saWJ4bWwyeHNsdC5odG1sIj5NYWNPc1ggYmluYXJpZXM8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL2xpYnhtbHBsdXNwbHVzLnNvdXJjZWZvcmdlLm5ldC8iPkMrKyBiaW5kaW5nczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LnplbmQuY29tL3BocDUvYXJ0aWNsZXMvcGhwNS14bWxwaHAucGhwI0hlYWRpbmc0Ij5QSFAgYmluZGluZ3M8L2E+PC9saT48bGk+PGEgaHJlZj0iaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9saWJ4bWwyLXBhcy8iPlBhc2NhbCBiaW5kaW5nczwvYT48L2xpPjxsaT48YSBocmVmPSJodHRwOi8vbGlieG1sLnJ1Ynlmb3JnZS5vcmcvIj5SdWJ5IGJpbmRpbmdzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly90Y2x4bWwuc291cmNlZm9yZ2UubmV0LyI+VGNsIGJpbmRpbmdzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9idWd6aWxsYS5nbm9tZS5vcmcvYnVnbGlzdC5jZ2k/cHJvZHVjdD1saWJ4bWwyIj5CdWcgVHJhY2tlcjwvYT48L2xpPjwvdWw+PC90ZD48L3RyPjwvdGFibGU+PC90ZD48L3RyPjwvdGFibGU+PC90ZD48dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiM4Yjc3NjUiPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMSIgd2lkdGg9IjEwMCUiPjx0cj48dGQ+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIxIiB3aWR0aD0iMTAwJSIgYmdjb2xvcj0iIzAwMDAwMCI+PHRyPjx0ZD48dGFibGUgYm9yZGVyPSIwIiBjZWxscGFkZGluZz0iMyIgY2VsbHNwYWNpbmc9IjEiIHdpZHRoPSIxMDAlIj48dHI+PHRkIGJnY29sb3I9IiNmZmZhY2QiPjxwPlRoZXJlIGFyZSBhIG51bWJlciBvZiBsYW5ndWFnZSBiaW5kaW5ncyBhbmQgd3JhcHBlcnMgYXZhaWxhYmxlIGZvcgpsaWJ4bWwyLCB0aGUgbGlzdCBiZWxvdyBpcyBub3QgZXhoYXVzdGl2ZS4gUGxlYXNlIGNvbnRhY3QgdGhlIDxhIGhyZWY9Imh0dHA6Ly9tYWlsLmdub21lLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3htbC1iaW5kaW5ncyI+eG1sLWJpbmRpbmdzQGdub21lLm9yZzwvYT4KKDxhIGhyZWY9Imh0dHA6Ly9tYWlsLmdub21lLm9yZy9hcmNoaXZlcy94bWwtYmluZGluZ3MvIj5hcmNoaXZlczwvYT4pIGluCm9yZGVyIHRvIGdldCB1cGRhdGVzIHRvIHRoaXMgbGlzdCBvciB0byBkaXNjdXNzIHRoZSBzcGVjaWZpYyB0b3BpYyBvZiBsaWJ4bWwyCm9yIGxpYnhzbHQgd3JhcHBlcnMgb3IgYmluZGluZ3M6PC9wPjx1bD48bGk+PGEgaHJlZj0iaHR0cDovL2xpYnhtbHBsdXNwbHVzLnNvdXJjZWZvcmdlLm5ldC8iPkxpYnhtbCsrPC9hPiBzZWVtcyB0aGUKICAgIG1vc3QgdXAtdG8tZGF0ZSBDKysgYmluZGluZ3MgZm9yIGxpYnhtbDIsIGNoZWNrIHRoZSA8YSBocmVmPSJodHRwOi8vbGlieG1scGx1c3BsdXMuc291cmNlZm9yZ2UubmV0L3JlZmVyZW5jZS9odG1sL2hpZXJhcmNoeS5odG1sIj5kb2N1bWVudGF0aW9uPC9hPgogICAgYW5kIHRoZSA8YSBocmVmPSJodHRwOi8vY3ZzLnNvdXJjZWZvcmdlLm5ldC9jZ2ktYmluL3ZpZXdjdnMuY2dpL2xpYnhtbHBsdXNwbHVzL2xpYnhtbCUyYiUyYi9leGFtcGxlcy8iPmV4YW1wbGVzPC9hPi48L2xpPgogIDxsaT5UaGVyZSBpcyBhbm90aGVyIDxhIGhyZWY9Imh0dHA6Ly9saWJnZG9tZS1jcHAuYmVybGlvcy5kZS8iPkMrKyB3cmFwcGVyCiAgICBiYXNlZCBvbiB0aGUgZ2RvbWUyIGJpbmRpbmdzPC9hPiBtYWludGFpbmVkIGJ5IFRvYmlhcyBQZXRlcnMuPC9saT4KICA8bGk+YW5kIGEgdGhpcmQgQysrIHdyYXBwZXIgYnkgUGV0ZXIgSm9uZXMgJmx0O3Bqb25lc0BwbWFkZS5vcmcmZ3Q7CiAgICA8cD5XZWJzaXRlOiA8YSBocmVmPSJodHRwOi8vcG1hZGUub3JnL3Bqb25lcy9zb2Z0d2FyZS94bWx3cmFwcC8iPmh0dHA6Ly9wbWFkZS5vcmcvcGpvbmVzL3NvZnR3YXJlL3htbHdyYXBwLzwvYT48L3A+CiAgPC9saT4KICA8bGk+PGEgaHJlZj0iaHR0cDovL21haWwuZ25vbWUub3JnL2FyY2hpdmVzL3htbC8yMDAxLU1hcmNoL21zZzAwMDE0Lmh0bWwiPk1hdHQKICAgIFNlcmdlYW50PC9hPiBkZXZlbG9wZWQgPGEgaHJlZj0iaHR0cDovL2F4a2l0Lm9yZy9kb3dubG9hZC8iPlhNTDo6TGliWFNMVDwvYT4sIGEgUGVybCB3cmFwcGVyIGZvcgogICAgbGlieG1sMi9saWJ4c2x0IGFzIHBhcnQgb2YgdGhlIDxhIGhyZWY9Imh0dHA6Ly9heGtpdC5jb20vIj5BeEtpdCBYTUwKICAgIGFwcGxpY2F0aW9uIHNlcnZlcjwvYT4uPC9saT4KICA8bGk+SWYgeW91J3JlIGludGVyZXN0ZWQgaW50byBzY3JpcHRpbmcgWE1MIHByb2Nlc3NpbmcsIGhhdmUgYSBsb29rIGF0IDxhIGhyZWY9Imh0dHA6Ly94c2guc291cmNlZm9yZ2UubmV0LyI+WFNIPC9hPiBhbiBYTUwgZWRpdGluZyBzaGVsbCBiYXNlZCBvbgogICAgTGlieG1sMiBQZXJsIGJpbmRpbmdzLjwvbGk+CiAgPGxpPjxhIGhyZWY9Im1haWx0bzpka3VobG1hbkBjdXR0ZXIucmV4eC5jb20iPkRhdmUgS3VobG1hbjwvYT4gcHJvdmlkZXMgYW4KICAgIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgbGlieG1sL2xpYnhzbHQgPGEgaHJlZj0iaHR0cDovL3d3dy5yZXh4LmNvbS9+ZGt1aGxtYW4iPndyYXBwZXJzIGZvciBQeXRob248L2E+LjwvbGk+CiAgPGxpPkdvcGFsLlYgYW5kIFBldGVyIE1pbnRlbiBkZXZlbG9wIDxhIGhyZWY9Imh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL3Byb2plY3RzL2xpYnhtbHNoYXJwIj5saWJ4bWwjPC9hPiwgYSBzZXQgb2YKICAgIEMjIGxpYnhtbDIgYmluZGluZ3MuPC9saT4KICA8bGk+UGV0ciBLb3plbGthIHByb3ZpZGVzIDxhIGhyZWY9Imh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvbGlieG1sMi1wYXMiPlBhc2NhbCB1bml0cyB0byBnbHVlCiAgICBsaWJ4bWwyPC9hPiB3aXRoIEt5bGl4LCBEZWxwaGkgYW5kIG90aGVyIFBhc2NhbCBjb21waWxlcnMuPC9saT4KICA8bGk+VXdlIEZlY2huZXIgYWxzbyBwcm92aWRlcyA8YSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2lkb20yLXBhcy8iPmlkb20yPC9hPiwgYSBET00yCiAgICBpbXBsZW1lbnRhdGlvbiBmb3IgS3lsaXgyL0Q1L0Q2IGZyb20gQm9ybGFuZC48L2xpPgogIDxsaT5UaGVyZSBpcyA8YSBocmVmPSJodHRwOi8vbGlieG1sLnJ1Ynlmb3JnZS5vcmcvIj5iaW5kaW5ncwogICAgZm9yIFJ1Ynk8L2E+ICBhbmQgbGlieG1sMiBiaW5kaW5ncyBhcmUgYWxzbyBhdmFpbGFibGUgaW4gUnVieSB0aHJvdWdoIHRoZQogICAgPGEgaHJlZj0iaHR0cDovL2xpYmdkb21lLXJ1YnkuYmVybGlvcy5kZS8iPmxpYmdkb21lLXJ1Ynk8L2E+IG1vZHVsZQogICAgbWFpbnRhaW5lZCBieSBUb2JpYXMgUGV0ZXJzLjwvbGk+CiAgPGxpPlN0ZXZlIEJhbGwgYW5kIGNvbnRyaWJ1dG9ycyBtYWludGFpbnMgPGEgaHJlZj0iaHR0cDovL3RjbHhtbC5zb3VyY2Vmb3JnZS5uZXQvIj5saWJ4bWwyIGFuZCBsaWJ4c2x0IGJpbmRpbmdzIGZvcgogICAgVGNsPC9hPi48L2xpPgogIDxsaT5saWJ4bWwyIGFuZCBsaWJ4c2x0IGlzIHRoZSBkZWZhdWx0IFhNTCBsaWJyYXJ5IGZvciBQSFA1LjwvbGk+CiAgPGxpPjxhIGhyZWY9Imh0dHA6Ly9zYXZhbm5haC5nbnUub3JnL3Byb2plY3RzL2NsYXNzcGF0aHgvIj5MaWJ4bWxKPC9hPiBpcwogICAgYW4gZWZmb3J0IHRvIGNyZWF0ZSBhIDEwMCUgSkFYUC1jb21wYXRpYmxlIEphdmEgd3JhcHBlciBmb3IgbGlieG1sMiBhbmQKICAgIGxpYnhzbHQgYXMgcGFydCBvZiBHTlUgQ2xhc3NwYXRoWCBwcm9qZWN0LjwvbGk+CiAgPGxpPlBhdHJpY2sgTWNQaGVlIHByb3ZpZGVzIFJleHggYmluZGluZ3MgZm9mIGxpYnhtbDIgYW5kIGxpYnhzbHQsIGxvb2sgZm9yCiAgICA8YSBocmVmPSJodHRwOi8vd3d3LmludGVybG9nLmNvbS9+cHRqbS9zb2Z0d2FyZS5odG1sIj5SZXh4WE1MPC9hPi48L2xpPgogIDxsaT48YSBocmVmPSJodHRwOi8vd3d3LnNhdGltYWdlLmZyL3NvZnR3YXJlL2VuL3htbF9zdWl0ZS5odG1sIj5TYXRpbWFnZTwvYT4KICAgIHByb3ZpZGVzIDxhIGhyZWY9Imh0dHA6Ly93d3cuc2F0aW1hZ2UuZnIvc29mdHdhcmUvZW4vZG93bmxvYWRzX29zYXhlbi5odG1sIj5YTUxMaWIKICAgIG9zYXg8L2E+LiBUaGlzIGlzIGFuIG9zYXggZm9yIE1hYyBPUyBYIHdpdGggYSBzZXQgb2YgY29tbWFuZHMgdG8KICAgIGltcGxlbWVudCBpbiBBcHBsZVNjcmlwdCB0aGUgWE1MIERPTSwgWFBBVEggYW5kIFhTTFQuIEFsc28gaW5jbHVkZXMKICAgIGNvbW1hbmRzIGZvciBQcm9wZXJ0eS1saXN0cyAoQXBwbGUncyBmYXN0IGxvb2t1cCB0YWJsZSBYTUwgZm9ybWF0Lik8L2xpPgogIDxsaT5GcmFuY2VzY28gTW9udG9yc2kgZGV2ZWxvcHBlZCA8YSBocmVmPSJodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0L3Nob3dmaWxlcy5waHA/Z3JvdXBfaWQ9NTEzMDUmYW1wO3BhY2thZ2VfaWQ9NDUxODIiPnd4WG1sMjwvYT4KICAgIHdyYXBwZXJzIHRoYXQgaW50ZXJmYWNlIGxpYnhtbDIsIGFsbG93aW5nIHd4V2lkZ2V0cyBhcHBsaWNhdGlvbnMgdG8KICAgIGxvYWQvc2F2ZS9lZGl0IFhNTCBpbnN0YW5jZXMuPC9saT4KPC91bD48cD5UaGUgZGlzdHJpYnV0aW9uIGluY2x1ZGVzIGEgc2V0IG9mIFB5dGhvbiBiaW5kaW5ncywgd2hpY2ggYXJlIGd1YXJhbnRlZWQKdG8gYmUgbWFpbnRhaW5lZCBhcyBwYXJ0IG9mIHRoZSBsaWJyYXJ5IGluIHRoZSBmdXR1cmUsIHRob3VnaCB0aGUgUHl0aG9uCmludGVyZmFjZSBoYXZlIG5vdCB5ZXQgcmVhY2hlZCB0aGUgY29tcGxldGVuZXNzIG9mIHRoZSBDIEFQSS48L3A+PHA+Tm90ZSB0aGF0IHNvbWUgb2YgdGhlIFB5dGhvbiBwdXJpc3QgZGlzbGlrZSB0aGUgZGVmYXVsdCBzZXQgb2YgUHl0aG9uCmJpbmRpbmdzLCByYXRoZXIgdGhhbiBjb21wbGFpbmluZyBJIHN1Z2dlc3QgdGhleSBoYXZlIGEgbG9vayBhdCA8YSBocmVmPSJodHRwOi8vY29kZXNwZWFrLm5ldC9seG1sLyI+bHhtbCB0aGUgbW9yZSBweXRob25pYyBiaW5kaW5ncyBmb3IgbGlieG1sMgphbmQgbGlieHNsdDwvYT4gYW5kIDxhIGhyZWY9Imh0dHA6Ly9jb2Rlc3BlYWsubmV0L21haWxtYW4vbGlzdGluZm8vbHhtbC1kZXYiPmhlbHAgTWFydGlqbgpGYWFzc2VuPC9hPiBjb21wbGV0ZSB0aG9zZS48L3A+PHA+PGEgaHJlZj0ibWFpbHRvOnN0ZXBoYW5lLmJpZG91bEBzb2Z0d2FyZWFnLmNvbSI+U3TpcGhhbmUgQmlkb3VsPC9hPgptYWludGFpbnMgPGEgaHJlZj0iaHR0cDovL3VzZXJzLnNreW5ldC5iZS9zYmkvbGlieG1sLXB5dGhvbi8iPmEgV2luZG93cyBwb3J0Cm9mIHRoZSBQeXRob24gYmluZGluZ3M8L2E+LjwvcD48cD5Ob3RlIHRvIHBlb3BsZSBpbnRlcmVzdGVkIGluIGJ1aWxkaW5nIGJpbmRpbmdzLCB0aGUgQVBJIGlzIGZvcm1hbGl6ZWQgYXMKPGEgaHJlZj0ibGlieG1sMi1hcGkueG1sIj5hbiBYTUwgQVBJIGRlc2NyaXB0aW9uIGZpbGU8L2E+IHdoaWNoIGFsbG93cyB0bwphdXRvbWF0ZSBhIGxhcmdlIHBhcnQgb2YgdGhlIFB5dGhvbiBiaW5kaW5ncywgdGhpcyBpbmNsdWRlcyBmdW5jdGlvbgpkZXNjcmlwdGlvbnMsIGVudW1zLCBzdHJ1Y3R1cmVzLCB0eXBlZGVmcywgZXRjLi4uIFRoZSBQeXRob24gc2NyaXB0IHVzZWQgdG8KYnVpbGQgdGhlIGJpbmRpbmdzIGlzIHB5dGhvbi9nZW5lcmF0b3IucHkgaW4gdGhlIHNvdXJjZSBkaXN0cmlidXRpb24uPC9wPjxwPlRvIGluc3RhbGwgdGhlIFB5dGhvbiBiaW5kaW5ncyB0aGVyZSBhcmUgMiBvcHRpb25zOjwvcD48dWw+PGxpPklmIHlvdSB1c2UgYW4gUlBNIGJhc2VkIGRpc3RyaWJ1dGlvbiwgc2ltcGx5IGluc3RhbGwgdGhlIDxhIGhyZWY9Imh0dHA6Ly9ycG1maW5kLm5ldC9saW51eC9ycG0yaHRtbC9zZWFyY2gucGhwP3F1ZXJ5PWxpYnhtbDItcHl0aG9uIj5saWJ4bWwyLXB5dGhvbgogICAgUlBNPC9hPiAoYW5kIGlmIG5lZWRlZCB0aGUgPGEgaHJlZj0iaHR0cDovL3JwbWZpbmQubmV0L2xpbnV4L3JwbTJodG1sL3NlYXJjaC5waHA/cXVlcnk9bGlieHNsdC1weXRob24iPmxpYnhzbHQtcHl0aG9uCiAgICBSUE08L2E+KS48L2xpPgogIDxsaT5PdGhlcndpc2UgdXNlIHRoZSA8YSBocmVmPSJmdHA6Ly94bWxzb2Z0Lm9yZy9weXRob24vIj5saWJ4bWwyLXB5dGhvbgogICAgbW9kdWxlIGRpc3RyaWJ1dGlvbjwvYT4gY29ycmVzcG9uZGluZyB0byB5b3VyIGluc3RhbGxlZCB2ZXJzaW9uIG9mCiAgICBsaWJ4bWwyIGFuZCBsaWJ4c2x0LiBOb3RlIHRoYXQgdG8gaW5zdGFsbCBpdCB5b3Ugd2lsbCBuZWVkIGJvdGggbGlieG1sMgogICAgYW5kIGxpYnhzbHQgaW5zdGFsbGVkIGFuZCBydW4gInB5dGhvbiBzZXR1cC5weSBidWlsZCBpbnN0YWxsIiBpbiB0aGUKICAgIG1vZHVsZSB0cmVlLjwvbGk+CjwvdWw+PHA+VGhlIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyBhIHNldCBvZiBleGFtcGxlcyBhbmQgcmVncmVzc2lvbiB0ZXN0cyBmb3IgdGhlCnB5dGhvbiBiaW5kaW5ncyBpbiB0aGUgPGNvZGU+cHl0aG9uL3Rlc3RzPC9jb2RlPiBkaXJlY3RvcnkuIEhlcmUgYXJlIHNvbWUKZXhjZXJwdHMgZnJvbSB0aG9zZSB0ZXN0czo8L3A+PGgzPnRzdC5weTo8L2gzPjxwPlRoaXMgaXMgYSBiYXNpYyB0ZXN0IG9mIHRoZSBmaWxlIGludGVyZmFjZSBhbmQgRE9NIG5hdmlnYXRpb246PC9wPjxwcmU+aW1wb3J0IGxpYnhtbDIsIHN5cwoKZG9jID0gbGlieG1sMi5wYXJzZUZpbGUoInRzdC54bWwiKQppZiBkb2MubmFtZSAhPSAidHN0LnhtbCI6CiAgICBwcmludCAiZG9jLm5hbWUgZmFpbGVkIgogICAgc3lzLmV4aXQoMSkKcm9vdCA9IGRvYy5jaGlsZHJlbgppZiByb290Lm5hbWUgIT0gImRvYyI6CiAgICBwcmludCAicm9vdC5uYW1lIGZhaWxlZCIKICAgIHN5cy5leGl0KDEpCmNoaWxkID0gcm9vdC5jaGlsZHJlbgppZiBjaGlsZC5uYW1lICE9ICJmb28iOgogICAgcHJpbnQgImNoaWxkLm5hbWUgZmFpbGVkIgogICAgc3lzLmV4aXQoMSkKZG9jLmZyZWVEb2MoKTwvcHJlPjxwPlRoZSBQeXRob24gbW9kdWxlIGlzIGNhbGxlZCBsaWJ4bWwyOyBwYXJzZUZpbGUgaXMgdGhlIGVxdWl2YWxlbnQgb2YKeG1sUGFyc2VGaWxlIChtb3N0IG9mIHRoZSBiaW5kaW5ncyBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQsIGFuZCB0aGUgeG1sCnByZWZpeCBpcyByZW1vdmVkIGFuZCB0aGUgY2FzaW5nIGNvbnZlbnRpb24gYXJlIGtlcHQpLiBBbGwgbm9kZSBzZWVuIGF0IHRoZQpiaW5kaW5nIGxldmVsIHNoYXJlIHRoZSBzYW1lIHN1YnNldCBvZiBhY2Nlc3NvcnM6PC9wPjx1bD48bGk+PGNvZGU+bmFtZTwvY29kZT4gOiByZXR1cm5zIHRoZSBub2RlIG5hbWU8L2xpPgogIDxsaT48Y29kZT50eXBlPC9jb2RlPiA6IHJldHVybnMgYSBzdHJpbmcgaW5kaWNhdGluZyB0aGUgbm9kZSB0eXBlPC9saT4KICA8bGk+PGNvZGU+Y29udGVudDwvY29kZT4gOiByZXR1cm5zIHRoZSBjb250ZW50IG9mIHRoZSBub2RlLCBpdCBpcyBiYXNlZCBvbgogICAgeG1sTm9kZUdldENvbnRlbnQoKSBhbmQgaGVuY2UgaXMgcmVjdXJzaXZlLjwvbGk+CiAgPGxpPjxjb2RlPnBhcmVudDwvY29kZT4gLCA8Y29kZT5jaGlsZHJlbjwvY29kZT4sIDxjb2RlPmxhc3Q8L2NvZGU+LAogICAgPGNvZGU+bmV4dDwvY29kZT4sIDxjb2RlPnByZXY8L2NvZGU+LCA8Y29kZT5kb2M8L2NvZGU+LAogICAgPGNvZGU+cHJvcGVydGllczwvY29kZT46IHBvaW50aW5nIHRvIHRoZSBhc3NvY2lhdGVkIGVsZW1lbnQgaW4gdGhlIHRyZWUsCiAgICB0aG9zZSBtYXkgcmV0dXJuIE5vbmUgaW4gY2FzZSBubyBzdWNoIGxpbmsgZXhpc3RzLjwvbGk+CjwvdWw+PHA+QWxzbyBub3RlIHRoZSBuZWVkIHRvIGV4cGxpY2l0bHkgZGVhbGxvY2F0ZSBkb2N1bWVudHMgd2l0aCBmcmVlRG9jKCkgLgpSZWZlcmVuY2UgY291bnRpbmcgZm9yIGxpYnhtbDIgdHJlZXMgd291bGQgbmVlZCBxdWl0ZSBhIGxvdCBvZiB3b3JrIHRvCmZ1bmN0aW9uIHByb3Blcmx5LCBhbmQgcmF0aGVyIHRoYW4gcmlzayBtZW1vcnkgbGVha3MgaWYgbm90IGltcGxlbWVudGVkCmNvcnJlY3RseSBpdCBzb3VuZHMgc2FmZXIgdG8gaGF2ZSBhbiBleHBsaWNpdCBmdW5jdGlvbiB0byBmcmVlIGEgdHJlZS4gVGhlCndyYXBwZXIgcHl0aG9uIG9iamVjdHMgbGlrZSBkb2MsIHJvb3Qgb3IgY2hpbGQgYXJlIHRoZW0gYXV0b21hdGljYWxseSBnYXJiYWdlCmNvbGxlY3RlZC48L3A+PGgzPnZhbGlkYXRlLnB5OjwvaDM+PHA+VGhpcyB0ZXN0IGNoZWNrIHRoZSB2YWxpZGF0aW9uIGludGVyZmFjZXMgYW5kIHJlZGlyZWN0aW9uIG9mIGVycm9yCm1lc3NhZ2VzOjwvcD48cHJlPmltcG9ydCBsaWJ4bWwyCgojZGVhY3RpdmF0ZSBlcnJvciBtZXNzYWdlcyBmcm9tIHRoZSB2YWxpZGF0aW9uCmRlZiBub2VycihjdHgsIHN0cik6CiAgICBwYXNzCgpsaWJ4bWwyLnJlZ2lzdGVyRXJyb3JIYW5kbGVyKG5vZXJyLCBOb25lKQoKY3R4dCA9IGxpYnhtbDIuY3JlYXRlRmlsZVBhcnNlckN0eHQoImludmFsaWQueG1sIikKY3R4dC52YWxpZGF0ZSgxKQpjdHh0LnBhcnNlRG9jdW1lbnQoKQpkb2MgPSBjdHh0LmRvYygpCnZhbGlkID0gY3R4dC5pc1ZhbGlkKCkKZG9jLmZyZWVEb2MoKQppZiB2YWxpZCAhPSAwOgogICAgcHJpbnQgInZhbGlkaXR5IGNoZWNrIGZhaWxlZCI8L3ByZT48cD5UaGUgZmlyc3QgdGhpbmcgdG8gbm90aWNlIGlzIHRoZSBjYWxsIHRvIHJlZ2lzdGVyRXJyb3JIYW5kbGVyKCksIGl0CmRlZmluZXMgYSBuZXcgZXJyb3IgaGFuZGxlciBnbG9iYWwgdG8gdGhlIGxpYnJhcnkuIEl0IGlzIHVzZWQgdG8gYXZvaWQgc2VlaW5nCnRoZSBlcnJvciBtZXNzYWdlcyB3aGVuIHRyeWluZyB0byB2YWxpZGF0ZSB0aGUgaW52YWxpZCBkb2N1bWVudC48L3A+PHA+VGhlIG1haW4gaW50ZXJlc3Qgb2YgdGhhdCB0ZXN0IGlzIHRoZSBjcmVhdGlvbiBvZiBhIHBhcnNlciBjb250ZXh0IHdpdGgKY3JlYXRlRmlsZVBhcnNlckN0eHQoKSBhbmQgaG93IHRoZSBiZWhhdmlvdXIgY2FuIGJlIGNoYW5nZWQgYmVmb3JlIGNhbGxpbmcKcGFyc2VEb2N1bWVudCgpIC4gU2ltaWxhcmx5IHRoZSBpbmZvcm1hdGlvbnMgcmVzdWx0aW5nIGZyb20gdGhlIHBhcnNpbmcgcGhhc2UKYXJlIGFsc28gYXZhaWxhYmxlIHVzaW5nIGNvbnRleHQgbWV0aG9kcy48L3A+PHA+Q29udGV4dHMgbGlrZSBub2RlcyBhcmUgZGVmaW5lZCBhcyBjbGFzcyBhbmQgdGhlIGxpYnhtbDIgd3JhcHBlcnMgbWFwcyB0aGUKQyBmdW5jdGlvbiBpbnRlcmZhY2VzIGluIHRlcm1zIG9mIG9iamVjdHMgbWV0aG9kIGFzIG11Y2ggYXMgcG9zc2libGUuIFRoZQpiZXN0IHRvIGdldCBhIGNvbXBsZXRlIHZpZXcgb2Ygd2hhdCBtZXRob2RzIGFyZSBzdXBwb3J0ZWQgaXMgdG8gbG9vayBhdCB0aGUKbGlieG1sMi5weSBtb2R1bGUgY29udGFpbmluZyBhbGwgdGhlIHdyYXBwZXJzLjwvcD48aDM+cHVzaC5weTo8L2gzPjxwPlRoaXMgdGVzdCBzaG93IGhvdyB0byBhY3RpdmF0ZSB0aGUgcHVzaCBwYXJzZXIgaW50ZXJmYWNlOjwvcD48cHJlPmltcG9ydCBsaWJ4bWwyCgpjdHh0ID0gbGlieG1sMi5jcmVhdGVQdXNoUGFyc2VyKE5vbmUsICImbHQ7Zm9vIiwgNCwgInRlc3QueG1sIikKY3R4dC5wYXJzZUNodW5rKCIvJmd0OyIsIDIsIDEpCmRvYyA9IGN0eHQuZG9jKCkKCmRvYy5mcmVlRG9jKCk8L3ByZT48cD5UaGUgY29udGV4dCBpcyBjcmVhdGVkIHdpdGggYSBzcGVjaWFsIGNhbGwgYmFzZWQgb24gdGhlCnhtbENyZWF0ZVB1c2hQYXJzZXIoKSBmcm9tIHRoZSBDIGxpYnJhcnkuIFRoZSBmaXJzdCBhcmd1bWVudCBpcyBhbiBvcHRpb25hbApTQVggY2FsbGJhY2sgb2JqZWN0LCB0aGVuIHRoZSBpbml0aWFsIHNldCBvZiBkYXRhLCB0aGUgbGVuZ3RoIGFuZCB0aGUgbmFtZSBvZgp0aGUgcmVzb3VyY2UgaW4gY2FzZSBVUkktUmVmZXJlbmNlcyBuZWVkIHRvIGJlIGNvbXB1dGVkIGJ5IHRoZSBwYXJzZXIuPC9wPjxwPlRoZW4gdGhlIGRhdGEgYXJlIHB1c2hlZCB1c2luZyB0aGUgcGFyc2VDaHVuaygpIG1ldGhvZCwgdGhlIGxhc3QgY2FsbApzZXR0aW5nIHRoZSB0aGlyZCBhcmd1bWVudCB0ZXJtaW5hdGUgdG8gMS48L3A+PGgzPnB1c2hTQVgucHk6PC9oMz48cD50aGlzIHRlc3Qgc2hvdyB0aGUgdXNlIG9mIHRoZSBldmVudCBiYXNlZCBwYXJzaW5nIGludGVyZmFjZXMuIEluIHRoaXMgY2FzZQp0aGUgcGFyc2VyIGRvZXMgbm90IGJ1aWxkIGEgZG9jdW1lbnQsIGJ1dCBwcm92aWRlcyBjYWxsYmFjayBpbmZvcm1hdGlvbiBhcwp0aGUgcGFyc2VyIG1ha2VzIHByb2dyZXNzZXMgYW5hbHl6aW5nIHRoZSBkYXRhIGJlaW5nIHByb3ZpZGVkOjwvcD48cHJlPmltcG9ydCBsaWJ4bWwyCmxvZyA9ICIiCgpjbGFzcyBjYWxsYmFjazoKICAgIGRlZiBzdGFydERvY3VtZW50KHNlbGYpOgogICAgICAgIGdsb2JhbCBsb2cKICAgICAgICBsb2cgPSBsb2cgKyAic3RhcnREb2N1bWVudDoiCgogICAgZGVmIGVuZERvY3VtZW50KHNlbGYpOgogICAgICAgIGdsb2JhbCBsb2cKICAgICAgICBsb2cgPSBsb2cgKyAiZW5kRG9jdW1lbnQ6IgoKICAgIGRlZiBzdGFydEVsZW1lbnQoc2VsZiwgdGFnLCBhdHRycyk6CiAgICAgICAgZ2xvYmFsIGxvZwogICAgICAgIGxvZyA9IGxvZyArICJzdGFydEVsZW1lbnQgJXMgJXM6IiAlICh0YWcsIGF0dHJzKQoKICAgIGRlZiBlbmRFbGVtZW50KHNlbGYsIHRhZyk6CiAgICAgICAgZ2xvYmFsIGxvZwogICAgICAgIGxvZyA9IGxvZyArICJlbmRFbGVtZW50ICVzOiIgJSAodGFnKQoKICAgIGRlZiBjaGFyYWN0ZXJzKHNlbGYsIGRhdGEpOgogICAgICAgIGdsb2JhbCBsb2cKICAgICAgICBsb2cgPSBsb2cgKyAiY2hhcmFjdGVyczogJXM6IiAlIChkYXRhKQoKICAgIGRlZiB3YXJuaW5nKHNlbGYsIG1zZyk6CiAgICAgICAgZ2xvYmFsIGxvZwogICAgICAgIGxvZyA9IGxvZyArICJ3YXJuaW5nOiAlczoiICUgKG1zZykKCiAgICBkZWYgZXJyb3Ioc2VsZiwgbXNnKToKICAgICAgICBnbG9iYWwgbG9nCiAgICAgICAgbG9nID0gbG9nICsgImVycm9yOiAlczoiICUgKG1zZykKCiAgICBkZWYgZmF0YWxFcnJvcihzZWxmLCBtc2cpOgogICAgICAgIGdsb2JhbCBsb2cKICAgICAgICBsb2cgPSBsb2cgKyAiZmF0YWxFcnJvcjogJXM6IiAlIChtc2cpCgpoYW5kbGVyID0gY2FsbGJhY2soKQoKY3R4dCA9IGxpYnhtbDIuY3JlYXRlUHVzaFBhcnNlcihoYW5kbGVyLCAiJmx0O2ZvbyIsIDQsICJ0ZXN0LnhtbCIpCmNodW5rID0gIiB1cmw9J3RzdCcmZ3Q7YiIKY3R4dC5wYXJzZUNodW5rKGNodW5rLCBsZW4oY2h1bmspLCAwKQpjaHVuayA9ICJhciZsdDsvZm9vJmd0OyIKY3R4dC5wYXJzZUNodW5rKGNodW5rLCBsZW4oY2h1bmspLCAxKQoKcmVmZXJlbmNlID0gInN0YXJ0RG9jdW1lbnQ6c3RhcnRFbGVtZW50IGZvbyB7J3VybCc6ICd0c3QnfToiICsgXCAKICAgICAgICAgICAgImNoYXJhY3RlcnM6IGJhcjplbmRFbGVtZW50IGZvbzplbmREb2N1bWVudDoiCmlmIGxvZyAhPSByZWZlcmVuY2U6CiAgICBwcmludCAiRXJyb3IgZ290OiAlcyIgJSBsb2cKICAgIHByaW50ICJFeHBlY3RlZDogJXMiICUgcmVmZXJlbmNlPC9wcmU+PHA+VGhlIGtleSBvYmplY3QgaW4gdGhhdCB0ZXN0IGlzIHRoZSBoYW5kbGVyLCBpdCBwcm92aWRlcyBhIG51bWJlciBvZiBlbnRyeQpwb2ludHMgd2hpY2ggY2FuIGJlIGNhbGxlZCBieSB0aGUgcGFyc2VyIGFzIGl0IG1ha2VzIHByb2dyZXNzZXMgdG8gaW5kaWNhdGUKdGhlIGluZm9ybWF0aW9uIHNldCBvYnRhaW5lZC4gVGhlIGZ1bGwgc2V0IG9mIGNhbGxiYWNrIGlzIGxhcmdlciB0aGFuIHdoYXQKdGhlIGNhbGxiYWNrIGNsYXNzIGluIHRoYXQgc3BlY2lmaWMgZXhhbXBsZSBpbXBsZW1lbnRzIChzZWUgdGhlIFNBWApkZWZpbml0aW9uIGZvciBhIGNvbXBsZXRlIGxpc3QpLiBUaGUgd3JhcHBlciB3aWxsIG9ubHkgY2FsbCB0aG9zZSBzdXBwbGllZCBieQp0aGUgb2JqZWN0IHdoZW4gYWN0aXZhdGVkLiBUaGUgc3RhcnRFbGVtZW50IHJlY2VpdmVzIHRoZSBuYW1lcyBvZiB0aGUgZWxlbWVudAphbmQgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgdGhlIGF0dHJpYnV0ZXMgY2FycmllZCBieSB0aGlzIGVsZW1lbnQuPC9wPjxwPkFsc28gbm90ZSB0aGF0IHRoZSByZWZlcmVuY2Ugc3RyaW5nIGdlbmVyYXRlZCBmcm9tIHRoZSBjYWxsYmFjayBzaG93cyBhCnNpbmdsZSBjaGFyYWN0ZXIgY2FsbCBldmVuIHRob3VnaCB0aGUgc3RyaW5nICJiYXIiIGlzIHBhc3NlZCB0byB0aGUgcGFyc2VyCmZyb20gMiBkaWZmZXJlbnQgY2FsbCB0byBwYXJzZUNodW5rKCk8L3A+PGgzPnhwYXRoLnB5OjwvaDM+PHA+VGhpcyBpcyBhIGJhc2ljIHRlc3Qgb2YgWFBhdGggd3JhcHBlcnMgc3VwcG9ydDwvcD48cHJlPmltcG9ydCBsaWJ4bWwyCgpkb2MgPSBsaWJ4bWwyLnBhcnNlRmlsZSgidHN0LnhtbCIpCmN0eHQgPSBkb2MueHBhdGhOZXdDb250ZXh0KCkKcmVzID0gY3R4dC54cGF0aEV2YWwoIi8vKiIpCmlmIGxlbihyZXMpICE9IDI6CiAgICBwcmludCAieHBhdGggcXVlcnk6IHdyb25nIG5vZGUgc2V0IHNpemUiCiAgICBzeXMuZXhpdCgxKQppZiByZXNbMF0ubmFtZSAhPSAiZG9jIiBvciByZXNbMV0ubmFtZSAhPSAiZm9vIjoKICAgIHByaW50ICJ4cGF0aCBxdWVyeTogd3Jvbmcgbm9kZSBzZXQgdmFsdWUiCiAgICBzeXMuZXhpdCgxKQpkb2MuZnJlZURvYygpCmN0eHQueHBhdGhGcmVlQ29udGV4dCgpPC9wcmU+PHA+VGhpcyB0ZXN0IHBhcnNlcyBhIGZpbGUsIHRoZW4gY3JlYXRlIGFuIFhQYXRoIGNvbnRleHQgdG8gZXZhbHVhdGUgWFBhdGgKZXhwcmVzc2lvbiBvbiBpdC4gVGhlIHhwYXRoRXZhbCgpIG1ldGhvZCBleGVjdXRlIGFuIFhQYXRoIHF1ZXJ5IGFuZCByZXR1cm5zCnRoZSByZXN1bHQgbWFwcGVkIGluIGEgUHl0aG9uIHdheS4gU3RyaW5nIGFuZCBudW1iZXJzIGFyZSBuYXRpdmVseSBjb252ZXJ0ZWQsCmFuZCBub2RlIHNldHMgYXJlIHJldHVybmVkIGFzIGEgdHVwbGUgb2YgbGlieG1sMiBQeXRob24gbm9kZXMgd3JhcHBlcnMuIExpa2UKdGhlIGRvY3VtZW50LCB0aGUgWFBhdGggY29udGV4dCBuZWVkIHRvIGJlIGZyZWVkIGV4cGxpY2l0bHksIGFsc28gbm90IHRoYXQKdGhlIHJlc3VsdCBvZiB0aGUgWFBhdGggcXVlcnkgbWF5IHBvaW50IGJhY2sgdG8gdGhlIGRvY3VtZW50IHRyZWUgYW5kIGhlbmNlCnRoZSBkb2N1bWVudCBtdXN0IGJlIGZyZWVkIGFmdGVyIHRoZSByZXN1bHQgb2YgdGhlIHF1ZXJ5IGlzIHVzZWQuPC9wPjxoMz54cGF0aGV4dC5weTo8L2gzPjxwPlRoaXMgdGVzdCBzaG93cyBob3cgdG8gZXh0ZW5kIHRoZSBYUGF0aCBlbmdpbmUgd2l0aCBmdW5jdGlvbnMgd3JpdHRlbiBpbgpweXRob246PC9wPjxwcmU+aW1wb3J0IGxpYnhtbDIKCmRlZiBmb28oY3R4LCB4KToKICAgIHJldHVybiB4ICsgMQoKZG9jID0gbGlieG1sMi5wYXJzZUZpbGUoInRzdC54bWwiKQpjdHh0ID0gZG9jLnhwYXRoTmV3Q29udGV4dCgpCmxpYnhtbDIucmVnaXN0ZXJYUGF0aEZ1bmN0aW9uKGN0eHQuX28sICJmb28iLCBOb25lLCBmb28pCnJlcyA9IGN0eHQueHBhdGhFdmFsKCJmb28oMSkiKQppZiByZXMgIT0gMjoKICAgIHByaW50ICJ4cGF0aCBleHRlbnNpb24gZmFpbHVyZSIKZG9jLmZyZWVEb2MoKQpjdHh0LnhwYXRoRnJlZUNvbnRleHQoKTwvcHJlPjxwPk5vdGUgaG93IHRoZSBleHRlbnNpb24gZnVuY3Rpb24gaXMgcmVnaXN0ZXJlZCB3aXRoIHRoZSBjb250ZXh0IChidXQgdGhhdApwYXJ0IGlzIG5vdCB5ZXQgZmluYWxpemVkLCB0aGlzIG1heSBjaGFuZ2Ugc2xpZ2h0bHkgaW4gdGhlIGZ1dHVyZSkuPC9wPjxoMz50c3R4cGF0aC5weTo8L2gzPjxwPlRoaXMgdGVzdCBpcyBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBvbmUgYnV0IHNob3dzIGhvdyB0aGUgZXh0ZW5zaW9uCmZ1bmN0aW9uIGNhbiBhY2Nlc3MgdGhlIFhQYXRoIGV2YWx1YXRpb24gY29udGV4dDo8L3A+PHByZT5kZWYgZm9vKGN0eCwgeCk6CiAgICBnbG9iYWwgY2FsbGVkCgogICAgIwogICAgIyB0ZXN0IHRoYXQgYWNjZXNzIHRvIHRoZSBYUGF0aCBldmFsdWF0aW9uIGNvbnRleHRzCiAgICAjCiAgICBwY3R4dCA9IGxpYnhtbDIueHBhdGhQYXJzZXJDb250ZXh0KF9vYmo9Y3R4KQogICAgY3R4dCA9IHBjdHh0LmNvbnRleHQoKQogICAgY2FsbGVkID0gY3R4dC5mdW5jdGlvbigpCiAgICByZXR1cm4geCArIDE8L3ByZT48cD5BbGwgdGhlIGludGVyZmFjZXMgYXJvdW5kIHRoZSBYUGF0aCBwYXJzZXIob3IgcmF0aGVyIGV2YWx1YXRpb24pIGNvbnRleHQKYXJlIG5vdCBmaW5hbGl6ZWQsIGJ1dCBpdCBzaG91bGQgYmUgc3VmZmljaWVudCB0byBkbyBjb250ZXh0dWFsIHdvcmsgYXQgdGhlCmV2YWx1YXRpb24gcG9pbnQuPC9wPjxoMz5NZW1vcnkgZGVidWdnaW5nOjwvaDM+PHA+bGFzdCBidXQgbm90IGxlYXN0LCBhbGwgdGVzdHMgc3RhcnRzIHdpdGggdGhlIGZvbGxvd2luZyBwcm9sb2d1ZTo8L3A+PHByZT4jbWVtb3J5IGRlYnVnIHNwZWNpZmljCmxpYnhtbDIuZGVidWdNZW1vcnkoMSk8L3ByZT48cD5hbmQgZW5kcyB3aXRoIHRoZSBmb2xsb3dpbmcgZXBpbG9ndWU6PC9wPjxwcmU+I21lbW9yeSBkZWJ1ZyBzcGVjaWZpYwpsaWJ4bWwyLmNsZWFudXBQYXJzZXIoKQppZiBsaWJ4bWwyLmRlYnVnTWVtb3J5KDEpID09IDA6CiAgICBwcmludCAiT0siCmVsc2U6CiAgICBwcmludCAiTWVtb3J5IGxlYWsgJWQgYnl0ZXMiICUgKGxpYnhtbDIuZGVidWdNZW1vcnkoMSkpCiAgICBsaWJ4bWwyLmR1bXBNZW1vcnkoKTwvcHJlPjxwPlRob3NlIGFjdGl2YXRlIHRoZSBtZW1vcnkgZGVidWdnaW5nIGludGVyZmFjZSBvZiBsaWJ4bWwyIHdoZXJlIGFsbAphbGxvY2F0ZWQgYmxvY2sgaW4gdGhlIGxpYnJhcnkgYXJlIHRyYWNrZWQuIFRoZSBwcm9sb2d1ZSB0aGVuIGNsZWFucyB1cCB0aGUKbGlicmFyeSBzdGF0ZSBhbmQgY2hlY2tzIHRoYXQgYWxsIGFsbG9jYXRlZCBtZW1vcnkgaGFzIGJlZW4gZnJlZWQuIElmIG5vdCBpdApjYWxscyBkdW1wTWVtb3J5KCkgd2hpY2ggc2F2ZXMgdGhhdCBsaXN0IGluIGEgPGNvZGU+Lm1lbWR1bXA8L2NvZGU+IGZpbGUuPC9wPjxwPjxhIGhyZWY9ImJ1Z3MuaHRtbCI+RGFuaWVsIFZlaWxsYXJkPC9hPjwvcD48L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48L3RkPjwvdHI+PC90YWJsZT48L2JvZHk+PC9odG1sPgo=