ZGlmZiAtLWdpdCBhL0xpYi9zZ21sbGliLnB5IGIvTGliL3NnbWxsaWIucHkKaW5kZXggMzAyMGQxMS4uM2FiNTdjMiAxMDA2NDQKLS0tIGEvTGliL3NnbWxsaWIucHkKKysrIGIvTGliL3NnbWxsaWIucHkKQEAgLTI5LDEyICsyOSw3IEBACiBzaG9ydHRhZ29wZW4gPSByZS5jb21waWxlKCc8W2EtekEtWl1bLS5hLXpBLVowLTldKi8nKQogc2hvcnR0YWcgPSByZS5jb21waWxlKCc8KFthLXpBLVpdWy0uYS16QS1aMC05XSopLyhbXi9dKikvJykKIHBpY2xvc2UgPSByZS5jb21waWxlKCc+JykKLXN0YXJ0dGFnID0gcmUuY29tcGlsZShyJzxbYS16QS1aXVstXy46YS16QS1aMC05XSpccyooJwotICAgICAgICByJ1xzKihbYS16QS1aX11bLTouYS16QS1aXzAtOV0qKShccyo9XHMqJwotICAgICAgICByJyhcJ1teXCddKlwnfCJbXiJdKiJ8Wy1hLXpBLVowLTkuLyw6OysqJT8hJiRcKFwpXyM9fkBdJwotICAgICAgICByJ1tdW1wtYS16QS1aMC05Li8sOjsrKiU/ISYkXChcKV8jPX5cJyJAXSooPz1bXHM+LzxdKSkpPycKLSAgICByJykqXHMqLz9ccyooPz1bPD5dKScpCi1lbmR0YWcgPSByZS5jb21waWxlKHInPC8/W2EtekEtWl1bLV8uOmEtekEtWjAtOV0qXHMqLz9ccyooPz1bPD5dKScpCitlbmRicmFja2V0ID0gcmUuY29tcGlsZSgnWzw+XScpCiB0YWdmaW5kID0gcmUuY29tcGlsZSgnW2EtekEtWl1bLV8uYS16QS1aMC05XSonKQogYXR0cmZpbmQgPSByZS5jb21waWxlKAogICAgIHInXHMqKFthLXpBLVpfXVstOi5hLXpBLVpfMC05XSopKFxzKj1ccyonCkBAIC0yNTQsMTAgKzI0OSwxNCBAQAogICAgICAgICAgICAgc2VsZi5maW5pc2hfc2hvcnR0YWcodGFnLCBkYXRhKQogICAgICAgICAgICAgc2VsZi5fX3N0YXJ0dGFnX3RleHQgPSByYXdkYXRhW3N0YXJ0X3BvczptYXRjaC5lbmQoMSkgKyAxXQogICAgICAgICAgICAgcmV0dXJuIGsKLSAgICAgICAgbWF0Y2ggPSBzdGFydHRhZy5tYXRjaChyYXdkYXRhLCBpKQorICAgICAgICAjIFhYWCBUaGUgZm9sbG93aW5nIHNob3VsZCBza2lwIG1hdGNoaW5nIHF1b3RlcyAoJyBvciAiKQorICAgICAgICAjIEFzIGEgc2hvcnRjdXQgd2F5IHRvIGV4aXQsIHRoaXMgaXNuJ3Qgc28gYmFkLCBidXQgc2hvdWxkbid0CisgICAgICAgICMgYmUgdXNlZCB0byBsb2NhdGUgdGhlIGFjdHVhbCBlbmQgb2YgdGhlIHN0YXJ0IHRhZyBzaW5jZSB0aGUKKyAgICAgICAgIyA8IG9yID4gY2hhcmFjdGVycyBtYXkgYmUgZW1iZWRkZWQgaW4gYW4gYXR0cmlidXRlIHZhbHVlLgorICAgICAgICBtYXRjaCA9IGVuZGJyYWNrZXQuc2VhcmNoKHJhd2RhdGEsIGkrMSkKICAgICAgICAgaWYgbm90IG1hdGNoOgogICAgICAgICAgICAgcmV0dXJuIC0xCi0gICAgICAgIGogPSBtYXRjaC5lbmQoMCkKKyAgICAgICAgaiA9IG1hdGNoLnN0YXJ0KDApCiAgICAgICAgICMgTm93IHBhcnNlIHRoZSBkYXRhIGJldHdlZW4gaSsxIGFuZCBqIGludG8gYSB0YWcgYW5kIGF0dHJzCiAgICAgICAgIGF0dHJzID0gW10KICAgICAgICAgaWYgcmF3ZGF0YVtpOmkrMl0gPT0gJzw+JzoKQEAgLTMwNiwxMCArMzA1LDEwIEBACiAgICAgIyBJbnRlcm5hbCAtLSBwYXJzZSBlbmR0YWcKICAgICBkZWYgcGFyc2VfZW5kdGFnKHNlbGYsIGkpOgogICAgICAgICByYXdkYXRhID0gc2VsZi5yYXdkYXRhCi0gICAgICAgIG1hdGNoID0gZW5kdGFnLm1hdGNoKHJhd2RhdGEsIGkpCisgICAgICAgIG1hdGNoID0gZW5kYnJhY2tldC5zZWFyY2gocmF3ZGF0YSwgaSsxKQogICAgICAgICBpZiBub3QgbWF0Y2g6CiAgICAgICAgICAgICByZXR1cm4gLTEKLSAgICAgICAgaiA9IG1hdGNoLmVuZCgwKQorICAgICAgICBqID0gbWF0Y2guc3RhcnQoMCkKICAgICAgICAgdGFnID0gcmF3ZGF0YVtpKzI6al0uc3RyaXAoKS5sb3dlcigpCiAgICAgICAgIGlmIHJhd2RhdGFbal0gPT0gJz4nOgogICAgICAgICAgICAgaiA9IGorMQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3Qvc2dtbF9pbnB1dC5odG1sIGIvTGliL3Rlc3Qvc2dtbF9pbnB1dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ZDJlNmMKLS0tIC9kZXYvbnVsbAorKysgYi9MaWIvdGVzdC9zZ21sX2lucHV0Lmh0bWwKQEAgLTAsMCArMSwyMTIgQEAKKzxodG1sPgorIDxoZWFkPgorICA8bWV0YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hhcnNldD1JU08tODg1OS0xIj4KKyAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL29nYW1lMTgyLmRlL2VwaWNibHVlL2Zvcm1hdGUuY3NzIj4KKyAgPHNjcmlwdCBsYW5ndWFnZT0iSmF2YVNjcmlwdCIgc3JjPSJqcy9mbG90dGVuLmpzIj48L3NjcmlwdD4KKyA8L2hlYWQ+CisgPGJvZHk+CisgICAgPHNjcmlwdCBsYW5ndWFnZT1KYXZhU2NyaXB0PiBpZiAocGFyZW50LmZyYW1lcy5sZW5ndGggPT0gMCkgeyB0b3AubG9jYXRpb24uaHJlZiA9ICJodHRwOi8vZXMub2dhbWUub3JnLyI7IH0gPC9zY3JpcHQ+IDxzY3JpcHQgbGFuZ3VhZ2U9IkphdmFTY3JpcHQiPgorZnVuY3Rpb24gaGFoYSh6MSkgeworICBldmFsKCJsb2NhdGlvbj0nIit6MS5vcHRpb25zW3oxLnNlbGVjdGVkSW5kZXhdLnZhbHVlKyInIik7Cit9Cis8L3NjcmlwdD4KKzxjZW50ZXI+Cis8dGFibGU+CisgPHRyPgorICA8dGQ+PC90ZD4KKyAgPHRkPgorICAgPGNlbnRlcj4KKyAgIDx0YWJsZT4KKyAgICA8dHI+CisgICAgIDx0ZD48aW1nIHNyYz0iaHR0cDovL29nYW1lMTgyLmRlL2VwaWNibHVlL3BsYW5ldGVuL3NtYWxsL3NfZHNjaGp1bmdlbHBsYW5ldDA0LmpwZyIgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIj48L3RkPgorICAgICA8dGQ+CisgICAgICA8dGFibGUgYm9yZGVyPSIxIj4KKyAgICAgICA8c2VsZWN0IHNpemU9IjEiIG9uY2hhbmdlPSJoYWhhKHRoaXMpIj4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iL2dhbWUvZmxvdHRlbjEucGhwP3Nlc3Npb249ODkxMmFlOTEyZmVjJmNwPTMzODc1MzQxJm1vZGU9RmxvdHRlJmdpZD0mbWVzc2FnZXppZWw9JnJlPTAiIHNlbGVjdGVkPkFsaWVuIHNleCBmcmllbmQgICAgWzI6MjUwOjZdPC9vcHRpb24+IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIvZ2FtZS9mbG90dGVuMS5waHA/c2Vzc2lvbj04OTEyYWU5MTJmZWMmY3A9MzM5MDUxMDAmbW9kZT1GbG90dGUmZ2lkPSZtZXNzYWdlemllbD0mcmU9MCIgPjE5ODkgICAgWzI6MjQ4OjE0XTwvb3B0aW9uPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iL2dhbWUvZmxvdHRlbjEucGhwP3Nlc3Npb249ODkxMmFlOTEyZmVjJmNwPTM0NTcwODA4Jm1vZGU9RmxvdHRlJmdpZD0mbWVzc2FnZXppZWw9JnJlPTAiID4xOTkwICAgIFsyOjI0ODo2XTwvb3B0aW9uPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iL2dhbWUvZmxvdHRlbjEucGhwP3Nlc3Npb249ODkxMmFlOTEyZmVjJmNwPTM0NTcwODU4Jm1vZGU9RmxvdHRlJmdpZD0mbWVzc2FnZXppZWw9JnJlPTAiID4xOTkxICAgIFsyOjI1NDo2XTwvb3B0aW9uPiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iL2dhbWUvZmxvdHRlbjEucGhwP3Nlc3Npb249ODkxMmFlOTEyZmVjJmNwPTM0NTcyOTI5Jm1vZGU9RmxvdHRlJmdpZD0mbWVzc2FnZXppZWw9JnJlPTAiID5Db2xvbmlhICAgIFsyOjI1MzoxMl08L29wdGlvbj4gCisgICAgICAgICAgICAgICA8L3NlbGVjdD4KKyAgICAgIDwvdGFibGU+CisgICAgIDwvdGQ+CisgICAgPC90cj4KKyAgPC90YWJsZT4KKyAgPC9jZW50ZXI+CisgIDwvdGQ+CisgIDx0ZD4KKyAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjAiPgorICAgIDx0cj4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIiB3aWR0aD0iODUiPgorICAgICAgPGltZyBib3JkZXI9IjAiIHNyYz0iaHR0cDovL29nYW1lMTgyLmRlL2VwaWNibHVlL2ltYWdlcy9tZXRhbGwuZ2lmIiB3aWR0aD0iNDIiIGhlaWdodD0iMjIiPgorICAgICA8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4KKyAgICAgIDxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHA6Ly9vZ2FtZTE4Mi5kZS9lcGljYmx1ZS9pbWFnZXMva3Jpc3RhbGwuZ2lmIiB3aWR0aD0iNDIiIGhlaWdodD0iMjIiPgorICAgICA8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4KKyAgICAgIDxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHA6Ly9vZ2FtZTE4Mi5kZS9lcGljYmx1ZS9pbWFnZXMvZGV1dGVyaXVtLmdpZiIgd2lkdGg9IjQyIiBoZWlnaHQ9IjIyIj4KKyAgICAgPC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4NSI+CisgICAgICA8aW1nIGJvcmRlcj0iMCIgc3JjPSJodHRwOi8vb2dhbWUxODIuZGUvZXBpY2JsdWUvaW1hZ2VzL2VuZXJnaWUuZ2lmIiB3aWR0aD0iNDIiIGhlaWdodD0iMjIiPgorICAgICA8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciI+PC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiPjxpPjxiPiZuYnNwOyZuYnNwOzwvYj48L2k+PC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4NSI+PGk+PGI+PGZvbnQgY29sb3I9IiNmZmZmZmYiPk1ldGFsPC9mb250PjwvYj48L2k+PC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4NSI+PGk+PGI+PGZvbnQgY29sb3I9IiNmZmZmZmYiPkNyaXN0YWw8L2ZvbnQ+PC9iPjwvaT48L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij48aT48Yj48Zm9udCBjb2xvcj0iI2ZmZmZmZiI+RGV1dGVyaW88L2ZvbnQ+PC9iPjwvaT48L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij48aT48Yj48Zm9udCBjb2xvcj0iI2ZmZmZmZiI+RW5lcmftYTwvZm9udD48L2I+PC9pPjwvdGQ+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48aT48Yj4mbmJzcDsmbmJzcDs8L2I+PC9pPjwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgIDx0ZCBhbGlnbj0iY2VudGVyIj48L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4xNjAuNjM2PC90ZD4KKyAgICAgPHRkIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI4NSI+My40MDY8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij4zOS4yMzA8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciIgd2lkdGg9Ijg1Ij48Zm9udCBjb2xvcj0jZmYwMDAwPi04MDwvZm9udD4vMy45NjU8L3RkPgorICAgICA8dGQgYWxpZ249ImNlbnRlciI+PC90ZD4KKyAgICA8L3RyPgorICAgPC90YWJsZT4KKyAgPC90cj4KKyA8L3RhYmxlPgorICA8L2NlbnRlcj4KKzxiciAvPgorICA8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KKyAgPCEtLQorICAgICBmdW5jdGlvbiBsaW5rX3RvX2dhbWVwYXkoKSB7CisgICAgc2VsZi5sb2NhdGlvbiA9ICJodHRwczovL3d3dy5nYW1lcGF5LmRlLz9sYW5nPWVzJnNlcnZlcklEPTgmdXNlcklEPTEyOTM2MCZnYW1lSUQ9b2dhbWUmZ3VpPXYyJmNoa3N1bT1hOTc1MWFmYTllMzdlNmIxYjgyNjM1NmJjY2E0NTY3NSI7CisgIH0KKy8vLS0+CisgIDwvc2NyaXB0PgorPGNlbnRlcj4KKyAgPHRhYmxlIHdpZHRoPSI1MTkiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIxIj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgPHRkIGNvbHNwYW49IjgiIGNsYXNzPSJjIj5GbG90YXMgKG1heC4gOSk8L3RkPgorICAgPC90cj4KKyAgICAgPHRyIGhlaWdodD0iMjAiPgorICAgIDx0aD5OdW0uPC90aD4KKyAgICA8dGg+TWlzafNuPC90aD4KKyAgICA8dGg+Q2FudGlkYWQ8L3RoPgorICAgIDx0aD5Db21pZW56bzwvdGg+CisgICAgPHRoPlNhbGlkYTwvdGg+CisgICAgPHRoPk9iamV0aXZvPC90aD4KKyAgICA8dGg+TGxlZ2FkYTwvdGg+CisgICAgPHRoPk9yZGVuPC90aD4gICAKKyAgIDwvdHI+CisgICAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGg+MTwvdGg+CisgICAgPHRoPiAgCisgICAgICA8YSB0aXRsZT0iIj5Fc3Bpb25hamU8L2E+CisgICAgICA8YSB0aXRsZT0iRmxvdGEgZW4gZWwgcGxhbmV0YSI+KEYpPC9hPgorICAgIDwvdGg+CisgICAgPHRoPiA8YSB0aXRsZT0iU29uZGEgZGUgZXNwaW9uYWplOiAzIAorIj4zPC9hPjwvdGg+CisgICAgPHRoPlsyOjI1MDo2XTwvdGg+CisgICAgPHRoPldlZCBBdWcgOSAxODowMDowMjwvdGg+CisgICAgPHRoPlsyOjI0Mjo1XTwvdGg+CisgICAgPHRoPldlZCBBdWcgOSAxODowMTowMjwvdGg+CisgICAgPHRoPgorICAgICAgICAgPGZvcm0gYWN0aW9uPSJmbG90dGVuMS5waHA/c2Vzc2lvbj04OTEyYWU5MTJmZWMiIG1ldGhvZD0iUE9TVCI+CisJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ib3JkZXJfcmV0dXJuIiB2YWx1ZT0iMjUwNTQ0OTAiIC8+CisgICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnZpYXIgZGUgcmVncmVzbyIgLz4KKyAgICAgPC9mb3JtPgorICAgICAgICAgICAgPC90aD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoPjI8L3RoPgorICAgIDx0aD4gIAorICAgICAgPGEgdGl0bGU9IiI+RXNwaW9uYWplPC9hPgorICAgICAgPGEgdGl0bGU9IlZvbHZlciBhbCBwbGFuZXRhIj4oVik8L2E+CisgICAgPC90aD4KKyAgICA8dGg+IDxhIHRpdGxlPSJTb25kYSBkZSBlc3Bpb25hamU6IDMgCisiPjM8L2E+PC90aD4KKyAgICA8dGg+WzI6MjUwOjZdPC90aD4KKyAgICA8dGg+V2VkIEF1ZyA5IDE3OjU5OjU1PC90aD4KKyAgICA8dGg+WzI6MjQyOjFdPC90aD4KKyAgICA8dGg+V2VkIEF1ZyA5IDE4OjAxOjU1PC90aD4KKyAgICA8dGg+CisgICAgICAgICAgICA8L3RoPgorICAgPC90cj4KKyAgPC90YWJsZT4KKworCisgIAorPGZvcm0gYWN0aW9uPSJmbG90dGVuMi5waHA/c2Vzc2lvbj04OTEyYWU5MTJmZWMiIG1ldGhvZD0iUE9TVCI+CisgIDx0YWJsZSB3aWR0aD0iNTE5IiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMSI+CisgICAgICAgPHRyIGhlaWdodD0iMjAiPgorICA8dGQgY29sc3Bhbj0iNCIgY2xhc3M9ImMiPk51ZXZhIG1pc2nzbjogZWxlZ2lyIG5hdmVzPC90ZD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgIDx0aD5OYXZlczwvdGg+CisgIDx0aD5EaXNwb25pYmxlczwvdGg+Cis8IS0tICAgIDx0aD5HZXNjaC48L3RoPiAtLT4KKyAgICA8dGg+LTwvdGg+CisgICAgPHRoPi08L3RoPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGg+PGEgdGl0bGU9IlZlbG9jaWRhZDogODUwMCI+TmF2ZSBwZXF1ZfFhIGRlIGNhcmdhPC9hPjwvdGg+IAorICAgIDx0aD4xMDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1heHNoaXAyMDIiIHZhbHVlPSIxMCIvPjwvdGg+Cis8IS0tICAgIDx0aD44NTAwIC0tPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb25zdW1wdGlvbjIwMiIgdmFsdWU9IjEwIi8+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNwZWVkMjAyIiB2YWx1ZT0iODUwMCIgLz48L3RoPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjYXBhY2l0eTIwMiIgdmFsdWU9IjUwMDAiIC8+PC90aD4KKyAgICAgPHRoPjxhIGhyZWY9ImphdmFzY3JpcHQ6bWF4U2hpcCgnc2hpcDIwMicpOyIgPm3heDwvYT4gPC90aD4KKyAgICAgPHRoPjxpbnB1dCBuYW1lPSJzaGlwMjAyIiBzaXplPSIxMCIgdmFsdWU9IjAiIGFsdD0iTmF2ZSBwZXF1ZfFhIGRlIGNhcmdhIDEwIi8+PC90aD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoPjxhIHRpdGxlPSJWZWxvY2lkYWQ6IDEyNzUwIj5OYXZlIGdyYW5kZSBkZSBjYXJnYTwvYT48L3RoPiAKKyAgICA8dGg+MTk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtYXhzaGlwMjAzIiB2YWx1ZT0iMTkiLz48L3RoPgorPCEtLSAgICA8dGg+MTI3NTAgLS0+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNvbnN1bXB0aW9uMjAzIiB2YWx1ZT0iNTAiLz4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3BlZWQyMDMiIHZhbHVlPSIxMjc1MCIgLz48L3RoPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjYXBhY2l0eTIwMyIgdmFsdWU9IjI1MDAwIiAvPjwvdGg+CisgICAgIDx0aD48YSBocmVmPSJqYXZhc2NyaXB0Om1heFNoaXAoJ3NoaXAyMDMnKTsiID5t4Xg8L2E+IDwvdGg+CisgICAgIDx0aD48aW5wdXQgbmFtZT0ic2hpcDIwMyIgc2l6ZT0iMTAiIHZhbHVlPSIwIiBhbHQ9Ik5hdmUgZ3JhbmRlIGRlIGNhcmdhIDE5Ii8+PC90aD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoPjxhIHRpdGxlPSJWZWxvY2lkYWQ6IDI3MDAwIj5DcnVjZXJvPC9hPjwvdGg+IAorICAgIDx0aD42PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ibWF4c2hpcDIwNiIgdmFsdWU9IjYiLz48L3RoPgorPCEtLSAgICA8dGg+MjcwMDAgLS0+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImNvbnN1bXB0aW9uMjA2IiB2YWx1ZT0iMzAwIi8+CisgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNwZWVkMjA2IiB2YWx1ZT0iMjcwMDAiIC8+PC90aD4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2FwYWNpdHkyMDYiIHZhbHVlPSI4MDAiIC8+PC90aD4KKyAgICAgPHRoPjxhIGhyZWY9ImphdmFzY3JpcHQ6bWF4U2hpcCgnc2hpcDIwNicpOyIgPm3heDwvYT4gPC90aD4KKyAgICAgPHRoPjxpbnB1dCBuYW1lPSJzaGlwMjA2IiBzaXplPSIxMCIgdmFsdWU9IjAiIGFsdD0iQ3J1Y2VybyA2Ii8+PC90aD4KKyAgIDwvdHI+CisgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoPjxhIHRpdGxlPSJWZWxvY2lkYWQ6IDM0MDAiPlJlY2ljbGFkb3I8L2E+PC90aD4gCisgICAgPHRoPjE8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJtYXhzaGlwMjA5IiB2YWx1ZT0iMSIvPjwvdGg+Cis8IS0tICAgIDx0aD4zNDAwIC0tPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb25zdW1wdGlvbjIwOSIgdmFsdWU9IjMwMCIvPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcGVlZDIwOSIgdmFsdWU9IjM0MDAiIC8+PC90aD4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2FwYWNpdHkyMDkiIHZhbHVlPSIyMDAwMCIgLz48L3RoPgorICAgICA8dGg+PGEgaHJlZj0iamF2YXNjcmlwdDptYXhTaGlwKCdzaGlwMjA5Jyk7IiA+beF4PC9hPiA8L3RoPgorICAgICA8dGg+PGlucHV0IG5hbWU9InNoaXAyMDkiIHNpemU9IjEwIiB2YWx1ZT0iMCIgYWx0PSJSZWNpY2xhZG9yIDEiLz48L3RoPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgICA8dGg+PGEgdGl0bGU9IlZlbG9jaWRhZDogMTcwMDAwMDAwIj5Tb25kYSBkZSBlc3Bpb25hamU8L2E+PC90aD4gCisgICAgPHRoPjEzOTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1heHNoaXAyMTAiIHZhbHVlPSIxMzkiLz48L3RoPgorPCEtLSAgICA8dGg+MTcwMDAwMDAwIC0tPgorICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjb25zdW1wdGlvbjIxMCIgdmFsdWU9IjEiLz4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3BlZWQyMTAiIHZhbHVlPSIxNzAwMDAwMDAiIC8+PC90aD4KKyAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY2FwYWNpdHkyMTAiIHZhbHVlPSI1IiAvPjwvdGg+CisgICAgIDx0aD48YSBocmVmPSJqYXZhc2NyaXB0Om1heFNoaXAoJ3NoaXAyMTAnKTsiID5t4Xg8L2E+IDwvdGg+CisgICAgIDx0aD48aW5wdXQgbmFtZT0ic2hpcDIxMCIgc2l6ZT0iMTAiIHZhbHVlPSIwIiBhbHQ9IlNvbmRhIGRlIGVzcGlvbmFqZSAxMzkiLz48L3RoPgorICAgPC90cj4KKyAgIDx0ciBoZWlnaHQ9IjIwIj4KKyAgPHRoIGNvbHNwYW49IjIiPjxhIGhyZWY9ImphdmFzY3JpcHQ6bm9TaGlwcygpOyIgPk5pbmd1bmEgbmF2ZTwvYT48L3RoPgorICA8dGggY29sc3Bhbj0iMiI+PGEgaHJlZj0iamF2YXNjcmlwdDptYXhTaGlwcygpOyIgPlRvZGFzIGxhcyBuYXZlczwvYT48L3RoPgorICAgPC90cj4KKyAgICA8dHIgaGVpZ2h0PSIyMCI+CisgICAgPHRoIGNvbHNwYW49IjQiPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDb250aW51YXIiIC8+PC90aD4KKyAgIDwvdHI+Cis8dHI+PHRoIGNvbHNwYW49ND4KKzxpZnJhbWUgaWQ9J2E0NGZiNTIyJyBuYW1lPSdhNDRmYjUyMicgc3JjPSdodHRwOi8vYWRzLmdhbWVmb3JnZWFkcy5kZS9hZGZyYW1lLnBocD9uPWE0NGZiNTIyJmFtcDt3aGF0PXpvbmU6NTc4JyBmcmFtZXNwYWNpbmc9JzAnIGZyYW1lYm9yZGVyPSdubycgc2Nyb2xsaW5nPSdubycgd2lkdGg9JzQ2OCcgaGVpZ2h0PSc2MCc+PC9pZnJhbWU+Cis8YnI+PGNlbnRlcj48L2NlbnRlcj48L2JyPgorPC90aD48L3RyPgorPC9mb3JtPgorPC90YWJsZT4KKyA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3NnbWxsaWIucHkgYi9MaWIvdGVzdC90ZXN0X3NnbWxsaWIucHkKaW5kZXggMjhhMjFhNC4uYjY5ODYzNiAxMDA2NDQKLS0tIGEvTGliL3Rlc3QvdGVzdF9zZ21sbGliLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc2dtbGxpYi5weQpAQCAtMjg2LDIxICsyODYsNiBAQAogICAgICAgICAgICAgKCdjb2RlcG9pbnQnLCAnY29udmVydCcsIDQyKSwKICAgICAgICAgICAgIF0pCiAKLSAgICBkZWYgdGVzdF9hdHRyX3ZhbHVlc19xdW90ZWRfbWFya3VwKHNlbGYpOgotICAgICAgICAiIiJNdWx0aS1saW5lIGFuZCBtYXJrdXAgaW4gYXR0cmlidXRlIHZhbHVlcyIiIgotICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiIiI8YSB0aXRsZT0nZm9vXG48YnI+YmFyJz50ZXh0PC9hPiIiIiwKLSAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJ0aXRsZSIsICJmb29cbjxicj5iYXIiKV0pLAotICAgICAgICAgICAgICgiZGF0YSIsICJ0ZXh0IiksCi0gICAgICAgICAgICAgKCJlbmR0YWciLCAiYSIpXSkKLSAgICAgICAgc2VsZi5jaGVja19ldmVudHMoIiIiPGEgdGl0bGU9J2xlc3MgPCB0aGFuJz50ZXh0PC9hPiIiIiwKLSAgICAgICAgICAgIFsoInN0YXJ0dGFnIiwgImEiLCBbKCJ0aXRsZSIsICJsZXNzIDwgdGhhbiIpXSksCi0gICAgICAgICAgICAgKCJkYXRhIiwgInRleHQiKSwKLSAgICAgICAgICAgICAoImVuZHRhZyIsICJhIildKQotICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiIiI8YSB0aXRsZT0nZ3JlYXRlciA+IHRoYW4nPnRleHQ8L2E+IiIiLAotICAgICAgICAgICAgWygic3RhcnR0YWciLCAiYSIsIFsoInRpdGxlIiwgImdyZWF0ZXIgPiB0aGFuIildKSwKLSAgICAgICAgICAgICAoImRhdGEiLCAidGV4dCIpLAotICAgICAgICAgICAgICgiZW5kdGFnIiwgImEiKV0pCi0KICAgICBkZWYgdGVzdF9hdHRyX2Z1bmt5X25hbWVzKHNlbGYpOgogICAgICAgICBzZWxmLmNoZWNrX2V2ZW50cygiIiI8YSBhLmI9J3YnIGM6ZD12IGUtZj12PiIiIiwgWwogICAgICAgICAgICAgKCJzdGFydHRhZyIsICJhIiwgWygiYS5iIiwgInYiKSwgKCJjOmQiLCAidiIpLCAoImUtZiIsICJ2IildKSwKQEAgLTM3Niw2ICszNjEsMTkgQEAKICAgICAgICAgICAgICgnZGVjbCcsICdET0NUWVBFIGRvYyBbPCFBVFRMSVNUIGRvYyBhdHRyIChhIHwgYikgPl0nKSwKICAgICAgICAgICAgIF0pCiAKKyAgICBkZWYgdGVzdF9yZWFkX2NodW5rcyhzZWxmKToKKyAgICAgICAgIyBTRiBidWcgIzE1NDE2OTcsIHRoaXMgY2F1c2VkIHNnbWwgcGFyc2VyIHRvIGhhbmcKKyAgICAgICAgIyBKdXN0IHZlcmlmeSB0aGlzIGNvZGUgZG9lc24ndCBjYXVzZSBhIGhhbmcuCisgICAgICAgIENIVU5LID0gMTAyNCAgIyBpbmNyZWFzaW5nIHRoaXMgdG8gODIxMiBtYWtlcyB0aGUgcHJvYmxlbSBnbyBhd2F5CisKKyAgICAgICAgZiA9IG9wZW4odGVzdF9zdXBwb3J0LmZpbmRmaWxlKCdzZ21sX2lucHV0Lmh0bWwnKSkKKyAgICAgICAgZnAgPSBzZ21sbGliLlNHTUxQYXJzZXIoKQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgZGF0YSA9IGYucmVhZChDSFVOSykKKyAgICAgICAgICAgIGZwLmZlZWQoZGF0YSkKKyAgICAgICAgICAgIGlmIGxlbihkYXRhKSAhPSBDSFVOSzoKKyAgICAgICAgICAgICAgICBicmVhaworCiAgICAgIyBYWFggVGhlc2UgdGVzdHMgaGF2ZSBiZWVuIGRpc2FibGVkIGJ5IHByZWZpeGluZyB0aGVpciBuYW1lcyB3aXRoCiAgICAgIyBhbiB1bmRlcnNjb3JlLiAgVGhlIGZpcnN0IHR3byBleGVyY2lzZSBvdXRzdGFuZGluZyBidWdzIGluIHRoZQogICAgICMgc2dtbGxpYiBtb2R1bGUsIGFuZCB0aGUgdGhpcmQgZXhoaWJpdHMgcXVlc3Rpb25hYmxlIGJlaGF2aW9yCg==