ZGlmZiAtLWdpdCBhLy5jb25hbi9idWlsZC5weSBiLy5jb25hbi9idWlsZC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmJhMjY0Ci0tLSAvZGV2L251bGwKKysrIGIvLmNvbmFuL2J1aWxkLnB5CkBAIC0wLDAgKzEsOTQgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KKworaW1wb3J0IG9zCitpbXBvcnQgcmUKK2Zyb20gY3B0LnBhY2thZ2VyIGltcG9ydCBDb25hbk11bHRpUGFja2FnZXIKK2Zyb20gY3B0LmNpX21hbmFnZXIgaW1wb3J0IENJTWFuYWdlcgorZnJvbSBjcHQucHJpbnRlciBpbXBvcnQgUHJpbnRlcgorCisKK2NsYXNzIEJ1aWxkZXJTZXR0aW5ncyhvYmplY3QpOgorICAgIEBwcm9wZXJ0eQorICAgIGRlZiB1c2VybmFtZShzZWxmKToKKyAgICAgICAgIiIiIFNldCBjYXRjaG9yZyBhcyBwYWNrYWdlJ3Mgb3duZXIKKyAgICAgICAgIiIiCisgICAgICAgIHJldHVybiBvcy5nZXRlbnYoIkNPTkFOX1VTRVJOQU1FIiwgImNhdGNob3JnIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBsb2dpbl91c2VybmFtZShzZWxmKToKKyAgICAgICAgIiIiIFNldCBCaW50cmF5IGxvZ2luIHVzZXJuYW1lCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gb3MuZ2V0ZW52KCJDT05BTl9MT0dJTl9VU0VSTkFNRSIsICJob3Jlbm1hciIpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdXBsb2FkKHNlbGYpOgorICAgICAgICAiIiIgU2V0IENhdGNoMiByZXBvc2l0b3J5IHRvIGJlIHVzZWQgb24gdXBsb2FkLgorICAgICAgICAgICAgVGhlIHVwbG9hZCBzZXJ2ZXIgYWRkcmVzcyBjb3VsZCBiZSBjdXN0b21pemVkIGJ5IGVudiB2YXIKKyAgICAgICAgICAgIENPTkFOX1VQTE9BRC4gSWYgbm90IGRlZmluZWQsIHRoZSBtZXRob2Qgd2lsbCBjaGVjayB0aGUgYnJhbmNoIG5hbWUuCisgICAgICAgICAgICBPbmx5IG1hc3RlciBvciBDT05BTl9TVEFCTEVfQlJBTkNIX1BBVFRFUk4gd2lsbCBiZSBhY2NlcHRlZC4KKyAgICAgICAgICAgIFRoZSBtYXN0ZXIgYnJhbmNoIHdpbGwgYmUgcHVzaGVkIHRvIHRlc3RpbmcgY2hhbm5lbCwgYmVjYXVzZSBpdCBkb2VzCisgICAgICAgICAgICBub3QgbWF0Y2ggdGhlIHN0YWJsZSBwYXR0ZXJuLiBPdGhlcndpc2UgaXQgd2lsbCB1cGxvYWQgdG8gc3RhYmxlCisgICAgICAgICAgICBjaGFubmVsLgorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIG9zLmdldGVudigiQ09OQU5fVVBMT0FEIiwgImh0dHBzOi8vYXBpLmJpbnRyYXkuY29tL2NvbmFuL2NhdGNob3JnL0NhdGNoMiIpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgdXBsb2FkX29ubHlfd2hlbl9zdGFibGUoc2VsZik6CisgICAgICAgICIiIiBGb3JjZSB0byB1cGxvYWQgd2hlbiBydW5uaW5nIG92ZXIgdGFnIGJyYW5jaAorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIG9zLmdldGVudigiQ09OQU5fVVBMT0FEX09OTFlfV0hFTl9TVEFCTEUiLCAiVHJ1ZSIpLmxvd2VyKCkgaW4gWyJ0cnVlIiwgIjEiLCAieWVzIl0KKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBzdGFibGVfYnJhbmNoX3BhdHRlcm4oc2VsZik6CisgICAgICAgICIiIiBPbmx5IHVwbG9hZCB0aGUgcGFja2FnZSB0aGUgYnJhbmNoIG5hbWUgaXMgbGlrZSBhIHRhZworICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIG9zLmdldGVudigiQ09OQU5fU1RBQkxFX0JSQU5DSF9QQVRURVJOIiwgciJ2XGQrXC5cZCtcLlxkKyIpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgcmVmZXJlbmNlKHNlbGYpOgorICAgICAgICAiIiIgUmVhZCBwcm9qZWN0IHZlcnNpb24gZnJvbSBicmFuY2ggY3JlYXRlIENvbmFuIHJlZmVyZWNlCisgICAgICAgICIiIgorICAgICAgICByZXR1cm4gb3MuZ2V0ZW52KCJDT05BTl9SRUZFUkVOQ0UiLCAiQ2F0Y2gyL3t9Ii5mb3JtYXQoc2VsZi5fdmVyc2lvbikpCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgY2hhbm5lbChzZWxmKToKKyAgICAgICAgIiIiIERlZmF1bHQgQ29uYW4gcGFja2FnZSBjaGFubmVsIHdoZW4gbm90IHN0YWJsZQorICAgICAgICAiIiIKKyAgICAgICAgcmV0dXJuIG9zLmdldGVudigiQ09OQU5fQ0hBTk5FTCIsICJ0ZXN0aW5nIikKKworICAgIEBwcm9wZXJ0eQorICAgIGRlZiBfdmVyc2lvbihzZWxmKToKKyAgICAgICAgIiIiIEdldCB2ZXJzaW9uIG5hbWUgZnJvbSBjbWFrZSBmaWxlCisgICAgICAgICIiIgorICAgICAgICBwYXR0ZXJuID0gcmUuY29tcGlsZShyInByb2plY3RcKENhdGNoMiBMQU5HVUFHRVMgQ1hYIFZFUlNJT04gKFxkK1wuXGQrXC5cZCspXCkiKQorICAgICAgICB2ZXJzaW9uID0gImxhdGVzdCIKKyAgICAgICAgd2l0aCBvcGVuKCJDTWFrZUxpc3RzLnR4dCIpIGFzIGZpbGU6CisgICAgICAgICAgICBmb3IgbGluZSBpbiBmaWxlOgorICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBhdHRlcm4uc2VhcmNoKGxpbmUpCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0OgorICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uID0gcmVzdWx0Lmdyb3VwKDEpCisgICAgICAgIHJldHVybiB2ZXJzaW9uCisKKyAgICBAcHJvcGVydHkKKyAgICBkZWYgX2JyYW5jaChzZWxmKToKKyAgICAgICAgIiIiIEdldCBicmFuY2ggbmFtZSBmcm9tIENJIG1hbmFnZXIKKyAgICAgICAgIiIiCisgICAgICAgIHByaW50ZXIgPSBQcmludGVyKE5vbmUpCisgICAgICAgIGNpX21hbmFnZXIgPSBDSU1hbmFnZXIocHJpbnRlcikKKyAgICAgICAgcmV0dXJuIGNpX21hbmFnZXIuZ2V0X2JyYW5jaCgpCisKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBzZXR0aW5ncyA9IEJ1aWxkZXJTZXR0aW5ncygpCisgICAgYnVpbGRlciA9IENvbmFuTXVsdGlQYWNrYWdlcigKKyAgICAgICAgcmVmZXJlbmNlPXNldHRpbmdzLnJlZmVyZW5jZSwKKyAgICAgICAgY2hhbm5lbD1zZXR0aW5ncy5jaGFubmVsLAorICAgICAgICB1cGxvYWQ9c2V0dGluZ3MudXBsb2FkLAorICAgICAgICB1cGxvYWRfb25seV93aGVuX3N0YWJsZT1zZXR0aW5ncy51cGxvYWRfb25seV93aGVuX3N0YWJsZSwKKyAgICAgICAgc3RhYmxlX2JyYW5jaF9wYXR0ZXJuPXNldHRpbmdzLnN0YWJsZV9icmFuY2hfcGF0dGVybiwKKyAgICAgICAgbG9naW5fdXNlcm5hbWU9c2V0dGluZ3MubG9naW5fdXNlcm5hbWUsCisgICAgICAgIHVzZXJuYW1lPXNldHRpbmdzLnVzZXJuYW1lLAorICAgICAgICB0ZXN0X2ZvbGRlcj1vcy5wYXRoLmpvaW4oIi5jb25hbiIsICJ0ZXN0X3BhY2thZ2UiKSkKKyAgICBidWlsZGVyLmFkZCgpCisgICAgYnVpbGRlci5ydW4oKQpkaWZmIC0tZ2l0IGEvLmNvbmFuL3Rlc3RfcGFja2FnZS9DTWFrZUxpc3RzLnR4dCBiLy5jb25hbi90ZXN0X3BhY2thZ2UvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIwNTY1OQotLS0gL2Rldi9udWxsCisrKyBiLy5jb25hbi90ZXN0X3BhY2thZ2UvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMSBAQAorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMi4wKQorcHJvamVjdCh0ZXN0X3BhY2thZ2UgQ1hYKQorCitpbmNsdWRlKCR7Q01BS0VfQklOQVJZX0RJUn0vY29uYW5idWlsZGluZm8uY21ha2UpCitjb25hbl9iYXNpY19zZXR1cChUQVJHRVRTKQorCitmaW5kX3BhY2thZ2UoQ2F0Y2gyIFJFUVVJUkVEIENPTkZJRykKKworYWRkX2V4ZWN1dGFibGUoJHtQUk9KRUNUX05BTUV9IHRlc3RfcGFja2FnZS5jcHApCit0YXJnZXRfbGlua19saWJyYXJpZXMoJHtQUk9KRUNUX05BTUV9IENPTkFOX1BLRzo6Q2F0Y2gyKQorc2V0X3RhcmdldF9wcm9wZXJ0aWVzKCR7UFJPSkVDVF9OQU1FfSBQUk9QRVJUSUVTIENYWF9TVEFOREFSRCAxMSkKZGlmZiAtLWdpdCBhLy5jb25hbi90ZXN0X3BhY2thZ2UvY29uYW5maWxlLnB5IGIvLmNvbmFuL3Rlc3RfcGFja2FnZS9jb25hbmZpbGUucHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEwZGE1NAotLS0gL2Rldi9udWxsCisrKyBiLy5jb25hbi90ZXN0X3BhY2thZ2UvY29uYW5maWxlLnB5CkBAIC0wLDAgKzEsMTkgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KK2Zyb20gY29uYW5zIGltcG9ydCBDb25hbkZpbGUsIENNYWtlCitpbXBvcnQgb3MKKworCitjbGFzcyBUZXN0UGFja2FnZUNvbmFuKENvbmFuRmlsZSk6CisgICAgc2V0dGluZ3MgPSAib3MiLCAiY29tcGlsZXIiLCAiYnVpbGRfdHlwZSIsICJhcmNoIgorICAgIGdlbmVyYXRvcnMgPSAiY21ha2UiCisKKyAgICBkZWYgYnVpbGQoc2VsZik6CisgICAgICAgIGNtYWtlID0gQ01ha2Uoc2VsZikKKyAgICAgICAgY21ha2UuY29uZmlndXJlKCkKKyAgICAgICAgY21ha2UuYnVpbGQoKQorCisgICAgZGVmIHRlc3Qoc2VsZik6CisgICAgICAgIGFzc2VydCBvcy5wYXRoLmlzZmlsZShvcy5wYXRoLmpvaW4oc2VsZi5kZXBzX2NwcF9pbmZvWyJDYXRjaDIiXS5yb290cGF0aCwgImxpY2Vuc2VzIiwgIkxJQ0VOU0UudHh0IikpCisgICAgICAgIGJpbl9wYXRoID0gb3MucGF0aC5qb2luKCJiaW4iLCAidGVzdF9wYWNrYWdlIikKKyAgICAgICAgc2VsZi5ydW4oIiVzIC1zIiAlIGJpbl9wYXRoLCBydW5fZW52aXJvbm1lbnQ9VHJ1ZSkKZGlmZiAtLWdpdCBhLy5jb25hbi90ZXN0X3BhY2thZ2UvdGVzdF9wYWNrYWdlLmNwcCBiLy5jb25hbi90ZXN0X3BhY2thZ2UvdGVzdF9wYWNrYWdlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZmY1MGRlCi0tLSAvZGV2L251bGwKKysrIGIvLmNvbmFuL3Rlc3RfcGFja2FnZS90ZXN0X3BhY2thZ2UuY3BwCkBAIC0wLDAgKzEsMTUgQEAKKyNkZWZpbmUgQ0FUQ0hfQ09ORklHX01BSU4KKworI2luY2x1ZGUgPGNhdGNoMi9jYXRjaC5ocHA+CisKK2ludCBGYWN0b3JpYWwoIGludCBudW1iZXIgKSB7CisgICAgcmV0dXJuIG51bWJlciA8PSAxID8gMSA6IEZhY3RvcmlhbCggbnVtYmVyIC0gMSApICogbnVtYmVyOworfQorCitURVNUX0NBU0UoICJGYWN0b3JpYWwgVGVzdHMiLCAiW3NpbmdsZS1maWxlXSIgKSB7CisgICAgUkVRVUlSRSggRmFjdG9yaWFsKDApID09IDEgKTsKKyAgICBSRVFVSVJFKCBGYWN0b3JpYWwoMSkgPT0gMSApOworICAgIFJFUVVJUkUoIEZhY3RvcmlhbCgyKSA9PSAyICk7CisgICAgUkVRVUlSRSggRmFjdG9yaWFsKDMpID09IDYgKTsKKyAgICBSRVFVSVJFKCBGYWN0b3JpYWwoMTApID09IDM2Mjg4MDAgKTsKK30KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS8uZ2l0YXR0cmlidXRlcyBiLy5naXRhdHRyaWJ1dGVzCmluZGV4IDllODhlYjQuLjIzZjk4ZmYgMTAwNjQ0Ci0tLSBhLy5naXRhdHRyaWJ1dGVzCisrKyBiLy5naXRhdHRyaWJ1dGVzCkBAIC0xMCw4ICsxMCwxMyBAQAogIyBXaW5kb3dzIHNwZWNpZmljIGZpbGVzIHNob3VsZCByZXRhaW4gd2luZG93cyBsaW5lLWVuZGluZ3MKICouc2xuIHRleHQgZW9sPWNybGYKIAorIyBLZWVwIGV4ZWN1dGFibGUgc2NyaXB0cyB3aXRoIExGcyBzbyB0aGV5IGNhbiBiZSBydW4gYWZ0ZXIgYmVpbmcKKyMgY2hlY2tlZCBvdXQgb24gV2luZG93cworKi5weSB0ZXh0IGVvbD1sZgorCisKICMgS2VlcCB0aGUgc2luZ2xlIGluY2x1ZGUgaGVhZGVyIHdpdGggTEZzIHRvIG1ha2Ugc3VyZSBpdCBpcyB1cGxvYWRlZCwKICMgaGFzaGVkIGV0YyB3aXRoIExGCi1zaW5nbGVfaW5jbHVkZS8qLmhwcCBlb2w9bGYKK3NpbmdsZV9pbmNsdWRlLyoqLyouaHBwIGVvbD1sZgogIyBBbHNvIGtlZXAgdGhlIExJQ0VOQ0UgZmlsZSB3aXRoIExGcyBmb3IgdGhlIHNhbWUgcmVhc29uCiBMSUNFTkNFLnR4dCBlb2w9bGYKZGlmZiAtLWdpdCBhLy5naXRodWIvSVNTVUVfVEVNUExBVEUvYnVnX3JlcG9ydC5tZCBiLy5naXRodWIvSVNTVUVfVEVNUExBVEUvYnVnX3JlcG9ydC5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmVmZjExCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGh1Yi9JU1NVRV9URU1QTEFURS9idWdfcmVwb3J0Lm1kCkBAIC0wLDAgKzEsMjkgQEAKKy0tLQorbmFtZTogQnVnIHJlcG9ydAorYWJvdXQ6IENyZWF0ZSBhbiBpc3N1ZSB0aGF0IGRvY3VtZW50cyBhIGJ1ZwordGl0bGU6ICcnCitsYWJlbHM6ICcnCithc3NpZ25lZXM6ICcnCisKKy0tLQorCisqKkRlc2NyaWJlIHRoZSBidWcqKgorQSBjbGVhciBhbmQgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBidWcgaXMuCisKKyoqRXhwZWN0ZWQgYmVoYXZpb3IqKgorQSBjbGVhciBhbmQgY29uY2lzZSBkZXNjcmlwdGlvbiBvZiB3aGF0IHlvdSBleHBlY3RlZCB0byBoYXBwZW4uCisKKyoqUmVwcm9kdWN0aW9uIHN0ZXBzKioKK1N0ZXBzIHRvIHJlcHJvZHVjZSB0aGUgYnVnLgorPCEtLSBVc3VhbGx5IHRoaXMgbWVhbnMgYSBzbWFsbCBhbmQgc2VsZi1jb250YWluZWQgcGllY2Ugb2YgY29kZSB0aGF0IHVzZXMgQ2F0Y2ggYW5kIHNwZWNpZnlpbmcgY29tcGlsZXIgZmxhZ3MgaWYgcmVsZXZhbnQuIC0tPgorCisKKyoqUGxhdGZvcm0gaW5mb3JtYXRpb246KioKKzwhLS0gRmlsbCBpbiBhbnkgZXh0cmEgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBiZSBpbXBvcnRhbnQgZm9yIHlvdXIgaXNzdWUuIC0tPgorIC0gT1M6ICoqV2luZG93cyBOVCoqCisgLSBDb21waWxlcit2ZXJzaW9uOiAqKkdDQyB2Mi45LjUqKgorIC0gQ2F0Y2ggdmVyc2lvbjogKip2MS4yLjMqKgorCisKKyoqQWRkaXRpb25hbCBjb250ZXh0KioKK0FkZCBhbnkgb3RoZXIgY29udGV4dCBhYm91dCB0aGUgcHJvYmxlbSBoZXJlLgpkaWZmIC0tZ2l0IGEvLmdpdGh1Yi9JU1NVRV9URU1QTEFURS9mZWF0dXJlX3JlcXVlc3QubWQgYi8uZ2l0aHViL0lTU1VFX1RFTVBMQVRFL2ZlYXR1cmVfcmVxdWVzdC5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTliOWVlCi0tLSAvZGV2L251bGwKKysrIGIvLmdpdGh1Yi9JU1NVRV9URU1QTEFURS9mZWF0dXJlX3JlcXVlc3QubWQKQEAgLTAsMCArMSwxNCBAQAorLS0tCituYW1lOiBGZWF0dXJlIHJlcXVlc3QKK2Fib3V0OiBDcmVhdGUgYW4gaXNzdWUgdGhhdCByZXF1ZXN0cyBhIGZlYXR1cmUgb3Igb3RoZXIgaW1wcm92ZW1lbnQKK3RpdGxlOiAnJworbGFiZWxzOiAnJworYXNzaWduZWVzOiAnJworCistLS0KKworKipEZXNjcmlwdGlvbioqCitEZXNjcmliZSB0aGUgZmVhdHVyZS9jaGFuZ2UgeW91IHJlcXVlc3QgYW5kIHdoeSBkbyB5b3Ugd2FudCBpdC4KKworKipBZGRpdGlvbmFsIGNvbnRleHQqKgorQWRkIGFueSBvdGhlciBjb250ZXh0IG9yIHNjcmVlbnNob3RzIGFib3V0IHRoZSBmZWF0dXJlIHJlcXVlc3QgaGVyZS4KZGlmZiAtLWdpdCBhLy5naXRodWIvaXNzdWVfdGVtcGxhdGUubWQgYi8uZ2l0aHViL2lzc3VlX3RlbXBsYXRlLm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNTFiNWU1Li4wMDAwMDAwCi0tLSBhLy5naXRodWIvaXNzdWVfdGVtcGxhdGUubWQKKysrIC9kZXYvbnVsbApAQCAtMSwyOSArMCwwIEBACi0jIyBEZXNjcmlwdGlvbgotPCEtLQotSWYgeW91ciBpc3N1ZSBpcyBhIGJ1Z3JlcG9ydCwgdGhpcyBtZWFucyBkZXNjcmliaW5nIHdoYXQgeW91IGRpZCwKLXdoYXQgZGlkIHlvdSB3YW50IHRvIGhhcHBlbiBhbmQgd2hhdCBhY3R1YWxseSBkaWQgaGFwcGVuLgotCi1JZiB5b3VyIGlzc3VlIGlzIGEgZmVhdHVyZSByZXF1ZXN0LCBkZXNjcmliZSB0aGUgZmVhdHVyZSBhbmQgd2h5IGRvIHlvdQotd2FudCBpdC4KLS0tPgotCi0KLSMjIyBTdGVwcyB0byByZXByb2R1Y2UKLTwhLS0KLVRoaXMgaXMgb25seSByZWxldmFudCBmb3IgYnVnIHJlcG9ydHMsIGJ1dCBpZiB5b3UgZG8gaGF2ZSBvbmUsCi1wbGVhc2UgcHJvdmlkZSBhIG1pbmltYWwgc2V0IG9mIHN0ZXBzIHRvIHJlcHJvZHVjZSB0aGUgcHJvYmxlbS4KLQotVXN1YWxseSB0aGlzIG1lYW5zIHByb3ZpZGluZyBhIHNtYWxsIGFuZCBzZWxmLWNvbnRhaW5lZCBjb2RlIHVzaW5nIENhdGNoCi1hbmQgc3BlY2lmeWluZyBjb21waWxlciBmbGFncy90b29scyB1c2VkIGlmIHJlbGV2YW50LgotLS0+Ci0KLQotIyMjIEV4dHJhIGluZm9ybWF0aW9uCi08IS0tCi1GaWxsIGluIGFueSBleHRyYSBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGJlIGltcG9ydGFudCBmb3IgeW91ciBpc3N1ZS4KLQotSWYgeW91ciBpc3N1ZSBpcyBhIGJ1Z3JlcG9ydCwgZGVmaW5pdGVseSBmaWxsIG91dCBhdCBsZWFzdCB0aGUgZm9sbG93aW5nLgotLS0+Ci0qIENhdGNoIHZlcnNpb246ICoqdjQyLjQyLjQyKioKLSogT3BlcmF0aW5nIFN5c3RlbTogKipKb2UncyBkaXNjb3VudCBvcGVyYXRpbmcgc3lzdGVtKioKLSogQ29tcGlsZXIrdmVyc2lvbjogKipIaWRkZW4gRHJhZ29uIHYxLjIuMyoqCmRpZmYgLS1naXQgYS8uZ2l0aWdub3JlIGIvLmdpdGlnbm9yZQppbmRleCBmZmNlOGU5Li5mMDE3ZTllIDEwMDY0NAotLS0gYS8uZ2l0aWdub3JlCisrKyBiLy5naXRpZ25vcmUKQEAgLTI3LDMgKzI3LDQgQEAKIC52cwogY21ha2UtYnVpbGQtKgogYmVuY2htYXJrLWRpcgorLmNvbmFuL3Rlc3RfcGFja2FnZS9idWlsZApkaWZmIC0tZ2l0IGEvLnRyYXZpcy55bWwgYi8udHJhdmlzLnltbAppbmRleCAxZGExYzBmLi4zNDVlZGZiIDEwMDY0NAotLS0gYS8udHJhdmlzLnltbAorKysgYi8udHJhdmlzLnltbApAQCAtMSw1ICsxLDggQEAKIGxhbmd1YWdlOiBjcHAKLXN1ZG86IGZhbHNlCisKK2JyYW5jaGVzOgorICBleGNlcHQ6CisgIC0gL2Rldi1hcHB2ZXlvci4qLwogCiBjb21tb25fc291cmNlczogJmFsbF9zb3VyY2VzCiAgIC0gdWJ1bnR1LXRvb2xjaGFpbi1yLXRlc3QKQEAgLTcsNiArMTAsNyBAQAogICAtIGxsdm0tdG9vbGNoYWluLXRydXN0eS0zLjkKICAgLSBsbHZtLXRvb2xjaGFpbi10cnVzdHktNC4wCiAgIC0gbGx2bS10b29sY2hhaW4tdHJ1c3R5LTUuMAorICAtIGxsdm0tdG9vbGNoYWluLXRydXN0eS02LjAKIAogbWF0cml4OgogICBpbmNsdWRlOgpAQCAtMTcsMTQ1ICsyMSwxNjkgQEAKICAgICAgIGFkZG9uczoKICAgICAgICAgYXB0OgogICAgICAgICAgIHNvdXJjZXM6ICphbGxfc291cmNlcwotICAgICAgICAgIHBhY2thZ2VzOiBbJ3ZhbGdyaW5kJywgJ2xjb3YnLCAnY2xhbmctMy41J10KLSAgICAgIGVudjogQ09NUElMRVI9J2NsYW5nKystMy41JyBWQUxHUklORD0xCisgICAgICAgICAgcGFja2FnZXM6IFsnY2xhbmctMy41J10KKyAgICAgIGVudjogQ09NUElMRVI9J2NsYW5nKystMy41JwogCiAgICAgLSBvczogbGludXgKICAgICAgIGNvbXBpbGVyOiBjbGFuZwogICAgICAgYWRkb25zOgogICAgICAgICBhcHQ6CiAgICAgICAgICAgc291cmNlczogKmFsbF9zb3VyY2VzCi0gICAgICAgICAgcGFja2FnZXM6IFsndmFsZ3JpbmQnLCAnbGNvdicsICdjbGFuZy0zLjYnXQotICAgICAgZW52OiBDT01QSUxFUj0nY2xhbmcrKy0zLjYnIFZBTEdSSU5EPTEKKyAgICAgICAgICBwYWNrYWdlczogWydjbGFuZy0zLjYnXQorICAgICAgZW52OiBDT01QSUxFUj0nY2xhbmcrKy0zLjYnCiAKLSMgVHJhdmlzJ3MgY29udGFpbmVycyBkbyBub3Qgc2VlbSB0byBoYXZlIENsYW5nIDMuNyBpbiBhcHQsIG5vIG1hdHRlciB3aGF0IHNvdXJjZXMgSSBhZGQuCi0jICAgIC0gb3M6IGxpbnV4Ci0jICAgICAgY29tcGlsZXI6IGNsYW5nCi0jICAgICAgYWRkb25zOgotIyAgICAgICAgYXB0OgotIyAgICAgICAgICBzb3VyY2VzOiAqYWxsX3NvdXJjZXMKLSMgICAgICAgICAgcGFja2FnZXM6IFsndmFsZ3JpbmQnLCAnY2xhbmctMy43J10KLSMgICAgICBlbnY6IENPTVBJTEVSPSdjbGFuZysrLTMuNycgVkFMR1JJTkQ9MQorICAgICMgQ2xhbmcgMy43IGlzIGludGVudGlvbmFsbHkgc2tpcHBlZCBhcyB3ZSBjYW5ub3QgZ2V0IGl0IGVhc2lseSBvbgorICAgICMgVHJhdmlzQ0kgY29udGFpbmVyCiAKICAgICAtIG9zOiBsaW51eAogICAgICAgY29tcGlsZXI6IGNsYW5nCiAgICAgICBhZGRvbnM6CiAgICAgICAgIGFwdDoKICAgICAgICAgICBzb3VyY2VzOiAqYWxsX3NvdXJjZXMKLSAgICAgICAgICBwYWNrYWdlczogWyd2YWxncmluZCcsICdsY292JywgJ2NsYW5nLTMuOCddCi0gICAgICBlbnY6IENPTVBJTEVSPSdjbGFuZysrLTMuOCcgVkFMR1JJTkQ9MQorICAgICAgICAgIHBhY2thZ2VzOiBbJ2xjb3YnLCAnY2xhbmctMy44J10KKyAgICAgIGVudjogQ09NUElMRVI9J2NsYW5nKystMy44JwogCiAgICAgLSBvczogbGludXgKICAgICAgIGNvbXBpbGVyOiBjbGFuZwogICAgICAgYWRkb25zOgogICAgICAgICAgIGFwdDoKICAgICAgICAgICAgICAgc291cmNlczogKmFsbF9zb3VyY2VzCi0gICAgICAgICAgICAgIHBhY2thZ2VzOiBbJ2NsYW5nLTMuOScsICd2YWxncmluZCcsICdsY292J10KLSAgICAgIGVudjogQ09NUElMRVI9J2NsYW5nKystMy45JyBWQUxHUklORD0xCisgICAgICAgICAgICAgIHBhY2thZ2VzOiBbJ2NsYW5nLTMuOSddCisgICAgICBlbnY6IENPTVBJTEVSPSdjbGFuZysrLTMuOScKIAogICAgIC0gb3M6IGxpbnV4CiAgICAgICBjb21waWxlcjogY2xhbmcKICAgICAgIGFkZG9uczoKICAgICAgICAgICBhcHQ6CiAgICAgICAgICAgICAgIHNvdXJjZXM6ICphbGxfc291cmNlcwotICAgICAgICAgICAgICBwYWNrYWdlczogWydjbGFuZy00LjAnLCAndmFsZ3JpbmQnLCAnbGNvdiddCi0gICAgICBlbnY6IENPTVBJTEVSPSdjbGFuZysrLTQuMCcgVkFMR1JJTkQ9MQorICAgICAgICAgICAgICBwYWNrYWdlczogWydjbGFuZy00LjAnXQorICAgICAgZW52OiBDT01QSUxFUj0nY2xhbmcrKy00LjAnCiAKICAgICAtIG9zOiBsaW51eAogICAgICAgY29tcGlsZXI6IGNsYW5nCiAgICAgICBhZGRvbnM6CiAgICAgICAgICAgYXB0OgogICAgICAgICAgICAgICBzb3VyY2VzOiAqYWxsX3NvdXJjZXMKLSAgICAgICAgICAgICAgcGFja2FnZXM6IFsnY2xhbmctNS4wJywgJ3ZhbGdyaW5kJywgJ2xjb3YnXQotICAgICAgZW52OiBDT01QSUxFUj0nY2xhbmcrKy01LjAnIFZBTEdSSU5EPTEKKyAgICAgICAgICAgICAgcGFja2FnZXM6IFsnY2xhbmctNS4wJ10KKyAgICAgIGVudjogQ09NUElMRVI9J2NsYW5nKystNS4wJworCisgICAgLSBvczogbGludXgKKyAgICAgIGNvbXBpbGVyOiBjbGFuZworICAgICAgYWRkb25zOgorICAgICAgICAgIGFwdDoKKyAgICAgICAgICAgICAgc291cmNlczogKmFsbF9zb3VyY2VzCisgICAgICAgICAgICAgIHBhY2thZ2VzOiBbJ2NsYW5nLTYuMCddCisgICAgICBlbnY6IENPTVBJTEVSPSdjbGFuZysrLTYuMCcKIAogICAgICMgMi8gTGludXggR0NDIEJ1aWxkcwogICAgIC0gb3M6IGxpbnV4CiAgICAgICBjb21waWxlcjogZ2NjCiAgICAgICBhZGRvbnM6CiAgICAgICAgIGFwdDoKLSAgICAgICAgIHNvdXJjZXM6IFsndWJ1bnR1LXRvb2xjaGFpbi1yLXRlc3QnXQotICAgICAgICAgcGFja2FnZXM6IFsndmFsZ3JpbmQnLCAnbGNvdicsICdnKystNC44J10KLSAgICAgIGVudjogQ09NUElMRVI9J2crKy00LjgnIFZBTEdSSU5EPTEKKyAgICAgICAgIHNvdXJjZXM6ICphbGxfc291cmNlcworICAgICAgICAgcGFja2FnZXM6IFsnZysrLTQuOCddCisgICAgICBlbnY6IENPTVBJTEVSPSdnKystNC44JwogCiAgICAgLSBvczogbGludXgKICAgICAgIGNvbXBpbGVyOiBnY2MKICAgICAgIGFkZG9uczoKICAgICAgICAgYXB0OgogICAgICAgICAgIHNvdXJjZXM6ICphbGxfc291cmNlcwotICAgICAgICAgIHBhY2thZ2VzOiBbJ3ZhbGdyaW5kJywgJ2xjb3YnLCAnZysrLTQuOSddCi0gICAgICBlbnY6IENPTVBJTEVSPSdnKystNC45JyBWQUxHUklORD0xCisgICAgICAgICAgcGFja2FnZXM6IFsnZysrLTQuOSddCisgICAgICBlbnY6IENPTVBJTEVSPSdnKystNC45JwogCiAgICAgLSBvczogbGludXgKICAgICAgIGNvbXBpbGVyOiBnY2MKICAgICAgIGFkZG9uczoKICAgICAgICAgYXB0OgogICAgICAgICAgIHNvdXJjZXM6ICphbGxfc291cmNlcwotICAgICAgICAgIHBhY2thZ2VzOiBbJ3ZhbGdyaW5kJywgJ2xjb3YnLCAnZysrLTUnXQotICAgICAgZW52OiBDT01QSUxFUj0nZysrLTUnIFZBTEdSSU5EPTEKKyAgICAgICAgICBwYWNrYWdlczogWydnKystNSddCisgICAgICBlbnY6IENPTVBJTEVSPSdnKystNScKIAogICAgIC0gb3M6IGxpbnV4CiAgICAgICBjb21waWxlcjogZ2NjCiAgICAgICBhZGRvbnM6ICZnY2M2CiAgICAgICAgIGFwdDoKICAgICAgICAgICBzb3VyY2VzOiAqYWxsX3NvdXJjZXMKLSAgICAgICAgICBwYWNrYWdlczogWyd2YWxncmluZCcsICdsY292JywgJ2crKy02J10KLSAgICAgIGVudjogQ09NUElMRVI9J2crKy02JyBWQUxHUklORD0xCisgICAgICAgICAgcGFja2FnZXM6IFsnZysrLTYnXQorICAgICAgZW52OiBDT01QSUxFUj0nZysrLTYnCiAKICAgICAtIG9zOiBsaW51eAogICAgICAgY29tcGlsZXI6IGdjYwogICAgICAgYWRkb25zOiAmZ2NjNwogICAgICAgICBhcHQ6CiAgICAgICAgICAgc291cmNlczogKmFsbF9zb3VyY2VzCi0gICAgICAgICAgcGFja2FnZXM6IFsndmFsZ3JpbmQnLCAnbGNvdicsICdnKystNyddCi0gICAgICBlbnY6IENPTVBJTEVSPSdnKystNycgVkFMR1JJTkQ9MQorICAgICAgICAgIHBhY2thZ2VzOiBbJ2crKy03J10KKyAgICAgIGVudjogQ09NUElMRVI9J2crKy03JworCisgICAgLSBvczogbGludXgKKyAgICAgIGNvbXBpbGVyOiBnY2MKKyAgICAgIGFkZG9uczogJmdjYzgKKyAgICAgICAgYXB0OgorICAgICAgICAgIHNvdXJjZXM6ICphbGxfc291cmNlcworICAgICAgICAgIHBhY2thZ2VzOiBbJ2crKy04J10KKyAgICAgIGVudjogQ09NUElMRVI9J2crKy04JwogCiAgICAgIyAzYi8gTGludXggQysrMTQgQ2xhbmcgYnVpbGRzCisgICAgIyBOb3RlIHRoYXQgd2UgbmVlZCBuZXdlciBsaWJzdGRjKysgZm9yIEMrKzE0IHN1cHBvcnQKICAgICAtIG9zOiBsaW51eAogICAgICAgY29tcGlsZXI6IGNsYW5nCiAgICAgICBhZGRvbnM6CiAgICAgICAgICAgYXB0OgotICAgICAgICAgICAgICBwYWNrYWdlczogWydjbGFuZy0zLjgnLCAndmFsZ3JpbmQnLCAnbGNvdicsICdsaWJzdGRjKystNi1kZXYnXQorICAgICAgICAgICAgICBwYWNrYWdlczogWydjbGFuZy0zLjgnLCAnbGlic3RkYysrLTYtZGV2J10KICAgICAgICAgICAgICAgc291cmNlczoKICAgICAgICAgICAgICAgICAgIC0gdWJ1bnR1LXRvb2xjaGFpbi1yLXRlc3QKICAgICAgICAgICAgICAgICAgIC0gbGx2bS10b29sY2hhaW4tdHJ1c3R5Ci0gICAgICBlbnY6IENPTVBJTEVSPSdjbGFuZysrLTMuOCcgQ1BQMTQ9MSBWQUxHUklORD0xCisgICAgICBlbnY6IENPTVBJTEVSPSdjbGFuZysrLTMuOCcgQ1BQMTQ9MQogCiAgICAgLSBvczogbGludXgKICAgICAgIGNvbXBpbGVyOiBjbGFuZwogICAgICAgYWRkb25zOgogICAgICAgICAgIGFwdDoKICAgICAgICAgICAgICAgc291cmNlczogKmFsbF9zb3VyY2VzCi0gICAgICAgICAgICAgIHBhY2thZ2VzOiBbJ2NsYW5nLTMuOScsICd2YWxncmluZCcsICdsY292JywgJ2xpYnN0ZGMrKy02LWRldiddCi0gICAgICBlbnY6IENPTVBJTEVSPSdjbGFuZysrLTMuOScgQ1BQMTQ9MSBWQUxHUklORD0xCisgICAgICAgICAgICAgIHBhY2thZ2VzOiBbJ2NsYW5nLTMuOScsICdsaWJzdGRjKystNi1kZXYnXQorICAgICAgZW52OiBDT01QSUxFUj0nY2xhbmcrKy0zLjknIENQUDE0PTEKIAogICAgIC0gb3M6IGxpbnV4CiAgICAgICBjb21waWxlcjogY2xhbmcKICAgICAgIGFkZG9uczoKICAgICAgICAgICBhcHQ6CiAgICAgICAgICAgICAgIHNvdXJjZXM6ICphbGxfc291cmNlcwotICAgICAgICAgICAgICBwYWNrYWdlczogWydjbGFuZy00LjAnLCAndmFsZ3JpbmQnLCAnbGNvdicsICdsaWJzdGRjKystNi1kZXYnXQotICAgICAgZW52OiBDT01QSUxFUj0nY2xhbmcrKy00LjAnIENQUDE0PTEgVkFMR1JJTkQ9MQorICAgICAgICAgICAgICBwYWNrYWdlczogWydjbGFuZy00LjAnLCAnbGlic3RkYysrLTYtZGV2J10KKyAgICAgIGVudjogQ09NUElMRVI9J2NsYW5nKystNC4wJyBDUFAxND0xCiAKICAgICAtIG9zOiBsaW51eAogICAgICAgY29tcGlsZXI6IGNsYW5nCiAgICAgICBhZGRvbnM6CiAgICAgICAgICAgYXB0OgogICAgICAgICAgICAgICBzb3VyY2VzOiAqYWxsX3NvdXJjZXMKLSAgICAgICAgICAgICAgcGFja2FnZXM6IFsnY2xhbmctNS4wJywgJ3ZhbGdyaW5kJywgJ2xjb3YnLCAnbGlic3RkYysrLTYtZGV2J10KLSAgICAgIGVudjogQ09NUElMRVI9J2NsYW5nKystNS4wJyBDUFAxND0xIFZBTEdSSU5EPTEKKyAgICAgICAgICAgICAgcGFja2FnZXM6IFsnY2xhbmctNS4wJywgJ2xpYnN0ZGMrKy02LWRldiddCisgICAgICBlbnY6IENPTVBJTEVSPSdjbGFuZysrLTUuMCcgQ1BQMTQ9MQorCisgICAgLSBvczogbGludXgKKyAgICAgIGNvbXBpbGVyOiBjbGFuZworICAgICAgYWRkb25zOgorICAgICAgICAgIGFwdDoKKyAgICAgICAgICAgICAgc291cmNlczogKmFsbF9zb3VyY2VzCisgICAgICAgICAgICAgIHBhY2thZ2VzOiBbJ2NsYW5nLTYuMCcsICdsaWJzdGRjKystNi1kZXYnXQorICAgICAgZW52OiBDT01QSUxFUj0nY2xhbmcrKy02LjAnIENQUDE0PTEKIAogCiAgICAgIyA0YS8gTGludXggQysrMTQgR0NDIGJ1aWxkcwogICAgIC0gb3M6IGxpbnV4CiAgICAgICBjb21waWxlcjogZ2NjCiAgICAgICBhZGRvbnM6ICpnY2M2Ci0gICAgICBlbnY6IENPTVBJTEVSPSdnKystNicgQ1BQMTQ9MSBWQUxHUklORD0xCisgICAgICBlbnY6IENPTVBJTEVSPSdnKystNicgQ1BQMTQ9MQogCiAgICAgLSBvczogbGludXgKICAgICAgIGNvbXBpbGVyOiBnY2MKICAgICAgIGFkZG9uczogKmdjYzcKLSAgICAgIGVudjogQ09NUElMRVI9J2crKy03JyBDUFAxND0xIFZBTEdSSU5EPTEKKyAgICAgIGVudjogQ09NUElMRVI9J2crKy03JyBDUFAxND0xCisKKyAgICAtIG9zOiBsaW51eAorICAgICAgY29tcGlsZXI6IGdjYworICAgICAgYWRkb25zOiAqZ2NjOAorICAgICAgZW52OiBDT01QSUxFUj0nZysrLTgnIENQUDE0PTEKIAogICAgICMgNS8gT1NYIENsYW5nIEJ1aWxkcwogICAgIC0gb3M6IG9zeApAQCAtMTgxLDE1ICsyMDksODYgQEAKICAgICAtIG9zOiBvc3gKICAgICAgIG9zeF9pbWFnZTogeGNvZGU5LjEKICAgICAgIGNvbXBpbGVyOiBjbGFuZwotICAgICAgZW52OiBDT01QSUxFUj0nY2xhbmcrKycgVVNFX0NQUDE0PTEKKyAgICAgIGVudjogQ09NUElMRVI9J2NsYW5nKysnIENQUDE0PTEKIAorICAgICMgNi8gU3BlY2lhbCBidWlsZHMgLS0gZXhhbXBsZXMsIGNvdmVyYWdlLCB2YWxncmluZCwgZXRjLgorICAgIC0gb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogZ2NjCisgICAgICBhZGRvbnM6CisgICAgICAgIGFwdDoKKyAgICAgICAgICBzb3VyY2VzOiAqYWxsX3NvdXJjZXMKKyAgICAgICAgICBwYWNrYWdlczogWydsY292JywgJ2crKy03J10KKyAgICAgIGVudjogQ09NUElMRVI9J2crKy03JyBDUFAxND0xIEVYQU1QTEVTPTEgQ09WRVJBR0U9MSBFWFRSQVM9MQorCisgICAgLSBvczogbGludXgKKyAgICAgIGNvbXBpbGVyOiBjbGFuZworICAgICAgYWRkb25zOgorICAgICAgICBhcHQ6CisgICAgICAgICAgcGFja2FnZXM6IFsnY2xhbmctMy44JywgJ2xjb3YnXQorICAgICAgICAgIHNvdXJjZXM6CisgICAgICAgICAgICAtIHVidW50dS10b29sY2hhaW4tci10ZXN0CisgICAgICAgICAgICAtIGxsdm0tdG9vbGNoYWluLXRydXN0eQorICAgICAgZW52OiBDT01QSUxFUj0nY2xhbmcrKy0zLjgnIEVYQU1QTEVTPTEgQ09WRVJBR0U9MSBFWFRSQVM9MQorCisgICAgLSBvczogbGludXgKKyAgICAgIGNvbXBpbGVyOiBnY2MKKyAgICAgIGFkZG9uczoKKyAgICAgICAgYXB0OgorICAgICAgICAgIHNvdXJjZXM6ICphbGxfc291cmNlcworICAgICAgICAgIHBhY2thZ2VzOiBbJ3ZhbGdyaW5kJywgJ2xjb3YnLCAnZysrLTcnXQorICAgICAgZW52OiBDT01QSUxFUj0nZysrLTcnIENQUDE0PTEgVkFMR1JJTkQ9MQorCisgICAgLSBvczogb3N4CisgICAgICBvc3hfaW1hZ2U6IHhjb2RlOS4xCisgICAgICBjb21waWxlcjogY2xhbmcKKyAgICAgIGVudjogQ09NUElMRVI9J2NsYW5nKysnIENQUDE0PTEgRVhBTVBMRVM9MSBDT1ZFUkFHRT0xIEVYVFJBUz0xCisKKyAgICAjIDcvIEMrKzE3IGJ1aWxkcworICAgIC0gb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogZ2NjCisgICAgICBhZGRvbnM6ICpnY2M3CisgICAgICBlbnY6IENPTVBJTEVSPSdnKystNycgQ1BQMTc9MQorCisgICAgLSBvczogbGludXgKKyAgICAgIGNvbXBpbGVyOiBnY2MKKyAgICAgIGFkZG9uczogKmdjYzcKKyAgICAgIGVudjogQ09NUElMRVI9J2crKy03JyBFWEFNUExFUz0xIENPVkVSQUdFPTEgRVhUUkFTPTEgQ1BQMTc9MQorCisgICAgLSBvczogbGludXgKKyAgICAgIGNvbXBpbGVyOiBjbGFuZworICAgICAgYWRkb25zOgorICAgICAgICAgIGFwdDoKKyAgICAgICAgICAgICAgc291cmNlczogKmFsbF9zb3VyY2VzCisgICAgICAgICAgICAgIHBhY2thZ2VzOiBbJ2NsYW5nLTYuMCcsICdsaWJzdGRjKystOC1kZXYnXQorICAgICAgZW52OiBDT01QSUxFUj0nY2xhbmcrKy02LjAnIENQUDE3PTEKKworICAgIC0gb3M6IGxpbnV4CisgICAgICBjb21waWxlcjogY2xhbmcKKyAgICAgIGFkZG9uczoKKyAgICAgICAgICBhcHQ6CisgICAgICAgICAgICAgIHNvdXJjZXM6ICphbGxfc291cmNlcworICAgICAgICAgICAgICBwYWNrYWdlczogWydjbGFuZy02LjAnLCAnbGlic3RkYysrLTgtZGV2J10KKyAgICAgIGVudjogQ09NUElMRVI9J2NsYW5nKystNi4wJyBDUFAxNz0xIEVYQU1QTEVTPTEgQ09WRVJBR0U9MSBFWFRSQVM9MQorCisgICAgIyA4LyBDb25hbgorICAgIC0gbGFuZ3VhZ2U6IHB5dGhvbgorICAgICAgcHl0aG9uOgorICAgICAgICAtICIzLjciCisgICAgICBkaXN0OiB4ZW5pYWwKKyAgICAgIGluc3RhbGw6CisgICAgICAgIC0gcGlwIGluc3RhbGwgY29uYW49PTEuMTAuMiBjb25hbi1wYWNrYWdlLXRvb2xzCisgICAgICBlbnY6CisgICAgICAgIC0gQ09OQU5fR0NDX1ZFUlNJT05TPTgKKyAgICAgICAgLSBDT05BTl9ET0NLRVJfSU1BR0U9Y29uYW5pby9nY2M4CisgICAgICBzY3JpcHQ6CisgICAgICAgIC0gcHl0aG9uIC5jb25hbi9idWlsZC5weQogCiBpbnN0YWxsOgogICAtIERFUFNfRElSPSIke1RSQVZJU19CVUlMRF9ESVJ9L2RlcHMiCiAgIC0gbWtkaXIgLXAgJHtERVBTX0RJUn0gJiYgY2QgJHtERVBTX0RJUn0KICAgLSB8CiAgICAgaWYgW1sgIiR7VFJBVklTX09TX05BTUV9IiA9PSAibGludXgiIF1dOyB0aGVuCi0gICAgICBDTUFLRV9VUkw9Imh0dHA6Ly93d3cuY21ha2Uub3JnL2ZpbGVzL3YzLjMvY21ha2UtMy4zLjItTGludXgteDg2XzY0LnRhci5neiIKKyAgICAgIENNQUtFX1VSTD0iaHR0cDovL2NtYWtlLm9yZy9maWxlcy92My44L2NtYWtlLTMuOC4yLUxpbnV4LXg4Nl82NC50YXIuZ3oiCiAgICAgICBta2RpciBjbWFrZSAmJiB0cmF2aXNfcmV0cnkgd2dldCAtLW5vLWNoZWNrLWNlcnRpZmljYXRlIC0tcXVpZXQgLU8gLSAke0NNQUtFX1VSTH0gfCB0YXIgLS1zdHJpcC1jb21wb25lbnRzPTEgLXh6IC1DIGNtYWtlCiAgICAgICBleHBvcnQgUEFUSD0ke0RFUFNfRElSfS9jbWFrZS9iaW46JHtQQVRIfQogICAgIGVsaWYgW1sgIiR7VFJBVklTX09TX05BTUV9IiA9PSAib3N4IiBdXTsgdGhlbgpAQCAtMjAyLDI1ICszMDEsMjQgQEAKICAgIyBSZWdlbmVyYXRlIHNpbmdsZSBoZWFkZXIgZmlsZSwgc28gaXQgaXMgdGVzdGVkIGluIHRoZSBleGFtcGxlcy4uLgogICAtIHB5dGhvbiBzY3JpcHRzL2dlbmVyYXRlU2luZ2xlSGVhZGVyLnB5CiAKLSAgLSB8CiAgICAgIyBVc2UgRGVidWcgYnVpbGRzIGZvciBydW5uaW5nIFZhbGdyaW5kIGFuZCBidWlsZGluZyBleGFtcGxlcwotICAgIGNtYWtlIC1ILiAtQkJ1aWxkLURlYnVnIC1EQ01BS0VfQlVJTERfVFlQRT1EZWJ1ZyAtV2RldiAtRFVTRV9DUFAxND0ke0NQUDE0fSAtRENBVENIX1VTRV9WQUxHUklORD0ke1ZBTEdSSU5EfSAtRENBVENIX0JVSUxEX0VYQU1QTEVTPU9OIC1EQ0FUQ0hfRU5BQkxFX0NPVkVSQUdFPU9OCisgIC0gY21ha2UgLUguIC1CQnVpbGQtRGVidWcgLURDTUFLRV9CVUlMRF9UWVBFPURlYnVnIC1XZGV2IC1EVVNFX0NQUDE0PSR7Q1BQMTR9IC1EVVNFX0NQUDE3PSR7Q1BQMTd9IC1EQ0FUQ0hfVVNFX1ZBTEdSSU5EPSR7VkFMR1JJTkR9IC1EQ0FUQ0hfQlVJTERfRVhBTVBMRVM9JHtFWEFNUExFU30gLURDQVRDSF9FTkFCTEVfQ09WRVJBR0U9JHtDT1ZFUkFHRX0gLURDQVRDSF9CVUlMRF9FWFRSQV9URVNUUz0ke0VYVFJBU30KICAgICAjIERvbid0IGJvdGhlciB3aXRoIHJlbGVhc2UgYnVpbGQgZm9yIGNvdmVyYWdlIGJ1aWxkCi0gICAgY21ha2UgLUguIC1CQnVpbGQtUmVsZWFzZSAtRENNQUtFX0JVSUxEX1RZUEU9UmVsZWFzZSAtV2RldiAtRFVTRV9DUFAxND0ke0NQUDE0fQorICAtIGNtYWtlIC1ILiAtQkJ1aWxkLVJlbGVhc2UgLURDTUFLRV9CVUlMRF9UWVBFPVJlbGVhc2UgLVdkZXYgLURVU0VfQ1BQMTQ9JHtDUFAxNH0gLURVU0VfQ1BQMTc9JHtDUFAxN30KIAogCiBzY3JpcHQ6Ci0gIC0gfAotICAgIGNkIEJ1aWxkLURlYnVnCi0gICAgbWFrZSAtaiAyCi0gICAgQ1RFU1RfT1VUUFVUX09OX0ZBSUxVUkU9MSBjdGVzdCAtaiAyCisgIC0gY2QgQnVpbGQtRGVidWcKKyAgLSBtYWtlIC1qIDIKKyAgLSBDVEVTVF9PVVRQVVRfT05fRkFJTFVSRT0xIGN0ZXN0IC1qIDIKICAgICAjIENvdmVyYWdlIGNvbGxlY3Rpb24gZG9lcyBub3Qgd29yayBmb3IgT1MgWCBhdG0KLSAgICBpZiBbWyAiJHtUUkFWSVNfT1NfTkFNRX0iID09ICJsaW51eCIgXV07IHRoZW4KKyAgLSB8CisgICAgaWYgW1sgIiR7VFJBVklTX09TX05BTUV9IiA9PSAibGludXgiIF1dICYmIFtbICIke0NPVkVSQUdFfSIgPT0gIjEiIF1dOyB0aGVuCiAgICAgICBtYWtlIGdjb3YKICAgICAgIG1ha2UgbGNvdgogICAgICAgYmFzaCA8KGN1cmwgLXMgaHR0cHM6Ly9jb2RlY292LmlvL2Jhc2gpIC1YIGdjb3YgfHwgZWNobyAiQ29kZWNvdiBkaWQgbm90IGNvbGxlY3QgY292ZXJhZ2UgcmVwb3J0cyIKICAgICBmaQotICAgICMgR28gdG8gcmVsZWFzZSBidWlsZAotICAgIGNkIC4uL0J1aWxkLVJlbGVhc2UKLSAgICBtYWtlIC1qIDIKLSAgICBDVEVTVF9PVVRQVVRfT05fRkFJTFVSRT0xIGN0ZXN0IC1qIDIKKyAgLSAjIEdvIHRvIHJlbGVhc2UgYnVpbGQKKyAgLSBjZCAuLi9CdWlsZC1SZWxlYXNlCisgIC0gbWFrZSAtaiAyCisgIC0gQ1RFU1RfT1VUUFVUX09OX0ZBSUxVUkU9MSBjdGVzdCAtaiAyCmRpZmYgLS1naXQgYS9BbmRyb2lkLmJwIGIvQW5kcm9pZC5icAppbmRleCA0MmRmOWQ2Li40ODUyY2YwIDEwMDY0NAotLS0gYS9BbmRyb2lkLmJwCisrKyBiL0FuZHJvaWQuYnAKQEAgLTE4LDYgKzE4LDcgQEAKICAgICBsb2NhbF9pbmNsdWRlX2RpcnM6IFsiaW5jbHVkZSJdLCAgLy8gY2NfdGVzdCBpZ25vcmVzIGV4cG9ydF9pbmNsdWRlX2RpcnMKICAgICBleHBvcnRfaW5jbHVkZV9kaXJzOiBbImluY2x1ZGUiXSwKICAgICBzcmNzOiBbImluY2x1ZGUvKiovKi5jcHAiXSwKKyAgICBleGNsdWRlX3NyY3M6IFsiaW5jbHVkZS9jYXRjaF93aXRoX21haW4uY3BwIl0sCiB9CiAKIC8vICEhISBJTVBPUlRBTlQ6IFVzZSAnd2hvbGVfc3RhdGljX2xpYnMnIG9yIHRoZSBsaW5rZXIgd2lsbCBkZWFkLWNvZGUtZWxpbWluYXRlCkBAIC0zMyw5ICszNCw3IEBACiAgICAgICAgICJsaWJjYXRjaDItZGVmYXVsdHMiLAogICAgIF0sCiAgICAgc3JjczogWwotICAgICAgICAvLyBjYW5ub3QgdXNlIGNhdGNoX3dpdGhfbWFpbi5ocHAgYXMgbWFpbiwgc29vbmcgZXJyb3JzIHdpdGggImhhcyB1bmtub3duIGV4dGVuc2lvbiIKLSAgICAgICAgLy8gImluY2x1ZGUvY2F0Y2hfd2l0aF9tYWluLmhwcCIsCi0gICAgICAgICJleGFtcGxlcy8wMDAtQ2F0Y2hNYWluLmNwcCIsCisgICAgICAgICJpbmNsdWRlL2NhdGNoX3dpdGhfbWFpbi5jcHAiLAogICAgIF0sCiB9CiAKQEAgLTQ2LDYgKzQ1LDcgQEAKICAgICBkZWZhdWx0czogWwogICAgICAgICAibGliY2F0Y2gyLWRlZmF1bHRzIiwKICAgICBdLAorICAgIGNmbGFnczogWyItRENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMiXSwKIH0KIAogLy8gVGhpcyBydWxlIGNhbiBiZSB1c2VkIGJ5IG90aGVyIGV4dGVybmFsLyBwcm9qZWN0cyB0aGF0IGRlcGVuZCBvbiBjYXRjaDIKQEAgLTU1LDcgKzU1LDYgQEAKICAgICBkZWZhdWx0czogWwogICAgICAgICAibGliY2F0Y2gyLWRlZmF1bHRzIiwKICAgICBdLAotICAgIHJ0dGk6IHRydWUsCiAgICAgY2ZsYWdzOiBbIi1mZXhjZXB0aW9ucyJdLAogfQogCkBAIC03NCw3ICs3Myw3IEBACiAgICAgXSwKIH0KIAotLy8gVXBzdHJlYW0gY29uZmlnOiBSVFRJIGFuZCBleGNlcHRpb25zIGFyZSBlbmFibGVkLgorLy8gVXBzdHJlYW0gY29uZmlnOiBFeGNlcHRpb25zIGFyZSBlbmFibGVkLgogLy8gVGhpcyBzaG91bGQgYmUgdmFsaWRhdGVkIGZpcnN0IGFmdGVyIGFuIHVwc3RyZWFtIG1lcmdlLgogY2NfdGVzdCB7CiAgICAgbmFtZTogImxpYmNhdGNoMi10ZXN0cy11cHN0cmVhbSIsCkBAIC04Myw3ICs4Miw2IEBACiAgICAgXSwKIAogICAgIGd0ZXN0OiBmYWxzZSwKLSAgICBydHRpOiB0cnVlLAogICAgIGNmbGFnczogWyItZmV4Y2VwdGlvbnMiXSwKIAogICAgIHdob2xlX3N0YXRpY19saWJzOiBbCkBAIC05MSwxMyArODksMTcgQEAKICAgICBdLAogfQogCi0vLyBBbmRyb2lkIGNvbmZpZzogUlRUSSBhbmQgZXhjZXB0aW9ucyBhcmUgZGlzYWJsZWQuCisvLyBBbmRyb2lkIGNvbmZpZzogRXhjZXB0aW9ucyBhcmUgZGlzYWJsZWQuCiAvLyBUaGlzIHNob3VsZCBiZSB2YWxpZGF0ZWQgc2Vjb25kIGFmdGVyIGFuIHVwc3RyZWFtIG1lcmdlLgogY2NfdGVzdCB7CiAgICAgbmFtZTogImxpYmNhdGNoMi10ZXN0cyIsCiAgICAgZGVmYXVsdHM6IFsKICAgICAgICAgImxpYmNhdGNoMi1kZWZhdWx0cy10ZXN0cyIsCiAgICAgXSwKKyAgICBjZmxhZ3M6IFsKKyAgICAgICAgIi1EQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUyIsCisgICAgICAgICItV25vLXVudXNlZC1mdW5jdGlvbiIsCisgICAgXSwKICAgICBndGVzdDogZmFsc2UsCiAgICAgd2hvbGVfc3RhdGljX2xpYnM6IFsKICAgICAgICAgImxpYmNhdGNoMiIsCmRpZmYgLS1naXQgYS9DTWFrZS9DYXRjaDJDb25maWcuY21ha2UuaW4gYi9DTWFrZS9DYXRjaDJDb25maWcuY21ha2UuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ4NTIxOQotLS0gL2Rldi9udWxsCisrKyBiL0NNYWtlL0NhdGNoMkNvbmZpZy5jbWFrZS5pbgpAQCAtMCwwICsxLDEwIEBACitAUEFDS0FHRV9JTklUQAorCisKKyMgQXZvaWQgcmVwZWF0ZWRseSBpbmNsdWRpbmcgdGhlIHRhcmdldHMKK2lmKE5PVCBUQVJHRVQgQ2F0Y2gyOjpDYXRjaDIpCisgICAgIyBQcm92aWRlIHBhdGggZm9yIHNjcmlwdHMKKyAgICBsaXN0KEFQUEVORCBDTUFLRV9NT0RVTEVfUEFUSCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfSIpCisKKyAgICBpbmNsdWRlKCR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ2F0Y2gyVGFyZ2V0cy5jbWFrZSkKK2VuZGlmKCkKZGlmZiAtLWdpdCBhL0NNYWtlL01pc2NGdW5jdGlvbnMuY21ha2UgYi9DTWFrZS9NaXNjRnVuY3Rpb25zLmNtYWtlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2MmY3Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9DTWFrZS9NaXNjRnVuY3Rpb25zLmNtYWtlCkBAIC0wLDAgKzEsMjYgQEAKKyNjaGVja3MgdGhhdCB0aGUgZ2l2ZW4gaGFyZC1jb2RlZCBsaXN0IGNvbnRhaW5zIGFsbCBoZWFkZXJzICsgc291cmNlcyBpbiB0aGUgZ2l2ZW4gZm9sZGVyCitmdW5jdGlvbihDaGVja0ZpbGVMaXN0IExJU1RfVkFSIEZPTERFUikKKyAgc2V0KE1FU1NBR0UgIiBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHZhcmlhYmxlICR7TElTVF9WQVJ9IikKKyAgc2V0KE1FU1NBR0UgIiR7TUVTU0FHRX0gaW4gJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX1cbiIpCisgIGZpbGUoR0xPQiBHTE9CQkVEX0xJU1QgIiR7Rk9MREVSfS8qLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiJHtGT0xERVJ9LyouaHBwIgorICAgICAgICAgICAgICAgICAgICAgICAgICIke0ZPTERFUn0vKi5oIikKKyAgbGlzdChSRU1PVkVfSVRFTSBHTE9CQkVEX0xJU1QgJHske0xJU1RfVkFSfX0pCisgIGZvcmVhY2goRVhUUkFfSVRFTSAke0dMT0JCRURfTElTVH0pCisgICAgc3RyaW5nKFJFUExBQ0UgIiR7Q0FUQ0hfRElSfS8iICIiIFJFTEFUSVZFX0ZJTEVfTkFNRSAiJHtFWFRSQV9JVEVNfSIpCisgICAgbWVzc2FnZShBVVRIT1JfV0FSTklORyAiVGhlIGZpbGUgXCIke1JFTEFUSVZFX0ZJTEVfTkFNRX1cIiR7TUVTU0FHRX0iKQorICBlbmRmb3JlYWNoKCkKK2VuZGZ1bmN0aW9uKCkKKworZnVuY3Rpb24oQ2hlY2tGaWxlTGlzdFJlYyBMSVNUX1ZBUiBGT0xERVIpCisgIHNldChNRVNTQUdFICIgc2hvdWxkIGJlIGFkZGVkIHRvIHRoZSB2YXJpYWJsZSAke0xJU1RfVkFSfSIpCisgIHNldChNRVNTQUdFICIke01FU1NBR0V9IGluICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0ZJTEV9XG4iKQorICBmaWxlKEdMT0JfUkVDVVJTRSBHTE9CQkVEX0xJU1QgIiR7Rk9MREVSfS8qLmNwcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIke0ZPTERFUn0vKi5ocHAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJHtGT0xERVJ9LyouaCIpCisgIGxpc3QoUkVNT1ZFX0lURU0gR0xPQkJFRF9MSVNUICR7JHtMSVNUX1ZBUn19KQorICBmb3JlYWNoKEVYVFJBX0lURU0gJHtHTE9CQkVEX0xJU1R9KQorICAgIHN0cmluZyhSRVBMQUNFICIke0NBVENIX0RJUn0vIiAiIiBSRUxBVElWRV9GSUxFX05BTUUgIiR7RVhUUkFfSVRFTX0iKQorICAgIG1lc3NhZ2UoQVVUSE9SX1dBUk5JTkcgIlRoZSBmaWxlIFwiJHtSRUxBVElWRV9GSUxFX05BTUV9XCIke01FU1NBR0V9IikKKyAgZW5kZm9yZWFjaCgpCitlbmRmdW5jdGlvbigpCmRpZmYgLS1naXQgYS9DTWFrZS9jYXRjaDIucGMuaW4gYi9DTWFrZS9jYXRjaDIucGMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FjOWZiZAotLS0gL2Rldi9udWxsCisrKyBiL0NNYWtlL2NhdGNoMi5wYy5pbgpAQCAtMCwwICsxLDcgQEAKK2luY2x1ZGVkaXI9QENNQUtFX0lOU1RBTExfRlVMTF9JTkNMVURFRElSQAorCitOYW1lOiBDYXRjaDIKK0Rlc2NyaXB0aW9uOiBBIG1vZGVybiwgQysrLW5hdGl2ZSwgaGVhZGVyLW9ubHksIHRlc3QgZnJhbWV3b3JrIGZvciBDKysxMQorVVJMOiBodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyCitWZXJzaW9uOiBAQ2F0Y2gyX1ZFUlNJT05ACitDZmxhZ3M6IC1JJHtpbmNsdWRlZGlyfQpkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4dAppbmRleCAxOTQ3MmRlLi5lYTM1ZDI0IDEwMDY0NAotLS0gYS9DTWFrZUxpc3RzLnR4dAorKysgYi9DTWFrZUxpc3RzLnR4dApAQCAtMSw0ICsxLDQgQEAKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjApCitjbWFrZV9taW5pbXVtX3JlcXVpcmVkKFZFUlNJT04gMy41KQogCiAjIGRldGVjdCBpZiBDYXRjaCBpcyBiZWluZyBidW5kbGVkLAogIyBkaXNhYmxlIHRlc3RzdWl0ZSBpbiB0aGF0IGNhc2UKQEAgLTYsMTQgKzYsMjQgQEAKICAgc2V0KE5PVF9TVUJQUk9KRUNUIE9OKQogZW5kaWYoKQogCi1wcm9qZWN0KENhdGNoMiBMQU5HVUFHRVMgQ1hYIFZFUlNJT04gMi4xLjEpCitwcm9qZWN0KENhdGNoMiBMQU5HVUFHRVMgQ1hYIFZFUlNJT04gMi43LjApCisKKyMgUHJvdmlkZSBwYXRoIGZvciBzY3JpcHRzCitsaXN0KEFQUEVORCBDTUFLRV9NT0RVTEVfUEFUSCAiJHtDTUFLRV9DVVJSRU5UX0xJU1RfRElSfS9DTWFrZSIpCiAKIGluY2x1ZGUoR05VSW5zdGFsbERpcnMpCitpbmNsdWRlKENNYWtlUGFja2FnZUNvbmZpZ0hlbHBlcnMpCitpbmNsdWRlKENUZXN0KQogCiBvcHRpb24oQ0FUQ0hfVVNFX1ZBTEdSSU5EICJQZXJmb3JtIFNlbGZUZXN0cyB3aXRoIFZhbGdyaW5kIiBPRkYpCitvcHRpb24oQ0FUQ0hfQlVJTERfVEVTVElORyAiQnVpbGQgU2VsZlRlc3QgcHJvamVjdCIgT04pCiBvcHRpb24oQ0FUQ0hfQlVJTERfRVhBTVBMRVMgIkJ1aWxkIGRvY3VtZW50YXRpb24gZXhhbXBsZXMiIE9GRikKK29wdGlvbihDQVRDSF9CVUlMRF9FWFRSQV9URVNUUyAiQnVpbGQgZXh0cmEgdGVzdHMiIE9GRikKIG9wdGlvbihDQVRDSF9FTkFCTEVfQ09WRVJBR0UgIkdlbmVyYXRlIGNvdmVyYWdlIGZvciBjb2RlY292LmlvIiBPRkYpCiBvcHRpb24oQ0FUQ0hfRU5BQkxFX1dFUlJPUiAiRW5hYmxlIGFsbCB3YXJuaW5ncyBhcyBlcnJvcnMiIE9OKQorb3B0aW9uKENBVENIX0lOU1RBTExfRE9DUyAiSW5zdGFsbCBkb2N1bWVudGF0aW9uIGFsb25nc2lkZSBsaWJyYXJ5IiBPTikKK29wdGlvbihDQVRDSF9JTlNUQUxMX0hFTFBFUlMgIkluc3RhbGwgY29udHJpYiBhbG9uZ3NpZGUgbGlicmFyeSIgT04pCisKIAogc2V0X3Byb3BlcnR5KEdMT0JBTCBQUk9QRVJUWSBVU0VfRk9MREVSUyBPTikKIApAQCAtMjcsMzgxICszNywxNzIgQEAKICAgICBzZXQoQ01BS0VfRVhFX0xJTktFUl9GTEFHUyAiJHtDTUFLRV9FWEVfTElOS0VSX0ZMQUdTfSAvRU5UUlk6d21haW5DUlRTdGFydHVwIikKIGVuZGlmKCkKIAotI2NoZWNrcyB0aGF0IHRoZSBnaXZlbiBoYXJkLWNvZGVkIGxpc3QgY29udGFpbnMgYWxsIGhlYWRlcnMgKyBzb3VyY2VzIGluIHRoZSBnaXZlbiBmb2xkZXIKLWZ1bmN0aW9uKENoZWNrRmlsZUxpc3QgTElTVF9WQVIgRk9MREVSKQotICBzZXQoTUVTU0FHRSAiIHNob3VsZCBiZSBhZGRlZCB0byB0aGUgdmFyaWFibGUgJHtMSVNUX1ZBUn0iKQotICBzZXQoTUVTU0FHRSAiJHtNRVNTQUdFfSBpbiAke0NNQUtFX0NVUlJFTlRfTElTVF9GSUxFfVxuIikKLSAgZmlsZShHTE9CIEdMT0JCRURfTElTVCAiJHtGT0xERVJ9LyouY3BwIgotICAgICAgICAgICAgICAgICAgICAgICAgICIke0ZPTERFUn0vKi5ocHAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgIiR7Rk9MREVSfS8qLmgiKQotICBsaXN0KFJFTU9WRV9JVEVNIEdMT0JCRURfTElTVCAkeyR7TElTVF9WQVJ9fSkKLSAgZm9yZWFjaChFWFRSQV9JVEVNICR7R0xPQkJFRF9MSVNUfSkKLSAgICBzdHJpbmcoUkVQTEFDRSAiJHtDQVRDSF9ESVJ9LyIgIiIgUkVMQVRJVkVfRklMRV9OQU1FICIke0VYVFJBX0lURU19IikKLSAgICBtZXNzYWdlKEFVVEhPUl9XQVJOSU5HICJUaGUgZmlsZSBcIiR7UkVMQVRJVkVfRklMRV9OQU1FfVwiJHtNRVNTQUdFfSIpCi0gIGVuZGZvcmVhY2goKQotZW5kZnVuY3Rpb24oKQotCi1mdW5jdGlvbihDaGVja0ZpbGVMaXN0UmVjIExJU1RfVkFSIEZPTERFUikKLSAgc2V0KE1FU1NBR0UgIiBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIHZhcmlhYmxlICR7TElTVF9WQVJ9IikKLSAgc2V0KE1FU1NBR0UgIiR7TUVTU0FHRX0gaW4gJHtDTUFLRV9DVVJSRU5UX0xJU1RfRklMRX1cbiIpCi0gIGZpbGUoR0xPQl9SRUNVUlNFIEdMT0JCRURfTElTVCAiJHtGT0xERVJ9LyouY3BwIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiR7Rk9MREVSfS8qLmhwcCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIke0ZPTERFUn0vKi5oIikKLSAgbGlzdChSRU1PVkVfSVRFTSBHTE9CQkVEX0xJU1QgJHske0xJU1RfVkFSfX0pCi0gIGZvcmVhY2goRVhUUkFfSVRFTSAke0dMT0JCRURfTElTVH0pCi0gICAgc3RyaW5nKFJFUExBQ0UgIiR7Q0FUQ0hfRElSfS8iICIiIFJFTEFUSVZFX0ZJTEVfTkFNRSAiJHtFWFRSQV9JVEVNfSIpCi0gICAgbWVzc2FnZShBVVRIT1JfV0FSTklORyAiVGhlIGZpbGUgXCIke1JFTEFUSVZFX0ZJTEVfTkFNRX1cIiR7TUVTU0FHRX0iKQotICBlbmRmb3JlYWNoKCkKLWVuZGZ1bmN0aW9uKCkKLQotIyBkZWZpbmUgdGhlIHNvdXJjZXMgb2YgdGhlIHNlbGYgdGVzdAotIyBQbGVhc2Uga2VlcCB0aGVzZSBvcmRlcmVkIGFscGhhYmV0aWNhbGx5Ci1zZXQoVEVTVF9TT1VSQ0VTCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vVGVzdE1haW4uY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcAotICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L0ludHJvc3BlY3RpdmVUZXN0cy9UYWdBbGlhcy50ZXN0cy5jcHAKLSAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcAotICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9CREQudGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9CZW5jaG1hcmsudGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAKLSAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9Vc2FnZVRlc3RzL0NvbXBpbGF0aW9uLnRlc3RzLmNwcAotICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvQ29uZGl0aW9uLnRlc3RzLmNwcAotICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvRGVjb21wb3NpdGlvbi50ZXN0cy5jcHAKLSAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9Vc2FnZVRlc3RzL0VudW1Ub1N0cmluZy50ZXN0cy5jcHAKLSAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAKLSAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcAotICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvVG9TdHJpbmdDaHJvbm8udGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9Ub1N0cmluZ1BhaXIudGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9Ub1N0cmluZ1R1cGxlLnRlc3RzLmNwcAotICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcAotICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcAotICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvVmFyaWFkaWNNYWNyb3MudGVzdHMuY3BwCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAKLSAgICAgICAgKQotQ2hlY2tGaWxlTGlzdChURVNUX1NPVVJDRVMgJHtTRUxGX1RFU1RfRElSfSkKLQotIyBBIHNldCBvZiBpbXBsIGZpbGVzIHRoYXQganVzdCAjaW5jbHVkZSBhIHNpbmdsZSBoZWFkZXIKLSMgUGxlYXNlIGtlZXAgdGhlc2Ugb3JkZXJlZCBhbHBoYWJldGljYWxseQotc2V0KFNVUlJPR0FURV9TT1VSQ0VTCi0gICAgICAgICR7U0VMRl9URVNUX0RJUn0vU3Vycm9nYXRlQ3Bwcy9jYXRjaF9jb25zb2xlX2NvbG91ci5jcHAKLSAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9TdXJyb2dhdGVDcHBzL2NhdGNoX2RlYnVnZ2VyLmNwcAotICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1N1cnJvZ2F0ZUNwcHMvY2F0Y2hfaW50ZXJmYWNlc19yZXBvcnRlci5jcHAKLSAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9TdXJyb2dhdGVDcHBzL2NhdGNoX29wdGlvbi5jcHAKLSAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9TdXJyb2dhdGVDcHBzL2NhdGNoX3N0cmVhbS5jcHAKLSAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9TdXJyb2dhdGVDcHBzL2NhdGNoX3Rlc3RfY2FzZV90cmFja2VyLmNwcAotICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1N1cnJvZ2F0ZUNwcHMvY2F0Y2hfdGVzdF9zcGVjLmNwcAotICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1N1cnJvZ2F0ZUNwcHMvY2F0Y2hfeG1sd3JpdGVyLmNwcAotICAgICAgICApCi1DaGVja0ZpbGVMaXN0KFNVUlJPR0FURV9TT1VSQ0VTICR7U0VMRl9URVNUX0RJUn0vU3Vycm9nYXRlQ3BwcykKLQotCi0jIFBsZWFzZSBrZWVwIHRoZXNlIG9yZGVyZWQgYWxwaGFiZXRpY2FsbHkKLXNldChUT1BfTEVWRUxfSEVBREVSUwotICAgICAgICAke0hFQURFUl9ESVJ9L2NhdGNoLmhwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2NhdGNoX3dpdGhfbWFpbi5ocHAKLSAgICAgICAgKQotQ2hlY2tGaWxlTGlzdChUT1BfTEVWRUxfSEVBREVSUyAke0hFQURFUl9ESVJ9KQotCi0jIFBsZWFzZSBrZWVwIHRoZXNlIG9yZGVyZWQgYWxwaGFiZXRpY2FsbHkKLXNldChFWFRFUk5BTF9IRUFERVJTCi0gICAgICAgICR7SEVBREVSX0RJUn0vZXh0ZXJuYWwvY2xhcmEuaHBwCi0gICAgICAgICkKLUNoZWNrRmlsZUxpc3QoRVhURVJOQUxfSEVBREVSUyAke0hFQURFUl9ESVJ9L2V4dGVybmFsKQotCi0KLSMgUGxlYXNlIGtlZXAgdGhlc2Ugb3JkZXJlZCBhbHBoYWJldGljYWxseQotc2V0KElOVEVSTkFMX0hFQURFUlMKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9hcHByb3guaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2Fzc2VydGlvbmhhbmRsZXIuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2Fzc2VydGlvbmluZm8uaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2Fzc2VydGlvbnJlc3VsdC5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfY2FwdHVyZS5ocHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9jYXB0dXJlX21hdGNoZXJzLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9jbGFyYS5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfY29tbWFuZGxpbmUuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2NvbW1vbi5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfY29tcGlsZXJfY2FwYWJpbGl0aWVzLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9jb25maWcuaHBwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfY29uc29sZV9jb2xvdXIuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2NvbnRleHQuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2RlYnVnX2NvbnNvbGUuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2RlYnVnZ2VyLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9kZWNvbXBvc2VyLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9kZWZhdWx0X21haW4uaHBwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfZW5mb3JjZS5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfZXJybm9fZ3VhcmQuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2V4Y2VwdGlvbl90cmFuc2xhdG9yX3JlZ2lzdHJ5LmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9leHRlcm5hbF9pbnRlcmZhY2VzLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9mYXRhbF9jb25kaXRpb24uaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ltcGwuaHBwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jYXB0dXJlLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2NvbmZpZy5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19leGNlcHRpb24uaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcmVnaXN0cnlfaHViLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3JlcG9ydGVyLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3J1bm5lci5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc190YWdfYWxpYXNfcmVnaXN0cnkuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfdGVzdGNhc2UuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2xlYWtfZGV0ZWN0b3IuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2xpc3QuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX21hdGNoZXJzLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVyc19mbG9hdGluZy5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfc3RyaW5nLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVyc192ZWN0b3IuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX21lc3NhZ2UuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX29iamMuaHBwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfb2JqY19hcmMuaHBwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfb3B0aW9uLmhwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3BsYXRmb3JtLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfcmVlbmFibGVfd2FybmluZ3MuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3JlcG9ydGVyX3JlZ2lzdHJhcnMuaHBwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfcmVwb3J0ZXJfcmVnaXN0cnkuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3Jlc3VsdF90eXBlLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9ydW5fY29udGV4dC5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfYmVuY2htYXJrLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zZWN0aW9uLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zZWN0aW9uX2luZm8uaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3Nlc3Npb24uaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3N0YXJ0dXBfZXhjZXB0aW9uX3JlZ2lzdHJ5LmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zdHJlYW0uaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3N0cmluZ3JlZi5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfc3RyaW5nX21hbmlwLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zdXBwcmVzc193YXJuaW5ncy5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdGFnX2FsaWFzLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90YWdfYWxpYXNfYXV0b3JlZ2lzdHJhci5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdGFnX2FsaWFzX3JlZ2lzdHJ5LmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfaW5mby5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX3JlZ2lzdHJ5X2ltcGwuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV90cmFja2VyLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90ZXN0X3JlZ2lzdHJ5LmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90ZXN0X3NwZWMuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3Rlc3Rfc3BlY19wYXJzZXIuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3RleHQuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3RpbWVyLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90b3N0cmluZy5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdG90YWxzLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF91bmNhdWdodF9leGNlcHRpb25zLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF91c2VyX2ludGVyZmFjZXMuaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3ZlcnNpb24uaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3dpbGRjYXJkX3BhdHRlcm4uaAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3dpbmRvd3NfaF9wcm94eS5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfeG1sd3JpdGVyLmgKLSAgICAgICAgKQotc2V0KElNUExfU09VUkNFUwotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2FwcHJveC5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9hc3NlcnRpb25oYW5kbGVyLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2Fzc2VydGlvbnJlc3VsdC5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9iZW5jaG1hcmsuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfY2FwdHVyZV9tYXRjaGVycy5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9jb21tYW5kbGluZS5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9jb21tb24uY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfY29uZmlnLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2NvbnNvbGVfY29sb3VyLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2NvbnRleHQuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfZGVidWdfY29uc29sZS5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9kZWJ1Z2dlci5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9kZWNvbXBvc2VyLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2Vycm5vX2d1YXJkLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2V4Y2VwdGlvbl90cmFuc2xhdG9yX3JlZ2lzdHJ5LmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ZhdGFsX2NvbmRpdGlvbi5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2NhcHR1cmUuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jb25maWcuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19leGNlcHRpb24uY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19yZWdpc3RyeV9odWIuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19ydW5uZXIuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc190ZXN0Y2FzZS5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9saXN0LmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2xlYWtfZGV0ZWN0b3IuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnMuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfZmxvYXRpbmcuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfc3RyaW5nLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX21lc3NhZ2UuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfcmVnaXN0cnlfaHViLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcmVwb3J0ZXIuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfcmVwb3J0ZXJfcmVnaXN0cnkuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfcmVzdWx0X3R5cGUuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfcnVuX2NvbnRleHQuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbi5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zZWN0aW9uX2luZm8uY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfc2Vzc2lvbi5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zdGFydHVwX2V4Y2VwdGlvbl9yZWdpc3RyeS5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zdHJlYW0uY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfc3RyaW5ncmVmLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3N0cmluZ19tYW5pcC5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90YWdfYWxpYXMuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdGFnX2FsaWFzX2F1dG9yZWdpc3RyYXIuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdGFnX2FsaWFzX3JlZ2lzdHJ5LmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV9pbmZvLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV9yZWdpc3RyeV9pbXBsLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV90cmFja2VyLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3Rlc3RfcmVnaXN0cnkuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdGVzdF9zcGVjLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3Rlc3Rfc3BlY19wYXJzZXIuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdGltZXIuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdG9zdHJpbmcuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdG90YWxzLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3VuY2F1Z2h0X2V4Y2VwdGlvbnMuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdmVyc2lvbi5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF93aWxkY2FyZF9wYXR0ZXJuLmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3htbHdyaXRlci5jcHAKLSAgICAgICAgKQotc2V0KElOVEVSTkFMX0ZJTEVTICR7SU1QTF9TT1VSQ0VTfSAke0lOVEVSTkFMX0hFQURFUlN9KQotQ2hlY2tGaWxlTGlzdChJTlRFUk5BTF9GSUxFUyAke0hFQURFUl9ESVJ9L2ludGVybmFsKQotCi0jIFBsZWFzZSBrZWVwIHRoZXNlIG9yZGVyZWQgYWxwaGFiZXRpY2FsbHkKLXNldChSRVBPUlRFUl9IRUFERVJTCi0gICAgICAgICR7SEVBREVSX0RJUn0vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2F1dG9tYWtlLmhwcAotICAgICAgICAke0hFQURFUl9ESVJ9L3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9iYXNlcy5ocHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfY29tcGFjdC5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2NvbnNvbGUuaAotICAgICAgICAke0hFQURFUl9ESVJ9L3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9qdW5pdC5oCi0gICAgICAgICR7SEVBREVSX0RJUn0vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX211bHRpLmgKLSAgICAgICAgJHtIRUFERVJfRElSfS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfdGFwLmhwcAotICAgICAgICAke0hFQURFUl9ESVJ9L3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl90ZWFtY2l0eS5ocHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfeG1sLmgKLSAgICAgICAgKQotc2V0KFJFUE9SVEVSX1NPVVJDRVMKLSAgICAgICAgJHtIRUFERVJfRElSfS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfYmFzZXMuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2NvbXBhY3QuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2NvbnNvbGUuY3BwCi0gICAgICAgICR7SEVBREVSX0RJUn0vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2p1bml0LmNwcAotICAgICAgICAke0hFQURFUl9ESVJ9L3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9tdWx0aS5jcHAKLSAgICAgICAgJHtIRUFERVJfRElSfS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfeG1sLmNwcAotICAgICAgICApCi1zZXQoUkVQT1JURVJfRklMRVMgJHtSRVBPUlRFUl9IRUFERVJTfSAke1JFUE9SVEVSX1NPVVJDRVN9KQotQ2hlY2tGaWxlTGlzdChSRVBPUlRFUl9GSUxFUyAke0hFQURFUl9ESVJ9L3JlcG9ydGVycykKLQotIyBTcGVjaWZ5IHRoZSBoZWFkZXJzLCB0b28sIHNvIENMaW9uIHJlY29nbmlzZXMgdGhlbSBhcyBwcm9qZWN0IGZpbGVzCi1zZXQoSEVBREVSUwotICAgICAgICAke1RPUF9MRVZFTF9IRUFERVJTfQotICAgICAgICAke0VYVEVSTkFMX0hFQURFUlN9Ci0gICAgICAgICR7SU5URVJOQUxfSEVBREVSU30KLSAgICAgICAgJHtSRVBPUlRFUl9IRUFERVJTfQotICAgICAgICApCi0KLSMgUHJvdmlkZSBzb21lIGdyb3VwaW5ncyBmb3IgSURFcwotU09VUkNFX0dST1VQKCJUZXN0cyIgRklMRVMgJHtURVNUX1NPVVJDRVN9KQotU09VUkNFX0dST1VQKCJTdXJyb2dhdGVzIiBGSUxFUyAke1NVUlJPR0FURV9TT1VSQ0VTfSkKLQotCi0jIFByb2plY3RzIGNvbnN1bWluZyBDYXRjaCB2aWEgRXh0ZXJuYWxQcm9qZWN0X0FkZCBtaWdodCB3YW50IHRvIHVzZSBpbnN0YWxsIHN0ZXAKLSMgd2l0aG91dCBidWlsZGluZyBhbGwgb2Ygb3VyIHNlbGZ0ZXN0cy4KLQotaWYoREVGSU5FRCBOT19TRUxGVEVTVCkKLSAgICBtZXNzYWdlKERFUFJFQ0FUSU9OICIqKiogQ01ha2Ugb3B0aW9uIE5PX1NFTEZURVNUIGlzIGRlcHJlY2F0ZWQ7IHVzZSBCVUlMRF9URVNUSU5HIGluc3RlYWQiKQotICAgIGlmIChOT19TRUxGVEVTVCkKLSAgICAgICAgc2V0KEJVSUxEX1RFU1RJTkcgT0ZGIENBQ0hFIEJPT0wgIkRpc2FibGUgQ2F0Y2gyIGludGVybmFsIHRlc3RzdWl0ZSIgRk9SQ0UpCi0gICAgZWxzZSgpCi0gICAgICAgIHNldChCVUlMRF9URVNUSU5HIE9OIENBQ0hFIEJPT0wgIkRpc2FibGUgQ2F0Y2gyIGludGVybmFsIHRlc3RzdWl0ZSIgRk9SQ0UpCitpZiAoQlVJTERfVEVTVElORyBBTkQgQ0FUQ0hfQlVJTERfVEVTVElORyBBTkQgTk9UX1NVQlBST0pFQ1QpCisgICAgZmluZF9wYWNrYWdlKFB5dGhvbkludGVycCkKKyAgICBpZiAoTk9UIFBZVEhPTklOVEVSUF9GT1VORCkKKyAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiUHl0aG9uIG5vdCBmb3VuZCwgYnV0IHJlcXVpcmVkIGZvciB0ZXN0cyIpCiAgICAgZW5kaWYoKQorICAgIGFkZF9zdWJkaXJlY3RvcnkocHJvamVjdHMpCiBlbmRpZigpCiAKLWluY2x1ZGUoQ1Rlc3QpCi0KLWlmIChCVUlMRF9URVNUSU5HIEFORCBOT1RfU1VCUFJPSkVDVCkKLSAgICBhZGRfZXhlY3V0YWJsZShTZWxmVGVzdCAke1RFU1RfU09VUkNFU30gJHtJTVBMX1NPVVJDRVN9ICR7UkVQT1JURVJfU09VUkNFU30gJHtTVVJST0dBVEVfU09VUkNFU30gJHtIRUFERVJTfSkKLSAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhTZWxmVGVzdCBQUklWQVRFICR7SEVBREVSX0RJUn0pCi0KLSAgICBpZihVU0VfQ1BQMTQpCi0gICAgICAgIG1lc3NhZ2UoU1RBVFVTICJFbmFibGluZyBDKysxNCIpCi0gICAgICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgU2VsZlRlc3QgUFJPUEVSVFkgQ1hYX1NUQU5EQVJEIDE0KQotICAgIGVsc2UoKQotICAgICAgICBtZXNzYWdlKFNUQVRVUyAiRW5hYmxpbmcgQysrMTEiKQotICAgICAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFNlbGZUZXN0IFBST1BFUlRZIENYWF9TVEFOREFSRCAxMSkKLSAgICBlbmRpZigpCi0KLSAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFNlbGZUZXN0IFBST1BFUlRZIENYWF9TVEFOREFSRF9SRVFVSVJFRCBPTikKLSAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFNlbGZUZXN0IFBST1BFUlRZIENYWF9FWFRFTlNJT05TIE9GRikKLQotICAgIGlmIChDQVRDSF9FTkFCTEVfQ09WRVJBR0UpCi0gICAgICAgIHNldChFTkFCTEVfQ09WRVJBR0UgT04gQ0FDSEUgQk9PTCAiRW5hYmxlIGNvdmVyYWdlIGJ1aWxkLiIgRk9SQ0UpCi0gICAgICAgIGxpc3QoQVBQRU5EIENNQUtFX01PRFVMRV9QQVRIICIke0NNQUtFX0NVUlJFTlRfTElTVF9ESVJ9L0NNYWtlIikKLSAgICAgICAgZmluZF9wYWNrYWdlKGNvZGVjb3YpCi0gICAgICAgIGFkZF9jb3ZlcmFnZShTZWxmVGVzdCkKLSAgICAgICAgbGlzdChBUFBFTkQgTENPVl9SRU1PVkVfUEFUVEVSTlMgIicvdXNyLyonIikKLSAgICAgICAgY292ZXJhZ2VfZXZhbHVhdGUoKQotICAgIGVuZGlmKCkKLQotICAgICMgQWRkIGRlc2lyZWQgd2FybmluZ3MKLSAgICBpZiAoIENNQUtFX0NYWF9DT01QSUxFUl9JRCBNQVRDSEVTICJDbGFuZ3xBcHBsZUNsYW5nfEdOVSIgKQotICAgICAgICB0YXJnZXRfY29tcGlsZV9vcHRpb25zKCBTZWxmVGVzdCBQUklWQVRFIC1XYWxsIC1XZXh0cmEgLVd1bnJlYWNoYWJsZS1jb2RlIC1XcGVkYW50aWMpCi0gICAgICAgIGlmIChDQVRDSF9FTkFCTEVfV0VSUk9SKQotICAgICAgICAgICAgdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyggU2VsZlRlc3QgUFJJVkFURSAtV2Vycm9yKQotICAgICAgICBlbmRpZigpCi0gICAgZW5kaWYoKQotICAgICMgQ2xhbmcgc3BlY2lmaWMgd2FybmluZyBnbyBoZXJlCi0gICAgaWYgKCBDTUFLRV9DWFhfQ09NUElMRVJfSUQgTUFUQ0hFUyAiQ2xhbmciICkKLSAgICAgICAgIyBBY3R1YWxseSBrZWVwIHRoZXNlCi0gICAgICAgIHRhcmdldF9jb21waWxlX29wdGlvbnMoIFNlbGZUZXN0IFBSSVZBVEUgLVd3ZWFrLXZ0YWJsZXMgLVdleGl0LXRpbWUtZGVzdHJ1Y3RvcnMgLVdnbG9iYWwtY29uc3RydWN0b3JzIC1XbWlzc2luZy1ub3JldHVybiApCi0gICAgZW5kaWYoKQotICAgIGlmICggQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIk1TVkMiICkKLQkJU1RSSU5HKFJFR0VYIFJFUExBQ0UgIi9XWzAtOV0iICIvVzQiIENNQUtFX0NYWF9GTEFHUyAke0NNQUtFX0NYWF9GTEFHU30pICMgb3ZlcnJpZGUgZGVmYXVsdCB3YXJuaW5nIGxldmVsCi0gICAgICAgIHRhcmdldF9jb21waWxlX29wdGlvbnMoIFNlbGZUZXN0IFBSSVZBVEUgL3c0NDI2NSAvdzQ0MDYxIC93NDQwNjIgKQotICAgICAgICBpZiAoQ0FUQ0hfRU5BQkxFX1dFUlJPUikKLSAgICAgICAgICAgIHRhcmdldF9jb21waWxlX29wdGlvbnMoIFNlbGZUZXN0IFBSSVZBVEUgL1dYKQotICAgICAgICBlbmRpZigpCi0gICAgZW5kaWYoKQotCi0KLSAgICAjIGNvbmZpZ3VyZSB1bml0IHRlc3RzIHZpYSBDVGVzdAotICAgIGluY2x1ZGUoQ1Rlc3QpCi0gICAgYWRkX3Rlc3QoTkFNRSBSdW5UZXN0cyBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6U2VsZlRlc3Q+KQotCi0gICAgYWRkX3Rlc3QoTkFNRSBMaXN0VGVzdHMgQ09NTUFORCAkPFRBUkdFVF9GSUxFOlNlbGZUZXN0PiAtLWxpc3QtdGVzdHMgLS12ZXJib3NpdHkgaGlnaCkKLSAgICBzZXRfdGVzdHNfcHJvcGVydGllcyhMaXN0VGVzdHMgUFJPUEVSVElFUyBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiWzAtOV0rIHRlc3QgY2FzZXMiKQotCi0gICAgYWRkX3Rlc3QoTkFNRSBMaXN0VGFncyBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6U2VsZlRlc3Q+IC0tbGlzdC10YWdzKQotICAgIHNldF90ZXN0c19wcm9wZXJ0aWVzKExpc3RUYWdzIFBST1BFUlRJRVMgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIlswLTldKyB0YWdzIikKLQotICAgIGFkZF90ZXN0KE5BTUUgTGlzdFJlcG9ydGVycyBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6U2VsZlRlc3Q+IC0tbGlzdC1yZXBvcnRlcnMpCi0gICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoTGlzdFJlcG9ydGVycyBQUk9QRVJUSUVTIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJBdmFpbGFibGUgcmVwb3J0ZXJzOiIpCi0KLSAgICBhZGRfdGVzdChOQU1FIExpc3RUZXN0TmFtZXNPbmx5IENPTU1BTkQgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4gLS1saXN0LXRlc3QtbmFtZXMtb25seSkKLSAgICBzZXRfdGVzdHNfcHJvcGVydGllcyhMaXN0VGVzdE5hbWVzT25seSBQUk9QRVJUSUVTIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJSZWdleCBzdHJpbmcgbWF0Y2hlciIpCi0KLQotCi0gICAgIyBBcHBWZXlvciBoYXMgYSBQeXRob24gMi43IGluIHBhdGgsIGJ1dCBkb2Vzbid0IGhhdmUgLnB5IGZpbGVzIGFzIGF1dG9ydW5uYWJsZQotICAgIGFkZF90ZXN0KE5BTUUgQXBwcm92YWxUZXN0cyBDT01NQU5EIHB5dGhvbiAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vc2NyaXB0cy9hcHByb3ZhbFRlc3RzLnB5ICQ8VEFSR0VUX0ZJTEU6U2VsZlRlc3Q+KQotICAgIHNldF90ZXN0c19wcm9wZXJ0aWVzKEFwcHJvdmFsVGVzdHMgUFJPUEVSVElFUyBGQUlMX1JFR1VMQVJfRVhQUkVTU0lPTiAiUmVzdWx0cyBkaWZmZXJlZCIpCi0KLSAgICBpZiAoQ0FUQ0hfVVNFX1ZBTEdSSU5EKQotICAgICAgICBhZGRfdGVzdChOQU1FIFZhbGdyaW5kUnVuVGVzdHMgQ09NTUFORCB2YWxncmluZCAtLWxlYWstY2hlY2s9ZnVsbCAtLWVycm9yLWV4aXRjb2RlPTEgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4pCi0gICAgICAgIGFkZF90ZXN0KE5BTUUgVmFsZ3JpbmRMaXN0VGVzdHMgQ09NTUFORCB2YWxncmluZCAtLWxlYWstY2hlY2s9ZnVsbCAtLWVycm9yLWV4aXRjb2RlPTEgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4gLS1saXN0LXRlc3RzIC0tdmVyYm9zaXR5IGhpZ2gpCi0gICAgICAgIHNldF90ZXN0c19wcm9wZXJ0aWVzKFZhbGdyaW5kTGlzdFRlc3RzIFBST1BFUlRJRVMgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gImRlZmluaXRlbHkgbG9zdDogMCBieXRlcyBpbiAwIGJsb2NrcyIpCi0gICAgICAgIGFkZF90ZXN0KE5BTUUgVmFsZ3JpbmRMaXN0VGFncyBDT01NQU5EIHZhbGdyaW5kIC0tbGVhay1jaGVjaz1mdWxsIC0tZXJyb3ItZXhpdGNvZGU9MSAkPFRBUkdFVF9GSUxFOlNlbGZUZXN0PiAtLWxpc3QtdGFncykKLSAgICAgICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoVmFsZ3JpbmRMaXN0VGFncyBQUk9QRVJUSUVTIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJkZWZpbml0ZWx5IGxvc3Q6IDAgYnl0ZXMgaW4gMCBibG9ja3MiKQotICAgIGVuZGlmKCkKLQotZW5kaWYoKSAjICFOT19TRUxGVEVTVAotCi0KIGlmKENBVENIX0JVSUxEX0VYQU1QTEVTKQogICAgIGFkZF9zdWJkaXJlY3RvcnkoZXhhbXBsZXMpCiBlbmRpZigpCiAKLWluc3RhbGwoRElSRUNUT1JZICJzaW5nbGVfaW5jbHVkZS8iIERFU1RJTkFUSU9OICIke0NNQUtFX0lOU1RBTExfSU5DTFVERURJUn0vY2F0Y2giKQoraWYoQ0FUQ0hfQlVJTERfRVhUUkFfVEVTVFMpCisgICAgYWRkX3N1YmRpcmVjdG9yeShwcm9qZWN0cy9FeHRyYVRlc3RzKQorZW5kaWYoKQogCi1pbnN0YWxsKERJUkVDVE9SWSBkb2NzLyBERVNUSU5BVElPTiAiJHtDTUFLRV9JTlNUQUxMX0RPQ0RJUn0iKQorIyBhZGQgY2F0Y2ggYXMgYSAnbGlua2FibGUnIHRhcmdldAorYWRkX2xpYnJhcnkoQ2F0Y2gyIElOVEVSRkFDRSkKIAotIyMgUHJvdmlkZSBzb21lIHBrZy1jb25maWcgaW50ZWdyYXRpb24KLSMgRG9uJ3QgYm90aGVyIG9uIFdpbmRvd3MKLWlmKE5PVCBXSU4zMiBPUiBOT1QgQ01BS0VfSE9TVF9TWVNURU1fTkFNRSBNQVRDSEVTIFdpbmRvd3MpCiAKLSAgICBzZXQoUEtHQ09ORklHX0lOU1RBTExfRElSCi0gICAgICAgICIke0NNQUtFX0lOU1RBTExfREFUQVJPT1RESVJ9L3BrZ2NvbmZpZyIKLSAgICAgICAgQ0FDSEUgUEFUSCAiUGF0aCB3aGVyZSBjYXRjaC5wYyBpcyBpbnN0YWxsZWQiCisKKyMgZGVwZW5kIG9uIHNvbWUgb2J2aW91cyBjKysxMSBmZWF0dXJlcyBzbyB0aGUgZGVwZW5kZW5jeSBpcyB0cmFuc2l0aXZlbHkgYWRkZWQgZGVwZW5kZW50cwordGFyZ2V0X2NvbXBpbGVfZmVhdHVyZXMoQ2F0Y2gyCisgIElOVEVSRkFDRQorICAgIGN4eF9hbGlnbmFzCisgICAgY3h4X2FsaWdub2YKKyAgICBjeHhfYXR0cmlidXRlcworICAgIGN4eF9hdXRvX3R5cGUKKyAgICBjeHhfY29uc3RleHByCisgICAgY3h4X2RlZmF1bHRlZF9mdW5jdGlvbnMKKyAgICBjeHhfZGVsZXRlZF9mdW5jdGlvbnMKKyAgICBjeHhfZmluYWwKKyAgICBjeHhfbGFtYmRhcworICAgIGN4eF9ub2V4Y2VwdAorICAgIGN4eF9vdmVycmlkZQorICAgIGN4eF9yYW5nZV9mb3IKKyAgICBjeHhfcnZhbHVlX3JlZmVyZW5jZXMKKyAgICBjeHhfc3RhdGljX2Fzc2VydAorICAgIGN4eF9zdHJvbmdfZW51bXMKKyAgICBjeHhfdHJhaWxpbmdfcmV0dXJuX3R5cGVzCisgICAgY3h4X3VuaWNvZGVfbGl0ZXJhbHMKKyAgICBjeHhfdXNlcl9saXRlcmFscworICAgIGN4eF92YXJpYWRpY19tYWNyb3MKKykKKwordGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoQ2F0Y2gyCisgIElOVEVSRkFDRQorICAgICQ8QlVJTERfSU5URVJGQUNFOiR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vc2luZ2xlX2luY2x1ZGU+CisgICAgJDxJTlNUQUxMX0lOVEVSRkFDRToke0NNQUtFX0lOU1RBTExfSU5DTFVERURJUn0+CispCisKKyMgcHJvdmlkZSBhIG5hbWVzcGFjZWQgYWxpYXMgZm9yIGNsaWVudHMgdG8gJ2xpbmsnIGFnYWluc3QgaWYgY2F0Y2ggaXMgaW5jbHVkZWQgYXMgYSBzdWItcHJvamVjdAorYWRkX2xpYnJhcnkoQ2F0Y2gyOjpDYXRjaDIgQUxJQVMgQ2F0Y2gyKQorCisjIE9ubHkgcGVyZm9ybSB0aGUgaW5zdGFsbGF0aW9uIHN0ZXBzIHdoZW4gQ2F0Y2ggaXMgbm90IGJlaW5nIHVzZWQgYXMKKyMgYSBzdWJwcm9qZWN0IHZpYSBgYWRkX3N1YmRpcmVjdG9yeWAsIG9yIHRoZSBkZXN0aW5hdGlvbnMgd2lsbCBicmVhaywKKyMgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRjaG9yZy9DYXRjaDIvaXNzdWVzLzEzNzMKK2lmIChOT1RfU1VCUFJPSkVDVCkKKyAgICBzZXQoQ0FUQ0hfQ01BS0VfQ09ORklHX0RFU1RJTkFUSU9OICIke0NNQUtFX0lOU1RBTExfTElCRElSfS9jbWFrZS9DYXRjaDIiKQorCisgICAgY29uZmlndXJlX3BhY2thZ2VfY29uZmlnX2ZpbGUoCisgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9MSVNUX0RJUn0vQ01ha2UvQ2F0Y2gyQ29uZmlnLmNtYWtlLmluCisgICAgICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9DYXRjaDJDb25maWcuY21ha2UKKyAgICAgICAgSU5TVEFMTF9ERVNUSU5BVElPTgorICAgICAgICAgICR7Q0FUQ0hfQ01BS0VfQ09ORklHX0RFU1RJTkFUSU9OfQogICAgICkKIAotICAgIGNvbmZpZ3VyZV9maWxlKCR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9jYXRjaC5wYy5pbiAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vY2F0Y2gucGMgQE9OTFkpCi0gICAgaW5zdGFsbChGSUxFUyAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vY2F0Y2gucGMgREVTVElOQVRJT04gJHtQS0dDT05GSUdfSU5TVEFMTF9ESVJ9KQogCi1lbmRpZigpCisgICAgIyBjcmVhdGUgYW5kIGluc3RhbGwgYW4gZXhwb3J0IHNldCBmb3IgY2F0Y2ggdGFyZ2V0IGFzIENhdGNoMjo6Q2F0Y2gKKyAgICBpbnN0YWxsKAorICAgICAgVEFSR0VUUworICAgICAgICBDYXRjaDIKKyAgICAgIEVYUE9SVAorICAgICAgICBDYXRjaDJUYXJnZXRzCisgICAgICBERVNUSU5BVElPTgorICAgICAgICAke0NNQUtFX0lOU1RBTExfTElCRElSfQorICAgICkKKworCisgICAgaW5zdGFsbCgKKyAgICAgIEVYUE9SVAorICAgICAgICBDYXRjaDJUYXJnZXRzCisgICAgICBOQU1FU1BBQ0UKKyAgICAgICAgQ2F0Y2gyOjoKKyAgICAgIERFU1RJTkFUSU9OCisgICAgICAgICR7Q0FUQ0hfQ01BS0VfQ09ORklHX0RFU1RJTkFUSU9OfQorICAgICkKKworICAgICMgQnkgZGVmYXVsdCwgRm9vQ29uZmlnVmVyc2lvbiBpcyB0aWVkIHRvIGFyY2hpdGVjdHVyZSB0aGF0IGl0IHdhcworICAgICMgZ2VuZXJhdGVkIG9uLiBCZWNhdXNlIENhdGNoMiBpcyBoZWFkZXItb25seSwgaXQgaXMgYXJjaC1pbmRlcGVuZGVudAorICAgICMgYW5kIHRodXMgQ2F0Y2gyQ29uZmlnVmVyc2lvbiBzaG91bGQgbm90IGJlIHRpZWQgdG8gdGhlIGFyY2hpdGVjdHVyZQorICAgICMgaXQgd2FzIGdlbmVyYXRlZCBvbi4KKyAgICAjCisgICAgIyBDTWFrZSBkb2VzIG5vdCBwcm92aWRlIGEgZGlyZWN0IGN1c3RvbWl6YXRpb24gcG9pbnQgZm9yIHRoaXMgaW4KKyAgICAjIGB3cml0ZV9iYXNpY19wYWNrYWdlX3ZlcnNpb25fZmlsZWAsIGJ1dCBpdCBjYW4gYmUgYWNjb21wbGlzaGVkCisgICAgIyBpbmRpcmVjdGx5IGJ5IHRlbXBvcmFyaWx5IHVuZGVmaW5pbmcgYENNQUtFX1NJWkVPRl9WT0lEX1BgLgorICAgIHNldChDQVRDSDJfQ01BS0VfU0laRU9GX1ZPSURfUCAke0NNQUtFX1NJWkVPRl9WT0lEX1B9KQorICAgIHVuc2V0KENNQUtFX1NJWkVPRl9WT0lEX1ApCisgICAgd3JpdGVfYmFzaWNfcGFja2FnZV92ZXJzaW9uX2ZpbGUoCisgICAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NhdGNoMkNvbmZpZ1ZlcnNpb24uY21ha2UiCisgICAgICBDT01QQVRJQklMSVRZCisgICAgICAgIFNhbWVNYWpvclZlcnNpb24KKyAgICApCisgICAgc2V0KENNQUtFX1NJWkVPRl9WT0lEX1AgJHtDQVRDSDJfQ01BS0VfU0laRU9GX1ZPSURfUH0pCisKKyAgICBpbnN0YWxsKAorICAgICAgRElSRUNUT1JZCisgICAgICAgICJzaW5nbGVfaW5jbHVkZS8iCisgICAgICBERVNUSU5BVElPTgorICAgICAgICAiJHtDTUFLRV9JTlNUQUxMX0lOQ0xVREVESVJ9IgorICAgICkKKworICAgIGluc3RhbGwoCisgICAgICBGSUxFUworICAgICAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L0NhdGNoMkNvbmZpZy5jbWFrZSIKKyAgICAgICAgIiR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9DYXRjaDJDb25maWdWZXJzaW9uLmNtYWtlIgorICAgICAgREVTVElOQVRJT04KKyAgICAgICAgJHtDQVRDSF9DTUFLRV9DT05GSUdfREVTVElOQVRJT059CisgICAgKQorCisgICAgIyBJbnN0YWxsIGRvY3VtZW50YXRpb24KKyAgICBpZihDQVRDSF9JTlNUQUxMX0RPQ1MpCisgICAgICBpbnN0YWxsKAorICAgICAgICBESVJFQ1RPUlkKKyAgICAgICAgICBkb2NzLworICAgICAgICBERVNUSU5BVElPTgorICAgICAgICAgICIke0NNQUtFX0lOU1RBTExfRE9DRElSfSIKKyAgICAgICkKKyAgICBlbmRpZigpCisKKyAgICBpZihDQVRDSF9JTlNUQUxMX0hFTFBFUlMpCisgICAgIyBJbnN0YWxsIENNYWtlIHNjcmlwdHMKKyAgICBpbnN0YWxsKAorICAgICAgRklMRVMKKyAgICAgICAgImNvbnRyaWIvUGFyc2VBbmRBZGRDYXRjaFRlc3RzLmNtYWtlIgorICAgICAgICAiY29udHJpYi9DYXRjaC5jbWFrZSIKKyAgICAgICAgImNvbnRyaWIvQ2F0Y2hBZGRUZXN0cy5jbWFrZSIKKyAgICAgIERFU1RJTkFUSU9OCisgICAgICAgICR7Q0FUQ0hfQ01BS0VfQ09ORklHX0RFU1RJTkFUSU9OfQorICAgICkKKworICAgICMgSW5zdGFsbCBkZWJ1Z2dlciBoZWxwZXJzCisgICAgaW5zdGFsbCgKKyAgICAgIEZJTEVTCisgICAgICAgICJjb250cmliL2dkYmluaXQiCisgICAgICAgICJjb250cmliL2xsZGJpbml0IgorICAgICAgREVTVElOQVRJT04KKyAgICAgICAgJHtDTUFLRV9JTlNUQUxMX0RBVEFST09URElSfS9DYXRjaDIKKyAgICApCisgICAgZW5kaWYoKQorCisgICAgIyMgUHJvdmlkZSBzb21lIHBrZy1jb25maWcgaW50ZWdyYXRpb24KKyAgICBzZXQoUEtHQ09ORklHX0lOU1RBTExfRElSCisgICAgICAgICIke0NNQUtFX0lOU1RBTExfREFUQVJPT1RESVJ9L3BrZ2NvbmZpZyIKKyAgICAgICAgQ0FDSEUgUEFUSCAiUGF0aCB3aGVyZSBjYXRjaDIucGMgaXMgaW5zdGFsbGVkIgorICAgICkKKyAgICBjb25maWd1cmVfZmlsZSgKKyAgICAgICR7Q01BS0VfQ1VSUkVOVF9TT1VSQ0VfRElSfS9DTWFrZS9jYXRjaDIucGMuaW4KKyAgICAgICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jYXRjaDIucGMKKyAgICAgIEBPTkxZCisgICAgKQorICAgIGluc3RhbGwoCisgICAgICBGSUxFUworICAgICAgICAiJHtDTUFLRV9DVVJSRU5UX0JJTkFSWV9ESVJ9L2NhdGNoMi5wYyIKKyAgICAgIERFU1RJTkFUSU9OCisgICAgICAgICR7UEtHQ09ORklHX0lOU1RBTExfRElSfQorICAgICkKKworZW5kaWYoTk9UX1NVQlBST0pFQ1QpCmRpZmYgLS1naXQgYS9NRVRBREFUQSBiL01FVEFEQVRBCmluZGV4IDAzZmIyN2MuLmNmOThlNGEgMTAwNjQ0Ci0tLSBhL01FVEFEQVRBCisrKyBiL01FVEFEQVRBCkBAIC0xMyw3ICsxMyw3IEBACiAgICAgdHlwZTogR0lUCiAgICAgdmFsdWU6ICJodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyLmdpdCIKICAgfQotICB2ZXJzaW9uOiAiNjJkYWU1OTJjMzMwYWI3NGNlYTMwYzg5NzI1NWVlOTUxODYzOWMzZiIKLSAgbGFzdF91cGdyYWRlX2RhdGUgeyB5ZWFyOiAyMDE4IG1vbnRoOiAyIGRheTogNiB9CisgIHZlcnNpb246ICJ2Mi43LjAiCisgIGxhc3RfdXBncmFkZV9kYXRlIHsgeWVhcjogMjAxOSBtb250aDogMyBkYXk6IDcgfQogICBsaWNlbnNlX3R5cGU6IE5PVElDRQogfQpkaWZmIC0tZ2l0IGEvUkVBRE1FLm1kIGIvUkVBRE1FLm1kCmluZGV4IDFjMmMwM2IuLjA4MDk1ZjEgMTAwNjQ0Ci0tLSBhL1JFQURNRS5tZAorKysgYi9SRUFETUUubWQKQEAgLTUsOSArNSwxMSBAQAogWyFbQnVpbGQgU3RhdHVzXShodHRwczovL3RyYXZpcy1jaS5vcmcvY2F0Y2hvcmcvQ2F0Y2gyLnN2Zz9icmFuY2g9bWFzdGVyKV0oaHR0cHM6Ly90cmF2aXMtY2kub3JnL2NhdGNob3JnL0NhdGNoMikKIFshW0J1aWxkIHN0YXR1c10oaHR0cHM6Ly9jaS5hcHB2ZXlvci5jb20vYXBpL3Byb2plY3RzL3N0YXR1cy9naXRodWIvY2F0Y2hvcmcvQ2F0Y2gyP3N2Zz10cnVlKV0oaHR0cHM6Ly9jaS5hcHB2ZXlvci5jb20vcHJvamVjdC9jYXRjaG9yZy9jYXRjaDIpCiBbIVtjb2RlY292XShodHRwczovL2NvZGVjb3YuaW8vZ2gvY2F0Y2hvcmcvQ2F0Y2gyL2JyYW5jaC9tYXN0ZXIvZ3JhcGgvYmFkZ2Uuc3ZnKV0oaHR0cHM6Ly9jb2RlY292LmlvL2doL2NhdGNob3JnL0NhdGNoMikKLVshW1RyeSBvbmxpbmVdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvdHJ5LW9ubGluZS1ibHVlLnN2ZyldKGh0dHBzOi8vd2FuZGJveC5vcmcvcGVybWxpbmsvVHBJY0phTGFINFdyS2xoUykKK1shW1RyeSBvbmxpbmVdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvdHJ5LW9ubGluZS1ibHVlLnN2ZyldKGh0dHBzOi8vd2FuZGJveC5vcmcvcGVybWxpbmsvYnlOSklpdlZwaEhvMTcwUCkKK1shW0pvaW4gdGhlIGNoYXQgaW4gRGlzY29yZDogaHR0cHM6Ly9kaXNjb3JkLmdnLzRDV1M5ekRdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvRGlzY29yZC1DaGF0IS1icmlnaHRncmVlbi5zdmcpXShodHRwczovL2Rpc2NvcmQuZ2cvNENXUzl6RCkKIAotPGEgaHJlZj0iaHR0cHM6Ly9naXRodWIuY29tL2NhdGNob3JnL0NhdGNoMi9yZWxlYXNlcy9kb3dubG9hZC92Mi4xLjEvY2F0Y2guaHBwIj5UaGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhlIHNpbmdsZSBoZWFkZXIgY2FuIGJlIGRvd25sb2FkZWQgZGlyZWN0bHkgdXNpbmcgdGhpcyBsaW5rPC9hPgorCis8YSBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyL3JlbGVhc2VzL2Rvd25sb2FkL3YyLjcuMC9jYXRjaC5ocHAiPlRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgc2luZ2xlIGhlYWRlciBjYW4gYmUgZG93bmxvYWRlZCBkaXJlY3RseSB1c2luZyB0aGlzIGxpbms8L2E+CiAKICMjIENhdGNoMiBpcyByZWxlYXNlZCEKIApAQCAtMzIsNSArMzQsNSBAQAogCiAjIyBNb3JlCiAqIElzc3VlcyBhbmQgYnVncyBjYW4gYmUgcmFpc2VkIG9uIHRoZSBbSXNzdWUgdHJhY2tlciBvbiBHaXRIdWJdKGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRjaG9yZy9DYXRjaDIvaXNzdWVzKQotKiBGb3IgZGlzY3Vzc2lvbiBvciBxdWVzdGlvbnMgcGxlYXNlIHVzZSBbdGhlIGRlZGljYXRlZCBHb29nbGUgR3JvdXBzIGZvcnVtXShodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLz9mcm9tZ3JvdXBzIyFmb3J1bS9jYXRjaC1mb3J1bSkKKyogRm9yIGRpc2N1c3Npb24gb3IgcXVlc3Rpb25zIHBsZWFzZSB1c2UgW3RoZSBkZWRpY2F0ZWQgR29vZ2xlIEdyb3VwcyBmb3J1bV0oaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9mb3J1bS8/ZnJvbWdyb3VwcyMhZm9ydW0vY2F0Y2gtZm9ydW0pIG9yIG91ciBbRGlzY29yZF0oaHR0cHM6Ly9kaXNjb3JkLmdnLzRDV1M5ekQpCiAqIFNlZSBbd2hvIGVsc2UgaXMgdXNpbmcgQ2F0Y2gyXShkb2NzL29wZW5zb3VyY2UtdXNlcnMubWQjdG9wKQpkaWZmIC0tZ2l0IGEvYXBwdmV5b3IueW1sIGIvYXBwdmV5b3IueW1sCmluZGV4IDJkNjgxNzIuLjUzZjViMzkgMTAwNjQ0Ci0tLSBhL2FwcHZleW9yLnltbAorKysgYi9hcHB2ZXlvci55bWwKQEAgLTE5LDE4ICsxOSw1MSBAQAogCiAgICAgICAgIC0gYWRkaXRpb25hbF9mbGFnczogIi9EX1VOSUNPREUgL0RVTklDT0RFIgogICAgICAgICAgIHdtYWluOiAxCisgICAgICAgICAgY292ZXJhZ2U6IDAKKworICAgICAgICAjIEhhdmUgYSBjb3ZlcmFnZSBkaW1lbnNpb24KKyAgICAgICAgLSBhZGRpdGlvbmFsX2ZsYWdzOiAiIgorICAgICAgICAgIHdtYWluOiAwCisgICAgICAgICAgY292ZXJhZ2U6IDEKKworICAgICAgICAjIEhhdmUgYW4gZXhhbXBsZXMgZGltZW5zaW9uCisgICAgICAgIC0gYWRkaXRpb25hbF9mbGFnczogIiIKKyAgICAgICAgICB3bWFpbjogMAorICAgICAgICAgIGV4YW1wbGVzOiAxCisKIAogbWF0cml4OgogICAgIGV4Y2x1ZGU6CiAgICAgICAgIC0gb3M6IFZpc3VhbCBTdHVkaW8gMjAxNQogICAgICAgICAgIGFkZGl0aW9uYWxfZmxhZ3M6ICIvcGVybWlzc2l2ZS0gL3N0ZDpjKytsYXRlc3QiCiAKLWluaXQ6Ci0gIC0gZ2l0IGNvbmZpZyAtLWdsb2JhbCBjb3JlLmF1dG9jcmxmIGlucHV0CisgICAgICAgIC0gb3M6IFZpc3VhbCBTdHVkaW8gMjAxNQorICAgICAgICAgIGFkZGl0aW9uYWxfZmxhZ3M6ICIvRF9VTklDT0RFIC9EVU5JQ09ERSIKKworICAgICAgICAjIEV4Y2x1ZGUgdW53YW50ZWQgY292ZXJhZ2UgY29uZmlndXJhdGlvbnMKKyAgICAgICAgLSBjb3ZlcmFnZTogMQorICAgICAgICAgIHBsYXRmb3JtOiBXaW4zMgorCisgICAgICAgIC0gY292ZXJhZ2U6IDEKKyAgICAgICAgICBvczogVmlzdWFsIFN0dWRpbyAyMDE1CisKKyAgICAgICAgLSBjb3ZlcmFnZTogMQorICAgICAgICAgIGNvbmZpZ3VyYXRpb246IFJlbGVhc2UKKworICAgICAgICAjIEV4Y2x1ZGUgdW53YW50ZWQgZXhhbXBsZXMgY29uZmlndXJhdGlvbnMKKyAgICAgICAgLSBleGFtcGxlczogMQorICAgICAgICAgIHBsYXRmb3JtOiBXaW4zMgorCisgICAgICAgIC0gZXhhbXBsZXM6IDEKKyAgICAgICAgICBvczogVmlzdWFsIFN0dWRpbyAyMDE1CisKKyAgICAgICAgLSBleGFtcGxlczogMQorICAgICAgICAgIGNvbmZpZ3VyYXRpb246IFJlbGVhc2UKKwogCiBpbnN0YWxsOgotICAtIHBzOiBpZiAoKCRlbnY6Q09ORklHVVJBVElPTikgLWVxICJEZWJ1ZyIgKSB7IHB5dGhvbiAtbSBwaXAgaW5zdGFsbCBjb2RlY292IH0KLSAgLSBwczogaWYgKCgkZW52OkNPTkZJR1VSQVRJT04pIC1lcSAiRGVidWciICkgeyAuXG1pc2NcaW5zdGFsbE9wZW5DcHBDb3ZlcmFnZS5wczEgfQorICAtIHBzOiBpZiAoKCRlbnY6Q09ORklHVVJBVElPTikgLWVxICJEZWJ1ZyIgLUFuZCAoJGVudjpjb3ZlcmFnZSkgLWVxICIxIiApIHsgcHl0aG9uIC1tIHBpcCAtLWRpc2FibGUtcGlwLXZlcnNpb24tY2hlY2sgaW5zdGFsbCBjb2RlY292IH0KKyAgLSBwczogaWYgKCgkZW52OkNPTkZJR1VSQVRJT04pIC1lcSAiRGVidWciIC1BbmQgKCRlbnY6Y292ZXJhZ2UpIC1lcSAiMSIgKSB7IC5cbWlzY1xpbnN0YWxsT3BlbkNwcENvdmVyYWdlLnBzMSB9CiAKICMgV2luMzIgYW5kIHg2NCBhcmUgQ01ha2UtY29tcGF0aWJsZSBzb2x1dGlvbiBwbGF0Zm9ybSBuYW1lcy4KICMgVGhpcyBhbGxvd3MgdXMgdG8gcGFzcyAlUExBVEZPUk0lIHRvIENNYWtlIC1BLgpkaWZmIC0tZ2l0IGEvY2F0Y2gucGMuaW4gYi9jYXRjaC5wYy5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWJkMGI2Ni4uMDAwMDAwMAotLS0gYS9jYXRjaC5wYy5pbgorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotaW5jbHVkZWRpcj1AQ01BS0VfSU5TVEFMTF9GVUxMX0lOQ0xVREVESVJACi0KLU5hbWU6IENhdGNoCi1EZXNjcmlwdGlvbjogVGVzdGluZyBsaWJyYXJ5IGZvciBDKysKLVZlcnNpb246IEBDYXRjaDJfVkVSU0lPTkAKLUNmbGFnczogLUkke2luY2x1ZGVkaXJ9CmRpZmYgLS1naXQgYS9jb2RlY292LnltbCBiL2NvZGVjb3YueW1sCmluZGV4IDdmZDEyZGYuLjk0ZDg4ZDggMTAwNjQ0Ci0tLSBhL2NvZGVjb3YueW1sCisrKyBiL2NvZGVjb3YueW1sCkBAIC02LDE3ICs2LDE5IEBACiAgICAgcHJvamVjdDoKICAgICAgIGRlZmF1bHQ6CiAgICAgICAgIHRocmVzaG9sZDogMiUKLQotY29kZWNvdjoKLSAgYnJhbmNoOiBtYXN0ZXIKLQotY29tbWVudDoKLSAgbGF5b3V0OiAiZGlmZiIKLQotY292ZXJhZ2U6CisgICAgcGF0Y2g6CisgICAgICBkZWZhdWx0OgorICAgICAgICB0YXJnZXQ6IDgwJQogICBpZ25vcmU6CiAgICAgLSAicHJvamVjdHMvU2VsZlRlc3QiCiAgICAgLSAiKiovY2F0Y2hfcmVwb3J0ZXJfdGFwLmhwcCIKICAgICAtICIqKi9jYXRjaF9yZXBvcnRlcl9hdXRvbWFrZS5ocHAiCiAgICAgLSAiKiovY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwIgogICAgIC0gIioqL2V4dGVybmFsL2NsYXJhLmhwcCIKKworCitjb2RlY292OgorICBicmFuY2g6IG1hc3RlcgorCitjb21tZW50OgorICBsYXlvdXQ6ICJkaWZmIgpkaWZmIC0tZ2l0IGEvY29uYW5maWxlLnB5IGIvY29uYW5maWxlLnB5CmluZGV4IGZhOWZkY2UuLmE3Y2ViYjkgMTAwNjQ0Ci0tLSBhL2NvbmFuZmlsZS5weQorKysgYi9jb25hbmZpbGUucHkKQEAgLTEsMTkgKzEsMjcgQEAKICMhL3Vzci9iaW4vZW52IHB5dGhvbgotZnJvbSBjb25hbnMgaW1wb3J0IENvbmFuRmlsZQorZnJvbSBjb25hbnMgaW1wb3J0IENvbmFuRmlsZSwgQ01ha2UKIAogCiBjbGFzcyBDYXRjaENvbmFuKENvbmFuRmlsZSk6Ci0gICAgbmFtZSA9ICJDYXRjaCIKLSAgICB2ZXJzaW9uID0gIjIuMS4xIgorICAgIG5hbWUgPSAiQ2F0Y2gyIgogICAgIGRlc2NyaXB0aW9uID0gIkEgbW9kZXJuLCBDKystbmF0aXZlLCBoZWFkZXItb25seSwgZnJhbWV3b3JrIGZvciB1bml0LXRlc3RzLCBUREQgYW5kIEJERCIKLSAgICBhdXRob3IgPSAicGhpbHNxdWFyZWQiCisgICAgdG9waWNzID0gKCJjb25hbiIsICJjYXRjaDIiLCAiaGVhZGVyLW9ubHkiLCAidW5pdC10ZXN0IiwgInRkZCIsICJiZGQiKQorICAgIHVybCA9ICJodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyIgorICAgIGhvbWVwYWdlID0gdXJsCisgICAgbGljZW5zZSA9ICJCU0wtMS4wIgorICAgIGV4cG9ydHMgPSAiTElDRU5TRS50eHQiCisgICAgZXhwb3J0c19zb3VyY2VzID0gKCJzaW5nbGVfaW5jbHVkZS8qIiwgIkNNYWtlTGlzdHMudHh0IiwgIkNNYWtlLyoiLCAiY29udHJpYi8qIikKICAgICBnZW5lcmF0b3JzID0gImNtYWtlIgotICAgIGV4cG9ydHNfc291cmNlcyA9ICJzaW5nbGVfaW5jbHVkZS8qIgotICAgIHVybCA9ICJodHRwczovL2dpdGh1Yi5jb20vcGhpbHNxdWFyZWQvQ2F0Y2giCi0gICAgbGljZW5zZSA9ICJCb29zdCBTb2Z0d2FyZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjAuIGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCIKIAogICAgIGRlZiBwYWNrYWdlKHNlbGYpOgotICAgICAgICBzZWxmLmNvcHkocGF0dGVybj0iY2F0Y2guaHBwIiwgc3JjPSJzaW5nbGVfaW5jbHVkZSIsIGRzdD0iaW5jbHVkZSIpCisgICAgICAgIGNtYWtlID0gQ01ha2Uoc2VsZikKKyAgICAgICAgY21ha2UuZGVmaW5pdGlvbnNbIkJVSUxEX1RFU1RJTkciXSA9ICJPRkYiCisgICAgICAgIGNtYWtlLmRlZmluaXRpb25zWyJDQVRDSF9JTlNUQUxMX0RPQ1MiXSA9ICJPRkYiCisgICAgICAgIGNtYWtlLmRlZmluaXRpb25zWyJDQVRDSF9JTlNUQUxMX0hFTFBFUlMiXSA9ICJPTiIKKyAgICAgICAgY21ha2UuY29uZmlndXJlKCkKKyAgICAgICAgY21ha2UuaW5zdGFsbCgpCisKKyAgICAgICAgc2VsZi5jb3B5KHBhdHRlcm49IkxJQ0VOU0UudHh0IiwgZHN0PSJsaWNlbnNlcyIpCiAKICAgICBkZWYgcGFja2FnZV9pZChzZWxmKToKLSAgICAgICAgICAgIHNlbGYuaW5mby5oZWFkZXJfb25seSgpCisgICAgICAgIHNlbGYuaW5mby5oZWFkZXJfb25seSgpCmRpZmYgLS1naXQgYS9jb250cmliL0NhdGNoQWRkVGVzdHMuY21ha2UgYi9jb250cmliL0NhdGNoQWRkVGVzdHMuY21ha2UKaW5kZXggYzY4OTIxZS4uMjIyMGNlMyAxMDA2NDQKLS0tIGEvY29udHJpYi9DYXRjaEFkZFRlc3RzLmNtYWtlCisrKyBiL2NvbnRyaWIvQ2F0Y2hBZGRUZXN0cy5jbWFrZQpAQCAtNTAsMTQgKzUwLDE1IEBACiAKICMgUGFyc2Ugb3V0cHV0CiBmb3JlYWNoKGxpbmUgJHtvdXRwdXR9KQotICAjIFRlc3QgbmFtZTsgc3RyaXAgc3BhY2VzIHRvIGdldCBqdXN0IHRoZSBuYW1lLi4uCi0gIHN0cmluZyhSRUdFWCBSRVBMQUNFICIgKyIgIiIgdGVzdCAiJHtsaW5lfSIpCisgIHNldCh0ZXN0ICR7bGluZX0pCisgICMgdXNlIGVzY2FwZSBjb21tYXMgdG8gaGFuZGxlIHByb3Blcmx5IHRlc3QgY2FzZXMgd2l0aCBjb21tYW5zIGluc2lkZSB0aGUgbmFtZQorICBzdHJpbmcoUkVQTEFDRSAiLCIgIlxcLCIgdGVzdF9uYW1lICR7dGVzdH0pCiAgICMgLi4uYW5kIGFkZCB0byBzY3JpcHQKICAgYWRkX2NvbW1hbmQoYWRkX3Rlc3QKICAgICAiJHtwcmVmaXh9JHt0ZXN0fSR7c3VmZml4fSIKICAgICAke1RFU1RfRVhFQ1VUT1J9CiAgICAgIiR7VEVTVF9FWEVDVVRBQkxFfSIKLSAgICAiJHt0ZXN0fSIKKyAgICAiJHt0ZXN0X25hbWV9IgogICAgICR7ZXh0cmFfYXJnc30KICAgKQogICBhZGRfY29tbWFuZChzZXRfdGVzdHNfcHJvcGVydGllcwpkaWZmIC0tZ2l0IGEvY29udHJpYi9QYXJzZUFuZEFkZENhdGNoVGVzdHMuY21ha2UgYi9jb250cmliL1BhcnNlQW5kQWRkQ2F0Y2hUZXN0cy5jbWFrZQppbmRleCBjYjI4NDZkLi5mZjRmYzY2IDEwMDY0NAotLS0gYS9jb250cmliL1BhcnNlQW5kQWRkQ2F0Y2hUZXN0cy5jbWFrZQorKysgYi9jb250cmliL1BhcnNlQW5kQWRkQ2F0Y2hUZXN0cy5jbWFrZQpAQCAtMzksNiArMzksMTEgQEAKICMgICAgUEFSU0VfQ0FUQ0hfVEVTVFNfQUREX1RPX0NPTkZJR1VSRV9ERVBFTkRTIChEZWZhdWx0IE9GRikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICMgICAgLS0gY2F1c2VzIENNYWtlIHRvIHJlcnVuIHdoZW4gZmlsZSB3aXRoIHRlc3RzIGNoYW5nZXMgc28gdGhhdCBuZXcgdGVzdHMgd2lsbCBiZSBkaXNjb3ZlcmVkICAgICMKICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgT25lIGNhbiBhbHNvIHNldCAobG9jYWxseSkgdGhlIG9wdGlvbmFsIHZhcmlhYmxlIE9wdGlvbmFsQ2F0Y2hUZXN0TGF1bmNoZXIgdG8gcHJlY2lzZSB0aGUgd2F5ICAgICMKKyMgYSB0ZXN0IHNob3VsZCBiZSBydW4uIEZvciBpbnN0YW5jZSB0byB1c2UgdGVzdCBNUEksIG9uZSBjYW4gd3JpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgIHNldChPcHRpb25hbENhdGNoVGVzdExhdW5jaGVyICR7TVBJRVhFQ30gJHtNUElFWEVDX05VTVBST0NfRkxBR30gJHtOVU1QUk9DfSkgICAgICAgICAgICAgICAgICMKKyMganVzdCBiZWZvcmUgY2FsbGluZyB0aGlzIFBhcnNlQW5kQWRkQ2F0Y2hUZXN0cyBmdW5jdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSMKIAogY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDIuOC44KQpAQCAtMTA0LDcgKzEwOSw3IEBACiAgICAgICAgICMgR2V0IHRlc3QgdHlwZSBhbmQgZml4dHVyZSBpZiBhcHBsaWNhYmxlCiAgICAgICAgIHN0cmluZyhSRUdFWCBNQVRDSCAiKENBVENIXyk/KFRFU1RfQ0FTRV9NRVRIT0R8U0NFTkFSSU98VEVTVF9DQVNFKVsgXHRdKlxcKFteLF5cIl0qIiBUZXN0VHlwZUFuZEZpeHR1cmUgIiR7VGVzdE5hbWV9IikKICAgICAgICAgc3RyaW5nKFJFR0VYIE1BVENIICIoQ0FUQ0hfKT8oVEVTVF9DQVNFX01FVEhPRHxTQ0VOQVJJT3xURVNUX0NBU0UpIiBUZXN0VHlwZSAiJHtUZXN0VHlwZUFuZEZpeHR1cmV9IikKLSAgICAgICAgc3RyaW5nKFJFUExBQ0UgIiR7VGVzdFR5cGV9KCIgIiIgVGVzdEZpeHR1cmUgIiR7VGVzdFR5cGVBbmRGaXh0dXJlfSIpCisgICAgICAgIHN0cmluZyhSRUdFWCBSRVBMQUNFICIke1Rlc3RUeXBlfVxcKFsgXHRdKiIgIiIgVGVzdEZpeHR1cmUgIiR7VGVzdFR5cGVBbmRGaXh0dXJlfSIpCiAKICAgICAgICAgIyBHZXQgc3RyaW5nIHBhcnRzIG9mIHRlc3QgZGVmaW5pdGlvbgogICAgICAgICBzdHJpbmcoUkVHRVggTUFUQ0hBTEwgIlwiKyhbXlxcXlwiXXxcXFxcXCIpK1wiKyIgVGVzdFN0cmluZ3MgIiR7VGVzdE5hbWV9IikKQEAgLTE0Myw2ICsxNDgsOSBAQAogICAgICAgICAgICAgZW5kaWYoKQogICAgICAgICAgICAgc3RyaW5nKFJFUExBQ0UgIl0iICI7IiBUYWdzICIke1RhZ3N9IikKICAgICAgICAgICAgIHN0cmluZyhSRVBMQUNFICJbIiAiIiBUYWdzICIke1RhZ3N9IikKKyAgICAgICAgZWxzZSgpCisgICAgICAgICAgIyB1bnNldCB0YWdzIHZhcmlhYmxlIGZyb20gcHJldmlvdXMgbG9vcAorICAgICAgICAgIHVuc2V0KFRhZ3MpCiAgICAgICAgIGVuZGlmKCkKIAogICAgICAgICBsaXN0KEFQUEVORCBMYWJlbHMgJHtUYWdzfSkKQEAgLTE1Niw3ICsxNjQsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrKCkKICAgICAgICAgICAgIGVuZGlmKHJlc3VsdCkKICAgICAgICAgZW5kZm9yZWFjaChsYWJlbCkKLSAgICAgICAgaWYoUEFSU0VfQ0FUQ0hfVEVTVFNfTk9fSElEREVOX1RFU1RTIEFORCAke0hpZGRlblRhZ0ZvdW5kfSkKKyAgICAgICAgaWYoUEFSU0VfQ0FUQ0hfVEVTVFNfTk9fSElEREVOX1RFU1RTIEFORCAke0hpZGRlblRhZ0ZvdW5kfSBBTkQgJHtDTUFLRV9WRVJTSU9OfSBWRVJTSU9OX0xFU1MgIjMuOSIpCiAgICAgICAgICAgICBQcmludERlYnVnTWVzc2FnZSgiU2tpcHBpbmcgdGVzdCBcIiR7Q1Rlc3ROYW1lfVwiIGFzIGl0IGhhcyBbIWhpZGVdLCBbLl0gb3IgWy5mb29dIGxhYmVsIikKICAgICAgICAgZWxzZSgpCiAgICAgICAgICAgICBQcmludERlYnVnTWVzc2FnZSgiQWRkaW5nIHRlc3QgXCIke0NUZXN0TmFtZX1cIiIpCkBAIC0xNjQsMTIgKzE3MiwyMiBAQAogICAgICAgICAgICAgICAgIFByaW50RGVidWdNZXNzYWdlKCJTZXR0aW5nIGxhYmVscyB0byAke0xhYmVsc30iKQogICAgICAgICAgICAgZW5kaWYoKQogCisgICAgICAgICAgICAjIEVzY2FwZSBjb21tYXMgaW4gdGhlIHRlc3Qgc3BlYworICAgICAgICAgICAgc3RyaW5nKFJFUExBQ0UgIiwiICJcXCwiIE5hbWUgJHtOYW1lfSkKKwogICAgICAgICAgICAgIyBBZGQgdGhlIHRlc3QgYW5kIHNldCBpdHMgcHJvcGVydGllcwotICAgICAgICAgICAgYWRkX3Rlc3QoTkFNRSAiXCIke0NUZXN0TmFtZX1cIiIgQ09NTUFORCAke1Rlc3RUYXJnZXR9ICR7TmFtZX0gJHtBZGRpdGlvbmFsQ2F0Y2hQYXJhbWV0ZXJzfSkKLSAgICAgICAgICAgIHNldF90ZXN0c19wcm9wZXJ0aWVzKCJcIiR7Q1Rlc3ROYW1lfVwiIiBQUk9QRVJUSUVTIEZBSUxfUkVHVUxBUl9FWFBSRVNTSU9OICJObyB0ZXN0cyByYW4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEFCRUxTICIke0xhYmVsc30iKQorICAgICAgICAgICAgYWRkX3Rlc3QoTkFNRSAiXCIke0NUZXN0TmFtZX1cIiIgQ09NTUFORCAke09wdGlvbmFsQ2F0Y2hUZXN0TGF1bmNoZXJ9ICR7VGVzdFRhcmdldH0gJHtOYW1lfSAke0FkZGl0aW9uYWxDYXRjaFBhcmFtZXRlcnN9KQorICAgICAgICAgICAgIyBPbGQgQ01ha2UgdmVyc2lvbnMgZG8gbm90IGRvY3VtZW50IFZFUlNJT05fR1JFQVRFUl9FUVVBTCwgc28gd2UgdXNlIFZFUlNJT05fR1JFQVRFUiB3aXRoIDMuOCBpbnN0ZWFkCisgICAgICAgICAgICBpZihQQVJTRV9DQVRDSF9URVNUU19OT19ISURERU5fVEVTVFMgQU5EICR7SGlkZGVuVGFnRm91bmR9IEFORCAke0NNQUtFX1ZFUlNJT059IFZFUlNJT05fR1JFQVRFUiAiMy44IikKKyAgICAgICAgICAgICAgICBQcmludERlYnVnTWVzc2FnZSgiU2V0dGluZyBESVNBQkxFRCB0ZXN0IHByb3BlcnR5IikKKyAgICAgICAgICAgICAgICBzZXRfdGVzdHNfcHJvcGVydGllcygiXCIke0NUZXN0TmFtZX1cIiIgUFJPUEVSVElFUyBESVNBQkxFRCBPTikKKyAgICAgICAgICAgIGVsc2UoKQorICAgICAgICAgICAgICAgIHNldF90ZXN0c19wcm9wZXJ0aWVzKCJcIiR7Q1Rlc3ROYW1lfVwiIiBQUk9QRVJUSUVTIEZBSUxfUkVHVUxBUl9FWFBSRVNTSU9OICJObyB0ZXN0cyByYW4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExBQkVMUyAiJHtMYWJlbHN9IikKKyAgICAgICAgICAgIGVuZGlmKCkKICAgICAgICAgZW5kaWYoKQogCisKICAgICBlbmRmb3JlYWNoKCkKIGVuZGZ1bmN0aW9uKCkKIApkaWZmIC0tZ2l0IGEvY29udHJpYi9nZGJpbml0IGIvY29udHJpYi9nZGJpbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMzYwOGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2dkYmluaXQKQEAgLTAsMCArMSwxNiBAQAorIworIyBUaGlzIGZpbGUgcHJvdmlkZXMgYSB3YXkgdG8gc2tpcCBzdGVwcGluZyBpbnRvIENhdGNoIGNvZGUgd2hlbiBkZWJ1Z2dpbmcgd2l0aCBnZGIuCisjCisjIFdpdGggdGhlIGdkYiAic2tpcCIgY29tbWFuZCB5b3UgY2FuIHRlbGwgZ2RiIHRvIHNraXAgZmlsZXMgb3IgZnVuY3Rpb25zIGR1cmluZyBkZWJ1Z2dpbmcuCisjIHNlZSBodHRwczovL3hhaXplay5naXRodWIuaW8vMjAxNi0wNS0yNi9za2lwcGluZy1zdGFuZGFyZC1saWJyYXJ5LWluLWdkYi8gZm9yIGFuIGV4YW1wbGUKKyMKKyMgQmFzaWNhbGx5IHRoZSBmb2xsb3dpbmcgbGluZSB0ZWxscyBnZGIgdG8gc2tpcCBhbGwgZnVuY3Rpb25zIGNvbnRhaW5pbmcgdGhlCisjIHJlZ2V4cCAiQ2F0Y2giLCB3aGljaCBtYXRjaGVzIHRoZSBjb21wbGV0ZSBDYXRjaCBuYW1lc3BhY2UuCisjIElmIHlvdSB3YW50IHRvIHNraXAganVzdCBzb21lIHBhcnRzIG9mIHRoZSBDYXRjaCBjb2RlIHlvdSBjYW4gbW9kaWZ5IHRoZQorIyByZWdleHAgYWNjb3JkaW5nbHkuCisjIAorIyBJZiB5b3Ugd2FudCB0byBwZXJtYW5lbnRseSBza2lwIHN0ZXBwaW5nIGludG8gQ2F0Y2ggY29kZSBjb3B5IHRoZSBmb2xsb3dpbmcKKyMgbGluZSBpbnRvIHlvdXIgfi8uZ2RiaW5pdCBmaWxlCisjIAorCitza2lwIC1yZnUgQ2F0Y2gKZGlmZiAtLWdpdCBhL2NvbnRyaWIvbGxkYmluaXQgYi9jb250cmliL2xsZGJpbml0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMTM2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9jb250cmliL2xsZGJpbml0CkBAIC0wLDAgKzEsMTYgQEAKKyMKKyMgVGhpcyBmaWxlIHByb3ZpZGVzIGEgd2F5IHRvIHNraXAgc3RlcHBpbmcgaW50byBDYXRjaCBjb2RlIHdoZW4gZGVidWdnaW5nIHdpdGggbGxkYi4KKyMKKyMgV2l0aCB0aGUgc2V0dGluZyAidGFyZ2V0LnByb2Nlc3MudGhyZWFkLnN0ZXAtYXZvaWQtcmVnZXhwIiB5b3UgY2FuIHRlbGwgbGxkYgorIyB0byBza2lwIGZ1bmN0aW9ucyBtYXRjaGluZyB0aGUgcmVnZXhwCisjCisjIEJhc2ljYWxseSB0aGUgZm9sbG93aW5nIGxpbmUgdGVsbHMgbGxkYiB0byBza2lwIGFsbCBmdW5jdGlvbnMgY29udGFpbmluZyB0aGUKKyMgcmVnZXhwICJDYXRjaCIsIHdoaWNoIG1hdGNoZXMgdGhlIGNvbXBsZXRlIENhdGNoIG5hbWVzcGFjZS4KKyMgSWYgeW91IHdhbnQgdG8gc2tpcCBqdXN0IHNvbWUgcGFydHMgb2YgdGhlIENhdGNoIGNvZGUgeW91IGNhbiBtb2RpZnkgdGhlCisjIHJlZ2V4cCBhY2NvcmRpbmdseS4KKyMKKyMgSWYgeW91IHdhbnQgdG8gcGVybWFuZW50bHkgc2tpcCBzdGVwcGluZyBpbnRvIENhdGNoIGNvZGUgY29weSB0aGUgZm9sbG93aW5nCisjIGxpbmUgaW50byB5b3VyIH4vLmxsZGJpbml0IGZpbGUKKyMKKworc2V0dGluZ3Mgc2V0IHRhcmdldC5wcm9jZXNzLnRocmVhZC5zdGVwLWF2b2lkLXJlZ2V4cCBDYXRjaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2RvY3MvUmVhZG1lLm1kIGIvZG9jcy9SZWFkbWUubWQKaW5kZXggYmU3ZDFjZC4uNzIxODgwYSAxMDA2NDQKLS0tIGEvZG9jcy9SZWFkbWUubWQKKysrIGIvZG9jcy9SZWFkbWUubWQKQEAgLTEyLDYgKzEyLDggQEAKICogW1Rlc3QgZml4dHVyZXNdKHRlc3QtZml4dHVyZXMubWQjdG9wKQogKiBbUmVwb3J0ZXJzXShyZXBvcnRlcnMubWQjdG9wKQogKiBbRXZlbnQgTGlzdGVuZXJzXShldmVudC1saXN0ZW5lcnMubWQjdG9wKQorKiBbRGF0YSBHZW5lcmF0b3JzXShnZW5lcmF0b3JzLm1kI3RvcCkKKyogW090aGVyIG1hY3Jvc10ob3RoZXItbWFjcm9zLm1kI3RvcCkKIAogRmluZSB0dW5pbmc6CiAqIFtTdXBwbHlpbmcgeW91ciBvd24gbWFpbigpXShvd24tbWFpbi5tZCN0b3ApCkBAIC0yMCw3ICsyMiwxMCBAQAogCiBSdW5uaW5nOgogKiBbQ29tbWFuZCBsaW5lXShjb21tYW5kLWxpbmUubWQjdG9wKQotKiBbQ0kgYW5kIEJ1aWxkIHN5c3RlbSBpbnRlZ3JhdGlvbl0oYnVpbGQtc3lzdGVtcy5tZCN0b3ApCisKK09kZHMgYW5kIGVuZHM6CisqIFtDTWFrZSBpbnRlZ3JhdGlvbl0oY21ha2UtaW50ZWdyYXRpb24ubWQjdG9wKQorKiBbQ0kgYW5kIG90aGVyIG1pc2NlbGxhbmVvdXMgcGllY2VzXShjaS1hbmQtbWlzYy5tZCN0b3ApCiAKIEZBUToKICogW1doeSBhcmUgbXkgdGVzdHMgc2xvdyB0byBjb21waWxlP10oc2xvdy1jb21waWxlcy5tZCN0b3ApCkBAIC0zMSwzICszNiw0IEBACiAqIFtPcGVuIFNvdXJjZSBQcm9qZWN0cyB1c2luZyBDYXRjaF0ob3BlbnNvdXJjZS11c2Vycy5tZCN0b3ApCiAqIFtDb250cmlidXRpbmddKGNvbnRyaWJ1dGluZy5tZCN0b3ApCiAqIFtSZWxlYXNlIE5vdGVzXShyZWxlYXNlLW5vdGVzLm1kI3RvcCkKKyogW0RlcHJlY2F0aW9ucyBhbmQgaW5jb21pbmcgY2hhbmdlc10oZGVwcmVjYXRpb25zLm1kI3RvcCkKZGlmZiAtLWdpdCBhL2RvY3MvYXNzZXJ0aW9ucy5tZCBiL2RvY3MvYXNzZXJ0aW9ucy5tZAppbmRleCBlY2U0ZTEwLi45MDBmZDUyIDEwMDY0NAotLS0gYS9kb2NzL2Fzc2VydGlvbnMubWQKKysrIGIvZG9jcy9hc3NlcnRpb25zLm1kCkBAIC02LDEwICs2LDExIEBACiBbRXhjZXB0aW9uc10oI2V4Y2VwdGlvbnMpPGJyPgogW01hdGNoZXIgZXhwcmVzc2lvbnNdKCNtYXRjaGVyLWV4cHJlc3Npb25zKTxicj4KIFtUaHJlYWQgU2FmZXR5XSgjdGhyZWFkLXNhZmV0eSk8YnI+CitbRXhwcmVzc2lvbnMgd2l0aCBjb21tYXNdKCNleHByZXNzaW9ucy13aXRoLWNvbW1hcyk8YnI+CiAKIE1vc3QgdGVzdCBmcmFtZXdvcmtzIGhhdmUgYSBsYXJnZSBjb2xsZWN0aW9uIG9mIGFzc2VydGlvbiBtYWNyb3MgdG8gY2FwdHVyZSBhbGwgcG9zc2libGUgY29uZGl0aW9uYWwgZm9ybXMgKGBgYF9FUVVBTFNgYGAsIGBgYF9OT1RFUVVBTFNgYGAsIGBgYF9HUkVBVEVSX1RIQU5gYGAgZXRjKS4KIAotQ2F0Y2ggaXMgZGlmZmVyZW50LiBCZWNhdXNlIGl0IGRlY29tcG9zZXMgbmF0dXJhbCBDLXN0eWxlIGNvbmRpdGlvbmFsIGV4cHJlc3Npb25zIG1vc3Qgb2YgdGhlc2UgZm9ybXMgYXJlIHJlZHVjZWQgdG8gb25lIG9yIHR3byB0aGF0IHlvdSB3aWxsIHVzZSBhbGwgdGhlIHRpbWUuIFRoYXQgc2FpZCB0aGVyZSBhcmUgYSByaWNoIHNldCBvZiBhdXhpbGxpYXJ5IG1hY3JvcyBhcyB3ZWxsLiBXZSdsbCBkZXNjcmliZSBhbGwgb2YgdGhlc2UgaGVyZS4KK0NhdGNoIGlzIGRpZmZlcmVudC4gQmVjYXVzZSBpdCBkZWNvbXBvc2VzIG5hdHVyYWwgQy1zdHlsZSBjb25kaXRpb25hbCBleHByZXNzaW9ucyBtb3N0IG9mIHRoZXNlIGZvcm1zIGFyZSByZWR1Y2VkIHRvIG9uZSBvciB0d28gdGhhdCB5b3Ugd2lsbCB1c2UgYWxsIHRoZSB0aW1lLiBUaGF0IHNhaWQgdGhlcmUgYXJlIGEgcmljaCBzZXQgb2YgYXV4aWxpYXJ5IG1hY3JvcyBhcyB3ZWxsLiBXZSdsbCBkZXNjcmliZSBhbGwgb2YgdGhlc2UgaGVyZS4KIAogTW9zdCBvZiB0aGVzZSBtYWNyb3MgY29tZSBpbiB0d28gZm9ybXM6CiAKQEAgLTU0LDMzICs1NSw0NSBAQAogCiBXaGVuIGNvbXBhcmluZyBmbG9hdGluZyBwb2ludCBudW1iZXJzIC0gZXNwZWNpYWxseSBpZiBhdCBsZWFzdCBvbmUgb2YgdGhlbSBoYXMgYmVlbiBjb21wdXRlZCAtIGdyZWF0IGNhcmUgbXVzdCBiZSB0YWtlbiB0byBhbGxvdyBmb3Igcm91bmRpbmcgZXJyb3JzIGFuZCBpbmV4YWN0IHJlcHJlc2VudGF0aW9ucy4KIAotQ2F0Y2ggcHJvdmlkZXMgYSB3YXkgdG8gcGVyZm9ybSB0b2xlcmFudCBjb21wYXJpc29ucyBvZiBmbG9hdGluZyBwb2ludCB2YWx1ZXMgdGhyb3VnaCB1c2Ugb2YgYSB3cmFwcGVyIGNsYXNzIGNhbGxlZCBgYGBBcHByb3hgYGAuIGBgYEFwcHJveGBgYCBjYW4gYmUgdXNlZCBvbiBlaXRoZXIgc2lkZSBvZiBhIGNvbXBhcmlzb24gZXhwcmVzc2lvbi4gSXQgb3ZlcmxvYWRzIHRoZSBjb21wYXJpc29ucyBvcGVyYXRvcnMgdG8gdGFrZSBhIHRvbGVyYW5jZSBpbnRvIGFjY291bnQuIEhlcmUncyBhIHNpbXBsZSBleGFtcGxlOgorQ2F0Y2ggcHJvdmlkZXMgYSB3YXkgdG8gcGVyZm9ybSB0b2xlcmFudCBjb21wYXJpc29ucyBvZiBmbG9hdGluZyBwb2ludCB2YWx1ZXMgdGhyb3VnaCB1c2Ugb2YgYSB3cmFwcGVyIGNsYXNzIGNhbGxlZCBgQXBwcm94YC4gYEFwcHJveGAgY2FuIGJlIHVzZWQgb24gZWl0aGVyIHNpZGUgb2YgYSBjb21wYXJpc29uIGV4cHJlc3Npb24uIEl0IG92ZXJsb2FkcyB0aGUgY29tcGFyaXNvbnMgb3BlcmF0b3JzIHRvIHRha2UgYSB0b2xlcmFuY2UgaW50byBhY2NvdW50LiBIZXJlJ3MgYSBzaW1wbGUgZXhhbXBsZToKIAotYGBgCitgYGBjcHAKIFJFUVVJUkUoIHBlcmZvcm1Db21wdXRhdGlvbigpID09IEFwcHJveCggMi4xICkgKTsKIGBgYAogCi1UaGlzIHdheSBgQXBwcm94YCBpcyBjb25zdHJ1Y3RlZCB3aXRoIHJlYXNvbmFibGUgZGVmYXVsdHMsIGNvdmVyaW5nIG1vc3Qgc2ltcGxlIGNhc2VzIG9mIHJvdW5kaW5nIGVycm9ycy4gSWYgdGhlc2UgYXJlIGluc3VmZmljaWVudCwgZWFjaCBgQXBwcm94YCBpbnN0YW5jZSBoYXMgMyB0dW5pbmcga25vYnMsIHRoYXQgY2FuIGJlIHVzZWQgdG8gY3VzdG9taXplIGl0IGZvciB5b3VyIGNvbXB1dGF0aW9uLgorQ2F0Y2ggYWxzbyBwcm92aWRlcyBhIFVETCBmb3IgYEFwcHJveGA7IGBfYWAuIEl0IHJlc2lkZXMgaW4KK3RoZSBgQ2F0Y2g6OmxpdGVyYWxzYCBuYW1lc3BhY2UgYW5kIGNhbiBiZSB1c2VkIGxpa2Ugc286CitgYGBjcHAKK3VzaW5nIG5hbWVzcGFjZSBDYXRjaDo6bGl0ZXJhbHM7CitSRVFVSVJFKCBwZXJmb3JtQ29tcHV0YXRpb24oKSA9PSAyLjFfYSApOworYGBgCiAKLSogX19lcHNpbG9uX18gLSBlcHNpbG9uIHNlcnZlcyB0byBzZXQgdGhlIHBlcmNlbnRhZ2UgYnkgd2hpY2ggYSByZXN1bHQgY2FuIGJlIGVycm9uZW91cywgYmVmb3JlIGl0IGlzIHJlamVjdGVkLiBCeSBkZWZhdWx0IHNldCB0byBgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmVwc2lsb24oKSoxMDBgLgotKiBfX21hcmdpbl9fIC0gbWFyZ2luIHNlcnZlcyB0byBzZXQgdGhlIHRoZSBhYnNvbHV0ZSB2YWx1ZSBieSB3aGljaCBhIHJlc3VsdCBjYW4gYmUgZXJyb25lb3VzIGJlZm9yZSBpdCBpcyByZWplY3RlZC4gQnkgZGVmYXVsdCBzZXQgdG8gYDAuMGAuCi0qIF9fc2NhbGVfXyAtIHNjYWxlIHNlcnZlcyB0byBhZGp1c3QgdGhlIGVwc2lsb24ncyBtdWx0aXBsaWNhdG9yLiBCeSBkZWZhdWx0IHNldCB0byBgMC4wYC4KK2BBcHByb3hgIGlzIGNvbnN0cnVjdGVkIHdpdGggZGVmYXVsdHMgdGhhdCBzaG91bGQgY292ZXIgbW9zdCBzaW1wbGUgY2FzZXMuCitGb3IgdGhlIG1vcmUgY29tcGxleCBjYXNlcywgYEFwcHJveGAgcHJvdmlkZXMgMyBjdXN0b21pemF0aW9uIHBvaW50czoKKworKiBfX2Vwc2lsb25fXyAtIGVwc2lsb24gc2VydmVzIHRvIHNldCB0aGUgY29lZmZpY2llbnQgYnkgd2hpY2ggYSByZXN1bHQKK2NhbiBkaWZmZXIgZnJvbSBgQXBwcm94YCdzIHZhbHVlIGJlZm9yZSBpdCBpcyByZWplY3RlZC4KK19CeSBkZWZhdWx0IHNldCB0byBgc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OmVwc2lsb24oKSoxMDBgLl8KKyogX19tYXJnaW5fXyAtIG1hcmdpbiBzZXJ2ZXMgdG8gc2V0IHRoZSB0aGUgYWJzb2x1dGUgdmFsdWUgYnkgd2hpY2gKK2EgcmVzdWx0IGNhbiBkaWZmZXIgZnJvbSBgQXBwcm94YCdzIHZhbHVlIGJlZm9yZSBpdCBpcyByZWplY3RlZC4KK19CeSBkZWZhdWx0IHNldCB0byBgMC4wYC5fCisqIF9fc2NhbGVfXyAtIHNjYWxlIGlzIHVzZWQgdG8gY2hhbmdlIHRoZSBtYWduaXR1ZGUgb2YgYEFwcHJveGAgZm9yIHJlbGF0aXZlIGNoZWNrLgorX0J5IGRlZmF1bHQgc2V0IHRvIGAwLjBgLl8KIAogIyMjIyBlcHNpbG9uIGV4YW1wbGUKIGBgYGNwcAogQXBwcm94IHRhcmdldCA9IEFwcHJveCgxMDApLmVwc2lsb24oMC4wMSk7CiAxMDAuMCA9PSB0YXJnZXQ7IC8vIE9idmlvdXNseSB0cnVlCiAyMDAuMCA9PSB0YXJnZXQ7IC8vIE9idmlvdXNseSBzdGlsbCBmYWxzZQotMTAwLjUgPT0gdGFyZ2V0OyAvLyBUcnVlLCBiZWNhdXNlIHdlIHNldCB0YXJnZXQgdG8gYWxsb3cgdXAgdG8gMSUgZXJyb3IKKzEwMC41ID09IHRhcmdldDsgLy8gVHJ1ZSwgYmVjYXVzZSB3ZSBzZXQgdGFyZ2V0IHRvIGFsbG93IHVwIHRvIDElIGRpZmZlcmVuY2UKIGBgYAogCiAjIyMjIG1hcmdpbiBleGFtcGxlCi1fTWFyZ2luIGNoZWNrIGlzIHVzZWQgb25seSBpZiB0aGUgcmVsYXRpdmUgKGVwc2lsb24gYW5kIHNjYWxlIGJhc2VkKSBjaGVjayBmYWlscy5fCiBgYGBjcHAKIEFwcHJveCB0YXJnZXQgPSBBcHByb3goMTAwKS5tYXJnaW4oNSk7CiAxMDAuMCA9PSB0YXJnZXQ7IC8vIE9idmlvdXNseSB0cnVlCiAyMDAuMCA9PSB0YXJnZXQ7IC8vIE9idmlvdXNseSBzdGlsbCBmYWxzZQotMTA0LjAgPT0gdGFyZ2V0OyAvLyBUcnVlLCBiZWNhdXNlIHdlIHNldCB0YXJnZXQgdG8gYWxsb3cgYWJzb2x1dGUgZXJyb3IgdXAgdG8gNQorMTA0LjAgPT0gdGFyZ2V0OyAvLyBUcnVlLCBiZWNhdXNlIHdlIHNldCB0YXJnZXQgdG8gYWxsb3cgYWJzb2x1dGUgZGlmZmVyZW5jZSBvZiBhdCBtb3N0IDUKIGBgYAogCiAjIyMjIHNjYWxlCkBAIC0xNTUsNiArMTY4LDM0IEBACiBDdXJyZW50bHkgYXNzZXJ0aW9ucyBpbiBDYXRjaCBhcmUgbm90IHRocmVhZCBzYWZlLgogRm9yIG1vcmUgZGV0YWlscywgYWxvbmcgd2l0aCB3b3JrYXJvdW5kcywgc2VlIHRoZSBzZWN0aW9uIG9uIFt0aGUgbGltaXRhdGlvbnMgcGFnZV0obGltaXRhdGlvbnMubWQjdGhyZWFkLXNhZmUtYXNzZXJ0aW9ucykuCiAKKyMjIEV4cHJlc3Npb25zIHdpdGggY29tbWFzCisKK0JlY2F1c2UgdGhlIHByZXByb2Nlc3NvciBwYXJzZXMgY29kZSB1c2luZyBkaWZmZXJlbnQgcnVsZXMgdGhhbiB0aGUKK2NvbXBpbGVyLCBtdWx0aXBsZS1hcmd1bWVudCBhc3NlcnRpb25zIChlLmcuIGBSRVFVSVJFX1RIUk9XU19BU2ApIGhhdmUKK3Byb2JsZW1zIHdpdGggY29tbWFzIGluc2lkZSB0aGUgcHJvdmlkZWQgZXhwcmVzc2lvbnMuIEFzIGFuIGV4YW1wbGUKK2BSRVFVSVJFX1RIUk9XU19BUyhzdGQ6OnBhaXI8aW50LCBpbnQ+KDEsIDIpLCBzdGQ6OmludmFsaWRfYXJndW1lbnQpO2AKK3dpbGwgZmFpbCB0byBjb21waWxlLCBiZWNhdXNlIHRoZSBwcmVwcm9jZXNzb3Igc2VlcyAzIGFyZ3VtZW50cyBwcm92aWRlZCwKK2J1dCB0aGUgbWFjcm8gYWNjZXB0cyBvbmx5IDIuIFRoZXJlIGFyZSB0d28gcG9zc2libGUgd29ya2Fyb3VuZHMuCisKKzEpIFVzZSB0eXBlZGVmOgorYGBgY3BwCit1c2luZyBpbnRfcGFpciA9IHN0ZDo6cGFpcjxpbnQsIGludD47CitSRVFVSVJFX1RIUk9XU19BUyhpbnRfcGFpcigxLCAyKSwgc3RkOjppbnZhbGlkX2FyZ3VtZW50KTsKK2BgYAorCitUaGlzIHNvbHV0aW9uIGlzIGFsd2F5cyBhcHBsaWNhYmxlLCBidXQgbWFrZXMgdGhlIG1lYW5pbmcgb2YgdGhlIGNvZGUKK2xlc3MgY2xlYXIuCisKKzIpIFBhcmVudGhlc2l6ZSB0aGUgZXhwcmVzc2lvbjoKK2BgYGNwcAorVEVTVF9DQVNFX01FVEhPRCgoRml4dHVyZTxpbnQsIGludD4pLCAiZm9vIiwgIltiYXJdIikgeworICAgIFNVQ0NFRUQoKTsKK30KK2BgYAorCitUaGlzIHNvbHV0aW9uIGlzIG5vdCBhbHdheXMgYXBwbGljYWJsZSwgYmVjYXVzZSBpdCBtaWdodCByZXF1aXJlIGV4dHJhCitjaGFuZ2VzIG9uIHRoZSBDYXRjaCdzIHNpZGUgdG8gd29yay4KKwogLS0tCiAKIFtIb21lXShSZWFkbWUubWQjdG9wKQpkaWZmIC0tZ2l0IGEvZG9jcy9idWlsZC1zeXN0ZW1zLm1kIGIvZG9jcy9idWlsZC1zeXN0ZW1zLm1kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODczYmM2Li4wMDAwMDAwCi0tLSBhL2RvY3MvYnVpbGQtc3lzdGVtcy5tZAorKysgL2Rldi9udWxsCkBAIC0xLDE3NSArMCwwIEBACi08YSBpZD0idG9wIj48L2E+Ci0jIENJIGFuZCBidWlsZCBzeXN0ZW0gaW50ZWdyYXRpb24KLQotQnVpbGQgU3lzdGVtcyBtYXkgcmVmZXIgdG8gbG93LWxldmVsIHRvb2xzLCBsaWtlIENNYWtlLCBvciBsYXJnZXIgc3lzdGVtcyB0aGF0IHJ1biBvbiBzZXJ2ZXJzLCBsaWtlIEplbmtpbnMgb3IgVGVhbUNpdHkuIFRoaXMgcGFnZSB3aWxsIHRhbGsgYWJvdXQgYm90aC4KLQotIyMgQ29udGludW91cyBJbnRlZ3JhdGlvbiBzeXN0ZW1zCi0KLVByb2JhYmx5IHRoZSBtb3N0IGltcG9ydGFudCBhc3BlY3QgdG8gdXNpbmcgQ2F0Y2ggd2l0aCBhIGJ1aWxkIHNlcnZlciBpcyB0aGUgdXNlIG9mIGRpZmZlcmVudCByZXBvcnRlcnMuIENhdGNoIGNvbWVzIGJ1bmRsZWQgd2l0aCB0aHJlZSByZXBvcnRlcnMgdGhhdCBzaG91bGQgY292ZXIgdGhlIG1ham9yaXR5IG9mIGJ1aWxkIHNlcnZlcnMgb3V0IHRoZXJlIC0gYWx0aG91Z2ggYWRkaW5nIG1vcmUgZm9yIGJldHRlciBpbnRlZ3JhdGlvbiB3aXRoIHNvbWUgaXMgYWx3YXlzIGEgcG9zc2liaWxpdHkgKGN1cnJlbnRseSB3ZSBhbHNvIG9mZmVyIFRlYW1DaXR5LCBUQVAgYW5kIEF1dG9tYWtlIHJlcG9ydGVycykuCi0KLVR3byBvZiB0aGVzZSByZXBvcnRlcnMgYXJlIGJ1aWx0IGluIChYTUwgYW5kIEpVbml0KSBhbmQgdGhlIHRoaXJkIChUZWFtQ2l0eSkgaXMgaW5jbHVkZWQgYXMgYSBzZXBhcmF0ZSBoZWFkZXIuIEl0J3MgcG9zc2libGUgdGhhdCB0aGUgb3RoZXIgdHdvIG1heSBiZSBzcGxpdCBvdXQgaW4gdGhlIGZ1dHVyZSB0b28gLSBhcyB0aGF0IHdvdWxkIG1ha2UgdGhlIGNvcmUgb2YgQ2F0Y2ggc21hbGxlciBmb3IgdGhvc2UgdGhhdCBkb24ndCBuZWVkIHRoZW0uCi0KLSMjIyBYTUwgUmVwb3J0ZXIKLWBgYC1yIHhtbGBgYCAKLQotVGhlIFhNTCBSZXBvcnRlciB3cml0ZXMgaW4gYW4gWE1MIGZvcm1hdCB0aGF0IGlzIHNwZWNpZmljIHRvIENhdGNoLiAKLQotVGhlIGFkdmFudGFnZSBvZiB0aGlzIGZvcm1hdCBpcyB0aGF0IGl0IGNvcnJlc3BvbmRzIHdlbGwgdG8gdGhlIHdheSBDYXRjaCB3b3JrcyAoZXNwZWNpYWxseSB0aGUgbW9yZSB1bnVzdWFsIGZlYXR1cmVzLCBzdWNoIGFzIG5lc3RlZCBzZWN0aW9ucykgYW5kIGlzIGEgZnVsbHkgc3RyZWFtaW5nIGZvcm1hdCAtIHRoYXQgaXMgaXQgd3JpdGVzIG91dHB1dCBhcyBpdCBnb2VzLCB3aXRob3V0IGhhdmluZyB0byBzdG9yZSB1cCBhbGwgaXRzIHJlc3VsdHMgYmVmb3JlIGl0IGNhbiBzdGFydCB3cml0aW5nLgotCi1UaGUgZGlzYWR2YW50YWdlIGlzIHRoYXQsIGJlaW5nIHNwZWNpZmljIHRvIENhdGNoLCBubyBleGlzdGluZyBidWlsZCBzZXJ2ZXJzIHVuZGVyc3RhbmQgdGhlIGZvcm1hdCBuYXRpdmVseS4gSXQgY2FuIGJlIHVzZWQgYXMgaW5wdXQgdG8gYW4gWFNMVCB0cmFuc2Zvcm1hdGlvbiB0aGF0IGNvdWxkIGNvbnZlcnQgaXQgdG8sIHNheSwgSFRNTCAtIGFsdGhvdWdoIHRoaXMgbG9zZXMgdGhlIHN0cmVhbWluZyBhZHZhbnRhZ2UsIG9mIGNvdXJzZS4KLQotIyMjIEpVbml0IFJlcG9ydGVyCi1gYGAtciBqdW5pdGBgYAotCi1UaGUgSlVuaXQgUmVwb3J0ZXIgd3JpdGVzIGluIGFuIFhNTCBmb3JtYXQgdGhhdCBtaW1pY3MgdGhlIEpVbml0IEFOVCBzY2hlbWEuCi0KLVRoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmb3JtYXQgaXMgdGhhdCB0aGUgSlVuaXQgQW50IHNjaGVtYSBpcyB3aWRlbHkgdW5kZXJzdG9vZCBieSBtb3N0IGJ1aWxkIHNlcnZlcnMgYW5kIHNvIGNhbiB1c3VhbGx5IGJlIGNvbnN1bWVkIHdpdGggbm8gYWRkaXRpb25hbCB3b3JrLgotCi1UaGUgZGlzYWR2YW50YWdlIGlzIHRoYXQgdGhpcyBzY2hlbWEgd2FzIGRlc2lnbmVkIHRvIGNvcnJlc3BvbmQgdG8gaG93IEpVbml0IHdvcmtzIC0gYW5kIHRoZXJlIGlzIGEgc2lnbmlmaWNhbnQgbWlzbWF0Y2ggd2l0aCBob3cgQ2F0Y2ggd29ya3MuIEFkZGl0aW9uYWxseSB0aGUgZm9ybWF0IGlzIG5vdCBzdHJlYW1hYmxlIChiZWNhdXNlIG9wZW5pbmcgZWxlbWVudHMgaG9sZCBjb3VudHMgb2YgZmFpbGVkIGFuZCBwYXNzaW5nIHRlc3RzIGFzIGF0dHJpYnV0ZXMpIC0gc28gdGhlIHdob2xlIHRlc3QgcnVuIG11c3QgY29tcGxldGUgYmVmb3JlIGl0IGNhbiBiZSB3cml0dGVuLgotCi0jIyBPdGhlciByZXBvcnRlcnMKLU90aGVyIHJlcG9ydGVycyBhcmUgbm90IHBhcnQgb2YgdGhlIHNpbmdsZS1oZWFkZXIgZGlzdHJpYnV0aW9uIGFuZCBuZWVkCi10byBiZSBkb3dubG9hZGVkIGFuZCBpbmNsdWRlZCBzZXBhcmF0ZWx5LiBBbGwgcmVwb3J0ZXJzIGFyZSBzdG9yZWQgaW4KLWBzaW5nbGVfaW5jbHVkZWAgZGlyZWN0b3J5IGluIHRoZSBnaXQgcmVwb3NpdG9yeSwgYW5kIGFyZSBuYW1lZAotYGNhdGNoX3JlcG9ydGVyXyouaHBwYC4gRm9yIGV4YW1wbGUsIHRvIHVzZSB0aGUgVGVhbUNpdHkgcmVwb3J0ZXIgeW91Ci1uZWVkIHRvIGRvd25sb2FkIGBzaW5nbGVfaW5jbHVkZS9jYXRjaF9yZXBvcnRlcl90ZWFtY2l0eS5ocHBgIGFuZCBpbmNsdWRlCi1pdCBhZnRlciBDYXRjaCBpdHNlbGYuCi0KLWBgYGNwcAotI2RlZmluZSBDQVRDSF9DT05GSUdfTUFJTgotI2luY2x1ZGUgImNhdGNoLmhwcCIKLSNpbmNsdWRlICJjYXRjaF9yZXBvcnRlcl90ZWFtY2l0eS5ocHAiCi1gYGAKLQotIyMjIFRlYW1DaXR5IFJlcG9ydGVyCi1gYGAtciB0ZWFtY2l0eWBgYAotCi1UaGUgVGVhbUNpdHkgUmVwb3J0ZXIgd3JpdGVzIFRlYW1DaXR5IHNlcnZpY2UgbWVzc2FnZXMgdG8gc3Rkb3V0LiBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSB0aGlzIHJlcG9ydGVyIGFuIGFkZGl0aW9uYWwgaGVhZGVyIG11c3QgYWxzbyBiZSBpbmNsdWRlZC4KLQotQmVpbmcgc3BlY2lmaWMgdG8gVGVhbUNpdHkgdGhpcyBpcyB0aGUgYmVzdCByZXBvcnRlciB0byB1c2Ugd2l0aCBpdCAtIGJ1dCBpdCBpcyBjb21wbGV0ZWx5IHVuc3VpdGFibGUgZm9yIGFueSBvdGhlciBwdXJwb3NlLiBJdCBpcyBhIHN0cmVhbWluZyBmb3JtYXQgKGl0IHdyaXRlcyBhcyBpdCBnb2VzKSAtIGFsdGhvdWdoIHRlc3QgcmVzdWx0cyBkb24ndCBhcHBlYXIgaW4gdGhlIFRlYW1DaXR5IGludGVyZmFjZSB1bnRpbCB0aGUgY29tcGxldGlvbiBvZiBhIHN1aXRlICh1c3VhbGx5IHRoZSB3aG9sZSB0ZXN0IHJ1bikuCi0KLSMjIyBBdXRvbWFrZSBSZXBvcnRlcgotYGBgLXIgYXV0b21ha2VgYGAKLQotVGhlIEF1dG9tYWtlIFJlcG9ydGVyIHdyaXRlcyBvdXQgdGhlIFttZXRhIHRhZ3NdKGh0dHBzOi8vd3d3LmdudS5vcmcvc29mdHdhcmUvYXV0b21ha2UvbWFudWFsL2h0bWxfbm9kZS9Mb2ctZmlsZXMtZ2VuZXJhdGlvbi1hbmQtdGVzdC1yZXN1bHRzLXJlY29yZGluZy5odG1sI0xvZy1maWxlcy1nZW5lcmF0aW9uLWFuZC10ZXN0LXJlc3VsdHMtcmVjb3JkaW5nKSBleHBlY3RlZCBieSBhdXRvbWFrZSB2aWEgYG1ha2UgY2hlY2tgLgotCi0jIyMgVEFQIChUZXN0IEFueXRoaW5nIFByb3RvY29sKSBSZXBvcnRlcgotYGBgLXIgdGFwYGBgCi0KLUJlY2F1c2Ugb2YgdGhlIGluY3JlbWVudGFsIG5hdHVyZSBvZiBDYXRjaCdzIHRlc3Qgc3VpdGVzIGFuZCBhYmlsaXR5IHRvIHJ1biBzcGVjaWZpYyB0ZXN0cywgb3VyIGltcGxlbWVudGF0aW9uIG9mIFRBUCByZXBvcnRlciB3cml0ZXMgb3V0IHRoZSBudW1iZXIgb2YgdGVzdHMgaW4gYSBzdWl0ZSBsYXN0LgotCi0jIyBMb3ctbGV2ZWwgdG9vbHMKLQotIyMjIFByZWNvbXBpbGVkIGhlYWRlcnMgKFBDSHMpCi0KLUNhdGNoIG9mZmVycyBwcm90b3R5cGFsIHN1cHBvcnQgZm9yIGJlaW5nIGluY2x1ZGVkIGluIHByZWNvbXBpbGVkIGhlYWRlcnMsIGJ1dCBiZWNhdXNlIG9mIGl0cyBzaW5nbGUtaGVhZGVyIG5hdHVyZSBpdCBkb2VzIG5lZWQgc29tZSBhY3Rpb25zIGJ5IHRoZSB1c2VyOgotKiBUaGUgcHJlY29tcGlsZWQgaGVhZGVyIG5lZWRzIHRvIGRlZmluZSBgQ0FUQ0hfQ09ORklHX0FMTF9QQVJUU2AKLSogVGhlIGltcGxlbWVudGF0aW9uIGZpbGUgbmVlZHMgdG8KLSAgKiB1bmRlZmluZSBgVFdPQkxVRUNVQkVTX1NJTkdMRV9JTkNMVURFX0NBVENIX0hQUF9JTkNMVURFRGAKLSAgKiBkZWZpbmUgYENBVENIX0NPTkZJR19JTVBMX09OTFlgCi0gICogZGVmaW5lIGBDQVRDSF9DT05GSUdfTUFJTmAgb3IgYENBVENIX0NPTkZJR19SVU5ORVJgCi0gICogaW5jbHVkZSAiY2F0Y2guaHBwIiBhZ2FpbgotCi0KLSMjIyBDTWFrZQotCi1JbiBnZW5lcmFsIHdlIHJlY29tbWVuZCAidmVuZG9yaW5nIiBDYXRjaCdzIHNpbmdsZS1pbmNsdWRlIHJlbGVhc2VzIGluc2lkZSB5b3VyIG93biByZXBvc2l0b3J5LiBJZiB5b3UgZG8gdGhpcywgdGhlIGZvbGxvd2luZyBleGFtcGxlIHNob3dzIGEgbWluaW1hbCBDTWFrZSBwcm9qZWN0OgotYGBgQ01ha2UKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjApCi0KLXByb2plY3QoY21ha2VfdGVzdCkKLQotIyBQcmVwYXJlICJDYXRjaCIgbGlicmFyeSBmb3Igb3RoZXIgZXhlY3V0YWJsZXMKLXNldChDQVRDSF9JTkNMVURFX0RJUiAke0NNQUtFX0NVUlJFTlRfU09VUkNFX0RJUn0vY2F0Y2gpCi1hZGRfbGlicmFyeShDYXRjaCBJTlRFUkZBQ0UpCi10YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhDYXRjaCBJTlRFUkZBQ0UgJHtDQVRDSF9JTkNMVURFX0RJUn0pCi0KLSMgTWFrZSB0ZXN0IGV4ZWN1dGFibGUKLXNldChURVNUX1NPVVJDRVMgJHtDTUFLRV9DVVJSRU5UX1NPVVJDRV9ESVJ9L21haW4uY3BwKQotYWRkX2V4ZWN1dGFibGUodGVzdHMgJHtURVNUX1NPVVJDRVN9KQotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RzIENhdGNoKQotYGBgCi1Ob3RlIHRoYXQgaXQgYXNzdW1lcyB0aGF0IHRoZSBwYXRoIHRvIHRoZSBDYXRjaCdzIGhlYWRlciBpcyBgY2F0Y2gvY2F0Y2guaHBwYCBmcm9tIHRoZSBgQ01ha2VMaXN0cy50eHRgIGZpbGUuCi0KLQotWW91IGNhbiBhbHNvIHVzZSB0aGUgZm9sbG93aW5nIENNYWtlIHNuaXBwZXQgdG8gYXV0b21hdGljYWxseSBmZXRjaCB0aGUgZW50aXJlIENhdGNoIHJlcG9zaXRvcnkgZnJvbSBnaXRodWIgYW5kIGNvbmZpZ3VyZSBpdCBhcyBhbiBleHRlcm5hbCBwcm9qZWN0OgotYGBgQ01ha2UKLWNtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAyLjguOCkKLXByb2plY3QoY2F0Y2hfYnVpbGRlciBDWFgpCi1pbmNsdWRlKEV4dGVybmFsUHJvamVjdCkKLWZpbmRfcGFja2FnZShHaXQgUkVRVUlSRUQpCi0KLUV4dGVybmFsUHJvamVjdF9BZGQoCi0gICAgY2F0Y2gKLSAgICBQUkVGSVggJHtDTUFLRV9CSU5BUllfRElSfS9jYXRjaAotICAgIEdJVF9SRVBPU0lUT1JZIGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsc3F1YXJlZC9DYXRjaC5naXQKLSAgICBUSU1FT1VUIDEwCi0gICAgVVBEQVRFX0NPTU1BTkQgJHtHSVRfRVhFQ1VUQUJMRX0gcHVsbAotICAgIENPTkZJR1VSRV9DT01NQU5EICIiCi0gICAgQlVJTERfQ09NTUFORCAiIgotICAgIElOU1RBTExfQ09NTUFORCAiIgotICAgIExPR19ET1dOTE9BRCBPTgotICAgKQotCi0jIEV4cG9zZSByZXF1aXJlZCB2YXJpYWJsZSAoQ0FUQ0hfSU5DTFVERV9ESVIpIHRvIHBhcmVudCBzY29wZQotRXh0ZXJuYWxQcm9qZWN0X0dldF9Qcm9wZXJ0eShjYXRjaCBzb3VyY2VfZGlyKQotc2V0KENBVENIX0lOQ0xVREVfRElSICR7c291cmNlX2Rpcn0vc2luZ2xlX2luY2x1ZGUgQ0FDSEUgSU5URVJOQUwgIlBhdGggdG8gaW5jbHVkZSBmb2xkZXIgZm9yIENhdGNoIikKLWBgYAotCi1JZiB5b3UgcHV0IGl0IGluLCBlLmcuLCBgJHtQUk9KRUNUX1NSQ19ESVJ9LyR7RVhUX1BST0pFQ1RTX0RJUn0vY2F0Y2gvYCwgeW91IGNhbiB1c2UgaXQgaW4geW91ciBwcm9qZWN0IGJ5IGFkZGluZyB0aGUgZm9sbG93aW5nIHRvIHlvdXIgcm9vdCBDTWFrZSBmaWxlOgotCi1gYGBDTWFrZQotIyBJbmNsdWRlcyBDYXRjaCBpbiB0aGUgcHJvamVjdDoKLWFkZF9zdWJkaXJlY3RvcnkoJHtFWFRfUFJPSkVDVFNfRElSfS9jYXRjaCkKLWluY2x1ZGVfZGlyZWN0b3JpZXMoJHtDQVRDSF9JTkNMVURFX0RJUn0gJHtDT01NT05fSU5DTFVERVN9KQotZW5hYmxlX3Rlc3RpbmcodHJ1ZSkgICMgRW5hYmxlcyB1bml0LXRlc3RpbmcuCi1gYGAKLQotVGhlIGFkdmFudGFnZSBvZiB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgeW91IGNhbiBhbHdheXMgYXV0b21hdGljYWxseSB1cGRhdGUgQ2F0Y2ggdG8gdGhlIGxhdGVzdCByZWxlYXNlLiBUaGUgZGlzYWR2YW50YWdlIGlzIHRoYXQgaXQgbWVhbnMgYnJpbmdpbmcgaW4gbG90IG1vcmUgdGhhbiB5b3UgbmVlZC4KLQotCi0jIyMgQXV0b21hdGljIHRlc3QgcmVnaXN0cmF0aW9uCi1XZSBwcm92aWRlIDIgQ01ha2Ugc2NyaXB0cyB0aGF0IGNhbiBhdXRvbWF0aWNhbGx5IHJlZ2lzdGVyIENhdGNoLWJhc2VkCi10ZXN0cyB3aXRoIENUZXN0LAotICAqIGBjb250cmliL1BhcnNlQW5kQWRkQ2F0Y2hUZXN0cy5jbWFrZWAKLSAgKiBgY29udHJpYi9DYXRjaEFkZFRlc3RzLmNtYWtlYAotCi1UaGUgZmlyc3QgaXMgYmFzZWQgb24gcGFyc2luZyB0aGUgdGVzdCBpbXBsZW1lbnRhdGlvbiBmaWxlcywgYW5kIGF0dGVtcHRzCi10byByZWdpc3RlciBhbGwgYFRFU1RfQ0FTRWBzIHVzaW5nIHRoZWlyIHRhZ3MgYXMgbGFiZWxzLiBUaGlzIG1lYW5zIHRoYXQKLXRoZXNlOgotCi1gYGBjcHAKLVRFU1RfQ0FTRSgiVGVzdDEiLCAiW3VuaXRdIikgewotICAgIGludCBhID0gMTsKLSAgICBpbnQgYiA9IDI7Ci0gICAgUkVRVUlSRShhID09IGIpOwotfQotCi1URVNUX0NBU0UoIlRlc3QyIikgewotICAgIGludCBhID0gMTsKLSAgICBpbnQgYiA9IDI7Ci0gICAgUkVRVUlSRShhID09IGIpOwotfQotCi1URVNUX0NBU0UoIlRlc3QzIiwgIlthXVtiXVtjXSIpIHsKLSAgICBpbnQgYSA9IDE7Ci0gICAgaW50IGIgPSAyOwotICAgIFJFUVVJUkUoYSA9PSBiKTsKLX0KLWBgYAotd291bGQgYmUgcmVnaXN0ZXJlZCBhcyAzIHRlc3RzLCBgVGVzdDFgLCBgVGVzdDJgIGFuZCBgVGVzdDNgLAotYW5kIDQgQ1Rlc3QgbGFiZWxzIHdvdWxkIGJlIGNyZWF0ZWQsIGBhYCwgYGJgLCBgY2AgYW5kIGB1bml0YC4KLQotCi1UaGUgc2Vjb25kIGlzIGJhc2VkIG9uIHBhcnNpbmcgdGhlIG91dHB1dCBvZiBhIENhdGNoIGJpbmFyeSBnaXZlbgotYC0tbGlzdC10ZXN0LW5hbWVzLW9ubHlgLiBUaGlzIG1lYW5zIHRoYXQgaXQgZGVhbHMgd2l0aCBpbmFjdGl2ZQotKGUuZy4gY29tbWVudGVkLW91dCkgdGVzdHMgYmV0dGVyLCBidXQgcmVxdWlyZXMgQ01ha2UgMy4xMCBmb3IgZnVsbAotZnVuY3Rpb25hbGl0eS4KLQotIyMjIENvZGVDb3ZlcmFnZSBtb2R1bGUgKEdDT1YsIExDT1YuLi4pCi0KLUlmIHlvdSBhcmUgdXNpbmcgR0NPViB0b29sIHRvIGdldCB0ZXN0aW5nIGNvdmVyYWdlIG9mIHlvdXIgY29kZSwgYW5kIGFyZSBub3Qgc3VyZSBob3cgdG8gaW50ZWdyYXRlIGl0IHdpdGggQ01ha2UgYW5kIENhdGNoLCB0aGVyZSBzaG91bGQgYmUgYW4gZXh0ZXJuYWwgZXhhbXBsZSBvdmVyIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9ma3JvbWVyL2NhdGNoX2NtYWtlX2NvdmVyYWdlCi0KLS0tLQotCi1bSG9tZV0oUmVhZG1lLm1kI3RvcCkKZGlmZiAtLWdpdCBhL2RvY3MvY2ktYW5kLW1pc2MubWQgYi9kb2NzL2NpLWFuZC1taXNjLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMzMwODcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NpLWFuZC1taXNjLm1kCkBAIC0wLDAgKzEsMTA4IEBACis8YSBpZD0idG9wIj48L2E+CisjIENJIGFuZCBvdGhlciBvZGQgcGllY2VzCisKKyoqQ29udGVudHMqKjxicj4KK1tDb250aW51b3VzIEludGVncmF0aW9uIHN5c3RlbXNdKCNjb250aW51b3VzLWludGVncmF0aW9uLXN5c3RlbXMpPGJyPgorW090aGVyIHJlcG9ydGVyc10oI290aGVyLXJlcG9ydGVycyk8YnI+CitbTG93LWxldmVsIHRvb2xzXSgjbG93LWxldmVsLXRvb2xzKTxicj4KK1tDTWFrZV0oI2NtYWtlKTxicj4KKworVGhpcyBwYWdlIHRhbGtzIGFib3V0IGhvdyBDYXRjaCBpbnRlZ3JhdGVzIHdpdGggQ29udGludW91cyBJbnRlZ3JhdGlvbiAKK0J1aWxkIFN5c3RlbXMgbWF5IHJlZmVyIHRvIGxvdy1sZXZlbCB0b29scywgbGlrZSBDTWFrZSwgb3IgbGFyZ2VyIHN5c3RlbXMgdGhhdCBydW4gb24gc2VydmVycywgbGlrZSBKZW5raW5zIG9yIFRlYW1DaXR5LiBUaGlzIHBhZ2Ugd2lsbCB0YWxrIGFib3V0IGJvdGguCisKKyMjIENvbnRpbnVvdXMgSW50ZWdyYXRpb24gc3lzdGVtcworCitQcm9iYWJseSB0aGUgbW9zdCBpbXBvcnRhbnQgYXNwZWN0IHRvIHVzaW5nIENhdGNoIHdpdGggYSBidWlsZCBzZXJ2ZXIgaXMgdGhlIHVzZSBvZiBkaWZmZXJlbnQgcmVwb3J0ZXJzLiBDYXRjaCBjb21lcyBidW5kbGVkIHdpdGggdGhyZWUgcmVwb3J0ZXJzIHRoYXQgc2hvdWxkIGNvdmVyIHRoZSBtYWpvcml0eSBvZiBidWlsZCBzZXJ2ZXJzIG91dCB0aGVyZSAtIGFsdGhvdWdoIGFkZGluZyBtb3JlIGZvciBiZXR0ZXIgaW50ZWdyYXRpb24gd2l0aCBzb21lIGlzIGFsd2F5cyBhIHBvc3NpYmlsaXR5IChjdXJyZW50bHkgd2UgYWxzbyBvZmZlciBUZWFtQ2l0eSwgVEFQIGFuZCBBdXRvbWFrZSByZXBvcnRlcnMpLgorCitUd28gb2YgdGhlc2UgcmVwb3J0ZXJzIGFyZSBidWlsdCBpbiAoWE1MIGFuZCBKVW5pdCkgYW5kIHRoZSB0aGlyZCAoVGVhbUNpdHkpIGlzIGluY2x1ZGVkIGFzIGEgc2VwYXJhdGUgaGVhZGVyLiBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIG90aGVyIHR3byBtYXkgYmUgc3BsaXQgb3V0IGluIHRoZSBmdXR1cmUgdG9vIC0gYXMgdGhhdCB3b3VsZCBtYWtlIHRoZSBjb3JlIG9mIENhdGNoIHNtYWxsZXIgZm9yIHRob3NlIHRoYXQgZG9uJ3QgbmVlZCB0aGVtLgorCisjIyMgWE1MIFJlcG9ydGVyCitgYGAtciB4bWxgYGAgCisKK1RoZSBYTUwgUmVwb3J0ZXIgd3JpdGVzIGluIGFuIFhNTCBmb3JtYXQgdGhhdCBpcyBzcGVjaWZpYyB0byBDYXRjaC4gCisKK1RoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmb3JtYXQgaXMgdGhhdCBpdCBjb3JyZXNwb25kcyB3ZWxsIHRvIHRoZSB3YXkgQ2F0Y2ggd29ya3MgKGVzcGVjaWFsbHkgdGhlIG1vcmUgdW51c3VhbCBmZWF0dXJlcywgc3VjaCBhcyBuZXN0ZWQgc2VjdGlvbnMpIGFuZCBpcyBhIGZ1bGx5IHN0cmVhbWluZyBmb3JtYXQgLSB0aGF0IGlzIGl0IHdyaXRlcyBvdXRwdXQgYXMgaXQgZ29lcywgd2l0aG91dCBoYXZpbmcgdG8gc3RvcmUgdXAgYWxsIGl0cyByZXN1bHRzIGJlZm9yZSBpdCBjYW4gc3RhcnQgd3JpdGluZy4KKworVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0LCBiZWluZyBzcGVjaWZpYyB0byBDYXRjaCwgbm8gZXhpc3RpbmcgYnVpbGQgc2VydmVycyB1bmRlcnN0YW5kIHRoZSBmb3JtYXQgbmF0aXZlbHkuIEl0IGNhbiBiZSB1c2VkIGFzIGlucHV0IHRvIGFuIFhTTFQgdHJhbnNmb3JtYXRpb24gdGhhdCBjb3VsZCBjb252ZXJ0IGl0IHRvLCBzYXksIEhUTUwgLSBhbHRob3VnaCB0aGlzIGxvc2VzIHRoZSBzdHJlYW1pbmcgYWR2YW50YWdlLCBvZiBjb3Vyc2UuCisKKyMjIyBKVW5pdCBSZXBvcnRlcgorYGBgLXIganVuaXRgYGAKKworVGhlIEpVbml0IFJlcG9ydGVyIHdyaXRlcyBpbiBhbiBYTUwgZm9ybWF0IHRoYXQgbWltaWNzIHRoZSBKVW5pdCBBTlQgc2NoZW1hLgorCitUaGUgYWR2YW50YWdlIG9mIHRoaXMgZm9ybWF0IGlzIHRoYXQgdGhlIEpVbml0IEFudCBzY2hlbWEgaXMgd2lkZWx5IHVuZGVyc3Rvb2QgYnkgbW9zdCBidWlsZCBzZXJ2ZXJzIGFuZCBzbyBjYW4gdXN1YWxseSBiZSBjb25zdW1lZCB3aXRoIG5vIGFkZGl0aW9uYWwgd29yay4KKworVGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IHRoaXMgc2NoZW1hIHdhcyBkZXNpZ25lZCB0byBjb3JyZXNwb25kIHRvIGhvdyBKVW5pdCB3b3JrcyAtIGFuZCB0aGVyZSBpcyBhIHNpZ25pZmljYW50IG1pc21hdGNoIHdpdGggaG93IENhdGNoIHdvcmtzLiBBZGRpdGlvbmFsbHkgdGhlIGZvcm1hdCBpcyBub3Qgc3RyZWFtYWJsZSAoYmVjYXVzZSBvcGVuaW5nIGVsZW1lbnRzIGhvbGQgY291bnRzIG9mIGZhaWxlZCBhbmQgcGFzc2luZyB0ZXN0cyBhcyBhdHRyaWJ1dGVzKSAtIHNvIHRoZSB3aG9sZSB0ZXN0IHJ1biBtdXN0IGNvbXBsZXRlIGJlZm9yZSBpdCBjYW4gYmUgd3JpdHRlbi4KKworIyMgT3RoZXIgcmVwb3J0ZXJzCitPdGhlciByZXBvcnRlcnMgYXJlIG5vdCBwYXJ0IG9mIHRoZSBzaW5nbGUtaGVhZGVyIGRpc3RyaWJ1dGlvbiBhbmQgbmVlZAordG8gYmUgZG93bmxvYWRlZCBhbmQgaW5jbHVkZWQgc2VwYXJhdGVseS4gQWxsIHJlcG9ydGVycyBhcmUgc3RvcmVkIGluCitgc2luZ2xlX2luY2x1ZGVgIGRpcmVjdG9yeSBpbiB0aGUgZ2l0IHJlcG9zaXRvcnksIGFuZCBhcmUgbmFtZWQKK2BjYXRjaF9yZXBvcnRlcl8qLmhwcGAuIEZvciBleGFtcGxlLCB0byB1c2UgdGhlIFRlYW1DaXR5IHJlcG9ydGVyIHlvdQorbmVlZCB0byBkb3dubG9hZCBgc2luZ2xlX2luY2x1ZGUvY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwYCBhbmQgaW5jbHVkZQoraXQgYWZ0ZXIgQ2F0Y2ggaXRzZWxmLgorCitgYGBjcHAKKyNkZWZpbmUgQ0FUQ0hfQ09ORklHX01BSU4KKyNpbmNsdWRlICJjYXRjaC5ocHAiCisjaW5jbHVkZSAiY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwIgorYGBgCisKKyMjIyBUZWFtQ2l0eSBSZXBvcnRlcgorYGBgLXIgdGVhbWNpdHlgYGAKKworVGhlIFRlYW1DaXR5IFJlcG9ydGVyIHdyaXRlcyBUZWFtQ2l0eSBzZXJ2aWNlIG1lc3NhZ2VzIHRvIHN0ZG91dC4gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgdGhpcyByZXBvcnRlciBhbiBhZGRpdGlvbmFsIGhlYWRlciBtdXN0IGFsc28gYmUgaW5jbHVkZWQuCisKK0JlaW5nIHNwZWNpZmljIHRvIFRlYW1DaXR5IHRoaXMgaXMgdGhlIGJlc3QgcmVwb3J0ZXIgdG8gdXNlIHdpdGggaXQgLSBidXQgaXQgaXMgY29tcGxldGVseSB1bnN1aXRhYmxlIGZvciBhbnkgb3RoZXIgcHVycG9zZS4gSXQgaXMgYSBzdHJlYW1pbmcgZm9ybWF0IChpdCB3cml0ZXMgYXMgaXQgZ29lcykgLSBhbHRob3VnaCB0ZXN0IHJlc3VsdHMgZG9uJ3QgYXBwZWFyIGluIHRoZSBUZWFtQ2l0eSBpbnRlcmZhY2UgdW50aWwgdGhlIGNvbXBsZXRpb24gb2YgYSBzdWl0ZSAodXN1YWxseSB0aGUgd2hvbGUgdGVzdCBydW4pLgorCisjIyMgQXV0b21ha2UgUmVwb3J0ZXIKK2BgYC1yIGF1dG9tYWtlYGBgCisKK1RoZSBBdXRvbWFrZSBSZXBvcnRlciB3cml0ZXMgb3V0IHRoZSBbbWV0YSB0YWdzXShodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9tYWtlL21hbnVhbC9odG1sX25vZGUvTG9nLWZpbGVzLWdlbmVyYXRpb24tYW5kLXRlc3QtcmVzdWx0cy1yZWNvcmRpbmcuaHRtbCNMb2ctZmlsZXMtZ2VuZXJhdGlvbi1hbmQtdGVzdC1yZXN1bHRzLXJlY29yZGluZykgZXhwZWN0ZWQgYnkgYXV0b21ha2UgdmlhIGBtYWtlIGNoZWNrYC4KKworIyMjIFRBUCAoVGVzdCBBbnl0aGluZyBQcm90b2NvbCkgUmVwb3J0ZXIKK2BgYC1yIHRhcGBgYAorCitCZWNhdXNlIG9mIHRoZSBpbmNyZW1lbnRhbCBuYXR1cmUgb2YgQ2F0Y2gncyB0ZXN0IHN1aXRlcyBhbmQgYWJpbGl0eSB0byBydW4gc3BlY2lmaWMgdGVzdHMsIG91ciBpbXBsZW1lbnRhdGlvbiBvZiBUQVAgcmVwb3J0ZXIgd3JpdGVzIG91dCB0aGUgbnVtYmVyIG9mIHRlc3RzIGluIGEgc3VpdGUgbGFzdC4KKworIyMgTG93LWxldmVsIHRvb2xzCisKKyMjIyBQcmVjb21waWxlZCBoZWFkZXJzIChQQ0hzKQorCitDYXRjaCBvZmZlcnMgcHJvdG90eXBhbCBzdXBwb3J0IGZvciBiZWluZyBpbmNsdWRlZCBpbiBwcmVjb21waWxlZCBoZWFkZXJzLCBidXQgYmVjYXVzZSBvZiBpdHMgc2luZ2xlLWhlYWRlciBuYXR1cmUgaXQgZG9lcyBuZWVkIHNvbWUgYWN0aW9ucyBieSB0aGUgdXNlcjoKKyogVGhlIHByZWNvbXBpbGVkIGhlYWRlciBuZWVkcyB0byBkZWZpbmUgYENBVENIX0NPTkZJR19BTExfUEFSVFNgCisqIFRoZSBpbXBsZW1lbnRhdGlvbiBmaWxlIG5lZWRzIHRvCisgICogdW5kZWZpbmUgYFRXT0JMVUVDVUJFU19TSU5HTEVfSU5DTFVERV9DQVRDSF9IUFBfSU5DTFVERURgCisgICogZGVmaW5lIGBDQVRDSF9DT05GSUdfSU1QTF9PTkxZYAorICAqIGRlZmluZSBgQ0FUQ0hfQ09ORklHX01BSU5gIG9yIGBDQVRDSF9DT05GSUdfUlVOTkVSYAorICAqIGluY2x1ZGUgImNhdGNoLmhwcCIgYWdhaW4KKworCisjIyMgQ29kZUNvdmVyYWdlIG1vZHVsZSAoR0NPViwgTENPVi4uLikKKworSWYgeW91IGFyZSB1c2luZyBHQ09WIHRvb2wgdG8gZ2V0IHRlc3RpbmcgY292ZXJhZ2Ugb2YgeW91ciBjb2RlLCBhbmQgYXJlIG5vdCBzdXJlIGhvdyB0byBpbnRlZ3JhdGUgaXQgd2l0aCBDTWFrZSBhbmQgQ2F0Y2gsIHRoZXJlIHNob3VsZCBiZSBhbiBleHRlcm5hbCBleGFtcGxlIG92ZXIgYXQgaHR0cHM6Ly9naXRodWIuY29tL2Zrcm9tZXIvY2F0Y2hfY21ha2VfY292ZXJhZ2UKKworCisjIyMgcGtnLWNvbmZpZworCitDYXRjaDIgcHJvdmlkZXMgYSBydWRpbWVudGFyeSBwa2ctY29uZmlnIGludGVncmF0aW9uLCBieSByZWdpc3RlcmluZyBpdHNlbGYKK3VuZGVyIHRoZSBuYW1lIGBjYXRjaDJgLiBUaGlzIG1lYW5zIHRoYXQgYWZ0ZXIgQ2F0Y2gyIGlzIGluc3RhbGxlZCwgeW91CitjYW4gdXNlIGBwa2ctY29uZmlnYCB0byBnZXQgaXRzIGluY2x1ZGUgcGF0aDogYHBrZy1jb25maWcgLS1jZmxhZ3MgY2F0Y2gyYC4KKworIyMjIGdkYiBhbmQgbGxkYiBzY3JpcHRzCisKK0NhdGNoMidzIGBjb250cmliYCBmb2xkZXIgYWxzbyBjb250YWlucyB0d28gc2ltcGxlIGRlYnVnZ2VyIHNjcmlwdHMsCitgZ2RiaW5pdGAgZm9yIGBnZGJgIGFuZCBgbGxkYmluaXRgIGZvciBgbGxkYmAuIElmIGxvYWRlZCBpbnRvIHRoZWlyCityZXNwZWN0aXZlIGRlYnVnZ2VyLCB0aGVzZSB3aWxsIHRlbGwgaXQgdG8gc3RlcCBvdmVyIENhdGNoMidzIGludGVybmFscword2hlbiBzdGVwcGluZyB0aHJvdWdoIGNvZGUuCisKKworIyMgQ01ha2UKKworW0FzIGl0IGhhcyBiZWVuIGdldHRpbmcga2luZGEgbG9uZywgdGhlIGRvY3VtZW50YXRpb24gb2YgQ2F0Y2gyJ3MKK2ludGVncmF0aW9uIHdpdGggQ01ha2UgaGFzIGJlZW4gbW92ZWQgdG8gaXRzIG93biBwYWdlLl0oY21ha2UtaW50ZWdyYXRpb24ubWQjdG9wKQorCisKKy0tLQorCitbSG9tZV0oUmVhZG1lLm1kI3RvcCkKZGlmZiAtLWdpdCBhL2RvY3MvY21ha2UtaW50ZWdyYXRpb24ubWQgYi9kb2NzL2NtYWtlLWludGVncmF0aW9uLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NmU3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL2NtYWtlLWludGVncmF0aW9uLm1kCkBAIC0wLDAgKzEsMjI2IEBACis8YSBpZD0idG9wIj48L2E+CisjIENNYWtlIGludGVncmF0aW9uCisKKyoqQ29udGVudHMqKjxicj4KK1tDTWFrZSB0YXJnZXRdKCNjbWFrZS10YXJnZXQpPGJyPgorW0F1dG9tYXRpYyB0ZXN0IHJlZ2lzdHJhdGlvbl0oI2F1dG9tYXRpYy10ZXN0LXJlZ2lzdHJhdGlvbik8YnI+CitbQ01ha2UgcHJvamVjdCBvcHRpb25zXSgjY21ha2UtcHJvamVjdC1vcHRpb25zKTxicj4KK1tJbnN0YWxsaW5nIENhdGNoMiBmcm9tIGdpdCByZXBvc2l0b3J5XSgjaW5zdGFsbGluZy1jYXRjaDItZnJvbS1naXQtcmVwb3NpdG9yeSk8YnI+CisKK0JlY2F1c2Ugd2UgdXNlIENNYWtlIHRvIGJ1aWxkIENhdGNoMiwgd2UgYWxzbyBwcm92aWRlIGEgY291cGxlIG9mCitpbnRlZ3JhdGlvbiBwb2ludHMgZm9yIG91ciB1c2Vycy4KKworMSkgQ2F0Y2gyIGV4cG9ydHMgYSAobmFtZXNwYWNlZCkgQ01ha2UgdGFyZ2V0CisyKSBDYXRjaDIncyByZXBvc2l0b3J5IGNvbnRhaW5zIENNYWtlIHNjcmlwdHMgZm9yIGF1dG9tYXRpYyByZWdpc3RyYXRpb24KK29mIGBURVNUX0NBU0VgcyBpbiBDVGVzdAorCisjIyBDTWFrZSB0YXJnZXQKKworQ2F0Y2gyJ3MgQ01ha2UgYnVpbGQgZXhwb3J0cyBhbiBpbnRlcmZhY2UgdGFyZ2V0IGBDYXRjaDI6OkNhdGNoMmAuIExpbmtpbmcKK2FnYWluc3QgaXQgd2lsbCBhZGQgdGhlIHByb3BlciBpbmNsdWRlIHBhdGggYW5kIGFsbCBuZWNlc3NhcnkgY2FwYWJpbGl0aWVzCit0byB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KKworVGhpcyBtZWFucyB0aGF0IGlmIENhdGNoMiBoYXMgYmVlbiBpbnN0YWxsZWQgb24gdGhlIHN5c3RlbSwgaXQgc2hvdWxkIGJlCitlbm91Z2ggdG8gZG86CitgYGBjbWFrZQorZmluZF9wYWNrYWdlKENhdGNoMiBSRVFVSVJFRCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyh0ZXN0cyBDYXRjaDI6OkNhdGNoMikKK2BgYAorCisKK1RoaXMgdGFyZ2V0IGlzIGFsc28gcHJvdmlkZWQgd2hlbiBDYXRjaDIgaXMgdXNlZCBhcyBhIHN1YmRpcmVjdG9yeS4KK0Fzc3VtaW5nIHRoYXQgQ2F0Y2gyIGhhcyBiZWVuIGNsb25lZCB0byBgbGliL0NhdGNoMmA6CitgYGBjbWFrZQorYWRkX3N1YmRpcmVjdG9yeShsaWIvQ2F0Y2gyKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKHRlc3RzIENhdGNoMjo6Q2F0Y2gyKQorYGBgCisKKyMjIEF1dG9tYXRpYyB0ZXN0IHJlZ2lzdHJhdGlvbgorCitDYXRjaDIncyByZXBvc2l0b3J5IGFsc28gY29udGFpbnMgdHdvIENNYWtlIHNjcmlwdHMgdGhhdCBoZWxwIHVzZXJzCit3aXRoIGF1dG9tYXRpY2FsbHkgcmVnaXN0ZXJpbmcgdGhlaXIgYFRFU1RfQ0FTRWBzIHdpdGggQ1Rlc3QuIFRoZXkKK2NhbiBiZSBmb3VuZCBpbiB0aGUgYGNvbnRyaWJgIGZvbGRlciwgYW5kIGFyZQorCisxKSBgQ2F0Y2guY21ha2VgIChhbmQgaXRzIGRlcGVuZGVuY3kgYENhdGNoQWRkVGVzdHMuY21ha2VgKQorMikgYFBhcnNlQW5kQWRkQ2F0Y2hUZXN0cy5jbWFrZWAKKworSWYgQ2F0Y2gyIGhhcyBiZWVuIGluc3RhbGxlZCBpbiBzeXN0ZW0sIGJvdGggb2YgdGhlc2UgY2FuIGJlIHVzZWQgYWZ0ZXIKK2RvaW5nIGBmaW5kX3BhY2thZ2UoQ2F0Y2gyIFJFUVVJUkVEKWAuIE90aGVyd2lzZSB5b3UgbmVlZCB0byBhZGQgdGhlbQordG8geW91ciBDTWFrZSBtb2R1bGUgcGF0aC4KKworIyMjIGBDYXRjaC5jbWFrZWAgYW5kIGBBZGRDYXRjaFRlc3RzLmNtYWtlYAorCitgQ2F0Y2guY21ha2VgIHByb3ZpZGVzIGZ1bmN0aW9uIGBjYXRjaF9kaXNjb3Zlcl90ZXN0c2AgdG8gZ2V0IHRlc3RzIGZyb20KK2EgdGFyZ2V0LiBUaGlzIGZ1bmN0aW9uIHdvcmtzIGJ5IHJ1bm5pbmcgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHdpdGgKK2AtLWxpc3QtdGVzdC1uYW1lcy1vbmx5YCBmbGFnLCBhbmQgdGhlbiBwYXJzaW5nIHRoZSBvdXRwdXQgdG8gZmluZCBhbGwKK2V4aXN0aW5nIHRlc3RzLgorCisjIyMjIFVzYWdlCitgYGBjbWFrZQorY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuNSkKKworcHJvamVjdChiYXogTEFOR1VBR0VTIENYWCBWRVJTSU9OIDAuMC4xKQorCitmaW5kX3BhY2thZ2UoQ2F0Y2gyIFJFUVVJUkVEKQorYWRkX2V4ZWN1dGFibGUoZm9vIHRlc3QuY3BwKQordGFyZ2V0X2xpbmtfbGlicmFyaWVzKGZvbyBDYXRjaDI6OkNhdGNoMikKKworaW5jbHVkZShDVGVzdCkKK2luY2x1ZGUoQ2F0Y2gpCitjYXRjaF9kaXNjb3Zlcl90ZXN0cyhmb28pCitgYGAKKworCisjIyMjIEN1c3RvbWl6YXRpb24KK2BjYXRjaF9kaXNjb3Zlcl90ZXN0c2AgY2FuIGJlIGdpdmVuIHNldmVyYWwgZXh0cmEgYXJndW1ldHM6CitgYGBjbWFrZQorY2F0Y2hfZGlzY292ZXJfdGVzdHModGFyZ2V0CisgICAgICAgICAgICAgICAgICAgICBbVEVTVF9TUEVDIGFyZzEuLi5dCisgICAgICAgICAgICAgICAgICAgICBbRVhUUkFfQVJHUyBhcmcxLi4uXQorICAgICAgICAgICAgICAgICAgICAgW1dPUktJTkdfRElSRUNUT1JZIGRpcl0KKyAgICAgICAgICAgICAgICAgICAgIFtURVNUX1BSRUZJWCBwcmVmaXhdCisgICAgICAgICAgICAgICAgICAgICBbVEVTVF9TVUZGSVggc3VmZml4XQorICAgICAgICAgICAgICAgICAgICAgW1BST1BFUlRJRVMgbmFtZTEgdmFsdWUxLi4uXQorICAgICAgICAgICAgICAgICAgICAgW1RFU1RfTElTVCB2YXJdCispCitgYGAKKworKiBgVEVTVF9TUEVDIGFyZzEuLi5gCisKK1NwZWNpZmllcyB0ZXN0IGNhc2VzLCB3aWxkY2FyZGVkIHRlc3QgY2FzZXMsIHRhZ3MgYW5kIHRhZyBleHByZXNzaW9ucyB0bworcGFzcyB0byB0aGUgQ2F0Y2ggZXhlY3V0YWJsZSBhbG9uZ3NpZGUgdGhlIGAtLWxpc3QtdGVzdC1uYW1lcy1vbmx5YCBmbGFnLgorCisKKyogYEVYVFJBX0FSR1MgYXJnMS4uLmAKKworQW55IGV4dHJhIGFyZ3VtZW50cyB0byBwYXNzIG9uIHRoZSBjb21tYW5kIGxpbmUgdG8gZWFjaCB0ZXN0IGNhc2UuCisKKworKiBgV09SS0lOR19ESVJFQ1RPUlkgZGlyYAorCitTcGVjaWZpZXMgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0byBydW4gdGhlIGRpc2NvdmVyZWQgdGVzdCBjYXNlcy4gIElmIHRoaXMKK29wdGlvbiBpcyBub3QgcHJvdmlkZWQsIHRoZSBjdXJyZW50IGJpbmFyeSBkaXJlY3RvcnkgaXMgdXNlZC4KKworCisqIGBURVNUX1BSRUZJWCBwcmVmaXhgCisKK1NwZWNpZmllcyBhIF9wcmVmaXhfIHRvIGJlIGFkZGVkIHRvIHRoZSBuYW1lIG9mIGVhY2ggZGlzY292ZXJlZCB0ZXN0IGNhc2UuCitUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB0aGUgc2FtZSB0ZXN0IGV4ZWN1dGFibGUgaXMgYmVpbmcgdXNlZCBpbiBtdWx0aXBsZQorY2FsbHMgdG8gYGNhdGNoX2Rpc2NvdmVyX3Rlc3RzKClgLCB3aXRoIGRpZmZlcmVudCBgVEVTVF9TUEVDYCBvciBgRVhUUkFfQVJHU2AuCisKKworKiBgVEVTVF9TVUZGSVggc3VmZml4YAorCitTYW1lIGFzIGBURVNUX1BSRUZJWGAsIGV4Y2VwdCBpdCBzcGVjaWZpYyB0aGUgX3N1ZmZpeF8gZm9yIHRoZSB0ZXN0IG5hbWVzLgorQm90aCBgVEVTVF9QUkVGSVhgIGFuZCBgVEVTVF9TVUZGSVhgIGNhbiBiZSBzcGVjaWZpZWQgYXQgdGhlIHNhbWUgdGltZS4KKworCisqIGBQUk9QRVJUSUVTIG5hbWUxIHZhbHVlMS4uLmAKKworU3BlY2lmaWVzIGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBzZXQgb24gYWxsIHRlc3RzIGRpc2NvdmVyZWQgYnkgdGhpcworaW52b2NhdGlvbiBvZiBgY2F0Y2hfZGlzY292ZXJfdGVzdHNgLgorCisKKyogYFRFU1RfTElTVCB2YXJgCisKK01ha2UgdGhlIGxpc3Qgb2YgdGVzdHMgYXZhaWxhYmxlIGluIHRoZSB2YXJpYWJsZSBgdmFyYCwgcmF0aGVyIHRoYW4gdGhlCitkZWZhdWx0IGA8dGFyZ2V0Pl9URVNUU2AuICBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB0aGUgc2FtZSB0ZXN0CitleGVjdXRhYmxlIGlzIGJlaW5nIHVzZWQgaW4gbXVsdGlwbGUgY2FsbHMgdG8gYGNhdGNoX2Rpc2NvdmVyX3Rlc3RzKClgLgorTm90ZSB0aGF0IHRoaXMgdmFyaWFibGUgaXMgb25seSBhdmFpbGFibGUgaW4gQ1Rlc3QuCisKKworIyMjIGBQYXJzZUFuZEFkZENhdGNoVGVzdHMuY21ha2VgCisKK2BQYXJzZUFuZEFkZENhdGNoVGVzdHNgIHdvcmtzIGJ5IHBhcnNpbmcgYWxsIGltcGxlbWVudGF0aW9uIGZpbGVzCithc3NvY2lhdGVkIHdpdGggdGhlIHByb3ZpZGVkIHRhcmdldCwgYW5kIHJlZ2lzdGVyaW5nIHRoZW0gdmlhIENUZXN0J3MKK2BhZGRfdGVzdGAuIFRoaXMgYXBwcm9hY2ggaGFzIHNvbWUgbGltaXRhdGlvbnMsIHN1Y2ggYXMgdGhlIGZhY3QgdGhhdAorY29tbWVudGVkLW91dCB0ZXN0cyB3aWxsIGJlIHJlZ2lzdGVyZWQgYW55d2F5LgorCisKKyMjIyMgVXNhZ2UKKworYGBgY21ha2UKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoVkVSU0lPTiAzLjUpCisKK3Byb2plY3QoYmF6IExBTkdVQUdFUyBDWFggVkVSU0lPTiAwLjAuMSkKKworZmluZF9wYWNrYWdlKENhdGNoMiBSRVFVSVJFRCkKK2FkZF9leGVjdXRhYmxlKGZvbyB0ZXN0LmNwcCkKK3RhcmdldF9saW5rX2xpYnJhcmllcyhmb28gQ2F0Y2gyOjpDYXRjaDIpCisKK2luY2x1ZGUoQ1Rlc3QpCitpbmNsdWRlKFBhcnNlQW5kQWRkQ2F0Y2hUZXN0cykKK1BhcnNlQW5kQWRkQ2F0Y2hUZXN0cyhmb28pCitgYGAKKworCisjIyMjIEN1c3RvbWl6YXRpb24KKworYFBhcnNlQW5kQWRkQ2F0Y2hUZXN0c2AgcHJvdmlkZXMgc29tZSBjdXN0b21pemF0aW9uIHBvaW50czoKKyogYFBBUlNFX0NBVENIX1RFU1RTX1ZFUkJPU0VgIC0tIFdoZW4gYE9OYCwgdGhlIHNjcmlwdCBwcmludHMgZGVidWcKK21lc3NhZ2VzLiBEZWZhdWx0cyB0byBgT0ZGYC4KKyogYFBBUlNFX0NBVENIX1RFU1RTX05PX0hJRERFTl9URVNUU2AgLS0gV2hlbiBgT05gLCBoaWRkZW4gdGVzdHMgKHRlc3RzCit0YWdnZWQgd2l0aCBhbnkgb2YgYFshaGlkZV1gLCBgWy5dYCBvciBgWy5mb29dYCkgd2lsbCBub3QgYmUgcmVnaXN0ZXJlZC4KK0RlZmF1bHRzIHRvIGBPRkZgLgorKiBgUEFSU0VfQ0FUQ0hfVEVTVFNfQUREX0ZJWFRVUkVfSU5fVEVTVF9OQU1FYCAtLSBXaGVuIGBPTmAsIGFkZHMgZml4dHVyZQorY2xhc3MgbmFtZSB0byB0aGUgdGVzdCBuYW1lIGluIENUZXN0LiBEZWZhdWx0cyB0byBgT05gLgorKiBgUEFSU0VfQ0FUQ0hfVEVTVFNfQUREX1RBUkdFVF9JTl9URVNUX05BTUVgIC0tIFdoZW4gYE9OYCwgYWRkcyB0YXJnZXQKK25hbWUgdG8gdGhlIHRlc3QgbmFtZSBpbiBDVGVzdC4gRGVmYXVsdHMgdG8gYE9OYC4KKyogYFBBUlNFX0NBVENIX1RFU1RTX0FERF9UT19DT05GSUdVUkVfREVQRU5EU2AgLS0gV2hlbiBgT05gLCBhZGRzIHRlc3QKK2ZpbGUgdG8gYENNQUtFX0NPTkZJR1VSRV9ERVBFTkRTYC4gVGhpcyBtZWFucyB0aGF0IHRoZSBDTWFrZSBjb25maWd1cmF0aW9uCitzdGVwIHdpbGwgYmUgcmUtcmFuIHdoZW4gdGhlIHRlc3QgZmlsZXMgY2hhbmdlLCBsZXR0aW5nIG5ldyB0ZXN0cyBiZQorYXV0b21hdGljYWxseSBkaXNjb3ZlcmVkLiBEZWZhdWx0cyB0byBgT0ZGYC4KKworCitPcHRpb25hbGx5LCBvbmUgY2FuIHNwZWNpZnkgYSBsYXVuY2hpbmcgY29tbWFuZCB0byBydW4gdGVzdHMgYnkgc2V0dGluZyB0aGUKK3ZhcmlhYmxlIGBPcHRpb25hbENhdGNoVGVzdExhdW5jaGVyYCBiZWZvcmUgY2FsbGluZyBgUGFyc2VBbmRBZGRDYXRjaFRlc3RzYC4gRm9yCitpbnN0YW5jZSB0byBydW4gc29tZSB0ZXN0cyB1c2luZyBgTVBJYCBhbmQgb3RoZXIgc2VxdWVudGlhbGx5LCBvbmUgY2FuIHdyaXRlCitgYGBjbWFrZQorc2V0KE9wdGlvbmFsQ2F0Y2hUZXN0TGF1bmNoZXIgJHtNUElFWEVDfSAke01QSUVYRUNfTlVNUFJPQ19GTEFHfSAke05VTVBST0N9KQorUGFyc2VBbmRBZGRDYXRjaFRlc3RzKG1waV9mb28pCit1bnNldChPcHRpb25hbENhdGNoVGVzdExhdW5jaGVyKQorUGFyc2VBbmRBZGRDYXRjaFRlc3RzKGJhcikKK2BgYAorCisjIyBDTWFrZSBwcm9qZWN0IG9wdGlvbnMKKworQ2F0Y2gyJ3MgQ01ha2UgcHJvamVjdCBhbHNvIHByb3ZpZGVzIHNvbWUgb3B0aW9ucyBmb3Igb3RoZXIgcHJvamVjdHMKK3RoYXQgY29uc3VtZSBpdC4gVGhlc2UgYXJlCisKKyogYENBVENIX0JVSUxEX1RFU1RJTkdgIC0tIFdoZW4gYE9OYCwgQ2F0Y2gyJ3MgU2VsZlRlc3QgcHJvamVjdCB3aWxsIGJlCitidWlsdC4gRGVmYXVsdHMgdG8gYE9OYC4gTm90ZSB0aGF0IENhdGNoMiBhbHNvIG9iZXlzIGBCVUlMRF9URVNUSU5HYCBDTWFrZQordmFyaWFibGUsIHNvIF9ib3RoXyBvZiB0aGVtIG5lZWQgdG8gYmUgYE9OYCBmb3IgdGhlIFNlbGZUZXN0IHRvIGJlIGJ1aWx0LAorYW5kIGVpdGhlciBvZiB0aGVtIGNhbiBiZSBzZXQgdG8gYE9GRmAgdG8gZGlzYWJsZSBidWlsZGluZyBTZWxmVGVzdC4KKyogYENBVENIX0JVSUxEX0VYQU1QTEVTYCAtLSBXaGVuIGBPTmAsIENhdGNoMidzIHVzYWdlIGV4YW1wbGVzIHdpbGwgYmUKK2J1aWx0LiBEZWZhdWx0cyB0byBgT0ZGYC4KKyogYENBVENIX0lOU1RBTExfRE9DU2AgLS0gV2hlbiBgT05gLCBDYXRjaDIncyBkb2N1bWVudGF0aW9uIHdpbGwgYmUKK2luY2x1ZGVkIGluIHRoZSBpbnN0YWxsYXRpb24uIERlZmF1bHRzIHRvIGBPTmAuCisqIGBDQVRDSF9JTlNUQUxMX0hFTFBFUlNgIC0tIFdoZW4gYE9OYCwgQ2F0Y2gyJ3MgY29udHJpYiBmb2xkZXIgd2lsbCBiZQoraW5jbHVkZWQgaW4gdGhlIGluc3RhbGxhdGlvbi4gRGVmYXVsdHMgdG8gYE9OYC4KKyogYEJVSUxEX1RFU1RJTkdgIC0tIFdoZW4gYE9OYCBhbmQgdGhlIHByb2plY3QgaXMgbm90IHVzZWQgYXMgYSBzdWJwcm9qZWN0LAorQ2F0Y2gyJ3MgdGVzdCBiaW5hcnkgd2lsbCBiZSBidWlsdC4gRGVmYXVsdHMgdG8gYE9OYC4KKworCisjIyBJbnN0YWxsaW5nIENhdGNoMiBmcm9tIGdpdCByZXBvc2l0b3J5CisKK0lmIHlvdSBjYW5ub3QgaW5zdGFsbCBDYXRjaDIgZnJvbSBhIHBhY2thZ2UgbWFuYWdlciAoZS5nLiBVYnVudHUgMTYuMDQKK3Byb3ZpZGVzIGNhdGNoIG9ubHkgaW4gdmVyc2lvbiAxLjIuMCkgeW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCBpdCBmcm9tCit0aGUgcmVwb3NpdG9yeSBpbnN0ZWFkLiBBc3N1bWluZyB5b3UgaGF2ZSBlbm91Z2ggcmlnaHRzLCB5b3UgY2FuIGp1c3QKK2luc3RhbGwgaXQgdG8gdGhlIGRlZmF1bHQgbG9jYXRpb24sIGxpa2Ugc286CitgYGAKKyQgZ2l0IGNsb25lIGh0dHBzOi8vZ2l0aHViLmNvbS9jYXRjaG9yZy9DYXRjaDIuZ2l0CiskIGNkIENhdGNoMgorJCBjbWFrZSAtQmJ1aWxkIC1ILiAtREJVSUxEX1RFU1RJTkc9T0ZGCiskIHN1ZG8gY21ha2UgLS1idWlsZCBidWlsZC8gLS10YXJnZXQgaW5zdGFsbAorYGBgCisKK0lmIHlvdSBkbyBub3QgaGF2ZSBzdXBlcnVzZXIgcmlnaHRzLCB5b3Ugd2lsbCBhbHNvIG5lZWQgdG8gc3BlY2lmeQorW0NNQUtFX0lOU1RBTExfUFJFRklYXShodHRwczovL2NtYWtlLm9yZy9jbWFrZS9oZWxwL2xhdGVzdC92YXJpYWJsZS9DTUFLRV9JTlNUQUxMX1BSRUZJWC5odG1sKQord2hlbiBjb25maWd1cmluZyB0aGUgYnVpbGQsIGFuZCB0aGVuIG1vZGlmeSB5b3VyIGNhbGxzIHRvCitbZmluZF9wYWNrYWdlXShodHRwczovL2NtYWtlLm9yZy9jbWFrZS9oZWxwL2xhdGVzdC9jb21tYW5kL2ZpbmRfcGFja2FnZS5odG1sKQorYWNjb3JkaW5nbHkuCisKKworLS0tCisKK1tIb21lXShSZWFkbWUubWQjdG9wKQpkaWZmIC0tZ2l0IGEvZG9jcy9jb21tYW5kLWxpbmUubWQgYi9kb2NzL2NvbW1hbmQtbGluZS5tZAppbmRleCA4YWZjYjdkLi5mYzYzZmU4IDEwMDY0NAotLS0gYS9kb2NzL2NvbW1hbmQtbGluZS5tZAorKysgYi9kb2NzL2NvbW1hbmQtbGluZS5tZApAQCAtMjQsNiArMjQsNyBAQAogW1VzYWdlXSgjdXNhZ2UpPGJyPgogW1NwZWNpZnkgdGhlIHNlY3Rpb24gdG8gcnVuXSgjc3BlY2lmeS10aGUtc2VjdGlvbi10by1ydW4pPGJyPgogW0ZpbGVuYW1lcyBhcyB0YWdzXSgjZmlsZW5hbWVzLWFzLXRhZ3MpPGJyPgorW092ZXJyaWRlIG91dHB1dCBjb2xvdXJpbmddKCNvdmVycmlkZS1vdXRwdXQtY29sb3VyaW5nKTxicj4KIAogQ2F0Y2ggd29ya3MgcXVpdGUgbmljZWx5IHdpdGhvdXQgYW55IGNvbW1hbmQgbGluZSBvcHRpb25zIGF0IGFsbCAtIGJ1dCBmb3IgdGhvc2UgdGltZXMgd2hlbiB5b3Ugd2FudCBncmVhdGVyIGNvbnRyb2wgdGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBhdmFpbGFibGUuCiBDbGljayBvbmUgb2YgdGhlIGZvbGxvd2luZ3MgbGlua3MgdG8gdGFrZSB5b3Ugc3RyYWlnaHQgdG8gdGhhdCBvcHRpb24gLSBvciBzY3JvbGwgb24gdG8gYnJvd3NlIHRoZSBhdmFpbGFibGUgb3B0aW9ucy4KQEAgLTU3LDYgKzU4LDcgQEAKIDxhIGhyZWY9IiNsaWJpZGVudGlmeSI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCAgICAtLWxpYmlkZW50aWZ5YDwvYT48YnIgLz4KIDxhIGhyZWY9IiN3YWl0LWZvci1rZXlwcmVzcyI+ICAgICAgICAgICAgICAgICAgICAgICAgICAgYCAgICAtLXdhaXQtZm9yLWtleXByZXNzYDwvYT48YnIgLz4KIDxhIGhyZWY9IiNiZW5jaG1hcmstcmVzb2x1dGlvbi1tdWx0aXBsZSI+ICAgICAgICAgICAgICAgYCAgICAtLWJlbmNobWFyay1yZXNvbHV0aW9uLW11bHRpcGxlYDwvYT48YnIgLz4KKzxhIGhyZWY9IiN1c2UtY29sb3VyIj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCAgICAtLXVzZS1jb2xvdXJgPC9hPjxiciAvPgogCiA8L2JyPgogCkBAIC03OCw3ICs4MCw3IEBACiAKIFRlc3Qgc3BlY3MgYXJlIGNhc2UgaW5zZW5zaXRpdmUuCiAKLUlmIGEgc3BlYyBpcyBwcmVmaXhlZCB3aXRoIGBleGNsdWRlOmAgb3IgdGhlIGB+YCBjaGFyYWN0ZXIgdGhlbiB0aGUgcGF0dGVybiBtYXRjaGVzIGFuIGV4Y2x1c2lvbi4gVGhpcyBtZWFucyB0aGF0IHRlc3RzIG1hdGNoaW5nIHRoZSBwYXR0ZXJuIGFyZSBleGNsdWRlZCBmcm9tIHRoZSBzZXQgLSBldmVuIGlmIGEgcHJpb3IgaW5jbHVzaW9uIHNwZWMgaW5jbHVkZWQgdGhlbS4gU3Vic2VxdWVudCBpbmNsdXNpb24gc3BlY3Mgd2lsbCB0YWtlIHByZWNlbmRlbmNlLCBob3dldmVyLgorSWYgYSBzcGVjIGlzIHByZWZpeGVkIHdpdGggYGV4Y2x1ZGU6YCBvciB0aGUgYH5gIGNoYXJhY3RlciB0aGVuIHRoZSBwYXR0ZXJuIG1hdGNoZXMgYW4gZXhjbHVzaW9uLiBUaGlzIG1lYW5zIHRoYXQgdGVzdHMgbWF0Y2hpbmcgdGhlIHBhdHRlcm4gYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIHNldCAtIGV2ZW4gaWYgYSBwcmlvciBpbmNsdXNpb24gc3BlYyBpbmNsdWRlZCB0aGVtLiBTdWJzZXF1ZW50IGluY2x1c2lvbiBzcGVjcyB3aWxsIHRha2UgcHJlY2VkZW5jZSwgaG93ZXZlci4KIEluY2x1c2lvbnMgYW5kIGV4Y2x1c2lvbnMgYXJlIGV2YWx1YXRlZCBpbiBsZWZ0LXRvLXJpZ2h0IG9yZGVyLgogCiBUZXN0IGNhc2UgZXhhbXBsZXM6CkBAIC05NCw3ICs5Niw3IEBACiA8L3ByZT4KIAogTmFtZXMgd2l0aGluIHNxdWFyZSBicmFja2V0cyBhcmUgaW50ZXJwcmV0ZWQgYXMgdGFncy4KLUEgc2VyaWVzIG9mIHRhZ3MgZm9ybSBhbiBBTkQgZXhwcmVzc2lvbiB3aGVyYXMgYSBjb21tYS1zZXBhcmF0ZWQgc2VxdWVuY2UgZm9ybXMgYW4gT1IgZXhwcmVzc2lvbi4gZS5nLjoKK0Egc2VyaWVzIG9mIHRhZ3MgZm9ybSBhbiBBTkQgZXhwcmVzc2lvbiB3aGVyZWFzIGEgY29tbWEtc2VwYXJhdGVkIHNlcXVlbmNlIGZvcm1zIGFuIE9SIGV4cHJlc3Npb24uIGUuZy46CiAKIDxwcmU+W29uZV1bdHdvXSxbdGhyZWVdPC9wcmU+CiBUaGlzIG1hdGNoZXMgYWxsIHRlc3RzIHRhZ2dlZCBgW29uZV1gIGFuZCBgW3R3b11gLCBhcyB3ZWxsIGFzIGFsbCB0ZXN0cyB0YWdnZWQgYFt0aHJlZV1gCkBAIC0xMjIsNyArMTI0LDkgQEAKICMjIEJyZWFraW5nIGludG8gdGhlIGRlYnVnZ2VyCiA8cHJlPi1iLCAtLWJyZWFrPC9wcmU+CiAKLUluIHNvbWUgSURFcyAoY3VycmVudGx5IFhDb2RlIGFuZCBWaXN1YWwgU3R1ZGlvKSBpdCBpcyBwb3NzaWJsZSBmb3IgQ2F0Y2ggdG8gYnJlYWsgaW50byB0aGUgZGVidWdnZXIgb24gYSB0ZXN0IGZhaWx1cmUuIFRoaXMgY2FuIGJlIHZlcnkgaGVscGZ1bCBkdXJpbmcgZGVidWcgc2Vzc2lvbnMgLSBlc3BlY2lhbGx5IHdoZW4gdGhlcmUgaXMgbW9yZSB0aGFuIG9uZSBwYXRoIHRocm91Z2ggYSBwYXJ0aWN1bGFyIHRlc3QuCitVbmRlciBtb3N0IGRlYnVnZ2VycyBDYXRjaDIgaXMgY2FwYWJsZSBvZiBhdXRvbWF0aWNhbGx5IGJyZWFraW5nIG9uIGEgdGVzdAorZmFpbHVyZS4gVGhpcyBhbGxvd3MgdGhlIHVzZXIgdG8gc2VlIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSB0ZXN0IGR1cmluZworZmFpbHVyZS4KIAogPGEgaWQ9InNob3dpbmctcmVzdWx0cy1mb3Itc3VjY2Vzc2Z1bC10ZXN0cyI+PC9hPgogIyMgU2hvd2luZyByZXN1bHRzIGZvciBzdWNjZXNzZnVsIHRlc3RzCkBAIC0xOTIsOSArMTk2LDE2IEBACiAjIyBXYXJuaW5ncwogPHByZT4tdywgLS13YXJuICZsdDt3YXJuaW5nIG5hbWU+PC9wcmU+CiAKLUVuYWJsZXMgcmVwb3J0aW5nIG9mIHdhcm5pbmdzIChvbmx5IG9uZSwgYXQgdGltZSBvZiB0aGlzIHdyaXRpbmcpLiBJZiBhIHdhcm5pbmcgaXMgaXNzdWVkIGl0IGZhaWxzIHRoZSB0ZXN0LgorRW5hYmxlcyByZXBvcnRpbmcgb2Ygc3VzcGljaW91cyB0ZXN0IHN0YXRlcy4gVGhlcmUgYXJlIGN1cnJlbnRseSB0d28KK2F2YWlsYWJsZSB3YXJuaW5ncwogCi1UaGUgb255IGF2YWlsYWJsZSB3YXJuaW5nLCBwcmVzZW50bHksIGlzIGBgYE5vQXNzZXJ0aW9uc2BgYC4gVGhpcyB3YXJuaW5nIGZhaWxzIGEgdGVzdCBjYXNlLCBvciAobGVhZikgc2VjdGlvbiBpZiBubyBhc3NlcnRpb25zIChgYGBSRVFVSVJFYGBgLyBgYGBDSEVDS2BgYCBldGMpIGFyZSBlbmNvdW50ZXJlZC4KK2BgYAorICAgIE5vQXNzZXJ0aW9ucyAgIC8vIEZhaWwgdGVzdCBjYXNlIC8gbGVhZiBzZWN0aW9uIGlmIG5vIGFzc2VydGlvbnMKKyAgICAgICAgICAgICAgICAgICAvLyAoZS5nLiBgUkVRVUlSRWApIGlzIGVuY291bnRlcmVkLgorICAgIE5vVGVzdHMgICAgICAgIC8vIFJldHVybiBub24temVybyBleGl0IGNvZGUgd2hlbiBubyB0ZXN0IGNhc2VzIHdlcmUgcnVuCisgICAgICAgICAgICAgICAgICAgLy8gQWxzbyBjYWxscyByZXBvcnRlcidzIG5vTWF0Y2hpbmdUZXN0Q2FzZXMgbWV0aG9kCitgYGAKKwogCiA8YSBpZD0icmVwb3J0aW5nLXRpbWluZ3MiPjwvYT4KICMjIFJlcG9ydGluZyB0aW1pbmdzCkBAIC0yNjIsNyArMjczLDcgQEAKIAogV2hlbiBydW5uaW5nIGJlbmNobWFya3MgdGhlIGNsb2NrIHJlc29sdXRpb24gaXMgZXN0aW1hdGVkLiBCZW5jaG1hcmtzIGFyZSB0aGVuIHJ1biBmb3IgZXhwb25lbnRpYWxseSBpbmNyZWFzaW5nCiBudW1iZXJzIG9mIGl0ZXJhdGlvbnMgdW50aWwgc29tZSBtdWx0aXBsZSBvZiB0aGUgZXN0aW1hdGVkIHJlc29sdXRpb24gaXMgZXhjZWVkLiBCeSBkZWZhdWx0IHRoYXQgbXVsdGlwbGUgaXMgMTAwLCBidXQgCi1pdCBjYW4gYmUgb3ZlcnJpZGVuIGhlcmUuCitpdCBjYW4gYmUgb3ZlcnJpZGRlbiBoZXJlLgogCiA8YSBpZD0idXNhZ2UiPjwvYT4KICMjIFVzYWdlCkBAIC0zMjIsNiArMzMzLDE2IEBACiAKIFNvLCBmb3IgZXhhbXBsZSwgIHRlc3RzIHdpdGhpbiB0aGUgZmlsZSBgflxEZXZcTXlQcm9qZWN0XEZlcnJldHMuY3BwYCB3b3VsZCBiZSB0YWdnZWQgYFsjRmVycmV0c11gLgogCis8YSBpZD0idXNlLWNvbG91ciI+PC9hPgorIyMgT3ZlcnJpZGUgb3V0cHV0IGNvbG91cmluZworPHByZT4tLXVzZS1jb2xvdXIgJmx0O3llc3xub3xhdXRvJmd0OzwvcHJlPgorCitDYXRjaCBjb2xvdXJzIG91dHB1dCBmb3IgdGVybWluYWxzLCBidXQgb21pdHMgY29sb3VyaW5nIHdoZW4gaXQgZGV0ZWN0cyB0aGF0CitvdXRwdXQgaXMgYmVpbmcgc2VudCB0byBhIHBpcGUuIFRoaXMgaXMgZG9uZSB0byBhdm9pZCBpbnRlcmZlcmluZyB3aXRoIGF1dG9tYXRlZAorcHJvY2Vzc2luZyBvZiBvdXRwdXQuCisKK2AtLXVzZS1jb2xvdXIgeWVzYCBmb3JjZXMgY29sb3VyZWQgb3V0cHV0LCBgLS11c2UtY29sb3VyIG5vYCBkaXNhYmxlcyBjb2xvdXJlZAorb3V0cHV0LiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgYC0tdXNlLWNvbG91ciBhdXRvYC4KIAogLS0tCiAKZGlmZiAtLWdpdCBhL2RvY3MvY29tbWVyY2lhbC11c2Vycy5tZCBiL2RvY3MvY29tbWVyY2lhbC11c2Vycy5tZAppbmRleCBlNGQ3ODlmLi40Zjk4Zjc1IDEwMDY0NAotLS0gYS9kb2NzL2NvbW1lcmNpYWwtdXNlcnMubWQKKysrIGIvZG9jcy9jb21tZXJjaWFsLXVzZXJzLm1kCkBAIC0xMyw1ICsxMyw3IEBACiBbaXNzdWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsc3F1YXJlZC9DYXRjaC9pc3N1ZXMpLCBvciBvbiB0aGUgW2ZvcnVtc10oaHR0cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9mb3J1bS8/ZnJvbWdyb3VwcyMhZm9ydW0vY2F0Y2gtZm9ydW0pLgogIAogIC0gQmxvb21iZXJnCisgLSBbQmxvb21saWZlXShodHRwczovL2Jsb29tbGlmZS5jb20pCiAgLSBOQVNBCiAgLSBbSW5zY29waXggSW5jLl0oaHR0cHM6Ly93d3cuaW5zY29waXguY29tLykKKyAtIFtNYWtpbW9dKGh0dHBzOi8vbWFraW1vLnBsLykKZGlmZiAtLWdpdCBhL2RvY3MvY29uZmlndXJhdGlvbi5tZCBiL2RvY3MvY29uZmlndXJhdGlvbi5tZAppbmRleCAzZTU5ZTc2Li4xYzk0NDgxIDEwMDY0NAotLS0gYS9kb2NzL2NvbmZpZ3VyYXRpb24ubWQKKysrIGIvZG9jcy9jb25maWd1cmF0aW9uLm1kCkBAIC0zLDEzICszLDE5IEBACiAKICoqQ29udGVudHMqKjxicj4KIFttYWluKCkvIGltcGxlbWVudGF0aW9uXSgjbWFpbi1pbXBsZW1lbnRhdGlvbik8YnI+CitbUmVwb3J0ZXIgLyBMaXN0ZW5lciBpbnRlcmZhY2VzXSgjcmVwb3J0ZXItLWxpc3RlbmVyLWludGVyZmFjZXMpPGJyPgogW1ByZWZpeGluZyBDYXRjaCBtYWNyb3NdKCNwcmVmaXhpbmctY2F0Y2gtbWFjcm9zKTxicj4KIFtUZXJtaW5hbCBjb2xvdXJdKCN0ZXJtaW5hbC1jb2xvdXIpPGJyPgogW0NvbnNvbGUgd2lkdGhdKCNjb25zb2xlLXdpZHRoKTxicj4KIFtzdGRvdXRdKCNzdGRvdXQpPGJyPgorW0ZhbGxiYWNrIHN0cmluZ2lmaWVyXSgjZmFsbGJhY2stc3RyaW5naWZpZXIpPGJyPgorW0RlZmF1bHQgcmVwb3J0ZXJdKCNkZWZhdWx0LXJlcG9ydGVyKTxicj4KK1tDKysxMSB0b2dnbGVzXSgjYzExLXRvZ2dsZXMpPGJyPgorW0MrKzE3IHRvZ2dsZXNdKCNjMTctdG9nZ2xlcyk8YnI+CiBbT3RoZXIgdG9nZ2xlc10oI290aGVyLXRvZ2dsZXMpPGJyPgogW1dpbmRvd3MgaGVhZGVyIGNsdXR0ZXJdKCN3aW5kb3dzLWhlYWRlci1jbHV0dGVyKTxicj4KIFtFbmFibGluZyBzdHJpbmdpZmljYXRpb25dKCNlbmFibGluZy1zdHJpbmdpZmljYXRpb24pPGJyPgorW0Rpc2FibGluZyBleGNlcHRpb25zXSgjZGlzYWJsaW5nLWV4Y2VwdGlvbnMpPGJyPgogCiBDYXRjaCBpcyBkZXNpZ25lZCB0byAianVzdCB3b3JrIiBhcyBtdWNoIGFzIHBvc3NpYmxlLiBGb3IgbW9zdCBwZW9wbGUgdGhlIG9ubHkgY29uZmlndXJhdGlvbiBuZWVkZWQgaXMgdGVsbGluZyBDYXRjaCB3aGljaCBzb3VyY2UgZmlsZSBzaG91bGQgaG9zdCBhbGwgdGhlIGltcGxlbWVudGF0aW9uIGNvZGUgKGBgYENBVENIX0NPTkZJR19NQUlOYGBgKS4KIApAQCAtMTcsMTQgKzIzLDE0IEBACiAKICMjIG1haW4oKS8gaW1wbGVtZW50YXRpb24KIAotCUNBVENIX0NPTkZJR19NQUlOCS8vIERlc2lnbmF0ZXMgdGhpcyBhcyBpbXBsZW1lbnRhdGlvbiBmaWxlIGFuZCBkZWZpbmVzIG1haW4oKQotCUNBVENIX0NPTkZJR19SVU5ORVIJLy8gRGVzaWduYXRlcyB0aGlzIGFzIGltcGxlbWVudGF0aW9uIGZpbGUKKyAgICBDQVRDSF9DT05GSUdfTUFJTiAgICAgIC8vIERlc2lnbmF0ZXMgdGhpcyBhcyBpbXBsZW1lbnRhdGlvbiBmaWxlIGFuZCBkZWZpbmVzIG1haW4oKQorICAgIENBVENIX0NPTkZJR19SVU5ORVIgICAgLy8gRGVzaWduYXRlcyB0aGlzIGFzIGltcGxlbWVudGF0aW9uIGZpbGUKIAogQWx0aG91Z2ggQ2F0Y2ggaXMgaGVhZGVyIG9ubHkgaXQgc3RpbGwsIGludGVybmFsbHksIG1haW50YWlucyBhIGRpc3RpbmN0aW9uIGJldHdlZW4gaW50ZXJmYWNlIGhlYWRlcnMgYW5kIGhlYWRlcnMgdGhhdCBjb250YWluIGltcGxlbWVudGF0aW9uLiBPbmx5IG9uZSBzb3VyY2UgZmlsZSBpbiB5b3VyIHRlc3QgcHJvamVjdCBzaG91bGQgY29tcGlsZSB0aGUgaW1wbGVtZW50YXRpb24gaGVhZGVycyBhbmQgdGhpcyBpcyBjb250cm9sbGVkIHRocm91Z2ggdGhlIHVzZSBvZiBvbmUgb2YgdGhlc2UgbWFjcm9zIC0gb25lIG9mIHRoZXNlIGlkZW50aWZpZXJzIHNob3VsZCBiZSBkZWZpbmVkIGJlZm9yZSBpbmNsdWRpbmcgQ2F0Y2ggaW4gKmV4YWN0bHkgb25lIGltcGxlbWVudGF0aW9uIGZpbGUgaW4geW91ciBwcm9qZWN0Ki4KIAotIyBSZXBvcnRlciAvIExpc3RlbmVyIGludGVyZmFjZXMKKyMjIFJlcG9ydGVyIC8gTGlzdGVuZXIgaW50ZXJmYWNlcwogCi0gICAgQ0FUQ0hfQ09ORklHX0VYVEVSTkFMX0lOVEVSRkFDRVMgIC8vIEJyaW5ncyBpbiBuZWNjZXNzYXJ5IGhlYWRlcnMgZm9yIFJlcG9ydGVyL0xpc3RlbmVyIGltcGxlbWVudGF0aW9uCisgICAgQ0FUQ0hfQ09ORklHX0VYVEVSTkFMX0lOVEVSRkFDRVMgIC8vIEJyaW5ncyBpbiBuZWNlc3NhcnkgaGVhZGVycyBmb3IgUmVwb3J0ZXIvTGlzdGVuZXIgaW1wbGVtZW50YXRpb24KIAogQnJpbmdzIGluIHZhcmlvdXMgcGFydHMgb2YgQ2F0Y2ggdGhhdCBhcmUgcmVxdWlyZWQgZm9yIHVzZXIgZGVmaW5lZCBSZXBvcnRlcnMgYW5kIExpc3RlbmVycy4gVGhpcyBtZWFucyB0aGF0IG5ldyBSZXBvcnRlcnMgYW5kIExpc3RlbmVycyBjYW4gYmUgZGVmaW5lZCBpbiB0aGlzIGZpbGUgYXMgd2VsbCBhcyBpbiB0aGUgbWFpbiBmaWxlLgogCkBAIC0zMiwxNiArMzgsMTYgQEAKIAogIyMgUHJlZml4aW5nIENhdGNoIG1hY3JvcwogCi0JQ0FUQ0hfQ09ORklHX1BSRUZJWF9BTEwKKyAgICBDQVRDSF9DT05GSUdfUFJFRklYX0FMTAogCiBUbyBrZWVwIHRlc3QgY29kZSBjbGVhbiBhbmQgdW5jbHV0dGVyZWQgQ2F0Y2ggdXNlcyBzaG9ydCBtYWNybyBuYW1lcyAoZS5nLiBgYGBURVNUX0NBU0VgYGAgYW5kIGBgYFJFUVVJUkVgYGApLiBPY2Nhc2lvbmFsbHkgdGhlc2UgbWF5IGNvbmZsaWN0IHdpdGggaWRlbnRpZmllcnMgZnJvbSBwbGF0Zm9ybSBoZWFkZXJzIG9yIHRoZSBzeXN0ZW0gdW5kZXIgdGVzdC4gSW4gdGhpcyBjYXNlIHRoZSBhYm92ZSBpZGVudGlmaWVyIGNhbiBiZSBkZWZpbmVkLiBUaGlzIHdpbGwgY2F1c2UgYWxsIHRoZSBDYXRjaCB1c2VyIG1hY3JvcyB0byBiZSBwcmVmaXhlZCB3aXRoIGBgYENBVENIX2BgYCAoZS5nLiBgYGBDQVRDSF9URVNUX0NBU0VgYGAgYW5kIGBgYENBVENIX1JFUVVJUkVgYGApLgogCiAKICMjIFRlcm1pbmFsIGNvbG91cgogCi0JQ0FUQ0hfQ09ORklHX0NPTE9VUl9OT05FCS8vIGNvbXBsZXRlbHkgZGlzYWJsZXMgYWxsIHRleHQgY29sb3VyaW5nCi0JQ0FUQ0hfQ09ORklHX0NPTE9VUl9XSU5ET1dTCS8vIGZvcmNlcyB0aGUgV2luMzIgY29uc29sZSBBUEkgdG8gYmUgdXNlZAotCUNBVENIX0NPTkZJR19DT0xPVVJfQU5TSQkvLyBmb3JjZXMgQU5TSSBjb2xvdXIgY29kZXMgdG8gYmUgdXNlZAorICAgIENBVENIX0NPTkZJR19DT0xPVVJfTk9ORSAgICAgIC8vIGNvbXBsZXRlbHkgZGlzYWJsZXMgYWxsIHRleHQgY29sb3VyaW5nCisgICAgQ0FUQ0hfQ09ORklHX0NPTE9VUl9XSU5ET1dTICAgLy8gZm9yY2VzIHRoZSBXaW4zMiBjb25zb2xlIEFQSSB0byBiZSB1c2VkCisgICAgQ0FUQ0hfQ09ORklHX0NPTE9VUl9BTlNJICAgICAgLy8gZm9yY2VzIEFOU0kgY29sb3VyIGNvZGVzIHRvIGJlIHVzZWQKIAogWWVzLCBJIGFtIEVuZ2xpc2gsIHNvIEkgd2lsbCBjb250aW51ZSB0byBzcGVsbCAiY29sb3VyIiB3aXRoIGEgJ3UnLgogCkBAIC01NSwyNCArNjEsODEgQEAKIAogIyMgQ29uc29sZSB3aWR0aAogCi0JQ0FUQ0hfQ09ORklHX0NPTlNPTEVfV0lEVEggPSB4IC8vIHdoZXJlIHggaXMgYSBudW1iZXIKKyAgICBDQVRDSF9DT05GSUdfQ09OU09MRV9XSURUSCA9IHggLy8gd2hlcmUgeCBpcyBhIG51bWJlcgogCiBDYXRjaCBmb3JtYXRzIG91dHB1dCBpbnRlbmRlZCBmb3IgdGhlIGNvbnNvbGUgdG8gZml0IHdpdGhpbiBhIGZpeGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzLiBUaGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGFzIGluZGVudGF0aW9uIGlzIHVzZWQgZXh0ZW5zaXZlbHkgYW5kIHVuY29udHJvbGxlZCBsaW5lIHdyYXBzIGJyZWFrIHRoaXMuCiBCeSBkZWZhdWx0IGEgY29uc29sZSB3aWR0aCBvZiA4MCBpcyBhc3N1bWVkIGJ1dCB0aGlzIGNhbiBiZSBjb250cm9sbGVkIGJ5IGRlZmluaW5nIHRoZSBhYm92ZSBpZGVudGlmaWVyIHRvIGJlIGEgZGlmZmVyZW50IHZhbHVlLgogCiAjIyBzdGRvdXQKIAotCUNBVENIX0NPTkZJR19OT1NURE9VVAorICAgIENBVENIX0NPTkZJR19OT1NURE9VVAogCi1DYXRjaCBkb2VzIG5vdCB1c2UgYGBgc3RkOjpjb3V0YGBgLCBgYGBzdGQ6OmNlcnJgYGAgYW5kIGBgYHN0ZDo6Y2xvZ2BgYCBkaXJlY3RseSBidXQgZ2V0cyB0aGVtIGZyb20gYGBgQ2F0Y2g6OmNvdXQoKWBgYCwgYGBgQ2F0Y2g6OmNlcnIoKWBgYCBhbmQgYGBgQ2F0Y2g6OmNsb2dgYGAgcmVzcGVjdGl2ZWx5LiBJZiB0aGUgYWJvdmUgaWRlbnRpZmllciBpcyBkZWZpbmVkIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbGVmdCB1bmltcGxlbWVudGVkIGFuZCB5b3UgbXVzdCBpbXBsZW1lbnQgdGhlbSB5b3Vyc2VsZi4gVGhlaXIgc2lnbmF0dXJlcyBhcmU6CitUbyBzdXBwb3J0IHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBwcm92aWRlIGBzdGQ6OmNvdXRgLCBgc3RkOjpjZXJyYCBhbmQKK2BzdGQ6OmNsb2dgLCBDYXRjaCBkb2VzIG5vdCB1c2VtIHRoZSBkaXJlY3RseSwgYnV0IHJhdGhlciBjYWxscworYENhdGNoOjpjb3V0YCwgYENhdGNoOjpjZXJyYCBhbmQgYENhdGNoOjpjbG9nYC4gWW91IGNhbiByZXBsYWNlIHRoZWlyCitpbXBsZW1lbnRhdGlvbiBieSBkZWZpbmluZyBgQ0FUQ0hfQ09ORklHX05PU1RET1VUYCBhbmQgaW1wbGVtZW50aW5nCit0aGVtIHlvdXJzZWxmLCB0aGVpciBzaWduYXR1cmVzIGFyZToKIAogICAgIHN0ZDo6b3N0cmVhbSYgY291dCgpOwogICAgIHN0ZDo6b3N0cmVhbSYgY2VycigpOwogICAgIHN0ZDo6b3N0cmVhbSYgY2xvZygpOwogCi1UaGlzIGNhbiBiZSB1c2VmdWwgb24gY2VydGFpbiBwbGF0Zm9ybXMgdGhhdCBkbyBub3QgcHJvdmlkZSB0aGUgc3RhbmRhcmQgaW9zdHJlYW1zLCBzdWNoIGFzIGNlcnRhaW4gZW1iZWRkZWQgc3lzdGVtcy4KK1tZb3UgY2FuIHNlZSBhbiBleGFtcGxlIG9mIHJlcGxhY2luZyB0aGVzZSBmdW5jdGlvbnMgaGVyZS5dKAorLi4vZXhhbXBsZXMvMjMxLUNmZy1PdXRwdXRTdHJlYW1zLmNwcCkKIAogCisjIyBGYWxsYmFjayBzdHJpbmdpZmllcgorCitCeSBkZWZhdWx0LCB3aGVuIENhdGNoJ3Mgc3RyaW5naWZpY2F0aW9uIG1hY2hpbmVyeSBoYXMgdG8gc3RyaW5naWZ5CithIHR5cGUgdGhhdCBkb2VzIG5vdCBzcGVjaWFsaXplIGBTdHJpbmdNYWtlcmAsIGRvZXMgbm90IG92ZXJsb2FkIGBvcGVyYXRvcjw8YCwKK2lzIG5vdCBhbiBlbnVtZXJhdGlvbiBhbmQgaXMgbm90IGEgcmFuZ2UsIGl0IHVzZXMgYCJ7P30iYC4gVGhpcyBjYW4gYmUKK292ZXJyaWRlbiBieSBkZWZpbmluZyBgQ0FUQ0hfQ09ORklHX0ZBTExCQUNLX1NUUklOR0lGSUVSYCB0byBuYW1lIG9mIGEKK2Z1bmN0aW9uIHRoYXQgc2hvdWxkIHBlcmZvcm0gdGhlIHN0cmluZ2lmaWNhdGlvbiBpbnN0ZWFkLgorCitBbGwgdHlwZXMgdGhhdCBkbyBub3QgcHJvdmlkZSBgU3RyaW5nTWFrZXJgIHNwZWNpYWxpemF0aW9uIG9yIGBvcGVyYXRvcjw8YAorb3ZlcmxvYWQgd2lsbCBiZSBzZW50IHRvIHRoaXMgZnVuY3Rpb24gKHRoaXMgaW5jbHVkZXMgZW51bXMgYW5kIHJhbmdlcykuCitUaGUgcHJvdmlkZWQgZnVuY3Rpb24gbXVzdCByZXR1cm4gYHN0ZDo6c3RyaW5nYCBhbmQgbXVzdCBhY2NlcHQgYW55IHR5cGUsCitlLmcuIHZpYSBvdmVybG9hZGluZy4KKworX05vdGUgdGhhdCBpZiB0aGUgcHJvdmlkZWQgZnVuY3Rpb24gZG9lcyBub3QgaGFuZGxlIGEgdHlwZSBhbmQgdGhpcyB0eXBlCityZXF1aXJlcyB0byBiZSBzdHJpbmdpZmllZCwgdGhlIGNvbXBpbGF0aW9uIHdpbGwgZmFpbC5fCisKKworIyMgRGVmYXVsdCByZXBvcnRlcgorCitDYXRjaCdzIGRlZmF1bHQgcmVwb3J0ZXIgY2FuIGJlIGNoYW5nZWQgYnkgZGVmaW5pbmcgbWFjcm8KK2BDQVRDSF9DT05GSUdfREVGQVVMVF9SRVBPUlRFUmAgdG8gc3RyaW5nIGxpdGVyYWwgbmFtaW5nIHRoZSBkZXNpcmVkCitkZWZhdWx0IHJlcG9ydGVyLgorCitUaGlzIG1lYW5zIHRoYXQgZGVmaW5pbmcgYENBVENIX0NPTkZJR19ERUZBVUxUX1JFUE9SVEVSYCB0byBgImNvbnNvbGUiYAoraXMgZXF1aXZhbGVudCB3aXRoIHRoZSBvdXQtb2YtdGhlLWJveCBleHBlcmllbmNlLgorCisKKyMjIEMrKzExIHRvZ2dsZXMKKworICAgIENBVENIX0NPTkZJR19DUFAxMV9UT19TVFJJTkcgLy8gVXNlIGBzdGQ6OnRvX3N0cmluZ2AKKworQmVjYXVzZSB3ZSBzdXBwb3J0IHBsYXRmb3JtcyB3aG9zZSBzdGFuZGFyZCBsaWJyYXJ5IGRvZXMgbm90IGNvbnRhaW4KK2BzdGQ6OnRvX3N0cmluZ2AsIGl0IGlzIHBvc3NpYmxlIHRvIGZvcmNlIENhdGNoIHRvIHVzZSBhIHdvcmthcm91bmQKK2Jhc2VkIG9uIGBzdGQ6OnN0cmluZ3N0cmVhbWAuIE9uIHBsYXRmb3JtcyBvdGhlciB0aGFuIEFuZHJvaWQsCit0aGUgZGVmYXVsdCBpcyB0byB1c2UgYHN0ZDo6dG9fc3RyaW5nYC4gT24gQW5kcm9pZCwgdGhlIGRlZmF1bHQgaXMgdG8KK3VzZSB0aGUgYHN0cmluZ3N0cmVhbWAgd29ya2Fyb3VuZC4gQXMgYWx3YXlzLCBpdCBpcyBwb3NzaWJsZSB0byBvdmVycmlkZQorQ2F0Y2gncyBzZWxlY3Rpb24sIGJ5IGRlZmluaW5nIGVpdGhlciBgQ0FUQ0hfQ09ORklHX0NQUDExX1RPX1NUUklOR2Agb3IKK2BDQVRDSF9DT05GSUdfTk9fQ1BQMTFfVE9fU1RSSU5HYC4KKworCisjIyBDKysxNyB0b2dnbGVzCisKKyAgICBDQVRDSF9DT05GSUdfQ1BQMTdfVU5DQVVHSFRfRVhDRVBUSU9OUyAgLy8gVXNlIHN0ZDo6dW5jYXVnaHRfZXhjZXB0aW9ucyBpbnN0ZWFkIG9mIHN0ZDo6dW5jYXVnaHRfZXhjZXB0aW9uCisgICAgQ0FUQ0hfQ09ORklHX0NQUDE3X1NUUklOR19WSUVXICAgICAgICAgIC8vIFByb3ZpZGUgU3RyaW5nTWFrZXIgc3BlY2lhbGl6YXRpb24gZm9yIHN0ZDo6c3RyaW5nX3ZpZXcKKyAgICBDQVRDSF9DT05GSUdfQ1BQMTdfVkFSSUFOVCAgICAgICAgICAgICAgLy8gT3ZlcnJpZGUgQysrMTcgZGV0ZWN0aW9uIGZvciBDQVRDSF9DT05GSUdfRU5BQkxFX1ZBUklBTlRfU1RSSU5HTUFLRVIKKworQ2F0Y2ggY29udGFpbnMgYmFzaWMgY29tcGlsZXIvc3RhbmRhcmQgZGV0ZWN0aW9uIGFuZCBhdHRlbXB0cyB0byB1c2UKK3NvbWUgQysrMTcgZmVhdHVyZXMgd2hlbmV2ZXIgYXBwcm9wcmlhdGUuIFRoaXMgYXV0b21hdGljIGRldGVjdGlvbgorY2FuIGJlIG1hbnVhbGx5IG92ZXJyaWRkZW4gaW4gYm90aCBkaXJlY3Rpb25zLCB0aGF0IGlzLCBhIGZlYXR1cmUKK2NhbiBiZSBlbmFibGVkIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBpbiB0aGUgdGFibGUgYWJvdmUsIGFuZCBkaXNhYmxlZAorYnkgdXNpbmcgYF9OT19gIGluIHRoZSBtYWNybywgZS5nLiBgQ0FUQ0hfQ09ORklHX05PX0NQUDE3X1VOQ0FVR0hUX0VYQ0VQVElPTlNgLgorCiAKICMjIE90aGVyIHRvZ2dsZXMKIApAQCAtODQsNiArMTQ3LDggQEAKICAgICBDQVRDSF9DT05GSUdfV0lORE9XU19DUlREQkcgICAgICAgICAgICAgLy8gRW5hYmxlIGxlYWsgY2hlY2tpbmcgdXNpbmcgV2luZG93cydzIENSVCBEZWJ1ZyBIZWFwCiAgICAgQ0FUQ0hfQ09ORklHX0RJU0FCTEVfU1RSSU5HSUZJQ0FUSU9OICAgIC8vIERpc2FibGUgc3RyaW5naWZ5aW5nIHRoZSBvcmlnaW5hbCBleHByZXNzaW9uCiAgICAgQ0FUQ0hfQ09ORklHX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgIC8vIERpc2FibGVzIGFzc2VydGlvbnMgYW5kIHRlc3QgY2FzZSByZWdpc3RyYXRpb24KKyAgICBDQVRDSF9DT05GSUdfV0NIQVIgICAgICAgICAgICAgICAgICAgICAgLy8gRW5hYmxlcyB1c2Ugb2Ygd2NoYXJ0X3QKKyAgICBDQVRDSF9DT05GSUdfRVhQRVJJTUVOVEFMX1JFRElSRUNUICAgICAgLy8gRW5hYmxlcyB0aGUgbmV3IChleHBlcmltZW50YWwpIHdheSBvZiBjYXB0dXJpbmcgc3Rkb3V0L3N0ZGVycgogCiBDdXJyZW50bHkgQ2F0Y2ggZW5hYmxlcyBgQ0FUQ0hfQ09ORklHX1dJTkRPV1NfU0VIYCBvbmx5IHdoZW4gY29tcGlsZWQgd2l0aCBNU1ZDLCBiZWNhdXNlIHNvbWUgdmVyc2lvbnMgb2YgTWluR1cgZG8gbm90IGhhdmUgdGhlIG5lY2Vzc2FyeSBXaW4zMiBBUEkgc3VwcG9ydC4KIApAQCAtOTEsMTQgKzE1NiwyMiBAQAogCiBgQ0FUQ0hfQ09ORklHX1dJTkRPV1NfQ1JUREJHYCBpcyBvZmYgYnkgZGVmYXVsdC4gSWYgZW5hYmxlZCwgV2luZG93cydzIENSVCBpcyB1c2VkIHRvIGNoZWNrIGZvciBtZW1vcnkgbGVha3MsIGFuZCBkaXNwbGF5cyB0aGVtIGFmdGVyIHRoZSB0ZXN0cyBmaW5pc2ggcnVubmluZy4KIAotVGhlc2UgdG9nZ2xlcyBjYW4gYmUgZGlzYWJsZWQgYnkgdXNpbmcgYF9OT19gIGZvcm0gb2YgdGhlIHRvZ2dsZSwgZS5nLiBgQ0FUQ0hfQ09ORklHX05PX1dJTkRPV1NfU0VIYC4KK2BDQVRDSF9DT05GSUdfV0NIQVJgIGlzIG9uIGJ5IGRlZmF1bHQsIGJ1dCBjYW4gYmUgZGlzYWJsZWQuIEN1cnJlbnRseQoraXQgaXMgb25seSB1c2VkIGluIHN1cHBvcnQgZm9yIERKR1BQIGNyb3NzLWNvbXBpbGVyLgorCitXaXRoIHRoZSBleGNlcHRpb24gb2YgYENBVENIX0NPTkZJR19FWFBFUklNRU5UQUxfUkVESVJFQ1RgLAordGhlc2UgdG9nZ2xlcyBjYW4gYmUgZGlzYWJsZWQgYnkgdXNpbmcgYF9OT19gIGZvcm0gb2YgdGhlIHRvZ2dsZSwKK2UuZy4gYENBVENIX0NPTkZJR19OT19XSU5ET1dTX1NFSGAuCiAKICMjIyBgQ0FUQ0hfQ09ORklHX0ZBU1RfQ09NUElMRWAKLURlZmluaW5nIHRoaXMgZmxhZyBzcGVlZHMgdXAgY29tcGlsYXRpb24gb2YgdGVzdCBmaWxlcyBieSB+MjAlLCBieSBtYWtpbmcgMiBjaGFuZ2VzOgotKiBUaGUgYC1iYCAoYC0tYnJlYWtgKSBmbGFnIG5vIGxvbmdlciBtYWtlcyBDYXRjaCBicmVhayBpbnRvIGRlYnVnZ2VyIGluIHRoZSBzYW1lIHN0YWNrIGZyYW1lIGFzIHRoZSBmYWlsZWQgdGVzdCwgYnV0IHJhdGhlciBpbiBhIHN0YWNrIGZyYW1lICpiZWxvdyouCi0qIE5vbi1leGNlcHRpb24gZmFtaWx5IG9mIG1hY3JvcyAoe2BSRVFVSVJFYCxgQ0hFQ0tgfXtgX2AsYF9GQUxTRWAsIGBfRkFMU0VgfSwgbm8gbG9uZ2VyIHVzZSBsb2NhbCB0cnktY2FjaGUgYmxvY2suIFRoaXMgZGlzYWJsZXMgZXhjZXB0aW9uIHRyYW5zbGF0aW9uLCBidXQgc2hvdWxkIG5vdCBsZWFkIHRvIGZhbHNlIG5lZ2F0aXZlcy4KK1RoaXMgY29tcGlsZS10aW1lIGZsYWcgc3BlZWRzIHVwIGNvbXBpbGF0aW9uIG9mIGFzc2VydGlvbiBtYWNyb3MgYnkgfjIwJSwKK2J5IGRpc2FibGluZyB0aGUgZ2VuZXJhdGlvbiBvZiBhc3NlcnRpb24tbG9jYWwgdHJ5LWNhdGNoIGJsb2NrcyBmb3IKK25vbi1leGNlcHRpb24gZmFtaWx5IG9mIGFzc2VydGlvbiBtYWNyb3MgKHtgUkVRVUlSRWAsYENIRUNLYH17YGAsYF9GQUxTRWAsIGBfVEhBVGB9KS4KK1RoaXMgZGlzYWJsZXMgdHJhbnNsYXRpb24gb2YgZXhjZXB0aW9ucyB0aHJvd24gdW5kZXIgdGhlc2UgYXNzZXJ0aW9ucywgYnV0CitzaG91bGQgbm90IGxlYWQgdG8gZmFsc2UgbmVnYXRpdmVzLgogCi1gQ0FUQ0hfQ09ORklHX0ZBU1RfQ09NUElMRWAgaGFzIHRvIGJlIGVpdGhlciBkZWZpbmVkLCBvciBub3QgZGVmaW5lZCwgaW4gYWxsIHRyYW5zbGF0aW9uIHVuaXRzIHRoYXQgYXJlIGxpbmtlZCBpbnRvIHNpbmdsZSB0ZXN0IGJpbmFyeSwgb3IgdGhlIGJlaGF2aW91ciBvZiBzZXR0aW5nIGAtYmAgZmxhZyBhbmQgdGhyb3dpbmcgdW5leHBlY3RlZCBleGNlcHRpb25zIHdpbGwgYmUgdW5wcmVkaWN0YWJsZS4KK2BDQVRDSF9DT05GSUdfRkFTVF9DT01QSUxFYCBoYXMgdG8gYmUgZWl0aGVyIGRlZmluZWQsIG9yIG5vdCBkZWZpbmVkLAoraW4gYWxsIHRyYW5zbGF0aW9uIHVuaXRzIHRoYXQgYXJlIGxpbmtlZCBpbnRvIHNpbmdsZSB0ZXN0IGJpbmFyeS4KIAogIyMjIGBDQVRDSF9DT05GSUdfRElTQUJMRV9NQVRDSEVSU2AKIFdoZW4gYENBVENIX0NPTkZJR19ESVNBQkxFX01BVENIRVJTYCBpcyBkZWZpbmVkLCBhbGwgbWVudGlvbnMgb2YgQ2F0Y2gncyBNYXRjaGVycyBhcmUgaWZkZWYtZWQgYXdheSBmcm9tIHRoZSB0cmFuc2xhdGlvbiB1bml0LiBEb2luZyBzbyB3aWxsIHNwZWVkIHVwIGNvbXBpbGF0aW9uIG9mIHRoYXQgVFUuCkBAIC0xMjcsMTIgKzIwMCw0OCBAQAogCiBCeSBkZWZhdWx0LCBDYXRjaCBkb2VzIG5vdCBzdHJpbmdpZnkgc29tZSB0eXBlcyBmcm9tIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiBUaGlzIGlzIGRvbmUgdG8gYXZvaWQgZHJhZ2dpbmcgaW4gdmFyaW91cyBzdGFuZGFyZCBsaWJyYXJ5IGhlYWRlcnMgYnkgZGVmYXVsdC4gSG93ZXZlciwgQ2F0Y2ggZG9lcyBjb250YWluIHRoZXNlIGFuZCBjYW4gYmUgY29uZmlndXJlZCB0byBwcm92aWRlIHRoZW0sIHVzaW5nIHRoZXNlIG1hY3JvczoKIAotICAgIENBVENIX0NPTkZJR19FTkFCTEVfUEFJUl9TVFJJTkdNQUtFUiAgICAvLyBQcm92aWRlIFN0cmluZ01ha2VyIHNwZWNpYWxpemF0aW9uIGZvciBzdGQ6OnBhaXIKLSAgICBDQVRDSF9DT05GSUdfRU5BQkxFX1RVUExFX1NUUklOR01BS0VSICAgLy8gUHJvdmlkZSBTdHJpbmdNYWtlciBzcGVjaWFsaXphdGlvbiBmb3Igc3RkOjp0dXBsZQotICAgIENBVENIX0NPTkZJR19FTkFCTEVfQ0hST05PX1NUUklOR01BS0VSICAvLyBQcm92aWRlIFN0cmluZ01ha2VyIHNwZWNpYWxpemF0aW9uIGZvciBzdGQ6OmNocm9ubzo6ZHVyYXRpb24sIHN0ZDo6Y2hyb25vOjp0aW1lcG9pbnQKLSAgICBDQVRDSF9DT05GSUdfRU5BQkxFX0FMTF9TVFJJTkdNQUtFUlMgICAgLy8gRGVmaW5lcyBhbGwgb2YgdGhlIGFib3ZlCisgICAgQ0FUQ0hfQ09ORklHX0VOQUJMRV9QQUlSX1NUUklOR01BS0VSICAgICAvLyBQcm92aWRlIFN0cmluZ01ha2VyIHNwZWNpYWxpemF0aW9uIGZvciBzdGQ6OnBhaXIKKyAgICBDQVRDSF9DT05GSUdfRU5BQkxFX1RVUExFX1NUUklOR01BS0VSICAgIC8vIFByb3ZpZGUgU3RyaW5nTWFrZXIgc3BlY2lhbGl6YXRpb24gZm9yIHN0ZDo6dHVwbGUKKyAgICBDQVRDSF9DT05GSUdfRU5BQkxFX0NIUk9OT19TVFJJTkdNQUtFUiAgIC8vIFByb3ZpZGUgU3RyaW5nTWFrZXIgc3BlY2lhbGl6YXRpb24gZm9yIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbiwgc3RkOjpjaHJvbm86OnRpbWVwb2ludAorICAgIENBVENIX0NPTkZJR19FTkFCTEVfVkFSSUFOVF9TVFJJTkdNQUtFUiAgLy8gUHJvdmlkZSBTdHJpbmdNYWtlciBzcGVjaWFsaXphdGlvbiBmb3Igc3RkOjp2YXJpYW50LCBzdGQ6Om1vbm9zdGF0ZSAob24gQysrMTcpCisgICAgQ0FUQ0hfQ09ORklHX0VOQUJMRV9PUFRJT05BTF9TVFJJTkdNQUtFUiAvLyBQcm92aWRlIFN0cmluZ01ha2VyIHNwZWNpYWxpemF0aW9uIGZvciBzdGQ6Om9wdGlvbmFsIChvbiBDKysxNykKKyAgICBDQVRDSF9DT05GSUdfRU5BQkxFX0FMTF9TVFJJTkdNQUtFUlMgICAgIC8vIERlZmluZXMgYWxsIG9mIHRoZSBhYm92ZQogCiAKKyMjIERpc2FibGluZyBleGNlcHRpb25zCisKK0J5IGRlZmF1bHQsIENhdGNoMiB1c2VzIGV4Y2VwdGlvbnMgdG8gc2lnbmFsIGVycm9ycyBhbmQgdG8gYWJvcnQgdGVzdHMKK3doZW4gYW4gYXNzZXJ0aW9uIGZyb20gdGhlIGBSRVFVSVJFYCBmYW1pbHkgb2YgYXNzZXJ0aW9ucyBmYWlscy4gV2UgYWxzbworcHJvdmlkZSBhbiBleHBlcmltZW50YWwgc3VwcG9ydCBmb3IgZGlzYWJsaW5nIGV4Y2VwdGlvbnMuIENhdGNoMiBzaG91bGQKK2F1dG9tYXRpY2FsbHkgZGV0ZWN0IHdoZW4gaXQgaXMgY29tcGlsZWQgd2l0aCBleGNlcHRpb25zIGRpc2FibGVkLCBidXQKK2l0IGNhbiBiZSBmb3JjZWQgdG8gY29tcGlsZSB3aXRob3V0IGV4Y2VwdGlvbnMgYnkgZGVmaW5pbmcKKworICAgIENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMKKworTm90ZSB0aGF0IHdoZW4gdXNpbmcgQ2F0Y2gyIHdpdGhvdXQgZXhjZXB0aW9ucywgdGhlcmUgYXJlIDIgbWFqb3IKK2xpbWl0YXRpb25zOgorCisxKSBJZiB0aGVyZSBpcyBhbiBlcnJvciB0aGF0IHdvdWxkIG5vcm1hbGx5IGJlIHNpZ25hbGxlZCBieSBhbiBleGNlcHRpb24sCit0aGUgZXhjZXB0aW9uJ3MgbWVzc2FnZSB3aWxsIGluc3RlYWQgYmUgd3JpdHRlbiB0byBgQ2F0Y2g6OmNlcnJgIGFuZAorYHN0ZDo6dGVybWluYXRlYCB3aWxsIGJlIGNhbGxlZC4KKzIpIElmIGFuIGFzc2VydGlvbiBmcm9tIHRoZSBgUkVRVUlSRWAgZmFtaWx5IG9mIG1hY3JvcyBmYWlscywKK2BzdGQ6OnRlcm1pbmF0ZWAgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIgdGhlIGFjdGl2ZSByZXBvcnRlciByZXR1cm5zLgorCisKK1RoZXJlIGlzIGFsc28gYSBjdXN0b21pemF0aW9uIHBvaW50IGZvciB0aGUgZXhhY3QgYmVoYXZpb3VyIG9mIHdoYXQKK2hhcHBlbnMgaW5zdGVhZCBvZiBleGNlcHRpb24gYmVpbmcgdGhyb3duLiBUbyB1c2UgaXQsIGRlZmluZQorCisgICAgQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OU19DVVNUT01fSEFORExFUgorCithbmQgcHJvdmlkZSBhIGRlZmluaXRpb24gZm9yIHRoaXMgZnVuY3Rpb246CisKK2BgYGNwcAorbmFtZXNwYWNlIENhdGNoIHsKKyAgICBbW25vcmV0dXJuXV0KKyAgICB2b2lkIHRocm93X2V4Y2VwdGlvbihzdGQ6OmV4Y2VwdGlvbiBjb25zdCYpOworfQorYGBgCisKIC0tLQogCiBbSG9tZV0oUmVhZG1lLm1kI3RvcCkKZGlmZiAtLWdpdCBhL2RvY3MvY29udHJpYnV0aW5nLm1kIGIvZG9jcy9jb250cmlidXRpbmcubWQKaW5kZXggYjYxNTAzNy4uMjFiYmFkMSAxMDA2NDQKLS0tIGEvZG9jcy9jb250cmlidXRpbmcubWQKKysrIGIvZG9jcy9jb250cmlidXRpbmcubWQKQEAgLTEsOCArMSw4IEBACiA8YSBpZD0idG9wIj48L2E+CiAjIENvbnRyaWJ1dGluZyB0byBDYXRjaAogCi1TbyB5b3Ugd2FudCB0byBjb250cmlidXRlIHNvbWV0aGluZyB0byBDYXRjaD8gVGhhdCdzIGdyZWF0ISBXaGV0aGVyIGl0J3MgYSBidWcgZml4LCBhIG5ldyBmZWF0dXJlLCBzdXBwb3J0IGZvciAKLWFkZGl0aW9uYWwgY29tcGlsZXJzIC0gb3IganVzdCBhIGZpeCB0byB0aGUgZG9jdW1lbnRhdGlvbiAtIGFsbCBjb250cmlidXRpb25zIGFyZSB2ZXJ5IHdlbGNvbWUgYW5kIHZlcnkgbXVjaCBhcHByZWNpYXRlZC4gCitTbyB5b3Ugd2FudCB0byBjb250cmlidXRlIHNvbWV0aGluZyB0byBDYXRjaD8gVGhhdCdzIGdyZWF0ISBXaGV0aGVyIGl0J3MgYSBidWcgZml4LCBhIG5ldyBmZWF0dXJlLCBzdXBwb3J0IGZvcgorYWRkaXRpb25hbCBjb21waWxlcnMgLSBvciBqdXN0IGEgZml4IHRvIHRoZSBkb2N1bWVudGF0aW9uIC0gYWxsIGNvbnRyaWJ1dGlvbnMgYXJlIHZlcnkgd2VsY29tZSBhbmQgdmVyeSBtdWNoIGFwcHJlY2lhdGVkLgogT2YgY291cnNlIHNvIGFyZSBidWcgcmVwb3J0cyBhbmQgb3RoZXIgY29tbWVudHMgYW5kIHF1ZXN0aW9ucy4KIAogSWYgeW91IGFyZSBjb250cmlidXRpbmcgdG8gdGhlIGNvZGUgYmFzZSB0aGVyZSBhcmUgYSBmZXcgc2ltcGxlIGd1aWRlbGluZXMgdG8ga2VlcCBpbiBtaW5kLiBUaGlzIGFsc28gaW5jbHVkZXMgbm90ZXMgdG8KQEAgLTE2LDcgKzE2LDcgQEAKIAogIyMgRGlyZWN0b3J5IHN0cnVjdHVyZQogCi1fVXNlcnNfIG9mIENhdGNoIHByaW1hcmlseSB1c2UgdGhlIHNpbmdsZSBoZWFkZXIgdmVyc2lvbi4gX01haW50YWluZXJzXyBzaG91bGQgd29yayB3aXRoIHRoZSBmdWxsIHNvdXJjZSAod2hpY2ggaXMgc3RpbGwsIAorX1VzZXJzXyBvZiBDYXRjaCBwcmltYXJpbHkgdXNlIHRoZSBzaW5nbGUgaGVhZGVyIHZlcnNpb24uIF9NYWludGFpbmVyc18gc2hvdWxkIHdvcmsgd2l0aCB0aGUgZnVsbCBzb3VyY2UgKHdoaWNoIGlzIHN0aWxsLAogcHJpbWFyaWx5LCBpbiBoZWFkZXJzKS4gVGhpcyBjYW4gYmUgZm91bmQgaW4gdGhlIGBpbmNsdWRlYCBmb2xkZXIuIFRoZXJlIGFyZSBhIHNldCBvZiB0ZXN0IGZpbGVzLCBjdXJyZW50bHkgdW5kZXIKIGBwcm9qZWN0cy9TZWxmVGVzdGAuIFRoZSB0ZXN0IGFwcCBjYW4gYmUgYnVpbHQgdmlhIENNYWtlIGZyb20gdGhlIGBDTWFrZUxpc3RzLnR4dGAgZmlsZSBpbiB0aGUgcm9vdCwgb3IgeW91IGNhbiBnZW5lcmF0ZQogcHJvamVjdCBmaWxlcyBmb3IgVmlzdWFsIFN0dWRpbywgWENvZGUsIGFuZCBvdGhlcnMgKGluc3RydWN0aW9ucyBpbiB0aGUgYHByb2plY3RzYCBmb2xkZXIpLiBJZiB5b3UgaGF2ZSBhY2Nlc3MgdG8gQ0xpb24sCkBAIC0zNywyMCArMzcsNDIgQEAKIAogIyMgVGVzdGluZyB5b3VyIGNoYW5nZXMKIAotT2J2aW91c2x5IGFsbCBjaGFuZ2VzIHRvIENhdGNoJ3MgY29kZSBzaG91bGQgYmUgdGVzdGVkLiBJZiB5b3UgYWRkZWQgbmV3IGZ1bmN0aW9uYWxpdHksIHlvdSBzaG91bGQgYWRkIHRlc3RzIGNvdmVyaW5nIGFuZAotc2hvd2Nhc2luZyBpdC4gRXZlbiBpZiB5b3UgaGF2ZSBvbmx5IG1hZGUgY2hhbmdlcyB0byBDYXRjaCBpbnRlcm5hbHMgKGllIHlvdSBpbXBsZW1lbnRlZCBzb21lIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyksCi15b3Ugc2hvdWxkIHN0aWxsIHRlc3QgeW91ciBjaGFuZ2VzLgorT2J2aW91c2x5IGFsbCBjaGFuZ2VzIHRvIENhdGNoJ3MgY29kZSBzaG91bGQgYmUgdGVzdGVkLiBJZiB5b3UgYWRkZWQgbmV3CitmdW5jdGlvbmFsaXR5LCB5b3Ugc2hvdWxkIGFkZCB0ZXN0cyBjb3ZlcmluZyBhbmQgc2hvd2Nhc2luZyBpdC4gRXZlbiBpZiB5b3UgaGF2ZQorb25seSBtYWRlIGNoYW5nZXMgdG8gQ2F0Y2ggaW50ZXJuYWxzIChpLmUuIHlvdSBpbXBsZW1lbnRlZCBzb21lIHBlcmZvcm1hbmNlCitpbXByb3ZlbWVudHMpLCB5b3Ugc2hvdWxkIHN0aWxsIHRlc3QgeW91ciBjaGFuZ2VzLgogCi1UaGlzIG1lYW5zIDMgdGhpbmdzCitUaGlzIG1lYW5zIDIgdGhpbmdzCiAKLSogQ29tcGlsaW5nIENhdGNoJ3MgU2VsZlRlc3QgcHJvamVjdCAtLSBjb2RlIHRoYXQgZG9lcyBub3QgY29tcGlsZSBpcyBldmlkZW50bHkgaW5jb3JyZWN0LiBPYnZpb3VzbHksIHlvdSBhcmUgbm90IGV4cGVjdGVkIHRvCi1oYXZlIGFjY2VzcyB0byBhbGwgY29tcGlsZXJzIGFuZCBwbGF0Zm9ybXMgQ2F0Y2ggc3VwcG9ydHMsIENhdGNoJ3MgQ0kgcGlwZWxpbmUgd2lsbCBjb21waWxlIHlvdXIgY29kZSB1c2luZyBzdXBwb3J0ZWQgY29tcGlsZXJzCi1vbmNlIHlvdSBvcGVuIGEgUFIuCi0qIFJ1bm5pbmcgdGhlIFNlbGZUZXN0IGJpbmFyeS4gVGhlcmUgc2hvdWxkIGJlIG5vIHVuZXhwZWN0ZWQgZmFpbHVyZXMgb24gc2ltcGxlIHJ1bi4KLSogUnVubmluZyBDYXRjaCdzIGFwcHJvdmFsIHRlc3RzLiBBcHByb3ZhbCB0ZXN0cyBjb21wYXJlIGN1cnJlbnQgb3V0cHV0IG9mIHRoZSBTZWxmVGVzdCBiaW5hcnkgaW4gdmFyaW91cyBjb25maWd1cmF0aW9ucyBhZ2FpbnN0Ci1rbm93biBnb29kIG91dHB1dC4gQ2F0Y2gncyByZXBvc2l0b3J5IHByb3ZpZGVzIHV0aWxpdHkgc2NyaXB0cyBgYXBwcm92YWxUZXN0cy5weWAgdG8gaGVscCB5b3Ugd2l0aCB0aGlzLiBJdCBuZWVkcyB0byBiZSBwYXNzZWQKLXRoZSBTZWxmVGVzdCBiaW5hcnkgY29tcGlsZWQgd2l0aCB5b3VyIGNoYW5nZXMsIGxpa2Ugc286IGAkIC4vc2NyaXB0cy9hcHByb3ZhbFRlc3RzLnB5IGNsYW5nLWJ1aWxkL1NlbGZUZXN0YC4gVGhlIG91dHB1dCBzaG91bGQKLWJlIGZhaXJseSBzZWxmLWV4cGxhbmF0b3J5LgorKiBDb21waWxpbmcgQ2F0Y2gncyBTZWxmVGVzdCBwcm9qZWN0OgorYGBgCiskIGNkIENhdGNoMgorJCBjbWFrZSAtQmRlYnVnLWJ1aWxkIC1ILiAtRENNQUtFX0JVSUxEX1RZUEU9RGVidWcKKyQgY21ha2UgLS1idWlsZCBkZWJ1Zy1idWlsZAorYGBgCitiZWNhdXNlIGNvZGUgdGhhdCBkb2VzIG5vdCBjb21waWxlIGlzIGV2aWRlbnRseSBpbmNvcnJlY3QuIE9idmlvdXNseSwKK3lvdSBhcmUgbm90IGV4cGVjdGVkIHRvIGhhdmUgYWNjZXNzIHRvIGFsbCB0aGUgY29tcGlsZXJzIGFuZCBwbGF0Zm9ybXMKK3N1cHBvcnRlZCBieSBDYXRjaDIsIGJ1dCB5b3Ugc2hvdWxkIGF0IGxlYXN0IHNtb2tlIHRlc3QgeW91ciBjaGFuZ2VzCitvbiB5b3VyIHBsYXRmb3JtLiBPdXIgQ0kgcGlwZWxpbmUgd2lsbCBjaGVjayB5b3VyIFBSIGFnYWluc3QgbW9zdCBvZgordGhlIHN1cHBvcnRlZCBwbGF0Zm9ybXMsIGJ1dCBpdCB0YWtlcyBhbiBob3VyIHRvIGZpbmlzaCAtLSBjb21waWxpbmcKK2xvY2FsbHkgdGFrZXMganVzdCBhIGZldyBtaW51dGVzLgorCisKKyogUnVubmluZyB0aGUgdGVzdHMgdmlhIENUZXN0OgorYGBgCiskIGNkIGRlYnVnLWJ1aWxkCiskIGN0ZXN0IC1qIDIgLS1vdXRwdXQtb24tZmFpbHVyZQorYGBgCitJZiB5b3UgYWRkZWQgbmV3IHRlc3RzLCBhcHByb3ZhbCB0ZXN0cyBhcmUgdmVyeSBsaWtlbHkgdG8gZmFpbC4gSWYgdGhleQorZG8gbm90LCBpdCBtZWFucyB0aGF0IHlvdXIgY2hhbmdlcyB3ZXJlbid0IHJ1biBhcyBwYXJ0IG9mIHRoZW0uIFRoaXMKK19taWdodF8gYmUgaW50ZW50aW9uYWwsIGJ1dCB1c3VhbGx5IGlzIG5vdC4KKworVGhlIGFwcHJvdmFsIHRlc3RzIGNvbXBhcmUgY3VycmVudCBvdXRwdXQgb2YgdGhlIFNlbGZUZXN0IGJpbmFyeSBpbiB2YXJpb3VzCitjb25maWd1cmF0aW9ucyBhZ2FpbnN0IGtub3duIGdvb2Qgb3V0cHV0cy4gVGhlIHJlYXNvbiBpdCBmYWlscyBpcywKK191c3VhbGx5XywgdGhhdCB5b3UndmUgYWRkZWQgbmV3IHRlc3RzIGJ1dCBoYXZlIG5vdCB5ZXQgYXBwcm92ZWQgdGhlIGNoYW5nZXMKK3RoZXkgaW50cm9kdWNlLiBUaGlzIGlzIGRvbmUgd2l0aCB0aGUgYHNjcmlwdHMvYXBwcm92ZS5weWAgc2NyaXB0LCBidXQKK2JlZm9yZSB5b3UgZG8gc28sIHlvdSBuZWVkIHRvIGNoZWNrIHRoYXQgdGhlIGludHJvZHVjZWQgY2hhbmdlcyBhcmUgaW5kZWVkCitpbnRlbnRpb25hbC4KIAogCiAKZGlmZiAtLWdpdCBhL2RvY3MvZGVwcmVjYXRpb25zLm1kIGIvZG9jcy9kZXByZWNhdGlvbnMubWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ4OWUxZgotLS0gL2Rldi9udWxsCisrKyBiL2RvY3MvZGVwcmVjYXRpb25zLm1kCkBAIC0wLDAgKzEsOTMgQEAKKzxhIGlkPSJ0b3AiPjwvYT4KKyMgRGVwcmVjYXRpb25zIGFuZCBpbmNvbWluZyBjaGFuZ2VzCisKK1RoaXMgcGFnZSBkb2N1bWVudHMgY3VycmVudCBkZXByZWNhdGlvbnMgYW5kIHVwY29taW5nIHBsYW5uZWQgY2hhbmdlcworaW5zaWRlIENhdGNoMi4gVGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVzZSBpcyB0aGF0IGEgZGVwcmVjYXRlZCBmZWF0dXJlCit3aWxsIGJlIHJlbW92ZWQsIHdoaWxlIGEgcGxhbm5lZCBjaGFuZ2UgdG8gYSBmZWF0dXJlIG1lYW5zIHRoYXQgdGhlCitmZWF0dXJlIHdpbGwgYmVoYXZlIGRpZmZlcmVudGx5LCBidXQgd2lsbCBzdGlsbCBiZSBwcmVzZW50LiBPYnZpb3VzbHksCitlaXRoZXIgb2YgdGhlc2UgaXMgYSBicmVha2luZyBjaGFuZ2UsIGFuZCB0aHVzIHdpbGwgbm90IGhhcHBlbiB1bnRpbAorYXQgbGVhc3QgdGhlIG5leHQgbWFqb3IgcmVsZWFzZS4KKworCisjIyBEZXByZWNhdGlvbnMKKworIyMjIGAtLWxpc3QtKmAgcmV0dXJuIHZhbHVlcworCitUaGUgcmV0dXJuIGNvZGVzIG9mIHRoZSBgLS1saXN0LSpgIGZhbWlseSBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCit3aWxsIG5vIGxvbmdlciBiZSBlcXVhbCB0byB0aGUgbnVtYmVyIG9mIHRlc3RzL3RhZ3MvZXRjIGZvdW5kLCBpbnN0ZWFkCitpdCB3aWxsIGJlIDAgZm9yIHN1Y2Nlc3MgYW5kIG5vbi16ZXJvIGZvciBmYWlsdXJlLgorCisKKyMjIyBgLS1saXN0LXRlc3QtbmFtZXMtb25seWAKKworYC0tbGlzdC10ZXN0LW5hbWVzLW9ubHlgIGNvbW1hbmQgbGluZSBhcmd1bWVudCB3aWxsIGJlIHJlbW92ZWQuCisKKworIyMjIGBBTk9OX1RFU1RfQ0FTRWAKKworYEFOT05fVEVTVF9DQVNFYCBpcyBzY2hlZHVsZWQgZm9yIHJlbW92YWwsIGFzIGl0IGNhbiBiZSBmdWxseSByZXBsYWNlZAorYnkgYSBgVEVTVF9DQVNFYCB3aXRoIG5vIGFyZ3VtZW50cy4KKworCisjIyMgU2Vjb25kYXJ5IGRlc2NyaXB0aW9uIGFtb25nc3QgdGFncworCitDdXJyZW50bHksIHRoZSB0YWdzIHBhcnQgb2YgYFRFU1RfQ0FTRWAgKGFuZCBvdGhlcnMpIG1hY3JvIGNhbiBhbHNvCitjb250YWluIHRleHQgdGhhdCBpcyBub3QgcGFydCBvZiB0YWdzLiBUaGlzIHRleHQgaXMgdGhlbiBzZXBhcmF0ZWQgaW50bworYSAiZGVzY3JpcHRpb24iIG9mIHRoZSB0ZXN0IGNhc2UsIGJ1dCB0aGUgZGVzY3JpcHRpb24gaXMgdGhlbiBuZXZlciB1c2VkCithcGFydCBmcm9tIHdyaXRpbmcgaXQgb3V0IGZvciBgLS1saXN0LXRlc3RzIC12IGhpZ2hgLgorCitCZWNhdXNlIGl0IGlzbid0IGFjdHVhbGx5IHVzZWQgbm9yIGRvY3VtZW50ZWQsIGFuZCBicmluZ3MgY29tcGxpY2F0aW9ucwordG8gQ2F0Y2gyJ3MgaW50ZXJuYWxzLCBkZXNjcmlwdGlvbiBzdXBwb3J0IHdpbGwgYmUgcmVtb3ZlZC4KKworCisjIyBQbGFubmVkIGNoYW5nZXMKKworCisjIyMgUmVwb3J0ZXIgdmVyYm9zaXRpZXMKKworVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgdmVyYm9zaXRpZXMsIHdoZXJlIHRoZSByZXBvcnRlciBpcyBjaGVja2VkCit1cC1mcm9udCB3aGV0aGVyIGl0IHN1cHBvcnRzIHRoZSByZXF1ZXN0ZWQgdmVyYm9zaXR5LCBpcyBmdW5kYW1lbnRhbGx5CittaXNndWlkZWQgYW5kIHdpbGwgYmUgY2hhbmdlZC4gVGhlIG5ldyBpbXBsZW1lbnRhdGlvbiB3aWxsIG5vIGxvbmdlciBjaGVjaword2hldGhlciB0aGUgc3BlY2lmaWVkIHJlcG9ydGVyIHN1cHBvcnRzIHRoZSByZXF1ZXN0ZWQgdmVyYm9zaXR5LCBpbnN0ZWFkCitpdCB3aWxsIGJlIHVwIHRvIHRoZSByZXBvcnRlcnMgdG8gZGVhbCB3aXRoIHZlcmJvc2l0aWVzIGFzIHRoZXkgc2VlIGZpdAorKHdpdGggYW4gZXhwZWN0YXRpb24gdGhhdCB1bnN1cHBvcnRlZCB2ZXJib3NpdGllcyB3aWxsIGJlLCBhdCBtb3N0LAord2FybmluZ3MsIGJ1dCBub3QgZXJyb3JzKS4KKworCisjIyMgT3V0cHV0IGZvcm1hdCBvZiBgLS1saXN0LSpgIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCisKK1RoZSB2YXJpb3VzIGxpc3Qgb3BlcmF0aW9ucyB3aWxsIGJlIHBpcGVkIHRocm91Z2ggcmVwb3J0ZXJzLiBUaGlzIG1lYW5zCit0aGF0IGUuZy4gWE1MIHJlcG9ydGVyIHdpbGwgd3JpdGUgdGhlIG91dHB1dCBhcyBtYWNoaW5lLXBhcnNlYWJsZSBYTUwsCit3aGlsZSB0aGUgQ29uc29sZSByZXBvcnRlciB3aWxsIGtlZXAgdGhlIGN1cnJlbnQsIGh1bWFuLW9yaWVudGVkIG91dHB1dC4KKworCisjIyMgYENIRUNLRURfSUZgIGFuZCBgQ0hFQ0tFRF9FTFNFYAorCitUbyBtYWtlIHRoZSBgQ0hFQ0tFRF9JRmAgYW5kIGBDSEVDS0VEX0VMU0VgIG1hY3JvcyBtb3JlIHVzZWZ1bCwgdGhleSB3aWxsCitiZSBtYXJrZWQgYXMgIk9LIHRvIGZhaWwiIChgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpTdXBwcmVzc0ZhaWxgIGZsYWcKK3dpbGwgYmUgYWRkZWQpLCB3aGljaCBtZWFucyB0aGF0IHRoZWlyIGZhaWx1cmUgd2lsbCBub3QgZmFpbCB0aGUgdGVzdCwKK21ha2luZyB0aGUgYGVsc2VgIGFjdHVhbGx5IHVzZWZ1bC4KKworCisjIyMgQ2hhbmdlIHNlbWFudGljcyBvZiBgWy5dYCBhbmQgdGFnIGV4Y2x1c2lvbgorCitDdXJyZW50bHksIGdpdmVuIHRoZXNlIDIgdGVzdHMKK2BgYGNwcAorVEVTVF9DQVNFKCJBIiwgIlsuXVtmb29dIikge30KK1RFU1RfQ0FTRSgiQiIsICJbLl1bYmFyXSIpIHt9CitgYGAKK3NwZWNpZnlpbmcgYFtmb29dYCBhcyB0aGUgdGVzdHNwZWMgd2lsbCBydW4gdGVzdCAiQSIgYW5kIHNwZWNpZnlpbmcKK2B+W2Zvb11gIHdpbGwgcnVuIHRlc3QgIkIiLCBldmVuIHRob3VnaCBpdCBpcyBoaWRkZW4uIEFsc28sIHNwZWNpZnlpbmcKK2B+W2Jhel1gIHdpbGwgcnVuIGJvdGggdGVzdHMuIFRoaXMgYmVoYXZpb3VyIGlzIG9mdGVuIHN1cnByaXNpbmcgYW5kIHdpbGwKK2JlIGNoYW5nZWQgc28gdGhhdCBoaWRkZW4gdGVzdHMgYXJlIGluY2x1ZGVkIGluIGEgcnVuIG9ubHkgaWYgdGhleQorcG9zaXRpdmVseSBtYXRjaCBhIHRlc3RzcGVjLgorCisKKyMjIyBDb25zb2xlIENvbG91ciBBUEkKKworVGhlIEFQSSBmb3IgQ2F0Y2gyJ3MgY29uc29sZSBjb2xvdXIgd2lsbCBiZSBjaGFuZ2VkIHRvIHRha2UgYW4gZXh0cmEKK2FyZ3VtZW50LCB0aGUgc3RyZWFtIHRvIHdoaWNoIHRoZSBjb2xvdXIgY29kZSBzaG91bGQgYmUgYXBwbGllZC4KKworLS0tCisKK1tIb21lXShSZWFkbWUubWQjdG9wKQpkaWZmIC0tZ2l0IGEvZG9jcy9ldmVudC1saXN0ZW5lcnMubWQgYi9kb2NzL2V2ZW50LWxpc3RlbmVycy5tZAppbmRleCAxZGRlZjBmLi5jNjYyNWEyIDEwMDY0NAotLS0gYS9kb2NzL2V2ZW50LWxpc3RlbmVycy5tZAorKysgYi9kb2NzL2V2ZW50LWxpc3RlbmVycy5tZApAQCAtNDQsNyArNDQsNyBAQAogCiAjIyBFdmVudHMgdGhhdCBjYW4gYmUgaG9va2VkCiAKLVRoZSBmb2xsb3dpbmcgYXJlIHRoZSBtZXRob2RzIHRoYXQgY2FuIGJlIG92ZXJyaWRlbiBpbiB0aGUgTGlzdGVuZXI6CitUaGUgZm9sbG93aW5nIGFyZSB0aGUgbWV0aG9kcyB0aGF0IGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSBMaXN0ZW5lcjoKIAogYGBgYysrCiAvLyBUaGUgd2hvbGUgdGVzdCBydW4sIHN0YXJ0aW5nIGFuZCBlbmRpbmcKZGlmZiAtLWdpdCBhL2RvY3MvZ2VuZXJhdG9ycy5tZCBiL2RvY3MvZ2VuZXJhdG9ycy5tZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWQ0N2UzCi0tLSAvZGV2L251bGwKKysrIGIvZG9jcy9nZW5lcmF0b3JzLm1kCkBAIC0wLDAgKzEsMTMzIEBACis8YSBpZD0idG9wIj48L2E+CisjIERhdGEgR2VuZXJhdG9ycworCitEYXRhIGdlbmVyYXRvcnMgKGFsc28ga25vd24gYXMgX2RhdGEgZHJpdmVuL3BhcmFtZXRyaXplZCB0ZXN0IGNhc2VzXykKK2xldCB5b3UgcmV1c2UgdGhlIHNhbWUgc2V0IG9mIGFzc2VydGlvbnMgYWNyb3NzIGRpZmZlcmVudCBpbnB1dCB2YWx1ZXMuCitJbiBDYXRjaDIsIHRoaXMgbWVhbnMgdGhhdCB0aGV5IHJlc3BlY3QgdGhlIG9yZGVyaW5nIGFuZCBuZXN0aW5nCitvZiB0aGUgYFRFU1RfQ0FTRWAgYW5kIGBTRUNUSU9OYCBtYWNyb3MsIGFuZCB0aGVpciBuZXN0ZWQgc2VjdGlvbnMKK2FyZSBydW4gb25jZSBwZXIgZWFjaCB2YWx1ZSBpbiBhIGdlbmVyYXRvci4KKworVGhpcyBpcyBiZXN0IGV4cGxhaW5lZCB3aXRoIGFuIGV4YW1wbGU6CitgYGBjcHAKK1RFU1RfQ0FTRSgiR2VuZXJhdG9ycyIpIHsKKyAgICBhdXRvIGkgPSBHRU5FUkFURSgxLCAyLCAzKTsKKyAgICBTRUNUSU9OKCJvbmUiKSB7CisgICAgICAgIGF1dG8gaiA9IEdFTkVSQVRFKCAtMywgLTIsIC0xICk7CisgICAgICAgIFJFUVVJUkUoaiA8IGkpOworICAgIH0KK30KK2BgYAorCitUaGUgYXNzZXJ0aW9uIGluIHRoaXMgdGVzdCBjYXNlIHdpbGwgYmUgcnVuIDkgdGltZXMsIGJlY2F1c2UgdGhlcmUKK2FyZSAzIHBvc3NpYmxlIHZhbHVlcyBmb3IgYGlgICgxLCAyLCBhbmQgMykgYW5kIHRoZXJlIGFyZSAzIHBvc3NpYmxlCit2YWx1ZXMgZm9yIGBqYCAoLTMsIC0yLCBhbmQgLTEpLgorCisKK1RoZXJlIGFyZSAyIHBhcnRzIHRvIGdlbmVyYXRvcnMgaW4gQ2F0Y2gyLCB0aGUgYEdFTkVSQVRFYCBtYWNybyB0b2dldGhlcgord2l0aCB0aGUgYWxyZWFkeSBwcm92aWRlZCBnZW5lcmF0b3JzLCBhbmQgdGhlIGBJR2VuZXJhdG9yPFQ+YCBpbnRlcmZhY2UKK3RoYXQgYWxsb3dzIHVzZXJzIHRvIGltcGxlbWVudCB0aGVpciBvd24gZ2VuZXJhdG9ycy4KKworIyMgUHJvdmlkZWQgZ2VuZXJhdG9ycworCitDYXRjaDIncyBwcm92aWRlZCBnZW5lcmF0b3IgZnVuY3Rpb25hbGl0eSBjb25zaXN0cyBvZiB0aHJlZSBwYXJ0cywKKworKiBgR0VORVJBVEVgIG1hY3JvLCAgdGhhdCBzZXJ2ZXMgdG8gaW50ZWdyYXRlIGdlbmVyYXRvciBleHByZXNzaW9uIHdpdGgKK2EgdGVzdCBjYXNlLAorKiAyIGZ1bmRhbWVudGFsIGdlbmVyYXRvcnMKKyAgKiBgVmFsdWVHZW5lcmF0b3I8VD5gIC0tIGNvbnRhaW5zIG9ubHkgc2luZ2xlIGVsZW1lbnQKKyAgKiBgVmFsdWVzR2VuZXJhdG9yPFQ+YCAtLSBjb250YWlucyBtdWx0aXBsZSBlbGVtZW50cworKiA1IGdlbmVyaWMgZ2VuZXJhdG9ycyB0aGF0IG1vZGlmeSBvdGhlciBnZW5lcmF0b3JzCisgICogYEZpbHRlckdlbmVyYXRvcjxULCBQcmVkaWNhdGU+YCAtLSBmaWx0ZXJzIG91dCBlbGVtZW50cyBmcm9tIGEgZ2VuZXJhdG9yCisgIGZvciB3aGljaCB0aGUgcHJlZGljYXRlIHJldHVybnMgImZhbHNlIgorICAqIGBUYWtlR2VuZXJhdG9yPFQ+YCAtLSB0YWtlcyBmaXJzdCBgbmAgZWxlbWVudHMgZnJvbSBhIGdlbmVyYXRvcgorICAqIGBSZXBlYXRHZW5lcmF0b3I8VD5gIC0tIHJlcGVhdHMgb3V0cHV0IGZyb20gYSBnZW5lcmF0b3IgYG5gIHRpbWVzCisgICogYE1hcEdlbmVyYXRvcjxULCBVLCBGdW5jPmAgLS0gcmV0dXJucyB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGBGdW5jYAorICBvbiBlbGVtZW50cyBmcm9tIGEgZGlmZmVyZW50IGdlbmVyYXRvcgorICAqIGBDaHVua0dlbmVyYXRvcjxUPmAgLS0gcmV0dXJucyBjaHVua3MgKGluc2lkZSBgc3RkOjp2ZWN0b3JgKSBvZiBuIGVsZW1lbnRzIGZyb20gYSBnZW5lcmF0b3IKKyogMyBzcGVjaWZpYyBwdXJwb3NlIGdlbmVyYXRvcnMKKyAgKiBgUmFuZG9tSW50ZWdlckdlbmVyYXRvcjxJbnRlZ3JhbD5gIC0tIGdlbmVyYXRlcyByYW5kb20gSW50ZWdyYWxzIGZyb20gcmFuZ2UKKyAgKiBgUmFuZG9tRmxvYXRHZW5lcmF0b3I8RmxvYXQ+YCAtLSBnZW5lcmF0ZXMgcmFuZG9tIEZsb2F0cyBmcm9tIHJhbmdlCisgICogYFJhbmdlR2VuZXJhdG9yPFQ+YCAtLSBnZW5lcmF0ZXMgYWxsIHZhbHVlcyBpbnNpZGUgYSBzcGVjaWZpYyByYW5nZQorCitUaGUgZ2VuZXJhdG9ycyBhbHNvIGhhdmUgYXNzb2NpYXRlZCBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgaW5mZXIgdGhlaXIKK3R5cGUsIG1ha2luZyB0aGVpciB1c2FnZSBtdWNoIG5pY2VyLiBUaGVzZSBhcmUKKworKiBgdmFsdWUoVCYmKWAgZm9yIGBWYWx1ZUdlbmVyYXRvcjxUPmAKKyogYHZhbHVlcyhzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4pYCBmb3IgYFZhbHVlc0dlbmVyYXRvcjxUPmAKKyogYGZpbHRlcihwcmVkaWNhdGUsIEdlbmVyYXRvcldyYXBwZXI8VD4mJilgIGZvciBgRmlsdGVyR2VuZXJhdG9yPFQsIFByZWRpY2F0ZT5gCisqIGB0YWtlKGNvdW50LCBHZW5lcmF0b3JXcmFwcGVyPFQ+JiYpYCBmb3IgYFRha2VHZW5lcmF0b3I8VD5gCisqIGByZXBlYXQocmVwZWF0cywgR2VuZXJhdG9yV3JhcHBlcjxUPiYmKWAgZm9yIGBSZXBlYXRHZW5lcmF0b3I8VD5gCisqIGBtYXAoZnVuYywgR2VuZXJhdG9yV3JhcHBlcjxUPiYmKWAgZm9yIGBNYXBHZW5lcmF0b3I8VCwgVCwgRnVuYz5gIChtYXAgYFRgIHRvIGBUYCkKKyogYG1hcDxUPihmdW5jLCBHZW5lcmF0b3JXcmFwcGVyPFU+JiYpYCBmb3IgYE1hcEdlbmVyYXRvcjxULCBVLCBGdW5jPmAgKG1hcCBgVWAgdG8gYFRgKQorKiBgY2h1bmsoY2h1bmstc2l6ZSwgR2VuZXJhdG9yV3JhcHBlcjxUPiYmKWAgZm9yIGBDaHVua0dlbmVyYXRvcjxUPmAKKyogYHJhbmRvbShJbnRlZ2VyT3JGbG9hdCBhLCBJbnRlZ2VyT3JGbG9hdCBiKWAgZm9yIGBSYW5kb21JbnRlZ2VyR2VuZXJhdG9yYCBvciBgUmFuZG9tRmxvYXRHZW5lcmF0b3JgCisqIGByYW5nZShzdGFydCwgZW5kKWAgZm9yIGBSYW5nZUdlbmVyYXRvcjxUPmAgd2l0aCBhIHN0ZXAgc2l6ZSBvZiBgMWAgCisqIGByYW5nZShzdGFydCwgZW5kLCBzdGVwKWAgZm9yIGBSYW5nZUdlbmVyYXRvcjxUPmAgd2l0aCBhIGN1c3RvbSBzdGVwIHNpemUKKworCitBbmQgY2FuIGJlIHVzZWQgYXMgc2hvd24gaW4gdGhlIGV4YW1wbGUgYmVsb3cgdG8gY3JlYXRlIGEgZ2VuZXJhdG9yCit0aGF0IHJldHVybnMgMTAwIG9kZCByYW5kb20gbnVtYmVyOgorCitgYGBjcHAKK1RFU1RfQ0FTRSgiR2VuZXJhdGluZyByYW5kb20gaW50cyIsICJbZXhhbXBsZV1bZ2VuZXJhdG9yXSIpIHsKKyAgICBTRUNUSU9OKCJEZWR1Y2luZyBmdW5jdGlvbnMiKSB7CisgICAgICAgIGF1dG8gaSA9IEdFTkVSQVRFKHRha2UoMTAwLCBmaWx0ZXIoW10oaW50IGkpIHsgcmV0dXJuIGkgJSAyID09IDE7IH0sIHJhbmRvbSgtMTAwLCAxMDApKSkpOworICAgICAgICBSRVFVSVJFKGkgPiAtMTAwKTsKKyAgICAgICAgUkVRVUlSRShpIDwgMTAwKTsKKyAgICAgICAgUkVRVUlSRShpICUgMiA9PSAxKTsKKyAgICB9Cit9CitgYGAKKworCitBcGFydCBmcm9tIHJlZ2lzdGVyaW5nIGdlbmVyYXRvcnMgd2l0aCBDYXRjaDIsIHRoZSBgR0VORVJBVEVgIG1hY3JvIGhhcworb25lIG1vcmUgcHVycG9zZSwgYW5kIHRoYXQgaXMgdG8gcHJvdmlkZSBzaW1wbGUgd2F5IG9mIGdlbmVyYXRpbmcgdHJpdmlhbAorZ2VuZXJhdG9ycywgYXMgc2VlbiBpbiB0aGUgZmlyc3QgZXhhbXBsZSBvbiB0aGlzIHBhZ2UsIHdoZXJlIHdlIHVzZWQgaXQKK2FzIGBhdXRvIGkgPSBHRU5FUkFURSgxLCAyLCAzKTtgLiBUaGlzIHVzYWdlIGNvbnZlcnRlZCBlYWNoIG9mIHRoZSB0aHJlZQorbGl0ZXJhbHMgaW50byBhIHNpbmdsZSBgVmFsdWVHZW5lcmF0b3I8aW50PmAgYW5kIHRoZW4gcGxhY2VkIHRoZW0gYWxsIGluCithIHNwZWNpYWwgZ2VuZXJhdG9yIHRoYXQgY29uY2F0ZW5hdGVzIG90aGVyIGdlbmVyYXRvcnMuIEl0IGNhbiBhbHNvIGJlCit1c2VkIHdpdGggb3RoZXIgZ2VuZXJhdG9ycyBhcyBhcmd1bWVudHMsIHN1Y2ggYXMgYGF1dG8gaSA9IEdFTkVSQVRFKDAsIDIsCit0YWtlKDEwMCwgcmFuZG9tKDMwMCwgMzAwMCkpKTtgLiBUaGlzIGlzIHVzZWZ1bCBlLmcuIGlmIHlvdSBrbm93IHRoYXQKK3NwZWNpZmljIGlucHV0cyBhcmUgcHJvYmxlbWF0aWMgYW5kIHdhbnQgdG8gdGVzdCB0aGVtIHNlcGFyYXRlbHkvZmlyc3QuCisKKyoqRm9yIHNhZmV0eSByZWFzb25zLCB5b3UgY2Fubm90IHVzZSB2YXJpYWJsZXMgaW5zaWRlIHRoZSBgR0VORVJBVEVgIG1hY3JvLioqCisKK1lvdSBjYW4gYWxzbyBvdmVycmlkZSB0aGUgaW5mZXJyZWQgdHlwZSBieSB1c2luZyBgYXM8dHlwZT5gIGFzIHRoZSBmaXJzdAorYXJndW1lbnQgdG8gdGhlIG1hY3JvLiBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiBkZWFsaW5nIHdpdGggc3RyaW5nIGxpdGVyYWxzLAoraWYgeW91IHdhbnQgdGhlbSB0byBjb21lIG91dCBhcyBgc3RkOjpzdHJpbmdgOgorCitgYGBjcHAKK1RFU1RfQ0FTRSgidHlwZSBjb252ZXJzaW9uIiwgIltnZW5lcmF0b3JzXSIpIHsKKyAgICBhdXRvIHN0ciA9IEdFTkVSQVRFKGFzPHN0ZDo6c3RyaW5nPnt9LCAiYSIsICJiYiIsICJjY2MiKTtgCisgICAgUkVRVUlSRShzdHIuc2l6ZSgpID4gMCk7Cit9CitgYGAKKworIyMgR2VuZXJhdG9yIGludGVyZmFjZQorCitZb3UgY2FuIGFsc28gaW1wbGVtZW50IHlvdXIgb3duIGdlbmVyYXRvcnMsIGJ5IGRlcml2aW5nIGZyb20gdGhlCitgSUdlbmVyYXRvcjxUPmAgaW50ZXJmYWNlOgorCitgYGBjcHAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgSUdlbmVyYXRvciA6IEdlbmVyYXRvclVudHlwZWRCYXNlIHsKKyAgICAvLyB2aWEgR2VuZXJhdG9yVW50eXBlZEJhc2U6CisgICAgLy8gQXR0ZW1wdHMgdG8gbW92ZSB0aGUgZ2VuZXJhdG9yIHRvIHRoZSBuZXh0IGVsZW1lbnQuCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHN1Y2Nlc3NmdWwgKGFuZCB0aHVzIGhhcyBhbm90aGVyIGVsZW1lbnQgdGhhdCBjYW4gYmUgcmVhZCkKKyAgICB2aXJ0dWFsIGJvb2wgbmV4dCgpID0gMDsKKworICAgIC8vIFByZWNvbmRpdGlvbjoKKyAgICAvLyBUaGUgZ2VuZXJhdG9yIGlzIGVpdGhlciBmcmVzaGx5IGNvbnN0cnVjdGVkIG9yIHRoZSBsYXN0IGNhbGwgdG8gbmV4dCgpIHJldHVybmVkIHRydWUKKyAgICB2aXJ0dWFsIFQgY29uc3QmIGdldCgpIGNvbnN0ID0gMDsKK307CitgYGAKKworSG93ZXZlciwgdG8gYmUgYWJsZSB0byB1c2UgeW91ciBjdXN0b20gZ2VuZXJhdG9yIGluc2lkZSBgR0VORVJBVEVgLCBpdAord2lsbCBuZWVkIHRvIGJlIHdyYXBwZWQgaW5zaWRlIGEgYEdlbmVyYXRvcldyYXBwZXI8VD5gLgorYEdlbmVyYXRvcldyYXBwZXI8VD5gIGlzIGEgdmFsdWUgd3JhcHBlciBhcm91bmQgYQorYHN0ZDo6dW5pcXVlX3B0cjxJR2VuZXJhdG9yPFQ+PmAuCisKK0ZvciBmdWxsIGV4YW1wbGUgb2YgaW1wbGVtZW50aW5nIHlvdXIgb3duIGdlbmVyYXRvciwgbG9vayBpbnRvIENhdGNoMidzCitleGFtcGxlcywgc3BlY2lmaWNhbGx5CitbR2VuZXJhdG9yczogQ3JlYXRlIHlvdXIgb3duIGdlbmVyYXRvcl0oLi4vZXhhbXBsZXMvMzAwLUdlbi1Pd25HZW5lcmF0b3IuY3BwKS4KKwpkaWZmIC0tZ2l0IGEvZG9jcy9saW1pdGF0aW9ucy5tZCBiL2RvY3MvbGltaXRhdGlvbnMubWQKaW5kZXggYmNkYmFiMC4uYjk1Y2Q4NyAxMDA2NDQKLS0tIGEvZG9jcy9saW1pdGF0aW9ucy5tZAorKysgYi9kb2NzL2xpbWl0YXRpb25zLm1kCkBAIC0xLDEyICsxLDE5IEBACiA8YSBpZD0idG9wIj48L2E+CiAjIEtub3duIGxpbWl0YXRpb25zCiAKLUNhdGNoIGhhcyBzb21lIGtub3duIGxpbWl0YXRpb25zLCB0aGF0IHdlIGFyZSBub3QgcGxhbm5pbmcgdG8gY2hhbmdlLiBTb21lIG9mIHRoZXNlIGFyZSBjYXVzZWQgYnkgb3VyIGRlc2lyZSB0byBzdXBwb3J0IEMrKzk4IGNvbXBpbGVycywgc29tZSBvZiB0aGVzZSBhcmUgY2F1c2VkIGJ5IG91ciBkZXNpcmUgdG8ga2VlcCBDYXRjaCBjcm9zc3BsYXRmb3JtLCBzb21lIGV4aXN0IGJlY2F1c2UgdGhlaXIgcHJpb3JpdHkgaXMgc2VlbiBhcyBsb3cgY29tcGFyZWQgdG8gdGhlIGRldmVsb3BtZW50IGVmZm9ydCB0aGV5IHdvdWxkIG5lZWQgYW5kIHNvbWUgb3RoZXIgeWV0IGFyZSBjb21waWxlci9ydW50aW1lIGJ1Z3MuCitPdmVyIHRpbWUsIHNvbWUgbGltaXRhdGlvbnMgb2YgQ2F0Y2gyIGVtZXJnZWQuIFNvbWUgb2YgdGhlc2UgYXJlIGR1ZQordG8gaW1wbGVtZW50YXRpb24gZGV0YWlscyB0aGF0IGNhbm5vdCBiZSBlYXNpbHkgY2hhbmdlZCwgc29tZSBvZiB0aGVzZQorYXJlIGR1ZSB0byBsYWNrIG9mIGRldmVsb3BtZW50IHJlc291cmNlcyBvbiBvdXIgcGFydCwgYW5kIHNvbWUgb2YgdGhlc2UKK2FyZSBkdWUgdG8gcGxhaW4gb2xkIDNyZCBwYXJ0eSBidWdzLgorCiAKICMjIEltcGxlbWVudGF0aW9uIGxpbWl0cwogIyMjIFNlY3Rpb25zIG5lc3RlZCBpbiBsb29wcwogCi1JZiB5b3UgYXJlIHVzaW5nIGBTRUNUSU9OYHMgaW5zaWRlIGxvb3BzLCB5b3UgaGF2ZSB0byBjcmVhdGUgdGhlbSB3aXRoIGRpZmZlcmVudCBuYW1lIHBlciBsb29wJ3MgaXRlcmF0aW9uLiBUaGUgcmVjb21tZW5kZWQgd2F5IHRvIGRvIHNvIGlzIHRvIGluY29ycG9yYXRlIHRoZSBsb29wJ3MgY291bnRlciBpbnRvIHNlY3Rpb24ncyBuYW1lLCBsaWtlIHNvCitJZiB5b3UgYXJlIHVzaW5nIGBTRUNUSU9OYHMgaW5zaWRlIGxvb3BzLCB5b3UgaGF2ZSB0byBjcmVhdGUgdGhlbSB3aXRoCitkaWZmZXJlbnQgbmFtZSBwZXIgbG9vcCdzIGl0ZXJhdGlvbi4gVGhlIHJlY29tbWVuZGVkIHdheSB0byBkbyBzbyBpcyB0bworaW5jb3Jwb3JhdGUgdGhlIGxvb3AncyBjb3VudGVyIGludG8gc2VjdGlvbidzIG5hbWUsIGxpa2Ugc286CisKIGBgYGNwcAogVEVTVF9DQVNFKCAiTG9vcGVkIHNlY3Rpb24iICkgewogICAgIGZvciAoY2hhciBpID0gJzAnOyBpIDwgJzUnOyArK2kpIHsKQEAgLTE3LDExICsyNCwzNCBAQAogfQogYGBgCiAKK29yIHdpdGggYSBgRFlOQU1JQ19TRUNUSU9OYCBtYWNybyAodGhhdCB3YXMgbWFkZSBmb3IgZXhhY3RseSB0aGlzIHB1cnBvc2UpOgorCitgYGBjcHAKK1RFU1RfQ0FTRSggIkxvb3BlZCBzZWN0aW9uIiApIHsKKyAgICBmb3IgKGNoYXIgaSA9ICcwJzsgaSA8ICc1JzsgKytpKSB7CisgICAgICAgIERZTkFNSUNfU0VDVElPTiggIkxvb3BlZCBzZWN0aW9uICIgPDwgaSkgeworICAgICAgICAgICAgU1VDQ0VFRCggIkV2ZXJ5dGhpbmcgaXMgT0siICk7CisgICAgICAgIH0KKyAgICB9Cit9CitgYGAKKworIyMjIFRlc3RzIG1pZ2h0IGJlIHJ1biBhZ2FpbiBpZiBsYXN0IHNlY3Rpb24gZmFpbHMKKworSWYgdGhlIGxhc3Qgc2VjdGlvbiBpbiBhIHRlc3QgZmFpbHMsIGl0IG1pZ2h0IGJlIHJ1biBhZ2Fpbi4gVGhpcyBpcyBiZWNhdXNlCitDYXRjaDIgZGlzY292ZXJzIGBTRUNUSU9OYHMgZHluYW1pY2FsbHksIGFzIHRoZXkgYXJlIGFib3V0IHRvIHJ1biwgYW5kCitpZiB0aGUgbGFzdCBzZWN0aW9uIGluIHRlc3QgY2FzZSBpcyBhYm9ydGVkIGR1cmluZyBleGVjdXRpb24gKGUuZy4gdmlhCit0aGUgYFJFUVVJUkVgIGZhbWlseSBvZiBtYWNyb3MpLCBDYXRjaDIgZG9lcyBub3Qga25vdyB0aGF0IHRoZXJlIGFyZSBubworbW9yZSBzZWN0aW9ucyBpbiB0aGF0IHRlc3QgY2FzZSBhbmQgbXVzdCBydW4gdGhlIHRlc3QgY2FzZSBhZ2Fpbi4KKworCiAjIyBGZWF0dXJlcwogVGhpcyBzZWN0aW9uIG91dGxpbmVzIHNvbWUgbWlzc2luZyBmZWF0dXJlcywgd2hhdCBpcyB0aGVpciBzdGF0dXMgYW5kIHRoZWlyIHBvc3NpYmxlIHdvcmthcm91bmRzLgogCiAjIyMgVGhyZWFkIHNhZmUgYXNzZXJ0aW9ucwotQmVjYXVzZSB0aHJlYWRpbmcgc3VwcG9ydCBpbiBzdGFuZGFyZCBDKys5OCBpcyBsaW1pdGVkICh3ZWxsLCBub24tZXhpc3RlbnQpLCBhc3NlcnRpb24gbWFjcm9zIGluIENhdGNoIGFyZSBub3QgdGhyZWFkIHNhZmUuIFRoaXMgZG9lcyBub3QgbWVhbiB0aGF0IHlvdSBjYW5ub3QgdXNlIHRocmVhZHMgaW5zaWRlIENhdGNoJ3MgdGVzdCwgYnV0IHRoYXQgb25seSBzaW5nbGUgdGhyZWFkIGNhbiBpbnRlcmFjdCB3aXRoIENhdGNoJ3MgYXNzZXJ0aW9ucyBhbmQgb3RoZXIgbWFjcm9zLgorQ2F0Y2gyJ3MgYXNzZXJ0aW9uIG1hY3JvcyBhcmUgbm90IHRocmVhZCBzYWZlLiBUaGlzIGRvZXMgbm90IG1lYW4gdGhhdAoreW91IGNhbm5vdCB1c2UgdGhyZWFkcyBpbnNpZGUgQ2F0Y2gncyB0ZXN0LCBidXQgdGhhdCBvbmx5IHNpbmdsZSB0aHJlYWQKK2NhbiBpbnRlcmFjdCB3aXRoIENhdGNoJ3MgYXNzZXJ0aW9ucyBhbmQgb3RoZXIgbWFjcm9zLgogCiBUaGlzIG1lYW5zIHRoYXQgdGhpcyBpcyBvawogYGBgY3BwCkBAIC00OSw4ICs3OSw4IEBACiAgICAgUkVRVUlSRShjbnQgPT0gMTYpOwogYGBgCiAKLQotX1RoaXMgbGltaXRhdGlvbiBpcyBoaWdobHkgdW5saWtlbHkgdG8gYmUgbGlmdGVkIGJlZm9yZSBDYXRjaCAyIGlzIHJlbGVhc2VkLl8KK0JlY2F1c2UgQysrMTEgcHJvdmlkZXMgdGhlIG5lY2Vzc2FyeSB0b29scyB0byBkbyB0aGlzLCB3ZSBhcmUgcGxhbm5pbmcKK3RvIHJlbW92ZSB0aGlzIGxpbWl0YXRpb24gaW4gdGhlIGZ1dHVyZS4KIAogIyMjIFByb2Nlc3MgaXNvbGF0aW9uIGluIGEgdGVzdAogQ2F0Y2ggZG9lcyBub3Qgc3VwcG9ydCBydW5uaW5nIHRlc3RzIGluIGlzb2xhdGVkIChmb3JrZWQpIHByb2Nlc3Nlcy4gV2hpbGUgdGhpcyBtaWdodCBpbiB0aGUgZnV0dXJlLCB0aGUgZmFjdCB0aGF0IFdpbmRvd3MgZG9lcyBub3Qgc3VwcG9ydCBmb3JraW5nIGFuZCBvbmx5IGFsbG93cyBmdWxsLW9uIHByb2Nlc3MgY3JlYXRpb24gYW5kIHRoZSBkZXNpcmUgdG8ga2VlcCBjb2RlIGFzIHNpbWlsYXIgYXMgcG9zc2libGUgYWNyb3NzIHBsYXRmb3JtcywgbWVhbiB0aGF0IHRoaXMgaXMgbGlrZWx5IHRvIHRha2Ugc2lnbmlmaWNhbnQgZGV2ZWxvcG1lbnQgdGltZSwgdGhhdCBpcyBub3QgY3VycmVudGx5IGF2YWlsYWJsZS4KQEAgLTk2LDYgKzEyNiwxNCBAQAogICAiIlwiID09ICIiXCIKIGBgYAogCisjIyMgVmlzdWFsIFN0dWRpbyAyMDE1IC0tIEFsaWdubWVudCBjb21waWxhdGlvbiBlcnJvciAoQzI3MTgpCisKK1ZTIDIwMTUgaGFzIGEga25vd24gYnVnLCB3aGVyZSBgZGVjbHZhbDxUPmAgY2FuIGNhdXNlIGNvbXBpbGF0aW9uIGVycm9yCitpZiBgVGAgaGFzIGFsaWdubWVudCByZXF1aXJlbWVudHMgdGhhdCBpdCBjYW5ub3QgbWVldC4KKworCitBIHdvcmthcm91bmQgaXMgdG8gZXhwbGljaXRseSBzcGVjaWFsaXplIGBDYXRjaDo6aXNfcmFuZ2VgIGZvciBnaXZlbgordHlwZSAodGhpcyBhdm9pZHMgY29kZSBwYXRoIHRoYXQgdXNlcyBgZGVjbHZhbDxUPmAgaW4gYSBTRklOQUUgY29udGV4dCkuCiAKIAogIyMjIFZpc3VhbCBTdHVkaW8gMjAxNSAtLSBXcm9uZyBsaW5lIG51bWJlciByZXBvcnRlZCBpbiBkZWJ1ZyBtb2RlCkBAIC0xMjcsMyArMTY1LDE0IEBACiBUaGlzIGlzIGEgYnVnIGluIGBsaWJzdGRjKystNC44YCwgd2hlcmUgYWxsIG1hdGNoaW5nIG1ldGhvZHMgZnJvbSBgPHJlZ2V4PmAgcmV0dXJuIGZhbHNlLiBTaW5jZSBgTWF0Y2hlc2AgdXNlcyBgPHJlZ2V4PmAgaW50ZXJuYWxseSwgaWYgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50YXRpb24gZG9lcyBub3Qgd29yaywgaXQgZG9lc24ndCB3b3JrIGVpdGhlci4KIAogV29ya2Fyb3VuZDogVXNlIG5ld2VyIHZlcnNpb24gb2YgYGxpYnN0ZGMrK2AuCisKKworIyMjIGxpYnN0ZGMrKywgYF9HTElCQ1hYX0RFQlVHYCBtYWNybyBhbmQgcmFuZG9tIG9yZGVyaW5nIG9mIHRlc3RzCisKK1J1bm5pbmcgYSBDYXRjaDIgYmluYXJ5IGNvbXBpbGVkIGFnYWluc3QgbGlic3RkYysrIHdpdGggYF9HTElCQ1hYX0RFQlVHYAorbWFjcm8gZGVmaW5lZCB3aXRoIGAtLW9yZGVyIHJhbmRgIHdpbGwgY2F1c2UgYSBkZWJ1ZyBjaGVjayB0byB0cmlnZ2VyIGFuZAorYWJvcnQgdGhlIHJ1biBkdWUgdG8gc2VsZi1hc3NpZ25tZW50LgorW1RoaXMgaXMgYSBrbm93biBidWcgaW5zaWRlIGxpYnN0ZGMrK10oaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjI5MTUzMjUvYXZvaWRpbmctc2VsZi1hc3NpZ25tZW50LWluLXN0ZHNodWZmbGUvMjM2OTEzMjIpCisKK1dvcmthcm91bmQ6IERvbid0IHVzZSBgLS1vcmRlciByYW5kYCB3aGVuIGNvbXBpbGluZyBhZ2FpbnN0IGRlYnVnLWVuYWJsZWQKK2xpYnN0ZGMrKy4KZGlmZiAtLWdpdCBhL2RvY3MvbGlzdC1vZi1leGFtcGxlcy5tZCBiL2RvY3MvbGlzdC1vZi1leGFtcGxlcy5tZAppbmRleCA2NTE3ZDVkLi42NzdkZWMxIDEwMDY0NAotLS0gYS9kb2NzL2xpc3Qtb2YtZXhhbXBsZXMubWQKKysrIGIvZG9jcy9saXN0LW9mLWV4YW1wbGVzLm1kCkBAIC0xLDE4ICsxLDMyIEBACiA8YSBpZD0idG9wIj48L2E+CiAjIExpc3Qgb2YgZXhhbXBsZXMKIAorIyMgQWxyZWFkeSBhdmFpbGFibGUKKworLSBDYXRjaCBtYWluOiBbQ2F0Y2gtcHJvdmlkZWQgbWFpbl0oLi4vZXhhbXBsZXMvMDAwLUNhdGNoTWFpbi5jcHApCiAtIFRlc3QgQ2FzZTogW1NpbmdsZS1maWxlXSguLi9leGFtcGxlcy8wMTAtVGVzdENhc2UuY3BwKQotLSBUZXN0IENhc2U6IFtNdWx0aXBsZS1maWxlIDFdKC4uL2V4YW1wbGVzLzAyMC1UZXN0Q2FzZS0xLmNwcCksIFsyXSguLi9leGFtcGxlcy8wMjAtVGVzdENhc2UtMS5jcHApCistIFRlc3QgQ2FzZTogW011bHRpcGxlLWZpbGUgMV0oLi4vZXhhbXBsZXMvMDIwLVRlc3RDYXNlLTEuY3BwKSwgWzJdKC4uL2V4YW1wbGVzLzAyMC1UZXN0Q2FzZS0yLmNwcCkKIC0gQXNzZXJ0aW9uOiBbUkVRVUlSRSwgQ0hFQ0tdKC4uL2V4YW1wbGVzLzAzMC1Bc24tUmVxdWlyZS1DaGVjay5jcHApCistIEZpeHR1cmU6IFtTZWN0aW9uc10oLi4vZXhhbXBsZXMvMTAwLUZpeC1TZWN0aW9uLmNwcCkKKy0gRml4dHVyZTogW0NsYXNzLWJhc2VkIGZpeHR1cmVzXSguLi9leGFtcGxlcy8xMTAtRml4LUNsYXNzRml4dHVyZS5jcHApCistIEJERDogW1NDRU5BUklPLCBHSVZFTiwgV0hFTiwgVEhFTl0oLi4vZXhhbXBsZXMvMTIwLUJkZC1TY2VuYXJpb0dpdmVuV2hlblRoZW4uY3BwKQorLSBSZXBvcnQ6IFtDYXRjaC1wcm92aWRlZCBtYWluXSguLi9leGFtcGxlcy8yMDAtUnB0LUNhdGNoTWFpbi5jcHApCistIFJlcG9ydDogW1RlYW1DaXR5IHJlcG9ydGVyXSguLi9leGFtcGxlcy8yMDctUnB0LVRlYW1DaXR5UmVwb3J0ZXIuY3BwKQorLSBMaXN0ZW5lcjogW0xpc3RlbmVyc10oLi4vZXhhbXBsZXMvMjEwLUV2dC1FdmVudExpc3RlbmVycy5jcHApCistIENvbmZpZ3VyYXRpb246IFtQcm92aWRlIHlvdXIgb3duIG91dHB1dCBzdHJlYW1zXSguLi9leGFtcGxlcy8yMzEtQ2ZnLU91dHB1dFN0cmVhbXMuY3BwKQorLSBHZW5lcmF0b3JzOiBbQ3JlYXRlIHlvdXIgb3duIGdlbmVyYXRvcl0oLi4vZXhhbXBsZXMvMzAwLUdlbi1Pd25HZW5lcmF0b3IuY3BwKQorLSBHZW5lcmF0b3JzOiBbVXNlIG1hcCB0byBjb252ZXJ0IHR5cGVzIGluIEdFTkVSQVRFIGV4cHJlc3Npb25dKC4uL2V4YW1wbGVzLzMwMS1HZW4tTWFwVHlwZUNvbnZlcnNpb24uY3BwKQorLSBHZW5lcmF0b3JzOiBbVXNlIHZhcmlhYmxlcyBpbiBnZW5lcmF0b3IgZXhwcmVzc2lvbnNdKC4uL2V4YW1wbGVzLzMxMC1HZW4tVmFyaWFibGVzSW5HZW5lcmF0b3JzLmNwcCkKKworCisjIyBQbGFubmVkCisKIC0gQXNzZXJ0aW9uOiBbUkVRVUlSRV9USEFUIGFuZCBNYXRjaGVyc10oLi4vZXhhbXBsZXMvMDQwLUFzbi1SZXF1aXJlVGhhdC5jcHApCiAtIEFzc2VydGlvbjogW1JFUVVJUkVfTk9fVEhST1ddKC4uL2V4YW1wbGVzLzA1MC1Bc24tUmVxdWlyZU5vVGhyb3cuY3BwKQogLSBBc3NlcnRpb246IFtSRVFVSVJFX1RIUk9XU10oLi4vZXhhbXBsZXMvMDUwLUFzbi1SZXF1aXJlVGhyb3dzLmNwcCkKIC0gQXNzZXJ0aW9uOiBbUkVRVUlSRV9USFJPV1NfQVNdKC4uL2V4YW1wbGVzLzA3MC1Bc24tUmVxdWlyZVRocm93c0FzLmNwcCkKIC0gQXNzZXJ0aW9uOiBbUkVRVUlSRV9USFJPV1NfV0lUSF0oLi4vZXhhbXBsZXMvMDgwLUFzbi1SZXF1aXJlVGhyb3dzV2l0aC5jcHApCiAtIEFzc2VydGlvbjogW1JFUVVJUkVfVEhST1dTX01BVENIRVNdKC4uL2V4YW1wbGVzLzA5MC1Bc24tUmVxdWlyZVRocm93c01hdGNoZXMuY3BwKQotLSBGaXh0dXJlOiBbU2VjdGlvbnNdKC4uL2V4YW1wbGVzLzEwMC1GaXgtU2VjdGlvbi5jcHApCi0tIEZpeHR1cmU6IFtDbGFzcy1iYXNlZCBmaXh0dXJlc10oLi4vZXhhbXBsZXMvMTEwLUZpeC1DbGFzc0ZpeHR1cmUuY3BwKQotLSBCREQ6IFtTQ0VOQVJJTywgR0lWRU4sIFdIRU4sIFRIRU5dKC4uL2V4YW1wbGVzLzEyMC1CZGQtU2NlbmFyaW9HaXZlbldoZW5UaGVuLmNwcCkKIC0gRmxvYXRpbmcgcG9pbnQ6IFtBcHByb3ggLSBDb21wYXJpc29uc10oLi4vZXhhbXBsZXMvMTMwLUZwdC1BcHByb3guY3BwKQogLSBMb2dnaW5nOiBbQ0FQVFVSRSAtIENhcHR1cmUgZXhwcmVzc2lvbl0oLi4vZXhhbXBsZXMvMTQwLUxvZy1DYXB0dXJlLmNwcCkKIC0gTG9nZ2luZzogW0lORk8gLSBQcm92aWRlIGluZm9ybWF0aW9uIHdpdGggZmFpbHVyZV0oLi4vZXhhbXBsZXMvMTUwLUxvZy1JbmZvLmNwcCkKQEAgLTIwLDggKzM0LDEwIEBACiAtIExvZ2dpbmc6IFtGQUlMLCBGQUlMX0NIRUNLIC0gSXNzdWUgbWVzc2FnZSBhbmQgZm9yY2UgZmFpbHVyZS9jb250aW51ZV0oLi4vZXhhbXBsZXMvMTcwLUxvZy1GYWlsLmNwcCkKIC0gTG9nZ2luZzogW1NVQ0NFRUQgLSBJc3N1ZSBtZXNzYWdlIGFuZCBjb250aW51ZV0oLi4vZXhhbXBsZXMvMTgwLUxvZy1TdWNjZWVkLmNwcCkKIC0gUmVwb3J0OiBbVXNlci1kZWZpbmVkIHR5cGVdKC4uL2V4YW1wbGVzLzE5MC1ScHQtUmVwb3J0VXNlckRlZmluZWRUeXBlLmNwcCkKLS0gUmVwb3J0OiBbUmVwb3J0ZXJdKC4uL2V4YW1wbGVzLzIwMC1ScHQtVXNlckRlZmluZWRSZXBvcnRlci5jcHApCi0tIExpc3RlbmVyOiBbTGlzdGVuZXJzXSguLi9leGFtcGxlcy8yMTAtRXZ0LUV2ZW50TGlzdGVuZXJzLmNwcCkKKy0gUmVwb3J0OiBbVXNlci1kZWZpbmVkIHJlcG9ydGVyXSguLi9leGFtcGxlcy8yMDItUnB0LVVzZXJEZWZpbmVkUmVwb3J0ZXIuY3BwKQorLSBSZXBvcnQ6IFtBdXRvbWFrZSByZXBvcnRlcl0oLi4vZXhhbXBsZXMvMjA1LVJwdC1BdXRvbWFrZVJlcG9ydGVyLmNwcCkKKy0gUmVwb3J0OiBbVEFQIHJlcG9ydGVyXSguLi9leGFtcGxlcy8yMDYtUnB0LVRhcFJlcG9ydGVyLmNwcCkKKy0gUmVwb3J0OiBbTXVsdGlwbGUgcmVwb3J0ZXJdKC4uL2V4YW1wbGVzLzIwOC1ScHQtTXVsdGlwbGVSZXBvcnRlcnMuY3BwKQogLSBDb25maWd1cmF0aW9uOiBbUHJvdmlkZSB5b3VyIG93biBtYWluKCldKC4uL2V4YW1wbGVzLzIyMC1DZmctT3duTWFpbi5jcHApCiAtIENvbmZpZ3VyYXRpb246IFtDb21waWxlLXRpbWUgY29uZmlndXJhdGlvbl0oLi4vZXhhbXBsZXMvMjMwLUNmZy1Db21waWxlVGltZUNvbmZpZ3VyYXRpb24uY3BwKQogLSBDb25maWd1cmF0aW9uOiBbUnVuLXRpbWUgY29uZmlndXJhdGlvbl0oLi4vZXhhbXBsZXMvMjQwLUNmZy1SdW5UaW1lQ29uZmlndXJhdGlvbi5jcHApCmRpZmYgLS1naXQgYS9kb2NzL2xvZ2dpbmcubWQgYi9kb2NzL2xvZ2dpbmcubWQKaW5kZXggN2FlNTRhYS4uZTg5NmE1NyAxMDA2NDQKLS0tIGEvZG9jcy9sb2dnaW5nLm1kCisrKyBiL2RvY3MvbG9nZ2luZy5tZApAQCAtMSw3ICsxLDcgQEAKIDxhIGlkPSJ0b3AiPjwvYT4KICMgTG9nZ2luZyBtYWNyb3MKIAotQWRkaXRpb25hbCBtZXNzYWdlcyBjYW4gYmUgbG9nZ2VkIGR1cmluZyBhIHRlc3QgY2FzZS4gTm90ZSB0aGF0IHRoZSBtZXNzYWdlcyBhcmUgc2NvcGVkIGFuZCB0aHVzIHdpbGwgbm90IGJlIHJlcG9ydGVkIGlmIGZhaWx1cmUgb2NjdXJzIGluIHNjb3BlIHByZWNlZGluZyB0aGUgbWVzc2FnZSBkZWNsYXJhdGlvbi4gQW4gZXhhbXBsZToKK0FkZGl0aW9uYWwgbWVzc2FnZXMgY2FuIGJlIGxvZ2dlZCBkdXJpbmcgYSB0ZXN0IGNhc2UuIE5vdGUgdGhhdCB0aGUgbWVzc2FnZXMgbG9nZ2VkIHdpdGggYElORk9gIGFyZSBzY29wZWQgYW5kIHRodXMgd2lsbCBub3QgYmUgcmVwb3J0ZWQgaWYgZmFpbHVyZSBvY2N1cnMgaW4gc2NvcGUgcHJlY2VkaW5nIHRoZSBtZXNzYWdlIGRlY2xhcmF0aW9uLiBBbiBleGFtcGxlOgogCiBgYGBjcHAKIFRFU1RfQ0FTRSgiRm9vIikgewpAQCAtMjgsNiArMjgsNjAgQEAKIGBgYAogV2hlbiB0aGUgbGFzdCBgQ0hFQ0tgIGZhaWxzIGluIHRoZSAiQmFyIiB0ZXN0IGNhc2UsIHRoZW4gb25seSBvbmUgbWVzc2FnZSB3aWxsIGJlIHByaW50ZWQ6IGBUZXN0IGNhc2Ugc3RhcnRgLgogCisjIyBMb2dnaW5nIHdpdGhvdXQgbG9jYWwgc2NvcGUKKworYFVOU0NPUEVEX0lORk9gIGlzIHNpbWlsYXIgdG8gYElORk9gIHdpdGggdHdvIGtleSBkaWZmZXJlbmNlczoKKworLSBMaWZldGltZSBvZiBhbiB1bnNjb3BlZCBtZXNzYWdlIGlzIG5vdCB0aWVkIHRvIGl0cyBvd24gc2NvcGUuCistIEFuIHVuc2NvcGVkIG1lc3NhZ2UgY2FuIGJlIHJlcG9ydGVkIGJ5IHRoZSBmaXJzdCBmb2xsb3dpbmcgYXNzZXJ0aW9uIG9ubHksIHJlZ2FyZGxlc3Mgb2YgdGhlIHJlc3VsdCBvZiB0aGF0IGFzc2VydGlvbi4KKworSW4gb3RoZXIgd29yZHMsIGxpZmV0aW1lIG9mIGBVTlNDT1BFRF9JTkZPYCBpcyBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgYXNzZXJ0aW9uIChvciBieSB0aGUgZW5kIG9mIHRlc3QgY2FzZS9zZWN0aW9uLCB3aGljaGV2ZXIgY29tZXMgZmlyc3QpIHdoZXJlYXMgbGlmZXRpbWUgb2YgYElORk9gIGlzIGxpbWl0ZWQgYnkgaXRzIG93biBzY29wZS4KKworVGhlc2UgZGlmZmVyZW5jZXMgbWFrZSB0aGlzIG1hY3JvIHVzZWZ1bCBmb3IgcmVwb3J0aW5nIGluZm9ybWF0aW9uIGZyb20gaGVscGVyIGZ1bmN0aW9ucyBvciBpbm5lciBzY29wZXMuIEFuIGV4YW1wbGU6CisKK2BgYGNwcAordm9pZCBwcmludF9zb21lX2luZm8oKSB7CisgICAgVU5TQ09QRURfSU5GTygiSW5mbyBmcm9tIGhlbHBlciIpOworfQorCitURVNUX0NBU0UoIkJheiIpIHsKKyAgICBwcmludF9zb21lX2luZm8oKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7ICsraSkgeworICAgICAgICBVTlNDT1BFRF9JTkZPKCJUaGUgbnVtYmVyIGlzICIgPDwgaSk7CisgICAgfQorICAgIENIRUNLKGZhbHNlKTsKK30KKworVEVTVF9DQVNFKCJRdXgiKSB7CisgICAgSU5GTygiRmlyc3QgaW5mbyIpOworICAgIFVOU0NPUEVEX0lORk8oIkZpcnN0IHVuc2NvcGVkIGluZm8iKTsKKyAgICBDSEVDSyhmYWxzZSk7CisKKyAgICBJTkZPKCJTZWNvbmQgaW5mbyIpOworICAgIFVOU0NPUEVEX0lORk8oIlNlY29uZCB1bnNjb3BlZCBpbmZvIik7CisgICAgQ0hFQ0soZmFsc2UpOworfQorYGBgCisKKyJCYXoiIHRlc3QgY2FzZSBwcmludHM6CitgYGAKK0luZm8gZnJvbSBoZWxwZXIKK1RoZSBudW1iZXIgaXMgMAorVGhlIG51bWJlciBpcyAxCitgYGAKKworV2l0aCAiUXV4IiB0ZXN0IGNhc2UsIHR3byBtZXNzYWdlcyB3aWxsIGJlIHByaW50ZWQgd2hlbiB0aGUgZmlyc3QgYENIRUNLYCBmYWlsczoKK2BgYAorRmlyc3QgaW5mbworRmlyc3QgdW5zY29wZWQgaW5mbworYGBgCisKKyJGaXJzdCB1bnNjb3BlZCBpbmZvIiBtZXNzYWdlIHdpbGwgYmUgY2xlYXJlZCBhZnRlciB0aGUgZmlyc3QgYENIRUNLYCwgd2hpbGUgIkZpcnN0IGluZm8iIG1lc3NhZ2Ugd2lsbCBwZXJzaXN0IHVudGlsIHRoZSBlbmQgb2YgdGhlIHRlc3QgY2FzZS4gVGhlcmVmb3JlLCB3aGVuIHRoZSBzZWNvbmQgYENIRUNLYCBmYWlscywgdGhyZWUgbWVzc2FnZXMgd2lsbCBiZSBwcmludGVkOgorYGBgCitGaXJzdCBpbmZvCitTZWNvbmQgaW5mbworU2Vjb25kIHVuc2NvcGVkIGluZm8KK2BgYAogCiAjIyBTdHJlYW1pbmcgbWFjcm9zCiAKQEAgLTQzLDcgKzk3LDE0IEBACiAKICoqSU5GTygqKiBfbWVzc2FnZSBleHByZXNzaW9uXyAqKikqKgogCi1UaGUgbWVzc2FnZSBpcyBsb2dnZWQgdG8gYSBidWZmZXIsIGJ1dCBvbmx5IHJlcG9ydGVkIHdpdGggdGhlIG5leHQgYXNzZXJ0aW9uIHRoYXQgaXMgbG9nZ2VkLiBUaGlzIGFsbG93cyB5b3UgdG8gbG9nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24gaW4gY2FzZSBvZiBmYWlsdXJlcyB3aGljaCBpcyBub3Qgc2hvd24gZHVyaW5nIGEgc3VjY2Vzc2Z1bCB0ZXN0IHJ1biAoZm9yIHRoZSBjb25zb2xlIHJlcG9ydGVyLCB3aXRob3V0IC1zKS4gTWVzc2FnZXMgYXJlIHJlbW92ZWQgZnJvbSB0aGUgYnVmZmVyIGF0IHRoZSBlbmQgb2YgdGhlaXIgc2NvcGUsIHNvIG1heSBiZSB1c2VkLCBmb3IgZXhhbXBsZSwgaW4gbG9vcHMuCitUaGUgbWVzc2FnZSBpcyBsb2dnZWQgdG8gYSBidWZmZXIsIGJ1dCBvbmx5IHJlcG9ydGVkIHdpdGggbmV4dCBhc3NlcnRpb25zIHRoYXQgYXJlIGxvZ2dlZC4gVGhpcyBhbGxvd3MgeW91IHRvIGxvZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uIGluIGNhc2Ugb2YgZmFpbHVyZXMgd2hpY2ggaXMgbm90IHNob3duIGR1cmluZyBhIHN1Y2Nlc3NmdWwgdGVzdCBydW4gKGZvciB0aGUgY29uc29sZSByZXBvcnRlciwgd2l0aG91dCAtcykuIE1lc3NhZ2VzIGFyZSByZW1vdmVkIGZyb20gdGhlIGJ1ZmZlciBhdCB0aGUgZW5kIG9mIHRoZWlyIHNjb3BlLCBzbyBtYXkgYmUgdXNlZCwgZm9yIGV4YW1wbGUsIGluIGxvb3BzLgorCitfTm90ZSB0aGF0IGluIENhdGNoMiAyLngueCBgSU5GT2AgY2FuIGJlIHVzZWQgd2l0aG91dCBhIHRyYWlsaW5nIHNlbWljb2xvbiBhcyB0aGVyZSBpcyBhIHRyYWlsaW5nIHNlbWljb2xvbiBpbnNpZGUgbWFjcm8uCitUaGlzIHNlbWljb2xvbiB3aWxsIGJlIHJlbW92ZWQgd2l0aCBuZXh0IG1ham9yIHZlcnNpb24uIEl0IGlzIGhpZ2hseSBhZHZpc2VkIHRvIHVzZSBhIHRyYWlsaW5nIHNlbWljb2xvbiBhZnRlciBgSU5GT2AgbWFjcm8uXworCisqKlVOU0NPUEVEX0lORk8oKiogX21lc3NhZ2UgZXhwcmVzc2lvbl8gKiopKioKKworU2ltaWxhciB0byBgSU5GT2AsIGJ1dCBtZXNzYWdlcyBhcmUgbm90IGxpbWl0ZWQgdG8gdGhlaXIgb3duIHNjb3BlOiBUaGV5IGFyZSByZW1vdmVkIGZyb20gdGhlIGJ1ZmZlciBhZnRlciBlYWNoIGFzc2VydGlvbiwgc2VjdGlvbiBvciB0ZXN0IGNhc2UsIHdoaWNoZXZlciBjb21lcyBmaXJzdC4KIAogKipXQVJOKCoqIF9tZXNzYWdlIGV4cHJlc3Npb25fICoqKSoqCiAKQEAgLTU3LDI2ICsxMTgsMzcgQEAKIAogQVMgYEZBSUxgLCBidXQgZG9lcyBub3QgYWJvcnQgdGhlIHRlc3QKIAotIyMgUXVpY2tseSBjYXB0dXJlIGEgdmFyaWFibGUgdmFsdWUKKyMjIFF1aWNrbHkgY2FwdHVyZSB2YWx1ZSBvZiB2YXJpYWJsZXMgb3IgZXhwcmVzc2lvbnMKIAotKipDQVBUVVJFKCoqIF9leHByZXNzaW9uXyAqKikqKgorKipDQVBUVVJFKCoqIF9leHByZXNzaW9uMV8sIF9leHByZXNzaW9uMl8sIC4uLiAqKikqKgogCi1Tb21ldGltZXMgeW91IGp1c3Qgd2FudCB0byBsb2cgdGhlIG5hbWUgYW5kIHZhbHVlIG9mIGEgdmFyaWFibGUuIFdoaWxlIHlvdSBjYW4gZWFzaWx5IGRvIHRoaXMgd2l0aCB0aGUgSU5GTyBtYWNybywgYWJvdmUsIGFzIGEgY29udmVuaWVuY2UgdGhlIENBUFRVUkUgbWFjcm8gaGFuZGxlcyB0aGUgc3RyaW5naXNpbmcgb2YgdGhlIHZhcmlhYmxlIG5hbWUgZm9yIHlvdSAoYWN0dWFsbHkgaXQgd29ya3Mgd2l0aCBhbnkgZXhwcmVzc2lvbiwgbm90IGp1c3QgdmFyaWFibGVzKS4KK1NvbWV0aW1lcyB5b3UganVzdCB3YW50IHRvIGxvZyBhIHZhbHVlIG9mIHZhcmlhYmxlLCBvciBleHByZXNzaW9uLiBGb3IKK2NvbnZlbmllbmNlLCB3ZSBwcm92aWRlIHRoZSBgQ0FQVFVSRWAgbWFjcm8sIHRoYXQgY2FuIHRha2UgYSB2YXJpYWJsZSwKK29yIGFuIGV4cHJlc3Npb24sIGFuZCBwcmludHMgb3V0IHRoYXQgdmFyaWFibGUvZXhwcmVzc2lvbiBhbmQgaXRzIHZhbHVlCithdCB0aGUgdGltZSBvZiBjYXB0dXJlLgogCi1FLmcuCi1gYGBjKysKLUNBUFRVUkUoIHRoZUFuc3dlciApOworZS5nLiBgQ0FQVFVSRSggdGhlQW5zd2VyICk7YCB3aWxsIGxvZyBtZXNzYWdlICJ0aGVBbnN3ZXIgOj0gNDIiLCB3aGlsZQorYGBgY3BwCitpbnQgYSA9IDEsIGIgPSAyLCBjID0gMzsKK0NBUFRVUkUoIGEsIGIsIGMsIGEgKyBiLCBjID4gYiwgYSA9PSAxKTsKK2BgYAord2lsbCBsb2cgYSB0b3RhbCBvZiA2IG1lc3NhZ2VzOgorYGBgCithIDo9IDEKK2IgOj0gMgorYyA6PSAzCithICsgYiA6PSAzCitjID4gYiA6PSB0cnVlCithID09IDEgOj0gdHJ1ZQogYGBgCiAKLVRoaXMgd291bGQgbG9nIHNvbWV0aGluZyBsaWtlOgorWW91IGNhbiBhbHNvIGNhcHR1cmUgZXhwcmVzc2lvbnMgdGhhdCB1c2UgY29tbWFzIGluc2lkZSBwYXJlbnRoZXNlcworKGUuZy4gZnVuY3Rpb24gY2FsbHMpLCBicmFja2V0cywgb3IgYnJhY2VzIChlLmcuIGluaXRpYWxpemVycykuIFRvCitwcm9wZXJseSBjYXB0dXJlIGV4cHJlc3Npb24gdGhhdCBjb250YWlucyB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGxpc3QKKyhpbiBvdGhlciB3b3JkcywgaXQgY29udGFpbnMgY29tbWFzIGJldHdlZW4gYW5nbGUgYnJhY2tldHMpLCB5b3UgbmVlZAordG8gZW5jbG9zZSB0aGUgZXhwcmVzc2lvbiBpbnNpZGUgcGFyZW50aGVzZXM6CitgQ0FQVFVSRSggKHN0ZDo6cGFpcjxpbnQsIGludD57MSwgMn0pICk7YAogCi08cHJlPiJ0aGVBbnN3ZXIgOj0gNDIiPC9wcmU+Ci0KLSMjIERlcHJlY2F0ZWQgbWFjcm9zCi0KLSoqU0NPUEVEX0lORk8gYW5kIFNDT1BFRF9DQVBUVVJFKioKLQotVGhlc2UgbWFjcm9zIGFyZSBub3cgZGVwcmVjYXRlZCBhbmQgYXJlIGp1c3QgYWxpYXNlcyBmb3IgSU5GTyBhbmQgQ0FQVFVSRSAod2hpY2ggd2VyZSBub3QgcHJldmlvdXNseSBzY29wZWQpLgogCiAtLS0KIApkaWZmIC0tZ2l0IGEvZG9jcy9tYXRjaGVycy5tZCBiL2RvY3MvbWF0Y2hlcnMubWQKaW5kZXggZmI5NWNlMi4uYWRiZDRjZSAxMDA2NDQKLS0tIGEvZG9jcy9tYXRjaGVycy5tZAorKysgYi9kb2NzL21hdGNoZXJzLm1kCkBAIC01Myw2ICs1MywyNSBAQAogRG8gbm90ZSB0aGF0IFVMUC1iYXNlZCBjaGVja3Mgb25seSBtYWtlIHNlbnNlIHdoZW4gYm90aCBjb21wYXJlZCBudW1iZXJzIGFyZSBvZiB0aGUgc2FtZSB0eXBlIGFuZCBgV2l0aGluVUxQYCB3aWxsIHVzZSB0eXBlIG9mIGl0cyBhcmd1bWVudCBhcyB0aGUgdGFyZ2V0IHR5cGUuIFRoaXMgbWVhbnMgdGhhdCBgV2l0aGluVUxQKDEuZiwgMSlgIHdpbGwgZXhwZWN0IHRvIGNvbXBhcmUgYGZsb2F0YHMsIGJ1dCBgV2l0aGluVUxQKDEuLCAxKWAgd2lsbCBleHBlY3QgdG8gY29tcGFyZSBgZG91YmxlYHMuCiAKIAorIyMjIEdlbmVyaWMgbWF0Y2hlcnMKK0NhdGNoIGFsc28gYWltcyB0byBwcm92aWRlIGEgc2V0IG9mIGdlbmVyaWMgbWF0Y2hlcnMuIEN1cnJlbnRseSB0aGlzIHNldAorY29udGFpbnMgb25seSBhIG1hdGNoZXIgdGhhdCB0YWtlcyBhcmJpdHJhcnkgY2FsbGFibGUgcHJlZGljYXRlIGFuZCBhcHBsaWVzCitpdCBvbnRvIHRoZSBwcm92aWRlZCBvYmplY3QuCisKK0JlY2F1c2Ugb2YgdHlwZSBpbmZlcmVuY2UgbGltaXRhdGlvbnMsIHRoZSBhcmd1bWVudCB0eXBlIG9mIHRoZSBwcmVkaWNhdGUKK2hhcyB0byBiZSBwcm92aWRlZCBleHBsaWNpdGx5LiBFeGFtcGxlOgorYGBgY3BwCitSRVFVSVJFX1RIQVQoIkhlbGxvIG9sbGVIIiwKKyAgICAgICAgICAgICBQcmVkaWNhdGU8c3RkOjpzdHJpbmc+KAorICAgICAgICAgICAgICAgICBbXSAoc3RkOjpzdHJpbmcgY29uc3QmIHN0cikgLT4gYm9vbCB7IHJldHVybiBzdHIuZnJvbnQoKSA9PSBzdHIuYmFjaygpOyB9LAorICAgICAgICAgICAgICAgICAiRmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVyIHNob3VsZCBiZSBlcXVhbCIpCispOworYGBgCisKK1RoZSBzZWNvbmQgYXJndW1lbnQgaXMgYW4gb3B0aW9uYWwgZGVzY3JpcHRpb24gb2YgdGhlIHByZWRpY2F0ZSwgYW5kIGlzCit1c2VkIG9ubHkgZHVyaW5nIHJlcG9ydGluZyBvZiB0aGUgcmVzdWx0LgorCisKICMjIEN1c3RvbSBtYXRjaGVycwogSXQncyBlYXN5IHRvIHByb3ZpZGUgeW91ciBvd24gbWF0Y2hlcnMgdG8gZXh0ZW5kIENhdGNoIG9yIGp1c3QgdG8gd29yayB3aXRoIHlvdXIgb3duIHR5cGVzLgogCmRpZmYgLS1naXQgYS9kb2NzL29wZW5zb3VyY2UtdXNlcnMubWQgYi9kb2NzL29wZW5zb3VyY2UtdXNlcnMubWQKaW5kZXggNDM1OTZjYy4uZDcxYjQyNSAxMDA2NDQKLS0tIGEvZG9jcy9vcGVuc291cmNlLXVzZXJzLm1kCisrKyBiL2RvY3Mvb3BlbnNvdXJjZS11c2Vycy5tZApAQCAtMSw0MiArMSw0NSBAQAogPGEgaWQ9InRvcCI+PC9hPgogIyBPcGVuIFNvdXJjZSBwcm9qZWN0cyB1c2luZyBDYXRjaAogCi1DYXRjaCBpcyBncmVhdCBmb3Igb3BlbiBzb3VyY2UuIFdpdGggaXRzIFtsaWJlcmFsIGxpY2Vuc2VdKC4uL0xJQ0VOU0UudHh0KSBhbmQgc2luZ2xlLWhlYWRlciwgZGVwZW5kZW5jeS1mcmVlLCBkaXN0cmlidXRpb24gCitDYXRjaCBpcyBncmVhdCBmb3Igb3BlbiBzb3VyY2UuIFdpdGggaXRzIFtsaWJlcmFsIGxpY2Vuc2VdKC4uL0xJQ0VOU0UudHh0KSBhbmQgc2luZ2xlLWhlYWRlciwgZGVwZW5kZW5jeS1mcmVlLCBkaXN0cmlidXRpb24KIGl0J3MgZWFzeSB0byBqdXN0IGRyb3AgdGhlIGhlYWRlciBpbnRvIHlvdXIgcHJvamVjdCBhbmQgc3RhcnQgd3JpdGluZyB0ZXN0cyAtIHdoYXQncyBub3QgdG8gbGlrZT8KIAogQXMgYSByZXN1bHQgQ2F0Y2ggaXMgbm93IGJlaW5nIHVzZWQgaW4gbWFueSBPcGVuIFNvdXJjZSBwcm9qZWN0cywgaW5jbHVkaW5nIHNvbWUgcXVpdGUgd2VsbCBrbm93biBvbmVzLgogVGhpcyBwYWdlIGlzIGFuIGF0dGVtcHQgdG8gdHJhY2sgdGhvc2UgcHJvamVjdHMuIE9idmlvdXNseSBpdCBjYW4gbmV2ZXIgYmUgY29tcGxldGUuCiBUaGlzIGVmZm9ydCBsYXJnZWx5IHJlbGllcyBvbiB0aGUgbWFpbnRhaW5lcnMgb2YgdGhlIHByb2plY3RzIHRoZW1zZWx2ZXMgdXBkYXRpbmcgdGhpcyBwYWdlIGFuZCBzdWJtaXR0aW5nIGEgUFIKLShvciwgaWYgeW91IHByZWZlciBjb250YWN0IG9uZSBvZiB0aGUgbWFpbnRhaW5lcnMgb2YgQ2F0Y2ggZGlyZWN0bHksIHVzZSB0aGUgCisob3IsIGlmIHlvdSBwcmVmZXIgY29udGFjdCBvbmUgb2YgdGhlIG1haW50YWluZXJzIG9mIENhdGNoIGRpcmVjdGx5LCB1c2UgdGhlCiBbZm9ydW1zXShodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2ZvcnVtLz9mcm9tZ3JvdXBzIyFmb3J1bS9jYXRjaC1mb3J1bSkpLCBvciByYWlzZSBhbiBbaXNzdWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsc3F1YXJlZC9DYXRjaC9pc3N1ZXMpIHRvIGxldCB1cyBrbm93KS4KIE9mIGNvdXJzZSB1c2VycyBvZiB0aG9zZSBwcm9qZWN0cyBtaWdodCB3YW50IHRvIHVwZGF0ZSB0aGlzIHBhZ2UgdG9vLiBUaGF0J3MgZmluZSAtIGFzIGxvbmcgeW91J3JlIGNvbmZpZGVudCB0aGUgcHJvamVjdCBtYWludGFpbmVycyB3b24ndCBtaW5kLgotSWYgeW91J3JlIGFuIE9wZW4gU291cmNlIHByb2plY3QgbWFpbnRhaW5lciBhbmQgc2VlIHlvdXIgcHJvamVjdCBsaXN0ZWQgaGVyZSBidXQgd291bGQgcmF0aGVyIGl0IHdhc24ndCAtIAorSWYgeW91J3JlIGFuIE9wZW4gU291cmNlIHByb2plY3QgbWFpbnRhaW5lciBhbmQgc2VlIHlvdXIgcHJvamVjdCBsaXN0ZWQgaGVyZSBidXQgd291bGQgcmF0aGVyIGl0IHdhc24ndCAtCiBqdXN0IGxldCB1cyBrbm93IHZpYSBhbnkgb2YgdGhlIHByZXZpb3VzbHkgbWVudGlvbmVkIG1lYW5zIC0gYWx0aG91Z2ggSSdtIHN1cmUgdGhlcmUgd29uJ3QgYmUgbWFueSB3aG8gZmVlbCB0aGF0IHdheS4KLSAKKwogTGlzdGluZyBhIHByb2plY3QgaGVyZSBkb2VzIG5vdCBpbXBseSBlbmRvcnNlbWVudCBhbmQgdGhlIHBsYW4gaXMgdG8ga2VlcCB0aGVzZSBvcmRlcmVkIGFscGhhYmV0aWNhbGx5IHRvIGF2b2lkIGFuIGltcGxpY2F0aW9uIG9mIHJlbGF0aXZlIGltcG9ydGFuY2UuCiAKICMjIExpYnJhcmllcyAmIEZyYW1ld29ya3MKIAogIyMjIFtBem1xXShodHRwczovL2dpdGh1Yi5jb20vemVyb21xL2F6bXEpCi1Cb29zdCBBc2lvIHN0eWxlIGJpbmRpbmdzIGZvciBaZXJvTVEKK0Jvb3N0IEFzaW8gc3R5bGUgYmluZGluZ3MgZm9yIFplcm9NUS4KIAogIyMjIFtDaGFrcmFDb3JlXShodHRwczovL2dpdGh1Yi5jb20vTWljcm9zb2Z0L0NoYWtyYUNvcmUpCi1UaGUgY29yZSBwYXJ0IG9mIHRoZSBDaGFrcmEgSmF2YXNjcmlwdCBlbmdpbmUgdGhhdCBwb3dlcnMgTWljcm9zb2Z0IEVkZ2UKK1RoZSBjb3JlIHBhcnQgb2YgdGhlIENoYWtyYSBKYXZhU2NyaXB0IGVuZ2luZSB0aGF0IHBvd2VycyBNaWNyb3NvZnQgRWRnZS4KIAogIyMjIFtDaGFpU2NyaXB0XShodHRwczovL2dpdGh1Yi5jb20vQ2hhaVNjcmlwdC9DaGFpU2NyaXB0KQotQSwgaGVhZGVyLW9ubHksIGVtYmVkZGVkIHNjcmlwdGluZyBsYW5ndWFnZSBkZXNpZ25lZCBmcm9tIHRoZSBncm91bmQgdXAgdG8gZGlyZWN0bHkgdGFyZ2V0IEMrKyBhbmQgdGFrZSBhZHZhbnRhZ2Ugb2YgbW9kZXJuIEMrKyBkZXZlbG9wbWVudCB0ZWNobmlxdWVzCitBLCBoZWFkZXItb25seSwgZW1iZWRkZWQgc2NyaXB0aW5nIGxhbmd1YWdlIGRlc2lnbmVkIGZyb20gdGhlIGdyb3VuZCB1cCB0byBkaXJlY3RseSB0YXJnZXQgQysrIGFuZCB0YWtlIGFkdmFudGFnZSBvZiBtb2Rlcm4gQysrIGRldmVsb3BtZW50IHRlY2huaXF1ZXMuCiAKICMjIyBbQ2xhcmFdKGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsc3F1YXJlZC9DbGFyYSkKIEEsIHNpbmdsZS1oZWFkZXItb25seSwgdHlwZS1zYWZlLCBjb21tYW5kIGxpbmUgcGFyc2VyIC0gd2hpY2ggYWxzbyBwcmludHMgZm9ybWF0dGVkIHVzYWdlIHN0cmluZ3MuCiAKICMjIyBbQ291Y2hiYXNlLWxpdGUtY29yZV0oaHR0cHM6Ly9naXRodWIuY29tL2NvdWNoYmFzZS9jb3VjaGJhc2UtbGl0ZS1jb3JlKQotVGhlIG5leHQtZ2VuZXJhdGlvbiBjb3JlIHN0b3JhZ2UgYW5kIHF1ZXJ5IGVuZ2luZSBmb3IgQ291Y2hiYXNlIExpdGUKK1RoZSBuZXh0LWdlbmVyYXRpb24gY29yZSBzdG9yYWdlIGFuZCBxdWVyeSBlbmdpbmUgZm9yIENvdWNoYmFzZSBMaXRlLgorCisjIyMgW2NwcGNvZGVjXShodHRwczovL2dpdGh1Yi5jb20vdHBsZ3kvY3BwY29kZWMpCitIZWFkZXItb25seSBDKysxMSBsaWJyYXJ5IHRvIGVuY29kZS9kZWNvZGUgYmFzZTY0LCBiYXNlNjR1cmwsIGJhc2UzMiwgYmFzZTMyaGV4IGFuZCBoZXggKGEuay5hLiBiYXNlMTYpIGFzIHNwZWNpZmllZCBpbiBSRkMgNDY0OCwgcGx1cyBDcm9ja2ZvcmQncyBiYXNlMzIuCiAKICMjIyBbRHRDcmFmdF0oaHR0cHM6Ly9naXRodWIuY29tL3R3aHVhbmctdWl1Yy9EdENyYWZ0KQotQSBIaWdoLXBlcmZvcm1hbmNlIENsdXN0ZXIgQ29tcHV0aW5nIEVuZ2luZQorQSBIaWdoLXBlcmZvcm1hbmNlIENsdXN0ZXIgQ29tcHV0aW5nIEVuZ2luZS4KIAogIyMjIFtmb3Jlc3RdKGh0dHBzOi8vZ2l0aHViLmNvbS94b3J6NTcvZm9yZXN0KQotRm9yZXN0IGlzIGFuIG9wZW4tc291cmNlLCB0ZW1wbGF0ZSBsaWJyYXJ5IG9mIHRyZWUgZGF0YSBzdHJ1Y3R1cmVzIHdyaXR0ZW4gaW4gQysrMTEuCitUZW1wbGF0ZSBMaWJyYXJ5IG9mIFRyZWUgRGF0YSBTdHJ1Y3R1cmVzLgogCiAjIyMgW0Z1eGVkb10oaHR0cHM6Ly9naXRodWIuY29tL2Z1eGVkby9mdXhlZG8pCiBPcGVuIHNvdXJjZSBPcmFjbGUgVHV4ZWRvLWxpa2UgWEFUTUkgbWlkZGxld2FyZSBmb3IgQyBhbmQgQysrLgpAQCAtNDcsNiArNTAsOSBAQAogIyMjIFtKU09OIGZvciBNb2Rlcm4gQysrXShodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNvbikKIEEsIHNpbmdsZS1oZWFkZXIsIEpTT04gcGFyc2luZyBsaWJyYXJ5IHRoYXQgdGFrZXMgYWR2YW50YWdlIG9mIHdoYXQgQysrIGhhcyB0byBvZmZlci4KIAorIyMjIFtsaWJjbHVvbl0oaHR0cHM6Ly9naXRodWIuY29tL2NocmJlcmdlci9saWJjbHVvbikKK0Egc2luZ2xlLWhlYWRlci1vbmx5IGxpYnJhcnkgd3JpdHRlbiBpbiBDKysxNCB0byBnbHVlIGRpc3RyaWJ1dGVkIHNvZnR3YXJlIGNvbXBvbmVudHMgKFVEUCwgVENQLCBzaGFyZWQgbWVtb3J5KSBzdXBwb3J0aW5nIG5hdGl2ZWx5IFByb3RvYnVmLCBMQ00vWkNNLCBNc2dQYWNrLCBhbmQgSlNPTiBmb3IgZHluYW1pYyBtZXNzYWdlIHRyYW5zZm9ybWF0aW9ucyBpbi1iZXR3ZWVuLiAKKwogIyMjIFtNTk1MU1RDIENvcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9tbm1sc3RjL2NvcmUpCiBBIHNtYWxsIGFuZCBlYXN5IHRvIHVzZSBDKysxMSBsaWJyYXJ5IHRoYXQgYWRkcyBhIGZ1bmN0aW9uYWxpdHkgc2V0IHRoYXQgd2lsbCBiZSBhdmFpbGFibGUgaW4gQysrMTQgYW5kIGxhdGVyLCBhcyB3ZWxsIGFzIHNvbWUgdXNlZnVsIGFkZGl0aW9ucy4KIApAQCAtNTcsMjIgKzYzLDI1IEBACiBBIGhlYWRlci1vbmx5IGZyYW1ld29yayBmb3IgYmVuY2htYXJraW5nIHNtYWxsIHNuaXBwZXRzIG9mIEMrKyBjb2RlLgogCiAjIyMgW1NPQ0ldKGh0dHBzOi8vZ2l0aHViLmNvbS9TT0NJL3NvY2kpCi1UaGUgQysrIERhdGFiYXNlIEFjY2VzcyBMaWJyYXJ5CitUaGUgQysrIERhdGFiYXNlIEFjY2VzcyBMaWJyYXJ5LgogCiAjIyMgW3BvbHltb3JwaGljX3ZhbHVlXShodHRwczovL2dpdGh1Yi5jb20vamJjb2UvcG9seW1vcnBoaWNfdmFsdWUpCi1BIHBvbHltb3JwaGljIHZhbHVlLXR5cGUgZm9yIEMrKworQSBwb2x5bW9ycGhpYyB2YWx1ZS10eXBlIGZvciBDKysuCiAKICMjIyBbUHBjb25zdWxdKGh0dHBzOi8vZ2l0aHViLmNvbS9vbGlvcmEvcHBjb25zdWwpCi1BIEMrKyBjbGllbnQgbGlicmFyeSBmb3IgQ29uc3VsLiBDb25zdWwgaXMgYSBkaXN0cmlidXRlZCB0b29sIGZvciBkaXNjb3ZlcmluZyBhbmQgY29uZmlndXJpbmcgc2VydmljZXMgaW4geW91ciBpbmZyYXN0cnVjdHVyZQorQSBDKysgY2xpZW50IGxpYnJhcnkgZm9yIENvbnN1bC4gQ29uc3VsIGlzIGEgZGlzdHJpYnV0ZWQgdG9vbCBmb3IgZGlzY292ZXJpbmcgYW5kIGNvbmZpZ3VyaW5nIHNlcnZpY2VzIGluIHlvdXIgaW5mcmFzdHJ1Y3R1cmUuCiAKICMjIyBbUmVhY3RpdmUtRXh0ZW5zaW9ucy8gUnhDcHBdKGh0dHBzOi8vZ2l0aHViLmNvbS9SZWFjdGl2ZS1FeHRlbnNpb25zL1J4Q3BwKQotQSBsaWJyYXJ5IG9mIGFsZ29yaXRobXMgZm9yIHZhbHVlcy1kaXN0cmlidXRlZC1pbi10aW1lCitBIGxpYnJhcnkgb2YgYWxnb3JpdGhtcyBmb3IgdmFsdWVzLWRpc3RyaWJ1dGVkLWluLXRpbWUuCisKKyMjIyBbdGhvcl0oaHR0cHM6Ly9naXRodWIuY29tL3hvcno1Ny90aG9yKQorV3JhcHBlciBMaWJyYXJ5IGZvciBDVURBLgogCiAjIyMgW1RleHRGbG93Q3BwXShodHRwczovL2dpdGh1Yi5jb20vcGhpbHNxdWFyZWQvdGV4dGZsb3djcHApCi1BIHNtYWxsLCBzaW5nbGUtaGVhZGVyLW9ubHksIGxpYnJhcnkgZm9yIHdyYXBwaW5nIGFuZCBjb21wb3NpbmcgY29sdW1ucyBvZiB0ZXh0CitBIHNtYWxsLCBzaW5nbGUtaGVhZGVyLW9ubHksIGxpYnJhcnkgZm9yIHdyYXBwaW5nIGFuZCBjb21wb3NpbmcgY29sdW1ucyBvZiB0ZXh0LgogCiAjIyMgW1Ryb21wZWxvZWlsXShodHRwczovL2dpdGh1Yi5jb20vcm9sbGJlYXIvdHJvbXBlbG9laWwpCi1BIHRocmVhZCBzYWZlIGhlYWRlciBvbmx5IG1vY2tpbmcgZnJhbWV3b3JrIGZvciBDKysxNAorQSB0aHJlYWQtc2FmZSBoZWFkZXItb25seSBtb2NraW5nIGZyYW1ld29yayBmb3IgQysrMTQuCiAKICMjIyBbYXJnc10oaHR0cHM6Ly9naXRodWIuY29tL1RheXdlZS9hcmdzKQogQSBzaW1wbGUgaGVhZGVyLW9ubHkgQysrIGFyZ3VtZW50IHBhcnNlciBsaWJyYXJ5LgpAQCAtODYsMTMgKzk1LDE2IEBACiBNaW5pbWFsLCBvcGVuLXNvdXJjZSBhbmQgY3Jvc3MtcGxhdGZvcm0gYXVkaW8gdG9vbCBmb3IgbGl2ZSBtdXNpYyBwcm9kdWN0aW9uLgogCiAjIyMgW01BTUVdKGh0dHBzOi8vZ2l0aHViLmNvbS9tYW1lZGV2L21hbWUpCi1NQU1FIG9yaWdpbmFsbHkgc3Rvb2QgZm9yIE11bHRpcGxlIEFyY2FkZSBNYWNoaW5lIEVtdWxhdG9yCitNQU1FIG9yaWdpbmFsbHkgc3Rvb2QgZm9yIE11bHRpcGxlIEFyY2FkZSBNYWNoaW5lIEVtdWxhdG9yLgogCiAjIyMgW05ld3NiZXV0ZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9ha3Jlbm5tYWlyL25ld3NiZXV0ZXIpCiBOZXdzYmV1dGVyIGlzIGFuIG9wZW4tc291cmNlIFJTUy9BdG9tIGZlZWQgcmVhZGVyIGZvciB0ZXh0IHRlcm1pbmFscy4KIAorIyMjIFtTcEVDVFJFXShodHRwczovL2dpdGh1Yi5jb20vc3hzLWNvbGxhYm9yYXRpb24vc3BlY3RyZSkKK1NwRUNUUkUgaXMgYSBjb2RlIGZvciBtdWx0aS1zY2FsZSwgbXVsdGktcGh5c2ljcyBwcm9ibGVtcyBpbiBhc3Ryb3BoeXNpY3MgYW5kIGdyYXZpdGF0aW9uYWwgcGh5c2ljcy4KKwogIyMjIFtTdGFuZGFyZGVzZV0oaHR0cHM6Ly9naXRodWIuY29tL2Zvb25hdGhhbi9zdGFuZGFyZGVzZSkKLVN0YW5kYXJkZXNlIGFpbXMgdG8gYmUgYSBuZXh0Z2VuIERveHlnZW4KK1N0YW5kYXJkZXNlIGFpbXMgdG8gYmUgYSBuZXh0Z2VuIERveHlnZW4uCiAKIC0tLQogCmRpZmYgLS1naXQgYS9kb2NzL290aGVyLW1hY3Jvcy5tZCBiL2RvY3Mvb3RoZXItbWFjcm9zLm1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmNWZhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9kb2NzL290aGVyLW1hY3Jvcy5tZApAQCAtMCwwICsxLDE1MCBAQAorPGEgaWQ9InRvcCI+PC9hPgorIyBPdGhlciBtYWNyb3MKKworVGhpcyBwYWdlIHNlcnZlcyBhcyBhIHJlZmVyZW5jZSBmb3IgbWFjcm9zIHRoYXQgYXJlIG5vdCBkb2N1bWVudGVkCitlbHNld2hlcmUuIEZvciBub3csIHRoZXNlIG1hY3JvcyBhcmUgc2VwYXJhdGVkIGludG8gMiByb3VnaCBjYXRlZ29yaWVzLAorImFzc2VydGlvbiByZWxhdGVkIG1hY3JvcyIgYW5kICJ0ZXN0IGNhc2UgcmVsYXRlZCBtYWNyb3MiLgorCisjIyBBc3NlcnRpb24gcmVsYXRlZCBtYWNyb3MKKworKiBgQ0hFQ0tFRF9JRmAgYW5kIGBDSEVDS0VEX0VMU0VgCisKK2BDSEVDS0VEX0lGKCBleHByIClgIGlzIGFuIGBpZmAgcmVwbGFjZW1lbnQsIHRoYXQgYWxzbyBhcHBsaWVzIENhdGNoMidzCitzdHJpbmdpZmljYXRpb24gbWFjaGluZXJ5IHRvIHRoZSBfZXhwcl8gYW5kIHJlY29yZHMgdGhlIHJlc3VsdC4gQXMgd2l0aAorYGlmYCwgdGhlIGJsb2NrIGFmdGVyIGEgYENIRUNLRURfSUZgIGlzIGVudGVyZWQgb25seSBpZiB0aGUgZXhwcmVzc2lvbgorZXZhbHVhdGVzIHRvIGB0cnVlYC4gYENIRUNLRURfRUxTRSggZXhwciApYCB3b3JrIHNpbWlsYXJseSwgYnV0IHRoZSBibG9jaworaXMgZW50ZXJlZCBvbmx5IGlmIHRoZSBfZXhwcl8gZXZhbHVhdGVkIHRvIGBmYWxzZWAuCisKK0V4YW1wbGU6CitgYGBjcHAKK2ludCBhID0gLi4uOworaW50IGIgPSAuLi47CitDSEVDS0VEX0lGKCBhID09IGIgKSB7CisgICAgLy8gVGhpcyBibG9jayBpcyBlbnRlcmVkIHdoZW4gYSA9PSBiCit9IENIRUNLRURfRUxTRSAoIGEgPT0gYiApIHsKKyAgICAvLyBUaGlzIGJsb2NrIGlzIGVudGVyZWQgd2hlbiBhICE9IGIKK30KK2BgYAorCisqIGBDSEVDS19OT0ZBSUxgCisKK2BDSEVDS19OT0ZBSUwoIGV4cHIgKWAgaXMgYSB2YXJpYW50IG9mIGBDSEVDS2AgdGhhdCBkb2VzIG5vdCBmYWlsIHRoZSB0ZXN0CitjYXNlIGlmIF9leHByXyBldmFsdWF0ZXMgdG8gYGZhbHNlYC4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBjaGVja2luZyBzb21lCithc3N1bXB0aW9uLCB0aGF0IG1pZ2h0IGJlIHZpb2xhdGVkIHdpdGhvdXQgdGhlIHRlc3QgbmVjY2Vzc2FyaWx5IGZhaWxpbmcuCisKK0V4YW1wbGUgb3V0cHV0OgorYGBgCittYWluLmNwcDo2OgorRkFJTEVEIC0gYnV0IHdhcyBvazoKKyAgQ0hFQ0tfTk9GQUlMKCAxID09IDIgKQorCittYWluLmNwcDo3OgorUEFTU0VEOgorICBDSEVDSyggMiA9PSAyICkKK2BgYAorCisqIGBTVUNDRUVEYAorCitgU1VDQ0VFRCggbXNnIClgIGlzIG1vc3RseSBlcXVpdmFsZW50IHdpdGggYElORk8oIG1zZyApOyBSRVFVSVJFKCB0cnVlICk7YC4KK0luIG90aGVyIHdvcmRzLCBgU1VDQ0VFRGAgaXMgZm9yIGNhc2VzIHdoZXJlIGp1c3QgcmVhY2hpbmcgYSBjZXJ0YWluIGxpbmUKK21lYW5zIHRoYXQgdGhlIHRlc3QgaGFzIGJlZW4gYSBzdWNjZXNzLgorCitFeGFtcGxlIHVzYWdlOgorYGBgY3BwCitURVNUX0NBU0UoICJTVUNDRUVEIHNob3djYXNlIiApIHsKKyAgICBpbnQgSSA9IDE7CisgICAgU1VDQ0VFRCggIkkgaXMgIiA8PCBJICk7Cit9CitgYGAKKworKiBgU1RBVElDX1JFUVVJUkVgCisKK2BTVEFUSUNfUkVRVUlSRSggZXhwciApYCBpcyBhIG1hY3JvIHRoYXQgY2FuIGJlIHVzZWQgdGhlIHNhbWUgd2F5IGFzIGEKK2BzdGF0aWNfYXNzZXJ0YCwgYnV0IGFsc28gcmVnaXN0ZXJzIHRoZSBzdWNjZXNzIHdpdGggQ2F0Y2gyLCBzbyBpdCBpcworcmVwb3J0ZWQgYXMgYSBzdWNjZXNzIGF0IHJ1bnRpbWUuIFRoZSB3aG9sZSBjaGVjayBjYW4gYWxzbyBiZSBkZWZlcnJlZAordG8gdGhlIHJ1bnRpbWUsIGJ5IGRlZmluaW5nIGBDQVRDSF9DT05GSUdfUlVOVElNRV9TVEFUSUNfUkVRVUlSRWAgYmVmb3JlCitpbmNsdWRpbmcgdGhlIENhdGNoMiBoZWFkZXIuCisKK0V4YW1wbGU6CitgYGBjcHAKK1RFU1RfQ0FTRSgiU1RBVElDX1JFUVVJUkUgc2hvd2Nhc2UiLCAiW3RyYWl0c10iKSB7CisgICAgU1RBVElDX1JFUVVJUkUoIHN0ZDo6aXNfdm9pZDx2b2lkPjo6dmFsdWUgKTsKKyAgICBTVEFUSUNfUkVRVUlSRV9GQUxTRSggc3RkOjppc192b2lkPGludD46OnZhbHVlICk7Cit9CitgYGAKKworIyMgVGVzdCBjYXNlIHJlbGF0ZWQgbWFjcm9zCisKKyogYE1FVEhPRF9BU19URVNUX0NBU0VgCisKK2BNRVRIT0RfQVNfVEVTVF9DQVNFKCBtZW1iZXItZnVuY3Rpb24tcG9pbnRlciwgZGVzY3JpcHRpb24gKWAgbGV0cyB5b3UKK3JlZ2lzdGVyIGEgbWVtYmVyIGZ1bmN0aW9uIG9mIGEgY2xhc3MgYXMgYSBDYXRjaDIgdGVzdCBjYXNlLiBUaGUgY2xhc3MKK3dpbGwgYmUgc2VwYXJhdGVseSBpbnN0YW50aWF0ZWQgZm9yIGVhY2ggbWV0aG9kIHJlZ2lzdGVyZWQgaW4gdGhpcyB3YXkuCisKK2BgYGNwcAorY2xhc3MgVGVzdENsYXNzIHsKKyAgICBzdGQ6OnN0cmluZyBzOworCitwdWJsaWM6CisgICAgVGVzdENsYXNzKCkKKyAgICAgICAgOnMoICJoZWxsbyIgKQorICAgIHt9CisKKyAgICB2b2lkIHRlc3RDYXNlKCkgeworICAgICAgICBSRVFVSVJFKCBzID09ICJoZWxsbyIgKTsKKyAgICB9Cit9OworCisKK01FVEhPRF9BU19URVNUX0NBU0UoIFRlc3RDbGFzczo6dGVzdENhc2UsICJVc2UgY2xhc3MncyBtZXRob2QgYXMgYSB0ZXN0IGNhc2UiLCAiW2NsYXNzXSIgKQorYGBgCisKKyogYFJFR0lTVEVSX1RFU1RfQ0FTRWAKKworYFJFR0lTVEVSX1RFU1RfQ0FTRSggZnVuY3Rpb24sIGRlc2NyaXB0aW9uIClgIGxldCdzIHlvdSByZWdpc3RlcgorYSBgZnVuY3Rpb25gIGFzIGEgdGVzdCBjYXNlLiBUaGUgZnVuY3Rpb24gaGFzIHRvIGhhdmUgYHZvaWQoKWAgc2lnbmF0dXJlLAordGhlIGRlc2NyaXB0aW9uIGNhbiBjb250YWluIGJvdGggbmFtZSBhbmQgdGFncy4KKworRXhhbXBsZToKK2BgYGNwcAorUkVHSVNURVJfVEVTVF9DQVNFKCBzb21lRnVuY3Rpb24sICJNYW51YWxseVJlZ2lzdGVyZWQiLCAiW3RhZ3NdIiApOworYGBgCisKK19Ob3RlIHRoYXQgdGhlIHJlZ2lzdHJhdGlvbiBzdGlsbCBoYXMgdG8gaGFwcGVuIGJlZm9yZSBDYXRjaDIncyBzZXNzaW9uCitpcyBpbml0aWF0ZWQuIFRoaXMgbWVhbnMgdGhhdCBpdCBlaXRoZXIgbmVlZHMgdG8gYmUgZG9uZSBpbiBhIGdsb2JhbAorY29uc3RydWN0b3IsIG9yIGJlZm9yZSBDYXRjaDIncyBzZXNzaW9uIGlzIGNyZWF0ZWQgaW4gdXNlcidzIG93biBtYWluLl8KKworCisqIGBBTk9OX1RFU1RfQ0FTRWAKKworYEFOT05fVEVTVF9DQVNFYCBpcyBhIGBURVNUX0NBU0VgIHJlcGxhY2VtZW50IHRoYXQgd2lsbCBhdXRvZ2VuZXJhdGUKK3VuaXF1ZSBuYW1lLiBUaGUgYWR2YW50YWdlIG9mIHRoaXMgaXMgdGhhdCB5b3UgZG8gbm90IGhhdmUgdG8gdGhpbmsKK29mIGEgbmFtZSBmb3IgdGhlIHRlc3QgY2FzZSxgdGhlIGRpc2FkdmFudGFnZSBpcyB0aGF0IHRoZSBuYW1lIGRvZXNuJ3QKK25lY2Nlc3NhcmlseSByZW1haW4gc3RhYmxlIGFjcm9zcyBkaWZmZXJlbnQgbGlua3MsIGFuZCB0aHVzIGl0IG1pZ2h0IGJlCitoYXJkIHRvIHJ1biBkaXJlY3RseS4KKworRXhhbXBsZToKK2BgYGNwcAorQU5PTl9URVNUX0NBU0UoKSB7CisgICAgU1VDQ0VFRCgiSGVsbG8gZnJvbSBhbm9ueW1vdXMgdGVzdCBjYXNlIik7Cit9CitgYGAKKworKiBgRFlOQU1JQ19TRUNUSU9OYAorCitgRFlOQU1JQ19TRUNUSU9OYCBpcyBhIGBTRUNUSU9OYCB3aGVyZSB0aGUgdXNlciBjYW4gdXNlIGBvcGVyYXRvcjw8YCB0bworY3JlYXRlIHRoZSBmaW5hbCBuYW1lIGZvciB0aGF0IHNlY3Rpb24uIFRoaXMgY2FuIGJlIHVzZWZ1bCB3aXRoIGUuZy4KK2dlbmVyYXRvcnMsIG9yIHdoZW4gY3JlYXRpbmcgYSBgU0VDVElPTmAgZHluYW1pY2FsbHksIHdpdGhpbiBhIGxvb3AuCisKK0V4YW1wbGU6CitgYGBjcHAKK1RFU1RfQ0FTRSggImxvb3BlZCBTRUNUSU9OIHRlc3RzIiApIHsKKyAgICBpbnQgYSA9IDE7CisKKyAgICBmb3IoIGludCBiID0gMDsgYiA8IDEwOyArK2IgKSB7CisgICAgICAgIERZTkFNSUNfU0VDVElPTiggImIgaXMgY3VycmVudGx5OiAiIDw8IGIgKSB7CisgICAgICAgICAgICBDSEVDSyggYiA+IGEgKTsKKyAgICAgICAgfQorICAgIH0KK30KK2BgYApkaWZmIC0tZ2l0IGEvZG9jcy9vd24tbWFpbi5tZCBiL2RvY3Mvb3duLW1haW4ubWQKaW5kZXggMThkMWI3ZC4uNmE5YjFhYSAxMDA2NDQKLS0tIGEvZG9jcy9vd24tbWFpbi5tZAorKysgYi9kb2NzL293bi1tYWluLm1kCkBAIC0xLDYgKzEsMTIgQEAKIDxhIGlkPSJ0b3AiPjwvYT4KICMgU3VwcGx5aW5nIG1haW4oKSB5b3Vyc2VsZgogCisqKkNvbnRlbnRzKio8YnI+CitbTGV0IENhdGNoIHRha2UgZnVsbCBjb250cm9sIG9mIGFyZ3MgYW5kIGNvbmZpZ10oI2xldC1jYXRjaC10YWtlLWZ1bGwtY29udHJvbC1vZi1hcmdzLWFuZC1jb25maWcpPGJyPgorW0FtZW5kaW5nIHRoZSBjb25maWddKCNhbWVuZGluZy10aGUtY29uZmlnKTxicj4KK1tBZGRpbmcgeW91ciBvd24gY29tbWFuZCBsaW5lIG9wdGlvbnNdKCNhZGRpbmcteW91ci1vd24tY29tbWFuZC1saW5lLW9wdGlvbnMpPGJyPgorW1ZlcnNpb24gZGV0ZWN0aW9uXSgjdmVyc2lvbi1kZXRlY3Rpb24pPGJyPgorCiBUaGUgZWFzaWVzdCB3YXkgdG8gdXNlIENhdGNoIGlzIHRvIGxldCBpdCBzdXBwbHkgYGBgbWFpbigpYGBgIGZvciB5b3UgYW5kIGhhbmRsZSBjb25maWd1cmluZyBpdHNlbGYgZnJvbSB0aGUgY29tbWFuZCBsaW5lLgogCiBUaGlzIGlzIGFjaGlldmVkIGJ5IHdyaXRpbmcgYGBgI2RlZmluZSBDQVRDSF9DT05GSUdfTUFJTmBgYCBiZWZvcmUgdGhlIGBgYCNpbmNsdWRlICJjYXRjaC5ocHAiYGBgIGluICpleGFjdGx5IG9uZSogc291cmNlIGZpbGUuCkBAIC0zMCw3ICszNiw3IEBACiAKICMjIEFtZW5kaW5nIHRoZSBjb25maWcKIAotSWYgeW91IHN0aWxsIHdhbnQgQ2F0Y2ggdG8gcHJvY2VzcyB0aGUgY29tbWFuZCBsaW5lLCBidXQgeW91IHdhbnQgdG8gcHJvZ3JhbWF0aWNhbGx5IHR3ZWFrIHRoZSBjb25maWcsIHlvdSBjYW4gZG8gc28gaW4gb25lIG9mIHR3byB3YXlzOgorSWYgeW91IHN0aWxsIHdhbnQgQ2F0Y2ggdG8gcHJvY2VzcyB0aGUgY29tbWFuZCBsaW5lLCBidXQgeW91IHdhbnQgdG8gcHJvZ3JhbW1hdGljYWxseSB0d2VhayB0aGUgY29uZmlnLCB5b3UgY2FuIGRvIHNvIGluIG9uZSBvZiB0d28gd2F5czoKIAogYGBgYysrCiAjZGVmaW5lIENBVENIX0NPTkZJR19SVU5ORVIKQEAgLTQ1LDcgKzUxLDcgQEAKICAgICAKICAgaW50IHJldHVybkNvZGUgPSBzZXNzaW9uLmFwcGx5Q29tbWFuZExpbmUoIGFyZ2MsIGFyZ3YgKTsKICAgaWYoIHJldHVybkNvZGUgIT0gMCApIC8vIEluZGljYXRlcyBhIGNvbW1hbmQgbGluZSBlcnJvcgotICAJICByZXR1cm4gcmV0dXJuQ29kZTsKKyAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CiAgCiAgIC8vIHdyaXRpbmcgdG8gc2Vzc2lvbi5jb25maWdEYXRhKCkgb3Igc2Vzc2lvbi5Db25maWcoKSBoZXJlIAogICAvLyBvdmVycmlkZXMgY29tbWFuZCBsaW5lIGFyZ3MKQEAgLTk0LDcgKzEwMCw3IEBACiAgIC8vIExldCBDYXRjaCAodXNpbmcgQ2xhcmEpIHBhcnNlIHRoZSBjb21tYW5kIGxpbmUKICAgaW50IHJldHVybkNvZGUgPSBzZXNzaW9uLmFwcGx5Q29tbWFuZExpbmUoIGFyZ2MsIGFyZ3YgKTsKICAgaWYoIHJldHVybkNvZGUgIT0gMCApIC8vIEluZGljYXRlcyBhIGNvbW1hbmQgbGluZSBlcnJvcgotICAJcmV0dXJuIHJldHVybkNvZGU7CisgICAgICByZXR1cm4gcmV0dXJuQ29kZTsKIAogICAvLyBpZiBzZXQgb24gdGhlIGNvbW1hbmQgbGluZSB0aGVuICdoZWlnaHQnIGlzIG5vdyBzZXQgYXQgdGhpcyBwb2ludAogICBpZiggaGVpZ2h0ID4gMCApCmRpZmYgLS1naXQgYS9kb2NzL3JlbGVhc2Utbm90ZXMubWQgYi9kb2NzL3JlbGVhc2Utbm90ZXMubWQKaW5kZXggNTY1ZDZjZC4uMzQyNzhjMyAxMDA2NDQKLS0tIGEvZG9jcy9yZWxlYXNlLW5vdGVzLm1kCisrKyBiL2RvY3MvcmVsZWFzZS1ub3Rlcy5tZApAQCAtMSwyMCArMSwzNjAgQEAKIDxhIGlkPSJ0b3AiPjwvYT4KIAotIyAyLjEuMQorIyBSZWxlYXNlIG5vdGVzCisqKkNvbnRlbnRzKio8YnI+CitbMi43LjBdKCMyNzApPGJyPgorWzIuNi4xXSgjMjYxKTxicj4KK1syLjYuMF0oIzI2MCk8YnI+CitbMi41LjBdKCMyNTApPGJyPgorWzIuNC4yXSgjMjQyKTxicj4KK1syLjQuMV0oIzI0MSk8YnI+CitbMi40LjBdKCMyNDApPGJyPgorWzIuMy4wXSgjMjMwKTxicj4KK1syLjIuM10oIzIyMyk8YnI+CitbMi4yLjJdKCMyMjIpPGJyPgorWzIuMi4xXSgjMjIxKTxicj4KK1syLjIuMF0oIzIyMCk8YnI+CitbMi4xLjJdKCMyMTIpPGJyPgorWzIuMS4xXSgjMjExKTxicj4KK1syLjEuMF0oIzIxMCk8YnI+CitbMi4wLjFdKCMyMDEpPGJyPgorW09sZGVyIHZlcnNpb25zXSgjb2xkZXItdmVyc2lvbnMpPGJyPgorW0V2ZW4gT2xkZXIgdmVyc2lvbnNdKCNldmVuLW9sZGVyLXZlcnNpb25zKTxicj4KIAotIyMgSW1wcm92ZW1lbnRzCisjIyAyLjcuMAorCisjIyMgSW1wcm92ZW1lbnRzCisqIGBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRWAgbm93IHVzZXMgdGhlIHJlc3VsdGluZyB0eXBlIGluIHRoZSBuYW1lLCBpbnN0ZWFkIG9mIHRoZSBzZXJpYWwgbnVtYmVyICgjMTU0NCkKKyogQ2F0Y2gyJ3Mgc2luZ2xlIGhlYWRlciBpcyBub3cgc3RyaWN0bHkgQVNDSUkgKCMxNTQyKQorKiBBZGRlZCBnZW5lcmF0b3IgZm9yIHJhbmRvbSBpbnRlZ3JhbC9mbG9hdGluZyBwb2ludCB0eXBlcworICAqIFRoZSB0eXBlcyBhcmUgaW5mZXJyZWQgd2l0aGluIHRoZSBgcmFuZG9tYCBoZWxwZXIKKyogQWRkZWQgYmFjayBSYW5nZUdlbmVyYXRvciAoIzE1MjYpCisgICogUmFuZ2VHZW5lcmF0b3IgcmV0dXJucyBlbGVtZW50cyB3aXRoaW4gYSBjZXJ0YWluIHJhbmdlCisqIEFkZGVkIENodW5rR2VuZXJhdG9yIGdlbmVyaWMgdHJhbnNmb3JtICgjMTUzOCkKKyAgKiBBIENodW5rR2VuZXJhdG9yIHJldHVybnMgdGhlIGVsZW1lbnRzIGZyb20gZGlmZmVyZW50IGdlbmVyYXRvciBpbiBjaHVua3Mgb2YgbiBlbGVtZW50cworKiBBZGRlZCBgVU5TQ09QRURfSU5GT2AgKCM0MTUsICM5ODMsICMxNTIyKQorICAqIFRoaXMgaXMgYSB2YXJpYW50IG9mIGBJTkZPYCB0aGF0IGxpdmVzIHVudGlsIG5leHQgYXNzZXJ0aW9uL2VuZCBvZiB0aGUgdGVzdCBjYXNlLgorCisKKyMjIyBGaXhlcworKiBBbGwgY2FsbHMgdG8gQyBzdGRsaWIgZnVuY3Rpb25zIGFyZSBub3cgYHN0ZDo6YCBxdWFsaWZpZWQgKCMxNTQxKQorICAqIENvZGUgYnJvdWdodCBpbiBmcm9tIENsYXJhIHdhcyBhbHNvIHVwZGF0ZWQuCisqIFJ1bm5pbmcgdGVzdHMgd2lsbCBubyBsb25nZXIgb3BlbiB0aGUgc3BlY2lmaWVkIG91dHB1dCBmaWxlIHR3aWNlICgjMTU0NSkKKyAgKiBUaGlzIHdvdWxkIGNhdXNlIHRyb3VibGUgd2hlbiB0aGUgZmlsZSB3YXMgbm90IGEgZmlsZSwgYnV0IHJhdGhlciBhIG5hbWVkIHBpcGUKKyAgKiBGaXhlcyB0aGUgQ0xpb24vUmVzaGFycGVyIGludGVncmF0aW9uIHdpdGggQ2F0Y2gKKyogRml4ZWQgYC1XdW5yZWFjaGFibGUtY29kZWAgb2NjdXJpbmcgd2l0aCAob2xkKSBjY2FjaGUrY21ha2UrY2xhbmcgY29tYmluYXRpb24gKCMxNTQwKQorKiBGaXhlZCBgLVdkZWZhdWx0ZWQtZnVuY3Rpb24tZGVsZXRlZGAgd2FybmluZyB3aXRoIENsYW5nIDggKCMxNTM3KQorKiBDYXRjaDIncyB0eXBlIHRyYWl0cyBhbmQgaGVscGVycyBhcmUgbm93IHByb3Blcmx5IG5hbWVzcGFjZWQgaW5zaWRlIGBDYXRjaDo6YCAoIzE1NDgpCisqIEZpeGVkIHN0ZHtvdXQsZXJyfSByZWRpcmVjdGlvbiBmb3IgZmFpbGluZyB0ZXN0ICgjMTUxNCwgIzE1MjUpCisgICogU29tZWhvdywgdGhpcyBidWcgaGFzIGJlZW4gcHJlc2VudCBmb3Igd2VsbCBvdmVyIGEgeWVhciBiZWZvcmUgaXQgd2FzIHJlcG9ydGVkCisKKworIyMjIENvbnRyaWIKKyogYFBhcnNlQW5kQWRkQ2F0Y2hUZXN0c2Agbm93IHByb3Blcmx5IGVzY2FwZXMgY29tbWFzIGluIHRoZSB0ZXN0IG5hbWUKKworCisKKyMjIDIuNi4xCisKKyMjIyBJbXByb3ZlbWVudHMKKyogVGhlIEpVbml0IHJlcG9ydGVyIG5vdyBhbHNvIHJlcG9ydHMgcmFuZG9tIHNlZWQgKCMxNTIwLCAjMTUyMSkKKworIyMjIEZpeGVzCisqIFRoZSBUQVAgcmVwb3J0ZXIgbm93IGZvcm1hdHMgY29tbWVudHMgd2l0aCB0ZXN0IG5hbWUgcHJvcGVybHkgKCMxNTI5KQorKiBgQ0FUQ0hfUkVRVUlSRV9USFJPV1NgJ3MgaW50ZXJuYWxzIHdlcmUgdW5pZmllZCB3aXRoIGBSRVFVSVJFX1RIUk9XU2AgKCMxNTM2KQorICAqIFRoaXMgZml4ZXMgYSBwb3RlbnRpYWwgYC1XdW51c2VkLXZhbHVlYCB3YXJuaW5nIHdoZW4gdXNlZAorKiBGaXhlZCBhIHBvdGVudGlhbCBzZWdmYXVsdCB3aGVuIHVzaW5nIGFueSBvZiB0aGUgYC0tbGlzdC0qYCBvcHRpb25zICgjMTUzMywgIzE1MzQpCisKKworIyMgMi42LjAKKworKipXaXRoIHRoaXMgcmVsZWFzZSB0aGUgZGF0YSBnZW5lcmF0b3IgZmVhdHVyZSBpcyBub3cgZnVsbHkgc3VwcG9ydGVkLioqCisKKworIyMjIEltcHJvdmVtZW50cworKiBBZGRlZCBgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VgICgjMTQ1NCwgIzE0NjgpCisgICogVGhpcyBhbGxvd3MgeW91IHRvIGVhc2lseSB0ZXN0IHZhcmlvdXMgdHlwZSBjb21iaW5hdGlvbnMsIHNlZSBkb2N1bWVudGF0aW9uIGZvciBkZXRhaWxzCisqIFRoZSBlcnJvciBtZXNzYWdlIGZvciBgJiZgIGFuZCBgfHxgIGluc2lkZSBhc3NlcnRpb25zIGhhcyBiZWVuIGltcHJvdmVkICgjMTI3MywgIzE0ODApCisqIFRoZSBlcnJvciBtZXNzYWdlIGZvciBjaGFpbmVkIGNvbXBhcmlzb25zIGluc2lkZSBhc3NlcnRpb25zIGhhcyBiZWVuIGltcHJvdmVkICgjMTQ4MSkKKyogQWRkZWQgYFN0cmluZ01ha2VyYCBzcGVjaWFsaXphdGlvbiBmb3IgYHN0ZDo6b3B0aW9uYWxgICgjMTUxMCkKKyogVGhlIGdlbmVyYXRvciBpbnRlcmZhY2UgaGFzIGJlZW4gcmVkb25lIG9uY2UgYWdhaW4gKCMxNTE2KQorICAqIEl0IGlzIG5vIGxvbmdlciBjb25zaWRlcmVkIGV4cGVyaW1lbnRhbCBhbmQgaXMgZnVsbHkgc3VwcG9ydGVkCisgICogVGhlIG5ldyBpbnRlcmZhY2Ugc3VwcG9ydHMgIklucHV0IiBnZW5lcmF0b3JzCisgICogVGhlIGdlbmVyYXRvciBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIGZ1bGx5IHVwZGF0ZWQKKyAgKiBXZSBhbHNvIGFkZGVkIDIgZ2VuZXJhdG9yIGV4YW1wbGVzCisKKworIyMjIEZpeGVzCisqIEZpeGVkIGAtV3JlZHVuZGFudC1tb3ZlYCBvbiBuZXdlciBDbGFuZyAoIzE0NzQpCisqIFJlbW92ZWQgdW5yZWFjaGFibGUgbWVudGlvbnMgYHN0ZDo6Y3VycmVudF9leGNlcHRpb25gLCBgc3RkOjpyZXRocm93X2V4Y2VwdGlvbmAgaW4gbm8tZXhjZXB0aW9ucyBtb2RlICgjMTQ2MikKKyAgKiBUaGlzIHNob3VsZCBmaXggY29tcGlsYXRpb24gd2l0aCBJQVIKKyogRml4ZWQgbWlzc2luZyBgPHR5cGVfdHJhaXRzPmAgaW5jbHVkZSAoIzE0OTQpCisqIEZpeGVkIHZhcmlvdXMgc3RhdGljIGFuYWx5c2lzIHdhcm5pbmdzCisgICogVW5yZXN0b3JlZCBzdHJlYW0gc3RhdGUgaW4gYFhtbFdyaXRlcmAgKCMxNDg5KQorICAqIFBvdGVudGlhbCBkaXZpc2lvbiBieSB6ZXJvIGluIGBlc3RpbWF0ZUNsb2NrUmVzb2x1dGlvbmAgKCMxNDkwKQorICAqIFVuaW5pdGlhbGl6ZWQgbWVtYmVyIGluIGBSdW5Db250ZXh0YCAoIzE0OTEpCisgICogYFNvdXJjZUxpbmVJbmZvYCBtb3ZlIG9wcyBhcmUgbm93IG1hcmtlZCBgbm9leGNlcHRgCisgICogYENBVENIX0JSRUFLX0lOVE9fREVCVUdHRVJgIGlzIG5vdyBhbHdheXMgYSBmdW5jdGlvbgorKiBGaXggZG91YmxlIHJ1biBvZiBhIHRlc3QgY2FzZSBpZiB1c2VyIGFza3MgZm9yIGEgc3BlY2lmaWMgc2VjdGlvbiAoIzEzOTQsICMxNDkyKQorKiBBTlNJIGNvbG91ciBjb2RlIG91dHB1dCBub3cgcmVzcGVjdHMgYC1vYCBmbGFnIGFuZCB3cml0ZXMgdG8gdGhlIGZpbGUgYXMgd2VsbCAoIzE1MDIpCisqIEZpeGVkIGRldGVjdGlvbiBvZiBgc3RkOjp2YXJpYW50YCBzdXBwb3J0IGZvciBjb21waWxlcnMgb3RoZXIgdGhhbiBDbGFuZyAoIzE1MTEpCisKKworIyMjIENvbnRyaWIKKyogYFBhcnNlQW5kQWRkQ2F0Y2hUZXN0c2AgaGFzIGxlYXJuZWQgaG93IHRvIHVzZSBgRElTQUJMRURgIENUZXN0IHByb3BlcnR5ICgjMTQ1MikKKyogYFBhcnNlQW5kQWRkQ2F0Y2hUZXN0c2Agbm93IHdvcmtzIHdoZW4gdGhlcmUgaXMgYSB3aGl0c3BhY2UgYmVmb3JlIHRoZSB0ZXN0IG5hbWUgKCMxNDkzKQorCisKKyMjIyBNaXNjZWxsYW5lb3VzCisqIFdlIGFkZGVkIG5ldyBpc3N1ZSB0ZW1wbGF0ZXMgZm9yIHJlcG9ydGluZyBpc3N1ZXMgb24gR2l0SHViCisqIGBjb250cmlidXRpbmcubWRgIGhhcyBiZWVuIHVwZGF0ZWQgdG8gcmVmbGVjdCB0aGUgY3VycmVudCB0ZXN0IHN0YXR1cyAoIzE0ODQpCisKKworCisjIyAyLjUuMAorCisjIyMgSW1wcm92ZW1lbnRzCisqIEFkZGVkIHN1cHBvcnQgZm9yIHRlbXBsYXRlZCB0ZXN0cyB2aWEgYFRFTVBMQVRFX1RFU1RfQ0FTRWAgKCMxNDM3KQorCisKKyMjIyBGaXhlcworKiBGaXhlZCBjb21waWxhdGlvbiBvZiBgUHJlZGljYXRlTWF0Y2hlcjxjb25zdCBjaGFyKj5gIGJ5IHJlbW92aW5nIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2YgYE1hdGNoZXJNZXRob2Q8VCo+YAorKiBMaXN0ZW5lcnMgbm93IGltcGxpY2l0bHkgc3VwcG9ydCBhbnkgdmVyYm9zaXR5ICgjMTQyNikKKyogRml4ZWQgY29tcGlsYXRpb24gd2l0aCBFbWJhcmNhZGVybyBidWlsZGVyIGJ5IGludHJvZHVjaW5nIGBDYXRjaDo6aXNuYW5gIHBvbHlmaWxsICgjMTQzOCkKKyogRml4ZWQgYENBUFRVUkVgIGFzc2VydGluZyBmb3Igbm9uLXRyaXZpYWwgY2FwdHVyZXMgKCMxNDM2LCAjMTQ0OCkKKworCisjIyMgTWlzY2VsbGFuZW91cworKiBXZSBzaG91bGQgbm93IGJlIHByb3ZpZGluZyBmaXJzdCBwYXJ0eSBDb25hbiBzdXBwb3J0IHZpYSBodHRwczovL2JpbnRyYXkuY29tL2NhdGNob3JnL0NhdGNoMiAoIzE0NDMpCisqIEFkZGVkIG5ldyBzZWN0aW9uICJkZXByZWNhdGlvbnMgYW5kIHBsYW5uZWQgY2hhbmdlcyIgdG8gdGhlIGRvY3VtZW50YXRpb24KKyAgKiBJdCBjb250YWlucyBzdW1tYXJ5IG9mIHdoYXQgaXMgZGVwcmVjYXRlZCBhbmQgbWlnaHQgY2hhbmdlIHdpdGggbmV4dCBtYWpvciB2ZXJzaW9uCisqIEZyb20gdGhpcyByZWxlYXNlIGZvcndhcmQsIHRoZSByZWxlYXNlZCBoZWFkZXJzIHNob3VsZCBiZSBwZ3Agc2lnbmVkICgjNDMwKQorICAqIEtleUlEIGBFMjlDIDQ2RjMgQjhBNyA1MDI4IDYwNzkgM0I3RCBFQ0M5IEMyMEUgMzE0QiAyMzYwYAorICAqIG9yIGh0dHBzOi8vY29kaW5nbmVzdC5jb20vZmlsZXMvaG9yZW5tYXItcHVibGlja2V5LmFzYworCisKKyMjIDIuNC4yCisKKyMjIyBJbXByb3ZlbWVudHMKKyogWG1sUmVwb3J0ZXIgbm93IGFsc28gb3V0cHV0cyB0aGUgUk5HIHNlZWQgdGhhdCB3YXMgdXNlZCBpbiBhIHJ1biAoIzE0MDQpCisqIGBDYXRjaDo6U2Vzc2lvbjo6YXBwbHlDb21tYW5kTGluZWAgbm93IGFsc28gYWNjZXB0cyBgd2NoYXJfdGAgYXJndW1lbnRzLgorICAqIEhvd2V2ZXIsIENhdGNoMiBzdGlsbCBkb2VzIG5vdCBzdXBwb3J0IHVuaWNvZGUuCisqIEFkZGVkIGBTVEFUSUNfUkVRVUlSRWAgbWFjcm8gKCMxMzU2LCAjMTM2MikKKyogQ2F0Y2gyJ3Mgc2luZ2xldG9uJ3MgYXJlIG5vdyBjbGVhbmVkIHVwIGV2ZW4gaWYgdGVzdHMgYXJlIHJ1biAoIzE0MTEpCisgICogVGhpcyBpcyBtb3N0bHkgdXNlZnVsIGFzIGEgRlAgcHJldmVudGlvbiBmb3IgdXNlcnMgd2hvIGRlZmluZSB0aGVpciBvd24gbWFpbi4KKyogU3BlY2lmeWluZyBhbiBpbnZhbGlkIHJlcG9ydGVyIHZpYSBgLXJgIGlzIG5vdyByZXBvcnRlZCBzb29uZXIgKCMxMzUxLCAjMTQyMikKKworCisjIyMgRml4ZXMKKyogU3RyaW5naWZpY2F0aW9uIG5vIGxvbmdlciBhc3N1bWVzIHRoYXQgYGNoYXJgIGlzIHNpZ25lZCAoIzEzOTksICMxNDA3KQorICAqIFRoaXMgY2F1c2VkIGEgYFd0YXV0b2xvZ2ljYWwtY29tcGFyZWAgd2FybmluZy4KKyogU0ZJTkFFIGZvciBgb3BlcmF0b3I8PGAgbm8gbG9uZ2VyIHNlZXMgZGlmZmVyZW50IG92ZXJsb2FkIHNldCB0aGFuIHRoZSBhY3R1YWwgaW5zZXJ0aW9uICgjMTQwMykKKworCisjIyMgQ29udHJpYgorKiBgY2F0Y2hfZGlzY292ZXJfdGVzdHNgIGNvcnJlY3RseSBhZGRzIHRlc3RzIHdpdGggY29tbWEgaW4gbmFtZSAoIzEzMjcsICMxNDA5KQorKiBBZGRlZCBhIG5ldyBjdXN0b21pemF0aW9uIHBvaW50IGluIGhvdyB0aGUgdGVzdHMgYXJlIGxhdW5jaGVkIHRvIGBjYXRjaF9kaXNjb3Zlcl90ZXN0c2AKKworCisjIyAyLjQuMQorCisjIyMgSW1wcm92ZW1lbnRzCisqIEFkZGVkIGEgU3RyaW5nTWFrZXIgZm9yIGBzdGQ6Oih3KXN0cmluZ192aWV3YCAoIzEzNzUsICMxMzc2KQorKiBBZGRlZCBhIFN0cmluZ01ha2VyIGZvciBgc3RkOjp2YXJpYW50YCAoIzEzODApCisgICogVGhpcyBvbmUgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCB0byBhdm9pZCBpbmNyZWFzZWQgY29tcGlsZS10aW1lIGRyYWcKKyogQWRkZWQgZGV0ZWN0aW9uIGZvciBjeWd3aW4gZW52aXJvbm1lbnQgd2l0aG91dCBgc3RkOjp0b19zdHJpbmdgICgjMTM5NiwgIzEzOTcpCisKKyMjIyBGaXhlcworKiBgVW5vcmRlcmVkRXF1YWxzTWF0Y2hlcmAgd2lsbCBubyBsb25nZXIgYWNjZXB0IGVycm9uZW91c2x5IGFjY2VwdAordmVjdG9ycyB0aGF0IHNoYXJlIHN1ZmZpeCwgYnV0IGFyZSBub3QgcGVybXV0YXRpb24gb2YgdGhlIGRlc2lyZWQgdmVjdG9yCisqIEFib3J0IGFmdGVyIChgLXggTmApIGNhbiBubyBsb25nZXIgYmUgb3ZlcnNob3QgYnkgbmVzdGVkIGBSRVFVSVJFU2AgYW5kCitzdWJzZXF1ZW50bHkgaWdub3JlZCAoIzEzOTEsICMxMzkyKQorCisKKyMjIDIuNC4wCisKKyoqVGhpcyByZWxlYXNlIGJyaW5ncyB0d28gbmV3IGV4cGVyaW1lbnRhbCBmZWF0dXJlcywgZ2VuZXJhdG9yIHN1cHBvcnQKK2FuZCBhIGAtZm5vLWV4Y2VwdGlvbnNgIHN1cHBvcnQuIEJlaW5nIGV4cGVyaW1lbnRhbCBtZWFucyB0aGF0IHRoZXkKK3dpbGwgbm90IGJlIHN1YmplY3QgdG8gdGhlIHVzdWFsIHN0YWJpbGl0eSBndWFyYW50ZWVzIHByb3ZpZGVkIGJ5IHNlbXZlci4qKgorCisjIyMgSW1wcm92ZW1lbnRzCisqIFZhcmlvdXMgc21hbGwgcnVudGltZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHMKKyogYENBUFRVUkVgIG1hY3JvIGlzIG5vdyB2YXJpYWRpYworKiBBZGRlZCBgQU5EX0dJVkVOYCBtYWNybyAoIzEzNjApCisqIEFkZGVkIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBkYXRhIGdlbmVyYXRvcnMKKyAgKiBTZWUgW3RoZWlyIGRvY3VtZW50YXRpb25dKGdlbmVyYXRvcnMubWQpIGZvciBkZXRhaWxzCisqIEFkZGVkIHN1cHBvcnQgZm9yIGNvbXBpbGluZyBhbmQgcnVubmluZyBDYXRjaCB3aXRob3V0IGV4Y2VwdGlvbnMKKyAgKiBEb2luZyBzbyBsaW1pdHMgdGhlIGZ1bmN0aW9uYWxpdHkgc29tZXdoYXQKKyAgKiBMb29rIFtpbnRvIHRoZSBkb2N1bWVudGF0aW9uXShjb25maWd1cmF0aW9uLm1kI2Rpc2FibGluZ2V4Y2VwdGlvbnMpIGZvciBkZXRhaWxzCisKKyMjIyBGaXhlcworKiBTdXBwcmVzc2VkIGAtV25vbi12aXJ0dWFsLWR0b3JgIHdhcm5pbmdzIGluIE1hdGNoZXJzICgjMTM1NykKKyogU3VwcHJlc3NlZCBgLVd1bnJlYWNoYWJsZS1jb2RlYCB3YXJuaW5ncyBpbiBmbG9hdGluZyBwb2ludCBtYXRjaGVycyAoIzEzNTApCisKKyMjIyBDTWFrZQorKiBJdCBpcyBub3cgcG9zc2libGUgdG8gb3ZlcnJpZGUgd2hpY2ggUHl0aG9uIGlzIHVzZWQgdG8gcnVuIENhdGNoJ3MgdGVzdHMgKCMxMzY1KQorKiBDYXRjaCBub3cgcHJvdmlkZXMgaW5mcmFzdHJ1Y3R1cmUgZm9yIGFkZGluZyB0ZXN0cyB0aGF0IGNoZWNrIGNvbXBpbGUtdGltZSBjb25maWd1cmF0aW9uCisqIENhdGNoIG5vIGxvbmdlciB0cmllcyB0byBpbnN0YWxsIGl0c2VsZiB3aGVuIHVzZWQgYXMgYSBzdWJwcm9qZWN0ICgjMTM3MykKKyogQ2F0Y2gyQ29uZmlnVmVyc2lvbi5jbWFrZSBpcyBub3cgZ2VuZXJhdGVkIGFzIGFyY2gtaW5kZXBlbmRlbnQgKCMxMzY4KQorICAqIFRoaXMgbWVhbnMgdGhhdCBpbnN0YWxsaW5nIENhdGNoIGZyb20gMzItYml0IG1hY2hpbmUgYW5kIGNvcHlpbmcgaXQgdG8gNjQtYml0IG9uZSB3b3JrcworICAqIFRoaXMgZml4ZXMgY29uYW4gaW5zdGFsbGF0aW9uIG9mIENhdGNoCisKKworIyMgMi4zLjAKKworKipUaGlzIHJlbGVhc2UgY2hhbmdlcyB0aGUgaW5jbHVkZSBwYXRocyBwcm92aWRlZCBieSBvdXIgQ01ha2UgYW5kCitwa2ctY29uZmlnIGludGVncmF0aW9uLiBUaGUgcHJvcGVyIGluY2x1ZGUgcGF0aCBmb3IgdGhlIHNpbmdsZS1oZWFkZXIKK3doZW4gdXNpbmcgb25lIG9mIHRoZSBhYm92ZSBpcyBub3cgYDxjYXRjaDIvY2F0Y2guaHBwPmAuIFRoaXMgY2hhbmdlCithbHNvIG5lY2Vzc2l0YXRlZCBjaGFuZ2VzIHRvIHBhdGhzIGluc2lkZSB0aGUgcmVwb3NpdG9yeSwgc28gdGhhdCB0aGUKK3NpbmdsZS1oZWFkZXIgdmVyc2lvbiBpcyBub3cgYXQgYHNpbmdsZV9pbmNsdWRlL2NhdGNoMi9jYXRjaC5ocHBgLCByYXRoZXIKK3RoYW4gYHNpbmdsZV9pbmNsdWRlL2NhdGNoLmhwcGAuKioKKworCisKKyMjIyBGaXhlcworKiBGaXhlZCBPYmplY3RpdmUtQysrIGJ1aWxkCisqIGAtV3VudXNlZC12YXJpYWJsZWAgc3VwcHJlc3Npb24gbm8gbG9uZ2VyIGxlYWtzIGZyb20gQ2F0Y2gncyBoZWFkZXIgdW5kZXIgQ2xhbmcKKyogSW1wbGVtZW50YXRpb24gb2YgdGhlIGV4cGVyaW1lbnRhbCBuZXcgb3V0cHV0IGNhcHR1cmUgY2FuIG5vdyBiZSBkaXNhYmxlZCAoIzEzMzUpCisgICogVGhpcyBhbGxvd3MgYnVpbGRpbmcgQ2F0Y2gyIG9uIHBsYXRmb3JtcyB0aGF0IGRvIG5vdCBwcm92aWRlIHRoaW5ncyBsaWtlIGBkdXBgIG9yIGB0bXBmaWxlYC4KKyogVGhlIEpVbml0IGFuZCBYTUwgcmVwb3J0ZXJzIHdpbGwgbm8gbG9uZ2VyIHNraXAgb3ZlciBzdWNjZXNzZnVsIHRlc3RzIHdoZW4gcnVubmluZyB3aXRob3V0IGAtc2AgICgjMTI2NCwgIzEyNjcsICMxMzEwKQorICAqIFNlZSBpbXByb3ZlbWVudHMgZm9yIG1vcmUgZGV0YWlscworCisjIyMgSW1wcm92ZW1lbnRzCisqIHBrZy1jb25maWcgYW5kIENNYWtlIGludGVncmF0aW9uIGhhcyBiZWVuIHJld3JpdHRlbgorICAqIElmIHlvdSB1c2UgdGhlbSwgdGhlIG5ldyBpbmNsdWRlIHBhdGggaXMgYCNpbmNsdWRlIDxjYXRjaDIvY2F0Y2guaHBwPmAKKyAgKiBDTWFrZSBpbnN0YWxsYXRpb24gbm93IGFsc28gaW5zdGFsbHMgc2NyaXB0cyBmcm9tIGBjb250cmliL2AKKyAgKiBGb3IgZGV0YWlscyBzZWUgdGhlIFtuZXcgZG9jdW1lbnRhdGlvbl0oY21ha2UtaW50ZWdyYXRpb24ubWQjdG9wKQorKiBSZXBvcnRlcnMgbm93IGhhdmUgYSBuZXcgY3VzdG9taXphdGlvbiBwb2ludCwgYFJlcG9ydGVyUHJlZmVyZW5jZXM6OnNob3VsZFJlcG9ydEFsbEFzc2VydGlvbnNgCisgICogV2hlbiB0aGlzIGlzIHNldCB0byBgZmFsc2VgIGFuZCB0aGUgdGVzdHMgYXJlIHJ1biB3aXRob3V0IGAtc2AsIHBhc3NpbmcgYXNzZXJ0aW9ucyBhcmUgbm90IHNlbnQgdG8gdGhlIHJlcG9ydGVyLgorICAqIERlZmF1bHRzIHRvIGBmYWxzZWAuCisqIEFkZGVkIGBEWU5BTUlDX1NFQ1RJT05gLCBhIHNlY3Rpb24gdmFyaWFudCB0aGF0IGNvbnN0cnVjdHMgaXRzIG5hbWUgdXNpbmcgc3RyZWFtCisgICogVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gZG8gYERZTkFNSUNfU0VDVElPTigiRm9yIFggOj0gIiA8PCB4KWAuCisKKworIyMgMi4yLjMKKworKipUbyBmaXggc29tZSBvZiB0aGUgYnVncywgc29tZSBiZWhhdmlvciBoYWQgdG8gY2hhbmdlIGluIHBvdGVudGlhbGx5IGJyZWFraW5nIG1hbm5lci4qKgorKipUaGlzIG1lYW5zIHRoYXQgZXZlbiB0aG91Z2ggdGhpcyBpcyBhIHBhdGNoIHJlbGVhc2UsIGl0IG1pZ2h0IG5vdCBiZSBhIGRyb3AtaW4gcmVwbGFjZW1lbnQuKioKKworIyMjIEZpeGVzCisqIExpc3RlbmVycyBhcmUgbm93IGNhbGxlZCBiZWZvcmUgcmVwb3J0ZXIKKyAgKiBUaGlzIHdhcyBhbHdheXMgZG9jdW1lbnRlZCB0byBiZSB0aGUgY2FzZSwgbm93IGl0IGFjdHVhbGx5IHdvcmtzIHRoYXQgd2F5CisqIENhdGNoJ3MgY29tbWFuZGxpbmUgd2lsbCBubyBsb25nZXIgYWNjZXB0IG11bHRpcGxlIHJlcG9ydGVycworICAqIFRoaXMgd2FzIGRvbmUgYmVjYXVzZSBtdWx0aXBsZSByZXBvcnRlcnMgbmV2ZXIgd29ya2VkIHByb3Blcmx5IGFuZCBicm9rZSB0aGluZ3MgaW4gbm9uLW9idmlvdXMgd2F5cworICAqICoqVGhpcyBoYXMgcG90ZW50aWFsIHRvIGJlIGEgYnJlYWtpbmcgY2hhbmdlKioKKyogTWluR1cgaXMgbm93IGRldGVjdGVkIGFzIFdpbmRvd3MgcGxhdGZvcm0gdy9vIFNFSCBzdXBwb3J0ICgjMTI1NykKKyAgKiBUaGlzIG1lYW5zIHRoYXQgQ2F0Y2gyIG5vIGxvbmdlciB0cmllcyB0byB1c2UgUE9TSVggc2lnbmFsIGhhbmRsaW5nIHdoZW4gY29tcGlsZWQgd2l0aCBNaW5HVworKiBGaXhlZCBwb3RlbnRpYWwgVUIgaW4gcGFyc2luZyB0YWdzIHVzaW5nIG5vbi1BU0NJSSBjaGFyYWN0ZXJzICgjMTI2NikKKyAgKiBOb3RlIHRoYXQgQ2F0Y2gyIHN0aWxsIHN1cHBvcnRzIG9ubHkgQVNDSUkgdGVzdCBuYW1lcy90YWdzL2V0YworKiBgVEVTVF9DQVNFX01FVEhPRGAgY2FuIG5vdyBiZSB1c2VkIG9uIGNsYXNzbmFtZXMgY29udGFpbmluZyBjb21tYXMgKCMxMjQ1KQorICAqIFlvdSBoYXZlIHRvIGVuY2xvc2UgdGhlIGNsYXNzbmFtZSBpbiBleHRyYSBzZXQgb2YgcGFyZW50aGVzZXMKKyogRml4ZWQgaW5zdWZmaWNpZW50IGFsdCBzdGFjayBzaXplIGZvciBQT1NJWCBzaWduYWwgaGFuZGxpbmcgKCMxMjI1KQorKiBGaXhlZCBjb21waWxhdGlvbiBlcnJvciBvbiBBbmRyb2lkIGR1ZSB0byBtaXNzaW5nIGBzdGQ6OnRvX3N0cmluZ2AgaW4gQysrMTEgbW9kZSAoIzEyODApCisqIEZpeGVkIHRoZSBvcmRlciBvZiB1c2VyLXByb3ZpZGVkIGBGQUxMQkFDS19TVFJJTkdJRklFUmAgaW4gc3RyaW5naWZpY2F0aW9uIG1hY2hpbmVyeSAoIzEwMjQpCisgICogSXQgd2FzIGludGVuZGVkIHRvIGJlIHJlcGxhY2VtZW50IGZvciBidWlsdC1pbiBmYWxsYmFja3MsIGJ1dCBpdCB3YXMgdXNlZCBfYWZ0ZXJfIHRoZW0uCisgICogKipUaGlzIGhhcyBwb3RlbnRpYWwgdG8gYmUgYSBicmVha2luZyBjaGFuZ2UqKgorKiBGaXhlZCBjb21waWxhdGlvbiBlcnJvciB3aGVuIGEgdHlwZSBoYXMgYW4gYG9wZXJhdG9yPDxgIHdpdGggdGVtcGxhdGVkIGxocyAoIzEyODUsICMxMzA2KQorCisjIyMgSW1wcm92ZW1lbnRzCisqIEFkZGVkIGEgbmV3LCBleHBlcmltZW50YWwsIG91dHB1dCBjYXB0dXJlICgjMTI0MykKKyAgKiBUaGlzIGNhcHR1cmUgY2FuIGFsc28gcmVkaXJlY3Qgb3V0cHV0IHdyaXR0ZW4gdmlhIEMgYXBpcywgZS5nLiBgcHJpbnRmYAorICAqIFRvIG9wdC1pbiwgZGVmaW5lIGBDQVRDSF9DT05GSUdfRVhQRVJJTUVOVEFMX1JFRElSRUNUYCBpbiB0aGUgaW1wbGVtZW50YXRpb24gZmlsZQorKiBBZGRlZCBhIG5ldyBmYWxsYmFjayBzdHJpbmdpZmllciBmb3IgY2xhc3NlcyBkZXJpdmVkIGZyb20gYHN0ZDo6ZXhjZXB0aW9uYAorICAqIEJvdGggYFN0cmluZ01ha2VyYCBzcGVjaWFsaXphdGlvbiBhbmQgYG9wZXJhdG9yPDxgIG92ZXJsb2FkIGFyZSBnaXZlbiBwcmlvcml0eQorCisjIyMgTWlzY2VsbGFuZW91cworKiBgY29udHJpYi9gIG5vdyBjb250YWlucyBkYmcgc2NyaXB0cyB0aGF0IHNraXAgb3ZlciBDYXRjaCdzIGludGVybmFscyAoIzkwNCwgIzEyODMpCisgICogYGdkYmluaXRgIGZvciBnZGIgYGxsZGJpbml0YCBmb3IgbGxkYgorKiBgQ2F0Y2hBZGRUZXN0cy5jbWFrZWAgbm8gbG9uZ2VyIHN0cmlwcyB3aGl0ZXNwYWNlIGZyb20gdGVzdHMgKCMxMjY1LCAjMTI4MSkKKyogT25saW5lIGRvY3VtZW50YXRpb24gbm93IGRlc2NyaWJlcyBgLS11c2UtY29sb3VyYCBvcHRpb24gKCMxMjYzKQorCisKKyMjIDIuMi4yCisKKyMjIyBGaXhlcworKiBGaXhlZCBidWcgaW4gYFdpdGhpbkFiczo6bWF0Y2goKWAgZmFpbGluZyBzcHVyaW91c2x5ICgjMTIyOCkKKyogRml4ZWQgY2xhbmctdGlkeSBkaWFnbm9zdGljIGFib3V0IHZpcnR1YWwgY2FsbCBpbiBkZXN0cnVjdG9yICgjMTIyNikKKyogUmVkdWNlZCB0aGUgbnVtYmVyIG9mIEdDQyB3YXJuaW5ncyBzdXBwcmVzc2lvbiBsZWFraW5nIG91dCBvZiB0aGUgaGVhZGVyICgjMTA5MCwgIzEwOTEpCisgICogT25seSBgLVdwYXJlbnRoZXNlc2Agc2hvdWxkIGJlIGxlYWtpbmcgbm93CisqIEFkZGVkIHVwcGVyIGJvdW5kIG9uIHRoZSB0aW1lIGJlbmNobWFyayB0aW1lciBjYWxpYnJhdGlvbiBpcyBhbGxvd2VkIHRvIHRha2UgKCMxMjM3KQorICAqIE9uIHBsYXRmb3JtcyB3aGVyZSBgc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9ja2AncyByZXNvbHV0aW9uIGlzIGxvdywgdGhlIGNhbGlicmF0aW9uIHdvdWxkIGFwcGVhciBzdHVjaworKiBGaXhlZCBjb21waWxhdGlvbiBlcnJvciB3aGVuIHN0cmluZ2lmeWluZyBzdGF0aWMgYXJyYXlzIG9mIGB1bnNpZ25lZCBjaGFyYHMgKCMxMjM4KQorCisjIyMgSW1wcm92ZW1lbnRzCisqIFhNTCBlbmNvZGVyIG5vdyBoZXgtZW5jb2RlcyBpbnZhbGlkIFVURi04IHNlcXVlbmNlcyAoIzEyMDcpCisgICogVGhpcyBhZmZlY3RzIHhtbCBhbmQganVuaXQgcmVwb3J0ZXJzCisgICogU29tZSBpbnZhbGlkIFVURi04IHBhcnRzIGFyZSBsZWZ0IGFzIGlzLCBlLmcuIHN1cnJvZ2F0ZSBwYWlycy4gVGhpcyBpcyBiZWNhdXNlIGNlcnRhaW4gZXh0ZW5zaW9ucyBvZiBVVEYtOCBhbGxvdyB0aGVtLCBzdWNoIGFzIFdURi04LgorKiBDTFIgb2JqZWN0cyAoYFReYCkgY2FuIG5vdyBiZSBzdHJpbmdpZmllZCAoIzEyMTYpCisgICogVGhpcyBhZmZlY3RzIGNvZGUgY29tcGlsZWQgYXMgQysrL0NMSQorKiBBZGRlZCBgUHJlZGljYXRlTWF0Y2hlcmAsIGEgbWF0Y2hlciB0aGF0IHRha2VzIGFuIGFyYml0cmFyeSBwcmVkaWNhdGUgZnVuY3Rpb24gKCMxMjM2KQorICAqIFNlZSBbZG9jdW1lbnRhdGlvbiBmb3IgZGV0YWlsc10oaHR0cHM6Ly9naXRodWIuY29tL2NhdGNob3JnL0NhdGNoMi9ibG9iL21hc3Rlci9kb2NzL21hdGNoZXJzLm1kKQorCisjIyMgT3RoZXJzCisqIE1vZGlmaWVkIENNYWtlLWluc3RhbGxlZCBwa2ctY29uZmlnIHRvIGFsbG93IGAjaW5jbHVkZSA8Y2F0Y2guaHBwPmAoIzEyMzkpCisgICogVGhlIHBsYW5zIHRvIHN0YW5kYXJkaXplIG9uIGAjaW5jbHVkZSA8Y2F0Y2gyL2NhdGNoLmhwcD5gIGFyZSBzdGlsbCBpbiBlZmZlY3QKKworCisjIyAyLjIuMQorCisjIyMgRml4ZXMKKyogRml4ZWQgY29tcGlsYXRpb24gZXJyb3Igd2hlbiBjb21waWxpbmcgQ2F0Y2gyIHdpdGggYHN0ZD1jKysxN2AgYWdhaW5zdCBsaWJjKysgKCMxMjE0KQorICAqIENsYXJhIChDYXRjaDIncyBDTEkgcGFyc2luZyBsaWJyYXJ5KSB1c2VkIGBzdGQ6Om9wdGlvbmFsYCB3aXRob3V0IGluY2x1ZGluZyBpdCBleHBsaWNpdGx5CisqIEZpeGVkIENhdGNoMiByZXR1cm4gY29kZSBhbHdheXMgYmVpbmcgMCAoIzEyMTUpCisgICogSW4gdGhlIHdvcmRzIG9mIFNUTCwgIldlIGZlZWwgc3VwZXJiYWQgYWJvdXQgbGV0dGluZyB0aGlzIGluIgorCisKKyMjIDIuMi4wCisKKyMjIyBGaXhlcworKiBIaWRkZW4gdGVzdHMgYXJlIG5vdCBsaXN0ZWQgYnkgZGVmYXVsdCB3aGVuIGxpc3RpbmcgdGVzdHMgKCMxMTc1KQorICAqIFRoaXMgbWFrZXMgYGNhdGNoX2Rpc2NvdmVyX3Rlc3RzYCBDTWFrZSBzY3JpcHQgd29yayBiZXR0ZXIKKyogRml4ZWQgcmVncmVzc2lvbiB0aGF0IG1lYW50IGA8d2luZG93cy5oPmAgY291bGQgcG90ZW50aWFsbHkgbm90IGJlIGluY2x1ZGVkIHByb3Blcmx5ICgjMTE5NykKKyogRml4ZWQgaW5zdGFsbGluZyBgQ2F0Y2gyQ29uZmlnVmVyc2lvbi5jbWFrZWAgd2hlbiBDYXRjaDIgaXMgYSBzdWJwcm9qZWN0LgorCisjIyMgSW1wcm92ZW1lbnRzCisqIEFkZGVkIGFuIG9wdGlvbiB0byB3YXJuICgrIGV4aXQgd2l0aCBlcnJvcikgd2hlbiBubyB0ZXN0cyB3ZXJlIHJhbiAoIzExNTgpCisgICogVXNlIGFzIGAtdyBOb1Rlc3RzYAorKiBBZGRlZCBwcm92aXNpb25hbCBzdXBwb3J0IGZvciBFbXNjcmlwdGVuICgjMTExNCkKKyogW0FkZGVkIGEgd2F5IHRvIG92ZXJyaWRlIHRoZSBmYWxsYmFjayBzdHJpbmdpZmllcl0oaHR0cHM6Ly9naXRodWIuY29tL2NhdGNob3JnL0NhdGNoMi9ibG9iL21hc3Rlci9kb2NzL2NvbmZpZ3VyYXRpb24ubWQjZmFsbGJhY2stc3RyaW5naWZpZXIpICgjMTAyNCkKKyAgKiBUaGlzIGFsbG93cyBwcm9qZWN0J3Mgb3duIHN0cmluZ2lmaWNhdGlvbiBtYWNoaW5lcnkgdG8gYmUgZWFzaWx5IHJldXNlZCBmb3IgQ2F0Y2gKKyogYENhdGNoOjpTZXNzaW9uOjpydW4oKWAgbm93IGFjY2VwdHMgYGNoYXIgY29uc3QgKiBjb25zdCAqYCwgYWxsb3dpbmcgaXQgdG8gYWNjZXB0IGFycmF5IG9mIHN0cmluZyBsaXRlcmFscyAoIzEwMzEsICMxMTc4KQorICAqIFRoZSBlbWJlZGRlZCB2ZXJzaW9uIG9mIENsYXJhIHdhcyBidW1wZWQgdG8gdjEuMS4zCisqIFZhcmlvdXMgbWlub3IgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzCisqIEFkZGVkIHN1cHBvcnQgZm9yIERKR1BQIERPUyBjcm9zc2NvbXBpbGVyICgjMTIwNikKKworCisjIyAyLjEuMgorCisjIyMgRml4ZXMKKyogRml4ZWQgY29tcGlsYXRpb24gZXJyb3Igd2l0aCBgLWZuby1ydHRpYCAoIzExNjUpCisqIEZpeGVkIE5vQXNzZXJ0aW9uIHdhcm5pbmdzCisqIGBvcGVyYXRvcjw8YCBpcyB1c2VkIGJlZm9yZSByYW5nZS1iYXNlZCBzdHJpbmdpZmljYXRpb24gKCMxMTcyKQorKiBGaXhlZCBgLVdwZWRhbnRpY2Agd2FybmluZ3MgKGV4dHJhIHNlbWljb2xvbnMgYW5kIGJpbmFyeSBsaXRlcmFscykgKCMxMTczKQorCisKKyMjIyBJbXByb3ZlbWVudHMKKyogQWRkZWQgYENBVENIX1ZFUlNJT05fe01BSk9SLE1JTk9SLFBBVENIfWAgbWFjcm9zICgjMTEzMSkKKyogQWRkZWQgYEJyaWdodFllbGxvd2AgY29sb3VyIGZvciB1c2UgaW4gcmVwb3J0ZXJzICgjOTc5KQorICAqIEl0IGlzIGFsc28gdXNlZCBieSBDb25zb2xlUmVwb3J0ZXIgZm9yIHJlY29uc3RydWN0ZWQgZXhwcmVzc2lvbnMKKworIyMjIE90aGVyIGNoYW5nZXMKKyogQ2F0Y2ggaXMgbm93IGV4cG9ydGVkIGFzIGEgQ01ha2UgcGFja2FnZSBhbmQgbGlua2FibGUgdGFyZ2V0ICgjMTE3MCkKKworIyMgMi4xLjEKKworIyMjIEltcHJvdmVtZW50cwogKiBTdGF0aWMgYXJyYXlzIGFyZSBub3cgcHJvcGVybHkgc3RyaW5naWZpZWQgbGlrZSByYW5nZXMgYWNyb3NzIE1TVkMvR0NDL0NsYW5nCiAqIEVtYmVkZGVkIG5ld2VyIHZlcnNpb24gb2YgQ2xhcmEgLS0gdjEuMS4xCiAgICogVGhpcyBzaG91bGQgZml4IHNvbWUgd2FybmluZ3MgZHJhZ2dlZCBpbiBmcm9tIENsYXJhCiAqIE1TVkMncyBDTFIgZXhjZXB0aW9ucyBhcmUgc3VwcG9ydGVkCiAKIAotIyMgRml4ZXMKKyMjIyBGaXhlcwogKiBGaXhlZCBjb21waWxhdGlvbiB3aGVuIGNvbXBhcmlzb24gb3BlcmF0b3JzIGRvIG5vdCByZXR1cm4gYm9vbCAoIzExNDcpCiAqIEZpeGVkIENMUiBleGNlcHRpb25zIGJsb3dpbmcgdXAgdGhlIGV4ZWN1dGFibGUgZHVyaW5nIHRyYW5zbGF0aW9uICgjMTEzOCkKIAogCi0jIyBPdGhlciBjaGFuZ2VzCisjIyMgT3RoZXIgY2hhbmdlcwogKiBNYW55IENNYWtlIGNoYW5nZXMKICAgKiBgTk9fU0VMRlRFU1RgIG9wdGlvbiBpcyBkZXByZWNhdGVkLCB1c2UgYEJVSUxEX1RFU1RJTkdgIGluc3RlYWQuCiAgICogQ2F0Y2ggc3BlY2lmaWMgQ01ha2Ugb3B0aW9ucyB3ZXJlIHByZWZpeGVkIHdpdGggYENBVENIX2AgZm9yIG5hbWVzcGFjaW5nIHB1cnBvc2VzCkBAIC0yMiw5ICszNjIsOSBAQAogCiAKIAotIyAyLjEuMAorIyMgMi4xLjAKIAotIyMgSW1wcm92ZW1lbnRzCisjIyMgSW1wcm92ZW1lbnRzCiAqIFZhcmlvdXMgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzCiAgICogT24gdG9wIG9mIHRoZSBwZXJmb3JtYW5jZSByZWdyZXNzaW9uIGZpeGVzCiAqIEV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBQQ0ggd2FzIGFkZGVkICgjMTA2MSkKQEAgLTM0LDcgKzM3NCw3IEBACiAgICogQnVncyBpbiBnKysgNC54IGFuZCA1LnggbWVhbiB0aGF0IHNvbWUgb2YgdGhlbSBoYXZlIHRvIGJlIGxlZnQgaW4KIAogCi0jIyBGaXhlcworIyMjIEZpeGVzCiAqIEZpeGVkIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24gZnJvbSBDYXRjaCBjbGFzc2ljCiAgICogT25lIG9mIHRoZSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudCBwYXRjaGVzIGZvciBDYXRjaCBjbGFzc2ljIHdhcyBub3QgYXBwbGllZCB0byBDYXRjaDIKICogRml4ZWQgcGxhdGZvcm0gZGV0ZWN0aW9uIGZvciBpT1MgKCMxMDg0KQpAQCAtNDcsNyArMzg3LDcgQEAKICogRml4ZWQgYHN0ZDo6dW5jYXVnaHRfZXhjZXB0aW9uYCBkZXByZWNhdGlvbiB3YXJuaW5nICgjMTEyNCkKIAogCi0jIyBOZXcgZmVhdHVyZXMKKyMjIyBOZXcgZmVhdHVyZXMKICogTmV3IE1hdGNoZXJzCiAgICogUmVnZXggbWF0Y2hlciBmb3Igc3RyaW5ncywgYE1hdGNoZXNgLgogICAqIFNldC1lcXVhbCBtYXRjaGVyIGZvciB2ZWN0b3JzLCBgVW5vcmRlcmVkRXF1YWxzYApAQCAtNTYsMTUgKzM5NiwxNSBAQAogICAqIENvbnRhaW5lcnMgYXJlIG9iamVjdHMgdGhhdCByZXNwb25kIHRvIEFETCBgYmVnaW4oVClgIGFuZCBgZW5kKFQpYC4KIAogCi0jIyBPdGhlciBjaGFuZ2VzCisjIyMgT3RoZXIgY2hhbmdlcwogKiBSZXBvcnRlcnMgd2lsbCBub3cgYmUgdmVyc2lvbmVkIGluIHRoZSBgc2luZ2xlX2luY2x1ZGVgIGZvbGRlciB0byBlbnN1cmUgdGhlaXIgY29tcGF0aWJpbGl0eSB3aXRoIHRoZSBsYXN0IHJlbGVhc2VkIHZlcnNpb24KIAogCiAKIAotIyAyLjAuMQorIyMgMi4wLjEKIAotIyMgQnJlYWtpbmcgY2hhbmdlcworIyMjIEJyZWFraW5nIGNoYW5nZXMKICogUmVtb3ZlZCBDKys5OCBzdXBwb3J0CiAqIFJlbW92ZWQgbGVnYWN5IHJlcG9ydGVyIHN1cHBvcnQKICogUmVtb3ZlZCBsZWdhY3kgZ2VuZXJhdG9yIHN1cHBvcnQKQEAgLTk0LDcgKzQzNCw3IEBACiAgICogYElORklOSVRZID09IEFwcHJveChJTkZJTklUWSlgIHJldHVybnMgdHJ1ZQogCiAKLSMjIEltcHJvdmVtZW50cworIyMjIEltcHJvdmVtZW50cwogKiBSZXBvcnRlcnMgYW5kIExpc3RlbmVycyBjYW4gYmUgZGVmaW5lZCBpbiBmaWxlcyBkaWZmZXJlbnQgZnJvbSB0aGUgbWFpbiBmaWxlCiAgICogVGhlIGZpbGUgaGFzIHRvIGRlZmluZSBgQ0FUQ0hfQ09ORklHX0VYVEVSTkFMX0lOVEVSRkFDRVNgIGJlZm9yZSBpbmNsdWRpbmcgY2F0Y2guaHBwLgogKiBFcnJvcnMgdGhhdCBoYXBwZW4gZHVyaW5nIHNldCB1cCBiZWZvcmUgbWFpbiBhcmUgbm93IGNhdWdodCBhbmQgcHJvcGVybHkgcmVwb3J0ZWQgb25jZSBtYWluIGlzIGVudGVyZWQKQEAgLTEyOCw3ICs0NjgsNyBAQAogKiBBZGQgYHBrZy1jb25maWdgIHN1cHBvcnQgdG8gQ01ha2UgaW5zdGFsbCBjb21tYW5kCiAKIAotIyMgRml4ZXMKKyMjIyBGaXhlcwogKiBEb24ndCB1c2UgY29uc29sZSBjb2xvdXIgaWYgcnVubmluZyBpbiBYQ29kZQogKiBFeHBsaWNpdCBjb25zdHJ1Y3RvciBpbiByZXBvcnRlciBiYXNlIGNsYXNzCiAqIFN3ZXB0IG91dCBgLVd3ZWFrLXZ0YWJsZXNgLCBgLVdleGl0LXRpbWUtZGVzdHJ1Y3RvcnNgLCBgLVdnbG9iYWwtY29uc3RydWN0b3JzYCB3YXJuaW5ncwpAQCAtMTQwLDcgKzQ4MCw3IEBACiAqIFN1cHByZXNzZWQgQzQwNjEgd2FybmluZyB1bmRlciBNU1ZDCiAKIAotIyMgSW50ZXJuYWwgY2hhbmdlcworIyMjIEludGVybmFsIGNoYW5nZXMKICogVGhlIGRldmVsb3BtZW50IHZlcnNpb24gbm93IHVzZXMgLmNwcCBmaWxlcyBpbnN0ZWFkIG9mIGhlYWRlciBmaWxlcyBjb250YWluaW5nIGltcGxlbWVudGF0aW9uLgogICAqIFRoaXMgbWFrZXMgcGFydGlhbCByZWJ1aWxkcyBtdWNoIGZhc3RlciBkdXJpbmcgZGV2ZWxvcG1lbnQKICogVGhlIGV4cHJlc3Npb24gZGVjb21wb3NpdGlvbiBsYXllciBoYXMgYmVlbiByZXdyaXR0ZW4KQEAgLTE0OCwxMyArNDg4LDMzIEBACiAqIE5ldyBsaWJyYXJ5IChUZXh0RmxvdykgaXMgdXNlZCBmb3IgZm9ybWF0dGluZyB0ZXh0IHRvIG91dHB1dAogCiAKLSMgT2xkZXIgdmVyc2lvbnMKKyMjIE9sZGVyIHZlcnNpb25zCiAKLSMjIDEuMTEueAorIyMjIDEuMTIueAogCi0jIyMgMS4xMS4wCisjIyMjIDEuMTIuMgorIyMjIyMgRml4ZXMKKyogRml4ZWQgbWlzc2luZyA8Y2Fzc2VydD4gaW5jbHVkZQogCi0jIyMjIEZpeGVzCisjIyMjIDEuMTIuMQorCisjIyMjIyBGaXhlcworKiBGaXhlZCBkZXByZWNhdGlvbiB3YXJuaW5nIGluIGBTY29wZWRNZXNzYWdlOjp+U2NvcGVkTWVzc2FnZWAKKyogQWxsIHVzZXMgb2YgYG1pbmAgb3IgYG1heGAgaWRlbnRpZmllcnMgYXJlIG5vdyB3cmFwcGVkIGluIHBhcmVudGhlc2VzCisgICogVGhpcyBhdm9pZHMgcHJvYmxlbXMgd2hlbiBXaW5kb3dzIGhlYWRlcnMgZGVmaW5lIGBtaW5gIGFuZCBgbWF4YCBtYWNyb3MKKworIyMjIyAxLjEyLjAKKworIyMjIyMgRml4ZXMKKyogRml4ZWQgY29tcGlsYXRpb24gZm9yIHN0cmljdCBDKys5OCBtb2RlIChpZSBub3QgZ251Kys5OCkgYW5kIG9sZGVyIGNvbXBpbGVycyAoIzExMDMpCisqIGBJTkZPYCBtZXNzYWdlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGB4bWxgIHJlcG9ydGVyIG91dHB1dCBldmVuIHdpdGhvdXQgYC1zYCBzcGVjaWZpZWQuCisKKworIyMjIDEuMTEueAorCisjIyMjIDEuMTEuMAorCisjIyMjIyBGaXhlcwogKiBUaGUgb3JpZ2luYWwgZXhwcmVzc2lvbiBpbiBgUkVRVUlSRV9GQUxTRSggZXhwciApYCBpcyBub3cgcmVwb3J0ZXIgcHJvcGVybHkgYXMgYCEoIGV4cHIgKWAgKCMxMDUxKQogICAqIFByZXZpb3VzbHkgdGhlIHBhcmVudGhlc2VzIHdlcmUgbWlzc2luZyBhbmQgYHggIT0geWAgd291bGQgYmUgZXhwYW5kZWQgYXMgYCF4ICE9IHhgCiAqIGBBcHByb3g6Ok1hcmdpbmAgaXMgbm93IGluY2x1c2l2ZSAoIzk1MikKQEAgLTE2Miw3ICs1MjIsNyBAQAogICAqIFRoaXMgbWVhbnMgdGhhdCBgUkVRVUlSRSggMC4yNWYgPT0gQXBwcm94KCAwLjBmICkubWFyZ2luKCAwLjI1ZiApIClgIHBhc3NlcywgaW5zdGVhZCBvZiBmYWlscwogKiBgUmFuZG9tTnVtYmVyR2VuZXJhdG9yOjpyZXN1bHRfdHlwZWAgaXMgbm93IHVuc2lnbmVkICgjMTA1MCkKIAotIyMjIyBJbXByb3ZlbWVudHMKKyMjIyMjIEltcHJvdmVtZW50cwogKiBgX19KRVRCUkFJTlNfSURFX19gIG1hY3JvIGhhbmRsaW5nIGlzIG5vdyBDTGlvbiB2ZXJzaW9uIHNwZWNpZmljICgjMTAxNykKICAgKiBXaGVuIENMaW9uIDIwMTcuMyBvciBuZXdlciBpcyBkZXRlY3RlZCwgYF9fQ09VTlRFUl9fYCBpcyB1c2VkIGluc3RlYWQgb2YKICogVGVhbUNpdHkgcmVwb3J0ZXIgbm93IGV4cGxpY2l0bHkgZmx1c2hlcyBvdXRwdXQgc3RyZWFtIGFmdGVyIGVhY2ggcmVwb3J0ICgjMTA1NykKQEAgLTE3MCwzNSArNTMwLDM1IEBACiAqIGBQYXJzZUFuZEFkZENhdGNoVGVzdHNgIG5vdyBjYW4gYWRkIHRlc3QgZmlsZXMgYXMgZGVwZW5kZW5jeSB0byBDTWFrZSBjb25maWd1cmF0aW9uCiAgICogVGhpcyBtZWFucyB5b3UgZG8gbm90IGhhdmUgdG8gbWFudWFsbHkgcmVydW4gQ01ha2UgY29uZmlndXJhdGlvbiBzdGVwIHRvIGRldGVjdCBuZXcgdGVzdHMKIAotIyMgMS4xMC54CisjIyMgMS4xMC54CiAKLSMjIyAxLjEwLjAKKyMjIyMgMS4xMC4wCiAKLSMjIyMgRml4ZXMKKyMjIyMjIEZpeGVzCiAqIEV2YWx1YXRpb24gbGF5ZXIgaGFzIGJlZW4gcmV3cml0dGVuIChiYWNrcG9ydGVkIGZyb20gQ2F0Y2ggMikKICAgKiBUaGUgbmV3IGxheWVyIGlzIG11Y2ggc2ltcGxlciBhbmQgZml4ZXMgc29tZSBpc3N1ZXMgKCM5ODEpCiAqIEltcGxlbWVudGVkIHdvcmthcm91bmQgZm9yIFZTIDIwMTcgcmF3IHN0cmluZyBsaXRlcmFsIHN0cmluZ2lmaWNhdGlvbiBidWcgKCM5OTUpCiAqIEZpeGVkIGludGVyYWN0aW9uIGJldHdlZW4gYFshc2hvdWxkZmFpbF1gIGFuZCBgWyFtYXlmYWlsXWAgdGFncyBhbmQgc2VjdGlvbnMKICAgKiBQcmV2aW91c2x5IHNlY3Rpb25zIHdpdGggZmFpbGluZyBhc3NlcnRpb25zIHdvdWxkIGJlIG1hcmtlZCBhcyBmYWlsZWQsIG5vdCBmYWlsZWQtYnV0LW9rCiAKLSMjIyMgSW1wcm92ZW1lbnRzCisjIyMjIyBJbXByb3ZlbWVudHMKICogQWRkZWQgW2xpYmlkZW50aWZ5XShodHRwczovL2dpdGh1Yi5jb20vamFud2lsbWFucy9MaWJJZGVudGlmeSkgc3VwcG9ydAogKiBBZGRlZCAid2FpdC1mb3Ita2V5cHJlc3MiIG9wdGlvbgogCi0jIyAxLjkueAorIyMjIDEuOS54CiAKLSMjIyAxLjkuNgorIyMjIyAxLjkuNgogCi0jIyMjIEltcHJvdmVtZW50cworIyMjIyMgSW1wcm92ZW1lbnRzCiAqIENhdGNoJ3MgcnVudGltZSBvdmVyaGVhZCBoYXMgYmVlbiBzaWduaWZpY2FudGx5IGRlY3JlYXNlZCAoIzkzNywgIzkzOSkKICogQWRkZWQgYC0tbGlzdC1leHRyYS1pbmZvYCBjbGkgb3B0aW9uICgjOTM0KS4KICAgKiBJdCBsaXN0cyBhbGwgdGVzdHMgdG9nZXRoZXIgd2l0aCBleHRyYSBpbmZvcm1hdGlvbiwgaWUgZmlsZW5hbWUsIGxpbmUgbnVtYmVyIGFuZCBkZXNjcmlwdGlvbi4KIAogCiAKLSMjIyAxLjkuNQorIyMjIyAxLjkuNQogCi0jIyMjIEZpeGVzCisjIyMjIyBGaXhlcwogKiBUcnV0aHkgZXhwcmVzc2lvbnMgYXJlIG5vdyByZWNvbnN0cnVjdGVkIHByb3Blcmx5LCBub3QgYXMgYm9vbGVhbnMgKCM5MTQpCiAqIFZhcmlvdXMgd2FybmluZ3MgYXJlIG5vIGxvbmdlciBlcnJvbmVvdXNseSBzdXBwcmVzc2VkIGluIHRlc3QgZmlsZXMgKGZpbGVzIHRoYXQgaW5jbHVkZSBgY2F0Y2guaHBwYCwgYnV0IGRvIG5vdCBkZWZpbmUgYENBVENIX0NPTkZJR19NQUlOYCBvciBgQ0FUQ0hfQ09ORklHX1JVTk5FUmApICgjODcxKQogKiBDYXRjaCBubyBsb25nZXIgZmFpbHMgdG8gbGluayB3aGVuIG1haW4gaXMgY29tcGlsZWQgYXMgQysrLCBidXQgbGlua2VkIGFnYWluc3QgT2JqZWN0aXZlLUMgKCM4NTUpCkBAIC0yMDYsMzUgKzU2NiwzNSBAQAogICAqIFByZXZpb3VzbHkgYW55IEdDQyB3aXRoIG1pbm9yIHZlcnNpb24gbGVzcyB0aGFuIDMgd291bGQgYmUgaW5jb3JyZWN0bHkgY2xhc3NpZmllZCBhcyBub3Qgc3VwcG9ydGluZyBgX19DT1VOVEVSX19gLgogKiBTdXBwcmVzc2VkIEM0OTk2IHdhcm5pbmcgY2F1c2VkIGJ5IHVwY29taW5nIHVwZGF0ZWQgdG8gTVNWQyAyMDE3LCBtYXJraW5nIGBzdGQ6OnVuY2F1Z2h0X2V4Y2VwdGlvbmAgYXMgZGVwcmVjYXRlZC4gKCM5MjcpCiAKLSMjIyMgSW1wcm92ZW1lbnRzCisjIyMjIyBJbXByb3ZlbWVudHMKICogQ01ha2UgaW50ZWdyYXRpb24gc2NyaXB0IG5vdyBpbmNvcnBvcmF0ZXMgZGVidWcgbWVzc2FnZXMgYW5kIHJlZ2lzdGVycyB0ZXN0cyBpbiBhbiBpbXByb3ZlZCB3YXkgKCM5MTEpCiAqIFZhcmlvdXMgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMKIAogCiAKLSMjIyAxLjkuNAorIyMjIyAxLjkuNAogCi0jIyMjIEZpeGVzCisjIyMjIyBGaXhlcwogKiBgQ0FUQ0hfRkFJTGAgbWFjcm8gbm8gbG9uZ2VyIGNhdXNlcyBjb21waWxhdGlvbiBlcnJvciB3aXRob3V0IHZhcmlhZGljIG1hY3JvIHN1cHBvcnQKICogYElORk9gIG1lc3NhZ2VzIGFyZSBubyBsb25nZXIgY2xlYXJlZCBhZnRlciBiZWluZyByZXBvcnRlZCBvbmNlCiAKLSMjIyMgSW1wcm92ZW1lbnRzIGFuZCBtaW5vciBjaGFuZ2VzCisjIyMjIyBJbXByb3ZlbWVudHMgYW5kIG1pbm9yIGNoYW5nZXMKICogQ2F0Y2ggbm93IHVzZXMgYHdtYWluYCB3aGVuIGNvbXBpbGVkIHVuZGVyIFdpbmRvd3MgYW5kIGBVTklDT0RFYCBpcyBkZWZpbmVkLgogICAqIE5vdGUgdGhhdCBDYXRjaCBzdGlsbCBvZmZpY2lhbGx5IHN1cHBvcnRzIG9ubHkgQVNDSUkKIAotIyMjIDEuOS4zCisjIyMjIDEuOS4zCiAKLSMjIyMgRml4ZXMKKyMjIyMjIEZpeGVzCiAqIENvbXBsZXRlZCB0aGUgZml4IGZvciAobGFjayBvZikgdWludDY0X3QgaW4gZWFybGllciBWaXN1YWwgU3R1ZGlvcwogCi0jIyMgMS45LjIKKyMjIyMgMS45LjIKIAotIyMjIyBJbXByb3ZlbWVudHMgYW5kIG1pbm9yIGNoYW5nZXMKKyMjIyMjIEltcHJvdmVtZW50cyBhbmQgbWlub3IgY2hhbmdlcwogKiBBbGwgb2YgYEFwcHJveGAncyBtZW1iZXIgZnVuY3Rpb25zIG5vdyBhY2NlcHQgc3Ryb25nIHR5cGVkZWZzIGluIEMrKzExIG1vZGUgKCM4ODgpCiAgICogUHJldmlvdXNseSBgQXBwcm94OjpzY2FsZWAsIGBBcHByb3g6OmVwc2lsb25gLCBgQXBwcm94OjptYXJnaW5gIGFuZCBgQXBwcm94OjpvcGVyYXRvcigpYCBkaWRuJ3QuCiAKIAotIyMjIyBGaXhlcworIyMjIyMgRml4ZXMKICogUE9TSVggc2lnbmFscyBhcmUgbm93IGRpc2FibGVkIGJ5IGRlZmF1bHQgdW5kZXIgUU5YICgjODg5KQogICAqIFFOWCBkb2VzIG5vdCBzdXBwb3J0IGN1cnJlbnQgZW5vdWdoICgyMDAxKSBQT1NJWCBzcGVjaWZpY2F0aW9uCiAqIEpVbml0IG5vIGxvbmdlciBjb3VudHMgZXhjZXB0aW9ucyBhcyBmYWlsdXJlcyBpZiBnaXZlbiB0ZXN0IGNhc2UgaXMgbWFya2VkIGFzIG9rIHRvIGZhaWwuCkBAIC0yNDIsMjIgKzYwMiwyMiBAQAogKiBDYXRjaCBubyBsb25nZXIgYXR0ZW1wdHMgdG8gZGVmaW5lIGB1aW50NjRfdGAgb24gd2luZG93cyAoIzg2MikKICAgKiBUaGlzIHdhcyBjYXVzaW5nIHRyb3VibGUgd2hlbiBjb21waWxlZCB1bmRlciBDeWd3aW4KIAotIyMjIyBPdGhlcgorIyMjIyMgT3RoZXIKICogQ2F0Y2ggaXMgbm93IGNvbXBpbGVkIHVuZGVyIE1TVkMgMjAxNyB1c2luZyBgc3RkOmMrK2xhdGVzdGAgKEMrKzE3IG1vZGUpIGluIENJCiAqIFdlIG5vdyBwcm92aWRlIGNtYWtlIHNjcmlwdCB0aGF0IGF1dG9yZWdpc3RlcnMgQ2F0Y2ggdGVzdHMgaW50byBjdGVzdC4KICAgKiBTZWUgYGNvbnRyaWJgIGZvbGRlci4KIAogCi0jIyMgMS45LjEKKyMjIyMgMS45LjEKIAotIyMjIyBGaXhlcworIyMjIyMgRml4ZXMKICogVW5leHBlY3RlZCBleGNlcHRpb25zIGFyZSBubyBsb25nZXIgaWdub3JlZCBieSBkZWZhdWx0ICgjODg1LCAjODg3KQogCiAKLSMjIyAxLjkuMAorIyMjIyAxLjkuMAogCiAKLSMjIyMgSW1wcm92ZW1lbnRzIGFuZCBtaW5vciBjaGFuZ2VzCisjIyMjIyBJbXByb3ZlbWVudHMgYW5kIG1pbm9yIGNoYW5nZXMKICogQ2F0Y2ggbm8gbG9uZ2VyIGF0dGVtcHRzIHRvIGVuc3VyZSB0aGUgZXhjZXB0aW9uIHR5cGUgcGFzc2VkIGJ5IHVzZXIgaW4gYFJFUVVJUkVfVEhST1dTX0FTYCBpcyBhIGNvbnN0YW50IHJlZmVyZW5jZS4KICAgKiBJdCB3YXMgY2F1c2luZyB0cm91YmxlIHdoZW4gYFJFUVVJUkVfVEhST1dTX0FTYCB3YXMgdXNlZCBpbnNpZGUgdGVtcGxhdGVkIGZ1bmN0aW9ucwogICAqIFRoaXMgYWN0dWFsbHkgcmV2ZXJ0cyBjaGFuZ2VzIG1hZGUgaW4gdjEuNy4yCkBAIC0yNzEsNyArNjMxLDcgQEAKICogV2hlbiBDYXRjaCBpcyBjb21waWxlZCB1c2luZyBDKysxMSwgYEFwcHJveGAgaXMgbm93IGNvbnN0cnVjdGlibGUgd2l0aCBhbnl0aGluZyB0aGF0IGNhbiBiZSBleHBsaWNpdGx5IGNvbnZlcnRlZCB0byBgZG91YmxlYC4KICogQ2FwdHVyZWQgbWVzc2FnZXMgYXJlIG5vdyBwcmludGVkIG9uIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucwogCi0jIyMjIEZpeGVzOgorIyMjIyMgRml4ZXM6CiAqIENsYW5nJ3MgYC1XZXhpdC10aW1lLWRlc3RydWN0b3JzYCBzaG91bGQgYmUgc3VwcHJlc3NlZCBmb3IgQ2F0Y2gncyBpbnRlcm5hbHMKICogR0NDJ3MgYC1XcGFyZW50aGVzZXNgIGlzIG5vdyBzdXBwcmVzc2VkIGZvciBhbGwgVFUncyB0aGF0IGluY2x1ZGUgYGNhdGNoLmhwcGAuCiAgICogVGhpcyBpcyBmdW5jdGlvbmFsbHkgYSByZXZlcnQgb2YgY2hhbmdlcyBtYWRlIGluIDEuOC4wLCB3aGVyZSB3ZSB0cmllZCB1c2luZyBgX1ByYWdtYWAgYmFzZWQgc3VwcHJlc3Npb24uIFRoaXMgc2hvdWxkIGhhdmUga2VwdCB0aGUgc3VwcHJlc3Npb24gbG9jYWwgdG8gQ2F0Y2gncyBhc3NlcnRpb25zLCBidXQgYnVncyBpbiBHQ0MncyBoYW5kbGluZyBvZiBgX1ByYWdtYWBzIGluIEMrKyBtb2RlIG1lYW50IHRoYXQgaXQgZGlkIG5vdCBhbHdheXMgd29yay4KQEAgLTI4MCwxOCArNjQwLDE4IEBACiAgICogW0RldGFpbHMgY2FuIGJlIGZvdW5kIGluIGRvY3VtZW50YXRpb25dKGNvbmZpZ3VyYXRpb24ubWQjY2F0Y2hfY29uZmlnX2NwcDExX3N0cmVhbV9pbnNlcnRhYmxlX2NoZWNrKQogCiAKLSMjIyMgT3RoZXIgbm90ZXM6CisjIyMjIyBPdGhlciBub3RlczoKICogV2UgaGF2ZSBhZGRlZCBWUyAyMDE3IHRvIG91ciBDSQogKiBXb3JrIG9uIENhdGNoIDIgc2hvdWxkIHN0YXJ0IHNvb24KIAogCiAKLSMjIDEuOC54CisjIyMgMS44LngKIAotIyMjIDEuOC4yCisjIyMjIDEuOC4yCiAKIAotIyMjIyBJbXByb3ZlbWVudHMgYW5kIG1pbm9yIGNoYW5nZXMKKyMjIyMjIEltcHJvdmVtZW50cyBhbmQgbWlub3IgY2hhbmdlcwogKiBUQVAgcmVwb3J0ZXIgbm93IGJlaGF2ZXMgYXMgaWYgYC1zYCB3YXMgYWx3YXlzIHNldAogICAqIFRoaXMgc2hvdWxkIGJlIG1vcmUgY29uc2lzdGVudCB3aXRoIHRoZSBwcm90b2NvbCBkZXNpcmVkIGJlaGF2aW91ci4KICogQ29tcGFjdCByZXBvcnRlciBub3cgb2JleXMgYC1kIHllc2AgYXJndW1lbnQgKCM3ODApCkBAIC0zMDUsNyArNjY1LDcgQEAKICAgKiBMaXN0ZW5lcnMgcHJvdmlkZSBhIHdheSB0byBob29rIGludG8gZXZlbnRzIGdlbmVyYXRlZCBieSBydW5uaW5nIHlvdXIgdGVzdHMsIGluY2x1ZGluZyBzdGFydCBhbmQgZW5kIG9mIHJ1biwgZXZlcnkgdGVzdCBjYXNlLCBldmVyeSBzZWN0aW9uIGFuZCBldmVyeSBhc3NlcnRpb24uCiAKIAotIyMjIyBGaXhlczoKKyMjIyMjIEZpeGVzOgogKiBDYXRjaCBubyBsb25nZXIgYXR0ZW1wdHMgdG8gcmVjb25zdHJ1Y3QgZXhwcmVzc2lvbiB0aGF0IGxlZCB0byBhIGZhdGFsIGVycm9yICAoIzgxMCkKICAgKiBUaGlzIGZpeGVzIHBvc3NpYmxlIHNpZ25hbC9TRUggbG9vcCB3aGVuIHByb2Nlc3NpbmcgZXhwcmVzc2lvbnMsIHdoZXJlIHRoZSBzaWduYWwgd2FzIHRyaWdnZXJlZCBieSBleHByZXNzaW9uIGRlY29tcG9zaXRpb24uCiAqIEZpeGVkIChDNDI2NSkgbWlzc2luZyB2aXJ0dWFsIGRlc3RydWN0b3Igd2FybmluZyBpbiBNYXRjaGVycyAoIzg0NCkKQEAgLTMyMiwyMSArNjgyLDIxIEBACiAqIFJlZ3Jlc3Npb24gaW4gT2JqZWN0aXZlLUMgYmluZGluZ3MgKE1hdGNoZXJzKSBmaXhlZCAoIzg1NCkKIAogCi0jIyMjIE90aGVyIG5vdGVzOgorIyMjIyMgT3RoZXIgbm90ZXM6CiAqIFdlIGhhdmUgYWRkZWQgVlMgMjAxMyBhbmQgMjAxNSB0byBvdXIgQ0kKICogQ2F0Y2ggQ2xhc3NpYyAoMS54LngpIG5vdyBjb250YWlucyBpdHMgb3duLCBmb3JrZWQsIHZlcnNpb24gb2YgQ2xhcmEgKHRoZSBhcmd1bWVudCBwYXJzZXIpLgogCiAKIAotIyMjIDEuOC4xCisjIyMjIDEuOC4xCiAKLSMjIyMgRml4ZXMKKyMjIyMjIEZpeGVzCiAKIEN5Z3dpbiBpc3N1ZSB3aXRoIGBnZXR0aW1lb2ZkYXlgIC0gYCNkZWZpbmVgIHdhcyBub3QgZWFybHkgZW5vdWdoCiAKLSMjIyAxLjguMAorIyMjIyAxLjguMAogCi0jIyMjIE5ldyBmZWF0dXJlcy8gbWlub3IgY2hhbmdlcworIyMjIyMgTmV3IGZlYXR1cmVzLyBtaW5vciBjaGFuZ2VzCiAKICogTWF0Y2hlcnMgaGF2ZSBuZXcsIHNpbXBsZXIgKGFuZCBkb2N1bWVudGVkKSBpbnRlcmZhY2UuCiAgICogQ2F0Y2ggcHJvdmlkZXMgc3RyaW5nIGFuZCB2ZWN0b3IgbWF0Y2hlcnMuCkBAIC0zNTYsMzMgKzcxNiwzMyBAQAogKiBgQXBwcm94YCBub3cgc3VwcG9ydHMgYW4gb3B0aW9uYWwgbWFyZ2luIG9mIGFic29sdXRlIGVycm9yCiAgICogSXQgaGFzIGFsc28gcmVjZWl2ZWQgW25ldyBkb2N1bWVudGF0aW9uXShhc3NlcnRpb25zLm1kI3RvcCkuCiAKLSMjIyMgRml4ZXMKKyMjIyMjIEZpeGVzCiAqIFNpbGVuY2VkIEM0MzEyICgiY29udmVyc2lvbiBmcm9tIGludCB0byAnQ2xhc3NOYW1lICoiKSB3YXJuaW5ncyBpbiB0aGUgZXZhbHVhdGUgbGF5ZXIuCiAqIEZpeGVkIEM0NTEyICgiYXNzaWdubWVudCBvcGVyYXRvciBjb3VsZCBub3QgYmUgZ2VuZXJhdGVkIikgd2FybmluZ3MgdW5kZXIgVlMyMDEzLgogKiBDeWd3aW4gY29tcGF0aWJpbGl0eSBmaXhlcwogICAqIFNpZ25hbCBoYW5kbGluZyBpcyBubyBsb25nZXIgY29tcGlsZWQgYnkgZGVmYXVsdC4KICAgKiBVc2FnZSBvZiBgZ2V0dGltZW9mZGF5YCBpbnNpZGUgQ2F0Y2ggc2hvdWxkIG5vIGxvbmdlciBjYXVzZSBjb21waWxhdGlvbiBlcnJvcnMuCi0qIEltcHJvdmVkIGAtV3BhcmVudGhlc2VzYCBzdXByZXNzaW9uIGZvciBnY2MgKCM2NzQpCi0gICogV2hlbiBjb21waWxlZCB3aXRoIGdjYyA0Ljggb3IgbmV3ZXIsIHRoZSBzdXByZXNzaW9uIGlzIGxvY2FsaXplZCB0byBhc3NlcnRpb25zIG9ubHkKKyogSW1wcm92ZWQgYC1XcGFyZW50aGVzZXNgIHN1cHByZXNzaW9uIGZvciBnY2MgKCM2NzQpCisgICogV2hlbiBjb21waWxlZCB3aXRoIGdjYyA0Ljggb3IgbmV3ZXIsIHRoZSBzdXBwcmVzc2lvbiBpcyBsb2NhbGl6ZWQgdG8gYXNzZXJ0aW9ucyBvbmx5CiAgICogT3RoZXJ3aXNlIGl0IGlzIHN1cHJlc3NlZCBmb3IgdGhlIHdob2xlIFRVCiAqIEZpeGVkIHRlc3Qgc3BlYyBwYXJzZXIgaXNzdWUgKHdpdGggZXNjYXBlcyBpbiBtdWx0aXBsZSBuYW1lcykKIAotIyMjIyBPdGhlcgorIyMjIyMgT3RoZXIKICogVmFyaW91cyBkb2N1bWVudGF0aW9uIGZpeGVzIGFuZCBpbXByb3ZlbWVudHMKIAogCi0jIyAxLjcueAorIyMjIDEuNy54CiAKLSMjIyAxLjcuMgorIyMjIyAxLjcuMgogCi0jIyMjIEZpeGVzIGFuZCBtaW5vciBpbXByb3ZlbWVudHMKKyMjIyMjIEZpeGVzIGFuZCBtaW5vciBpbXByb3ZlbWVudHMKIFhtbDoKIAogKHRlY2huaWNhbGx5IHRoZSBmaXJzdCB0d28gYXJlIGJyZWFraW5nIGNoYW5nZXMgYnV0IGFyZSBhbHNvIGZpeGVzIGFuZCBhcmd1YWJseSBicmVhayBmZXcgaWYgYW55IHBlb3BsZSkKICogQy1lc2NhcGUgY29udHJvbCBjaGFyYWN0ZXJzIGluc3RlYWQgb2YgWE1MIGVuY29kaW5nIHRoZW0gKHdoaWNoIHJlcXVpcmVzIFhNTCAxLjEpCiAqIFJldmVydCBYTUwgb3V0cHV0IHRvIFhNTCAxLjAKICogQ2FuIHByb3ZpZGUgc3R5bGVzaGVldCByZWZlcmVuY2VzIGJ5IGV4dGVuZGluZyB0aGUgWE1MIHJlcG9ydGVyCi0qIEFkZGVkIGRlc2NyaXB0aW9uIGFuZCB0YWdzIGF0dHJpYml0ZXMgdG8gWE1MIFJlcG9ydGVyCisqIEFkZGVkIGRlc2NyaXB0aW9uIGFuZCB0YWdzIGF0dHJpYnV0ZXMgdG8gWE1MIFJlcG9ydGVyCiAqIFRhZ3MgYXJlIGNsb3NlZCBhbmQgdGhlIHN0cmVhbSBmbHVzaGVkIG1vcmUgZWFnZXJseSB0byBhdm9pZCBzdGRvdXQgaW50ZXJwb2xhdGlvbgogCiAKQEAgLTM5NCw5ICs3NTQsOSBAQAogKiBTaWxlbmNlZCBhIGZldyBtb3JlIHdhcm5pbmdzIGluIGRpZmZlcmVudCBjaXJjdW1zdGFuY2VzCiAqIFRyYXZpcyBpbXByb3ZlbWVudHMKIAotIyMjIDEuNy4xCisjIyMjIDEuNy4xCiAKLSMjIyMgRml4ZXM6CisjIyMjIyBGaXhlczoKICogRml4ZWQgaW5jb25zaXN0ZW5jeSBpbiBkZWZpbmluZyBgTk9NSU5NQVhgIGFuZCBgV0lOMzJfTEVBTl9BTkRfTUVBTmAgaW5zaWRlIGBjYXRjaC5ocHBgLgogKiBGaXhlZCBTRUgtcmVsYXRlZCBjb21waWxhdGlvbiBlcnJvciB1bmRlciBvbGRlciBNaW5HVyBjb21waWxlcnMsIGJ5IG1ha2luZyBXaW5kb3dzIFNFSCBoYW5kbGluZyBvcHQtaW4gZm9yIGNvbXBpbGVycyBvdGhlciB0aGFuIE1TVkMuCiAgICogRm9yIHNwZWNpZmljcywgbG9vayBpbnRvIHRoZSBbZG9jdW1lbnRhdGlvbl0oY29uZmlndXJhdGlvbi5tZCN0b3ApLgpAQCAtNDA2LDkgKzc2Niw5IEBACiAqIEZpeGVkIHBvc3NpYmxlIGluZmluaXRlIHJlY3Vyc2lvbiBpbiBXaW5kb3dzIFNFSC4KICogRml4ZWQgcG9zc2libGUgY29tcGlsYXRpb24gZXJyb3IgY2F1c2VkIGJ5IENhdGNoJ3Mgb3BlcmF0b3Igb3ZlcmxvYWRzIGJlaW5nIGFtYmlndW91cyBpbiByZWdhcmRzIHRvIHVzZXItZGVmaW5lZCB0ZW1wbGF0ZWQgb3BlcmF0b3JzLgogCi0jIyMgMS43LjAKKyMjIyMgMS43LjAKIAotIyMjIyBGZWF0dXJlcy8gQ2hhbmdlczoKKyMjIyMjIEZlYXR1cmVzLyBDaGFuZ2VzOgogKiBDYXRjaCBub3cgcnVucyBzaWduaWZpY2FudGx5IGZhc3RlciBmb3IgcGFzc2luZyB0ZXN0cwogICAqIE1pY3JvYmVuY2htYXJrIGZvY3VzZWQgb24gQ2F0Y2gncyBvdmVyaGVhZCB3ZW50IGZyb20gfjMuNHMgdG8gfjAuN3MuCiAgICogUmVhbCB3b3JsZCB0ZXN0IHVzaW5nIFtKU09OIGZvciBNb2Rlcm4gQysrXShodHRwczovL2dpdGh1Yi5jb20vbmxvaG1hbm4vanNvbikncyB0ZXN0IHN1aXRlIHdlbnQgZnJvbSB+Nm0gMjVzIHRvIH40bSAxNHMuCkBAIC00MjIsMzAgKzc4MiwzMCBAQAogKiBDZXJ0YWluIGNoYXJhY3RlcnMgKHNwYWNlLCB0YWIsIGV0YykgYXJlIG5vdyBwcmV0dHkgcHJpbnRlZC4KICAgKiBUaGlzIG1lYW5zIHRoYXQgYSBgY2hhciBjID0gJyAnOyBSRVFVSVJFKGMgPT0gJ1x0Jyk7YCB3b3VsZCBiZSBwcmludGVkIGFzIGAnICcgPT0gJ1x0J2AsIGluc3RlYWQgb2YgYCA9PSA5YC4KIAotIyMjIyBGaXhlczoKKyMjIyMjIEZpeGVzOgogKiBUZXh0IGZvcm1hdHRpbmcgbm8gbG9uZ2VyIGF0dGVtcHRzIHRvIGFjY2VzcyBvdXQtb2YtYm91bmRzIGNoYXJhY3RlcnMgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgogKiBUSFJPVyBmYW1pbHkgb2YgYXNzZXJ0aW9ucyBubyBsb25nZXIgdHJpZ2dlciBgLVd1bnVzZWQtdmFsdWVgIG9uIGV4cHJlc3Npb25zIGNvbnRhaW5pbmcgZXhwbGljaXQgY2FzdC4KICogQnJlYWtpbmcgaW50byBkZWJ1Z2dlciB1bmRlciBPUyBYIHdvcmtzIGFnYWluIGFuZCBubyBsb25nZXIgcmVxdWlyZWQgYERFQlVHYCB0byBiZSBkZWZpbmVkLgogKiBDb21waWxhdGlvbiBubyBsb25nZXIgYnJlYWtzIHVuZGVyIGNlcnRhaW4gY29tcGlsZXIgaWYgYSBsYW1iZGEgaXMgdXNlZCBpbnNpZGUgYXNzZXJ0aW9uIG1hY3JvLgogCi0jIyMjIE90aGVyOgorIyMjIyMgT3RoZXI6CiAqIENhdGNoJ3MgQ01ha2VMaXN0cyBub3cgZGVmaW5lcyBpbnN0YWxsIGNvbW1hbmQuCiAqIENhdGNoJ3MgQ01ha2VMaXN0cyBub3cgZ2VuZXJhdGVzIHByb2plY3RzIHdpdGggd2FybmluZ3MgZW5hYmxlZC4KIAogCi0jIyAxLjYueAorIyMjIDEuNi54CiAKLSMjIyAxLjYuMQorIyMjIyAxLjYuMQogCi0jIyMjIEZlYXR1cmVzLyBDaGFuZ2VzOgorIyMjIyMgRmVhdHVyZXMvIENoYW5nZXM6CiAqIENhdGNoIG5vdyBzdXBwb3J0cyBicmVha2luZyBpbnRvIGRlYnVnZ2VyIG9uIExpbnV4CiAKLSMjIyMgRml4ZXM6CisjIyMjIyBGaXhlczoKICogR2VuZXJhdG9ycyBubyBsb25nZXIgbGVhayBtZW1vcnkgKGdlbmVyYXRvcnMgYXJlIHN0aWxsIHVuc3VwcG9ydGVkIGluIGdlbmVyYWwpCiAqIEpVbml0IHJlcG9ydGVyIG5vdyByZXBvcnRzIFVUQyB0aW1lc3RhbXBzLCBpbnN0ZWFkIG9mICJ0YmQiCiAqIGBDSEVDS19USEFUYCBtYWNybyBpcyBub3cgcHJvcGVybHkgZGVmaW5lZCBhcyBgQ0FUQ0hfQ0hFQ0tfVEhBVGAgd2hlbiB1c2luZyBgQ0FUQ0hfYCBwcmVmaXhlZCBtYWNyb3MKIAotIyMjIyBPdGhlcjoKKyMjIyMjIE90aGVyOgogKiBUeXBlcyB3aXRoIG92ZXJsb2FkZWQgYCYmYCBvcGVyYXRvciBhcmUgbm8gbG9uZ2VyIGV2YWx1YXRlZCB0d2ljZSB3aGVuIHVzZWQgaW4gYW4gYXNzZXJ0aW9uIG1hY3JvLgogKiBUaGUgdXNlIG9mIGBfX0NPVU5URVJfX2AgaXMgc3VwcmVzc2VkIHdoZW4gQ2F0Y2ggaXMgcGFyc2VkIGJ5IENMaW9uCiAgICogVGhpcyBjaGFuZ2UgaXMgbm90IGFjdGl2ZSB3aGVuIGNvbXBpbGluZyBhIGJpbmFyeQpAQCAtNDU1LDI4ICs4MTUsMjggQEAKICAgKiBUaGlzIGNhbiBiZSBkaXNhYmxlZCBpZiBuZWVkZWQsIHNlZSBbZG9jdW1lbnRhdGlvbl0oY29uZmlndXJhdGlvbi5tZCN0b3ApIGZvciBkZXRhaWxzLgogCiAKLSMjIyAxLjYuMAorIyMjIyAxLjYuMAogCi0jIyMjIENtYWtlLyBwcm9qZWN0czoKKyMjIyMjIENtYWtlLyBwcm9qZWN0czoKICogTW92ZWQgQ01ha2VMaXN0cy50eHQgdG8gcm9vdCwgbWFkZSBpdCBmcmllbmRsaWVyIGZvciBDTGlvbiBhbmQgZ2VuZXJhdGluZyBYQ29kZSBhbmQgVlMgcHJvamVjdHMsIGFuZCByZW1vdmVkIHRoZSBtYW51YWxseSBtYWludGFpbmVkIFhDb2RlIGFuZCBWUyBwcm9qZWN0cy4KIAotIyMjIyBGZWF0dXJlcy8gQ2hhbmdlczoKKyMjIyMjIEZlYXR1cmVzLyBDaGFuZ2VzOgogKiBBcHByb3ggbm93IHN1cHBvcnRzIGA+PWAgYW5kIGA8PWAKICogQ2FuIG5vdyB1c2UgYFxgIHRvIGVzY2FwZSBjaGFycyBpbiB0ZXN0IG5hbWVzIG9uIGNvbW1hbmQgbGluZQogKiBTdGFuZGFyZGl6ZSBDKysxMSBmZWF0dXJlIHRvZ2dsZXMKIAotIyMjIyBGaXhlczoKKyMjIyMjIEZpeGVzOgogKiBCbHVlIHNoZWxsIGNvbG91cgogKiBNaXNzaW5nIGFyZ3VtZW50IHRvIGBDQVRDSF9DSEVDS19USFJPV1NgCiAqIERvbid0IGVuY29kZSBleHRlbmRlZCBBU0NJSSBpbiBYTUwKICogdXNlIGBzdGQ6OnNodWZmbGVgIG9uIG1vcmUgY29tcGlsZXJzIChmaXhlcyBkZXByZWNhdGlvbiB3YXJuaW5nL2Vycm9yKQogKiBVc2UgYF9fQ09VTlRFUl9fYCBtb3JlIGNvbnNpc3RlbnRseSAod2hlcmUgYXZhaWxhYmxlKQogCi0jIyMjIE90aGVyOgorIyMjIyMgT3RoZXI6CiAqIFR3ZWFrcyBhbmQgY2hhbmdlcyB0byBzY3JpcHRzIC0gcGFydGljdWxhcmx5IGZvciBBcHByb3ZhbCB0ZXN0IC0gdG8gbWFrZSB0aGVtIG1vcmUgcG9ydGFibGUKIAogCi0jIEV2ZW4gT2xkZXIgdmVyc2lvbnMKKyMjIEV2ZW4gT2xkZXIgdmVyc2lvbnMKIFJlbGVhc2Ugbm90ZXMgd2VyZSBub3QgbWFpbnRhaW5lZCBwcmlvciB0byB2MS42LjAsIGJ1dCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gd29yayB0aGVtIG91dCBmcm9tIHRoZSBHaXQgaGlzdG9yeQogCiAtLS0KZGlmZiAtLWdpdCBhL2RvY3MvcmVsZWFzZS1wcm9jZXNzLm1kIGIvZG9jcy9yZWxlYXNlLXByb2Nlc3MubWQKaW5kZXggNDMzNzc3Yi4uNDEyY2YyZCAxMDA2NDQKLS0tIGEvZG9jcy9yZWxlYXNlLXByb2Nlc3MubWQKKysrIGIvZG9jcy9yZWxlYXNlLXByb2Nlc3MubWQKQEAgLTEsMTggKzEsMTggQEAKIDxhIGlkPSJ0b3AiPjwvYT4KICMgSG93IHRvIHJlbGVhc2UKIAotV2hlbiBlbm91Z2ggY2hhbmdlcyBoYXZlIGFjY3VtdWxhdGVkLCBpdCBpcyB0aW1lIHRvIHJlbGVhc2UgbmV3IHZlcnNpb24gb2YgQ2F0Y2guIFRoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBwcm9jZXMgaW4gZG9pbmcgc28sIHRoYXQgbm8gc3RlcHMgYXJlIGZvcmdvdHRlbi4gTm90ZSB0aGF0IGFsbCByZWZlcmVuY2VkIHNjcmlwdHMgY2FuIGJlIGZvdW5kIGluIHRoZSBgc2NyaXB0cy9gIGRpcmVjdG9yeS4KK1doZW4gZW5vdWdoIGNoYW5nZXMgaGF2ZSBhY2N1bXVsYXRlZCwgaXQgaXMgdGltZSB0byByZWxlYXNlIG5ldyB2ZXJzaW9uIG9mIENhdGNoLiBUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgcHJvY2VzcyBpbiBkb2luZyBzbywgdGhhdCBubyBzdGVwcyBhcmUgZm9yZ290dGVuLiBOb3RlIHRoYXQgYWxsIHJlZmVyZW5jZWQgc2NyaXB0cyBjYW4gYmUgZm91bmQgaW4gdGhlIGBzY3JpcHRzL2AgZGlyZWN0b3J5LgogCi0jIyBOZWNjZXNzYXJ5IHN0ZXBzCisjIyBOZWNlc3Nhcnkgc3RlcHMKIAotVGhlc2Ugc3RlcHMgYXJlIG5lY2Nlc3NhcnkgYW5kIGhhdmUgdG8gYmUgcGVyZm9ybWVkIGJlZm9yZSBlYWNoIG5ldyByZWxlYXNlLiBUaGV5IHNlcnZlIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBuZXcgcmVsZWFzZSBpcyBjb3JyZWN0IGFuZCBsaW5rZWQtdG8gZnJvbSB0aGUgc3RhbmRhcmQgcGxhY2VzLgorVGhlc2Ugc3RlcHMgYXJlIG5lY2Vzc2FyeSBhbmQgaGF2ZSB0byBiZSBwZXJmb3JtZWQgYmVmb3JlIGVhY2ggbmV3IHJlbGVhc2UuIFRoZXkgc2VydmUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIG5ldyByZWxlYXNlIGlzIGNvcnJlY3QgYW5kIGxpbmtlZC10byBmcm9tIHRoZSBzdGFuZGFyZCBwbGFjZXMuCiAKIAotIyMjIEFwcHJvdmFsIHRlc3RpbmcKKyMjIyBUZXN0aW5nCiAKLUNhdGNoJ3MgcmVsZWFzZXMgYXJlIHByaW1hcmlseSB2YWxpZGF0ZWQgYWdhaW5zdCBvdXRwdXQgZnJvbSBwcmV2aW91cyByZWxlYXNlLCBzdG9yZWQgaW4gYHByb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lc2AuIFRvIHZhbGlkYXRlIGN1cnJlbnQgc291cmNlcywgYnVpbGQgdGhlIFNlbGZUZXN0IGJpbmFyeSBhbmQgcGFzcyBpdCB0byB0aGUgYGFwcHJvdmFsVGVzdHMucHlgIHNjcmlwdDogYGFwcHJvdmFsVGVzdHMucHkgPHBhdGgvdG8vU2VsZlRlc3Q+YC4KLQotVGhlcmUgc2hvdWxkIGJlIG5vIGRpZmZlcmVuY2VzLCBhcyBBcHByb3ZhbCB0ZXN0cyBzaG91bGQgYmUgdXBkYXRlZCB3aGVuIGNoYW5nZXMgdG8gQ2F0Y2ggYXJlIG1hZGUsIGJ1dCBpZiB0aGVyZSBhcmUsIHRoZW4gdGhleSBuZWVkIHRvIGJlIG1hbnVhbGx5IHJldmlld2VkIGFuZCBlaXRoZXIgYXBwcm92ZWQgKHVzaW5nIGBhcHByb3ZlLnB5YCkgb3IgQ2F0Y2ggcmVxdWlyZXMgb3RoZXIgZml4ZXMuCitBbGwgb2YgdGhlIHRlc3RzIGFyZSBjdXJyZW50bHkgcnVuIGluIG91ciBDSSBzZXR1cCBiYXNlZCBvbiBUcmF2aXNDSSBhbmQKK0FwcFZleW9yLiBBcyBsb25nIGFzIHRoZSBsYXN0IGNvbW1pdCB0ZXN0ZWQgZ3JlZW4sIHRoZSByZWxlYXNlIGNhbgorcHJvY2VlZC4KIAogCiAjIyMgSW5jcmVtZW50aW5nIHZlcnNpb24gbnVtYmVyCkBAIC0yNyw3ICsyNyw3IEBACiAKICMjIyBSZWxlYXNlIG5vdGVzCiAKLU9uY2UgYSByZWxlYXNlIGlzIHJlYWR5LCByZWxlYXNlIG5vdGVzIG5lZWQgdG8gYmUgd3JpdHRlbi4gVGhleSBzaG91bGQgc3VtbWFyaXplIGNoYW5nZXMgZG9uZSBzaW5jZSBsYXN0IHJlbGVhc2UuIEZvciByb3VnaCBpZGVhIG9mIGV4cGVjdGVkIG5vdGVzIHNlZSBwcmV2aW91cyByZWxlYXNlcy4gT25jZSB3cml0dGVuLCByZWxlYXNlIG5vdGVzIHNob3VsZCBiZSBwbGFjZWQgaW4gYGRvY3MvcmVsZWFzZS1ub3Rlcy5tZGAuCitPbmNlIGEgcmVsZWFzZSBpcyByZWFkeSwgcmVsZWFzZSBub3RlcyBuZWVkIHRvIGJlIHdyaXR0ZW4uIFRoZXkgc2hvdWxkIHN1bW1hcml6ZSBjaGFuZ2VzIGRvbmUgc2luY2UgbGFzdCByZWxlYXNlLiBGb3Igcm91Z2ggaWRlYSBvZiBleHBlY3RlZCBub3RlcyBzZWUgcHJldmlvdXMgcmVsZWFzZXMuIE9uY2Ugd3JpdHRlbiwgcmVsZWFzZSBub3RlcyBzaG91bGQgYmUgYWRkZWQgdG8gYGRvY3MvcmVsZWFzZS1ub3Rlcy5tZGAuCiAKIAogIyMjIENvbW1pdCBhbmQgcHVzaCB1cGRhdGUgdG8gR2l0SHViCkBAIC00MywyMyArNDMsMzAgQEAKIFNpbmdsZSBoZWFkZXIgdmVyc2lvbiBvZiBgY2F0Y2guaHBwYCAqbmVlZHMqIHRvIGJlIGF0dGFjaGVkIGFzIGEgYmluYXJ5LAogYXMgdGhhdCBpcyB3aGVyZSB0aGUgb2ZmaWNpYWwgZG93bmxvYWQgbGluayBsaW5rcyB0by4gUHJlZmVyYWJseQogaXQgc2hvdWxkIHVzZSBsaW51eCBsaW5lIGVuZGluZ3MuIEFsbCBub24tYnVuZGxlZCByZXBvcnRlcnMgKEF1dG9tYWtlLAotVEFQLCBUZWFtQ2l0eSkgc2hvdWxkIGFsc28gYmUgYXR0YWNoZWQgYXMgYmluYXJpZXMsIGFzIHRoZXkgYXJlIGRlcGVuZGVudAotb24gYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBzaW5nbGUtaW5jbHVkZSBoZWFkZXIuCitUQVAsIFRlYW1DaXR5KSBzaG91bGQgYWxzbyBiZSBhdHRhY2hlZCBhcyBiaW5hcmllcywgYXMgdGhleSBtaWdodCBiZQorZGVwZW5kZW50IG9uIGEgc3BlY2lmaWMgdmVyc2lvbiBvZiB0aGUgc2luZ2xlLWluY2x1ZGUgaGVhZGVyLgogCitTaW5jZSAyLjUuMCwgdGhlIHJlbGVhc2UgdGFnIGFuZCB0aGUgImJpbmFyaWVzIiAoaGVhZGVycykgc2hvdWxkIGJlIFBHUAorc2lnbmVkLgogCi0jIyBPcHRpb25hbCBzdGVwcworIyMjIyBTaWduaW5nIGEgdGFnCiAKLVRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIG9wdGlvbmFsLCBhbmQgZG8gbm90IGhhdmUgdG8gYmUgcGVyZm9ybWVkIHdoZW4gcmVsZWFzaW5nIG5ldyB2ZXJzaW9uIG9mIENhdGNoLiBIb3dldmVyLCB0aGV5ICpzaG91bGQqIGhhcHBlbiwgYnV0IHRoZXkgY2FuIGhhcHBlbiB0aGUgbmV4dCBkYXkgd2l0aG91dCBsb3NpbmcgYW55dGhpbmcgc2lnbmlmaWNhbnQuCitUbyBjcmVhdGUgYSBzaWduZWQgdGFnLCB1c2UgYGdpdCB0YWcgLXMgPFZFUlNJT04+YCwgd2hlcmUgYDxWRVJTSU9OPmAKK2lzIHRoZSB2ZXJzaW9uIGJlaW5nIHJlbGVhc2VkLCBlLmcuIGBnaXQgdGFnIC1zIHYyLjYuMGAuCiAKK1VzZSB0aGUgdmVyc2lvbiBuYW1lIGFzIHRoZSBzaG9ydCBtZXNzYWdlIGFuZCB0aGUgcmVsZWFzZSBub3RlcyBhcwordGhlIGJvZHkgKGxvbmcpIG1lc3NhZ2UuCiAKLSMjIyB2Y3BrZyB1cGRhdGUKKyMjIyMgU2lnbmluZyB0aGUgaGVhZGVycwogCi1DYXRjaCBpcyBtYWludGFpbmluZyBpdHMgb3duIHBvcnQgaW4gTWljcm9zb2Z0J3MgcGFja2FnZSBtYW5hZ2VyIFt2Y3BrZ10oaHR0cHM6Ly9naXRodWIuY29tL01pY3Jvc29mdC92Y3BrZykuIFRoaXMgbWVhbnMgdGhhdCB3aGVuIG5ldyB2ZXJzaW9uIG9mIENhdGNoIGlzIHJlbGVhc2VkLCBpdCBzaG91bGQgYmUgcG9zdGVkIHRoZXJlIGFzIHdlbGwuIGB1cGRhdGVWY3BrZ1BhY2thZ2UucHlgIGNhbiBkbyBhIGxvdCBvZiBuZWNjZXNzYXJ5IHdvcmsgZm9yIHlvdSwgaXQgY3JlYXRlcyBhIGJyYW5jaCBhbmQgY29tbWl0cyBuZWNjZXNzYXJ5IGNoYW5nZXMuIFlvdSBzaG91bGQgcmV2aWV3IHRoZXNlIGNoYW5nZXMsIHB1c2ggYW5kIG9wZW4gYSBQUiBhZ2FpbnN0IHZjcGtnJ3MgdXBzdHJlYW0uCitUaGlzIHdpbGwgY3JlYXRlIEFTQ0lJLWFybW9yZWQgc2lnbmF0dXJlcyBmb3IgdGhlIGhlYWRlcnMgdGhhdCBhcmUKK3VwbG9hZGVkIHRvIHRoZSBHaXRIdWIgcmVsZWFzZToKIAotTm90ZSB0aGF0IHRoZSBzY3JpcHQgYXNzdW1lcyB5b3UgaGF2ZSB5b3VyIGZvcmsgb2YgdmNwa2cgY2hlY2tlZCBvdXQgaW4gYSBkaXJlY3RvcnkgbmV4dCB0byB0aGUgZGlyZWN0b3J5IHdoZXJlIHlvdSBoYXZlIGNoZWNrZWQgb3V0IENhdGNoLCBsaWtlIHNvOgogYGBgCi1HaXRIdWIKLSAgICBDYXRjaAotICAgIHZjcGtnCiskIGdwZzIgLS1hcm1vciAtLW91dHB1dCBjYXRjaC5ocHAuYXNjIC0tZGV0YWNoLXNpZyBjYXRjaC5ocHAKKyQgZ3BnMiAtLWFybW9yIC0tb3V0cHV0IGNhdGNoX3JlcG9ydGVyX2F1dG9tYWtlLmhwcC5hc2MgLS1kZXRhY2gtc2lnIGNhdGNoX3JlcG9ydGVyX2F1dG9tYWtlLmhwcAorJCBncGcyIC0tYXJtb3IgLS1vdXRwdXQgY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwLmFzYyAtLWRldGFjaC1zaWcgY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwCiskIGdwZzIgLS1hcm1vciAtLW91dHB1dCBjYXRjaF9yZXBvcnRlcl90YXAuaHBwLmFzYyAtLWRldGFjaC1zaWcgY2F0Y2hfcmVwb3J0ZXJfdGFwLmhwcAogYGBgCiAKK19HUEcgZG9lcyBub3Qgc3VwcG9ydCBzaWduaW5nIG11bHRpcGxlIGZpbGVzIGluIHNpbmdsZSBpbnZvY2F0aW9uLl8KZGlmZiAtLWdpdCBhL2RvY3MvcmVwb3J0ZXJzLm1kIGIvZG9jcy9yZXBvcnRlcnMubWQKaW5kZXggNzhlNzhlZS4uMzJiMzQxOSAxMDA2NDQKLS0tIGEvZG9jcy9yZXBvcnRlcnMubWQKKysrIGIvZG9jcy9yZXBvcnRlcnMubWQKQEAgLTI1LDggKzI1LDggQEAKIFRoZXJlIGFyZSBhIGZldyBhZGRpdGlvbmFsIHJlcG9ydGVycywgZm9yIHNwZWNpZmljIGJ1aWxkIHN5c3RlbXMsIGluIHRoZSBDYXRjaCByZXBvc2l0b3J5IChpbiBgaW5jbHVkZVxyZXBvcnRlcnNgKSB3aGljaCB5b3UgY2FuIGAjaW5jbHVkZWAgaW4geW91ciBwcm9qZWN0IGlmIHlvdSB3b3VsZCBsaWtlIHRvIG1ha2UgdXNlIG9mIHRoZW0uCiBEbyB0aGlzIGluIG9uZSBzb3VyY2UgZmlsZSAtIHRoZSBzYW1lIG9uZSB5b3UgaGF2ZSBgQ0FUQ0hfQ09ORklHX01BSU5gIG9yIGBDQVRDSF9DT05GSUdfUlVOTkVSYC4KIAotKiBgdGVhbWNpdHlgIHdyaXRlcyB0aGUgbmF0aXZlLCBzdHJlYW1pbmcsIGZvcm1hdCB0aGF0IFtUZWFtQ2l0eV0oaHR0cHM6Ly93d3cuamV0YnJhaW5zLmNvbS90ZWFtY2l0eS8pIHVuZGVyc3RhbmRzLgotVXNlIHRoaXMgd2hlbiBidWlsZGluZyBhcyBwYXJ0IG9mIGEgVGVhbUNpdHkgYnVpbGQgdG8gc2VlIHJlc3VsdHMgYXMgdGhleSBoYXBwZW4uCisqIGB0ZWFtY2l0eWAgd3JpdGVzIHRoZSBuYXRpdmUsIHN0cmVhbWluZywgZm9ybWF0IHRoYXQgW1RlYW1DaXR5XShodHRwczovL3d3dy5qZXRicmFpbnMuY29tL3RlYW1jaXR5LykgdW5kZXJzdGFuZHMuIAorVXNlIHRoaXMgd2hlbiBidWlsZGluZyBhcyBwYXJ0IG9mIGEgVGVhbUNpdHkgYnVpbGQgdG8gc2VlIHJlc3VsdHMgYXMgdGhleSBoYXBwZW4gKFtjb2RlIGV4YW1wbGVdKC4uL2V4YW1wbGVzLzIwNy1ScHQtVGVhbUNpdHlSZXBvcnRlci5jcHApKS4KICogYHRhcGAgd3JpdGVzIGluIHRoZSBUQVAgKFtUZXN0IEFueXRoaW5nIFByb3RvY29sXShodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9UZXN0X0FueXRoaW5nX1Byb3RvY29sKSkgZm9ybWF0LgogKiBgYXV0b21ha2VgIHdyaXRlcyBpbiBhIGZvcm1hdCB0aGF0IGNvcnJlc3BvbmQgdG8gW2F1dG9tYWtlICAudHJzXShodHRwczovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2F1dG9tYWtlL21hbnVhbC9odG1sX25vZGUvTG9nLWZpbGVzLWdlbmVyYXRpb24tYW5kLXRlc3QtcmVzdWx0cy1yZWNvcmRpbmcuaHRtbCkgZmlsZXMKIApkaWZmIC0tZ2l0IGEvZG9jcy90ZXN0LWNhc2VzLWFuZC1zZWN0aW9ucy5tZCBiL2RvY3MvdGVzdC1jYXNlcy1hbmQtc2VjdGlvbnMubWQKaW5kZXggNjg5NDRmNS4uNjJhODA1ZiAxMDA2NDQKLS0tIGEvZG9jcy90ZXN0LWNhc2VzLWFuZC1zZWN0aW9ucy5tZAorKysgYi9kb2NzL3Rlc3QtY2FzZXMtYW5kLXNlY3Rpb25zLm1kCkBAIC0xLDYgKzEsMTIgQEAKIDxhIGlkPSJ0b3AiPjwvYT4KICMgVGVzdCBjYXNlcyBhbmQgc2VjdGlvbnMKIAorKipDb250ZW50cyoqPGJyPgorW1RhZ3NdKCN0YWdzKTxicj4KK1tUYWcgYWxpYXNlc10oI3RhZy1hbGlhc2VzKTxicj4KK1tCREQtc3R5bGUgdGVzdCBjYXNlc10oI2JkZC1zdHlsZS10ZXN0LWNhc2VzKTxicj4KK1tUeXBlIHBhcmFtZXRyaXNlZCB0ZXN0IGNhc2VzXSgjdHlwZS1wYXJhbWV0cmlzZWQtdGVzdC1jYXNlcyk8YnI+CisKIFdoaWxlIENhdGNoIGZ1bGx5IHN1cHBvcnRzIHRoZSB0cmFkaXRpb25hbCwgeFVuaXQsIHN0eWxlIG9mIGNsYXNzLWJhc2VkIGZpeHR1cmVzIGNvbnRhaW5pbmcgdGVzdCBjYXNlIG1ldGhvZHMgdGhpcyBpcyBub3QgdGhlIHByZWZlcnJlZCBzdHlsZS4KIAogSW5zdGVhZCBDYXRjaCBwcm92aWRlcyBhIHBvd2VyZnVsIG1lY2hhbmlzbSBmb3IgbmVzdGluZyB0ZXN0IGNhc2Ugc2VjdGlvbnMgd2l0aGluIGEgdGVzdCBjYXNlLiBGb3IgYSBtb3JlIGRldGFpbGVkIGRpc2N1c3Npb24gc2VlIHRoZSBbdHV0b3JpYWxdKHR1dG9yaWFsLm1kI3Rlc3QtY2FzZXMtYW5kLXNlY3Rpb25zKS4KQEAgLTIwLDEwICsyNiwxMCBAQAogCiBBcyBhbiBleGFtcGxlIC0gZ2l2ZW4gdGhlIGZvbGxvd2luZyB0ZXN0IGNhc2VzOgogCi0JVEVTVF9DQVNFKCAiQSIsICJbd2lkZ2V0XSIgKSB7IC8qIC4uLiAqLyB9Ci0JVEVTVF9DQVNFKCAiQiIsICJbd2lkZ2V0XSIgKSB7IC8qIC4uLiAqLyB9Ci0JVEVTVF9DQVNFKCAiQyIsICJbZ2FkZ2V0XSIgKSB7IC8qIC4uLiAqLyB9Ci0JVEVTVF9DQVNFKCAiRCIsICJbd2lkZ2V0XVtnYWRnZXRdIiApIHsgLyogLi4uICovIH0KKyAgICBURVNUX0NBU0UoICJBIiwgIlt3aWRnZXRdIiApIHsgLyogLi4uICovIH0KKyAgICBURVNUX0NBU0UoICJCIiwgIlt3aWRnZXRdIiApIHsgLyogLi4uICovIH0KKyAgICBURVNUX0NBU0UoICJDIiwgIltnYWRnZXRdIiApIHsgLyogLi4uICovIH0KKyAgICBURVNUX0NBU0UoICJEIiwgIlt3aWRnZXRdW2dhZGdldF0iICkgeyAvKiAuLi4gKi8gfQogCiBUaGUgdGFnIGV4cHJlc3Npb24sIGBgYCJbd2lkZ2V0XSJgYGAgc2VsZWN0cyBBLCBCICYgRC4gYGBgIltnYWRnZXRdImBgYCBzZWxlY3RzIEMgJiBELiBgYGAiW3dpZGdldF1bZ2FkZ2V0XSJgYGAgc2VsZWN0cyBqdXN0IEQgYW5kIGBgYCJbd2lkZ2V0XSxbZ2FkZ2V0XSJgYGAgc2VsZWN0cyBhbGwgZm91ciB0ZXN0IGNhc2VzLgogCkBAIC0zNyw3ICs0Myw3IEBACiAKICogYFshaGlkZV1gIG9yIGBbLl1gIC0gY2F1c2VzIHRlc3QgY2FzZXMgdG8gYmUgc2tpcHBlZCBmcm9tIHRoZSBkZWZhdWx0IGxpc3QgKGkuZS4gd2hlbiBubyB0ZXN0IGNhc2VzIGhhdmUgYmVlbiBleHBsaWNpdGx5IHNlbGVjdGVkIHRocm91Z2ggdGFnIGV4cHJlc3Npb25zIG9yIG5hbWUgd2lsZGNhcmRzKS4gVGhlIGhpZGUgdGFnIGlzIG9mdGVuIGNvbWJpbmVkIHdpdGggYW5vdGhlciwgdXNlciwgdGFnIChmb3IgZXhhbXBsZSBgWy5dW2ludGVncmF0aW9uXWAgLSBzbyBhbGwgaW50ZWdyYXRpb24gdGVzdHMgYXJlIGV4Y2x1ZGVkIGZyb20gdGhlIGRlZmF1bHQgcnVuIGJ1dCBjYW4gYmUgcnVuIGJ5IHBhc3NpbmcgYFtpbnRlZ3JhdGlvbl1gIG9uIHRoZSBjb21tYW5kIGxpbmUpLiBBcyBhIHNob3J0LWN1dCB5b3UgY2FuIGNvbWJpbmUgdGhlc2UgYnkgc2ltcGx5IHByZWZpeGluZyB5b3VyIHVzZXIgdGFnIHdpdGggYSBgLmAgLSBlLmcuIGBbLmludGVncmF0aW9uXWAuIEJlY2F1c2UgdGhlIGhpZGUgdGFnIGhhcyBldm9sdmVkIHRvIGhhdmUgc2V2ZXJhbCBmb3JtcywgYWxsIGZvcm1zIGFyZSBhZGRlZCBhcyB0YWdzIGlmIHlvdSB1c2Ugb25lIG9mIHRoZW0uCiAKLSogYFshdGhyb3dzXWAJLSBsZXRzIENhdGNoIGtub3cgdGhhdCB0aGlzIHRlc3QgaXMgbGlrZWx5IHRvIHRocm93IGFuIGV4Y2VwdGlvbiBldmVuIGlmIHN1Y2Nlc3NmdWwuIFRoaXMgY2F1c2VzIHRoZSB0ZXN0IHRvIGJlIGV4Y2x1ZGVkIHdoZW4gcnVubmluZyB3aXRoIGAtZWAgb3IgYC0tbm90aHJvd2AuCisqIGBbIXRocm93c11gIC0gbGV0cyBDYXRjaCBrbm93IHRoYXQgdGhpcyB0ZXN0IGlzIGxpa2VseSB0byB0aHJvdyBhbiBleGNlcHRpb24gZXZlbiBpZiBzdWNjZXNzZnVsLiBUaGlzIGNhdXNlcyB0aGUgdGVzdCB0byBiZSBleGNsdWRlZCB3aGVuIHJ1bm5pbmcgd2l0aCBgLWVgIG9yIGAtLW5vdGhyb3dgLgogCiAqIGBbIW1heWZhaWxdYCAtIGRvZXNuJ3QgZmFpbCB0aGUgdGVzdCBpZiBhbnkgZ2l2ZW4gYXNzZXJ0aW9uIGZhaWxzIChidXQgc3RpbGwgcmVwb3J0cyBpdCkuIFRoaXMgY2FuIGJlIHVzZWZ1bCB0byBmbGFnIGEgd29yay1pbi1wcm9ncmVzcywgb3IgYSBrbm93biBpc3N1ZSB0aGF0IHlvdSBkb24ndCB3YW50IHRvIGltbWVkaWF0ZWx5IGZpeCBidXQgc3RpbGwgd2FudCB0byB0cmFjayBpbiB5b3VyIHRlc3RzLgogCkBAIC01NSwxMSArNjEsMTEgQEAKIAogQmV0d2VlbiB0YWcgZXhwcmVzc2lvbnMgYW5kIHdpbGRjYXJkZWQgdGVzdCBuYW1lcyAoYXMgd2VsbCBhcyBjb21iaW5hdGlvbnMgb2YgdGhlIHR3bykgcXVpdGUgY29tcGxleCBwYXR0ZXJucyBjYW4gYmUgY29uc3RydWN0ZWQgdG8gZGlyZWN0IHdoaWNoIHRlc3QgY2FzZXMgYXJlIHJ1bi4gSWYgYSBjb21wbGV4IHBhdHRlcm4gaXMgdXNlZCBvZnRlbiBpdCBpcyBjb252ZW5pZW50IHRvIGJlIGFibGUgdG8gY3JlYXRlIGFuIGFsaWFzIGZvciB0aGUgZXhwcmVzc2lvbi4gVGhpcyBjYW4gYmUgZG9uZSwgaW4gY29kZSwgdXNpbmcgdGhlIGZvbGxvd2luZyBmb3JtOgogCi0JQ0FUQ0hfUkVHSVNURVJfVEFHX0FMSUFTKCA8YWxpYXMgc3RyaW5nPiwgPHRhZyBleHByZXNzaW9uPiApCisgICAgQ0FUQ0hfUkVHSVNURVJfVEFHX0FMSUFTKCA8YWxpYXMgc3RyaW5nPiwgPHRhZyBleHByZXNzaW9uPiApCiAKIEFsaWFzZXMgbXVzdCBiZWdpbiB3aXRoIHRoZSBgQGAgY2hhcmFjdGVyLiBBbiBleGFtcGxlIG9mIGEgdGFnIGFsaWFzIGlzOgogCi0JQ0FUQ0hfUkVHSVNURVJfVEFHX0FMSUFTKCAiW0BuaGZdIiwgIltmYWlsaW5nXX5bLl0iICkKKyAgICBDQVRDSF9SRUdJU1RFUl9UQUdfQUxJQVMoICJbQG5oZl0iLCAiW2ZhaWxpbmddflsuXSIgKQogCiBOb3cgd2hlbiBgW0BuaGZdYCBpcyB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUgdGhpcyBtYXRjaGVzIGFsbCB0ZXN0cyB0aGF0IGFyZSB0YWdnZWQgYFtmYWlsaW5nXWAsIGJ1dCB3aGljaCBhcmUgbm90IGFsc28gaGlkZGVuLgogCkBAIC04Niw2ICs5MiwxMDUgQEAKIAogT3RoZXIgdGhhbiB0aGUgYWRkaXRpb25hbCBwcmVmaXhlcyBhbmQgdGhlIGZvcm1hdHRpbmcgaW4gdGhlIGNvbnNvbGUgcmVwb3J0ZXIgdGhlc2UgbWFjcm9zIGJlaGF2ZSBleGFjdGx5IGFzIGBgYFRFU1RfQ0FTRWBgYHMgYW5kIGBgYFNFQ1RJT05gYGBzLiBBcyBzdWNoIHRoZXJlIGlzIG5vdGhpbmcgZW5mb3JjaW5nIHRoZSBjb3JyZWN0IHNlcXVlbmNpbmcgb2YgdGhlc2UgbWFjcm9zIC0gdGhhdCdzIHVwIHRvIHRoZSBwcm9ncmFtbWVyIQogCisjIyBUeXBlIHBhcmFtZXRyaXNlZCB0ZXN0IGNhc2VzCisKK0luIGFkZGl0aW9uIHRvIGBURVNUX0NBU0VgcywgQ2F0Y2gyIGFsc28gc3VwcG9ydHMgdGVzdCBjYXNlcyBwYXJhbWV0cmlzZWQKK2J5IHR5cGVzLCBpbiB0aGUgZm9ybSBvZiBgVEVNUExBVEVfVEVTVF9DQVNFYCBhbmQKK2BURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRWAuCisKKyogKipURU1QTEFURV9URVNUX0NBU0UoKiogX3Rlc3QgbmFtZV8gLCBfdGFnc18sICBfdHlwZTFfLCBfdHlwZTJfLCAuLi4sIF90eXBlbl8gKiopKioKKworX3Rlc3QgbmFtZV8gYW5kIF90YWdfIGFyZSBleGFjdGx5IHRoZSBzYW1lIGFzIHRoZXkgYXJlIGluIGBURVNUX0NBU0VgLAord2l0aCB0aGUgZGlmZmVyZW5jZSB0aGF0IHRoZSB0YWcgc3RyaW5nIG11c3QgYmUgcHJvdmlkZWQgKGhvd2V2ZXIsIGl0CitjYW4gYmUgZW1wdHkpLiBfdHlwZTFfIHRocm91Z2ggX3R5cGVuXyBpcyB0aGUgbGlzdCBvZiB0eXBlcyBmb3Igd2hpY2gKK3RoaXMgdGVzdCBjYXNlIHNob3VsZCBydW4sIGFuZCwgaW5zaWRlIHRoZSB0ZXN0IGNvZGUsIHRoZSBjdXJyZW50IHR5cGUKK2lzIGF2YWlsYWJsZSBhcyB0aGUgYFRlc3RUeXBlYCB0eXBlLgorCitCZWNhdXNlIG9mIGxpbWl0YXRpb25zIG9mIHRoZSBDKysgcHJlcHJvY2Vzc29yLCBpZiB5b3Ugd2FudCB0byBzcGVjaWZ5CithIHR5cGUgd2l0aCBtdWx0aXBsZSB0ZW1wbGF0ZSBwYXJhbWV0ZXJzLCB5b3UgbmVlZCB0byBlbmNsb3NlIGl0IGluCitwYXJlbnRoZXNlcywgZS5nLiBgc3RkOjptYXA8aW50LCBzdGQ6OnN0cmluZz5gIG5lZWRzIHRvIGJlIHBhc3NlZCBhcworYChzdGQ6Om1hcDxpbnQsIHN0ZDo6c3RyaW5nPilgLgorCitFeGFtcGxlOgorYGBgY3BwCitURU1QTEFURV9URVNUX0NBU0UoICJ2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCIsICJbdmVjdG9yXVt0ZW1wbGF0ZV0iLCBpbnQsIHN0ZDo6c3RyaW5nLCAoc3RkOjp0dXBsZTxpbnQsZmxvYXQ+KSApIHsKKworICAgIHN0ZDo6dmVjdG9yPFRlc3RUeXBlPiB2KCA1ICk7CisKKyAgICBSRVFVSVJFKCB2LnNpemUoKSA9PSA1ICk7CisgICAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDUgKTsKKworICAgIFNFQ1RJT04oICJyZXNpemluZyBiaWdnZXIgY2hhbmdlcyBzaXplIGFuZCBjYXBhY2l0eSIgKSB7CisgICAgICAgIHYucmVzaXplKCAxMCApOworCisgICAgICAgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDEwICk7CisgICAgICAgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSAxMCApOworICAgIH0KKyAgICBTRUNUSU9OKCAicmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eSIgKSB7CisgICAgICAgIHYucmVzaXplKCAwICk7CisKKyAgICAgICAgUkVRVUlSRSggdi5zaXplKCkgPT0gMCApOworICAgICAgICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApOworCisgICAgICAgIFNFQ1RJT04oICJXZSBjYW4gdXNlIHRoZSAnc3dhcCB0cmljaycgdG8gcmVzZXQgdGhlIGNhcGFjaXR5IiApIHsKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPFRlc3RUeXBlPiBlbXB0eTsKKyAgICAgICAgICAgIGVtcHR5LnN3YXAoIHYgKTsKKworICAgICAgICAgICAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID09IDAgKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBTRUNUSU9OKCAicmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkiICkgeworICAgICAgICB2LnJlc2VydmUoIDAgKTsKKworICAgICAgICBSRVFVSVJFKCB2LnNpemUoKSA9PSA1ICk7CisgICAgICAgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICk7CisgICAgfQorfQorYGBgCisKKyogKipURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSgqKiBfdGVzdCBuYW1lXyAsIF90YWdzXywgKF90ZW1wbGF0ZS10eXBlMV8sIF90ZW1wbGF0ZS10eXBlMl8sIC4uLiwgX3RlbXBsYXRlLXR5cGVuXyksIChfdGVtcGxhdGUtYXJnMV8sIF90ZW1wbGF0ZS1hcmcyXywgLi4uLCBfdGVtcGxhdGUtYXJnbV8pICoqKSoqCisKK190ZW1wbGF0ZS10eXBlMV8gdGhyb3VnaCBfdGVtcGxhdGUtdHlwZW5fIGlzIGxpc3Qgb2YgdGVtcGxhdGUgdGVtcGxhdGUKK3R5cGVzIHdoaWNoIHNob3VsZCBiZSBjb21iaW5lZCB3aXRoIGVhY2ggb2YgX3RlbXBsYXRlLWFyZzFfIHRocm91Z2gKKyBfdGVtcGxhdGUtYXJnbV8sIHJlc3VsdGluZyBpbiBfbiAqIG1fIHRlc3QgY2FzZXMuIEluc2lkZSB0aGUgdGVzdCBjYXNlLAordGhlIHJlc3VsdGluZyB0eXBlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgbmFtZSBvZiBgVGVzdFR5cGVgLgorCitUbyBzcGVjaWZ5IG1vcmUgdGhhbiAxIHR5cGUgYXMgYSBzaW5nbGUgX3RlbXBsYXRlLXR5cGVfIG9yIF90ZW1wbGF0ZS1hcmdfLAoreW91IG11c3QgZW5jbG9zZSB0aGUgdHlwZXMgaW4gYW4gYWRkaXRpb25hbCBzZXQgb2YgcGFyZW50aGVzZXMsIGUuZy4KK2AoKGludCwgZmxvYXQpLCAoY2hhciwgZG91YmxlKSlgIHNwZWNpZmllcyAyIHRlbXBsYXRlLWFyZ3MsIGVhY2gKK2NvbnNpc3Rpbmcgb2YgMiBjb25jcmV0ZSB0eXBlcyAoYGludGAsIGBmbG9hdGAgYW5kIGBjaGFyYCwgYGRvdWJsZWAKK3Jlc3BlY3RpdmVseSkuIFlvdSBjYW4gYWxzbyBvbWl0IHRoZSBvdXRlciBzZXQgb2YgcGFyZW50aGVzZXMgaWYgeW91CitzcGVjaWZ5IG9ubHkgb25lIHR5cGUgYXMgdGhlIGZ1bGwgc2V0IG9mIGVpdGhlciB0aGUgX3RlbXBsYXRlLXR5cGVzXywKK29yIHRoZSBfdGVtcGxhdGUtYXJnc18uCisKKworRXhhbXBsZToKK2BgYGNwcAordGVtcGxhdGU8IHR5cGVuYW1lIFQ+CitzdHJ1Y3QgRm9vIHsKKyAgICBzaXplX3Qgc2l6ZSgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfTsKKworVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2UiLCAiW3RlbXBsYXRlXVtwcm9kdWN0XSIsIChzdGQ6OnZlY3RvciwgRm9vKSwgKGludCwgZmxvYXQpKSB7CisgICAgVGVzdFR5cGUgeDsKKyAgICBSRVFVSVJFKHguc2l6ZSgpID09IDApOworfQorYGBgCisKK1lvdSBjYW4gYWxzbyBoYXZlIGRpZmZlcmVudCBhcml0aWVzIGluIHRoZSBfdGVtcGxhdGUtYXJnXyBwYWNrczoKK2BgYGNwcAorVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIlByb2R1Y3Qgd2l0aCBkaWZmZXJpbmcgYXJpdGllcyIsICJbdGVtcGxhdGVdW3Byb2R1Y3RdIiwgc3RkOjp0dXBsZSwgKGludCwgKGludCwgZG91YmxlKSwgKGludCwgZG91YmxlLCBmbG9hdCkpKSB7CisgICAgVGVzdFR5cGUgeDsKKyAgICBSRVFVSVJFKHN0ZDo6dHVwbGVfc2l6ZTxUZXN0VHlwZT46OnZhbHVlID49IDEpOworfQorYGBgCisKK19XaGlsZSB0aGVyZSBpcyBhbiB1cHBlciBsaW1pdCBvbiB0aGUgbnVtYmVyIG9mIHR5cGVzIHlvdSBjYW4gc3BlY2lmeQoraW4gc2luZ2xlIGBURU1QTEFURV9URVNUX0NBU0VgIG9yIGBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRWAsIHRoZSBsaW1pdAoraXMgdmVyeSBoaWdoIGFuZCBzaG91bGQgbm90IGJlIGVuY291bnRlcmVkIGluIHByYWN0aWNlLl8KKwogLS0tCiAKIFtIb21lXShSZWFkbWUubWQjdG9wKQpkaWZmIC0tZ2l0IGEvZG9jcy90ZXN0LWZpeHR1cmVzLm1kIGIvZG9jcy90ZXN0LWZpeHR1cmVzLm1kCmluZGV4IDFkYzdiYWIuLjZiMjljZTYgMTAwNjQ0Ci0tLSBhL2RvY3MvdGVzdC1maXh0dXJlcy5tZAorKysgYi9kb2NzL3Rlc3QtZml4dHVyZXMubWQKQEAgLTMwLDYgKzMwLDYwIEBACiAKIFRoZSB0d28gdGVzdCBjYXNlcyBoZXJlIHdpbGwgY3JlYXRlIHVuaXF1ZWx5LW5hbWVkIGRlcml2ZWQgY2xhc3NlcyBvZiBVbmlxdWVUZXN0c0ZpeHR1cmUgYW5kIHRodXMgY2FuIGFjY2VzcyB0aGUgYGdldElEKClgIHByb3RlY3RlZCBtZXRob2QgYW5kIGBjb25uYCBtZW1iZXIgdmFyaWFibGVzLiBUaGlzIGVuc3VyZXMgdGhhdCBib3RoIHRoZSB0ZXN0IGNhc2VzIGFyZSBhYmxlIHRvIGNyZWF0ZSBhIERCQ29ubmVjdGlvbiB1c2luZyB0aGUgc2FtZSBtZXRob2QgKERSWSBwcmluY2lwbGUpIGFuZCB0aGF0IGFueSBJRCdzIGNyZWF0ZWQgYXJlIHVuaXF1ZSBzdWNoIHRoYXQgdGhlIG9yZGVyIHRoYXQgdGVzdHMgYXJlIGV4ZWN1dGVkIGRvZXMgbm90IG1hdHRlci4KIAorCitDYXRjaDIgYWxzbyBwcm92aWRlcyBgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRGAgYW5kCitgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EYCB0aGF0IGNhbiBiZSB1c2VkIHRvZ2V0aGVyCit3aXRoIHRlbXBsYXRlZCBmaXh0dXJlcyBhbmQgdGVtcGxhdGVkIHRlbXBsYXRlIGZpeHR1cmVzIHRvIHBlcmZvcm0KK3Rlc3RzIGZvciBtdWx0aXBsZSBkaWZmZXJlbnQgdHlwZXMuIFVubGlrZSBgVEVTVF9DQVNFX01FVEhPRGAsCitgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRGAgYW5kIGBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RgIGRvCityZXF1aXJlIHRoZSB0YWcgc3BlY2lmaWNhdGlvbiB0byBiZSBub24tZW1wdHksIGFzIGl0IGlzIGZvbGxvd2VkIGJ5CitmdXJ0aGVyIG1hY3JvIGFyZ3VtZW50cy4KKworQWxzbyBub3RlIHRoYXQsIGJlY2F1c2Ugb2YgbGltaXRhdGlvbnMgb2YgdGhlIEMrKyBwcmVwcm9jZXNzb3IsIGlmIHlvdQord2FudCB0byBzcGVjaWZ5IGEgdHlwZSB3aXRoIG11bHRpcGxlIHRlbXBsYXRlIHBhcmFtZXRlcnMsIHlvdSBuZWVkIHRvCitlbmNsb3NlIGl0IGluIHBhcmVudGhlc2VzLCBlLmcuIGBzdGQ6Om1hcDxpbnQsIHN0ZDo6c3RyaW5nPmAgbmVlZHMgdG8gYmUKK3Bhc3NlZCBhcyBgKHN0ZDo6bWFwPGludCwgc3RkOjpzdHJpbmc+KWAuCitJbiB0aGUgY2FzZSBvZiBgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EYCwgaWYgYSBtZW1iZXIgb2YgdGhlCit0eXBlIGxpc3Qgc2hvdWxkIGNvbnNpc3Qgb2YgbW9yZSB0aGFuIHNpbmdsZSB0eXBlLCBpdCBuZWVkcyB0byBiZSBlbmNsb3NlZAoraW4gYW5vdGhlciBwYWlyIG9mIHBhcmVudGhlc2VzLCBlLmcuIGAoc3RkOjptYXAsIHN0ZDo6cGFpcilgIGFuZAorYCgoaW50LCBmbG9hdCksIChjaGFyLCBkb3VibGUpKWAuCisKK0V4YW1wbGU6CitgYGBjcHAKK3RlbXBsYXRlPCB0eXBlbmFtZSBUID4KK3N0cnVjdCBUZW1wbGF0ZV9GaXh0dXJlIHsKKyAgICBUZW1wbGF0ZV9GaXh0dXJlKCk6IG1fYSgxKSB7fQorCisgICAgVCBtX2E7Cit9OworCitURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKFRlbXBsYXRlX0ZpeHR1cmUsIkEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIiwgIltjbGFzc11bdGVtcGxhdGVdIiwgaW50LCBmbG9hdCwgZG91YmxlKSB7CisgICAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAxICk7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgVGVtcGxhdGVfVGVtcGxhdGVfRml4dHVyZSB7CisgICAgVGVtcGxhdGVfVGVtcGxhdGVfRml4dHVyZSgpIHt9CisKKyAgICBUIG1fYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgRm9vX2NsYXNzIHsKKyAgICBzaXplX3Qgc2l6ZSgpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfTsKKworVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKFRlbXBsYXRlX1RlbXBsYXRlX0ZpeHR1cmUsICJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHN1Y2NlZWRzIiwgIltjbGFzc11bdGVtcGxhdGVdIiwgKEZvb19jbGFzcywgc3RkOjp2ZWN0b3IpLCBpbnQpIHsKKyAgICBSRVFVSVJFKCBUZW1wbGF0ZV9UZW1wbGF0ZV9GaXh0dXJlPFRlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAwICk7Cit9CitgYGAKKworX1doaWxlIHRoZXJlIGlzIGFuIHVwcGVyIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgdHlwZXMgeW91IGNhbiBzcGVjaWZ5CitpbiBzaW5nbGUgYFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RgIG9yIGBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RgLAordGhlIGxpbWl0IGlzIHZlcnkgaGlnaCBhbmQgc2hvdWxkIG5vdCBiZSBlbmNvdW50ZXJlZCBpbiBwcmFjdGljZS5fCisKIC0tLQogCiBbSG9tZV0oUmVhZG1lLm1kI3RvcCkKZGlmZiAtLWdpdCBhL2RvY3MvdG9zdHJpbmcubWQgYi9kb2NzL3Rvc3RyaW5nLm1kCmluZGV4IDU2OGMxYzIuLjkzM2YyZTYgMTAwNjQ0Ci0tLSBhL2RvY3MvdG9zdHJpbmcubWQKKysrIGIvZG9jcy90b3N0cmluZy5tZApAQCAtMSw2ICsxLDEyIEBACiA8YSBpZD0idG9wIj48L2E+CiAjIFN0cmluZyBjb252ZXJzaW9ucwogCisqKkNvbnRlbnRzKio8YnI+Citbb3BlcmF0b3IgPDwgb3ZlcmxvYWQgZm9yIHN0ZDo6b3N0cmVhbV0oI29wZXJhdG9yLS1vdmVybG9hZC1mb3Itc3Rkb3N0cmVhbSk8YnI+CitbQ2F0Y2g6OlN0cmluZ01ha2VyIHNwZWNpYWxpc2F0aW9uXSgjY2F0Y2hzdHJpbmdtYWtlci1zcGVjaWFsaXNhdGlvbik8YnI+CitbQ2F0Y2g6OmlzX3JhbmdlIHNwZWNpYWxpc2F0aW9uXSgjY2F0Y2hpc19yYW5nZS1zcGVjaWFsaXNhdGlvbik8YnI+CitbRXhjZXB0aW9uc10oI2V4Y2VwdGlvbnMpPGJyPgorCiBDYXRjaCBuZWVkcyB0byBiZSBhYmxlIHRvIGNvbnZlcnQgdHlwZXMgeW91IHVzZSBpbiBhc3NlcnRpb25zIGFuZCBsb2dnaW5nIGV4cHJlc3Npb25zIGludG8gc3RyaW5ncyAoZm9yIGxvZ2dpbmcgYW5kIHJlcG9ydGluZyBwdXJwb3NlcykuCiBNb3N0IGJ1aWx0LWluIG9yIHN0ZCB0eXBlcyBhcmUgc3VwcG9ydGVkIG91dCBvZiB0aGUgYm94IGJ1dCB0aGVyZSBhcmUgdHdvIHdheXMgdGhhdCB5b3UgY2FuIHRlbGwgQ2F0Y2ggaG93IHRvIGNvbnZlcnQgeW91ciBvd24gdHlwZXMgKG9yIG90aGVyLCB0aGlyZC1wYXJ0eSB0eXBlcykgaW50byBzdHJpbmdzLgogCkBAIC0xMCwzMCArMTYsMzAgQEAKIAogYGBgCiBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8ICggc3RkOjpvc3RyZWFtJiBvcywgVCBjb25zdCYgdmFsdWUgKSB7Ci0Jb3MgPDwgY29udmVydE15VHlwZVRvU3RyaW5nKCB2YWx1ZSApOwotCXJldHVybiBvczsKKyAgICBvcyA8PCBjb252ZXJ0TXlUeXBlVG9TdHJpbmcoIHZhbHVlICk7CisgICAgcmV0dXJuIG9zOwogfQogYGBgCiAKICh3aGVyZSBgYGBUYGBgIGlzIHlvdXIgdHlwZSBhbmQgYGBgY29udmVydE15VHlwZVRvU3RyaW5nYGBgIGlzIHdoZXJlIHlvdSdsbCB3cml0ZSB3aGF0ZXZlciBjb2RlIGlzIG5lY2Vzc2FyeSB0byBtYWtlIHlvdXIgdHlwZSBwcmludGFibGUgLSBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgaW4gYW5vdGhlciBmdW5jdGlvbikuCiAKLVlvdSBzaG91bGQgcHV0IHRoaXMgZnVuY3Rpb24gaW4gdGhlIHNhbWUgbmFtZXNwYWNlIGFzIHlvdXIgdHlwZSBhbmQgaGF2ZSBpdCBkZWNsYXJlZCBiZWZvcmUgaW5jbHVkaW5nIENhdGNoJ3MgaGVhZGVyLgorWW91IHNob3VsZCBwdXQgdGhpcyBmdW5jdGlvbiBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXMgeW91ciB0eXBlLCBvciB0aGUgZ2xvYmFsIG5hbWVzcGFjZSwgYW5kIGhhdmUgaXQgZGVjbGFyZWQgYmVmb3JlIGluY2x1ZGluZyBDYXRjaCdzIGhlYWRlci4KIAotIyMgQ2F0Y2g6OlN0cmluZ01ha2VyPFQ+IHNwZWNpYWxpc2F0aW9uCisjIyBDYXRjaDo6U3RyaW5nTWFrZXIgc3BlY2lhbGlzYXRpb24KIElmIHlvdSBkb24ndCB3YW50IHRvIHByb3ZpZGUgYW4gYGBgb3BlcmF0b3IgPDxgYGAgb3ZlcmxvYWQsIG9yIHlvdSB3YW50IHRvIGNvbnZlcnQgeW91ciB0eXBlIGRpZmZlcmVudGx5IGZvciB0ZXN0aW5nIHB1cnBvc2VzLCB5b3UgY2FuIHByb3ZpZGUgYSBzcGVjaWFsaXphdGlvbiBmb3IgYENhdGNoOjpTdHJpbmdNYWtlcjxUPmA6CiAKIGBgYAogbmFtZXNwYWNlIENhdGNoIHsKLQl0ZW1wbGF0ZTw+CisgICAgdGVtcGxhdGU8PgogICAgIHN0cnVjdCBTdHJpbmdNYWtlcjxUPiB7Ci0gICAgCXN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KCBUIGNvbnN0JiB2YWx1ZSApIHsKLSAgICAgICAgCXJldHVybiBjb252ZXJ0TXlUeXBlVG9TdHJpbmcoIHZhbHVlICk7CisgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KCBUIGNvbnN0JiB2YWx1ZSApIHsKKyAgICAgICAgICAgIHJldHVybiBjb252ZXJ0TXlUeXBlVG9TdHJpbmcoIHZhbHVlICk7CiAgICAgICAgIH0KICAgICB9OwogfQogYGBgCiAKLSMjIENhdGNoOjppc19yYW5nZTxUPiBzcGVjaWFsaXNhdGlvbgorIyMgQ2F0Y2g6OmlzX3JhbmdlIHNwZWNpYWxpc2F0aW9uCiBBcyBhIGZhbGxiYWNrLCBDYXRjaCBhdHRlbXB0cyB0byBkZXRlY3QgaWYgdGhlIHR5cGUgY2FuIGJlIGl0ZXJhdGVkCiAoYGJlZ2luKFQpYCBhbmQgYGVuZChUKWAgYXJlIHZhbGlkKSBhbmQgaWYgaXQgY2FuIGJlLCBpdCBpcyBzdHJpbmdpZmllZAogYXMgYSByYW5nZS4gRm9yIGNlcnRhaW4gdHlwZXMgdGhpcyBjYW4gbGVhZCB0byBpbmZpbml0ZSByZWN1cnNpb24sIHNvCkBAIC01Niw3ICs2Miw3IEBACiAKIGBgYAogQ0FUQ0hfVFJBTlNMQVRFX0VYQ0VQVElPTiggTXlUeXBlJiBleCApIHsKLQlyZXR1cm4gZXgubWVzc2FnZSgpOworICAgIHJldHVybiBleC5tZXNzYWdlKCk7CiB9CiBgYGAKIApkaWZmIC0tZ2l0IGEvZG9jcy90dXRvcmlhbC5tZCBiL2RvY3MvdHV0b3JpYWwubWQKaW5kZXggZDU1MzU1Yy4uN2MwZjgxNCAxMDA2NDQKLS0tIGEvZG9jcy90dXRvcmlhbC5tZAorKysgYi9kb2NzL3R1dG9yaWFsLm1kCkBAIC04LDI0ICs4LDMxIEBACiBbVGVzdCBjYXNlcyBhbmQgc2VjdGlvbnNdKCN0ZXN0LWNhc2VzLWFuZC1zZWN0aW9ucyk8YnI+CiBbQkRELVN0eWxlXSgjYmRkLXN0eWxlKTxicj4KIFtTY2FsaW5nIHVwXSgjc2NhbGluZy11cCk8YnI+CitbVHlwZSBwYXJhbWV0cmlzZWQgdGVzdCBjYXNlc10oI3R5cGUtcGFyYW1ldHJpc2VkLXRlc3QtY2FzZXMpPGJyPgogW05leHQgc3RlcHNdKCNuZXh0LXN0ZXBzKTxicj4KIAogIyMgR2V0dGluZyBDYXRjaDIKIAotVGhlIHNpbXBsZXN0IHdheSB0byBnZXQgQ2F0Y2gyIGlzIHRvIGRvd25sb2FkIHRoZSBsYXRlc3QgW3NpbmdsZSBoZWFkZXIgdmVyc2lvbl0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL0NhdGNoT3JnL0NhdGNoMi9tYXN0ZXIvc2luZ2xlX2luY2x1ZGUvY2F0Y2guaHBwKS4gVGhlIHNpbmdsZSBoZWFkZXIgaXMgZ2VuZXJhdGVkIGJ5IG1lcmdpbmcgYSBzZXQgb2YgaW5kaXZpZHVhbCBoZWFkZXJzIGJ1dCBpdCBpcyBzdGlsbCBqdXN0IG5vcm1hbCBzb3VyY2UgY29kZSBpbiBhIGhlYWRlciBmaWxlLgorVGhlIHNpbXBsZXN0IHdheSB0byBnZXQgQ2F0Y2gyIGlzIHRvIGRvd25sb2FkIHRoZSBsYXRlc3QgW3NpbmdsZSBoZWFkZXIgdmVyc2lvbl0oaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2NhdGNob3JnL0NhdGNoMi9tYXN0ZXIvc2luZ2xlX2luY2x1ZGUvY2F0Y2gyL2NhdGNoLmhwcCkuIFRoZSBzaW5nbGUgaGVhZGVyIGlzIGdlbmVyYXRlZCBieSBtZXJnaW5nIGEgc2V0IG9mIGluZGl2aWR1YWwgaGVhZGVycyBidXQgaXQgaXMgc3RpbGwganVzdCBub3JtYWwgc291cmNlIGNvZGUgaW4gYSBoZWFkZXIgZmlsZS4KKworQWx0ZXJuYXRpdmUgd2F5cyBvZiBnZXR0aW5nIENhdGNoMiBpbmNsdWRlIHVzaW5nIHlvdXIgc3lzdGVtIHBhY2thZ2UKK21hbmFnZXIsIG9yIGluc3RhbGxpbmcgaXQgdXNpbmcgW2l0cyBDTWFrZSBwYWNrYWdlXShjbWFrZS1pbnRlZ3JhdGlvbi5tZCNpbnN0YWxsaW5nLWNhdGNoMi1mcm9tLWdpdC1yZXBvc2l0b3J5KS4KIAogVGhlIGZ1bGwgc291cmNlIGZvciBDYXRjaDIsIGluY2x1ZGluZyB0ZXN0IHByb2plY3RzLCBkb2N1bWVudGF0aW9uLCBhbmQgb3RoZXIgdGhpbmdzLCBpcyBob3N0ZWQgb24gR2l0SHViLiBbaHR0cDovL2NhdGNoLWxpYi5uZXRdKGh0dHA6Ly9jYXRjaC1saWIubmV0KSB3aWxsIHJlZGlyZWN0IHlvdSB0aGVyZS4KIAogCiAjIyBXaGVyZSB0byBwdXQgaXQ/CiAKLUNhdGNoMiBpcyBoZWFkZXIgb25seS4gQWxsIHlvdSBuZWVkIHRvIGRvIGlzIGRyb3AgdGhlIGZpbGUgc29tZXdoZXJlIHJlYWNoYWJsZSBmcm9tIHlvdXIgcHJvamVjdCAtIGVpdGhlciBpbiBzb21lIGNlbnRyYWwgbG9jYXRpb24geW91IGNhbiBzZXQgeW91ciBoZWFkZXIgc2VhcmNoIHBhdGggdG8gZmluZCwgb3IgZGlyZWN0bHkgaW50byB5b3VyIHByb2plY3QgdHJlZSBpdHNlbGYhIFRoaXMgaXMgYSBwYXJ0aWN1bGFybHkgZ29vZCBvcHRpb24gZm9yIG90aGVyIE9wZW4tU291cmNlIHByb2plY3RzIHRoYXQgd2FudCB0byB1c2UgQ2F0Y2ggZm9yIHRoZWlyIHRlc3Qgc3VpdGUuIFNlZSBbdGhpcyBibG9nIGVudHJ5IGZvciBtb3JlIG9uIHRoYXRdKGh0dHA6Ly93d3cubGV2ZWxvZmluZGlyZWN0aW9uLmNvbS9qb3VybmFsLzIwMTEvNS8yNy91bml0LXRlc3RpbmctaW4tYy1hbmQtb2JqZWN0aXZlLWMtanVzdC1nb3QtcmlkaWN1bG91c2x5LWVhc2kuaHRtbCkuIAorQ2F0Y2gyIGlzIGhlYWRlciBvbmx5LiBBbGwgeW91IG5lZWQgdG8gZG8gaXMgZHJvcCB0aGUgZmlsZSBzb21ld2hlcmUgcmVhY2hhYmxlIGZyb20geW91ciBwcm9qZWN0IC0gZWl0aGVyIGluIHNvbWUgY2VudHJhbCBsb2NhdGlvbiB5b3UgY2FuIHNldCB5b3VyIGhlYWRlciBzZWFyY2ggcGF0aCB0byBmaW5kLCBvciBkaXJlY3RseSBpbnRvIHlvdXIgcHJvamVjdCB0cmVlIGl0c2VsZiEgVGhpcyBpcyBhIHBhcnRpY3VsYXJseSBnb29kIG9wdGlvbiBmb3Igb3RoZXIgT3Blbi1Tb3VyY2UgcHJvamVjdHMgdGhhdCB3YW50IHRvIHVzZSBDYXRjaCBmb3IgdGhlaXIgdGVzdCBzdWl0ZS4gU2VlIFt0aGlzIGJsb2cgZW50cnkgZm9yIG1vcmUgb24gdGhhdF0oaHR0cDovL3d3dy5sZXZlbG9maW5kaXJlY3Rpb24uY29tL2pvdXJuYWwvMjAxMS81LzI3L3VuaXQtdGVzdGluZy1pbi1jLWFuZC1vYmplY3RpdmUtYy1qdXN0LWdvdC1yaWRpY3Vsb3VzbHktZWFzaS5odG1sKS4KIAogVGhlIHJlc3Qgb2YgdGhpcyB0dXRvcmlhbCB3aWxsIGFzc3VtZSB0aGF0IHRoZSBDYXRjaDIgc2luZ2xlLWluY2x1ZGUgaGVhZGVyIChvciB0aGUgaW5jbHVkZSBmb2xkZXIpIGlzIGF2YWlsYWJsZSB1bnF1YWxpZmllZCAtIGJ1dCB5b3UgbWF5IG5lZWQgdG8gcHJlZml4IGl0IHdpdGggYSBmb2xkZXIgbmFtZSBpZiBuZWNlc3NhcnkuCiAKK19JZiB5b3UgaGF2ZSBpbnN0YWxsZWQgQ2F0Y2gyIGZyb20gc3lzdGVtIHBhY2thZ2UgbWFuYWdlciwgb3IgQ01ha2UKK3BhY2thZ2UsIHlvdSBuZWVkIHRvIGluY2x1ZGUgdGhlIGhlYWRlciBhcyBgI2luY2x1ZGUgPGNhdGNoMi9jYXRjaC5ocHA+YF8KKwogIyMgV3JpdGluZyB0ZXN0cwogCi1MZXQncyBzdGFydCB3aXRoIGEgcmVhbGx5IHNpbXBsZSBleGFtcGxlIChbY29kZV0oLi4vZXhhbXBsZXMvMDEwLVRlc3RDYXNlLmNwcCkpLiBTYXkgeW91IGhhdmUgd3JpdHRlbiBhIGZ1bmN0aW9uIHRvIGNhbGN1bGF0ZSBmYWN0b3JpYWxzIGFuZCBub3cgeW91IHdhbnQgdG8gdGVzdCBpdCAobGV0J3MgbGVhdmUgYXNpZGUgVEREIGZvciBub3cpLiAKK0xldCdzIHN0YXJ0IHdpdGggYSByZWFsbHkgc2ltcGxlIGV4YW1wbGUgKFtjb2RlXSguLi9leGFtcGxlcy8wMTAtVGVzdENhc2UuY3BwKSkuIFNheSB5b3UgaGF2ZSB3cml0dGVuIGEgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIGZhY3RvcmlhbHMgYW5kIG5vdyB5b3Ugd2FudCB0byB0ZXN0IGl0IChsZXQncyBsZWF2ZSBhc2lkZSBUREQgZm9yIG5vdykuCiAKIGBgYGMrKwogdW5zaWduZWQgaW50IEZhY3RvcmlhbCggdW5zaWduZWQgaW50IG51bWJlciApIHsKQEAgLTExNiwzMSArMTIzLDMxIEBACiBURVNUX0NBU0UoICJ2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCIsICJbdmVjdG9yXSIgKSB7CiAKICAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYoIDUgKTsKLSAgICAKKwogICAgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKTsKICAgICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApOwotICAgIAorCiAgICAgU0VDVElPTiggInJlc2l6aW5nIGJpZ2dlciBjaGFuZ2VzIHNpemUgYW5kIGNhcGFjaXR5IiApIHsKICAgICAgICAgdi5yZXNpemUoIDEwICk7Ci0gICAgICAgIAorCiAgICAgICAgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDEwICk7CiAgICAgICAgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSAxMCApOwogICAgIH0KICAgICBTRUNUSU9OKCAicmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eSIgKSB7CiAgICAgICAgIHYucmVzaXplKCAwICk7Ci0gICAgICAgIAorCiAgICAgICAgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDAgKTsKICAgICAgICAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDUgKTsKICAgICB9CiAgICAgU0VDVElPTiggInJlc2VydmluZyBiaWdnZXIgY2hhbmdlcyBjYXBhY2l0eSBidXQgbm90IHNpemUiICkgewogICAgICAgICB2LnJlc2VydmUoIDEwICk7Ci0gICAgICAgIAorCiAgICAgICAgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKTsKICAgICAgICAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDEwICk7CiAgICAgfQogICAgIFNFQ1RJT04oICJyZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eSIgKSB7CiAgICAgICAgIHYucmVzZXJ2ZSggMCApOwotICAgICAgICAKKwogICAgICAgICBSRVFVSVJFKCB2LnNpemUoKSA9PSA1ICk7CiAgICAgICAgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICk7CiAgICAgfQpAQCAtMTU3LDEzICsxNjQsMTMgQEAKIGBgYGMrKwogICAgIFNFQ1RJT04oICJyZXNlcnZpbmcgYmlnZ2VyIGNoYW5nZXMgY2FwYWNpdHkgYnV0IG5vdCBzaXplIiApIHsKICAgICAgICAgdi5yZXNlcnZlKCAxMCApOwotICAgICAgICAKKwogICAgICAgICBSRVFVSVJFKCB2LnNpemUoKSA9PSA1ICk7CiAgICAgICAgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSAxMCApOwotICAgIAorCiAgICAgICAgIFNFQ1RJT04oICJyZXNlcnZpbmcgc21hbGxlciBhZ2FpbiBkb2VzIG5vdCBjaGFuZ2UgY2FwYWNpdHkiICkgewogICAgICAgICAgICAgdi5yZXNlcnZlKCA3ICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDEwICk7CiAgICAgICAgIH0KICAgICB9CkBAIC0xODIsMTMgKzE4OSwxMyBAQAogCiAgICAgR0lWRU4oICJBIHZlY3RvciB3aXRoIHNvbWUgaXRlbXMiICkgewogICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+IHYoIDUgKTsKLSAgICAgICAgCisKICAgICAgICAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApOwogICAgICAgICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApOwotICAgICAgICAKKwogICAgICAgICBXSEVOKCAidGhlIHNpemUgaXMgaW5jcmVhc2VkIiApIHsKICAgICAgICAgICAgIHYucmVzaXplKCAxMCApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFRIRU4oICJ0aGUgc2l6ZSBhbmQgY2FwYWNpdHkgY2hhbmdlIiApIHsKICAgICAgICAgICAgICAgICBSRVFVSVJFKCB2LnNpemUoKSA9PSAxMCApOwogICAgICAgICAgICAgICAgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSAxMCApOwpAQCAtMTk2LDcgKzIwMyw3IEBACiAgICAgICAgIH0KICAgICAgICAgV0hFTiggInRoZSBzaXplIGlzIHJlZHVjZWQiICkgewogICAgICAgICAgICAgdi5yZXNpemUoIDAgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBUSEVOKCAidGhlIHNpemUgY2hhbmdlcyBidXQgbm90IGNhcGFjaXR5IiApIHsKICAgICAgICAgICAgICAgICBSRVFVSVJFKCB2LnNpemUoKSA9PSAwICk7CiAgICAgICAgICAgICAgICAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDUgKTsKQEAgLTIwNCw3ICsyMTEsNyBAQAogICAgICAgICB9CiAgICAgICAgIFdIRU4oICJtb3JlIGNhcGFjaXR5IGlzIHJlc2VydmVkIiApIHsKICAgICAgICAgICAgIHYucmVzZXJ2ZSggMTAgKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBUSEVOKCAidGhlIGNhcGFjaXR5IGNoYW5nZXMgYnV0IG5vdCB0aGUgc2l6ZSIgKSB7CiAgICAgICAgICAgICAgICAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApOwogICAgICAgICAgICAgICAgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSAxMCApOwpAQCAtMjEyLDcgKzIxOSw3IEBACiAgICAgICAgIH0KICAgICAgICAgV0hFTiggImxlc3MgY2FwYWNpdHkgaXMgcmVzZXJ2ZWQiICkgewogICAgICAgICAgICAgdi5yZXNlcnZlKCAwICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgVEhFTiggIm5laXRoZXIgc2l6ZSBub3IgY2FwYWNpdHkgYXJlIGNoYW5nZWQiICkgewogICAgICAgICAgICAgICAgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKTsKICAgICAgICAgICAgICAgICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApOwpAQCAtMjUwLDYgKzI1NywxNyBAQAogRG8gbm90IHdyaXRlIHlvdXIgdGVzdHMgaW4gaGVhZGVyIGZpbGVzIQogCiAKKyMjIFR5cGUgcGFyYW1ldHJpc2VkIHRlc3QgY2FzZXMKKworVGVzdCBjYXNlcyBpbiBDYXRjaDIgY2FuIGJlIGFsc28gcGFyYW1ldHJpc2VkIGJ5IHR5cGUsIHZpYSB0aGUKK2BURU1QTEFURV9URVNUX0NBU0VgIGFuZCBgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VgIG1hY3JvcywKK3doaWNoIGJlaGF2ZSBpbiB0aGUgc2FtZSB3YXkgdGhlIGBURVNUX0NBU0VgIG1hY3JvLCBidXQgYXJlIHJ1biBmb3IKK2V2ZXJ5IHR5cGUgb3IgdHlwZSBjb21iaW5hdGlvbi4KKworRm9yIG1vcmUgZGV0YWlscywgc2VlIG91ciBkb2N1bWVudGF0aW9uIG9uIFt0ZXN0IGNhc2VzIGFuZAorc2VjdGlvbnNdKHRlc3QtY2FzZXMtYW5kLXNlY3Rpb25zLm1kI3R5cGUtcGFyYW1ldHJpc2VkLXRlc3QtY2FzZXMpLgorCisKICMjIE5leHQgc3RlcHMKIAogVGhpcyBoYXMgYmVlbiBhIGJyaWVmIGludHJvZHVjdGlvbiB0byBnZXQgeW91IHVwIGFuZCBydW5uaW5nIHdpdGggQ2F0Y2gsIGFuZCB0byBwb2ludCBvdXQgc29tZSBvZiB0aGUga2V5IGRpZmZlcmVuY2VzIGJldHdlZW4gQ2F0Y2ggYW5kIG90aGVyIGZyYW1ld29ya3MgeW91IG1heSBhbHJlYWR5IGJlIGZhbWlsaWFyIHdpdGguIFRoaXMgd2lsbCBnZXQgeW91IGdvaW5nIHF1aXRlIGZhciBhbHJlYWR5IGFuZCB5b3UgYXJlIG5vdyBpbiBhIHBvc2l0aW9uIHRvIGRpdmUgaW4gYW5kIHdyaXRlIHNvbWUgdGVzdHMuCmRpZmYgLS1naXQgYS9kb2NzL3doeS1jYXRjaC5tZCBiL2RvY3Mvd2h5LWNhdGNoLm1kCmluZGV4IDQ1ZjU4YTYuLjg2Y2M1NWIgMTAwNjQ0Ci0tLSBhL2RvY3Mvd2h5LWNhdGNoLm1kCisrKyBiL2RvY3Mvd2h5LWNhdGNoLm1kCkBAIC02LDcgKzYsNyBAQAogW0dvb2dsZSBUZXN0XShodHRwOi8vY29kZS5nb29nbGUuY29tL3AvZ29vZ2xldGVzdC8pLAogW0Jvb3N0LlRlc3RdKGh0dHA6Ly93d3cuYm9vc3Qub3JnL2RvYy9saWJzLzFfNDlfMC9saWJzL3Rlc3QvZG9jL2h0bWwvaW5kZXguaHRtbCksCiBbQ3BwVW5pdF0oaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9hcHBzL21lZGlhd2lraS9jcHB1bml0L2luZGV4LnBocD90aXRsZT1NYWluX1BhZ2UpLAotW0N1dGVdKGh0dHA6Ly9yMi5pZnMuaHNyLmNoL2N1dGUpLAorW0N1dGVdKGh0dHA6Ly93d3cuY3V0ZS10ZXN0LmNvbSksCiBbbWFueSwgbWFueSBtb3JlXShodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0xpc3Rfb2ZfdW5pdF90ZXN0aW5nX2ZyYW1ld29ya3MjQy4yQi4yQikuCiAKIFNvIHdoYXQgZG9lcyBDYXRjaCBicmluZyB0byB0aGUgcGFydHkgdGhhdCBkaWZmZXJlbnRpYXRlcyBpdCBmcm9tIHRoZXNlPyBBcGFydCBmcm9tIGEgQ2F0Y2h5IG5hbWUsIG9mIGNvdXJzZS4KZGlmZiAtLWdpdCBhL2V4YW1wbGVzLzAwMC1DYXRjaE1haW4uY3BwIGIvZXhhbXBsZXMvMDAwLUNhdGNoTWFpbi5jcHAKaW5kZXggYzhiZjkxZS4uMjg5NGQ0MiAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvMDAwLUNhdGNoTWFpbi5jcHAKKysrIGIvZXhhbXBsZXMvMDAwLUNhdGNoTWFpbi5jcHAKQEAgLTYsNyArNiw3IEBACiAvLyBMZXQgQ2F0Y2ggcHJvdmlkZSBtYWluKCk6CiAjZGVmaW5lIENBVENIX0NPTkZJR19NQUlOCiAKLSNpbmNsdWRlICJjYXRjaC5ocHAiCisjaW5jbHVkZSA8Y2F0Y2gyL2NhdGNoLmhwcD4KIAogLy8gVGhhdCdzIGl0CiAKZGlmZiAtLWdpdCBhL2V4YW1wbGVzLzAxMC1UZXN0Q2FzZS5jcHAgYi9leGFtcGxlcy8wMTAtVGVzdENhc2UuY3BwCmluZGV4IDE2YTIxMmEuLmMwMGI4YTggMTAwNjQ0Ci0tLSBhL2V4YW1wbGVzLzAxMC1UZXN0Q2FzZS5jcHAKKysrIGIvZXhhbXBsZXMvMDEwLVRlc3RDYXNlLmNwcApAQCAtMyw3ICszLDcgQEAKIC8vIExldCBDYXRjaCBwcm92aWRlIG1haW4oKToKICNkZWZpbmUgQ0FUQ0hfQ09ORklHX01BSU4KIAotI2luY2x1ZGUgImNhdGNoLmhwcCIKKyNpbmNsdWRlIDxjYXRjaDIvY2F0Y2guaHBwPgogCiBpbnQgRmFjdG9yaWFsKCBpbnQgbnVtYmVyICkgewogICAgcmV0dXJuIG51bWJlciA8PSAxID8gbnVtYmVyIDogRmFjdG9yaWFsKCBudW1iZXIgLSAxICkgKiBudW1iZXI7ICAvLyBmYWlsCmRpZmYgLS1naXQgYS9leGFtcGxlcy8wMjAtVGVzdENhc2UtMS5jcHAgYi9leGFtcGxlcy8wMjAtVGVzdENhc2UtMS5jcHAKaW5kZXggMGQxMDI3Ni4uYWIwMjQ5ZSAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvMDIwLVRlc3RDYXNlLTEuY3BwCisrKyBiL2V4YW1wbGVzLzAyMC1UZXN0Q2FzZS0xLmNwcApAQCAtNiw3ICs2LDcgQEAKIC8vIExldCBDYXRjaCBwcm92aWRlIG1haW4oKToKICNkZWZpbmUgQ0FUQ0hfQ09ORklHX01BSU4KIAotI2luY2x1ZGUgImNhdGNoLmhwcCIKKyNpbmNsdWRlIDxjYXRjaDIvY2F0Y2guaHBwPgogCiBURVNUX0NBU0UoICIxOiBBbGwgdGVzdCBjYXNlcyByZXNpZGUgaW4gb3RoZXIgLmNwcCBmaWxlcyAoZW1wdHkpIiwgIlttdWx0aS1maWxlOjFdIiApIHsKIH0KZGlmZiAtLWdpdCBhL2V4YW1wbGVzLzAyMC1UZXN0Q2FzZS0yLmNwcCBiL2V4YW1wbGVzLzAyMC1UZXN0Q2FzZS0yLmNwcAppbmRleCAyY2NhMzYyLi4wOGIzMTNlIDEwMDY0NAotLS0gYS9leGFtcGxlcy8wMjAtVGVzdENhc2UtMi5jcHAKKysrIGIvZXhhbXBsZXMvMDIwLVRlc3RDYXNlLTIuY3BwCkBAIC0yLDcgKzIsNyBAQAogCiAvLyBtYWluKCkgcHJvdmlkZWQgYnkgQ2F0Y2ggaW4gZmlsZSAwMjAtVGVzdENhc2UtMS5jcHAuCiAKLSNpbmNsdWRlICJjYXRjaC5ocHAiCisjaW5jbHVkZSA8Y2F0Y2gyL2NhdGNoLmhwcD4KIAogaW50IEZhY3RvcmlhbCggaW50IG51bWJlciApIHsKICAgIHJldHVybiBudW1iZXIgPD0gMSA/IG51bWJlciA6IEZhY3RvcmlhbCggbnVtYmVyIC0gMSApICogbnVtYmVyOyAgLy8gZmFpbApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvMDMwLUFzbi1SZXF1aXJlLUNoZWNrLmNwcCBiL2V4YW1wbGVzLzAzMC1Bc24tUmVxdWlyZS1DaGVjay5jcHAKaW5kZXggMzVmMmZmNy4uZjgxNGExYiAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvMDMwLUFzbi1SZXF1aXJlLUNoZWNrLmNwcAorKysgYi9leGFtcGxlcy8wMzAtQXNuLVJlcXVpcmUtQ2hlY2suY3BwCkBAIC0xMCw3ICsxMCw3IEBACiAKIC8vIG1haW4oKSBwcm92aWRlZCBpbiAwMDAtQ2F0Y2hNYWluLmNwcAogCi0jaW5jbHVkZSAiY2F0Y2guaHBwIgorI2luY2x1ZGUgPGNhdGNoMi9jYXRjaC5ocHA+CiAKIHN0ZDo6c3RyaW5nIG9uZSgpIHsKICAgICByZXR1cm4gIjEiOwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvMTAwLUZpeC1TZWN0aW9uLmNwcCBiL2V4YW1wbGVzLzEwMC1GaXgtU2VjdGlvbi5jcHAKaW5kZXggOGNiOTRiZi4uZDBiOWYyZCAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvMTAwLUZpeC1TZWN0aW9uLmNwcAorKysgYi9leGFtcGxlcy8xMDAtRml4LVNlY3Rpb24uY3BwCkBAIC02LDcgKzYsNyBAQAogCiAvLyBtYWluKCkgcHJvdmlkZWQgaW4gMDAwLUNhdGNoTWFpbi5jcHAKIAotI2luY2x1ZGUgImNhdGNoLmhwcCIKKyNpbmNsdWRlIDxjYXRjaDIvY2F0Y2guaHBwPgogCiBURVNUX0NBU0UoICJ2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCIsICJbdmVjdG9yXSIgKSB7CiAKZGlmZiAtLWdpdCBhL2V4YW1wbGVzLzExMC1GaXgtQ2xhc3NGaXh0dXJlLmNwcCBiL2V4YW1wbGVzLzExMC1GaXgtQ2xhc3NGaXh0dXJlLmNwcAppbmRleCAwNmMyY2YzLi5lNDJmZDE3IDEwMDY0NAotLS0gYS9leGFtcGxlcy8xMTAtRml4LUNsYXNzRml4dHVyZS5jcHAKKysrIGIvZXhhbXBsZXMvMTEwLUZpeC1DbGFzc0ZpeHR1cmUuY3BwCkBAIC02LDcgKzYsNyBAQAogCiAvLyBtYWluKCkgcHJvdmlkZWQgaW4gMDAwLUNhdGNoTWFpbi5jcHAKIAotI2luY2x1ZGUgImNhdGNoLmhwcCIKKyNpbmNsdWRlIDxjYXRjaDIvY2F0Y2guaHBwPgogCiBjbGFzcyBEQkNvbm5lY3Rpb24KIHsKZGlmZiAtLWdpdCBhL2V4YW1wbGVzLzEyMC1CZGQtU2NlbmFyaW9HaXZlbldoZW5UaGVuLmNwcCBiL2V4YW1wbGVzLzEyMC1CZGQtU2NlbmFyaW9HaXZlbldoZW5UaGVuLmNwcAppbmRleCBjNDVmMWYyLi5kMWI5Y2U1IDEwMDY0NAotLS0gYS9leGFtcGxlcy8xMjAtQmRkLVNjZW5hcmlvR2l2ZW5XaGVuVGhlbi5jcHAKKysrIGIvZXhhbXBsZXMvMTIwLUJkZC1TY2VuYXJpb0dpdmVuV2hlblRoZW4uY3BwCkBAIC0yLDcgKzIsNyBAQAogCiAvLyBtYWluKCkgcHJvdmlkZWQgaW4gMDAwLUNhdGNoTWFpbi5jcHAKIAotI2luY2x1ZGUgImNhdGNoLmhwcCIKKyNpbmNsdWRlIDxjYXRjaDIvY2F0Y2guaHBwPgogCiBTQ0VOQVJJTyggInZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIiwgIlt2ZWN0b3JdIiApIHsKIApkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvMjAwLVJwdC1DYXRjaE1haW4uY3BwIGIvZXhhbXBsZXMvMjAwLVJwdC1DYXRjaE1haW4uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4NGM4MDQKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy8yMDAtUnB0LUNhdGNoTWFpbi5jcHAKQEAgLTAsMCArMSwyNyBAQAorLy8gMjAwLVJwdC1DYXRjaE1haW4uY3BwCisKKy8vIEluIGEgQ2F0Y2ggcHJvamVjdCB3aXRoIG11bHRpcGxlIGZpbGVzLCBkZWRpY2F0ZSBvbmUgZmlsZSB0byBjb21waWxlIHRoZQorLy8gc291cmNlIGNvZGUgb2YgQ2F0Y2ggaXRzZWxmIGFuZCByZXVzZSB0aGUgcmVzdWx0aW5nIG9iamVjdCBmaWxlIGZvciBsaW5raW5nLgorCisvLyBMZXQgQ2F0Y2ggcHJvdmlkZSBtYWluKCk6CisjZGVmaW5lIENBVENIX0NPTkZJR19NQUlOCisKKyNpbmNsdWRlIDxjYXRjaDIvY2F0Y2guaHBwPgorCisjaWZkZWYgICBDQVRDSF9FWEFNUExFX1JQVF8xCisjaW5jbHVkZSBDQVRDSF9FWEFNUExFX1JQVF8xCisjZW5kaWYKKworI2lmZGVmICAgQ0FUQ0hfRVhBTVBMRV9SUFRfMgorI2luY2x1ZGUgQ0FUQ0hfRVhBTVBMRV9SUFRfMgorI2VuZGlmCisKKyNpZmRlZiAgIENBVENIX0VYQU1QTEVfUlBUXzMKKyNpbmNsdWRlIENBVENIX0VYQU1QTEVfUlBUXzMKKyNlbmRpZgorCisvLyBUaGF0J3MgaXQKKworLy8gQ29tcGlsZSBpbXBsZW1lbnRhdGlvbiBvZiBDYXRjaCBmb3IgdXNlIHdpdGggZmlsZXMgdGhhdCBkbyBjb250YWluIHRlc3RzOgorLy8gLSBnKysgLXN0ZD1jKysxMSAtV2FsbCAtSSQoQ0FUQ0hfUk9PVCkgLURDQVRDSF9FWEFNUExFX1JQVF8xPVwiaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwXCIgLW8gMjAwLVJwdC1DYXRjaE1haW5UZWFtQ2l0eS5vIC1jIDIwMC1ScHQtQ2F0Y2hNYWluLmNwcAorLy8gY2wgLUVIc2MgLUklQ0FUQ0hfUk9PVCUgLURDQVRDSF9FWEFNUExFX1JQVF8xPVwiaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwXCIgLUZvMjAwLVJwdC1DYXRjaE1haW5UZWFtQ2l0eS5vYmogLWMgMjAwLVJwdC1DYXRjaE1haW4uY3BwCmRpZmYgLS1naXQgYS9leGFtcGxlcy8yMDctUnB0LVRlYW1DaXR5UmVwb3J0ZXIuY3BwIGIvZXhhbXBsZXMvMjA3LVJwdC1UZWFtQ2l0eVJlcG9ydGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjg0NjBmCi0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvMjA3LVJwdC1UZWFtQ2l0eVJlcG9ydGVyLmNwcApAQCAtMCwwICsxLDE3MSBAQAorLy8gMjA3LVJwdC1UZWFtQ2l0eVJlcG9ydGVyLmNwcAorCisvLyBDYXRjaCBoYXMgYnVpbHQtaW4gYW5kIGV4dGVybmFsIHJlcG9ydGVyczoKKy8vIEJ1aWx0LWluOgorLy8gLSBjb21wYWN0CisvLyAtIGNvbnNvbGUKKy8vIC0ganVuaXQKKy8vIC0geG1sCisvLyBFeHRlcm5hbDoKKy8vIC0gYXV0b21ha2UKKy8vIC0gdGFwCisvLyAtIHRlYW1jaXR5ICh0aGlzIGV4YW1wbGUpCisKKy8vIG1haW4oKSBhbmQgcmVwb3J0ZXIgY29kZSBwcm92aWRlZCBpbiAyMDAtUnB0LUNhdGNoTWFpbi5jcHAKKworI2luY2x1ZGUgPGNhdGNoMi9jYXRjaC5ocHA+CisKKyNpZmRlZiBfTVNDX1ZFUgorIyBwcmFnbWEgd2FybmluZyAoZGlzYWJsZSA6IDQ3MDIpIC8vIERpc2FibGUgd2FybmluZzogdW5yZWFjaGFibGUgY29kZQorI2VuZGlmCisKK1RFU1RfQ0FTRSggIlRlYW1DaXR5IHBhc3NlcyB1bmNvbmRpdGlvbmFsbHkgc3VjY2VlZGluZyBhc3NlcnRpb24iLCAiW3RlYW1jaXR5XSIgKSB7CisKKyAgICBTVUNDRUVEKCk7Cit9CisKK1RFU1RfQ0FTRSggIlRlYW1DaXR5IHJlcG9ydHMgdW5jb25kaXRpb25hbGx5IGZhaWxpbmcgYXNzZXJ0aW9uIiwgIlt0ZWFtY2l0eV0iICkgeworCisgICAgRkFJTCgpOworfQorCitURVNUX0NBU0UoICJUZWFtQ2l0eSByZXBvcnRzIGZhaWxpbmcgY2hlY2siLCAiW3RlYW1jaXR5XSIgKSB7CisKKyAgICBSRVFVSVJFKCAzID09IDcgKTsKK30KKworVEVTVF9DQVNFKCAiVGVhbUNpdHkgcmVwb3J0cyBmYWlsaW5nIGNoZWNrLWZhbHNlIiwgIlt0ZWFtY2l0eV0iICkgeworCisgICAgUkVRVUlSRV9GQUxTRSggMyA9PSAzICk7Cit9CisKK1RFU1RfQ0FTRSggIlRlYW1DaXR5IHJlcG9ydHMgZmFpbGluZyBjaGVjay10aGF0IiwgIlt0ZWFtY2l0eV0iICkgeworCisgICAgdXNpbmcgbmFtZXNwYWNlIENhdGNoOworCisgICAgUkVRVUlSRV9USEFUKCAiaGVsbG8iLCBDb250YWlucyggIndvcmxkIiApICk7Cit9CisKK1RFU1RfQ0FTRSggIlRlYW1DaXR5IHJlcG9ydHMgdW5leHBlY3RlZCBleGNlcHRpb24iLCAiW3RlYW1jaXR5XSIgKSB7CisKKyAgICBSRVFVSVJFKCAodGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJzdXJwcmlzZSEiKSwgdHJ1ZSkgKTsKK30KKworVEVTVF9DQVNFKCAiVGVhbUNpdHkgcmVwb3J0cyB1bmRlc2lyZWQgZXhjZXB0aW9uIiwgIlt0ZWFtY2l0eV0iICkgeworCisgICAgUkVRVUlSRV9OT1RIUk9XKCAodGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJzdXJwcmlzZSEiKSwgdHJ1ZSkgKTsKK30KKworVEVTVF9DQVNFKCAiVGVhbUNpdHkgcmVwb3J0cyBtaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvbiIsICJbdGVhbWNpdHldIiApIHsKKworICAgIFJFUVVJUkVfVEhST1dTKCB0cnVlICk7Cit9CisKK1RFU1RfQ0FTRSggIlRlYW1DaXR5IHJlcG9ydHMgbWlzc2luZyBzcGVjaWZpYyBleHBlY3RlZCBleGNlcHRpb24iLCAiW3RlYW1jaXR5XSIgKSB7CisKKyAgICBSRVFVSVJFX1RIUk9XU19BUyggdGhyb3cgc3RkOjpiYWRfYWxsb2MoKSwgc3RkOjpydW50aW1lX2Vycm9yICk7Cit9CisKK1RFU1RfQ0FTRSggIlRlYW1DaXR5IHJlcG9ydHMgdW5leHBlY3RlZCBtZXNzYWdlIGluIGV4cGVjdGVkIGV4Y2VwdGlvbiIsICJbdGVhbWNpdHldIiApIHsKKworICAgIHVzaW5nIG5hbWVzcGFjZSBDYXRjaDsKKworICAgIENIRUNLX1RIUk9XU19XSVRIKCB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoImhlbGxvIiksICJ3b3JsZCIgKTsKKyAgICBDSEVDS19USFJPV1NfV0lUSCggdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJoZWxsbyIpLCBDb250YWlucygid29ybGQiKSApOworfQorCitzdHJ1Y3QgTXlFeGNlcHRpb246IHB1YmxpYyBzdGQ6OnJ1bnRpbWVfZXJyb3IKK3sKKyAgICBNeUV4Y2VwdGlvbiggY2hhciBjb25zdCAqIHRleHQgKQorICAgIDogc3RkOjpydW50aW1lX2Vycm9yKCB0ZXh0ICkge30KKyAgICAKKyAgICB+TXlFeGNlcHRpb24oKSBvdmVycmlkZTsKK307CisKKy8vIHByZXZlbnQgLVd3ZWFrLXZ0YWJsZXM6CitNeUV4Y2VwdGlvbjo6fk15RXhjZXB0aW9uKCkgPSBkZWZhdWx0OworCitzdHJ1Y3QgTXlFeGNlcHRpb25NYXRjaGVyIDogQ2F0Y2g6Ok1hdGNoZXJCYXNlPCBzdGQ6OnJ1bnRpbWVfZXJyb3IgPgoreworICAgIHN0ZDo6c3RyaW5nIG1fdGV4dDsKKworICAgIE15RXhjZXB0aW9uTWF0Y2hlciggY2hhciBjb25zdCAqIHRleHQgKQorICAgIDogbV90ZXh0KCB0ZXh0ICkKKyAgICB7fQorCisgICAgfk15RXhjZXB0aW9uTWF0Y2hlcigpIG92ZXJyaWRlOworICAgIAorICAgIGJvb2wgbWF0Y2goIHN0ZDo6cnVudGltZV9lcnJvciBjb25zdCAmIGFyZyApIGNvbnN0IG92ZXJyaWRlCisgICAgeyAKKyAgICAgICAgcmV0dXJuIG1fdGV4dCA9PSBhcmcud2hhdCgpIDsgCisgICAgfQorICAgIAorICAgIHN0ZDo6c3RyaW5nIGRlc2NyaWJlKCkgY29uc3Qgb3ZlcnJpZGUgCisgICAgeyAKKyAgICAgICAgcmV0dXJuICJpdCdzIG1lIjsKKyAgICB9Cit9OworCisvLyBwcmV2ZW50IC1Xd2Vhay12dGFibGVzOgorTXlFeGNlcHRpb25NYXRjaGVyOjp+TXlFeGNlcHRpb25NYXRjaGVyKCkgPSBkZWZhdWx0OworCitURVNUX0NBU0UoICJUZWFtQ2l0eSBmYWlsaW5nIGNoZWNrLXRocm93cy1tYXRjaGVzIiwgIlt0ZWFtY2l0eV0iICkgeworCisgICAgQ0hFQ0tfVEhST1dTX01BVENIRVMoIHRocm93IE15RXhjZXB0aW9uKCJoZWxsbyIpLCBNeUV4Y2VwdGlvbiwgTXlFeGNlcHRpb25NYXRjaGVyKCJ3b3JsZCIpICk7Cit9CisKKy8vIFshdGhyb3dzXSAtIGxldHMgQ2F0Y2gga25vdyB0aGF0IHRoaXMgdGVzdCBpcyBsaWtlbHkgdG8gdGhyb3cgYW4gZXhjZXB0aW9uIGV2ZW4gaWYgc3VjY2Vzc2Z1bC4gCisvLyBUaGlzIGNhdXNlcyB0aGUgdGVzdCB0byBiZSBleGNsdWRlZCB3aGVuIHJ1bm5pbmcgd2l0aCAtZSBvciAtLW5vdGhyb3cuCisKKy8vIE5vIHNwZWNpYWwgZWZmZWN0cyBmb3IgdGhlIHJlcG9ydGVyLgorCitURVNUX0NBU0UoICJUZWFtQ2l0eSB0aHJvd2luZyBleGNlcHRpb24gd2l0aCB0YWcgWyF0aHJvd3NdIiwgIlt0ZWFtY2l0eV1bIXRocm93c10iICkgeworCisgICAgUkVRVUlSRV9USFJPV1MoIHRocm93IHN0ZDo6cnVudGltZV9lcnJvcigidW5zdXJwcmlzaW5nbHkiKSApOworfQorCisvLyBbIW1heWZhaWxdIC0gZG9lc24ndCBmYWlsIHRoZSB0ZXN0IGlmIGFueSBnaXZlbiBhc3NlcnRpb24gZmFpbHMgKGJ1dCBzdGlsbCByZXBvcnRzIGl0KS4gVGhpcyBjYW4gYmUgdXNlZnVsIHRvIGZsYWcgYSB3b3JrLWluLXByb2dyZXNzLCBvciBhIGtub3duIGlzc3VlIHRoYXQgeW91IGRvbid0IHdhbnQgdG8gaW1tZWRpYXRlbHkgZml4IGJ1dCBzdGlsbCB3YW50IHRvIHRyYWNrIGluIHlvdXIgdGVzdHMuCisKK1RFU1RfQ0FTRSggIlRlYW1DaXR5IGZhaWxpbmcgYXNzZXJ0aW9uIHdpdGggdGFnIFshbWF5ZmFpbF0iLCAiW3RlYW1jaXR5XVshbWF5ZmFpbF0gIiApIHsKKworICAgIFJFUVVJUkUoIDMgPT0gNyApOyAgLy8gZG9lc24ndCBmYWlsIHRlc3QgY2FzZSB0aGlzIHRpbWUsIHJlcG9ydHM6IHRlc3RJZ25vcmVkCisgICAgUkVRVUlSRSggMyA9PSAzICk7Cit9CisKKy8vIFshc2hvdWxkZmFpbF0gLSBsaWtlIFshbWF5ZmFpbF0gYnV0IGZhaWxzIHRoZSB0ZXN0IGlmIGl0IHBhc3Nlcy4gCisvLyBUaGlzIGNhbiBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gYmUgbm90aWZpZWQgb2YgYWNjaWRlbnRhbCwgb3IgdGhpcmQtcGFydHksIGZpeGVzLgorCitURVNUX0NBU0UoICJUZWFtQ2l0eSBzdWNjZWVkaW5nIGFzc2VydGlvbiB3aXRoIHRhZyBbIXNob3VsZGZhaWxdIiwgIlt0ZWFtY2l0eV1bIXNob3VsZGZhaWxdIiApIHsKKworICAgIFNVQ0NFRUQoICJNYXJrZWQgWyFzaG91bGRmYWlsXSIgKTsKK30KKworLy8gQ29tcGlsZSAmIHJ1bjoKKy8vIC0gZysrIC1zdGQ9YysrMTEgLVdhbGwgLUkkKENBVENIX1JPT1QpIC1EQ0FUQ0hfRVhBTVBMRV9SUFRfMT1cImluY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3RlYW1jaXR5LmhwcFwiIC1vIDIwMC1ScHQtQ2F0Y2hNYWluVGVhbUNpdHkubyAtYyAyMDAtUnB0LUNhdGNoTWFpbi5jcHAKKy8vIC0gZysrIC1zdGQ9YysrMTEgLVdhbGwgLUkkKENBVENIX1JPT1QpIC1vIDIwNy1ScHQtVGVhbUNpdHlSZXBvcnRlciAyMDctUnB0LVRlYW1DaXR5UmVwb3J0ZXIuY3BwIDIwMC1ScHQtQ2F0Y2hNYWluVGVhbUNpdHkubyAmJiAyMDctUnB0LVRlYW1DaXR5UmVwb3J0ZXIgLS1saXN0LXJlcG9ydGVycworLy8KKy8vIC0gY2wgLUVIc2MgLUklQ0FUQ0hfUk9PVCUgLURDQVRDSF9FWEFNUExFX1JQVF8xPVwiaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwXCIgLUZvMjAwLVJwdC1DYXRjaE1haW5UZWFtQ2l0eS5vYmogLWMgMjAwLVJwdC1DYXRjaE1haW4uY3BwCisvLyAtIGNsIC1FSHNjIC1JJUNBVENIX1JPT1QlIDIwNy1ScHQtVGVhbUNpdHlSZXBvcnRlci5jcHAgMjAwLVJwdC1DYXRjaE1haW5UZWFtQ2l0eS5vICYmIDIwNy1ScHQtVGVhbUNpdHlSZXBvcnRlciAtLWxpc3QtcmVwb3J0ZXJzCisKKy8vIENvbXBpbGF0aW9uIG91dHB1dCAoLS1saXN0LXJlcG9ydGVycyk6CisvLyBBdmFpbGFibGUgcmVwb3J0ZXJzOgorLy8gICBjb21wYWN0OiAgIFJlcG9ydHMgdGVzdCByZXN1bHRzIG9uIGEgc2luZ2xlIGxpbmUsIHN1aXRhYmxlIGZvciBJREVzCisvLyAgIGNvbnNvbGU6ICAgUmVwb3J0cyB0ZXN0IHJlc3VsdHMgYXMgcGxhaW4gbGluZXMgb2YgdGV4dAorLy8gICBqdW5pdDogICAgIFJlcG9ydHMgdGVzdCByZXN1bHRzIGluIGFuIFhNTCBmb3JtYXQgdGhhdCBsb29rcyBsaWtlIEFudCdzCisvLyAgICAgICAgICAgICAgICBqdW5pdHJlcG9ydCB0YXJnZXQKKy8vICAgdGVhbWNpdHk6ICBSZXBvcnRzIHRlc3QgcmVzdWx0cyBhcyBUZWFtQ2l0eSBzZXJ2aWNlIG1lc3NhZ2VzCisvLyAgIHhtbDogICAgICAgUmVwb3J0cyB0ZXN0IHJlc3VsdHMgYXMgYW4gWE1MIGRvY3VtZW50CisKKy8vIEV4cGVjdGVkIG91dHB1dCAoYWJicmV2aWF0ZWQgYW5kIGJyb2tlbiBpbnRvIHNob3J0ZXIgbGluZXMpOgorLy8KKy8vIHByb21wdD4gMjA3LVJwdC1UZWFtQ2l0eVJlcG9ydGVyLmV4ZSAtLXJlcG9ydGVyIHRlYW1jaXR5CisvLyAjI3RlYW1jaXR5W3Rlc3RTdWl0ZVN0YXJ0ZWQgbmFtZT0nMjA3LVJwdC1UZWFtQ2l0eVJlcG9ydGVyLmV4ZSddCisvLyAjI3RlYW1jaXR5W3Rlc3RTdGFydGVkIG5hbWU9J1RlYW1DaXR5IHBhc3NlcyB1bmNvbmRpdGlvbmFsbHkgc3VjY2VlZGluZyBhc3NlcnRpb24nXQorLy8gIyN0ZWFtY2l0eVt0ZXN0RmluaXNoZWQgbmFtZT0nVGVhbUNpdHkgcGFzc2VzIHVuY29uZGl0aW9uYWxseSBzdWNjZWVkaW5nIGFzc2VydGlvbicgZHVyYXRpb249JzEnXQorLy8gIyN0ZWFtY2l0eVt0ZXN0U3RhcnRlZCBuYW1lPSdUZWFtQ2l0eSByZXBvcnRzIHVuY29uZGl0aW9uYWxseSBmYWlsaW5nIGFzc2VydGlvbiddCisvLyAjI3RlYW1jaXR5W3Rlc3RGYWlsZWQgbmFtZT0nVGVhbUNpdHkgcmVwb3J0cyB1bmNvbmRpdGlvbmFsbHkgZmFpbGluZyBhc3NlcnRpb24nIC8KKy8vIG1lc3NhZ2U9Jy4uLi9leGFtcGxlcy8yMDctUnB0LVRlYW1DaXR5UmVwb3J0ZXIuY3BwOjIzfG4vCisvLyAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4ufG58bi8KKy8vIC4uLi9leGFtcGxlcy8yMDctUnB0LVRlYW1DaXR5UmVwb3J0ZXIuY3BwOjI1fG5leHBsaWNpdCBmYWlsdXJlJ10KKy8vICMjdGVhbWNpdHlbdGVzdEZpbmlzaGVkIG5hbWU9J1RlYW1DaXR5IHJlcG9ydHMgdW5jb25kaXRpb25hbGx5IGZhaWxpbmcgYXNzZXJ0aW9uJyBkdXJhdGlvbj0nMyddCisvLyAuLi4KZGlmZiAtLWdpdCBhL2V4YW1wbGVzLzIxMC1FdnQtRXZlbnRMaXN0ZW5lcnMuY3BwIGIvZXhhbXBsZXMvMjEwLUV2dC1FdmVudExpc3RlbmVycy5jcHAKaW5kZXggOGJhMzYwZi4uZmRlNTFjNyAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvMjEwLUV2dC1FdmVudExpc3RlbmVycy5jcHAKKysrIGIvZXhhbXBsZXMvMjEwLUV2dC1FdmVudExpc3RlbmVycy5jcHAKQEAgLTEwLDcgKzEwLDcgQEAKIC8vIExldCBDYXRjaCBwcm92aWRlIHRoZSByZXF1aXJlZCBpbnRlcmZhY2VzOgogI2RlZmluZSBDQVRDSF9DT05GSUdfRVhURVJOQUxfSU5URVJGQUNFUwogCi0jaW5jbHVkZSAiY2F0Y2guaHBwIgorI2luY2x1ZGUgPGNhdGNoMi9jYXRjaC5ocHA+CiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xODcsOCArMTg3LDcgQEAKIAogdm9pZCBwcmludCggc3RkOjpvc3RyZWFtJiBvcywgaW50IGNvbnN0IGxldmVsLCBzdGQ6OnN0cmluZyBjb25zdCYgdGl0bGUsIENhdGNoOjpTZWN0aW9uSW5mbyBjb25zdCYgaW5mbyApIHsKICAgICBvcyA8PCB3cyhsZXZlbCAgKSA8PCB0aXRsZSA8PCAiOlxuIgotICAgICAgIDw8IHdzKGxldmVsKzEpIDw8ICItIG5hbWU6ICIgICAgICAgICA8PCBpbmZvLm5hbWUgPDwgIlxuIgotICAgICAgIDw8IHdzKGxldmVsKzEpIDw8ICItIGRlc2NyaXB0aW9uOiAnIiA8PCBpbmZvLmRlc2NyaXB0aW9uIDw8ICInXG4iOworICAgICAgIDw8IHdzKGxldmVsKzEpIDw8ICItIG5hbWU6ICIgICAgICAgICA8PCBpbmZvLm5hbWUgPDwgIlxuIjsKICAgICBwcmludCggb3MsIGxldmVsKzEgLCAiLSBsaW5lSW5mbyIsIGluZm8ubGluZUluZm8gKTsKIH0KIApAQCAtMzg4LDE2ICszODcsMTYgQEAKICAgICBSRVFVSVJFKCBpID09IDQyICk7CiAKICAgICBTRUNUSU9OKCJTZWN0aW9uIDEiKSB7Ci0gICAgICAgIElORk8oIlNlY3Rpb24gMSIpCisgICAgICAgIElORk8oIlNlY3Rpb24gMSIpOwogICAgICAgICBpID0gNzsKICAgICAgICAgU0VDVElPTigiU2VjdGlvbiAxLjEiKSB7Ci0gICAgICAgICAgICBJTkZPKCJTZWN0aW9uIDEuMSIpCisgICAgICAgICAgICBJTkZPKCJTZWN0aW9uIDEuMSIpOwogICAgICAgICAgICAgUkVRVUlSRSggaSA9PSA0MiApOwogICAgICAgICB9CiAgICAgfQogCiAgICAgU0VDVElPTigiU2VjdGlvbiAyIikgewotICAgICAgICBJTkZPKCJTZWN0aW9uIDIiKQorICAgICAgICBJTkZPKCJTZWN0aW9uIDIiKTsKICAgICAgICAgUkVRVUlSRSggaSA9PSA0MiApOwogICAgIH0KICAgICBXQVJOKCJBdCBlbmQgb2YgdGVzdCBjYXNlIik7CmRpZmYgLS1naXQgYS9leGFtcGxlcy8yMzEtQ2ZnLU91dHB1dFN0cmVhbXMuY3BwIGIvZXhhbXBsZXMvMjMxLUNmZy1PdXRwdXRTdHJlYW1zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmE5OTk3Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvMjMxLUNmZy1PdXRwdXRTdHJlYW1zLmNwcApAQCAtMCwwICsxLDQ5IEBACisvLyAyMzEtQ2ZnLU91dHB1dFN0cmVhbXMuY3BwCisvLyBTaG93IGhvdyB0byByZXBsYWNlIHRoZSBzdHJlYW1zIHdpdGggYSBzaW1wbGUgY3VzdG9tIG1hZGUgc3RyZWFtYnVmLgorCisvLyBOb3RlIHRoYXQgdGhpcyByZWltcGxlbWVudGF0aW9uIF9kb2VzIG5vdF8gZm9sbG93IGBzdGQ6OmNlcnJgCisvLyBzZW1hbnRpYywgYmVjYXVzZSBpdCBidWZmZXJzIHRoZSBvdXRwdXQuIEZvciBtb3N0IHVzZXMgaG93ZXZlciwKKy8vIHRoZXJlIGlzIG5vIGltcG9ydGFudCBkaWZmZXJlbmNlIGJldHdlZW4gaGF2aW5nIGBzdGQ6OmNlcnJgIGJ1ZmZlcmVkCisvLyBvciB1bmJ1ZmZlcmVkLgorCisjZGVmaW5lIENBVENIX0NPTkZJR19OT1NURE9VVAorI2RlZmluZSBDQVRDSF9DT05GSUdfTUFJTgorI2luY2x1ZGUgPGNhdGNoMi9jYXRjaC5ocHA+CisKK2NsYXNzIG91dF9idWZmIDogcHVibGljIHN0ZDo6c3RyaW5nYnVmIHsKKyAgICBzdGQ6OkZJTEUqIG1fc3RyZWFtOworcHVibGljOgorICAgIG91dF9idWZmKHN0ZDo6RklMRSogc3RyZWFtKSA6bV9zdHJlYW0oc3RyZWFtKSB7fQorICAgIH5vdXRfYnVmZigpIHsgcHVic3luYygpOyB9CisgICAgaW50IHN5bmMoKSB7CisgICAgICAgIGludCByZXQgPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGNoYXIgYyA6IHN0cigpKSB7CisgICAgICAgICAgICBpZiAocHV0YyhjLCBtX3N0cmVhbSkgPT0gRU9GKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gLTE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLy8gUmVzZXQgdGhlIGJ1ZmZlciB0byBhdm9pZCBwcmludGluZyBpdCBtdWx0aXBsZSB0aW1lcworICAgICAgICBzdHIoIiIpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KK307CisKK25hbWVzcGFjZSBDYXRjaCB7CisgICAgc3RkOjpvc3RyZWFtJiBjb3V0KCkgeworICAgICAgICBzdGF0aWMgc3RkOjpvc3RyZWFtIHJldChuZXcgb3V0X2J1ZmYoc3Rkb3V0KSk7CisgICAgICAgIHJldHVybiByZXQ7CisgICAgfQorICAgIHN0ZDo6b3N0cmVhbSYgY2xvZygpIHsKKyAgICAgICAgc3RhdGljIHN0ZDo6b3N0cmVhbSByZXQobmV3IG91dF9idWZmKHN0ZGVycikpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKyAgICBzdGQ6Om9zdHJlYW0mIGNlcnIoKSB7CisgICAgICAgIHJldHVybiBjbG9nKCk7CisgICAgfQorfQorCisKK1RFU1RfQ0FTRSgiVGhpcyBiaW5hcnkgdXNlcyBwdXRjIHRvIHdyaXRlIG91dCBvdXRwdXQiLCAiW2NvbXBpbGF0aW9uLW9ubHldIikgeworICAgIFNVQ0NFRUQoIk5vdGhpbmcgdG8gdGVzdC4iKTsKK30KZGlmZiAtLWdpdCBhL2V4YW1wbGVzLzMwMC1HZW4tT3duR2VuZXJhdG9yLmNwcCBiL2V4YW1wbGVzLzMwMC1HZW4tT3duR2VuZXJhdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGI2YTY1Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvMzAwLUdlbi1Pd25HZW5lcmF0b3IuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8vIDMwMC1HZW4tT3duR2VuZXJhdG9yLmNwcAorLy8gU2hvd3MgaG93IHRvIGRlZmluZSBhIGN1c3RvbSBnZW5lcmF0b3IuCisKKy8vIFNwZWNpZmljYWxseSB3ZSB3aWxsIGltcGxlbWVudCBhIHJhbmRvbSBudW1iZXIgZ2VuZXJhdG9yIGZvciBpbnRlZ2VycworLy8gSXQgd2lsbCBoYXZlIGluZmluaXRlIGNhcGFjaXR5IGFuZCBzZXR0YWJsZSBsb3dlci91cHBlciBib3VuZAorCisjaW5jbHVkZSA8Y2F0Y2gyL2NhdGNoLmhwcD4KKworI2luY2x1ZGUgPHJhbmRvbT4KKworLy8gVGhpcyBjbGFzcyBzaG93cyBob3cgdG8gaW1wbGVtZW50IGEgc2ltcGxlIGdlbmVyYXRvciBmb3IgQ2F0Y2ggdGVzdHMKK2NsYXNzIFJhbmRvbUludEdlbmVyYXRvciA6IHB1YmxpYyBDYXRjaDo6R2VuZXJhdG9yczo6SUdlbmVyYXRvcjxpbnQ+IHsKKyAgICBzdGQ6Om1pbnN0ZF9yYW5kIG1fcmFuZDsKKyAgICBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjw+IG1fZGlzdDsKKyAgICBpbnQgY3VycmVudF9udW1iZXI7CitwdWJsaWM6CisKKyAgICBSYW5kb21JbnRHZW5lcmF0b3IoaW50IGxvdywgaW50IGhpZ2gpOgorICAgICAgICBtX3JhbmQoc3RkOjpyYW5kb21fZGV2aWNle30oKSksCisgICAgICAgIG1fZGlzdChsb3csIGhpZ2gpCisgICAgeworICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPihuZXh0KCkpOworICAgIH0KKworICAgIGludCBjb25zdCYgZ2V0KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBuZXh0KCkgb3ZlcnJpZGUgeworICAgICAgICBjdXJyZW50X251bWJlciA9IG1fZGlzdChtX3JhbmQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCisvLyBBdm9pZHMgLVd3ZWFrLXZ0YWJsZXMKK2ludCBjb25zdCYgUmFuZG9tSW50R2VuZXJhdG9yOjpnZXQoKSBjb25zdCB7CisgICAgcmV0dXJuIGN1cnJlbnRfbnVtYmVyOworfQorCisvLyBUaGlzIGhlbHBlciBmdW5jdGlvbiBwcm92aWRlcyBhIG5pY2VyIFVYIHdoZW4gaW5zdGFudGlhdGluZyB0aGUgZ2VuZXJhdG9yCisvLyBOb3RpY2UgdGhhdCBpdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIEdlbmVyYXRvcldyYXBwZXI8aW50Piwgd2hpY2gKKy8vIGlzIGEgdmFsdWUtd3JhcHBlciBhcm91bmQgc3RkOjp1bmlxdWVfcHRyPElHZW5lcmF0b3I8aW50Pj4uCitDYXRjaDo6R2VuZXJhdG9yczo6R2VuZXJhdG9yV3JhcHBlcjxpbnQ+IHJhbmRvbShpbnQgbG93LCBpbnQgaGlnaCkgeworICAgIHJldHVybiBDYXRjaDo6R2VuZXJhdG9yczo6R2VuZXJhdG9yV3JhcHBlcjxpbnQ+KHN0ZDo6dW5pcXVlX3B0cjxDYXRjaDo6R2VuZXJhdG9yczo6SUdlbmVyYXRvcjxpbnQ+PihuZXcgUmFuZG9tSW50R2VuZXJhdG9yKGxvdywgaGlnaCkpKTsKK30KKworLy8gVGhlIHR3byBzZWN0aW9ucyBpbiB0aGlzIHRlc3QgY2FzZSBhcmUgZXF1aXZhbGVudCwgYnV0IHRoZSBmaXJzdCBvbmUKKy8vIGlzIG11Y2ggbW9yZSByZWFkYWJsZS9uaWNlciB0byB1c2UKK1RFU1RfQ0FTRSgiR2VuZXJhdGluZyByYW5kb20gaW50cyIsICJbZXhhbXBsZV1bZ2VuZXJhdG9yXSIpIHsKKyAgICBTRUNUSU9OKCJOaWNlIFVYIikgeworICAgICAgICBhdXRvIGkgPSBHRU5FUkFURSh0YWtlKDEwMCwgcmFuZG9tKC0xMDAsIDEwMCkpKTsKKyAgICAgICAgUkVRVUlSRShpID49IC0xMDApOworICAgICAgICBSRVFVSVJFKGkgPD0gMTAwKTsKKyAgICB9CisgICAgU0VDVElPTigiQ3JlYXRpbmcgdGhlIHJhbmRvbSBnZW5lcmF0b3IgZGlyZWN0bHkiKSB7CisgICAgICAgIGF1dG8gaSA9IEdFTkVSQVRFKHRha2UoMTAwLCBHZW5lcmF0b3JXcmFwcGVyPGludD4oc3RkOjp1bmlxdWVfcHRyPElHZW5lcmF0b3I8aW50Pj4obmV3IFJhbmRvbUludEdlbmVyYXRvcigtMTAwLCAxMDApKSkpKTsKKyAgICAgICAgUkVRVUlSRShpID49IC0xMDApOworICAgICAgICBSRVFVSVJFKGkgPD0gMTAwKTsKKyAgICB9Cit9CisKKy8vIENvbXBpbGluZyBhbmQgcnVubmluZyB0aGlzIGZpbGUgd2lsbCByZXN1bHQgaW4gNDAwIHN1Y2Nlc3NmdWwgYXNzZXJ0aW9ucwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvMzAxLUdlbi1NYXBUeXBlQ29udmVyc2lvbi5jcHAgYi9leGFtcGxlcy8zMDEtR2VuLU1hcFR5cGVDb252ZXJzaW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjM3N2U5Ci0tLSAvZGV2L251bGwKKysrIGIvZXhhbXBsZXMvMzAxLUdlbi1NYXBUeXBlQ29udmVyc2lvbi5jcHAKQEAgLTAsMCArMSw1NCBAQAorLy8gMzAxLUdlbi1NYXBUeXBlQ29udmVyc2lvbi5jcHAKKy8vIFNob3dzIGhvdyB0byB1c2UgbWFwIHRvIG1vZGlmeSBnZW5lcmF0b3IncyByZXR1cm4gdHlwZS4KKworLy8gVE9ETworCisjaW5jbHVkZSA8Y2F0Y2gyL2NhdGNoLmhwcD4KKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDxzc3RyZWFtPgorCisvLyBSZXR1cm5zIGEgbGluZSBmcm9tIGEgc3RyZWFtLiBZb3UgY291bGQgaGF2ZSBpdCBlLmcuIHJlYWQgbGluZXMgZnJvbQorLy8gYSBmaWxlLCBidXQgdG8gYXZvaWQgcHJvYmxlbXMgd2l0aCBwYXRocyBpbiBleGFtcGxlcywgd2Ugd2lsbCB1c2UKKy8vIGEgZml4ZWQgc3RyaW5nc3RyZWFtLgorY2xhc3MgTGluZUdlbmVyYXRvciA6IHB1YmxpYyBDYXRjaDo6R2VuZXJhdG9yczo6SUdlbmVyYXRvcjxzdGQ6OnN0cmluZz4geworICAgIHN0ZDo6c3RyaW5nIG1fbGluZTsKKyAgICBzdGQ6OnN0cmluZ3N0cmVhbSBtX3N0cmVhbTsKK3B1YmxpYzoKKyAgICBMaW5lR2VuZXJhdG9yKCkgeworICAgICAgICBtX3N0cmVhbS5zdHIoIjFcbjJcbjNcbjRcbiIpOworICAgICAgICBpZiAoIW5leHQoKSkgeworICAgICAgICAgICAgdGhyb3cgQ2F0Y2g6OkdlbmVyYXRvckV4Y2VwdGlvbigiQ291bGRuJ3QgcmVhZCBhIHNpbmdsZSBsaW5lIik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgZ2V0KCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbV9saW5lOworICAgIH0KKyAgICAKKyAgICBib29sIG5leHQoKSBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiAhIXN0ZDo6Z2V0bGluZShtX3N0cmVhbSwgbV9saW5lKTsKKyAgICB9Cit9OworCisvLyBUaGlzIGhlbHBlciBmdW5jdGlvbiBwcm92aWRlcyBhIG5pY2VyIFVYIHdoZW4gaW5zdGFudGlhdGluZyB0aGUgZ2VuZXJhdG9yCisvLyBOb3RpY2UgdGhhdCBpdCByZXR1cm5zIGFuIGluc3RhbmNlIG9mIEdlbmVyYXRvcldyYXBwZXI8c3RkOjpzdHJpbmc+LCB3aGljaAorLy8gaXMgYSB2YWx1ZS13cmFwcGVyIGFyb3VuZCBzdGQ6OnVuaXF1ZV9wdHI8SUdlbmVyYXRvcjxzdGQ6OnN0cmluZz4+LgorQ2F0Y2g6OkdlbmVyYXRvcnM6OkdlbmVyYXRvcldyYXBwZXI8c3RkOjpzdHJpbmc+IGxpbmVzKHN0ZDo6c3RyaW5nIC8qIGlnbm9yZWQgZm9yIGV4YW1wbGUgKi8pIHsKKyAgICByZXR1cm4gQ2F0Y2g6OkdlbmVyYXRvcnM6OkdlbmVyYXRvcldyYXBwZXI8c3RkOjpzdHJpbmc+KAorICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2F0Y2g6OkdlbmVyYXRvcnM6OklHZW5lcmF0b3I8c3RkOjpzdHJpbmc+PigKKyAgICAgICAgICAgIG5ldyBMaW5lR2VuZXJhdG9yKCkKKyAgICAgICAgKQorICAgICk7Cit9CisKKworCitURVNUX0NBU0UoImZpbHRlciBjYW4gY29udmVydCB0eXBlcyBpbnNpZGUgdGhlIGdlbmVyYXRvciBleHByZXNzaW9uIiwgIltleGFtcGxlXVtnZW5lcmF0b3JdIikgeworICAgIGF1dG8gbnVtID0gR0VORVJBVEUobWFwPGludD4oW10oc3RkOjpzdHJpbmcgY29uc3QmIGxpbmUpIHsgcmV0dXJuIHN0ZDo6c3RvaShsaW5lKTsgfSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVzKCJmYWtlLWZpbGUiKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgUkVRVUlSRShudW0gPiAwKTsKK30KKworLy8gQ29tcGlsaW5nIGFuZCBydW5uaW5nIHRoaXMgZmlsZSB3aWxsIHJlc3VsdCBpbiA0IHN1Y2Nlc3NmdWwgYXNzZXJ0aW9ucwpkaWZmIC0tZ2l0IGEvZXhhbXBsZXMvMzEwLUdlbi1WYXJpYWJsZXNJbkdlbmVyYXRvcnMuY3BwIGIvZXhhbXBsZXMvMzEwLUdlbi1WYXJpYWJsZXNJbkdlbmVyYXRvcnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2ODQwYmIKLS0tIC9kZXYvbnVsbAorKysgYi9leGFtcGxlcy8zMTAtR2VuLVZhcmlhYmxlc0luR2VuZXJhdG9ycy5jcHAKQEAgLTAsMCArMSw3MiBAQAorLy8gMzEwLUdlbi1WYXJpYWJsZXNJbkdlbmVyYXRvci5jcHAKKy8vIFNob3dzIGhvdyB0byB1c2UgdmFyaWFibGVzIHdoZW4gY3JlYXRpbmcgZ2VuZXJhdG9ycy4KKworLy8gTm90ZSB0aGF0IHVzaW5nIHZhcmlhYmxlcyBpbnNpZGUgZ2VuZXJhdG9ycyBpcyBkYW5nZXJvdXMgYW5kIHNob3VsZAorLy8gYmUgZG9uZSBvbmx5IGlmIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZywgYmVjYXVzZSB0aGUgZ2VuZXJhdG9ycworLy8gX1dJTExfIG91dGxpdmUgdGhlIHZhcmlhYmxlcyAtLSB0aHVzIHRoZXkgc2hvdWxkIGJlIGVpdGhlciBjYXB0dXJlZAorLy8gYnkgdmFsdWUgZGlyZWN0bHksIG9yIGNvcGllZCBieSB0aGUgZ2VuZXJhdG9ycyBkdXJpbmcgY29uc3RydWN0aW9uLgorCisjaW5jbHVkZSA8Y2F0Y2gyL2NhdGNoLmhwcD4KKworI2luY2x1ZGUgPHJhbmRvbT4KKworLy8gTGV0cyBzdGFydCBieSBpbXBsZW1lbnRpbmcgYSBwYXJhbWV0cml6YWJsZSBkb3VibGUgZ2VuZXJhdG9yCitjbGFzcyBSYW5kb21Eb3VibGVHZW5lcmF0b3IgOiBwdWJsaWMgQ2F0Y2g6OkdlbmVyYXRvcnM6OklHZW5lcmF0b3I8ZG91YmxlPiB7CisgICAgc3RkOjptaW5zdGRfcmFuZCBtX3JhbmQ7CisgICAgc3RkOjp1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uPD4gbV9kaXN0OworICAgIGRvdWJsZSBjdXJyZW50X251bWJlcjsKK3B1YmxpYzoKKworICAgIFJhbmRvbURvdWJsZUdlbmVyYXRvcihkb3VibGUgbG93LCBkb3VibGUgaGlnaCk6CisgICAgICAgIG1fcmFuZChzdGQ6OnJhbmRvbV9kZXZpY2V7fSgpKSwKKyAgICAgICAgbV9kaXN0KGxvdywgaGlnaCkKKyAgICB7CisgICAgICAgIHN0YXRpY19jYXN0PHZvaWQ+KG5leHQoKSk7CisgICAgfQorCisgICAgZG91YmxlIGNvbnN0JiBnZXQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIG5leHQoKSBvdmVycmlkZSB7CisgICAgICAgIGN1cnJlbnRfbnVtYmVyID0gbV9kaXN0KG1fcmFuZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKKy8vIEF2b2lkcyAtV3dlYWstdnRhYmxlcworZG91YmxlIGNvbnN0JiBSYW5kb21Eb3VibGVHZW5lcmF0b3I6OmdldCgpIGNvbnN0IHsKKyAgICByZXR1cm4gY3VycmVudF9udW1iZXI7Cit9CisKKworLy8gQWxzbyBwcm92aWRlIGEgbmljZSBzaG9ydGN1dCBmb3IgY3JlYXRpbmcgdGhlIGdlbmVyYXRvcgorQ2F0Y2g6OkdlbmVyYXRvcnM6OkdlbmVyYXRvcldyYXBwZXI8ZG91YmxlPiByYW5kb20oZG91YmxlIGxvdywgZG91YmxlIGhpZ2gpIHsKKyAgICByZXR1cm4gQ2F0Y2g6OkdlbmVyYXRvcnM6OkdlbmVyYXRvcldyYXBwZXI8ZG91YmxlPihzdGQ6OnVuaXF1ZV9wdHI8Q2F0Y2g6OkdlbmVyYXRvcnM6OklHZW5lcmF0b3I8ZG91YmxlPj4obmV3IFJhbmRvbURvdWJsZUdlbmVyYXRvcihsb3csIGhpZ2gpKSk7Cit9CisKKworVEVTVF9DQVNFKCJHZW5lcmF0ZSByYW5kb20gZG91YmxlcyBhY3Jvc3MgZGlmZmVyZW50IHJhbmdlcyIsCisgICAgICAgICAgIltnZW5lcmF0b3JdW2V4YW1wbGVdW2FkdmFuY2VkXSIpIHsKKyAgICAvLyBXb3JrYXJvdW5kIGZvciBvbGQgbGlic3RkYysrCisgICAgdXNpbmcgcmVjb3JkID0gc3RkOjp0dXBsZTxkb3VibGUsIGRvdWJsZT47CisgICAgLy8gU2V0IHVwIDMgcmFuZ2VzIHRvIGdlbmVyYXRlIG51bWJlcnMgZnJvbQorICAgIGF1dG8gciA9IEdFTkVSQVRFKHRhYmxlPGRvdWJsZSwgZG91YmxlPih7CisgICAgICAgIHJlY29yZHszLCA0fSwKKyAgICAgICAgcmVjb3Jkey00LCAtM30sCisgICAgICAgIHJlY29yZHsxMCwgMTAwMH0KKyAgICB9KSk7CisKKyAgICAvLyBUaGlzIHdpbGwgbm90IGNvbXBpbGUgKGludGVudGlvbmFsbHkpLCBiZWNhdXNlIGl0IGFjY2Vzc2VzIGEgdmFyaWFibGUKKyAgICAvLyBhdXRvIG51bWJlciA9IEdFTkVSQVRFKHRha2UoNTAsIHJhbmRvbShyLmZpcnN0LCByLnNlY29uZCkpKTsKKyAgICAKKyAgICAvLyBXZSBoYXZlIHRvIG1hbnVhbGx5IHJlZ2lzdGVyIHRoZSBnZW5lcmF0b3JzIGluc3RlYWQKKyAgICAvLyBOb3RpY2UgdGhhdCB3ZSBhcmUgdXNpbmcgdmFsdWUgY2FwdHVyZSBpbiB0aGUgbGFtYmRhLCB0byBhdm9pZCBsaWZldGltZSBpc3N1ZXMKKyAgICBhdXRvIG51bWJlciA9IENhdGNoOjpHZW5lcmF0b3JzOjpnZW5lcmF0ZSggQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sCisgICAgICAgIFs9XXsKKyAgICAgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBDYXRjaDo6R2VuZXJhdG9yczsKKyAgICAgICAgICAgIHJldHVybiBtYWtlR2VuZXJhdG9ycyh0YWtlKDUwLCByYW5kb20oc3RkOjpnZXQ8MD4ociksIHN0ZDo6Z2V0PDE+KHIpKSkpOworICAgICAgICB9CisgICAgKTsKKyAgICBSRVFVSVJFKHN0ZDo6YWJzKG51bWJlcikgPiAwKTsKK30KKworLy8gQ29tcGlsaW5nIGFuZCBydW5uaW5nIHRoaXMgZmlsZSB3aWxsIHJlc3VsdCBpbiAxNTAgc3VjY2Vzc2Z1bCBhc3NlcnRpb25zCisKZGlmZiAtLWdpdCBhL2V4YW1wbGVzL0NNYWtlTGlzdHMudHh0IGIvZXhhbXBsZXMvQ01ha2VMaXN0cy50eHQKaW5kZXggNzI3MGU5My4uZGZmNWM3NCAxMDA2NDQKLS0tIGEvZXhhbXBsZXMvQ01ha2VMaXN0cy50eHQKKysrIGIvZXhhbXBsZXMvQ01ha2VMaXN0cy50eHQKQEAgLTgsMTUgKzgsMTkgQEAKIAogcHJvamVjdCggQ2F0Y2hFeGFtcGxlcyBDWFggKQogCittZXNzYWdlKCBTVEFUVVMgIkV4YW1wbGVzIGluY2x1ZGVkIiApCisKICMgZGVmaW5lIGZvbGRlcnMgdXNlZDoKIAogc2V0KCBFWEFNUExFU19ESVIgJHtDQVRDSF9ESVJ9L2V4YW1wbGVzICkKIHNldCggSEVBREVSX0RJUiAgICR7Q0FUQ0hfRElSfS9zaW5nbGVfaW5jbHVkZSApCitzZXQoIFJFUE9SVEVSX0hFQURFUl9ESVIgJHtDQVRDSF9ESVJ9L2luY2x1ZGUvcmVwb3J0ZXJzICkKIAogIyBzaW5nbGUtZmlsZSBzb3VyY2VzOgogCiBzZXQoIFNPVVJDRVNfU0lOR0xFX0ZJTEUKICAgICAwMTAtVGVzdENhc2UuY3BwCisgICAgMjMxLUNmZy1PdXRwdXRTdHJlYW1zLmNwcAogKQogCiAjIG11bHRpcGxlLWZpbGUgbW9kdWxlczoKQEAgLTQwLDYgKzQ0LDI5IEBACiAgICAgMTEwLUZpeC1DbGFzc0ZpeHR1cmUuY3BwCiAgICAgMTIwLUJkZC1TY2VuYXJpb0dpdmVuV2hlblRoZW4uY3BwCiAgICAgMjEwLUV2dC1FdmVudExpc3RlbmVycy5jcHAKKyAgICAzMDAtR2VuLU93bkdlbmVyYXRvci5jcHAKKyAgICAzMDEtR2VuLU1hcFR5cGVDb252ZXJzaW9uLmNwcAorICAgIDMxMC1HZW4tVmFyaWFibGVzSW5HZW5lcmF0b3JzLmNwcAorKQorCisjIG1haW4tcyBmb3IgcmVwb3J0ZXItc3BlY2lmaWMgdGVzdCBzb3VyY2VzOgorCitzZXQoIFNPVVJDRVNfUkVQT1JURVJTX01BSU4KKyAgICAyMDAtUnB0LUNhdGNoTWFpbi5jcHAKKykKKworc3RyaW5nKCBSRVBMQUNFICIuY3BwIiAiIiBCQVNFTkFNRVNfUkVQT1JURVJTX01BSU4gMjAwLVJwdC1DYXRjaE1haW4uY3BwICkKKworc2V0KCBOQU1FU19SRVBPUlRFUlMgVGVhbUNpdHkgKQorCitmb3JlYWNoKCByZXBvcnRlciAke05BTUVTX1JFUE9SVEVSU30gKQorICAgIGxpc3QoIEFQUEVORCBTT1VSQ0VTX1NQRUNJRklDX1JFUE9SVEVSU19NQUlOICR7QkFTRU5BTUVTX1JFUE9SVEVSU19NQUlOfSR7cmVwb3J0ZXJ9LmNwcCApCitlbmRmb3JlYWNoKCkKKworIyBzb3VyY2VzIHRvIGNvbWJpbmUgd2l0aCAyMDAtUnB0LUNhdGNoTWFpbntSZXBvcnRlcn0uY3BwOgorCitzZXQoIFNPVVJDRVNfUkVQT1JURVJTX1RFU1RTCisgICAgMjA3LVJwdC1UZWFtQ2l0eVJlcG9ydGVyLmNwcAogKQogCiAjIGNoZWNrIGlmIGFsbCBzb3VyY2VzIGFyZSBsaXN0ZWQsIHdhcm4gaWYgbm90OgpAQCAtNDksNiArNzYsOCBAQAogICAgICR7U09VUkNFU19TSU5HTEVfRklMRX0KICAgICAke1NPVVJDRVNfSURJT01BVElDX01BSU59CiAgICAgJHtTT1VSQ0VTX0lESU9NQVRJQ19URVNUU30KKyAgICAke1NPVVJDRVNfUkVQT1JURVJTX01BSU59CisgICAgJHtTT1VSQ0VTX1JFUE9SVEVSU19URVNUU30KICkKIAogZm9yZWFjaCggbmFtZSAke1NPVVJDRVNfQUxMfSApCkBAIC02MSwyOSArOTAsNTUgQEAKIAogc3RyaW5nKCBSRVBMQUNFICIuY3BwIiAiIiBCQVNFTkFNRVNfU0lOR0xFX0ZJTEUgICAgICIke1NPVVJDRVNfU0lOR0xFX0ZJTEV9IiApCiBzdHJpbmcoIFJFUExBQ0UgIi5jcHAiICIiIEJBU0VOQU1FU19JRElPTUFUSUNfVEVTVFMgIiR7U09VUkNFU19JRElPTUFUSUNfVEVTVFN9IiApCitzdHJpbmcoIFJFUExBQ0UgIi5jcHAiICIiIEJBU0VOQU1FU19SRVBPUlRFUlNfVEVTVFMgIiR7U09VUkNFU19SRVBPUlRFUlNfVEVTVFN9IiApCitzdHJpbmcoIFJFUExBQ0UgIi5jcHAiICIiIEJBU0VOQU1FU19SRVBPUlRFUlNfTUFJTiAgIiR7U09VUkNFU19SRVBPUlRFUlNfTUFJTn0iICkKIAogc2V0KCBUQVJHRVRTX1NJTkdMRV9GSUxFICAgICAke0JBU0VOQU1FU19TSU5HTEVfRklMRX0gKQogc2V0KCBUQVJHRVRTX0lESU9NQVRJQ19URVNUUyAke0JBU0VOQU1FU19JRElPTUFUSUNfVEVTVFN9ICkKLXNldCggVEFSR0VUU19BTEwgICAgICAgICAgICAgJHtUQVJHRVRTX1NJTkdMRV9GSUxFfSAke1RBUkdFVFNfSURJT01BVElDX1RFU1RTfSAwMjAtVGVzdENhc2UgQ2F0Y2hNYWluICkKK3NldCggVEFSR0VUU19SRVBPUlRFUlNfVEVTVFMgJHtCQVNFTkFNRVNfUkVQT1JURVJTX1RFU1RTfSApCitzZXQoIFRBUkdFVFNfUkVQT1JURVJTX01BSU4gICR7QkFTRU5BTUVTX1JFUE9SVEVSU19NQUlOfSApCisKK3NldCggVEFSR0VUU19BTEwKKyAgICAke1RBUkdFVFNfU0lOR0xFX0ZJTEV9CisgICAgMDIwLVRlc3RDYXNlCisgICAgJHtUQVJHRVRTX0lESU9NQVRJQ19URVNUU30gQ2F0Y2hNYWluCisgICAgJHtUQVJHRVRTX1JFUE9SVEVSU19URVNUU30gQ2F0Y2hNYWluVGVhbUNpdHkKKykKIAogIyBkZWZpbmUgcHJvZ3JhbSB0YXJnZXRzOgogCi1hZGRfbGlicmFyeSggQ2F0Y2hNYWluIE9CSkVDVCAke0VYQU1QTEVTX0RJUn0vJHtTT1VSQ0VTX0lESU9NQVRJQ19NQUlOfSAke0hFQURFUl9ESVJ9L2NhdGNoLmhwcCApCithZGRfbGlicmFyeSggQ2F0Y2hNYWluICAgICAgICAgT0JKRUNUICR7RVhBTVBMRVNfRElSfS8ke1NPVVJDRVNfSURJT01BVElDX01BSU59ICR7SEVBREVSX0RJUn0vY2F0Y2gyL2NhdGNoLmhwcCApCisjYWRkX2xpYnJhcnkoIENhdGNoTWFpbkF1dG9tYWtlIE9CSkVDVCAke0VYQU1QTEVTX0RJUn0vMjAwLVJwdC1DYXRjaE1haW4uY3BwICR7SEVBREVSX0RJUn0vY2F0Y2gyL2NhdGNoLmhwcCApCisjYWRkX2xpYnJhcnkoIENhdGNoTWFpblRhcCAgICAgIE9CSkVDVCAke0VYQU1QTEVTX0RJUn0vMjAwLVJwdC1DYXRjaE1haW4uY3BwICR7SEVBREVSX0RJUn0vY2F0Y2gyL2NhdGNoLmhwcCApCithZGRfbGlicmFyeSggQ2F0Y2hNYWluVGVhbUNpdHkgT0JKRUNUICR7RVhBTVBMRVNfRElSfS8yMDAtUnB0LUNhdGNoTWFpbi5jcHAgJHtIRUFERVJfRElSfS9jYXRjaDIvY2F0Y2guaHBwICkKIAotYWRkX2V4ZWN1dGFibGUoIDAyMC1UZXN0Q2FzZSAke0VYQU1QTEVTX0RJUn0vMDIwLVRlc3RDYXNlLTEuY3BwICR7RVhBTVBMRVNfRElSfS8wMjAtVGVzdENhc2UtMi5jcHAgJHtIRUFERVJfRElSfS9jYXRjaC5ocHAgKQorI3RhcmdldF9jb21waWxlX2RlZmluaXRpb25zKCBDYXRjaE1haW5BdXRvbWFrZSBQUklWQVRFIENBVENIX0VYQU1QTEVfUlBUXzE9XCJpbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9hdXRvbWFrZS5ocHBcIiApCisjdGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoIENhdGNoTWFpblRhcCAgICAgIFBSSVZBVEUgQ0FUQ0hfRVhBTVBMRV9SUFRfMT1cImluY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3RhcC5ocHBcIiApCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyggQ2F0Y2hNYWluVGVhbUNpdHkgUFJJVkFURSBDQVRDSF9FWEFNUExFX1JQVF8xPVwiaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwXCIgKQogCiBmb3JlYWNoKCBuYW1lICR7VEFSR0VUU19TSU5HTEVfRklMRX0gKQotICAgIGFkZF9leGVjdXRhYmxlKCAke25hbWV9ICR7RVhBTVBMRVNfRElSfS8ke25hbWV9LmNwcCAke0hFQURFUl9ESVJ9L2NhdGNoLmhwcCApCisgICAgYWRkX2V4ZWN1dGFibGUoICR7bmFtZX0gJHtFWEFNUExFU19ESVJ9LyR7bmFtZX0uY3BwICR7SEVBREVSX0RJUn0vY2F0Y2gyL2NhdGNoLmhwcCApCiBlbmRmb3JlYWNoKCkKIAogZm9yZWFjaCggbmFtZSAke1RBUkdFVFNfSURJT01BVElDX1RFU1RTfSApCi0gICAgYWRkX2V4ZWN1dGFibGUoICR7bmFtZX0gJHtFWEFNUExFU19ESVJ9LyR7bmFtZX0uY3BwICQ8VEFSR0VUX09CSkVDVFM6Q2F0Y2hNYWluPiAke0hFQURFUl9ESVJ9L2NhdGNoLmhwcCApCisgICAgYWRkX2V4ZWN1dGFibGUoICR7bmFtZX0gJHtFWEFNUExFU19ESVJ9LyR7bmFtZX0uY3BwICQ8VEFSR0VUX09CSkVDVFM6Q2F0Y2hNYWluPiAke0hFQURFUl9ESVJ9L2NhdGNoMi9jYXRjaC5ocHAgKQogZW5kZm9yZWFjaCgpCiAKK2FkZF9leGVjdXRhYmxlKCAwMjAtVGVzdENhc2UgJHtFWEFNUExFU19ESVJ9LzAyMC1UZXN0Q2FzZS0xLmNwcCAke0VYQU1QTEVTX0RJUn0vMDIwLVRlc3RDYXNlLTIuY3BwICR7SEVBREVSX0RJUn0vY2F0Y2gyL2NhdGNoLmhwcCApCisKKyNhZGRfZXhlY3V0YWJsZSggMjA3LVJwdC1BdXRvbWFrZVJlcG9ydGVyICR7RVhBTVBMRVNfRElSfS8yMDctUnB0LUF1dG9tYWtlUmVwb3J0ZXIuY3BwICQ8VEFSR0VUX09CSkVDVFM6Q2F0Y2hNYWluQXV0b21ha2U+ICR7SEVBREVSX0RJUn0vY2F0Y2gyL2NhdGNoLmhwcCApCisjYWRkX2V4ZWN1dGFibGUoIDIwNy1ScHQtVGFwUmVwb3J0ZXIgICAgICAke0VYQU1QTEVTX0RJUn0vMjA3LVJwdC1UYXBSZXBvcnRlci5jcHAgICAgICAkPFRBUkdFVF9PQkpFQ1RTOkNhdGNoTWFpblRhcD4gICAgICAke0hFQURFUl9ESVJ9L2NhdGNoMi9jYXRjaC5ocHAgKQorYWRkX2V4ZWN1dGFibGUoIDIwNy1ScHQtVGVhbUNpdHlSZXBvcnRlciAke0VYQU1QTEVTX0RJUn0vMjA3LVJwdC1UZWFtQ2l0eVJlcG9ydGVyLmNwcCAkPFRBUkdFVF9PQkpFQ1RTOkNhdGNoTWFpblRlYW1DaXR5PiAke0hFQURFUl9ESVJ9L2NhdGNoMi9jYXRjaC5ocHAgKQorCisjZm9yZWFjaCggbmFtZSAke1RBUkdFVFNfUkVQT1JURVJTX1RFU1RTfSApCisjICAgIGFkZF9leGVjdXRhYmxlKCAke25hbWV9ICR7RVhBTVBMRVNfRElSfS8ke25hbWV9LmNwcCAkPFRBUkdFVF9PQkpFQ1RTOkNhdGNoTWFpbj4gJHtIRUFERVJfRElSfS9jYXRjaDIvY2F0Y2guaHBwICkKKyNlbmRmb3JlYWNoKCkKKwogZm9yZWFjaCggbmFtZSAke1RBUkdFVFNfQUxMfSApCi0gICAgdGFyZ2V0X2luY2x1ZGVfZGlyZWN0b3JpZXMoICR7bmFtZX0gUFJJVkFURSAke0hFQURFUl9ESVJ9ICkKKyAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyggJHtuYW1lfSBQUklWQVRFICR7SEVBREVSX0RJUn0gJHtDQVRDSF9ESVJ9ICkKIAogICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgJHtuYW1lfSBQUk9QRVJUWSBDWFhfU1RBTkRBUkQgMTEpCisgICAgc2V0X3Byb3BlcnR5KFRBUkdFVCAke25hbWV9IFBST1BFUlRZIENYWF9FWFRFTlNJT05TIE9GRikKIAogICAgICMgQWRkIGRlc2lyZWQgd2FybmluZ3MKICAgICBpZiAoIENNQUtFX0NYWF9DT01QSUxFUl9JRCBNQVRDSEVTICJDbGFuZ3xBcHBsZUNsYW5nfEdOVSIgKQpAQCAtOTgsMyArMTUzLDQgQEAKICAgICAgICAgdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyggJHtuYW1lfSAgUFJJVkFURSAvVzQgL3c0NDI2NSAvV1ggKQogICAgIGVuZGlmKCkKIGVuZGZvcmVhY2goKQorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2NhdGNoLmhwcCBiL2luY2x1ZGUvY2F0Y2guaHBwCmluZGV4IDBhNDcxMWIuLmUxNTU4OGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvY2F0Y2guaHBwCisrKyBiL2luY2x1ZGUvY2F0Y2guaHBwCkBAIC0xMCw4ICsxMCw4IEBACiAjZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9IUFBfSU5DTFVERUQKIAogI2RlZmluZSBDQVRDSF9WRVJTSU9OX01BSk9SIDIKLSNkZWZpbmUgQ0FUQ0hfVkVSU0lPTl9NSU5PUiAxCi0jZGVmaW5lIENBVENIX1ZFUlNJT05fUEFUQ0ggMQorI2RlZmluZSBDQVRDSF9WRVJTSU9OX01JTk9SIDcKKyNkZWZpbmUgQ0FUQ0hfVkVSU0lPTl9QQVRDSCAwCiAKICNpZmRlZiBfX2NsYW5nX18KICMgICAgcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIKQEAgLTMzLDcgKzMzLDkgQEAKICMgIGlmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfTUFUQ0hFUlMpCiAjICAgIHVuZGVmIENBVENIX0NPTkZJR19ESVNBQkxFX01BVENIRVJTCiAjICBlbmRpZgotIyAgZGVmaW5lIENBVENIX0NPTkZJR19FTkFCTEVfQ0hST05PX1NUUklOR01BS0VSCisjICBpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX0NIUk9OT19TVFJJTkdNQUtFUikKKyMgICAgZGVmaW5lIENBVENIX0NPTkZJR19FTkFCTEVfQ0hST05PX1NUUklOR01BS0VSCisjICBlbmRpZgogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfSU1QTF9PTkxZKQpAQCAtNjAsNiArNjIsOSBAQAogI2lmbmRlZiBDQVRDSF9DT05GSUdfRElTQUJMRV9NQVRDSEVSUwogI2luY2x1ZGUgImludGVybmFsL2NhdGNoX2NhcHR1cmVfbWF0Y2hlcnMuaCIKICNlbmRpZgorI2luY2x1ZGUgImludGVybmFsL2NhdGNoX2dlbmVyYXRvcnMuaHBwIgorI2luY2x1ZGUgImludGVybmFsL2NhdGNoX2dlbmVyYXRvcnNfZ2VuZXJpYy5ocHAiCisjaW5jbHVkZSAiaW50ZXJuYWwvY2F0Y2hfZ2VuZXJhdG9yc19zcGVjaWZpYy5ocHAiCiAKIC8vIFRoZXNlIGZpbGVzIGFyZSBpbmNsdWRlZCBoZXJlIHNvIHRoZSBzaW5nbGVfaW5jbHVkZSBzY3JpcHQgZG9lc24ndCBwdXQgdGhlbQogLy8gaW4gdGhlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgc2VjdGlvbnMKQEAgLTk4LDcgKzEwMyw3IEBACiAjZGVmaW5lIENBVENIX1JFUVVJUkUoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFU1QoICJDQVRDSF9SRVFVSVJFIiwgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpOb3JtYWwsIF9fVkFfQVJHU19fICkKICNkZWZpbmUgQ0FUQ0hfUkVRVUlSRV9GQUxTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVTVCggIkNBVENIX1JFUVVJUkVfRkFMU0UiLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246Ok5vcm1hbCB8IENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6RmFsc2VUZXN0LCBfX1ZBX0FSR1NfXyApCiAKLSNkZWZpbmUgQ0FUQ0hfUkVRVUlSRV9USFJPV1MoIC4uLiApIElOVEVSTkFMX0NBVENIX1RIUk9XUyggIkNBVENIX1JFUVVJUkVfVEhST1dTIiwgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpOb3JtYWwsICIiLCBfX1ZBX0FSR1NfXyApCisjZGVmaW5lIENBVENIX1JFUVVJUkVfVEhST1dTKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9USFJPV1MoICJDQVRDSF9SRVFVSVJFX1RIUk9XUyIsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Tm9ybWFsLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIENBVENIX1JFUVVJUkVfVEhST1dTX0FTKCBleHByLCBleGNlcHRpb25UeXBlICkgSU5URVJOQUxfQ0FUQ0hfVEhST1dTX0FTKCAiQ0FUQ0hfUkVRVUlSRV9USFJPV1NfQVMiLCBleGNlcHRpb25UeXBlLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246Ok5vcm1hbCwgZXhwciApCiAjZGVmaW5lIENBVENIX1JFUVVJUkVfVEhST1dTX1dJVEgoIGV4cHIsIG1hdGNoZXIgKSBJTlRFUk5BTF9DQVRDSF9USFJPV1NfU1RSX01BVENIRVMoICJDQVRDSF9SRVFVSVJFX1RIUk9XU19XSVRIIiwgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpOb3JtYWwsIG1hdGNoZXIsIGV4cHIgKQogI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX01BVENIRVJTKQpAQCAtMTEyLDcgKzExNyw3IEBACiAjZGVmaW5lIENBVENIX0NIRUNLRURfRUxTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfRUxTRSggIkNBVENIX0NIRUNLRURfRUxTRSIsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Q29udGludWVPbkZhaWx1cmUsIF9fVkFfQVJHU19fICkKICNkZWZpbmUgQ0FUQ0hfQ0hFQ0tfTk9GQUlMKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URVNUKCAiQ0FUQ0hfQ0hFQ0tfTk9GQUlMIiwgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpDb250aW51ZU9uRmFpbHVyZSB8IENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6U3VwcHJlc3NGYWlsLCBfX1ZBX0FSR1NfXyApCiAKLSNkZWZpbmUgQ0FUQ0hfQ0hFQ0tfVEhST1dTKCAuLi4gKSAgSU5URVJOQUxfQ0FUQ0hfVEhST1dTKCAiQ0FUQ0hfQ0hFQ0tfVEhST1dTIiwgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpDb250aW51ZU9uRmFpbHVyZSwgIiIsIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgQ0FUQ0hfQ0hFQ0tfVEhST1dTKCAuLi4gKSAgSU5URVJOQUxfQ0FUQ0hfVEhST1dTKCAiQ0FUQ0hfQ0hFQ0tfVEhST1dTIiwgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpDb250aW51ZU9uRmFpbHVyZSwgX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9DSEVDS19USFJPV1NfQVMoIGV4cHIsIGV4Y2VwdGlvblR5cGUgKSBJTlRFUk5BTF9DQVRDSF9USFJPV1NfQVMoICJDQVRDSF9DSEVDS19USFJPV1NfQVMiLCBleGNlcHRpb25UeXBlLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246OkNvbnRpbnVlT25GYWlsdXJlLCBleHByICkKICNkZWZpbmUgQ0FUQ0hfQ0hFQ0tfVEhST1dTX1dJVEgoIGV4cHIsIG1hdGNoZXIgKSBJTlRFUk5BTF9DQVRDSF9USFJPV1NfU1RSX01BVENIRVMoICJDQVRDSF9DSEVDS19USFJPV1NfV0lUSCIsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Q29udGludWVPbkZhaWx1cmUsIG1hdGNoZXIsIGV4cHIgKQogI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX01BVENIRVJTKQpAQCAtMTI4LDI3ICsxMzMsNTEgQEAKIAogI2RlZmluZSBDQVRDSF9JTkZPKCBtc2cgKSBJTlRFUk5BTF9DQVRDSF9JTkZPKCAiQ0FUQ0hfSU5GTyIsIG1zZyApCiAjZGVmaW5lIENBVENIX1dBUk4oIG1zZyApIElOVEVSTkFMX0NBVENIX01TRyggIkNBVENIX1dBUk4iLCBDYXRjaDo6UmVzdWx0V2FzOjpXYXJuaW5nLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246OkNvbnRpbnVlT25GYWlsdXJlLCBtc2cgKQotI2RlZmluZSBDQVRDSF9DQVBUVVJFKCBtc2cgKSBJTlRFUk5BTF9DQVRDSF9JTkZPKCAiQ0FUQ0hfQ0FQVFVSRSIsICNtc2cgIiA6PSAiIDw8IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KG1zZykgKQorI2RlZmluZSBDQVRDSF9DQVBUVVJFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9DQVBUVVJFKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRShjYXB0dXJlciksICJDQVRDSF9DQVBUVVJFIixfX1ZBX0FSR1NfXyApCiAKICNkZWZpbmUgQ0FUQ0hfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRSggX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9NRVRIT0RfQVNfVEVTVF9DQVNFKCBtZXRob2QsIC4uLiApIElOVEVSTkFMX0NBVENIX01FVEhPRF9BU19URVNUX0NBU0UoIG1ldGhvZCwgX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9SRUdJU1RFUl9URVNUX0NBU0UoIEZ1bmN0aW9uLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9SRUdJU1RFUl9URVNUQ0FTRSggRnVuY3Rpb24sIF9fVkFfQVJHU19fICkKICNkZWZpbmUgQ0FUQ0hfU0VDVElPTiggLi4uICkgSU5URVJOQUxfQ0FUQ0hfU0VDVElPTiggX19WQV9BUkdTX18gKQorI2RlZmluZSBDQVRDSF9EWU5BTUlDX1NFQ1RJT04oIC4uLiApIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9GQUlMKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9NU0coICJDQVRDSF9GQUlMIiwgQ2F0Y2g6OlJlc3VsdFdhczo6RXhwbGljaXRGYWlsdXJlLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246Ok5vcm1hbCwgX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9GQUlMX0NIRUNLKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9NU0coICJDQVRDSF9GQUlMX0NIRUNLIiwgQ2F0Y2g6OlJlc3VsdFdhczo6RXhwbGljaXRGYWlsdXJlLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246OkNvbnRpbnVlT25GYWlsdXJlLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIENBVENIX1NVQ0NFRUQoIC4uLiApIElOVEVSTkFMX0NBVENIX01TRyggIkNBVENIX1NVQ0NFRUQiLCBDYXRjaDo6UmVzdWx0V2FzOjpPaywgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpDb250aW51ZU9uRmFpbHVyZSwgX19WQV9BUkdTX18gKQogCiAjZGVmaW5lIENBVENIX0FOT05fVEVTVF9DQVNFKCkgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0UoKQogCisjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgorI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQorI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQorI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCisjZWxzZQorI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKSApCisjZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQorI2VuZGlmCisKKworI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19SVU5USU1FX1NUQVRJQ19SRVFVSVJFKQorI2RlZmluZSBDQVRDSF9TVEFUSUNfUkVRVUlSRSggLi4uICkgICAgICAgc3RhdGljX2Fzc2VydCggICBfX1ZBX0FSR1NfXyAsICAgICAgI19fVkFfQVJHU19fICk7ICAgICBDQVRDSF9TVUNDRUVEKCAjX19WQV9BUkdTX18gKQorI2RlZmluZSBDQVRDSF9TVEFUSUNfUkVRVUlSRV9GQUxTRSggLi4uICkgc3RhdGljX2Fzc2VydCggIShfX1ZBX0FSR1NfXyksICIhKCIgI19fVkFfQVJHU19fICIpIiApOyBDQVRDSF9TVUNDRUVEKCAjX19WQV9BUkdTX18gKQorI2Vsc2UKKyNkZWZpbmUgQ0FUQ0hfU1RBVElDX1JFUVVJUkUoIC4uLiApICAgICAgIENBVENIX1JFUVVJUkUoIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgQ0FUQ0hfU1RBVElDX1JFUVVJUkVfRkFMU0UoIC4uLiApIENBVENIX1JFUVVJUkVfRkFMU0UoIF9fVkFfQVJHU19fICkKKyNlbmRpZgorCisKIC8vICJCREQtc3R5bGUiIGNvbnZlbmllbmNlIHdyYXBwZXJzCiAjZGVmaW5lIENBVENIX1NDRU5BUklPKCAuLi4gKSBDQVRDSF9URVNUX0NBU0UoICJTY2VuYXJpbzogIiBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIENBVENIX1NDRU5BUklPX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsICJTY2VuYXJpbzogIiBfX1ZBX0FSR1NfXyApCi0jZGVmaW5lIENBVENIX0dJVkVOKCBkZXNjICkgICAgQ0FUQ0hfU0VDVElPTiggc3RkOjpzdHJpbmcoICJHaXZlbjogIikgKyBkZXNjICkKLSNkZWZpbmUgQ0FUQ0hfV0hFTiggZGVzYyApICAgICBDQVRDSF9TRUNUSU9OKCBzdGQ6OnN0cmluZyggIiBXaGVuOiAiKSArIGRlc2MgKQotI2RlZmluZSBDQVRDSF9BTkRfV0hFTiggZGVzYyApIENBVENIX1NFQ1RJT04oIHN0ZDo6c3RyaW5nKCAiICBBbmQ6ICIpICsgZGVzYyApCi0jZGVmaW5lIENBVENIX1RIRU4oIGRlc2MgKSAgICAgQ0FUQ0hfU0VDVElPTiggc3RkOjpzdHJpbmcoICIgVGhlbjogIikgKyBkZXNjICkKLSNkZWZpbmUgQ0FUQ0hfQU5EX1RIRU4oIGRlc2MgKSBDQVRDSF9TRUNUSU9OKCBzdGQ6OnN0cmluZyggIiAgQW5kOiAiKSArIGRlc2MgKQorI2RlZmluZSBDQVRDSF9HSVZFTiggZGVzYyApICAgICBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICIgICAgR2l2ZW46ICIgPDwgZGVzYyApCisjZGVmaW5lIENBVENIX0FORF9HSVZFTiggZGVzYyApIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggIkFuZCBnaXZlbjogIiA8PCBkZXNjICkKKyNkZWZpbmUgQ0FUQ0hfV0hFTiggZGVzYyApICAgICAgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAiICAgICBXaGVuOiAiIDw8IGRlc2MgKQorI2RlZmluZSBDQVRDSF9BTkRfV0hFTiggZGVzYyApICBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICIgQW5kIHdoZW46ICIgPDwgZGVzYyApCisjZGVmaW5lIENBVENIX1RIRU4oIGRlc2MgKSAgICAgIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggIiAgICAgVGhlbjogIiA8PCBkZXNjICkKKyNkZWZpbmUgQ0FUQ0hfQU5EX1RIRU4oIGRlc2MgKSAgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAiICAgICAgQW5kOiAiIDw8IGRlc2MgKQogCiAvLyBJZiBDQVRDSF9DT05GSUdfUFJFRklYX0FMTCBpcyBub3QgZGVmaW5lZCB0aGVuIHRoZSBDQVRDSF8gcHJlZml4IGlzIG5vdCByZXF1aXJlZAogI2Vsc2UKQEAgLTE4NiwxOSArMjE1LDQyIEBACiAjZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0RJU0FCTEVfTUFUQ0hFUlMKIAogI2RlZmluZSBJTkZPKCBtc2cgKSBJTlRFUk5BTF9DQVRDSF9JTkZPKCAiSU5GTyIsIG1zZyApCisjZGVmaW5lIFVOU0NPUEVEX0lORk8oIG1zZyApIElOVEVSTkFMX0NBVENIX1VOU0NPUEVEX0lORk8oICJVTlNDT1BFRF9JTkZPIiwgbXNnICkKICNkZWZpbmUgV0FSTiggbXNnICkgSU5URVJOQUxfQ0FUQ0hfTVNHKCAiV0FSTiIsIENhdGNoOjpSZXN1bHRXYXM6Oldhcm5pbmcsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Q29udGludWVPbkZhaWx1cmUsIG1zZyApCi0jZGVmaW5lIENBUFRVUkUoIG1zZyApIElOVEVSTkFMX0NBVENIX0lORk8oICJDQVBUVVJFIiwgI21zZyAiIDo9ICIgPDwgOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkobXNnKSApCisjZGVmaW5lIENBUFRVUkUoIC4uLiApIElOVEVSTkFMX0NBVENIX0NBUFRVUkUoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKGNhcHR1cmVyKSwgIkNBUFRVUkUiLF9fVkFfQVJHU19fICkKIAogI2RlZmluZSBURVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFU1RDQVNFKCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIFRFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIE1FVEhPRF9BU19URVNUX0NBU0UoIG1ldGhvZCwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfTUVUSE9EX0FTX1RFU1RfQ0FTRSggbWV0aG9kLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIFJFR0lTVEVSX1RFU1RfQ0FTRSggRnVuY3Rpb24sIC4uLiApIElOVEVSTkFMX0NBVENIX1JFR0lTVEVSX1RFU1RDQVNFKCBGdW5jdGlvbiwgX19WQV9BUkdTX18gKQogI2RlZmluZSBTRUNUSU9OKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9TRUNUSU9OKCBfX1ZBX0FSR1NfXyApCisjZGVmaW5lIERZTkFNSUNfU0VDVElPTiggLi4uICkgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIEZBSUwoIC4uLiApIElOVEVSTkFMX0NBVENIX01TRyggIkZBSUwiLCBDYXRjaDo6UmVzdWx0V2FzOjpFeHBsaWNpdEZhaWx1cmUsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Tm9ybWFsLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIEZBSUxfQ0hFQ0soIC4uLiApIElOVEVSTkFMX0NBVENIX01TRyggIkZBSUxfQ0hFQ0siLCBDYXRjaDo6UmVzdWx0V2FzOjpFeHBsaWNpdEZhaWx1cmUsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Q29udGludWVPbkZhaWx1cmUsIF9fVkFfQVJHU19fICkKICNkZWZpbmUgU1VDQ0VFRCggLi4uICkgSU5URVJOQUxfQ0FUQ0hfTVNHKCAiU1VDQ0VFRCIsIENhdGNoOjpSZXN1bHRXYXM6Ok9rLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246OkNvbnRpbnVlT25GYWlsdXJlLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIEFOT05fVEVTVF9DQVNFKCkgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0UoKQogCisjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgorI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQorI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQorI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCisjZWxzZQorI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApICkKKyNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKSApCisjZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApICkKKyNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQorI2VuZGlmCisKKworI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19SVU5USU1FX1NUQVRJQ19SRVFVSVJFKQorI2RlZmluZSBTVEFUSUNfUkVRVUlSRSggLi4uICkgICAgICAgc3RhdGljX2Fzc2VydCggICBfX1ZBX0FSR1NfXywgICNfX1ZBX0FSR1NfXyApOyBTVUNDRUVEKCAjX19WQV9BUkdTX18gKQorI2RlZmluZSBTVEFUSUNfUkVRVUlSRV9GQUxTRSggLi4uICkgc3RhdGljX2Fzc2VydCggIShfX1ZBX0FSR1NfXyksICIhKCIgI19fVkFfQVJHU19fICIpIiApOyBTVUNDRUVEKCAiISgiICNfX1ZBX0FSR1NfXyAiKSIgKQorI2Vsc2UKKyNkZWZpbmUgU1RBVElDX1JFUVVJUkUoIC4uLiApICAgICAgIFJFUVVJUkUoIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgU1RBVElDX1JFUVVJUkVfRkFMU0UoIC4uLiApIFJFUVVJUkVfRkFMU0UoIF9fVkFfQVJHU19fICkKKyNlbmRpZgorCiAjZW5kaWYKIAogI2RlZmluZSBDQVRDSF9UUkFOU0xBVEVfRVhDRVBUSU9OKCBzaWduYXR1cmUgKSBJTlRFUk5BTF9DQVRDSF9UUkFOU0xBVEVfRVhDRVBUSU9OKCBzaWduYXR1cmUgKQpAQCAtMjA3LDE1ICsyNTksMTcgQEAKICNkZWZpbmUgU0NFTkFSSU8oIC4uLiApIFRFU1RfQ0FTRSggIlNjZW5hcmlvOiAiIF9fVkFfQVJHU19fICkKICNkZWZpbmUgU0NFTkFSSU9fTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgIlNjZW5hcmlvOiAiIF9fVkFfQVJHU19fICkKIAotI2RlZmluZSBHSVZFTiggZGVzYyApICAgIFNFQ1RJT04oIHN0ZDo6c3RyaW5nKCIgICBHaXZlbjogIikgKyBkZXNjICkKLSNkZWZpbmUgV0hFTiggZGVzYyApICAgICBTRUNUSU9OKCBzdGQ6OnN0cmluZygiICAgIFdoZW46ICIpICsgZGVzYyApCi0jZGVmaW5lIEFORF9XSEVOKCBkZXNjICkgU0VDVElPTiggc3RkOjpzdHJpbmcoIkFuZCB3aGVuOiAiKSArIGRlc2MgKQotI2RlZmluZSBUSEVOKCBkZXNjICkgICAgIFNFQ1RJT04oIHN0ZDo6c3RyaW5nKCIgICAgVGhlbjogIikgKyBkZXNjICkKLSNkZWZpbmUgQU5EX1RIRU4oIGRlc2MgKSBTRUNUSU9OKCBzdGQ6OnN0cmluZygiICAgICBBbmQ6ICIpICsgZGVzYyApCisjZGVmaW5lIEdJVkVOKCBkZXNjICkgICAgIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggIiAgICBHaXZlbjogIiA8PCBkZXNjICkKKyNkZWZpbmUgQU5EX0dJVkVOKCBkZXNjICkgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAiQW5kIGdpdmVuOiAiIDw8IGRlc2MgKQorI2RlZmluZSBXSEVOKCBkZXNjICkgICAgICBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICIgICAgIFdoZW46ICIgPDwgZGVzYyApCisjZGVmaW5lIEFORF9XSEVOKCBkZXNjICkgIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggIiBBbmQgd2hlbjogIiA8PCBkZXNjICkKKyNkZWZpbmUgVEhFTiggZGVzYyApICAgICAgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAiICAgICBUaGVuOiAiIDw8IGRlc2MgKQorI2RlZmluZSBBTkRfVEhFTiggZGVzYyApICBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICIgICAgICBBbmQ6ICIgPDwgZGVzYyApCiAKIHVzaW5nIENhdGNoOjpEZXRhaWw6OkFwcHJveDsKIAotI2Vsc2UKKyNlbHNlIC8vIENBVENIX0NPTkZJR19ESVNBQkxFCisKIC8vLy8vLwogLy8gSWYgdGhpcyBjb25maWcgaWRlbnRpZmllciBpcyBkZWZpbmVkIHRoZW4gYWxsIENBVENIIG1hY3JvcyBhcmUgcHJlZml4ZWQgd2l0aCBDQVRDSF8KICNpZmRlZiBDQVRDSF9DT05GSUdfUFJFRklYX0FMTApAQCAtMjYwLDIxICszMTQsMzggQEAKICNkZWZpbmUgQ0FUQ0hfTUVUSE9EX0FTX1RFU1RfQ0FTRSggbWV0aG9kLCAuLi4gKQogI2RlZmluZSBDQVRDSF9SRUdJU1RFUl9URVNUX0NBU0UoIEZ1bmN0aW9uLCAuLi4gKSAodm9pZCkoMCkKICNkZWZpbmUgQ0FUQ0hfU0VDVElPTiggLi4uICkKKyNkZWZpbmUgQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAuLi4gKQogI2RlZmluZSBDQVRDSF9GQUlMKCAuLi4gKSAodm9pZCkoMCkKICNkZWZpbmUgQ0FUQ0hfRkFJTF9DSEVDSyggLi4uICkgKHZvaWQpKDApCiAjZGVmaW5lIENBVENIX1NVQ0NFRUQoIC4uLiApICh2b2lkKSgwKQogCiAjZGVmaW5lIENBVENIX0FOT05fVEVTVF9DQVNFKCkgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0VfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICkpCiAKKyNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCisjZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSApCisjZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9OT19SRUdJU1RSQVRJT04oSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIGNsYXNzTmFtZSApCisjZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCAuLi4gKSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQorI2Vsc2UKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9OT19SRUdJU1RSQVRJT04oSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICkgKSApCisjZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgY2xhc3NOYW1lICkgKQorI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggLi4uICkgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApCisjZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKKyNlbmRpZgorCiAvLyAiQkRELXN0eWxlIiBjb252ZW5pZW5jZSB3cmFwcGVycwogI2RlZmluZSBDQVRDSF9TQ0VOQVJJTyggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0VfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICkpCiAjZGVmaW5lIENBVENIX1NDRU5BUklPX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICksIGNsYXNzTmFtZSApCiAjZGVmaW5lIENBVENIX0dJVkVOKCBkZXNjICkKKyNkZWZpbmUgQ0FUQ0hfQU5EX0dJVkVOKCBkZXNjICkKICNkZWZpbmUgQ0FUQ0hfV0hFTiggZGVzYyApCiAjZGVmaW5lIENBVENIX0FORF9XSEVOKCBkZXNjICkKICNkZWZpbmUgQ0FUQ0hfVEhFTiggZGVzYyApCiAjZGVmaW5lIENBVENIX0FORF9USEVOKCBkZXNjICkKIAorI2RlZmluZSBDQVRDSF9TVEFUSUNfUkVRVUlSRSggLi4uICkgICAgICAgKHZvaWQpKDApCisjZGVmaW5lIENBVENIX1NUQVRJQ19SRVFVSVJFX0ZBTFNFKCAuLi4gKSAodm9pZCkoMCkKKwogLy8gSWYgQ0FUQ0hfQ09ORklHX1BSRUZJWF9BTEwgaXMgbm90IGRlZmluZWQgdGhlbiB0aGUgQ0FUQ0hfIHByZWZpeCBpcyBub3QgcmVxdWlyZWQKICNlbHNlCiAKQEAgLTMxOSwxMSArMzkwLDI3IEBACiAjZGVmaW5lIE1FVEhPRF9BU19URVNUX0NBU0UoIG1ldGhvZCwgLi4uICkKICNkZWZpbmUgUkVHSVNURVJfVEVTVF9DQVNFKCBGdW5jdGlvbiwgLi4uICkgKHZvaWQpKDApCiAjZGVmaW5lIFNFQ1RJT04oIC4uLiApCisjZGVmaW5lIERZTkFNSUNfU0VDVElPTiggLi4uICkKICNkZWZpbmUgRkFJTCggLi4uICkgKHZvaWQpKDApCiAjZGVmaW5lIEZBSUxfQ0hFQ0soIC4uLiApICh2b2lkKSgwKQogI2RlZmluZSBTVUNDRUVEKCAuLi4gKSAodm9pZCkoMCkKICNkZWZpbmUgQU5PTl9URVNUX0NBU0UoKSBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRV9OT19SRUdJU1RSQVRJT04oSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX1NfVF9fX18gKSkKIAorI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKKyNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApICkKKyNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgY2xhc3NOYW1lICkKKyNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIC4uLiApIFRFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQorI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCisjZWxzZQorI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSApICkKKyNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBjbGFzc05hbWUgKSApCisjZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCAuLi4gKSBURU1QTEFURV9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQorI2VuZGlmCisKKyNkZWZpbmUgU1RBVElDX1JFUVVJUkUoIC4uLiApICAgICAgICh2b2lkKSgwKQorI2RlZmluZSBTVEFUSUNfUkVRVUlSRV9GQUxTRSggLi4uICkgKHZvaWQpKDApCisKICNlbmRpZgogCiAjZGVmaW5lIENBVENIX1RSQU5TTEFURV9FWENFUFRJT04oIHNpZ25hdHVyZSApIElOVEVSTkFMX0NBVENIX1RSQU5TTEFURV9FWENFUFRJT05fTk9fUkVHKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggY2F0Y2hfaW50ZXJuYWxfRXhjZXB0aW9uVHJhbnNsYXRvciApLCBzaWduYXR1cmUgKQpAQCAtMzMzLDYgKzQyMCw3IEBACiAjZGVmaW5lIFNDRU5BUklPX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICksIGNsYXNzTmFtZSApCiAKICNkZWZpbmUgR0lWRU4oIGRlc2MgKQorI2RlZmluZSBBTkRfR0lWRU4oIGRlc2MgKQogI2RlZmluZSBXSEVOKCBkZXNjICkKICNkZWZpbmUgQU5EX1dIRU4oIGRlc2MgKQogI2RlZmluZSBUSEVOKCBkZXNjICkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvY2F0Y2hfd2l0aF9tYWluLmNwcCBiL2luY2x1ZGUvY2F0Y2hfd2l0aF9tYWluLmNwcApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwLi4yNzNkYTZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9jYXRjaF93aXRoX21haW4uY3BwCkBAIC0wLDAgKzEgQEAKK2NhdGNoX3dpdGhfbWFpbi5ocHAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2V4dGVybmFsL2NsYXJhLmhwcCBiL2luY2x1ZGUvZXh0ZXJuYWwvY2xhcmEuaHBwCmluZGV4IDMxZGVhMjQuLjIwYzZkYTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZXh0ZXJuYWwvY2xhcmEuaHBwCisrKyBiL2luY2x1ZGUvZXh0ZXJuYWwvY2xhcmEuaHBwCkBAIC01LDcgKzUsNyBAQAogLy8KIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcGhpbHNxdWFyZWQvQ2xhcmEgZm9yIG1vcmUgZGV0YWlscwogCi0vLyBDbGFyYSB2MS4xLjEKKy8vIENsYXJhIHYxLjEuNQogCiAjaWZuZGVmIENBVENIX0NMQVJBX0hQUF9JTkNMVURFRAogI2RlZmluZSBDQVRDSF9DTEFSQV9IUFBfSU5DTFVERUQKQEAgLTE4LDE0ICsxOCwyNCBAQAogI2RlZmluZSBDQVRDSF9DTEFSQV9URVhURkxPV19DT05GSUdfQ09OU09MRV9XSURUSCBDQVRDSF9DTEFSQV9DT05GSUdfQ09OU09MRV9XSURUSAogI2VuZGlmCiAKKyNpZm5kZWYgQ0xBUkFfQ09ORklHX09QVElPTkFMX1RZUEUKKyNpZmRlZiBfX2hhc19pbmNsdWRlCisjaWYgX19oYXNfaW5jbHVkZSg8b3B0aW9uYWw+KSAmJiBfX2NwbHVzcGx1cyA+PSAyMDE3MDNMCisjaW5jbHVkZSA8b3B0aW9uYWw+CisjZGVmaW5lIENMQVJBX0NPTkZJR19PUFRJT05BTF9UWVBFIHN0ZDo6b3B0aW9uYWwKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworCiAvLyAtLS0tLS0tLS0tLSAjaW5jbHVkZWQgZnJvbSBjbGFyYV90ZXh0Zmxvdy5ocHAgLS0tLS0tLS0tLS0KIAogLy8gVGV4dEZsb3dDcHAKIC8vCiAvLyBBIHNpbmdsZS1oZWFkZXIgbGlicmFyeSBmb3Igd3JhcHBpbmcgYW5kIGxheWluZyBvdXQgYmFzaWMgdGV4dCwgYnkgUGhpbCBOYXNoCiAvLwotLy8gVGhpcyB3b3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgMi1DbGF1c2UgbGljZW5zZS4KLS8vIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSwgb3IgdGhlIG9uZSBhdCBodHRwczovL29wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL0JTRC0yLUNsYXVzZQorLy8gRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworLy8gZmlsZSBMSUNFTlNFLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKIC8vCiAvLyBUaGlzIHByb2plY3QgaXMgaG9zdGVkIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsc3F1YXJlZC90ZXh0Zmxvd2NwcAogCkBAIC00MSwzMjQgKzUxLDMyNyBAQAogI2RlZmluZSBDQVRDSF9DTEFSQV9URVhURkxPV19DT05GSUdfQ09OU09MRV9XSURUSCA4MAogI2VuZGlmCiAKLSNpZiBDQVRDSF9DT05GSUdfVVNFX0VYQ0VQVElPTlMgPT0gMAotLy8gc3RkOjpjZXJyICsgc3RkOjp0ZXJtaW5hdGUgaW5zdGVhZCBvZiAndGhyb3cnCi0jaW5jbHVkZSA8aW9zdHJlYW0+Ci0jaW5jbHVkZSA8ZXhjZXB0aW9uPgotI2VuZGlmCiAKK25hbWVzcGFjZSBDYXRjaCB7CituYW1lc3BhY2UgY2xhcmEgeworbmFtZXNwYWNlIFRleHRGbG93IHsKIAotbmFtZXNwYWNlIENhdGNoIHsgbmFtZXNwYWNlIGNsYXJhIHsgbmFtZXNwYWNlIFRleHRGbG93IHsKK2lubGluZSBhdXRvIGlzV2hpdGVzcGFjZShjaGFyIGMpIC0+IGJvb2wgeworCXN0YXRpYyBzdGQ6OnN0cmluZyBjaGFycyA9ICIgXHRcblxyIjsKKwlyZXR1cm4gY2hhcnMuZmluZChjKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKK30KK2lubGluZSBhdXRvIGlzQnJlYWthYmxlQmVmb3JlKGNoYXIgYykgLT4gYm9vbCB7CisJc3RhdGljIHN0ZDo6c3RyaW5nIGNoYXJzID0gIlsoezx8IjsKKwlyZXR1cm4gY2hhcnMuZmluZChjKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKK30KK2lubGluZSBhdXRvIGlzQnJlYWthYmxlQWZ0ZXIoY2hhciBjKSAtPiBib29sIHsKKwlzdGF0aWMgc3RkOjpzdHJpbmcgY2hhcnMgPSAiXSl9Pi4sOjsqKy09Ji9cXCI7CisJcmV0dXJuIGNoYXJzLmZpbmQoYykgIT0gc3RkOjpzdHJpbmc6Om5wb3M7Cit9CiAKLSAgICBpbmxpbmUgYXV0byBpc1doaXRlc3BhY2UoIGNoYXIgYyApIC0+IGJvb2wgewotICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY2hhcnMgPSAiIFx0XG5cciI7Ci0gICAgICAgIHJldHVybiBjaGFycy5maW5kKCBjICkgIT0gc3RkOjpzdHJpbmc6Om5wb3M7Ci0gICAgfQotICAgIGlubGluZSBhdXRvIGlzQnJlYWthYmxlQmVmb3JlKCBjaGFyIGMgKSAtPiBib29sIHsKLSAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNoYXJzID0gIlsoezx8IjsKLSAgICAgICAgcmV0dXJuIGNoYXJzLmZpbmQoIGMgKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKLSAgICB9Ci0gICAgaW5saW5lIGF1dG8gaXNCcmVha2FibGVBZnRlciggY2hhciBjICkgLT4gYm9vbCB7Ci0gICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjaGFycyA9ICJdKX0+Liw6OyorLT0mL1xcIjsKLSAgICAgICAgcmV0dXJuIGNoYXJzLmZpbmQoIGMgKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKLSAgICB9CitjbGFzcyBDb2x1bW5zOwogCi0gICAgY2xhc3MgQ29sdW1uczsKK2NsYXNzIENvbHVtbiB7CisJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1fc3RyaW5nczsKKwlzaXplX3QgbV93aWR0aCA9IENBVENIX0NMQVJBX1RFWFRGTE9XX0NPTkZJR19DT05TT0xFX1dJRFRIOworCXNpemVfdCBtX2luZGVudCA9IDA7CisJc2l6ZV90IG1faW5pdGlhbEluZGVudCA9IHN0ZDo6c3RyaW5nOjpucG9zOwogCi0gICAgY2xhc3MgQ29sdW1uIHsKLSAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1fc3RyaW5nczsKLSAgICAgICAgc2l6ZV90IG1fd2lkdGggPSBDQVRDSF9DTEFSQV9URVhURkxPV19DT05GSUdfQ09OU09MRV9XSURUSDsKLSAgICAgICAgc2l6ZV90IG1faW5kZW50ID0gMDsKLSAgICAgICAgc2l6ZV90IG1faW5pdGlhbEluZGVudCA9IHN0ZDo6c3RyaW5nOjpucG9zOworcHVibGljOgorCWNsYXNzIGl0ZXJhdG9yIHsKKwkJZnJpZW5kIENvbHVtbjsKIAotICAgIHB1YmxpYzoKLSAgICAgICAgY2xhc3MgaXRlcmF0b3IgewotICAgICAgICAgICAgZnJpZW5kIENvbHVtbjsKKwkJQ29sdW1uIGNvbnN0JiBtX2NvbHVtbjsKKwkJc2l6ZV90IG1fc3RyaW5nSW5kZXggPSAwOworCQlzaXplX3QgbV9wb3MgPSAwOwogCi0gICAgICAgICAgICBDb2x1bW4gY29uc3QmIG1fY29sdW1uOwotICAgICAgICAgICAgc2l6ZV90IG1fc3RyaW5nSW5kZXggPSAwOwotICAgICAgICAgICAgc2l6ZV90IG1fcG9zID0gMDsKKwkJc2l6ZV90IG1fbGVuID0gMDsKKwkJc2l6ZV90IG1fZW5kID0gMDsKKwkJYm9vbCBtX3N1ZmZpeCA9IGZhbHNlOwogCi0gICAgICAgICAgICBzaXplX3QgbV9sZW4gPSAwOwotICAgICAgICAgICAgc2l6ZV90IG1fZW5kID0gMDsKLSAgICAgICAgICAgIGJvb2wgbV9zdWZmaXggPSBmYWxzZTsKKwkJaXRlcmF0b3IoQ29sdW1uIGNvbnN0JiBjb2x1bW4sIHNpemVfdCBzdHJpbmdJbmRleCkKKwkJCTogbV9jb2x1bW4oY29sdW1uKSwKKwkJCW1fc3RyaW5nSW5kZXgoc3RyaW5nSW5kZXgpIHt9CiAKLSAgICAgICAgICAgIGl0ZXJhdG9yKCBDb2x1bW4gY29uc3QmIGNvbHVtbiwgc2l6ZV90IHN0cmluZ0luZGV4ICkKLSAgICAgICAgICAgIDogICBtX2NvbHVtbiggY29sdW1uICksCi0gICAgICAgICAgICAgICAgbV9zdHJpbmdJbmRleCggc3RyaW5nSW5kZXggKQotICAgICAgICAgICAge30KKwkJYXV0byBsaW5lKCkgY29uc3QgLT4gc3RkOjpzdHJpbmcgY29uc3QmIHsgcmV0dXJuIG1fY29sdW1uLm1fc3RyaW5nc1ttX3N0cmluZ0luZGV4XTsgfQogCi0gICAgICAgICAgICBhdXRvIGxpbmUoKSBjb25zdCAtPiBzdGQ6OnN0cmluZyBjb25zdCYgeyByZXR1cm4gbV9jb2x1bW4ubV9zdHJpbmdzW21fc3RyaW5nSW5kZXhdOyB9CisJCWF1dG8gaXNCb3VuZGFyeShzaXplX3QgYXQpIGNvbnN0IC0+IGJvb2wgeworCQkJYXNzZXJ0KGF0ID4gMCk7CisJCQlhc3NlcnQoYXQgPD0gbGluZSgpLnNpemUoKSk7CiAKLSAgICAgICAgICAgIGF1dG8gaXNCb3VuZGFyeSggc2l6ZV90IGF0ICkgY29uc3QgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCBhdCA+IDAgKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoIGF0IDw9IGxpbmUoKS5zaXplKCkgKTsKKwkJCXJldHVybiBhdCA9PSBsaW5lKCkuc2l6ZSgpIHx8CisJCQkJKGlzV2hpdGVzcGFjZShsaW5lKClbYXRdKSAmJiAhaXNXaGl0ZXNwYWNlKGxpbmUoKVthdCAtIDFdKSkgfHwKKwkJCQlpc0JyZWFrYWJsZUJlZm9yZShsaW5lKClbYXRdKSB8fAorCQkJCWlzQnJlYWthYmxlQWZ0ZXIobGluZSgpW2F0IC0gMV0pOworCQl9CiAKLSAgICAgICAgICAgICAgICByZXR1cm4gYXQgPT0gbGluZSgpLnNpemUoKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAoIGlzV2hpdGVzcGFjZSggbGluZSgpW2F0XSApICYmICFpc1doaXRlc3BhY2UoIGxpbmUoKVthdC0xXSApICkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgaXNCcmVha2FibGVCZWZvcmUoIGxpbmUoKVthdF0gKSB8fAotICAgICAgICAgICAgICAgICAgICAgICBpc0JyZWFrYWJsZUFmdGVyKCBsaW5lKClbYXQtMV0gKTsKLSAgICAgICAgICAgIH0KKwkJdm9pZCBjYWxjTGVuZ3RoKCkgeworCQkJYXNzZXJ0KG1fc3RyaW5nSW5kZXggPCBtX2NvbHVtbi5tX3N0cmluZ3Muc2l6ZSgpKTsKIAotICAgICAgICAgICAgdm9pZCBjYWxjTGVuZ3RoKCkgewotICAgICAgICAgICAgICAgIGFzc2VydCggbV9zdHJpbmdJbmRleCA8IG1fY29sdW1uLm1fc3RyaW5ncy5zaXplKCkgKTsKKwkJCW1fc3VmZml4ID0gZmFsc2U7CisJCQlhdXRvIHdpZHRoID0gbV9jb2x1bW4ubV93aWR0aCAtIGluZGVudCgpOworCQkJbV9lbmQgPSBtX3BvczsKKwkJCXdoaWxlIChtX2VuZCA8IGxpbmUoKS5zaXplKCkgJiYgbGluZSgpW21fZW5kXSAhPSAnXG4nKQorCQkJCSsrbV9lbmQ7CiAKLSAgICAgICAgICAgICAgICBtX3N1ZmZpeCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGF1dG8gd2lkdGggPSBtX2NvbHVtbi5tX3dpZHRoLWluZGVudCgpOwotICAgICAgICAgICAgICAgIG1fZW5kID0gbV9wb3M7Ci0gICAgICAgICAgICAgICAgd2hpbGUoIG1fZW5kIDwgbGluZSgpLnNpemUoKSAmJiBsaW5lKClbbV9lbmRdICE9ICdcbicgKQotICAgICAgICAgICAgICAgICAgICArK21fZW5kOworCQkJaWYgKG1fZW5kIDwgbV9wb3MgKyB3aWR0aCkgeworCQkJCW1fbGVuID0gbV9lbmQgLSBtX3BvczsKKwkJCX0gZWxzZSB7CisJCQkJc2l6ZV90IGxlbiA9IHdpZHRoOworCQkJCXdoaWxlIChsZW4gPiAwICYmICFpc0JvdW5kYXJ5KG1fcG9zICsgbGVuKSkKKwkJCQkJLS1sZW47CisJCQkJd2hpbGUgKGxlbiA+IDAgJiYgaXNXaGl0ZXNwYWNlKGxpbmUoKVttX3BvcyArIGxlbiAtIDFdKSkKKwkJCQkJLS1sZW47CiAKLSAgICAgICAgICAgICAgICBpZiggbV9lbmQgPCBtX3BvcyArIHdpZHRoICkgewotICAgICAgICAgICAgICAgICAgICBtX2xlbiA9IG1fZW5kIC0gbV9wb3M7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuID0gd2lkdGg7Ci0gICAgICAgICAgICAgICAgICAgIHdoaWxlIChsZW4gPiAwICYmICFpc0JvdW5kYXJ5KG1fcG9zICsgbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIC0tbGVuOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuID4gMCAmJiBpc1doaXRlc3BhY2UoIGxpbmUoKVttX3BvcyArIGxlbiAtIDFdICkpCi0gICAgICAgICAgICAgICAgICAgICAgICAtLWxlbjsKKwkJCQlpZiAobGVuID4gMCkgeworCQkJCQltX2xlbiA9IGxlbjsKKwkJCQl9IGVsc2UgeworCQkJCQltX3N1ZmZpeCA9IHRydWU7CisJCQkJCW1fbGVuID0gd2lkdGggLSAxOworCQkJCX0KKwkJCX0KKwkJfQogCi0gICAgICAgICAgICAgICAgICAgIGlmIChsZW4gPiAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2xlbiA9IGxlbjsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fc3VmZml4ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbGVuID0gd2lkdGggLSAxOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQorCQlhdXRvIGluZGVudCgpIGNvbnN0IC0+IHNpemVfdCB7CisJCQlhdXRvIGluaXRpYWwgPSBtX3BvcyA9PSAwICYmIG1fc3RyaW5nSW5kZXggPT0gMCA/IG1fY29sdW1uLm1faW5pdGlhbEluZGVudCA6IHN0ZDo6c3RyaW5nOjpucG9zOworCQkJcmV0dXJuIGluaXRpYWwgPT0gc3RkOjpzdHJpbmc6Om5wb3MgPyBtX2NvbHVtbi5tX2luZGVudCA6IGluaXRpYWw7CisJCX0KIAotICAgICAgICAgICAgYXV0byBpbmRlbnQoKSBjb25zdCAtPiBzaXplX3QgewotICAgICAgICAgICAgICAgIGF1dG8gaW5pdGlhbCA9IG1fcG9zID09IDAgJiYgbV9zdHJpbmdJbmRleCA9PSAwID8gbV9jb2x1bW4ubV9pbml0aWFsSW5kZW50IDogc3RkOjpzdHJpbmc6Om5wb3M7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluaXRpYWwgPT0gc3RkOjpzdHJpbmc6Om5wb3MgPyBtX2NvbHVtbi5tX2luZGVudCA6IGluaXRpYWw7Ci0gICAgICAgICAgICB9CisJCWF1dG8gYWRkSW5kZW50QW5kU3VmZml4KHN0ZDo6c3RyaW5nIGNvbnN0ICZwbGFpbikgY29uc3QgLT4gc3RkOjpzdHJpbmcgeworCQkJcmV0dXJuIHN0ZDo6c3RyaW5nKGluZGVudCgpLCAnICcpICsgKG1fc3VmZml4ID8gcGxhaW4gKyAiLSIgOiBwbGFpbik7CisJCX0KIAotICAgICAgICAgICAgYXV0byBhZGRJbmRlbnRBbmRTdWZmaXgoc3RkOjpzdHJpbmcgY29uc3QgJnBsYWluKSBjb25zdCAtPiBzdGQ6OnN0cmluZyB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKCBpbmRlbnQoKSwgJyAnICkgKyAobV9zdWZmaXggPyBwbGFpbiArICItIiA6IHBsYWluKTsKLSAgICAgICAgICAgIH0KKwlwdWJsaWM6CisJCXVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHN0ZDo6cHRyZGlmZl90OworCQl1c2luZyB2YWx1ZV90eXBlID0gc3RkOjpzdHJpbmc7CisJCXVzaW5nIHBvaW50ZXIgPSB2YWx1ZV90eXBlICogOworCQl1c2luZyByZWZlcmVuY2UgPSB2YWx1ZV90eXBlICYgOworCQl1c2luZyBpdGVyYXRvcl9jYXRlZ29yeSA9IHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWc7CiAKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgZXhwbGljaXQgaXRlcmF0b3IoIENvbHVtbiBjb25zdCYgY29sdW1uICkgOiBtX2NvbHVtbiggY29sdW1uICkgewotICAgICAgICAgICAgICAgIGFzc2VydCggbV9jb2x1bW4ubV93aWR0aCA+IG1fY29sdW1uLm1faW5kZW50ICk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCBtX2NvbHVtbi5tX2luaXRpYWxJbmRlbnQgPT0gc3RkOjpzdHJpbmc6Om5wb3MgfHwgbV9jb2x1bW4ubV93aWR0aCA+IG1fY29sdW1uLm1faW5pdGlhbEluZGVudCApOwotICAgICAgICAgICAgICAgIGNhbGNMZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBpZiggbV9sZW4gPT0gMCApCi0gICAgICAgICAgICAgICAgICAgIG1fc3RyaW5nSW5kZXgrKzsgLy8gRW1wdHkgc3RyaW5nCi0gICAgICAgICAgICB9CisJCWV4cGxpY2l0IGl0ZXJhdG9yKENvbHVtbiBjb25zdCYgY29sdW1uKSA6IG1fY29sdW1uKGNvbHVtbikgeworCQkJYXNzZXJ0KG1fY29sdW1uLm1fd2lkdGggPiBtX2NvbHVtbi5tX2luZGVudCk7CisJCQlhc3NlcnQobV9jb2x1bW4ubV9pbml0aWFsSW5kZW50ID09IHN0ZDo6c3RyaW5nOjpucG9zIHx8IG1fY29sdW1uLm1fd2lkdGggPiBtX2NvbHVtbi5tX2luaXRpYWxJbmRlbnQpOworCQkJY2FsY0xlbmd0aCgpOworCQkJaWYgKG1fbGVuID09IDApCisJCQkJbV9zdHJpbmdJbmRleCsrOyAvLyBFbXB0eSBzdHJpbmcKKwkJfQogCi0gICAgICAgICAgICBhdXRvIG9wZXJhdG9yICooKSBjb25zdCAtPiBzdGQ6OnN0cmluZyB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCBtX3N0cmluZ0luZGV4IDwgbV9jb2x1bW4ubV9zdHJpbmdzLnNpemUoKSApOwotICAgICAgICAgICAgICAgIGFzc2VydCggbV9wb3MgPD0gbV9lbmQgKTsKLSAgICAgICAgICAgICAgICBpZiggbV9wb3MgKyBtX2NvbHVtbi5tX3dpZHRoIDwgbV9lbmQgKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkSW5kZW50QW5kU3VmZml4KGxpbmUoKS5zdWJzdHIobV9wb3MsIG1fbGVuKSk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkSW5kZW50QW5kU3VmZml4KGxpbmUoKS5zdWJzdHIobV9wb3MsIG1fZW5kIC0gbV9wb3MpKTsKLSAgICAgICAgICAgIH0KKwkJYXV0byBvcGVyYXRvciAqKCkgY29uc3QgLT4gc3RkOjpzdHJpbmcgeworCQkJYXNzZXJ0KG1fc3RyaW5nSW5kZXggPCBtX2NvbHVtbi5tX3N0cmluZ3Muc2l6ZSgpKTsKKwkJCWFzc2VydChtX3BvcyA8PSBtX2VuZCk7CisJCQlyZXR1cm4gYWRkSW5kZW50QW5kU3VmZml4KGxpbmUoKS5zdWJzdHIobV9wb3MsIG1fbGVuKSk7CisJCX0KIAotICAgICAgICAgICAgYXV0byBvcGVyYXRvciArKygpIC0+IGl0ZXJhdG9yJiB7Ci0gICAgICAgICAgICAgICAgbV9wb3MgKz0gbV9sZW47Ci0gICAgICAgICAgICAgICAgaWYoIG1fcG9zIDwgbGluZSgpLnNpemUoKSAmJiBsaW5lKClbbV9wb3NdID09ICdcbicgKQotICAgICAgICAgICAgICAgICAgICBtX3BvcyArPSAxOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUoIG1fcG9zIDwgbGluZSgpLnNpemUoKSAmJiBpc1doaXRlc3BhY2UoIGxpbmUoKVttX3Bvc10gKSApCi0gICAgICAgICAgICAgICAgICAgICAgICArK21fcG9zOworCQlhdXRvIG9wZXJhdG9yICsrKCkgLT4gaXRlcmF0b3ImIHsKKwkJCW1fcG9zICs9IG1fbGVuOworCQkJaWYgKG1fcG9zIDwgbGluZSgpLnNpemUoKSAmJiBsaW5lKClbbV9wb3NdID09ICdcbicpCisJCQkJbV9wb3MgKz0gMTsKKwkJCWVsc2UKKwkJCQl3aGlsZSAobV9wb3MgPCBsaW5lKCkuc2l6ZSgpICYmIGlzV2hpdGVzcGFjZShsaW5lKClbbV9wb3NdKSkKKwkJCQkJKyttX3BvczsKIAotICAgICAgICAgICAgICAgIGlmKCBtX3BvcyA9PSBsaW5lKCkuc2l6ZSgpICkgewotICAgICAgICAgICAgICAgICAgICBtX3BvcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICsrbV9zdHJpbmdJbmRleDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYoIG1fc3RyaW5nSW5kZXggPCBtX2NvbHVtbi5tX3N0cmluZ3Muc2l6ZSgpICkKLSAgICAgICAgICAgICAgICAgICAgY2FsY0xlbmd0aCgpOwotICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gb3BlcmF0b3IgKysoaW50KSAtPiBpdGVyYXRvciB7Ci0gICAgICAgICAgICAgICAgaXRlcmF0b3IgcHJldiggKnRoaXMgKTsKLSAgICAgICAgICAgICAgICBvcGVyYXRvcisrKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7Ci0gICAgICAgICAgICB9CisJCQlpZiAobV9wb3MgPT0gbGluZSgpLnNpemUoKSkgeworCQkJCW1fcG9zID0gMDsKKwkJCQkrK21fc3RyaW5nSW5kZXg7CisJCQl9CisJCQlpZiAobV9zdHJpbmdJbmRleCA8IG1fY29sdW1uLm1fc3RyaW5ncy5zaXplKCkpCisJCQkJY2FsY0xlbmd0aCgpOworCQkJcmV0dXJuICp0aGlzOworCQl9CisJCWF1dG8gb3BlcmF0b3IgKysoaW50KSAtPiBpdGVyYXRvciB7CisJCQlpdGVyYXRvciBwcmV2KCp0aGlzKTsKKwkJCW9wZXJhdG9yKysoKTsKKwkJCXJldHVybiBwcmV2OworCQl9CiAKLSAgICAgICAgICAgIGF1dG8gb3BlcmF0b3IgPT0oIGl0ZXJhdG9yIGNvbnN0JiBvdGhlciApIGNvbnN0IC0+IGJvb2wgewotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgICAgICBtX3BvcyA9PSBvdGhlci5tX3BvcyAmJgotICAgICAgICAgICAgICAgICAgICBtX3N0cmluZ0luZGV4ID09IG90aGVyLm1fc3RyaW5nSW5kZXggJiYKLSAgICAgICAgICAgICAgICAgICAgJm1fY29sdW1uID09ICZvdGhlci5tX2NvbHVtbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gb3BlcmF0b3IgIT0oIGl0ZXJhdG9yIGNvbnN0JiBvdGhlciApIGNvbnN0IC0+IGJvb2wgewotICAgICAgICAgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PSggb3RoZXIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBpdGVyYXRvcjsKKwkJYXV0byBvcGVyYXRvciA9PShpdGVyYXRvciBjb25zdCYgb3RoZXIpIGNvbnN0IC0+IGJvb2wgeworCQkJcmV0dXJuCisJCQkJbV9wb3MgPT0gb3RoZXIubV9wb3MgJiYKKwkJCQltX3N0cmluZ0luZGV4ID09IG90aGVyLm1fc3RyaW5nSW5kZXggJiYKKwkJCQkmbV9jb2x1bW4gPT0gJm90aGVyLm1fY29sdW1uOworCQl9CisJCWF1dG8gb3BlcmF0b3IgIT0oaXRlcmF0b3IgY29uc3QmIG90aGVyKSBjb25zdCAtPiBib29sIHsKKwkJCXJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7CisJCX0KKwl9OworCXVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gaXRlcmF0b3I7CiAKLSAgICAgICAgZXhwbGljaXQgQ29sdW1uKCBzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCApIHsgbV9zdHJpbmdzLnB1c2hfYmFjayggdGV4dCApOyB9CisJZXhwbGljaXQgQ29sdW1uKHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0KSB7IG1fc3RyaW5ncy5wdXNoX2JhY2sodGV4dCk7IH0KIAotICAgICAgICBhdXRvIHdpZHRoKCBzaXplX3QgbmV3V2lkdGggKSAtPiBDb2x1bW4mIHsKLSAgICAgICAgICAgIGFzc2VydCggbmV3V2lkdGggPiAwICk7Ci0gICAgICAgICAgICBtX3dpZHRoID0gbmV3V2lkdGg7Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byBpbmRlbnQoIHNpemVfdCBuZXdJbmRlbnQgKSAtPiBDb2x1bW4mIHsKLSAgICAgICAgICAgIG1faW5kZW50ID0gbmV3SW5kZW50OwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8gaW5pdGlhbEluZGVudCggc2l6ZV90IG5ld0luZGVudCApIC0+IENvbHVtbiYgewotICAgICAgICAgICAgbV9pbml0aWFsSW5kZW50ID0gbmV3SW5kZW50OwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9CisJYXV0byB3aWR0aChzaXplX3QgbmV3V2lkdGgpIC0+IENvbHVtbiYgeworCQlhc3NlcnQobmV3V2lkdGggPiAwKTsKKwkJbV93aWR0aCA9IG5ld1dpZHRoOworCQlyZXR1cm4gKnRoaXM7CisJfQorCWF1dG8gaW5kZW50KHNpemVfdCBuZXdJbmRlbnQpIC0+IENvbHVtbiYgeworCQltX2luZGVudCA9IG5ld0luZGVudDsKKwkJcmV0dXJuICp0aGlzOworCX0KKwlhdXRvIGluaXRpYWxJbmRlbnQoc2l6ZV90IG5ld0luZGVudCkgLT4gQ29sdW1uJiB7CisJCW1faW5pdGlhbEluZGVudCA9IG5ld0luZGVudDsKKwkJcmV0dXJuICp0aGlzOworCX0KIAotICAgICAgICBhdXRvIHdpZHRoKCkgY29uc3QgLT4gc2l6ZV90IHsgcmV0dXJuIG1fd2lkdGg7IH0KLSAgICAgICAgYXV0byBiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yIHsgcmV0dXJuIGl0ZXJhdG9yKCAqdGhpcyApOyB9Ci0gICAgICAgIGF1dG8gZW5kKCkgY29uc3QgLT4gaXRlcmF0b3IgeyByZXR1cm4geyAqdGhpcywgbV9zdHJpbmdzLnNpemUoKSB9OyB9CisJYXV0byB3aWR0aCgpIGNvbnN0IC0+IHNpemVfdCB7IHJldHVybiBtX3dpZHRoOyB9CisJYXV0byBiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yIHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzKTsgfQorCWF1dG8gZW5kKCkgY29uc3QgLT4gaXRlcmF0b3IgeyByZXR1cm4geyAqdGhpcywgbV9zdHJpbmdzLnNpemUoKSB9OyB9CiAKLSAgICAgICAgaW5saW5lIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8ICggc3RkOjpvc3RyZWFtJiBvcywgQ29sdW1uIGNvbnN0JiBjb2wgKSB7Ci0gICAgICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciggYXV0byBsaW5lIDogY29sICkgewotICAgICAgICAgICAgICAgIGlmKCBmaXJzdCApCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBvcyA8PCAiXG4iOwotICAgICAgICAgICAgICAgIG9zIDw8ICBsaW5lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG9zOwotICAgICAgICB9CisJaW5saW5lIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8IChzdGQ6Om9zdHJlYW0mIG9zLCBDb2x1bW4gY29uc3QmIGNvbCkgeworCQlib29sIGZpcnN0ID0gdHJ1ZTsKKwkJZm9yIChhdXRvIGxpbmUgOiBjb2wpIHsKKwkJCWlmIChmaXJzdCkKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJZWxzZQorCQkJCW9zIDw8ICJcbiI7CisJCQlvcyA8PCBsaW5lOworCQl9CisJCXJldHVybiBvczsKKwl9CiAKLSAgICAgICAgYXV0byBvcGVyYXRvciArICggQ29sdW1uIGNvbnN0JiBvdGhlciApIC0+IENvbHVtbnM7CisJYXV0byBvcGVyYXRvciArIChDb2x1bW4gY29uc3QmIG90aGVyKS0+Q29sdW1uczsKIAotICAgICAgICBhdXRvIHRvU3RyaW5nKCkgY29uc3QgLT4gc3RkOjpzdHJpbmcgewotICAgICAgICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG9zczsKLSAgICAgICAgICAgIG9zcyA8PCAqdGhpczsKLSAgICAgICAgICAgIHJldHVybiBvc3Muc3RyKCk7Ci0gICAgICAgIH0KLSAgICB9OworCWF1dG8gdG9TdHJpbmcoKSBjb25zdCAtPiBzdGQ6OnN0cmluZyB7CisJCXN0ZDo6b3N0cmluZ3N0cmVhbSBvc3M7CisJCW9zcyA8PCAqdGhpczsKKwkJcmV0dXJuIG9zcy5zdHIoKTsKKwl9Cit9OwogCi0gICAgY2xhc3MgU3BhY2VyIDogcHVibGljIENvbHVtbiB7CitjbGFzcyBTcGFjZXIgOiBwdWJsaWMgQ29sdW1uIHsKIAotICAgIHB1YmxpYzoKLSAgICAgICAgZXhwbGljaXQgU3BhY2VyKCBzaXplX3Qgc3BhY2VXaWR0aCApIDogQ29sdW1uKCAiIiApIHsKLSAgICAgICAgICAgIHdpZHRoKCBzcGFjZVdpZHRoICk7Ci0gICAgICAgIH0KLSAgICB9OworcHVibGljOgorCWV4cGxpY2l0IFNwYWNlcihzaXplX3Qgc3BhY2VXaWR0aCkgOiBDb2x1bW4oIiIpIHsKKwkJd2lkdGgoc3BhY2VXaWR0aCk7CisJfQorfTsKIAotICAgIGNsYXNzIENvbHVtbnMgewotICAgICAgICBzdGQ6OnZlY3RvcjxDb2x1bW4+IG1fY29sdW1uczsKK2NsYXNzIENvbHVtbnMgeworCXN0ZDo6dmVjdG9yPENvbHVtbj4gbV9jb2x1bW5zOwogCi0gICAgcHVibGljOgorcHVibGljOgogCi0gICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKLSAgICAgICAgICAgIGZyaWVuZCBDb2x1bW5zOwotICAgICAgICAgICAgc3RydWN0IEVuZFRhZyB7fTsKKwljbGFzcyBpdGVyYXRvciB7CisJCWZyaWVuZCBDb2x1bW5zOworCQlzdHJ1Y3QgRW5kVGFnIHt9OwogCi0gICAgICAgICAgICBzdGQ6OnZlY3RvcjxDb2x1bW4+IGNvbnN0JiBtX2NvbHVtbnM7Ci0gICAgICAgICAgICBzdGQ6OnZlY3RvcjxDb2x1bW46Oml0ZXJhdG9yPiBtX2l0ZXJhdG9yczsKLSAgICAgICAgICAgIHNpemVfdCBtX2FjdGl2ZUl0ZXJhdG9yczsKKwkJc3RkOjp2ZWN0b3I8Q29sdW1uPiBjb25zdCYgbV9jb2x1bW5zOworCQlzdGQ6OnZlY3RvcjxDb2x1bW46Oml0ZXJhdG9yPiBtX2l0ZXJhdG9yczsKKwkJc2l6ZV90IG1fYWN0aXZlSXRlcmF0b3JzOwogCi0gICAgICAgICAgICBpdGVyYXRvciggQ29sdW1ucyBjb25zdCYgY29sdW1ucywgRW5kVGFnICkKLSAgICAgICAgICAgIDogICBtX2NvbHVtbnMoIGNvbHVtbnMubV9jb2x1bW5zICksCi0gICAgICAgICAgICAgICAgbV9hY3RpdmVJdGVyYXRvcnMoIDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1faXRlcmF0b3JzLnJlc2VydmUoIG1fY29sdW1ucy5zaXplKCkgKTsKKwkJaXRlcmF0b3IoQ29sdW1ucyBjb25zdCYgY29sdW1ucywgRW5kVGFnKQorCQkJOiBtX2NvbHVtbnMoY29sdW1ucy5tX2NvbHVtbnMpLAorCQkJbV9hY3RpdmVJdGVyYXRvcnMoMCkgeworCQkJbV9pdGVyYXRvcnMucmVzZXJ2ZShtX2NvbHVtbnMuc2l6ZSgpKTsKIAotICAgICAgICAgICAgICAgIGZvciggYXV0byBjb25zdCYgY29sIDogbV9jb2x1bW5zICkKLSAgICAgICAgICAgICAgICAgICAgbV9pdGVyYXRvcnMucHVzaF9iYWNrKCBjb2wuZW5kKCkgKTsKLSAgICAgICAgICAgIH0KKwkJCWZvciAoYXV0byBjb25zdCYgY29sIDogbV9jb2x1bW5zKQorCQkJCW1faXRlcmF0b3JzLnB1c2hfYmFjayhjb2wuZW5kKCkpOworCQl9CiAKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgZXhwbGljaXQgaXRlcmF0b3IoIENvbHVtbnMgY29uc3QmIGNvbHVtbnMgKQotICAgICAgICAgICAgOiAgIG1fY29sdW1ucyggY29sdW1ucy5tX2NvbHVtbnMgKSwKLSAgICAgICAgICAgICAgICBtX2FjdGl2ZUl0ZXJhdG9ycyggbV9jb2x1bW5zLnNpemUoKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV9pdGVyYXRvcnMucmVzZXJ2ZSggbV9jb2x1bW5zLnNpemUoKSApOworCXB1YmxpYzoKKwkJdXNpbmcgZGlmZmVyZW5jZV90eXBlID0gc3RkOjpwdHJkaWZmX3Q7CisJCXVzaW5nIHZhbHVlX3R5cGUgPSBzdGQ6OnN0cmluZzsKKwkJdXNpbmcgcG9pbnRlciA9IHZhbHVlX3R5cGUgKiA7CisJCXVzaW5nIHJlZmVyZW5jZSA9IHZhbHVlX3R5cGUgJiA7CisJCXVzaW5nIGl0ZXJhdG9yX2NhdGVnb3J5ID0gc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZzsKIAotICAgICAgICAgICAgICAgIGZvciggYXV0byBjb25zdCYgY29sIDogbV9jb2x1bW5zICkKLSAgICAgICAgICAgICAgICAgICAgbV9pdGVyYXRvcnMucHVzaF9iYWNrKCBjb2wuYmVnaW4oKSApOwotICAgICAgICAgICAgfQorCQlleHBsaWNpdCBpdGVyYXRvcihDb2x1bW5zIGNvbnN0JiBjb2x1bW5zKQorCQkJOiBtX2NvbHVtbnMoY29sdW1ucy5tX2NvbHVtbnMpLAorCQkJbV9hY3RpdmVJdGVyYXRvcnMobV9jb2x1bW5zLnNpemUoKSkgeworCQkJbV9pdGVyYXRvcnMucmVzZXJ2ZShtX2NvbHVtbnMuc2l6ZSgpKTsKIAotICAgICAgICAgICAgYXV0byBvcGVyYXRvciA9PSggaXRlcmF0b3IgY29uc3QmIG90aGVyICkgY29uc3QgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1faXRlcmF0b3JzID09IG90aGVyLm1faXRlcmF0b3JzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0byBvcGVyYXRvciAhPSggaXRlcmF0b3IgY29uc3QmIG90aGVyICkgY29uc3QgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1faXRlcmF0b3JzICE9IG90aGVyLm1faXRlcmF0b3JzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0byBvcGVyYXRvciAqKCkgY29uc3QgLT4gc3RkOjpzdHJpbmcgewotICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIHJvdywgcGFkZGluZzsKKwkJCWZvciAoYXV0byBjb25zdCYgY29sIDogbV9jb2x1bW5zKQorCQkJCW1faXRlcmF0b3JzLnB1c2hfYmFjayhjb2wuYmVnaW4oKSk7CisJCX0KIAotICAgICAgICAgICAgICAgIGZvciggc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2x1bW5zLnNpemUoKTsgKytpICkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIHdpZHRoID0gbV9jb2x1bW5zW2ldLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmKCBtX2l0ZXJhdG9yc1tpXSAhPSBtX2NvbHVtbnNbaV0uZW5kKCkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb2wgPSAqbV9pdGVyYXRvcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICByb3cgKz0gcGFkZGluZyArIGNvbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBjb2wuc2l6ZSgpIDwgd2lkdGggKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmcgPSBzdGQ6OnN0cmluZyggd2lkdGggLSBjb2wuc2l6ZSgpLCAnICcgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nICs9IHN0ZDo6c3RyaW5nKCB3aWR0aCwgJyAnICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gb3BlcmF0b3IgKysoKSAtPiBpdGVyYXRvciYgewotICAgICAgICAgICAgICAgIGZvciggc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2x1bW5zLnNpemUoKTsgKytpICkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9pdGVyYXRvcnNbaV0gIT0gbV9jb2x1bW5zW2ldLmVuZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgKyttX2l0ZXJhdG9yc1tpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0byBvcGVyYXRvciArKyhpbnQpIC0+IGl0ZXJhdG9yIHsKLSAgICAgICAgICAgICAgICBpdGVyYXRvciBwcmV2KCAqdGhpcyApOwotICAgICAgICAgICAgICAgIG9wZXJhdG9yKysoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJldjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBpdGVyYXRvcjsKKwkJYXV0byBvcGVyYXRvciA9PShpdGVyYXRvciBjb25zdCYgb3RoZXIpIGNvbnN0IC0+IGJvb2wgeworCQkJcmV0dXJuIG1faXRlcmF0b3JzID09IG90aGVyLm1faXRlcmF0b3JzOworCQl9CisJCWF1dG8gb3BlcmF0b3IgIT0oaXRlcmF0b3IgY29uc3QmIG90aGVyKSBjb25zdCAtPiBib29sIHsKKwkJCXJldHVybiBtX2l0ZXJhdG9ycyAhPSBvdGhlci5tX2l0ZXJhdG9yczsKKwkJfQorCQlhdXRvIG9wZXJhdG9yICooKSBjb25zdCAtPiBzdGQ6OnN0cmluZyB7CisJCQlzdGQ6OnN0cmluZyByb3csIHBhZGRpbmc7CiAKLSAgICAgICAgYXV0byBiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yIHsgcmV0dXJuIGl0ZXJhdG9yKCAqdGhpcyApOyB9Ci0gICAgICAgIGF1dG8gZW5kKCkgY29uc3QgLT4gaXRlcmF0b3IgeyByZXR1cm4geyAqdGhpcywgaXRlcmF0b3I6OkVuZFRhZygpIH07IH0KKwkJCWZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2x1bW5zLnNpemUoKTsgKytpKSB7CisJCQkJYXV0byB3aWR0aCA9IG1fY29sdW1uc1tpXS53aWR0aCgpOworCQkJCWlmIChtX2l0ZXJhdG9yc1tpXSAhPSBtX2NvbHVtbnNbaV0uZW5kKCkpIHsKKwkJCQkJc3RkOjpzdHJpbmcgY29sID0gKm1faXRlcmF0b3JzW2ldOworCQkJCQlyb3cgKz0gcGFkZGluZyArIGNvbDsKKwkJCQkJaWYgKGNvbC5zaXplKCkgPCB3aWR0aCkKKwkJCQkJCXBhZGRpbmcgPSBzdGQ6OnN0cmluZyh3aWR0aCAtIGNvbC5zaXplKCksICcgJyk7CisJCQkJCWVsc2UKKwkJCQkJCXBhZGRpbmcgPSAiIjsKKwkJCQl9IGVsc2UgeworCQkJCQlwYWRkaW5nICs9IHN0ZDo6c3RyaW5nKHdpZHRoLCAnICcpOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiByb3c7CisJCX0KKwkJYXV0byBvcGVyYXRvciArKygpIC0+IGl0ZXJhdG9yJiB7CisJCQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29sdW1ucy5zaXplKCk7ICsraSkgeworCQkJCWlmIChtX2l0ZXJhdG9yc1tpXSAhPSBtX2NvbHVtbnNbaV0uZW5kKCkpCisJCQkJCSsrbV9pdGVyYXRvcnNbaV07CisJCQl9CisJCQlyZXR1cm4gKnRoaXM7CisJCX0KKwkJYXV0byBvcGVyYXRvciArKyhpbnQpIC0+IGl0ZXJhdG9yIHsKKwkJCWl0ZXJhdG9yIHByZXYoKnRoaXMpOworCQkJb3BlcmF0b3IrKygpOworCQkJcmV0dXJuIHByZXY7CisJCX0KKwl9OworCXVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gaXRlcmF0b3I7CiAKLSAgICAgICAgYXV0byBvcGVyYXRvciArPSAoIENvbHVtbiBjb25zdCYgY29sICkgLT4gQ29sdW1ucyYgewotICAgICAgICAgICAgbV9jb2x1bW5zLnB1c2hfYmFjayggY29sICk7Ci0gICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgIH0KLSAgICAgICAgYXV0byBvcGVyYXRvciArICggQ29sdW1uIGNvbnN0JiBjb2wgKSAtPiBDb2x1bW5zIHsKLSAgICAgICAgICAgIENvbHVtbnMgY29tYmluZWQgPSAqdGhpczsKLSAgICAgICAgICAgIGNvbWJpbmVkICs9IGNvbDsKLSAgICAgICAgICAgIHJldHVybiBjb21iaW5lZDsKLSAgICAgICAgfQorCWF1dG8gYmVnaW4oKSBjb25zdCAtPiBpdGVyYXRvciB7IHJldHVybiBpdGVyYXRvcigqdGhpcyk7IH0KKwlhdXRvIGVuZCgpIGNvbnN0IC0+IGl0ZXJhdG9yIHsgcmV0dXJuIHsgKnRoaXMsIGl0ZXJhdG9yOjpFbmRUYWcoKSB9OyB9CiAKLSAgICAgICAgaW5saW5lIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8ICggc3RkOjpvc3RyZWFtJiBvcywgQ29sdW1ucyBjb25zdCYgY29scyApIHsKKwlhdXRvIG9wZXJhdG9yICs9IChDb2x1bW4gY29uc3QmIGNvbCkgLT4gQ29sdW1ucyYgeworCQltX2NvbHVtbnMucHVzaF9iYWNrKGNvbCk7CisJCXJldHVybiAqdGhpczsKKwl9CisJYXV0byBvcGVyYXRvciArIChDb2x1bW4gY29uc3QmIGNvbCkgLT4gQ29sdW1ucyB7CisJCUNvbHVtbnMgY29tYmluZWQgPSAqdGhpczsKKwkJY29tYmluZWQgKz0gY29sOworCQlyZXR1cm4gY29tYmluZWQ7CisJfQogCi0gICAgICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciggYXV0byBsaW5lIDogY29scyApIHsKLSAgICAgICAgICAgICAgICBpZiggZmlyc3QgKQotICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgb3MgPDwgIlxuIjsKLSAgICAgICAgICAgICAgICBvcyA8PCBsaW5lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG9zOwotICAgICAgICB9CisJaW5saW5lIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8IChzdGQ6Om9zdHJlYW0mIG9zLCBDb2x1bW5zIGNvbnN0JiBjb2xzKSB7CiAKLSAgICAgICAgYXV0byB0b1N0cmluZygpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nIHsKLSAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3M7Ci0gICAgICAgICAgICBvc3MgPDwgKnRoaXM7Ci0gICAgICAgICAgICByZXR1cm4gb3NzLnN0cigpOwotICAgICAgICB9Ci0gICAgfTsKKwkJYm9vbCBmaXJzdCA9IHRydWU7CisJCWZvciAoYXV0byBsaW5lIDogY29scykgeworCQkJaWYgKGZpcnN0KQorCQkJCWZpcnN0ID0gZmFsc2U7CisJCQllbHNlCisJCQkJb3MgPDwgIlxuIjsKKwkJCW9zIDw8IGxpbmU7CisJCX0KKwkJcmV0dXJuIG9zOworCX0KIAotICAgIGlubGluZSBhdXRvIENvbHVtbjo6b3BlcmF0b3IgKyAoIENvbHVtbiBjb25zdCYgb3RoZXIgKSAtPiBDb2x1bW5zIHsKLSAgICAgICAgQ29sdW1ucyBjb2xzOwotICAgICAgICBjb2xzICs9ICp0aGlzOwotICAgICAgICBjb2xzICs9IG90aGVyOwotICAgICAgICByZXR1cm4gY29sczsKLSAgICB9Ci19fX0gLy8gbmFtZXNwYWNlIENhdGNoOjpjbGFyYTo6VGV4dEZsb3cKKwlhdXRvIHRvU3RyaW5nKCkgY29uc3QgLT4gc3RkOjpzdHJpbmcgeworCQlzdGQ6Om9zdHJpbmdzdHJlYW0gb3NzOworCQlvc3MgPDwgKnRoaXM7CisJCXJldHVybiBvc3Muc3RyKCk7CisJfQorfTsKIAoraW5saW5lIGF1dG8gQ29sdW1uOjpvcGVyYXRvciArIChDb2x1bW4gY29uc3QmIG90aGVyKSAtPiBDb2x1bW5zIHsKKwlDb2x1bW5zIGNvbHM7CisJY29scyArPSAqdGhpczsKKwljb2xzICs9IG90aGVyOworCXJldHVybiBjb2xzOworfQorfQorCit9Cit9CiAjZW5kaWYgLy8gQ0FUQ0hfQ0xBUkFfVEVYVEZMT1dfSFBQX0lOQ0xVREVECiAKIC8vIC0tLS0tLS0tLS0tIGVuZCBvZiAjaW5jbHVkZSBmcm9tIGNsYXJhX3RleHRmbG93LmhwcCAtLS0tLS0tLS0tLQogLy8gLi4uLi4uLi4uLi4gYmFjayBpbiBjbGFyYS5ocHAKIAotCisjaW5jbHVkZSA8Y2N0eXBlPgorI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTM5NSwxMSArNDA4LDkgQEAKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1fYXJnczsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgQXJncyggaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSApIHsKLSAgICAgICAgICAgIG1fZXhlTmFtZSA9IGFyZ3ZbMF07Ci0gICAgICAgICAgICBmb3IoIGludCBpID0gMTsgaSA8IGFyZ2M7ICsraSApCi0gICAgICAgICAgICAgICAgbV9hcmdzLnB1c2hfYmFjayggYXJndltpXSApOwotICAgICAgICB9CisgICAgICAgIEFyZ3MoIGludCBhcmdjLCBjaGFyIGNvbnN0KiBjb25zdCogYXJndiApCisgICAgICAgICAgICA6IG1fZXhlTmFtZShhcmd2WzBdKSwKKyAgICAgICAgICAgICAgbV9hcmdzKGFyZ3YgKyAxLCBhcmd2ICsgYXJnYykge30KIAogICAgICAgICBBcmdzKCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8c3RkOjpzdHJpbmc+IGFyZ3MgKQogICAgICAgICA6ICAgbV9leGVOYW1lKCAqYXJncy5iZWdpbigpICksCkBAIC01ODYsMTQgKzU5NywxMyBAQAogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2b2lkIGVuZm9yY2VPaygpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICAgICAgICAgIHN3aXRjaCggbV90eXBlICkgewotICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0QmFzZTo6TG9naWNFcnJvcjoKLSAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uOjpkb1Rocm93KCBzdGQ6OmxvZ2ljX2Vycm9yKCBtX2Vycm9yTWVzc2FnZSApICk7Ci0gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRCYXNlOjpSdW50aW1lRXJyb3I6Ci0gICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbjo6ZG9UaHJvdyggc3RkOjpydW50aW1lX2Vycm9yKCBtX2Vycm9yTWVzc2FnZSApICk7Ci0gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRCYXNlOjpPazoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEVycm9ycyBzaG91bGRuJ3QgcmVhY2ggdGhpcyBwb2ludCwgYnV0IGlmIHRoZXkgZG8KKyAgICAgICAgICAgIC8vIHRoZSBhY3R1YWwgZXJyb3IgbWVzc2FnZSB3aWxsIGJlIGluIG1fZXJyb3JNZXNzYWdlCisgICAgICAgICAgICBhc3NlcnQoIG1fdHlwZSAhPSBSZXN1bHRCYXNlOjpMb2dpY0Vycm9yICk7CisgICAgICAgICAgICBhc3NlcnQoIG1fdHlwZSAhPSBSZXN1bHRCYXNlOjpSdW50aW1lRXJyb3IgKTsKKyAgICAgICAgICAgIGlmKCBtX3R5cGUgIT0gUmVzdWx0QmFzZTo6T2sgKQorICAgICAgICAgICAgICAgIHN0ZDo6YWJvcnQoKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0ZDo6c3RyaW5nIG1fZXJyb3JNZXNzYWdlOyAvLyBPbmx5IHBvcHVsYXRlZCBpZiByZXN1bHRUeXBlIGlzIGFuIGVycm9yCkBAIC02NTQsNyArNjY0LDcgQEAKICAgICB9CiAgICAgaW5saW5lIGF1dG8gY29udmVydEludG8oIHN0ZDo6c3RyaW5nIGNvbnN0ICZzb3VyY2UsIGJvb2wgJnRhcmdldCApIC0+IFBhcnNlclJlc3VsdCB7CiAgICAgICAgIHN0ZDo6c3RyaW5nIHNyY0xDID0gc291cmNlOwotICAgICAgICBzdGQ6OnRyYW5zZm9ybSggc3JjTEMuYmVnaW4oKSwgc3JjTEMuZW5kKCksIHNyY0xDLmJlZ2luKCksIFtdKCBjaGFyIGMgKSB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPiggOjp0b2xvd2VyKGMpICk7IH0gKTsKKyAgICAgICAgc3RkOjp0cmFuc2Zvcm0oIHNyY0xDLmJlZ2luKCksIHNyY0xDLmVuZCgpLCBzcmNMQy5iZWdpbigpLCBbXSggY2hhciBjICkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcj4oIHN0ZDo6dG9sb3dlcihjKSApOyB9ICk7CiAgICAgICAgIGlmIChzcmNMQyA9PSAieSIgfHwgc3JjTEMgPT0gIjEiIHx8IHNyY0xDID09ICJ0cnVlIiB8fCBzcmNMQyA9PSAieWVzIiB8fCBzcmNMQyA9PSAib24iKQogICAgICAgICAgICAgdGFyZ2V0ID0gdHJ1ZTsKICAgICAgICAgZWxzZSBpZiAoc3JjTEMgPT0gIm4iIHx8IHNyY0xDID09ICIwIiB8fCBzcmNMQyA9PSAiZmFsc2UiIHx8IHNyY0xDID09ICJubyIgfHwgc3JjTEMgPT0gIm9mZiIpCkBAIC02NjMsNiArNjczLDE2IEBACiAgICAgICAgICAgICByZXR1cm4gUGFyc2VyUmVzdWx0OjpydW50aW1lRXJyb3IoICJFeHBlY3RlZCBhIGJvb2xlYW4gdmFsdWUgYnV0IGRpZCBub3QgcmVjb2duaXNlOiAnIiArIHNvdXJjZSArICInIiApOwogICAgICAgICByZXR1cm4gUGFyc2VyUmVzdWx0OjpvayggUGFyc2VSZXN1bHRUeXBlOjpNYXRjaGVkICk7CiAgICAgfQorI2lmZGVmIENMQVJBX0NPTkZJR19PUFRJT05BTF9UWVBFCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgYXV0byBjb252ZXJ0SW50byggc3RkOjpzdHJpbmcgY29uc3QgJnNvdXJjZSwgQ0xBUkFfQ09ORklHX09QVElPTkFMX1RZUEU8VD4mIHRhcmdldCApIC0+IFBhcnNlclJlc3VsdCB7CisgICAgICAgIFQgdGVtcDsKKyAgICAgICAgYXV0byByZXN1bHQgPSBjb252ZXJ0SW50byggc291cmNlLCB0ZW1wICk7CisgICAgICAgIGlmKCByZXN1bHQgKQorICAgICAgICAgICAgdGFyZ2V0ID0gc3RkOjptb3ZlKHRlbXApOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNlbmRpZiAvLyBDTEFSQV9DT05GSUdfT1BUSU9OQUxfVFlQRQogCiAgICAgc3RydWN0IE5vbkNvcHlhYmxlIHsKICAgICAgICAgTm9uQ29weWFibGUoKSA9IGRlZmF1bHQ7CkBAIC02NzIsMjAgKzY5MiwxNyBAQAogICAgICAgICBOb25Db3B5YWJsZSAmb3BlcmF0b3I9KCBOb25Db3B5YWJsZSAmJiApID0gZGVsZXRlOwogICAgIH07CiAKLSAgICBzdHJ1Y3QgQm91bmRWYWx1ZVJlZkJhc2U7Ci0KICAgICBzdHJ1Y3QgQm91bmRSZWYgOiBOb25Db3B5YWJsZSB7CiAgICAgICAgIHZpcnR1YWwgfkJvdW5kUmVmKCkgPSBkZWZhdWx0OwogICAgICAgICB2aXJ0dWFsIGF1dG8gaXNDb250YWluZXIoKSBjb25zdCAtPiBib29sIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgICAgIHZpcnR1YWwgYXV0byBpc1ZhbHVlUmVmQmFzZSgpIGNvbnN0IC0+IGJvb2wgPSAwOyAgLy8gU3VwcG9ydCBmb3IgY29tcGlsaW5nIHdpdGhvdXQgcnR0aS4KKyAgICAgICAgdmlydHVhbCBhdXRvIGlzRmxhZygpIGNvbnN0IC0+IGJvb2wgeyByZXR1cm4gZmFsc2U7IH0KICAgICB9OwogICAgIHN0cnVjdCBCb3VuZFZhbHVlUmVmQmFzZSA6IEJvdW5kUmVmIHsKICAgICAgICAgdmlydHVhbCBhdXRvIHNldFZhbHVlKCBzdGQ6OnN0cmluZyBjb25zdCAmYXJnICkgLT4gUGFyc2VyUmVzdWx0ID0gMDsKLSAgICAgICAgdmlydHVhbCBhdXRvIGlzVmFsdWVSZWZCYXNlKCkgY29uc3QgLT4gYm9vbCB7IHJldHVybiB0cnVlOyB9CiAgICAgfTsKICAgICBzdHJ1Y3QgQm91bmRGbGFnUmVmQmFzZSA6IEJvdW5kUmVmIHsKICAgICAgICAgdmlydHVhbCBhdXRvIHNldEZsYWcoIGJvb2wgZmxhZyApIC0+IFBhcnNlclJlc3VsdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYXV0byBpc1ZhbHVlUmVmQmFzZSgpIGNvbnN0IC0+IGJvb2wgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBhdXRvIGlzRmxhZygpIGNvbnN0IC0+IGJvb2wgeyByZXR1cm4gdHJ1ZTsgfQogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtOTE3LDcgKzkzNCw3IEBACiAgICAgICAgICAgICBpZiggdG9rZW4udHlwZSAhPSBUb2tlblR5cGU6OkFyZ3VtZW50ICkKICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJuYWxQYXJzZVJlc3VsdDo6b2soIFBhcnNlU3RhdGUoIFBhcnNlUmVzdWx0VHlwZTo6Tm9NYXRjaCwgcmVtYWluaW5nVG9rZW5zICkgKTsKIAotICAgICAgICAgICAgYXNzZXJ0KCBtX3JlZi5nZXQoKS0+aXNWYWx1ZVJlZkJhc2UoKSApOworICAgICAgICAgICAgYXNzZXJ0KCAhbV9yZWYtPmlzRmxhZygpICk7CiAgICAgICAgICAgICBhdXRvIHZhbHVlUmVmID0gc3RhdGljX2Nhc3Q8ZGV0YWlsOjpCb3VuZFZhbHVlUmVmQmFzZSo+KCBtX3JlZi5nZXQoKSApOwogCiAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IHZhbHVlUmVmLT5zZXRWYWx1ZSggcmVtYWluaW5nVG9rZW5zLT50b2tlbiApOwpAQCAtOTkzLDIwICsxMDEwLDE0IEBACiAgICAgICAgICAgICBpZiggcmVtYWluaW5nVG9rZW5zICYmIHJlbWFpbmluZ1Rva2Vucy0+dHlwZSA9PSBUb2tlblR5cGU6Ok9wdGlvbiApIHsKICAgICAgICAgICAgICAgICBhdXRvIGNvbnN0ICZ0b2tlbiA9ICpyZW1haW5pbmdUb2tlbnM7CiAgICAgICAgICAgICAgICAgaWYoIGlzTWF0Y2godG9rZW4udG9rZW4gKSApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhbV9yZWYuZ2V0KCktPmlzVmFsdWVSZWZCYXNlKCkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXRhaWw6OkJvdW5kRmxhZ1JlZkJhc2UqIGZsYWdSZWYgPSBzdGF0aWNfY2FzdDxkZXRhaWw6OkJvdW5kRmxhZ1JlZkJhc2UqPiggbV9yZWYuZ2V0KCkgKTsKLSNpZiBDQVRDSF9DT05GSUdfVVNFX1JUVEkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCggZHluYW1pY19jYXN0PGRldGFpbDo6Qm91bmRGbGFnUmVmQmFzZSo+KCBtX3JlZi5nZXQoKSApICk7Ci0jZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgaWYoIG1fcmVmLT5pc0ZsYWcoKSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gZmxhZ1JlZiA9IHN0YXRpY19jYXN0PGRldGFpbDo6Qm91bmRGbGFnUmVmQmFzZSo+KCBtX3JlZi5nZXQoKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgYXV0byByZXN1bHQgPSBmbGFnUmVmLT5zZXRGbGFnKCB0cnVlICk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiggIXJlc3VsdCApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEludGVybmFsUGFyc2VSZXN1bHQoIHJlc3VsdCApOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYoIHJlc3VsdC52YWx1ZSgpID09IFBhcnNlUmVzdWx0VHlwZTo6U2hvcnRDaXJjdWl0QWxsICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJuYWxQYXJzZVJlc3VsdDo6b2soIFBhcnNlU3RhdGUoIHJlc3VsdC52YWx1ZSgpLCByZW1haW5pbmdUb2tlbnMgKSApOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotI2lmIENBVENIX0NPTkZJR19VU0VfUlRUSQotICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCBkeW5hbWljX2Nhc3Q8ZGV0YWlsOjpCb3VuZFZhbHVlUmVmQmFzZSo+KCBtX3JlZi5nZXQoKSApICk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdmFsdWVSZWYgPSBzdGF0aWNfY2FzdDxkZXRhaWw6OkJvdW5kVmFsdWVSZWZCYXNlKj4oIG1fcmVmLmdldCgpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICArK3JlbWFpbmluZ1Rva2VuczsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhcmVtYWluaW5nVG9rZW5zICkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYXBwcm94LmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYXBwcm94LmNwcAppbmRleCAyMGY3YjE2Li5hN2Q3MTExIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2FwcHJveC5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9hcHByb3guY3BwCkBAIC03LDYgKzcsNyBAQAogICovCiAKICNpbmNsdWRlICJjYXRjaF9hcHByb3guaCIKKyNpbmNsdWRlICJjYXRjaF9lbmZvcmNlLmgiCiAKICNpbmNsdWRlIDxjbWF0aD4KICNpbmNsdWRlIDxsaW1pdHM+CkBAIC0zNSw2ICszNiwxMyBAQAogICAgICAgICByZXR1cm4gQXBwcm94KCAwICk7CiAgICAgfQogCisgICAgQXBwcm94IEFwcHJveDo6b3BlcmF0b3ItKCkgY29uc3QgeworICAgICAgICBhdXRvIHRlbXAoKnRoaXMpOworICAgICAgICB0ZW1wLm1fdmFsdWUgPSAtdGVtcC5tX3ZhbHVlOworICAgICAgICByZXR1cm4gdGVtcDsKKyAgICB9CisKKwogICAgIHN0ZDo6c3RyaW5nIEFwcHJveDo6dG9TdHJpbmcoKSBjb25zdCB7CiAgICAgICAgIFJldXNhYmxlU3RyaW5nU3RyZWFtIHJzczsKICAgICAgICAgcnNzIDw8ICJBcHByb3goICIgPDwgOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIG1fdmFsdWUgKSA8PCAiICkiOwpAQCAtNDcsOCArNTUsMzEgQEAKICAgICAgICAgcmV0dXJuIG1hcmdpbkNvbXBhcmlzb24obV92YWx1ZSwgb3RoZXIsIG1fbWFyZ2luKSB8fCBtYXJnaW5Db21wYXJpc29uKG1fdmFsdWUsIG90aGVyLCBtX2Vwc2lsb24gKiAobV9zY2FsZSArIHN0ZDo6ZmFicyhtX3ZhbHVlKSkpOwogICAgIH0KIAorICAgIHZvaWQgQXBwcm94OjpzZXRNYXJnaW4oZG91YmxlIG1hcmdpbikgeworICAgICAgICBDQVRDSF9FTkZPUkNFKG1hcmdpbiA+PSAwLAorICAgICAgICAgICAgIkludmFsaWQgQXBwcm94OjptYXJnaW46ICIgPDwgbWFyZ2luIDw8ICcuJworICAgICAgICAgICAgPDwgIiBBcHByb3g6Ok1hcmdpbiBoYXMgdG8gYmUgbm9uLW5lZ2F0aXZlLiIpOworICAgICAgICBtX21hcmdpbiA9IG1hcmdpbjsKKyAgICB9CisKKyAgICB2b2lkIEFwcHJveDo6c2V0RXBzaWxvbihkb3VibGUgZXBzaWxvbikgeworICAgICAgICBDQVRDSF9FTkZPUkNFKGVwc2lsb24gPj0gMCAmJiBlcHNpbG9uIDw9IDEuMCwKKyAgICAgICAgICAgICJJbnZhbGlkIEFwcHJveDo6ZXBzaWxvbjogIiA8PCBlcHNpbG9uIDw8ICcuJworICAgICAgICAgICAgPDwgIiBBcHByb3g6OmVwc2lsb24gaGFzIHRvIGJlIGluIFswLCAxXSIpOworICAgICAgICBtX2Vwc2lsb24gPSBlcHNpbG9uOworICAgIH0KKwogfSAvLyBlbmQgbmFtZXNwYWNlIERldGFpbAogCituYW1lc3BhY2UgbGl0ZXJhbHMgeworICAgIERldGFpbDo6QXBwcm94IG9wZXJhdG9yICIiIF9hKGxvbmcgZG91YmxlIHZhbCkgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpBcHByb3godmFsKTsKKyAgICB9CisgICAgRGV0YWlsOjpBcHByb3ggb3BlcmF0b3IgIiIgX2EodW5zaWduZWQgbG9uZyBsb25nIHZhbCkgeworICAgICAgICByZXR1cm4gRGV0YWlsOjpBcHByb3godmFsKTsKKyAgICB9Cit9IC8vIGVuZCBuYW1lc3BhY2UgbGl0ZXJhbHMKKwogc3RkOjpzdHJpbmcgU3RyaW5nTWFrZXI8Q2F0Y2g6OkRldGFpbDo6QXBwcm94Pjo6Y29udmVydChDYXRjaDo6RGV0YWlsOjpBcHByb3ggY29uc3QmIHZhbHVlKSB7CiAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2FwcHJveC5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9hcHByb3guaAppbmRleCA0YjU4ZjQ2Li40NTIyZTVhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2FwcHJveC5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYXBwcm94LmgKQEAgLTgsMTEgKzgsOSBAQAogI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfQVBQUk9YX0hQUF9JTkNMVURFRAogI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfQVBQUk9YX0hQUF9JTkNMVURFRAogCi0jaW5jbHVkZSAiY2F0Y2hfY29tbW9uLmgiCiAjaW5jbHVkZSAiY2F0Y2hfdG9zdHJpbmcuaCIKIAogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KIAogbmFtZXNwYWNlIENhdGNoIHsKIG5hbWVzcGFjZSBEZXRhaWwgewpAQCAtMjAsMTggKzE4LDI2IEBACiAgICAgY2xhc3MgQXBwcm94IHsKICAgICBwcml2YXRlOgogICAgICAgICBib29sIGVxdWFsaXR5Q29tcGFyaXNvbkltcGwoZG91YmxlIG90aGVyKSBjb25zdDsKKyAgICAgICAgLy8gVmFsaWRhdGVzIHRoZSBuZXcgbWFyZ2luIChtYXJnaW4gPj0gMCkKKyAgICAgICAgLy8gb3V0LW9mLWxpbmUgdG8gYXZvaWQgaW5jbHVkaW5nIHN0ZGV4Y2VwdCBpbiB0aGUgaGVhZGVyCisgICAgICAgIHZvaWQgc2V0TWFyZ2luKGRvdWJsZSBtYXJnaW4pOworICAgICAgICAvLyBWYWxpZGF0ZXMgdGhlIG5ldyBlcHNpbG9uICgwIDwgZXBzaWxvbiA8IDEpCisgICAgICAgIC8vIG91dC1vZi1saW5lIHRvIGF2b2lkIGluY2x1ZGluZyBzdGRleGNlcHQgaW4gdGhlIGhlYWRlcgorICAgICAgICB2b2lkIHNldEVwc2lsb24oZG91YmxlIGVwc2lsb24pOwogCiAgICAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBBcHByb3ggKCBkb3VibGUgdmFsdWUgKTsKIAogICAgICAgICBzdGF0aWMgQXBwcm94IGN1c3RvbSgpOwogCisgICAgICAgIEFwcHJveCBvcGVyYXRvci0oKSBjb25zdDsKKwogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8ZG91YmxlLCBUPjo6dmFsdWU+Ojp0eXBlPgogICAgICAgICBBcHByb3ggb3BlcmF0b3IoKSggVCBjb25zdCYgdmFsdWUgKSB7CiAgICAgICAgICAgICBBcHByb3ggYXBwcm94KCBzdGF0aWNfY2FzdDxkb3VibGU+KHZhbHVlKSApOwotICAgICAgICAgICAgYXBwcm94LmVwc2lsb24oIG1fZXBzaWxvbiApOwotICAgICAgICAgICAgYXBwcm94Lm1hcmdpbiggbV9tYXJnaW4gKTsKLSAgICAgICAgICAgIGFwcHJveC5zY2FsZSggbV9zY2FsZSApOworICAgICAgICAgICAgYXBwcm94Lm1fZXBzaWxvbiA9IG1fZXBzaWxvbjsKKyAgICAgICAgICAgIGFwcHJveC5tX21hcmdpbiA9IG1fbWFyZ2luOworICAgICAgICAgICAgYXBwcm94Lm1fc2NhbGUgPSBtX3NjYWxlOwogICAgICAgICAgICAgcmV0dXJuIGFwcHJveDsKICAgICAgICAgfQogCkBAIC04NCwyNyArOTAsMTQgQEAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb25zdHJ1Y3RpYmxlPGRvdWJsZSwgVD46OnZhbHVlPjo6dHlwZT4KICAgICAgICAgQXBwcm94JiBlcHNpbG9uKCBUIGNvbnN0JiBuZXdFcHNpbG9uICkgewogICAgICAgICAgICAgZG91YmxlIGVwc2lsb25Bc0RvdWJsZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4obmV3RXBzaWxvbik7Ci0gICAgICAgICAgICBpZiggZXBzaWxvbkFzRG91YmxlIDwgMCB8fCBlcHNpbG9uQXNEb3VibGUgPiAxLjAgKSB7Ci0gICAgICAgICAgICAgIEV4Y2VwdGlvbjo6ZG9UaHJvdyggc3RkOjpkb21haW5fZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgKCAgICJJbnZhbGlkIEFwcHJveDo6ZXBzaWxvbjogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIGVwc2lsb25Bc0RvdWJsZSApICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIsIEFwcHJveDo6ZXBzaWxvbiBoYXMgdG8gYmUgYmV0d2VlbiAwIGFuZCAxIiApICk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2Vwc2lsb24gPSBlcHNpbG9uQXNEb3VibGU7CisgICAgICAgICAgICBzZXRFcHNpbG9uKGVwc2lsb25Bc0RvdWJsZSk7CiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KIAogICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgPSB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2NvbnN0cnVjdGlibGU8ZG91YmxlLCBUPjo6dmFsdWU+Ojp0eXBlPgogICAgICAgICBBcHByb3gmIG1hcmdpbiggVCBjb25zdCYgbmV3TWFyZ2luICkgewogICAgICAgICAgICAgZG91YmxlIG1hcmdpbkFzRG91YmxlID0gc3RhdGljX2Nhc3Q8ZG91YmxlPihuZXdNYXJnaW4pOwotICAgICAgICAgICAgaWYoIG1hcmdpbkFzRG91YmxlIDwgMCApIHsKLSAgICAgICAgICAgICAgICBFeGNlcHRpb246OmRvVGhyb3coIHN0ZDo6ZG9tYWluX2Vycm9yCi0gICAgICAgICAgICAgICAgICAgICggICAiSW52YWxpZCBBcHByb3g6Om1hcmdpbjogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICAgQ2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBtYXJnaW5Bc0RvdWJsZSApICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAiLCBBcHByb3g6Ok1hcmdpbiBoYXMgdG8gYmUgbm9uLW5lZ2F0aXZlLiIgKSApOwotCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX21hcmdpbiA9IG1hcmdpbkFzRG91YmxlOworICAgICAgICAgICAgc2V0TWFyZ2luKG1hcmdpbkFzRG91YmxlKTsKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgfQogCkBAIC0xMjIsNyArMTE1LDEyIEBACiAgICAgICAgIGRvdWJsZSBtX3NjYWxlOwogICAgICAgICBkb3VibGUgbV92YWx1ZTsKICAgICB9OwotfQorfSAvLyBlbmQgbmFtZXNwYWNlIERldGFpbAorCituYW1lc3BhY2UgbGl0ZXJhbHMgeworICAgIERldGFpbDo6QXBwcm94IG9wZXJhdG9yICIiIF9hKGxvbmcgZG91YmxlIHZhbCk7CisgICAgRGV0YWlsOjpBcHByb3ggb3BlcmF0b3IgIiIgX2EodW5zaWduZWQgbG9uZyBsb25nIHZhbCk7Cit9IC8vIGVuZCBuYW1lc3BhY2UgbGl0ZXJhbHMKIAogdGVtcGxhdGU8Pgogc3RydWN0IFN0cmluZ01ha2VyPENhdGNoOjpEZXRhaWw6OkFwcHJveD4gewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9hc3NlcnRpb25oYW5kbGVyLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYXNzZXJ0aW9uaGFuZGxlci5jcHAKaW5kZXggZTRhMTA3ZS4uZmQxNGM4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9hc3NlcnRpb25oYW5kbGVyLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2Fzc2VydGlvbmhhbmRsZXIuY3BwCkBAIC0xNSwxMiArMTUsMTUgQEAKICNpbmNsdWRlICJjYXRjaF9pbnRlcmZhY2VzX3JlZ2lzdHJ5X2h1Yi5oIgogI2luY2x1ZGUgImNhdGNoX2NhcHR1cmVfbWF0Y2hlcnMuaCIKICNpbmNsdWRlICJjYXRjaF9ydW5fY29udGV4dC5oIgorI2luY2x1ZGUgImNhdGNoX2VuZm9yY2UuaCIKIAogbmFtZXNwYWNlIENhdGNoIHsKIAotICAgIGF1dG8gb3BlcmF0b3IgPDwoIHN0ZDo6b3N0cmVhbSYgb3MsIElUcmFuc2llbnRFeHByZXNzaW9uIGNvbnN0JiBleHByICkgLT4gc3RkOjpvc3RyZWFtJiB7Ci0gICAgICAgIGV4cHIuc3RyZWFtUmVjb25zdHJ1Y3RlZEV4cHJlc3Npb24oIG9zICk7Ci0gICAgICAgIHJldHVybiBvczsKKyAgICBuYW1lc3BhY2UgeworICAgICAgICBhdXRvIG9wZXJhdG9yIDw8KCBzdGQ6Om9zdHJlYW0mIG9zLCBJVHJhbnNpZW50RXhwcmVzc2lvbiBjb25zdCYgZXhwciApIC0+IHN0ZDo6b3N0cmVhbSYgeworICAgICAgICAgICAgZXhwci5zdHJlYW1SZWNvbnN0cnVjdGVkRXhwcmVzc2lvbiggb3MgKTsKKyAgICAgICAgICAgIHJldHVybiBvczsKKyAgICAgICAgfQogICAgIH0KIAogICAgIExhenlFeHByZXNzaW9uOjpMYXp5RXhwcmVzc2lvbiggYm9vbCBpc05lZ2F0ZWQgKQpAQCAtNTAsNyArNTMsNyBAQAogICAgIH0KIAogICAgIEFzc2VydGlvbkhhbmRsZXI6OkFzc2VydGlvbkhhbmRsZXIKLSAgICAgICAgKCAgIFN0cmluZ1JlZiBtYWNyb05hbWUsCisgICAgICAgICggICBTdHJpbmdSZWYgY29uc3QmIG1hY3JvTmFtZSwKICAgICAgICAgICAgIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbywKICAgICAgICAgICAgIFN0cmluZ1JlZiBjYXB0dXJlZEV4cHJlc3Npb24sCiAgICAgICAgICAgICBSZXN1bHREaXNwb3NpdGlvbjo6RmxhZ3MgcmVzdWx0RGlzcG9zaXRpb24gKQpAQCAtNzksOCArODIsMTMgQEAKICAgICAgICAgICAgIC8vIChUbyBnbyBiYWNrIHRvIHRoZSB0ZXN0IGFuZCBjaGFuZ2UgZXhlY3V0aW9uLCBqdW1wIG92ZXIgdGhlIHRocm93LCBuZXh0KQogICAgICAgICAgICAgQ0FUQ0hfQlJFQUtfSU5UT19ERUJVR0dFUigpOwogICAgICAgICB9Ci0gICAgICAgIGlmKCBtX3JlYWN0aW9uLnNob3VsZFRocm93ICkKLSAgICAgICAgICAgIEV4Y2VwdGlvbjo6ZG9UaHJvdyggQ2F0Y2g6OlRlc3RGYWlsdXJlRXhjZXB0aW9uKCkgKTsKKyAgICAgICAgaWYgKG1fcmVhY3Rpb24uc2hvdWxkVGhyb3cpIHsKKyNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TKQorICAgICAgICAgICAgdGhyb3cgQ2F0Y2g6OlRlc3RGYWlsdXJlRXhjZXB0aW9uKCk7CisjZWxzZQorICAgICAgICAgICAgQ0FUQ0hfRVJST1IoICJUZXN0IGZhaWx1cmUgcmVxdWlyZXMgYWJvcnRpbmcgdGVzdCEiICk7CisjZW5kaWYKKyAgICAgICAgfQogICAgIH0KICAgICB2b2lkIEFzc2VydGlvbkhhbmRsZXI6OnNldENvbXBsZXRlZCgpIHsKICAgICAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwpAQCAtMTA3LDcgKzExNSw3IEBACiAKICAgICAvLyBUaGlzIGlzIHRoZSBvdmVybG9hZCB0aGF0IHRha2VzIGEgc3RyaW5nIGFuZCBpbmZlcnMgdGhlIEVxdWFscyBtYXRjaGVyIGZyb20gaXQKICAgICAvLyBUaGUgbW9yZSBnZW5lcmFsIG92ZXJsb2FkLCB0aGF0IHRha2VzIGFueSBzdHJpbmcgbWF0Y2hlciwgaXMgaW4gY2F0Y2hfY2FwdHVyZV9tYXRjaGVycy5jcHAKLSAgICB2b2lkIGhhbmRsZUV4Y2VwdGlvbk1hdGNoRXhwciggQXNzZXJ0aW9uSGFuZGxlciYgaGFuZGxlciwgc3RkOjpzdHJpbmcgY29uc3QmIHN0ciwgU3RyaW5nUmVmIG1hdGNoZXJTdHJpbmcgICkgeworICAgIHZvaWQgaGFuZGxlRXhjZXB0aW9uTWF0Y2hFeHByKCBBc3NlcnRpb25IYW5kbGVyJiBoYW5kbGVyLCBzdGQ6OnN0cmluZyBjb25zdCYgc3RyLCBTdHJpbmdSZWYgY29uc3QmIG1hdGNoZXJTdHJpbmcgICkgewogICAgICAgICBoYW5kbGVFeGNlcHRpb25NYXRjaEV4cHIoIGhhbmRsZXIsIE1hdGNoZXJzOjpFcXVhbHMoIHN0ciApLCBtYXRjaGVyU3RyaW5nICk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2Fzc2VydGlvbmhhbmRsZXIuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYXNzZXJ0aW9uaGFuZGxlci5oCmluZGV4IGNhZGM3OGYuLjMwODllNjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYXNzZXJ0aW9uaGFuZGxlci5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYXNzZXJ0aW9uaGFuZGxlci5oCkBAIC00OSw3ICs0OSw3IEBACiAKICAgICBwdWJsaWM6CiAgICAgICAgIEFzc2VydGlvbkhhbmRsZXIKLSAgICAgICAgICAgICggICBTdHJpbmdSZWYgbWFjcm9OYW1lLAorICAgICAgICAgICAgKCAgIFN0cmluZ1JlZiBjb25zdCYgbWFjcm9OYW1lLAogICAgICAgICAgICAgICAgIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbywKICAgICAgICAgICAgICAgICBTdHJpbmdSZWYgY2FwdHVyZWRFeHByZXNzaW9uLAogICAgICAgICAgICAgICAgIFJlc3VsdERpc3Bvc2l0aW9uOjpGbGFncyByZXN1bHREaXNwb3NpdGlvbiApOwpAQCAtODEsNyArODEsNyBAQAogICAgICAgICBhdXRvIGFsbG93VGhyb3dzKCkgY29uc3QgLT4gYm9vbDsKICAgICB9OwogCi0gICAgdm9pZCBoYW5kbGVFeGNlcHRpb25NYXRjaEV4cHIoIEFzc2VydGlvbkhhbmRsZXImIGhhbmRsZXIsIHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIsIFN0cmluZ1JlZiBtYXRjaGVyU3RyaW5nICk7CisgICAgdm9pZCBoYW5kbGVFeGNlcHRpb25NYXRjaEV4cHIoIEFzc2VydGlvbkhhbmRsZXImIGhhbmRsZXIsIHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIsIFN0cmluZ1JlZiBjb25zdCYgbWF0Y2hlclN0cmluZyApOwogCiB9IC8vIG5hbWVzcGFjZSBDYXRjaAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2Fzc2VydGlvbnJlc3VsdC5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2Fzc2VydGlvbnJlc3VsdC5jcHAKaW5kZXggZWMzMmM2Ni4uNGNlMDcxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9hc3NlcnRpb25yZXN1bHQuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYXNzZXJ0aW9ucmVzdWx0LmNwcApAQCAtNjUsOSArNjUsOSBAQAogICAgICAgICAgICAgZXhwciA9IG1faW5mby5jYXB0dXJlZEV4cHJlc3Npb247CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgZXhwci5yZXNlcnZlKCBtX2luZm8ubWFjcm9OYW1lLnNpemUoKSArIG1faW5mby5jYXB0dXJlZEV4cHJlc3Npb24uc2l6ZSgpICsgNCApOwotICAgICAgICAgICAgZXhwciArPSBtX2luZm8ubWFjcm9OYW1lLmNfc3RyKCk7CisgICAgICAgICAgICBleHByICs9IG1faW5mby5tYWNyb05hbWU7CiAgICAgICAgICAgICBleHByICs9ICIoICI7Ci0gICAgICAgICAgICBleHByICs9IG1faW5mby5jYXB0dXJlZEV4cHJlc3Npb24uY19zdHIoKTsKKyAgICAgICAgICAgIGV4cHIgKz0gbV9pbmZvLmNhcHR1cmVkRXhwcmVzc2lvbjsKICAgICAgICAgICAgIGV4cHIgKz0gIiApIjsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gZXhwcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY2FwdHVyZS5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NhcHR1cmUuaHBwCmluZGV4IDI5YWQzMjYuLjUxZmEwMzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY2FwdHVyZS5ocHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jYXB0dXJlLmhwcApAQCAtOSw4ICs5LDkgQEAKICNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX0NBUFRVUkVfSFBQX0lOQ0xVREVECiAKICNpbmNsdWRlICJjYXRjaF9hc3NlcnRpb25oYW5kbGVyLmgiCi0jaW5jbHVkZSAiY2F0Y2hfbWVzc2FnZS5oIgogI2luY2x1ZGUgImNhdGNoX2ludGVyZmFjZXNfY2FwdHVyZS5oIgorI2luY2x1ZGUgImNhdGNoX21lc3NhZ2UuaCIKKyNpbmNsdWRlICJjYXRjaF9zdHJpbmdyZWYuaCIKIAogI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFKQogCkBAIC0yMCwxNCArMjEsNyBAQAogICAjZGVmaW5lIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWSguLi4pICJEaXNhYmxlZCBieSBDQVRDSF9DT05GSUdfRElTQUJMRV9TVFJJTkdJRklDQVRJT04iCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0ZBU1RfQ09NUElMRSkKLQotc3RydWN0IENvbnZlcnRUb0FueSB7Ci0gIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgotICBvcGVyYXRvciBUKCkgewotICAgIHJldHVybiBUe307Ci0gIH0KLX07CisjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRkFTVF9DT01QSUxFKSB8fCBkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpCiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIEFub3RoZXIgd2F5IHRvIHNwZWVkLXVwIGNvbXBpbGF0aW9uIGlzIHRvIG9taXQgbG9jYWwgdHJ5LWNhdGNoIGZvciBSRVFVSVJFKgpAQCAtMzcsOCArMzEsOCBAQAogCiAjZWxzZSAvLyBDQVRDSF9DT05GSUdfRkFTVF9DT01QSUxFCiAKLSNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVFJZIENBVENIX0lOVEVSTkFMX1RSWQotI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9DQVRDSCggaGFuZGxlciApIENBVENIX0lOVEVSTkFMX0NBVENIX0FMTCgpIHsgaGFuZGxlci5oYW5kbGVVbmV4cGVjdGVkSW5mbGlnaHRFeGNlcHRpb24oKTsgfQorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9UUlkgdHJ5CisjZGVmaW5lIElOVEVSTkFMX0NBVENIX0NBVENIKCBoYW5kbGVyICkgY2F0Y2goLi4uKSB7IGhhbmRsZXIuaGFuZGxlVW5leHBlY3RlZEluZmxpZ2h0RXhjZXB0aW9uKCk7IH0KIAogI2VuZGlmCiAKQEAgLTQ3LDE0ICs0MSwxNCBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URVNUKCBtYWNyb05hbWUsIHJlc3VsdERpc3Bvc2l0aW9uLCAuLi4gKSBcCiAgICAgZG8geyBcCi0gICAgICAgIENhdGNoOjpBc3NlcnRpb25IYW5kbGVyIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciggbWFjcm9OYW1lLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKF9fVkFfQVJHU19fKSwgcmVzdWx0RGlzcG9zaXRpb24gKTsgXAorICAgICAgICBDYXRjaDo6QXNzZXJ0aW9uSGFuZGxlciBjYXRjaEFzc2VydGlvbkhhbmRsZXIoIG1hY3JvTmFtZSMjX2NhdGNoX3NyLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKF9fVkFfQVJHU19fKSwgcmVzdWx0RGlzcG9zaXRpb24gKTsgXAogICAgICAgICBJTlRFUk5BTF9DQVRDSF9UUlkgeyBcCiAgICAgICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19QQVJFTlRIRVNFU19XQVJOSU5HUyBcCiAgICAgICAgICAgICBjYXRjaEFzc2VydGlvbkhhbmRsZXIuaGFuZGxlRXhwciggQ2F0Y2g6OkRlY29tcG9zZXIoKSA8PSBfX1ZBX0FSR1NfXyApOyBcCiAgICAgICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX1BBUkVOVEhFU0VTX1dBUk5JTkdTIFwKICAgICAgICAgfSBJTlRFUk5BTF9DQVRDSF9DQVRDSCggY2F0Y2hBc3NlcnRpb25IYW5kbGVyICkgXAogICAgICAgICBJTlRFUk5BTF9DQVRDSF9SRUFDVCggY2F0Y2hBc3NlcnRpb25IYW5kbGVyICkgXAotICAgIH0gd2hpbGUoICh2b2lkKTAsIGZhbHNlICYmIHN0YXRpY19jYXN0PGJvb2w+KCAhIShfX1ZBX0FSR1NfXykgKSApIC8vIHRoZSBleHByZXNzaW9uIGhlcmUgaXMgbmV2ZXIgZXZhbHVhdGVkIGF0IHJ1bnRpbWUgYnV0IGl0IGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gZ2l2ZSBpdCBhIGxvb2sKKyAgICB9IHdoaWxlKCAodm9pZCkwLCAoZmFsc2UpICYmIHN0YXRpY19jYXN0PGJvb2w+KCAhIShfX1ZBX0FSR1NfXykgKSApIC8vIHRoZSBleHByZXNzaW9uIGhlcmUgaXMgbmV2ZXIgZXZhbHVhdGVkIGF0IHJ1bnRpbWUgYnV0IGl0IGZvcmNlcyB0aGUgY29tcGlsZXIgdG8gZ2l2ZSBpdCBhIGxvb2sKICAgICAvLyBUaGUgZG91YmxlIG5lZ2F0aW9uIHNpbGVuY2VzIE1TVkMncyBDNDgwMCB3YXJuaW5nLCB0aGUgc3RhdGljX2Nhc3QgZm9yY2VzIHNob3J0LWNpcmN1aXQgZXZhbHVhdGlvbiBpZiB0aGUgdHlwZSBoYXMgb3ZlcmxvYWRlZCAmJi4KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtNjcsMTUgKzYxLDIzIEBACiAgICAgSU5URVJOQUxfQ0FUQ0hfVEVTVCggbWFjcm9OYW1lLCByZXN1bHREaXNwb3NpdGlvbiwgX19WQV9BUkdTX18gKTsgXAogICAgIGlmKCAhQ2F0Y2g6OmdldFJlc3VsdENhcHR1cmUoKS5sYXN0QXNzZXJ0aW9uUGFzc2VkKCkgKQogCisjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TKQorCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX05PX1RIUk9XKCBtYWNyb05hbWUsIHJlc3VsdERpc3Bvc2l0aW9uLCAuLi4gKQorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9USFJPV1MoIG1hY3JvTmFtZSwgcmVzdWx0RGlzcG9zaXRpb24sIC4uLiApCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RIUk9XU19BUyggbWFjcm9OYW1lLCBleGNlcHRpb25UeXBlLCByZXN1bHREaXNwb3NpdGlvbiwgZXhwciApCisKKyNlbHNlCisKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTk9fVEhST1coIG1hY3JvTmFtZSwgcmVzdWx0RGlzcG9zaXRpb24sIC4uLiApIFwKICAgICBkbyB7IFwKLSAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoX19WQV9BUkdTX18pLCByZXN1bHREaXNwb3NpdGlvbiApOyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1RSWSB7IFwKKyAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUjI19jYXRjaF9zciwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShfX1ZBX0FSR1NfXyksIHJlc3VsdERpc3Bvc2l0aW9uICk7IFwKKyAgICAgICAgdHJ5IHsgXAogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4oX19WQV9BUkdTX18pOyBcCiAgICAgICAgICAgICBjYXRjaEFzc2VydGlvbkhhbmRsZXIuaGFuZGxlRXhjZXB0aW9uTm90VGhyb3duQXNFeHBlY3RlZCgpOyBcCiAgICAgICAgIH0gXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9DQVRDSF9BTEwoKSB7IFwKKyAgICAgICAgY2F0Y2goIC4uLiApIHsgXAogICAgICAgICAgICAgY2F0Y2hBc3NlcnRpb25IYW5kbGVyLmhhbmRsZVVuZXhwZWN0ZWRJbmZsaWdodEV4Y2VwdGlvbigpOyBcCiAgICAgICAgIH0gXAogICAgICAgICBJTlRFUk5BTF9DQVRDSF9SRUFDVCggY2F0Y2hBc3NlcnRpb25IYW5kbGVyICkgXApAQCAtODQsNyArODYsNyBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9USFJPV1MoIG1hY3JvTmFtZSwgcmVzdWx0RGlzcG9zaXRpb24sIC4uLiApIFwKICAgICBkbyB7IFwKLSAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoX19WQV9BUkdTX18pLCByZXN1bHREaXNwb3NpdGlvbik7IFwKKyAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUjI19jYXRjaF9zciwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShfX1ZBX0FSR1NfXyksIHJlc3VsdERpc3Bvc2l0aW9uKTsgXAogICAgICAgICBpZiggY2F0Y2hBc3NlcnRpb25IYW5kbGVyLmFsbG93VGhyb3dzKCkgKSBcCiAgICAgICAgICAgICB0cnkgeyBcCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4oX19WQV9BUkdTX18pOyBcCkBAIC0xMDEsNyArMTAzLDcgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEhST1dTX0FTKCBtYWNyb05hbWUsIGV4Y2VwdGlvblR5cGUsIHJlc3VsdERpc3Bvc2l0aW9uLCBleHByICkgXAogICAgIGRvIHsgXAotICAgICAgICBDYXRjaDo6QXNzZXJ0aW9uSGFuZGxlciBjYXRjaEFzc2VydGlvbkhhbmRsZXIoIG1hY3JvTmFtZSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShleHByKSAiLCAiIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShleGNlcHRpb25UeXBlKSwgcmVzdWx0RGlzcG9zaXRpb24gKTsgXAorICAgICAgICBDYXRjaDo6QXNzZXJ0aW9uSGFuZGxlciBjYXRjaEFzc2VydGlvbkhhbmRsZXIoIG1hY3JvTmFtZSMjX2NhdGNoX3NyLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKGV4cHIpICIsICIgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKGV4Y2VwdGlvblR5cGUpLCByZXN1bHREaXNwb3NpdGlvbiApOyBcCiAgICAgICAgIGlmKCBjYXRjaEFzc2VydGlvbkhhbmRsZXIuYWxsb3dUaHJvd3MoKSApIFwKICAgICAgICAgICAgIHRyeSB7IFwKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPihleHByKTsgXApAQCAtMTE4LDMxICsxMjAsNDEgQEAKICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfUkVBQ1QoIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciApIFwKICAgICB9IHdoaWxlKCBmYWxzZSApCiAKKyNlbmRpZiAgLy8gQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUwogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX01TRyggbWFjcm9OYW1lLCBtZXNzYWdlVHlwZSwgcmVzdWx0RGlzcG9zaXRpb24sIC4uLiApIFwKICAgICBkbyB7IFwKLSAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCAiIiwgcmVzdWx0RGlzcG9zaXRpb24gKTsgXAorICAgICAgICBDYXRjaDo6QXNzZXJ0aW9uSGFuZGxlciBjYXRjaEFzc2VydGlvbkhhbmRsZXIoIG1hY3JvTmFtZSMjX2NhdGNoX3NyLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ2F0Y2g6OlN0cmluZ1JlZigpLCByZXN1bHREaXNwb3NpdGlvbiApOyBcCiAgICAgICAgIGNhdGNoQXNzZXJ0aW9uSGFuZGxlci5oYW5kbGVNZXNzYWdlKCBtZXNzYWdlVHlwZSwgKCBDYXRjaDo6TWVzc2FnZVN0cmVhbSgpIDw8IF9fVkFfQVJHU19fICsgOjpDYXRjaDo6U3RyZWFtRW5kU3RvcCgpICkubV9zdHJlYW0uc3RyKCkgKTsgXAogICAgICAgICBJTlRFUk5BTF9DQVRDSF9SRUFDVCggY2F0Y2hBc3NlcnRpb25IYW5kbGVyICkgXAogICAgIH0gd2hpbGUoIGZhbHNlICkKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9DQVBUVVJFKCB2YXJOYW1lLCBtYWNyb05hbWUsIC4uLiApIFwKKyAgICBhdXRvIHZhck5hbWUgPSBDYXRjaDo6Q2FwdHVyZXIoIG1hY3JvTmFtZSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENhdGNoOjpSZXN1bHRXYXM6OkluZm8sICNfX1ZBX0FSR1NfXyApOyBcCisgICAgdmFyTmFtZS5jYXB0dXJlVmFsdWVzKCAwLCBfX1ZBX0FSR1NfXyApCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfSU5GTyggbWFjcm9OYW1lLCBsb2cgKSBcCi0gICAgQ2F0Y2g6OlNjb3BlZE1lc3NhZ2UgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIHNjb3BlZE1lc3NhZ2UgKSggQ2F0Y2g6Ok1lc3NhZ2VCdWlsZGVyKCBtYWNyb05hbWUsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDYXRjaDo6UmVzdWx0V2FzOjpJbmZvICkgPDwgbG9nICk7CisgICAgQ2F0Y2g6OlNjb3BlZE1lc3NhZ2UgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIHNjb3BlZE1lc3NhZ2UgKSggQ2F0Y2g6Ok1lc3NhZ2VCdWlsZGVyKCBtYWNyb05hbWUjI19jYXRjaF9zciwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENhdGNoOjpSZXN1bHRXYXM6OkluZm8gKSA8PCBsb2cgKTsKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9VTlNDT1BFRF9JTkZPKCBtYWNyb05hbWUsIGxvZyApIFwKKyAgICBDYXRjaDo6Z2V0UmVzdWx0Q2FwdHVyZSgpLmVtcGxhY2VVbnNjb3BlZE1lc3NhZ2UoIENhdGNoOjpNZXNzYWdlQnVpbGRlciggbWFjcm9OYW1lIyNfY2F0Y2hfc3IsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDYXRjaDo6UmVzdWx0V2FzOjpJbmZvICkgPDwgbG9nICkKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gQWx0aG91Z2ggdGhpcyBpcyBtYXRjaGVyLWJhc2VkLCBpdCBjYW4gYmUgdXNlZCB3aXRoIGp1c3QgYSBzdHJpbmcKICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEhST1dTX1NUUl9NQVRDSEVTKCBtYWNyb05hbWUsIHJlc3VsdERpc3Bvc2l0aW9uLCBtYXRjaGVyLCAuLi4gKSBcCiAgICAgZG8geyBcCi0gICAgICAgIENhdGNoOjpBc3NlcnRpb25IYW5kbGVyIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciggbWFjcm9OYW1lLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKF9fVkFfQVJHU19fKSAiLCAiIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShtYXRjaGVyKSwgcmVzdWx0RGlzcG9zaXRpb24gKTsgXAorICAgICAgICBDYXRjaDo6QXNzZXJ0aW9uSGFuZGxlciBjYXRjaEFzc2VydGlvbkhhbmRsZXIoIG1hY3JvTmFtZSMjX2NhdGNoX3NyLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKF9fVkFfQVJHU19fKSAiLCAiIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShtYXRjaGVyKSwgcmVzdWx0RGlzcG9zaXRpb24gKTsgXAogICAgICAgICBpZiggY2F0Y2hBc3NlcnRpb25IYW5kbGVyLmFsbG93VGhyb3dzKCkgKSBcCiAgICAgICAgICAgICB0cnkgeyBcCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4oX19WQV9BUkdTX18pOyBcCiAgICAgICAgICAgICAgICAgY2F0Y2hBc3NlcnRpb25IYW5kbGVyLmhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb25Ob3RUaHJvd24oKTsgXAogICAgICAgICAgICAgfSBcCiAgICAgICAgICAgICBjYXRjaCggLi4uICkgeyBcCi0gICAgICAgICAgICAgICAgQ2F0Y2g6OmhhbmRsZUV4Y2VwdGlvbk1hdGNoRXhwciggY2F0Y2hBc3NlcnRpb25IYW5kbGVyLCBtYXRjaGVyLCAjbWF0Y2hlciApOyBcCisgICAgICAgICAgICAgICAgQ2F0Y2g6OmhhbmRsZUV4Y2VwdGlvbk1hdGNoRXhwciggY2F0Y2hBc3NlcnRpb25IYW5kbGVyLCBtYXRjaGVyLCAjbWF0Y2hlciMjX2NhdGNoX3NyICk7IFwKICAgICAgICAgICAgIH0gXAogICAgICAgICBlbHNlIFwKICAgICAgICAgICAgIGNhdGNoQXNzZXJ0aW9uSGFuZGxlci5oYW5kbGVUaHJvd2luZ0NhbGxTa2lwcGVkKCk7IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY2FwdHVyZV9tYXRjaGVycy5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NhcHR1cmVfbWF0Y2hlcnMuY3BwCmluZGV4IDdlZjE1OTcuLjZmMzIwNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY2FwdHVyZV9tYXRjaGVycy5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jYXB0dXJlX21hdGNoZXJzLmNwcApAQCAtMTMsOSArMTMsOSBAQAogICAgIHVzaW5nIFN0cmluZ01hdGNoZXIgPSBNYXRjaGVyczo6SW1wbDo6TWF0Y2hlckJhc2U8c3RkOjpzdHJpbmc+OwogCiAgICAgLy8gVGhpcyBpcyB0aGUgZ2VuZXJhbCBvdmVybG9hZCB0aGF0IHRha2VzIGEgYW55IHN0cmluZyBtYXRjaGVyCi0gICAgLy8gVGhlcmUgaXMgYW5vdGhlciBvdmVybG9hZCwgaW4gY2F0Y2hfYXNzZXJ0aW5oYW5kbGVyLmgvLmNwcCwgdGhhdCBvbmx5IHRha2VzIGEgc3RyaW5nIGFuZCBpbmZlcnMKKyAgICAvLyBUaGVyZSBpcyBhbm90aGVyIG92ZXJsb2FkLCBpbiBjYXRjaF9hc3NlcnRpb25oYW5kbGVyLmgvLmNwcCwgdGhhdCBvbmx5IHRha2VzIGEgc3RyaW5nIGFuZCBpbmZlcnMKICAgICAvLyB0aGUgRXF1YWxzIG1hdGNoZXIgKHNvIHRoZSBoZWFkZXIgZG9lcyBub3QgbWVudGlvbiBtYXRjaGVycykKLSAgICB2b2lkIGhhbmRsZUV4Y2VwdGlvbk1hdGNoRXhwciggQXNzZXJ0aW9uSGFuZGxlciYgaGFuZGxlciwgU3RyaW5nTWF0Y2hlciBjb25zdCYgbWF0Y2hlciwgU3RyaW5nUmVmIG1hdGNoZXJTdHJpbmcgICkgeworICAgIHZvaWQgaGFuZGxlRXhjZXB0aW9uTWF0Y2hFeHByKCBBc3NlcnRpb25IYW5kbGVyJiBoYW5kbGVyLCBTdHJpbmdNYXRjaGVyIGNvbnN0JiBtYXRjaGVyLCBTdHJpbmdSZWYgY29uc3QmIG1hdGNoZXJTdHJpbmcgICkgewogICAgICAgICBzdGQ6OnN0cmluZyBleGNlcHRpb25NZXNzYWdlID0gQ2F0Y2g6OnRyYW5zbGF0ZUFjdGl2ZUV4Y2VwdGlvbigpOwogICAgICAgICBNYXRjaEV4cHI8c3RkOjpzdHJpbmcsIFN0cmluZ01hdGNoZXIgY29uc3QmPiBleHByKCBleGNlcHRpb25NZXNzYWdlLCBtYXRjaGVyLCBtYXRjaGVyU3RyaW5nICk7CiAgICAgICAgIGhhbmRsZXIuaGFuZGxlRXhwciggZXhwciApOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jYXB0dXJlX21hdGNoZXJzLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NhcHR1cmVfbWF0Y2hlcnMuaAppbmRleCAzYWViMjc2Li4wY2VkMDFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NhcHR1cmVfbWF0Y2hlcnMuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NhcHR1cmVfbWF0Y2hlcnMuaApAQCAtMTEsOCArMTEsMTAgQEAKICNpbmNsdWRlICJjYXRjaF9jYXB0dXJlLmhwcCIKICNpbmNsdWRlICJjYXRjaF9tYXRjaGVycy5oIgogI2luY2x1ZGUgImNhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmgiCisjaW5jbHVkZSAiY2F0Y2hfbWF0Y2hlcnNfZ2VuZXJpYy5ocHAiCiAjaW5jbHVkZSAiY2F0Y2hfbWF0Y2hlcnNfc3RyaW5nLmgiCiAjaW5jbHVkZSAiY2F0Y2hfbWF0Y2hlcnNfdmVjdG9yLmgiCisjaW5jbHVkZSAiY2F0Y2hfc3RyaW5ncmVmLmgiCiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKQEAgLTIyLDcgKzI0LDcgQEAKICAgICAgICAgTWF0Y2hlclQgbV9tYXRjaGVyOwogICAgICAgICBTdHJpbmdSZWYgbV9tYXRjaGVyU3RyaW5nOwogICAgIHB1YmxpYzoKLSAgICAgICAgTWF0Y2hFeHByKCBBcmdUIGNvbnN0JiBhcmcsIE1hdGNoZXJUIGNvbnN0JiBtYXRjaGVyLCBTdHJpbmdSZWYgbWF0Y2hlclN0cmluZyApCisgICAgICAgIE1hdGNoRXhwciggQXJnVCBjb25zdCYgYXJnLCBNYXRjaGVyVCBjb25zdCYgbWF0Y2hlciwgU3RyaW5nUmVmIGNvbnN0JiBtYXRjaGVyU3RyaW5nICkKICAgICAgICAgOiAgIElUcmFuc2llbnRFeHByZXNzaW9ueyB0cnVlLCBtYXRjaGVyLm1hdGNoKCBhcmcgKSB9LAogICAgICAgICAgICAgbV9hcmcoIGFyZyApLAogICAgICAgICAgICAgbV9tYXRjaGVyKCBtYXRjaGVyICksCkBAIC00MSwxMCArNDMsMTAgQEAKIAogICAgIHVzaW5nIFN0cmluZ01hdGNoZXIgPSBNYXRjaGVyczo6SW1wbDo6TWF0Y2hlckJhc2U8c3RkOjpzdHJpbmc+OwogCi0gICAgdm9pZCBoYW5kbGVFeGNlcHRpb25NYXRjaEV4cHIoIEFzc2VydGlvbkhhbmRsZXImIGhhbmRsZXIsIFN0cmluZ01hdGNoZXIgY29uc3QmIG1hdGNoZXIsIFN0cmluZ1JlZiBtYXRjaGVyU3RyaW5nICApOworICAgIHZvaWQgaGFuZGxlRXhjZXB0aW9uTWF0Y2hFeHByKCBBc3NlcnRpb25IYW5kbGVyJiBoYW5kbGVyLCBTdHJpbmdNYXRjaGVyIGNvbnN0JiBtYXRjaGVyLCBTdHJpbmdSZWYgY29uc3QmIG1hdGNoZXJTdHJpbmcgICk7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBBcmdULCB0eXBlbmFtZSBNYXRjaGVyVD4KLSAgICBhdXRvIG1ha2VNYXRjaEV4cHIoIEFyZ1QgY29uc3QmIGFyZywgTWF0Y2hlclQgY29uc3QmIG1hdGNoZXIsIFN0cmluZ1JlZiBtYXRjaGVyU3RyaW5nICApIC0+IE1hdGNoRXhwcjxBcmdULCBNYXRjaGVyVD4geworICAgIGF1dG8gbWFrZU1hdGNoRXhwciggQXJnVCBjb25zdCYgYXJnLCBNYXRjaGVyVCBjb25zdCYgbWF0Y2hlciwgU3RyaW5nUmVmIGNvbnN0JiBtYXRjaGVyU3RyaW5nICApIC0+IE1hdGNoRXhwcjxBcmdULCBNYXRjaGVyVD4gewogICAgICAgICByZXR1cm4gTWF0Y2hFeHByPEFyZ1QsIE1hdGNoZXJUPiggYXJnLCBtYXRjaGVyLCBtYXRjaGVyU3RyaW5nICk7CiAgICAgfQogCkBAIC01NCw5ICs1Niw5IEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjZGVmaW5lIElOVEVSTkFMX0NIRUNLX1RIQVQoIG1hY3JvTmFtZSwgbWF0Y2hlciwgcmVzdWx0RGlzcG9zaXRpb24sIGFyZyApIFwKICAgICBkbyB7IFwKLSAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoYXJnKSAiLCAiIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShtYXRjaGVyKSwgcmVzdWx0RGlzcG9zaXRpb24gKTsgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9UUlkgeyBcCi0gICAgICAgICAgICBjYXRjaEFzc2VydGlvbkhhbmRsZXIuaGFuZGxlRXhwciggQ2F0Y2g6Om1ha2VNYXRjaEV4cHIoIGFyZywgbWF0Y2hlciwgI21hdGNoZXIgKSApOyBcCisgICAgICAgIENhdGNoOjpBc3NlcnRpb25IYW5kbGVyIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciggbWFjcm9OYW1lIyNfY2F0Y2hfc3IsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoYXJnKSAiLCAiIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShtYXRjaGVyKSwgcmVzdWx0RGlzcG9zaXRpb24gKTsgXAorICAgICAgICBJTlRFUk5BTF9DQVRDSF9UUlkgeyBcCisgICAgICAgICAgICBjYXRjaEFzc2VydGlvbkhhbmRsZXIuaGFuZGxlRXhwciggQ2F0Y2g6Om1ha2VNYXRjaEV4cHIoIGFyZywgbWF0Y2hlciwgI21hdGNoZXIjI19jYXRjaF9zciApICk7IFwKICAgICAgICAgfSBJTlRFUk5BTF9DQVRDSF9DQVRDSCggY2F0Y2hBc3NlcnRpb25IYW5kbGVyICkgXAogICAgICAgICBJTlRFUk5BTF9DQVRDSF9SRUFDVCggY2F0Y2hBc3NlcnRpb25IYW5kbGVyICkgXAogICAgIH0gd2hpbGUoIGZhbHNlICkKQEAgLTY1LDE0ICs2NywxNCBAQAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9USFJPV1NfTUFUQ0hFUyggbWFjcm9OYW1lLCBleGNlcHRpb25UeXBlLCByZXN1bHREaXNwb3NpdGlvbiwgbWF0Y2hlciwgLi4uICkgXAogICAgIGRvIHsgXAotICAgICAgICBDYXRjaDo6QXNzZXJ0aW9uSGFuZGxlciBjYXRjaEFzc2VydGlvbkhhbmRsZXIoIG1hY3JvTmFtZSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShfX1ZBX0FSR1NfXykgIiwgIiBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoZXhjZXB0aW9uVHlwZSkgIiwgIiBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkobWF0Y2hlciksIHJlc3VsdERpc3Bvc2l0aW9uICk7IFwKKyAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUjI19jYXRjaF9zciwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShfX1ZBX0FSR1NfXykgIiwgIiBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoZXhjZXB0aW9uVHlwZSkgIiwgIiBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkobWF0Y2hlciksIHJlc3VsdERpc3Bvc2l0aW9uICk7IFwKICAgICAgICAgaWYoIGNhdGNoQXNzZXJ0aW9uSGFuZGxlci5hbGxvd1Rocm93cygpICkgXAogICAgICAgICAgICAgdHJ5IHsgXAogICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZvaWQ+KF9fVkFfQVJHU19fICk7IFwKICAgICAgICAgICAgICAgICBjYXRjaEFzc2VydGlvbkhhbmRsZXIuaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbk5vdFRocm93bigpOyBcCiAgICAgICAgICAgICB9IFwKICAgICAgICAgICAgIGNhdGNoKCBleGNlcHRpb25UeXBlIGNvbnN0JiBleCApIHsgXAotICAgICAgICAgICAgICAgIGNhdGNoQXNzZXJ0aW9uSGFuZGxlci5oYW5kbGVFeHByKCBDYXRjaDo6bWFrZU1hdGNoRXhwciggZXgsIG1hdGNoZXIsICNtYXRjaGVyICkgKTsgXAorICAgICAgICAgICAgICAgIGNhdGNoQXNzZXJ0aW9uSGFuZGxlci5oYW5kbGVFeHByKCBDYXRjaDo6bWFrZU1hdGNoRXhwciggZXgsIG1hdGNoZXIsICNtYXRjaGVyIyNfY2F0Y2hfc3IgKSApOyBcCiAgICAgICAgICAgICB9IFwKICAgICAgICAgICAgIGNhdGNoKCAuLi4gKSB7IFwKICAgICAgICAgICAgICAgICBjYXRjaEFzc2VydGlvbkhhbmRsZXIuaGFuZGxlVW5leHBlY3RlZEluZmxpZ2h0RXhjZXB0aW9uKCk7IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29tbWFuZGxpbmUuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb21tYW5kbGluZS5jcHAKaW5kZXggYzAyMzFkMS4uNjY3NTllYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb21tYW5kbGluZS5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb21tYW5kbGluZS5jcHAKQEAgLTEwLDYgKzEwLDkgQEAKIAogI2luY2x1ZGUgImNhdGNoX3N0cmluZ19tYW5pcC5oIgogCisjaW5jbHVkZSAiY2F0Y2hfaW50ZXJmYWNlc19yZWdpc3RyeV9odWIuaCIKKyNpbmNsdWRlICJjYXRjaF9pbnRlcmZhY2VzX3JlcG9ydGVyLmgiCisKICNpbmNsdWRlIDxmc3RyZWFtPgogI2luY2x1ZGUgPGN0aW1lPgogCkBAIC0yMCw5ICsyMywxOSBAQAogICAgICAgICB1c2luZyBuYW1lc3BhY2UgY2xhcmE7CiAKICAgICAgICAgYXV0byBjb25zdCBzZXRXYXJuaW5nID0gWyZdKCBzdGQ6OnN0cmluZyBjb25zdCYgd2FybmluZyApIHsKLSAgICAgICAgICAgICAgICBpZiggd2FybmluZyAhPSAiTm9Bc3NlcnRpb25zIiApCisgICAgICAgICAgICAgICAgYXV0byB3YXJuaW5nU2V0ID0gWyZdKCkgeworICAgICAgICAgICAgICAgICAgICBpZiggd2FybmluZyA9PSAiTm9Bc3NlcnRpb25zIiApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2FybkFib3V0OjpOb0Fzc2VydGlvbnM7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB3YXJuaW5nID09ICJOb1Rlc3RzIiApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2FybkFib3V0OjpOb1Rlc3RzOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXYXJuQWJvdXQ6Ok5vdGhpbmc7CisgICAgICAgICAgICAgICAgfSgpOworCisgICAgICAgICAgICAgICAgaWYgKHdhcm5pbmdTZXQgPT0gV2FybkFib3V0OjpOb3RoaW5nKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VyUmVzdWx0OjpydW50aW1lRXJyb3IoICJVbnJlY29nbmlzZWQgd2FybmluZzogJyIgKyB3YXJuaW5nICsgIiciICk7Ci0gICAgICAgICAgICAgICAgY29uZmlnLndhcm5pbmdzID0gc3RhdGljX2Nhc3Q8V2FybkFib3V0OjpXaGF0PiggY29uZmlnLndhcm5pbmdzIHwgV2FybkFib3V0OjpOb0Fzc2VydGlvbnMgKTsKKyAgICAgICAgICAgICAgICBjb25maWcud2FybmluZ3MgPSBzdGF0aWNfY2FzdDxXYXJuQWJvdXQ6OldoYXQ+KCBjb25maWcud2FybmluZ3MgfCB3YXJuaW5nU2V0ICk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlclJlc3VsdDo6b2soIFBhcnNlUmVzdWx0VHlwZTo6TWF0Y2hlZCApOwogICAgICAgICAgICAgfTsKICAgICAgICAgYXV0byBjb25zdCBsb2FkVGVzdE5hbWVzRnJvbUZpbGUgPSBbJl0oIHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlbmFtZSApIHsKQEAgLTk1LDYgKzEwOCwxOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZXJSZXN1bHQ6OnJ1bnRpbWVFcnJvciggIlVucmVjb2duaXNlZCB2ZXJib3NpdHksICciICsgdmVyYm9zaXR5ICsgIiciICk7CiAgICAgICAgICAgICByZXR1cm4gUGFyc2VyUmVzdWx0OjpvayggUGFyc2VSZXN1bHRUeXBlOjpNYXRjaGVkICk7CiAgICAgICAgIH07CisgICAgICAgIGF1dG8gY29uc3Qgc2V0UmVwb3J0ZXIgPSBbJl0oIHN0ZDo6c3RyaW5nIGNvbnN0JiByZXBvcnRlciApIHsKKyAgICAgICAgICAgIElSZXBvcnRlclJlZ2lzdHJ5OjpGYWN0b3J5TWFwIGNvbnN0JiBmYWN0b3JpZXMgPSBnZXRSZWdpc3RyeUh1YigpLmdldFJlcG9ydGVyUmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKKworICAgICAgICAgICAgYXV0byBsY1JlcG9ydGVyID0gdG9Mb3dlciggcmVwb3J0ZXIgKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gZmFjdG9yaWVzLmZpbmQoIGxjUmVwb3J0ZXIgKTsKKworICAgICAgICAgICAgaWYoIGZhY3Rvcmllcy5lbmQoKSAhPSByZXN1bHQgKQorICAgICAgICAgICAgICAgIGNvbmZpZy5yZXBvcnRlck5hbWUgPSBsY1JlcG9ydGVyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZXJSZXN1bHQ6OnJ1bnRpbWVFcnJvciggIlVucmVjb2duaXplZCByZXBvcnRlciwgJyIgKyByZXBvcnRlciArICInLiBDaGVjayBhdmFpbGFibGUgd2l0aCAtLWxpc3QtcmVwb3J0ZXJzIiApOworICAgICAgICAgICAgcmV0dXJuIFBhcnNlclJlc3VsdDo6b2soIFBhcnNlUmVzdWx0VHlwZTo6TWF0Y2hlZCApOworICAgICAgICB9OwogCiAgICAgICAgIGF1dG8gY2xpCiAgICAgICAgICAgICA9IEV4ZU5hbWUoIGNvbmZpZy5wcm9jZXNzTmFtZSApCkBAIC0xMjAsNyArMTQ1LDcgQEAKICAgICAgICAgICAgIHwgT3B0KCBjb25maWcub3V0cHV0RmlsZW5hbWUsICJmaWxlbmFtZSIgKQogICAgICAgICAgICAgICAgIFsiLW8iXVsiLS1vdXQiXQogICAgICAgICAgICAgICAgICggIm91dHB1dCBmaWxlbmFtZSIgKQotICAgICAgICAgICAgfCBPcHQoIGNvbmZpZy5yZXBvcnRlck5hbWVzLCAibmFtZSIgKQorICAgICAgICAgICAgfCBPcHQoIHNldFJlcG9ydGVyLCAibmFtZSIgKQogICAgICAgICAgICAgICAgIFsiLXIiXVsiLS1yZXBvcnRlciJdCiAgICAgICAgICAgICAgICAgKCAicmVwb3J0ZXIgdG8gdXNlIChkZWZhdWx0cyB0byBjb25zb2xlKSIgKQogICAgICAgICAgICAgfCBPcHQoIGNvbmZpZy5uYW1lLCAibmFtZSIgKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb21tb24uY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb21tb24uY3BwCmluZGV4IGMyNzExNDYuLmIyZmNhNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29tbW9uLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbW1vbi5jcHAKQEAgLTIyLDcgKzIyLDkgQEAKICAgICAgICAgcmV0dXJuIGxpbmUgPT0gb3RoZXIubGluZSAmJiAoZmlsZSA9PSBvdGhlci5maWxlIHx8IHN0ZDo6c3RyY21wKGZpbGUsIG90aGVyLmZpbGUpID09IDApOwogICAgIH0KICAgICBib29sIFNvdXJjZUxpbmVJbmZvOjpvcGVyYXRvciA8ICggU291cmNlTGluZUluZm8gY29uc3QmIG90aGVyICkgY29uc3Qgbm9leGNlcHQgewotICAgICAgICByZXR1cm4gbGluZSA8IG90aGVyLmxpbmUgfHwgKCBsaW5lID09IG90aGVyLmxpbmUgJiYgKHN0ZDo6c3RyY21wKGZpbGUsIG90aGVyLmZpbGUpIDwgMCkpOworICAgICAgICAvLyBXZSBjYW4gYXNzdW1lIHRoYXQgdGhlIHNhbWUgZmlsZSB3aWxsIHVzdWFsbHkgaGF2ZSB0aGUgc2FtZSBwb2ludGVyLgorICAgICAgICAvLyBUaHVzLCBpZiB0aGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCB0aGVyZSBpcyBubyBwb2ludCBpbiBjYWxsaW5nIHRoZSBzdHJjbXAKKyAgICAgICAgcmV0dXJuIGxpbmUgPCBvdGhlci5saW5lIHx8ICggbGluZSA9PSBvdGhlci5saW5lICYmIGZpbGUgIT0gb3RoZXIuZmlsZSAmJiAoc3RkOjpzdHJjbXAoZmlsZSwgb3RoZXIuZmlsZSkgPCAwKSk7CiAgICAgfQogCiAgICAgc3RkOjpvc3RyZWFtJiBvcGVyYXRvciA8PCAoIHN0ZDo6b3N0cmVhbSYgb3MsIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBpbmZvICkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb21tb24uaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29tbW9uLmgKaW5kZXggODI5NGE4Ni4uZTQ3NDU2MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb21tb24uaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbW1vbi5oCkBAIC0yMiw2ICsyMiwxMCBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxjc3RkaW50PgogCisvLyBXZSBuZWVkIGEgZHVtbXkgZ2xvYmFsIG9wZXJhdG9yPDwgc28gd2UgY2FuIGJyaW5nIGl0IGludG8gQ2F0Y2ggbmFtZXNwYWNlIGxhdGVyCitzdHJ1Y3QgQ2F0Y2hfZ2xvYmFsX25hbWVzcGFjZV9kdW1teSB7fTsKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mLCBDYXRjaF9nbG9iYWxfbmFtZXNwYWNlX2R1bW15KTsKKwogbmFtZXNwYWNlIENhdGNoIHsKIAogICAgIHN0cnVjdCBDYXNlU2Vuc2l0aXZlIHsgZW51bSBDaG9pY2UgewpAQCAtNDgsMTAgKzUyLDEwIEBACiAgICAgICAgICAgICBsaW5lKCBfbGluZSApCiAgICAgICAgIHt9CiAKLSAgICAgICAgU291cmNlTGluZUluZm8oIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBvdGhlciApICAgICAgICA9IGRlZmF1bHQ7Ci0gICAgICAgIFNvdXJjZUxpbmVJbmZvKCBTb3VyY2VMaW5lSW5mbyAmJiApICAgICAgICAgICAgICAgICAgPSBkZWZhdWx0OwotICAgICAgICBTb3VyY2VMaW5lSW5mbyYgb3BlcmF0b3IgPSAoIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiApID0gZGVmYXVsdDsKLSAgICAgICAgU291cmNlTGluZUluZm8mIG9wZXJhdG9yID0gKCBTb3VyY2VMaW5lSW5mbyAmJiApICAgICA9IGRlZmF1bHQ7CisgICAgICAgIFNvdXJjZUxpbmVJbmZvKCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgb3RoZXIgKSAgICAgICAgICAgID0gZGVmYXVsdDsKKyAgICAgICAgU291cmNlTGluZUluZm8mIG9wZXJhdG9yID0gKCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgKSAgICAgPSBkZWZhdWx0OworICAgICAgICBTb3VyY2VMaW5lSW5mbyggU291cmNlTGluZUluZm8mJiApICAgICAgICAgICAgICBub2V4Y2VwdCA9IGRlZmF1bHQ7CisgICAgICAgIFNvdXJjZUxpbmVJbmZvJiBvcGVyYXRvciA9ICggU291cmNlTGluZUluZm8mJiApIG5vZXhjZXB0ID0gZGVmYXVsdDsKIAogICAgICAgICBib29sIGVtcHR5KCkgY29uc3Qgbm9leGNlcHQ7CiAgICAgICAgIGJvb2wgb3BlcmF0b3IgPT0gKCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgb3RoZXIgKSBjb25zdCBub2V4Y2VwdDsKQEAgLTYzLDYgKzY3LDExIEBACiAKICAgICBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8ICggc3RkOjpvc3RyZWFtJiBvcywgU291cmNlTGluZUluZm8gY29uc3QmIGluZm8gKTsKIAorICAgIC8vIEJyaW5nIGluIG9wZXJhdG9yPDwgZnJvbSBnbG9iYWwgbmFtZXNwYWNlIGludG8gQ2F0Y2ggbmFtZXNwYWNlCisgICAgLy8gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB0aGUgb3ZlcmxvYWQgb2Ygb3BlcmF0b3I8PCBhYm92ZSBtYWtlcworICAgIC8vIGxvb2t1cCBzdG9wIGF0IG5hbWVzcGFjZSBDYXRjaAorICAgIHVzaW5nIDo6b3BlcmF0b3I8PDsKKwogICAgIC8vIFVzZSB0aGlzIGluIHZhcmlhZGljIHN0cmVhbWluZyBtYWNyb3MgdG8gYWxsb3cKICAgICAvLyAgICA+PiArU3RyZWFtRW5kU3RvcAogICAgIC8vIGFzIHdlbGwgYXMKQEAgLTc0LDQwICs4MywxMCBAQAogICAgIFQgY29uc3QmIG9wZXJhdG9yICsgKCBUIGNvbnN0JiB2YWx1ZSwgU3RyZWFtRW5kU3RvcCApIHsKICAgICAgICAgcmV0dXJuIHZhbHVlOwogICAgIH0KLQotCi0gICAgLy8gQSByZXBsYWNlbWVudCBmb3IgdGhlICJ0aHJvdyIga2V5d29yZCB3aGljaCBpcyBpbGxlZ2FsIHdoZW4KLSAgICAvLyBleGNlcHRpb25zIGFyZSBkaXNhYmxlZCB3aXRoIC1mbm8tZXhjZXB0aW9ucy4KLSAgICBzdHJ1Y3QgRXhjZXB0aW9uIHsKLSAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEU+Ci0gICAgICAgIFtbbm9yZXR1cm5dXSBzdGF0aWMgdm9pZCBkb1Rocm93KEUmJiBlKSB7Ci0jaWYgQ0FUQ0hfQ09ORklHX1VTRV9FWENFUFRJT05TCi0gICAgICAgICAgICB0aHJvdyBzdGQ6OmZvcndhcmQ8RT4oZSk7Ci0jZWxzZQotICAgICAgICAgICAgLy8gInRocm93IiBrZXl3b3JkIGlzIHVuc3VwcG9ydGVkIHdoZW4gZXhjZXB0aW9ucyBhcmUgZGlzYWJsZWQuCi0gICAgICAgICAgICAvLyBJbW1lZGlhdGVseSB0ZXJtaW5hdGUgaW5zdGVhZC4KLSAgICAgICAgICAgICh2b2lkKWU7ICAvLyBlcnJvcjogdW51c2VkIHBhcmFtZXRlciAnZScgWy1XZXJyb3IsLVd1bnVzZWQtcGFyYW1ldGVyXQotICAgICAgICAgICAgc3RkOjp0ZXJtaW5hdGUoKTsKLSNlbmRpZgotICAgICAgICB9Ci0gICAgfTsKIH0KIAogI2RlZmluZSBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTyBcCiAgICAgOjpDYXRjaDo6U291cmNlTGluZUluZm8oIF9fRklMRV9fLCBzdGF0aWNfY2FzdDxzdGQ6OnNpemVfdD4oIF9fTElORV9fICkgKQogCi0jaWYgQ0FUQ0hfQ09ORklHX1VTRV9FWENFUFRJT05TCi0jICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfVFJZIHRyeQotIyAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NBVENIKCB0eXBlLCB2YXIpIGNhdGNoKCB0eXBlIHZhciApCi0jICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ0FUQ0hfVU5OQU1FRCggdHlwZSApIGNhdGNoKCB0eXBlICkKLSMgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DQVRDSF9BTEwoKSBjYXRjaCggLi4uICkKLSNlbHNlCi0vLyAndHJ5JyBhbmQgJ2NhdGNoJyAoYW5kICd0aHJvdycpIGtleXdvcmRzIGFyZSBpbGxlZ2FsIHdpdGggLWZuby1leGNlcHRpb25zLgotIyAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1RSWSBpZiAoKHRydWUpKQotIyAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NBVENIKCB0eXAsIHZhciApIHdoaWxlICgoZmFsc2UpKSBmb3IgKCB0eXBlbmFtZSBzdGQ6OnJlbW92ZV9yZWZlcmVuY2U8dHlwPjo6dHlwZSB2YXIgOyA7ICkKLSMgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DQVRDSF9VTk5BTUVEKCB0eXBlICkgd2hpbGUgKChmYWxzZSkpCi0jICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ0FUQ0hfQUxMKCkgd2hpbGUgKChmYWxzZSkpCi0jZW5kaWYKLQogI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9DT01NT05fSF9JTkNMVURFRAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbXBpbGVyX2NhcGFiaWxpdGllcy5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb21waWxlcl9jYXBhYmlsaXRpZXMuaAppbmRleCAwZWUyZjQ5Li4wMTJiZjQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbXBpbGVyX2NhcGFiaWxpdGllcy5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29tcGlsZXJfY2FwYWJpbGl0aWVzLmgKQEAgLTE0LDYgKzE0LDcgQEAKIC8vIENBVENIX0NPTkZJR19DT1VOVEVSIDogaXMgdGhlIF9fQ09VTlRFUl9fIG1hY3JvIHN1cHBvcnRlZD8KIC8vIENBVENIX0NPTkZJR19XSU5ET1dTX1NFSCA6IGlzIFdpbmRvd3MgU0VIIHN1cHBvcnRlZD8KIC8vIENBVENIX0NPTkZJR19QT1NJWF9TSUdOQUxTIDogYXJlIFBPU0lYIHNpZ25hbHMgc3VwcG9ydGVkPworLy8gQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUyA6IEFyZSBleGNlcHRpb25zIGVuYWJsZWQ/CiAvLyAqKioqKioqKioqKioqKioqCiAvLyBOb3RlIHRvIG1haW50YWluZXJzOiBpZiBuZXcgdG9nZ2xlcyBhcmUgYWRkZWQgcGxlYXNlIGRvY3VtZW50IHRoZW0KIC8vIGluIGNvbmZpZ3VyYXRpb24ubWQsIHRvbwpAQCAtMjQsMTQgKzI1LDE1IEBACiAvLyBNYW55IGZlYXR1cmVzLCBhdCBwb2ludCBvZiBkZXRlY3Rpb24sIGRlZmluZSBhbiBfSU5URVJOQUxfIG1hY3JvLCBzbyB0aGV5CiAvLyBjYW4gYmUgY29tYmluZWQsIGVuLW1hc3MsIHdpdGggdGhlIF9OT18gZm9ybXMgbGF0ZXIuCiAKKyNpbmNsdWRlICJjYXRjaF9wbGF0Zm9ybS5oIgogCiAjaWZkZWYgX19jcGx1c3BsdXMKIAotIyAgaWYgX19jcGx1c3BsdXMgPj0gMjAxNDAyTAorIyAgaWYgKF9fY3BsdXNwbHVzID49IDIwMTQwMkwpIHx8IChkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPj0gMjAxNDAyTCkKICMgICAgZGVmaW5lIENBVENIX0NQUDE0X09SX0dSRUFURVIKICMgIGVuZGlmCiAKLSMgIGlmIF9fY3BsdXNwbHVzID49IDIwMTcwM0wKKyMgIGlmIChfX2NwbHVzcGx1cyA+PSAyMDE3MDNMKSB8fCAoZGVmaW5lZChfTVNWQ19MQU5HKSAmJiBfTVNWQ19MQU5HID49IDIwMTcwM0wpCiAjICAgIGRlZmluZSBDQVRDSF9DUFAxN19PUl9HUkVBVEVSCiAjICBlbmRpZgogCkBAIC01NiwyNSArNTgsMjUgQEAKICMgICAgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfUEFSRU5USEVTRVNfV0FSTklOR1MgXAogICAgICAgICAgICAgX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgcG9wIiApCiAKLSNpZiAgIV9faGFzX2ZlYXR1cmUoY3h4X3J0dGkpCi0jICAgIGRlZmluZSBDQVRDSF9DT05GSUdfVVNFX1JUVEkgMAotI2VuZGlmCi0KLSNpZiAhX19oYXNfZmVhdHVyZShjeHhfZXhjZXB0aW9ucykKLSMgICAgZGVmaW5lIENBVENIX0NPTkZJR19VU0VfRVhDRVBUSU9OUyAwCi0jZW5kaWYKKyMgICAgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUyBcCisgICAgICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBwdXNoIiApIFwKKyAgICAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3VudXNlZC12YXJpYWJsZVwiIiApCisjICAgICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUyBcCisgICAgICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBwb3AiICkKIAogI2VuZGlmIC8vIF9fY2xhbmdfXwogCiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBBc3N1bWUgdGhhdCBub24tV2luZG93cyBwbGF0Zm9ybXMgc3VwcG9ydCBwb3NpeCBzaWduYWxzIGJ5IGRlZmF1bHQKKyNpZiAhZGVmaW5lZChDQVRDSF9QTEFURk9STV9XSU5ET1dTKQorICAgICNkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX1BPU0lYX1NJR05BTFMKKyNlbmRpZgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gV2Uga25vdyBzb21lIGVudmlyb25tZW50cyBub3QgdG8gc3VwcG9ydCBmdWxsIFBPU0lYIHNpZ25hbHMKLSNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19RTlhfXykKLQotIyAgIGlmICFkZWZpbmVkKENBVENIX0NPTkZJR19QT1NJWF9TSUdOQUxTKQotIyAgICAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05PX1BPU0lYX1NJR05BTFMKLSMgICBlbmRpZgotCisjaWYgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9fUU5YX18pIHx8IGRlZmluZWQoX19FTVNDUklQVEVOX18pIHx8IGRlZmluZWQoX19ESkdQUF9fKQorICAgICNkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05PX1BPU0lYX1NJR05BTFMKICNlbmRpZgogCiAjaWZkZWYgX19PUzQwMF9fCkBAIC04MywxMyArODUsMzggQEAKICNlbmRpZgogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gQW5kcm9pZCBzb21laG93IHN0aWxsIGRvZXMgbm90IHN1cHBvcnQgc3RkOjp0b19zdHJpbmcKKyNpZiBkZWZpbmVkKF9fQU5EUk9JRF9fKQorIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05PX0NQUDExX1RPX1NUUklORworI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBOb3QgYWxsIFdpbmRvd3MgZW52aXJvbm1lbnRzIHN1cHBvcnQgU0VIIHByb3Blcmx5CisjaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19OT19XSU5ET1dTX1NFSAorI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBQUzQKKyNpZiBkZWZpbmVkKF9fT1JCSVNfXykKKyMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19OT19ORVdfQ0FQVFVSRQorI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLyBDeWd3aW4KICNpZmRlZiBfX0NZR1dJTl9fCiAKIC8vIFJlcXVpcmVkIGZvciBzb21lIHZlcnNpb25zIG9mIEN5Z3dpbiB0byBkZWNsYXJlIGdldHRpbWVvZmRheQogLy8gc2VlOiBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM2OTAxODAzL2dldHRpbWVvZmRheS1ub3QtZGVjbGFyZWQtaW4tdGhpcy1zY29wZS1jeWd3aW4KICMgICBkZWZpbmUgX0JTRF9TT1VSQ0UKKy8vIHNvbWUgdmVyc2lvbnMgb2YgY3lnd2luIChtb3N0KSBkbyBub3Qgc3VwcG9ydCBzdGQ6OnRvX3N0cmluZy4gVXNlIHRoZSBsaWJzdGQgY2hlY2suIAorLy8gaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy00LjguMi9saWJzdGRjKysvYXBpL2EwMTA1M19zb3VyY2UuaHRtbCBsaW5lIDI4MTItMjgxMworIyBpZiAhKChfX2NwbHVzcGx1cyA+PSAyMDExMDNMKSAmJiBkZWZpbmVkKF9HTElCQ1hYX1VTRV9DOTkpIFwKKwkgICAgICAgJiYgIWRlZmluZWQoX0dMSUJDWFhfSEFWRV9CUk9LRU5fVlNXUFJJTlRGKSkKIAorIwlkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05PX0NQUDExX1RPX1NUUklORworCisjIGVuZGlmCiAjZW5kaWYgLy8gX19DWUdXSU5fXwogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTA5LDkgKzEzNiwzNCBAQAogIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX1dJTkRPV1NfU0VICiAjICBlbmRpZgogCisvLyBNU1ZDIHRyYWRpdGlvbmFsIHByZXByb2Nlc3NvciBuZWVkcyBzb21lIHdvcmthcm91bmQgZm9yIF9fVkFfQVJHU19fCisvLyBfTVNWQ19UUkFESVRJT05BTCA9PSAwIG1lYW5zIG5ldyBjb25mb3JtYW50IHByZXByb2Nlc3NvcgorLy8gX01TVkNfVFJBRElUSU9OQUwgPT0gMSBtZWFucyBvbGQgdHJhZGl0aW9uYWwgbm9uLWNvbmZvcm1hbnQgcHJlcHJvY2Vzc29yCisjICBpZiAhZGVmaW5lZChfTVNWQ19UUkFESVRJT05BTCkgfHwgKGRlZmluZWQoX01TVkNfVFJBRElUSU9OQUwpICYmIF9NU1ZDX1RSQURJVElPTkFMKQorIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCisjICBlbmRpZgorCiAjZW5kaWYgLy8gX01TQ19WRVIKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIENoZWNrIGlmIHdlIGFyZSBjb21waWxlZCB3aXRoIC1mbm8tZXhjZXB0aW9ucyBvciBlcXVpdmFsZW50CisjaWYgZGVmaW5lZChfX0VYQ0VQVElPTlMpIHx8IGRlZmluZWQoX19jcHBfZXhjZXB0aW9ucykgfHwgZGVmaW5lZChfQ1BQVU5XSU5EKQorIyAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19FWENFUFRJT05TX0VOQUJMRUQKKyNlbmRpZgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gREpHUFAKKyNpZmRlZiBfX0RKR1BQX18KKyMgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fV0NIQVIKKyNlbmRpZiAvLyBfX0RKR1BQX18KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEVtYmFyY2FkZXJvIEMrK0J1aWxkCisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCisgICAgI2RlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfUE9MWUZJTExfSVNOQU4KKyNlbmRpZgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiAvLyBVc2Ugb2YgX19DT1VOVEVSX18gaXMgc3VwcHJlc3NlZCBkdXJpbmcgY29kZSBhbmFseXNpcyBpbgogLy8gQ0xpb24vQXBwQ29kZSAyMDE3LjIueCBhbmQgZm9ybWVyLCBiZWNhdXNlIF9fQ09VTlRFUl9fIGlzIG5vdCBwcm9wZXJseQpAQCAtMTIyLDIxICsxNzQsOTMgQEAKICAgICAjZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19DT1VOVEVSCiAjZW5kaWYKIAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIENoZWNrIGlmIHN0cmluZ192aWV3IGlzIGF2YWlsYWJsZSBhbmQgdXNhYmxlCisvLyBUaGUgY2hlY2sgaXMgc3BsaXQgYXBhcnQgdG8gd29yayBhcm91bmQgdjE0MCAoVlMyMDE1KSBwcmVwcm9jZXNzb3IgaXNzdWUuLi4KKyNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpCisjaWYgX19oYXNfaW5jbHVkZSg8c3RyaW5nX3ZpZXc+KSAmJiBkZWZpbmVkKENBVENIX0NQUDE3X09SX0dSRUFURVIpCisjICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfU1RSSU5HX1ZJRVcKKyNlbmRpZgorI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDaGVjayBpZiBvcHRpb25hbCBpcyBhdmFpbGFibGUgYW5kIHVzYWJsZQorI2lmIGRlZmluZWQoX19oYXNfaW5jbHVkZSkKKyMgIGlmIF9faGFzX2luY2x1ZGUoPG9wdGlvbmFsPikgJiYgZGVmaW5lZChDQVRDSF9DUFAxN19PUl9HUkVBVEVSKQorIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X09QVElPTkFMCisjICBlbmRpZiAvLyBfX2hhc19pbmNsdWRlKDxvcHRpb25hbD4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKKyNlbmRpZiAvLyBfX2hhc19pbmNsdWRlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDaGVjayBpZiB2YXJpYW50IGlzIGF2YWlsYWJsZSBhbmQgdXNhYmxlCisjaWYgZGVmaW5lZChfX2hhc19pbmNsdWRlKQorIyAgaWYgX19oYXNfaW5jbHVkZSg8dmFyaWFudD4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKKyMgICAgaWYgZGVmaW5lZChfX2NsYW5nX18pICYmIChfX2NsYW5nX21ham9yX18gPCA4KQorICAgICAgIC8vIHdvcmsgYXJvdW5kIGNsYW5nIGJ1ZyB3aXRoIGxpYnN0ZGMrKyBodHRwczovL2J1Z3MubGx2bS5vcmcvc2hvd19idWcuY2dpP2lkPTMxODUyCisgICAgICAgLy8gZml4IHNob3VsZCBiZSBpbiBjbGFuZyA4LCB3b3JrYXJvdW5kIGluIGxpYnN0ZGMrKyA4LjIKKyMgICAgICBpbmNsdWRlIDxjaXNvNjQ2PgorIyAgICAgIGlmIGRlZmluZWQoX19HTElCQ1hYX18pICYmIGRlZmluZWQoX0dMSUJDWFhfUkVMRUFTRSkgJiYgKF9HTElCQ1hYX1JFTEVBU0UgPCA5KQorIyAgICAgICAgZGVmaW5lIENBVENIX0NPTkZJR19OT19DUFAxN19WQVJJQU5UCisjICAgICAgZWxzZQorIyAgICAgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19WQVJJQU5UCisjICAgICAgZW5kaWYgLy8gZGVmaW5lZChfX0dMSUJDWFhfXykgJiYgZGVmaW5lZChfR0xJQkNYWF9SRUxFQVNFKSAmJiAoX0dMSUJDWFhfUkVMRUFTRSA8IDkpCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X1ZBUklBTlQKKyMgICAgZW5kaWYgLy8gZGVmaW5lZChfX2NsYW5nX18pICYmIChfX2NsYW5nX21ham9yX18gPCA4KQorIyAgZW5kaWYgLy8gX19oYXNfaW5jbHVkZSg8dmFyaWFudD4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKKyNlbmRpZiAvLyBfX2hhc19pbmNsdWRlCisKKwogI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NPVU5URVIpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19DT1VOVEVSKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ09VTlRFUikKICMgICBkZWZpbmUgQ0FUQ0hfQ09ORklHX0NPVU5URVIKICNlbmRpZgotI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX1dJTkRPV1NfU0VIKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfTk9fV0lORE9XU19TRUgpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19XSU5ET1dTX1NFSCkKKyNpZiBkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19XSU5ET1dTX1NFSCkgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX05PX1dJTkRPV1NfU0VIKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfV0lORE9XU19TRUgpICYmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19OT19XSU5ET1dTX1NFSCkKICMgICBkZWZpbmUgQ0FUQ0hfQ09ORklHX1dJTkRPV1NfU0VICiAjZW5kaWYKIC8vIFRoaXMgaXMgc2V0IGJ5IGRlZmF1bHQsIGJlY2F1c2Ugd2UgYXNzdW1lIHRoYXQgdW5peCBjb21waWxlcnMgYXJlIHBvc2l4LXNpZ25hbC1jb21wYXRpYmxlIGJ5IGRlZmF1bHQuCi0jaWYgIWRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05PX1BPU0lYX1NJR05BTFMpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19QT1NJWF9TSUdOQUxTKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfUE9TSVhfU0lHTkFMUykKKyNpZiBkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19QT1NJWF9TSUdOQUxTKSAmJiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fUE9TSVhfU0lHTkFMUykgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX05PX1BPU0lYX1NJR05BTFMpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19QT1NJWF9TSUdOQUxTKQogIyAgIGRlZmluZSBDQVRDSF9DT05GSUdfUE9TSVhfU0lHTkFMUwogI2VuZGlmCisvLyBUaGlzIGlzIHNldCBieSBkZWZhdWx0LCBiZWNhdXNlIHdlIGFzc3VtZSB0aGF0IGNvbXBpbGVycyB3aXRoIG5vIHdjaGFyX3Qgc3VwcG9ydCBhcmUganVzdCByYXJlIGV4Y2VwdGlvbnMuCisjaWYgIWRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05PX1dDSEFSKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfTk9fV0NIQVIpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19XQ0hBUikKKyMgICBkZWZpbmUgQ0FUQ0hfQ09ORklHX1dDSEFSCisjZW5kaWYKIAotI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X1VOQ0FVR0hUX0VYQ0VQVElPTlMpICYmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19OT19DUFAxN19VTkNBVUdIVF9FWENFUFRJT05TKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfVU5DQVVHSFRfRVhDRVBUSU9OUykKKyNpZiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fQ1BQMTFfVE9fU1RSSU5HKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfTk9fQ1BQMTFfVE9fU1RSSU5HKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTFfVE9fU1RSSU5HKQorIyAgICBkZWZpbmUgQ0FUQ0hfQ09ORklHX0NQUDExX1RPX1NUUklORworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19PUFRJT05BTCkgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX05PX0NQUDE3X09QVElPTkFMKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfT1BUSU9OQUwpCisjICBkZWZpbmUgQ0FUQ0hfQ09ORklHX0NQUDE3X09QVElPTkFMCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X1VOQ0FVR0hUX0VYQ0VQVElPTlMpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19DUFAxN19VTkNBVUdIVF9FWENFUFRJT05TKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfVU5DQVVHSFRfRVhDRVBUSU9OUykKICMgIGRlZmluZSBDQVRDSF9DT05GSUdfQ1BQMTdfVU5DQVVHSFRfRVhDRVBUSU9OUwogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19TVFJJTkdfVklFVykgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX05PX0NQUDE3X1NUUklOR19WSUVXKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfU1RSSU5HX1ZJRVcpCisjICBkZWZpbmUgQ0FUQ0hfQ09ORklHX0NQUDE3X1NUUklOR19WSUVXCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X1ZBUklBTlQpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19DUFAxN19WQVJJQU5UKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfVkFSSUFOVCkKKyMgIGRlZmluZSBDQVRDSF9DT05GSUdfQ1BQMTdfVkFSSUFOVAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FWFBFUklNRU5UQUxfUkVESVJFQ1QpCisjICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05FV19DQVBUVVJFCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05FV19DQVBUVVJFKSAmJiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fTkVXX0NBUFRVUkUpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19ORVdfQ0FQVFVSRSkgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX05FV19DQVBUVVJFKQorIyAgZGVmaW5lIENBVENIX0NPTkZJR19ORVdfQ0FQVFVSRQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9DT05GSUdfRVhDRVBUSU9OU19FTkFCTEVEKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TKQorIyAgZGVmaW5lIENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9DT05GSUdfUE9MWUZJTExfSVNOQU4pICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19QT0xZRklMTF9JU05BTikgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX1BPTFlGSUxMX0lTTkFOKQorIyAgZGVmaW5lIENBVENIX0NPTkZJR19QT0xZRklMTF9JU05BTgorI2VuZGlmCiAKICNpZiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19QQVJFTlRIRVNFU19XQVJOSU5HUykKICMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfUEFSRU5USEVTRVNfV0FSTklOR1MKQEAgLTE0NiwxMyArMjcwLDIzIEBACiAjICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MKICMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTCiAjZW5kaWYKLQotI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19VU0VfUlRUSSkKLSMgIGRlZmluZSBDQVRDSF9DT05GSUdfVVNFX1JUVEkgMQorI2lmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUykKKyMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTCisjICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTCiAjZW5kaWYKIAotI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19VU0VfRVhDRVBUSU9OUykKLSMgIGRlZmluZSBDQVRDSF9DT05GSUdfVVNFX0VYQ0VQVElPTlMgMQorI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUykKKyNkZWZpbmUgQ0FUQ0hfVFJZIGlmICgodHJ1ZSkpCisjZGVmaW5lIENBVENIX0NBVENIX0FMTCBpZiAoKGZhbHNlKSkKKyNkZWZpbmUgQ0FUQ0hfQ0FUQ0hfQU5PTih0eXBlKSBpZiAoKGZhbHNlKSkKKyNlbHNlCisjZGVmaW5lIENBVENIX1RSWSB0cnkKKyNkZWZpbmUgQ0FUQ0hfQ0FUQ0hfQUxMIGNhdGNoICguLi4pCisjZGVmaW5lIENBVENIX0NBVENIX0FOT04odHlwZSkgY2F0Y2ggKHR5cGUpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfTk9fVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUikKKyNkZWZpbmUgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCiAjZW5kaWYKIAogI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9DT01QSUxFUl9DQVBBQklMSVRJRVNfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbmZpZy5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbmZpZy5jcHAKaW5kZXggNjdkMmIyNy4uZThhZDJhOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb25maWcuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29uZmlnLmNwcApAQCAtMTUsMTIgKzE1LDE2IEBACiAgICAgOiAgIG1fZGF0YSggZGF0YSApLAogICAgICAgICBtX3N0cmVhbSggb3BlblN0cmVhbSgpICkKICAgICB7Ci0gICAgICAgIGlmKCAhZGF0YS50ZXN0c09yVGFncy5lbXB0eSgpICkgewotICAgICAgICAgICAgVGVzdFNwZWNQYXJzZXIgcGFyc2VyKCBJVGFnQWxpYXNSZWdpc3RyeTo6Z2V0KCkgKTsKKyAgICAgICAgVGVzdFNwZWNQYXJzZXIgcGFyc2VyKElUYWdBbGlhc1JlZ2lzdHJ5OjpnZXQoKSk7CisgICAgICAgIGlmIChkYXRhLnRlc3RzT3JUYWdzLmVtcHR5KCkpIHsKKyAgICAgICAgICAgIHBhcnNlci5wYXJzZSgiflsuXSIpOyAvLyBBbGwgbm90IGhpZGRlbiB0ZXN0cworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbV9oYXNUZXN0RmlsdGVycyA9IHRydWU7CiAgICAgICAgICAgICBmb3IoIGF1dG8gY29uc3QmIHRlc3RPclRhZ3MgOiBkYXRhLnRlc3RzT3JUYWdzICkKICAgICAgICAgICAgICAgICBwYXJzZXIucGFyc2UoIHRlc3RPclRhZ3MgKTsKLSAgICAgICAgICAgIG1fdGVzdFNwZWMgPSBwYXJzZXIudGVzdFNwZWMoKTsKICAgICAgICAgfQorICAgICAgICBtX3Rlc3RTcGVjID0gcGFyc2VyLnRlc3RTcGVjKCk7CiAgICAgfQogCiAgICAgc3RkOjpzdHJpbmcgY29uc3QmIENvbmZpZzo6Z2V0RmlsZW5hbWUoKSBjb25zdCB7CkBAIC0zMywxMSArMzcsMTMgQEAKICAgICBib29sIENvbmZpZzo6bGlzdFJlcG9ydGVycygpIGNvbnN0ICAgICAgeyByZXR1cm4gbV9kYXRhLmxpc3RSZXBvcnRlcnM7IH0KIAogICAgIHN0ZDo6c3RyaW5nIENvbmZpZzo6Z2V0UHJvY2Vzc05hbWUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEucHJvY2Vzc05hbWU7IH0KKyAgICBzdGQ6OnN0cmluZyBjb25zdCYgQ29uZmlnOjpnZXRSZXBvcnRlck5hbWUoKSBjb25zdCB7IHJldHVybiBtX2RhdGEucmVwb3J0ZXJOYW1lOyB9CiAKLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIENvbmZpZzo6Z2V0UmVwb3J0ZXJOYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5yZXBvcnRlck5hbWVzOyB9CisgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBDb25maWc6OmdldFRlc3RzT3JUYWdzKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnRlc3RzT3JUYWdzOyB9CiAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBDb25maWc6OmdldFNlY3Rpb25zVG9SdW4oKSBjb25zdCB7IHJldHVybiBtX2RhdGEuc2VjdGlvbnNUb1J1bjsgfQogCiAgICAgVGVzdFNwZWMgY29uc3QmIENvbmZpZzo6dGVzdFNwZWMoKSBjb25zdCB7IHJldHVybiBtX3Rlc3RTcGVjOyB9CisgICAgYm9vbCBDb25maWc6Omhhc1Rlc3RGaWx0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9oYXNUZXN0RmlsdGVyczsgfQogCiAgICAgYm9vbCBDb25maWc6OnNob3dIZWxwKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnNob3dIZWxwOyB9CiAKQEAgLTQ2LDcgKzUyLDggQEAKICAgICBzdGQ6Om9zdHJlYW0mIENvbmZpZzo6c3RyZWFtKCkgY29uc3QgICAgICAgICAgICAgICB7IHJldHVybiBtX3N0cmVhbS0+c3RyZWFtKCk7IH0KICAgICBzdGQ6OnN0cmluZyBDb25maWc6Om5hbWUoKSBjb25zdCAgICAgICAgICAgICAgICAgICB7IHJldHVybiBtX2RhdGEubmFtZS5lbXB0eSgpID8gbV9kYXRhLnByb2Nlc3NOYW1lIDogbV9kYXRhLm5hbWU7IH0KICAgICBib29sIENvbmZpZzo6aW5jbHVkZVN1Y2Nlc3NmdWxSZXN1bHRzKCkgY29uc3QgICAgICB7IHJldHVybiBtX2RhdGEuc2hvd1N1Y2Nlc3NmdWxUZXN0czsgfQotICAgIGJvb2wgQ29uZmlnOjp3YXJuQWJvdXRNaXNzaW5nQXNzZXJ0aW9ucygpIGNvbnN0ICAgIHsgcmV0dXJuIG1fZGF0YS53YXJuaW5ncyAmIFdhcm5BYm91dDo6Tm9Bc3NlcnRpb25zOyB9CisgICAgYm9vbCBDb25maWc6Ondhcm5BYm91dE1pc3NpbmdBc3NlcnRpb25zKCkgY29uc3QgICAgeyByZXR1cm4gISEobV9kYXRhLndhcm5pbmdzICYgV2FybkFib3V0OjpOb0Fzc2VydGlvbnMpOyB9CisgICAgYm9vbCBDb25maWc6Ondhcm5BYm91dE5vVGVzdHMoKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gISEobV9kYXRhLndhcm5pbmdzICYgV2FybkFib3V0OjpOb1Rlc3RzKTsgfQogICAgIFNob3dEdXJhdGlvbnM6Ok9yTm90IENvbmZpZzo6c2hvd0R1cmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaG93RHVyYXRpb25zOyB9CiAgICAgUnVuVGVzdHM6OkluV2hhdE9yZGVyIENvbmZpZzo6cnVuT3JkZXIoKSBjb25zdCAgICAgeyByZXR1cm4gbV9kYXRhLnJ1bk9yZGVyOyB9CiAgICAgdW5zaWduZWQgaW50IENvbmZpZzo6cm5nU2VlZCgpIGNvbnN0ICAgICAgICAgICAgICAgeyByZXR1cm4gbV9kYXRhLnJuZ1NlZWQ7IH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29uZmlnLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfY29uZmlnLmhwcAppbmRleCBmY2FhMDUwLi43YmFmYzljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbmZpZy5ocHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb25maWcuaHBwCkBAIC01NCw4ICs1NCwxMiBAQAogICAgICAgICBzdGQ6OnN0cmluZyBvdXRwdXRGaWxlbmFtZTsKICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZTsKICAgICAgICAgc3RkOjpzdHJpbmcgcHJvY2Vzc05hbWU7CisjaWZuZGVmIENBVENIX0NPTkZJR19ERUZBVUxUX1JFUE9SVEVSCisjZGVmaW5lIENBVENIX0NPTkZJR19ERUZBVUxUX1JFUE9SVEVSICJjb25zb2xlIgorI2VuZGlmCisgICAgICAgIHN0ZDo6c3RyaW5nIHJlcG9ydGVyTmFtZSA9IENBVENIX0NPTkZJR19ERUZBVUxUX1JFUE9SVEVSOworI3VuZGVmIENBVENIX0NPTkZJR19ERUZBVUxUX1JFUE9SVEVSCiAKLSAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHJlcG9ydGVyTmFtZXM7CiAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiB0ZXN0c09yVGFnczsKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHNlY3Rpb25zVG9SdW47CiAgICAgfTsKQEAgLTc2LDExICs4MCwxMyBAQAogICAgICAgICBib29sIGxpc3RSZXBvcnRlcnMoKSBjb25zdDsKIAogICAgICAgICBzdGQ6OnN0cmluZyBnZXRQcm9jZXNzTmFtZSgpIGNvbnN0OworICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZ2V0UmVwb3J0ZXJOYW1lKCkgY29uc3Q7CiAKLSAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBnZXRSZXBvcnRlck5hbWVzKCkgY29uc3Q7CisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZ2V0VGVzdHNPclRhZ3MoKSBjb25zdDsKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBnZXRTZWN0aW9uc1RvUnVuKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAgICAgdmlydHVhbCBUZXN0U3BlYyBjb25zdCYgdGVzdFNwZWMoKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBoYXNUZXN0RmlsdGVycygpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgICAgIGJvb2wgc2hvd0hlbHAoKSBjb25zdDsKIApAQCAtOTAsNiArOTYsNyBAQAogICAgICAgICBzdGQ6OnN0cmluZyBuYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIGJvb2wgaW5jbHVkZVN1Y2Nlc3NmdWxSZXN1bHRzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIGJvb2wgd2FybkFib3V0TWlzc2luZ0Fzc2VydGlvbnMoKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgYm9vbCB3YXJuQWJvdXROb1Rlc3RzKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIFNob3dEdXJhdGlvbnM6Ok9yTm90IHNob3dEdXJhdGlvbnMoKSBjb25zdCBvdmVycmlkZTsKICAgICAgICAgUnVuVGVzdHM6OkluV2hhdE9yZGVyIHJ1bk9yZGVyKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIHVuc2lnbmVkIGludCBybmdTZWVkKCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC0xMDcsNiArMTE0LDcgQEAKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SVN0cmVhbSBjb25zdD4gbV9zdHJlYW07CiAgICAgICAgIFRlc3RTcGVjIG1fdGVzdFNwZWM7CisgICAgICAgIGJvb2wgbV9oYXNUZXN0RmlsdGVycyA9IGZhbHNlOwogICAgIH07CiAKIH0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9jb25zb2xlX2NvbG91ci5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbnNvbGVfY29sb3VyLmNwcAppbmRleCBmNjkyYjVjLi4wNzA3MmRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbnNvbGVfY29sb3VyLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2NvbnNvbGVfY29sb3VyLmNwcApAQCAtMTYwLDcgKzE2MCw4IEBACiAKICAgICBwcml2YXRlOgogICAgICAgICB2b2lkIHNldENvbG91ciggY29uc3QgY2hhciogX2VzY2FwZUNvZGUgKSB7Ci0gICAgICAgICAgICBDYXRjaDo6Y291dCgpIDw8ICdcMDMzJyA8PCBfZXNjYXBlQ29kZTsKKyAgICAgICAgICAgIGdldEN1cnJlbnRDb250ZXh0KCkuZ2V0Q29uZmlnKCktPnN0cmVhbSgpCisgICAgICAgICAgICAgICAgPDwgJ1wwMzMnIDw8IF9lc2NhcGVDb2RlOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMTY5LDcgKzE3MCwxMiBAQAogI2lmZGVmIENBVENIX1BMQVRGT1JNX01BQwogICAgICAgICAgICAgIWlzRGVidWdnZXJBY3RpdmUoKSAmJgogI2VuZGlmCi0gICAgICAgICAgICBpc2F0dHkoU1RET1VUX0ZJTEVOTyk7CisjaWYgIShkZWZpbmVkKF9fREpHUFBfXykgJiYgZGVmaW5lZChfX1NUUklDVF9BTlNJX18pKQorICAgICAgICAgICAgaXNhdHR5KFNURE9VVF9GSUxFTk8pCisjZWxzZQorICAgICAgICAgICAgZmFsc2UKKyNlbmRpZgorICAgICAgICAgICAgOwogICAgIH0KICAgICBJQ29sb3VySW1wbCogcGxhdGZvcm1Db2xvdXJJbnN0YW5jZSgpIHsKICAgICAgICAgRXJybm9HdWFyZCBndWFyZDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZGVidWdfY29uc29sZS5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2RlYnVnX2NvbnNvbGUuY3BwCmluZGV4IGQ4MTdjNTYuLjVkMjVmNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZGVidWdfY29uc29sZS5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9kZWJ1Z19jb25zb2xlLmNwcApAQCAtOSwyMSArOSwyMyBAQAogI2luY2x1ZGUgImNhdGNoX2RlYnVnX2NvbnNvbGUuaCIKICNpbmNsdWRlICJjYXRjaF9zdHJlYW0uaCIKICNpbmNsdWRlICJjYXRjaF9wbGF0Zm9ybS5oIgorI2luY2x1ZGUgImNhdGNoX3dpbmRvd3NfaF9wcm94eS5oIgogCiAjaWZkZWYgQ0FUQ0hfUExBVEZPUk1fV0lORE9XUwogCi0jaW5jbHVkZSAiY2F0Y2hfd2luZG93c19oX3Byb3h5LmgiCi0KICAgICBuYW1lc3BhY2UgQ2F0Y2ggewogICAgICAgICB2b2lkIHdyaXRlVG9EZWJ1Z0NvbnNvbGUoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0ICkgewogICAgICAgICAgICAgOjpPdXRwdXREZWJ1Z1N0cmluZ0EoIHRleHQuY19zdHIoKSApOwogICAgICAgICB9CiAgICAgfQorCiAjZWxzZQorCiAgICAgbmFtZXNwYWNlIENhdGNoIHsKICAgICAgICAgdm9pZCB3cml0ZVRvRGVidWdDb25zb2xlKCBzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCApIHsKICAgICAgICAgICAgIC8vICFUQkQ6IE5lZWQgYSB2ZXJzaW9uIGZvciBNYWMvIFhDb2RlIGFuZCBvdGhlciBJREVzCiAgICAgICAgICAgICBDYXRjaDo6Y291dCgpIDw8IHRleHQ7CiAgICAgICAgIH0KICAgICB9CisKICNlbmRpZiAvLyBQbGF0Zm9ybQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9kZWJ1Z2dlci5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9kZWJ1Z2dlci5oCmluZGV4IDc1NDE5ODQuLmRiM2ZmNjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZGVidWdnZXIuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2RlYnVnZ2VyLmgKQEAgLTM4LDEyICszOCw5IEBACiAjZW5kaWYKIAogI2lmZGVmIENBVENIX1RSQVAKLSAgICAjZGVmaW5lIENBVENIX0JSRUFLX0lOVE9fREVCVUdHRVIoKSBpZiggQ2F0Y2g6OmlzRGVidWdnZXJBY3RpdmUoKSApIHsgQ0FUQ0hfVFJBUCgpOyB9CisgICAgI2RlZmluZSBDQVRDSF9CUkVBS19JTlRPX0RFQlVHR0VSKCkgW117IGlmKCBDYXRjaDo6aXNEZWJ1Z2dlckFjdGl2ZSgpICkgeyBDQVRDSF9UUkFQKCk7IH0gfSgpCiAjZWxzZQotICAgIG5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgICAgIGlubGluZSB2b2lkIGRvTm90aGluZygpIHt9Ci0gICAgfQotICAgICNkZWZpbmUgQ0FUQ0hfQlJFQUtfSU5UT19ERUJVR0dFUigpIENhdGNoOjpkb05vdGhpbmcoKQorICAgICNkZWZpbmUgQ0FUQ0hfQlJFQUtfSU5UT19ERUJVR0dFUigpIFtde30oKQogI2VuZGlmCiAKICNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfREVCVUdHRVJfSF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9kZWNvbXBvc2VyLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2RlY29tcG9zZXIuaAppbmRleCA2MThhMjUwLi4wODA3NWYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2RlY29tcG9zZXIuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2RlY29tcG9zZXIuaApAQCAtMTAsNiArMTAsNyBAQAogCiAjaW5jbHVkZSAiY2F0Y2hfdG9zdHJpbmcuaCIKICNpbmNsdWRlICJjYXRjaF9zdHJpbmdyZWYuaCIKKyNpbmNsdWRlICJjYXRjaF9tZXRhLmhwcCIKIAogI2luY2x1ZGUgPGlvc2Z3ZD4KIApAQCAtMTksNiArMjAsNyBAQAogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDAxOCkgLy8gbW9yZSAic2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoIgogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDMxMikgLy8gQ29udmVydGluZyBpbnQgdG8gVCogdXNpbmcgcmVpbnRlcnByZXRfY2FzdCAoaXNzdWUgb24geDY0IHBsYXRmb3JtKQogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDE4MCkgLy8gcXVhbGlmaWVyIGFwcGxpZWQgdG8gZnVuY3Rpb24gdHlwZSBoYXMgbm8gbWVhbmluZworI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDgwMCkgLy8gRm9yY2luZyByZXN1bHQgdG8gdHJ1ZSBvciBmYWxzZQogI2VuZGlmCiAKIG5hbWVzcGFjZSBDYXRjaCB7CkBAIC02Miw2ICs2NCw2MiBAQAogICAgICAgICAgICAgbV9vcCggb3AgKSwKICAgICAgICAgICAgIG1fcmhzKCByaHMgKQogICAgICAgICB7fQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIGF1dG8gb3BlcmF0b3IgJiYgKCBUICkgY29uc3QgLT4gQmluYXJ5RXhwcjxMaHNULCBSaHNUIGNvbnN0Jj4gY29uc3QgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChhbHdheXNfZmFsc2U8VD46OnZhbHVlLAorICAgICAgICAgICAgImNoYWluZWQgY29tcGFyaXNvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGFzc2VydGlvbnMsICIKKyAgICAgICAgICAgICJ3cmFwIHRoZSBleHByZXNzaW9uIGluc2lkZSBwYXJlbnRoZXNlcywgb3IgZGVjb21wb3NlIGl0Iik7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICBhdXRvIG9wZXJhdG9yIHx8ICggVCApIGNvbnN0IC0+IEJpbmFyeUV4cHI8TGhzVCwgUmhzVCBjb25zdCY+IGNvbnN0IHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoYWx3YXlzX2ZhbHNlPFQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICJjaGFpbmVkIGNvbXBhcmlzb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBhc3NlcnRpb25zLCAiCisgICAgICAgICAgICAid3JhcCB0aGUgZXhwcmVzc2lvbiBpbnNpZGUgcGFyZW50aGVzZXMsIG9yIGRlY29tcG9zZSBpdCIpOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgYXV0byBvcGVyYXRvciA9PSAoIFQgKSBjb25zdCAtPiBCaW5hcnlFeHByPExoc1QsIFJoc1QgY29uc3QmPiBjb25zdCB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGFsd2F5c19mYWxzZTxUPjo6dmFsdWUsCisgICAgICAgICAgICAiY2hhaW5lZCBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUgYXNzZXJ0aW9ucywgIgorICAgICAgICAgICAgIndyYXAgdGhlIGV4cHJlc3Npb24gaW5zaWRlIHBhcmVudGhlc2VzLCBvciBkZWNvbXBvc2UgaXQiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIGF1dG8gb3BlcmF0b3IgIT0gKCBUICkgY29uc3QgLT4gQmluYXJ5RXhwcjxMaHNULCBSaHNUIGNvbnN0Jj4gY29uc3QgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChhbHdheXNfZmFsc2U8VD46OnZhbHVlLAorICAgICAgICAgICAgImNoYWluZWQgY29tcGFyaXNvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGFzc2VydGlvbnMsICIKKyAgICAgICAgICAgICJ3cmFwIHRoZSBleHByZXNzaW9uIGluc2lkZSBwYXJlbnRoZXNlcywgb3IgZGVjb21wb3NlIGl0Iik7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICBhdXRvIG9wZXJhdG9yID4gKCBUICkgY29uc3QgLT4gQmluYXJ5RXhwcjxMaHNULCBSaHNUIGNvbnN0Jj4gY29uc3QgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChhbHdheXNfZmFsc2U8VD46OnZhbHVlLAorICAgICAgICAgICAgImNoYWluZWQgY29tcGFyaXNvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGFzc2VydGlvbnMsICIKKyAgICAgICAgICAgICJ3cmFwIHRoZSBleHByZXNzaW9uIGluc2lkZSBwYXJlbnRoZXNlcywgb3IgZGVjb21wb3NlIGl0Iik7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICBhdXRvIG9wZXJhdG9yIDwgKCBUICkgY29uc3QgLT4gQmluYXJ5RXhwcjxMaHNULCBSaHNUIGNvbnN0Jj4gY29uc3QgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChhbHdheXNfZmFsc2U8VD46OnZhbHVlLAorICAgICAgICAgICAgImNoYWluZWQgY29tcGFyaXNvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGFzc2VydGlvbnMsICIKKyAgICAgICAgICAgICJ3cmFwIHRoZSBleHByZXNzaW9uIGluc2lkZSBwYXJlbnRoZXNlcywgb3IgZGVjb21wb3NlIGl0Iik7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICBhdXRvIG9wZXJhdG9yID49ICggVCApIGNvbnN0IC0+IEJpbmFyeUV4cHI8TGhzVCwgUmhzVCBjb25zdCY+IGNvbnN0IHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoYWx3YXlzX2ZhbHNlPFQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICJjaGFpbmVkIGNvbXBhcmlzb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBhc3NlcnRpb25zLCAiCisgICAgICAgICAgICAid3JhcCB0aGUgZXhwcmVzc2lvbiBpbnNpZGUgcGFyZW50aGVzZXMsIG9yIGRlY29tcG9zZSBpdCIpOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgYXV0byBvcGVyYXRvciA8PSAoIFQgKSBjb25zdCAtPiBCaW5hcnlFeHByPExoc1QsIFJoc1QgY29uc3QmPiBjb25zdCB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGFsd2F5c19mYWxzZTxUPjo6dmFsdWUsCisgICAgICAgICAgICAiY2hhaW5lZCBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUgYXNzZXJ0aW9ucywgIgorICAgICAgICAgICAgIndyYXAgdGhlIGV4cHJlc3Npb24gaW5zaWRlIHBhcmVudGhlc2VzLCBvciBkZWNvbXBvc2UgaXQiKTsKKyAgICAgICAgfQogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMaHNUPgpAQCAtNzQsNyArMTMyLDcgQEAKIAogICAgIHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgVW5hcnlFeHByKCBMaHNUIGxocyApCi0gICAgICAgIDogICBJVHJhbnNpZW50RXhwcmVzc2lvbnsgZmFsc2UsIGxocyA/IHRydWUgOiBmYWxzZSB9LAorICAgICAgICA6ICAgSVRyYW5zaWVudEV4cHJlc3Npb257IGZhbHNlLCBzdGF0aWNfY2FzdDxib29sPihsaHMpIH0sCiAgICAgICAgICAgICBtX2xocyggbGhzICkKICAgICAgICAge30KICAgICB9OwpAQCAtMTQzLDYgKzIwMSwyMCBAQAogICAgICAgICAgICAgcmV0dXJuIHsgc3RhdGljX2Nhc3Q8Ym9vbD4obV9saHMgPD0gcmhzKSwgbV9saHMsICI8PSIsIHJocyB9OwogICAgICAgICB9CiAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmhzVD4KKyAgICAgICAgYXV0byBvcGVyYXRvciAmJiAoIFJoc1QgY29uc3QmICkgLT4gQmluYXJ5RXhwcjxMaHNULCBSaHNUIGNvbnN0Jj4gY29uc3QgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChhbHdheXNfZmFsc2U8UmhzVD46OnZhbHVlLAorICAgICAgICAgICAgIm9wZXJhdG9yJiYgaXMgbm90IHN1cHBvcnRlZCBpbnNpZGUgYXNzZXJ0aW9ucywgIgorICAgICAgICAgICAgIndyYXAgdGhlIGV4cHJlc3Npb24gaW5zaWRlIHBhcmVudGhlc2VzLCBvciBkZWNvbXBvc2UgaXQiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFJoc1Q+CisgICAgICAgIGF1dG8gb3BlcmF0b3IgfHwgKCBSaHNUIGNvbnN0JiApIC0+IEJpbmFyeUV4cHI8TGhzVCwgUmhzVCBjb25zdCY+IGNvbnN0IHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoYWx3YXlzX2ZhbHNlPFJoc1Q+Ojp2YWx1ZSwKKyAgICAgICAgICAgICJvcGVyYXRvcnx8IGlzIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGFzc2VydGlvbnMsICIKKyAgICAgICAgICAgICJ3cmFwIHRoZSBleHByZXNzaW9uIGluc2lkZSBwYXJlbnRoZXNlcywgb3IgZGVjb21wb3NlIGl0Iik7CisgICAgICAgIH0KKwogICAgICAgICBhdXRvIG1ha2VVbmFyeUV4cHIoKSBjb25zdCAtPiBVbmFyeUV4cHI8TGhzVD4gewogICAgICAgICAgICAgcmV0dXJuIFVuYXJ5RXhwcjxMaHNUPnsgbV9saHMgfTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9kZWZhdWx0X21haW4uaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9kZWZhdWx0X21haW4uaHBwCmluZGV4IDQzNzJlOWMuLjE3YWQwOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZGVmYXVsdF9tYWluLmhwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2RlZmF1bHRfbWFpbi5ocHAKQEAgLTEyLDcgKzEyLDcgQEAKIAogI2lmbmRlZiBfX09CSkNfXwogCi0jaWYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChfVU5JQ09ERSkgJiYgIWRlZmluZWQoRE9fTk9UX1VTRV9XTUFJTikKKyNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19XQ0hBUikgJiYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChfVU5JQ09ERSkgJiYgIWRlZmluZWQoRE9fTk9UX1VTRV9XTUFJTikKIC8vIFN0YW5kYXJkIEMvQysrIFdpbjMyIFVuaWNvZGUgd21haW4gZW50cnkgcG9pbnQKIGV4dGVybiAiQyIgaW50IHdtYWluIChpbnQgYXJnYywgd2NoYXJfdCAqIGFyZ3ZbXSwgd2NoYXJfdCAqIFtdKSB7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9lbmZvcmNlLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZW5mb3JjZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRkYjFjMQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZW5mb3JjZS5jcHAKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqICBDcmVhdGVkIGJ5IE1hcnRpbiBvbiAwMy8wOS8yMDE4LgorICoKKyAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisgKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisgKi8KKworI2luY2x1ZGUgImNhdGNoX2VuZm9yY2UuaCIKKworbmFtZXNwYWNlIENhdGNoIHsKKyNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlNfQ1VTVE9NX0hBTkRMRVIpCisgICAgW1tub3JldHVybl1dCisgICAgdm9pZCB0aHJvd19leGNlcHRpb24oc3RkOjpleGNlcHRpb24gY29uc3QmIGUpIHsKKyAgICAgICAgQ2F0Y2g6OmNlcnIoKSA8PCAiQ2F0Y2ggd2lsbCB0ZXJtaW5hdGUgYmVjYXVzZSBpdCBuZWVkZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uLlxuIgorICAgICAgICAgICAgICAgICAgICAgIDw8ICJUaGUgbWVzc2FnZSB3YXM6ICIgPDwgZS53aGF0KCkgPDwgJ1xuJzsKKyAgICAgICAgc3RkOjp0ZXJtaW5hdGUoKTsKKyAgICB9CisjZW5kaWYKK30gLy8gbmFtZXNwYWNlIENhdGNoOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9lbmZvcmNlLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2VuZm9yY2UuaAppbmRleCBjZDQyMDJhLi4wMDY5NDAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2VuZm9yY2UuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2VuZm9yY2UuaApAQCAtOCwxOCArOCwzNSBAQAogI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfRU5GT1JDRV9IX0lOQ0xVREVECiAKICNpbmNsdWRlICJjYXRjaF9jb21tb24uaCIKKyNpbmNsdWRlICJjYXRjaF9jb21waWxlcl9jYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJjYXRjaF9zdHJlYW0uaCIKIAorCiAjaW5jbHVkZSA8c3RkZXhjZXB0PgotI2luY2x1ZGUgPGlvc2Z3ZD4KKworbmFtZXNwYWNlIENhdGNoIHsKKyNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TKQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBFeD4KKyAgICBbW25vcmV0dXJuXV0KKyAgICB2b2lkIHRocm93X2V4Y2VwdGlvbihFeCBjb25zdCYgZSkgeworICAgICAgICB0aHJvdyBlOworICAgIH0KKyNlbHNlIC8vIF5eIEV4Y2VwdGlvbnMgYXJlIGVuYWJsZWQgLy8gIEV4Y2VwdGlvbnMgYXJlIGRpc2FibGVkIHZ2CisgICAgW1tub3JldHVybl1dCisgICAgdm9pZCB0aHJvd19leGNlcHRpb24oc3RkOjpleGNlcHRpb24gY29uc3QmIGUpOworI2VuZGlmCit9IC8vIG5hbWVzcGFjZSBDYXRjaDsKIAogI2RlZmluZSBDQVRDSF9QUkVQQVJFX0VYQ0VQVElPTiggdHlwZSwgbXNnICkgXAotICAgIHR5cGUoIHN0YXRpY19jYXN0PHN0ZDo6b3N0cmluZ3N0cmVhbSYmPiggQ2F0Y2g6OlJldXNhYmxlU3RyaW5nU3RyZWFtKCkuZ2V0KCkgPDwgbXNnICkuc3RyKCkgKQorICAgIHR5cGUoICggQ2F0Y2g6OlJldXNhYmxlU3RyaW5nU3RyZWFtKCkgPDwgbXNnICkuc3RyKCkgKQogI2RlZmluZSBDQVRDSF9JTlRFUk5BTF9FUlJPUiggbXNnICkgXAotICAgIEV4Y2VwdGlvbjo6ZG9UaHJvdyggQ0FUQ0hfUFJFUEFSRV9FWENFUFRJT04oIHN0ZDo6bG9naWNfZXJyb3IsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPIDw8ICI6IEludGVybmFsIENhdGNoIGVycm9yOiAiIDw8IG1zZykgKTsKKyAgICBDYXRjaDo6dGhyb3dfZXhjZXB0aW9uKENBVENIX1BSRVBBUkVfRVhDRVBUSU9OKCBzdGQ6OmxvZ2ljX2Vycm9yLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTyA8PCAiOiBJbnRlcm5hbCBDYXRjaCBlcnJvcjogIiA8PCBtc2cpKQogI2RlZmluZSBDQVRDSF9FUlJPUiggbXNnICkgXAotICAgIEV4Y2VwdGlvbjo6ZG9UaHJvdyggQ0FUQ0hfUFJFUEFSRV9FWENFUFRJT04oIHN0ZDo6ZG9tYWluX2Vycm9yLCBtc2cgKSApCisgICAgQ2F0Y2g6OnRocm93X2V4Y2VwdGlvbihDQVRDSF9QUkVQQVJFX0VYQ0VQVElPTiggc3RkOjpkb21haW5fZXJyb3IsIG1zZyApKQorI2RlZmluZSBDQVRDSF9SVU5USU1FX0VSUk9SKCBtc2cgKSBcCisgICAgQ2F0Y2g6OnRocm93X2V4Y2VwdGlvbihDQVRDSF9QUkVQQVJFX0VYQ0VQVElPTiggc3RkOjpydW50aW1lX2Vycm9yLCBtc2cgKSkKICNkZWZpbmUgQ0FUQ0hfRU5GT1JDRSggY29uZGl0aW9uLCBtc2cgKSBcCiAgICAgZG97IGlmKCAhKGNvbmRpdGlvbikgKSBDQVRDSF9FUlJPUiggbXNnICk7IH0gd2hpbGUoZmFsc2UpCiAKKwogI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9FTkZPUkNFX0hfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZXhjZXB0aW9uX3RyYW5zbGF0b3JfcmVnaXN0cnkuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9leGNlcHRpb25fdHJhbnNsYXRvcl9yZWdpc3RyeS5jcHAKaW5kZXggZjA0OGY2Ny4uY2VmMzZlNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9leGNlcHRpb25fdHJhbnNsYXRvcl9yZWdpc3RyeS5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9leGNlcHRpb25fdHJhbnNsYXRvcl9yZWdpc3RyeS5jcHAKQEAgLTYsOCArNiwxMCBAQAogICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQogICovCiAKLSNpbmNsdWRlICJjYXRjaF9hc3NlcnRpb25oYW5kbGVyLmgiCiAjaW5jbHVkZSAiY2F0Y2hfZXhjZXB0aW9uX3RyYW5zbGF0b3JfcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJjYXRjaF9hc3NlcnRpb25oYW5kbGVyLmgiCisjaW5jbHVkZSAiY2F0Y2hfY29tcGlsZXJfY2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiY2F0Y2hfZW5mb3JjZS5oIgogCiAjaWZkZWYgX19PQkpDX18KICNpbXBvcnQgIkZvdW5kYXRpb24vRm91bmRhdGlvbi5oIgpAQCAtMjIsOCArMjQsOSBAQAogICAgICAgICBtX3RyYW5zbGF0b3JzLnB1c2hfYmFjayggc3RkOjp1bmlxdWVfcHRyPGNvbnN0IElFeGNlcHRpb25UcmFuc2xhdG9yPiggdHJhbnNsYXRvciApICk7CiAgICAgfQogCisjaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUykKICAgICBzdGQ6OnN0cmluZyBFeGNlcHRpb25UcmFuc2xhdG9yUmVnaXN0cnk6OnRyYW5zbGF0ZUFjdGl2ZUV4Y2VwdGlvbigpIGNvbnN0IHsKLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfVFJZIHsKKyAgICAgICAgdHJ5IHsKICNpZmRlZiBfX09CSkNfXwogICAgICAgICAgICAgLy8gSW4gT2JqZWN0aXZlLUMgdHJ5IG9iamVjdGl2ZS1jIGV4Y2VwdGlvbnMgZmlyc3QKICAgICAgICAgICAgIEB0cnkgewpAQCAtNDcsMjcgKzUwLDQwIEBACiAgICAgICAgICAgICByZXR1cm4gdHJ5VHJhbnNsYXRvcnMoKTsKICNlbmRpZgogICAgICAgICB9Ci0gICAgICAgIENBVENIX0lOVEVSTkFMX0NBVENIX1VOTkFNRUQoIFRlc3RGYWlsdXJlRXhjZXB0aW9uJiApIHsKKyAgICAgICAgY2F0Y2goIFRlc3RGYWlsdXJlRXhjZXB0aW9uJiApIHsKICAgICAgICAgICAgIHN0ZDo6cmV0aHJvd19leGNlcHRpb24oc3RkOjpjdXJyZW50X2V4Y2VwdGlvbigpKTsKICAgICAgICAgfQotICAgICAgICBDQVRDSF9JTlRFUk5BTF9DQVRDSCggc3RkOjpleGNlcHRpb24mLCBleCApIHsKKyAgICAgICAgY2F0Y2goIHN0ZDo6ZXhjZXB0aW9uJiBleCApIHsKICAgICAgICAgICAgIHJldHVybiBleC53aGF0KCk7CiAgICAgICAgIH0KLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfQ0FUQ0goIHN0ZDo6c3RyaW5nJiwgbXNnICkgeworICAgICAgICBjYXRjaCggc3RkOjpzdHJpbmcmIG1zZyApIHsKICAgICAgICAgICAgIHJldHVybiBtc2c7CiAgICAgICAgIH0KLSAgICAgICAgQ0FUQ0hfSU5URVJOQUxfQ0FUQ0goIGNvbnN0IGNoYXIqLCBtc2cgKSB7CisgICAgICAgIGNhdGNoKCBjb25zdCBjaGFyKiBtc2cgKSB7CiAgICAgICAgICAgICByZXR1cm4gbXNnOwogICAgICAgICB9Ci0gICAgICAgIENBVENIX0lOVEVSTkFMX0NBVENIX0FMTCgpIHsKKyAgICAgICAgY2F0Y2goLi4uKSB7CiAgICAgICAgICAgICByZXR1cm4gIlVua25vd24gZXhjZXB0aW9uIjsKICAgICAgICAgfQogICAgIH0KIAogICAgIHN0ZDo6c3RyaW5nIEV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeTo6dHJ5VHJhbnNsYXRvcnMoKSBjb25zdCB7Ci0gICAgICAgIGlmKCBtX3RyYW5zbGF0b3JzLmVtcHR5KCkgKQorICAgICAgICBpZiAobV90cmFuc2xhdG9ycy5lbXB0eSgpKSB7CiAgICAgICAgICAgICBzdGQ6OnJldGhyb3dfZXhjZXB0aW9uKHN0ZDo6Y3VycmVudF9leGNlcHRpb24oKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJldHVybiBtX3RyYW5zbGF0b3JzWzBdLT50cmFuc2xhdGUoIG1fdHJhbnNsYXRvcnMuYmVnaW4oKSsxLCBtX3RyYW5zbGF0b3JzLmVuZCgpICk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gbV90cmFuc2xhdG9yc1swXS0+dHJhbnNsYXRlKG1fdHJhbnNsYXRvcnMuYmVnaW4oKSArIDEsIG1fdHJhbnNsYXRvcnMuZW5kKCkpOworICAgICAgICB9CiAgICAgfQorCisjZWxzZSAvLyBeXiBFeGNlcHRpb25zIGFyZSBlbmFibGVkIC8vIEV4Y2VwdGlvbnMgYXJlIGRpc2FibGVkIHZ2CisgICAgc3RkOjpzdHJpbmcgRXhjZXB0aW9uVHJhbnNsYXRvclJlZ2lzdHJ5Ojp0cmFuc2xhdGVBY3RpdmVFeGNlcHRpb24oKSBjb25zdCB7CisgICAgICAgIENBVENIX0lOVEVSTkFMX0VSUk9SKCJBdHRlbXB0ZWQgdG8gdHJhbnNsYXRlIGFjdGl2ZSBleGNlcHRpb24gdW5kZXIgQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUyEiKTsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBFeGNlcHRpb25UcmFuc2xhdG9yUmVnaXN0cnk6OnRyeVRyYW5zbGF0b3JzKCkgY29uc3QgeworICAgICAgICBDQVRDSF9JTlRFUk5BTF9FUlJPUigiQXR0ZW1wdGVkIHRvIHVzZSBleGNlcHRpb24gdHJhbnNsYXRvcnMgdW5kZXIgQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUyEiKTsKKyAgICB9CisjZW5kaWYKKworCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ZhdGFsX2NvbmRpdGlvbi5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ZhdGFsX2NvbmRpdGlvbi5jcHAKaW5kZXggNTVlZTUzOS4uMjRlMTZkMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9mYXRhbF9jb25kaXRpb24uY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZmF0YWxfY29uZGl0aW9uLmNwcApAQCAtMTcsMjQgKzE3LDE4IEBACiAjICAgIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIgogI2VuZGlmCiAKLSNpZiAoZGVmaW5lZChDQVRDSF9QTEFURk9STV9XSU5ET1dTKSAmJiBkZWZpbmVkKENBVENIX0NPTkZJR19XSU5ET1dTX1NFSCkpIHx8IGRlZmluZWQoQ0FUQ0hfQ09ORklHX1BPU0lYX1NJR05BTFMpCisjaWYgZGVmaW5lZCggQ0FUQ0hfQ09ORklHX1dJTkRPV1NfU0VIICkgfHwgZGVmaW5lZCggQ0FUQ0hfQ09ORklHX1BPU0lYX1NJR05BTFMgKQorCiBuYW1lc3BhY2UgewogICAgIC8vIFJlcG9ydCB0aGUgZXJyb3IgY29uZGl0aW9uCiAgICAgdm9pZCByZXBvcnRGYXRhbCggY2hhciBjb25zdCAqIGNvbnN0IG1lc3NhZ2UgKSB7CiAgICAgICAgIENhdGNoOjpnZXRDdXJyZW50Q29udGV4dCgpLmdldFJlc3VsdENhcHR1cmUoKS0+aGFuZGxlRmF0YWxFcnJvckNvbmRpdGlvbiggbWVzc2FnZSApOwogICAgIH0KIH0KLSNlbmRpZgogCi0jaWYgZGVmaW5lZCAoIENBVENIX1BMQVRGT1JNX1dJTkRPV1MgKSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworI2VuZGlmIC8vIHNpZ25hbHMvU0VIIGhhbmRsaW5nCiAKLSMgIGlmICFkZWZpbmVkICggQ0FUQ0hfQ09ORklHX1dJTkRPV1NfU0VIICkKLQotbmFtZXNwYWNlIENhdGNoIHsKLSAgICB2b2lkIEZhdGFsQ29uZGl0aW9uSGFuZGxlcjo6cmVzZXQoKSB7fQotfQotCi0jICBlbHNlIC8vIENBVENIX0NPTkZJR19XSU5ET1dTX1NFSCBpcyBkZWZpbmVkCisjaWYgZGVmaW5lZCggQ0FUQ0hfQ09ORklHX1dJTkRPV1NfU0VIICkKIAogbmFtZXNwYWNlIENhdGNoIHsKICAgICBzdHJ1Y3QgU2lnbmFsRGVmcyB7IERXT1JEIGlkOyBjb25zdCBjaGFyKiBuYW1lOyB9OwpAQCAtNzQsNyArNjgsNiBAQAogCiAgICAgdm9pZCBGYXRhbENvbmRpdGlvbkhhbmRsZXI6OnJlc2V0KCkgewogICAgICAgICBpZiAoaXNTZXQpIHsKLSAgICAgICAgICAgIC8vIFVucmVnaXN0ZXIgaGFuZGxlciBhbmQgcmVzdG9yZSB0aGUgb2xkIGd1YXJhbnRlZQogICAgICAgICAgICAgUmVtb3ZlVmVjdG9yZWRFeGNlcHRpb25IYW5kbGVyKGV4Y2VwdGlvbkhhbmRsZXJIYW5kbGUpOwogICAgICAgICAgICAgU2V0VGhyZWFkU3RhY2tHdWFyYW50ZWUoJmd1YXJhbnRlZVNpemUpOwogICAgICAgICAgICAgZXhjZXB0aW9uSGFuZGxlckhhbmRsZSA9IG51bGxwdHI7CkBAIC05MywyMCArODYsNyBAQAogCiB9IC8vIG5hbWVzcGFjZSBDYXRjaAogCi0jICBlbmRpZiAvLyBDQVRDSF9DT05GSUdfV0lORE9XU19TRUgKLQotI2Vsc2UgLy8gTm90IFdpbmRvd3MgLSBhc3N1bWVkIHRvIGJlIFBPU0lYIGNvbXBhdGlibGUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotIyAgaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX1BPU0lYX1NJR05BTFMpCi0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgdm9pZCBGYXRhbENvbmRpdGlvbkhhbmRsZXI6OnJlc2V0KCkge30KLX0KLQotCi0jICBlbHNlIC8vIENBVENIX0NPTkZJR19QT1NJWF9TSUdOQUxTIGlzIGRlZmluZWQKLQotI2luY2x1ZGUgPHNpZ25hbC5oPgorI2VsaWYgZGVmaW5lZCggQ0FUQ0hfQ09ORklHX1BPU0lYX1NJR05BTFMgKQogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCkBAIC0xMTQsNiArOTQsMTEgQEAKICAgICAgICAgaW50IGlkOwogICAgICAgICBjb25zdCBjaGFyKiBuYW1lOwogICAgIH07CisgICAgCisgICAgLy8gMzJrYiBmb3IgdGhlIGFsdGVybmF0ZSBzdGFjayBzZWVtcyB0byBiZSBzdWZmaWNpZW50LiBIb3dldmVyLCB0aGlzIHZhbHVlCisgICAgLy8gaXMgZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZCwgc28gdGhhdCdzIG5vdCBndWFyYW50ZWVkLgorICAgIGNvbnN0ZXhwciBzdGF0aWMgc3RkOjpzaXplX3Qgc2lnU3RhY2tTaXplID0gMzI3NjggPj0gTUlOU0lHU1RLU1ogPyAzMjc2OCA6IE1JTlNJR1NUS1NaOworCiAgICAgc3RhdGljIFNpZ25hbERlZnMgc2lnbmFsRGVmc1tdID0gewogICAgICAgICB7IFNJR0lOVCwgICJTSUdJTlQgLSBUZXJtaW5hbCBpbnRlcnJ1cHQgc2lnbmFsIiB9LAogICAgICAgICB7IFNJR0lMTCwgICJTSUdJTEwgLSBJbGxlZ2FsIGluc3RydWN0aW9uIHNpZ25hbCIgfSwKQEAgLTE0MSw3ICsxMjYsNyBAQAogICAgICAgICBpc1NldCA9IHRydWU7CiAgICAgICAgIHN0YWNrX3Qgc2lnU3RhY2s7CiAgICAgICAgIHNpZ1N0YWNrLnNzX3NwID0gYWx0U3RhY2tNZW07Ci0gICAgICAgIHNpZ1N0YWNrLnNzX3NpemUgPSBTSUdTVEtTWjsKKyAgICAgICAgc2lnU3RhY2suc3Nfc2l6ZSA9IHNpZ1N0YWNrU2l6ZTsKICAgICAgICAgc2lnU3RhY2suc3NfZmxhZ3MgPSAwOwogICAgICAgICBzaWdhbHRzdGFjaygmc2lnU3RhY2ssICZvbGRTaWdTdGFjayk7CiAgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gc2EgPSB7IH07CkBAIC0xNzMsMTQgKzE1OCwxOCBAQAogICAgIGJvb2wgRmF0YWxDb25kaXRpb25IYW5kbGVyOjppc1NldCA9IGZhbHNlOwogICAgIHN0cnVjdCBzaWdhY3Rpb24gRmF0YWxDb25kaXRpb25IYW5kbGVyOjpvbGRTaWdBY3Rpb25zW3NpemVvZihzaWduYWxEZWZzKS9zaXplb2YoU2lnbmFsRGVmcyldID0ge307CiAgICAgc3RhY2tfdCBGYXRhbENvbmRpdGlvbkhhbmRsZXI6Om9sZFNpZ1N0YWNrID0ge307Ci0gICAgY2hhciBGYXRhbENvbmRpdGlvbkhhbmRsZXI6OmFsdFN0YWNrTWVtW1NJR1NUS1NaXSA9IHt9OworICAgIGNoYXIgRmF0YWxDb25kaXRpb25IYW5kbGVyOjphbHRTdGFja01lbVtzaWdTdGFja1NpemVdID0ge307CiAKIAogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIAotIyAgZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX1BPU0lYX1NJR05BTFMKKyNlbHNlCiAKLSNlbmRpZiAvLyBub3QgV2luZG93cworbmFtZXNwYWNlIENhdGNoIHsKKyAgICB2b2lkIEZhdGFsQ29uZGl0aW9uSGFuZGxlcjo6cmVzZXQoKSB7fQorfQorCisjZW5kaWYgLy8gc2lnbmFscy9TRUggaGFuZGxpbmcKIAogI2lmIGRlZmluZWQoX19HTlVDX18pCiAjICAgIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZmF0YWxfY29uZGl0aW9uLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ZhdGFsX2NvbmRpdGlvbi5oCmluZGV4IDk5Nzc3MDIuLmE2NGZhNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfZmF0YWxfY29uZGl0aW9uLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9mYXRhbF9jb25kaXRpb24uaApAQCAtOSwyMyArOSwxMiBAQAogI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfRkFUQUxfQ09ORElUSU9OX0hfSU5DTFVERUQKICNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX0ZBVEFMX0NPTkRJVElPTl9IX0lOQ0xVREVECiAKLSNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSAiY2F0Y2hfcGxhdGZvcm0uaCIKICNpbmNsdWRlICJjYXRjaF9jb21waWxlcl9jYXBhYmlsaXRpZXMuaCIKLQotCi0jaWYgZGVmaW5lZCAoIENBVENIX1BMQVRGT1JNX1dJTkRPV1MgKSAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogI2luY2x1ZGUgImNhdGNoX3dpbmRvd3NfaF9wcm94eS5oIgogCi0jICBpZiAhZGVmaW5lZCAoIENBVENIX0NPTkZJR19XSU5ET1dTX1NFSCApCiAKLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgc3RydWN0IEZhdGFsQ29uZGl0aW9uSGFuZGxlciB7Ci0gICAgICAgIHZvaWQgcmVzZXQoKTsKLSAgICB9OwotfQotCi0jICBlbHNlIC8vIENBVENIX0NPTkZJR19XSU5ET1dTX1NFSCBpcyBkZWZpbmVkCisjaWYgZGVmaW5lZCggQ0FUQ0hfQ09ORklHX1dJTkRPV1NfU0VIICkKIAogbmFtZXNwYWNlIENhdGNoIHsKIApAQCAtNDQsMjAgKzMzLDcgQEAKIAogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIAotIyAgZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX1dJTkRPV1NfU0VICi0KLSNlbHNlIC8vIE5vdCBXaW5kb3dzIC0gYXNzdW1lZCB0byBiZSBQT1NJWCBjb21wYXRpYmxlIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi0KLSMgIGlmICFkZWZpbmVkKENBVENIX0NPTkZJR19QT1NJWF9TSUdOQUxTKQotCi1uYW1lc3BhY2UgQ2F0Y2ggewotICAgIHN0cnVjdCBGYXRhbENvbmRpdGlvbkhhbmRsZXIgewotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgfTsKLX0KLQotCi0jICBlbHNlIC8vIENBVENIX0NPTkZJR19QT1NJWF9TSUdOQUxTIGlzIGRlZmluZWQKKyNlbGlmIGRlZmluZWQgKCBDQVRDSF9DT05GSUdfUE9TSVhfU0lHTkFMUyApCiAKICNpbmNsdWRlIDxzaWduYWwuaD4KIApAQCAtNjYsNyArNDIsNyBAQAogICAgIHN0cnVjdCBGYXRhbENvbmRpdGlvbkhhbmRsZXIgewogCiAgICAgICAgIHN0YXRpYyBib29sIGlzU2V0OwotICAgICAgICBzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRTaWdBY3Rpb25zW107Ly8gW3NpemVvZihzaWduYWxEZWZzKSAvIHNpemVvZihTaWduYWxEZWZzKV07CisgICAgICAgIHN0YXRpYyBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZFNpZ0FjdGlvbnNbXTsKICAgICAgICAgc3RhdGljIHN0YWNrX3Qgb2xkU2lnU3RhY2s7CiAgICAgICAgIHN0YXRpYyBjaGFyIGFsdFN0YWNrTWVtW107CiAKQEAgLTc5LDggKzU1LDE1IEBACiAKIH0gLy8gbmFtZXNwYWNlIENhdGNoCiAKLSMgIGVuZGlmIC8vIENBVENIX0NPTkZJR19QT1NJWF9TSUdOQUxTCiAKLSNlbmRpZiAvLyBub3QgV2luZG93cworI2Vsc2UKKworbmFtZXNwYWNlIENhdGNoIHsKKyAgICBzdHJ1Y3QgRmF0YWxDb25kaXRpb25IYW5kbGVyIHsKKyAgICAgICAgdm9pZCByZXNldCgpOworICAgIH07Cit9CisKKyNlbmRpZgogCiAjZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX0ZBVEFMX0NPTkRJVElPTl9IX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2dlbmVyYXRvcnMuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZmJlMmQyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzLmNwcApAQCAtMCwwICsxLDMyIEBACisvKgorICogIENyZWF0ZWQgYnkgUGhpbCBOYXNoIG9uIDE1LzYvMjAxOC4KKyAqCisgKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorICovCisKKyNpbmNsdWRlICJjYXRjaF9nZW5lcmF0b3JzLmhwcCIKKyNpbmNsdWRlICJjYXRjaF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5oIgorI2luY2x1ZGUgImNhdGNoX2ludGVyZmFjZXNfY2FwdHVyZS5oIgorCisjaW5jbHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHNldD4KKworbmFtZXNwYWNlIENhdGNoIHsKKworSUdlbmVyYXRvclRyYWNrZXI6On5JR2VuZXJhdG9yVHJhY2tlcigpIHt9CisKK2NvbnN0IGNoYXIqIEdlbmVyYXRvckV4Y2VwdGlvbjo6d2hhdCgpIGNvbnN0IG5vZXhjZXB0IHsKKyAgICByZXR1cm4gbV9tc2c7Cit9CisKK25hbWVzcGFjZSBHZW5lcmF0b3JzIHsKKworICAgIEdlbmVyYXRvclVudHlwZWRCYXNlOjp+R2VuZXJhdG9yVW50eXBlZEJhc2UoKSB7fQorCisgICAgYXV0byBhY3F1aXJlR2VuZXJhdG9yVHJhY2tlciggU291cmNlTGluZUluZm8gY29uc3QmIGxpbmVJbmZvICkgLT4gSUdlbmVyYXRvclRyYWNrZXImIHsKKyAgICAgICAgcmV0dXJuIGdldFJlc3VsdENhcHR1cmUoKS5hY3F1aXJlR2VuZXJhdG9yVHJhY2tlciggbGluZUluZm8gKTsKKyAgICB9CisKK30gLy8gbmFtZXNwYWNlIEdlbmVyYXRvcnMKK30gLy8gbmFtZXNwYWNlIENhdGNoCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2dlbmVyYXRvcnMuaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGU0MzRlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzLmhwcApAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqICBDcmVhdGVkIGJ5IFBoaWwgTmFzaCBvbiAxNS82LzIwMTguCisgKgorICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAqLworI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfR0VORVJBVE9SU19IUFBfSU5DTFVERUQKKyNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX0dFTkVSQVRPUlNfSFBQX0lOQ0xVREVECisKKyNpbmNsdWRlICJjYXRjaF9pbnRlcmZhY2VzX2dlbmVyYXRvcnRyYWNrZXIuaCIKKyNpbmNsdWRlICJjYXRjaF9jb21tb24uaCIKKyNpbmNsdWRlICJjYXRjaF9lbmZvcmNlLmgiCisKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPGNhc3NlcnQ+CisKKyNpbmNsdWRlIDx1dGlsaXR5PgorI2luY2x1ZGUgPGV4Y2VwdGlvbj4KKworbmFtZXNwYWNlIENhdGNoIHsKKworY2xhc3MgR2VuZXJhdG9yRXhjZXB0aW9uIDogcHVibGljIHN0ZDo6ZXhjZXB0aW9uIHsKKyAgICBjb25zdCBjaGFyKiBjb25zdCBtX21zZyA9ICIiOworCitwdWJsaWM6CisgICAgR2VuZXJhdG9yRXhjZXB0aW9uKGNvbnN0IGNoYXIqIG1zZyk6CisgICAgICAgIG1fbXNnKG1zZykKKyAgICB7fQorCisgICAgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IG5vZXhjZXB0IG92ZXJyaWRlIGZpbmFsOworfTsKKworbmFtZXNwYWNlIEdlbmVyYXRvcnMgeworCisgICAgLy8gIVRCRCBtb3ZlIHRoaXMgaW50byBpdHMgb3duIGxvY2F0aW9uPworICAgIG5hbWVzcGFjZSBwZnsKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJncz4KKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFQ+IG1ha2VfdW5pcXVlKCBBcmdzJiYuLi4gYXJncyApIHsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnVuaXF1ZV9wdHI8VD4obmV3IFQoc3RkOjpmb3J3YXJkPEFyZ3M+KGFyZ3MpLi4uKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBJR2VuZXJhdG9yIDogR2VuZXJhdG9yVW50eXBlZEJhc2UgeworICAgICAgICB2aXJ0dWFsIH5JR2VuZXJhdG9yKCkgPSBkZWZhdWx0OworCisgICAgICAgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgZWxlbWVudCBvZiB0aGUgZ2VuZXJhdG9yCisgICAgICAgIC8vCisgICAgICAgIC8vIFxQcmVjb25kaXRpb24gVGhlIGdlbmVyYXRvciBpcyBlaXRoZXIgZnJlc2hseSBjb25zdHJ1Y3RlZCwKKyAgICAgICAgLy8gb3IgdGhlIGxhc3QgY2FsbCB0byBgbmV4dCgpYCByZXR1cm5lZCB0cnVlCisgICAgICAgIHZpcnR1YWwgVCBjb25zdCYgZ2V0KCkgY29uc3QgPSAwOworICAgICAgICB1c2luZyB0eXBlID0gVDsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBTaW5nbGVWYWx1ZUdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBJR2VuZXJhdG9yPFQ+IHsKKyAgICAgICAgVCBtX3ZhbHVlOworICAgIHB1YmxpYzoKKyAgICAgICAgU2luZ2xlVmFsdWVHZW5lcmF0b3IoVCBjb25zdCYgdmFsdWUpIDogbV92YWx1ZSggdmFsdWUgKSB7fQorICAgICAgICBTaW5nbGVWYWx1ZUdlbmVyYXRvcihUJiYgdmFsdWUpIDogbV92YWx1ZShzdGQ6Om1vdmUodmFsdWUpKSB7fQorCisgICAgICAgIFQgY29uc3QmIGdldCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgICAgICB9CisgICAgICAgIGJvb2wgbmV4dCgpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNsYXNzIEZpeGVkVmFsdWVzR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIElHZW5lcmF0b3I8VD4geworICAgICAgICBzdGQ6OnZlY3RvcjxUPiBtX3ZhbHVlczsKKyAgICAgICAgc2l6ZV90IG1faWR4ID0gMDsKKyAgICBwdWJsaWM6CisgICAgICAgIEZpeGVkVmFsdWVzR2VuZXJhdG9yKCBzdGQ6OmluaXRpYWxpemVyX2xpc3Q8VD4gdmFsdWVzICkgOiBtX3ZhbHVlcyggdmFsdWVzICkge30KKworICAgICAgICBUIGNvbnN0JiBnZXQoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZXNbbV9pZHhdOworICAgICAgICB9CisgICAgICAgIGJvb2wgbmV4dCgpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgICsrbV9pZHg7CisgICAgICAgICAgICByZXR1cm4gbV9pZHggPCBtX3ZhbHVlcy5zaXplKCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgR2VuZXJhdG9yV3JhcHBlciBmaW5hbCB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxJR2VuZXJhdG9yPFQ+PiBtX2dlbmVyYXRvcjsKKyAgICBwdWJsaWM6CisgICAgICAgIEdlbmVyYXRvcldyYXBwZXIoc3RkOjp1bmlxdWVfcHRyPElHZW5lcmF0b3I8VD4+IGdlbmVyYXRvcik6CisgICAgICAgICAgICBtX2dlbmVyYXRvcihzdGQ6Om1vdmUoZ2VuZXJhdG9yKSkKKyAgICAgICAge30KKyAgICAgICAgVCBjb25zdCYgZ2V0KCkgY29uc3QgeworICAgICAgICAgICAgcmV0dXJuIG1fZ2VuZXJhdG9yLT5nZXQoKTsKKyAgICAgICAgfQorICAgICAgICBib29sIG5leHQoKSB7CisgICAgICAgICAgICByZXR1cm4gbV9nZW5lcmF0b3ItPm5leHQoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBHZW5lcmF0b3JXcmFwcGVyPFQ+IHZhbHVlKFQmJiB2YWx1ZSkgeworICAgICAgICByZXR1cm4gR2VuZXJhdG9yV3JhcHBlcjxUPihwZjo6bWFrZV91bmlxdWU8U2luZ2xlVmFsdWVHZW5lcmF0b3I8VD4+KHN0ZDo6Zm9yd2FyZDxUPih2YWx1ZSkpKTsKKyAgICB9CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgR2VuZXJhdG9yV3JhcHBlcjxUPiB2YWx1ZXMoc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IHZhbHVlcykgeworICAgICAgICByZXR1cm4gR2VuZXJhdG9yV3JhcHBlcjxUPihwZjo6bWFrZV91bmlxdWU8Rml4ZWRWYWx1ZXNHZW5lcmF0b3I8VD4+KHZhbHVlcykpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgR2VuZXJhdG9ycyA6IHB1YmxpYyBJR2VuZXJhdG9yPFQ+IHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8R2VuZXJhdG9yV3JhcHBlcjxUPj4gbV9nZW5lcmF0b3JzOworICAgICAgICBzaXplX3QgbV9jdXJyZW50ID0gMDsKKworICAgICAgICB2b2lkIHBvcHVsYXRlKEdlbmVyYXRvcldyYXBwZXI8VD4mJiBnZW5lcmF0b3IpIHsKKyAgICAgICAgICAgIG1fZ2VuZXJhdG9ycy5lbXBsYWNlX2JhY2soc3RkOjptb3ZlKGdlbmVyYXRvcikpOworICAgICAgICB9CisgICAgICAgIHZvaWQgcG9wdWxhdGUoVCYmIHZhbCkgeworICAgICAgICAgICAgbV9nZW5lcmF0b3JzLmVtcGxhY2VfYmFjayh2YWx1ZShzdGQ6Om1vdmUodmFsKSkpOworICAgICAgICB9CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFU+CisgICAgICAgIHZvaWQgcG9wdWxhdGUoVSYmIHZhbCkgeworICAgICAgICAgICAgcG9wdWxhdGUoVChzdGQ6Om1vdmUodmFsKSkpOworICAgICAgICB9CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFUsIHR5cGVuYW1lLi4uIEdzPgorICAgICAgICB2b2lkIHBvcHVsYXRlKFUmJiB2YWx1ZU9yR2VuZXJhdG9yLCBHcy4uLiBtb3JlR2VuZXJhdG9ycykgeworICAgICAgICAgICAgcG9wdWxhdGUoc3RkOjpmb3J3YXJkPFU+KHZhbHVlT3JHZW5lcmF0b3IpKTsKKyAgICAgICAgICAgIHBvcHVsYXRlKHN0ZDo6Zm9yd2FyZDxHcz4obW9yZUdlbmVyYXRvcnMpLi4uKTsKKyAgICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gR3M+CisgICAgICAgIEdlbmVyYXRvcnMoR3MuLi4gbW9yZUdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAgIG1fZ2VuZXJhdG9ycy5yZXNlcnZlKHNpemVvZi4uLihHcykpOworICAgICAgICAgICAgcG9wdWxhdGUoc3RkOjpmb3J3YXJkPEdzPihtb3JlR2VuZXJhdG9ycykuLi4pOworICAgICAgICB9CisKKyAgICAgICAgVCBjb25zdCYgZ2V0KCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAgICAgcmV0dXJuIG1fZ2VuZXJhdG9yc1ttX2N1cnJlbnRdLmdldCgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBuZXh0KCkgb3ZlcnJpZGUgeworICAgICAgICAgICAgaWYgKG1fY3VycmVudCA+PSBtX2dlbmVyYXRvcnMuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3QgYm9vbCBjdXJyZW50X3N0YXR1cyA9IG1fZ2VuZXJhdG9yc1ttX2N1cnJlbnRdLm5leHQoKTsKKyAgICAgICAgICAgIGlmICghY3VycmVudF9zdGF0dXMpIHsKKyAgICAgICAgICAgICAgICArK21fY3VycmVudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnQgPCBtX2dlbmVyYXRvcnMuc2l6ZSgpOworICAgICAgICB9CisgICAgfTsKKworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gVHM+CisgICAgR2VuZXJhdG9yV3JhcHBlcjxzdGQ6OnR1cGxlPFRzLi4uPj4gdGFibGUoIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnR1cGxlPHR5cGVuYW1lIHN0ZDo6ZGVjYXk8VHM+Ojp0eXBlLi4uPj4gdHVwbGVzICkgeworICAgICAgICByZXR1cm4gdmFsdWVzPHN0ZDo6dHVwbGU8VHMuLi4+PiggdHVwbGVzICk7CisgICAgfQorCisgICAgLy8gVGFnIHR5cGUgdG8gc2lnbmFsIHRoYXQgYSBnZW5lcmF0b3Igc2VxdWVuY2Ugc2hvdWxkIGNvbnZlcnQgYXJndW1lbnRzIHRvIGEgc3BlY2lmaWMgdHlwZQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBhcyB7fTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEdzPgorICAgIGF1dG8gbWFrZUdlbmVyYXRvcnMoIEdlbmVyYXRvcldyYXBwZXI8VD4mJiBnZW5lcmF0b3IsIEdzLi4uIG1vcmVHZW5lcmF0b3JzICkgLT4gR2VuZXJhdG9yczxUPiB7CisgICAgICAgIHJldHVybiBHZW5lcmF0b3JzPFQ+KHN0ZDo6bW92ZShnZW5lcmF0b3IpLCBzdGQ6OmZvcndhcmQ8R3M+KG1vcmVHZW5lcmF0b3JzKS4uLik7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgYXV0byBtYWtlR2VuZXJhdG9ycyggR2VuZXJhdG9yV3JhcHBlcjxUPiYmIGdlbmVyYXRvciApIC0+IEdlbmVyYXRvcnM8VD4geworICAgICAgICByZXR1cm4gR2VuZXJhdG9yczxUPihzdGQ6Om1vdmUoZ2VuZXJhdG9yKSk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEdzPgorICAgIGF1dG8gbWFrZUdlbmVyYXRvcnMoIFQmJiB2YWwsIEdzLi4uIG1vcmVHZW5lcmF0b3JzICkgLT4gR2VuZXJhdG9yczxUPiB7CisgICAgICAgIHJldHVybiBtYWtlR2VuZXJhdG9ycyggdmFsdWUoIHN0ZDo6Zm9yd2FyZDxUPiggdmFsICkgKSwgc3RkOjpmb3J3YXJkPEdzPiggbW9yZUdlbmVyYXRvcnMgKS4uLiApOworICAgIH0KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZS4uLiBHcz4KKyAgICBhdXRvIG1ha2VHZW5lcmF0b3JzKCBhczxUPiwgVSYmIHZhbCwgR3MuLi4gbW9yZUdlbmVyYXRvcnMgKSAtPiBHZW5lcmF0b3JzPFQ+IHsKKyAgICAgICAgcmV0dXJuIG1ha2VHZW5lcmF0b3JzKCB2YWx1ZSggVCggc3RkOjpmb3J3YXJkPFU+KCB2YWwgKSApICksIHN0ZDo6Zm9yd2FyZDxHcz4oIG1vcmVHZW5lcmF0b3JzICkuLi4gKTsKKyAgICB9CisKKyAgICBhdXRvIGFjcXVpcmVHZW5lcmF0b3JUcmFja2VyKCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgbGluZUluZm8gKSAtPiBJR2VuZXJhdG9yVHJhY2tlciY7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBMPgorICAgIC8vIE5vdGU6IFRoZSB0eXBlIGFmdGVyIC0+IGlzIHdlaXJkLCBiZWNhdXNlIFZTMjAxNSBjYW5ub3QgcGFyc2UKKyAgICAvLyAgICAgICB0aGUgZXhwcmVzc2lvbiB1c2VkIGluIHRoZSB0eXBlZGVmIGluc2lkZSwgd2hlbiBpdCBpcyBpbgorICAgIC8vICAgICAgIHJldHVybiB0eXBlLiBZZWFoLgorICAgIGF1dG8gZ2VuZXJhdGUoIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbywgTCBjb25zdCYgZ2VuZXJhdG9yRXhwcmVzc2lvbiApIC0+IGRlY2x0eXBlKHN0ZDo6ZGVjbHZhbDxkZWNsdHlwZShnZW5lcmF0b3JFeHByZXNzaW9uKCkpPigpLmdldCgpKSB7CisgICAgICAgIHVzaW5nIFVuZGVybHlpbmdUeXBlID0gdHlwZW5hbWUgZGVjbHR5cGUoZ2VuZXJhdG9yRXhwcmVzc2lvbigpKTo6dHlwZTsKKworICAgICAgICBJR2VuZXJhdG9yVHJhY2tlciYgdHJhY2tlciA9IGFjcXVpcmVHZW5lcmF0b3JUcmFja2VyKCBsaW5lSW5mbyApOworICAgICAgICBpZiAoIXRyYWNrZXIuaGFzR2VuZXJhdG9yKCkpIHsKKyAgICAgICAgICAgIHRyYWNrZXIuc2V0R2VuZXJhdG9yKHBmOjptYWtlX3VuaXF1ZTxHZW5lcmF0b3JzPFVuZGVybHlpbmdUeXBlPj4oZ2VuZXJhdG9yRXhwcmVzc2lvbigpKSk7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNvbnN0JiBnZW5lcmF0b3IgPSBzdGF0aWNfY2FzdDxJR2VuZXJhdG9yPFVuZGVybHlpbmdUeXBlPiBjb25zdCY+KCAqdHJhY2tlci5nZXRHZW5lcmF0b3IoKSApOworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmdldCgpOworICAgIH0KKworfSAvLyBuYW1lc3BhY2UgR2VuZXJhdG9ycworfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKKworI2RlZmluZSBHRU5FUkFURSggLi4uICkgXAorICAgIENhdGNoOjpHZW5lcmF0b3JzOjpnZW5lcmF0ZSggQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIFtdeyB1c2luZyBuYW1lc3BhY2UgQ2F0Y2g6OkdlbmVyYXRvcnM7IHJldHVybiBtYWtlR2VuZXJhdG9ycyggX19WQV9BUkdTX18gKTsgfSApCisKKworI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9HRU5FUkFUT1JTX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzX2dlbmVyaWMuaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzX2dlbmVyaWMuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMjZkYmMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2dlbmVyYXRvcnNfZ2VuZXJpYy5ocHAKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiAgQ3JlYXRlZCBieSBNYXJ0aW4gb24gMjMvMi8yMDE5LgorICoKKyAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisgKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCisgKi8KKyNpZm5kZWYgVFdPQkxVRUNVQkVTX0NBVENIX0dFTkVSQVRPUlNfR0VORVJJQ19IUFBfSU5DTFVERUQKKyNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX0dFTkVSQVRPUlNfR0VORVJJQ19IUFBfSU5DTFVERUQKKworI2luY2x1ZGUgImNhdGNoX2dlbmVyYXRvcnMuaHBwIgorCituYW1lc3BhY2UgQ2F0Y2ggeworbmFtZXNwYWNlIEdlbmVyYXRvcnMgeworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgVGFrZUdlbmVyYXRvciA6IHB1YmxpYyBJR2VuZXJhdG9yPFQ+IHsKKyAgICAgICAgR2VuZXJhdG9yV3JhcHBlcjxUPiBtX2dlbmVyYXRvcjsKKyAgICAgICAgc2l6ZV90IG1fcmV0dXJuZWQgPSAwOworICAgICAgICBzaXplX3QgbV90YXJnZXQ7CisgICAgcHVibGljOgorICAgICAgICBUYWtlR2VuZXJhdG9yKHNpemVfdCB0YXJnZXQsIEdlbmVyYXRvcldyYXBwZXI8VD4mJiBnZW5lcmF0b3IpOgorICAgICAgICAgICAgbV9nZW5lcmF0b3Ioc3RkOjptb3ZlKGdlbmVyYXRvcikpLAorICAgICAgICAgICAgbV90YXJnZXQodGFyZ2V0KQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQodGFyZ2V0ICE9IDAgJiYgIkVtcHR5IGdlbmVyYXRvcnMgYXJlIG5vdCBhbGxvd2VkIik7CisgICAgICAgIH0KKyAgICAgICAgVCBjb25zdCYgZ2V0KCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAgICAgcmV0dXJuIG1fZ2VuZXJhdG9yLmdldCgpOworICAgICAgICB9CisgICAgICAgIGJvb2wgbmV4dCgpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgICsrbV9yZXR1cm5lZDsKKyAgICAgICAgICAgIGlmIChtX3JldHVybmVkID49IG1fdGFyZ2V0KSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb25zdCBhdXRvIHN1Y2Nlc3MgPSBtX2dlbmVyYXRvci5uZXh0KCk7CisgICAgICAgICAgICAvLyBJZiB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IgZG9lcyBub3QgY29udGFpbiBlbm91Z2ggdmFsdWVzCisgICAgICAgICAgICAvLyB0aGVuIHdlIGN1dCBzaG9ydCBhcyB3ZWxsCisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICBtX3JldHVybmVkID0gbV90YXJnZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBHZW5lcmF0b3JXcmFwcGVyPFQ+IHRha2Uoc2l6ZV90IHRhcmdldCwgR2VuZXJhdG9yV3JhcHBlcjxUPiYmIGdlbmVyYXRvcikgeworICAgICAgICByZXR1cm4gR2VuZXJhdG9yV3JhcHBlcjxUPihwZjo6bWFrZV91bmlxdWU8VGFrZUdlbmVyYXRvcjxUPj4odGFyZ2V0LCBzdGQ6Om1vdmUoZ2VuZXJhdG9yKSkpOworICAgIH0KKworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFByZWRpY2F0ZT4KKyAgICBjbGFzcyBGaWx0ZXJHZW5lcmF0b3IgOiBwdWJsaWMgSUdlbmVyYXRvcjxUPiB7CisgICAgICAgIEdlbmVyYXRvcldyYXBwZXI8VD4gbV9nZW5lcmF0b3I7CisgICAgICAgIFByZWRpY2F0ZSBtX3ByZWRpY2F0ZTsKKyAgICBwdWJsaWM6CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBQID0gUHJlZGljYXRlPgorICAgICAgICBGaWx0ZXJHZW5lcmF0b3IoUCYmIHByZWQsIEdlbmVyYXRvcldyYXBwZXI8VD4mJiBnZW5lcmF0b3IpOgorICAgICAgICAgICAgbV9nZW5lcmF0b3Ioc3RkOjptb3ZlKGdlbmVyYXRvcikpLAorICAgICAgICAgICAgbV9wcmVkaWNhdGUoc3RkOjpmb3J3YXJkPFA+KHByZWQpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fcHJlZGljYXRlKG1fZ2VuZXJhdG9yLmdldCgpKSkgeworICAgICAgICAgICAgICAgIC8vIEl0IG1pZ2h0IGhhcHBlbiB0aGF0IHRoZXJlIGFyZSBubyB2YWx1ZXMgdGhhdCBwYXNzIHRoZQorICAgICAgICAgICAgICAgIC8vIGZpbHRlci4gSW4gdGhhdCBjYXNlIHdlIHRocm93IGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgICAgICBhdXRvIGhhc19pbml0aWFsX3ZhbHVlID0gbmV4dCgpOworICAgICAgICAgICAgICAgIGlmICghaGFzX2luaXRpYWxfdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgQ2F0Y2g6OnRocm93X2V4Y2VwdGlvbihHZW5lcmF0b3JFeGNlcHRpb24oIk5vIHZhbGlkIHZhbHVlIGZvdW5kIGluIGZpbHRlcmVkIGdlbmVyYXRvciIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBUIGNvbnN0JiBnZXQoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgICAgICByZXR1cm4gbV9nZW5lcmF0b3IuZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIG5leHQoKSBvdmVycmlkZSB7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBtX2dlbmVyYXRvci5uZXh0KCk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoIW1fcHJlZGljYXRlKG1fZ2VuZXJhdG9yLmdldCgpKSAmJiAoc3VjY2VzcyA9IG1fZ2VuZXJhdG9yLm5leHQoKSkgPT0gdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICAgICAgfQorICAgIH07CisKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBQcmVkaWNhdGU+CisgICAgR2VuZXJhdG9yV3JhcHBlcjxUPiBmaWx0ZXIoUHJlZGljYXRlJiYgcHJlZCwgR2VuZXJhdG9yV3JhcHBlcjxUPiYmIGdlbmVyYXRvcikgeworICAgICAgICByZXR1cm4gR2VuZXJhdG9yV3JhcHBlcjxUPihzdGQ6OnVuaXF1ZV9wdHI8SUdlbmVyYXRvcjxUPj4ocGY6Om1ha2VfdW5pcXVlPEZpbHRlckdlbmVyYXRvcjxULCBQcmVkaWNhdGU+PihzdGQ6OmZvcndhcmQ8UHJlZGljYXRlPihwcmVkKSwgc3RkOjptb3ZlKGdlbmVyYXRvcikpKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgUmVwZWF0R2VuZXJhdG9yIDogcHVibGljIElHZW5lcmF0b3I8VD4geworICAgICAgICBHZW5lcmF0b3JXcmFwcGVyPFQ+IG1fZ2VuZXJhdG9yOworICAgICAgICBtdXRhYmxlIHN0ZDo6dmVjdG9yPFQ+IG1fcmV0dXJuZWQ7CisgICAgICAgIHNpemVfdCBtX3RhcmdldF9yZXBlYXRzOworICAgICAgICBzaXplX3QgbV9jdXJyZW50X3JlcGVhdCA9IDA7CisgICAgICAgIHNpemVfdCBtX3JlcGVhdF9pbmRleCA9IDA7CisgICAgcHVibGljOgorICAgICAgICBSZXBlYXRHZW5lcmF0b3Ioc2l6ZV90IHJlcGVhdHMsIEdlbmVyYXRvcldyYXBwZXI8VD4mJiBnZW5lcmF0b3IpOgorICAgICAgICAgICAgbV9nZW5lcmF0b3Ioc3RkOjptb3ZlKGdlbmVyYXRvcikpLAorICAgICAgICAgICAgbV90YXJnZXRfcmVwZWF0cyhyZXBlYXRzKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV90YXJnZXRfcmVwZWF0cyA+IDAgJiYgIlJlcGVhdCBnZW5lcmF0b3IgbXVzdCByZXBlYXQgYXQgbGVhc3Qgb25jZSIpOworICAgICAgICB9CisKKyAgICAgICAgVCBjb25zdCYgZ2V0KCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAgICAgaWYgKG1fY3VycmVudF9yZXBlYXQgPT0gMCkgeworICAgICAgICAgICAgICAgIG1fcmV0dXJuZWQucHVzaF9iYWNrKG1fZ2VuZXJhdG9yLmdldCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9yZXR1cm5lZC5iYWNrKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbV9yZXR1cm5lZFttX3JlcGVhdF9pbmRleF07CisgICAgICAgIH0KKworICAgICAgICBib29sIG5leHQoKSBvdmVycmlkZSB7CisgICAgICAgICAgICAvLyBUaGVyZSBhcmUgMiBiYXNpYyBjYXNlczoKKyAgICAgICAgICAgIC8vIDEpIFdlIGFyZSBzdGlsbCByZWFkaW5nIHRoZSBnZW5lcmF0b3IKKyAgICAgICAgICAgIC8vIDIpIFdlIGFyZSByZWFkaW5nIG91ciBvd24gY2FjaGUKKworICAgICAgICAgICAgLy8gSW4gdGhlIGZpcnN0IGNhc2UsIHdlIG5lZWQgdG8gcG9rZSB0aGUgdW5kZXJseWluZyBnZW5lcmF0b3IuCisgICAgICAgICAgICAvLyBJZiBpdCBoYXBwaWx5IG1vdmVzLCB3ZSBhcmUgbGVmdCBpbiB0aGF0IHN0YXRlLCBvdGhlcndpc2UgaXQgaXMgdGltZSB0byBzdGFydCByZWFkaW5nIGZyb20gb3VyIGNhY2hlCisgICAgICAgICAgICBpZiAobV9jdXJyZW50X3JlcGVhdCA9PSAwKSB7CisgICAgICAgICAgICAgICAgY29uc3QgYXV0byBzdWNjZXNzID0gbV9nZW5lcmF0b3IubmV4dCgpOworICAgICAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgICAgICArK21fY3VycmVudF9yZXBlYXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBtX2N1cnJlbnRfcmVwZWF0IDwgbV90YXJnZXRfcmVwZWF0czsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSW4gdGhlIHNlY29uZCBjYXNlLCB3ZSBuZWVkIHRvIG1vdmUgaW5kaWNlcyBmb3J3YXJkIGFuZCBjaGVjayB0aGF0IHdlIGhhdmVuJ3QgcnVuIHVwIGFnYWluc3QgdGhlIGVuZAorICAgICAgICAgICAgKyttX3JlcGVhdF9pbmRleDsKKyAgICAgICAgICAgIGlmIChtX3JlcGVhdF9pbmRleCA9PSBtX3JldHVybmVkLnNpemUoKSkgeworICAgICAgICAgICAgICAgIG1fcmVwZWF0X2luZGV4ID0gMDsKKyAgICAgICAgICAgICAgICArK21fY3VycmVudF9yZXBlYXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50X3JlcGVhdCA8IG1fdGFyZ2V0X3JlcGVhdHM7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgR2VuZXJhdG9yV3JhcHBlcjxUPiByZXBlYXQoc2l6ZV90IHJlcGVhdHMsIEdlbmVyYXRvcldyYXBwZXI8VD4mJiBnZW5lcmF0b3IpIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvcldyYXBwZXI8VD4ocGY6Om1ha2VfdW5pcXVlPFJlcGVhdEdlbmVyYXRvcjxUPj4ocmVwZWF0cywgc3RkOjptb3ZlKGdlbmVyYXRvcikpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KKyAgICBjbGFzcyBNYXBHZW5lcmF0b3IgOiBwdWJsaWMgSUdlbmVyYXRvcjxUPiB7CisgICAgICAgIC8vIFRCRDogcHJvdmlkZSBzdGF0aWMgYXNzZXJ0IGZvciBtYXBwaW5nIGZ1bmN0aW9uLCBmb3IgZnJpZW5kbHkgZXJyb3IgbWVzc2FnZQorICAgICAgICBHZW5lcmF0b3JXcmFwcGVyPFU+IG1fZ2VuZXJhdG9yOworICAgICAgICBGdW5jIG1fZnVuY3Rpb247CisgICAgICAgIC8vIFRvIGF2b2lkIHJldHVybmluZyBkYW5nbGluZyByZWZlcmVuY2UsIHdlIGhhdmUgdG8gc2F2ZSB0aGUgdmFsdWVzCisgICAgICAgIFQgbV9jYWNoZTsKKyAgICBwdWJsaWM6CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGMiA9IEZ1bmM+CisgICAgICAgIE1hcEdlbmVyYXRvcihGMiYmIGZ1bmN0aW9uLCBHZW5lcmF0b3JXcmFwcGVyPFU+JiYgZ2VuZXJhdG9yKSA6CisgICAgICAgICAgICBtX2dlbmVyYXRvcihzdGQ6Om1vdmUoZ2VuZXJhdG9yKSksCisgICAgICAgICAgICBtX2Z1bmN0aW9uKHN0ZDo6Zm9yd2FyZDxGMj4oZnVuY3Rpb24pKSwKKyAgICAgICAgICAgIG1fY2FjaGUobV9mdW5jdGlvbihtX2dlbmVyYXRvci5nZXQoKSkpCisgICAgICAgIHt9CisKKyAgICAgICAgVCBjb25zdCYgZ2V0KCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGU7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBuZXh0KCkgb3ZlcnJpZGUgeworICAgICAgICAgICAgY29uc3QgYXV0byBzdWNjZXNzID0gbV9nZW5lcmF0b3IubmV4dCgpOworICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICBtX2NhY2hlID0gbV9mdW5jdGlvbihtX2dlbmVyYXRvci5nZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgRnVuYz4KKyAgICBHZW5lcmF0b3JXcmFwcGVyPFQ+IG1hcChGdW5jJiYgZnVuY3Rpb24sIEdlbmVyYXRvcldyYXBwZXI8VT4mJiBnZW5lcmF0b3IpIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvcldyYXBwZXI8VD4oCisgICAgICAgICAgICBwZjo6bWFrZV91bmlxdWU8TWFwR2VuZXJhdG9yPFQsIFUsIEZ1bmM+PihzdGQ6OmZvcndhcmQ8RnVuYz4oZnVuY3Rpb24pLCBzdGQ6Om1vdmUoZ2VuZXJhdG9yKSkKKyAgICAgICAgKTsKKyAgICB9CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIEZ1bmM+CisgICAgR2VuZXJhdG9yV3JhcHBlcjxUPiBtYXAoRnVuYyYmIGZ1bmN0aW9uLCBHZW5lcmF0b3JXcmFwcGVyPFQ+JiYgZ2VuZXJhdG9yKSB7CisgICAgICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFQ+KAorICAgICAgICAgICAgcGY6Om1ha2VfdW5pcXVlPE1hcEdlbmVyYXRvcjxULCBULCBGdW5jPj4oc3RkOjpmb3J3YXJkPEZ1bmM+KGZ1bmN0aW9uKSwgc3RkOjptb3ZlKGdlbmVyYXRvcikpCisgICAgICAgICk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgQ2h1bmtHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSUdlbmVyYXRvcjxzdGQ6OnZlY3RvcjxUPj4geworICAgICAgICBzdGQ6OnZlY3RvcjxUPiBtX2NodW5rOworICAgICAgICBzaXplX3QgbV9jaHVua19zaXplOworICAgICAgICBHZW5lcmF0b3JXcmFwcGVyPFQ+IG1fZ2VuZXJhdG9yOworICAgICAgICBib29sIG1fdXNlZF91cCA9IGZhbHNlOworICAgIHB1YmxpYzoKKyAgICAgICAgQ2h1bmtHZW5lcmF0b3Ioc2l6ZV90IHNpemUsIEdlbmVyYXRvcldyYXBwZXI8VD4gZ2VuZXJhdG9yKSA6CisgICAgICAgICAgICBtX2NodW5rX3NpemUoc2l6ZSksIG1fZ2VuZXJhdG9yKHN0ZDo6bW92ZShnZW5lcmF0b3IpKQorICAgICAgICB7CisgICAgICAgICAgICBtX2NodW5rLnJlc2VydmUobV9jaHVua19zaXplKTsKKyAgICAgICAgICAgIG1fY2h1bmsucHVzaF9iYWNrKG1fZ2VuZXJhdG9yLmdldCgpKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAxOyBpIDwgbV9jaHVua19zaXplOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fZ2VuZXJhdG9yLm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICBDYXRjaDo6dGhyb3dfZXhjZXB0aW9uKEdlbmVyYXRvckV4Y2VwdGlvbigiTm90IGVub3VnaCB2YWx1ZXMgdG8gaW5pdGlhbGl6ZSB0aGUgZmlyc3QgY2h1bmsiKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fY2h1bmsucHVzaF9iYWNrKG1fZ2VuZXJhdG9yLmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGQ6OnZlY3RvcjxUPiBjb25zdCYgZ2V0KCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAgICAgcmV0dXJuIG1fY2h1bms7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBuZXh0KCkgb3ZlcnJpZGUgeworICAgICAgICAgICAgbV9jaHVuay5jbGVhcigpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaWR4ID0gMDsgaWR4IDwgbV9jaHVua19zaXplOyArK2lkeCkgeworICAgICAgICAgICAgICAgIGlmICghbV9nZW5lcmF0b3IubmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9jaHVuay5wdXNoX2JhY2sobV9nZW5lcmF0b3IuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgR2VuZXJhdG9yV3JhcHBlcjxzdGQ6OnZlY3RvcjxUPj4gY2h1bmsoc2l6ZV90IHNpemUsIEdlbmVyYXRvcldyYXBwZXI8VD4mJiBnZW5lcmF0b3IpIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvcldyYXBwZXI8c3RkOjp2ZWN0b3I8VD4+KAorICAgICAgICAgICAgcGY6Om1ha2VfdW5pcXVlPENodW5rR2VuZXJhdG9yPFQ+PihzaXplLCBzdGQ6Om1vdmUoZ2VuZXJhdG9yKSkKKyAgICAgICAgKTsKKyAgICB9CisKK30gLy8gbmFtZXNwYWNlIEdlbmVyYXRvcnMKK30gLy8gbmFtZXNwYWNlIENhdGNoCisKKworI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9HRU5FUkFUT1JTX0dFTkVSSUNfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2dlbmVyYXRvcnNfc3BlY2lmaWMuaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzX3NwZWNpZmljLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWFlMDZiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzX3NwZWNpZmljLmhwcApAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqICBDcmVhdGVkIGJ5IE1hcnRpbiBvbiAxNS82LzIwMTguCisgKgorICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAqLworI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfR0VORVJBVE9SU19TUEVDSUZJQ19IUFBfSU5DTFVERUQKKyNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX0dFTkVSQVRPUlNfU1BFQ0lGSUNfSFBQX0lOQ0xVREVECisKKyNpbmNsdWRlICJjYXRjaF9jb250ZXh0LmgiCisjaW5jbHVkZSAiY2F0Y2hfZ2VuZXJhdG9ycy5ocHAiCisjaW5jbHVkZSAiY2F0Y2hfaW50ZXJmYWNlc19jb25maWcuaCIKKworI2luY2x1ZGUgPHJhbmRvbT4KKworbmFtZXNwYWNlIENhdGNoIHsKK25hbWVzcGFjZSBHZW5lcmF0b3JzIHsKKwordGVtcGxhdGUgPHR5cGVuYW1lIEZsb2F0PgorY2xhc3MgUmFuZG9tRmxvYXRpbmdHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSUdlbmVyYXRvcjxGbG9hdD4geworICAgIC8vIEZJWE1FOiBXaGF0IGlzIHRoZSByaWdodCBzZWVkPworICAgIHN0ZDo6bWluc3RkX3JhbmQgbV9yYW5kOworICAgIHN0ZDo6dW5pZm9ybV9yZWFsX2Rpc3RyaWJ1dGlvbjxGbG9hdD4gbV9kaXN0OworICAgIEZsb2F0IG1fY3VycmVudF9udW1iZXI7CitwdWJsaWM6CisKKyAgICBSYW5kb21GbG9hdGluZ0dlbmVyYXRvcihGbG9hdCBhLCBGbG9hdCBiKToKKyAgICAgICAgbV9yYW5kKGdldEN1cnJlbnRDb250ZXh0KCkuZ2V0Q29uZmlnKCktPnJuZ1NlZWQoKSksCisgICAgICAgIG1fZGlzdChhLCBiKSB7CisgICAgICAgIHN0YXRpY19jYXN0PHZvaWQ+KG5leHQoKSk7CisgICAgfQorCisgICAgRmxvYXQgY29uc3QmIGdldCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudF9udW1iZXI7CisgICAgfQorICAgIGJvb2wgbmV4dCgpIG92ZXJyaWRlIHsKKyAgICAgICAgbV9jdXJyZW50X251bWJlciA9IG1fZGlzdChtX3JhbmQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgSW50ZWdlcj4KK2NsYXNzIFJhbmRvbUludGVnZXJHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSUdlbmVyYXRvcjxJbnRlZ2VyPiB7CisgICAgc3RkOjptaW5zdGRfcmFuZCBtX3JhbmQ7CisgICAgc3RkOjp1bmlmb3JtX2ludF9kaXN0cmlidXRpb248SW50ZWdlcj4gbV9kaXN0OworICAgIEludGVnZXIgbV9jdXJyZW50X251bWJlcjsKK3B1YmxpYzoKKworICAgIFJhbmRvbUludGVnZXJHZW5lcmF0b3IoSW50ZWdlciBhLCBJbnRlZ2VyIGIpOgorICAgICAgICBtX3JhbmQoZ2V0Q3VycmVudENvbnRleHQoKS5nZXRDb25maWcoKS0+cm5nU2VlZCgpKSwKKyAgICAgICAgbV9kaXN0KGEsIGIpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4obmV4dCgpKTsKKyAgICB9CisKKyAgICBJbnRlZ2VyIGNvbnN0JiBnZXQoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRfbnVtYmVyOworICAgIH0KKyAgICBib29sIG5leHQoKSBvdmVycmlkZSB7CisgICAgICAgIG1fY3VycmVudF9udW1iZXIgPSBtX2Rpc3QobV9yYW5kKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfTsKKworLy8gVE9ETzogSWRlYWxseSB0aGlzIHdvdWxkIGJlIGFsc28gY29uc3RyYWluZWQgYWdhaW5zdCB0aGUgdmFyaW91cyBjaGFyIHR5cGVzLAorLy8gICAgICAgYnV0IEkgZG9uJ3QgZXhwZWN0IHVzZXJzIHRvIHJ1biBpbnRvIHRoYXQgaW4gcHJhY3RpY2UuCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3R5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfaW50ZWdyYWw8VD46OnZhbHVlICYmICFzdGQ6OmlzX3NhbWU8VCwgYm9vbD46OnZhbHVlLAorR2VuZXJhdG9yV3JhcHBlcjxUPj46OnR5cGUKK3JhbmRvbShUIGEsIFQgYikgeworICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFQ+KAorICAgICAgICBwZjo6bWFrZV91bmlxdWU8UmFuZG9tSW50ZWdlckdlbmVyYXRvcjxUPj4oYSwgYikKKyAgICApOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3R5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZmxvYXRpbmdfcG9pbnQ8VD46OnZhbHVlLAorR2VuZXJhdG9yV3JhcHBlcjxUPj46OnR5cGUKK3JhbmRvbShUIGEsIFQgYikgeworICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFQ+KAorICAgICAgICBwZjo6bWFrZV91bmlxdWU8UmFuZG9tRmxvYXRpbmdHZW5lcmF0b3I8VD4+KGEsIGIpCisgICAgKTsKK30KKworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFJhbmdlR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIElHZW5lcmF0b3I8VD4geworICAgIFQgbV9jdXJyZW50OworICAgIFQgbV9lbmQ7CisgICAgVCBtX3N0ZXA7CisgICAgYm9vbCBtX3Bvc2l0aXZlOworCitwdWJsaWM6CisgICAgUmFuZ2VHZW5lcmF0b3IoVCBjb25zdCYgc3RhcnQsIFQgY29uc3QmIGVuZCwgVCBjb25zdCYgc3RlcCk6CisgICAgICAgIG1fY3VycmVudChzdGFydCksCisgICAgICAgIG1fZW5kKGVuZCksCisgICAgICAgIG1fc3RlcChzdGVwKSwKKyAgICAgICAgbV9wb3NpdGl2ZShtX3N0ZXAgPiBUKDApKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KG1fY3VycmVudCAhPSBtX2VuZCAmJiAiUmFuZ2Ugc3RhcnQgYW5kIGVuZCBjYW5ub3QgYmUgZXF1YWwiKTsKKyAgICAgICAgYXNzZXJ0KG1fc3RlcCAhPSBUKDApICYmICJTdGVwIHNpemUgY2Fubm90IGJlIHplcm8iKTsKKyAgICAgICAgYXNzZXJ0KCgobV9wb3NpdGl2ZSAmJiBtX2N1cnJlbnQgPD0gbV9lbmQpIHx8ICghbV9wb3NpdGl2ZSAmJiBtX2N1cnJlbnQgPj0gbV9lbmQpKSAmJiAiU3RlcCBtb3ZlcyBhd2F5IGZyb20gZW5kIik7CisgICAgfQorCisgICAgUmFuZ2VHZW5lcmF0b3IoVCBjb25zdCYgc3RhcnQsIFQgY29uc3QmIGVuZCk6CisgICAgICAgIFJhbmdlR2VuZXJhdG9yKHN0YXJ0LCBlbmQsIChzdGFydCA8IGVuZCkgPyBUKDEpIDogVCgtMSkpCisgICAge30KKworICAgIFQgY29uc3QmIGdldCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudDsKKyAgICB9CisKKyAgICBib29sIG5leHQoKSBvdmVycmlkZSB7CisgICAgICAgIG1fY3VycmVudCArPSBtX3N0ZXA7CisgICAgICAgIHJldHVybiAobV9wb3NpdGl2ZSkgPyAobV9jdXJyZW50IDwgbV9lbmQpIDogKG1fY3VycmVudCA+IG1fZW5kKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0dlbmVyYXRvcldyYXBwZXI8VD4gcmFuZ2UoVCBjb25zdCYgc3RhcnQsIFQgY29uc3QmIGVuZCwgVCBjb25zdCYgc3RlcCkgeworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWUsICJUeXBlIG11c3QgYmUgYW4gaW50ZWdlciIpOworICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFQ+KHBmOjptYWtlX3VuaXF1ZTxSYW5nZUdlbmVyYXRvcjxUPj4oc3RhcnQsIGVuZCwgc3RlcCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0dlbmVyYXRvcldyYXBwZXI8VD4gcmFuZ2UoVCBjb25zdCYgc3RhcnQsIFQgY29uc3QmIGVuZCkgeworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWUsICJUeXBlIG11c3QgYmUgYW4gaW50ZWdlciIpOworICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFQ+KHBmOjptYWtlX3VuaXF1ZTxSYW5nZUdlbmVyYXRvcjxUPj4oc3RhcnQsIGVuZCkpOworfQorCisKK30gLy8gbmFtZXNwYWNlIEdlbmVyYXRvcnMKK30gLy8gbmFtZXNwYWNlIENhdGNoCisKKworI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9HRU5FUkFUT1JTX1NQRUNJRklDX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2NhcHR1cmUuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jYXB0dXJlLmgKaW5kZXggNGQwOTFmOC4uMzZmMjdhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2NhcHR1cmUuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfY2FwdHVyZS5oCkBAIC0yMCwxMiArMjAsMTUgQEAKICAgICBzdHJ1Y3QgU2VjdGlvbkluZm87CiAgICAgc3RydWN0IFNlY3Rpb25FbmRJbmZvOwogICAgIHN0cnVjdCBNZXNzYWdlSW5mbzsKKyAgICBzdHJ1Y3QgTWVzc2FnZUJ1aWxkZXI7CiAgICAgc3RydWN0IENvdW50czsKICAgICBzdHJ1Y3QgQmVuY2htYXJrSW5mbzsKICAgICBzdHJ1Y3QgQmVuY2htYXJrU3RhdHM7CiAgICAgc3RydWN0IEFzc2VydGlvblJlYWN0aW9uOworICAgIHN0cnVjdCBTb3VyY2VMaW5lSW5mbzsKIAogICAgIHN0cnVjdCBJVHJhbnNpZW50RXhwcmVzc2lvbjsKKyAgICBzdHJ1Y3QgSUdlbmVyYXRvclRyYWNrZXI7CiAKICAgICBzdHJ1Y3QgSVJlc3VsdENhcHR1cmUgewogCkBAIC0zNiwxMiArMzksMTYgQEAKICAgICAgICAgdmlydHVhbCB2b2lkIHNlY3Rpb25FbmRlZCggU2VjdGlvbkVuZEluZm8gY29uc3QmIGVuZEluZm8gKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBzZWN0aW9uRW5kZWRFYXJseSggU2VjdGlvbkVuZEluZm8gY29uc3QmIGVuZEluZm8gKSA9IDA7CiAKKyAgICAgICAgdmlydHVhbCBhdXRvIGFjcXVpcmVHZW5lcmF0b3JUcmFja2VyKCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgbGluZUluZm8gKSAtPiBJR2VuZXJhdG9yVHJhY2tlciYgPSAwOworCiAgICAgICAgIHZpcnR1YWwgdm9pZCBiZW5jaG1hcmtTdGFydGluZyggQmVuY2htYXJrSW5mbyBjb25zdCYgaW5mbyApID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIGJlbmNobWFya0VuZGVkKCBCZW5jaG1hcmtTdGF0cyBjb25zdCYgc3RhdHMgKSA9IDA7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIHB1c2hTY29wZWRNZXNzYWdlKCBNZXNzYWdlSW5mbyBjb25zdCYgbWVzc2FnZSApID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHBvcFNjb3BlZE1lc3NhZ2UoIE1lc3NhZ2VJbmZvIGNvbnN0JiBtZXNzYWdlICkgPSAwOwogCisgICAgICAgIHZpcnR1YWwgdm9pZCBlbXBsYWNlVW5zY29wZWRNZXNzYWdlKCBNZXNzYWdlQnVpbGRlciBjb25zdCYgYnVpbGRlciApID0gMDsKKwogICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRmF0YWxFcnJvckNvbmRpdGlvbiggU3RyaW5nUmVmIG1lc3NhZ2UgKSA9IDA7CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGhhbmRsZUV4cHIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jb25maWcuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19jb25maWcuaAppbmRleCAyNTg0Y2NjLi5mNTA5YzdlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfY29uZmlnLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2NvbmZpZy5oCkBAIC0yNSw3ICsyNSw4IEBACiAKICAgICBzdHJ1Y3QgV2FybkFib3V0IHsgZW51bSBXaGF0IHsKICAgICAgICAgTm90aGluZyA9IDB4MDAsCi0gICAgICAgIE5vQXNzZXJ0aW9ucyA9IDB4MDEKKyAgICAgICAgTm9Bc3NlcnRpb25zID0gMHgwMSwKKyAgICAgICAgTm9UZXN0cyA9IDB4MDIKICAgICB9OyB9OwogCiAgICAgc3RydWN0IFNob3dEdXJhdGlvbnMgeyBlbnVtIE9yTm90IHsKQEAgLTYyLDEwICs2MywxMiBAQAogICAgICAgICB2aXJ0dWFsIGJvb2wgaW5jbHVkZVN1Y2Nlc3NmdWxSZXN1bHRzKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRGVidWdCcmVhaygpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIHdhcm5BYm91dE1pc3NpbmdBc3NlcnRpb25zKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgd2FybkFib3V0Tm9UZXN0cygpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBpbnQgYWJvcnRBZnRlcigpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBib29sIHNob3dJbnZpc2libGVzKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIFNob3dEdXJhdGlvbnM6Ok9yTm90IHNob3dEdXJhdGlvbnMoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgVGVzdFNwZWMgY29uc3QmIHRlc3RTcGVjKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgaGFzVGVzdEZpbHRlcnMoKSBjb25zdCA9IDA7CiAgICAgICAgIHZpcnR1YWwgUnVuVGVzdHM6OkluV2hhdE9yZGVyIHJ1bk9yZGVyKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIHVuc2lnbmVkIGludCBybmdTZWVkKCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIGludCBiZW5jaG1hcmtSZXNvbHV0aW9uTXVsdGlwbGUoKSBjb25zdCA9IDA7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfZXhjZXB0aW9uLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfZXhjZXB0aW9uLmgKaW5kZXggYzgwMzE1Ni4uNzNlZjk5MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2V4Y2VwdGlvbi5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19leGNlcHRpb24uaApAQCAtOCw3ICs4LDYgQEAKICNpZm5kZWYgVFdPQkxVRUNVQkVTX0NBVENIX0lOVEVSRkFDRVNfRVhDRVBUSU9OX0hfSU5DTFVERUQKICNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX0lOVEVSRkFDRVNfRVhDRVBUSU9OX0hfSU5DTFVERUQKIAotI2luY2x1ZGUgImNhdGNoX2NhcHR1cmUuaHBwIiAgLy8gZm9yIENBVENIX0lOVEVSTkFMX1RSWQogI2luY2x1ZGUgImNhdGNoX2ludGVyZmFjZXNfcmVnaXN0cnlfaHViLmgiCiAKICNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFKQpAQCAtNDcsMTUgKzQ2LDE3IEBACiAgICAgICAgICAgICB7fQogCiAgICAgICAgICAgICBzdGQ6OnN0cmluZyB0cmFuc2xhdGUoIEV4Y2VwdGlvblRyYW5zbGF0b3JzOjpjb25zdF9pdGVyYXRvciBpdCwgRXhjZXB0aW9uVHJhbnNsYXRvcnM6OmNvbnN0X2l0ZXJhdG9yIGl0RW5kICkgY29uc3Qgb3ZlcnJpZGUgewotICAgICAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX1RSWSB7CisgICAgICAgICAgICAgICAgQ0FUQ0hfVFJZIHsKICAgICAgICAgICAgICAgICAgICAgaWYoIGl0ID09IGl0RW5kICkKICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6cmV0aHJvd19leGNlcHRpb24oc3RkOjpjdXJyZW50X2V4Y2VwdGlvbigpKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgqaXQpLT50cmFuc2xhdGUoIGl0KzEsIGl0RW5kICk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX0NBVENIICggVCYsIGV4ICkgeworI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpCisgICAgICAgICAgICAgICAgY2F0Y2goIFQmIGV4ICkgewogICAgICAgICAgICAgICAgICAgICByZXR1cm4gbV90cmFuc2xhdGVGdW5jdGlvbiggZXggKTsKICAgICAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAgICAgICAgIH0KIAogICAgICAgICBwcm90ZWN0ZWQ6CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfZ2VuZXJhdG9ydHJhY2tlci5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2dlbmVyYXRvcnRyYWNrZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWIxMzkxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2dlbmVyYXRvcnRyYWNrZXIuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogIENyZWF0ZWQgYnkgUGhpbCBOYXNoIG9uIDI2LzYvMjAxOC4KKyAqCisgKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorICovCisKKyNpZm5kZWYgVFdPQkxVRUNVQkVTX0NBVENIX0lOVEVSRkFDRVNfR0VORVJBVE9SVFJBQ0tFUl9JTkNMVURFRAorI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfSU5URVJGQUNFU19HRU5FUkFUT1JUUkFDS0VSX0lOQ0xVREVECisKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBDYXRjaCB7CisKKyAgICBuYW1lc3BhY2UgR2VuZXJhdG9ycyB7CisgICAgICAgIGNsYXNzIEdlbmVyYXRvclVudHlwZWRCYXNlIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgR2VuZXJhdG9yVW50eXBlZEJhc2UoKSA9IGRlZmF1bHQ7CisgICAgICAgICAgICB2aXJ0dWFsIH5HZW5lcmF0b3JVbnR5cGVkQmFzZSgpOworICAgICAgICAgICAgLy8gQXR0ZW1wdHMgdG8gbW92ZSB0aGUgZ2VuZXJhdG9yIHRvIHRoZSBuZXh0IGVsZW1lbnQKKyAgICAgICAgICAgICAvLworICAgICAgICAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZmYgdGhlIG1vdmUgc3VjY2VlZGVkIChhbmQgYSB2YWxpZCBlbGVtZW50CisgICAgICAgICAgICAgLy8gY2FuIGJlIHJldHJpZXZlZCkuCisgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgbmV4dCgpID0gMDsKKyAgICAgICAgfTsKKyAgICAgICAgdXNpbmcgR2VuZXJhdG9yQmFzZVB0ciA9IHN0ZDo6dW5pcXVlX3B0cjxHZW5lcmF0b3JVbnR5cGVkQmFzZT47CisKKyAgICB9IC8vIG5hbWVzcGFjZSBHZW5lcmF0b3JzCisKKyAgICBzdHJ1Y3QgSUdlbmVyYXRvclRyYWNrZXIgeworICAgICAgICB2aXJ0dWFsIH5JR2VuZXJhdG9yVHJhY2tlcigpOworICAgICAgICB2aXJ0dWFsIGF1dG8gaGFzR2VuZXJhdG9yKCkgY29uc3QgLT4gYm9vbCA9IDA7CisgICAgICAgIHZpcnR1YWwgYXV0byBnZXRHZW5lcmF0b3IoKSBjb25zdCAtPiBHZW5lcmF0b3JzOjpHZW5lcmF0b3JCYXNlUHRyIGNvbnN0JiA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRHZW5lcmF0b3IoIEdlbmVyYXRvcnM6OkdlbmVyYXRvckJhc2VQdHImJiBnZW5lcmF0b3IgKSA9IDA7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKKworI2VuZGlmIC8vVFdPQkxVRUNVQkVTX0NBVENIX0lOVEVSRkFDRVNfR0VORVJBVE9SVFJBQ0tFUl9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3JlZ2lzdHJ5X2h1Yi5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3JlZ2lzdHJ5X2h1Yi5oCmluZGV4IDFhZmJiZWMuLjhlMWRhNjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19yZWdpc3RyeV9odWIuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcmVnaXN0cnlfaHViLmgKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgdmlydHVhbCBJVGVzdENhc2VSZWdpc3RyeSBjb25zdCYgZ2V0VGVzdENhc2VSZWdpc3RyeSgpIGNvbnN0ID0gMDsKICAgICAgICAgdmlydHVhbCBJVGFnQWxpYXNSZWdpc3RyeSBjb25zdCYgZ2V0VGFnQWxpYXNSZWdpc3RyeSgpIGNvbnN0ID0gMDsKIAotICAgICAgICB2aXJ0dWFsIElFeGNlcHRpb25UcmFuc2xhdG9yUmVnaXN0cnkmIGdldEV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBJRXhjZXB0aW9uVHJhbnNsYXRvclJlZ2lzdHJ5IGNvbnN0JiBnZXRFeGNlcHRpb25UcmFuc2xhdG9yUmVnaXN0cnkoKSBjb25zdCA9IDA7CiAKIAogICAgICAgICB2aXJ0dWFsIFN0YXJ0dXBFeGNlcHRpb25SZWdpc3RyeSBjb25zdCYgZ2V0U3RhcnR1cEV4Y2VwdGlvblJlZ2lzdHJ5KCkgY29uc3QgPSAwOwpAQCAtNDksNyArNDksNyBAQAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTdGFydHVwRXhjZXB0aW9uKCkgbm9leGNlcHQgPSAwOwogICAgIH07CiAKLSAgICBJUmVnaXN0cnlIdWImIGdldFJlZ2lzdHJ5SHViKCk7CisgICAgSVJlZ2lzdHJ5SHViIGNvbnN0JiBnZXRSZWdpc3RyeUh1YigpOwogICAgIElNdXRhYmxlUmVnaXN0cnlIdWImIGdldE11dGFibGVSZWdpc3RyeUh1YigpOwogICAgIHZvaWQgY2xlYW5VcCgpOwogICAgIHN0ZDo6c3RyaW5nIHRyYW5zbGF0ZUFjdGl2ZUV4Y2VwdGlvbigpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3JlcG9ydGVyLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19yZXBvcnRlci5jcHAKaW5kZXggMTI5YTVmNC4uMGMzNjdjNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3JlcG9ydGVyLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcmVwb3J0ZXIuY3BwCkBAIC02LDcgKzYsNyBAQAogICovCiAKICNpbmNsdWRlICJjYXRjaF9pbnRlcmZhY2VzX3JlcG9ydGVyLmgiCi0jaW5jbHVkZSAiLi4vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX211bHRpLmgiCisjaW5jbHVkZSAiLi4vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2xpc3RlbmluZy5oIgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCkBAIC0xMTEsMjUgKzExMSw0IEBACiAgICAgSVJlcG9ydGVyRmFjdG9yeTo6fklSZXBvcnRlckZhY3RvcnkoKSA9IGRlZmF1bHQ7CiAgICAgSVJlcG9ydGVyUmVnaXN0cnk6On5JUmVwb3J0ZXJSZWdpc3RyeSgpID0gZGVmYXVsdDsKIAotICAgIHZvaWQgYWRkUmVwb3J0ZXIoIElTdHJlYW1pbmdSZXBvcnRlclB0ciYgZXhpc3RpbmdSZXBvcnRlciwgSVN0cmVhbWluZ1JlcG9ydGVyUHRyJiYgYWRkaXRpb25hbFJlcG9ydGVyICkgewotCi0gICAgICAgIGlmKCAhZXhpc3RpbmdSZXBvcnRlciApIHsKLSAgICAgICAgICAgIGV4aXN0aW5nUmVwb3J0ZXIgPSBzdGQ6Om1vdmUoIGFkZGl0aW9uYWxSZXBvcnRlciApOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgTXVsdGlwbGVSZXBvcnRlcnMqIG11bHRpID0gbnVsbHB0cjsKLQotICAgICAgICBpZiggZXhpc3RpbmdSZXBvcnRlci0+aXNNdWx0aSgpICkgewotICAgICAgICAgICAgbXVsdGkgPSBzdGF0aWNfY2FzdDxNdWx0aXBsZVJlcG9ydGVycyo+KCBleGlzdGluZ1JlcG9ydGVyLmdldCgpICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIG5ld011bHRpID0gc3RkOjp1bmlxdWVfcHRyPE11bHRpcGxlUmVwb3J0ZXJzPiggbmV3IE11bHRpcGxlUmVwb3J0ZXJzICk7Ci0gICAgICAgICAgICBuZXdNdWx0aS0+YWRkKCBzdGQ6Om1vdmUoIGV4aXN0aW5nUmVwb3J0ZXIgKSApOwotICAgICAgICAgICAgbXVsdGkgPSBuZXdNdWx0aS5nZXQoKTsKLSAgICAgICAgICAgIGV4aXN0aW5nUmVwb3J0ZXIgPSBzdGQ6Om1vdmUoIG5ld011bHRpICk7Ci0gICAgICAgIH0KLSAgICAgICAgbXVsdGktPmFkZCggc3RkOjptb3ZlKCBhZGRpdGlvbmFsUmVwb3J0ZXIgKSApOwotICAgIH0KLQogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcmVwb3J0ZXIuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19yZXBvcnRlci5oCmluZGV4IGI2MjBhYmIuLmU1ZmJmOGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19yZXBvcnRlci5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19yZXBvcnRlci5oCkBAIC00Miw2ICs0Miw3IEBACiAKICAgICBzdHJ1Y3QgUmVwb3J0ZXJQcmVmZXJlbmNlcyB7CiAgICAgICAgIGJvb2wgc2hvdWxkUmVkaXJlY3RTdGRPdXQgPSBmYWxzZTsKKyAgICAgICAgYm9vbCBzaG91bGRSZXBvcnRBbGxBc3NlcnRpb25zID0gZmFsc2U7CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC03OSw4ICs4MCw4IEBACiAKICAgICAgICAgQXNzZXJ0aW9uU3RhdHMoIEFzc2VydGlvblN0YXRzIGNvbnN0JiApICAgICAgICAgICAgICA9IGRlZmF1bHQ7CiAgICAgICAgIEFzc2VydGlvblN0YXRzKCBBc3NlcnRpb25TdGF0cyAmJiApICAgICAgICAgICAgICAgICAgPSBkZWZhdWx0OwotICAgICAgICBBc3NlcnRpb25TdGF0cyYgb3BlcmF0b3IgPSAoIEFzc2VydGlvblN0YXRzIGNvbnN0JiApID0gZGVmYXVsdDsKLSAgICAgICAgQXNzZXJ0aW9uU3RhdHMmIG9wZXJhdG9yID0gKCBBc3NlcnRpb25TdGF0cyAmJiApICAgICA9IGRlZmF1bHQ7CisgICAgICAgIEFzc2VydGlvblN0YXRzJiBvcGVyYXRvciA9ICggQXNzZXJ0aW9uU3RhdHMgY29uc3QmICkgPSBkZWxldGU7CisgICAgICAgIEFzc2VydGlvblN0YXRzJiBvcGVyYXRvciA9ICggQXNzZXJ0aW9uU3RhdHMgJiYgKSAgICAgPSBkZWxldGU7CiAgICAgICAgIHZpcnR1YWwgfkFzc2VydGlvblN0YXRzKCk7CiAKICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdDsKQEAgLTIyNiw4ICsyMjcsNiBAQAogICAgICAgICB2aXJ0dWFsIExpc3RlbmVycyBjb25zdCYgZ2V0TGlzdGVuZXJzKCkgY29uc3QgPSAwOwogICAgIH07CiAKLSAgICB2b2lkIGFkZFJlcG9ydGVyKCBJU3RyZWFtaW5nUmVwb3J0ZXJQdHImIGV4aXN0aW5nUmVwb3J0ZXIsIElTdHJlYW1pbmdSZXBvcnRlclB0ciYmIGFkZGl0aW9uYWxSZXBvcnRlciApOwotCiB9IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKIAogI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9JTlRFUkZBQ0VTX1JFUE9SVEVSX0hfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc190ZXN0Y2FzZS5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3Rlc3RjYXNlLmgKaW5kZXggOWUwMmIxNC4uZjU3Y2M4ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3Rlc3RjYXNlLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3Rlc3RjYXNlLmgKQEAgLTksNyArOSw2IEBACiAjZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9JTlRFUkZBQ0VTX1RFU1RDQVNFX0hfSU5DTFVERUQKIAogI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxtZW1vcnk+CiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKQEAgLTIwLDggKzE5LDYgQEAKICAgICAgICAgdmlydHVhbCB+SVRlc3RJbnZva2VyKCk7CiAgICAgfTsKIAotICAgIHVzaW5nIElUZXN0Q2FzZVB0ciA9IHN0ZDo6c2hhcmVkX3B0cjxJVGVzdEludm9rZXI+OwotCiAgICAgY2xhc3MgVGVzdENhc2U7CiAgICAgc3RydWN0IElDb25maWc7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbGVha19kZXRlY3Rvci5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2xlYWtfZGV0ZWN0b3IuY3BwCmluZGV4IDM2YWJhNmEuLjdhMzBlOGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbGVha19kZXRlY3Rvci5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9sZWFrX2RldGVjdG9yLmNwcApAQCAtNiw2ICs2LDcgQEAKICAqLwogCiAgI2luY2x1ZGUgImNhdGNoX2xlYWtfZGV0ZWN0b3IuaCIKKyAjaW5jbHVkZSAiY2F0Y2hfaW50ZXJmYWNlc19yZWdpc3RyeV9odWIuaCIKIAogCiAjaWZkZWYgQ0FUQ0hfQ09ORklHX1dJTkRPV1NfQ1JUREJHCkBAIC0xMywxNiArMTQsMTYgQEAKIAogbmFtZXNwYWNlIENhdGNoIHsKIAotCUxlYWtEZXRlY3Rvcjo6TGVha0RldGVjdG9yKCkgewotCQlpbnQgZmxhZyA9IF9DcnRTZXREYmdGbGFnKF9DUlREQkdfUkVQT1JUX0ZMQUcpOwotCQlmbGFnIHw9IF9DUlREQkdfTEVBS19DSEVDS19ERjsKLQkJZmxhZyB8PSBfQ1JUREJHX0FMTE9DX01FTV9ERjsKLQkJX0NydFNldERiZ0ZsYWcoZmxhZyk7Ci0JCV9DcnRTZXRSZXBvcnRNb2RlKF9DUlRfV0FSTiwgX0NSVERCR19NT0RFX0ZJTEUgfCBfQ1JUREJHX01PREVfREVCVUcpOwotCQlfQ3J0U2V0UmVwb3J0RmlsZShfQ1JUX1dBUk4sIF9DUlREQkdfRklMRV9TVERFUlIpOwotCQkvLyBDaGFuZ2UgdGhpcyB0byBsZWFraW5nIGFsbG9jYXRpb24ncyBudW1iZXIgdG8gYnJlYWsgdGhlcmUKLQkJX0NydFNldEJyZWFrQWxsb2MoLTEpOwotCX0KKyAgICBMZWFrRGV0ZWN0b3I6OkxlYWtEZXRlY3RvcigpIHsKKyAgICAgICAgaW50IGZsYWcgPSBfQ3J0U2V0RGJnRmxhZyhfQ1JUREJHX1JFUE9SVF9GTEFHKTsKKyAgICAgICAgZmxhZyB8PSBfQ1JUREJHX0xFQUtfQ0hFQ0tfREY7CisgICAgICAgIGZsYWcgfD0gX0NSVERCR19BTExPQ19NRU1fREY7CisgICAgICAgIF9DcnRTZXREYmdGbGFnKGZsYWcpOworICAgICAgICBfQ3J0U2V0UmVwb3J0TW9kZShfQ1JUX1dBUk4sIF9DUlREQkdfTU9ERV9GSUxFIHwgX0NSVERCR19NT0RFX0RFQlVHKTsKKyAgICAgICAgX0NydFNldFJlcG9ydEZpbGUoX0NSVF9XQVJOLCBfQ1JUREJHX0ZJTEVfU1RERVJSKTsKKyAgICAgICAgLy8gQ2hhbmdlIHRoaXMgdG8gbGVha2luZyBhbGxvY2F0aW9uJ3MgbnVtYmVyIHRvIGJyZWFrIHRoZXJlCisgICAgICAgIF9DcnRTZXRCcmVha0FsbG9jKC0xKTsKKyAgICB9CiB9CiAKICNlbHNlCkBAIC0zMCwzICszMSw3IEBACiAgICAgQ2F0Y2g6OkxlYWtEZXRlY3Rvcjo6TGVha0RldGVjdG9yKCkge30KIAogI2VuZGlmCisKK0NhdGNoOjpMZWFrRGV0ZWN0b3I6On5MZWFrRGV0ZWN0b3IoKSB7CisgICAgQ2F0Y2g6OmNsZWFuVXAoKTsKK30KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbGVha19kZXRlY3Rvci5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9sZWFrX2RldGVjdG9yLmgKaW5kZXggYmZiMGI0Mi4uNjMzNDU3YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9sZWFrX2RldGVjdG9yLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9sZWFrX2RldGVjdG9yLmgKQEAgLTExLDYgKzExLDcgQEAKIAogICAgIHN0cnVjdCBMZWFrRGV0ZWN0b3IgewogICAgICAgICBMZWFrRGV0ZWN0b3IoKTsKKyAgICAgICAgfkxlYWtEZXRlY3RvcigpOwogICAgIH07CiAKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbGlzdC5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2xpc3QuY3BwCmluZGV4IDNlZmFkMGIuLmUxZDk5MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbGlzdC5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9saXN0LmNwcApAQCAtMTIsNiArMTIsNyBAQAogI2luY2x1ZGUgImNhdGNoX2ludGVyZmFjZXNfcmVwb3J0ZXIuaCIKICNpbmNsdWRlICJjYXRjaF9pbnRlcmZhY2VzX3Rlc3RjYXNlLmgiCiAKKyNpbmNsdWRlICJjYXRjaF9jb250ZXh0LmgiCiAjaW5jbHVkZSAiY2F0Y2hfc3RyZWFtLmgiCiAjaW5jbHVkZSAiY2F0Y2hfdGV4dC5oIgogCkBAIC0yOCwxMSArMjksMTAgQEAKIAogICAgIHN0ZDo6c2l6ZV90IGxpc3RUZXN0cyggQ29uZmlnIGNvbnN0JiBjb25maWcgKSB7CiAgICAgICAgIFRlc3RTcGVjIHRlc3RTcGVjID0gY29uZmlnLnRlc3RTcGVjKCk7Ci0gICAgICAgIGlmKCBjb25maWcudGVzdFNwZWMoKS5oYXNGaWx0ZXJzKCkgKQorICAgICAgICBpZiggY29uZmlnLmhhc1Rlc3RGaWx0ZXJzKCkgKQogICAgICAgICAgICAgQ2F0Y2g6OmNvdXQoKSA8PCAiTWF0Y2hpbmcgdGVzdCBjYXNlczpcbiI7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgQ2F0Y2g6OmNvdXQoKSA8PCAiQWxsIGF2YWlsYWJsZSB0ZXN0IGNhc2VzOlxuIjsKLSAgICAgICAgICAgIHRlc3RTcGVjID0gVGVzdFNwZWNQYXJzZXIoIElUYWdBbGlhc1JlZ2lzdHJ5OjpnZXQoKSApLnBhcnNlKCAiKiIgKS50ZXN0U3BlYygpOwogICAgICAgICB9CiAKICAgICAgICAgYXV0byBtYXRjaGVkVGVzdENhc2VzID0gZmlsdGVyVGVzdHMoIGdldEFsbFRlc3RDYXNlc1NvcnRlZCggY29uZmlnICksIHRlc3RTcGVjLCBjb25maWcgKTsKQEAgLTU0LDcgKzU0LDcgQEAKICAgICAgICAgICAgICAgICBDYXRjaDo6Y291dCgpIDw8IENvbHVtbiggdGVzdENhc2VJbmZvLnRhZ3NBc1N0cmluZygpICkuaW5kZW50KCA2ICkgPDwgIlxuIjsKICAgICAgICAgfQogCi0gICAgICAgIGlmKCAhY29uZmlnLnRlc3RTcGVjKCkuaGFzRmlsdGVycygpICkKKyAgICAgICAgaWYoICFjb25maWcuaGFzVGVzdEZpbHRlcnMoKSApCiAgICAgICAgICAgICBDYXRjaDo6Y291dCgpIDw8IHBsdXJhbGlzZSggbWF0Y2hlZFRlc3RDYXNlcy5zaXplKCksICJ0ZXN0IGNhc2UiICkgPDwgJ1xuJyA8PCBzdGQ6OmVuZGw7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgcGx1cmFsaXNlKCBtYXRjaGVkVGVzdENhc2VzLnNpemUoKSwgIm1hdGNoaW5nIHRlc3QgY2FzZSIgKSA8PCAnXG4nIDw8IHN0ZDo6ZW5kbDsKQEAgLTYzLDggKzYzLDYgQEAKIAogICAgIHN0ZDo6c2l6ZV90IGxpc3RUZXN0c05hbWVzT25seSggQ29uZmlnIGNvbnN0JiBjb25maWcgKSB7CiAgICAgICAgIFRlc3RTcGVjIHRlc3RTcGVjID0gY29uZmlnLnRlc3RTcGVjKCk7Ci0gICAgICAgIGlmKCAhY29uZmlnLnRlc3RTcGVjKCkuaGFzRmlsdGVycygpICkKLSAgICAgICAgICAgIHRlc3RTcGVjID0gVGVzdFNwZWNQYXJzZXIoIElUYWdBbGlhc1JlZ2lzdHJ5OjpnZXQoKSApLnBhcnNlKCAiKiIgKS50ZXN0U3BlYygpOwogICAgICAgICBzdGQ6OnNpemVfdCBtYXRjaGVkVGVzdHMgPSAwOwogICAgICAgICBzdGQ6OnZlY3RvcjxUZXN0Q2FzZT4gbWF0Y2hlZFRlc3RDYXNlcyA9IGZpbHRlclRlc3RzKCBnZXRBbGxUZXN0Q2FzZXNTb3J0ZWQoIGNvbmZpZyApLCB0ZXN0U3BlYywgY29uZmlnICk7CiAgICAgICAgIGZvciggYXV0byBjb25zdCYgdGVzdENhc2VJbmZvIDogbWF0Y2hlZFRlc3RDYXNlcyApIHsKQEAgLTk0LDExICs5MiwxMCBAQAogCiAgICAgc3RkOjpzaXplX3QgbGlzdFRhZ3MoIENvbmZpZyBjb25zdCYgY29uZmlnICkgewogICAgICAgICBUZXN0U3BlYyB0ZXN0U3BlYyA9IGNvbmZpZy50ZXN0U3BlYygpOwotICAgICAgICBpZiggY29uZmlnLnRlc3RTcGVjKCkuaGFzRmlsdGVycygpICkKKyAgICAgICAgaWYoIGNvbmZpZy5oYXNUZXN0RmlsdGVycygpICkKICAgICAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgIlRhZ3MgZm9yIG1hdGNoaW5nIHRlc3QgY2FzZXM6XG4iOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgIkFsbCBhdmFpbGFibGUgdGFnczpcbiI7Ci0gICAgICAgICAgICB0ZXN0U3BlYyA9IFRlc3RTcGVjUGFyc2VyKCBJVGFnQWxpYXNSZWdpc3RyeTo6Z2V0KCkgKS5wYXJzZSggIioiICkudGVzdFNwZWMoKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBUYWdJbmZvPiB0YWdDb3VudHM7CkBAIC0xMjgsNyArMTI1LDcgQEAKICAgICAgICAgcmV0dXJuIHRhZ0NvdW50cy5zaXplKCk7CiAgICAgfQogCi0gICAgc3RkOjpzaXplX3QgbGlzdFJlcG9ydGVycyggQ29uZmlnIGNvbnN0JiAvKmNvbmZpZyovICkgeworICAgIHN0ZDo6c2l6ZV90IGxpc3RSZXBvcnRlcnMoKSB7CiAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgIkF2YWlsYWJsZSByZXBvcnRlcnM6XG4iOwogICAgICAgICBJUmVwb3J0ZXJSZWdpc3RyeTo6RmFjdG9yeU1hcCBjb25zdCYgZmFjdG9yaWVzID0gZ2V0UmVnaXN0cnlIdWIoKS5nZXRSZXBvcnRlclJlZ2lzdHJ5KCkuZ2V0RmFjdG9yaWVzKCk7CiAgICAgICAgIHN0ZDo6c2l6ZV90IG1heE5hbWVMZW4gPSAwOwpAQCAtMTUwLDE2ICsxNDcsMTcgQEAKICAgICAgICAgcmV0dXJuIGZhY3Rvcmllcy5zaXplKCk7CiAgICAgfQogCi0gICAgT3B0aW9uPHN0ZDo6c2l6ZV90PiBsaXN0KCBDb25maWcgY29uc3QmIGNvbmZpZyApIHsKKyAgICBPcHRpb248c3RkOjpzaXplX3Q+IGxpc3QoIHN0ZDo6c2hhcmVkX3B0cjxDb25maWc+IGNvbnN0JiBjb25maWcgKSB7CiAgICAgICAgIE9wdGlvbjxzdGQ6OnNpemVfdD4gbGlzdGVkQ291bnQ7Ci0gICAgICAgIGlmKCBjb25maWcubGlzdFRlc3RzKCkgKQotICAgICAgICAgICAgbGlzdGVkQ291bnQgPSBsaXN0ZWRDb3VudC52YWx1ZU9yKDApICsgbGlzdFRlc3RzKCBjb25maWcgKTsKLSAgICAgICAgaWYoIGNvbmZpZy5saXN0VGVzdE5hbWVzT25seSgpICkKLSAgICAgICAgICAgIGxpc3RlZENvdW50ID0gbGlzdGVkQ291bnQudmFsdWVPcigwKSArIGxpc3RUZXN0c05hbWVzT25seSggY29uZmlnICk7Ci0gICAgICAgIGlmKCBjb25maWcubGlzdFRhZ3MoKSApCi0gICAgICAgICAgICBsaXN0ZWRDb3VudCA9IGxpc3RlZENvdW50LnZhbHVlT3IoMCkgKyBsaXN0VGFncyggY29uZmlnICk7Ci0gICAgICAgIGlmKCBjb25maWcubGlzdFJlcG9ydGVycygpICkKLSAgICAgICAgICAgIGxpc3RlZENvdW50ID0gbGlzdGVkQ291bnQudmFsdWVPcigwKSArIGxpc3RSZXBvcnRlcnMoIGNvbmZpZyApOworICAgICAgICBnZXRDdXJyZW50TXV0YWJsZUNvbnRleHQoKS5zZXRDb25maWcoIGNvbmZpZyApOworICAgICAgICBpZiggY29uZmlnLT5saXN0VGVzdHMoKSApCisgICAgICAgICAgICBsaXN0ZWRDb3VudCA9IGxpc3RlZENvdW50LnZhbHVlT3IoMCkgKyBsaXN0VGVzdHMoICpjb25maWcgKTsKKyAgICAgICAgaWYoIGNvbmZpZy0+bGlzdFRlc3ROYW1lc09ubHkoKSApCisgICAgICAgICAgICBsaXN0ZWRDb3VudCA9IGxpc3RlZENvdW50LnZhbHVlT3IoMCkgKyBsaXN0VGVzdHNOYW1lc09ubHkoICpjb25maWcgKTsKKyAgICAgICAgaWYoIGNvbmZpZy0+bGlzdFRhZ3MoKSApCisgICAgICAgICAgICBsaXN0ZWRDb3VudCA9IGxpc3RlZENvdW50LnZhbHVlT3IoMCkgKyBsaXN0VGFncyggKmNvbmZpZyApOworICAgICAgICBpZiggY29uZmlnLT5saXN0UmVwb3J0ZXJzKCkgKQorICAgICAgICAgICAgbGlzdGVkQ291bnQgPSBsaXN0ZWRDb3VudC52YWx1ZU9yKDApICsgbGlzdFJlcG9ydGVycygpOwogICAgICAgICByZXR1cm4gbGlzdGVkQ291bnQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX2xpc3QuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbGlzdC5oCmluZGV4IDRiYzk2ZWMuLmNlYTdiYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbGlzdC5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbGlzdC5oCkBAIC0yOSw5ICsyOSw5IEBACiAKICAgICBzdGQ6OnNpemVfdCBsaXN0VGFncyggQ29uZmlnIGNvbnN0JiBjb25maWcgKTsKIAotICAgIHN0ZDo6c2l6ZV90IGxpc3RSZXBvcnRlcnMoIENvbmZpZyBjb25zdCYgLypjb25maWcqLyApOworICAgIHN0ZDo6c2l6ZV90IGxpc3RSZXBvcnRlcnMoKTsKICAgICAKLSAgICBPcHRpb248c3RkOjpzaXplX3Q+IGxpc3QoIENvbmZpZyBjb25zdCYgY29uZmlnICk7CisgICAgT3B0aW9uPHN0ZDo6c2l6ZV90PiBsaXN0KCBzdGQ6OnNoYXJlZF9wdHI8Q29uZmlnPiBjb25zdCYgY29uZmlnICk7CiAKIH0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzLmgKaW5kZXggY2FjZGViMy4uYWViZDRjMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVycy5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnMuaApAQCAtMzgsMTggKzM4LDExIEBACiAjICAgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKICMgICAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdub24tdmlydHVhbC1kdG9yIgogI2VuZGlmCi0vKgotICogaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVycy5oOjM4OjE2OiBlcnJvcjogJ0NhdGNoOjpNYXRjaGVyczo6SW1wbDo6TWF0Y2hlck1ldGhvZDxzdGQ6Ol9fMTo6YmFzaWNfc3RyaW5nPGNoYXI+ID4nIGhhcyB2aXJ0dWFsIGZ1bmN0aW9ucyBidXQgbm9uLXZpcnR1YWwgZGVzdHJ1Y3RvciBbLVdlcnJvciwtV25vbi12aXJ0dWFsLWR0b3JdCi0gKi8KIAogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPYmplY3RUPgogICAgICAgICBzdHJ1Y3QgTWF0Y2hlck1ldGhvZCB7CiAgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgbWF0Y2goIE9iamVjdFQgY29uc3QmIGFyZyApIGNvbnN0ID0gMDsKICAgICAgICAgfTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHRyVD4KLSAgICAgICAgc3RydWN0IE1hdGNoZXJNZXRob2Q8UHRyVCo+IHsKLSAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBtYXRjaCggUHRyVCogYXJnICkgY29uc3QgPSAwOwotICAgICAgICB9OwogCiAjaWZkZWYgX19jbGFuZ19fCiAjICAgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVyc19mbG9hdGluZy5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmNwcAppbmRleCBlOWFiZWI5Li45YmMwODJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmNwcApAQCAtNiwxMiArNiwxNCBAQAogICovCiAKICNpbmNsdWRlICJjYXRjaF9tYXRjaGVyc19mbG9hdGluZy5oIgorI2luY2x1ZGUgImNhdGNoX2VuZm9yY2UuaCIKKyNpbmNsdWRlICJjYXRjaF9wb2x5ZmlsbHMuaHBwIgorI2luY2x1ZGUgImNhdGNoX3RvX3N0cmluZy5ocHAiCiAjaW5jbHVkZSAiY2F0Y2hfdG9zdHJpbmcuaCIKIAogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KIAogbmFtZXNwYWNlIENhdGNoIHsKIG5hbWVzcGFjZSBNYXRjaGVycyB7CkBAIC01Niw3ICs1OCw3IEBACiBib29sIGFsbW9zdEVxdWFsVWxwcyhGUCBsaHMsIEZQIHJocywgaW50IG1heFVscERpZmYpIHsKICAgICAvLyBDb21wYXJpc29uIHdpdGggTmFOIHNob3VsZCBhbHdheXMgYmUgZmFsc2UuCiAgICAgLy8gVGhpcyB3YXkgd2UgY2FuIHJ1bGUgaXQgb3V0IGJlZm9yZSBnZXR0aW5nIGludG8gdGhlIHVnbHkgZGV0YWlscwotICAgIGlmIChzdGQ6OmlzbmFuKGxocykgfHwgc3RkOjppc25hbihyaHMpKSB7CisgICAgaWYgKENhdGNoOjppc25hbihsaHMpIHx8IENhdGNoOjppc25hbihyaHMpKSB7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTgwLDE1ICs4MiwxNCBAQAogbmFtZXNwYWNlIEZsb2F0aW5nIHsKICAgICBXaXRoaW5BYnNNYXRjaGVyOjpXaXRoaW5BYnNNYXRjaGVyKGRvdWJsZSB0YXJnZXQsIGRvdWJsZSBtYXJnaW4pCiAgICAgICAgIDptX3RhcmdldHsgdGFyZ2V0IH0sIG1fbWFyZ2lueyBtYXJnaW4gfSB7Ci0gICAgICAgIGlmIChtX21hcmdpbiA8IDApIHsKLSAgICAgICAgICBFeGNlcHRpb246OmRvVGhyb3coIHN0ZDo6ZG9tYWluX2Vycm9yKCJBbGxvd2VkIG1hcmdpbiBkaWZmZXJlbmNlIGhhcyB0byBiZSA+PSAwIikgKTsKLSAgICAgICAgfQorICAgICAgICBDQVRDSF9FTkZPUkNFKG1hcmdpbiA+PSAwLCAiSW52YWxpZCBtYXJnaW46ICIgPDwgbWFyZ2luIDw8ICcuJworICAgICAgICAgICAgPDwgIiBNYXJnaW4gaGFzIHRvIGJlIG5vbi1uZWdhdGl2ZS4iKTsKICAgICB9CiAKICAgICAvLyBQZXJmb3JtcyBlcXVpdmFsZW50IGNoZWNrIG9mIHN0ZDo6ZmFicyhsaHMgLSByaHMpIDw9IG1hcmdpbgogICAgIC8vIEJ1dCB3aXRob3V0IHRoZSBzdWJ0cmFjdGlvbiB0byBhbGxvdyBmb3IgSU5GSU5JVFkgaW4gY29tcGFyaXNvbgogICAgIGJvb2wgV2l0aGluQWJzTWF0Y2hlcjo6bWF0Y2goZG91YmxlIGNvbnN0JiBtYXRjaGVlKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAobWF0Y2hlZSArIG1fbWFyZ2luID49IG1fdGFyZ2V0KSAmJiAobV90YXJnZXQgKyBtX21hcmdpbiA+PSBtX21hcmdpbik7CisgICAgICAgIHJldHVybiAobWF0Y2hlZSArIG1fbWFyZ2luID49IG1fdGFyZ2V0KSAmJiAobV90YXJnZXQgKyBtX21hcmdpbiA+PSBtYXRjaGVlKTsKICAgICB9CiAKICAgICBzdGQ6OnN0cmluZyBXaXRoaW5BYnNNYXRjaGVyOjpkZXNjcmliZSgpIGNvbnN0IHsKQEAgLTk4LDExICs5OSwxNiBAQAogCiAgICAgV2l0aGluVWxwc01hdGNoZXI6OldpdGhpblVscHNNYXRjaGVyKGRvdWJsZSB0YXJnZXQsIGludCB1bHBzLCBGbG9hdGluZ1BvaW50S2luZCBiYXNlVHlwZSkKICAgICAgICAgOm1fdGFyZ2V0eyB0YXJnZXQgfSwgbV91bHBzeyB1bHBzIH0sIG1fdHlwZXsgYmFzZVR5cGUgfSB7Ci0gICAgICAgIGlmIChtX3VscHMgPCAwKSB7Ci0gICAgICAgICAgRXhjZXB0aW9uOjpkb1Rocm93KCBzdGQ6OmRvbWFpbl9lcnJvcigiQWxsb3dlZCB1bHAgZGlmZmVyZW5jZSBoYXMgdG8gYmUgPj0gMCIpICk7Ci0gICAgICAgIH0KKyAgICAgICAgQ0FUQ0hfRU5GT1JDRSh1bHBzID49IDAsICJJbnZhbGlkIFVMUCBzZXR0aW5nOiAiIDw8IHVscHMgPDwgJy4nCisgICAgICAgICAgICA8PCAiIFVMUHMgaGF2ZSB0byBiZSBub24tbmVnYXRpdmUuIik7CiAgICAgfQogCisjaWYgZGVmaW5lZChfX2NsYW5nX18pCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorLy8gQ2xhbmcgPDMuNSByZXBvcnRzIG9uIHRoZSBkZWZhdWx0IGJyYW5jaCBpbiB0aGUgc3dpdGNoIGJlbG93CisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnJlYWNoYWJsZS1jb2RlIgorI2VuZGlmCisKICAgICBib29sIFdpdGhpblVscHNNYXRjaGVyOjptYXRjaChkb3VibGUgY29uc3QmIG1hdGNoZWUpIGNvbnN0IHsKICAgICAgICAgc3dpdGNoIChtX3R5cGUpIHsKICAgICAgICAgY2FzZSBGbG9hdGluZ1BvaW50S2luZDo6RmxvYXQ6CkBAIC0xMTAsMTIgKzExNiwxNiBAQAogICAgICAgICBjYXNlIEZsb2F0aW5nUG9pbnRLaW5kOjpEb3VibGU6CiAgICAgICAgICAgICByZXR1cm4gYWxtb3N0RXF1YWxVbHBzPGRvdWJsZT4obWF0Y2hlZSwgbV90YXJnZXQsIG1fdWxwcyk7CiAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBFeGNlcHRpb246OmRvVGhyb3coIHN0ZDo6ZG9tYWluX2Vycm9yKCJVbmtub3duIEZsb2F0aW5nUG9pbnRLaW5kIHZhbHVlIikgKTsKKyAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX0VSUk9SKCAiVW5rbm93biBGbG9hdGluZ1BvaW50S2luZCB2YWx1ZSIgKTsKICAgICAgICAgfQogICAgIH0KIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKICAgICBzdGQ6OnN0cmluZyBXaXRoaW5VbHBzTWF0Y2hlcjo6ZGVzY3JpYmUoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAiaXMgd2l0aGluICIgKyBzdGQ6OnRvX3N0cmluZyhtX3VscHMpICsgIiBVTFBzIG9mICIgKyA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShtX3RhcmdldCkgKyAoKG1fdHlwZSA9PSBGbG9hdGluZ1BvaW50S2luZDo6RmxvYXQpPyAiZiIgOiAiIik7CisgICAgICAgIHJldHVybiAiaXMgd2l0aGluICIgKyBDYXRjaDo6dG9fc3RyaW5nKG1fdWxwcykgKyAiIFVMUHMgb2YgIiArIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KG1fdGFyZ2V0KSArICgobV90eXBlID09IEZsb2F0aW5nUG9pbnRLaW5kOjpGbG9hdCk/ICJmIiA6ICIiKTsKICAgICB9CiAKIH0vLyBuYW1lc3BhY2UgRmxvYXRpbmcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfZ2VuZXJpYy5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2dlbmVyaWMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMDEwMmUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2dlbmVyaWMuY3BwCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgImNhdGNoX21hdGNoZXJzX2dlbmVyaWMuaHBwIgorCitzdGQ6OnN0cmluZyBDYXRjaDo6TWF0Y2hlcnM6OkdlbmVyaWM6OkRldGFpbDo6ZmluYWxpemVEZXNjcmlwdGlvbihjb25zdCBzdGQ6OnN0cmluZyYgZGVzYykgeworICAgIGlmIChkZXNjLmVtcHR5KCkpIHsKKyAgICAgICAgcmV0dXJuICJtYXRjaGVzIHVuZGVzY3JpYmVkIHByZWRpY2F0ZSI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuICJtYXRjaGVzIHByZWRpY2F0ZTogXCIiICsgZGVzYyArICciJzsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2dlbmVyaWMuaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVyc19nZW5lcmljLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YzRmOWYxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVyc19nZW5lcmljLmhwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogIENyZWF0ZWQgYnkgTWFydGluIEhvxZllxYhvdnNrw70gb24gMDMvMDQvMjAxNy4KKyAqCisgKiBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCisgKiBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAqLworI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfTUFUQ0hFUlNfR0VORVJJQ19IUFBfSU5DTFVERUQKKyNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX01BVENIRVJTX0dFTkVSSUNfSFBQX0lOQ0xVREVECisKKyNpbmNsdWRlICJjYXRjaF9jb21tb24uaCIKKyNpbmNsdWRlICJjYXRjaF9tYXRjaGVycy5oIgorCisjaW5jbHVkZSA8ZnVuY3Rpb25hbD4KKyNpbmNsdWRlIDxzdHJpbmc+CisKK25hbWVzcGFjZSBDYXRjaCB7CituYW1lc3BhY2UgTWF0Y2hlcnMgeworbmFtZXNwYWNlIEdlbmVyaWMgeworCituYW1lc3BhY2UgRGV0YWlsIHsKKyAgICBzdGQ6OnN0cmluZyBmaW5hbGl6ZURlc2NyaXB0aW9uKGNvbnN0IHN0ZDo6c3RyaW5nJiBkZXNjKTsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBQcmVkaWNhdGVNYXRjaGVyIDogcHVibGljIE1hdGNoZXJCYXNlPFQ+IHsKKyAgICBzdGQ6OmZ1bmN0aW9uPGJvb2woVCBjb25zdCYpPiBtX3ByZWRpY2F0ZTsKKyAgICBzdGQ6OnN0cmluZyBtX2Rlc2NyaXB0aW9uOworcHVibGljOgorCisgICAgUHJlZGljYXRlTWF0Y2hlcihzdGQ6OmZ1bmN0aW9uPGJvb2woVCBjb25zdCYpPiBjb25zdCYgZWxlbSwgc3RkOjpzdHJpbmcgY29uc3QmIGRlc2NyKQorICAgICAgICA6bV9wcmVkaWNhdGUoc3RkOjptb3ZlKGVsZW0pKSwKKyAgICAgICAgbV9kZXNjcmlwdGlvbihEZXRhaWw6OmZpbmFsaXplRGVzY3JpcHRpb24oZGVzY3IpKQorICAgIHt9CisKKyAgICBib29sIG1hdGNoKCBUIGNvbnN0JiBpdGVtICkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbV9wcmVkaWNhdGUoaXRlbSk7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgZGVzY3JpYmUoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtX2Rlc2NyaXB0aW9uOworICAgIH0KK307CisKK30gLy8gbmFtZXNwYWNlIEdlbmVyaWMKKworICAgIC8vIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGNyZWF0ZSB0aGUgYWN0dWFsIG1hdGNoZXIgb2JqZWN0cy4KKyAgICAvLyBUaGUgdXNlciBoYXMgdG8gZXhwbGljaXRseSBzcGVjaWZ5IHR5cGUgdG8gdGhlIGZ1bmN0aW9uLCBiZWNhdXNlCisgICAgLy8gaW5mZXJpbmcgc3RkOjpmdW5jdGlvbjxib29sKFQgY29uc3QmKT4gaXMgaGFyZCAoYnV0IHBvc3NpYmxlKSBhbmQKKyAgICAvLyByZXF1aXJlcyBhIGxvdCBvZiBUTVAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBHZW5lcmljOjpQcmVkaWNhdGVNYXRjaGVyPFQ+IFByZWRpY2F0ZShzdGQ6OmZ1bmN0aW9uPGJvb2woVCBjb25zdCYpPiBjb25zdCYgcHJlZGljYXRlLCBzdGQ6OnN0cmluZyBjb25zdCYgZGVzY3JpcHRpb24gPSAiIikgeworICAgICAgICByZXR1cm4gR2VuZXJpYzo6UHJlZGljYXRlTWF0Y2hlcjxUPihwcmVkaWNhdGUsIGRlc2NyaXB0aW9uKTsKKyAgICB9CisKK30gLy8gbmFtZXNwYWNlIE1hdGNoZXJzCit9IC8vIG5hbWVzcGFjZSBDYXRjaAorCisjZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX01BVENIRVJTX0dFTkVSSUNfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX3ZlY3Rvci5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVyc192ZWN0b3IuaAppbmRleCA4MzNkN2RjLi4xZTI5Y2M5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21hdGNoZXJzX3ZlY3Rvci5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfdmVjdG9yLmgKQEAgLTEyNCw3ICsxMjQsNyBAQAogICAgICAgICAgICAgICAgIGF1dG8gbGZpcnN0ID0gbV90YXJnZXQuYmVnaW4oKSwgbGxhc3QgPSBtX3RhcmdldC5lbmQoKTsKICAgICAgICAgICAgICAgICBhdXRvIHJmaXJzdCA9IHZlYy5iZWdpbigpLCBybGFzdCA9IHZlYy5lbmQoKTsKICAgICAgICAgICAgICAgICAvLyBDdXQgY29tbW9uIHByZWZpeCB0byBvcHRpbWl6ZSBjaGVja2luZyBvZiBwZXJtdXRlZCBwYXJ0cwotICAgICAgICAgICAgICAgIHdoaWxlIChsZmlyc3QgIT0gbGxhc3QgJiYgKmxmaXJzdCAhPSAqcmZpcnN0KSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGxmaXJzdCAhPSBsbGFzdCAmJiAqbGZpcnN0ID09ICpyZmlyc3QpIHsKICAgICAgICAgICAgICAgICAgICAgKytsZmlyc3Q7ICsrcmZpcnN0OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAobGZpcnN0ID09IGxsYXN0KSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21lc3NhZ2UuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tZXNzYWdlLmNwcAppbmRleCA4Njg0OTcwLi5mYTdlODc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21lc3NhZ2UuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbWVzc2FnZS5jcHAKQEAgLTEwLDkgKzEwLDEyIEBACiAjaW5jbHVkZSAiY2F0Y2hfaW50ZXJmYWNlc19jYXB0dXJlLmgiCiAjaW5jbHVkZSAiY2F0Y2hfdW5jYXVnaHRfZXhjZXB0aW9ucy5oIgogCisjaW5jbHVkZSA8Y2Fzc2VydD4KKyNpbmNsdWRlIDxzdGFjaz4KKwogbmFtZXNwYWNlIENhdGNoIHsKIAotICAgIE1lc3NhZ2VJbmZvOjpNZXNzYWdlSW5mbyggICBzdGQ6OnN0cmluZyBjb25zdCYgX21hY3JvTmFtZSwKKyAgICBNZXNzYWdlSW5mbzo6TWVzc2FnZUluZm8oICAgU3RyaW5nUmVmIGNvbnN0JiBfbWFjcm9OYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VMaW5lSW5mbyBjb25zdCYgX2xpbmVJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHRXYXM6Ok9mVHlwZSBfdHlwZSApCiAgICAgOiAgIG1hY3JvTmFtZSggX21hY3JvTmFtZSApLApAQCAtMzUsNyArMzgsNyBAQAogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0gICAgQ2F0Y2g6Ok1lc3NhZ2VCdWlsZGVyOjpNZXNzYWdlQnVpbGRlciggc3RkOjpzdHJpbmcgY29uc3QmIG1hY3JvTmFtZSwKKyAgICBDYXRjaDo6TWVzc2FnZUJ1aWxkZXI6Ok1lc3NhZ2VCdWlsZGVyKCBTdHJpbmdSZWYgY29uc3QmIG1hY3JvTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VMaW5lSW5mbyBjb25zdCYgbGluZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0V2FzOjpPZlR5cGUgdHlwZSApCiAgICAgICAgIDptX2luZm8obWFjcm9OYW1lLCBsaW5lSW5mbywgdHlwZSkge30KQEAgLTQ0LDE1ICs0Nyw4MiBAQAogCiAKICAgICBTY29wZWRNZXNzYWdlOjpTY29wZWRNZXNzYWdlKCBNZXNzYWdlQnVpbGRlciBjb25zdCYgYnVpbGRlciApCi0gICAgOiBtX2luZm8oIGJ1aWxkZXIubV9pbmZvICkKKyAgICA6IG1faW5mbyggYnVpbGRlci5tX2luZm8gKSwgbV9tb3ZlZCgpCiAgICAgewogICAgICAgICBtX2luZm8ubWVzc2FnZSA9IGJ1aWxkZXIubV9zdHJlYW0uc3RyKCk7CiAgICAgICAgIGdldFJlc3VsdENhcHR1cmUoKS5wdXNoU2NvcGVkTWVzc2FnZSggbV9pbmZvICk7CiAgICAgfQogCisgICAgU2NvcGVkTWVzc2FnZTo6U2NvcGVkTWVzc2FnZSggU2NvcGVkTWVzc2FnZSYmIG9sZCApCisgICAgOiBtX2luZm8oIG9sZC5tX2luZm8gKSwgbV9tb3ZlZCgpCisgICAgeworICAgICAgICBvbGQubV9tb3ZlZCA9IHRydWU7CisgICAgfQorCiAgICAgU2NvcGVkTWVzc2FnZTo6flNjb3BlZE1lc3NhZ2UoKSB7Ci0gICAgICAgIGlmICggIXVuY2F1Z2h0X2V4Y2VwdGlvbnMoKSApeworICAgICAgICBpZiAoICF1bmNhdWdodF9leGNlcHRpb25zKCkgJiYgIW1fbW92ZWQgKXsKICAgICAgICAgICAgIGdldFJlc3VsdENhcHR1cmUoKS5wb3BTY29wZWRNZXNzYWdlKG1faW5mbyk7CiAgICAgICAgIH0KICAgICB9CisKKworICAgIENhcHR1cmVyOjpDYXB0dXJlciggU3RyaW5nUmVmIG1hY3JvTmFtZSwgU291cmNlTGluZUluZm8gY29uc3QmIGxpbmVJbmZvLCBSZXN1bHRXYXM6Ok9mVHlwZSByZXN1bHRUeXBlLCBTdHJpbmdSZWYgbmFtZXMgKSB7CisgICAgICAgIGF1dG8gdHJpbW1lZCA9IFsmXSAoc2l6ZV90IHN0YXJ0LCBzaXplX3QgZW5kKSB7CisgICAgICAgICAgICB3aGlsZSAobmFtZXNbc3RhcnRdID09ICcsJyB8fCBpc3NwYWNlKG5hbWVzW3N0YXJ0XSkpIHsKKyAgICAgICAgICAgICAgICArK3N0YXJ0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2hpbGUgKG5hbWVzW2VuZF0gPT0gJywnIHx8IGlzc3BhY2UobmFtZXNbZW5kXSkpIHsKKyAgICAgICAgICAgICAgICAtLWVuZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBuYW1lcy5zdWJzdHIoc3RhcnQsIGVuZCAtIHN0YXJ0ICsgMSk7CisgICAgICAgIH07CisKKyAgICAgICAgc2l6ZV90IHN0YXJ0ID0gMDsKKyAgICAgICAgc3RkOjpzdGFjazxjaGFyPiBvcGVuaW5nczsKKyAgICAgICAgZm9yIChzaXplX3QgcG9zID0gMDsgcG9zIDwgbmFtZXMuc2l6ZSgpOyArK3BvcykgeworICAgICAgICAgICAgY2hhciBjID0gbmFtZXNbcG9zXTsKKyAgICAgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgICBjYXNlICd7JzoKKyAgICAgICAgICAgIGNhc2UgJygnOgorICAgICAgICAgICAgLy8gSXQgaXMgYmFzaWNhbGx5IGltcG9zc2libGUgdG8gZGlzYW1iaWd1YXRlIGJldHdlZW4KKyAgICAgICAgICAgIC8vIGNvbXBhcmlzb24gYW5kIHN0YXJ0IG9mIHRlbXBsYXRlIGFyZ3MgaW4gdGhpcyBjb250ZXh0CisvLyAgICAgICAgICAgIGNhc2UgJzwnOgorICAgICAgICAgICAgICAgIG9wZW5pbmdzLnB1c2goYyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICddJzoKKyAgICAgICAgICAgIGNhc2UgJ30nOgorICAgICAgICAgICAgY2FzZSAnKSc6CisvLyAgICAgICAgICAgY2FzZSAnPic6CisgICAgICAgICAgICAgICAgb3BlbmluZ3MucG9wKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICcsJzoKKyAgICAgICAgICAgICAgICBpZiAoc3RhcnQgIT0gcG9zICYmIG9wZW5pbmdzLnNpemUoKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG1fbWVzc2FnZXMuZW1wbGFjZV9iYWNrKG1hY3JvTmFtZSwgbGluZUluZm8sIHJlc3VsdFR5cGUpOworICAgICAgICAgICAgICAgICAgICBtX21lc3NhZ2VzLmJhY2soKS5tZXNzYWdlID0gdHJpbW1lZChzdGFydCwgcG9zKTsKKyAgICAgICAgICAgICAgICAgICAgbV9tZXNzYWdlcy5iYWNrKCkubWVzc2FnZSArPSAiIDo9ICI7CisgICAgICAgICAgICAgICAgICAgIHN0YXJ0ID0gcG9zOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhc3NlcnQob3BlbmluZ3Muc2l6ZSgpID09IDAgJiYgIk1pc21hdGNoZWQgb3BlbmluZ3MiKTsKKyAgICAgICAgbV9tZXNzYWdlcy5lbXBsYWNlX2JhY2sobWFjcm9OYW1lLCBsaW5lSW5mbywgcmVzdWx0VHlwZSk7CisgICAgICAgIG1fbWVzc2FnZXMuYmFjaygpLm1lc3NhZ2UgPSB0cmltbWVkKHN0YXJ0LCBuYW1lcy5zaXplKCkgLSAxKTsKKyAgICAgICAgbV9tZXNzYWdlcy5iYWNrKCkubWVzc2FnZSArPSAiIDo9ICI7CisgICAgfQorICAgIENhcHR1cmVyOjp+Q2FwdHVyZXIoKSB7CisgICAgICAgIGlmICggIXVuY2F1Z2h0X2V4Y2VwdGlvbnMoKSApeworICAgICAgICAgICAgYXNzZXJ0KCBtX2NhcHR1cmVkID09IG1fbWVzc2FnZXMuc2l6ZSgpICk7CisgICAgICAgICAgICBmb3IoIHNpemVfdCBpID0gMDsgaSA8IG1fY2FwdHVyZWQ7ICsraSAgKQorICAgICAgICAgICAgICAgIG1fcmVzdWx0Q2FwdHVyZS5wb3BTY29wZWRNZXNzYWdlKCBtX21lc3NhZ2VzW2ldICk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lkIENhcHR1cmVyOjpjYXB0dXJlVmFsdWUoIHNpemVfdCBpbmRleCwgc3RkOjpzdHJpbmcgY29uc3QmIHZhbHVlICkgeworICAgICAgICBhc3NlcnQoIGluZGV4IDwgbV9tZXNzYWdlcy5zaXplKCkgKTsKKyAgICAgICAgbV9tZXNzYWdlc1tpbmRleF0ubWVzc2FnZSArPSB2YWx1ZTsKKyAgICAgICAgbV9yZXN1bHRDYXB0dXJlLnB1c2hTY29wZWRNZXNzYWdlKCBtX21lc3NhZ2VzW2luZGV4XSApOworICAgICAgICBtX2NhcHR1cmVkKys7CisgICAgfQorCiB9IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbWVzc2FnZS5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tZXNzYWdlLmgKaW5kZXggMGE1MTJlZC4uNzQ4ZjVhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tZXNzYWdlLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tZXNzYWdlLmgKQEAgLTgsMTkgKzgsMjMgQEAKICNpZm5kZWYgVFdPQkxVRUNVQkVTX0NBVENIX01FU1NBR0VfSF9JTkNMVURFRAogI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfTUVTU0FHRV9IX0lOQ0xVREVECiAKLSNpbmNsdWRlIDxzdHJpbmc+CiAjaW5jbHVkZSAiY2F0Y2hfcmVzdWx0X3R5cGUuaCIKICNpbmNsdWRlICJjYXRjaF9jb21tb24uaCIKICNpbmNsdWRlICJjYXRjaF9zdHJlYW0uaCIKKyNpbmNsdWRlICJjYXRjaF9pbnRlcmZhY2VzX2NhcHR1cmUuaCIKKyNpbmNsdWRlICJjYXRjaF90b3N0cmluZy5oIgorCisjaW5jbHVkZSA8c3RyaW5nPgorI2luY2x1ZGUgPHZlY3Rvcj4KIAogbmFtZXNwYWNlIENhdGNoIHsKIAogICAgIHN0cnVjdCBNZXNzYWdlSW5mbyB7Ci0gICAgICAgIE1lc3NhZ2VJbmZvKCAgICBzdGQ6OnN0cmluZyBjb25zdCYgX21hY3JvTmFtZSwKKyAgICAgICAgTWVzc2FnZUluZm8oICAgIFN0cmluZ1JlZiBjb25zdCYgX21hY3JvTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBfbGluZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHRXYXM6Ok9mVHlwZSBfdHlwZSApOwogCi0gICAgICAgIHN0ZDo6c3RyaW5nIG1hY3JvTmFtZTsKKyAgICAgICAgU3RyaW5nUmVmIG1hY3JvTmFtZTsKICAgICAgICAgc3RkOjpzdHJpbmcgbWVzc2FnZTsKICAgICAgICAgU291cmNlTGluZUluZm8gbGluZUluZm87CiAgICAgICAgIFJlc3VsdFdhczo6T2ZUeXBlIHR5cGU7CkBAIC00NCw3ICs0OCw3IEBACiAgICAgfTsKIAogICAgIHN0cnVjdCBNZXNzYWdlQnVpbGRlciA6IE1lc3NhZ2VTdHJlYW0gewotICAgICAgICBNZXNzYWdlQnVpbGRlciggc3RkOjpzdHJpbmcgY29uc3QmIG1hY3JvTmFtZSwKKyAgICAgICAgTWVzc2FnZUJ1aWxkZXIoIFN0cmluZ1JlZiBjb25zdCYgbWFjcm9OYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlTGluZUluZm8gY29uc3QmIGxpbmVJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0V2FzOjpPZlR5cGUgdHlwZSApOwogCkBAIC02MCw5ICs2NCwzNCBAQAogICAgIGNsYXNzIFNjb3BlZE1lc3NhZ2UgewogICAgIHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgU2NvcGVkTWVzc2FnZSggTWVzc2FnZUJ1aWxkZXIgY29uc3QmIGJ1aWxkZXIgKTsKKyAgICAgICAgU2NvcGVkTWVzc2FnZSggU2NvcGVkTWVzc2FnZSYgZHVwbGljYXRlICkgPSBkZWxldGU7CisgICAgICAgIFNjb3BlZE1lc3NhZ2UoIFNjb3BlZE1lc3NhZ2UmJiBvbGQgKTsKICAgICAgICAgflNjb3BlZE1lc3NhZ2UoKTsKIAogICAgICAgICBNZXNzYWdlSW5mbyBtX2luZm87CisgICAgICAgIGJvb2wgbV9tb3ZlZDsKKyAgICB9OworCisgICAgY2xhc3MgQ2FwdHVyZXIgeworICAgICAgICBzdGQ6OnZlY3RvcjxNZXNzYWdlSW5mbz4gbV9tZXNzYWdlczsKKyAgICAgICAgSVJlc3VsdENhcHR1cmUmIG1fcmVzdWx0Q2FwdHVyZSA9IGdldFJlc3VsdENhcHR1cmUoKTsKKyAgICAgICAgc2l6ZV90IG1fY2FwdHVyZWQgPSAwOworICAgIHB1YmxpYzoKKyAgICAgICAgQ2FwdHVyZXIoIFN0cmluZ1JlZiBtYWNyb05hbWUsIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbywgUmVzdWx0V2FzOjpPZlR5cGUgcmVzdWx0VHlwZSwgU3RyaW5nUmVmIG5hbWVzICk7CisgICAgICAgIH5DYXB0dXJlcigpOworCisgICAgICAgIHZvaWQgY2FwdHVyZVZhbHVlKCBzaXplX3QgaW5kZXgsIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSApOworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHZvaWQgY2FwdHVyZVZhbHVlcyggc2l6ZV90IGluZGV4LCBUIGNvbnN0JiB2YWx1ZSApIHsKKyAgICAgICAgICAgIGNhcHR1cmVWYWx1ZSggaW5kZXgsIENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggdmFsdWUgKSApOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgICAgICAgIHZvaWQgY2FwdHVyZVZhbHVlcyggc2l6ZV90IGluZGV4LCBUIGNvbnN0JiB2YWx1ZSwgVHMgY29uc3QmLi4uIHZhbHVlcyApIHsKKyAgICAgICAgICAgIGNhcHR1cmVWYWx1ZSggaW5kZXgsIENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2YWx1ZSkgKTsKKyAgICAgICAgICAgIGNhcHR1cmVWYWx1ZXMoIGluZGV4KzEsIHZhbHVlcy4uLiApOworICAgICAgICB9CiAgICAgfTsKIAogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21ldGEuaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tZXRhLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTA4YTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9tZXRhLmhwcApAQCAtMCwwICsxLDc3IEBACisvKgorICogIENyZWF0ZWQgYnkgSm96ZWYgb24gMDIvMTIvMjAxOC4KKyAqICBDb3B5cmlnaHQgMjAxOCBUd28gQmx1ZSBDdWJlcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAqLworCisjaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9NRVRBX0hQUF9JTkNMVURFRAorI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfTUVUQV9IUFBfSU5DTFVERUQKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCituYW1lc3BhY2UgQ2F0Y2ggewordGVtcGxhdGU8IHR5cGVuYW1lLi4uID4KK3N0cnVjdCBUeXBlTGlzdCB7fTsKKwordGVtcGxhdGU8IHR5cGVuYW1lLi4uID4KK3N0cnVjdCBhcHBlbmQ7CisKK3RlbXBsYXRlPCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgTDEKKyAgICAsIHR5cGVuYW1lLi4uRTEKKyAgICAsIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMMgorICAgICwgdHlwZW5hbWUuLi5FMgorPgorc3RydWN0IGFwcGVuZDwgTDE8RTEuLi4+LCBMMjxFMi4uLj4gPiB7CisgICAgdXNpbmcgdHlwZSA9IEwxPEUxLi4uLCBFMi4uLj47Cit9OworCit0ZW1wbGF0ZTwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIEwxCisgICAgLCB0eXBlbmFtZS4uLkUxCisgICAgLCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgTDIKKyAgICAsIHR5cGVuYW1lLi4uRTIKKyAgICAsIHR5cGVuYW1lLi4uUmVzdAorPgorc3RydWN0IGFwcGVuZDwgTDE8RTEuLi4+LCBMMjxFMi4uLj4sIFJlc3QuLi4+IHsKKyAgICB1c2luZyB0eXBlID0gdHlwZW5hbWUgYXBwZW5kPCBMMTxFMS4uLiwgRTIuLi4+LCBSZXN0Li4uID46OnR5cGU7Cit9OworCit0ZW1wbGF0ZTwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzCisgICAgLCB0eXBlbmFtZS4uLgorPgorc3RydWN0IHJld3JhcDsKKwordGVtcGxhdGU8IHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBDb250YWluZXIKKyAgICAsIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMaXN0CisgICAgLCB0eXBlbmFtZS4uLmVsZW1zCis+CitzdHJ1Y3QgcmV3cmFwPENvbnRhaW5lciwgTGlzdDxlbGVtcy4uLj4+IHsKKyAgICB1c2luZyB0eXBlID0gVHlwZUxpc3Q8IENvbnRhaW5lcjwgZWxlbXMuLi4gPiA+OworfTsKKwordGVtcGxhdGU8IHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBDb250YWluZXIKKyAgICAsIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMaXN0CisgICAgLCBjbGFzcy4uLkVsZW1zCisgICAgLCB0eXBlbmFtZS4uLkVsZW1lbnRzPgorICAgIHN0cnVjdCByZXdyYXA8Q29udGFpbmVyLCBMaXN0PEVsZW1zLi4uPiwgRWxlbWVudHMuLi4+IHsKKyAgICB1c2luZyB0eXBlID0gdHlwZW5hbWUgYXBwZW5kPFR5cGVMaXN0PENvbnRhaW5lcjxFbGVtcy4uLj4+LCB0eXBlbmFtZSByZXdyYXA8Q29udGFpbmVyLCBFbGVtZW50cy4uLj46OnR5cGU+Ojp0eXBlOworfTsKKwordGVtcGxhdGU8IHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcy4uLkNvbnRhaW5lcnMgPgorc3RydWN0IGNvbWJpbmUgeworICAgIHRlbXBsYXRlPCB0eXBlbmFtZS4uLlR5cGVzID4KKyAgICBzdHJ1Y3Qgd2l0aF90eXBlcyB7CisgICAgICAgIHRlbXBsYXRlPCB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IGNsYXNzIEZpbmFsID4KKyAgICAgICAgc3RydWN0IGludG8geworICAgICAgICAgICAgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIGFwcGVuZDxGaW5hbDw+LCB0eXBlbmFtZSByZXdyYXA8Q29udGFpbmVycywgVHlwZXMuLi4+Ojp0eXBlLi4uPjo6dHlwZTsKKyAgICAgICAgfTsKKyAgICB9OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBhbHdheXNfZmFsc2UgOiBzdGQ6OmZhbHNlX3R5cGUge307CisKK30gLy8gbmFtZXNwYWNlIENhdGNoCisKKyNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfTUVUQV9IUFBfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfb2JqYy5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX29iamMuaHBwCmluZGV4IGI0M2YzMzUuLjM5Y2JiMWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfb2JqYy5ocHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9vYmpjLmhwcApAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgZGVzYyA9IERldGFpbDo6Z2V0QW5ub3RhdGlvbiggY2xzLCAiRGVzY3JpcHRpb24iLCB0ZXN0Q2FzZU5hbWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGNsYXNzTmFtZSA9IGNsYXNzX2dldE5hbWUoIGNscyApOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXRNdXRhYmxlUmVnaXN0cnlIdWIoKS5yZWdpc3RlclRlc3QoIG1ha2VUZXN0Q2FzZSggbmV3IE9jTWV0aG9kKCBjbHMsIHNlbGVjdG9yICksIGNsYXNzTmFtZSwgbmFtZS5jX3N0cigpLCBkZXNjLmNfc3RyKCksIFNvdXJjZUxpbmVJbmZvKCIiLDApICkgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdldE11dGFibGVSZWdpc3RyeUh1YigpLnJlZ2lzdGVyVGVzdCggbWFrZVRlc3RDYXNlKCBuZXcgT2NNZXRob2QoIGNscywgc2VsZWN0b3IgKSwgY2xhc3NOYW1lLCBOYW1lQW5kVGFncyggbmFtZS5jX3N0cigpLCBkZXNjLmNfc3RyKCkgKSwgU291cmNlTGluZUluZm8oIiIsMCkgKSApOwogICAgICAgICAgICAgICAgICAgICAgICAgbm9UZXN0TWV0aG9kcysrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9vdXRwdXRfcmVkaXJlY3QuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9vdXRwdXRfcmVkaXJlY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYTlhZmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX291dHB1dF9yZWRpcmVjdC5jcHAKQEAgLTAsMCArMSwxNDcgQEAKKy8qCisgKiAgQ3JlYXRlZCBieSBNYXJ0aW4gb24gMjgvMDQvMjAxOC4KKyAqCisgKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorICovCisKKyNpbmNsdWRlICJjYXRjaF9vdXRwdXRfcmVkaXJlY3QuaCIKKyNpbmNsdWRlICJjYXRjaF9lbmZvcmNlLmgiCisKKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0cmluZz4KKyNpbmNsdWRlIDxmc3RyZWFtPgorI2luY2x1ZGUgPHNzdHJlYW0+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgorCisjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfTkVXX0NBUFRVUkUpCisgICAgI2lmIGRlZmluZWQoX01TQ19WRVIpCisgICAgI2luY2x1ZGUgPGlvLmg+ICAgICAgLy9fZHVwIGFuZCBfZHVwMgorICAgICNkZWZpbmUgZHVwIF9kdXAKKyAgICAjZGVmaW5lIGR1cDIgX2R1cDIKKyAgICAjZGVmaW5lIGZpbGVubyBfZmlsZW5vCisgICAgI2Vsc2UKKyAgICAjaW5jbHVkZSA8dW5pc3RkLmg+ICAvLyBkdXAgYW5kIGR1cDIKKyAgICAjZW5kaWYKKyNlbmRpZgorCisKK25hbWVzcGFjZSBDYXRjaCB7CisKKyAgICBSZWRpcmVjdGVkU3RyZWFtOjpSZWRpcmVjdGVkU3RyZWFtKCBzdGQ6Om9zdHJlYW0mIG9yaWdpbmFsU3RyZWFtLCBzdGQ6Om9zdHJlYW0mIHJlZGlyZWN0aW9uU3RyZWFtICkKKyAgICA6ICAgbV9vcmlnaW5hbFN0cmVhbSggb3JpZ2luYWxTdHJlYW0gKSwKKyAgICAgICAgbV9yZWRpcmVjdGlvblN0cmVhbSggcmVkaXJlY3Rpb25TdHJlYW0gKSwKKyAgICAgICAgbV9wcmV2QnVmKCBtX29yaWdpbmFsU3RyZWFtLnJkYnVmKCkgKQorICAgIHsKKyAgICAgICAgbV9vcmlnaW5hbFN0cmVhbS5yZGJ1ZiggbV9yZWRpcmVjdGlvblN0cmVhbS5yZGJ1ZigpICk7CisgICAgfQorCisgICAgUmVkaXJlY3RlZFN0cmVhbTo6flJlZGlyZWN0ZWRTdHJlYW0oKSB7CisgICAgICAgIG1fb3JpZ2luYWxTdHJlYW0ucmRidWYoIG1fcHJldkJ1ZiApOworICAgIH0KKworICAgIFJlZGlyZWN0ZWRTdGRPdXQ6OlJlZGlyZWN0ZWRTdGRPdXQoKSA6IG1fY291dCggQ2F0Y2g6OmNvdXQoKSwgbV9yc3MuZ2V0KCkgKSB7fQorICAgIGF1dG8gUmVkaXJlY3RlZFN0ZE91dDo6c3RyKCkgY29uc3QgLT4gc3RkOjpzdHJpbmcgeyByZXR1cm4gbV9yc3Muc3RyKCk7IH0KKworICAgIFJlZGlyZWN0ZWRTdGRFcnI6OlJlZGlyZWN0ZWRTdGRFcnIoKQorICAgIDogICBtX2NlcnIoIENhdGNoOjpjZXJyKCksIG1fcnNzLmdldCgpICksCisgICAgICAgIG1fY2xvZyggQ2F0Y2g6OmNsb2coKSwgbV9yc3MuZ2V0KCkgKQorICAgIHt9CisgICAgYXV0byBSZWRpcmVjdGVkU3RkRXJyOjpzdHIoKSBjb25zdCAtPiBzdGQ6OnN0cmluZyB7IHJldHVybiBtX3Jzcy5zdHIoKTsgfQorCisgICAgUmVkaXJlY3RlZFN0cmVhbXM6OlJlZGlyZWN0ZWRTdHJlYW1zKHN0ZDo6c3RyaW5nJiByZWRpcmVjdGVkQ291dCwgc3RkOjpzdHJpbmcmIHJlZGlyZWN0ZWRDZXJyKQorICAgIDogICBtX3JlZGlyZWN0ZWRDb3V0KHJlZGlyZWN0ZWRDb3V0KSwKKyAgICAgICAgbV9yZWRpcmVjdGVkQ2VycihyZWRpcmVjdGVkQ2VycikKKyAgICB7fQorCisgICAgUmVkaXJlY3RlZFN0cmVhbXM6On5SZWRpcmVjdGVkU3RyZWFtcygpIHsKKyAgICAgICAgbV9yZWRpcmVjdGVkQ291dCArPSBtX3JlZGlyZWN0ZWRTdGRPdXQuc3RyKCk7CisgICAgICAgIG1fcmVkaXJlY3RlZENlcnIgKz0gbV9yZWRpcmVjdGVkU3RkRXJyLnN0cigpOworICAgIH0KKworI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX05FV19DQVBUVVJFKQorCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICBUZW1wRmlsZTo6VGVtcEZpbGUoKSB7CisgICAgICAgIGlmICh0bXBuYW1fcyhtX2J1ZmZlcikpIHsKKyAgICAgICAgICAgIENBVENIX1JVTlRJTUVfRVJST1IoIkNvdWxkIG5vdCBnZXQgYSB0ZW1wIGZpbGVuYW1lIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvcGVuX3MoJm1fZmlsZSwgbV9idWZmZXIsICJ3IikpIHsKKyAgICAgICAgICAgIGNoYXIgYnVmZmVyWzEwMF07CisgICAgICAgICAgICBpZiAoc3RyZXJyb3JfcyhidWZmZXIsIGVycm5vKSkgeworICAgICAgICAgICAgICAgIENBVENIX1JVTlRJTUVfRVJST1IoIkNvdWxkIG5vdCB0cmFuc2xhdGUgZXJybm8gdG8gYSBzdHJpbmciKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIENBVENIX1JVTlRJTUVfRVJST1IoIkNvdWwgZG5vdCBvcGVuIHRoZSB0ZW1wIGZpbGU6ICciIDw8IG1fYnVmZmVyIDw8ICInIGJlY2F1c2U6ICIgPDwgYnVmZmVyKTsKKyAgICAgICAgfQorICAgIH0KKyNlbHNlCisgICAgVGVtcEZpbGU6OlRlbXBGaWxlKCkgeworICAgICAgICBtX2ZpbGUgPSBzdGQ6OnRtcGZpbGUoKTsKKyAgICAgICAgaWYgKCFtX2ZpbGUpIHsKKyAgICAgICAgICAgIENBVENIX1JVTlRJTUVfRVJST1IoIkNvdWxkIG5vdCBjcmVhdGUgYSB0ZW1wIGZpbGUuIik7CisgICAgICAgIH0KKyAgICB9CisKKyNlbmRpZgorCisgICAgVGVtcEZpbGU6On5UZW1wRmlsZSgpIHsKKyAgICAgICAgIC8vIFRCRDogV2hhdCB0byBkbyBhYm91dCBlcnJvcnMgaGVyZT8KKyAgICAgICAgIHN0ZDo6ZmNsb3NlKG1fZmlsZSk7CisgICAgICAgICAvLyBXZSBtYW51YWxseSBjcmVhdGUgdGhlIGZpbGUgb24gV2luZG93cyBvbmx5LCBvbiBMaW51eAorICAgICAgICAgLy8gaXQgd2lsbCBiZSBhdXRvZGVsZXRlZAorI2lmIGRlZmluZWQoX01TQ19WRVIpCisgICAgICAgICBzdGQ6OnJlbW92ZShtX2J1ZmZlcik7CisjZW5kaWYKKyAgICB9CisKKworICAgIEZJTEUqIFRlbXBGaWxlOjpnZXRGaWxlKCkgeworICAgICAgICByZXR1cm4gbV9maWxlOworICAgIH0KKworICAgIHN0ZDo6c3RyaW5nIFRlbXBGaWxlOjpnZXRDb250ZW50cygpIHsKKyAgICAgICAgc3RkOjpzdHJpbmdzdHJlYW0gc3N0cjsKKyAgICAgICAgY2hhciBidWZmZXJbMTAwXSA9IHt9OworICAgICAgICBzdGQ6OnJld2luZChtX2ZpbGUpOworICAgICAgICB3aGlsZSAoc3RkOjpmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBtX2ZpbGUpKSB7CisgICAgICAgICAgICBzc3RyIDw8IGJ1ZmZlcjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gc3N0ci5zdHIoKTsKKyAgICB9CisKKyAgICBPdXRwdXRSZWRpcmVjdDo6T3V0cHV0UmVkaXJlY3Qoc3RkOjpzdHJpbmcmIHN0ZG91dF9kZXN0LCBzdGQ6OnN0cmluZyYgc3RkZXJyX2Rlc3QpIDoKKyAgICAgICAgbV9vcmlnaW5hbFN0ZG91dChkdXAoMSkpLAorICAgICAgICBtX29yaWdpbmFsU3RkZXJyKGR1cCgyKSksCisgICAgICAgIG1fc3Rkb3V0RGVzdChzdGRvdXRfZGVzdCksCisgICAgICAgIG1fc3RkZXJyRGVzdChzdGRlcnJfZGVzdCkgeworICAgICAgICBkdXAyKGZpbGVubyhtX3N0ZG91dEZpbGUuZ2V0RmlsZSgpKSwgMSk7CisgICAgICAgIGR1cDIoZmlsZW5vKG1fc3RkZXJyRmlsZS5nZXRGaWxlKCkpLCAyKTsKKyAgICB9CisKKyAgICBPdXRwdXRSZWRpcmVjdDo6fk91dHB1dFJlZGlyZWN0KCkgeworICAgICAgICBDYXRjaDo6Y291dCgpIDw8IHN0ZDo6Zmx1c2g7CisgICAgICAgIGZmbHVzaChzdGRvdXQpOworICAgICAgICAvLyBTaW5jZSB3ZSBzdXBwb3J0IG92ZXJyaWRpbmcgdGhlc2Ugc3RyZWFtcywgd2UgZmx1c2ggY2VycgorICAgICAgICAvLyBldmVuIHRob3VnaCBzdGQ6OmNlcnIgaXMgdW5idWZmZXJlZAorICAgICAgICBDYXRjaDo6Y2VycigpIDw8IHN0ZDo6Zmx1c2g7CisgICAgICAgIENhdGNoOjpjbG9nKCkgPDwgc3RkOjpmbHVzaDsKKyAgICAgICAgZmZsdXNoKHN0ZGVycik7CisKKyAgICAgICAgZHVwMihtX29yaWdpbmFsU3Rkb3V0LCAxKTsKKyAgICAgICAgZHVwMihtX29yaWdpbmFsU3RkZXJyLCAyKTsKKworICAgICAgICBtX3N0ZG91dERlc3QgKz0gbV9zdGRvdXRGaWxlLmdldENvbnRlbnRzKCk7CisgICAgICAgIG1fc3RkZXJyRGVzdCArPSBtX3N0ZGVyckZpbGUuZ2V0Q29udGVudHMoKTsKKyAgICB9CisKKyNlbmRpZiAvLyBDQVRDSF9DT05GSUdfTkVXX0NBUFRVUkUKKworfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKKworI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX05FV19DQVBUVVJFKQorICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICN1bmRlZiBkdXAKKyAgICAjdW5kZWYgZHVwMgorICAgICN1bmRlZiBmaWxlbm8KKyAgICAjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9vdXRwdXRfcmVkaXJlY3QuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfb3V0cHV0X3JlZGlyZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QxYzJkNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfb3V0cHV0X3JlZGlyZWN0LmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiAgQ3JlYXRlZCBieSBNYXJ0aW4gb24gMjgvMDQvMjAxOC4KKyAqCisgKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorICovCisjaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9PVVRQVVRfUkVESVJFQ1RfSAorI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfT1VUUFVUX1JFRElSRUNUX0gKKworI2luY2x1ZGUgImNhdGNoX3BsYXRmb3JtLmgiCisjaW5jbHVkZSAiY2F0Y2hfc3RyZWFtLmgiCisKKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8aW9zZndkPgorI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIENhdGNoIHsKKworICAgIGNsYXNzIFJlZGlyZWN0ZWRTdHJlYW0geworICAgICAgICBzdGQ6Om9zdHJlYW0mIG1fb3JpZ2luYWxTdHJlYW07CisgICAgICAgIHN0ZDo6b3N0cmVhbSYgbV9yZWRpcmVjdGlvblN0cmVhbTsKKyAgICAgICAgc3RkOjpzdHJlYW1idWYqIG1fcHJldkJ1ZjsKKworICAgIHB1YmxpYzoKKyAgICAgICAgUmVkaXJlY3RlZFN0cmVhbSggc3RkOjpvc3RyZWFtJiBvcmlnaW5hbFN0cmVhbSwgc3RkOjpvc3RyZWFtJiByZWRpcmVjdGlvblN0cmVhbSApOworICAgICAgICB+UmVkaXJlY3RlZFN0cmVhbSgpOworICAgIH07CisKKyAgICBjbGFzcyBSZWRpcmVjdGVkU3RkT3V0IHsKKyAgICAgICAgUmV1c2FibGVTdHJpbmdTdHJlYW0gbV9yc3M7CisgICAgICAgIFJlZGlyZWN0ZWRTdHJlYW0gbV9jb3V0OworICAgIHB1YmxpYzoKKyAgICAgICAgUmVkaXJlY3RlZFN0ZE91dCgpOworICAgICAgICBhdXRvIHN0cigpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nOworICAgIH07CisKKyAgICAvLyBTdGRFcnIgaGFzIHR3byBjb25zdGl0dWVudCBzdHJlYW1zIGluIEMrKywgc3RkOjpjZXJyIGFuZCBzdGQ6OmNsb2cKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgbmVlZCB0byByZWRpcmVjdCAyIHN0cmVhbXMgaW50byAxIHRvIGtlZXAgcHJvcGVyCisgICAgLy8gb3JkZXIgb2Ygd3JpdGVzCisgICAgY2xhc3MgUmVkaXJlY3RlZFN0ZEVyciB7CisgICAgICAgIFJldXNhYmxlU3RyaW5nU3RyZWFtIG1fcnNzOworICAgICAgICBSZWRpcmVjdGVkU3RyZWFtIG1fY2VycjsKKyAgICAgICAgUmVkaXJlY3RlZFN0cmVhbSBtX2Nsb2c7CisgICAgcHVibGljOgorICAgICAgICBSZWRpcmVjdGVkU3RkRXJyKCk7CisgICAgICAgIGF1dG8gc3RyKCkgY29uc3QgLT4gc3RkOjpzdHJpbmc7CisgICAgfTsKKworICAgIGNsYXNzIFJlZGlyZWN0ZWRTdHJlYW1zIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlZGlyZWN0ZWRTdHJlYW1zKFJlZGlyZWN0ZWRTdHJlYW1zIGNvbnN0JikgPSBkZWxldGU7CisgICAgICAgIFJlZGlyZWN0ZWRTdHJlYW1zJiBvcGVyYXRvcj0oUmVkaXJlY3RlZFN0cmVhbXMgY29uc3QmKSA9IGRlbGV0ZTsKKyAgICAgICAgUmVkaXJlY3RlZFN0cmVhbXMoUmVkaXJlY3RlZFN0cmVhbXMmJikgPSBkZWxldGU7CisgICAgICAgIFJlZGlyZWN0ZWRTdHJlYW1zJiBvcGVyYXRvcj0oUmVkaXJlY3RlZFN0cmVhbXMmJikgPSBkZWxldGU7CisKKyAgICAgICAgUmVkaXJlY3RlZFN0cmVhbXMoc3RkOjpzdHJpbmcmIHJlZGlyZWN0ZWRDb3V0LCBzdGQ6OnN0cmluZyYgcmVkaXJlY3RlZENlcnIpOworICAgICAgICB+UmVkaXJlY3RlZFN0cmVhbXMoKTsKKyAgICBwcml2YXRlOgorICAgICAgICBzdGQ6OnN0cmluZyYgbV9yZWRpcmVjdGVkQ291dDsKKyAgICAgICAgc3RkOjpzdHJpbmcmIG1fcmVkaXJlY3RlZENlcnI7CisgICAgICAgIFJlZGlyZWN0ZWRTdGRPdXQgbV9yZWRpcmVjdGVkU3RkT3V0OworICAgICAgICBSZWRpcmVjdGVkU3RkRXJyIG1fcmVkaXJlY3RlZFN0ZEVycjsKKyAgICB9OworCisjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfTkVXX0NBUFRVUkUpCisKKyAgICAvLyBXaW5kb3dzJ3MgaW1wbGVtZW50YXRpb24gb2Ygc3RkOjp0bXBmaWxlIGlzIHRlcnJpYmxlIChpdCB0cmllcworICAgIC8vIHRvIGNyZWF0ZSBhIGZpbGUgaW5zaWRlIHN5c3RlbSBmb2xkZXIsIHRodXMgcmVxdWlyaW5nIGVsZXZhdGVkCisgICAgLy8gcHJpdmlsZWdlcyBmb3IgdGhlIGJpbmFyeSksIHNvIHdlIGhhdmUgdG8gdXNlIHRtcG5hbShfcykgYW5kCisgICAgLy8gY3JlYXRlIHRoZSBmaWxlIG91cnNlbHZlcyB0aGVyZS4KKyAgICBjbGFzcyBUZW1wRmlsZSB7CisgICAgcHVibGljOgorICAgICAgICBUZW1wRmlsZShUZW1wRmlsZSBjb25zdCYpID0gZGVsZXRlOworICAgICAgICBUZW1wRmlsZSYgb3BlcmF0b3I9KFRlbXBGaWxlIGNvbnN0JikgPSBkZWxldGU7CisgICAgICAgIFRlbXBGaWxlKFRlbXBGaWxlJiYpID0gZGVsZXRlOworICAgICAgICBUZW1wRmlsZSYgb3BlcmF0b3I9KFRlbXBGaWxlJiYpID0gZGVsZXRlOworCisgICAgICAgIFRlbXBGaWxlKCk7CisgICAgICAgIH5UZW1wRmlsZSgpOworCisgICAgICAgIHN0ZDo6RklMRSogZ2V0RmlsZSgpOworICAgICAgICBzdGQ6OnN0cmluZyBnZXRDb250ZW50cygpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RkOjpGSUxFKiBtX2ZpbGUgPSBudWxscHRyOworICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICAgICBjaGFyIG1fYnVmZmVyW0xfdG1wbmFtXSA9IHsgMCB9OworICAgICNlbmRpZgorICAgIH07CisKKworICAgIGNsYXNzIE91dHB1dFJlZGlyZWN0IHsKKyAgICBwdWJsaWM6CisgICAgICAgIE91dHB1dFJlZGlyZWN0KE91dHB1dFJlZGlyZWN0IGNvbnN0JikgPSBkZWxldGU7CisgICAgICAgIE91dHB1dFJlZGlyZWN0JiBvcGVyYXRvcj0oT3V0cHV0UmVkaXJlY3QgY29uc3QmKSA9IGRlbGV0ZTsKKyAgICAgICAgT3V0cHV0UmVkaXJlY3QoT3V0cHV0UmVkaXJlY3QmJikgPSBkZWxldGU7CisgICAgICAgIE91dHB1dFJlZGlyZWN0JiBvcGVyYXRvcj0oT3V0cHV0UmVkaXJlY3QmJikgPSBkZWxldGU7CisKKworICAgICAgICBPdXRwdXRSZWRpcmVjdChzdGQ6OnN0cmluZyYgc3Rkb3V0X2Rlc3QsIHN0ZDo6c3RyaW5nJiBzdGRlcnJfZGVzdCk7CisgICAgICAgIH5PdXRwdXRSZWRpcmVjdCgpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgaW50IG1fb3JpZ2luYWxTdGRvdXQgPSAtMTsKKyAgICAgICAgaW50IG1fb3JpZ2luYWxTdGRlcnIgPSAtMTsKKyAgICAgICAgVGVtcEZpbGUgbV9zdGRvdXRGaWxlOworICAgICAgICBUZW1wRmlsZSBtX3N0ZGVyckZpbGU7CisgICAgICAgIHN0ZDo6c3RyaW5nJiBtX3N0ZG91dERlc3Q7CisgICAgICAgIHN0ZDo6c3RyaW5nJiBtX3N0ZGVyckRlc3Q7CisgICAgfTsKKworI2VuZGlmCisKK30gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAorCisjZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX09VVFBVVF9SRURJUkVDVF9ICmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3BsYXRmb3JtLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3BsYXRmb3JtLmgKaW5kZXggY2JmMTc5Mi4uZTE0Y2QzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcGxhdGZvcm0uaApAQCAtMjAsNyArMjAsNyBAQAogI2VsaWYgZGVmaW5lZChsaW51eCkgfHwgZGVmaW5lZChfX2xpbnV4KSB8fCBkZWZpbmVkKF9fbGludXhfXykKICMgIGRlZmluZSBDQVRDSF9QTEFURk9STV9MSU5VWAogCi0jZWxpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX01TQ19WRVIpCisjZWxpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19NSU5HVzMyX18pCiAjICBkZWZpbmUgQ0FUQ0hfUExBVEZPUk1fV0lORE9XUwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcG9seWZpbGxzLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcG9seWZpbGxzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGEyYzgyCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9wb2x5ZmlsbHMuY3BwCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiAgQ3JlYXRlZCBieSBNYXJ0aW4gb24gMTcvMTEvMjAxNy4KKyAqCisgKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorICovCisKKyNpbmNsdWRlICJjYXRjaF9wb2x5ZmlsbHMuaHBwIgorCisjaW5jbHVkZSA8Y21hdGg+CisKK25hbWVzcGFjZSBDYXRjaCB7CisKKyNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfUE9MWUZJTExfSVNOQU4pCisgICAgYm9vbCBpc25hbihmbG9hdCBmKSB7CisgICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKGYpOworICAgIH0KKyAgICBib29sIGlzbmFuKGRvdWJsZSBkKSB7CisgICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKGQpOworICAgIH0KKyNlbHNlCisgICAgLy8gRm9yIG5vdyB3ZSBvbmx5IHVzZSB0aGlzIGZvciBlbWJhcmNhZGVybworICAgIGJvb2wgaXNuYW4oZmxvYXQgZikgeworICAgICAgICByZXR1cm4gc3RkOjpfaXNuYW4oZik7CisgICAgfQorICAgIGJvb2wgaXNuYW4oZG91YmxlIGQpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6X2lzbmFuKGQpOworICAgIH0KKyNlbmRpZgorCit9IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcG9seWZpbGxzLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcG9seWZpbGxzLmhwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQxODllCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9wb2x5ZmlsbHMuaHBwCkBAIC0wLDAgKzEsMTUgQEAKKy8qCisgKiAgQ3JlYXRlZCBieSBNYXJ0aW4gb24gMTcvMTEvMjAxNy4KKyAqCisgKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorICovCisjaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9QT0xZRklMTFNfSFBQX0lOQ0xVREVECisjZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9QT0xZRklMTFNfSFBQX0lOQ0xVREVECisKK25hbWVzcGFjZSBDYXRjaCB7CisgICAgYm9vbCBpc25hbihmbG9hdCBmKTsKKyAgICBib29sIGlzbmFuKGRvdWJsZSBkKTsKK30KKworI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9QT0xZRklMTFNfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3ByZXByb2Nlc3Nvci5ocHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3ByZXByb2Nlc3Nvci5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmNDFlNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcHJlcHJvY2Vzc29yLmhwcApAQCAtMCwwICsxLDg5IEBACisvKgorICogIENyZWF0ZWQgYnkgSm96ZWYgb24gMTIvMTEvMjAxOC4KKyAqICBDb3B5cmlnaHQgMjAxNyBUd28gQmx1ZSBDdWJlcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAqLworCisjaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9QUkVQUk9DRVNTT1JfSFBQX0lOQ0xVREVECisjZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9QUkVQUk9DRVNTT1JfSFBQX0lOQ0xVREVECisKKyNkZWZpbmUgQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMMCguLi4pIF9fVkFfQVJHU19fCisjZGVmaW5lIENBVENIX1JFQ1VSU0lPTl9MRVZFTDEoLi4uKSBDQVRDSF9SRUNVUlNJT05fTEVWRUwwKENBVENIX1JFQ1VSU0lPTl9MRVZFTDAoQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMMChfX1ZBX0FSR1NfXykpKQorI2RlZmluZSBDQVRDSF9SRUNVUlNJT05fTEVWRUwyKC4uLikgQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMMShDQVRDSF9SRUNVUlNJT05fTEVWRUwxKENBVENIX1JFQ1VSU0lPTl9MRVZFTDEoX19WQV9BUkdTX18pKSkKKyNkZWZpbmUgQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMMyguLi4pIENBVENIX1JFQ1VSU0lPTl9MRVZFTDIoQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMMihDQVRDSF9SRUNVUlNJT05fTEVWRUwyKF9fVkFfQVJHU19fKSkpCisjZGVmaW5lIENBVENIX1JFQ1VSU0lPTl9MRVZFTDQoLi4uKSBDQVRDSF9SRUNVUlNJT05fTEVWRUwzKENBVENIX1JFQ1VSU0lPTl9MRVZFTDMoQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMMyhfX1ZBX0FSR1NfXykpKQorI2RlZmluZSBDQVRDSF9SRUNVUlNJT05fTEVWRUw1KC4uLikgQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMNChDQVRDSF9SRUNVUlNJT05fTEVWRUw0KENBVENIX1JFQ1VSU0lPTl9MRVZFTDQoX19WQV9BUkdTX18pKSkKKworI2lmZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoLi4uKSBfX1ZBX0FSR1NfXworLy8gTVNWQyBuZWVkcyBtb3JlIGV2YWx1YXRpb25zCisjZGVmaW5lIENBVENIX1JFQ1VSU0lPTl9MRVZFTDYoLi4uKSBDQVRDSF9SRUNVUlNJT05fTEVWRUw1KENBVENIX1JFQ1VSU0lPTl9MRVZFTDUoQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMNShfX1ZBX0FSR1NfXykpKQorI2RlZmluZSBDQVRDSF9SRUNVUlNFKC4uLikgIENBVENIX1JFQ1VSU0lPTl9MRVZFTDYoQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMNihfX1ZBX0FSR1NfXykpCisjZWxzZQorI2RlZmluZSBDQVRDSF9SRUNVUlNFKC4uLikgIENBVENIX1JFQ1VSU0lPTl9MRVZFTDUoX19WQV9BUkdTX18pCisjZW5kaWYKKworI2RlZmluZSBDQVRDSF9SRUNfRU5EKC4uLikKKyNkZWZpbmUgQ0FUQ0hfUkVDX09VVAorCisjZGVmaW5lIENBVENIX0VNUFRZKCkKKyNkZWZpbmUgQ0FUQ0hfREVGRVIoaWQpIGlkIENBVENIX0VNUFRZKCkKKworI2RlZmluZSBDQVRDSF9SRUNfR0VUX0VORDIoKSAwLCBDQVRDSF9SRUNfRU5ECisjZGVmaW5lIENBVENIX1JFQ19HRVRfRU5EMSguLi4pIENBVENIX1JFQ19HRVRfRU5EMgorI2RlZmluZSBDQVRDSF9SRUNfR0VUX0VORCguLi4pIENBVENIX1JFQ19HRVRfRU5EMQorI2RlZmluZSBDQVRDSF9SRUNfTkVYVDAodGVzdCwgbmV4dCwgLi4uKSBuZXh0IENBVENIX1JFQ19PVVQKKyNkZWZpbmUgQ0FUQ0hfUkVDX05FWFQxKHRlc3QsIG5leHQpIENBVENIX0RFRkVSICggQ0FUQ0hfUkVDX05FWFQwICkgKCB0ZXN0LCBuZXh0LCAwKQorI2RlZmluZSBDQVRDSF9SRUNfTkVYVCh0ZXN0LCBuZXh0KSAgQ0FUQ0hfUkVDX05FWFQxKENBVENIX1JFQ19HRVRfRU5EIHRlc3QsIG5leHQpCisKKyNkZWZpbmUgQ0FUQ0hfUkVDX0xJU1QwKGYsIHgsIHBlZWssIC4uLikgLCBmKHgpIENBVENIX0RFRkVSICggQ0FUQ0hfUkVDX05FWFQocGVlaywgQ0FUQ0hfUkVDX0xJU1QxKSApICggZiwgcGVlaywgX19WQV9BUkdTX18gKQorI2RlZmluZSBDQVRDSF9SRUNfTElTVDEoZiwgeCwgcGVlaywgLi4uKSAsIGYoeCkgQ0FUQ0hfREVGRVIgKCBDQVRDSF9SRUNfTkVYVChwZWVrLCBDQVRDSF9SRUNfTElTVDApICkgKCBmLCBwZWVrLCBfX1ZBX0FSR1NfXyApCisjZGVmaW5lIENBVENIX1JFQ19MSVNUMihmLCB4LCBwZWVrLCAuLi4pICAgZih4KSBDQVRDSF9ERUZFUiAoIENBVENIX1JFQ19ORVhUKHBlZWssIENBVENIX1JFQ19MSVNUMSkgKSAoIGYsIHBlZWssIF9fVkFfQVJHU19fICkKKworI2RlZmluZSBDQVRDSF9SRUNfTElTVDBfVUQoZiwgdXNlcmRhdGEsIHgsIHBlZWssIC4uLikgLCBmKHVzZXJkYXRhLCB4KSBDQVRDSF9ERUZFUiAoIENBVENIX1JFQ19ORVhUKHBlZWssIENBVENIX1JFQ19MSVNUMV9VRCkgKSAoIGYsIHVzZXJkYXRhLCBwZWVrLCBfX1ZBX0FSR1NfXyApCisjZGVmaW5lIENBVENIX1JFQ19MSVNUMV9VRChmLCB1c2VyZGF0YSwgeCwgcGVlaywgLi4uKSAsIGYodXNlcmRhdGEsIHgpIENBVENIX0RFRkVSICggQ0FUQ0hfUkVDX05FWFQocGVlaywgQ0FUQ0hfUkVDX0xJU1QwX1VEKSApICggZiwgdXNlcmRhdGEsIHBlZWssIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgQ0FUQ0hfUkVDX0xJU1QyX1VEKGYsIHVzZXJkYXRhLCB4LCBwZWVrLCAuLi4pICAgZih1c2VyZGF0YSwgeCkgQ0FUQ0hfREVGRVIgKCBDQVRDSF9SRUNfTkVYVChwZWVrLCBDQVRDSF9SRUNfTElTVDFfVUQpICkgKCBmLCB1c2VyZGF0YSwgcGVlaywgX19WQV9BUkdTX18gKQorCisvLyBBcHBsaWVzIHRoZSBmdW5jdGlvbiBtYWNybyBgZmAgdG8gZWFjaCBvZiB0aGUgcmVtYWluaW5nIHBhcmFtZXRlcnMsIGluc2VydHMgY29tbWFzIGJldHdlZW4gdGhlIHJlc3VsdHMsCisvLyBhbmQgcGFzc2VzIHVzZXJkYXRhIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIgdG8gZWFjaCBpbnZvY2F0aW9uLAorLy8gZS5nLiBDQVRDSF9SRUNfTElTVF9VRChmLCB4LCBhLCBiLCBjKSBldmFsdWF0ZXMgdG8gZih4LCBhKSwgZih4LCBiKSwgZih4LCBjKQorI2RlZmluZSBDQVRDSF9SRUNfTElTVF9VRChmLCB1c2VyZGF0YSwgLi4uKSBDQVRDSF9SRUNVUlNFKENBVENIX1JFQ19MSVNUMl9VRChmLCB1c2VyZGF0YSwgX19WQV9BUkdTX18sICgpKCkoKSwgKCkoKSgpLCAoKSgpKCksIDApKQorCisjZGVmaW5lIENBVENIX1JFQ19MSVNUKGYsIC4uLikgQ0FUQ0hfUkVDVVJTRShDQVRDSF9SRUNfTElTVDIoZiwgX19WQV9BUkdTX18sICgpKCkoKSwgKCkoKSgpLCAoKSgpKCksIDApKQorCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX0VYUEFORDEocGFyYW0pIElOVEVSTkFMX0NBVENIX0VYUEFORDIocGFyYW0pCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX0VYUEFORDIoLi4uKSBJTlRFUk5BTF9DQVRDSF9OTyMjIF9fVkFfQVJHU19fCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX0RFRiguLi4pIElOVEVSTkFMX0NBVENIX0RFRiBfX1ZBX0FSR1NfXworI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9OT0lOVEVSTkFMX0NBVENIX0RFRgorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9TVFJJTkdJWkUoLi4uKSBJTlRFUk5BTF9DQVRDSF9TVFJJTkdJWkUyKF9fVkFfQVJHU19fKQorI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFMiguLi4pICNfX1ZBX0FSR1NfXworI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9TVFJJTkdJWkVfV0lUSE9VVF9QQVJFTlMocGFyYW0pIElOVEVSTkFMX0NBVENIX1NUUklOR0laRShJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHBhcmFtKSkKKyNlbHNlCisvLyBNU1ZDIGlzIGFkZGluZyBleHRyYSBzcGFjZSBhbmQgbmVlZHMgYW5vdGhlciBpbmRpcmVjdGlvbiB0byBleHBhbmQgSU5URVJOQUxfQ0FUQ0hfTk9JTlRFUk5BTF9DQVRDSF9ERUYKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFMiguLi4pIElOVEVSTkFMX0NBVENIX1NUUklOR0laRTMoX19WQV9BUkdTX18pCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX1NUUklOR0laRTMoLi4uKSAjX19WQV9BUkdTX18KKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFX1dJVEhPVVRfUEFSRU5TKHBhcmFtKSAoSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMocGFyYW0pKSArIDEpCisjZW5kaWYKKworI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKC4uLikgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EMShJTlRFUk5BTF9DQVRDSF9ERUYgX19WQV9BUkdTX18pCisKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUyKE5hbWUsIC4uLikgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUzKE5hbWUsIF9fVkFfQVJHU19fKQorI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUzKE5hbWUsLi4uKSBOYW1lICIgLSAiICNfX1ZBX0FSR1NfXworI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRShOYW1lLC4uLikgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUyKE5hbWUsIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoX19WQV9BUkdTX18pKQorI2Vsc2UKKy8vIE1TVkMgaXMgYWRkaW5nIGV4dHJhIHNwYWNlIGFuZCBuZWVkcyBtb3JlIGNhbGxzIHRvIHByb3Blcmx5IHJlbW92ZSAoKQorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRTMoTmFtZSwuLi4pIE5hbWUgIiAtIiAjX19WQV9BUkdTX18KKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUxKE5hbWUsIC4uLikgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUyKE5hbWUsIF9fVkFfQVJHU19fKQorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRShOYW1lLCAuLi4pIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1VOSVFVRV9OQU1FMShOYW1lLCBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfX1ZBX0FSR1NfXykpKQorI2VuZGlmCisKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1QodHlwZXMpIENhdGNoOjpUeXBlTGlzdDxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHR5cGVzKT4KKworI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9NQUtFX1RZUEVfTElTVFNfRlJPTV9UWVBFUyh0eXBlcylcCisgICAgQ0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1QsSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyh0eXBlcykpCisKKyNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfUFJFUFJPQ0VTU09SX0hQUF9JTkNMVURFRApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmNwcAppbmRleCA0MTJmYWViLi5lYzhhNWViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmNwcApAQCAtOSwyMyArOSwyMSBAQAogI2luY2x1ZGUgImNhdGNoX2NvbnRleHQuaCIKICNpbmNsdWRlICJjYXRjaF9pbnRlcmZhY2VzX2NvbmZpZy5oIgogCi0jaW5jbHVkZSA8Y3N0ZGxpYj4KLQogbmFtZXNwYWNlIENhdGNoIHsKIAotICAgIHZvaWQgc2VlZFJuZyggSUNvbmZpZyBjb25zdCYgY29uZmlnICkgewotICAgICAgICBpZiggY29uZmlnLnJuZ1NlZWQoKSAhPSAwICkKLSAgICAgICAgICAgIHN0ZDo6c3JhbmQoIGNvbmZpZy5ybmdTZWVkKCkgKTsKKyAgICBzdGQ6Om10MTk5MzcmIHJuZygpIHsKKyAgICAgICAgc3RhdGljIHN0ZDo6bXQxOTkzNyBzX3JuZzsKKyAgICAgICAgcmV0dXJuIHNfcm5nOwogICAgIH0KKworICAgIHZvaWQgc2VlZFJuZyggSUNvbmZpZyBjb25zdCYgY29uZmlnICkgeworICAgICAgICBpZiggY29uZmlnLnJuZ1NlZWQoKSAhPSAwICkgeworICAgICAgICAgICAgc3RkOjpzcmFuZCggY29uZmlnLnJuZ1NlZWQoKSApOworICAgICAgICAgICAgcm5nKCkuc2VlZCggY29uZmlnLnJuZ1NlZWQoKSApOworICAgICAgICB9CisgICAgfQorCiAgICAgdW5zaWduZWQgaW50IHJuZ1NlZWQoKSB7CiAgICAgICAgIHJldHVybiBnZXRDdXJyZW50Q29udGV4dCgpLmdldENvbmZpZygpLT5ybmdTZWVkKCk7CiAgICAgfQotCi0gICAgUmFuZG9tTnVtYmVyR2VuZXJhdG9yOjpyZXN1bHRfdHlwZSBSYW5kb21OdW1iZXJHZW5lcmF0b3I6Om9wZXJhdG9yKCkoIHJlc3VsdF90eXBlIG4gKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBzdGQ6OnJhbmQoKSAlIG47Ci0gICAgfQotICAgIFJhbmRvbU51bWJlckdlbmVyYXRvcjo6cmVzdWx0X3R5cGUgUmFuZG9tTnVtYmVyR2VuZXJhdG9yOjpvcGVyYXRvcigpKCkgY29uc3QgewotICAgICAgICByZXR1cm4gc3RkOjpyYW5kKCkgJSAobWF4KSgpOwotICAgIH0KLQogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5oCmluZGV4IGQxOGNmZmQuLjgxN2I3ODQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmgKQEAgLTgsMzEgKzgsMTYgQEAKICNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX1JBTkRPTV9OVU1CRVJfR0VORVJBVE9SX0hfSU5DTFVERUQKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxyYW5kb20+CiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKICAgICBzdHJ1Y3QgSUNvbmZpZzsKIAorICAgIHN0ZDo6bXQxOTkzNyYgcm5nKCk7CiAgICAgdm9pZCBzZWVkUm5nKCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKTsKLQogICAgIHVuc2lnbmVkIGludCBybmdTZWVkKCk7CiAKLSAgICBzdHJ1Y3QgUmFuZG9tTnVtYmVyR2VuZXJhdG9yIHsKLSAgICAgICAgdXNpbmcgcmVzdWx0X3R5cGUgPSB1bnNpZ25lZCBpbnQ7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciByZXN1bHRfdHlwZSAobWluKSgpIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciByZXN1bHRfdHlwZSAobWF4KSgpIHsgcmV0dXJuIDEwMDAwMDA7IH0KLQotICAgICAgICByZXN1bHRfdHlwZSBvcGVyYXRvcigpKCByZXN1bHRfdHlwZSBuICkgY29uc3Q7Ci0gICAgICAgIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoKSBjb25zdDsKLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotICAgICAgICBzdGF0aWMgdm9pZCBzaHVmZmxlKCBWJiB2ZWN0b3IgKSB7Ci0gICAgICAgICAgICBSYW5kb21OdW1iZXJHZW5lcmF0b3Igcm5nOwotICAgICAgICAgICAgc3RkOjpzaHVmZmxlKCB2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLmVuZCgpLCBybmcgKTsKLSAgICAgICAgfQotICAgIH07Ci0KIH0KIAogI2VuZGlmIC8vIFRXT0JMVUVDVUJFU19DQVRDSF9SQU5ET01fTlVNQkVSX0dFTkVSQVRPUl9IX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JlZ2lzdHJ5X2h1Yi5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JlZ2lzdHJ5X2h1Yi5jcHAKaW5kZXggZDk4NzA4Yy4uYTUwNjIzOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9yZWdpc3RyeV9odWIuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcmVnaXN0cnlfaHViLmNwcApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgImNhdGNoX2V4Y2VwdGlvbl90cmFuc2xhdG9yX3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiY2F0Y2hfdGFnX2FsaWFzX3JlZ2lzdHJ5LmgiCiAjaW5jbHVkZSAiY2F0Y2hfc3RhcnR1cF9leGNlcHRpb25fcmVnaXN0cnkuaCIKKyNpbmNsdWRlICJjYXRjaF9zaW5nbGV0b25zLmhwcCIKIAogbmFtZXNwYWNlIENhdGNoIHsKIApAQCAtMzAsNyArMzEsNyBAQAogICAgICAgICAgICAgSVRlc3RDYXNlUmVnaXN0cnkgY29uc3QmIGdldFRlc3RDYXNlUmVnaXN0cnkoKSBjb25zdCBvdmVycmlkZSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIG1fdGVzdENhc2VSZWdpc3RyeTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIElFeGNlcHRpb25UcmFuc2xhdG9yUmVnaXN0cnkmIGdldEV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeSgpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIElFeGNlcHRpb25UcmFuc2xhdG9yUmVnaXN0cnkgY29uc3QmIGdldEV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeSgpIGNvbnN0IG92ZXJyaWRlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbV9leGNlcHRpb25UcmFuc2xhdG9yUmVnaXN0cnk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBJVGFnQWxpYXNSZWdpc3RyeSBjb25zdCYgZ2V0VGFnQWxpYXNSZWdpc3RyeSgpIGNvbnN0IG92ZXJyaWRlIHsKQEAgLTY3LDI3ICs2OCwxOSBAQAogICAgICAgICAgICAgVGFnQWxpYXNSZWdpc3RyeSBtX3RhZ0FsaWFzUmVnaXN0cnk7CiAgICAgICAgICAgICBTdGFydHVwRXhjZXB0aW9uUmVnaXN0cnkgbV9leGNlcHRpb25SZWdpc3RyeTsKICAgICAgICAgfTsKLQotICAgICAgICAvLyBTaW5nbGUsIGdsb2JhbCwgaW5zdGFuY2UKLSAgICAgICAgUmVnaXN0cnlIdWIqJiBnZXRUaGVSZWdpc3RyeUh1YigpIHsKLSAgICAgICAgICAgIHN0YXRpYyBSZWdpc3RyeUh1YiogdGhlUmVnaXN0cnlIdWIgPSBudWxscHRyOwotICAgICAgICAgICAgaWYoICF0aGVSZWdpc3RyeUh1YiApCi0gICAgICAgICAgICAgICAgdGhlUmVnaXN0cnlIdWIgPSBuZXcgUmVnaXN0cnlIdWIoKTsKLSAgICAgICAgICAgIHJldHVybiB0aGVSZWdpc3RyeUh1YjsKLSAgICAgICAgfQogICAgIH0KIAotICAgIElSZWdpc3RyeUh1YiYgZ2V0UmVnaXN0cnlIdWIoKSB7Ci0gICAgICAgIHJldHVybiAqZ2V0VGhlUmVnaXN0cnlIdWIoKTsKKyAgICB1c2luZyBSZWdpc3RyeUh1YlNpbmdsZXRvbiA9IFNpbmdsZXRvbjxSZWdpc3RyeUh1YiwgSVJlZ2lzdHJ5SHViLCBJTXV0YWJsZVJlZ2lzdHJ5SHViPjsKKworICAgIElSZWdpc3RyeUh1YiBjb25zdCYgZ2V0UmVnaXN0cnlIdWIoKSB7CisgICAgICAgIHJldHVybiBSZWdpc3RyeUh1YlNpbmdsZXRvbjo6Z2V0KCk7CiAgICAgfQogICAgIElNdXRhYmxlUmVnaXN0cnlIdWImIGdldE11dGFibGVSZWdpc3RyeUh1YigpIHsKLSAgICAgICAgcmV0dXJuICpnZXRUaGVSZWdpc3RyeUh1YigpOworICAgICAgICByZXR1cm4gUmVnaXN0cnlIdWJTaW5nbGV0b246OmdldE11dGFibGUoKTsKICAgICB9CiAgICAgdm9pZCBjbGVhblVwKCkgewotICAgICAgICBkZWxldGUgZ2V0VGhlUmVnaXN0cnlIdWIoKTsKLSAgICAgICAgZ2V0VGhlUmVnaXN0cnlIdWIoKSA9IG51bGxwdHI7CisgICAgICAgIGNsZWFudXBTaW5nbGV0b25zKCk7CiAgICAgICAgIGNsZWFuVXBDb250ZXh0KCk7Ci0gICAgICAgIFJldXNhYmxlU3RyaW5nU3RyZWFtOjpjbGVhbnVwKCk7CiAgICAgfQogICAgIHN0ZDo6c3RyaW5nIHRyYW5zbGF0ZUFjdGl2ZUV4Y2VwdGlvbigpIHsKICAgICAgICAgcmV0dXJuIGdldFJlZ2lzdHJ5SHViKCkuZ2V0RXhjZXB0aW9uVHJhbnNsYXRvclJlZ2lzdHJ5KCkudHJhbnNsYXRlQWN0aXZlRXhjZXB0aW9uKCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3J1bl9jb250ZXh0LmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcnVuX2NvbnRleHQuY3BwCmluZGV4IDgzZGU1MzkuLmJjM2E1MTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcnVuX2NvbnRleHQuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcnVuX2NvbnRleHQuY3BwCkBAIC0xLDggKzEsMTAgQEAKICNpbmNsdWRlICJjYXRjaF9ydW5fY29udGV4dC5oIgorI2luY2x1ZGUgImNhdGNoX2NvbXBpbGVyX2NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgImNhdGNoX2NvbnRleHQuaCIKICNpbmNsdWRlICJjYXRjaF9lbmZvcmNlLmgiCiAjaW5jbHVkZSAiY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuaCIKICNpbmNsdWRlICJjYXRjaF9zdHJlYW0uaCIKKyNpbmNsdWRlICJjYXRjaF9vdXRwdXRfcmVkaXJlY3QuaCIKIAogI2luY2x1ZGUgPGNhc3NlcnQ+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMTAsNTUgKzEyLDY4IEBACiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKLSAgICBjbGFzcyBSZWRpcmVjdGVkU3RyZWFtIHsKLSAgICAgICAgc3RkOjpvc3RyZWFtJiBtX29yaWdpbmFsU3RyZWFtOwotICAgICAgICBzdGQ6Om9zdHJlYW0mIG1fcmVkaXJlY3Rpb25TdHJlYW07Ci0gICAgICAgIHN0ZDo6c3RyZWFtYnVmKiBtX3ByZXZCdWY7CisgICAgbmFtZXNwYWNlIEdlbmVyYXRvcnMgeworICAgICAgICBzdHJ1Y3QgR2VuZXJhdG9yVHJhY2tlciA6IFRlc3RDYXNlVHJhY2tpbmc6OlRyYWNrZXJCYXNlLCBJR2VuZXJhdG9yVHJhY2tlciB7CisgICAgICAgICAgICBHZW5lcmF0b3JCYXNlUHRyIG1fZ2VuZXJhdG9yOwogCi0gICAgcHVibGljOgotICAgICAgICBSZWRpcmVjdGVkU3RyZWFtKCBzdGQ6Om9zdHJlYW0mIG9yaWdpbmFsU3RyZWFtLCBzdGQ6Om9zdHJlYW0mIHJlZGlyZWN0aW9uU3RyZWFtICkKLSAgICAgICAgOiAgIG1fb3JpZ2luYWxTdHJlYW0oIG9yaWdpbmFsU3RyZWFtICksCi0gICAgICAgICAgICBtX3JlZGlyZWN0aW9uU3RyZWFtKCByZWRpcmVjdGlvblN0cmVhbSApLAotICAgICAgICAgICAgbV9wcmV2QnVmKCBtX29yaWdpbmFsU3RyZWFtLnJkYnVmKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX29yaWdpbmFsU3RyZWFtLnJkYnVmKCBtX3JlZGlyZWN0aW9uU3RyZWFtLnJkYnVmKCkgKTsKLSAgICAgICAgfQotICAgICAgICB+UmVkaXJlY3RlZFN0cmVhbSgpIHsKLSAgICAgICAgICAgIG1fb3JpZ2luYWxTdHJlYW0ucmRidWYoIG1fcHJldkJ1ZiApOwotICAgICAgICB9Ci0gICAgfTsKKyAgICAgICAgICAgIEdlbmVyYXRvclRyYWNrZXIoIFRlc3RDYXNlVHJhY2tpbmc6Ok5hbWVBbmRMb2NhdGlvbiBjb25zdCYgbmFtZUFuZExvY2F0aW9uLCBUcmFja2VyQ29udGV4dCYgY3R4LCBJVHJhY2tlciogcGFyZW50ICkKKyAgICAgICAgICAgIDogICBUcmFja2VyQmFzZSggbmFtZUFuZExvY2F0aW9uLCBjdHgsIHBhcmVudCApCisgICAgICAgICAgICB7fQorICAgICAgICAgICAgfkdlbmVyYXRvclRyYWNrZXIoKTsKIAotICAgIGNsYXNzIFJlZGlyZWN0ZWRTdGRPdXQgewotICAgICAgICBSZXVzYWJsZVN0cmluZ1N0cmVhbSBtX3JzczsKLSAgICAgICAgUmVkaXJlY3RlZFN0cmVhbSBtX2NvdXQ7Ci0gICAgcHVibGljOgotICAgICAgICBSZWRpcmVjdGVkU3RkT3V0KCkgOiBtX2NvdXQoIENhdGNoOjpjb3V0KCksIG1fcnNzLmdldCgpICkge30KLSAgICAgICAgYXV0byBzdHIoKSBjb25zdCAtPiBzdGQ6OnN0cmluZyB7IHJldHVybiBtX3Jzcy5zdHIoKTsgfQotICAgIH07CisgICAgICAgICAgICBzdGF0aWMgR2VuZXJhdG9yVHJhY2tlciYgYWNxdWlyZSggVHJhY2tlckNvbnRleHQmIGN0eCwgVGVzdENhc2VUcmFja2luZzo6TmFtZUFuZExvY2F0aW9uIGNvbnN0JiBuYW1lQW5kTG9jYXRpb24gKSB7CisgICAgICAgICAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEdlbmVyYXRvclRyYWNrZXI+IHRyYWNrZXI7CiAKLSAgICAvLyBTdGRFcnIgaGFzIHR3byBjb25zdGl0dWVudCBzdHJlYW1zIGluIEMrKywgc3RkOjpjZXJyIGFuZCBzdGQ6OmNsb2cKLSAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgbmVlZCB0byByZWRpcmVjdCAyIHN0cmVhbXMgaW50byAxIHRvIGtlZXAgcHJvcGVyCi0gICAgLy8gb3JkZXIgb2Ygd3JpdGVzCi0gICAgY2xhc3MgUmVkaXJlY3RlZFN0ZEVyciB7Ci0gICAgICAgIFJldXNhYmxlU3RyaW5nU3RyZWFtIG1fcnNzOwotICAgICAgICBSZWRpcmVjdGVkU3RyZWFtIG1fY2VycjsKLSAgICAgICAgUmVkaXJlY3RlZFN0cmVhbSBtX2Nsb2c7Ci0gICAgcHVibGljOgotICAgICAgICBSZWRpcmVjdGVkU3RkRXJyKCkKLSAgICAgICAgOiAgIG1fY2VyciggQ2F0Y2g6OmNlcnIoKSwgbV9yc3MuZ2V0KCkgKSwKLSAgICAgICAgICAgIG1fY2xvZyggQ2F0Y2g6OmNsb2coKSwgbV9yc3MuZ2V0KCkgKQotICAgICAgICB7fQotICAgICAgICBhdXRvIHN0cigpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nIHsgcmV0dXJuIG1fcnNzLnN0cigpOyB9Ci0gICAgfTsKKyAgICAgICAgICAgICAgICBJVHJhY2tlciYgY3VycmVudFRyYWNrZXIgPSBjdHguY3VycmVudFRyYWNrZXIoKTsKKyAgICAgICAgICAgICAgICBpZiggVGVzdENhc2VUcmFja2luZzo6SVRyYWNrZXJQdHIgY2hpbGRUcmFja2VyID0gY3VycmVudFRyYWNrZXIuZmluZENoaWxkKCBuYW1lQW5kTG9jYXRpb24gKSApIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCBjaGlsZFRyYWNrZXIgKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KCBjaGlsZFRyYWNrZXItPmlzR2VuZXJhdG9yVHJhY2tlcigpICk7CisgICAgICAgICAgICAgICAgICAgIHRyYWNrZXIgPSBzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8R2VuZXJhdG9yVHJhY2tlcj4oIGNoaWxkVHJhY2tlciApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdHJhY2tlciA9IHN0ZDo6bWFrZV9zaGFyZWQ8R2VuZXJhdG9yVHJhY2tlcj4oIG5hbWVBbmRMb2NhdGlvbiwgY3R4LCAmY3VycmVudFRyYWNrZXIgKTsKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudFRyYWNrZXIuYWRkQ2hpbGQoIHRyYWNrZXIgKTsKKyAgICAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgICAgICBpZiggIWN0eC5jb21wbGV0ZWRDeWNsZSgpICYmICF0cmFja2VyLT5pc0NvbXBsZXRlKCkgKSB7CisgICAgICAgICAgICAgICAgICAgIHRyYWNrZXItPm9wZW4oKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRyYWNrZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRyYWNrZXJCYXNlIGludGVyZmFjZQorICAgICAgICAgICAgYm9vbCBpc0dlbmVyYXRvclRyYWNrZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgICAgICBhdXRvIGhhc0dlbmVyYXRvcigpIGNvbnN0IC0+IGJvb2wgb3ZlcnJpZGUgeworICAgICAgICAgICAgICAgIHJldHVybiAhIW1fZ2VuZXJhdG9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBjbG9zZSgpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgICAgICBUcmFja2VyQmFzZTo6Y2xvc2UoKTsKKyAgICAgICAgICAgICAgICAvLyBHZW5lcmF0b3IgaW50ZXJmYWNlIG9ubHkgZmluZHMgb3V0IGlmIGl0IGhhcyBhbm90aGVyIGl0ZW0gb24gYXR1YWwgbW92ZQorICAgICAgICAgICAgICAgIGlmIChtX3J1blN0YXRlID09IENvbXBsZXRlZFN1Y2Nlc3NmdWxseSAmJiBtX2dlbmVyYXRvci0+bmV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ydW5TdGF0ZSA9IEV4ZWN1dGluZzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIElHZW5lcmF0b3JUcmFja2VyIGludGVyZmFjZQorICAgICAgICAgICAgYXV0byBnZXRHZW5lcmF0b3IoKSBjb25zdCAtPiBHZW5lcmF0b3JCYXNlUHRyIGNvbnN0JiBvdmVycmlkZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZ2VuZXJhdG9yOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdm9pZCBzZXRHZW5lcmF0b3IoIEdlbmVyYXRvckJhc2VQdHImJiBnZW5lcmF0b3IgKSBvdmVycmlkZSB7CisgICAgICAgICAgICAgICAgbV9nZW5lcmF0b3IgPSBzdGQ6Om1vdmUoIGdlbmVyYXRvciApOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgICAgICBHZW5lcmF0b3JUcmFja2VyOjp+R2VuZXJhdG9yVHJhY2tlcigpIHt9CisgICAgfQogCiAgICAgUnVuQ29udGV4dDo6UnVuQ29udGV4dChJQ29uZmlnUHRyIGNvbnN0JiBfY29uZmlnLCBJU3RyZWFtaW5nUmVwb3J0ZXJQdHImJiByZXBvcnRlcikKICAgICA6ICAgbV9ydW5JbmZvKF9jb25maWctPm5hbWUoKSksCiAgICAgICAgIG1fY29udGV4dChnZXRDdXJyZW50TXV0YWJsZUNvbnRleHQoKSksCiAgICAgICAgIG1fY29uZmlnKF9jb25maWcpLAogICAgICAgICBtX3JlcG9ydGVyKHN0ZDo6bW92ZShyZXBvcnRlcikpLAotICAgICAgICBtX2xhc3RBc3NlcnRpb25JbmZveyAiIiwgU291cmNlTGluZUluZm8oIiIsMCksICIiLCBSZXN1bHREaXNwb3NpdGlvbjo6Tm9ybWFsIH0sCi0gICAgICAgIG1faW5jbHVkZVN1Y2Nlc3NmdWxSZXN1bHRzKCBtX2NvbmZpZy0+aW5jbHVkZVN1Y2Nlc3NmdWxSZXN1bHRzKCkgKQorICAgICAgICBtX2xhc3RBc3NlcnRpb25JbmZveyBTdHJpbmdSZWYoKSwgU291cmNlTGluZUluZm8oIiIsMCksIFN0cmluZ1JlZigpLCBSZXN1bHREaXNwb3NpdGlvbjo6Tm9ybWFsIH0sCisgICAgICAgIG1faW5jbHVkZVN1Y2Nlc3NmdWxSZXN1bHRzKCBtX2NvbmZpZy0+aW5jbHVkZVN1Y2Nlc3NmdWxSZXN1bHRzKCkgfHwgbV9yZXBvcnRlci0+Z2V0UHJlZmVyZW5jZXMoKS5zaG91bGRSZXBvcnRBbGxBc3NlcnRpb25zICkKICAgICB7CiAgICAgICAgIG1fY29udGV4dC5zZXRSdW5uZXIodGhpcyk7CiAgICAgICAgIG1fY29udGV4dC5zZXRDb25maWcobV9jb25maWcpOwpAQCAtODQsNyArOTksNyBAQAogICAgICAgICBzdGQ6OnN0cmluZyByZWRpcmVjdGVkQ291dDsKICAgICAgICAgc3RkOjpzdHJpbmcgcmVkaXJlY3RlZENlcnI7CiAKLSAgICAgICAgVGVzdENhc2VJbmZvIHRlc3RJbmZvID0gdGVzdENhc2UuZ2V0VGVzdENhc2VJbmZvKCk7CisgICAgICAgIGF1dG8gY29uc3QmIHRlc3RJbmZvID0gdGVzdENhc2UuZ2V0VGVzdENhc2VJbmZvKCk7CiAKICAgICAgICAgbV9yZXBvcnRlci0+dGVzdENhc2VTdGFydGluZyh0ZXN0SW5mbyk7CiAKQEAgLTE0Niw2ICsxNjEsOSBAQAogICAgICAgICAvLyBhbmQgc2hvdWxkIGJlIGxldCB0byBjbGVhciB0aGVtc2VsdmVzIG91dC4KICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4obV9yZXBvcnRlci0+YXNzZXJ0aW9uRW5kZWQoQXNzZXJ0aW9uU3RhdHMocmVzdWx0LCBtX21lc3NhZ2VzLCBtX3RvdGFscykpKTsKIAorICAgICAgICBpZiAocmVzdWx0LmdldFJlc3VsdFR5cGUoKSAhPSBSZXN1bHRXYXM6Oldhcm5pbmcpCisgICAgICAgICAgICBtX21lc3NhZ2VTY29wZXMuY2xlYXIoKTsKKwogICAgICAgICAvLyBSZXNldCB3b3JraW5nIHN0YXRlCiAgICAgICAgIHJlc2V0QXNzZXJ0aW9uSW5mbygpOwogICAgICAgICBtX2xhc3RSZXN1bHQgPSByZXN1bHQ7CkBAIC0xNjksNiArMTg3LDEzIEBACiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQorICAgIGF1dG8gUnVuQ29udGV4dDo6YWNxdWlyZUdlbmVyYXRvclRyYWNrZXIoIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbyApIC0+IElHZW5lcmF0b3JUcmFja2VyJiB7CisgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBHZW5lcmF0b3JzOworICAgICAgICBHZW5lcmF0b3JUcmFja2VyJiB0cmFja2VyID0gR2VuZXJhdG9yVHJhY2tlcjo6YWNxdWlyZSggbV90cmFja2VyQ29udGV4dCwgVGVzdENhc2VUcmFja2luZzo6TmFtZUFuZExvY2F0aW9uKCAiZ2VuZXJhdG9yIiwgbGluZUluZm8gKSApOworICAgICAgICBhc3NlcnQoIHRyYWNrZXIuaXNPcGVuKCkgKTsKKyAgICAgICAgbV9sYXN0QXNzZXJ0aW9uSW5mby5saW5lSW5mbyA9IGxpbmVJbmZvOworICAgICAgICByZXR1cm4gdHJhY2tlcjsKKyAgICB9CiAKICAgICBib29sIFJ1bkNvbnRleHQ6OnRlc3RGb3JNaXNzaW5nQXNzZXJ0aW9ucyhDb3VudHMmIGFzc2VydGlvbnMpIHsKICAgICAgICAgaWYgKGFzc2VydGlvbnMudG90YWwoKSAhPSAwKQpAQCAtMTkzLDYgKzIxOCw3IEBACiAKICAgICAgICAgbV9yZXBvcnRlci0+c2VjdGlvbkVuZGVkKFNlY3Rpb25TdGF0cyhlbmRJbmZvLnNlY3Rpb25JbmZvLCBhc3NlcnRpb25zLCBlbmRJbmZvLmR1cmF0aW9uSW5TZWNvbmRzLCBtaXNzaW5nQXNzZXJ0aW9ucykpOwogICAgICAgICBtX21lc3NhZ2VzLmNsZWFyKCk7CisgICAgICAgIG1fbWVzc2FnZVNjb3Blcy5jbGVhcigpOwogICAgIH0KIAogICAgIHZvaWQgUnVuQ29udGV4dDo6c2VjdGlvbkVuZGVkRWFybHkoU2VjdGlvbkVuZEluZm8gY29uc3QgJiBlbmRJbmZvKSB7CkBAIC0yMTksNiArMjQ1LDEwIEBACiAgICAgICAgIG1fbWVzc2FnZXMuZXJhc2Uoc3RkOjpyZW1vdmUobV9tZXNzYWdlcy5iZWdpbigpLCBtX21lc3NhZ2VzLmVuZCgpLCBtZXNzYWdlKSwgbV9tZXNzYWdlcy5lbmQoKSk7CiAgICAgfQogCisgICAgdm9pZCBSdW5Db250ZXh0OjplbXBsYWNlVW5zY29wZWRNZXNzYWdlKCBNZXNzYWdlQnVpbGRlciBjb25zdCYgYnVpbGRlciApIHsKKyAgICAgICAgbV9tZXNzYWdlU2NvcGVzLmVtcGxhY2VfYmFjayggYnVpbGRlciApOworICAgIH0KKwogICAgIHN0ZDo6c3RyaW5nIFJ1bkNvbnRleHQ6OmdldEN1cnJlbnRUZXN0TmFtZSgpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIG1fYWN0aXZlVGVzdENhc2UKICAgICAgICAgICAgID8gbV9hY3RpdmVUZXN0Q2FzZS0+Z2V0VGVzdENhc2VJbmZvKCkubmFtZQpAQCAtMjQ5LDcgKzI3OSw3IEBACiAKICAgICAgICAgLy8gUmVjcmVhdGUgc2VjdGlvbiBmb3IgdGVzdCBjYXNlIChhcyB3ZSB3aWxsIGxvc2UgdGhlIG9uZSB0aGF0IHdhcyBpbiBzY29wZSkKICAgICAgICAgYXV0byBjb25zdCYgdGVzdENhc2VJbmZvID0gbV9hY3RpdmVUZXN0Q2FzZS0+Z2V0VGVzdENhc2VJbmZvKCk7Ci0gICAgICAgIFNlY3Rpb25JbmZvIHRlc3RDYXNlU2VjdGlvbih0ZXN0Q2FzZUluZm8ubGluZUluZm8sIHRlc3RDYXNlSW5mby5uYW1lLCB0ZXN0Q2FzZUluZm8uZGVzY3JpcHRpb24pOworICAgICAgICBTZWN0aW9uSW5mbyB0ZXN0Q2FzZVNlY3Rpb24odGVzdENhc2VJbmZvLmxpbmVJbmZvLCB0ZXN0Q2FzZUluZm8ubmFtZSk7CiAKICAgICAgICAgQ291bnRzIGFzc2VydGlvbnM7CiAgICAgICAgIGFzc2VydGlvbnMuZmFpbGVkID0gMTsKQEAgLTI3OSw0MSArMzA5LDQ1IEBACiAgICAgICAgIG1fbGFzdEFzc2VydGlvblBhc3NlZCA9IHRydWU7CiAgICAgICAgICsrbV90b3RhbHMuYXNzZXJ0aW9ucy5wYXNzZWQ7CiAgICAgICAgIHJlc2V0QXNzZXJ0aW9uSW5mbygpOworICAgICAgICBtX21lc3NhZ2VTY29wZXMuY2xlYXIoKTsKICAgICB9CiAKICAgICBib29sIFJ1bkNvbnRleHQ6OmFib3J0aW5nKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV90b3RhbHMuYXNzZXJ0aW9ucy5mYWlsZWQgPT0gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KG1fY29uZmlnLT5hYm9ydEFmdGVyKCkpOworICAgICAgICByZXR1cm4gbV90b3RhbHMuYXNzZXJ0aW9ucy5mYWlsZWQgPj0gc3RhdGljX2Nhc3Q8c3RkOjpzaXplX3Q+KG1fY29uZmlnLT5hYm9ydEFmdGVyKCkpOwogICAgIH0KIAogICAgIHZvaWQgUnVuQ29udGV4dDo6cnVuQ3VycmVudFRlc3Qoc3RkOjpzdHJpbmcgJiByZWRpcmVjdGVkQ291dCwgc3RkOjpzdHJpbmcgJiByZWRpcmVjdGVkQ2VycikgewogICAgICAgICBhdXRvIGNvbnN0JiB0ZXN0Q2FzZUluZm8gPSBtX2FjdGl2ZVRlc3RDYXNlLT5nZXRUZXN0Q2FzZUluZm8oKTsKLSAgICAgICAgU2VjdGlvbkluZm8gdGVzdENhc2VTZWN0aW9uKHRlc3RDYXNlSW5mby5saW5lSW5mbywgdGVzdENhc2VJbmZvLm5hbWUsIHRlc3RDYXNlSW5mby5kZXNjcmlwdGlvbik7CisgICAgICAgIFNlY3Rpb25JbmZvIHRlc3RDYXNlU2VjdGlvbih0ZXN0Q2FzZUluZm8ubGluZUluZm8sIHRlc3RDYXNlSW5mby5uYW1lKTsKICAgICAgICAgbV9yZXBvcnRlci0+c2VjdGlvblN0YXJ0aW5nKHRlc3RDYXNlU2VjdGlvbik7CiAgICAgICAgIENvdW50cyBwcmV2QXNzZXJ0aW9ucyA9IG1fdG90YWxzLmFzc2VydGlvbnM7CiAgICAgICAgIGRvdWJsZSBkdXJhdGlvbiA9IDA7CiAgICAgICAgIG1fc2hvdWxkUmVwb3J0VW5leHBlY3RlZCA9IHRydWU7Ci0gICAgICAgIG1fbGFzdEFzc2VydGlvbkluZm8gPSB7ICJURVNUX0NBU0UiLCB0ZXN0Q2FzZUluZm8ubGluZUluZm8sICIiLCBSZXN1bHREaXNwb3NpdGlvbjo6Tm9ybWFsIH07CisgICAgICAgIG1fbGFzdEFzc2VydGlvbkluZm8gPSB7ICJURVNUX0NBU0UiX3NyLCB0ZXN0Q2FzZUluZm8ubGluZUluZm8sIFN0cmluZ1JlZigpLCBSZXN1bHREaXNwb3NpdGlvbjo6Tm9ybWFsIH07CiAKICAgICAgICAgc2VlZFJuZygqbV9jb25maWcpOwogCiAgICAgICAgIFRpbWVyIHRpbWVyOwotICAgICAgICBDQVRDSF9JTlRFUk5BTF9UUlkgeworICAgICAgICBDQVRDSF9UUlkgewogICAgICAgICAgICAgaWYgKG1fcmVwb3J0ZXItPmdldFByZWZlcmVuY2VzKCkuc2hvdWxkUmVkaXJlY3RTdGRPdXQpIHsKLSAgICAgICAgICAgICAgICBSZWRpcmVjdGVkU3RkT3V0IHJlZGlyZWN0ZWRTdGRPdXQ7Ci0gICAgICAgICAgICAgICAgUmVkaXJlY3RlZFN0ZEVyciByZWRpcmVjdGVkU3RkRXJyOworI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19FWFBFUklNRU5UQUxfUkVESVJFQ1QpCisgICAgICAgICAgICAgICAgUmVkaXJlY3RlZFN0cmVhbXMgcmVkaXJlY3RlZFN0cmVhbXMocmVkaXJlY3RlZENvdXQsIHJlZGlyZWN0ZWRDZXJyKTsKKwogICAgICAgICAgICAgICAgIHRpbWVyLnN0YXJ0KCk7CiAgICAgICAgICAgICAgICAgaW52b2tlQWN0aXZlVGVzdENhc2UoKTsKLSAgICAgICAgICAgICAgICByZWRpcmVjdGVkQ291dCArPSByZWRpcmVjdGVkU3RkT3V0LnN0cigpOwotICAgICAgICAgICAgICAgIHJlZGlyZWN0ZWRDZXJyICs9IHJlZGlyZWN0ZWRTdGRFcnIuc3RyKCk7Ci0KKyNlbHNlCisgICAgICAgICAgICAgICAgT3V0cHV0UmVkaXJlY3QgcihyZWRpcmVjdGVkQ291dCwgcmVkaXJlY3RlZENlcnIpOworICAgICAgICAgICAgICAgIHRpbWVyLnN0YXJ0KCk7CisgICAgICAgICAgICAgICAgaW52b2tlQWN0aXZlVGVzdENhc2UoKTsKKyNlbmRpZgogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB0aW1lci5zdGFydCgpOwogICAgICAgICAgICAgICAgIGludm9rZUFjdGl2ZVRlc3RDYXNlKCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBkdXJhdGlvbiA9IHRpbWVyLmdldEVsYXBzZWRTZWNvbmRzKCk7Ci0gICAgICAgIH0gQ0FUQ0hfSU5URVJOQUxfQ0FUQ0hfVU5OQU1FRCAoVGVzdEZhaWx1cmVFeGNlcHRpb24mKSB7CisgICAgICAgIH0gQ0FUQ0hfQ0FUQ0hfQU5PTiAoVGVzdEZhaWx1cmVFeGNlcHRpb24mKSB7CiAgICAgICAgICAgICAvLyBUaGlzIGp1c3QgbWVhbnMgdGhlIHRlc3Qgd2FzIGFib3J0ZWQgZHVlIHRvIGZhaWx1cmUKLSAgICAgICAgfSBDQVRDSF9JTlRFUk5BTF9DQVRDSF9BTEwoKSB7CisgICAgICAgIH0gQ0FUQ0hfQ0FUQ0hfQUxMIHsKICAgICAgICAgICAgIC8vIFVuZGVyIENBVENIX0NPTkZJR19GQVNUX0NPTVBJTEUsIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucyB1bmRlciBSRVFVSVJFIGFzc2VydGlvbnMKICAgICAgICAgICAgIC8vIGFyZSByZXBvcnRlZCB3aXRob3V0IHRyYW5zbGF0aW9uIGF0IHRoZSBwb2ludCBvZiBvcmlnaW4uCiAgICAgICAgICAgICBpZiggbV9zaG91bGRSZXBvcnRVbmV4cGVjdGVkICkgewpAQCAtMzI3LDYgKzM2MSw3IEBACiAgICAgICAgIG1fdGVzdENhc2VUcmFja2VyLT5jbG9zZSgpOwogICAgICAgICBoYW5kbGVVbmZpbmlzaGVkU2VjdGlvbnMoKTsKICAgICAgICAgbV9tZXNzYWdlcy5jbGVhcigpOworICAgICAgICBtX21lc3NhZ2VTY29wZXMuY2xlYXIoKTsKIAogICAgICAgICBTZWN0aW9uU3RhdHMgdGVzdENhc2VTZWN0aW9uU3RhdHModGVzdENhc2VTZWN0aW9uLCBhc3NlcnRpb25zLCBkdXJhdGlvbiwgbWlzc2luZ0Fzc2VydGlvbnMpOwogICAgICAgICBtX3JlcG9ydGVyLT5zZWN0aW9uRW5kZWQodGVzdENhc2VTZWN0aW9uU3RhdHMpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9ydW5fY29udGV4dC5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9ydW5fY29udGV4dC5oCmluZGV4IGQwMDA3YTMuLmM1MzBhN2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfcnVuX2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3J1bl9jb250ZXh0LmgKQEAgLTgsNiArOCw3IEBACiAjaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9SVU5ORVJfSU1QTF9IUFBfSU5DTFVERUQKICNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX1JVTk5FUl9JTVBMX0hQUF9JTkNMVURFRAogCisjaW5jbHVkZSAiY2F0Y2hfaW50ZXJmYWNlc19nZW5lcmF0b3J0cmFja2VyLmgiCiAjaW5jbHVkZSAiY2F0Y2hfaW50ZXJmYWNlc19ydW5uZXIuaCIKICNpbmNsdWRlICJjYXRjaF9pbnRlcmZhY2VzX3JlcG9ydGVyLmgiCiAjaW5jbHVkZSAiY2F0Y2hfaW50ZXJmYWNlc19leGNlcHRpb24uaCIKQEAgLTc5LDEyICs4MCwxNiBAQAogICAgICAgICB2b2lkIHNlY3Rpb25FbmRlZCggU2VjdGlvbkVuZEluZm8gY29uc3QmIGVuZEluZm8gKSBvdmVycmlkZTsKICAgICAgICAgdm9pZCBzZWN0aW9uRW5kZWRFYXJseSggU2VjdGlvbkVuZEluZm8gY29uc3QmIGVuZEluZm8gKSBvdmVycmlkZTsKIAorICAgICAgICBhdXRvIGFjcXVpcmVHZW5lcmF0b3JUcmFja2VyKCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgbGluZUluZm8gKSAtPiBJR2VuZXJhdG9yVHJhY2tlciYgb3ZlcnJpZGU7CisKICAgICAgICAgdm9pZCBiZW5jaG1hcmtTdGFydGluZyggQmVuY2htYXJrSW5mbyBjb25zdCYgaW5mbyApIG92ZXJyaWRlOwogICAgICAgICB2b2lkIGJlbmNobWFya0VuZGVkKCBCZW5jaG1hcmtTdGF0cyBjb25zdCYgc3RhdHMgKSBvdmVycmlkZTsKIAogICAgICAgICB2b2lkIHB1c2hTY29wZWRNZXNzYWdlKCBNZXNzYWdlSW5mbyBjb25zdCYgbWVzc2FnZSApIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHBvcFNjb3BlZE1lc3NhZ2UoIE1lc3NhZ2VJbmZvIGNvbnN0JiBtZXNzYWdlICkgb3ZlcnJpZGU7CiAKKyAgICAgICAgdm9pZCBlbXBsYWNlVW5zY29wZWRNZXNzYWdlKCBNZXNzYWdlQnVpbGRlciBjb25zdCYgYnVpbGRlciApIG92ZXJyaWRlOworCiAgICAgICAgIHN0ZDo6c3RyaW5nIGdldEN1cnJlbnRUZXN0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgICAgIGNvbnN0IEFzc2VydGlvblJlc3VsdCogZ2V0TGFzdFJlc3VsdCgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtOTksNyArMTA0LDcgQEAKIAogICAgIHB1YmxpYzoKICAgICAgICAgLy8gIVRCRCBXZSBuZWVkIHRvIGRvIHRoaXMgYW5vdGhlciB3YXkhCi0gICAgICAgIGJvb2wgYWJvcnRpbmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBhYm9ydGluZygpIGNvbnN0IGZpbmFsOwogCiAgICAgcHJpdmF0ZToKIApAQCAtMTI1LDEzICsxMzAsMTQgQEAKICAgICAgICAgVGVzdFJ1bkluZm8gbV9ydW5JbmZvOwogICAgICAgICBJTXV0YWJsZUNvbnRleHQmIG1fY29udGV4dDsKICAgICAgICAgVGVzdENhc2UgY29uc3QqIG1fYWN0aXZlVGVzdENhc2UgPSBudWxscHRyOwotICAgICAgICBJVHJhY2tlciogbV90ZXN0Q2FzZVRyYWNrZXI7CisgICAgICAgIElUcmFja2VyKiBtX3Rlc3RDYXNlVHJhY2tlciA9IG51bGxwdHI7CiAgICAgICAgIE9wdGlvbjxBc3NlcnRpb25SZXN1bHQ+IG1fbGFzdFJlc3VsdDsKIAogICAgICAgICBJQ29uZmlnUHRyIG1fY29uZmlnOwogICAgICAgICBUb3RhbHMgbV90b3RhbHM7CiAgICAgICAgIElTdHJlYW1pbmdSZXBvcnRlclB0ciBtX3JlcG9ydGVyOwogICAgICAgICBzdGQ6OnZlY3RvcjxNZXNzYWdlSW5mbz4gbV9tZXNzYWdlczsKKyAgICAgICAgc3RkOjp2ZWN0b3I8U2NvcGVkTWVzc2FnZT4gbV9tZXNzYWdlU2NvcGVzOyAvKiBLZWVwcyBvd25lcnMgb2Ygc28tY2FsbGVkIHVuc2NvcGVkIG1lc3NhZ2VzLiAqLwogICAgICAgICBBc3NlcnRpb25JbmZvIG1fbGFzdEFzc2VydGlvbkluZm87CiAgICAgICAgIHN0ZDo6dmVjdG9yPFNlY3Rpb25FbmRJbmZvPiBtX3VuZmluaXNoZWRTZWN0aW9uczsKICAgICAgICAgc3RkOjp2ZWN0b3I8SVRyYWNrZXIqPiBtX2FjdGl2ZVNlY3Rpb25zOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zZWN0aW9uLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbi5jcHAKaW5kZXggNzJhNTdkNS4uMDY0NmQzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zZWN0aW9uLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3NlY3Rpb24uY3BwCkBAIC0yMSw3ICsyMSw3IEBACiAKICAgICBTZWN0aW9uOjp+U2VjdGlvbigpIHsKICAgICAgICAgaWYoIG1fc2VjdGlvbkluY2x1ZGVkICkgewotICAgICAgICAgICAgU2VjdGlvbkVuZEluZm8gZW5kSW5mbyggbV9pbmZvLCBtX2Fzc2VydGlvbnMsIG1fdGltZXIuZ2V0RWxhcHNlZFNlY29uZHMoKSApOworICAgICAgICAgICAgU2VjdGlvbkVuZEluZm8gZW5kSW5mb3sgbV9pbmZvLCBtX2Fzc2VydGlvbnMsIG1fdGltZXIuZ2V0RWxhcHNlZFNlY29uZHMoKSB9OwogICAgICAgICAgICAgaWYoIHVuY2F1Z2h0X2V4Y2VwdGlvbnMoKSApCiAgICAgICAgICAgICAgICAgZ2V0UmVzdWx0Q2FwdHVyZSgpLnNlY3Rpb25FbmRlZEVhcmx5KCBlbmRJbmZvICk7CiAgICAgICAgICAgICBlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3NlY3Rpb24uaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbi5oCmluZGV4IDFlNWIxYzMuLjAwYzI1NGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbi5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbi5oCkBAIC04LDYgKzgsNyBAQAogI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfU0VDVElPTl9IX0lOQ0xVREVECiAjZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9TRUNUSU9OX0hfSU5DTFVERUQKIAorI2luY2x1ZGUgImNhdGNoX2NvbXBpbGVyX2NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgImNhdGNoX3NlY3Rpb25faW5mby5oIgogI2luY2x1ZGUgImNhdGNoX3RvdGFscy5oIgogI2luY2x1ZGUgImNhdGNoX3RpbWVyLmgiCkBAIC0zNSw3ICszNiwxNCBAQAogCiB9IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKIAotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfU0VDVElPTiggLi4uICkgXAotICAgICAgICBpZiggQ2F0Y2g6OlNlY3Rpb24gY29uc3QmIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBjYXRjaF9pbnRlcm5hbF9TZWN0aW9uICkgPSBDYXRjaDo6U2VjdGlvbkluZm8oIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBfX1ZBX0FSR1NfXyApICkKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfU0VDVElPTiggLi4uICkgXAorICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUyBcCisgICAgaWYoIENhdGNoOjpTZWN0aW9uIGNvbnN0JiBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggY2F0Y2hfaW50ZXJuYWxfU2VjdGlvbiApID0gQ2F0Y2g6OlNlY3Rpb25JbmZvKCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgX19WQV9BUkdTX18gKSApIFwKKyAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUworCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggLi4uICkgXAorICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUyBcCisgICAgaWYoIENhdGNoOjpTZWN0aW9uIGNvbnN0JiBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggY2F0Y2hfaW50ZXJuYWxfU2VjdGlvbiApID0gQ2F0Y2g6OlNlY3Rpb25JbmZvKCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgKENhdGNoOjpSZXVzYWJsZVN0cmluZ1N0cmVhbSgpIDw8IF9fVkFfQVJHU19fKS5zdHIoKSApICkgXAorICAgIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTCiAKICNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfU0VDVElPTl9IX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3NlY3Rpb25faW5mby5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3NlY3Rpb25faW5mby5jcHAKaW5kZXggZTI4NDZiOC4uODk3MTRlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zZWN0aW9uX2luZm8uY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbl9pbmZvLmNwcApAQCAtMTEsMTUgKzExLDkgQEAKIAogICAgIFNlY3Rpb25JbmZvOjpTZWN0aW9uSW5mbwogICAgICAgICAoICAgU291cmNlTGluZUluZm8gY29uc3QmIF9saW5lSW5mbywKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBfbmFtZSwKLSAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBfZGVzY3JpcHRpb24gKQorICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIF9uYW1lICkKICAgICA6ICAgbmFtZSggX25hbWUgKSwKLSAgICAgICAgZGVzY3JpcHRpb24oIF9kZXNjcmlwdGlvbiApLAogICAgICAgICBsaW5lSW5mbyggX2xpbmVJbmZvICkKICAgICB7fQogCi0gICAgU2VjdGlvbkVuZEluZm86OlNlY3Rpb25FbmRJbmZvKCBTZWN0aW9uSW5mbyBjb25zdCYgX3NlY3Rpb25JbmZvLCBDb3VudHMgY29uc3QmIF9wcmV2QXNzZXJ0aW9ucywgZG91YmxlIF9kdXJhdGlvbkluU2Vjb25kcyApCi0gICAgOiBzZWN0aW9uSW5mbyggX3NlY3Rpb25JbmZvICksIHByZXZBc3NlcnRpb25zKCBfcHJldkFzc2VydGlvbnMgKSwgZHVyYXRpb25JblNlY29uZHMoIF9kdXJhdGlvbkluU2Vjb25kcyApCi0gICAge30KLQogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3NlY3Rpb25faW5mby5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zZWN0aW9uX2luZm8uaAppbmRleCA4NjY4MWJhLi45Y2Y3OTJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3NlY3Rpb25faW5mby5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbl9pbmZvLmgKQEAgLTE4LDE3ICsxOCwyMCBAQAogICAgIHN0cnVjdCBTZWN0aW9uSW5mbyB7CiAgICAgICAgIFNlY3Rpb25JbmZvCiAgICAgICAgICAgICAoICAgU291cmNlTGluZUluZm8gY29uc3QmIF9saW5lSW5mbywKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgX25hbWUgKTsKKworICAgICAgICAvLyBEZXByZWNhdGVkCisgICAgICAgIFNlY3Rpb25JbmZvCisgICAgICAgICAgICAoICAgU291cmNlTGluZUluZm8gY29uc3QmIF9saW5lSW5mbywKICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgX25hbWUsCi0gICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIF9kZXNjcmlwdGlvbiA9IHN0ZDo6c3RyaW5nKCkgKTsKKyAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgKSA6IFNlY3Rpb25JbmZvKCBfbGluZUluZm8sIF9uYW1lICkge30KIAogICAgICAgICBzdGQ6OnN0cmluZyBuYW1lOwotICAgICAgICBzdGQ6OnN0cmluZyBkZXNjcmlwdGlvbjsKKyAgICAgICAgc3RkOjpzdHJpbmcgZGVzY3JpcHRpb247IC8vICFEZXByZWNhdGVkOiB0aGlzIHdpbGwgYWx3YXlzIGJlIGVtcHR5CiAgICAgICAgIFNvdXJjZUxpbmVJbmZvIGxpbmVJbmZvOwogICAgIH07CiAKICAgICBzdHJ1Y3QgU2VjdGlvbkVuZEluZm8gewotICAgICAgICBTZWN0aW9uRW5kSW5mbyggU2VjdGlvbkluZm8gY29uc3QmIF9zZWN0aW9uSW5mbywgQ291bnRzIGNvbnN0JiBfcHJldkFzc2VydGlvbnMsIGRvdWJsZSBfZHVyYXRpb25JblNlY29uZHMgKTsKLQogICAgICAgICBTZWN0aW9uSW5mbyBzZWN0aW9uSW5mbzsKICAgICAgICAgQ291bnRzIHByZXZBc3NlcnRpb25zOwogICAgICAgICBkb3VibGUgZHVyYXRpb25JblNlY29uZHM7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Nlc3Npb24uY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zZXNzaW9uLmNwcAppbmRleCAzNGFjNTcxLi5hNTkwN2U5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Nlc3Npb24uY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2Vzc2lvbi5jcHAKQEAgLTUsMTIgKzUsMTIgQEAKICAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKICAqLwogCi0jaW5jbHVkZSAiY2F0Y2hfY29tbW9uLmgiCiAjaW5jbHVkZSAiY2F0Y2hfc2Vzc2lvbi5oIgogI2luY2x1ZGUgImNhdGNoX2NvbW1hbmRsaW5lLmgiCiAjaW5jbHVkZSAiY2F0Y2hfY29uc29sZV9jb2xvdXIuaCIKICNpbmNsdWRlICJjYXRjaF9lbmZvcmNlLmgiCiAjaW5jbHVkZSAiY2F0Y2hfbGlzdC5oIgorI2luY2x1ZGUgImNhdGNoX2NvbnRleHQuaCIKICNpbmNsdWRlICJjYXRjaF9ydW5fY29udGV4dC5oIgogI2luY2x1ZGUgImNhdGNoX3N0cmVhbS5oIgogI2luY2x1ZGUgImNhdGNoX3Rlc3Rfc3BlYy5oIgpAQCAtMTksNiArMTksOSBAQAogI2luY2x1ZGUgImNhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiY2F0Y2hfc3RhcnR1cF9leGNlcHRpb25fcmVnaXN0cnkuaCIKICNpbmNsdWRlICJjYXRjaF90ZXh0LmgiCisjaW5jbHVkZSAiY2F0Y2hfc3RyZWFtLmgiCisjaW5jbHVkZSAiY2F0Y2hfd2luZG93c19oX3Byb3h5LmgiCisjaW5jbHVkZSAiLi4vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2xpc3RlbmluZy5oIgogCiAjaW5jbHVkZSA8Y3N0ZGxpYj4KICNpbmNsdWRlIDxpb21hbmlwPgpAQCAtMzUsMzMgKzM4LDI5IEBACiAgICAgICAgICAgICByZXR1cm4gcmVwb3J0ZXI7CiAgICAgICAgIH0KIAotI2lmbmRlZiBDQVRDSF9DT05GSUdfREVGQVVMVF9SRVBPUlRFUgotI2RlZmluZSBDQVRDSF9DT05GSUdfREVGQVVMVF9SRVBPUlRFUiAiY29uc29sZSIKLSNlbmRpZgotCiAgICAgICAgIElTdHJlYW1pbmdSZXBvcnRlclB0ciBtYWtlUmVwb3J0ZXIoc3RkOjpzaGFyZWRfcHRyPENvbmZpZz4gY29uc3QmIGNvbmZpZykgewotICAgICAgICAgICAgYXV0byBjb25zdCYgcmVwb3J0ZXJOYW1lcyA9IGNvbmZpZy0+Z2V0UmVwb3J0ZXJOYW1lcygpOwotICAgICAgICAgICAgaWYgKHJlcG9ydGVyTmFtZXMuZW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVwb3J0ZXIoQ0FUQ0hfQ09ORklHX0RFRkFVTFRfUkVQT1JURVIsIGNvbmZpZyk7CisgICAgICAgICAgICBpZiAoQ2F0Y2g6OmdldFJlZ2lzdHJ5SHViKCkuZ2V0UmVwb3J0ZXJSZWdpc3RyeSgpLmdldExpc3RlbmVycygpLmVtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlUmVwb3J0ZXIoY29uZmlnLT5nZXRSZXBvcnRlck5hbWUoKSwgY29uZmlnKTsKKyAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgSVN0cmVhbWluZ1JlcG9ydGVyUHRyIHJlcG9ydGVyOwotICAgICAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBuYW1lIDogcmVwb3J0ZXJOYW1lcykKLSAgICAgICAgICAgICAgICBhZGRSZXBvcnRlcihyZXBvcnRlciwgY3JlYXRlUmVwb3J0ZXIobmFtZSwgY29uZmlnKSk7Ci0gICAgICAgICAgICByZXR1cm4gcmVwb3J0ZXI7Ci0gICAgICAgIH0KLQotI3VuZGVmIENBVENIX0NPTkZJR19ERUZBVUxUX1JFUE9SVEVSCi0KLSAgICAgICAgdm9pZCBhZGRMaXN0ZW5lcnMoSVN0cmVhbWluZ1JlcG9ydGVyUHRyJiByZXBvcnRlcnMsIElDb25maWdQdHIgY29uc3QmIGNvbmZpZykgeworICAgICAgICAgICAgLy8gT24gb2xkZXIgcGxhdGZvcm1zLCByZXR1cm5pbmcgc3RkOjp1bmlxdWVfcHRyPExpc3RlbmluZ1JlcG9ydGVyPgorICAgICAgICAgICAgLy8gd2hlbiB0aGUgcmV0dXJuIHR5cGUgaXMgc3RkOjp1bmlxdWVfcHRyPElTdHJlYW1pbmdSZXBvcnRlcj4KKyAgICAgICAgICAgIC8vIGRvZXNuJ3QgY29tcGlsZSB3aXRob3V0IGEgc3RkOjptb3ZlIGNhbGwuIEhvd2V2ZXIsIHRoaXMgY2F1c2VzCisgICAgICAgICAgICAvLyBhIHdhcm5pbmcgb24gbmV3ZXIgcGxhdGZvcm1zLiBUaHVzLCB3ZSBoYXZlIHRvIHdvcmsgYXJvdW5kCisgICAgICAgICAgICAvLyBpdCBhIGJpdCBhbmQgZG93bmNhc3QgdGhlIHBvaW50ZXIgbWFudWFsbHkuCisgICAgICAgICAgICBhdXRvIHJldCA9IHN0ZDo6dW5pcXVlX3B0cjxJU3RyZWFtaW5nUmVwb3J0ZXI+KG5ldyBMaXN0ZW5pbmdSZXBvcnRlcik7CisgICAgICAgICAgICBhdXRvJiBtdWx0aSA9IHN0YXRpY19jYXN0PExpc3RlbmluZ1JlcG9ydGVyJj4oKnJldCk7CiAgICAgICAgICAgICBhdXRvIGNvbnN0JiBsaXN0ZW5lcnMgPSBDYXRjaDo6Z2V0UmVnaXN0cnlIdWIoKS5nZXRSZXBvcnRlclJlZ2lzdHJ5KCkuZ2V0TGlzdGVuZXJzKCk7Ci0gICAgICAgICAgICBmb3IgKGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbGlzdGVuZXJzKQotICAgICAgICAgICAgICAgIGFkZFJlcG9ydGVyKHJlcG9ydGVycywgbGlzdGVuZXItPmNyZWF0ZShDYXRjaDo6UmVwb3J0ZXJDb25maWcoY29uZmlnKSkpOworICAgICAgICAgICAgZm9yIChhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IGxpc3RlbmVycykgeworICAgICAgICAgICAgICAgIG11bHRpLmFkZExpc3RlbmVyKGxpc3RlbmVyLT5jcmVhdGUoQ2F0Y2g6OlJlcG9ydGVyQ29uZmlnKGNvbmZpZykpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG11bHRpLmFkZFJlcG9ydGVyKGNyZWF0ZVJlcG9ydGVyKGNvbmZpZy0+Z2V0UmVwb3J0ZXJOYW1lKCksIGNvbmZpZykpOworICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgfQogCiAKICAgICAgICAgQ2F0Y2g6OlRvdGFscyBydW5UZXN0cyhzdGQ6OnNoYXJlZF9wdHI8Q29uZmlnPiBjb25zdCYgY29uZmlnKSB7Ci0gICAgICAgICAgICBJU3RyZWFtaW5nUmVwb3J0ZXJQdHIgcmVwb3J0ZXIgPSBtYWtlUmVwb3J0ZXIoY29uZmlnKTsKLSAgICAgICAgICAgIGFkZExpc3RlbmVycyhyZXBvcnRlciwgY29uZmlnKTsKKyAgICAgICAgICAgIGF1dG8gcmVwb3J0ZXIgPSBtYWtlUmVwb3J0ZXIoY29uZmlnKTsKIAogICAgICAgICAgICAgUnVuQ29udGV4dCBjb250ZXh0KGNvbmZpZywgc3RkOjptb3ZlKHJlcG9ydGVyKSk7CiAKQEAgLTcwLDggKzY5LDYgQEAKICAgICAgICAgICAgIGNvbnRleHQudGVzdEdyb3VwU3RhcnRpbmcoY29uZmlnLT5uYW1lKCksIDEsIDEpOwogCiAgICAgICAgICAgICBUZXN0U3BlYyB0ZXN0U3BlYyA9IGNvbmZpZy0+dGVzdFNwZWMoKTsKLSAgICAgICAgICAgIGlmICghdGVzdFNwZWMuaGFzRmlsdGVycygpKQotICAgICAgICAgICAgICAgIHRlc3RTcGVjID0gVGVzdFNwZWNQYXJzZXIoSVRhZ0FsaWFzUmVnaXN0cnk6OmdldCgpKS5wYXJzZSgiflsuXSIpLnRlc3RTcGVjKCk7IC8vIEFsbCBub3QgaGlkZGVuIHRlc3RzCiAKICAgICAgICAgICAgIGF1dG8gY29uc3QmIGFsbFRlc3RDYXNlcyA9IGdldEFsbFRlc3RDYXNlc1NvcnRlZCgqY29uZmlnKTsKICAgICAgICAgICAgIGZvciAoYXV0byBjb25zdCYgdGVzdENhc2UgOiBhbGxUZXN0Q2FzZXMpIHsKQEAgLTgxLDYgKzc4LDIwIEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQucmVwb3J0ZXIoKS5za2lwVGVzdCh0ZXN0Q2FzZSk7CiAgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChjb25maWctPndhcm5BYm91dE5vVGVzdHMoKSAmJiB0b3RhbHMudGVzdENhc2VzLnRvdGFsKCkgPT0gMCkgeworICAgICAgICAgICAgICAgIFJldXNhYmxlU3RyaW5nU3RyZWFtIHRlc3RDb25maWc7CisKKyAgICAgICAgICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGlucHV0IDogY29uZmlnLT5nZXRUZXN0c09yVGFncygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3QpIHsgdGVzdENvbmZpZyA8PCAnICc7IH0KKyAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgdGVzdENvbmZpZyA8PCBpbnB1dDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydGVyKCkubm9NYXRjaGluZ1Rlc3RDYXNlcyh0ZXN0Q29uZmlnLnN0cigpKTsKKyAgICAgICAgICAgICAgICB0b3RhbHMuZXJyb3IgPSAtMTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICAgICAgY29udGV4dC50ZXN0R3JvdXBFbmRlZChjb25maWctPm5hbWUoKSwgdG90YWxzLCAxLCAxKTsKICAgICAgICAgICAgIHJldHVybiB0b3RhbHM7CiAgICAgICAgIH0KQEAgLTExMiwyNiArMTIzLDI3IEBACiAgICAgU2Vzc2lvbjo6U2Vzc2lvbigpIHsKICAgICAgICAgc3RhdGljIGJvb2wgYWxyZWFkeUluc3RhbnRpYXRlZCA9IGZhbHNlOwogICAgICAgICBpZiggYWxyZWFkeUluc3RhbnRpYXRlZCApIHsKLSAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX1RSWSB7Ci0gICAgICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfRVJST1IoICJPbmx5IG9uZSBpbnN0YW5jZSBvZiBDYXRjaDo6U2Vzc2lvbiBjYW4gZXZlciBiZSB1c2VkIiApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfQ0FUQ0hfQUxMKCkgeyBnZXRNdXRhYmxlUmVnaXN0cnlIdWIoKS5yZWdpc3RlclN0YXJ0dXBFeGNlcHRpb24oKTsgfQorICAgICAgICAgICAgQ0FUQ0hfVFJZIHsgQ0FUQ0hfSU5URVJOQUxfRVJST1IoICJPbmx5IG9uZSBpbnN0YW5jZSBvZiBDYXRjaDo6U2Vzc2lvbiBjYW4gZXZlciBiZSB1c2VkIiApOyB9CisgICAgICAgICAgICBDQVRDSF9DQVRDSF9BTEwgeyBnZXRNdXRhYmxlUmVnaXN0cnlIdWIoKS5yZWdpc3RlclN0YXJ0dXBFeGNlcHRpb24oKTsgfQogICAgICAgICB9CiAKKyAgICAgICAgLy8gVGhlcmUgY2Fubm90IGJlIGV4Y2VwdGlvbnMgYXQgc3RhcnR1cCBpbiBuby1leGNlcHRpb24gbW9kZS4KKyNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TKQogICAgICAgICBjb25zdCBhdXRvJiBleGNlcHRpb25zID0gZ2V0UmVnaXN0cnlIdWIoKS5nZXRTdGFydHVwRXhjZXB0aW9uUmVnaXN0cnkoKS5nZXRFeGNlcHRpb25zKCk7CiAgICAgICAgIGlmICggIWV4Y2VwdGlvbnMuZW1wdHkoKSApIHsKICAgICAgICAgICAgIG1fc3RhcnR1cEV4Y2VwdGlvbnMgPSB0cnVlOwogICAgICAgICAgICAgQ29sb3VyIGNvbG91ckd1YXJkKCBDb2xvdXI6OlJlZCApOwotICAgICAgICAgICAgQ2F0Y2g6OmNlcnIoKSA8PCAiRXJyb3JzIG9jY3VyZWQgZHVyaW5nIHN0YXJ0dXAhIiA8PCAnXG4nOworICAgICAgICAgICAgQ2F0Y2g6OmNlcnIoKSA8PCAiRXJyb3JzIG9jY3VycmVkIGR1cmluZyBzdGFydHVwISIgPDwgJ1xuJzsKICAgICAgICAgICAgIC8vIGl0ZXJhdGUgb3ZlciBhbGwgZXhjZXB0aW9ucyBhbmQgbm90aWZ5IHVzZXIKICAgICAgICAgICAgIGZvciAoIGNvbnN0IGF1dG8mIGV4X3B0ciA6IGV4Y2VwdGlvbnMgKSB7Ci0gICAgICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfVFJZIHsKKyAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICAgICBzdGQ6OnJldGhyb3dfZXhjZXB0aW9uKGV4X3B0cik7Ci0gICAgICAgICAgICAgICAgfSBDQVRDSF9JTlRFUk5BTF9DQVRDSCAoIHN0ZDo6ZXhjZXB0aW9uIGNvbnN0JiwgZXggKSB7CisgICAgICAgICAgICAgICAgfSBjYXRjaCAoIHN0ZDo6ZXhjZXB0aW9uIGNvbnN0JiBleCApIHsKICAgICAgICAgICAgICAgICAgICAgQ2F0Y2g6OmNlcnIoKSA8PCBDb2x1bW4oIGV4LndoYXQoKSApLmluZGVudCgyKSA8PCAnXG4nOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgYWxyZWFkeUluc3RhbnRpYXRlZCA9IHRydWU7CiAgICAgICAgIG1fY2xpID0gbWFrZUNvbW1hbmRMaW5lUGFyc2VyKCBtX2NvbmZpZ0RhdGEgKTsKQEAgLTE1NCwxMiArMTY2LDE0IEBACiAgICAgICAgICAgICAgICAgPDwgc3RkOjpsZWZ0IDw8IHN0ZDo6c2V0dygxNikgPDwgInZlcnNpb246ICIgPDwgbGlicmFyeVZlcnNpb24oKSA8PCBzdGQ6OmVuZGw7CiAgICAgfQogCi0gICAgaW50IFNlc3Npb246OmFwcGx5Q29tbWFuZExpbmUoIGludCBhcmdjLCBjaGFyKiBhcmd2W10gKSB7CisgICAgaW50IFNlc3Npb246OmFwcGx5Q29tbWFuZExpbmUoIGludCBhcmdjLCBjaGFyIGNvbnN0ICogY29uc3QgKiBhcmd2ICkgewogICAgICAgICBpZiggbV9zdGFydHVwRXhjZXB0aW9ucyApCiAgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBhdXRvIHJlc3VsdCA9IG1fY2xpLnBhcnNlKCBjbGFyYTo6QXJncyggYXJnYywgYXJndiApICk7CiAgICAgICAgIGlmKCAhcmVzdWx0ICkgeworICAgICAgICAgICAgY29uZmlnKCk7CisgICAgICAgICAgICBnZXRDdXJyZW50TXV0YWJsZUNvbnRleHQoKS5zZXRDb25maWcobV9jb25maWcpOwogICAgICAgICAgICAgQ2F0Y2g6OmNlcnIoKQogICAgICAgICAgICAgICAgIDw8IENvbG91ciggQ29sb3VyOjpSZWQgKQogICAgICAgICAgICAgICAgIDw8ICJcbkVycm9yKHMpIGluIGlucHV0OlxuIgpAQCAtMTc3LDIyICsxOTEsOCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICB2b2lkIFNlc3Npb246OnVzZUNvbmZpZ0RhdGEoIENvbmZpZ0RhdGEgY29uc3QmIGNvbmZpZ0RhdGEgKSB7Ci0gICAgICAgIG1fY29uZmlnRGF0YSA9IGNvbmZpZ0RhdGE7Ci0gICAgICAgIG1fY29uZmlnLnJlc2V0KCk7Ci0gICAgfQotCi0gICAgaW50IFNlc3Npb246OnJ1biggaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSApIHsKLSAgICAgICAgaWYoIG1fc3RhcnR1cEV4Y2VwdGlvbnMgKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGludCByZXR1cm5Db2RlID0gYXBwbHlDb21tYW5kTGluZSggYXJnYywgYXJndiApOwotICAgICAgICBpZiggcmV0dXJuQ29kZSA9PSAwICkKLSAgICAgICAgICAgIHJldHVybkNvZGUgPSBydW4oKTsKLSAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7Ci0gICAgfQotCi0jaWYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChVTklDT0RFKQotICAgIGludCBTZXNzaW9uOjpydW4oIGludCBhcmdjLCB3Y2hhcl90KiBjb25zdCBhcmd2W10gKSB7CisjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfV0NIQVIpICYmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoVU5JQ09ERSkKKyAgICBpbnQgU2Vzc2lvbjo6YXBwbHlDb21tYW5kTGluZSggaW50IGFyZ2MsIHdjaGFyX3QgY29uc3QgKiBjb25zdCAqIGFyZ3YgKSB7CiAKICAgICAgICAgY2hhciAqKnV0ZjhBcmd2ID0gbmV3IGNoYXIgKlsgYXJnYyBdOwogCkBAIC0yMDQsNyArMjA0LDcgQEAKICAgICAgICAgICAgIFdpZGVDaGFyVG9NdWx0aUJ5dGUoIENQX1VURjgsIDAsIGFyZ3ZbaV0sIC0xLCB1dGY4QXJndltpXSwgYnVmU2l6ZSwgTlVMTCwgTlVMTCApOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHJldHVybkNvZGUgPSBydW4oIGFyZ2MsIHV0ZjhBcmd2ICk7CisgICAgICAgIGludCByZXR1cm5Db2RlID0gYXBwbHlDb21tYW5kTGluZSggYXJnYywgdXRmOEFyZ3YgKTsKIAogICAgICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBhcmdjOyArK2kgKQogICAgICAgICAgICAgZGVsZXRlIFtdIHV0ZjhBcmd2WyBpIF07CkBAIC0yMTQsNiArMjE0LDEyIEBACiAgICAgICAgIHJldHVybiByZXR1cm5Db2RlOwogICAgIH0KICNlbmRpZgorCisgICAgdm9pZCBTZXNzaW9uOjp1c2VDb25maWdEYXRhKCBDb25maWdEYXRhIGNvbnN0JiBjb25maWdEYXRhICkgeworICAgICAgICBtX2NvbmZpZ0RhdGEgPSBjb25maWdEYXRhOworICAgICAgICBtX2NvbmZpZy5yZXNldCgpOworICAgIH0KKwogICAgIGludCBTZXNzaW9uOjpydW4oKSB7CiAgICAgICAgIGlmKCAoIG1fY29uZmlnRGF0YS53YWl0Rm9yS2V5cHJlc3MgJiBXYWl0Rm9yS2V5cHJlc3M6OkJlZm9yZVN0YXJ0ICkgIT0gMCApIHsKICAgICAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgIi4uLndhaXRpbmcgZm9yIGVudGVyLyByZXR1cm4gYmVmb3JlIHN0YXJ0aW5nIiA8PCBzdGQ6OmVuZGw7CkBAIC0yNDYsMTEgKzI1MiwxMSBAQAogICAgICAgICBpZiggbV9zdGFydHVwRXhjZXB0aW9ucyApCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBpZiggbV9jb25maWdEYXRhLnNob3dIZWxwIHx8IG1fY29uZmlnRGF0YS5saWJJZGVudGlmeSApCisgICAgICAgIGlmIChtX2NvbmZpZ0RhdGEuc2hvd0hlbHAgfHwgbV9jb25maWdEYXRhLmxpYklkZW50aWZ5KSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1RSWQotICAgICAgICB7CisgICAgICAgIENBVENIX1RSWSB7CiAgICAgICAgICAgICBjb25maWcoKTsgLy8gRm9yY2UgY29uZmlnIHRvIGJlIGNvbnN0cnVjdGVkCiAKICAgICAgICAgICAgIHNlZWRSbmcoICptX2NvbmZpZyApOwpAQCAtMjU5LDE4ICsyNjUsMjEgQEAKICAgICAgICAgICAgICAgICBhcHBseUZpbGVuYW1lc0FzVGFncyggKm1fY29uZmlnICk7CiAKICAgICAgICAgICAgIC8vIEhhbmRsZSBsaXN0IHJlcXVlc3QKLSAgICAgICAgICAgIGlmKCBPcHRpb248c3RkOjpzaXplX3Q+IGxpc3RlZCA9IGxpc3QoIGNvbmZpZygpICkgKQorICAgICAgICAgICAgaWYoIE9wdGlvbjxzdGQ6OnNpemVfdD4gbGlzdGVkID0gbGlzdCggbV9jb25maWcgKSApCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oICpsaXN0ZWQgKTsKIAorICAgICAgICAgICAgYXV0byB0b3RhbHMgPSBydW5UZXN0cyggbV9jb25maWcgKTsKICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBvbiB1bmljZXMgb25seSB0aGUgbG93ZXIgOCBiaXRzIGFyZSB1c3VhbGx5IHVzZWQsIGNsYW1waW5nCiAgICAgICAgICAgICAvLyB0aGUgcmV0dXJuIHZhbHVlIHRvIDI1NSBwcmV2ZW50cyBmYWxzZSBuZWdhdGl2ZSB3aGVuIHNvbWUgbXVsdGlwbGUKICAgICAgICAgICAgIC8vIG9mIDI1NiB0ZXN0cyBoYXMgZmFpbGVkCi0gICAgICAgICAgICByZXR1cm4gKHN0ZDo6bWluKSggTWF4RXhpdENvZGUsIHN0YXRpY19jYXN0PGludD4oIHJ1blRlc3RzKCBtX2NvbmZpZyApLmFzc2VydGlvbnMuZmFpbGVkICkgKTsKKyAgICAgICAgICAgIHJldHVybiAoc3RkOjptaW4pIChNYXhFeGl0Q29kZSwgKHN0ZDo6bWF4KSAodG90YWxzLmVycm9yLCBzdGF0aWNfY2FzdDxpbnQ+KHRvdGFscy5hc3NlcnRpb25zLmZhaWxlZCkpKTsKICAgICAgICAgfQotICAgICAgICBDQVRDSF9JTlRFUk5BTF9DQVRDSCAoIHN0ZDo6ZXhjZXB0aW9uJiwgZXggKSB7CisjaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUykKKyAgICAgICAgY2F0Y2goIHN0ZDo6ZXhjZXB0aW9uJiBleCApIHsKICAgICAgICAgICAgIENhdGNoOjpjZXJyKCkgPDwgZXgud2hhdCgpIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgIHJldHVybiBNYXhFeGl0Q29kZTsKICAgICAgICAgfQorI2VuZGlmCiAgICAgfQogCiB9IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2Vzc2lvbi5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zZXNzaW9uLmgKaW5kZXggYjgxNGFhNi4uYWY4MjBkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zZXNzaW9uLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zZXNzaW9uLmgKQEAgLTI1LDE0ICsyNSwyMyBAQAogICAgICAgICB2b2lkIHNob3dIZWxwKCkgY29uc3Q7CiAgICAgICAgIHZvaWQgbGliSWRlbnRpZnkoKTsKIAotICAgICAgICBpbnQgYXBwbHlDb21tYW5kTGluZSggaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSApOworICAgICAgICBpbnQgYXBwbHlDb21tYW5kTGluZSggaW50IGFyZ2MsIGNoYXIgY29uc3QgKiBjb25zdCAqIGFyZ3YgKTsKKyAgICAjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfV0NIQVIpICYmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoVU5JQ09ERSkKKyAgICAgICAgaW50IGFwcGx5Q29tbWFuZExpbmUoIGludCBhcmdjLCB3Y2hhcl90IGNvbnN0ICogY29uc3QgKiBhcmd2ICk7CisgICAgI2VuZGlmCiAKICAgICAgICAgdm9pZCB1c2VDb25maWdEYXRhKCBDb25maWdEYXRhIGNvbnN0JiBjb25maWdEYXRhICk7CiAKLSAgICAgICAgaW50IHJ1biggaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSApOwotICAgICNpZiBkZWZpbmVkKFdJTjMyKSAmJiBkZWZpbmVkKFVOSUNPREUpCi0gICAgICAgIGludCBydW4oIGludCBhcmdjLCB3Y2hhcl90KiBjb25zdCBhcmd2W10gKTsKLSAgICAjZW5kaWYKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2hhclQ+CisgICAgICAgIGludCBydW4oaW50IGFyZ2MsIENoYXJUIGNvbnN0ICogY29uc3QgYXJndltdKSB7CisgICAgICAgICAgICBpZiAobV9zdGFydHVwRXhjZXB0aW9ucykKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIGludCByZXR1cm5Db2RlID0gYXBwbHlDb21tYW5kTGluZShhcmdjLCBhcmd2KTsKKyAgICAgICAgICAgIGlmIChyZXR1cm5Db2RlID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuQ29kZSA9IHJ1bigpOworICAgICAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7CisgICAgICAgIH0KKyAgICAKICAgICAgICAgaW50IHJ1bigpOwogCiAgICAgICAgIGNsYXJhOjpQYXJzZXIgY29uc3QmIGNsaSgpIGNvbnN0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zaW5nbGV0b25zLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2luZ2xldG9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTUzNjdjYQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2luZ2xldG9ucy5jcHAKQEAgLTAsMCArMSwzNiBAQAorLyoKKyAqICBDcmVhdGVkIGJ5IFBoaWwgTmFzaCBvbiAxNS82LzIwMTguCisgKgorICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAqLworCisjaW5jbHVkZSAiY2F0Y2hfc2luZ2xldG9ucy5ocHAiCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBDYXRjaCB7CisKKyAgICBuYW1lc3BhY2UgeworICAgICAgICBzdGF0aWMgYXV0byBnZXRTaW5nbGV0b25zKCkgLT4gc3RkOjp2ZWN0b3I8SVNpbmdsZXRvbio+KiYgeworICAgICAgICAgICAgc3RhdGljIHN0ZDo6dmVjdG9yPElTaW5nbGV0b24qPiogZ19zaW5nbGV0b25zID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmKCAhZ19zaW5nbGV0b25zICkKKyAgICAgICAgICAgICAgICBnX3NpbmdsZXRvbnMgPSBuZXcgc3RkOjp2ZWN0b3I8SVNpbmdsZXRvbio+KCk7CisgICAgICAgICAgICByZXR1cm4gZ19zaW5nbGV0b25zOworICAgICAgICB9CisgICAgfQorCisgICAgSVNpbmdsZXRvbjo6fklTaW5nbGV0b24oKSB7fQorCisgICAgdm9pZCBhZGRTaW5nbGV0b24oSVNpbmdsZXRvbiogc2luZ2xldG9uICkgeworICAgICAgICBnZXRTaW5nbGV0b25zKCktPnB1c2hfYmFjayggc2luZ2xldG9uICk7CisgICAgfQorICAgIHZvaWQgY2xlYW51cFNpbmdsZXRvbnMoKSB7CisgICAgICAgIGF1dG8mIHNpbmdsZXRvbnMgPSBnZXRTaW5nbGV0b25zKCk7CisgICAgICAgIGZvciggYXV0byBzaW5nbGV0b24gOiAqc2luZ2xldG9ucyApCisgICAgICAgICAgICBkZWxldGUgc2luZ2xldG9uOworICAgICAgICBkZWxldGUgc2luZ2xldG9uczsKKyAgICAgICAgc2luZ2xldG9ucyA9IG51bGxwdHI7CisgICAgfQorCit9IC8vIG5hbWVzcGFjZSBDYXRjaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zaW5nbGV0b25zLmhwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2luZ2xldG9ucy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJjNGIzMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc2luZ2xldG9ucy5ocHAKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqICBDcmVhdGVkIGJ5IFBoaWwgTmFzaCBvbiAxNS82LzIwMTguCisgKgorICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKyAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKKyAqLworI2lmbmRlZiBUV09CTFVFQ1VCRVNfQ0FUQ0hfU0lOR0xFVE9OU19IUFBfSU5DTFVERUQKKyNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX1NJTkdMRVRPTlNfSFBQX0lOQ0xVREVECisKK25hbWVzcGFjZSBDYXRjaCB7CisKKyAgICBzdHJ1Y3QgSVNpbmdsZXRvbiB7CisgICAgICAgIHZpcnR1YWwgfklTaW5nbGV0b24oKTsKKyAgICB9OworCisKKyAgICB2b2lkIGFkZFNpbmdsZXRvbiggSVNpbmdsZXRvbiogc2luZ2xldG9uICk7CisgICAgdm9pZCBjbGVhbnVwU2luZ2xldG9ucygpOworCisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaW5nbGV0b25JbXBsVCwgdHlwZW5hbWUgSW50ZXJmYWNlVCA9IFNpbmdsZXRvbkltcGxULCB0eXBlbmFtZSBNdXRhYmxlSW50ZXJmYWNlVCA9IEludGVyZmFjZVQ+CisgICAgY2xhc3MgU2luZ2xldG9uIDogU2luZ2xldG9uSW1wbFQsIHB1YmxpYyBJU2luZ2xldG9uIHsKKworICAgICAgICBzdGF0aWMgYXV0byBnZXRJbnRlcm5hbCgpIC0+IFNpbmdsZXRvbiogeworICAgICAgICAgICAgc3RhdGljIFNpbmdsZXRvbiogc19pbnN0YW5jZSA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiggIXNfaW5zdGFuY2UgKSB7CisgICAgICAgICAgICAgICAgc19pbnN0YW5jZSA9IG5ldyBTaW5nbGV0b247CisgICAgICAgICAgICAgICAgYWRkU2luZ2xldG9uKCBzX2luc3RhbmNlICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc19pbnN0YW5jZTsKKyAgICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgYXV0byBnZXQoKSAtPiBJbnRlcmZhY2VUIGNvbnN0JiB7CisgICAgICAgICAgICByZXR1cm4gKmdldEludGVybmFsKCk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIGF1dG8gZ2V0TXV0YWJsZSgpIC0+IE11dGFibGVJbnRlcmZhY2VUJiB7CisgICAgICAgICAgICByZXR1cm4gKmdldEludGVybmFsKCk7CisgICAgICAgIH0KKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBDYXRjaAorCisjZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX1NJTkdMRVRPTlNfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0YXJ0dXBfZXhjZXB0aW9uX3JlZ2lzdHJ5LmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RhcnR1cF9leGNlcHRpb25fcmVnaXN0cnkuY3BwCmluZGV4IDdlYWU4NGYuLjNjNWJkMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RhcnR1cF9leGNlcHRpb25fcmVnaXN0cnkuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RhcnR1cF9leGNlcHRpb25fcmVnaXN0cnkuY3BwCkBAIC03LDE0ICs3LDEzIEBACiAgKi8KIAogI2luY2x1ZGUgImNhdGNoX3N0YXJ0dXBfZXhjZXB0aW9uX3JlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiY2F0Y2hfY29tbW9uLmgiCisjaW5jbHVkZSAiY2F0Y2hfY29tcGlsZXJfY2FwYWJpbGl0aWVzLmgiCiAKIG5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgdm9pZCBTdGFydHVwRXhjZXB0aW9uUmVnaXN0cnk6OmFkZCggc3RkOjpleGNlcHRpb25fcHRyIGNvbnN0JiBleGNlcHRpb24gKSBub2V4Y2VwdCB7Ci0gICAgICAgIENBVENIX0lOVEVSTkFMX1RSWSB7Cit2b2lkIFN0YXJ0dXBFeGNlcHRpb25SZWdpc3RyeTo6YWRkKCBzdGQ6OmV4Y2VwdGlvbl9wdHIgY29uc3QmIGV4Y2VwdGlvbiApIG5vZXhjZXB0IHsKKyAgICAgICAgQ0FUQ0hfVFJZIHsKICAgICAgICAgICAgIG1fZXhjZXB0aW9ucy5wdXNoX2JhY2soZXhjZXB0aW9uKTsKLSAgICAgICAgfQotICAgICAgICBDQVRDSF9JTlRFUk5BTF9DQVRDSF9BTEwoKSB7CisgICAgICAgIH0gQ0FUQ0hfQ0FUQ0hfQUxMIHsKICAgICAgICAgICAgIC8vIElmIHdlIHJ1biBvdXQgb2YgbWVtb3J5IGR1cmluZyBzdGFydC11cCB0aGVyZSdzIHJlYWxseSBub3QgYSBsb3QgbW9yZSB3ZSBjYW4gZG8gYWJvdXQgaXQKICAgICAgICAgICAgIHN0ZDo6dGVybWluYXRlKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyZWFtLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyZWFtLmNwcAppbmRleCAxMjVmZDQ3Li5iYTJkMmJlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmVhbS5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdHJlYW0uY3BwCkBAIC0xMiw2ICsxMiw3IEBACiAjaW5jbHVkZSAiY2F0Y2hfc3RyZWFtLmgiCiAjaW5jbHVkZSAiY2F0Y2hfZGVidWdfY29uc29sZS5oIgogI2luY2x1ZGUgImNhdGNoX3N0cmluZ3JlZi5oIgorI2luY2x1ZGUgImNhdGNoX3NpbmdsZXRvbnMuaHBwIgogCiAjaW5jbHVkZSA8Y3N0ZGlvPgogI2luY2x1ZGUgPGlvc3RyZWFtPgpAQCAtMjAsMTEgKzIxLDYgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8bWVtb3J5PgogCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jICAgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKLSMgICAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdleGl0LXRpbWUtZGVzdHJ1Y3RvcnMiCi0jZW5kaWYKLQogbmFtZXNwYWNlIENhdGNoIHsKIAogICAgIENhdGNoOjpJU3RyZWFtOjp+SVN0cmVhbSgpID0gZGVmYXVsdDsKQEAgLTE0NSw3ICsxNDEsNiBAQAogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8c3RkOjpvc3RyaW5nc3RyZWFtPj4gbV9zdHJlYW1zOwogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNpemVfdD4gbV91bnVzZWQ7CiAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBtX3JlZmVyZW5jZVN0cmVhbTsgLy8gVXNlZCBmb3IgY29weSBzdGF0ZS8gZmxhZ3MgZnJvbQotICAgICAgICBzdGF0aWMgU3RyaW5nU3RyZWFtcyogc19pbnN0YW5jZTsKIAogICAgICAgICBhdXRvIGFkZCgpIC0+IHN0ZDo6c2l6ZV90IHsKICAgICAgICAgICAgIGlmKCBtX3VudXNlZC5lbXB0eSgpICkgewpAQCAtMTYzLDM0ICsxNTgsMTcgQEAKICAgICAgICAgICAgIG1fc3RyZWFtc1tpbmRleF0tPmNvcHlmbXQoIG1fcmVmZXJlbmNlU3RyZWFtICk7IC8vIFJlc3RvcmUgaW5pdGlhbCBmbGFncyBhbmQgb3RoZXIgc3RhdGUKICAgICAgICAgICAgIG1fdW51c2VkLnB1c2hfYmFjayhpbmRleCk7CiAgICAgICAgIH0KLQotICAgICAgICAvLyAhVEJEOiBwdXQgaW4gVExTCi0gICAgICAgIHN0YXRpYyBhdXRvIGluc3RhbmNlKCkgLT4gU3RyaW5nU3RyZWFtcyYgewotICAgICAgICAgICAgaWYoICFzX2luc3RhbmNlICkKLSAgICAgICAgICAgICAgICBzX2luc3RhbmNlID0gbmV3IFN0cmluZ1N0cmVhbXMoKTsKLSAgICAgICAgICAgIHJldHVybiAqc19pbnN0YW5jZTsKLSAgICAgICAgfQotICAgICAgICBzdGF0aWMgdm9pZCBjbGVhbnVwKCkgewotICAgICAgICAgICAgZGVsZXRlIHNfaW5zdGFuY2U7Ci0gICAgICAgICAgICBzX2luc3RhbmNlID0gbnVsbHB0cjsKLSAgICAgICAgfQogICAgIH07CiAKLSAgICBTdHJpbmdTdHJlYW1zKiBTdHJpbmdTdHJlYW1zOjpzX2luc3RhbmNlID0gbnVsbHB0cjsKLQotICAgIHZvaWQgUmV1c2FibGVTdHJpbmdTdHJlYW06OmNsZWFudXAoKSB7Ci0gICAgICAgIFN0cmluZ1N0cmVhbXM6OmNsZWFudXAoKTsKLSAgICB9Ci0KICAgICBSZXVzYWJsZVN0cmluZ1N0cmVhbTo6UmV1c2FibGVTdHJpbmdTdHJlYW0oKQotICAgIDogICBtX2luZGV4KCBTdHJpbmdTdHJlYW1zOjppbnN0YW5jZSgpLmFkZCgpICksCi0gICAgICAgIG1fb3NzKCBTdHJpbmdTdHJlYW1zOjppbnN0YW5jZSgpLm1fc3RyZWFtc1ttX2luZGV4XS5nZXQoKSApCisgICAgOiAgIG1faW5kZXgoIFNpbmdsZXRvbjxTdHJpbmdTdHJlYW1zPjo6Z2V0TXV0YWJsZSgpLmFkZCgpICksCisgICAgICAgIG1fb3NzKCBTaW5nbGV0b248U3RyaW5nU3RyZWFtcz46OmdldE11dGFibGUoKS5tX3N0cmVhbXNbbV9pbmRleF0uZ2V0KCkgKQogICAgIHt9CiAKICAgICBSZXVzYWJsZVN0cmluZ1N0cmVhbTo6flJldXNhYmxlU3RyaW5nU3RyZWFtKCkgewogICAgICAgICBzdGF0aWNfY2FzdDxzdGQ6Om9zdHJpbmdzdHJlYW0qPiggbV9vc3MgKS0+c3RyKCIiKTsKICAgICAgICAgbV9vc3MtPmNsZWFyKCk7Ci0gICAgICAgIFN0cmluZ1N0cmVhbXM6Omluc3RhbmNlKCkucmVsZWFzZSggbV9pbmRleCApOworICAgICAgICBTaW5nbGV0b248U3RyaW5nU3RyZWFtcz46OmdldE11dGFibGUoKS5yZWxlYXNlKCBtX2luZGV4ICk7CiAgICAgfQogCiAgICAgYXV0byBSZXVzYWJsZVN0cmluZ1N0cmVhbTo6c3RyKCkgY29uc3QgLT4gc3RkOjpzdHJpbmcgewpAQCAtMjA3LDcgKzE4NSwzIEBACiAgICAgc3RkOjpvc3RyZWFtJiBjbG9nKCkgeyByZXR1cm4gc3RkOjpjbG9nOyB9CiAjZW5kaWYKIH0KLQotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotIyAgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwb3AKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdHJlYW0uaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyZWFtLmgKaW5kZXggYzVlNzhiMi4uMmI0MWFkYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdHJlYW0uaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmVhbS5oCkBAIC00Myw4ICs0Myw2IEBACiAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgIH0KICAgICAgICAgYXV0byBnZXQoKSAtPiBzdGQ6Om9zdHJlYW0mIHsgcmV0dXJuICptX29zczsgfQotCi0gICAgICAgIHN0YXRpYyB2b2lkIGNsZWFudXAoKTsKICAgICB9OwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmluZ19tYW5pcC5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmluZ19tYW5pcC5jcHAKaW5kZXggODQ3NjIwNC4uOTA0ZDEwMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdHJpbmdfbWFuaXAuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyaW5nX21hbmlwLmNwcApAQCAtMTQsNiArMTQsMTIgQEAKIAogbmFtZXNwYWNlIENhdGNoIHsKIAorICAgIG5hbWVzcGFjZSB7CisgICAgICAgIGNoYXIgdG9Mb3dlckNoKGNoYXIgYykgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KCBzdGQ6OnRvbG93ZXIoIGMgKSApOworICAgICAgICB9CisgICAgfQorCiAgICAgYm9vbCBzdGFydHNXaXRoKCBzdGQ6OnN0cmluZyBjb25zdCYgcywgc3RkOjpzdHJpbmcgY29uc3QmIHByZWZpeCApIHsKICAgICAgICAgcmV0dXJuIHMuc2l6ZSgpID49IHByZWZpeC5zaXplKCkgJiYgc3RkOjplcXVhbChwcmVmaXguYmVnaW4oKSwgcHJlZml4LmVuZCgpLCBzLmJlZ2luKCkpOwogICAgIH0KQEAgLTI5LDkgKzM1LDYgQEAKICAgICBib29sIGNvbnRhaW5zKCBzdGQ6OnN0cmluZyBjb25zdCYgcywgc3RkOjpzdHJpbmcgY29uc3QmIGluZml4ICkgewogICAgICAgICByZXR1cm4gcy5maW5kKCBpbmZpeCApICE9IHN0ZDo6c3RyaW5nOjpucG9zOwogICAgIH0KLSAgICBjaGFyIHRvTG93ZXJDaChjaGFyIGMpIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KCBzdGQ6OnRvbG93ZXIoIGMgKSApOwotICAgIH0KICAgICB2b2lkIHRvTG93ZXJJblBsYWNlKCBzdGQ6OnN0cmluZyYgcyApIHsKICAgICAgICAgc3RkOjp0cmFuc2Zvcm0oIHMuYmVnaW4oKSwgcy5lbmQoKSwgcy5iZWdpbigpLCB0b0xvd2VyQ2ggKTsKICAgICB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmluZ3JlZi5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmluZ3JlZi5jcHAKaW5kZXggYjBiMmY4ZS4uOWU5MDk1ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdHJpbmdyZWYuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyaW5ncmVmLmNwcApAQCAtNDMsNyArNDMsNyBAQAogICAgICAgICAgICBjb25zdF9jYXN0PFN0cmluZ1JlZio+KCB0aGlzICktPnRha2VPd25lcnNoaXAoKTsKICAgICAgICAgcmV0dXJuIG1fc3RhcnQ7CiAgICAgfQotICAgIGF1dG8gU3RyaW5nUmVmOjpkYXRhKCkgY29uc3Qgbm9leGNlcHQgLT4gY2hhciBjb25zdCogeworICAgIGF1dG8gU3RyaW5nUmVmOjpjdXJyZW50RGF0YSgpIGNvbnN0IG5vZXhjZXB0IC0+IGNoYXIgY29uc3QqIHsKICAgICAgICAgcmV0dXJuIG1fc3RhcnQ7CiAgICAgfQogCkBAIC0xMTIsNyArMTEyLDEyIEBACiAgICAgfQogCiAgICAgYXV0byBvcGVyYXRvciA8PCAoIHN0ZDo6b3N0cmVhbSYgb3MsIFN0cmluZ1JlZiBjb25zdCYgc3RyICkgLT4gc3RkOjpvc3RyZWFtJiB7Ci0gICAgICAgIHJldHVybiBvcyA8PCBzdHIuY19zdHIoKTsKKyAgICAgICAgcmV0dXJuIG9zLndyaXRlKHN0ci5jdXJyZW50RGF0YSgpLCBzdHIuc2l6ZSgpKTsKKyAgICB9CisKKyAgICBhdXRvIG9wZXJhdG9yKz0oIHN0ZDo6c3RyaW5nJiBsaHMsIFN0cmluZ1JlZiBjb25zdCYgcmhzICkgLT4gc3RkOjpzdHJpbmcmIHsKKyAgICAgICAgbGhzLmFwcGVuZChyaHMuY3VycmVudERhdGEoKSwgcmhzLnNpemUoKSk7CisgICAgICAgIHJldHVybiBsaHM7CiAgICAgfQogCiB9IC8vIG5hbWVzcGFjZSBDYXRjaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdHJpbmdyZWYuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3RyaW5ncmVmLmgKaW5kZXggMGY5ZTc4MC4uNjRmNTk1YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdHJpbmdyZWYuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N0cmluZ3JlZi5oCkBAIC0xMiw4ICsxMiw2IEBACiAjaW5jbHVkZSA8aW9zZndkPgogCiBuYW1lc3BhY2UgQ2F0Y2ggewotICAgIAotICAgIGNsYXNzIFN0cmluZ0RhdGE7CiAKICAgICAvLy8gQSBub24tb3duaW5nIHN0cmluZyBjbGFzcyAoc2ltaWxhciB0byB0aGUgZm9ydGhjb21pbmcgc3RkOjpzdHJpbmdfdmlldykKICAgICAvLy8gTm90ZSB0aGF0LCBiZWNhdXNlIGEgU3RyaW5nUmVmIG1heSBiZSBhIHN1YnN0cmluZyBvZiBhbm90aGVyIHN0cmluZywKQEAgLTMxLDEzICsyOSwxMyBAQAogCiAgICAgICAgIGNoYXIgY29uc3QqIG1fc3RhcnQ7CiAgICAgICAgIHNpemVfdHlwZSBtX3NpemU7Ci0gICAgICAgIAorCiAgICAgICAgIGNoYXIqIG1fZGF0YSA9IG51bGxwdHI7Ci0gICAgICAgIAorCiAgICAgICAgIHZvaWQgdGFrZU93bmVyc2hpcCgpOwogCiAgICAgICAgIHN0YXRpYyBjb25zdGV4cHIgY2hhciBjb25zdCogY29uc3Qgc19lbXB0eSA9ICIiOwotICAgICAgICAKKwogICAgIHB1YmxpYzogLy8gY29uc3RydWN0aW9uLyBhc3NpZ25tZW50CiAgICAgICAgIFN0cmluZ1JlZigpIG5vZXhjZXB0CiAgICAgICAgIDogICBTdHJpbmdSZWYoIHNfZW1wdHksIDAgKQpAQCAtODMsMTMgKzgxLDEzIEBACiAgICAgICAgIG9wZXJhdG9yIHN0ZDo6c3RyaW5nKCkgY29uc3Q7CiAKICAgICAgICAgdm9pZCBzd2FwKCBTdHJpbmdSZWYmIG90aGVyICkgbm9leGNlcHQ7Ci0gICAgICAgIAorCiAgICAgcHVibGljOiAvLyBvcGVyYXRvcnMKICAgICAgICAgYXV0byBvcGVyYXRvciA9PSAoIFN0cmluZ1JlZiBjb25zdCYgb3RoZXIgKSBjb25zdCBub2V4Y2VwdCAtPiBib29sOwogICAgICAgICBhdXRvIG9wZXJhdG9yICE9ICggU3RyaW5nUmVmIGNvbnN0JiBvdGhlciApIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2w7Ci0gICAgICAgIAorCiAgICAgICAgIGF1dG8gb3BlcmF0b3JbXSAoIHNpemVfdHlwZSBpbmRleCApIGNvbnN0IG5vZXhjZXB0IC0+IGNoYXI7Ci0gICAgICAgIAorCiAgICAgcHVibGljOiAvLyBuYW1lZCBxdWVyaWVzCiAgICAgICAgIGF1dG8gZW1wdHkoKSBjb25zdCBub2V4Y2VwdCAtPiBib29sIHsKICAgICAgICAgICAgIHJldHVybiBtX3NpemUgPT0gMDsKQEAgLTEwMCwyNiArOTgsMzUgQEAKIAogICAgICAgICBhdXRvIG51bWJlck9mQ2hhcmFjdGVycygpIGNvbnN0IG5vZXhjZXB0IC0+IHNpemVfdHlwZTsKICAgICAgICAgYXV0byBjX3N0cigpIGNvbnN0IC0+IGNoYXIgY29uc3QqOwotICAgICAgICAKKwogICAgIHB1YmxpYzogLy8gc3Vic3RyaW5ncyBhbmQgc2VhcmNoZXMKICAgICAgICAgYXV0byBzdWJzdHIoIHNpemVfdHlwZSBzdGFydCwgc2l6ZV90eXBlIHNpemUgKSBjb25zdCBub2V4Y2VwdCAtPiBTdHJpbmdSZWY7CiAKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgY3VycmVudCBzdGFydCBwb2ludGVyLgorICAgICAgICAvLyBOb3RlIHRoYXQgdGhlIHBvaW50ZXIgY2FuIGNoYW5nZSB3aGVuIGlmIHRoZSBTdHJpbmdSZWYgaXMgYSBzdWJzdHJpbmcKKyAgICAgICAgYXV0byBjdXJyZW50RGF0YSgpIGNvbnN0IG5vZXhjZXB0IC0+IGNoYXIgY29uc3QqOworCiAgICAgcHJpdmF0ZTogLy8gb3duZXJzaGlwIHF1ZXJpZXMgLSBtYXkgbm90IGJlIGNvbnNpc3RlbnQgYmV0d2VlbiBjYWxscwogICAgICAgICBhdXRvIGlzT3duZWQoKSBjb25zdCBub2V4Y2VwdCAtPiBib29sOwogICAgICAgICBhdXRvIGlzU3Vic3RyaW5nKCkgY29uc3Qgbm9leGNlcHQgLT4gYm9vbDsKLSAgICAgICAgYXV0byBkYXRhKCkgY29uc3Qgbm9leGNlcHQgLT4gY2hhciBjb25zdCo7CiAgICAgfTsKIAogICAgIGF1dG8gb3BlcmF0b3IgKyAoIFN0cmluZ1JlZiBjb25zdCYgbGhzLCBTdHJpbmdSZWYgY29uc3QmIHJocyApIC0+IHN0ZDo6c3RyaW5nOwogICAgIGF1dG8gb3BlcmF0b3IgKyAoIFN0cmluZ1JlZiBjb25zdCYgbGhzLCBjaGFyIGNvbnN0KiByaHMgKSAtPiBzdGQ6OnN0cmluZzsKICAgICBhdXRvIG9wZXJhdG9yICsgKCBjaGFyIGNvbnN0KiBsaHMsIFN0cmluZ1JlZiBjb25zdCYgcmhzICkgLT4gc3RkOjpzdHJpbmc7CiAKKyAgICBhdXRvIG9wZXJhdG9yICs9ICggc3RkOjpzdHJpbmcmIGxocywgU3RyaW5nUmVmIGNvbnN0JiBzciApIC0+IHN0ZDo6c3RyaW5nJjsKICAgICBhdXRvIG9wZXJhdG9yIDw8ICggc3RkOjpvc3RyZWFtJiBvcywgU3RyaW5nUmVmIGNvbnN0JiBzciApIC0+IHN0ZDo6b3N0cmVhbSY7CiAKKwogICAgIGlubGluZSBhdXRvIG9wZXJhdG9yICIiIF9zciggY2hhciBjb25zdCogcmF3Q2hhcnMsIHN0ZDo6c2l6ZV90IHNpemUgKSBub2V4Y2VwdCAtPiBTdHJpbmdSZWYgewogICAgICAgICByZXR1cm4gU3RyaW5nUmVmKCByYXdDaGFycywgc2l6ZSApOwogICAgIH0KIAogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIAoraW5saW5lIGF1dG8gb3BlcmF0b3IgIiIgX2NhdGNoX3NyKCBjaGFyIGNvbnN0KiByYXdDaGFycywgc3RkOjpzaXplX3Qgc2l6ZSApIG5vZXhjZXB0IC0+IENhdGNoOjpTdHJpbmdSZWYgeworICAgIHJldHVybiBDYXRjaDo6U3RyaW5nUmVmKCByYXdDaGFycywgc2l6ZSApOworfQorCiAjZW5kaWYgLy8gQ0FUQ0hfU1RSSU5HUkVGX0hfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3VwcHJlc3Nfd2FybmluZ3MuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfc3VwcHJlc3Nfd2FybmluZ3MuaAppbmRleCA5MjgwMTE0Li5kYzhjMWRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3N1cHByZXNzX3dhcm5pbmdzLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9zdXBwcmVzc193YXJuaW5ncy5oCkBAIC0xMCwxNSArMTAsMTggQEAKICMgICAgICAgcHJhZ21hIHdhcm5pbmcocHVzaCkKICMgICAgICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogMTYxIDE2ODIpCiAjICAgZWxzZSAvLyBfX0lDQwotIyAgICAgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKICMgICAgICAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogIyAgICAgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3BhZGRlZCIKICMgICAgICAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdzd2l0Y2gtZW51bSIKICMgICAgICAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjb3ZlcmVkLXN3aXRjaC1kZWZhdWx0IgogIyAgICBlbmRpZgogI2VsaWYgZGVmaW5lZCBfX0dOVUNfXwotIyAgICBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFibGUiCi0jICAgIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3BhcmVudGhlc2VzIgorICAgICAvLyBCZWNhdXNlIFJFUVVJUkVzIHRyaWdnZXIgR0NDJ3MgLVdwYXJlbnRoZXNlcywgYW5kIGJlY2F1c2Ugc3RpbGwKKyAgICAgLy8gc3VwcG9ydGVkIHZlcnNpb24gb2YgZysrIGhhdmUgb25seSBidWdneSBzdXBwb3J0IGZvciBfUHJhZ21hcywKKyAgICAgLy8gV3BhcmVudGhlc2VzIGhhdmUgdG8gYmUgc3VwcHJlc3NlZCBnbG9iYWxseS4KKyMgICAgcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XcGFyZW50aGVzZXMiIC8vIFNlZSAjNjc0IGZvciBkZXRhaWxzCisKICMgICAgcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyMgICAgcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxlIgogIyAgICBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdwYWRkZWQiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGFnX2FsaWFzX2F1dG9yZWdpc3RyYXIuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90YWdfYWxpYXNfYXV0b3JlZ2lzdHJhci5jcHAKaW5kZXggYjVjNmNlOS4uNmEyOTJlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90YWdfYWxpYXNfYXV0b3JlZ2lzdHJhci5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90YWdfYWxpYXNfYXV0b3JlZ2lzdHJhci5jcHAKQEAgLTEsMTIgKzEsMTMgQEAKICNpbmNsdWRlICJjYXRjaF90YWdfYWxpYXNfYXV0b3JlZ2lzdHJhci5oIgorI2luY2x1ZGUgImNhdGNoX2NvbXBpbGVyX2NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgImNhdGNoX2ludGVyZmFjZXNfcmVnaXN0cnlfaHViLmgiCiAKIG5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgCisKICAgICBSZWdpc3RyYXJGb3JUYWdBbGlhc2VzOjpSZWdpc3RyYXJGb3JUYWdBbGlhc2VzKGNoYXIgY29uc3QqIGFsaWFzLCBjaGFyIGNvbnN0KiB0YWcsIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbykgewotICAgICAgICBDQVRDSF9JTlRFUk5BTF9UUlkgeworICAgICAgICBDQVRDSF9UUlkgewogICAgICAgICAgICAgZ2V0TXV0YWJsZVJlZ2lzdHJ5SHViKCkucmVnaXN0ZXJUYWdBbGlhcyhhbGlhcywgdGFnLCBsaW5lSW5mbyk7Ci0gICAgICAgIH0gQ0FUQ0hfSU5URVJOQUxfQ0FUQ0hfQUxMKCkgeworICAgICAgICB9IENBVENIX0NBVENIX0FMTCB7CiAgICAgICAgICAgICAvLyBEbyBub3QgdGhyb3cgd2hlbiBjb25zdHJ1Y3RpbmcgZ2xvYmFsIG9iamVjdHMsIGluc3RlYWQgcmVnaXN0ZXIgdGhlIGV4Y2VwdGlvbiB0byBiZSBwcm9jZXNzZWQgbGF0ZXIKICAgICAgICAgICAgIGdldE11dGFibGVSZWdpc3RyeUh1YigpLnJlZ2lzdGVyU3RhcnR1cEV4Y2VwdGlvbigpOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV9pbmZvLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX2luZm8uY3BwCmluZGV4IDRhYjk3NzUuLjUzNjQ2MmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX2luZm8uY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX2luZm8uY3BwCkBAIC0xOSwzNyArMTksMzggQEAKIAogbmFtZXNwYWNlIENhdGNoIHsKIAotICAgIFRlc3RDYXNlSW5mbzo6U3BlY2lhbFByb3BlcnRpZXMgcGFyc2VTcGVjaWFsVGFnKCBzdGQ6OnN0cmluZyBjb25zdCYgdGFnICkgewotICAgICAgICBpZiggc3RhcnRzV2l0aCggdGFnLCAnLicgKSB8fAotICAgICAgICAgICAgdGFnID09ICIhaGlkZSIgKQotICAgICAgICAgICAgcmV0dXJuIFRlc3RDYXNlSW5mbzo6SXNIaWRkZW47Ci0gICAgICAgIGVsc2UgaWYoIHRhZyA9PSAiIXRocm93cyIgKQotICAgICAgICAgICAgcmV0dXJuIFRlc3RDYXNlSW5mbzo6VGhyb3dzOwotICAgICAgICBlbHNlIGlmKCB0YWcgPT0gIiFzaG91bGRmYWlsIiApCi0gICAgICAgICAgICByZXR1cm4gVGVzdENhc2VJbmZvOjpTaG91bGRGYWlsOwotICAgICAgICBlbHNlIGlmKCB0YWcgPT0gIiFtYXlmYWlsIiApCi0gICAgICAgICAgICByZXR1cm4gVGVzdENhc2VJbmZvOjpNYXlGYWlsOwotICAgICAgICBlbHNlIGlmKCB0YWcgPT0gIiFub25wb3J0YWJsZSIgKQotICAgICAgICAgICAgcmV0dXJuIFRlc3RDYXNlSW5mbzo6Tm9uUG9ydGFibGU7Ci0gICAgICAgIGVsc2UgaWYoIHRhZyA9PSAiIWJlbmNobWFyayIgKQotICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRlc3RDYXNlSW5mbzo6U3BlY2lhbFByb3BlcnRpZXM+KCBUZXN0Q2FzZUluZm86OkJlbmNobWFyayB8IFRlc3RDYXNlSW5mbzo6SXNIaWRkZW4gKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuIFRlc3RDYXNlSW5mbzo6Tm9uZTsKLSAgICB9Ci0gICAgYm9vbCBpc1Jlc2VydmVkVGFnKCBzdGQ6OnN0cmluZyBjb25zdCYgdGFnICkgewotICAgICAgICByZXR1cm4gcGFyc2VTcGVjaWFsVGFnKCB0YWcgKSA9PSBUZXN0Q2FzZUluZm86Ok5vbmUgJiYgdGFnLnNpemUoKSA+IDAgJiYgIXN0ZDo6aXNhbG51bSggdGFnWzBdICk7Ci0gICAgfQotICAgIHZvaWQgZW5mb3JjZU5vdFJlc2VydmVkVGFnKCBzdGQ6OnN0cmluZyBjb25zdCYgdGFnLCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgX2xpbmVJbmZvICkgewotICAgICAgICBDQVRDSF9FTkZPUkNFKCAhaXNSZXNlcnZlZFRhZyh0YWcpLAotICAgICAgICAgICAgICAgICAgICAgICJUYWcgbmFtZTogWyIgPDwgdGFnIDw8ICJdIGlzIG5vdCBhbGxvd2VkLlxuIgotICAgICAgICAgICAgICAgICAgICAgIDw8ICJUYWcgbmFtZXMgc3RhcnRpbmcgd2l0aCBub24gYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSByZXNlcnZlZFxuIgotICAgICAgICAgICAgICAgICAgICAgIDw8IF9saW5lSW5mbyApOworICAgIG5hbWVzcGFjZSB7CisgICAgICAgIFRlc3RDYXNlSW5mbzo6U3BlY2lhbFByb3BlcnRpZXMgcGFyc2VTcGVjaWFsVGFnKCBzdGQ6OnN0cmluZyBjb25zdCYgdGFnICkgeworICAgICAgICAgICAgaWYoIHN0YXJ0c1dpdGgoIHRhZywgJy4nICkgfHwKKyAgICAgICAgICAgICAgICB0YWcgPT0gIiFoaWRlIiApCisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RDYXNlSW5mbzo6SXNIaWRkZW47CisgICAgICAgICAgICBlbHNlIGlmKCB0YWcgPT0gIiF0aHJvd3MiICkKKyAgICAgICAgICAgICAgICByZXR1cm4gVGVzdENhc2VJbmZvOjpUaHJvd3M7CisgICAgICAgICAgICBlbHNlIGlmKCB0YWcgPT0gIiFzaG91bGRmYWlsIiApCisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RDYXNlSW5mbzo6U2hvdWxkRmFpbDsKKyAgICAgICAgICAgIGVsc2UgaWYoIHRhZyA9PSAiIW1heWZhaWwiICkKKyAgICAgICAgICAgICAgICByZXR1cm4gVGVzdENhc2VJbmZvOjpNYXlGYWlsOworICAgICAgICAgICAgZWxzZSBpZiggdGFnID09ICIhbm9ucG9ydGFibGUiICkKKyAgICAgICAgICAgICAgICByZXR1cm4gVGVzdENhc2VJbmZvOjpOb25Qb3J0YWJsZTsKKyAgICAgICAgICAgIGVsc2UgaWYoIHRhZyA9PSAiIWJlbmNobWFyayIgKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUZXN0Q2FzZUluZm86OlNwZWNpYWxQcm9wZXJ0aWVzPiggVGVzdENhc2VJbmZvOjpCZW5jaG1hcmsgfCBUZXN0Q2FzZUluZm86OklzSGlkZGVuICk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFRlc3RDYXNlSW5mbzo6Tm9uZTsKKyAgICAgICAgfQorICAgICAgICBib29sIGlzUmVzZXJ2ZWRUYWcoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YWcgKSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VTcGVjaWFsVGFnKCB0YWcgKSA9PSBUZXN0Q2FzZUluZm86Ok5vbmUgJiYgdGFnLnNpemUoKSA+IDAgJiYgIXN0ZDo6aXNhbG51bSggc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4odGFnWzBdKSApOworICAgICAgICB9CisgICAgICAgIHZvaWQgZW5mb3JjZU5vdFJlc2VydmVkVGFnKCBzdGQ6OnN0cmluZyBjb25zdCYgdGFnLCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgX2xpbmVJbmZvICkgeworICAgICAgICAgICAgQ0FUQ0hfRU5GT1JDRSggIWlzUmVzZXJ2ZWRUYWcodGFnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhZyBuYW1lOiBbIiA8PCB0YWcgPDwgIl0gaXMgbm90IGFsbG93ZWQuXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICJUYWcgbmFtZXMgc3RhcnRpbmcgd2l0aCBub24gYWxwaGEtbnVtZXJpYyBjaGFyYWN0ZXJzIGFyZSByZXNlcnZlZFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBfbGluZUluZm8gKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIFRlc3RDYXNlIG1ha2VUZXN0Q2FzZSggIElUZXN0SW52b2tlciogX3Rlc3RDYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBfY2xhc3NOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgX2Rlc2NPclRhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmFtZUFuZFRhZ3MgY29uc3QmIG5hbWVBbmRUYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBfbGluZUluZm8gKQogICAgIHsKICAgICAgICAgYm9vbCBpc0hpZGRlbiA9IGZhbHNlOwpAQCAtNTgsNiArNTksNyBAQAogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gdGFnczsKICAgICAgICAgc3RkOjpzdHJpbmcgZGVzYywgdGFnOwogICAgICAgICBib29sIGluVGFnID0gZmFsc2U7CisgICAgICAgIHN0ZDo6c3RyaW5nIF9kZXNjT3JUYWdzID0gbmFtZUFuZFRhZ3MudGFnczsKICAgICAgICAgZm9yIChjaGFyIGMgOiBfZGVzY09yVGFncykgewogICAgICAgICAgICAgaWYoICFpblRhZyApIHsKICAgICAgICAgICAgICAgICBpZiggYyA9PSAnWycgKQpAQCAtODUsOCArODcsOCBAQAogICAgICAgICAgICAgdGFncy5wdXNoX2JhY2soICIuIiApOwogICAgICAgICB9CiAKLSAgICAgICAgVGVzdENhc2VJbmZvIGluZm8oIF9uYW1lLCBfY2xhc3NOYW1lLCBkZXNjLCB0YWdzLCBfbGluZUluZm8gKTsKLSAgICAgICAgcmV0dXJuIFRlc3RDYXNlKCBfdGVzdENhc2UsIGluZm8gKTsKKyAgICAgICAgVGVzdENhc2VJbmZvIGluZm8oIG5hbWVBbmRUYWdzLm5hbWUsIF9jbGFzc05hbWUsIGRlc2MsIHRhZ3MsIF9saW5lSW5mbyApOworICAgICAgICByZXR1cm4gVGVzdENhc2UoIF90ZXN0Q2FzZSwgc3RkOjptb3ZlKGluZm8pICk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRUYWdzKCBUZXN0Q2FzZUluZm8mIHRlc3RDYXNlSW5mbywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRhZ3MgKSB7CkBAIC0xNDcsNyArMTQ5LDcgQEAKICAgICB9CiAKIAotICAgIFRlc3RDYXNlOjpUZXN0Q2FzZSggSVRlc3RJbnZva2VyKiB0ZXN0Q2FzZSwgVGVzdENhc2VJbmZvIGNvbnN0JiBpbmZvICkgOiBUZXN0Q2FzZUluZm8oIGluZm8gKSwgdGVzdCggdGVzdENhc2UgKSB7fQorICAgIFRlc3RDYXNlOjpUZXN0Q2FzZSggSVRlc3RJbnZva2VyKiB0ZXN0Q2FzZSwgVGVzdENhc2VJbmZvJiYgaW5mbyApIDogVGVzdENhc2VJbmZvKCBzdGQ6Om1vdmUoaW5mbykgKSwgdGVzdCggdGVzdENhc2UgKSB7fQogCiAKICAgICBUZXN0Q2FzZSBUZXN0Q2FzZTo6d2l0aE5hbWUoIHN0ZDo6c3RyaW5nIGNvbnN0JiBfbmV3TmFtZSApIGNvbnN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX2luZm8uaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX2luZm8uaAppbmRleCAyYTkxMWIwLi44MDljOTc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV9pbmZvLmgKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfaW5mby5oCkBAIC05LDYgKzksNyBAQAogI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfVEVTVF9DQVNFX0lORk9fSF9JTkNMVURFRAogCiAjaW5jbHVkZSAiY2F0Y2hfY29tbW9uLmgiCisjaW5jbHVkZSAiY2F0Y2hfdGVzdF9yZWdpc3RyeS5oIgogCiAjaW5jbHVkZSA8c3RyaW5nPgogI2luY2x1ZGUgPHZlY3Rvcj4KQEAgLTYxLDcgKzYyLDcgQEAKICAgICBjbGFzcyBUZXN0Q2FzZSA6IHB1YmxpYyBUZXN0Q2FzZUluZm8gewogICAgIHB1YmxpYzoKIAotICAgICAgICBUZXN0Q2FzZSggSVRlc3RJbnZva2VyKiB0ZXN0Q2FzZSwgVGVzdENhc2VJbmZvIGNvbnN0JiBpbmZvICk7CisgICAgICAgIFRlc3RDYXNlKCBJVGVzdEludm9rZXIqIHRlc3RDYXNlLCBUZXN0Q2FzZUluZm8mJiBpbmZvICk7CiAKICAgICAgICAgVGVzdENhc2Ugd2l0aE5hbWUoIHN0ZDo6c3RyaW5nIGNvbnN0JiBfbmV3TmFtZSApIGNvbnN0OwogCkBAIC03OCw4ICs3OSw3IEBACiAKICAgICBUZXN0Q2FzZSBtYWtlVGVzdENhc2UoICBJVGVzdEludm9rZXIqIHRlc3RDYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBjbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIGRlc2NyaXB0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5hbWVBbmRUYWdzIGNvbnN0JiBuYW1lQW5kVGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VMaW5lSW5mbyBjb25zdCYgbGluZUluZm8gKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfcmVnaXN0cnlfaW1wbC5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV9yZWdpc3RyeV9pbXBsLmNwcAppbmRleCA4OWM3MjM5Li5hNmI3ZjU3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV9yZWdpc3RyeV9pbXBsLmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV9yZWdpc3RyeV9pbXBsLmNwcApAQCAtMjgsNyArMjgsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBSdW5UZXN0czo6SW5SYW5kb21PcmRlcjoKICAgICAgICAgICAgICAgICBzZWVkUm5nKCBjb25maWcgKTsKLSAgICAgICAgICAgICAgICBSYW5kb21OdW1iZXJHZW5lcmF0b3I6OnNodWZmbGUoIHNvcnRlZCApOworICAgICAgICAgICAgICAgIHN0ZDo6c2h1ZmZsZSggc29ydGVkLmJlZ2luKCksIHNvcnRlZC5lbmQoKSwgcm5nKCkgKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUnVuVGVzdHM6OkluRGVjbGFyYXRpb25PcmRlcjoKICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGluIGRlY2xhcmF0aW9uIG9yZGVyCkBAIC05Niw3ICs5Niw3IEBACiAgICAgICAgIG1fdGVzdEFzRnVuY3Rpb24oKTsKICAgICB9CiAKLSAgICBzdGQ6OnN0cmluZyBleHRyYWN0Q2xhc3NOYW1lKCBzdGQ6OnN0cmluZyBjb25zdCYgY2xhc3NPclF1YWxpZmllZE1ldGhvZE5hbWUgKSB7CisgICAgc3RkOjpzdHJpbmcgZXh0cmFjdENsYXNzTmFtZSggU3RyaW5nUmVmIGNvbnN0JiBjbGFzc09yUXVhbGlmaWVkTWV0aG9kTmFtZSApIHsKICAgICAgICAgc3RkOjpzdHJpbmcgY2xhc3NOYW1lID0gY2xhc3NPclF1YWxpZmllZE1ldGhvZE5hbWU7CiAgICAgICAgIGlmKCBzdGFydHNXaXRoKCBjbGFzc05hbWUsICcmJyApICkKICAgICAgICAgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfcmVnaXN0cnlfaW1wbC5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfcmVnaXN0cnlfaW1wbC5oCmluZGV4IGFkNDVlNWEuLjhkYzViMGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX3JlZ2lzdHJ5X2ltcGwuaAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV9yZWdpc3RyeV9pbXBsLmgKQEAgLTIyLDcgKzIyLDcgQEAKICAgICBjbGFzcyBUZXN0Q2FzZTsKICAgICBzdHJ1Y3QgSUNvbmZpZzsKIAotICAgIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBzb3J0VGVzdHMoIElDb25maWcgY29uc3QmIGNvbmZpZywgc3RkOjp2ZWN0b3I8VGVzdENhc2U+IGNvbnN0JiB1bnNvcnRlZFRlc3RDYXNlcyApOyAKKyAgICBzdGQ6OnZlY3RvcjxUZXN0Q2FzZT4gc29ydFRlc3RzKCBJQ29uZmlnIGNvbnN0JiBjb25maWcsIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBjb25zdCYgdW5zb3J0ZWRUZXN0Q2FzZXMgKTsKICAgICBib29sIG1hdGNoVGVzdCggVGVzdENhc2UgY29uc3QmIHRlc3RDYXNlLCBUZXN0U3BlYyBjb25zdCYgdGVzdFNwZWMsIElDb25maWcgY29uc3QmIGNvbmZpZyApOwogCiAgICAgdm9pZCBlbmZvcmNlTm9EdXBsaWNhdGVUZXN0Q2FzZXMoIHN0ZDo6dmVjdG9yPFRlc3RDYXNlPiBjb25zdCYgZnVuY3Rpb25zICk7CkBAIC01OCw3ICs1OCw3IEBACiAgICAgfTsKIAogCi0gICAgc3RkOjpzdHJpbmcgZXh0cmFjdENsYXNzTmFtZSggc3RkOjpzdHJpbmcgY29uc3QmIGNsYXNzT3JRdWFsaWZpZWRNZXRob2ROYW1lICk7CisgICAgc3RkOjpzdHJpbmcgZXh0cmFjdENsYXNzTmFtZSggU3RyaW5nUmVmIGNvbnN0JiBjbGFzc09yUXVhbGlmaWVkTWV0aG9kTmFtZSApOwogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX3RyYWNrZXIuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfdHJhY2tlci5jcHAKaW5kZXggNjZkYTg5ZS4uMjEwZjI3MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfdHJhY2tlci5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfdHJhY2tlci5jcHAKQEAgLTEwLDcgKzEwLDcgQEAKICNpbmNsdWRlICJjYXRjaF9lbmZvcmNlLmgiCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y2Fzc2VydD4KICNpbmNsdWRlIDxzdGRleGNlcHQ+CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHNzdHJlYW0+CkBAIC02OSwxNCArNjksNiBAQAogICAgIH0KIAogCi0KLSAgICBUcmFja2VyQmFzZTo6VHJhY2tlckhhc05hbWU6OlRyYWNrZXJIYXNOYW1lKCBOYW1lQW5kTG9jYXRpb24gY29uc3QmIG5hbWVBbmRMb2NhdGlvbiApIDogbV9uYW1lQW5kTG9jYXRpb24oIG5hbWVBbmRMb2NhdGlvbiApIHt9Ci0gICAgYm9vbCBUcmFja2VyQmFzZTo6VHJhY2tlckhhc05hbWU6Om9wZXJhdG9yICgpKCBJVHJhY2tlclB0ciBjb25zdCYgdHJhY2tlciApIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICB0cmFja2VyLT5uYW1lQW5kTG9jYXRpb24oKS5uYW1lID09IG1fbmFtZUFuZExvY2F0aW9uLm5hbWUgJiYKLSAgICAgICAgICAgIHRyYWNrZXItPm5hbWVBbmRMb2NhdGlvbigpLmxvY2F0aW9uID09IG1fbmFtZUFuZExvY2F0aW9uLmxvY2F0aW9uOwotICAgIH0KLQogICAgIFRyYWNrZXJCYXNlOjpUcmFja2VyQmFzZSggTmFtZUFuZExvY2F0aW9uIGNvbnN0JiBuYW1lQW5kTG9jYXRpb24sIFRyYWNrZXJDb250ZXh0JiBjdHgsIElUcmFja2VyKiBwYXJlbnQgKQogICAgIDogICBtX25hbWVBbmRMb2NhdGlvbiggbmFtZUFuZExvY2F0aW9uICksCiAgICAgICAgIG1fY3R4KCBjdHggKSwKQEAgLTEwNSw3ICs5NywxMiBAQAogICAgIH0KIAogICAgIElUcmFja2VyUHRyIFRyYWNrZXJCYXNlOjpmaW5kQ2hpbGQoIE5hbWVBbmRMb2NhdGlvbiBjb25zdCYgbmFtZUFuZExvY2F0aW9uICkgewotICAgICAgICBhdXRvIGl0ID0gc3RkOjpmaW5kX2lmKCBtX2NoaWxkcmVuLmJlZ2luKCksIG1fY2hpbGRyZW4uZW5kKCksIFRyYWNrZXJIYXNOYW1lKCBuYW1lQW5kTG9jYXRpb24gKSApOworICAgICAgICBhdXRvIGl0ID0gc3RkOjpmaW5kX2lmKCBtX2NoaWxkcmVuLmJlZ2luKCksIG1fY2hpbGRyZW4uZW5kKCksCisgICAgICAgICAgICBbJm5hbWVBbmRMb2NhdGlvbl0oIElUcmFja2VyUHRyIGNvbnN0JiB0cmFja2VyICl7CisgICAgICAgICAgICAgICAgcmV0dXJuCisgICAgICAgICAgICAgICAgICAgIHRyYWNrZXItPm5hbWVBbmRMb2NhdGlvbigpLmxvY2F0aW9uID09IG5hbWVBbmRMb2NhdGlvbi5sb2NhdGlvbiAmJgorICAgICAgICAgICAgICAgICAgICB0cmFja2VyLT5uYW1lQW5kTG9jYXRpb24oKS5uYW1lID09IG5hbWVBbmRMb2NhdGlvbi5uYW1lOworICAgICAgICAgICAgfSApOwogICAgICAgICByZXR1cm4oIGl0ICE9IG1fY2hpbGRyZW4uZW5kKCkgKQogICAgICAgICAgICAgPyAqaXQKICAgICAgICAgICAgIDogbnVsbHB0cjsKQEAgLTEyNCw3ICsxMjEsNyBAQAogICAgIH0KIAogICAgIGJvb2wgVHJhY2tlckJhc2U6OmlzU2VjdGlvblRyYWNrZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIGJvb2wgVHJhY2tlckJhc2U6OmlzSW5kZXhUcmFja2VyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBib29sIFRyYWNrZXJCYXNlOjppc0dlbmVyYXRvclRyYWNrZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdm9pZCBUcmFja2VyQmFzZTo6b3BlbigpIHsKICAgICAgICAgbV9ydW5TdGF0ZSA9IEV4ZWN1dGluZzsKQEAgLTE5Myw2ICsxOTAsMTcgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgU2VjdGlvblRyYWNrZXI6OmlzQ29tcGxldGUoKSBjb25zdCB7CisgICAgICAgIGJvb2wgY29tcGxldGUgPSB0cnVlOworCisgICAgICAgIGlmICgobV9maWx0ZXJzLmVtcHR5KCkgfHwgbV9maWx0ZXJzWzBdID09ICIiKSB8fAorICAgICAgICAgICAgIHN0ZDo6ZmluZChtX2ZpbHRlcnMuYmVnaW4oKSwgbV9maWx0ZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICBtX25hbWVBbmRMb2NhdGlvbi5uYW1lKSAhPSBtX2ZpbHRlcnMuZW5kKCkpCisgICAgICAgICAgICBjb21wbGV0ZSA9IFRyYWNrZXJCYXNlOjppc0NvbXBsZXRlKCk7CisgICAgICAgIHJldHVybiBjb21wbGV0ZTsKKworICAgIH0KKwogICAgIGJvb2wgU2VjdGlvblRyYWNrZXI6OmlzU2VjdGlvblRyYWNrZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBTZWN0aW9uVHJhY2tlciYgU2VjdGlvblRyYWNrZXI6OmFjcXVpcmUoIFRyYWNrZXJDb250ZXh0JiBjdHgsIE5hbWVBbmRMb2NhdGlvbiBjb25zdCYgbmFtZUFuZExvY2F0aW9uICkgewpAQCAtMjMwLDU1ICsyMzgsMTEgQEAKICAgICAgICAgICAgIG1fZmlsdGVycy5pbnNlcnQoIG1fZmlsdGVycy5lbmQoKSwgKytmaWx0ZXJzLmJlZ2luKCksIGZpbHRlcnMuZW5kKCkgKTsKICAgICB9CiAKLSAgICBJbmRleFRyYWNrZXI6OkluZGV4VHJhY2tlciggTmFtZUFuZExvY2F0aW9uIGNvbnN0JiBuYW1lQW5kTG9jYXRpb24sIFRyYWNrZXJDb250ZXh0JiBjdHgsIElUcmFja2VyKiBwYXJlbnQsIGludCBzaXplICkKLSAgICA6ICAgVHJhY2tlckJhc2UoIG5hbWVBbmRMb2NhdGlvbiwgY3R4LCBwYXJlbnQgKSwKLSAgICAgICAgbV9zaXplKCBzaXplICkKLSAgICB7fQotCi0gICAgYm9vbCBJbmRleFRyYWNrZXI6OmlzSW5kZXhUcmFja2VyKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgSW5kZXhUcmFja2VyJiBJbmRleFRyYWNrZXI6OmFjcXVpcmUoIFRyYWNrZXJDb250ZXh0JiBjdHgsIE5hbWVBbmRMb2NhdGlvbiBjb25zdCYgbmFtZUFuZExvY2F0aW9uLCBpbnQgc2l6ZSApIHsKLSAgICAgICAgc3RkOjpzaGFyZWRfcHRyPEluZGV4VHJhY2tlcj4gdHJhY2tlcjsKLQotICAgICAgICBJVHJhY2tlciYgY3VycmVudFRyYWNrZXIgPSBjdHguY3VycmVudFRyYWNrZXIoKTsKLSAgICAgICAgaWYoIElUcmFja2VyUHRyIGNoaWxkVHJhY2tlciA9IGN1cnJlbnRUcmFja2VyLmZpbmRDaGlsZCggbmFtZUFuZExvY2F0aW9uICkgKSB7Ci0gICAgICAgICAgICBhc3NlcnQoIGNoaWxkVHJhY2tlciApOwotICAgICAgICAgICAgYXNzZXJ0KCBjaGlsZFRyYWNrZXItPmlzSW5kZXhUcmFja2VyKCkgKTsKLSAgICAgICAgICAgIHRyYWNrZXIgPSBzdGQ6OnN0YXRpY19wb2ludGVyX2Nhc3Q8SW5kZXhUcmFja2VyPiggY2hpbGRUcmFja2VyICk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICB0cmFja2VyID0gc3RkOjptYWtlX3NoYXJlZDxJbmRleFRyYWNrZXI+KCBuYW1lQW5kTG9jYXRpb24sIGN0eCwgJmN1cnJlbnRUcmFja2VyLCBzaXplICk7Ci0gICAgICAgICAgICBjdXJyZW50VHJhY2tlci5hZGRDaGlsZCggdHJhY2tlciApOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYoICFjdHguY29tcGxldGVkQ3ljbGUoKSAmJiAhdHJhY2tlci0+aXNDb21wbGV0ZSgpICkgewotICAgICAgICAgICAgaWYoIHRyYWNrZXItPm1fcnVuU3RhdGUgIT0gRXhlY3V0aW5nQ2hpbGRyZW4gJiYgdHJhY2tlci0+bV9ydW5TdGF0ZSAhPSBOZWVkc0Fub3RoZXJSdW4gKQotICAgICAgICAgICAgICAgIHRyYWNrZXItPm1vdmVOZXh0KCk7Ci0gICAgICAgICAgICB0cmFja2VyLT5vcGVuKCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gKnRyYWNrZXI7Ci0gICAgfQotCi0gICAgaW50IEluZGV4VHJhY2tlcjo6aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Ci0KLSAgICB2b2lkIEluZGV4VHJhY2tlcjo6bW92ZU5leHQoKSB7Ci0gICAgICAgIG1faW5kZXgrKzsKLSAgICAgICAgbV9jaGlsZHJlbi5jbGVhcigpOwotICAgIH0KLQotICAgIHZvaWQgSW5kZXhUcmFja2VyOjpjbG9zZSgpIHsKLSAgICAgICAgVHJhY2tlckJhc2U6OmNsb3NlKCk7Ci0gICAgICAgIGlmKCBtX3J1blN0YXRlID09IENvbXBsZXRlZFN1Y2Nlc3NmdWxseSAmJiBtX2luZGV4IDwgbV9zaXplLTEgKQotICAgICAgICAgICAgbV9ydW5TdGF0ZSA9IEV4ZWN1dGluZzsKLSAgICB9Ci0KIH0gLy8gbmFtZXNwYWNlIFRlc3RDYXNlVHJhY2tpbmcKIAogdXNpbmcgVGVzdENhc2VUcmFja2luZzo6SVRyYWNrZXI7CiB1c2luZyBUZXN0Q2FzZVRyYWNraW5nOjpUcmFja2VyQ29udGV4dDsKIHVzaW5nIFRlc3RDYXNlVHJhY2tpbmc6OlNlY3Rpb25UcmFja2VyOwotdXNpbmcgVGVzdENhc2VUcmFja2luZzo6SW5kZXhUcmFja2VyOwogCiB9IC8vIG5hbWVzcGFjZSBDYXRjaAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV90cmFja2VyLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV90cmFja2VyLmgKaW5kZXggYTRiMDQ0MC4uMTcyNzYwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfdHJhY2tlci5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX3RyYWNrZXIuaApAQCAtNTQsNyArNTQsNyBAQAogCiAgICAgICAgIC8vIERlYnVnLyBjaGVja2luZwogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNTZWN0aW9uVHJhY2tlcigpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGlzSW5kZXhUcmFja2VyKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wgaXNHZW5lcmF0b3JUcmFja2VyKCkgY29uc3QgPSAwOwogICAgIH07CiAKICAgICBjbGFzcyBUcmFja2VyQ29udGV4dCB7CkBAIC05NSwxMyArOTUsNiBAQAogICAgICAgICAgICAgRmFpbGVkCiAgICAgICAgIH07CiAKLSAgICAgICAgY2xhc3MgVHJhY2tlckhhc05hbWUgewotICAgICAgICAgICAgTmFtZUFuZExvY2F0aW9uIG1fbmFtZUFuZExvY2F0aW9uOwotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBUcmFja2VySGFzTmFtZSggTmFtZUFuZExvY2F0aW9uIGNvbnN0JiBuYW1lQW5kTG9jYXRpb24gKTsKLSAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IgKCkoIElUcmFja2VyUHRyIGNvbnN0JiB0cmFja2VyICkgY29uc3Q7Ci0gICAgICAgIH07Ci0KICAgICAgICAgdXNpbmcgQ2hpbGRyZW4gPSBzdGQ6OnZlY3RvcjxJVHJhY2tlclB0cj47CiAgICAgICAgIE5hbWVBbmRMb2NhdGlvbiBtX25hbWVBbmRMb2NhdGlvbjsKICAgICAgICAgVHJhY2tlckNvbnRleHQmIG1fY3R4OwpAQCAtMTI3LDcgKzEyMCw3IEBACiAgICAgICAgIHZvaWQgb3BlbkNoaWxkKCkgb3ZlcnJpZGU7CiAKICAgICAgICAgYm9vbCBpc1NlY3Rpb25UcmFja2VyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgICAgIGJvb2wgaXNJbmRleFRyYWNrZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBpc0dlbmVyYXRvclRyYWNrZXIoKSBjb25zdCBvdmVycmlkZTsKIAogICAgICAgICB2b2lkIG9wZW4oKTsKIApAQCAtMTQ3LDYgKzE0MCw4IEBACiAKICAgICAgICAgYm9vbCBpc1NlY3Rpb25UcmFja2VyKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisKICAgICAgICAgc3RhdGljIFNlY3Rpb25UcmFja2VyJiBhY3F1aXJlKCBUcmFja2VyQ29udGV4dCYgY3R4LCBOYW1lQW5kTG9jYXRpb24gY29uc3QmIG5hbWVBbmRMb2NhdGlvbiApOwogCiAgICAgICAgIHZvaWQgdHJ5T3BlbigpOwpAQCAtMTU1LDI4ICsxNTAsMTEgQEAKICAgICAgICAgdm9pZCBhZGROZXh0RmlsdGVycyggc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBmaWx0ZXJzICk7CiAgICAgfTsKIAotICAgIGNsYXNzIEluZGV4VHJhY2tlciA6IHB1YmxpYyBUcmFja2VyQmFzZSB7Ci0gICAgICAgIGludCBtX3NpemU7Ci0gICAgICAgIGludCBtX2luZGV4ID0gLTE7Ci0gICAgcHVibGljOgotICAgICAgICBJbmRleFRyYWNrZXIoIE5hbWVBbmRMb2NhdGlvbiBjb25zdCYgbmFtZUFuZExvY2F0aW9uLCBUcmFja2VyQ29udGV4dCYgY3R4LCBJVHJhY2tlciogcGFyZW50LCBpbnQgc2l6ZSApOwotCi0gICAgICAgIGJvb2wgaXNJbmRleFRyYWNrZXIoKSBjb25zdCBvdmVycmlkZTsKLSAgICAgICAgdm9pZCBjbG9zZSgpIG92ZXJyaWRlOwotCi0gICAgICAgIHN0YXRpYyBJbmRleFRyYWNrZXImIGFjcXVpcmUoIFRyYWNrZXJDb250ZXh0JiBjdHgsIE5hbWVBbmRMb2NhdGlvbiBjb25zdCYgbmFtZUFuZExvY2F0aW9uLCBpbnQgc2l6ZSApOwotCi0gICAgICAgIGludCBpbmRleCgpIGNvbnN0OwotCi0gICAgICAgIHZvaWQgbW92ZU5leHQoKTsKLSAgICB9OwotCiB9IC8vIG5hbWVzcGFjZSBUZXN0Q2FzZVRyYWNraW5nCiAKIHVzaW5nIFRlc3RDYXNlVHJhY2tpbmc6OklUcmFja2VyOwogdXNpbmcgVGVzdENhc2VUcmFja2luZzo6VHJhY2tlckNvbnRleHQ7CiB1c2luZyBUZXN0Q2FzZVRyYWNraW5nOjpTZWN0aW9uVHJhY2tlcjsKLXVzaW5nIFRlc3RDYXNlVHJhY2tpbmc6OkluZGV4VHJhY2tlcjsKIAogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X3JlZ2lzdHJ5LmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9yZWdpc3RyeS5jcHAKaW5kZXggMGY2YzgzZS4uMjQ4YmVlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X3JlZ2lzdHJ5LmNwcAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfcmVnaXN0cnkuY3BwCkBAIC02LDYgKzYsNyBAQAogICovCiAKICNpbmNsdWRlICJjYXRjaF90ZXN0X3JlZ2lzdHJ5LmgiCisjaW5jbHVkZSAiY2F0Y2hfY29tcGlsZXJfY2FwYWJpbGl0aWVzLmgiCiAjaW5jbHVkZSAiY2F0Y2hfdGVzdF9jYXNlX3JlZ2lzdHJ5X2ltcGwuaCIKICNpbmNsdWRlICJjYXRjaF9pbnRlcmZhY2VzX3JlZ2lzdHJ5X2h1Yi5oIgogCkBAIC0xNSwyMyArMTYsMjIgQEAKICAgICAgICAgcmV0dXJuIG5ldyhzdGQ6Om5vdGhyb3cpIFRlc3RJbnZva2VyQXNGdW5jdGlvbiggdGVzdEFzRnVuY3Rpb24gKTsKICAgICB9CiAKLSAgICBOYW1lQW5kVGFnczo6TmFtZUFuZFRhZ3MoIFN0cmluZ1JlZiBuYW1lXyAsIFN0cmluZ1JlZiB0YWdzXyApIG5vZXhjZXB0IDogbmFtZSggbmFtZV8gKSwgdGFncyggdGFnc18gKSB7fQorICAgIE5hbWVBbmRUYWdzOjpOYW1lQW5kVGFncyggU3RyaW5nUmVmIGNvbnN0JiBuYW1lXyAsIFN0cmluZ1JlZiBjb25zdCYgdGFnc18gKSBub2V4Y2VwdCA6IG5hbWUoIG5hbWVfICksIHRhZ3MoIHRhZ3NfICkge30KIAotICAgIEF1dG9SZWc6OkF1dG9SZWcoIElUZXN0SW52b2tlciogaW52b2tlciwgU291cmNlTGluZUluZm8gY29uc3QmIGxpbmVJbmZvLCBTdHJpbmdSZWYgY2xhc3NPck1ldGhvZCwgTmFtZUFuZFRhZ3MgY29uc3QmIG5hbWVBbmRUYWdzICkgbm9leGNlcHQgewotICAgICAgICBDQVRDSF9JTlRFUk5BTF9UUlkgeworICAgIEF1dG9SZWc6OkF1dG9SZWcoIElUZXN0SW52b2tlciogaW52b2tlciwgU291cmNlTGluZUluZm8gY29uc3QmIGxpbmVJbmZvLCBTdHJpbmdSZWYgY29uc3QmIGNsYXNzT3JNZXRob2QsIE5hbWVBbmRUYWdzIGNvbnN0JiBuYW1lQW5kVGFncyApIG5vZXhjZXB0IHsKKyAgICAgICAgQ0FUQ0hfVFJZIHsKICAgICAgICAgICAgIGdldE11dGFibGVSZWdpc3RyeUh1YigpCiAgICAgICAgICAgICAgICAgICAgIC5yZWdpc3RlclRlc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICBtYWtlVGVzdENhc2UoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW52b2tlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYWN0Q2xhc3NOYW1lKCBjbGFzc09yTWV0aG9kICksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZUFuZFRhZ3MubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lQW5kVGFncy50YWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVBbmRUYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVJbmZvKSk7Ci0gICAgICAgIH0gQ0FUQ0hfSU5URVJOQUxfQ0FUQ0hfQUxMKCkgeworICAgICAgICB9IENBVENIX0NBVENIX0FMTCB7CiAgICAgICAgICAgICAvLyBEbyBub3QgdGhyb3cgd2hlbiBjb25zdHJ1Y3RpbmcgZ2xvYmFsIG9iamVjdHMsIGluc3RlYWQgcmVnaXN0ZXIgdGhlIGV4Y2VwdGlvbiB0byBiZSBwcm9jZXNzZWQgbGF0ZXIKICAgICAgICAgICAgIGdldE11dGFibGVSZWdpc3RyeUh1YigpLnJlZ2lzdGVyU3RhcnR1cEV4Y2VwdGlvbigpOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgQXV0b1JlZzo6fkF1dG9SZWcoKSA9IGRlZmF1bHQ7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rlc3RfcmVnaXN0cnkuaCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9yZWdpc3RyeS5oCmluZGV4IDg0MDAxMDEuLjBlN2I1M2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9yZWdpc3RyeS5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9yZWdpc3RyeS5oCkBAIC0xMiw2ICsxMiw5IEBACiAjaW5jbHVkZSAiY2F0Y2hfaW50ZXJmYWNlc190ZXN0Y2FzZS5oIgogI2luY2x1ZGUgImNhdGNoX2NvbXBpbGVyX2NhcGFiaWxpdGllcy5oIgogI2luY2x1ZGUgImNhdGNoX3N0cmluZ3JlZi5oIgorI2luY2x1ZGUgImNhdGNoX3R5cGVfdHJhaXRzLmhwcCIKKyNpbmNsdWRlICJjYXRjaF9wcmVwcm9jZXNzb3IuaHBwIgorI2luY2x1ZGUgImNhdGNoX21ldGEuaHBwIgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCkBAIC0zNSwxMyArMzgsMTMgQEAKIH0KIAogc3RydWN0IE5hbWVBbmRUYWdzIHsKLSAgICBOYW1lQW5kVGFncyggU3RyaW5nUmVmIG5hbWVfID0gU3RyaW5nUmVmKCksIFN0cmluZ1JlZiB0YWdzXyA9IFN0cmluZ1JlZigpICkgbm9leGNlcHQ7CisgICAgTmFtZUFuZFRhZ3MoIFN0cmluZ1JlZiBjb25zdCYgbmFtZV8gPSBTdHJpbmdSZWYoKSwgU3RyaW5nUmVmIGNvbnN0JiB0YWdzXyA9IFN0cmluZ1JlZigpICkgbm9leGNlcHQ7CiAgICAgU3RyaW5nUmVmIG5hbWU7CiAgICAgU3RyaW5nUmVmIHRhZ3M7CiB9OwogCiBzdHJ1Y3QgQXV0b1JlZyA6IE5vbkNvcHlhYmxlIHsKLSAgICBBdXRvUmVnKCBJVGVzdEludm9rZXIqIGludm9rZXIsIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbywgU3RyaW5nUmVmIGNsYXNzT3JNZXRob2QsIE5hbWVBbmRUYWdzIGNvbnN0JiBuYW1lQW5kVGFncyApIG5vZXhjZXB0OworICAgIEF1dG9SZWcoIElUZXN0SW52b2tlciogaW52b2tlciwgU291cmNlTGluZUluZm8gY29uc3QmIGxpbmVJbmZvLCBTdHJpbmdSZWYgY29uc3QmIGNsYXNzT3JNZXRob2QsIE5hbWVBbmRUYWdzIGNvbnN0JiBuYW1lQW5kVGFncyApIG5vZXhjZXB0OwogICAgIH5BdXRvUmVnKCk7CiB9OwogCkBAIC01MiwxOSArNTUsMzAgQEAKICAgICAgICAgc3RhdGljIHZvaWQgVGVzdE5hbWUoKQogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTiggVGVzdE5hbWUsIENsYXNzTmFtZSwgLi4uICkgXAogICAgICAgICBuYW1lc3BhY2V7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIDogQ2xhc3NOYW1lIHsgXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIDogSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhDbGFzc05hbWUpIHsgXAogICAgICAgICAgICAgICAgIHZvaWQgdGVzdCgpOyAgICAgICAgICAgICAgXAogICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB2b2lkIFRlc3ROYW1lOjp0ZXN0KCkKLQorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTiggVGVzdE5hbWUsIC4uLiApICBcCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhdGljIHZvaWQgVGVzdE5hbWUoKQorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9OT19SRUdJU1RSQVRJT04oIFRlc3ROYW1lLCBDbGFzc05hbWUsIC4uLiApICAgIFwKKyAgICAgICAgbmFtZXNwYWNleyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIDogSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhDbGFzc05hbWUgPFRlc3RUeXBlPikgeyAgICAgXAorICAgICAgICAgICAgICAgIHZvaWQgdGVzdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdm9pZCBUZXN0TmFtZTo6dGVzdCgpCiAjZW5kaWYKIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFU1RDQVNFMiggVGVzdE5hbWUsIC4uLiApIFwKICAgICAgICAgc3RhdGljIHZvaWQgVGVzdE5hbWUoKTsgXAogICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKLSAgICAgICAgbmFtZXNwYWNleyBDYXRjaDo6QXV0b1JlZyBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggYXV0b1JlZ2lzdHJhciApKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCAmVGVzdE5hbWUgKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sICIiLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IF9fVkFfQVJHU19fIH0gKTsgfSAvKiBOT0xJTlQgKi8gXAorICAgICAgICBuYW1lc3BhY2V7IENhdGNoOjpBdXRvUmVnIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBhdXRvUmVnaXN0cmFyICkoIENhdGNoOjptYWtlVGVzdEludm9rZXIoICZUZXN0TmFtZSApLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ2F0Y2g6OlN0cmluZ1JlZigpLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IF9fVkFfQVJHU19fIH0gKTsgfSAvKiBOT0xJTlQgKi8gXAogICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgICAgICBzdGF0aWMgdm9pZCBUZXN0TmFtZSgpCiAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRSggLi4uICkgXApAQCAtODAsNyArOTQsNyBAQAogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVTVF9DQVNFX01FVEhPRDIoIFRlc3ROYW1lLCBDbGFzc05hbWUsIC4uLiApXAogICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKICAgICAgICAgbmFtZXNwYWNleyBcCi0gICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWUgOiBDbGFzc05hbWV7IFwKKyAgICAgICAgICAgIHN0cnVjdCBUZXN0TmFtZSA6IElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoQ2xhc3NOYW1lKSB7IFwKICAgICAgICAgICAgICAgICB2b2lkIHRlc3QoKTsgXAogICAgICAgICAgICAgfTsgXAogICAgICAgICAgICAgQ2F0Y2g6OkF1dG9SZWcgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGF1dG9SZWdpc3RyYXIgKSAoIENhdGNoOjptYWtlVGVzdEludm9rZXIoICZUZXN0TmFtZTo6dGVzdCApLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgI0NsYXNzTmFtZSwgQ2F0Y2g6Ok5hbWVBbmRUYWdzeyBfX1ZBX0FSR1NfXyB9ICk7IC8qIE5PTElOVCAqLyBcCkBAIC05Myw4ICsxMDcsMTUxIEBACiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfUkVHSVNURVJfVEVTVENBU0UoIEZ1bmN0aW9uLCAuLi4gKSBcCiAgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAotICAgICAgICBDYXRjaDo6QXV0b1JlZyBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggYXV0b1JlZ2lzdHJhciApKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCBGdW5jdGlvbiApLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgIiIsIENhdGNoOjpOYW1lQW5kVGFnc3sgX19WQV9BUkdTX18gfSApOyAvKiBOT0xJTlQgKi8gXAorICAgICAgICBDYXRjaDo6QXV0b1JlZyBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggYXV0b1JlZ2lzdHJhciApKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCBGdW5jdGlvbiApLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ2F0Y2g6OlN0cmluZ1JlZigpLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IF9fVkFfQVJHU19fIH0gKTsgLyogTk9MSU5UICovIFwKICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTCiAKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfMihUZXN0TmFtZSwgVGVzdEZ1bmMsIE5hbWUsIFRhZ3MsIC4uLiApXAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGVzdFR5cGU+IFwKKyAgICAgICAgc3RhdGljIHZvaWQgVGVzdEZ1bmMoKTtcCisgICAgICAgIG5hbWVzcGFjZSB7XAorICAgICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi5UeXBlcz4gXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1le1wKKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLlRzPiBcCisgICAgICAgICAgICAgICAgVGVzdE5hbWUoVHMuLi5uYW1lcyl7XAorICAgICAgICAgICAgICAgICAgICBDQVRDSF9JTlRFUk5BTF9DSEVDS19VTklRVUVfVFlQRVMoQ0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUywgX19WQV9BUkdTX18pKSBcCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIGV4cGFuZGVyID0gaW50W107XAorICAgICAgICAgICAgICAgICAgICAodm9pZClleHBhbmRlcnsoQ2F0Y2g6OkF1dG9SZWcoIENhdGNoOjptYWtlVGVzdEludm9rZXIoICZUZXN0RnVuYzxUeXBlcz4gKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENhdGNoOjpTdHJpbmdSZWYoKSwgQ2F0Y2g6Ok5hbWVBbmRUYWdzeyBuYW1lcywgVGFncyB9ICksIDApLi4uIH07LyogTk9MSU5UICovIFwKKyAgICAgICAgICAgICAgICB9XAorICAgICAgICAgICAgfTtcCisgICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9SRUdJU1RSWV9JTklUSUFURShUZXN0TmFtZSwgTmFtZSwgX19WQV9BUkdTX18pIFwKKyAgICAgICAgfVwKKyAgICAgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGVzdFR5cGU+IFwKKyAgICAgICAgc3RhdGljIHZvaWQgVGVzdEZ1bmMoKQorCisjaWYgZGVmaW5lZChDQVRDSF9DUFAxN19PUl9HUkVBVEVSKQorI2RlZmluZSBDQVRDSF9JTlRFUk5BTF9DSEVDS19VTklRVUVfVFlQRVMoLi4uKSBzdGF0aWNfYXNzZXJ0KENhdGNoOjppc191bmlxdWU8X19WQV9BUkdTX18+LCJEdXBsaWNhdGUgdHlwZSBkZXRlY3RlZCBpbiBkZWNsYXJhdGlvbiBvZiB0ZW1wbGF0ZSB0ZXN0IGNhc2UiKTsKKyNlbHNlCisjZGVmaW5lIENBVENIX0lOVEVSTkFMX0NIRUNLX1VOSVFVRV9UWVBFUyguLi4pIHN0YXRpY19hc3NlcnQoQ2F0Y2g6OmlzX3VuaXF1ZTxfX1ZBX0FSR1NfXz46OnZhbHVlLCJEdXBsaWNhdGUgdHlwZSBkZXRlY3RlZCBpbiBkZWNsYXJhdGlvbiBvZiB0ZW1wbGF0ZSB0ZXN0IGNhc2UiKTsKKyNlbmRpZgorCisjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKE5hbWUsIFRhZ3MsIC4uLikgXAorICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0ZfVV9OX0NfX19fICksIE5hbWUsIFRhZ3MsIF9fVkFfQVJHU19fICkKKyNlbHNlCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0UoTmFtZSwgVGFncywgLi4uKSBcCisgICAgICAgIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApICkKKyNlbmRpZgorCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9SRUdJU1RSWV9JTklUSUFURShUZXN0TmFtZSwgTmFtZSwgLi4uKVwKKyAgICAgICAgc3RhdGljIGludCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggZ2xvYmFsUmVnaXN0cmFyICkgPSBbXSgpe1wKKyAgICAgICAgICAgIFRlc3ROYW1lPENBVENIX1JFQ19MSVNUKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMsIF9fVkFfQVJHU19fKT4oQ0FUQ0hfUkVDX0xJU1RfVUQoSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUsTmFtZSwgX19WQV9BUkdTX18pKTtcCisgICAgICAgICAgICByZXR1cm4gMDtcCisgICAgICAgIH0oKTsKKworICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UyKFRlc3ROYW1lLCBUZXN0RnVuY05hbWUsIE5hbWUsIFRhZ3MsIFRtcGxUeXBlcywgVHlwZXNMaXN0KSBcCisgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gc3RhdGljIHZvaWQgVGVzdEZ1bmNOYW1lKCk7ICAgICAgIFwKKyAgICAgICAgbmFtZXNwYWNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUZXN0TmFtZSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX0NIRUNLX1VOSVFVRV9UWVBFUyhUeXBlcy4uLikgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgZXhwYW5kZXIgPSBpbnRbXTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiB0bXBsX3R5cGVzW10gPSB7Q0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFX1dJVEhPVVRfUEFSRU5TLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFRtcGxUeXBlcykpfTtcCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiB0eXBlc19saXN0W10gPSB7Q0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFX1dJVEhPVVRfUEFSRU5TLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFR5cGVzTGlzdCkpfTtcCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBhdXRvIG51bV90eXBlcyA9IHNpemVvZih0eXBlc19saXN0KSAvIHNpemVvZih0eXBlc19saXN0WzBdKTtcCisgICAgICAgICAgICAgICAgICAgICh2b2lkKWV4cGFuZGVyeyhDYXRjaDo6QXV0b1JlZyggQ2F0Y2g6Om1ha2VUZXN0SW52b2tlciggJlRlc3RGdW5jTmFtZTxUeXBlcz4gKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENhdGNoOjpTdHJpbmdSZWYoKSwgQ2F0Y2g6Ok5hbWVBbmRUYWdzeyBOYW1lICIgLSAiICsgc3RkOjpzdHJpbmcodG1wbF90eXBlc1tpbmRleCAvIG51bV90eXBlc10pICsgIjwiICsgc3RkOjpzdHJpbmcodHlwZXNfbGlzdFtpbmRleCAlIG51bV90eXBlc10pICsgIj4iLCBUYWdzIH0gKSwgaW5kZXgrKywgMCkuLi4gfTsvKiBOT0xJTlQgKi9cCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHN0YXRpYyBpbnQgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGdsb2JhbFJlZ2lzdHJhciApID0gW10oKXsgXAorICAgICAgICAgICAgICAgIHVzaW5nIFRlc3RJbml0ID0gQ2F0Y2g6OmNvbWJpbmU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhUbXBsVHlwZXMpPiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjp3aXRoX3R5cGVzPElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNUU19GUk9NX1RZUEVTKFR5cGVzTGlzdCk+OjppbnRvPFRlc3ROYW1lPjo6dHlwZTsgXAorICAgICAgICAgICAgICAgIFRlc3RJbml0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdGF0aWMgdm9pZCBUZXN0RnVuY05hbWUoKQorCisjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoTmFtZSwgVGFncywgLi4uKVwKKyAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UyKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLE5hbWUsVGFncyxfX1ZBX0FSR1NfXykKKyNlbHNlCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRShOYW1lLCBUYWdzLCAuLi4pXAorICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0ZfVV9OX0NfX19fICksIE5hbWUsIFRhZ3MsIF9fVkFfQVJHU19fICkgKQorI2VuZGlmCisKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfMiggVGVzdE5hbWVDbGFzcywgVGVzdE5hbWUsIENsYXNzTmFtZSwgTmFtZSwgVGFncywgLi4uICkgXAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKKyAgICAgICAgbmFtZXNwYWNleyBcCisgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIDogSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhDbGFzc05hbWUgPFRlc3RUeXBlPikgeyBcCisgICAgICAgICAgICAgICAgdm9pZCB0ZXN0KCk7XAorICAgICAgICAgICAgfTtcCisgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLlR5cGVzPiBcCisgICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWVDbGFzc3tcCisgICAgICAgICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi5Ucz4gXAorICAgICAgICAgICAgICAgIFRlc3ROYW1lQ2xhc3MoVHMuLi5uYW1lcyl7XAorICAgICAgICAgICAgICAgICAgICBDQVRDSF9JTlRFUk5BTF9DSEVDS19VTklRVUVfVFlQRVMoQ0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUywgX19WQV9BUkdTX18pKSBcCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIGV4cGFuZGVyID0gaW50W107XAorICAgICAgICAgICAgICAgICAgICAodm9pZClleHBhbmRlcnsoQ2F0Y2g6OkF1dG9SZWcoIENhdGNoOjptYWtlVGVzdEludm9rZXIoICZUZXN0TmFtZTxUeXBlcz46OnRlc3QgKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sICNDbGFzc05hbWUsIENhdGNoOjpOYW1lQW5kVGFnc3sgbmFtZXMsIFRhZ3MgfSApLCAwKS4uLiB9Oy8qIE5PTElOVCAqLyBcCisgICAgICAgICAgICAgICAgfVwKKyAgICAgICAgICAgIH07XAorICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUkVHSVNUUllfSU5JVElBVEUoVGVzdE5hbWVDbGFzcywgTmFtZSwgX19WQV9BUkdTX18pXAorICAgICAgICB9XAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1NcCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiBcCisgICAgICAgIHZvaWQgVGVzdE5hbWU8VGVzdFR5cGU+Ojp0ZXN0KCkKKworI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIENsYXNzTmFtZSwgTmFtZSwgVGFncywuLi4gKSBcCisgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fQ19MX0FfU19TX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSAsIENsYXNzTmFtZSwgTmFtZSwgVGFncywgX19WQV9BUkdTX18gKQorI2Vsc2UKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIENsYXNzTmFtZSwgTmFtZSwgVGFncywuLi4gKSBcCisgICAgICAgIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19DX0xfQV9TX1NfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApICwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApICkKKyNlbmRpZgorCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfMihUZXN0TmFtZUNsYXNzLCBUZXN0TmFtZSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBUbXBsVHlwZXMsIFR5cGVzTGlzdClcCisgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIDogSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhDbGFzc05hbWUgPFRlc3RUeXBlPikgeyBcCisgICAgICAgICAgICAgICAgdm9pZCB0ZXN0KCk7XAorICAgICAgICAgICAgfTtcCisgICAgICAgIG5hbWVzcGFjZSB7XAorICAgICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi5UeXBlcz5cCisgICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWVDbGFzc3tcCisgICAgICAgICAgICAgICAgVGVzdE5hbWVDbGFzcygpe1wKKyAgICAgICAgICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfQ0hFQ0tfVU5JUVVFX1RZUEVTKFR5cGVzLi4uKVwKKyAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gMDtcCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIGV4cGFuZGVyID0gaW50W107XAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgY2hhciBjb25zdCogdG1wbF90eXBlc1tdID0ge0NBVENIX1JFQ19MSVNUKElOVEVSTkFMX0NBVENIX1NUUklOR0laRV9XSVRIT1VUX1BBUkVOUywgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhUbXBsVHlwZXMpKX07XAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgY2hhciBjb25zdCogdHlwZXNfbGlzdFtdID0ge0NBVENIX1JFQ19MSVNUKElOVEVSTkFMX0NBVENIX1NUUklOR0laRV9XSVRIT1VUX1BBUkVOUywgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhUeXBlc0xpc3QpKX07XAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYXV0byBudW1fdHlwZXMgPSBzaXplb2YodHlwZXNfbGlzdCkgLyBzaXplb2YodHlwZXNfbGlzdFswXSk7XAorICAgICAgICAgICAgICAgICAgICAodm9pZClleHBhbmRlcnsoQ2F0Y2g6OkF1dG9SZWcoIENhdGNoOjptYWtlVGVzdEludm9rZXIoICZUZXN0TmFtZTxUeXBlcz46OnRlc3QgKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sICNDbGFzc05hbWUsIENhdGNoOjpOYW1lQW5kVGFnc3sgTmFtZSAiIC0gIiArIHN0ZDo6c3RyaW5nKHRtcGxfdHlwZXNbaW5kZXggLyBudW1fdHlwZXNdKSArICI8IiArIHN0ZDo6c3RyaW5nKHR5cGVzX2xpc3RbaW5kZXggJSBudW1fdHlwZXNdKSArICI+IiwgVGFncyB9ICksIGluZGV4KyssIDApLi4uIH07LyogTk9MSU5UICovIFwKKyAgICAgICAgICAgICAgICB9XAorICAgICAgICAgICAgfTtcCisgICAgICAgICAgICBzdGF0aWMgaW50IElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBnbG9iYWxSZWdpc3RyYXIgKSA9IFtdKCl7XAorICAgICAgICAgICAgICAgIHVzaW5nIFRlc3RJbml0ID0gQ2F0Y2g6OmNvbWJpbmU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhUbXBsVHlwZXMpPlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OndpdGhfdHlwZXM8SU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1RTX0ZST01fVFlQRVMoVHlwZXNMaXN0KT46OmludG88VGVzdE5hbWVDbGFzcz46OnR5cGU7XAorICAgICAgICAgICAgICAgIFRlc3RJbml0KCk7XAorICAgICAgICAgICAgICAgIHJldHVybiAwO1wKKyAgICAgICAgICAgIH0oKTsgXAorICAgICAgICB9XAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAorICAgICAgICB2b2lkIFRlc3ROYW1lPFRlc3RUeXBlPjo6dGVzdCgpCisKKyNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIENsYXNzTmFtZSwgTmFtZSwgVGFncywgLi4uIClcCisgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApCisjZWxzZQorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIC4uLiApXAorICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApICkKKyNlbmRpZgogCiAjZW5kaWYgLy8gVFdPQkxVRUNVQkVTX0NBVENIX1RFU1RfUkVHSVNUUllfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3RpbWVyLmNwcCBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGltZXIuY3BwCmluZGV4IGI5YWU2ODguLmNhMzgzYTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGltZXIuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGltZXIuY3BwCkBAIC0xMCwzMiArMTAsNDQgQEAKIAogI2luY2x1ZGUgPGNocm9ubz4KIAorc3RhdGljIGNvbnN0IHVpbnQ2NF90IG5hbm9zZWNvbmRzSW5TZWNvbmQgPSAxMDAwMDAwMDAwOworCiBuYW1lc3BhY2UgQ2F0Y2ggewogCiAgICAgYXV0byBnZXRDdXJyZW50TmFub3NlY29uZHNTaW5jZUVwb2NoKCkgLT4gdWludDY0X3QgewogICAgICAgICByZXR1cm4gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzPiggc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6bm93KCkudGltZV9zaW5jZV9lcG9jaCgpICkuY291bnQoKTsKICAgICB9CiAKLSAgICBhdXRvIGVzdGltYXRlQ2xvY2tSZXNvbHV0aW9uKCkgLT4gdWludDY0X3QgewotICAgICAgICB1aW50NjRfdCBzdW0gPSAwOwotICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaXRlcmF0aW9ucyA9IDEwMDAwMDA7CisgICAgbmFtZXNwYWNlIHsKKyAgICAgICAgYXV0byBlc3RpbWF0ZUNsb2NrUmVzb2x1dGlvbigpIC0+IHVpbnQ2NF90IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHN1bSA9IDA7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgaXRlcmF0aW9ucyA9IDEwMDAwMDA7CiAKLSAgICAgICAgZm9yKCBzdGQ6OnNpemVfdCBpID0gMDsgaSA8IGl0ZXJhdGlvbnM7ICsraSApIHsKKyAgICAgICAgICAgIGF1dG8gc3RhcnRUaW1lID0gZ2V0Q3VycmVudE5hbm9zZWNvbmRzU2luY2VFcG9jaCgpOwogCi0gICAgICAgICAgICB1aW50NjRfdCB0aWNrczsKLSAgICAgICAgICAgIHVpbnQ2NF90IGJhc2VUaWNrcyA9IGdldEN1cnJlbnROYW5vc2Vjb25kc1NpbmNlRXBvY2goKTsKLSAgICAgICAgICAgIGRvIHsKLSAgICAgICAgICAgICAgICB0aWNrcyA9IGdldEN1cnJlbnROYW5vc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICAgICAgICAgIGZvciggc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyArK2kgKSB7CisKKyAgICAgICAgICAgICAgICB1aW50NjRfdCB0aWNrczsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBiYXNlVGlja3MgPSBnZXRDdXJyZW50TmFub3NlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICB0aWNrcyA9IGdldEN1cnJlbnROYW5vc2Vjb25kc1NpbmNlRXBvY2goKTsKKyAgICAgICAgICAgICAgICB9IHdoaWxlKCB0aWNrcyA9PSBiYXNlVGlja3MgKTsKKworICAgICAgICAgICAgICAgIGF1dG8gZGVsdGEgPSB0aWNrcyAtIGJhc2VUaWNrczsKKyAgICAgICAgICAgICAgICBzdW0gKz0gZGVsdGE7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGJlZW4gY2FsaWJyYXRpbmcgZm9yIG92ZXIgMyBzZWNvbmRzIC0tIHRoZSBjbG9jaworICAgICAgICAgICAgICAgIC8vIGlzIHRlcnJpYmxlIGFuZCB3ZSBzaG91bGQgbW92ZSBvbi4KKyAgICAgICAgICAgICAgICAvLyBUQkQ6IEhvdyB0byBzaWduYWwgdGhhdCB0aGUgbWVhc3VyZWQgcmVzb2x1dGlvbiBpcyBwcm9iYWJseSB3cm9uZz8KKyAgICAgICAgICAgICAgICBpZiAodGlja3MgPiBzdGFydFRpbWUgKyAzICogbmFub3NlY29uZHNJblNlY29uZCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VtIC8gKCBpICsgMXUgKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB3aGlsZSggdGlja3MgPT0gYmFzZVRpY2tzICk7CiAKLSAgICAgICAgICAgIGF1dG8gZGVsdGEgPSB0aWNrcyAtIGJhc2VUaWNrczsKLSAgICAgICAgICAgIHN1bSArPSBkZWx0YTsKKyAgICAgICAgICAgIC8vIFdlJ3JlIGp1c3QgdGFraW5nIHRoZSBtZWFuLCBoZXJlLiBUbyBkbyBiZXR0ZXIgd2UgY291bGQgdGFrZSB0aGUgc3RkLiBkZXYgYW5kIGV4Y2x1ZGUgb3V0bGllcnMKKyAgICAgICAgICAgIC8vIC0gYW5kIHBvdGVudGlhbGx5IGRvIG1vcmUgaXRlcmF0aW9ucyBpZiB0aGVyZSdzIGEgaGlnaCB2YXJpYW5jZS4KKyAgICAgICAgICAgIHJldHVybiBzdW0vaXRlcmF0aW9uczsKICAgICAgICAgfQotCi0gICAgICAgIC8vIFdlJ3JlIGp1c3QgdGFraW5nIHRoZSBtZWFuLCBoZXJlLiBUbyBkbyBiZXR0ZXIgd2UgY291bGQgdGFrZSB0aGUgc3RkLiBkZXYgYW5kIGV4Y2x1ZGUgb3V0bGllcnMKLSAgICAgICAgLy8gLSBhbmQgcG90ZW50aWFsbHkgZG8gbW9yZSBpdGVyYXRpb25zIGlmIHRoZXJlJ3MgYSBoaWdoIHZhcmlhbmNlLgotICAgICAgICByZXR1cm4gc3VtL2l0ZXJhdGlvbnM7CiAgICAgfQogICAgIGF1dG8gZ2V0RXN0aW1hdGVkQ2xvY2tSZXNvbHV0aW9uKCkgLT4gdWludDY0X3QgewogICAgICAgICBzdGF0aWMgYXV0byBzX3Jlc29sdXRpb24gPSBlc3RpbWF0ZUNsb2NrUmVzb2x1dGlvbigpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90b19zdHJpbmcuaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90b19zdHJpbmcuaHBwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlMmI1ODcKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3RvX3N0cmluZy5ocHAKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqICBDcmVhdGVkIGJ5IE1hcnRpbiBvbiA5LzUvMjAxOC4KKyAqCisgKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorICovCisjaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9UT19TVFJJTkdfSF9JTkNMVURFRAorI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfVE9fU1RSSU5HX0hfSU5DTFVERUQKKworI2luY2x1ZGUgPHN0cmluZz4KKworI2luY2x1ZGUgImNhdGNoX2NvbXBpbGVyX2NhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgImNhdGNoX3N0cmVhbS5oIgorCituYW1lc3BhY2UgQ2F0Y2ggeworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIHN0ZDo6c3RyaW5nIHRvX3N0cmluZyhUIGNvbnN0JiB0KSB7CisjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTFfVE9fU1RSSU5HKQorICAgICAgICByZXR1cm4gc3RkOjp0b19zdHJpbmcodCk7CisjZWxzZQorICAgICAgICBSZXVzYWJsZVN0cmluZ1N0cmVhbSByc3M7CisgICAgICAgIHJzcyA8PCB0OworICAgICAgICByZXR1cm4gcnNzLnN0cigpOworI2VuZGlmCisgICAgfQorfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCisKKyNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfVE9fU1RSSU5HX0hfSU5DTFVERUQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdG9zdHJpbmcuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90b3N0cmluZy5jcHAKaW5kZXggYTlmNzczNS4uYjg1N2QzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90b3N0cmluZy5jcHAKKysrIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90b3N0cmluZy5jcHAKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlICJjYXRjaF90b3N0cmluZy5oIgogI2luY2x1ZGUgImNhdGNoX2ludGVyZmFjZXNfY29uZmlnLmgiCiAjaW5jbHVkZSAiY2F0Y2hfY29udGV4dC5oIgorI2luY2x1ZGUgImNhdGNoX3BvbHlmaWxscy5ocHAiCiAKICNpbmNsdWRlIDxjbWF0aD4KICNpbmNsdWRlIDxpb21hbmlwPgpAQCAtNjgsNyArNjksNyBAQAogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogc3RkOjpzdHJpbmcgZnBUb1N0cmluZyggVCB2YWx1ZSwgaW50IHByZWNpc2lvbiApIHsKLSAgICBpZiAoc3RkOjppc25hbih2YWx1ZSkpIHsKKyAgICBpZiAoQ2F0Y2g6OmlzbmFuKHZhbHVlKSkgewogICAgICAgICByZXR1cm4gIm5hbiI7CiAgICAgfQogCkBAIC0xMTYsMTQgKzExNywxMSBAQAogICAgIHJldHVybiBzOwogfQogCi1zdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjxzdGQ6OndzdHJpbmc+Ojpjb252ZXJ0KGNvbnN0IHN0ZDo6d3N0cmluZyYgd3N0cikgewotICAgIHN0ZDo6c3RyaW5nIHM7Ci0gICAgcy5yZXNlcnZlKHdzdHIuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8gYyA6IHdzdHIpIHsKLSAgICAgICAgcyArPSAoYyA8PSAweGZmKSA/IHN0YXRpY19jYXN0PGNoYXI+KGMpIDogJz8nOwotICAgIH0KLSAgICByZXR1cm4gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkocyk7CisjaWZkZWYgQ0FUQ0hfQ09ORklHX0NQUDE3X1NUUklOR19WSUVXCitzdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjxzdGQ6OnN0cmluZ192aWV3Pjo6Y29udmVydChzdGQ6OnN0cmluZ192aWV3IHN0cikgeworICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzdGQ6OnN0cmluZ3sgc3RyIH0pOwogfQorI2VuZGlmCiAKIHN0ZDo6c3RyaW5nIFN0cmluZ01ha2VyPGNoYXIgY29uc3QqPjo6Y29udmVydChjaGFyIGNvbnN0KiBzdHIpIHsKICAgICBpZiAoc3RyKSB7CkBAIC0xMzksNiArMTM3LDIzIEBACiAgICAgICAgIHJldHVybnsgIntudWxsIHN0cmluZ30iIH07CiAgICAgfQogfQorCisjaWZkZWYgQ0FUQ0hfQ09ORklHX1dDSEFSCitzdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjxzdGQ6OndzdHJpbmc+Ojpjb252ZXJ0KGNvbnN0IHN0ZDo6d3N0cmluZyYgd3N0cikgeworICAgIHN0ZDo6c3RyaW5nIHM7CisgICAgcy5yZXNlcnZlKHdzdHIuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gYyA6IHdzdHIpIHsKKyAgICAgICAgcyArPSAoYyA8PSAweGZmKSA/IHN0YXRpY19jYXN0PGNoYXI+KGMpIDogJz8nOworICAgIH0KKyAgICByZXR1cm4gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkocyk7Cit9CisKKyMgaWZkZWYgQ0FUQ0hfQ09ORklHX0NQUDE3X1NUUklOR19WSUVXCitzdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjxzdGQ6OndzdHJpbmdfdmlldz46OmNvbnZlcnQoc3RkOjp3c3RyaW5nX3ZpZXcgc3RyKSB7CisgICAgcmV0dXJuIFN0cmluZ01ha2VyPHN0ZDo6d3N0cmluZz46OmNvbnZlcnQoc3RkOjp3c3RyaW5nKHN0cikpOworfQorIyBlbmRpZgorCiBzdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjx3Y2hhcl90IGNvbnN0Kj46OmNvbnZlcnQod2NoYXJfdCBjb25zdCAqIHN0cikgewogICAgIGlmIChzdHIpIHsKICAgICAgICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0ZDo6d3N0cmluZ3sgc3RyIH0pOwpAQCAtMTUzLDYgKzE2OCw3IEBACiAgICAgICAgIHJldHVybnsgIntudWxsIHN0cmluZ30iIH07CiAgICAgfQogfQorI2VuZGlmCiAKIAogc3RkOjpzdHJpbmcgU3RyaW5nTWFrZXI8aW50Pjo6Y29udmVydChpbnQgdmFsdWUpIHsKQEAgLTE5MCw3ICsyMDYsNyBAQAogICAgIHJldHVybiBiID8gInRydWUiIDogImZhbHNlIjsKIH0KIAotc3RkOjpzdHJpbmcgU3RyaW5nTWFrZXI8Y2hhcj46OmNvbnZlcnQoY2hhciB2YWx1ZSkgeworc3RkOjpzdHJpbmcgU3RyaW5nTWFrZXI8c2lnbmVkIGNoYXI+Ojpjb252ZXJ0KHNpZ25lZCBjaGFyIHZhbHVlKSB7CiAgICAgaWYgKHZhbHVlID09ICdccicpIHsKICAgICAgICAgcmV0dXJuICInXFxyJyI7CiAgICAgfSBlbHNlIGlmICh2YWx1ZSA9PSAnXGYnKSB7CkBAIC0yMDcsOCArMjIzLDggQEAKICAgICAgICAgcmV0dXJuIGNoc3RyOwogICAgIH0KIH0KLXN0ZDo6c3RyaW5nIFN0cmluZ01ha2VyPHNpZ25lZCBjaGFyPjo6Y29udmVydChzaWduZWQgY2hhciBjKSB7Ci0gICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0YXRpY19jYXN0PGNoYXI+KGMpKTsKK3N0ZDo6c3RyaW5nIFN0cmluZ01ha2VyPGNoYXI+Ojpjb252ZXJ0KGNoYXIgYykgeworICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oYykpOwogfQogc3RkOjpzdHJpbmcgU3RyaW5nTWFrZXI8dW5zaWduZWQgY2hhcj46OmNvbnZlcnQodW5zaWduZWQgY2hhciBjKSB7CiAgICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0YXRpY19jYXN0PGNoYXI+KGMpKTsKQEAgLTIyNywxMiArMjQzLDExIEBACiAKIHN0ZDo6c3RyaW5nIHJhdGlvX3N0cmluZzxzdGQ6OmF0dG8+OjpzeW1ib2woKSB7IHJldHVybiAiYSI7IH0KIHN0ZDo6c3RyaW5nIHJhdGlvX3N0cmluZzxzdGQ6OmZlbXRvPjo6c3ltYm9sKCkgeyByZXR1cm4gImYiOyB9Ci1zdGQ6OnN0cmluZyAgcmF0aW9fc3RyaW5nPHN0ZDo6cGljbz46OnN5bWJvbCgpIHsgcmV0dXJuICJwIjsgfQotc3RkOjpzdHJpbmcgIHJhdGlvX3N0cmluZzxzdGQ6Om5hbm8+OjpzeW1ib2woKSB7IHJldHVybiAibiI7IH0KK3N0ZDo6c3RyaW5nIHJhdGlvX3N0cmluZzxzdGQ6OnBpY28+OjpzeW1ib2woKSB7IHJldHVybiAicCI7IH0KK3N0ZDo6c3RyaW5nIHJhdGlvX3N0cmluZzxzdGQ6Om5hbm8+OjpzeW1ib2woKSB7IHJldHVybiAibiI7IH0KIHN0ZDo6c3RyaW5nIHJhdGlvX3N0cmluZzxzdGQ6Om1pY3JvPjo6c3ltYm9sKCkgeyByZXR1cm4gInUiOyB9CiBzdGQ6OnN0cmluZyByYXRpb19zdHJpbmc8c3RkOjptaWxsaT46OnN5bWJvbCgpIHsgcmV0dXJuICJtIjsgfQogCi0KIH0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAogCiAjaWYgZGVmaW5lZChfX2NsYW5nX18pCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rvc3RyaW5nLmggYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3Rvc3RyaW5nLmgKaW5kZXggMWU2NDRhOS4uMTNhNDNiMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90b3N0cmluZy5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdG9zdHJpbmcuaApAQCAtMTMsOCArMTMsMTMgQEAKICNpbmNsdWRlIDxjc3RkZGVmPgogI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlICJjYXRjaF9jb21waWxlcl9jYXBhYmlsaXRpZXMuaCIKICNpbmNsdWRlICJjYXRjaF9zdHJlYW0uaCIKIAorI2lmZGVmIENBVENIX0NPTkZJR19DUFAxN19TVFJJTkdfVklFVworI2luY2x1ZGUgPHN0cmluZ192aWV3PgorI2VuZGlmCisKICNpZmRlZiBfX09CSkNfXwogI2luY2x1ZGUgImNhdGNoX29iamNfYXJjLmhwcCIKICNlbmRpZgpAQCAtMjQsMTUgKzI5LDcgQEAKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQxODApIC8vIFdlIGF0dGVtcHQgdG8gc3RyZWFtIGEgZnVuY3Rpb24gKGFkZHJlc3MpIGJ5IGNvbnN0Jiwgd2hpY2ggTVNWQyBjb21wbGFpbnMgYWJvdXQgYnV0IGlzIGhhcm1sZXNzCiAjZW5kaWYKIAotCi0vLyBXZSBuZWVkIGEgZHVtbXkgZ2xvYmFsIG9wZXJhdG9yPDwgc28gd2UgY2FuIGJyaW5nIGl0IGludG8gQ2F0Y2ggbmFtZXNwYWNlIGxhdGVyCi1zdHJ1Y3QgQ2F0Y2hfZ2xvYmFsX25hbWVzcGFjZV9kdW1teSB7fTsKLXN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mLCBDYXRjaF9nbG9iYWxfbmFtZXNwYWNlX2R1bW15KTsKLQogbmFtZXNwYWNlIENhdGNoIHsKLSAgICAvLyBCcmluZyBpbiBvcGVyYXRvcjw8IGZyb20gZ2xvYmFsIG5hbWVzcGFjZSBpbnRvIENhdGNoIG5hbWVzcGFjZQotICAgIHVzaW5nIDo6b3BlcmF0b3I8PDsKLQogICAgIG5hbWVzcGFjZSBEZXRhaWwgewogCiAgICAgICAgIGV4dGVybiBjb25zdCBzdGQ6OnN0cmluZyB1bnByaW50YWJsZVN0cmluZzsKQEAgLTYxLDE0ICs1OCwzOCBAQAogICAgICAgICBzdGQ6OnN0cmluZyBjb252ZXJ0VW5rbm93bkVudW1Ub1N0cmluZyggRSBlICk7CiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IXN0ZDo6aXNfZW51bTxUPjo6dmFsdWUsIHN0ZDo6c3RyaW5nPjo6dHlwZSBjb252ZXJ0VW5zdHJlYW1hYmxlKCBUIGNvbnN0JiApIHsKKyAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZSAmJiAhc3RkOjppc19iYXNlX29mPHN0ZDo6ZXhjZXB0aW9uLCBUPjo6dmFsdWUsCisgICAgICAgIHN0ZDo6c3RyaW5nPjo6dHlwZSBjb252ZXJ0VW5zdHJlYW1hYmxlKCBUIGNvbnN0JiApIHsKICAgICAgICAgICAgIHJldHVybiBEZXRhaWw6OnVucHJpbnRhYmxlU3RyaW5nOwogICAgICAgICB9CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfZW51bTxUPjo6dmFsdWUsIHN0ZDo6c3RyaW5nPjo6dHlwZSBjb252ZXJ0VW5zdHJlYW1hYmxlKCBUIGNvbnN0JiB2YWx1ZSApIHsKKyAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8CisgICAgICAgICAgICAhc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZSAmJiBzdGQ6OmlzX2Jhc2Vfb2Y8c3RkOjpleGNlcHRpb24sIFQ+Ojp2YWx1ZSwKKyAgICAgICAgIHN0ZDo6c3RyaW5nPjo6dHlwZSBjb252ZXJ0VW5zdHJlYW1hYmxlKFQgY29uc3QmIGV4KSB7CisgICAgICAgICAgICByZXR1cm4gZXgud2hhdCgpOworICAgICAgICB9CisKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwKKyAgICAgICAgICAgIHN0ZDo6aXNfZW51bTxUPjo6dmFsdWUKKyAgICAgICAgLCBzdGQ6OnN0cmluZz46OnR5cGUgY29udmVydFVuc3RyZWFtYWJsZSggVCBjb25zdCYgdmFsdWUgKSB7CiAgICAgICAgICAgICByZXR1cm4gY29udmVydFVua25vd25FbnVtVG9TdHJpbmcoIHZhbHVlICk7CiAgICAgICAgIH0KIAorI2lmIGRlZmluZWQoX01BTkFHRUQpCisgICAgICAgIC8vISBDb252ZXJ0IGEgQ0xSIHN0cmluZyB0byBhIHV0Zjggc3RkOjpzdHJpbmcKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgc3RkOjpzdHJpbmcgY2xyUmVmZXJlbmNlVG9TdHJpbmcoIFReIHJlZiApIHsKKyAgICAgICAgICAgIGlmIChyZWYgPT0gbnVsbHB0cikKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjpzdHJpbmcoIm51bGwiKTsKKyAgICAgICAgICAgIGF1dG8gYnl0ZXMgPSBTeXN0ZW06OlRleHQ6OkVuY29kaW5nOjpVVEY4LT5HZXRCeXRlcyhyZWYtPlRvU3RyaW5nKCkpOworICAgICAgICAgICAgY2xpOjpwaW5fcHRyPFN5c3RlbTo6Qnl0ZT4gcCA9ICZieXRlc1swXTsKKyAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyhyZWludGVycHJldF9jYXN0PGNoYXIgY29uc3QgKj4ocCksIGJ5dGVzLT5MZW5ndGgpOworICAgICAgICB9CisjZW5kaWYKKwogICAgIH0gLy8gbmFtZXNwYWNlIERldGFpbAogCiAKQEAgLTgwLDcgKzEwMSw5IEBACiAgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPDo6Q2F0Y2g6OkRldGFpbDo6SXNTdHJlYW1JbnNlcnRhYmxlPEZha2U+Ojp2YWx1ZSwgc3RkOjpzdHJpbmc+Ojp0eXBlCiAgICAgICAgICAgICBjb252ZXJ0KGNvbnN0IEZha2UmIHZhbHVlKSB7CiAgICAgICAgICAgICAgICAgUmV1c2FibGVTdHJpbmdTdHJlYW0gcnNzOwotICAgICAgICAgICAgICAgIHJzcyA8PCB2YWx1ZTsKKyAgICAgICAgICAgICAgICAvLyBOQjogY2FsbCB1c2luZyB0aGUgZnVuY3Rpb24tbGlrZSBzeW50YXggdG8gYXZvaWQgYW1iaWd1aXR5IHdpdGgKKyAgICAgICAgICAgICAgICAvLyB1c2VyLWRlZmluZWQgdGVtcGxhdGVkIG9wZXJhdG9yPDwgdW5kZXIgY2xhbmcuCisgICAgICAgICAgICAgICAgcnNzLm9wZXJhdG9yPDwodmFsdWUpOwogICAgICAgICAgICAgICAgIHJldHVybiByc3Muc3RyKCk7CiAgICAgICAgIH0KIApAQCAtODgsNyArMTExLDExIEBACiAgICAgICAgIHN0YXRpYwogICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjwhOjpDYXRjaDo6RGV0YWlsOjpJc1N0cmVhbUluc2VydGFibGU8RmFrZT46OnZhbHVlLCBzdGQ6OnN0cmluZz46OnR5cGUKICAgICAgICAgICAgIGNvbnZlcnQoIGNvbnN0IEZha2UmIHZhbHVlICkgewotICAgICAgICAgICAgICAgIHJldHVybiBEZXRhaWw6OmNvbnZlcnRVbnN0cmVhbWFibGUoIHZhbHVlICk7CisjaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0ZBTExCQUNLX1NUUklOR0lGSUVSKQorICAgICAgICAgICAgcmV0dXJuIERldGFpbDo6Y29udmVydFVuc3RyZWFtYWJsZSh2YWx1ZSk7CisjZWxzZQorICAgICAgICAgICAgcmV0dXJuIENBVENIX0NPTkZJR19GQUxMQkFDS19TVFJJTkdJRklFUih2YWx1ZSk7CisjZW5kaWYKICAgICAgICAgfQogICAgIH07CiAKQEAgLTEwNiw2ICsxMzMsMTMgQEAKICAgICAgICAgICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzdGF0aWNfY2FzdDx0eXBlbmFtZSBzdGQ6OnVuZGVybHlpbmdfdHlwZTxFPjo6dHlwZT4oZSkpOwogICAgICAgICB9CiAKKyNpZiBkZWZpbmVkKF9NQU5BR0VEKQorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICAgICAgc3RkOjpzdHJpbmcgc3RyaW5naWZ5KCBUXiBlICkgeworICAgICAgICAgICAgcmV0dXJuIDo6Q2F0Y2g6OlN0cmluZ01ha2VyPFRePjo6Y29udmVydChlKTsKKyAgICAgICAgfQorI2VuZGlmCisKICAgICB9IC8vIG5hbWVzcGFjZSBEZXRhaWwKIAogICAgIC8vIFNvbWUgcHJlZGVmaW5lZCBzcGVjaWFsaXphdGlvbnMKQEAgLTExNCwxMCArMTQ4LDEzIEBACiAgICAgc3RydWN0IFN0cmluZ01ha2VyPHN0ZDo6c3RyaW5nPiB7CiAgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpOwogICAgIH07CisKKyNpZmRlZiBDQVRDSF9DT05GSUdfQ1BQMTdfU1RSSU5HX1ZJRVcKICAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFN0cmluZ01ha2VyPHN0ZDo6d3N0cmluZz4gewotICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydChjb25zdCBzdGQ6OndzdHJpbmcmIHdzdHIpOworICAgIHN0cnVjdCBTdHJpbmdNYWtlcjxzdGQ6OnN0cmluZ192aWV3PiB7CisgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KHN0ZDo6c3RyaW5nX3ZpZXcgc3RyKTsKICAgICB9OworI2VuZGlmCiAKICAgICB0ZW1wbGF0ZTw+CiAgICAgc3RydWN0IFN0cmluZ01ha2VyPGNoYXIgY29uc3QgKj4gewpAQCAtMTI3LDYgKzE2NCwyMCBAQAogICAgIHN0cnVjdCBTdHJpbmdNYWtlcjxjaGFyICo+IHsKICAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoY2hhciAqIHN0cik7CiAgICAgfTsKKworI2lmZGVmIENBVENIX0NPTkZJR19XQ0hBUgorICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU3RyaW5nTWFrZXI8c3RkOjp3c3RyaW5nPiB7CisgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KGNvbnN0IHN0ZDo6d3N0cmluZyYgd3N0cik7CisgICAgfTsKKworIyBpZmRlZiBDQVRDSF9DT05GSUdfQ1BQMTdfU1RSSU5HX1ZJRVcKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFN0cmluZ01ha2VyPHN0ZDo6d3N0cmluZ192aWV3PiB7CisgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KHN0ZDo6d3N0cmluZ192aWV3IHN0cik7CisgICAgfTsKKyMgZW5kaWYKKwogICAgIHRlbXBsYXRlPD4KICAgICBzdHJ1Y3QgU3RyaW5nTWFrZXI8d2NoYXJfdCBjb25zdCAqPiB7CiAgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KHdjaGFyX3QgY29uc3QgKiBzdHIpOwpAQCAtMTM1LDIzICsxODYsMjYgQEAKICAgICBzdHJ1Y3QgU3RyaW5nTWFrZXI8d2NoYXJfdCAqPiB7CiAgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KHdjaGFyX3QgKiBzdHIpOwogICAgIH07CisjZW5kaWYKIAorICAgIC8vIFRCRDogU2hvdWxkIHdlIHVzZSBgc3RybmxlbmAgdG8gZW5zdXJlIHRoYXQgd2UgZG9uJ3QgZ28gb3V0IG9mIHRoZSBidWZmZXIsCisgICAgLy8gICAgICB3aGlsZSBrZWVwaW5nIHN0cmluZyBzZW1hbnRpY3M/CiAgICAgdGVtcGxhdGU8aW50IFNaPgogICAgIHN0cnVjdCBTdHJpbmdNYWtlcjxjaGFyW1NaXT4gewotICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydChjb25zdCBjaGFyKiBzdHIpIHsKKyAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoY2hhciBjb25zdCogc3RyKSB7CiAgICAgICAgICAgICByZXR1cm4gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoc3RkOjpzdHJpbmd7IHN0ciB9KTsKICAgICAgICAgfQogICAgIH07CiAgICAgdGVtcGxhdGU8aW50IFNaPgogICAgIHN0cnVjdCBTdHJpbmdNYWtlcjxzaWduZWQgY2hhcltTWl0+IHsKLSAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoY29uc3QgY2hhciogc3RyKSB7Ci0gICAgICAgICAgICByZXR1cm4gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoc3RkOjpzdHJpbmd7IHN0ciB9KTsKKyAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoc2lnbmVkIGNoYXIgY29uc3QqIHN0cikgeworICAgICAgICAgICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0ZDo6c3RyaW5neyByZWludGVycHJldF9jYXN0PGNoYXIgY29uc3QgKj4oc3RyKSB9KTsKICAgICAgICAgfQogICAgIH07CiAgICAgdGVtcGxhdGU8aW50IFNaPgogICAgIHN0cnVjdCBTdHJpbmdNYWtlcjx1bnNpZ25lZCBjaGFyW1NaXT4gewotICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydChjb25zdCBjaGFyKiBzdHIpIHsKLSAgICAgICAgICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzdGQ6OnN0cmluZ3sgc3RyIH0pOworICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydCh1bnNpZ25lZCBjaGFyIGNvbnN0KiBzdHIpIHsKKyAgICAgICAgICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzdGQ6OnN0cmluZ3sgcmVpbnRlcnByZXRfY2FzdDxjaGFyIGNvbnN0ICo+KHN0cikgfSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0yMzUsNiArMjg5LDE1IEBACiAgICAgICAgIH0KICAgICB9OwogCisjaWYgZGVmaW5lZChfTUFOQUdFRCkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgU3RyaW5nTWFrZXI8VF4+IHsKKyAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoIFReIHJlZiApIHsKKyAgICAgICAgICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OmNsclJlZmVyZW5jZVRvU3RyaW5nKHJlZik7CisgICAgICAgIH0KKyAgICB9OworI2VuZGlmCisKICAgICBuYW1lc3BhY2UgRGV0YWlsIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5wdXRJdGVyYXRvcj4KICAgICAgICAgc3RkOjpzdHJpbmcgcmFuZ2VUb1N0cmluZyhJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpIHsKQEAgLTI4Myw3ICszNDYsOSBAQAogI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9BTExfU1RSSU5HTUFLRVJTKQogIyAgZGVmaW5lIENBVENIX0NPTkZJR19FTkFCTEVfUEFJUl9TVFJJTkdNQUtFUgogIyAgZGVmaW5lIENBVENIX0NPTkZJR19FTkFCTEVfVFVQTEVfU1RSSU5HTUFLRVIKKyMgIGRlZmluZSBDQVRDSF9DT05GSUdfRU5BQkxFX1ZBUklBTlRfU1RSSU5HTUFLRVIKICMgIGRlZmluZSBDQVRDSF9DT05GSUdfRU5BQkxFX0NIUk9OT19TVFJJTkdNQUtFUgorIyAgZGVmaW5lIENBVENIX0NPTkZJR19FTkFCTEVfT1BUSU9OQUxfU1RSSU5HTUFLRVIKICNlbmRpZgogCiAvLyBTZXBhcmF0ZSBzdGQ6OnBhaXIgc3BlY2lhbGl6YXRpb24KQEAgLTMwNSw2ICszNzAsMjQgQEAKIH0KICNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX1BBSVJfU1RSSU5HTUFLRVIKIAorI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9PUFRJT05BTF9TVFJJTkdNQUtFUikgJiYgZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfT1BUSU9OQUwpCisjaW5jbHVkZSA8b3B0aW9uYWw+CituYW1lc3BhY2UgQ2F0Y2ggeworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IFN0cmluZ01ha2VyPHN0ZDo6b3B0aW9uYWw8VD4gPiB7CisgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KGNvbnN0IHN0ZDo6b3B0aW9uYWw8VD4mIG9wdGlvbmFsKSB7CisgICAgICAgICAgICBSZXVzYWJsZVN0cmluZ1N0cmVhbSByc3M7CisgICAgICAgICAgICBpZiAob3B0aW9uYWwuaGFzX3ZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICByc3MgPDwgOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoKm9wdGlvbmFsKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcnNzIDw8ICJ7IH0iOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJzcy5zdHIoKTsKKyAgICAgICAgfQorICAgIH07Cit9CisjZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0VOQUJMRV9PUFRJT05BTF9TVFJJTkdNQUtFUgorCiAvLyBTZXBhcmF0ZSBzdGQ6OnR1cGxlIHNwZWNpYWxpemF0aW9uCiAjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX1RVUExFX1NUUklOR01BS0VSKQogI2luY2x1ZGUgPHR1cGxlPgpAQCAtMzQ3LDYgKzQzMCwzNCBAQAogfQogI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfVFVQTEVfU1RSSU5HTUFLRVIKIAorI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0VOQUJMRV9WQVJJQU5UX1NUUklOR01BS0VSKSAmJiBkZWZpbmVkKENBVENIX0NPTkZJR19DUFAxN19WQVJJQU5UKQorI2luY2x1ZGUgPHZhcmlhbnQ+CituYW1lc3BhY2UgQ2F0Y2ggeworICAgIHRlbXBsYXRlPD4KKyAgICBzdHJ1Y3QgU3RyaW5nTWFrZXI8c3RkOjptb25vc3RhdGU+IHsKKyAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoY29uc3Qgc3RkOjptb25vc3RhdGUmKSB7CisgICAgICAgICAgICByZXR1cm4gInsgfSI7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gRWxlbWVudHM+CisgICAgc3RydWN0IFN0cmluZ01ha2VyPHN0ZDo6dmFyaWFudDxFbGVtZW50cy4uLj4+IHsKKyAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoY29uc3Qgc3RkOjp2YXJpYW50PEVsZW1lbnRzLi4uPiYgdmFyaWFudCkgeworICAgICAgICAgICAgaWYgKHZhcmlhbnQudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICJ7dmFsdWVsZXNzIHZhcmlhbnR9IjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6dmlzaXQoCisgICAgICAgICAgICAgICAgICAgIFtdKGNvbnN0IGF1dG8mIHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB2YXJpYW50CisgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07Cit9CisjZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0VOQUJMRV9WQVJJQU5UX1NUUklOR01BS0VSCisKIG5hbWVzcGFjZSBDYXRjaCB7CiAgICAgc3RydWN0IG5vdF90aGlzX29uZSB7fTsgLy8gVGFnIHR5cGUgZm9yIGRldGVjdGluZyB3aGljaCBiZWdpbi8gZW5kIGFyZSBiZWluZyBzZWxlY3RlZAogCkBAIC0zNjQsNiArNDc1LDEzIEBACiAgICAgICAgICAgICAhc3RkOjppc19zYW1lPGRlY2x0eXBlKGVuZChzdGQ6OmRlY2x2YWw8VD4oKSkpLCBub3RfdGhpc19vbmU+Ojp2YWx1ZTsKICAgICB9OwogCisjaWYgZGVmaW5lZChfTUFOQUdFRCkgLy8gTWFuYWdlZCB0eXBlcyBhcmUgbmV2ZXIgcmFuZ2VzCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlzX3JhbmdlPFRePiB7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7CisgICAgfTsKKyNlbmRpZgorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmFuZ2U+CiAgICAgc3RkOjpzdHJpbmcgcmFuZ2VUb1N0cmluZyggUmFuZ2UgY29uc3QmIHJhbmdlICkgewogICAgICAgICByZXR1cm4gOjpDYXRjaDo6RGV0YWlsOjpyYW5nZVRvU3RyaW5nKCBiZWdpbiggcmFuZ2UgKSwgZW5kKCByYW5nZSApICk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3RvdGFscy5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90b3RhbHMuaAppbmRleCA5NTA3NTgyLi41NjkyNzI4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3RvdGFscy5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdG90YWxzLmgKQEAgLTMyLDcgKzMyLDcgQEAKIAogICAgICAgICBUb3RhbHMgZGVsdGEoIFRvdGFscyBjb25zdCYgcHJldlRvdGFscyApIGNvbnN0OwogCi0KKyAgICAgICAgaW50IGVycm9yID0gMDsKICAgICAgICAgQ291bnRzIGFzc2VydGlvbnM7CiAgICAgICAgIENvdW50cyB0ZXN0Q2FzZXM7CiAgICAgfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdHlwZV90cmFpdHMuaHBwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90eXBlX3RyYWl0cy5ocHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVkYjFlYwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdHlwZV90cmFpdHMuaHBwCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiAgQ3JlYXRlZCBieSBKb3plZiBvbiAxMi8xMS8yMDE4LgorICogIENvcHlyaWdodCAyMDE3IFR3byBCbHVlIEN1YmVzIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorICovCisKKyNpZm5kZWYgVFdPQkxVRUNVQkVTX0NBVENIX1RZUEVfVFJBSVRTX0hQUF9JTkNMVURFRAorI2RlZmluZSBUV09CTFVFQ1VCRVNfQ0FUQ0hfVFlQRV9UUkFJVFNfSFBQX0lOQ0xVREVECisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKworbmFtZXNwYWNlIENhdGNoeworCisjaWZkZWYgQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUgorCXRlbXBsYXRlIDx0eXBlbmFtZS4uLj4KKwlpbmxpbmUgY29uc3RleHByIGF1dG8gaXNfdW5pcXVlID0gc3RkOjp0cnVlX3R5cGV7fTsKKworCXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBSZXN0PgorCWlubGluZSBjb25zdGV4cHIgYXV0byBpc191bmlxdWU8VCwgUmVzdC4uLj4gPSBzdGQ6OmJvb2xfY29uc3RhbnQ8CisJCSghc3RkOjppc19zYW1lX3Y8VCwgUmVzdD4gJiYgLi4uKSAmJiBpc191bmlxdWU8UmVzdC4uLj4KKwk+e307CisjZWxzZQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+CitzdHJ1Y3QgaXNfdW5pcXVlIDogc3RkOjp0cnVlX3R5cGV7fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUuLi4gUmVzdD4KK3N0cnVjdCBpc191bmlxdWU8VDAsIFQxLCBSZXN0Li4uPiA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQKKzxib29sLAorICAgICAhc3RkOjppc19zYW1lPFQwLCBUMT46OnZhbHVlIAorICAgICAmJiBpc191bmlxdWU8VDAsIFJlc3QuLi4+Ojp2YWx1ZSAKKyAgICAgJiYgaXNfdW5pcXVlPFQxLCBSZXN0Li4uPjo6dmFsdWUKKz57fTsKKworI2VuZGlmCit9CisKKyNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfVFlQRV9UUkFJVFNfSFBQX0lOQ0xVREVECmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3VuY2F1Z2h0X2V4Y2VwdGlvbnMuY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF91bmNhdWdodF9leGNlcHRpb25zLmNwcAppbmRleCAwZTQ3YTA0Li5iOTkwY2NkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3VuY2F1Z2h0X2V4Y2VwdGlvbnMuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdW5jYXVnaHRfZXhjZXB0aW9ucy5jcHAKQEAgLTEyLDcgKzEyLDYgQEAKIAogbmFtZXNwYWNlIENhdGNoIHsKICAgICBib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbnMoKSB7Ci0vLyBodHRwczovL2dpdGh1Yi5jb20vY2F0Y2hvcmcvQ2F0Y2gyL2lzc3Vlcy8xMTYyCiAjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfVU5DQVVHSFRfRVhDRVBUSU9OUykKICAgICAgICAgcmV0dXJuIHN0ZDo6dW5jYXVnaHRfZXhjZXB0aW9ucygpID4gMDsKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3ZlcnNpb24uY3BwIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF92ZXJzaW9uLmNwcAppbmRleCBmYzE5NmQ5Li5hMWQwOGIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3ZlcnNpb24uY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdmVyc2lvbi5jcHAKQEAgLTM3LDcgKzM3LDcgQEAKICAgICB9CiAKICAgICBWZXJzaW9uIGNvbnN0JiBsaWJyYXJ5VmVyc2lvbigpIHsKLSAgICAgICAgc3RhdGljIFZlcnNpb24gdmVyc2lvbiggMiwgMSwgMSwgIiIsIDAgKTsKKyAgICAgICAgc3RhdGljIFZlcnNpb24gdmVyc2lvbiggMiwgNywgMCwgIiIsIDAgKTsKICAgICAgICAgcmV0dXJuIHZlcnNpb247CiAgICAgfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3htbHdyaXRlci5jcHAgYi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3htbHdyaXRlci5jcHAKaW5kZXggYTMzMTZmNC4uNTM1NGVmYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF94bWx3cml0ZXIuY3BwCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfeG1sd3JpdGVyLmNwcApAQCAtNyw1MSArNywxNDcgQEAKIAogI2luY2x1ZGUgImNhdGNoX3htbHdyaXRlci5oIgogCisjaW5jbHVkZSAiY2F0Y2hfZW5mb3JjZS5oIgorCiAjaW5jbHVkZSA8aW9tYW5pcD4KIAordXNpbmcgdWNoYXIgPSB1bnNpZ25lZCBjaGFyOworCiBuYW1lc3BhY2UgQ2F0Y2ggewogCituYW1lc3BhY2UgeworCisgICAgc2l6ZV90IHRyYWlsaW5nQnl0ZXModW5zaWduZWQgY2hhciBjKSB7CisgICAgICAgIGlmICgoYyAmIDB4RTApID09IDB4QzApIHsKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICB9CisgICAgICAgIGlmICgoYyAmIDB4RjApID09IDB4RTApIHsKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICB9CisgICAgICAgIGlmICgoYyAmIDB4RjgpID09IDB4RjApIHsKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICB9CisgICAgICAgIENBVENIX0lOVEVSTkFMX0VSUk9SKCJJbnZhbGlkIG11bHRpYnl0ZSB1dGYtOCBzdGFydCBieXRlIGVuY291bnRlcmVkIik7CisgICAgfQorCisgICAgdWludDMyX3QgaGVhZGVyVmFsdWUodW5zaWduZWQgY2hhciBjKSB7CisgICAgICAgIGlmICgoYyAmIDB4RTApID09IDB4QzApIHsKKyAgICAgICAgICAgIHJldHVybiBjICYgMHgxRjsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGMgJiAweEYwKSA9PSAweEUwKSB7CisgICAgICAgICAgICByZXR1cm4gYyAmIDB4MEY7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChjICYgMHhGOCkgPT0gMHhGMCkgeworICAgICAgICAgICAgcmV0dXJuIGMgJiAweDA3OworICAgICAgICB9CisgICAgICAgIENBVENIX0lOVEVSTkFMX0VSUk9SKCJJbnZhbGlkIG11bHRpYnl0ZSB1dGYtOCBzdGFydCBieXRlIGVuY291bnRlcmVkIik7CisgICAgfQorCisgICAgdm9pZCBoZXhFc2NhcGVDaGFyKHN0ZDo6b3N0cmVhbSYgb3MsIHVuc2lnbmVkIGNoYXIgYykgeworICAgICAgICBzdGQ6Omlvc19iYXNlOjpmbXRmbGFncyBmKG9zLmZsYWdzKCkpOworICAgICAgICBvcyA8PCAiXFx4IgorICAgICAgICAgICAgPDwgc3RkOjp1cHBlcmNhc2UgPDwgc3RkOjpoZXggPDwgc3RkOjpzZXRmaWxsKCcwJykgPDwgc3RkOjpzZXR3KDIpCisgICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDxpbnQ+KGMpOworICAgICAgICBvcy5mbGFncyhmKTsKKyAgICB9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCiAgICAgWG1sRW5jb2RlOjpYbWxFbmNvZGUoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIsIEZvcldoYXQgZm9yV2hhdCApCiAgICAgOiAgIG1fc3RyKCBzdHIgKSwKICAgICAgICAgbV9mb3JXaGF0KCBmb3JXaGF0ICkKICAgICB7fQogCiAgICAgdm9pZCBYbWxFbmNvZGU6OmVuY29kZVRvKCBzdGQ6Om9zdHJlYW0mIG9zICkgY29uc3QgewotCiAgICAgICAgIC8vIEFwb3N0cm9waGUgZXNjYXBpbmcgbm90IG5lY2Vzc2FyeSBpZiB3ZSBhbHdheXMgdXNlICIgdG8gd3JpdGUgYXR0cmlidXRlcwogICAgICAgICAvLyAoc2VlOiBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwvI3N5bnRheCkKIAotICAgICAgICBmb3IoIHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgbV9zdHIuc2l6ZSgpOyArKyBpICkgewotICAgICAgICAgICAgY2hhciBjID0gbV9zdHJbaV07Ci0gICAgICAgICAgICBzd2l0Y2goIGMgKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAnPCc6ICAgb3MgPDwgIiZsdDsiOyBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICcmJzogICBvcyA8PCAiJmFtcDsiOyBicmVhazsKKyAgICAgICAgZm9yKCBzdGQ6OnNpemVfdCBpZHggPSAwOyBpZHggPCBtX3N0ci5zaXplKCk7ICsrIGlkeCApIHsKKyAgICAgICAgICAgIHVjaGFyIGMgPSBtX3N0cltpZHhdOworICAgICAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICBjYXNlICc8JzogICBvcyA8PCAiJmx0OyI7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAnJic6ICAgb3MgPDwgIiZhbXA7IjsgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICBjYXNlICc+JzoKLSAgICAgICAgICAgICAgICAgICAgLy8gU2VlOiBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwvI3N5bnRheAotICAgICAgICAgICAgICAgICAgICBpZiggaSA+IDIgJiYgbV9zdHJbaS0xXSA9PSAnXScgJiYgbV9zdHJbaS0yXSA9PSAnXScgKQotICAgICAgICAgICAgICAgICAgICAgICAgb3MgPDwgIiZndDsiOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBvcyA8PCBjOworICAgICAgICAgICAgY2FzZSAnPic6CisgICAgICAgICAgICAgICAgLy8gU2VlOiBodHRwOi8vd3d3LnczLm9yZy9UUi94bWwvI3N5bnRheAorICAgICAgICAgICAgICAgIGlmIChpZHggPiAyICYmIG1fc3RyW2lkeCAtIDFdID09ICddJyAmJiBtX3N0cltpZHggLSAyXSA9PSAnXScpCisgICAgICAgICAgICAgICAgICAgIG9zIDw8ICImZ3Q7IjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9zIDw8IGM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ1wiJzoKKyAgICAgICAgICAgICAgICBpZiAobV9mb3JXaGF0ID09IEZvckF0dHJpYnV0ZXMpCisgICAgICAgICAgICAgICAgICAgIG9zIDw8ICImcXVvdDsiOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3MgPDwgYzsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBmb3IgY29udHJvbCBjaGFyYWN0ZXJzIGFuZCBpbnZhbGlkIHV0Zi04CisKKyAgICAgICAgICAgICAgICAvLyBFc2NhcGUgY29udHJvbCBjaGFyYWN0ZXJzIGluIHN0YW5kYXJkIGFzY2lpCisgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDA0MTA3L3doeS1hcmUtY29udHJvbC1jaGFyYWN0ZXJzLWlsbGVnYWwtaW4teG1sLTEtMAorICAgICAgICAgICAgICAgIGlmIChjIDwgMHgwOSB8fCAoYyA+IDB4MEQgJiYgYyA8IDB4MjApIHx8IGMgPT0gMHg3RikgeworICAgICAgICAgICAgICAgICAgICBoZXhFc2NhcGVDaGFyKG9zLCBjKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgY2FzZSAnXCInOgotICAgICAgICAgICAgICAgICAgICBpZiggbV9mb3JXaGF0ID09IEZvckF0dHJpYnV0ZXMgKQotICAgICAgICAgICAgICAgICAgICAgICAgb3MgPDwgIiZxdW90OyI7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8IGM7CisgICAgICAgICAgICAgICAgLy8gUGxhaW4gQVNDSUk6IFdyaXRlIGl0IHRvIHN0cmVhbQorICAgICAgICAgICAgICAgIGlmIChjIDwgMHg3RikgeworICAgICAgICAgICAgICAgICAgICBvcyA8PCBjOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICAvLyBFc2NhcGUgY29udHJvbCBjaGFycyAtIGJhc2VkIG9uIGNvbnRyaWJ1dGlvbiBieSBAZXNwZW5hbGIgaW4gUFIgIzQ2NSBhbmQKLSAgICAgICAgICAgICAgICAgICAgLy8gYnkgQG1ycGkgUFIgIzU4OAotICAgICAgICAgICAgICAgICAgICBpZiAoICggYyA+PSAwICYmIGMgPCAnXHgwOScgKSB8fCAoIGMgPiAnXHgwRCcgJiYgYyA8ICdceDIwJykgfHwgYz09J1x4N0YnICkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2VlIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDA0MTA3L3doeS1hcmUtY29udHJvbC1jaGFyYWN0ZXJzLWlsbGVnYWwtaW4teG1sLTEtMAotICAgICAgICAgICAgICAgICAgICAgICAgb3MgPDwgIlxceCIgPDwgc3RkOjp1cHBlcmNhc2UgPDwgc3RkOjpoZXggPDwgc3RkOjpzZXRmaWxsKCcwJykgPDwgc3RkOjpzZXR3KDIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGF0aWNfY2FzdDxpbnQ+KCBjICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgb3MgPDwgYzsKKyAgICAgICAgICAgICAgICAvLyBVVEYtOCB0ZXJyaXRvcnkKKyAgICAgICAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZW5jb2RpbmcgaXMgdmFsaWQgYW5kIGlmIGl0IGlzIG5vdCwgaGV4IGVzY2FwZSBieXRlcy4KKyAgICAgICAgICAgICAgICAvLyBJbXBvcnRhbnQ6IFdlIGRvIG5vdCBjaGVjayB0aGUgZXhhY3QgZGVjb2RlZCB2YWx1ZXMgZm9yIHZhbGlkaXR5LCBvbmx5IHRoZSBlbmNvZGluZyBmb3JtYXQKKyAgICAgICAgICAgICAgICAvLyBGaXJzdCBjaGVjayB0aGF0IHRoaXMgYnl0ZXMgaXMgYSB2YWxpZCBsZWFkIGJ5dGU6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IGl0IGlzIG5vdCBlbmNvZGVkIGFzIDExMTEgMVhYWAorICAgICAgICAgICAgICAgIC8vIE9yIGFzIDEwWFggWFhYWAorICAgICAgICAgICAgICAgIGlmIChjIDwgIDB4QzAgfHwKKyAgICAgICAgICAgICAgICAgICAgYyA+PSAweEY4KSB7CisgICAgICAgICAgICAgICAgICAgIGhleEVzY2FwZUNoYXIob3MsIGMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBhdXRvIGVuY0J5dGVzID0gdHJhaWxpbmdCeXRlcyhjKTsKKyAgICAgICAgICAgICAgICAvLyBBcmUgdGhlcmUgZW5vdWdoIGJ5dGVzIGxlZnQgdG8gYXZvaWQgYWNjZXNzaW5nIG91dC1vZi1ib3VuZHMgbWVtb3J5PworICAgICAgICAgICAgICAgIGlmIChpZHggKyBlbmNCeXRlcyAtIDEgPj0gbV9zdHIuc2l6ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGhleEVzY2FwZUNoYXIob3MsIGMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gVGhlIGhlYWRlciBpcyB2YWxpZCwgY2hlY2sgZGF0YQorICAgICAgICAgICAgICAgIC8vIFRoZSBuZXh0IGVuY0J5dGVzIGJ5dGVzIG11c3QgdG9nZXRoZXIgYmUgYSB2YWxpZCB1dGYtOAorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnM6IGJpdHBhdHRlcm4gMTBYWCBYWFhYIGFuZCB0aGUgZXh0cmFjdGVkIHZhbHVlIGlzIHNhbmUgKGlzaCkKKyAgICAgICAgICAgICAgICBib29sIHZhbGlkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB1aW50MzJfdCB2YWx1ZSA9IGhlYWRlclZhbHVlKGMpOworICAgICAgICAgICAgICAgIGZvciAoc3RkOjpzaXplX3QgbiA9IDE7IG4gPCBlbmNCeXRlczsgKytuKSB7CisgICAgICAgICAgICAgICAgICAgIHVjaGFyIG5jID0gbV9zdHJbaWR4ICsgbl07CisgICAgICAgICAgICAgICAgICAgIHZhbGlkICY9ICgobmMgJiAweEMwKSA9PSAweDgwKTsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAodmFsdWUgPDwgNikgfCAobmMgJiAweDNGKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoCisgICAgICAgICAgICAgICAgICAgIC8vIFdyb25nIGJpdCBwYXR0ZXJuIG9mIGZvbGxvd2luZyBieXRlcworICAgICAgICAgICAgICAgICAgICAoIXZhbGlkKSB8fAorICAgICAgICAgICAgICAgICAgICAvLyBPdmVybG9uZyBlbmNvZGluZ3MKKyAgICAgICAgICAgICAgICAgICAgKHZhbHVlIDwgMHg4MCkgfHwKKyAgICAgICAgICAgICAgICAgICAgKDB4ODAgPD0gdmFsdWUgJiYgdmFsdWUgPCAweDgwMCAgICYmIGVuY0J5dGVzID4gMikgfHwKKyAgICAgICAgICAgICAgICAgICAgKDB4ODAwIDwgdmFsdWUgJiYgdmFsdWUgPCAweDEwMDAwICYmIGVuY0J5dGVzID4gMykgfHwKKyAgICAgICAgICAgICAgICAgICAgLy8gRW5jb2RlZCB2YWx1ZSBvdXQgb2YgcmFuZ2UKKyAgICAgICAgICAgICAgICAgICAgKHZhbHVlID49IDB4MTEwMDAwKQorICAgICAgICAgICAgICAgICAgICApIHsKKyAgICAgICAgICAgICAgICAgICAgaGV4RXNjYXBlQ2hhcihvcywgYyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8vIElmIHdlIGdvdCBoZXJlLCB0aGlzIGlzIGluIGZhY3QgYSB2YWxpZChpc2gpIHV0Zi04IHNlcXVlbmNlCisgICAgICAgICAgICAgICAgZm9yIChzdGQ6OnNpemVfdCBuID0gMDsgbiA8IGVuY0J5dGVzOyArK24pIHsKKyAgICAgICAgICAgICAgICAgICAgb3MgPDwgbV9zdHJbaWR4ICsgbl07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlkeCArPSBlbmNCeXRlcyAtIDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3htbHdyaXRlci5oIGIvaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF94bWx3cml0ZXIuaAppbmRleCA3NjQ1NmY5Li5jNGIxYzAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3htbHdyaXRlci5oCisrKyBiL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfeG1sd3JpdGVyLmgKQEAgLTU2LDcgKzU2LDcgQEAKIAogICAgICAgICBYbWxXcml0ZXIoIHN0ZDo6b3N0cmVhbSYgb3MgPSBDYXRjaDo6Y291dCgpICk7CiAgICAgICAgIH5YbWxXcml0ZXIoKTsKLSAgICAgICAgCisKICAgICAgICAgWG1sV3JpdGVyKCBYbWxXcml0ZXIgY29uc3QmICkgPSBkZWxldGU7CiAgICAgICAgIFhtbFdyaXRlciYgb3BlcmF0b3I9KCBYbWxXcml0ZXIgY29uc3QmICkgPSBkZWxldGU7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2Jhc2VzLmNwcCBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2Jhc2VzLmNwcAppbmRleCBjMjA1OWI1Li5jZTM1NTNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9iYXNlcy5jcHAKKysrIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfYmFzZXMuY3BwCkBAIC0xMyw3ICsxMyw3IEBACiAjaW5jbHVkZSA8Y3N0cmluZz4KICNpbmNsdWRlIDxjZmxvYXQ+CiAjaW5jbHVkZSA8Y3N0ZGlvPgotI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGNhc3NlcnQ+CiAjaW5jbHVkZSA8bWVtb3J5PgogCiBuYW1lc3BhY2UgQ2F0Y2ggewpAQCAtMzAsMTMgKzMwLDEzIEBACiAgICAgICAgIC8vICsgMSBmb3IgbnVsbCB0ZXJtaW5hdG9yCiAgICAgICAgIGNvbnN0IHN0ZDo6c2l6ZV90IG1heERvdWJsZVNpemUgPSBEQkxfTUFYXzEwX0VYUCArIDEgKyAxICsgMyArIDE7CiAgICAgICAgIGNoYXIgYnVmZmVyW21heERvdWJsZVNpemVdOwotIAorCiAgICAgICAgIC8vIFNhdmUgcHJldmlvdXMgZXJybm8sIHRvIHByZXZlbnQgc3ByaW50ZiBmcm9tIG92ZXJ3cml0aW5nIGl0CiAgICAgICAgIEVycm5vR3VhcmQgZ3VhcmQ7CiAjaWZkZWYgX01TQ19WRVIKICAgICAgICAgc3ByaW50Zl9zKGJ1ZmZlciwgIiUuM2YiLCBkdXJhdGlvbik7CiAjZWxzZQotICAgICAgICBzcHJpbnRmKGJ1ZmZlciwgIiUuM2YiLCBkdXJhdGlvbik7CisgICAgICAgIHN0ZDo6c3ByaW50ZihidWZmZXIsICIlLjNmIiwgZHVyYXRpb24pOwogI2VuZGlmCiAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyhidWZmZXIpOwogICAgIH0KQEAgLTQ1LDYgKzQ1LDEwIEBACiAgICAgVGVzdEV2ZW50TGlzdGVuZXJCYXNlOjpUZXN0RXZlbnRMaXN0ZW5lckJhc2UoUmVwb3J0ZXJDb25maWcgY29uc3QgJiBfY29uZmlnKQogICAgICAgICA6U3RyZWFtaW5nUmVwb3J0ZXJCYXNlKF9jb25maWcpIHt9CiAKKyAgICBzdGQ6OnNldDxWZXJib3NpdHk+IFRlc3RFdmVudExpc3RlbmVyQmFzZTo6Z2V0U3VwcG9ydGVkVmVyYm9zaXRpZXMoKSB7CisgICAgICAgIHJldHVybiB7IFZlcmJvc2l0eTo6UXVpZXQsIFZlcmJvc2l0eTo6Tm9ybWFsLCBWZXJib3NpdHk6OkhpZ2ggfTsKKyAgICB9CisKICAgICB2b2lkIFRlc3RFdmVudExpc3RlbmVyQmFzZTo6YXNzZXJ0aW9uU3RhcnRpbmcoQXNzZXJ0aW9uSW5mbyBjb25zdCAmKSB7fQogCiAgICAgYm9vbCBUZXN0RXZlbnRMaXN0ZW5lckJhc2U6OmFzc2VydGlvbkVuZGVkKEFzc2VydGlvblN0YXRzIGNvbnN0ICYpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2Jhc2VzLmhwcCBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2Jhc2VzLmhwcAppbmRleCA0YzAzZDBlLi40YTI3ZGI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9iYXNlcy5ocHAKKysrIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfYmFzZXMuaHBwCkBAIC04LDEzICs4LDE0IEBACiAjaWZuZGVmIFRXT0JMVUVDVUJFU19DQVRDSF9SRVBPUlRFUl9CQVNFU19IUFBfSU5DTFVERUQKICNkZWZpbmUgVFdPQkxVRUNVQkVTX0NBVENIX1JFUE9SVEVSX0JBU0VTX0hQUF9JTkNMVURFRAogCisjaW5jbHVkZSAiLi4vaW50ZXJuYWwvY2F0Y2hfZW5mb3JjZS5oIgogI2luY2x1ZGUgIi4uL2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcmVwb3J0ZXIuaCIKIAogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxjc3RyaW5nPgogI2luY2x1ZGUgPGNmbG9hdD4KICNpbmNsdWRlIDxjc3RkaW8+Ci0jaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y2Fzc2VydD4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8b3N0cmVhbT4KIApAQCAtMzMsNyArMzQsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBtX3JlcG9ydGVyUHJlZnMuc2hvdWxkUmVkaXJlY3RTdGRPdXQgPSBmYWxzZTsKICAgICAgICAgICAgIGlmKCAhRGVyaXZlZFQ6OmdldFN1cHBvcnRlZFZlcmJvc2l0aWVzKCkuY291bnQoIG1fY29uZmlnLT52ZXJib3NpdHkoKSApICkKLSAgICAgICAgICAgICAgICBFeGNlcHRpb246OmRvVGhyb3coIHN0ZDo6ZG9tYWluX2Vycm9yKCAiVmVyYm9zaXR5IGxldmVsIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyByZXBvcnRlciIgKSApOworICAgICAgICAgICAgICAgIENBVENIX0VSUk9SKCAiVmVyYm9zaXR5IGxldmVsIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyByZXBvcnRlciIgKTsKICAgICAgICAgfQogCiAgICAgICAgIFJlcG9ydGVyUHJlZmVyZW5jZXMgZ2V0UHJlZmVyZW5jZXMoKSBjb25zdCBvdmVycmlkZSB7CkBAIC0xNDgsNyArMTQ5LDcgQEAKICAgICAgICAgewogICAgICAgICAgICAgbV9yZXBvcnRlclByZWZzLnNob3VsZFJlZGlyZWN0U3RkT3V0ID0gZmFsc2U7CiAgICAgICAgICAgICBpZiggIURlcml2ZWRUOjpnZXRTdXBwb3J0ZWRWZXJib3NpdGllcygpLmNvdW50KCBtX2NvbmZpZy0+dmVyYm9zaXR5KCkgKSApCi0gICAgICAgICAgICAgICAgRXhjZXB0aW9uOjpkb1Rocm93KCBzdGQ6OmRvbWFpbl9lcnJvciggIlZlcmJvc2l0eSBsZXZlbCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcmVwb3J0ZXIiICkgKTsKKyAgICAgICAgICAgICAgICBDQVRDSF9FUlJPUiggIlZlcmJvc2l0eSBsZXZlbCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcmVwb3J0ZXIiICk7CiAgICAgICAgIH0KICAgICAgICAgfkN1bXVsYXRpdmVSZXBvcnRlckJhc2UoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CiAKQEAgLTIxNiw3ICsyMTcsNyBAQAogICAgICAgICAgICAgbm9kZS0+Y2hpbGRyZW4ucHVzaF9iYWNrKG1fcm9vdFNlY3Rpb24pOwogICAgICAgICAgICAgbV90ZXN0Q2FzZXMucHVzaF9iYWNrKG5vZGUpOwogICAgICAgICAgICAgbV9yb290U2VjdGlvbi5yZXNldCgpOwotICAgICAgICAKKwogICAgICAgICAgICAgYXNzZXJ0KG1fZGVlcGVzdFNlY3Rpb24pOwogICAgICAgICAgICAgbV9kZWVwZXN0U2VjdGlvbi0+c3RkT3V0ID0gdGVzdENhc2VTdGF0cy5zdGRPdXQ7CiAgICAgICAgICAgICBtX2RlZXBlc3RTZWN0aW9uLT5zdGRFcnIgPSB0ZXN0Q2FzZVN0YXRzLnN0ZEVycjsKQEAgLTI2NSw2ICsyNjYsOCBAQAogICAgIHN0cnVjdCBUZXN0RXZlbnRMaXN0ZW5lckJhc2UgOiBTdHJlYW1pbmdSZXBvcnRlckJhc2U8VGVzdEV2ZW50TGlzdGVuZXJCYXNlPiB7CiAgICAgICAgIFRlc3RFdmVudExpc3RlbmVyQmFzZSggUmVwb3J0ZXJDb25maWcgY29uc3QmIF9jb25maWcgKTsKIAorICAgICAgICBzdGF0aWMgc3RkOjpzZXQ8VmVyYm9zaXR5PiBnZXRTdXBwb3J0ZWRWZXJib3NpdGllcygpOworCiAgICAgICAgIHZvaWQgYXNzZXJ0aW9uU3RhcnRpbmcoQXNzZXJ0aW9uSW5mbyBjb25zdCYpIG92ZXJyaWRlOwogICAgICAgICBib29sIGFzc2VydGlvbkVuZGVkKEFzc2VydGlvblN0YXRzIGNvbnN0Jikgb3ZlcnJpZGU7CiAgICAgfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2NvbXBhY3QuY3BwIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfY29tcGFjdC5jcHAKaW5kZXggY2FmNGQzZi4uNjVmNzAyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfY29tcGFjdC5jcHAKKysrIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfY29tcGFjdC5jcHAKQEAgLTI0NSw5ICsyNDUsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgUmVwb3J0ZXJQcmVmZXJlbmNlcyBDb21wYWN0UmVwb3J0ZXI6OmdldFByZWZlcmVuY2VzKCkgY29uc3QgewotICAgICAgICAgICAgUmVwb3J0ZXJQcmVmZXJlbmNlcyBwcmVmczsKLSAgICAgICAgICAgIHByZWZzLnNob3VsZFJlZGlyZWN0U3RkT3V0ID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gcHJlZnM7CisgICAgICAgICAgICByZXR1cm4gbV9yZXBvcnRlclByZWZzOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBDb21wYWN0UmVwb3J0ZXI6Om5vTWF0Y2hpbmdUZXN0Q2FzZXMoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzcGVjICkgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfY29uc29sZS5jcHAgYi9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9jb25zb2xlLmNwcAppbmRleCA1NGI2MmNkLi43NmRjOWVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9jb25zb2xlLmNwcAorKysgYi9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9jb25zb2xlLmNwcApAQCAtMTExLDggKzExMSw2IEBACiAgICAgdm9pZCBwcmludCgpIGNvbnN0IHsKICAgICAgICAgcHJpbnRTb3VyY2VJbmZvKCk7CiAgICAgICAgIGlmIChzdGF0cy50b3RhbHMuYXNzZXJ0aW9ucy50b3RhbCgpID4gMCkgewotICAgICAgICAgICAgaWYgKHJlc3VsdC5pc09rKCkpCi0gICAgICAgICAgICAgICAgc3RyZWFtIDw8ICdcbic7CiAgICAgICAgICAgICBwcmludFJlc3VsdFR5cGUoKTsKICAgICAgICAgICAgIHByaW50T3JpZ2luYWxFeHByZXNzaW9uKCk7CiAgICAgICAgICAgICBwcmludFJlY29uc3RydWN0ZWRFeHByZXNzaW9uKCk7CkBAIC0yNDcsNyArMjQ1LDcgQEAKICAgICAgICAgY2FzZSBVbml0OjpOYW5vc2Vjb25kczoKICAgICAgICAgICAgIHJldHVybiAibnMiOwogICAgICAgICBjYXNlIFVuaXQ6Ok1pY3Jvc2Vjb25kczoKLSAgICAgICAgICAgIHJldHVybiAiwrVzIjsKKyAgICAgICAgICAgIHJldHVybiAidXMiOwogICAgICAgICBjYXNlIFVuaXQ6Ok1pbGxpc2Vjb25kczoKICAgICAgICAgICAgIHJldHVybiAibXMiOwogICAgICAgICBjYXNlIFVuaXQ6OlNlY29uZHM6CmRpZmYgLS1naXQgYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9qdW5pdC5jcHAgYi9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9qdW5pdC5jcHAKaW5kZXggZDEzM2I3MC4uN2U5N2VlMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfanVuaXQuY3BwCisrKyBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2p1bml0LmNwcApAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgIi4uL2ludGVybmFsL2NhdGNoX3Rvc3RyaW5nLmgiCiAjaW5jbHVkZSAiLi4vaW50ZXJuYWwvY2F0Y2hfcmVwb3J0ZXJfcmVnaXN0cmFycy5ocHAiCiAKLSNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8Y3RpbWU+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtNjIsNiArNjIsNyBAQAogICAgICAgICAgICAgeG1sKCBfY29uZmlnLnN0cmVhbSgpICkKICAgICAgICAgewogICAgICAgICAgICAgbV9yZXBvcnRlclByZWZzLnNob3VsZFJlZGlyZWN0U3RkT3V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIG1fcmVwb3J0ZXJQcmVmcy5zaG91bGRSZXBvcnRBbGxBc3NlcnRpb25zID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgSnVuaXRSZXBvcnRlcjo6fkp1bml0UmVwb3J0ZXIoKSB7fQpAQCAtNzUsNiArNzYsMTMgQEAKICAgICB2b2lkIEp1bml0UmVwb3J0ZXI6OnRlc3RSdW5TdGFydGluZyggVGVzdFJ1bkluZm8gY29uc3QmIHJ1bkluZm8gKSAgewogICAgICAgICBDdW11bGF0aXZlUmVwb3J0ZXJCYXNlOjp0ZXN0UnVuU3RhcnRpbmcoIHJ1bkluZm8gKTsKICAgICAgICAgeG1sLnN0YXJ0RWxlbWVudCggInRlc3RzdWl0ZXMiICk7CisgICAgICAgIGlmKCBtX2NvbmZpZy0+cm5nU2VlZCgpICE9IDAgKSB7CisgICAgICAgICAgICB4bWwuc3RhcnRFbGVtZW50KCAicHJvcGVydGllcyIgKTsKKyAgICAgICAgICAgIHhtbC5zY29wZWRFbGVtZW50KCAicHJvcGVydHkiICkKKyAgICAgICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoICJuYW1lIiwgInJhbmRvbS1zZWVkIiApCisgICAgICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCAidmFsdWUiLCBtX2NvbmZpZy0+cm5nU2VlZCgpICk7CisgICAgICAgICAgICB4bWwuZW5kRWxlbWVudCgpOworICAgICAgICB9CiAgICAgfQogCiAgICAgdm9pZCBKdW5pdFJlcG9ydGVyOjp0ZXN0R3JvdXBTdGFydGluZyggR3JvdXBJbmZvIGNvbnN0JiBncm91cEluZm8gKSB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9saXN0ZW5pbmcuY3BwIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfbGlzdGVuaW5nLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGRhZTJmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfbGlzdGVuaW5nLmNwcApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqICBDcmVhdGVkIGJ5IFBoaWwgb24gNS8wOC8yMDE1LgorICogIENvcHlyaWdodCAyMDE1IFR3byBCbHVlIEN1YmVzIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZworICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQorICovCisKKyAjaW5jbHVkZSAiY2F0Y2hfcmVwb3J0ZXJfbGlzdGVuaW5nLmgiCisjaW5jbHVkZSA8Y2Fzc2VydD4KKworbmFtZXNwYWNlIENhdGNoIHsKKworICAgIExpc3RlbmluZ1JlcG9ydGVyOjpMaXN0ZW5pbmdSZXBvcnRlcigpIHsKKyAgICAgICAgLy8gV2Ugd2lsbCBhc3N1bWUgdGhhdCBsaXN0ZW5lcnMgd2lsbCBhbHdheXMgd2FudCBhbGwgYXNzZXJ0aW9ucworICAgICAgICBtX3ByZWZlcmVuY2VzLnNob3VsZFJlcG9ydEFsbEFzc2VydGlvbnMgPSB0cnVlOworICAgIH0KKworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OmFkZExpc3RlbmVyKCBJU3RyZWFtaW5nUmVwb3J0ZXJQdHImJiBsaXN0ZW5lciApIHsKKyAgICAgICAgbV9saXN0ZW5lcnMucHVzaF9iYWNrKCBzdGQ6Om1vdmUoIGxpc3RlbmVyICkgKTsKKyAgICB9CisKKyAgICB2b2lkIExpc3RlbmluZ1JlcG9ydGVyOjphZGRSZXBvcnRlcihJU3RyZWFtaW5nUmVwb3J0ZXJQdHImJiByZXBvcnRlcikgeworICAgICAgICBhc3NlcnQoIW1fcmVwb3J0ZXIgJiYgIkxpc3RlbmluZyByZXBvcnRlciBjYW4gd3JhcCBvbmx5IDEgcmVhbCByZXBvcnRlciIpOworICAgICAgICBtX3JlcG9ydGVyID0gc3RkOjptb3ZlKCByZXBvcnRlciApOworICAgICAgICBtX3ByZWZlcmVuY2VzLnNob3VsZFJlZGlyZWN0U3RkT3V0ID0gbV9yZXBvcnRlci0+Z2V0UHJlZmVyZW5jZXMoKS5zaG91bGRSZWRpcmVjdFN0ZE91dDsKKyAgICB9CisKKyAgICBSZXBvcnRlclByZWZlcmVuY2VzIExpc3RlbmluZ1JlcG9ydGVyOjpnZXRQcmVmZXJlbmNlcygpIGNvbnN0IHsKKyAgICAgICAgcmV0dXJuIG1fcHJlZmVyZW5jZXM7CisgICAgfQorCisgICAgc3RkOjpzZXQ8VmVyYm9zaXR5PiBMaXN0ZW5pbmdSZXBvcnRlcjo6Z2V0U3VwcG9ydGVkVmVyYm9zaXRpZXMoKSB7CisgICAgICAgIHJldHVybiBzdGQ6OnNldDxWZXJib3NpdHk+eyB9OworICAgIH0KKworCisgICAgdm9pZCBMaXN0ZW5pbmdSZXBvcnRlcjo6bm9NYXRjaGluZ1Rlc3RDYXNlcyggc3RkOjpzdHJpbmcgY29uc3QmIHNwZWMgKSB7CisgICAgICAgIGZvciAoIGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMgKSB7CisgICAgICAgICAgICBsaXN0ZW5lci0+bm9NYXRjaGluZ1Rlc3RDYXNlcyggc3BlYyApOworICAgICAgICB9CisgICAgICAgIG1fcmVwb3J0ZXItPm5vTWF0Y2hpbmdUZXN0Q2FzZXMoIHNwZWMgKTsKKyAgICB9CisKKyAgICB2b2lkIExpc3RlbmluZ1JlcG9ydGVyOjpiZW5jaG1hcmtTdGFydGluZyggQmVuY2htYXJrSW5mbyBjb25zdCYgYmVuY2htYXJrSW5mbyApIHsKKyAgICAgICAgZm9yICggYXV0byBjb25zdCYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycyApIHsKKyAgICAgICAgICAgIGxpc3RlbmVyLT5iZW5jaG1hcmtTdGFydGluZyggYmVuY2htYXJrSW5mbyApOworICAgICAgICB9CisgICAgICAgIG1fcmVwb3J0ZXItPmJlbmNobWFya1N0YXJ0aW5nKCBiZW5jaG1hcmtJbmZvICk7CisgICAgfQorICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OmJlbmNobWFya0VuZGVkKCBCZW5jaG1hcmtTdGF0cyBjb25zdCYgYmVuY2htYXJrU3RhdHMgKSB7CisgICAgICAgIGZvciAoIGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMgKSB7CisgICAgICAgICAgICBsaXN0ZW5lci0+YmVuY2htYXJrRW5kZWQoIGJlbmNobWFya1N0YXRzICk7CisgICAgICAgIH0KKyAgICAgICAgbV9yZXBvcnRlci0+YmVuY2htYXJrRW5kZWQoIGJlbmNobWFya1N0YXRzICk7CisgICAgfQorCisgICAgdm9pZCBMaXN0ZW5pbmdSZXBvcnRlcjo6dGVzdFJ1blN0YXJ0aW5nKCBUZXN0UnVuSW5mbyBjb25zdCYgdGVzdFJ1bkluZm8gKSB7CisgICAgICAgIGZvciAoIGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMgKSB7CisgICAgICAgICAgICBsaXN0ZW5lci0+dGVzdFJ1blN0YXJ0aW5nKCB0ZXN0UnVuSW5mbyApOworICAgICAgICB9CisgICAgICAgIG1fcmVwb3J0ZXItPnRlc3RSdW5TdGFydGluZyggdGVzdFJ1bkluZm8gKTsKKyAgICB9CisKKyAgICB2b2lkIExpc3RlbmluZ1JlcG9ydGVyOjp0ZXN0R3JvdXBTdGFydGluZyggR3JvdXBJbmZvIGNvbnN0JiBncm91cEluZm8gKSB7CisgICAgICAgIGZvciAoIGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMgKSB7CisgICAgICAgICAgICBsaXN0ZW5lci0+dGVzdEdyb3VwU3RhcnRpbmcoIGdyb3VwSW5mbyApOworICAgICAgICB9CisgICAgICAgIG1fcmVwb3J0ZXItPnRlc3RHcm91cFN0YXJ0aW5nKCBncm91cEluZm8gKTsKKyAgICB9CisKKworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OnRlc3RDYXNlU3RhcnRpbmcoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdEluZm8gKSB7CisgICAgICAgIGZvciAoIGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMgKSB7CisgICAgICAgICAgICBsaXN0ZW5lci0+dGVzdENhc2VTdGFydGluZyggdGVzdEluZm8gKTsKKyAgICAgICAgfQorICAgICAgICBtX3JlcG9ydGVyLT50ZXN0Q2FzZVN0YXJ0aW5nKCB0ZXN0SW5mbyApOworICAgIH0KKworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OnNlY3Rpb25TdGFydGluZyggU2VjdGlvbkluZm8gY29uc3QmIHNlY3Rpb25JbmZvICkgeworICAgICAgICBmb3IgKCBhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzICkgeworICAgICAgICAgICAgbGlzdGVuZXItPnNlY3Rpb25TdGFydGluZyggc2VjdGlvbkluZm8gKTsKKyAgICAgICAgfQorICAgICAgICBtX3JlcG9ydGVyLT5zZWN0aW9uU3RhcnRpbmcoIHNlY3Rpb25JbmZvICk7CisgICAgfQorCisgICAgdm9pZCBMaXN0ZW5pbmdSZXBvcnRlcjo6YXNzZXJ0aW9uU3RhcnRpbmcoIEFzc2VydGlvbkluZm8gY29uc3QmIGFzc2VydGlvbkluZm8gKSB7CisgICAgICAgIGZvciAoIGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMgKSB7CisgICAgICAgICAgICBsaXN0ZW5lci0+YXNzZXJ0aW9uU3RhcnRpbmcoIGFzc2VydGlvbkluZm8gKTsKKyAgICAgICAgfQorICAgICAgICBtX3JlcG9ydGVyLT5hc3NlcnRpb25TdGFydGluZyggYXNzZXJ0aW9uSW5mbyApOworICAgIH0KKworICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaW5kaWNhdGVzIGlmIHRoZSBtZXNzYWdlcyBidWZmZXIgc2hvdWxkIGJlIGNsZWFyZWQ6CisgICAgYm9vbCBMaXN0ZW5pbmdSZXBvcnRlcjo6YXNzZXJ0aW9uRW5kZWQoIEFzc2VydGlvblN0YXRzIGNvbnN0JiBhc3NlcnRpb25TdGF0cyApIHsKKyAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzICkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4oIGxpc3RlbmVyLT5hc3NlcnRpb25FbmRlZCggYXNzZXJ0aW9uU3RhdHMgKSApOworICAgICAgICB9CisgICAgICAgIHJldHVybiBtX3JlcG9ydGVyLT5hc3NlcnRpb25FbmRlZCggYXNzZXJ0aW9uU3RhdHMgKTsKKyAgICB9CisKKyAgICB2b2lkIExpc3RlbmluZ1JlcG9ydGVyOjpzZWN0aW9uRW5kZWQoIFNlY3Rpb25TdGF0cyBjb25zdCYgc2VjdGlvblN0YXRzICkgeworICAgICAgICBmb3IgKCBhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzICkgeworICAgICAgICAgICAgbGlzdGVuZXItPnNlY3Rpb25FbmRlZCggc2VjdGlvblN0YXRzICk7CisgICAgICAgIH0KKyAgICAgICAgbV9yZXBvcnRlci0+c2VjdGlvbkVuZGVkKCBzZWN0aW9uU3RhdHMgKTsKKyAgICB9CisKKyAgICB2b2lkIExpc3RlbmluZ1JlcG9ydGVyOjp0ZXN0Q2FzZUVuZGVkKCBUZXN0Q2FzZVN0YXRzIGNvbnN0JiB0ZXN0Q2FzZVN0YXRzICkgeworICAgICAgICBmb3IgKCBhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzICkgeworICAgICAgICAgICAgbGlzdGVuZXItPnRlc3RDYXNlRW5kZWQoIHRlc3RDYXNlU3RhdHMgKTsKKyAgICAgICAgfQorICAgICAgICBtX3JlcG9ydGVyLT50ZXN0Q2FzZUVuZGVkKCB0ZXN0Q2FzZVN0YXRzICk7CisgICAgfQorCisgICAgdm9pZCBMaXN0ZW5pbmdSZXBvcnRlcjo6dGVzdEdyb3VwRW5kZWQoIFRlc3RHcm91cFN0YXRzIGNvbnN0JiB0ZXN0R3JvdXBTdGF0cyApIHsKKyAgICAgICAgZm9yICggYXV0byBjb25zdCYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycyApIHsKKyAgICAgICAgICAgIGxpc3RlbmVyLT50ZXN0R3JvdXBFbmRlZCggdGVzdEdyb3VwU3RhdHMgKTsKKyAgICAgICAgfQorICAgICAgICBtX3JlcG9ydGVyLT50ZXN0R3JvdXBFbmRlZCggdGVzdEdyb3VwU3RhdHMgKTsKKyAgICB9CisKKyAgICB2b2lkIExpc3RlbmluZ1JlcG9ydGVyOjp0ZXN0UnVuRW5kZWQoIFRlc3RSdW5TdGF0cyBjb25zdCYgdGVzdFJ1blN0YXRzICkgeworICAgICAgICBmb3IgKCBhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzICkgeworICAgICAgICAgICAgbGlzdGVuZXItPnRlc3RSdW5FbmRlZCggdGVzdFJ1blN0YXRzICk7CisgICAgICAgIH0KKyAgICAgICAgbV9yZXBvcnRlci0+dGVzdFJ1bkVuZGVkKCB0ZXN0UnVuU3RhdHMgKTsKKyAgICB9CisKKworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OnNraXBUZXN0KCBUZXN0Q2FzZUluZm8gY29uc3QmIHRlc3RJbmZvICkgeworICAgICAgICBmb3IgKCBhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzICkgeworICAgICAgICAgICAgbGlzdGVuZXItPnNraXBUZXN0KCB0ZXN0SW5mbyApOworICAgICAgICB9CisgICAgICAgIG1fcmVwb3J0ZXItPnNraXBUZXN0KCB0ZXN0SW5mbyApOworICAgIH0KKworICAgIGJvb2wgTGlzdGVuaW5nUmVwb3J0ZXI6OmlzTXVsdGkoKSBjb25zdCB7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9tdWx0aS5oIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfbGlzdGVuaW5nLmgKc2ltaWxhcml0eSBpbmRleCA4NCUKcmVuYW1lIGZyb20gaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfbXVsdGkuaApyZW5hbWUgdG8gaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfbGlzdGVuaW5nLmgKaW5kZXggOTg1ZDQ0Mi4uZGRkZDdhNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfbXVsdGkuaAorKysgYi9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9saXN0ZW5pbmcuaApAQCAtMTEsMTIgKzExLDE3IEBACiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKLSAgICBjbGFzcyBNdWx0aXBsZVJlcG9ydGVycyA6IHB1YmxpYyBJU3RyZWFtaW5nUmVwb3J0ZXIgeworICAgIGNsYXNzIExpc3RlbmluZ1JlcG9ydGVyIDogcHVibGljIElTdHJlYW1pbmdSZXBvcnRlciB7CiAgICAgICAgIHVzaW5nIFJlcG9ydGVycyA9IHN0ZDo6dmVjdG9yPElTdHJlYW1pbmdSZXBvcnRlclB0cj47Ci0gICAgICAgIFJlcG9ydGVycyBtX3JlcG9ydGVyczsKKyAgICAgICAgUmVwb3J0ZXJzIG1fbGlzdGVuZXJzOworICAgICAgICBJU3RyZWFtaW5nUmVwb3J0ZXJQdHIgbV9yZXBvcnRlciA9IG51bGxwdHI7CisgICAgICAgIFJlcG9ydGVyUHJlZmVyZW5jZXMgbV9wcmVmZXJlbmNlczsKIAogICAgIHB1YmxpYzoKLSAgICAgICAgdm9pZCBhZGQoIElTdHJlYW1pbmdSZXBvcnRlclB0ciYmIHJlcG9ydGVyICk7CisgICAgICAgIExpc3RlbmluZ1JlcG9ydGVyKCk7CisKKyAgICAgICAgdm9pZCBhZGRMaXN0ZW5lciggSVN0cmVhbWluZ1JlcG9ydGVyUHRyJiYgbGlzdGVuZXIgKTsKKyAgICAgICAgdm9pZCBhZGRSZXBvcnRlciggSVN0cmVhbWluZ1JlcG9ydGVyUHRyJiYgcmVwb3J0ZXIgKTsKIAogICAgIHB1YmxpYzogLy8gSVN0cmVhbWluZ1JlcG9ydGVyCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX211bHRpLmNwcCBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX211bHRpLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjNiYjE2MC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9tdWx0aS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMDQgKzAsMCBAQAotLyoKLSAqICBDcmVhdGVkIGJ5IFBoaWwgb24gNS8wOC8yMDE1LgotICogIENvcHlyaWdodCAyMDE1IFR3byBCbHVlIEN1YmVzIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICovCi0KLSAjaW5jbHVkZSAiY2F0Y2hfcmVwb3J0ZXJfbXVsdGkuaCIKLQotbmFtZXNwYWNlIENhdGNoIHsKLQotICAgIHZvaWQgTXVsdGlwbGVSZXBvcnRlcnM6OmFkZCggSVN0cmVhbWluZ1JlcG9ydGVyUHRyJiYgcmVwb3J0ZXIgKSB7Ci0gICAgICAgIG1fcmVwb3J0ZXJzLnB1c2hfYmFjayggc3RkOjptb3ZlKCByZXBvcnRlciApICk7Ci0gICAgfQotCi0gICAgUmVwb3J0ZXJQcmVmZXJlbmNlcyBNdWx0aXBsZVJlcG9ydGVyczo6Z2V0UHJlZmVyZW5jZXMoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBtX3JlcG9ydGVyc1swXS0+Z2V0UHJlZmVyZW5jZXMoKTsKLSAgICB9Ci0KLSAgICBzdGQ6OnNldDxWZXJib3NpdHk+IE11bHRpcGxlUmVwb3J0ZXJzOjpnZXRTdXBwb3J0ZWRWZXJib3NpdGllcygpIHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6c2V0PFZlcmJvc2l0eT57IH07Ci0gICAgfQotCi0KLSAgICB2b2lkIE11bHRpcGxlUmVwb3J0ZXJzOjpub01hdGNoaW5nVGVzdENhc2VzKCBzdGQ6OnN0cmluZyBjb25zdCYgc3BlYyApIHsKLSAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiByZXBvcnRlciA6IG1fcmVwb3J0ZXJzICkKLSAgICAgICAgICAgIHJlcG9ydGVyLT5ub01hdGNoaW5nVGVzdENhc2VzKCBzcGVjICk7Ci0gICAgfQotCi0gICAgdm9pZCBNdWx0aXBsZVJlcG9ydGVyczo6YmVuY2htYXJrU3RhcnRpbmcoIEJlbmNobWFya0luZm8gY29uc3QmIGJlbmNobWFya0luZm8gKSB7Ci0gICAgICAgIGZvciggYXV0byBjb25zdCYgcmVwb3J0ZXIgOiBtX3JlcG9ydGVycyApCi0gICAgICAgICAgICByZXBvcnRlci0+YmVuY2htYXJrU3RhcnRpbmcoIGJlbmNobWFya0luZm8gKTsKLSAgICB9Ci0gICAgdm9pZCBNdWx0aXBsZVJlcG9ydGVyczo6YmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzIGNvbnN0JiBiZW5jaG1hcmtTdGF0cyApIHsKLSAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiByZXBvcnRlciA6IG1fcmVwb3J0ZXJzICkKLSAgICAgICAgICAgIHJlcG9ydGVyLT5iZW5jaG1hcmtFbmRlZCggYmVuY2htYXJrU3RhdHMgKTsKLSAgICB9Ci0KLSAgICB2b2lkIE11bHRpcGxlUmVwb3J0ZXJzOjp0ZXN0UnVuU3RhcnRpbmcoIFRlc3RSdW5JbmZvIGNvbnN0JiB0ZXN0UnVuSW5mbyApIHsKLSAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiByZXBvcnRlciA6IG1fcmVwb3J0ZXJzICkKLSAgICAgICAgICAgIHJlcG9ydGVyLT50ZXN0UnVuU3RhcnRpbmcoIHRlc3RSdW5JbmZvICk7Ci0gICAgfQotCi0gICAgdm9pZCBNdWx0aXBsZVJlcG9ydGVyczo6dGVzdEdyb3VwU3RhcnRpbmcoIEdyb3VwSW5mbyBjb25zdCYgZ3JvdXBJbmZvICkgewotICAgICAgICBmb3IoIGF1dG8gY29uc3QmIHJlcG9ydGVyIDogbV9yZXBvcnRlcnMgKQotICAgICAgICAgICAgcmVwb3J0ZXItPnRlc3RHcm91cFN0YXJ0aW5nKCBncm91cEluZm8gKTsKLSAgICB9Ci0KLQotICAgIHZvaWQgTXVsdGlwbGVSZXBvcnRlcnM6OnRlc3RDYXNlU3RhcnRpbmcoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdEluZm8gKSB7Ci0gICAgICAgIGZvciggYXV0byBjb25zdCYgcmVwb3J0ZXIgOiBtX3JlcG9ydGVycyApCi0gICAgICAgICAgICByZXBvcnRlci0+dGVzdENhc2VTdGFydGluZyggdGVzdEluZm8gKTsKLSAgICB9Ci0KLSAgICB2b2lkIE11bHRpcGxlUmVwb3J0ZXJzOjpzZWN0aW9uU3RhcnRpbmcoIFNlY3Rpb25JbmZvIGNvbnN0JiBzZWN0aW9uSW5mbyApIHsKLSAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiByZXBvcnRlciA6IG1fcmVwb3J0ZXJzICkKLSAgICAgICAgICAgIHJlcG9ydGVyLT5zZWN0aW9uU3RhcnRpbmcoIHNlY3Rpb25JbmZvICk7Ci0gICAgfQotCi0gICAgdm9pZCBNdWx0aXBsZVJlcG9ydGVyczo6YXNzZXJ0aW9uU3RhcnRpbmcoIEFzc2VydGlvbkluZm8gY29uc3QmIGFzc2VydGlvbkluZm8gKSB7Ci0gICAgICAgIGZvciggYXV0byBjb25zdCYgcmVwb3J0ZXIgOiBtX3JlcG9ydGVycyApCi0gICAgICAgICAgICByZXBvcnRlci0+YXNzZXJ0aW9uU3RhcnRpbmcoIGFzc2VydGlvbkluZm8gKTsKLSAgICB9Ci0KLSAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiB0aGUgbWVzc2FnZXMgYnVmZmVyIHNob3VsZCBiZSBjbGVhcmVkOgotICAgIGJvb2wgTXVsdGlwbGVSZXBvcnRlcnM6OmFzc2VydGlvbkVuZGVkKCBBc3NlcnRpb25TdGF0cyBjb25zdCYgYXNzZXJ0aW9uU3RhdHMgKSB7Ci0gICAgICAgIGJvb2wgY2xlYXJCdWZmZXIgPSBmYWxzZTsKLSAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiByZXBvcnRlciA6IG1fcmVwb3J0ZXJzICkKLSAgICAgICAgICAgIGNsZWFyQnVmZmVyIHw9IHJlcG9ydGVyLT5hc3NlcnRpb25FbmRlZCggYXNzZXJ0aW9uU3RhdHMgKTsKLSAgICAgICAgcmV0dXJuIGNsZWFyQnVmZmVyOwotICAgIH0KLQotICAgIHZvaWQgTXVsdGlwbGVSZXBvcnRlcnM6OnNlY3Rpb25FbmRlZCggU2VjdGlvblN0YXRzIGNvbnN0JiBzZWN0aW9uU3RhdHMgKSB7Ci0gICAgICAgIGZvciggYXV0byBjb25zdCYgcmVwb3J0ZXIgOiBtX3JlcG9ydGVycyApCi0gICAgICAgICAgICByZXBvcnRlci0+c2VjdGlvbkVuZGVkKCBzZWN0aW9uU3RhdHMgKTsKLSAgICB9Ci0KLSAgICB2b2lkIE11bHRpcGxlUmVwb3J0ZXJzOjp0ZXN0Q2FzZUVuZGVkKCBUZXN0Q2FzZVN0YXRzIGNvbnN0JiB0ZXN0Q2FzZVN0YXRzICkgewotICAgICAgICBmb3IoIGF1dG8gY29uc3QmIHJlcG9ydGVyIDogbV9yZXBvcnRlcnMgKQotICAgICAgICAgICAgcmVwb3J0ZXItPnRlc3RDYXNlRW5kZWQoIHRlc3RDYXNlU3RhdHMgKTsKLSAgICB9Ci0KLSAgICB2b2lkIE11bHRpcGxlUmVwb3J0ZXJzOjp0ZXN0R3JvdXBFbmRlZCggVGVzdEdyb3VwU3RhdHMgY29uc3QmIHRlc3RHcm91cFN0YXRzICkgewotICAgICAgICBmb3IoIGF1dG8gY29uc3QmIHJlcG9ydGVyIDogbV9yZXBvcnRlcnMgKQotICAgICAgICAgICAgcmVwb3J0ZXItPnRlc3RHcm91cEVuZGVkKCB0ZXN0R3JvdXBTdGF0cyApOwotICAgIH0KLQotICAgIHZvaWQgTXVsdGlwbGVSZXBvcnRlcnM6OnRlc3RSdW5FbmRlZCggVGVzdFJ1blN0YXRzIGNvbnN0JiB0ZXN0UnVuU3RhdHMgKSB7Ci0gICAgICAgIGZvciggYXV0byBjb25zdCYgcmVwb3J0ZXIgOiBtX3JlcG9ydGVycyApCi0gICAgICAgICAgICByZXBvcnRlci0+dGVzdFJ1bkVuZGVkKCB0ZXN0UnVuU3RhdHMgKTsKLSAgICB9Ci0KLQotICAgIHZvaWQgTXVsdGlwbGVSZXBvcnRlcnM6OnNraXBUZXN0KCBUZXN0Q2FzZUluZm8gY29uc3QmIHRlc3RJbmZvICkgewotICAgICAgICBmb3IoIGF1dG8gY29uc3QmIHJlcG9ydGVyIDogbV9yZXBvcnRlcnMgKQotICAgICAgICAgICAgcmVwb3J0ZXItPnNraXBUZXN0KCB0ZXN0SW5mbyApOwotICAgIH0KLQotICAgIGJvb2wgTXVsdGlwbGVSZXBvcnRlcnM6OmlzTXVsdGkoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCmRpZmYgLS1naXQgYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl90YXAuaHBwIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfdGFwLmhwcAppbmRleCBlZGI3NWI1Li4xYmZlNGY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl90YXAuaHBwCisrKyBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3RhcC5ocHAKQEAgLTI2LDEzICsyNiwxMSBAQAogICAgICAgICB+VEFQUmVwb3J0ZXIoKSBvdmVycmlkZTsKIAogICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgZ2V0RGVzY3JpcHRpb24oKSB7Ci0gICAgICAgICAgICByZXR1cm4gIlJlcG9ydHMgdGVzdCByZXN1bHRzIGluIFRBUCBmb3JtYXQsIHN1aXRhYmxlIGZvciB0ZXN0IGhhcm5lc2VzIjsKKyAgICAgICAgICAgIHJldHVybiAiUmVwb3J0cyB0ZXN0IHJlc3VsdHMgaW4gVEFQIGZvcm1hdCwgc3VpdGFibGUgZm9yIHRlc3QgaGFybmVzc2VzIjsKICAgICAgICAgfQogCiAgICAgICAgIFJlcG9ydGVyUHJlZmVyZW5jZXMgZ2V0UHJlZmVyZW5jZXMoKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgICAgICAgICBSZXBvcnRlclByZWZlcmVuY2VzIHByZWZzOwotICAgICAgICAgICAgcHJlZnMuc2hvdWxkUmVkaXJlY3RTdGRPdXQgPSBmYWxzZTsKLSAgICAgICAgICAgIHJldHVybiBwcmVmczsKKyAgICAgICAgICAgIHJldHVybiBtX3JlcG9ydGVyUHJlZnM7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIG5vTWF0Y2hpbmdUZXN0Q2FzZXMoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzcGVjICkgb3ZlcnJpZGUgewpAQCAtNDQsOSArNDIsOSBAQAogICAgICAgICBib29sIGFzc2VydGlvbkVuZGVkKCBBc3NlcnRpb25TdGF0cyBjb25zdCYgX2Fzc2VydGlvblN0YXRzICkgb3ZlcnJpZGUgewogICAgICAgICAgICAgKytjb3VudGVyOwogCisgICAgICAgICAgICBzdHJlYW0gPDwgIiMgIiA8PCBjdXJyZW50VGVzdENhc2VJbmZvLT5uYW1lIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgIEFzc2VydGlvblByaW50ZXIgcHJpbnRlciggc3RyZWFtLCBfYXNzZXJ0aW9uU3RhdHMsIGNvdW50ZXIgKTsKICAgICAgICAgICAgIHByaW50ZXIucHJpbnQoKTsKLSAgICAgICAgICAgIHN0cmVhbSA8PCAiICMgIiA8PCBjdXJyZW50VGVzdENhc2VJbmZvLT5uYW1lIDsKIAogICAgICAgICAgICAgc3RyZWFtIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwIGIvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwCmluZGV4IGRkZDBkOTIuLmVjYTI4ODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3RlYW1jaXR5LmhwcAorKysgYi9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl90ZWFtY2l0eS5ocHAKQEAgLTk3LDEyICs5NywxMiBAQAogICAgICAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFdhczo6T2s6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpJbmZvOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFdhczo6V2FybmluZzoKLSAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbjo6ZG9UaHJvdyggc3RkOjpkb21haW5fZXJyb3IoICJJbnRlcm5hbCBlcnJvciBpbiBUZWFtQ2l0eSByZXBvcnRlciIgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgQ0FUQ0hfRVJST1IoICJJbnRlcm5hbCBlcnJvciBpbiBUZWFtQ2l0eSByZXBvcnRlciIgKTsKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgY2FzZXMgYXJlIGhlcmUgdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5ncwogICAgICAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFdhczo6VW5rbm93bjoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OkZhaWx1cmVCaXQ6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpFeGNlcHRpb246Ci0gICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb246OmRvVGhyb3coIHN0ZDo6ZG9tYWluX2Vycm9yKCAiTm90IGltcGxlbWVudGVkIiApICk7CisgICAgICAgICAgICAgICAgICAgICAgICBDQVRDSF9FUlJPUiggIk5vdCBpbXBsZW1lbnRlZCIgKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYoIGFzc2VydGlvblN0YXRzLmluZm9NZXNzYWdlcy5zaXplKCkgPT0gMSApCiAgICAgICAgICAgICAgICAgICAgIG1zZyA8PCAiIHdpdGggbWVzc2FnZToiOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfeG1sLmNwcCBiL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3htbC5jcHAKaW5kZXggYjcyMWQ0NC4uOTAyMDE0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfeG1sLmNwcAorKysgYi9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl94bWwuY3BwCkBAIC0yNCw2ICsyNCw3IEBACiAgICAgICAgIG1feG1sKF9jb25maWcuc3RyZWFtKCkpCiAgICAgewogICAgICAgICBtX3JlcG9ydGVyUHJlZnMuc2hvdWxkUmVkaXJlY3RTdGRPdXQgPSB0cnVlOworICAgICAgICBtX3JlcG9ydGVyUHJlZnMuc2hvdWxkUmVwb3J0QWxsQXNzZXJ0aW9ucyA9IHRydWU7CiAgICAgfQogCiAgICAgWG1sUmVwb3J0ZXI6On5YbWxSZXBvcnRlcigpID0gZGVmYXVsdDsKQEAgLTU0LDYgKzU1LDkgQEAKICAgICAgICAgbV94bWwuc3RhcnRFbGVtZW50KCAiQ2F0Y2giICk7CiAgICAgICAgIGlmKCAhbV9jb25maWctPm5hbWUoKS5lbXB0eSgpICkKICAgICAgICAgICAgIG1feG1sLndyaXRlQXR0cmlidXRlKCAibmFtZSIsIG1fY29uZmlnLT5uYW1lKCkgKTsKKyAgICAgICAgaWYoIG1fY29uZmlnLT5ybmdTZWVkKCkgIT0gMCApCisgICAgICAgICAgICBtX3htbC5zY29wZWRFbGVtZW50KCAiUmFuZG9tbmVzcyIgKQorICAgICAgICAgICAgICAgIC53cml0ZUF0dHJpYnV0ZSggInNlZWQiLCBtX2NvbmZpZy0+cm5nU2VlZCgpICk7CiAgICAgfQogCiAgICAgdm9pZCBYbWxSZXBvcnRlcjo6dGVzdEdyb3VwU3RhcnRpbmcoIEdyb3VwSW5mbyBjb25zdCYgZ3JvdXBJbmZvICkgewpAQCAtODAsOCArODQsNyBAQAogICAgICAgICBTdHJlYW1pbmdSZXBvcnRlckJhc2U6OnNlY3Rpb25TdGFydGluZyggc2VjdGlvbkluZm8gKTsKICAgICAgICAgaWYoIG1fc2VjdGlvbkRlcHRoKysgPiAwICkgewogICAgICAgICAgICAgbV94bWwuc3RhcnRFbGVtZW50KCAiU2VjdGlvbiIgKQotICAgICAgICAgICAgICAgIC53cml0ZUF0dHJpYnV0ZSggIm5hbWUiLCB0cmltKCBzZWN0aW9uSW5mby5uYW1lICkgKQotICAgICAgICAgICAgICAgIC53cml0ZUF0dHJpYnV0ZSggImRlc2NyaXB0aW9uIiwgc2VjdGlvbkluZm8uZGVzY3JpcHRpb24gKTsKKyAgICAgICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoICJuYW1lIiwgdHJpbSggc2VjdGlvbkluZm8ubmFtZSApICk7CiAgICAgICAgICAgICB3cml0ZVNvdXJjZUluZm8oIHNlY3Rpb25JbmZvLmxpbmVJbmZvICk7CiAgICAgICAgICAgICBtX3htbC5lbnN1cmVUYWdDbG9zZWQoKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvbWlzYy9TZWxmVGVzdC52Y3hwcm9qLnVzZXIgYi9taXNjL1NlbGZUZXN0LnZjeHByb2oudXNlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmZmYzU3Ci0tLSAvZGV2L251bGwKKysrIGIvbWlzYy9TZWxmVGVzdC52Y3hwcm9qLnVzZXIKQEAgLTAsMCArMSwyMyBAQAor77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKzxQcm9qZWN0IFRvb2xzVmVyc2lvbj0iMTUuMCIgeG1sbnM9Imh0dHA6Ly9zY2hlbWFzLm1pY3Jvc29mdC5jb20vZGV2ZWxvcGVyL21zYnVpbGQvMjAwMyI+CisgIDxJdGVtRGVmaW5pdGlvbkdyb3VwIENvbmRpdGlvbj0iJyQoQ29uZmlndXJhdGlvbil8JChQbGF0Zm9ybSknPT0nRGVidWd8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxVc2VGdWxsUGF0aHM+ZmFsc2U8L1VzZUZ1bGxQYXRocz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8eDY0JyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxVc2VGdWxsUGF0aHM+ZmFsc2U8L1VzZUZ1bGxQYXRocz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J0RlYnVnfFdpbjMyJyI+CisgICAgPENsQ29tcGlsZT4KKyAgICAgIDxVc2VGdWxsUGF0aHM+ZmFsc2U8L1VzZUZ1bGxQYXRocz4KKyAgICA8L0NsQ29tcGlsZT4KKyAgPC9JdGVtRGVmaW5pdGlvbkdyb3VwPgorICA8SXRlbURlZmluaXRpb25Hcm91cCBDb25kaXRpb249IickKENvbmZpZ3VyYXRpb24pfCQoUGxhdGZvcm0pJz09J1JlbGVhc2V8V2luMzInIj4KKyAgICA8Q2xDb21waWxlPgorICAgICAgPFVzZUZ1bGxQYXRocz5mYWxzZTwvVXNlRnVsbFBhdGhzPgorICAgIDwvQ2xDb21waWxlPgorICA8L0l0ZW1EZWZpbml0aW9uR3JvdXA+Cis8L1Byb2plY3Q+CmRpZmYgLS1naXQgYS9taXNjL2FwcHZleW9yQnVpbGRDb25maWd1cmF0aW9uU2NyaXB0LmJhdCBiL21pc2MvYXBwdmV5b3JCdWlsZENvbmZpZ3VyYXRpb25TY3JpcHQuYmF0CmluZGV4IDI3ZWZjZDEuLmYwN2JiNzAgMTAwNjQ0Ci0tLSBhL21pc2MvYXBwdmV5b3JCdWlsZENvbmZpZ3VyYXRpb25TY3JpcHQuYmF0CisrKyBiL21pc2MvYXBwdmV5b3JCdWlsZENvbmZpZ3VyYXRpb25TY3JpcHQuYmF0CkBAIC0xLDEzICsxLDIyIEBACi1AUkVNICAjIEluIGRlYnVnIGJ1aWxkLCB3ZSB3YW50IHRvCi1AUkVNICAjIDEpIFByZWJ1aWxkIG1lbWNoZWNrIHJlZGlyZWN0ZXIKLUBSRU0gICMgMikgUmVnZW5lcmF0ZSBzaW5nbGUgaGVhZGVyIGluY2x1ZGUgZm9yIGV4YW1wbGVzCi1AUkVNICAjIDMpIEVuYWJsZSBidWlsZGluZyBleGFtcGxlcworU0VUTE9DQUwgRW5hYmxlRGVsYXllZEV4cGFuc2lvbgorCitAUkVNICAjIFBvc3NpYmlsaXRpZXM6CitAUkVNICAjIERlYnVnIGJ1aWxkICsgY292ZXJhZ2UKK0BSRU0gICMgRGVidWcgYnVpbGQgKyBleGFtcGxlcworQFJFTSAgIyBEZWJ1ZyBidWlsZCArICAgLS0tCitAUkVNICAjIFJlbGVhc2UgYnVpbGQKIGlmICIlQ09ORklHVVJBVElPTiUiPT0iRGVidWciICgKLSAgcHl0aG9uIHNjcmlwdHNcZ2VuZXJhdGVTaW5nbGVIZWFkZXIucHkKLSAgY21ha2UgLUhtaXNjIC1CYnVpbGQtbWlzYyAtQSVQTEFURk9STSUKLSAgY21ha2UgLS1idWlsZCBidWlsZC1taXNjCi0gIGNtYWtlIC1ILiAtQkJ1aWxkIC1BJVBMQVRGT1JNJSAtRFVTRV9XTUFJTj0ld21haW4lIC1EQ0FUQ0hfQlVJTERfRVhBTVBMRVM9T04gLURNRU1PUllDSEVDS19DT01NQU5EPWJ1aWxkLW1pc2NcRGVidWdcQ292ZXJhZ2VIZWxwZXIuZXhlIC1ETUVNT1JZQ0hFQ0tfQ09NTUFORF9PUFRJT05TPS0tc2VwLS0gLURNRU1PUllDSEVDS19UWVBFPVZhbGdyaW5kCisgIGlmICIlY292ZXJhZ2UlIj09IjEiICgKKyAgICBAUkVNICMgY292ZXJhZ2UgbmVlZHMgdG8gYnVpbGQgdGhlIHNwZWNpYWwgaGVscGVyIGFzIHdlbGwgYXMgdGhlIG1haW4KKyAgICBjbWFrZSAtSG1pc2MgLUJidWlsZC1taXNjIC1BJVBMQVRGT1JNJSB8fCBleGl0IC9iICFFUlJPUkxFVkVMIQorICAgIGNtYWtlIC0tYnVpbGQgYnVpbGQtbWlzYyB8fCBleGl0IC9iICFFUlJPUkxFVkVMIQorICAgIGNtYWtlIC1ILiAtQkJ1aWxkIC1BJVBMQVRGT1JNJSAtRFVTRV9XTUFJTj0ld21haW4lIC1ETUVNT1JZQ0hFQ0tfQ09NTUFORD1idWlsZC1taXNjXERlYnVnXENvdmVyYWdlSGVscGVyLmV4ZSAtRE1FTU9SWUNIRUNLX0NPTU1BTkRfT1BUSU9OUz0tLXNlcC0tIC1ETUVNT1JZQ0hFQ0tfVFlQRT1WYWxncmluZCB8fCBleGl0IC9iICFFUlJPUkxFVkVMISB8fCBleGl0IC9iICFFUlJPUkxFVkVMIQorICApIGVsc2UgKAorICAgIEBSRU0gIyBXZSBrbm93IHRoYXQgY292ZXJhZ2UgaXMgMAorICAgIHB5dGhvbiBzY3JpcHRzXGdlbmVyYXRlU2luZ2xlSGVhZGVyLnB5IHx8IGV4aXQgL2IgIUVSUk9STEVWRUwhCisgICAgY21ha2UgLUguIC1CQnVpbGQgLUElUExBVEZPUk0lIC1EVVNFX1dNQUlOPSV3bWFpbiUgLURDQVRDSF9CVUlMRF9FWEFNUExFUz0lZXhhbXBsZXMlIC1EQ0FUQ0hfQlVJTERfRVhUUkFfVEVTVFM9JWV4YW1wbGVzJSB8fCBleGl0IC9iICFFUlJPUkxFVkVMIQorICApCiApCiBpZiAiJUNPTkZJR1VSQVRJT04lIj09IlJlbGVhc2UiICgKLSAgY21ha2UgLUguIC1CQnVpbGQgLUElUExBVEZPUk0lIC1EVVNFX1dNQUlOPSV3bWFpbiUKKyAgY21ha2UgLUguIC1CQnVpbGQgLUElUExBVEZPUk0lIC1EVVNFX1dNQUlOPSV3bWFpbiUgfHwgZXhpdCAvYiAhRVJST1JMRVZFTCEKICkKZGlmZiAtLWdpdCBhL21pc2MvYXBwdmV5b3JUZXN0UnVuU2NyaXB0LmJhdCBiL21pc2MvYXBwdmV5b3JUZXN0UnVuU2NyaXB0LmJhdAppbmRleCBmZGNjMmNlLi5jMTI5ZDk5IDEwMDY0NAotLS0gYS9taXNjL2FwcHZleW9yVGVzdFJ1blNjcmlwdC5iYXQKKysrIGIvbWlzYy9hcHB2ZXlvclRlc3RSdW5TY3JpcHQuYmF0CkBAIC0xLDkgKzEsMTUgQEAKK1NFVExPQ0FMIEVuYWJsZURlbGF5ZWRFeHBhbnNpb24KKwogY2QgQnVpbGQKIGlmICIlQ09ORklHVVJBVElPTiUiPT0iRGVidWciICgKLSAgY3Rlc3QgLWogMiAtQyAlQ09ORklHVVJBVElPTiUgLUQgRXhwZXJpbWVudGFsTWVtQ2hlY2sKLSAgcHl0aG9uIC4uXG1pc2NcYXBwdmV5b3JNZXJnZUNvdmVyYWdlU2NyaXB0LnB5Ci0gIGNvZGVjb3YgLS1yb290IC4uIC0tbm8tY29sb3IgLS1kaXNhYmxlIGdjb3YgLWYgY29iZXJ0dXJhLnhtbCAtdCAlQ09ERUNPVl9UT0tFTiUKKyAgaWYgIiVjb3ZlcmFnZSUiPT0iMSIgKAorICAgIGN0ZXN0IC1qIDIgLUMgJUNPTkZJR1VSQVRJT04lIC1EIEV4cGVyaW1lbnRhbE1lbUNoZWNrIHx8IGV4aXQgL2IgIUVSUk9STEVWRUwhCisgICAgcHl0aG9uIC4uXG1pc2NcYXBwdmV5b3JNZXJnZUNvdmVyYWdlU2NyaXB0LnB5IHx8IGV4aXQgL2IgIUVSUk9STEVWRUwhCisgICAgY29kZWNvdiAtLXJvb3QgLi4gLS1uby1jb2xvciAtLWRpc2FibGUgZ2NvdiAtZiBjb2JlcnR1cmEueG1sIC10ICVDT0RFQ09WX1RPS0VOJSB8fCBleGl0IC9iICFFUlJPUkxFVkVMIQorICApIGVsc2UgKAorICAgIGN0ZXN0IC1qIDIgLUMgJUNPTkZJR1VSQVRJT04lIHx8IGV4aXQgL2IgIUVSUk9STEVWRUwhCisgICkKICkKIGlmICIlQ09ORklHVVJBVElPTiUiPT0iUmVsZWFzZSIgKAotICBjdGVzdCAtaiAyIC1DICVDT05GSUdVUkFUSU9OJQorICBjdGVzdCAtaiAyIC1DICVDT05GSUdVUkFUSU9OJSB8fCBleGl0IC9iICFFUlJPUkxFVkVMIQogKQpkaWZmIC0tZ2l0IGEvbWlzYy9jb3ZlcmFnZS1oZWxwZXIuY3BwIGIvbWlzYy9jb3ZlcmFnZS1oZWxwZXIuY3BwCmluZGV4IDk3ODNkNjkuLmE2NjQzODMgMTAwNjQ0Ci0tLSBhL21pc2MvY292ZXJhZ2UtaGVscGVyLmNwcAorKysgYi9taXNjL2NvdmVyYWdlLWhlbHBlci5jcHAKQEAgLTksNiArOSwzOCBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKK3N0ZDo6c3RyaW5nIGVzY2FwZV9hcmcoY29uc3Qgc3RkOjpzdHJpbmcmIGFyZykgeworICAgIGlmIChhcmcuZW1wdHkoKSA9PSBmYWxzZSAmJgorICAgICAgICBhcmcuZmluZF9maXJzdF9vZigiIFx0XG5cdlwiIikgPT0gYXJnLm5wb3MpIHsKKyAgICAgICAgcmV0dXJuIGFyZzsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBlc2NhcGVkOworICAgIGVzY2FwZWQucHVzaF9iYWNrKCciJyk7CisgICAgZm9yIChhdXRvIGl0ID0gYXJnLmJlZ2luKCk7IDsgKytpdCkgeworICAgICAgICBpbnQgbnVtX2JhY2tzbGFzaGVzID0gMDsKKworICAgICAgICB3aGlsZSAoaXQgIT0gYXJnLmVuZCgpICYmICppdCA9PSAnXFwnKSB7CisgICAgICAgICAgICArK2l0OworICAgICAgICAgICAgKytudW1fYmFja3NsYXNoZXM7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaXQgPT0gYXJnLmVuZCgpKSB7CisgICAgICAgICAgICBlc2NhcGVkLmFwcGVuZChudW1fYmFja3NsYXNoZXMgKiAyLCAnXFwnKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKCppdCA9PSAnIicpIHsKKyAgICAgICAgICAgIGVzY2FwZWQuYXBwZW5kKG51bV9iYWNrc2xhc2hlcyAqIDIgKyAxLCAnXFwnKTsKKyAgICAgICAgICAgIGVzY2FwZWQucHVzaF9iYWNrKCppdCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlc2NhcGVkLmFwcGVuZChudW1fYmFja3NsYXNoZXMsICdcXCcpOworICAgICAgICAgICAgZXNjYXBlZC5wdXNoX2JhY2soKml0KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlc2NhcGVkLnB1c2hfYmFjaygnIicpOworCisgICAgcmV0dXJuIGVzY2FwZWQ7Cit9CisKIAogdm9pZCBjcmVhdGVfZW1wdHlfZmlsZShzdGQ6OnN0cmluZyBjb25zdCYgcGF0aCkgewogICAgIHN0ZDo6b2ZzdHJlYW0gb2ZzKHBhdGgpOwpAQCAtNjAsOCArOTIsOSBAQAogdm9pZCBleGVjX2NtZChzdGQ6OnN0cmluZyBjb25zdCYgY21kLCBpbnQgbG9nX251bSwgc3RkOjpzdHJpbmcgY29uc3QmIHBhdGgpIHsKICAgICBzdGQ6OmFycmF5PGNoYXIsIDEyOD4gYnVmZmVyOwogI2lmIGRlZmluZWQoX1dJTjMyKQorICAgIC8vIGNtZCBoYXMgYWxyZWFkeSBiZWVuIGVzY2FwZWQgb3V0c2lkZSB0aGlzIGZ1bmN0aW9uLgogICAgIGF1dG8gcmVhbF9jbWQgPSAiT3BlbkNwcENvdmVyYWdlIC0tZXhwb3J0X3R5cGUgYmluYXJ5OmNvdi1yZXBvcnQiICsgc3RkOjp0b19zdHJpbmcobG9nX251bSkKLSAgICAgICAgKyAiLmJpbiAtLXF1aWV0ICIgKyAiLS1zb3VyY2VzICIgKyBwYXRoICsgIiAtLWNvdmVyX2NoaWxkcmVuIC0tICIgKyBjbWQ7CisgICAgICAgICsgIi5iaW4gLS1xdWlldCAiICsgIi0tc291cmNlcyAiICsgZXNjYXBlX2FyZyhwYXRoKSArICIgLS1jb3Zlcl9jaGlsZHJlbiAtLSAiICsgY21kOwogICAgIHN0ZDo6Y291dCA8PCAiPT09IE1hcmtlciA9PT06IENtZDogIiA8PCByZWFsX2NtZCA8PCAnXG4nOwogICAgIHN0ZDo6c2hhcmVkX3B0cjxGSUxFPiBwaXBlKF9wb3BlbihyZWFsX2NtZC5jX3N0cigpLCAiciIpLCBfcGNsb3NlKTsKICNlbHNlIC8vIEp1c3QgZm9yIHRlc3RpbmcsIGluIHRoZSByZWFsIHdvcmxkIHdlIHdpbGwgYWx3YXlzIHdvcmsgdW5kZXIgV0lOMzIKQEAgLTkxLDEwICsxMjQsMTUgQEAKICAgICBhc3NlcnQoc2VwIC0gYmVnaW4oYXJncykgPT0gMiAmJiAiU3RydWN0dXJlIGRpZmZlcnMgZnJvbSBleHBlY3RlZCEiKTsKIAogICAgIGF1dG8gbnVtID0gcGFyc2VfbG9nX2ZpbGVfYXJnKGFyZ3NbMV0pOwotCisgICAgCiAgICAgYXV0byBjbWRsaW5lID0gc3RkOjphY2N1bXVsYXRlKCsrc2VwLCBlbmQoYXJncyksIHN0ZDo6c3RyaW5ne30sIFtdIChjb25zdCBzdGQ6OnN0cmluZyYgbGhzLCBjb25zdCBzdGQ6OnN0cmluZyYgcmhzKSB7Ci0gICAgICAgIHJldHVybiBsaHMgKyAnICcgKyByaHM7CisgICAgICAgIHJldHVybiBsaHMgKyAnICcgKyBlc2NhcGVfYXJnKHJocyk7CiAgICAgfSk7CiAKLSAgICBleGVjX2NtZChjbWRsaW5lLCBudW0sIHdpbmRvd3NpZnlfcGF0aChjYXRjaF9wYXRoKGFyZ3NbMF0pKSk7CisgICAgdHJ5IHsKKyAgICAgICAgcmV0dXJuIGV4ZWNfY21kKGNtZGxpbmUsIG51bSwgd2luZG93c2lmeV9wYXRoKGNhdGNoX3BhdGgoYXJnc1swXSkpKTsKKyAgICB9IGNhdGNoIChzdGQ6OmV4Y2VwdGlvbiBjb25zdCYgZXgpIHsKKyAgICAgICAgc3RkOjpjZXJyIDw8ICJIZWxwZXIgZmFpbGVkIHdpdGg6ICciIDw8IGV4LndoYXQoKSA8PCAiJ1xuIjsKKyAgICAgICAgcmV0dXJuIDEyOworICAgIH0KIH0KZGlmZiAtLWdpdCBhL21pc2MvaW5zdGFsbE9wZW5DcHBDb3ZlcmFnZS5wczEgYi9taXNjL2luc3RhbGxPcGVuQ3BwQ292ZXJhZ2UucHMxCmluZGV4IDlkYmZmY2EuLmQyNzdhNTUgMTAwNjQ0Ci0tLSBhL21pc2MvaW5zdGFsbE9wZW5DcHBDb3ZlcmFnZS5wczEKKysrIGIvbWlzYy9pbnN0YWxsT3BlbkNwcENvdmVyYWdlLnBzMQpAQCAtMSw1ICsxLDUgQEAKLSMgRG93bmxvYWRzIGFyZSBkb25lIGZyb20gdGhlIG9maWNpYWwgZ2l0aHViIHJlbGVhc2UgcGFnZSBsaW5rcwotJGRvd25sb2FkVXJsID0gImh0dHBzOi8vZ2l0aHViLmNvbS9PcGVuQ3BwQ292ZXJhZ2UvT3BlbkNwcENvdmVyYWdlL3JlbGVhc2VzL2Rvd25sb2FkL3JlbGVhc2UtMC45LjYuMS9PcGVuQ3BwQ292ZXJhZ2VTZXR1cC14NjQtMC45LjYuMS5leGUiCisjIERvd25sb2FkcyBhcmUgZG9uZSBmcm9tIHRoZSBvZmZpY2lhbCBnaXRodWIgcmVsZWFzZSBwYWdlIGxpbmtzCiskZG93bmxvYWRVcmwgPSAiaHR0cHM6Ly9naXRodWIuY29tL09wZW5DcHBDb3ZlcmFnZS9PcGVuQ3BwQ292ZXJhZ2UvcmVsZWFzZXMvZG93bmxvYWQvcmVsZWFzZS0wLjkuNy4wL09wZW5DcHBDb3ZlcmFnZVNldHVwLXg2NC0wLjkuNy4wLmV4ZSIKICRpbnN0YWxsZXJQYXRoID0gW1N5c3RlbS5JTy5QYXRoXTo6Q29tYmluZSgkRW52OlVTRVJQUk9GSUxFLCAiRG93bmxvYWRzIiwgIk9wZW5DcHBDb3ZlcmFnZVNldHVwLmV4ZSIpCiAKIGlmKC1Ob3QgKFRlc3QtUGF0aCAkaW5zdGFsbGVyUGF0aCkpIHsKZGlmZiAtLWdpdCBhL3Byb2plY3RzL0JlbmNobWFyay9CZW5jaE1haW4uY3BwIGIvcHJvamVjdHMvQmVuY2htYXJrL0JlbmNoTWFpbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyZWY0ZWQuLjAwMDAwMDAKLS0tIGEvcHJvamVjdHMvQmVuY2htYXJrL0JlbmNoTWFpbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLS8qCi0gKiAgQ3JlYXRlZCBieSBNYXJ0aW4gb24gMTYvMDEvMjAxNy4KLSAqCi0gKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZwotICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQotICovCi0KLSNkZWZpbmUgQ0FUQ0hfQ09ORklHX01BSU4KLSNpbmNsdWRlICJjYXRjaC5ocHAiCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9CZW5jaG1hcmsvU3RyaW5naWZpY2F0aW9uQmVuY2guY3BwIGIvcHJvamVjdHMvQmVuY2htYXJrL1N0cmluZ2lmaWNhdGlvbkJlbmNoLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzY1YjRlOS4uMDAwMDAwMAotLS0gYS9wcm9qZWN0cy9CZW5jaG1hcmsvU3RyaW5naWZpY2F0aW9uQmVuY2guY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqICBDcmVhdGVkIGJ5IE1hcnRpbiBvbiAxNi8wMS8yMDE3LgotICoKLSAqICBEaXN0cmlidXRlZCB1bmRlciB0aGUgQm9vc3QgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjAuIChTZWUgYWNjb21wYW55aW5nCi0gKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCi0gKi8KLQotI2luY2x1ZGUgImNhdGNoLmhwcCIKLQotI2luY2x1ZGUgPHZlY3Rvcj4KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotVEVTVF9DQVNFKCJTdWNjZXNzZnVsIHRlc3RzIC0tIFJFUVVJUkUiLCAiW1N1Y2Nlc3NdIikgewotICAgIGNvbnN0IHN0ZDo6c2l6ZV90IHN6ID0gMSAqIDEwMjQgKiAxMDI0OwotCi0KLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNpemVfdD4gdmVjOyB2ZWMucmVzZXJ2ZShzeik7Ci0gICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IHN6OyArK2kpewotICAgICAgICB2ZWMucHVzaF9iYWNrKGkpOwotICAgICAgICBSRVFVSVJFKHZlYy5iYWNrKCkgPT0gaSk7Ci0gICAgfQotfQotCi0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi1URVNUX0NBU0UoIlN1Y2Nlc3NmdWwgdGVzdHMgLS0gQ0hFQ0siLCAiW1N1Y2Nlc3NdIikgewotICAgIGNvbnN0IHN0ZDo6c2l6ZV90IHN6ID0gMSAqIDEwMjQgKiAxMDI0OwotCi0KLSAgICBzdGQ6OnZlY3RvcjxzdGQ6OnNpemVfdD4gdmVjOyB2ZWMucmVzZXJ2ZShzeik7Ci0gICAgZm9yIChzdGQ6OnNpemVfdCBpID0gMDsgaSA8IHN6OyArK2kpewotICAgICAgICB2ZWMucHVzaF9iYWNrKGkpOwotICAgICAgICBDSEVDSyh2ZWMuYmFjaygpID09IGkpOwotICAgIH0KLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotVEVTVF9DQVNFKCJVbnN1Y2Nlc3NmdWwgdGVzdHMgLS0gQ0hFQ0siLCAiW0ZhaWx1cmVdIikgewotICAgIGNvbnN0IHN0ZDo6c2l6ZV90IHN6ID0gMTAyNCAqIDEwMjQ7Ci0KLQotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c2l6ZV90PiB2ZWM7IHZlYy5yZXNlcnZlKHN6KTsKLSAgICBmb3IgKHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgc3o7ICsraSl7Ci0gICAgICAgIHZlYy5wdXNoX2JhY2soaSk7Ci0gICAgICAgIENIRUNLKHZlYy5zaXplKCkgPT0gaSk7Ci0gICAgfQotfQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvQmVuY2htYXJrL3JlYWRtZS50eHQgYi9wcm9qZWN0cy9CZW5jaG1hcmsvcmVhZG1lLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzRkMmZhYi4uMDAwMDAwMAotLS0gYS9wcm9qZWN0cy9CZW5jaG1hcmsvcmVhZG1lLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDQgKzAsMCBAQAotVGhpcyBpcyB2ZXJ5IG11Y2ggYSB3b3JrIGluIHByb2dyZXNzLgotVGhlIHBhc3QgcmVzdWx0cyBhcmUgc3RhbmRhcmRpemVkIHRvIGEgZGV2ZWxvcGVyJ3MgbWFjaGluZSwKLXRoZSBiZW5jaG1hcmtpbmcgc2NyaXB0IGlzIGJhc2ljIGFuZCB0aGVyZSBhcmUgb25seSAzIGJlbmNobWFya3MsCi1idXQgdGhpcyBzaG91bGQgZ2V0IGJldHRlciBpbiB0aW1lLiBGb3Igbm93LCBhdCBsZWFzdCB0aGVyZSBpcyBzb21ldGhpbmcgdG8gZ28gYnkuCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9CZW5jaG1hcmsvcmVzdWx0cy8yMDE3LTAxLTE0VDIxLTUzLTQ5LWUzNjU5Y2RkZGQ0M2JhNGRmOWU0ODQ2NjMwYmU2YTZhN2JkODVhMDcucmVzdWx0IGIvcHJvamVjdHMvQmVuY2htYXJrL3Jlc3VsdHMvMjAxNy0wMS0xNFQyMS01My00OS1lMzY1OWNkZGRkNDNiYTRkZjllNDg0NjYzMGJlNmE2YTdiZDg1YTA3LnJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGI2ZmM2NS4uMDAwMDAwMAotLS0gYS9wcm9qZWN0cy9CZW5jaG1hcmsvcmVzdWx0cy8yMDE3LTAxLTE0VDIxLTUzLTQ5LWUzNjU5Y2RkZGQ0M2JhNGRmOWU0ODQ2NjMwYmU2YTZhN2JkODVhMDcucmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1TdWNjZXNzZnVsIHRlc3RzIC0tIENIRUNLOiBtZWRpYW46IDMuMzgxMTYgKHMpLCBzdGRkZXY6IDAuMTE1NjczNjYyOTIwMDE1MzQgKHMpCi1TdWNjZXNzZnVsIHRlc3RzIC0tIFJFUVVJUkU6IG1lZGlhbjogMy40Nzk5NTUgKHMpLCBzdGRkZXY6IDAuMTYyOTU5NzI4OTA3MzQ1NTYgKHMpCi1VbnN1Y2Nlc3NmdWwgdGVzdHMgLS0gQ0hFQ0s6IG1lZGlhbjogMS45NjY4OTUgKHMpLCBzdGRkZXY6IDAuMDYzMjM0ODg1MjQ3MTY1NzIgKHMpCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9CZW5jaG1hcmsvcmVzdWx0cy8yMDE3LTAxLTE0VDIxLTU5LTA4LWExZTliODQxZmY1MDBiMmYzOWNjZmQ0MTkzYWU0NTBjYjY1M2RhMDUucmVzdWx0IGIvcHJvamVjdHMvQmVuY2htYXJrL3Jlc3VsdHMvMjAxNy0wMS0xNFQyMS01OS0wOC1hMWU5Yjg0MWZmNTAwYjJmMzljY2ZkNDE5M2FlNDUwY2I2NTNkYTA1LnJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOThjODQ2MC4uMDAwMDAwMAotLS0gYS9wcm9qZWN0cy9CZW5jaG1hcmsvcmVzdWx0cy8yMDE3LTAxLTE0VDIxLTU5LTA4LWExZTliODQxZmY1MDBiMmYzOWNjZmQ0MTkzYWU0NTBjYjY1M2RhMDUucmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1TdWNjZXNzZnVsIHRlc3RzIC0tIENIRUNLOiBtZWRpYW46IDEuMzAzMTIgKHMpLCBzdGRkZXY6IDAuMDg3NTk4MTg1NTc4NjIxNzYgKHMpCi1TdWNjZXNzZnVsIHRlc3RzIC0tIFJFUVVJUkU6IG1lZGlhbjogMS4zNDE1MzUgKHMpLCBzdGRkZXY6IDAuMTQ3OTE5MzM5MDE0MzU3NiAocykKLVVuc3VjY2Vzc2Z1bCB0ZXN0cyAtLSBDSEVDSzogbWVkaWFuOiAxLjk2Nzc1NSAocyksIHN0ZGRldjogMC4wNzkyMTEwNDEyMTI2OTk1OSAocykKZGlmZiAtLWdpdCBhL3Byb2plY3RzL0JlbmNobWFyay9yZXN1bHRzLzIwMTctMDEtMTVUMDktMzUtMTQtM2I5OGEwMTY2ZjdiNzE5NmViYTJhZDUxODE3NGQxYTc3MTY1MTY2ZC5yZXN1bHQgYi9wcm9qZWN0cy9CZW5jaG1hcmsvcmVzdWx0cy8yMDE3LTAxLTE1VDA5LTM1LTE0LTNiOThhMDE2NmY3YjcxOTZlYmEyYWQ1MTgxNzRkMWE3NzE2NTE2NmQucmVzdWx0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmZTYzNjZiLi4wMDAwMDAwCi0tLSBhL3Byb2plY3RzL0JlbmNobWFyay9yZXN1bHRzLzIwMTctMDEtMTVUMDktMzUtMTQtM2I5OGEwMTY2ZjdiNzE5NmViYTJhZDUxODE3NGQxYTc3MTY1MTY2ZC5yZXN1bHQKKysrIC9kZXYvbnVsbApAQCAtMSwzICswLDAgQEAKLVN1Y2Nlc3NmdWwgdGVzdHMgLS0gQ0hFQ0s6IG1lZGlhbjogMS4yOTgyIChzKSwgc3RkZGV2OiAwLjAxOTU0MDY0ODgyOTIxNDA4NCAocykKLVN1Y2Nlc3NmdWwgdGVzdHMgLS0gUkVRVUlSRTogbWVkaWFuOiAxLjMwMTAyIChzKSwgc3RkZGV2OiAwLjAxNDc1ODQzMDU0NzM5Mjk3NCAocykKLVVuc3VjY2Vzc2Z1bCB0ZXN0cyAtLSBDSEVDSzogbWVkaWFuOiAxNS41MjAxOTk5OTk5OTk5OTkgKHMpLCBzdGRkZXY6IDAuMDk1MzYzNTk0MjY0ODUwOTQgKHMpCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9CZW5jaG1hcmsvcmVzdWx0cy8yMDE3LTAxLTI5VDIyLTA4LTM2LTYwZjhlYmVjNDljNWJjNThkMzYwNGJmMWE3MmNkM2Y3ZDEyOWJmMmUucmVzdWx0IGIvcHJvamVjdHMvQmVuY2htYXJrL3Jlc3VsdHMvMjAxNy0wMS0yOVQyMi0wOC0zNi02MGY4ZWJlYzQ5YzViYzU4ZDM2MDRiZjFhNzJjZDNmN2QxMjliZjJlLnJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzliNGQ2NC4uMDAwMDAwMAotLS0gYS9wcm9qZWN0cy9CZW5jaG1hcmsvcmVzdWx0cy8yMDE3LTAxLTI5VDIyLTA4LTM2LTYwZjhlYmVjNDljNWJjNThkMzYwNGJmMWE3MmNkM2Y3ZDEyOWJmMmUucmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1TdWNjZXNzZnVsIHRlc3RzIC0tIENIRUNLOiBtZWRpYW46IDAuNzY4OTAxNDk5OTk5OTk5OSAocyksIHN0ZGRldjogMC4wMjEyNzUxMjA3ODgwMTA2OCAocykKLVN1Y2Nlc3NmdWwgdGVzdHMgLS0gUkVRVUlSRTogbWVkaWFuOiAwLjc3Mjg0NSAocyksIHN0ZGRldjogMC4wMzAxMTYzODM4MTM2NTA1MiAocykKLVVuc3VjY2Vzc2Z1bCB0ZXN0cyAtLSBDSEVDSzogbWVkaWFuOiAxNS40OSAocyksIHN0ZGRldjogMC41MzYwODg1NzExNDM5MDMgKHMpCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9CZW5jaG1hcmsvcmVzdWx0cy8yMDE3LTAxLTI5VDIzLTEzLTM1LWJjYWEyZjk2NDZjNWNlNTA3NThmODU4MjMwN2M5OTUwMWE5MzJlMWEucmVzdWx0IGIvcHJvamVjdHMvQmVuY2htYXJrL3Jlc3VsdHMvMjAxNy0wMS0yOVQyMy0xMy0zNS1iY2FhMmY5NjQ2YzVjZTUwNzU4Zjg1ODIzMDdjOTk1MDFhOTMyZTFhLnJlc3VsdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWI4MjMzMC4uMDAwMDAwMAotLS0gYS9wcm9qZWN0cy9CZW5jaG1hcmsvcmVzdWx0cy8yMDE3LTAxLTI5VDIzLTEzLTM1LWJjYWEyZjk2NDZjNWNlNTA3NThmODU4MjMwN2M5OTUwMWE5MzJlMWEucmVzdWx0CisrKyAvZGV2L251bGwKQEAgLTEsMyArMCwwIEBACi1TdWNjZXNzZnVsIHRlc3RzIC0tIENIRUNLOiBtZWRpYW46IDAuNzc1NzY5IChzKSwgc3RkZGV2OiAwLjAxNDgwMjEyOTEzMjEzNjUyNSAocykKLVN1Y2Nlc3NmdWwgdGVzdHMgLS0gUkVRVUlSRTogbWVkaWFuOiAwLjc4NTIzNSAocyksIHN0ZGRldjogMC4wMzUzMjY3MjgzNjgzNDg5NiAocykKLVVuc3VjY2Vzc2Z1bCB0ZXN0cyAtLSBDSEVDSzogbWVkaWFuOiAxNS4xNTY2MDAwMDAwMDAwMDEgKHMpLCBzdGRkZXY6IDAuMjgzMjM3NTY3MzQ1MDc0MiAocykKZGlmZiAtLWdpdCBhL3Byb2plY3RzL0NNYWtlTGlzdHMudHh0IGIvcHJvamVjdHMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNjYWE4MgotLS0gL2Rldi9udWxsCisrKyBiL3Byb2plY3RzL0NNYWtlTGlzdHMudHh0CkBAIC0wLDAgKzEsMzY3IEBACitpbmNsdWRlKE1pc2NGdW5jdGlvbnMpCisKKyMjIyMKKyMgVGVtcG9yYXJ5IHdvcmthcm91bmQgZm9yIFZTIHRvb2xzZXQgY2hhbmdlcyBpbiAyMDE3CisjIFdlIG5lZWQgdG8gZGlzYWJsZSA8VXNlRnVsbFBhdGhzPiBwcm9wZXJ0eSwgYnV0IENNYWtlIGRvZXNuJ3Qgc3VwcG9ydCBpdAorIyB1bnRpbCAzLjEzIChub3QgeWV0IHJlbGVhc2VkKQorIyMjIworaWYgKE1TVkMpCitjb25maWd1cmVfZmlsZSgke0NBVENIX0RJUn0vbWlzYy9TZWxmVGVzdC52Y3hwcm9qLnVzZXIKKyAgICAgICAgICAgICAgICR7Q01BS0VfQklOQVJZX0RJUn0vcHJvamVjdHMKKyAgICAgICAgICAgICAgIENPUFlPTkxZKQorZW5kaWYoTVNWQykgI1RlbXBvcmFyeSB3b3JrYXJvdW5kCisKKworIyBkZWZpbmUgdGhlIHNvdXJjZXMgb2YgdGhlIHNlbGYgdGVzdAorIyBQbGVhc2Uga2VlcCB0aGVzZSBvcmRlcmVkIGFscGhhYmV0aWNhbGx5CitzZXQoVEVTVF9TT1VSQ0VTCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vVGVzdE1haW4uY3BwCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcAorICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAKKyAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9JbnRyb3NwZWN0aXZlVGVzdHMvVGFnQWxpYXMudGVzdHMuY3BwCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAKKyAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcAorICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvQXBwcm94LnRlc3RzLmNwcAorICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvQkRELnRlc3RzLmNwcAorICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvQmVuY2htYXJrLnRlc3RzLmNwcAorICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9Db21waWxhdGlvbi50ZXN0cy5jcHAKKyAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9Vc2FnZVRlc3RzL0NvbmRpdGlvbi50ZXN0cy5jcHAKKyAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9Vc2FnZVRlc3RzL0RlY29tcG9zaXRpb24udGVzdHMuY3BwCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9FbnVtVG9TdHJpbmcudGVzdHMuY3BwCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcAorICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAKKyAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9Ub1N0cmluZ0Nocm9uby50ZXN0cy5jcHAKKyAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9Vc2FnZVRlc3RzL1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHAKKyAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9Vc2FnZVRlc3RzL1RvU3RyaW5nT3B0aW9uYWwudGVzdHMuY3BwCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9Ub1N0cmluZ1BhaXIudGVzdHMuY3BwCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9Ub1N0cmluZ1R1cGxlLnRlc3RzLmNwcAorICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvVG9TdHJpbmdWYXJpYW50LnRlc3RzLmNwcAorICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcAorICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcAorICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1VzYWdlVGVzdHMvVmFyaWFkaWNNYWNyb3MudGVzdHMuY3BwCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAKKyAgICAgICAgKQorQ2hlY2tGaWxlTGlzdChURVNUX1NPVVJDRVMgJHtTRUxGX1RFU1RfRElSfSkKKworIyBBIHNldCBvZiBpbXBsIGZpbGVzIHRoYXQganVzdCAjaW5jbHVkZSBhIHNpbmdsZSBoZWFkZXIKKyMgUGxlYXNlIGtlZXAgdGhlc2Ugb3JkZXJlZCBhbHBoYWJldGljYWxseQorc2V0KFNVUlJPR0FURV9TT1VSQ0VTCisgICAgICAgICR7U0VMRl9URVNUX0RJUn0vU3Vycm9nYXRlQ3Bwcy9jYXRjaF9jb25zb2xlX2NvbG91ci5jcHAKKyAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9TdXJyb2dhdGVDcHBzL2NhdGNoX2RlYnVnZ2VyLmNwcAorICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1N1cnJvZ2F0ZUNwcHMvY2F0Y2hfaW50ZXJmYWNlc19yZXBvcnRlci5jcHAKKyAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9TdXJyb2dhdGVDcHBzL2NhdGNoX29wdGlvbi5jcHAKKyAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9TdXJyb2dhdGVDcHBzL2NhdGNoX3N0cmVhbS5jcHAKKyAgICAgICAgJHtTRUxGX1RFU1RfRElSfS9TdXJyb2dhdGVDcHBzL2NhdGNoX3Rlc3RfY2FzZV90cmFja2VyLmNwcAorICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1N1cnJvZ2F0ZUNwcHMvY2F0Y2hfdGVzdF9zcGVjLmNwcAorICAgICAgICAke1NFTEZfVEVTVF9ESVJ9L1N1cnJvZ2F0ZUNwcHMvY2F0Y2hfeG1sd3JpdGVyLmNwcAorICAgICAgICApCitDaGVja0ZpbGVMaXN0KFNVUlJPR0FURV9TT1VSQ0VTICR7U0VMRl9URVNUX0RJUn0vU3Vycm9nYXRlQ3BwcykKKworCisjIFBsZWFzZSBrZWVwIHRoZXNlIG9yZGVyZWQgYWxwaGFiZXRpY2FsbHkKK3NldChUT1BfTEVWRUxfSEVBREVSUworICAgICAgICAke0hFQURFUl9ESVJ9L2NhdGNoLmhwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2NhdGNoX3dpdGhfbWFpbi5ocHAKKyAgICAgICAgKQorQ2hlY2tGaWxlTGlzdChUT1BfTEVWRUxfSEVBREVSUyAke0hFQURFUl9ESVJ9KQorCisjIFBsZWFzZSBrZWVwIHRoZXNlIG9yZGVyZWQgYWxwaGFiZXRpY2FsbHkKK3NldChFWFRFUk5BTF9IRUFERVJTCisgICAgICAgICR7SEVBREVSX0RJUn0vZXh0ZXJuYWwvY2xhcmEuaHBwCisgICAgICAgICkKK0NoZWNrRmlsZUxpc3QoRVhURVJOQUxfSEVBREVSUyAke0hFQURFUl9ESVJ9L2V4dGVybmFsKQorCisKKyMgUGxlYXNlIGtlZXAgdGhlc2Ugb3JkZXJlZCBhbHBoYWJldGljYWxseQorc2V0KElOVEVSTkFMX0hFQURFUlMKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9hcHByb3guaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2Fzc2VydGlvbmhhbmRsZXIuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2Fzc2VydGlvbmluZm8uaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2Fzc2VydGlvbnJlc3VsdC5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfY2FwdHVyZS5ocHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9jYXB0dXJlX21hdGNoZXJzLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9jbGFyYS5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfY29tbWFuZGxpbmUuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2NvbW1vbi5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfY29tcGlsZXJfY2FwYWJpbGl0aWVzLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9jb25maWcuaHBwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfY29uc29sZV9jb2xvdXIuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2NvbnRleHQuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2RlYnVnX2NvbnNvbGUuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2RlYnVnZ2VyLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9kZWNvbXBvc2VyLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9kZWZhdWx0X21haW4uaHBwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfZW5mb3JjZS5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfZXJybm9fZ3VhcmQuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2V4Y2VwdGlvbl90cmFuc2xhdG9yX3JlZ2lzdHJ5LmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9leHRlcm5hbF9pbnRlcmZhY2VzLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9mYXRhbF9jb25kaXRpb24uaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2dlbmVyYXRvcnMuaHBwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfZ2VuZXJhdG9yc19nZW5lcmljLmhwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2dlbmVyYXRvcnNfc3BlY2lmaWMuaHBwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW1wbC5ocHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2NhcHR1cmUuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfY29uZmlnLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2V4Y2VwdGlvbi5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc19yZWdpc3RyeV9odWIuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcmVwb3J0ZXIuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcnVubmVyLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3RhZ19hbGlhc19yZWdpc3RyeS5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfaW50ZXJmYWNlc190ZXN0Y2FzZS5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbGVha19kZXRlY3Rvci5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbGlzdC5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnMuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9tYXRjaGVyc19nZW5lcmljLmhwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX21hdGNoZXJzX3N0cmluZy5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfdmVjdG9yLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9tZXNzYWdlLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9tZXRhLmhwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX29iamMuaHBwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfb2JqY19hcmMuaHBwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfb3B0aW9uLmhwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX291dHB1dF9yZWRpcmVjdC5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfcGxhdGZvcm0uaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3BvbHlmaWxscy5ocHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9wcmVwcm9jZXNzb3IuaHBwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3JlZW5hYmxlX3dhcm5pbmdzLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9yZXBvcnRlcl9yZWdpc3RyYXJzLmhwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3JlcG9ydGVyX3JlZ2lzdHJ5LmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9yZXN1bHRfdHlwZS5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfcnVuX2NvbnRleHQuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2JlbmNobWFyay5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbi5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfc2VjdGlvbl9pbmZvLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zZXNzaW9uLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zaW5nbGV0b25zLmhwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3N0YXJ0dXBfZXhjZXB0aW9uX3JlZ2lzdHJ5LmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zdHJlYW0uaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3N0cmluZ3JlZi5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfc3RyaW5nX21hbmlwLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zdXBwcmVzc193YXJuaW5ncy5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdGFnX2FsaWFzLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90YWdfYWxpYXNfYXV0b3JlZ2lzdHJhci5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdGFnX2FsaWFzX3JlZ2lzdHJ5LmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfaW5mby5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdGVzdF9jYXNlX3JlZ2lzdHJ5X2ltcGwuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3Rlc3RfY2FzZV90cmFja2VyLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90ZXN0X3JlZ2lzdHJ5LmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90ZXN0X3NwZWMuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3Rlc3Rfc3BlY19wYXJzZXIuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3RleHQuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3RpbWVyLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90b19zdHJpbmcuaHBwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdG9zdHJpbmcuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3RvdGFscy5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdHlwZV90cmFpdHMuaHBwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdW5jYXVnaHRfZXhjZXB0aW9ucy5oCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdXNlcl9pbnRlcmZhY2VzLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF92ZXJzaW9uLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF93aWxkY2FyZF9wYXR0ZXJuLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF93aW5kb3dzX2hfcHJveHkuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3htbHdyaXRlci5oCisgICAgICAgICkKK3NldChJTVBMX1NPVVJDRVMKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9hcHByb3guY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfYXNzZXJ0aW9uaGFuZGxlci5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9hc3NlcnRpb25yZXN1bHQuY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfYmVuY2htYXJrLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2NhcHR1cmVfbWF0Y2hlcnMuY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfY29tbWFuZGxpbmUuY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfY29tbW9uLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2NvbmZpZy5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9jb25zb2xlX2NvbG91ci5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9jb250ZXh0LmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2RlYnVnX2NvbnNvbGUuY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfZGVidWdnZXIuY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfZGVjb21wb3Nlci5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9lbmZvcmNlLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2Vycm5vX2d1YXJkLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2V4Y2VwdGlvbl90cmFuc2xhdG9yX3JlZ2lzdHJ5LmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ZhdGFsX2NvbmRpdGlvbi5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9nZW5lcmF0b3JzLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfY2FwdHVyZS5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2NvbmZpZy5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2V4Y2VwdGlvbi5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX2dlbmVyYXRvcnRyYWNrZXIuaAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcmVnaXN0cnlfaHViLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfcnVubmVyLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX2ludGVyZmFjZXNfdGVzdGNhc2UuY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbGlzdC5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9sZWFrX2RldGVjdG9yLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX21hdGNoZXJzLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX21hdGNoZXJzX2dlbmVyaWMuY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfc3RyaW5nLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX21lc3NhZ2UuY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfb3V0cHV0X3JlZGlyZWN0LmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3JlZ2lzdHJ5X2h1Yi5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9pbnRlcmZhY2VzX3JlcG9ydGVyLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3BvbHlmaWxscy5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9yZXBvcnRlcl9yZWdpc3RyeS5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9yZXN1bHRfdHlwZS5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9ydW5fY29udGV4dC5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zZWN0aW9uLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3NlY3Rpb25faW5mby5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zZXNzaW9uLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3NpbmdsZXRvbnMuY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfc3RhcnR1cF9leGNlcHRpb25fcmVnaXN0cnkuY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfc3RyZWFtLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3N0cmluZ3JlZi5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF9zdHJpbmdfbWFuaXAuY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfdGFnX2FsaWFzLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3RhZ19hbGlhc19hdXRvcmVnaXN0cmFyLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3RhZ19hbGlhc19yZWdpc3RyeS5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfaW5mby5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfcmVnaXN0cnlfaW1wbC5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90ZXN0X2Nhc2VfdHJhY2tlci5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90ZXN0X3JlZ2lzdHJ5LmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3Rlc3Rfc3BlYy5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF90ZXN0X3NwZWNfcGFyc2VyLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3RpbWVyLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3Rvc3RyaW5nLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3RvdGFscy5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF91bmNhdWdodF9leGNlcHRpb25zLmNwcAorICAgICAgICAke0hFQURFUl9ESVJ9L2ludGVybmFsL2NhdGNoX3ZlcnNpb24uY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vaW50ZXJuYWwvY2F0Y2hfd2lsZGNhcmRfcGF0dGVybi5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9pbnRlcm5hbC9jYXRjaF94bWx3cml0ZXIuY3BwCisgICAgICAgICkKK3NldChJTlRFUk5BTF9GSUxFUyAke0lNUExfU09VUkNFU30gJHtJTlRFUk5BTF9IRUFERVJTfSkKK0NoZWNrRmlsZUxpc3QoSU5URVJOQUxfRklMRVMgJHtIRUFERVJfRElSfS9pbnRlcm5hbCkKKworIyBQbGVhc2Uga2VlcCB0aGVzZSBvcmRlcmVkIGFscGhhYmV0aWNhbGx5CitzZXQoUkVQT1JURVJfSEVBREVSUworICAgICAgICAke0hFQURFUl9ESVJ9L3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9hdXRvbWFrZS5ocHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfYmFzZXMuaHBwCisgICAgICAgICR7SEVBREVSX0RJUn0vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2NvbXBhY3QuaAorICAgICAgICAke0hFQURFUl9ESVJ9L3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9jb25zb2xlLmgKKyAgICAgICAgJHtIRUFERVJfRElSfS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfanVuaXQuaAorICAgICAgICAke0hFQURFUl9ESVJ9L3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9saXN0ZW5pbmcuaAorICAgICAgICAke0hFQURFUl9ESVJ9L3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl90YXAuaHBwCisgICAgICAgICR7SEVBREVSX0RJUn0vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX3RlYW1jaXR5LmhwcAorICAgICAgICAke0hFQURFUl9ESVJ9L3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl94bWwuaAorICAgICAgICApCitzZXQoUkVQT1JURVJfU09VUkNFUworICAgICAgICAke0hFQURFUl9ESVJ9L3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9iYXNlcy5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfY29tcGFjdC5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfY29uc29sZS5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfanVuaXQuY3BwCisgICAgICAgICR7SEVBREVSX0RJUn0vcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2xpc3RlbmluZy5jcHAKKyAgICAgICAgJHtIRUFERVJfRElSfS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfeG1sLmNwcAorICAgICAgICApCitzZXQoUkVQT1JURVJfRklMRVMgJHtSRVBPUlRFUl9IRUFERVJTfSAke1JFUE9SVEVSX1NPVVJDRVN9KQorQ2hlY2tGaWxlTGlzdChSRVBPUlRFUl9GSUxFUyAke0hFQURFUl9ESVJ9L3JlcG9ydGVycykKKworIyBTcGVjaWZ5IHRoZSBoZWFkZXJzLCB0b28sIHNvIENMaW9uIHJlY29nbmlzZXMgdGhlbSBhcyBwcm9qZWN0IGZpbGVzCitzZXQoSEVBREVSUworICAgICAgICAke1RPUF9MRVZFTF9IRUFERVJTfQorICAgICAgICAke0VYVEVSTkFMX0hFQURFUlN9CisgICAgICAgICR7SU5URVJOQUxfSEVBREVSU30KKyAgICAgICAgJHtSRVBPUlRFUl9IRUFERVJTfQorICAgICAgICApCisKKyMgUHJvdmlkZSBzb21lIGdyb3VwaW5ncyBmb3IgSURFcworU09VUkNFX0dST1VQKCJUZXN0cyIgRklMRVMgJHtURVNUX1NPVVJDRVN9KQorU09VUkNFX0dST1VQKCJTdXJyb2dhdGVzIiBGSUxFUyAke1NVUlJPR0FURV9TT1VSQ0VTfSkKKworaW5jbHVkZShDVGVzdCkKKworYWRkX2V4ZWN1dGFibGUoU2VsZlRlc3QgJHtURVNUX1NPVVJDRVN9ICR7SU1QTF9TT1VSQ0VTfSAke1JFUE9SVEVSX1NPVVJDRVN9ICR7U1VSUk9HQVRFX1NPVVJDRVN9ICR7SEVBREVSU30pCit0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyhTZWxmVGVzdCBQUklWQVRFICR7SEVBREVSX0RJUn0pCisKK2lmKFVTRV9DUFAxNykKKyAgICBtZXNzYWdlKFNUQVRVUyAiRW5hYmxpbmcgQysrMTciKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgU2VsZlRlc3QgUFJPUEVSVFkgQ1hYX1NUQU5EQVJEIDE3KQorZWxzZWlmKFVTRV9DUFAxNCkKKyAgICBtZXNzYWdlKFNUQVRVUyAiRW5hYmxpbmcgQysrMTQiKQorICAgIHNldF9wcm9wZXJ0eShUQVJHRVQgU2VsZlRlc3QgUFJPUEVSVFkgQ1hYX1NUQU5EQVJEIDE0KQorZWxzZSgpCisgICAgbWVzc2FnZShTVEFUVVMgIkVuYWJsaW5nIEMrKzExIikKKyAgICBzZXRfcHJvcGVydHkoVEFSR0VUIFNlbGZUZXN0IFBST1BFUlRZIENYWF9TVEFOREFSRCAxMSkKK2VuZGlmKCkKKworc2V0X3Byb3BlcnR5KFRBUkdFVCBTZWxmVGVzdCBQUk9QRVJUWSBDWFhfU1RBTkRBUkRfUkVRVUlSRUQgT04pCitzZXRfcHJvcGVydHkoVEFSR0VUIFNlbGZUZXN0IFBST1BFUlRZIENYWF9FWFRFTlNJT05TIE9GRikKKworaWYgKENBVENIX0VOQUJMRV9DT1ZFUkFHRSkKKyAgICBzZXQoRU5BQkxFX0NPVkVSQUdFIE9OIENBQ0hFIEJPT0wgIkVuYWJsZSBjb3ZlcmFnZSBidWlsZC4iIEZPUkNFKQorICAgIGZpbmRfcGFja2FnZShjb2RlY292KQorICAgIGFkZF9jb3ZlcmFnZShTZWxmVGVzdCkKKyAgICBsaXN0KEFQUEVORCBMQ09WX1JFTU9WRV9QQVRURVJOUyAiJy91c3IvKiciKQorICAgIGNvdmVyYWdlX2V2YWx1YXRlKCkKK2VuZGlmKCkKKworIyBBZGQgcGVyIGNvbXBpbGVyIG9wdGlvbnMKK2lmICggQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIkNsYW5nfEFwcGxlQ2xhbmd8R05VIiApCisgICAgdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyggU2VsZlRlc3QgUFJJVkFURSAtV2FsbCAtV2V4dHJhIC1XdW5yZWFjaGFibGUtY29kZSAtV3BlZGFudGljIC1XbWlzc2luZy1kZWNsYXJhdGlvbnMgKQorICAgIGlmIChDQVRDSF9FTkFCTEVfV0VSUk9SKQorICAgICAgICB0YXJnZXRfY29tcGlsZV9vcHRpb25zKCBTZWxmVGVzdCBQUklWQVRFIC1XZXJyb3IpCisgICAgZW5kaWYoKQorZW5kaWYoKQorIyBDbGFuZyBzcGVjaWZpYyBvcHRpb25zIGdvIGhlcmUKK2lmICggQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIkNsYW5nIiApCisgICAgdGFyZ2V0X2NvbXBpbGVfb3B0aW9ucyggU2VsZlRlc3QgUFJJVkFURSAtV3dlYWstdnRhYmxlcyAtV2V4aXQtdGltZS1kZXN0cnVjdG9ycyAtV2dsb2JhbC1jb25zdHJ1Y3RvcnMgLVdtaXNzaW5nLW5vcmV0dXJuICkKK2VuZGlmKCkKK2lmICggQ01BS0VfQ1hYX0NPTVBJTEVSX0lEIE1BVENIRVMgIk1TVkMiICkKKyAgICBTVFJJTkcoUkVHRVggUkVQTEFDRSAiL1dbMC05XSIgIi9XNCIgQ01BS0VfQ1hYX0ZMQUdTICR7Q01BS0VfQ1hYX0ZMQUdTfSkgIyBvdmVycmlkZSBkZWZhdWx0IHdhcm5pbmcgbGV2ZWwKKyAgICB0YXJnZXRfY29tcGlsZV9vcHRpb25zKCBTZWxmVGVzdCBQUklWQVRFIC93NDQyNjUgL3c0NDA2MSAvdzQ0MDYyIC93NDUwMzggKQorICAgIGlmIChDQVRDSF9FTkFCTEVfV0VSUk9SKQorICAgICAgICB0YXJnZXRfY29tcGlsZV9vcHRpb25zKCBTZWxmVGVzdCBQUklWQVRFIC9XWCkKKyAgICBlbmRpZigpCisgICAgIyBGb3JjZSBNU1ZDIHRvIGNvbnNpZGVyIGV2ZXJ5dGhpbmcgYXMgZW5jb2RlZCBpbiB1dGYtOAorICAgIHRhcmdldF9jb21waWxlX29wdGlvbnMoIFNlbGZUZXN0IFBSSVZBVEUgL3V0Zi04ICkKK2VuZGlmKCkKKworCisjIGNvbmZpZ3VyZSB1bml0IHRlc3RzIHZpYSBDVGVzdAorYWRkX3Rlc3QoTkFNRSBSdW5UZXN0cyBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6U2VsZlRlc3Q+KQorCithZGRfdGVzdChOQU1FIExpc3RUZXN0cyBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6U2VsZlRlc3Q+IC0tbGlzdC10ZXN0cyAtLXZlcmJvc2l0eSBoaWdoKQorc2V0X3Rlc3RzX3Byb3BlcnRpZXMoTGlzdFRlc3RzIFBST1BFUlRJRVMgCisgICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIlswLTldKyB0ZXN0IGNhc2VzIgorICAgIEZBSUxfUkVHVUxBUl9FWFBSRVNTSU9OICJIaWRkZW4gVGVzdCIKKykKKworYWRkX3Rlc3QoTkFNRSBMaXN0VGFncyBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6U2VsZlRlc3Q+IC0tbGlzdC10YWdzKQorc2V0X3Rlc3RzX3Byb3BlcnRpZXMoTGlzdFRhZ3MgUFJPUEVSVElFUyAKKyAgICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiWzAtOV0rIHRhZ3MiIAorICAgIEZBSUxfUkVHVUxBUl9FWFBSRVNTSU9OICJcXFtcXC5cXF0iKQorCithZGRfdGVzdChOQU1FIExpc3RSZXBvcnRlcnMgQ09NTUFORCAkPFRBUkdFVF9GSUxFOlNlbGZUZXN0PiAtLWxpc3QtcmVwb3J0ZXJzKQorc2V0X3Rlc3RzX3Byb3BlcnRpZXMoTGlzdFJlcG9ydGVycyBQUk9QRVJUSUVTIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJBdmFpbGFibGUgcmVwb3J0ZXJzOiIpCisKK2FkZF90ZXN0KE5BTUUgTGlzdFRlc3ROYW1lc09ubHkgQ09NTUFORCAkPFRBUkdFVF9GSUxFOlNlbGZUZXN0PiAtLWxpc3QtdGVzdC1uYW1lcy1vbmx5KQorc2V0X3Rlc3RzX3Byb3BlcnRpZXMoTGlzdFRlc3ROYW1lc09ubHkgUFJPUEVSVElFUyAKKyAgICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiUmVnZXggc3RyaW5nIG1hdGNoZXIiCisgICAgRkFJTF9SRUdVTEFSX0VYUFJFU1NJT04gIkhpZGRlbiBUZXN0IikKKworYWRkX3Rlc3QoTkFNRSBOb0Fzc2VydGlvbnMgQ09NTUFORCAkPFRBUkdFVF9GSUxFOlNlbGZUZXN0PiAtdyBOb0Fzc2VydGlvbnMpCitzZXRfdGVzdHNfcHJvcGVydGllcyhOb0Fzc2VydGlvbnMgUFJPUEVSVElFUyBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiTm8gYXNzZXJ0aW9ucyBpbiB0ZXN0IGNhc2UiKQorCithZGRfdGVzdChOQU1FIE5vVGVzdCBDT01NQU5EICQ8VEFSR0VUX0ZJTEU6U2VsZlRlc3Q+IC13IE5vVGVzdHMgIl9fX25vbmV4aXN0ZW50X3Rlc3RfX18iKQorc2V0X3Rlc3RzX3Byb3BlcnRpZXMoTm9UZXN0IFBST1BFUlRJRVMgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIk5vIHRlc3QgY2FzZXMgbWF0Y2hlZCIpCisKK2FkZF90ZXN0KE5BTUUgRmlsdGVyZWRTZWN0aW9uLTEgQ09NTUFORCAkPFRBUkdFVF9GSUxFOlNlbGZUZXN0PiBcIzEzOTQgLWMgUnVuU2VjdGlvbikKK3NldF90ZXN0c19wcm9wZXJ0aWVzKEZpbHRlcmVkU2VjdGlvbi0xIFBST1BFUlRJRVMgRkFJTF9SRUdVTEFSX0VYUFJFU1NJT04gIk5vIHRlc3RzIHJhbiIpCithZGRfdGVzdChOQU1FIEZpbHRlcmVkU2VjdGlvbi0yIENPTU1BTkQgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4gXCMxMzk0XCBuZXN0ZWQgLWMgTmVzdGVkUnVuU2VjdGlvbiAtYyBzMSkKK3NldF90ZXN0c19wcm9wZXJ0aWVzKEZpbHRlcmVkU2VjdGlvbi0yIFBST1BFUlRJRVMgRkFJTF9SRUdVTEFSX0VYUFJFU1NJT04gIk5vIHRlc3RzIHJhbiIpCisKKyMgQXBwVmV5b3IgaGFzIGEgUHl0aG9uIDIuNyBpbiBwYXRoLCBidXQgZG9lc24ndCBoYXZlIC5weSBmaWxlcyBhcyBhdXRvcnVubmFibGUKK2FkZF90ZXN0KE5BTUUgQXBwcm92YWxUZXN0cyBDT01NQU5EICR7UFlUSE9OX0VYRUNVVEFCTEV9ICR7Q0FUQ0hfRElSfS9zY3JpcHRzL2FwcHJvdmFsVGVzdHMucHkgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4pCitzZXRfdGVzdHNfcHJvcGVydGllcyhBcHByb3ZhbFRlc3RzIFBST1BFUlRJRVMgRkFJTF9SRUdVTEFSX0VYUFJFU1NJT04gIlJlc3VsdHMgZGlmZmVyZWQiKQorCisKK2lmIChDQVRDSF9VU0VfVkFMR1JJTkQpCisgICAgYWRkX3Rlc3QoTkFNRSBWYWxncmluZFJ1blRlc3RzIENPTU1BTkQgdmFsZ3JpbmQgLS1sZWFrLWNoZWNrPWZ1bGwgLS1lcnJvci1leGl0Y29kZT0xICQ8VEFSR0VUX0ZJTEU6U2VsZlRlc3Q+KQorICAgIGFkZF90ZXN0KE5BTUUgVmFsZ3JpbmRMaXN0VGVzdHMgQ09NTUFORCB2YWxncmluZCAtLWxlYWstY2hlY2s9ZnVsbCAtLWVycm9yLWV4aXRjb2RlPTEgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4gLS1saXN0LXRlc3RzIC0tdmVyYm9zaXR5IGhpZ2gpCisgICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoVmFsZ3JpbmRMaXN0VGVzdHMgUFJPUEVSVElFUyBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiZGVmaW5pdGVseSBsb3N0OiAwIGJ5dGVzIGluIDAgYmxvY2tzIikKKyAgICBhZGRfdGVzdChOQU1FIFZhbGdyaW5kTGlzdFRhZ3MgQ09NTUFORCB2YWxncmluZCAtLWxlYWstY2hlY2s9ZnVsbCAtLWVycm9yLWV4aXRjb2RlPTEgJDxUQVJHRVRfRklMRTpTZWxmVGVzdD4gLS1saXN0LXRhZ3MpCisgICAgc2V0X3Rlc3RzX3Byb3BlcnRpZXMoVmFsZ3JpbmRMaXN0VGFncyBQUk9QRVJUSUVTIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJkZWZpbml0ZWx5IGxvc3Q6IDAgYnl0ZXMgaW4gMCBibG9ja3MiKQorZW5kaWYoKQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvRXh0cmFUZXN0cy9DTWFrZUxpc3RzLnR4dCBiL3Byb2plY3RzL0V4dHJhVGVzdHMvQ01ha2VMaXN0cy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkZDgyZAotLS0gL2Rldi9udWxsCisrKyBiL3Byb2plY3RzL0V4dHJhVGVzdHMvQ01ha2VMaXN0cy50eHQKQEAgLTAsMCArMSwxMzUgQEAKKyMKKyMgQnVpbGQgZXh0cmEgdGVzdHMuCisjCisjIFJlcXVpcmVzIENBVENIX0JVSUxEX0VYVFJBX1RFU1RTIHRvIGJlIGRlZmluZWQgJ3RydWUnLCBzZWUgLi4vQ01ha2VMaXN0cy50eHQuCisjCisKK2NtYWtlX21pbmltdW1fcmVxdWlyZWQoIFZFUlNJT04gMy41ICkKKworcHJvamVjdCggQ2F0Y2gyRXh0cmFUZXN0cyBMQU5HVUFHRVMgQ1hYICkKKworbWVzc2FnZSggU1RBVFVTICJFeHRyYSB0ZXN0cyBpbmNsdWRlZCIgKQorCisjIGRlZmluZSBmb2xkZXJzIHVzZWQ6CisKK3NldCggVEVTVFNfRElSICAgJHtDQVRDSF9ESVJ9L3Byb2plY3RzL0V4dHJhVGVzdHMgKQorc2V0KCBTSU5HTEVfSU5DTFVERV9QQVRIICR7Q0FUQ0hfRElSfS9zaW5nbGVfaW5jbHVkZSApCisKKworYWRkX2V4ZWN1dGFibGUoUHJlZml4ZWRNYWNyb3MgJHtURVNUU19ESVJ9L1gwMS1QcmVmaXhlZE1hY3Jvcy5jcHApCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyggUHJlZml4ZWRNYWNyb3MgUFJJVkFURSBDQVRDSF9DT05GSUdfUFJFRklYX0FMTCApCisKK2FkZF90ZXN0KE5BTUUgQ0FUQ0hfQ09ORklHX1BSRUZJWF9BTEwgQ09NTUFORCBQcmVmaXhlZE1hY3JvcyAtcykKK3NldF90ZXN0c19wcm9wZXJ0aWVzKAorICAgIENBVENIX0NPTkZJR19QUkVGSVhfQUxMCisgIFBST1BFUlRJRVMKKyAgICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiQ0FUQ0hfIgorICAgIEZBSUxfUkVHVUxBUl9FWFBSRVNTSU9OCisgICAgIyBUaGUgc3BhY2VzIGFyZSBpbXBvcnRhbnQgLT4gVGhleSBkaXNhbWJpZ3VhdGUgYmV0d2VlbiBDQVRDSF9SRVFVSVJFCisgICAgIyBhbmQgUkVRVUlSRSB3aXRob3V0IHByZWZpeC4KKyAgICAiIFJFUVVJUkU7IFJFUVVJUkVfRkFMU0U7IFJFUVVJUkVfVEhST1dTOyBSRVFVSVJFX1RIUk9XU19BUzsgUkVRVUlSRV9USFJPV1NfV0lUSDsgUkVRVUlSRV9USFJPV1NfTUFUQ0hFUzsgUkVRVUlSRV9OT1RIUk9XOyBDSEVDSzsgQ0hFQ0tfRkFMU0U7IENIRUNLRURfSUY7IENIRUNLRURfRUxTRTsgQ0hFQ0tfTk9GQUlMOyBDSEVDS19USFJPV1M7IENIRUNLX1RIUk9XU19BUzsgQ0hFQ0tfVEhST1dTX1dJVEg7IENIRUNLX1RIUk9XU19NQVRDSEVTOyBDSEVDS19OT1RIUk9XOyBSRVFVSVJFX1RIQVQ7IENIRUNLX1RIQVQiCispCisKK2FkZF9leGVjdXRhYmxlKERpc2FibGVkTWFjcm9zICR7VEVTVFNfRElSfS9YMDItRGlzYWJsZWRNYWNyb3MuY3BwKQordGFyZ2V0X2NvbXBpbGVfZGVmaW5pdGlvbnMoIERpc2FibGVkTWFjcm9zIFBSSVZBVEUgQ0FUQ0hfQ09ORklHX0RJU0FCTEUgKQorCithZGRfdGVzdChOQU1FIENBVENIX0NPTkZJR19ESVNBQkxFLTEgQ09NTUFORCBEaXNhYmxlZE1hY3JvcyAtcykKK3NldF90ZXN0c19wcm9wZXJ0aWVzKAorICAgIENBVENIX0NPTkZJR19ESVNBQkxFLTEKKyAgUFJPUEVSVElFUworICAgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJObyB0ZXN0cyByYW4iCisgICAgRkFJTF9SRUdVTEFSX0VYUFJFU1NJT04gIlRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCispCithZGRfdGVzdChOQU1FIENBVENIX0NPTkZJR19ESVNBQkxFLTIgQ09NTUFORCBEaXNhYmxlZE1hY3JvcyAtLWxpc3QtdGVzdHMpCitzZXRfdGVzdHNfcHJvcGVydGllcygKKyAgICBDQVRDSF9DT05GSUdfRElTQUJMRS0yCisgIFBST1BFUlRJRVMKKyAgICBQQVNTX1JFR1VMQVJfRVhQUkVTU0lPTiAiMCB0ZXN0IGNhc2VzIgorKQorCisKK2FkZF9leGVjdXRhYmxlKCBEaXNhYmxlZEV4Y2VwdGlvbnMtRGVmYXVsdEhhbmRsZXIgJHtURVNUU19ESVJ9L1gwMy1EaXNhYmxlZEV4Y2VwdGlvbnMtRGVmYXVsdEhhbmRsZXIuY3BwICkKK2FkZF9leGVjdXRhYmxlKCBEaXNhYmxlZEV4Y2VwdGlvbnMtQ3VzdG9tSGFuZGxlciAke1RFU1RTX0RJUn0vWDA0LURpc2FibGVkRXhjZXB0aW9ucy1DdXN0b21IYW5kbGVyLmNwcCApCisKK2ZvcmVhY2godGFyZ2V0IERpc2FibGVkRXhjZXB0aW9ucy1EZWZhdWx0SGFuZGxlciBEaXNhYmxlZEV4Y2VwdGlvbnMtQ3VzdG9tSGFuZGxlcikKK3RhcmdldF9jb21waWxlX29wdGlvbnMoICR7dGFyZ2V0fQorICBQUklWQVRFCisgICAgJDwkPENYWF9DT01QSUxFUl9JRDpNU1ZDPjovRUhzLWMtOy9EX0hBU19FWENFUFRJT05TPTA+CisgICAgJDwkPE9SOiQ8Q1hYX0NPTVBJTEVSX0lEOkNsYW5nPiwkPENYWF9DT01QSUxFUl9JRDpHTlU+LCQ8Q1hYX0NPTVBJTEVSX0lEOkFwcGxlQ2xhbmc+PjotZm5vLWV4Y2VwdGlvbnM+CisjICAgICQ8JDxDWFhfQ09NUElMRVJfSUQ6Q2xhbmc+Oi1mbm8tZXhjZXB0aW9ucz4KKyMgICAgJDwkPENYWF9DT01QSUxFUl9JRDpHTlU+Oi1mbm8tZXhjZXB0aW9ucz4KKykKK2VuZGZvcmVhY2goKQorCisKK2FkZF90ZXN0KE5BTUUgQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUy0xIENPTU1BTkQgRGlzYWJsZWRFeGNlcHRpb25zLURlZmF1bHRIYW5kbGVyICJUZXN0cyB0aGF0IHJ1biIpCitzZXRfdGVzdHNfcHJvcGVydGllcygKKyAgICBDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TLTEKKyAgUFJPUEVSVElFUworICAgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJhc3NlcnRpb25zOiA0IFx8IDIgcGFzc2VkIFx8IDIgZmFpbGVkIgorICAgIEZBSUxfUkVHVUxBUl9FWFBSRVNTSU9OICJhYm9ydDt0ZXJtaW5hdGU7ZmF0YWwiCispCisKK2FkZF90ZXN0KE5BTUUgQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUy0yIENPTU1BTkQgRGlzYWJsZWRFeGNlcHRpb25zLURlZmF1bHRIYW5kbGVyICJUZXN0cyB0aGF0IGFib3J0IikKK3NldF90ZXN0c19wcm9wZXJ0aWVzKAorICAgIENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMtMgorICBQUk9QRVJUSUVTCisgICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIkNhdGNoIHdpbGwgdGVybWluYXRlIgorKQorCithZGRfdGVzdChOQU1FIENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMtMyBDT01NQU5EIERpc2FibGVkRXhjZXB0aW9ucy1DdXN0b21IYW5kbGVyICJUZXN0cyB0aGF0IHJ1biIpCitzZXRfdGVzdHNfcHJvcGVydGllcygKKyAgICBDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TLTMKKyAgUFJPUEVSVElFUworICAgIFBBU1NfUkVHVUxBUl9FWFBSRVNTSU9OICJhc3NlcnRpb25zOiA0IFx8IDIgcGFzc2VkIFx8IDIgZmFpbGVkIgorICAgIEZBSUxfUkVHVUxBUl9FWFBSRVNTSU9OICI9PT09PT0gQ1VTVE9NIEhBTkRMRVIgPT09PT09IgorKQorCithZGRfdGVzdChOQU1FIENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMtNCBDT01NQU5EIERpc2FibGVkRXhjZXB0aW9ucy1DdXN0b21IYW5kbGVyICJUZXN0cyB0aGF0IGFib3J0IikKK3NldF90ZXN0c19wcm9wZXJ0aWVzKAorICAgIENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMtNAorICBQUk9QRVJUSUVTCisgICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIj09PT09PSBDVVNUT00gSEFORExFUiA9PT09PT0iCispCisKKworCithZGRfZXhlY3V0YWJsZShGYWxsYmFja1N0cmluZ2lmaWVyICR7VEVTVFNfRElSfS9YMTAtRmFsbGJhY2tTdHJpbmdpZmllci5jcHApCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyggRmFsbGJhY2tTdHJpbmdpZmllciBQUklWQVRFIENBVENIX0NPTkZJR19GQUxMQkFDS19TVFJJTkdJRklFUj1mYWxsYmFja1N0cmluZ2lmaWVyICkKKworYWRkX3Rlc3QoTkFNRSBGYWxsYmFja1N0cmluZ2lmaWVyIENPTU1BTkQgRmFsbGJhY2tTdHJpbmdpZmllciAtciBjb21wYWN0IC1zKQorc2V0X3Rlc3RzX3Byb3BlcnRpZXMoCisgICAgRmFsbGJhY2tTdHJpbmdpZmllcgorICBQUk9QRVJUSUVTCisgICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gImZvb3t9IGZvcjogeyAhISEgfSIKKykKKworCithZGRfZXhlY3V0YWJsZShEaXNhYmxlU3RyaW5naWZpY2F0aW9uICR7VEVTVFNfRElSfS9YMTEtRGlzYWJsZVN0cmluZ2lmaWNhdGlvbi5jcHApCit0YXJnZXRfY29tcGlsZV9kZWZpbml0aW9ucyggRGlzYWJsZVN0cmluZ2lmaWNhdGlvbiBQUklWQVRFIENBVENIX0NPTkZJR19ESVNBQkxFX1NUUklOR0lGSUNBVElPTiApCithZGRfdGVzdChOQU1FIENBVENIX0NPTkZJR19ESVNBQkxFX1NUUklOR0lGSUNBVElPTiBDT01NQU5EIERpc2FibGVTdHJpbmdpZmljYXRpb24gLXIgY29tcGFjdCAtcykKK3NldF90ZXN0c19wcm9wZXJ0aWVzKAorICAgIENBVENIX0NPTkZJR19ESVNBQkxFX1NUUklOR0lGSUNBVElPTgorICBQUk9QRVJUSUVTCisgICAgUEFTU19SRUdVTEFSX0VYUFJFU1NJT04gIkRpc2FibGVkIGJ5IENBVENIX0NPTkZJR19ESVNBQkxFX1NUUklOR0lGSUNBVElPTiIKKyAgICBGQUlMX1JFR1VMQVJfRVhQUkVTU0lPTiAgIkhpZGRlbnt9ID09IEhpZGRlbnt9IgorKQorCisKK3NldCggRVhUUkFfVEVTVF9CSU5BUklFUworICAgIFByZWZpeGVkTWFjcm9zCisgICAgRGlzYWJsZWRNYWNyb3MKKyAgICBEaXNhYmxlZEV4Y2VwdGlvbnMtRGVmYXVsdEhhbmRsZXIKKyAgICBEaXNhYmxlZEV4Y2VwdGlvbnMtQ3VzdG9tSGFuZGxlcgorICAgIEZhbGxiYWNrU3RyaW5naWZpZXIKKyAgICBEaXNhYmxlU3RyaW5naWZpY2F0aW9uCispCisKKyMgU2hhcmVkIGNvbmZpZworZm9yZWFjaCggdGVzdCAke0VYVFJBX1RFU1RfQklOQVJJRVN9ICkKKyAgICBzZXRfcHJvcGVydHkoIFRBUkdFVCAke3Rlc3R9IFBST1BFUlRZIENYWF9TVEFOREFSRCAxMSApCisgICAgc2V0X3Byb3BlcnR5KCBUQVJHRVQgJHt0ZXN0fSBQUk9QRVJUWSBDWFhfU1RBTkRBUkRfUkVRVUlSRUQgT04gKQorICAgIHNldF9wcm9wZXJ0eSggVEFSR0VUICR7dGVzdH0gUFJPUEVSVFkgQ1hYX0VYVEVOU0lPTlMgT0ZGICkKKyAgICB0YXJnZXRfaW5jbHVkZV9kaXJlY3RvcmllcyggJHt0ZXN0fSBQUklWQVRFICR7U0lOR0xFX0lOQ0xVREVfUEFUSH0gKQorZW5kZm9yZWFjaCgpCisKZGlmZiAtLWdpdCBhL3Byb2plY3RzL0V4dHJhVGVzdHMvVG9Eby50eHQgYi9wcm9qZWN0cy9FeHRyYVRlc3RzL1RvRG8udHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNjhiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9qZWN0cy9FeHRyYVRlc3RzL1RvRG8udHh0CkBAIC0wLDAgKzEsMTEgQEAKK0NvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IGFyZSBsZWZ0IGRlZmF1bHQgYW5kIHRodXMgYXJlIG5vdCBwcm9wZXJseSB0ZXN0ZWQKK3lldDoKKworICAgIENBVENIX0NPTkZJR19DT1VOVEVSICAgICAgICAgICAgICAgICAgICAvLyBVc2UgX19DT1VOVEVSX18gdG8gZ2VuZXJhdGUgdW5pcXVlIG5hbWVzIGZvciB0ZXN0IGNhc2VzCisgICAgQ0FUQ0hfQ09ORklHX1dJTkRPV1NfU0VIICAgICAgICAgICAgICAgIC8vIEVuYWJsZSBTRUggaGFuZGxpbmcgb24gV2luZG93cworICAgIENBVENIX0NPTkZJR19GQVNUX0NPTVBJTEUgICAgICAgICAgICAgICAvLyBTYWNyaWZpY2VzIHNvbWUgKHJhdGhlciBtaW5vcikgZmVhdHVyZXMgZm9yIGNvbXBpbGF0aW9uIHNwZWVkCisgICAgQ0FUQ0hfQ09ORklHX0RJU0FCTEVfTUFUQ0hFUlMgICAgICAgICAgIC8vIERvIG5vdCBjb21waWxlIE1hdGNoZXJzIGluIHRoaXMgY29tcGlsYXRpb24gdW5pdAorICAgIENBVENIX0NPTkZJR19QT1NJWF9TSUdOQUxTICAgICAgICAgICAgICAvLyBFbmFibGUgaGFuZGxpbmcgUE9TSVggc2lnbmFscworICAgIENBVENIX0NPTkZJR19XSU5ET1dTX0NSVERCRyAgICAgICAgICAgICAvLyBFbmFibGUgbGVhayBjaGVja2luZyB1c2luZyBXaW5kb3dzJ3MgQ1JUIERlYnVnIEhlYXAKKyAgICBDQVRDSF9DT05GSUdfREVGQVVMVF9SRVBPUlRFUgorICAgIENBVENIX0NPTkZJR19FTkFCTEVfQUxMX1NUUklOR01BS0VSUwpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvRXh0cmFUZXN0cy9YMDEtUHJlZml4ZWRNYWNyb3MuY3BwIGIvcHJvamVjdHMvRXh0cmFUZXN0cy9YMDEtUHJlZml4ZWRNYWNyb3MuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NzFjYmMKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9qZWN0cy9FeHRyYVRlc3RzL1gwMS1QcmVmaXhlZE1hY3Jvcy5jcHAKQEAgLTAsMCArMSw4MyBAQAorLy8gWDExLURpc2FibGVTdHJpbmdpZmljYXRpb24uY3BwCisvLyBUZXN0IHRoYXQgQ2F0Y2gncyBwcmVmaXhlZCBtYWNyb3MgY29tcGlsZSBhbmQgcnVuIHByb3Blcmx5LgorCisjZGVmaW5lIENBVENIX0NPTkZJR19NQUlOCisvLyBUaGlzIHdvbid0IHByb3ZpZGUgZnVsbCBjb3ZlcmFnZSwgYnV0IGl0IG1pZ2h0IGJlIHdvcnRoIGNoZWNraW5nCisvLyB0aGUgb3RoZXIgYnJhbmNoIGFzIHdlbGwKKyNkZWZpbmUgQ0FUQ0hfQ09ORklHX1JVTlRJTUVfU1RBVElDX1JFUVVJUkUKKyNpbmNsdWRlIDxjYXRjaDIvY2F0Y2guaHBwPgorCisjaW5jbHVkZSA8dHlwZV90cmFpdHM+CisjaW5jbHVkZSA8c3RkZXhjZXB0PgorCitbW25vcmV0dXJuXV0KK3ZvaWQgdGhpc190aHJvd3MoKSB7CisgICAgdGhyb3cgc3RkOjpydW50aW1lX2Vycm9yKCJTb21lIG1zZyIpOworfQordm9pZCB0aGlzX2RvZXNudF90aHJvdygpIHt9CisKK0NBVENIX1RFU1RfQ0FTRSgiUHJlZml4ZWRNYWNyb3MiKSB7CisgICAgdXNpbmcgbmFtZXNwYWNlIENhdGNoOjpNYXRjaGVyczsKKworICAgIENBVENIX1JFUVVJUkUoIDEgPT0gMSApOworICAgIENBVENIX1JFUVVJUkVfRkFMU0UoIDEgIT0gMSApOworCisgICAgQ0FUQ0hfUkVRVUlSRV9USFJPV1ModGhpc190aHJvd3MoKSk7CisgICAgQ0FUQ0hfUkVRVUlSRV9USFJPV1NfQVModGhpc190aHJvd3MoKSwgc3RkOjpydW50aW1lX2Vycm9yKTsKKyAgICBDQVRDSF9SRVFVSVJFX1RIUk9XU19XSVRIKHRoaXNfdGhyb3dzKCksICJTb21lIG1zZyIpOworICAgIENBVENIX1JFUVVJUkVfVEhST1dTX01BVENIRVModGhpc190aHJvd3MoKSwgc3RkOjpydW50aW1lX2Vycm9yLCBQcmVkaWNhdGU8c3RkOjpydW50aW1lX2Vycm9yPihbXShzdGQ6OnJ1bnRpbWVfZXJyb3IgY29uc3QmKSB7IHJldHVybiB0cnVlOyB9KSk7CisgICAgQ0FUQ0hfUkVRVUlSRV9OT1RIUk9XKHRoaXNfZG9lc250X3Rocm93KCkpOworCisgICAgQ0FUQ0hfQ0hFQ0soIDEgPT0gMSApOworICAgIENBVENIX0NIRUNLX0ZBTFNFKCAxICE9IDEgKTsKKyAgICBDQVRDSF9DSEVDS0VEX0lGKCAxID09IDEgKSB7CisgICAgICAgIENBVENIX1NVQ0NFRUQoImRvbid0IGNhcmUiKTsKKyAgICB9IENBVENIX0NIRUNLRURfRUxTRSAoIDEgPT0gMSApIHsKKyAgICAgICAgQ0FUQ0hfU1VDQ0VFRCgiZG9uJ3QgY2FyZSIpOworICAgIH0KKworICAgIENBVENIX0NIRUNLX05PRkFJTCgxID09IDIpOworCisgICAgQ0FUQ0hfQ0hFQ0tfVEhST1dTKHRoaXNfdGhyb3dzKCkpOworICAgIENBVENIX0NIRUNLX1RIUk9XU19BUyh0aGlzX3Rocm93cygpLCBzdGQ6OnJ1bnRpbWVfZXJyb3IpOworICAgIENBVENIX0NIRUNLX1RIUk9XU19XSVRIKHRoaXNfdGhyb3dzKCksICJTb21lIG1zZyIpOworICAgIENBVENIX0NIRUNLX1RIUk9XU19NQVRDSEVTKHRoaXNfdGhyb3dzKCksIHN0ZDo6cnVudGltZV9lcnJvciwgUHJlZGljYXRlPHN0ZDo6cnVudGltZV9lcnJvcj4oW10oc3RkOjpydW50aW1lX2Vycm9yIGNvbnN0JikgeyByZXR1cm4gdHJ1ZTsgfSkpOworICAgIENBVENIX0NIRUNLX05PVEhST1codGhpc19kb2VzbnRfdGhyb3coKSk7CisKKyAgICBDQVRDSF9SRVFVSVJFX1RIQVQoImFiY2QiLCBFcXVhbHMoImFiY2QiKSk7CisgICAgQ0FUQ0hfQ0hFQ0tfVEhBVCgiYmRlZiIsIEVxdWFscygiYmRlZiIpKTsKKworICAgIENBVENIX0lORk8oICJzb21lIGluZm8iICk7CisgICAgQ0FUQ0hfV0FSTiggInNvbWUgd2FybiIgKTsKKyAgICBDQVRDSF9TRUNUSU9OKCJzb21lIHNlY3Rpb24iKSB7CisgICAgICAgIGludCBpID0gMTsKKyAgICAgICAgQ0FUQ0hfQ0FQVFVSRSggaSApOworICAgICAgICBDQVRDSF9EWU5BTUlDX1NFQ1RJT04oIkR5bmFtaWMgc2VjdGlvbjogIiA8PCBpKSB7CisgICAgICAgICAgICBDQVRDSF9GQUlMX0NIRUNLKCAiZmFpbHVyZSIgKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIENBVENIX1NUQVRJQ19SRVFVSVJFKCBzdGQ6OmlzX3ZvaWQ8dm9pZD46OnZhbHVlICk7CisgICAgQ0FUQ0hfU1RBVElDX1JFUVVJUkVfRkFMU0UoIHN0ZDo6aXNfdm9pZDxpbnQ+Ojp2YWx1ZSApOworfQorCitDQVRDSF9BTk9OX1RFU1RfQ0FTRSgpIHsKKyAgICBDQVRDSF9GQUlMKCIiKTsKK30KKworLy8gTWlzc2luZzoKKworLy8KKy8vICNkZWZpbmUgQ0FUQ0hfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKKy8vICNkZWZpbmUgQ0FUQ0hfTUVUSE9EX0FTX1RFU1RfQ0FTRSggbWV0aG9kLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9NRVRIT0RfQVNfVEVTVF9DQVNFKCBtZXRob2QsIF9fVkFfQVJHU19fICkKKy8vICNkZWZpbmUgQ0FUQ0hfUkVHSVNURVJfVEVTVF9DQVNFKCBGdW5jdGlvbiwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfUkVHSVNURVJfVEVTVENBU0UoIEZ1bmN0aW9uLCBfX1ZBX0FSR1NfXyApCisvLworLy8gLy8gIkJERC1zdHlsZSIgY29udmVuaWVuY2Ugd3JhcHBlcnMKKy8vICNkZWZpbmUgQ0FUQ0hfU0NFTkFSSU8oIC4uLiApIENBVENIX1RFU1RfQ0FTRSggIlNjZW5hcmlvOiAiIF9fVkFfQVJHU19fICkKKy8vICNkZWZpbmUgQ0FUQ0hfU0NFTkFSSU9fTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgIlNjZW5hcmlvOiAiIF9fVkFfQVJHU19fICkKKy8vICNkZWZpbmUgQ0FUQ0hfR0lWRU4oIGRlc2MgKSAgICBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICIgICBHaXZlbjogIiA8PCBkZXNjICkKKy8vICNkZWZpbmUgQ0FUQ0hfV0hFTiggZGVzYyApICAgICBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICIgICAgV2hlbjogIiA8PCBkZXNjICkKKy8vICNkZWZpbmUgQ0FUQ0hfQU5EX1dIRU4oIGRlc2MgKSBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICJBbmQgd2hlbjogIiA8PCBkZXNjICkKKy8vICNkZWZpbmUgQ0FUQ0hfVEhFTiggZGVzYyApICAgICBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICIgICAgVGhlbjogIiA8PCBkZXNjICkKKy8vICNkZWZpbmUgQ0FUQ0hfQU5EX1RIRU4oIGRlc2MgKSBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICIgICAgIEFuZDogIiA8PCBkZXNjICkKKy8vCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9FeHRyYVRlc3RzL1gwMi1EaXNhYmxlZE1hY3Jvcy5jcHAgYi9wcm9qZWN0cy9FeHRyYVRlc3RzL1gwMi1EaXNhYmxlZE1hY3Jvcy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2E5NjlkNwotLS0gL2Rldi9udWxsCisrKyBiL3Byb2plY3RzL0V4dHJhVGVzdHMvWDAyLURpc2FibGVkTWFjcm9zLmNwcApAQCAtMCwwICsxLDMxIEBACisvLyBYMDItRGlzYWJsZWRNYWNyb3MuY3BwCisvLyBUZXN0IHRoYXQgQ0FUQ0hfQ09ORklHX0RJU0FCTEUgdHVybnMgb2ZmIFRFU1RfQ0FTRSBhdXRvcmVnaXN0cmF0aW9uCisvLyBhbmQgZXhwcmVzc2lvbnMgaW4gYXNzZXJ0aW9uIG1hY3JvcyBhcmUgbm90IHJ1bi4KKworI2RlZmluZSBDQVRDSF9DT05GSUdfTUFJTgorI2luY2x1ZGUgPGNhdGNoMi9jYXRjaC5ocHA+CisKKworLy8gQ0FUQ0hfQ09ORklHX0RJU0FCTEUgYWxzbyBwcmV2ZW50cyByZXBvcnRlciByZWdpc3RyYXRpb24uCisvLyBXZSBuZWVkIHRvIG1hbnVhbGx5IHJlZ2lzdGVyIGF0IGxlYXN0IG9uZSByZXBvcnRlciBmb3Igb3VyIHRlc3RzCitzdGF0aWMgQ2F0Y2g6OlJlcG9ydGVyUmVnaXN0cmFyPENhdGNoOjpDb25zb2xlUmVwb3J0ZXI+IHRlbXBvcmFyeSggImNvbnNvbGUiICk7CisKKyNpbmNsdWRlIDxpb3N0cmVhbT4KKworc3RydWN0IGZvbyB7CisgICAgZm9vKCl7CisgICAgICAgIFJFUVVJUkVfTk9USFJPVyggcHJpbnQoKSApOworICAgIH0KKyAgICB2b2lkIHByaW50KCkgY29uc3QgeworICAgICAgICBzdGQ6OmNvdXQgPDwgIlRoaXMgc2hvdWxkIG5vdCBoYXBwZW5cbiI7CisgICAgfQorfTsKKworLy8gQ29uc3RydWN0IGZvbywgYnV0IGBmb286OnByaW50YCBzaG91bGQgbm90IGJlIHJ1bgorZm9vIGY7CisKKy8vIFRoaXMgdGVzdCBzaG91bGQgbm90IGJlIHJ1biwgYmVjYXVzZSBpdCB3b24ndCBiZSByZWdpc3RlcmVkCitURVNUX0NBU0UoICJEaXNhYmxlZCBNYWNyb3MiICkgeworICAgIHN0ZDo6Y291dCA8PCAiVGhpcyBzaG91bGQgbm90IGhhcHBlblxuIjsKKyAgICBGQUlMKCk7Cit9CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9FeHRyYVRlc3RzL1gwMy1EaXNhYmxlZEV4Y2VwdGlvbnMtRGVmYXVsdEhhbmRsZXIuY3BwIGIvcHJvamVjdHMvRXh0cmFUZXN0cy9YMDMtRGlzYWJsZWRFeGNlcHRpb25zLURlZmF1bHRIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDZjOWIwCi0tLSAvZGV2L251bGwKKysrIGIvcHJvamVjdHMvRXh0cmFUZXN0cy9YMDMtRGlzYWJsZWRFeGNlcHRpb25zLURlZmF1bHRIYW5kbGVyLmNwcApAQCAtMCwwICsxLDIzIEBACisjZGVmaW5lIENBVENIX0NPTkZJR19NQUlOCisjaW5jbHVkZSA8Y2F0Y2gyL2NhdGNoLmhwcD4KKworVEVTVF9DQVNFKCJUZXN0cyB0aGF0IHJ1biIpIHsKKyAgICAvLyBBbGwgb2YgdGhlc2Ugc2hvdWxkIGJlIHJ1biBhbmQgYmUgcmVwb3J0ZWQKKyAgICBDSEVDSygxID09IDIpOworICAgIENIRUNLKDEgPT0gMSk7CisgICAgQ0hFQ0soMSAhPSAzKTsKKyAgICBDSEVDSygxID09IDQpOworfQorCisKKworVEVTVF9DQVNFKCJUZXN0cyB0aGF0IGFib3J0IikgeworICAgIC8vIEF2b2lkIGFib3J0IGFuZCBvdGhlciBleGNlcHRpb25hbCBleGl0cyAtLSB0aGVyZSBpcyBubyB3YXkKKyAgICAvLyB0byB0ZWxsIENNYWtlIHRoYXQgYWJvcnQgaXMgdGhlIGRlc2lyZWQgb3V0Y29tZSBvZiBhIHRlc3QuCisgICAgc3RkOjpzZXRfdGVybWluYXRlKFtdKCl7ZXhpdCgxKTt9KTsKKyAgICBSRVFVSVJFKDEgPT0gMSk7CisgICAgUkVRVUlSRSgxICE9IDIpOworICAgIFJFUVVJUkUoMSA9PSAzKTsKKyAgICAvLyBXZSBzaG91bGQgbm90IGdldCBoZXJlLCBiZWNhdXNlIHRoZSB0ZXN0IGFib3ZlIGFib3J0cworICAgIFJFUVVJUkUoMSAhPSA0KTsKK30KZGlmZiAtLWdpdCBhL3Byb2plY3RzL0V4dHJhVGVzdHMvWDA0LURpc2FibGVkRXhjZXB0aW9ucy1DdXN0b21IYW5kbGVyLmNwcCBiL3Byb2plY3RzL0V4dHJhVGVzdHMvWDA0LURpc2FibGVkRXhjZXB0aW9ucy1DdXN0b21IYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmYzY2ViCi0tLSAvZGV2L251bGwKKysrIGIvcHJvamVjdHMvRXh0cmFUZXN0cy9YMDQtRGlzYWJsZWRFeGNlcHRpb25zLUN1c3RvbUhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsMzMgQEAKKyNkZWZpbmUgQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OU19DVVNUT01fSEFORExFUgorCisjZGVmaW5lIENBVENIX0NPTkZJR19NQUlOCisjaW5jbHVkZSA8Y2F0Y2gyL2NhdGNoLmhwcD4KKworbmFtZXNwYWNlIENhdGNoIHsKKyAgICBbW25vcmV0dXJuXV0KKyAgICB2b2lkIHRocm93X2V4Y2VwdGlvbihzdGQ6OmV4Y2VwdGlvbiBjb25zdCYgZSkgeworICAgICAgICBDYXRjaDo6Y2VycigpIDw8ICI9PT09PT0gQ1VTVE9NIEhBTkRMRVIgPT09PT09IHJ1biB0ZXJtaW5hdGVzIGJlY2F1c2UgYW4gZXhjZXB0aW9uIHdhcyB0aHJvd24uXG4iCisgICAgICAgICAgICAgICAgICAgICAgPDwgIlRoZSBtZXNzYWdlIHdhczogIiA8PCBlLndoYXQoKSA8PCAnXG4nOworICAgICAgICAvLyBBdm9pZCBhYm9ydCBhbmQgb3RoZXIgZXhjZXB0aW9uYWwgZXhpdHMgLS0gdGhlcmUgaXMgbm8gd2F5CisgICAgICAgIC8vIHRvIHRlbGwgQ01ha2UgdGhhdCBhYm9ydCBpcyB0aGUgZGVzaXJlZCBvdXRjb21lIG9mIGEgdGVzdC4KKyAgICAgICAgZXhpdCgxKTsKKyAgICB9Cit9CisKK1RFU1RfQ0FTRSgiVGVzdHMgdGhhdCBydW4iKSB7CisgICAgLy8gQWxsIG9mIHRoZXNlIHNob3VsZCBiZSBydW4gYW5kIGJlIHJlcG9ydGVkCisgICAgQ0hFQ0soMSA9PSAyKTsKKyAgICBDSEVDSygxID09IDEpOworICAgIENIRUNLKDEgIT0gMyk7CisgICAgQ0hFQ0soMSA9PSA0KTsKK30KKworCisKK1RFU1RfQ0FTRSgiVGVzdHMgdGhhdCBhYm9ydCIpIHsKKyAgICBSRVFVSVJFKDEgPT0gMSk7CisgICAgUkVRVUlSRSgxICE9IDIpOworICAgIFJFUVVJUkUoMSA9PSAzKTsKKyAgICAvLyBXZSBzaG91bGQgbm90IGdldCBoZXJlLCBiZWNhdXNlIHRoZSB0ZXN0IGFib3ZlIGFib3J0cworICAgIFJFUVVJUkUoMSAhPSA0KTsKK30KZGlmZiAtLWdpdCBhL3Byb2plY3RzL0V4dHJhVGVzdHMvWDEwLUZhbGxiYWNrU3RyaW5naWZpZXIuY3BwIGIvcHJvamVjdHMvRXh0cmFUZXN0cy9YMTAtRmFsbGJhY2tTdHJpbmdpZmllci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUyMmQxYQotLS0gL2Rldi9udWxsCisrKyBiL3Byb2plY3RzL0V4dHJhVGVzdHMvWDEwLUZhbGxiYWNrU3RyaW5naWZpZXIuY3BwCkBAIC0wLDAgKzEsMjMgQEAKKy8vIFgxMC1GYWxsYmFja1N0cmluZ2lmaWVyLmNwcAorLy8gVGVzdCB0aGF0IGRlZmluaW5nIGZhbGxiYWNrU3RyaW5naWZpZXIgY29tcGlsZXMKKworI2luY2x1ZGUgPHN0cmluZz4KKworLy8gQSBjYXRjaC1hbGwgc3RyaW5naWZpZXIKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorc3RkOjpzdHJpbmcgZmFsbGJhY2tTdHJpbmdpZmllcihUIGNvbnN0JikgeworICAgIHJldHVybiAieyAhISEgfSI7Cit9CisKKyNkZWZpbmUgQ0FUQ0hfQ09ORklHX01BSU4KKyNpbmNsdWRlIDxjYXRjaDIvY2F0Y2guaHBwPgorCitzdHJ1Y3QgZm9vIHsKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCitURVNUX0NBU0UoImFhIikgeworICAgIFJFUVVJUkUoZm9ve30pOworfQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvRXh0cmFUZXN0cy9YMTEtRGlzYWJsZVN0cmluZ2lmaWNhdGlvbi5jcHAgYi9wcm9qZWN0cy9FeHRyYVRlc3RzL1gxMS1EaXNhYmxlU3RyaW5naWZpY2F0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTkzZjZlCi0tLSAvZGV2L251bGwKKysrIGIvcHJvamVjdHMvRXh0cmFUZXN0cy9YMTEtRGlzYWJsZVN0cmluZ2lmaWNhdGlvbi5jcHAKQEAgLTAsMCArMSwxNiBAQAorLy8gWDExLURpc2FibGVTdHJpbmdpZmljYXRpb24uY3BwCisvLyBUZXN0IHRoYXQgc3RyaW5naWZpY2F0aW9uIG9mIG9yaWdpbmFsIGV4cHJlc3Npb24gY2FuIGJlIGRpc2FibGVkCisvLyB0aGlzIGlzIGEgd29ya2Fyb3VuZCBmb3IgVlMgMjAxNyBpc3N1ZSB3aXRoIFJhdyBTdHJpbmcgbGl0ZXJhbAorLy8gYW5kIHByZXByb2Nlc3NvciB0b2tlbiBwYXN0aW5nLiBJbiBvdGhlciB3b3JkcywgaG9wZWZ1bGx5IHRoaXMgdGVzdAorLy8gd2lsbCBiZSBkZWxldGVkIHNvb24gOi0pCisKKyNkZWZpbmUgQ0FUQ0hfQ09ORklHX01BSU4KKyNpbmNsdWRlIDxjYXRjaDIvY2F0Y2guaHBwPgorCitzdHJ1Y3QgSGlkZGVuIHt9OworCitib29sIG9wZXJhdG9yPT0oSGlkZGVuLCBIaWRkZW4pIHsgcmV0dXJuIHRydWU7IH0KKworVEVTVF9DQVNFKCJEaXNhYmxlU3RyaW5naWZpY2F0aW9uIikgeworICAgIFJFUVVJUkUoIEhpZGRlbnt9ID09IEhpZGRlbnt9ICk7Cit9CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvYXV0b21ha2Uuc3RkLmFwcHJvdmVkLnR4dCBiL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9hdXRvbWFrZS5zdGQuYXBwcm92ZWQudHh0CmluZGV4IDg1Mjk5ZjcuLjA1N2JlMDYgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9hdXRvbWFrZS5zdGQuYXBwcm92ZWQudHh0CisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9hdXRvbWFrZS5zdGQuYXBwcm92ZWQudHh0CkBAIC01Myw3ICs1Myw3IEBACiA6dGVzdC1yZXN1bHQ6IFBBU1MgSW5lcXVhbGl0eSBjaGVja3MgdGhhdCBzaG91bGQgc3VjY2VlZAogOnRlc3QtcmVzdWx0OiBQQVNTIExlc3MtdGhhbiBpbmVxdWFsaXRpZXMgd2l0aCBkaWZmZXJlbnQgZXBzaWxvbnMKIDp0ZXN0LXJlc3VsdDogUEFTUyBMb25nIHN0cmluZ3MgY2FuIGJlIHdyYXBwZWQKLTp0ZXN0LXJlc3VsdDogUEFTUyBMb25nIHRleHQgaXMgdHJ1bmN0ZWQKKzp0ZXN0LXJlc3VsdDogUEFTUyBMb25nIHRleHQgaXMgdHJ1bmNhdGVkCiA6dGVzdC1yZXN1bHQ6IFBBU1MgTWFudWFsbHlSZWdpc3RlcmVkCiA6dGVzdC1yZXN1bHQ6IFBBU1MgTWF0Y2hlcnMgY2FuIGJlIChBbGxPZikgY29tcG9zZWQgd2l0aCB0aGUgJiYgb3BlcmF0b3IKIDp0ZXN0LXJlc3VsdDogUEFTUyBNYXRjaGVycyBjYW4gYmUgKEFueU9mKSBjb21wb3NlZCB3aXRoIHRoZSB8fCBvcGVyYXRvcgpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL2NvbXBhY3Quc3cuYXBwcm92ZWQudHh0IGIvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL2NvbXBhY3Quc3cuYXBwcm92ZWQudHh0CmluZGV4IDk0N2VmNDIuLjJmY2RkODYgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9jb21wYWN0LnN3LmFwcHJvdmVkLnR4dAorKysgYi9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvY29tcGFjdC5zdy5hcHByb3ZlZC50eHQKQEAgLTksNiArOSwxNSBAQAogQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdDEgPiB0MiBmb3I6IHs/fSA+IHs/fQogQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdDEgPD0gdDIgZm9yOiB7P30gPD0gez99CiBDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0MSA+PSB0MiBmb3I6IHs/fSA+PSB7P30KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0ZDo6bWVtY21wKHVhcnIsICIxMjMiLCBzaXplb2YodWFycikpID09IDAgZm9yOiAwID09IDAgd2l0aCAyIG1lc3NhZ2VzOiAndWFyciA6PSAiMTIzIicgYW5kICdzYXJyIDo9ICI0NTYiJworQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3RkOjptZW1jbXAoc2FyciwgIjQ1NiIsIHNpemVvZihzYXJyKSkgPT0gMCBmb3I6IDAgPT0gMCB3aXRoIDIgbWVzc2FnZXM6ICd1YXJyIDo9ICIxMjMiJyBhbmQgJ3NhcnIgOj0gIjQ1NiInCitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOgorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaDEgPT0gaDIgZm9yOiBbMTQwMyBoZWxwZXJdID09IFsxNDAzIGhlbHBlcl0KK1RoaXMgd291bGQgbm90IGJlIGNhdWdodCBwcmV2aW91c2x5CitOb3Igd291bGQgdGhpcworVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IGV4cGxpY2l0bHkgd2l0aCAxIG1lc3NhZ2U6ICcxNTE0JworQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3RkOjppc19zYW1lPFR5cGVMaXN0PGludD4sIFR5cGVMaXN0PGludD4+Ojp2YWx1ZSBmb3I6IHRydWUKIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiB3aXRoIG1lc3NhZ2U6ICdhbnN3ZXIgOj0gNDInIHdpdGggMSBtZXNzYWdlOiAnZXhwZWN0ZWQgZXhjZXB0aW9uJwogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdpdGggbWVzc2FnZTogJ2Fuc3dlciA6PSA0Mic7IGV4cHJlc3Npb24gd2FzOiB0aGlzVGhyb3dzKCkgd2l0aCAxIG1lc3NhZ2U6ICdleHBlY3RlZCBleGNlcHRpb24nCiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGhpc1Rocm93cygpIHdpdGggMSBtZXNzYWdlOiAnYW5zd2VyIDo9IDQyJwpAQCAtNTIsMTAgKzYxLDExNSBAQAogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEhaXNfdHJ1ZTx0cnVlPjo6dmFsdWUgZm9yOiB0cnVlCiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaXNfdHJ1ZTx0cnVlPjo6dmFsdWUgZm9yOiB0cnVlCiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShpc190cnVlPGZhbHNlPjo6dmFsdWUpIGZvcjogIWZhbHNlCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMSA8IDQKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA0IDwgNworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDEgPCA3CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMSA8IDQKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA0IDwgOAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDEgPCA4CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMSA8IDQKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA0IDwgOQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDEgPCA5CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMSA8IDUKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA1IDwgNworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDEgPCA3CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMSA8IDUKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA1IDwgOAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDEgPCA4CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMSA8IDUKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA1IDwgOQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDEgPCA5CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMSA8IDYKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA2IDwgNworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDEgPCA3CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMSA8IDYKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA2IDwgOAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDEgPCA4CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMSA8IDYKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA2IDwgOQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDEgPCA5CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMiA8IDQKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA0IDwgNworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDIgPCA3CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMiA8IDQKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA0IDwgOAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDIgPCA4CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMiA8IDQKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA0IDwgOQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDIgPCA5CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMiA8IDUKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA1IDwgNworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDIgPCA3CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMiA8IDUKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA1IDwgOAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDIgPCA4CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMiA8IDUKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA1IDwgOQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDIgPCA5CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMiA8IDYKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA2IDwgNworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDIgPCA3CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMiA8IDYKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA2IDwgOAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDIgPCA4CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMiA8IDYKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA2IDwgOQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDIgPCA5CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMyA8IDQKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA0IDwgNworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDMgPCA3CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMyA8IDQKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA0IDwgOAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDMgPCA4CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMyA8IDQKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA0IDwgOQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDMgPCA5CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMyA8IDUKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA1IDwgNworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDMgPCA3CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMyA8IDUKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA1IDwgOAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDMgPCA4CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMyA8IDUKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA1IDwgOQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDMgPCA5CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMyA8IDYKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA2IDwgNworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDMgPCA3CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMyA8IDYKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA2IDwgOAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDMgPCA4CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHggPCB5IGZvcjogMyA8IDYKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeSA8IHogZm9yOiA2IDwgOQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4IDwgeiBmb3I6IDMgPCA5CiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBzID09ICJ3b3JsZCIgZm9yOiAiaGVsbG8iID09ICJ3b3JsZCIKIENsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHMgPT0gImhlbGxvIiBmb3I6ICJoZWxsbyIgPT0gImhlbGxvIgorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAxIGZvcjogMCA9PSAxCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEgZm9yOiAwID09IDEKK0NsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IFRlbXBsYXRlX0ZpeHR1cmVfMjxUZXN0VHlwZT46Om1fYS5zaXplKCkgPT0gMSBmb3I6IDAgPT0gMQorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAxIGZvcjogMCA9PSAxCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDAgZm9yOiAwID09IDAKK0NsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IFRlbXBsYXRlX0ZpeHR1cmVfMjxUZXN0VHlwZT46Om1fYS5zaXplKCkgPT0gMCBmb3I6IDAgPT0gMAorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAwIGZvcjogMCA9PSAwCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDAgZm9yOiAwID09IDAKK0NsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IFRlbXBsYXRlX0ZpeHR1cmU8VGVzdFR5cGU+OjptX2EgPT0gMiBmb3I6IDEuMCA9PSAyCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBUZW1wbGF0ZV9GaXh0dXJlPFRlc3RUeXBlPjo6bV9hID09IDIgZm9yOiAxLjBmID09IDIKK0NsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IFRlbXBsYXRlX0ZpeHR1cmU8VGVzdFR5cGU+OjptX2EgPT0gMiBmb3I6IDEgPT0gMgorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAxIGZvcjogMS4wID09IDEKK0NsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IFRlbXBsYXRlX0ZpeHR1cmU8VGVzdFR5cGU+OjptX2EgPT0gMSBmb3I6IDEuMGYgPT0gMQorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAxIGZvcjogMSA9PSAxCiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBtX2EgPT0gMiBmb3I6IDEgPT0gMgogQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogbV9hID09IDEgZm9yOiAxID09IDEKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeC5zaXplKCkgPT0gMCBmb3I6IDAgPT0gMAorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB4LnNpemUoKSA9PSAwIGZvcjogMCA9PSAwCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHguc2l6ZSgpID09IDAgZm9yOiAwID09IDAKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogeC5zaXplKCkgPT0gMCBmb3I6IDAgPT0gMAorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGQgPT0gMS4yM19hIGZvcjogMS4yMyA9PSBBcHByb3goIDEuMjMgKQorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGQgIT0gMS4yMl9hIGZvcjogMS4yMyAhPSBBcHByb3goIDEuMjIgKQorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IC1kID09IC0xLjIzX2EgZm9yOiAtMS4yMyA9PSBBcHByb3goIC0xLjIzICkKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBkID09IDEuMl9hIC5lcHNpbG9uKC4xKSBmb3I6IDEuMjMgPT0gQXBwcm94KCAxLjIgKQorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGQgIT0gMS4yX2EgLmVwc2lsb24oLjAwMSkgZm9yOiAxLjIzICE9IEFwcHJveCggMS4yICkKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBkID09IDFfYSAuZXBzaWxvbiguMykgZm9yOiAxLjIzID09IEFwcHJveCggMS4wICkKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogd2l0aCAxIG1lc3NhZ2U6ICd0aGF0J3Mgbm90IGZseWluZyAtIHRoYXQncyBmYWlsaW5nIGluIHN0eWxlJwogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBleHBsaWNpdGx5IHdpdGggMSBtZXNzYWdlOiAndG8gaW5maW5pdHkgYW5kIGJleW9uZCcKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiAmbzEgPT0gJm8yIGZvcjogMHg8aGV4IGRpZ2l0cz4gPT0gMHg8aGV4IGRpZ2l0cz4KQEAgLTk2LDYgKzIxMCwxMCBAQAogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDAgPT0gQXBwcm94KCBkU21hbGwgKS5tYXJnaW4oIDAuMDAxICkgZm9yOiAwID09IEFwcHJveCggMC4wMDAwMSApCiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMS4yMzRmID09IEFwcHJveCggZE1lZGl1bSApIGZvcjogMS4yMzRmID09IEFwcHJveCggMS4yMzQgKQogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGRNZWRpdW0gPT0gQXBwcm94KCAxLjIzNGYgKSBmb3I6IDEuMjM0ID09IEFwcHJveCggMS4yMzM5OTk5Njc2ICkKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEsIFByZWRpY2F0ZTxpbnQ+KGFsd2F5c1RydWUsICJhbHdheXMgdHJ1ZSIpIGZvcjogMSBtYXRjaGVzIHByZWRpY2F0ZTogImFsd2F5cyB0cnVlIgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMSwgIVByZWRpY2F0ZTxpbnQ+KGFsd2F5c0ZhbHNlLCAiYWx3YXlzIGZhbHNlIikgZm9yOiAxIG5vdCBtYXRjaGVzIHByZWRpY2F0ZTogImFsd2F5cyBmYWxzZSIKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICJIZWxsbyBvbGxlSCIsIFByZWRpY2F0ZTxzdGQ6OnN0cmluZz4oIFtdIChzdGQ6OnN0cmluZyBjb25zdCYgc3RyKSAtPiBib29sIHsgcmV0dXJuIHN0ci5mcm9udCgpID09IHN0ci5iYWNrKCk7IH0sICJGaXJzdCBhbmQgbGFzdCBjaGFyYWN0ZXIgc2hvdWxkIGJlIGVxdWFsIikgZm9yOiAiSGVsbG8gb2xsZUgiIG1hdGNoZXMgcHJlZGljYXRlOiAiRmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVyIHNob3VsZCBiZSBlcXVhbCIKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICJUaGlzIHdvdWxkbid0IHBhc3MiLCAhUHJlZGljYXRlPHN0ZDo6c3RyaW5nPiggW10gKHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIpIC0+IGJvb2wgeyByZXR1cm4gc3RyLmZyb250KCkgPT0gc3RyLmJhY2soKTsgfSApIGZvcjogIlRoaXMgd291bGRuJ3QgcGFzcyIgbm90IG1hdGNoZXMgdW5kZXNjcmliZWQgcHJlZGljYXRlCiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdHJ1ZQogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRydWUKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0cnVlCkBAIC0xMDcsMTggKzIyNSwyMCBAQAogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoTkFOID09IEFwcHJveChOQU4pKSBmb3I6ICEobmFuZiA9PSBBcHByb3goIG5hbiApKQogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHkudiA9PSAwIGZvcjogMCA9PSAwCiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMCA9PSB5LnYgZm9yOiAwID09IDAKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogd2l0aCA3IG1lc3NhZ2VzOiAnYSA6PSAxJyBhbmQgJ2IgOj0gMicgYW5kICdjIDo9IDMnIGFuZCAnYSArIGIgOj0gMycgYW5kICdhK2IgOj0gMycgYW5kICdjID4gYiA6PSB0cnVlJyBhbmQgJ2EgPT0gMSA6PSB0cnVlJworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB3aXRoIDcgbWVzc2FnZXM6ICdzdGQ6OnZlY3RvcjxpbnQ+ezEsIDIsIDN9WzAsIDEsIDJdIDo9IDMnIGFuZCAnc3RkOjp2ZWN0b3I8aW50PnsxLCAyLCAzfVsoMCwgMSldIDo9IDInIGFuZCAnc3RkOjp2ZWN0b3I8aW50PnsxLCAyLCAzfVswXSA6PSAxJyBhbmQgJyhoZWxwZXJfMTQzNjxpbnQsIGludD57MTIsIC0xMn0pIDo9IHsgMTIsIC0xMiB9JyBhbmQgJyhoZWxwZXJfMTQzNjxpbnQsIGludD4oLTEyLCAxMikpIDo9IHsgLTEyLCAxMiB9JyBhbmQgJygxLCAyKSA6PSAyJyBhbmQgJygyLCAzKSA6PSAzJwogVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICdpIDo9IDInCiBUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdHJ1ZSB3aXRoIDEgbWVzc2FnZTogJzMnCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGFiID09ICcvdCcgZm9yOiAnL3QnID09ICcvdCcKLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBuZXdsaW5lID09ICcvbicgZm9yOiAnL24nID09ICcvbicKLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjYXJyX3JldHVybiA9PSAnL3InIGZvcjogJy9yJyA9PSAnL3InCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZm9ybV9mZWVkID09ICcvZicgZm9yOiAnL2YnID09ICcvZicKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0YWIgPT0gJ1x0JyBmb3I6ICdcdCcgPT0gJ1x0JworVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IG5ld2xpbmUgPT0gJ1xuJyBmb3I6ICdcbicgPT0gJ1xuJworVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNhcnJfcmV0dXJuID09ICdccicgZm9yOiAnXHInID09ICdccicKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBmb3JtX2ZlZWQgPT0gJ1xmJyBmb3I6ICdcZicgPT0gJ1xmJwogVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNwYWNlID09ICcgJyBmb3I6ICcgJyA9PSAnICcKIFRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjID09IGNoYXJzW2ldIGZvcjogJ2EnID09ICdhJwogVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGMgPT0gY2hhcnNbaV0gZm9yOiAneicgPT0gJ3onCiBUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogYyA9PSBjaGFyc1tpXSBmb3I6ICdBJyA9PSAnQScKIFRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjID09IGNoYXJzW2ldIGZvcjogJ1onID09ICdaJwotVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IG51bGxfdGVybWluYXRvciA9PSAnLzAnIGZvcjogMCA9PSAwCitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogbnVsbF90ZXJtaW5hdG9yID09ICdcMCcgZm9yOiAwID09IDAKIFRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjID09IGkgZm9yOiAyID09IDIKIFRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjID09IGkgZm9yOiAzID09IDMKIFRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjID09IGkgZm9yOiA0ID09IDQKQEAgLTIwMywxNCArMzIzLDIxIEBACiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgRXF1YWxzKCJ0aGlzIHN0cmluZyBjb250YWlucyAnQUJDJyBhcyBhIHN1YnN0cmluZyIsIENhdGNoOjpDYXNlU2Vuc2l0aXZlOjpObykgZm9yOiAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIGVxdWFsczogInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiAoY2FzZSBpbnNlbnNpdGl2ZSkKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBFcXVhbHMoInRoaXMgc3RyaW5nIGNvbnRhaW5zICdBQkMnIGFzIGEgc3Vic3RyaW5nIikgZm9yOiAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIGVxdWFsczogInRoaXMgc3RyaW5nIGNvbnRhaW5zICdBQkMnIGFzIGEgc3Vic3RyaW5nIgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIEVxdWFscygic29tZXRoaW5nIGVsc2UiLCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8pIGZvcjogInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBlcXVhbHM6ICJzb21ldGhpbmcgZWxzZSIgKGNhc2UgaW5zZW5zaXRpdmUpCitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoV2hhdEV4Y2VwdGlvbnt9KSA9PSAiVGhpcyBleGNlcHRpb24gaGFzIG92ZXJyaWRlbiB3aGF0KCkgbWV0aG9kIiBmb3I6ICJUaGlzIGV4Y2VwdGlvbiBoYXMgb3ZlcnJpZGVuIHdoYXQoKSBtZXRob2QiCis9PQorIlRoaXMgZXhjZXB0aW9uIGhhcyBvdmVycmlkZW4gd2hhdCgpIG1ldGhvZCIKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShPcGVyYXRvckV4Y2VwdGlvbnt9KSA9PSAiT3BlcmF0b3JFeGNlcHRpb24iIGZvcjogIk9wZXJhdG9yRXhjZXB0aW9uIiA9PSAiT3BlcmF0b3JFeGNlcHRpb24iCitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoU3RyaW5nTWFrZXJFeGNlcHRpb257fSkgPT0gIlN0cmluZ01ha2VyRXhjZXB0aW9uIiBmb3I6ICJTdHJpbmdNYWtlckV4Y2VwdGlvbiIKKz09CisiU3RyaW5nTWFrZXJFeGNlcHRpb24iCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBleHBlY3RlZCBleGNlcHRpb24sIGdvdCBub25lOyBleHByZXNzaW9uIHdhczogZG9lc05vdFRocm93KCksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IGV4cGVjdGVkIGV4Y2VwdGlvbiwgZ290IG5vbmU7IGV4cHJlc3Npb24gd2FzOiBkb2VzTm90VGhyb3coKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfQogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogdW5leHBlY3RlZCBleGNlcHRpb24gd2l0aCBtZXNzYWdlOiAnVW5rbm93biBleGNlcHRpb24nOyBleHByZXNzaW9uIHdhczogdGhyb3dzQXNJbnQoMSksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0KIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IHVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdpdGggbWVzc2FnZTogJ1Vua25vd24gZXhjZXB0aW9uJzsgZXhwcmVzc2lvbiB3YXM6IHRocm93c0FzSW50KDEpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9Ci1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB0aHJvd3MoMyksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0gZm9yOiB7P30gc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IHRocm93cyg0KSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSBmb3I6IHs/fSBzcGVjaWFsIGV4Y2VwdGlvbiBoYXMgdmFsdWUgb2YgMQotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGhyb3dzKDEpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9IGZvcjogez99IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0aHJvd3MoMiksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7Mn0gZm9yOiB7P30gc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDIKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IHRocm93cygzKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSBmb3I6IFNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IHRocm93cyg0KSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSBmb3I6IFNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRocm93cygxKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSBmb3I6IFNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRocm93cygyKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsyfSBmb3I6IFNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDIKIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0aGlzVGhyb3dzKCksICJleHBlY3RlZCBleGNlcHRpb24iIGZvcjogImV4cGVjdGVkIGV4Y2VwdGlvbiIgZXF1YWxzOiAiZXhwZWN0ZWQgZXhjZXB0aW9uIgogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRoaXNUaHJvd3MoKSwgRXF1YWxzKCAiZXhwZWN0ZUQgRXhjZXB0aW9uIiwgQ2F0Y2g6OkNhc2VTZW5zaXRpdmU6Ok5vICkgZm9yOiAiZXhwZWN0ZWQgZXhjZXB0aW9uIiBlcXVhbHM6ICJleHBlY3RlZCBleGNlcHRpb24iIChjYXNlIGluc2Vuc2l0aXZlKQogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRoaXNUaHJvd3MoKSwgU3RhcnRzV2l0aCggImV4cGVjdGVkIiApIGZvcjogImV4cGVjdGVkIGV4Y2VwdGlvbiIgc3RhcnRzIHdpdGg6ICJleHBlY3RlZCIKQEAgLTIzNCwxMCArMzYxLDE0IEBACiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAwLiwgIVdpdGhpbkFicygxLiwgMC45OSkgZm9yOiAwLjAgbm90IGlzIHdpdGhpbiAwLjk5IG9mIDEuMAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMC4sICFXaXRoaW5BYnMoMS4sIDAuOTkpIGZvcjogMC4wIG5vdCBpcyB3aXRoaW4gMC45OSBvZiAxLjAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IE5BTiwgIVdpdGhpbkFicyhOQU4sIDApIGZvcjogbmFuZiBub3QgaXMgd2l0aGluIDAuMCBvZiBuYW4KK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDExLiwgIVdpdGhpbkFicygxMC4sIDAuNSkgZm9yOiAxMS4wIG5vdCBpcyB3aXRoaW4gMC41IG9mIDEwLjAKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEwLiwgIVdpdGhpbkFicygxMS4sIDAuNSkgZm9yOiAxMC4wIG5vdCBpcyB3aXRoaW4gMC41IG9mIDExLjAKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IC0xMC4sIFdpdGhpbkFicygtMTAuLCAwLjUpIGZvcjogLTEwLjAgaXMgd2l0aGluIDAuNSBvZiAtMTAuMAorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogLTEwLiwgV2l0aGluQWJzKC05LjYsIDAuNSkgZm9yOiAtMTAuMCBpcyB3aXRoaW4gMC41IG9mIC05LjYKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDEuLCBXaXRoaW5VTFAoMS4sIDApIGZvcjogMS4wIGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGQ6Om5leHRhZnRlcigxLiwgMi4pLCBXaXRoaW5VTFAoMS4sIDEpIGZvcjogMS4wIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGQ6Om5leHRhZnRlcigxLiwgMC4pLCBXaXRoaW5VTFAoMS4sIDEpIGZvcjogMS4wIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGQ6Om5leHRhZnRlcigxLiwgMi4pLCAhV2l0aGluVUxQKDEuLCAwKSBmb3I6IDEuMCBub3QgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IG5leHRhZnRlcigxLiwgMi4pLCBXaXRoaW5VTFAoMS4sIDEpIGZvcjogMS4wIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBuZXh0YWZ0ZXIoMS4sIDAuKSwgV2l0aGluVUxQKDEuLCAxKSBmb3I6IDEuMCBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuMAorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogbmV4dGFmdGVyKDEuLCAyLiksICFXaXRoaW5VTFAoMS4sIDApIGZvcjogMS4wIG5vdCBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMS4sIFdpdGhpblVMUCgxLiwgMCkgZm9yOiAxLjAgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IC0wLiwgV2l0aGluVUxQKDAuLCAwKSBmb3I6IC0wLjAgaXMgd2l0aGluIDAgVUxQcyBvZiAwLjAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IE5BTiwgIVdpdGhpblVMUChOQU4sIDEyMykgZm9yOiBuYW5mIG5vdCBpcyB3aXRoaW4gMTIzIFVMUHMgb2YgbmFuZgpAQCAtMjU0LDEwICszODUsMTQgQEAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDAuZiwgIVdpdGhpbkFicygxLmYsIDAuOTlmKSBmb3I6IDAuMGYgbm90IGlzIHdpdGhpbiAwLjk5MDAwMDAwOTUgb2YgMS4wCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAwLmYsIFdpdGhpbkFicygtMC5mLCAwKSBmb3I6IDAuMGYgaXMgd2l0aGluIDAuMCBvZiAtMC4wCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBOQU4sICFXaXRoaW5BYnMoTkFOLCAwKSBmb3I6IG5hbmYgbm90IGlzIHdpdGhpbiAwLjAgb2YgbmFuCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAxMS5mLCAhV2l0aGluQWJzKDEwLmYsIDAuNWYpIGZvcjogMTEuMGYgbm90IGlzIHdpdGhpbiAwLjUgb2YgMTAuMAorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMTAuZiwgIVdpdGhpbkFicygxMS5mLCAwLjVmKSBmb3I6IDEwLjBmIG5vdCBpcyB3aXRoaW4gMC41IG9mIDExLjAKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IC0xMC5mLCBXaXRoaW5BYnMoLTEwLmYsIDAuNWYpIGZvcjogLTEwLjBmIGlzIHdpdGhpbiAwLjUgb2YgLTEwLjAKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IC0xMC5mLCBXaXRoaW5BYnMoLTkuNmYsIDAuNWYpIGZvcjogLTEwLjBmIGlzIHdpdGhpbiAwLjUgb2YgLTkuNjAwMDAwMzgxNQogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMS5mLCBXaXRoaW5VTFAoMS5mLCAwKSBmb3I6IDEuMGYgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjBmCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGQ6Om5leHRhZnRlcigxLmYsIDIuZiksIFdpdGhpblVMUCgxLmYsIDEpIGZvcjogMS4wZiBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuMGYKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0ZDo6bmV4dGFmdGVyKDEuZiwgMC5mKSwgV2l0aGluVUxQKDEuZiwgMSkgZm9yOiAxLjBmIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wZgotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3RkOjpuZXh0YWZ0ZXIoMS5mLCAyLmYpLCAhV2l0aGluVUxQKDEuZiwgMCkgZm9yOiAxLjBmIG5vdCBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMGYKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IG5leHRhZnRlcigxLmYsIDIuZiksIFdpdGhpblVMUCgxLmYsIDEpIGZvcjogMS4wZiBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuMGYKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IG5leHRhZnRlcigxLmYsIDAuZiksIFdpdGhpblVMUCgxLmYsIDEpIGZvcjogMS4wZiBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuMGYKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IG5leHRhZnRlcigxLmYsIDIuZiksICFXaXRoaW5VTFAoMS5mLCAwKSBmb3I6IDEuMGYgbm90IGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wZgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMS5mLCBXaXRoaW5VTFAoMS5mLCAwKSBmb3I6IDEuMGYgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjBmCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAtMC5mLCBXaXRoaW5VTFAoMC5mLCAwKSBmb3I6IC0wLjBmIGlzIHdpdGhpbiAwIFVMUHMgb2YgMC4wZgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogTkFOLCAhV2l0aGluVUxQKE5BTiwgMTIzKSBmb3I6IG5hbmYgbm90IGlzIHdpdGhpbiAxMjMgVUxQcyBvZiBuYW5mCkBAIC0yNjgsNiArNDAzLDE4MCBAQAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogV2l0aGluQWJzKDEuZiwgLTEuZiksIHN0ZDo6ZG9tYWluX2Vycm9yCiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBXaXRoaW5VTFAoMS5mLCAwKQogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogV2l0aGluVUxQKDEuZiwgLTEpLCBzdGQ6OmRvbWFpbl9lcnJvcgorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBpICUgMiA9PSAwIGZvcjogMCA9PSAwCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGkgJSAyID09IDAgZm9yOiAwID09IDAKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaSAlIDIgPT0gMCBmb3I6IDAgPT0gMAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBmaWx0ZXIoW10gKGludCkge3JldHVybiBmYWxzZTsgfSwgdmFsdWUoMSkpLCBDYXRjaDo6R2VuZXJhdG9yRXhjZXB0aW9uCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGkgPCA0IGZvcjogMSA8IDQKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaSA8IDQgZm9yOiAyIDwgNAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBpIDwgNCBmb3I6IDMgPCA0CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGkgJSAyID09IDAgZm9yOiAwID09IDAKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaSAlIDIgPT0gMCBmb3I6IDAgPT0gMAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBpICUgMiA9PSAwIGZvcjogMCA9PSAwCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGkuc2l6ZSgpID09IDEgZm9yOiAxID09IDEKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaS5zaXplKCkgPT0gMSBmb3I6IDEgPT0gMQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBpLnNpemUoKSA9PSAxIGZvcjogMSA9PSAxCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGogPiAwIGZvcjogMSA+IDAKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaiA+IDAgZm9yOiAyID4gMAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBqID4gMCBmb3I6IDMgPiAwCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGogPiAwIGZvcjogMSA+IDAKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaiA+IDAgZm9yOiAyID4gMAorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBqID4gMCBmb3I6IDMgPiAwCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNodW5rMi5zaXplKCkgPT0gMiBmb3I6IDIgPT0gMgorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjaHVuazIuZnJvbnQoKSA9PSBjaHVuazIuYmFjaygpIGZvcjogMSA9PSAxCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNodW5rMi5zaXplKCkgPT0gMiBmb3I6IDIgPT0gMgorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjaHVuazIuZnJvbnQoKSA9PSBjaHVuazIuYmFjaygpIGZvcjogMiA9PSAyCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNodW5rMi5zaXplKCkgPT0gMiBmb3I6IDIgPT0gMgorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjaHVuazIuZnJvbnQoKSA9PSBjaHVuazIuYmFjaygpIGZvcjogMyA9PSAzCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNodW5rMi5zaXplKCkgPT0gMiBmb3I6IDIgPT0gMgorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjaHVuazIuZnJvbnQoKSA9PSBjaHVuazIuYmFjaygpIGZvcjogMSA9PSAxCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNodW5rMi5mcm9udCgpIDwgMyBmb3I6IDEgPCAzCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNodW5rMi5zaXplKCkgPT0gMiBmb3I6IDIgPT0gMgorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjaHVuazIuZnJvbnQoKSA9PSBjaHVuazIuYmFjaygpIGZvcjogMiA9PSAyCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNodW5rMi5mcm9udCgpIDwgMyBmb3I6IDIgPCAzCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNodW5rKDIsIHZhbHVlKDEpKSwgQ2F0Y2g6OkdlbmVyYXRvckV4Y2VwdGlvbgorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBqIDwgaSBmb3I6IC0zIDwgMQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBqIDwgaSBmb3I6IC0yIDwgMQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBqIDwgaSBmb3I6IC0xIDwgMQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA0dSAqIGkgPiBzdHIuc2l6ZSgpIGZvcjogNCA+IDEKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogNHUgKiBpID4gc3RyLnNpemUoKSBmb3I6IDQgPiAyCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDR1ICogaSA+IHN0ci5zaXplKCkgZm9yOiA0ID4gMworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBqIDwgaSBmb3I6IC0zIDwgMgorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBqIDwgaSBmb3I6IC0yIDwgMgorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBqIDwgaSBmb3I6IC0xIDwgMgorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA0dSAqIGkgPiBzdHIuc2l6ZSgpIGZvcjogOCA+IDEKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogNHUgKiBpID4gc3RyLnNpemUoKSBmb3I6IDggPiAyCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDR1ICogaSA+IHN0ci5zaXplKCkgZm9yOiA4ID4gMworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBqIDwgaSBmb3I6IC0zIDwgMworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBqIDwgaSBmb3I6IC0yIDwgMworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBqIDwgaSBmb3I6IC0xIDwgMworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA0dSAqIGkgPiBzdHIuc2l6ZSgpIGZvcjogMTIgPiAxCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDR1ICogaSA+IHN0ci5zaXplKCkgZm9yOiAxMiA+IDIKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogNHUgKiBpID4gc3RyLnNpemUoKSBmb3I6IDEyID4gMworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDEyMyBmb3I6IDEyMyA9PSAxMjMKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoZ2VuLm5leHQoKSkgZm9yOiAhZmFsc2UKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAxIGZvcjogMSA9PSAxCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDMgZm9yOiAzID09IDMKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gNSBmb3I6IDUgPT0gNQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShnZW4ubmV4dCgpKSBmb3I6ICFmYWxzZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDEgZm9yOiAxID09IDEKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gNSBmb3I6IDUgPT0gNQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAyIGZvcjogMiA9PSAyCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDQgZm9yOiA0ID09IDQKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gMCBmb3I6IDAgPT0gMAorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShnZW4ubmV4dCgpKSBmb3I6ICFmYWxzZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpLnNpemUoKSA9PSAyIGZvcjogMiA9PSAyCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gImFhIiBmb3I6ICJhYSIgPT0gImFhIgorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAiYmIiIGZvcjogImJiIiA9PSAiYmIiCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09ICJjYyIgZm9yOiAiY2MiID09ICJjYyIKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoZ2VuLm5leHQoKSkgZm9yOiAhZmFsc2UKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAxIGZvcjogMSA9PSAxCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDMgZm9yOiAzID09IDMKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoZ2VuLm5leHQoKSkgZm9yOiAhZmFsc2UKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGZpbHRlcihbXSAoaW50KSB7IHJldHVybiBmYWxzZTsgfSwgdmFsdWUoMSkpLCBDYXRjaDo6R2VuZXJhdG9yRXhjZXB0aW9uCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gMSBmb3I6IDEgPT0gMQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAyIGZvcjogMiA9PSAyCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAhKGdlbi5uZXh0KCkpIGZvcjogIWZhbHNlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gMSBmb3I6IDEgPT0gMQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShnZW4ubmV4dCgpKSBmb3I6ICFmYWxzZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDIuMCBmb3I6IDIuMCA9PSAyLjAKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gNC4wIGZvcjogNC4wID09IDQuMAorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSA2LjAgZm9yOiA2LjAgPT0gNi4wCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAhKGdlbi5uZXh0KCkpIGZvcjogIWZhbHNlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gMyBmb3I6IDMgPT0gMworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShnZW4ubmV4dCgpKSBmb3I6ICFmYWxzZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDEgZm9yOiAxID09IDEKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gMiBmb3I6IDIgPT0gMgorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAzIGZvcjogMyA9PSAzCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDEgZm9yOiAxID09IDEKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gMiBmb3I6IDIgPT0gMgorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAzIGZvcjogMyA9PSAzCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAhKGdlbi5uZXh0KCkpIGZvcjogIWZhbHNlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gLTIgZm9yOiAtMiA9PSAtMgorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAtMSBmb3I6IC0xID09IC0xCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDAgZm9yOiAwID09IDAKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gMSBmb3I6IDEgPT0gMQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShnZW4ubmV4dCgpKSBmb3I6ICFmYWxzZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDIgZm9yOiAyID09IDIKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gMSBmb3I6IDEgPT0gMQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAwIGZvcjogMCA9PSAwCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IC0xIGZvcjogLTEgPT0gLTEKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoZ2VuLm5leHQoKSkgZm9yOiAhZmFsc2UKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAtNyBmb3I6IC03ID09IC03CitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IC00IGZvcjogLTQgPT0gLTQKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gLTEgZm9yOiAtMSA9PSAtMQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAyIGZvcjogMiA9PSAyCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAhKGdlbi5uZXh0KCkpIGZvcjogIWZhbHNlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gLTcgZm9yOiAtNyA9PSAtNworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAtNCBmb3I6IC00ID09IC00CitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IC0xIGZvcjogLTEgPT0gLTEKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gMiBmb3I6IDIgPT0gMgorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShnZW4ubmV4dCgpKSBmb3I6ICFmYWxzZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IC03IGZvcjogLTcgPT0gLTcKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gLTQgZm9yOiAtNCA9PSAtNAorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAtMSBmb3I6IC0xID09IC0xCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDIgZm9yOiAyID09IDIKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gNSBmb3I6IDUgPT0gNQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShnZW4ubmV4dCgpKSBmb3I6ICFmYWxzZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDUgZm9yOiA1ID09IDUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gMiBmb3I6IDIgPT0gMgorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAtMSBmb3I6IC0xID09IC0xCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IC00IGZvcjogLTQgPT0gLTQKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoZ2VuLm5leHQoKSkgZm9yOiAhZmFsc2UKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSA1IGZvcjogNSA9PSA1CitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IDIgZm9yOiAyID09IDIKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gLTEgZm9yOiAtMSA9PSAtMQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAtNCBmb3I6IC00ID09IC00CitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAhKGdlbi5uZXh0KCkpIGZvcjogIWZhbHNlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gNSBmb3I6IDUgPT0gNQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAyIGZvcjogMiA9PSAyCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4ubmV4dCgpIGZvcjogdHJ1ZQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLmdldCgpID09IC0xIGZvcjogLTEgPT0gLTEKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5uZXh0KCkgZm9yOiB0cnVlCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnZW4uZ2V0KCkgPT0gLTQgZm9yOiAtNCA9PSAtNAorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZ2VuLm5leHQoKSBmb3I6IHRydWUKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGdlbi5nZXQoKSA9PSAtNyBmb3I6IC03ID09IC03CitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAhKGdlbi5uZXh0KCkpIGZvcjogIWZhbHNlCiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZCA+PSBBcHByb3goIDEuMjIgKSBmb3I6IDEuMjMgPj0gQXBwcm94KCAxLjIyICkKIEFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBkID49IEFwcHJveCggMS4yMyApIGZvcjogMS4yMyA+PSBBcHByb3goIDEuMjMgKQogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoZCA+PSBBcHByb3goIDEuMjQgKSkgZm9yOiAhKDEuMjMgPj0gQXBwcm94KCAxLjI0ICkpCkBAIC0zMjQsNiArNjMzLDggQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBUcnVlIGZvcjogez99CiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIUZhbHNlIGZvcjogdHJ1ZQogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICEoRmFsc2UpIGZvcjogIXs/fQorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogd2l0aCAxIG1lc3NhZ2U6ICdzdGQ6OmlzX3ZvaWQ8dm9pZD46OnZhbHVlJworQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogd2l0aCAxIG1lc3NhZ2U6ICchKHN0ZDo6aXNfdm9pZDxpbnQ+Ojp2YWx1ZSknCiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogZGF0YS5pbnRfc2V2ZW4gPiA3IGZvcjogNyA+IDcKIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBkYXRhLmludF9zZXZlbiA8IDcgZm9yOiA3IDwgNwogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IGRhdGEuaW50X3NldmVuID4gOCBmb3I6IDcgPiA4CkBAIC00OTcsNyArODA4LDYgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNwZWMubWF0Y2hlcyggdGNDICkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzcGVjLm1hdGNoZXMoIHRjRCApID09IHRydWUgZm9yOiB0cnVlID09IHRydWUKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAoc3RkOjpwYWlyPGludCwgaW50PiggMSwgMiApKSA9PSBhTmljZVBhaXIgZm9yOiB7P30gPT0gez99CiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcCA9PSAwIGZvcjogMCA9PSAwCiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcCA9PSBwTlVMTCBmb3I6IDAgPT0gMAogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHAgIT0gMCBmb3I6IDB4PGhleCBkaWdpdHM+ICE9IDAKQEAgLTUwNiw2ICs4MTYsNyBAQAogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJldHVybnNOdWxsKCkgPT0gMCBmb3I6IHtudWxsIHN0cmluZ30gPT0gMAogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJldHVybnNDb25zdE51bGwoKSA9PSAwIGZvcjoge251bGwgc3RyaW5nfSA9PSAwCiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMCAhPSBwIGZvcjogMCAhPSAweDxoZXggZGlnaXRzPgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogImZvbyIsIFByZWRpY2F0ZTxjb25zdCBjaGFyKj4oW10gKGNvbnN0IGNoYXIqIGNvbnN0JikgeyByZXR1cm4gdHJ1ZTsgfSkgZm9yOiAiZm9vIiBtYXRjaGVzIHVuZGVzY3JpYmVkIHByZWRpY2F0ZQogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiByZXN1bHQgZm9yOiB7P30KIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLnByb2Nlc3NOYW1lID09ICIiIGZvcjogIiIgPT0gIiIKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcmVzdWx0IGZvcjogez99CkBAIC01MTMsMjYgKzgyNCwyOSBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjb25maWcuc2hvdWxkRGVidWdCcmVhayA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNvbmZpZy5hYm9ydEFmdGVyID09IC0xIGZvcjogLTEgPT0gLTEKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLm5vVGhyb3cgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjb25maWcucmVwb3J0ZXJOYW1lcy5lbXB0eSgpIGZvcjogdHJ1ZQorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjb25maWcucmVwb3J0ZXJOYW1lID09ICJjb25zb2xlIiBmb3I6ICJjb25zb2xlIiA9PSAiY29uc29sZSIKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShjZmcuaGFzVGVzdEZpbHRlcnMoKSkgZm9yOiAhZmFsc2UKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcmVzdWx0IGZvcjogez99CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNmZy5oYXNUZXN0RmlsdGVycygpIGZvcjogdHJ1ZQogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjZmcudGVzdFNwZWMoKS5tYXRjaGVzKGZha2VUZXN0Q2FzZSgibm90SW5jbHVkZWQiKSkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjZmcudGVzdFNwZWMoKS5tYXRjaGVzKGZha2VUZXN0Q2FzZSgidGVzdDEiKSkgZm9yOiB0cnVlCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJlc3VsdCBmb3I6IHs/fQorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjZmcuaGFzVGVzdEZpbHRlcnMoKSBmb3I6IHRydWUKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2ZnLnRlc3RTcGVjKCkubWF0Y2hlcyhmYWtlVGVzdENhc2UoInRlc3QxIikpID09IGZhbHNlIGZvcjogZmFsc2UgPT0gZmFsc2UKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2ZnLnRlc3RTcGVjKCkubWF0Y2hlcyhmYWtlVGVzdENhc2UoImFsd2F5c0luY2x1ZGVkIikpIGZvcjogdHJ1ZQogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiByZXN1bHQgZm9yOiB7P30KK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2ZnLmhhc1Rlc3RGaWx0ZXJzKCkgZm9yOiB0cnVlCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNmZy50ZXN0U3BlYygpLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJ0ZXN0MSIpKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNmZy50ZXN0U3BlYygpLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJhbHdheXNJbmNsdWRlZCIpKSBmb3I6IHRydWUKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2xpLnBhcnNlKHsidGVzdCIsICItciIsICJjb25zb2xlIn0pIGZvcjogez99Ci1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNvbmZpZy5yZXBvcnRlck5hbWVzWzBdID09ICJjb25zb2xlIiBmb3I6ICJjb25zb2xlIiA9PSAiY29uc29sZSIKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLnJlcG9ydGVyTmFtZSA9PSAiY29uc29sZSIgZm9yOiAiY29uc29sZSIgPT0gImNvbnNvbGUiCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNsaS5wYXJzZSh7InRlc3QiLCAiLXIiLCAieG1sIn0pIGZvcjogez99Ci1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNvbmZpZy5yZXBvcnRlck5hbWVzWzBdID09ICJ4bWwiIGZvcjogInhtbCIgPT0gInhtbCIKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2xpLnBhcnNlKHsidGVzdCIsICItciIsICJ4bWwiLCAiLXIiLCAianVuaXQifSkgZm9yOiB7P30KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLnJlcG9ydGVyTmFtZXMuc2l6ZSgpID09IDIgZm9yOiAyID09IDIKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLnJlcG9ydGVyTmFtZXNbMF0gPT0gInhtbCIgZm9yOiAieG1sIiA9PSAieG1sIgotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjb25maWcucmVwb3J0ZXJOYW1lc1sxXSA9PSAianVuaXQiIGZvcjogImp1bml0IiA9PSAianVuaXQiCitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNvbmZpZy5yZXBvcnRlck5hbWUgPT0gInhtbCIgZm9yOiAieG1sIiA9PSAieG1sIgogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjbGkucGFyc2UoeyJ0ZXN0IiwgIi0tcmVwb3J0ZXIiLCAianVuaXQifSkgZm9yOiB7P30KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLnJlcG9ydGVyTmFtZXNbMF0gPT0gImp1bml0IiBmb3I6ICJqdW5pdCIgPT0gImp1bml0IgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjb25maWcucmVwb3J0ZXJOYW1lID09ICJqdW5pdCIgZm9yOiAianVuaXQiID09ICJqdW5pdCIKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIShjbGkucGFyc2UoeyAidGVzdCIsICItciIsICJ4bWwiLCAiLXIiLCAianVuaXQiIH0pKSBmb3I6ICF7P30KK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogIXJlc3VsdCBmb3I6IHRydWUKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcmVzdWx0LmVycm9yTWVzc2FnZSgpLCBDb250YWlucygiVW5yZWNvZ25pemVkIHJlcG9ydGVyIikgZm9yOiAiVW5yZWNvZ25pemVkIHJlcG9ydGVyLCAndW5zdXBwb3J0ZWQnLiBDaGVjayBhdmFpbGFibGUgd2l0aCAtLWxpc3QtcmVwb3J0ZXJzIiBjb250YWluczogIlVucmVjb2duaXplZCByZXBvcnRlciIKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY2xpLnBhcnNlKHsidGVzdCIsICItYiJ9KSBmb3I6IHs/fQogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBjb25maWcuc2hvdWxkRGVidWdCcmVhayA9PSB0cnVlIGZvcjogdHJ1ZSA9PSB0cnVlCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGNsaS5wYXJzZSh7InRlc3QiLCAiLS1icmVhayJ9KSBmb3I6IHs/fQpAQCAtNTY1LDEwICs4NzksMTQgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogY29uZmlnLnVzZUNvbG91ciA9PSBVc2VDb2xvdXI6Ok5vIGZvcjogMiA9PSAyCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICFyZXN1bHQgZm9yOiB0cnVlCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJlc3VsdC5lcnJvck1lc3NhZ2UoKSwgQ29udGFpbnMoICJjb2xvdXIgbW9kZSBtdXN0IGJlIG9uZSBvZiIgKSBmb3I6ICJjb2xvdXIgbW9kZSBtdXN0IGJlIG9uZSBvZjogYXV0bywgeWVzIG9yIG5vLiAnd3JvbmcnIG5vdCByZWNvZ25pc2VkIiBjb250YWluczogImNvbG91ciBtb2RlIG11c3QgYmUgb25lIG9mIgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGQ6OnR1cGxlX3NpemU8VGVzdFR5cGU+Ojp2YWx1ZSA+PSAxIGZvcjogMyA+PSAxCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0ZDo6dHVwbGVfc2l6ZTxUZXN0VHlwZT46OnZhbHVlID49IDEgZm9yOiAyID49IDEKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3RkOjp0dXBsZV9zaXplPFRlc3RUeXBlPjo6dmFsdWUgPj0gMSBmb3I6IDEgPj0gMQogRGVjb21wb3NpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB0cnV0aHkoZmFsc2UpIGZvcjogSGV5LCBpdHMgdHJ1dGh5IQogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIE1hdGNoZXMoInRoaXMgU1RSSU5HIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIikgZm9yOiAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIG1hdGNoZXMgInRoaXMgU1RSSU5HIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBjYXNlIHNlbnNpdGl2ZWx5CiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgTWF0Y2hlcygiY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciKSBmb3I6ICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgbWF0Y2hlcyAiY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIGNhc2Ugc2Vuc2l0aXZlbHkKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBNYXRjaGVzKCJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIikgZm9yOiAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIG1hdGNoZXMgInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEiIGNhc2Ugc2Vuc2l0aXZlbHkKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGFjdHVhbCwgIVVub3JkZXJlZEVxdWFscyhleHBlY3RlZCkgZm9yOiB7ICdhJywgJ2InIH0gbm90IFVub3JkZXJlZEVxdWFsczogeyAnYycsICdiJyB9CiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHdpdGggMSBtZXNzYWdlOiAndGhpcyBpcyBhIHN1Y2Nlc3MnCiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6CiBCREQudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogYmVmb3JlID09IDAgZm9yOiAwID09IDAKQEAgLTU5MCw2ICs5MDgsOCBAQAogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGQgPT0gQXBwcm94KCAxLjIzICkgZm9yOiAxLjIzID09IEFwcHJveCggMS4yMyApCiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZCAhPSBBcHByb3goIDEuMjIgKSBmb3I6IDEuMjMgIT0gQXBwcm94KCAxLjIyICkKIEFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBkICE9IEFwcHJveCggMS4yNCApIGZvcjogMS4yMyAhPSBBcHByb3goIDEuMjQgKQorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGQgPT0gMS4yM19hIGZvcjogMS4yMyA9PSBBcHByb3goIDEuMjMgKQorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGQgIT0gMS4yMl9hIGZvcjogMS4yMyAhPSBBcHByb3goIDEuMjIgKQogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IEFwcHJveCggZCApID09IDEuMjMgZm9yOiBBcHByb3goIDEuMjMgKSA9PSAxLjIzCiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQXBwcm94KCBkICkgIT0gMS4yMiBmb3I6IEFwcHJveCggMS4yMyApICE9IDEuMjIKIEFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBBcHByb3goIGQgKSAhPSAxLjI0IGZvcjogQXBwcm94KCAxLjIzICkgIT0gMS4yNApAQCAtNjIyLDE4ICs5NDIsMjEgQEAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzLmNfc3RyKCkgPT0gcmF3Q2hhcnMgZm9yOiAiaGVsbG8iID09ICJoZWxsbyIKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBpc093bmVkKCBzICkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IG9yaWdpbmFsID09ICJvcmlnaW5hbCIKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBpc1N1YnN0cmluZyggb3JpZ2luYWwgKSBmb3I6IGZhbHNlCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaXNTdWJzdHJpbmcoIG9yaWdpbmFsICkgZm9yOiB0cnVlCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaXNPd25lZCggb3JpZ2luYWwgKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaXNTdWJzdHJpbmcoIG9yaWdpbmFsICkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGlzT3duZWQoIG9yaWdpbmFsICkgZm9yOiB0cnVlCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3MuZW1wdHkoKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3Muc2l6ZSgpID09IDUgZm9yOiA1ID09IDUKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGQ6OnN0cmNtcCggc3MuY19zdHIoKSwgImhlbGxvIiApID09IDAgZm9yOiAwID09IDAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzcyA9PSAiaGVsbG8iIGZvcjogaGVsbG8gPT0gImhlbGxvIgogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGlzU3Vic3RyaW5nKCBzcyApIGZvcjogdHJ1ZQogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGlzT3duZWQoIHNzICkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJhd0NoYXJzID09IGRhdGEoIHMgKSBmb3I6ICJoZWxsbyB3b3JsZCEiID09ICJoZWxsbyB3b3JsZCEiCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcmF3Q2hhcnMgPT0gcy5jdXJyZW50RGF0YSgpIGZvcjogImhlbGxvIHdvcmxkISIgPT0gImhlbGxvIHdvcmxkISIKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzcy5jX3N0cigpICE9IHJhd0NoYXJzIGZvcjogImhlbGxvIiAhPSAiaGVsbG8gd29ybGQhIgogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGlzU3Vic3RyaW5nKCBzcyApID09IGZhbHNlIGZvcjogZmFsc2UgPT0gZmFsc2UKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBpc093bmVkKCBzcyApIGZvcjogdHJ1ZQotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGRhdGEoIHNzICkgIT0gZGF0YSggcyApIGZvcjogImhlbGxvIiAhPSAiaGVsbG8gd29ybGQhIgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNzLmN1cnJlbnREYXRhKCkgIT0gcy5jdXJyZW50RGF0YSgpIGZvcjogImhlbGxvIiAhPSAiaGVsbG8gd29ybGQhIgogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNzLnNpemUoKSA9PSA2IGZvcjogNiA9PSA2CiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3RkOjpzdHJjbXAoIHNzLmNfc3RyKCksICJ3b3JsZCEiICkgPT0gMCBmb3I6IDAgPT0gMAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHMuY19zdHIoKSA9PSBzMi5jX3N0cigpIGZvcjogImhlbGxvIHdvcmxkISIgPT0gImhlbGxvIHdvcmxkISIKQEAgLTY1Miw2ICs5NzUsOSBAQAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0ZFN0ci5zaXplKCkgPT0gc3Iuc2l6ZSgpIGZvcjogMTEgPT0gMTEKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdGRTdHIgPT0gImEgc3RyaW5ncmVmIiBmb3I6ICJhIHN0cmluZ3JlZiIgPT0gImEgc3RyaW5ncmVmIgogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0ZFN0ci5zaXplKCkgPT0gc3Iuc2l6ZSgpIGZvcjogMTEgPT0gMTEKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBhc2NpaS5udW1iZXJPZkNoYXJhY3RlcnMoKSA9PSBhc2NpaS5zaXplKCkgZm9yOiAzOSA9PSAzOQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHNpbXBsZXU4Lm51bWJlck9mQ2hhcmFjdGVycygpID09IDMwIGZvcjogMzAgPT0gMzAKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbW9qaXMubnVtYmVyT2ZDaGFyYWN0ZXJzKCkgPT0gOSBmb3I6IDkgPT0gOQogVG9TdHJpbmdDaHJvbm8udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogbWludXRlID09IHNlY29uZHMgZm9yOiAxIG0gPT0gNjAgcwogVG9TdHJpbmdDaHJvbm8udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogaG91ciAhPSBzZWNvbmRzIGZvcjogMSBoICE9IDYwIHMKIFRvU3RyaW5nQ2hyb25vLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IG1pY3JvICE9IG1pbGxpIGZvcjogMSB1cyAhPSAxIG1zCkBAIC02ODUsMTAgKzEwMTEsNzkgQEAKIFRhZ0FsaWFzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJlZ2lzdHJ5LmFkZCggIlt0aGUgQCBpcyBub3QgYXQgdGhlIHN0YXJ0XSIsICIiLCBDYXRjaDo6U291cmNlTGluZUluZm8oICJmaWxlIiwgMyApICkKIFRhZ0FsaWFzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJlZ2lzdHJ5LmFkZCggIkBubyBzcXVhcmUgYnJhY2tldCBhdCBzdGFydF0iLCAiIiwgQ2F0Y2g6OlNvdXJjZUxpbmVJbmZvKCAiZmlsZSIsIDMgKSApCiBUYWdBbGlhcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiByZWdpc3RyeS5hZGQoICJbQG5vIHNxdWFyZSBicmFja2V0IGF0IGVuZCIsICIiLCBDYXRjaDo6U291cmNlTGluZUluZm8oICJmaWxlIiwgMyApICkKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gNSBmb3I6IDUgPT0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gNSBmb3I6IDUgPj0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSAxMCBmb3I6IDEwID09IDEwCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSAxMCBmb3I6IDEwID49IDEwCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IDUgZm9yOiA1ID09IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDUgZm9yOiA1ID49IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gMCBmb3I6IDAgPT0gMAorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gNSBmb3I6IDUgPj0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPT0gMCBmb3I6IDAgPT0gMAorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSA1IGZvcjogNSA9PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSA1IGZvcjogNSA+PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IDUgZm9yOiA1ID09IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDEwIGZvcjogMTAgPj0gMTAKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gNSBmb3I6IDUgPT0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gNSBmb3I6IDUgPj0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSA1IGZvcjogNSA9PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSA1IGZvcjogNSA+PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IDUgZm9yOiA1ID09IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDUgZm9yOiA1ID49IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gMTAgZm9yOiAxMCA9PSAxMAorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gMTAgZm9yOiAxMCA+PSAxMAorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSA1IGZvcjogNSA9PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSA1IGZvcjogNSA+PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IDAgZm9yOiAwID09IDAKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDUgZm9yOiA1ID49IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID09IDAgZm9yOiAwID09IDAKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gNSBmb3I6IDUgPT0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gNSBmb3I6IDUgPj0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSA1IGZvcjogNSA9PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSAxMCBmb3I6IDEwID49IDEwCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IDUgZm9yOiA1ID09IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDUgZm9yOiA1ID49IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gNSBmb3I6IDUgPT0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gNSBmb3I6IDUgPj0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSA1IGZvcjogNSA9PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSA1IGZvcjogNSA+PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IDEwIGZvcjogMTAgPT0gMTAKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDEwIGZvcjogMTAgPj0gMTAKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gNSBmb3I6IDUgPT0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gNSBmb3I6IDUgPj0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSAwIGZvcjogMCA9PSAwCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSA1IGZvcjogNSA+PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA9PSAwIGZvcjogMCA9PSAwCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IDUgZm9yOiA1ID09IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDUgZm9yOiA1ID49IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gNSBmb3I6IDUgPT0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gMTAgZm9yOiAxMCA+PSAxMAorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSA1IGZvcjogNSA9PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSA1IGZvcjogNSA+PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IDUgZm9yOiA1ID09IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDUgZm9yOiA1ID49IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gNSBmb3I6IDUgPT0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gNSBmb3I6IDUgPj0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSAxMCBmb3I6IDEwID09IDEwCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSAxMCBmb3I6IDEwID49IDEwCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IDUgZm9yOiA1ID09IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDUgZm9yOiA1ID49IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gMCBmb3I6IDAgPT0gMAorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gNSBmb3I6IDUgPj0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPT0gMCBmb3I6IDAgPT0gMAorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSA1IGZvcjogNSA9PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSA1IGZvcjogNSA+PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuc2l6ZSgpID09IDUgZm9yOiA1ID09IDUKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDEwIGZvcjogMTAgPj0gMTAKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gNSBmb3I6IDUgPT0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LmNhcGFjaXR5KCkgPj0gNSBmb3I6IDUgPj0gNQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB2LnNpemUoKSA9PSA1IGZvcjogNSA9PSA1CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHYuY2FwYWNpdHkoKSA+PSA1IGZvcjogNSA+PSA1CiBWYXJpYWRpY01hY3Jvcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB3aXRoIDEgbWVzc2FnZTogJ25vIGFzc2VydGlvbnMnCiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogMHg8aGV4IGRpZ2l0cz4gPT0gYml0MzBhbmQzMSBmb3I6IDMyMjEyMjU0NzIgKDB4PGhleCBkaWdpdHM+KSA9PSAzMjIxMjI1NDcyCiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQgLSBidXQgd2FzIG9rOiAxID09IDIKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogd2l0aCAxIG1lc3NhZ2U6ICdvb3BzIScKK0V4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiB3aXRoIG1lc3NhZ2U6ICdGb3Igc29tZSByZWFzb24gc29tZW9uZSBpcyB0aHJvd2luZyBhIHN0cmluZyBsaXRlcmFsIScKIFBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRlc3RDYXNlLmlzT3BlbigpIGZvcjogdHJ1ZQogUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogczEuaXNPcGVuKCkgZm9yOiB0cnVlCiBQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzMS5pc1N1Y2Nlc3NmdWxseUNvbXBsZXRlZCgpIGZvcjogdHJ1ZQpAQCAtNzU2LDY5ICsxMTUxLDYgQEAKIFBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHMxLmlzQ29tcGxldGUoKSBmb3I6IHRydWUKIFBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRlc3RDYXNlLmlzQ29tcGxldGUoKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCiBQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0ZXN0Q2FzZS5pc0NvbXBsZXRlKCkgZm9yOiB0cnVlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0ZXN0Q2FzZS5pc09wZW4oKSBmb3I6IHRydWUKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHMxLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZzEuaXNPcGVuKCkgZm9yOiB0cnVlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnMS5pbmRleCgpID09IDAgZm9yOiAwID09IDAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGcxLmlzQ29tcGxldGUoKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzMS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogczEuaXNDb21wbGV0ZSgpID09IGZhbHNlIGZvcjogZmFsc2UgPT0gZmFsc2UKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRlc3RDYXNlLmlzU3VjY2Vzc2Z1bGx5Q29tcGxldGVkKCkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGVzdENhc2UyLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogczFiLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZzFiLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZzFiLmluZGV4KCkgPT0gMSBmb3I6IDEgPT0gMQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogczEuaXNDb21wbGV0ZSgpID09IGZhbHNlIGZvcjogZmFsc2UgPT0gZmFsc2UKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHMxYi5pc0NvbXBsZXRlKCkgZm9yOiB0cnVlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnMWIuaXNDb21wbGV0ZSgpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGVzdENhc2UyLmlzQ29tcGxldGUoKSBmb3I6IHRydWUKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRlc3RDYXNlLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogczEuaXNPcGVuKCkgZm9yOiB0cnVlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnMS5pc09wZW4oKSBmb3I6IHRydWUKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGcxLmluZGV4KCkgPT0gMCBmb3I6IDAgPT0gMAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZzEuaXNDb21wbGV0ZSgpID09IGZhbHNlIGZvcjogZmFsc2UgPT0gZmFsc2UKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHMxLmlzQ29tcGxldGUoKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzMi5pc09wZW4oKSBmb3I6IHRydWUKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHMyLmlzQ29tcGxldGUoKSBmb3I6IHRydWUKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHMxLmlzQ29tcGxldGUoKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0ZXN0Q2FzZS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGVzdENhc2UyLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogczFiLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZzFiLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZzFiLmluZGV4KCkgPT0gMSBmb3I6IDEgPT0gMQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogczJiLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogczJiLmlzQ29tcGxldGUoKSBmb3I6IHRydWUKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGcxYi5pc0NvbXBsZXRlKCkgZm9yOiB0cnVlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzMWIuaXNDb21wbGV0ZSgpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGVzdENhc2UyLmlzQ29tcGxldGUoKSBmb3I6IHRydWUKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRlc3RDYXNlLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogczEuaXNPcGVuKCkgZm9yOiB0cnVlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnMS5pc09wZW4oKSBmb3I6IHRydWUKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGcxLmluZGV4KCkgPT0gMCBmb3I6IDAgPT0gMAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZzEuaXNDb21wbGV0ZSgpID09IGZhbHNlIGZvcjogZmFsc2UgPT0gZmFsc2UKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHMxLmlzQ29tcGxldGUoKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzMi5pc09wZW4oKSBmb3I6IHRydWUKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHMyLmlzQ29tcGxldGUoKSBmb3I6IHRydWUKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHMyLmlzU3VjY2Vzc2Z1bGx5Q29tcGxldGVkKCkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogczEuaXNDb21wbGV0ZSgpID09IGZhbHNlIGZvcjogZmFsc2UgPT0gZmFsc2UKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRlc3RDYXNlLmlzQ29tcGxldGUoKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0ZXN0Q2FzZTIuaXNPcGVuKCkgZm9yOiB0cnVlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzMWIuaXNPcGVuKCkgZm9yOiB0cnVlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnMWIuaXNPcGVuKCkgZm9yOiB0cnVlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBnMWIuaW5kZXgoKSA9PSAwIGZvcjogMCA9PSAwCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzMmIuaXNPcGVuKCkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZzFiLmlzQ29tcGxldGUoKSA9PSBmYWxzZSBmb3I6IGZhbHNlID09IGZhbHNlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzMWIuaXNDb21wbGV0ZSgpID09IGZhbHNlIGZvcjogZmFsc2UgPT0gZmFsc2UKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRlc3RDYXNlMi5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgZm9yOiBmYWxzZSA9PSBmYWxzZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGVzdENhc2UzLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogczFjLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZzFjLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZzFjLmluZGV4KCkgPT0gMSBmb3I6IDEgPT0gMQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogczJjLmlzT3BlbigpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogczJjLmlzQ29tcGxldGUoKSBmb3I6IHRydWUKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGcxYy5pc0NvbXBsZXRlKCkgZm9yOiB0cnVlCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzMWMuaXNDb21wbGV0ZSgpIGZvcjogdHJ1ZQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGVzdENhc2UzLmlzQ29tcGxldGUoKSBmb3I6IHRydWUKIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiB3aXRoIG1lc3NhZ2U6ICczLjE0JwogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGQgPT0gYXBwcm94KCAxLjIzICkgZm9yOiAxLjIzID09IEFwcHJveCggMS4yMyApCiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZCA9PSBhcHByb3goIDEuMjIgKSBmb3I6IDEuMjMgPT0gQXBwcm94KCAxLjIyICkKQEAgLTg4Myw4ICsxMjE1LDUwIEBACiBYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCBzdHJpbmdXaXRoUXVvdGVzLCBDYXRjaDo6WG1sRW5jb2RlOjpGb3JBdHRyaWJ1dGVzICkgPT0gImRvbid0ICZxdW90O3F1b3RlJnF1b3Q7IG1lIG9uIHRoYXQiIGZvcjogImRvbid0ICZxdW90O3F1b3RlJnF1b3Q7IG1lIG9uIHRoYXQiCiA9PQogImRvbid0ICZxdW90O3F1b3RlJnF1b3Q7IG1lIG9uIHRoYXQiCi1YbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCAiWy94MDFdIiApID09ICJbLy94MDFdIiBmb3I6ICJbL3gwMV0iID09ICJbL3gwMV0iCi1YbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCAiWy94N0ZdIiApID09ICJbLy94N0ZdIiBmb3I6ICJbL3g3Rl0iID09ICJbL3g3Rl0iCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCAiW1x4MDFdIiApID09ICJbXFx4MDFdIiBmb3I6ICJbXHgwMV0iID09ICJbXHgwMV0iCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCAiW1x4N0ZdIiApID09ICJbXFx4N0ZdIiBmb3I6ICJbXHg3Rl0iID09ICJbXHg3Rl0iCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKHU4IkhlcmUgYmUg8J+RviIpID09IHU4IkhlcmUgYmUg8J+RviIgZm9yOiAiSGVyZSBiZSDwn5G+IiA9PSAiSGVyZSBiZSDwn5G+IgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSh1OCLFocWhIikgPT0gdTgixaHFoSIgZm9yOiAixaHFoSIgPT0gIsWhxaEiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceERGXHhCRiIpID09ICJceERGXHhCRiIgZm9yOiAi378iID09ICLfvyIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RTBceEEwXHg4MCIpID09ICJceEUwXHhBMFx4ODAiIGZvcjogIuCggCIgPT0gIuCggCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RURceDlGXHhCRiIpID09ICJceEVEXHg5Rlx4QkYiIGZvcjogIu2fvyIgPT0gIu2fvyIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RUVceDgwXHg4MCIpID09ICJceEVFXHg4MFx4ODAiIGZvcjogIu6AgCIgPT0gIu6AgCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RUZceEJGXHhCRiIpID09ICJceEVGXHhCRlx4QkYiIGZvcjogIu+/vyIgPT0gIu+/vyIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RjBceDkwXHg4MFx4ODAiKSA9PSAiXHhGMFx4OTBceDgwXHg4MCIgZm9yOiAi8JCAgCIgPT0gIvCQgIAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEY0XHg4Rlx4QkZceEJGIikgPT0gIlx4RjRceDhGXHhCRlx4QkYiIGZvcjogIvSPv78iID09ICL0j7+/IgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiSGVyZSBceEZGIGJlIPCfkb4iKSA9PSB1OCJIZXJlIFxceEZGIGJlIPCfkb4iIGZvcjogIkhlcmUgXHhGRiBiZSDwn5G+IiA9PSAiSGVyZSBceEZGIGJlIPCfkb4iCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEZGIikgPT0gIlxceEZGIiBmb3I6ICJceEZGIiA9PSAiXHhGRiIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4QzVceEM1XHhBMCIpID09IHU4IlxceEM1xaAiIGZvcjogIlx4QzXFoCIgPT0gIlx4QzXFoCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RjRceDkwXHg4MFx4ODAiKSA9PSB1OCJcXHhGNFxceDkwXFx4ODBcXHg4MCIgZm9yOiAiXHhGNFx4OTBceDgwXHg4MCIgPT0gIlx4RjRceDkwXHg4MFx4ODAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEMwXHg4MCIpID09IHU4IlxceEMwXFx4ODAiIGZvcjogIlx4QzBceDgwIiA9PSAiXHhDMFx4ODAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEYwXHg4MFx4ODBceDgwIikgPT0gdTgiXFx4RjBcXHg4MFxceDgwXFx4ODAiIGZvcjogIlx4RjBceDgwXHg4MFx4ODAiID09ICJceEYwXHg4MFx4ODBceDgwIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhDMVx4QkYiKSA9PSB1OCJcXHhDMVxceEJGIiBmb3I6ICJceEMxXHhCRiIgPT0gIlx4QzFceEJGIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhFMFx4OUZceEJGIikgPT0gdTgiXFx4RTBcXHg5RlxceEJGIiBmb3I6ICJceEUwXHg5Rlx4QkYiID09ICJceEUwXHg5Rlx4QkYiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEYwXHg4Rlx4QkZceEJGIikgPT0gdTgiXFx4RjBcXHg4RlxceEJGXFx4QkYiIGZvcjogIlx4RjBceDhGXHhCRlx4QkYiID09ICJceEYwXHg4Rlx4QkZceEJGIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhFRFx4QTBceDgwIikgPT0gIlx4RURceEEwXHg4MCIgZm9yOiAi7aCAIiA9PSAi7aCAIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhFRFx4QUZceEJGIikgPT0gIlx4RURceEFGXHhCRiIgZm9yOiAi7a+/IiA9PSAi7a+/IgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhFRFx4QjBceDgwIikgPT0gIlx4RURceEIwXHg4MCIgZm9yOiAi7bCAIiA9PSAi7bCAIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhFRFx4QkZceEJGIikgPT0gIlx4RURceEJGXHhCRiIgZm9yOiAi7b+/IiA9PSAi7b+/IgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHg4MCIpID09IHU4IlxceDgwIiBmb3I6ICJceDgwIiA9PSAiXHg4MCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4ODEiKSA9PSB1OCJcXHg4MSIgZm9yOiAiXHg4MSIgPT0gIlx4ODEiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEJDIikgPT0gdTgiXFx4QkMiIGZvcjogIlx4QkMiID09ICJceEJDIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhCRiIpID09IHU4IlxceEJGIiBmb3I6ICJceEJGIiA9PSAiXHhCRiIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RjVceDgwXHg4MFx4ODAiKSA9PSB1OCJcXHhGNVxceDgwXFx4ODBcXHg4MCIgZm9yOiAiXHhGNVx4ODBceDgwXHg4MCIgPT0gIlx4RjVceDgwXHg4MFx4ODAiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEY2XHg4MFx4ODBceDgwIikgPT0gdTgiXFx4RjZcXHg4MFxceDgwXFx4ODAiIGZvcjogIlx4RjZceDgwXHg4MFx4ODAiID09ICJceEY2XHg4MFx4ODBceDgwIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhGN1x4ODBceDgwXHg4MCIpID09IHU4IlxceEY3XFx4ODBcXHg4MFxceDgwIiBmb3I6ICJceEY3XHg4MFx4ODBceDgwIiA9PSAiXHhGN1x4ODBceDgwXHg4MCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4REUiKSA9PSB1OCJcXHhERSIgZm9yOiAiXHhERSIgPT0gIlx4REUiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceERGIikgPT0gdTgiXFx4REYiIGZvcjogIlx4REYiID09ICJceERGIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhFMCIpID09IHU4IlxceEUwIiBmb3I6ICJceEUwIiA9PSAiXHhFMCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RUYiKSA9PSB1OCJcXHhFRiIgZm9yOiAiXHhFRiIgPT0gIlx4RUYiCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZW5jb2RlKCJceEYwIikgPT0gdTgiXFx4RjAiIGZvcjogIlx4RjAiID09ICJceEYwIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhGNCIpID09IHU4IlxceEY0IiBmb3I6ICJceEY0IiA9PSAiXHhGNCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RTBceDgwIikgPT0gdTgiXFx4RTBcXHg4MCIgZm9yOiAiXHhFMFx4ODAiID09ICJceEUwXHg4MCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RTBceEJGIikgPT0gdTgiXFx4RTBcXHhCRiIgZm9yOiAiXHhFMFx4QkYiID09ICJceEUwXHhCRiIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RTFceDgwIikgPT0gdTgiXFx4RTFcXHg4MCIgZm9yOiAiXHhFMVx4ODAiID09ICJceEUxXHg4MCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RjBceDgwIikgPT0gdTgiXFx4RjBcXHg4MCIgZm9yOiAiXHhGMFx4ODAiID09ICJceEYwXHg4MCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RjRceDgwIikgPT0gdTgiXFx4RjRcXHg4MCIgZm9yOiAiXHhGNFx4ODAiID09ICJceEY0XHg4MCIKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBlbmNvZGUoIlx4RjBceDgwXHg4MCIpID09IHU4IlxceEYwXFx4ODBcXHg4MCIgZm9yOiAiXHhGMFx4ODBceDgwIiA9PSAiXHhGMFx4ODBceDgwIgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGVuY29kZSgiXHhGNFx4ODBceDgwIikgPT0gdTgiXFx4RjRcXHg4MFxceDgwIiBmb3I6ICJceEY0XHg4MFx4ODAiID09ICJceEY0XHg4MFx4ODAiCiBUb1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIGVtcHR5ICkgPT0gInsgIH0iIGZvcjogInsgIH0iID09ICJ7ICB9IgogVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQ2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBvbmVWYWx1ZSApID09ICJ7IDQyIH0iIGZvcjogInsgNDIgfSIgPT0gInsgNDIgfSIKIFRvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggdHdvVmFsdWVzICkgPT0gInsgNDIsIDI1MCB9IiBmb3I6ICJ7IDQyLCAyNTAgfSIgPT0gInsgNDIsIDI1MCB9IgpAQCAtOTExLDEwICsxMjg1LDIwIEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6CiBsb29zZSB0ZXh0IGFydGlmYWN0CiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IGV4cGxpY2l0bHkgd2l0aCAxIG1lc3NhZ2U6ICdQcmV2aW91cyBpbmZvIHNob3VsZCBub3QgYmUgc2VlbicKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogZXhwbGljaXRseSB3aXRoIDEgbWVzc2FnZTogJ3ByZXZpb3VzIHVuc2NvcGVkIGluZm8gU0hPVUxEIG5vdCBiZSBzZWVuJwogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBsID09IHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPjo6bWF4KCkgZm9yOiA5MjIzMzcyMDM2ODU0Nzc1ODA3ICgweDxoZXggZGlnaXRzPikKID09CiA5MjIzMzcyMDM2ODU0Nzc1ODA3ICgweDxoZXggZGlnaXRzPikKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogYiA+IGEgZm9yOiAwID4gMQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBiID4gYSBmb3I6IDEgPiAxCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGIgPiBhIGZvcjogMiA+IDEKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogYiA+IGEgZm9yOiAzID4gMQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBiID4gYSBmb3I6IDQgPiAxCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGIgPiBhIGZvcjogNSA+IDEKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogYiA+IGEgZm9yOiA2ID4gMQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBiID4gYSBmb3I6IDcgPiAxCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGIgPiBhIGZvcjogOCA+IDEKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogYiA+IGEgZm9yOiA5ID4gMQogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiAoIGZpYltpXSAlIDIgKSA9PSAwIGZvcjogMSA9PSAwIHdpdGggMSBtZXNzYWdlOiAnVGVzdGluZyBpZiBmaWJbMF0gKDEpIGlzIGV2ZW4nCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6ICggZmliW2ldICUgMiApID09IDAgZm9yOiAxID09IDAgd2l0aCAxIG1lc3NhZ2U6ICdUZXN0aW5nIGlmIGZpYlsxXSAoMSkgaXMgZXZlbicKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogKCBmaWJbaV0gJSAyICkgPT0gMCBmb3I6IDAgPT0gMCB3aXRoIDEgbWVzc2FnZTogJ1Rlc3RpbmcgaWYgZmliWzJdICgyKSBpcyBldmVuJwpAQCAtOTIzLDYgKzEzMDcsOCBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAoIGZpYltpXSAlIDIgKSA9PSAwIGZvcjogMCA9PSAwIHdpdGggMSBtZXNzYWdlOiAnVGVzdGluZyBpZiBmaWJbNV0gKDgpIGlzIGV2ZW4nCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6ICggZmliW2ldICUgMiApID09IDAgZm9yOiAxID09IDAgd2l0aCAxIG1lc3NhZ2U6ICdUZXN0aW5nIGlmIGZpYls2XSAoMTMpIGlzIGV2ZW4nCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6ICggZmliW2ldICUgMiApID09IDAgZm9yOiAxID09IDAgd2l0aCAxIG1lc3NhZ2U6ICdUZXN0aW5nIGlmIGZpYls3XSAoMjEpIGlzIGV2ZW4nCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiB3YXJuaW5nOiAnaW5mbycgd2l0aCAyIG1lc3NhZ2VzOiAndW5zY29wZWQgaW5mbycgYW5kICdhbmQgd2FybiBtYXkgbWl4JworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogd2FybmluZzogJ2luZm8nIHdpdGggMiBtZXNzYWdlczogJ3Vuc2NvcGVkIGluZm8nIGFuZCAndGhleSBhcmUgbm90IGNsZWFyZWQgYWZ0ZXIgd2FybmluZ3MnCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IGEgPT0gYiBmb3I6IDEgPT0gMgogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBhICE9IGIgZm9yOiAxICE9IDIKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogYSA8IGIgZm9yOiAxIDwgMgpAQCAtOTMyLDEzICsxMzE4LDIyIEBACiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcyA9PSAiNyIgZm9yOiAiNyIgPT0gIjciCiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdGkgPT0gdHlwZWlkKGludCkgZm9yOiB7P30gPT0gez99CiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6CitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICd0aGlzIE1BWSBiZSBzZWVuIG9ubHkgZm9yIHRoZSBGSVJTVCBhc3NlcnRpb24gSUYgaW5mbyBpcyBwcmludGVkIGZvciBwYXNzaW5nIGFzc2VydGlvbnMnCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICd0aGlzIE1BWSBiZSBzZWVuIG9ubHkgZm9yIHRoZSBTRUNPTkQgYXNzZXJ0aW9uIElGIGluZm8gaXMgcHJpbnRlZCBmb3IgcGFzc2luZyBhc3NlcnRpb25zJworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBmYWxzZSB3aXRoIDEgbWVzc2FnZTogJ3RoaXMgU0hPVUxEIGJlIHNlZW4nCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IG1ha2VTdHJpbmcoIGZhbHNlICkgIT0gc3RhdGljX2Nhc3Q8Y2hhcio+KDApIGZvcjogInZhbGlkIHN0cmluZyIgIT0ge251bGwgc3RyaW5nfQogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBtYWtlU3RyaW5nKCB0cnVlICkgPT0gc3RhdGljX2Nhc3Q8Y2hhcio+KDApIGZvcjoge251bGwgc3RyaW5nfSA9PSB7bnVsbCBzdHJpbmd9CiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcHRyLmdldCgpID09IDAgZm9yOiAwID09IDAKLVRvU3RyaW5nUGFpci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggcGFpciApID09ICJ7IHsgNDIsIC8iQXJ0aHVyLyIgfSwgeyAvIkZvcmQvIiwgMjQgfSB9IiBmb3I6ICJ7IHsgNDIsICJBcnRodXIiIH0sIHsgIkZvcmQiLCAyNCB9IH0iCitUb1N0cmluZ1BhaXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHBhaXIgKSA9PSAieyB7IDQyLCBcIkFydGh1clwiIH0sIHsgXCJGb3JkXCIsIDI0IH0gfSIgZm9yOiAieyB7IDQyLCAiQXJ0aHVyIiB9LCB7ICJGb3JkIiwgMjQgfSB9IgogPT0KICJ7IHsgNDIsICJBcnRodXIiIH0sIHsgIkZvcmQiLCAyNCB9IH0iCiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcCA9PSAwIGZvcjogMCA9PSAwCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHRydWUgd2l0aCAxIG1lc3NhZ2U6ICd0aGlzIE1BWSBiZSBzZWVuIElGIGluZm8gaXMgcHJpbnRlZCBmb3IgcGFzc2luZyBhc3NlcnRpb25zJworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBmYWxzZSB3aXRoIDIgbWVzc2FnZXM6ICd0aGlzIFNIT1VMRCBiZSBzZWVuJyBhbmQgJ3RoaXMgU0hPVUxEIGFsc28gYmUgc2VlbicKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogZmFsc2Ugd2l0aCAxIG1lc3NhZ2U6ICd0aGlzIFNIT1VMRCBiZSBzZWVuIG9ubHkgT05DRScKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdHJ1ZQorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiB0cnVlIHdpdGggMSBtZXNzYWdlOiAndGhpcyBNQVkgYWxzbyBiZSBzZWVuIG9ubHkgT05DRSBJRiBpbmZvIGlzIHByaW50ZWQgZm9yIHBhc3NpbmcgYXNzZXJ0aW9ucycKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdHJ1ZQogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBhICE9IGIgZm9yOiAxICE9IDIKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogYiAhPSBhIGZvcjogMiAhPSAxCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGEgIT0gYiBmb3I6IDEgIT0gMgpAQCAtOTU4LDM1ICsxMzUzLDI0IEBACiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcyA9PSAiZGlkbnwndCIgZm9yOiAiZGlkbnwndCIgPT0gImRpZG58J3QiCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IGZhbHNlIHdpdGggMSBtZXNzYWdlOiAnMycKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IGZhaWxlZDogZmFsc2Ugd2l0aCAyIG1lc3NhZ2VzOiAnaGknIGFuZCAnaSA6PSA3JworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBmYWxzZSB3aXRoIDQgbWVzc2FnZXM6ICdDb3VudCAxIHRvIDMuLi4nIGFuZCAnMScgYW5kICcyJyBhbmQgJzMnCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBmYWlsZWQ6IGZhbHNlIHdpdGggNCBtZXNzYWdlczogJ0NvdW50IDQgdG8gNi4uLicgYW5kICc0JyBhbmQgJzUnIGFuZCAnNicKIFRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIGVtcHR5TWFwICkgPT0gInsgIH0iIGZvcjogInsgIH0iID09ICJ7ICB9IgotVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggbWFwICkgPT0gInsgeyAvIm9uZS8iLCAxIH0gfSIgZm9yOiAieyB7ICJvbmUiLCAxIH0gfSIgPT0gInsgeyAib25lIiwgMSB9IH0iCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQ2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBtYXAgKSA9PSAieyB7IC8iYWJjLyIsIDEgfSwgeyAvImRlZi8iLCAyIH0sIHsgLyJnaGkvIiwgMyB9IH0iIGZvcjogInsgeyAiYWJjIiwgMSB9LCB7ICJkZWYiLCAyIH0sIHsgImdoaSIsIDMgfSB9IgorVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggbWFwICkgPT0gInsgeyBcIm9uZVwiLCAxIH0gfSIgZm9yOiAieyB7ICJvbmUiLCAxIH0gfSIgPT0gInsgeyAib25lIiwgMSB9IH0iCitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQ2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBtYXAgKSA9PSAieyB7IFwiYWJjXCIsIDEgfSwgeyBcImRlZlwiLCAyIH0sIHsgXCJnaGlcIiwgMyB9IH0iIGZvcjogInsgeyAiYWJjIiwgMSB9LCB7ICJkZWYiLCAyIH0sIHsgImdoaSIsIDMgfSB9IgogPT0KICJ7IHsgImFiYyIsIDEgfSwgeyAiZGVmIiwgMiB9LCB7ICJnaGkiLCAzIH0gfSIKLVRvU3RyaW5nUGFpci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2YWx1ZSkgPT0gInsgMzQsIC8ieHl6enkvIiB9IiBmb3I6ICJ7IDM0LCAieHl6enkiIH0iID09ICJ7IDM0LCAieHl6enkiIH0iCi1Ub1N0cmluZ1BhaXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHZhbHVlICkgPT0gInsgMzQsIC8ieHl6enkvIiB9IiBmb3I6ICJ7IDM0LCAieHl6enkiIH0iID09ICJ7IDM0LCAieHl6enkiIH0iCitUb1N0cmluZ1BhaXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodmFsdWUpID09ICJ7IDM0LCBcInh5enp5XCIgfSIgZm9yOiAieyAzNCwgInh5enp5IiB9IiA9PSAieyAzNCwgInh5enp5IiB9IgorVG9TdHJpbmdQYWlyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCB2YWx1ZSApID09ICJ7IDM0LCBcInh5enp5XCIgfSIgZm9yOiAieyAzNCwgInh5enp5IiB9IiA9PSAieyAzNCwgInh5enp5IiB9IgogVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggZW1wdHlTZXQgKSA9PSAieyAgfSIgZm9yOiAieyAgfSIgPT0gInsgIH0iCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQ2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBzZXQgKSA9PSAieyAvIm9uZS8iIH0iIGZvcjogInsgIm9uZSIgfSIgPT0gInsgIm9uZSIgfSIKLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHNldCApID09ICJ7IC8iYWJjLyIsIC8iZGVmLyIsIC8iZ2hpLyIgfSIgZm9yOiAieyAiYWJjIiwgImRlZiIsICJnaGkiIH0iCitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogQ2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBzZXQgKSA9PSAieyBcIm9uZVwiIH0iIGZvcjogInsgIm9uZSIgfSIgPT0gInsgIm9uZSIgfSIKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHNldCApID09ICJ7IFwiYWJjXCIsIFwiZGVmXCIsIFwiZ2hpXCIgfSIgZm9yOiAieyAiYWJjIiwgImRlZiIsICJnaGkiIH0iCiA9PQogInsgImFiYyIsICJkZWYiLCAiZ2hpIiB9IgotVG9TdHJpbmdQYWlyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBwciApID09ICJ7IHsgLyJncmVlbi8iLCA1NSB9IH0iIGZvcjogInsgeyAiZ3JlZW4iLCA1NSB9IH0iCitUb1N0cmluZ1BhaXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHByICkgPT0gInsgeyBcImdyZWVuXCIsIDU1IH0gfSIgZm9yOiAieyB7ICJncmVlbiIsIDU1IH0gfSIKID09CiAieyB7ICJncmVlbiIsIDU1IH0gfSIKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiBzdGQ6OnN0cmluZyggImZpcnN0IiApID09ICJzZWNvbmQiIGZvcjogImZpcnN0IiA9PSAic2Vjb25kIgotVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggaXRlbSApID09ICJTdHJpbmdNYWtlcjxoYXNfbWFrZXI+IiBmb3I6ICJTdHJpbmdNYWtlcjxoYXNfbWFrZXI+IgotPT0KLSJTdHJpbmdNYWtlcjxoYXNfbWFrZXI+IgotVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggaXRlbSApID09ICJTdHJpbmdNYWtlcjxoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiIgZm9yOiAiU3RyaW5nTWFrZXI8aGFzX21ha2VyX2FuZF9vcGVyYXRvcj4iCi09PQotIlN0cmluZ01ha2VyPGhhc19tYWtlcl9hbmRfb3BlcmF0b3I+IgotVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggaXRlbSApID09ICJvcGVyYXRvcjw8KCBoYXNfb3BlcmF0b3IgKSIgZm9yOiAib3BlcmF0b3I8PCggaGFzX29wZXJhdG9yICkiCi09PQotIm9wZXJhdG9yPDwoIGhhc19vcGVyYXRvciApIgotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiByZXN1bHQgPT0gIi8id2lkZSBsb2FkLyIiIGZvcjogIiJ3aWRlIGxvYWQiIiA9PSAiIndpZGUgbG9hZCIiCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJlc3VsdCA9PSAiLyJ3aWRlIGxvYWQvIiIgZm9yOiAiIndpZGUgbG9hZCIiID09ICIid2lkZSBsb2FkIiIKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcmVzdWx0ID09ICIvIndpZGUgbG9hZC8iIiBmb3I6ICIid2lkZSBsb2FkIiIgPT0gIiJ3aWRlIGxvYWQiIgotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiByZXN1bHQgPT0gIi8id2lkZSBsb2FkLyIiIGZvcjogIiJ3aWRlIGxvYWQiIiA9PSAiIndpZGUgbG9hZCIiCiBUb1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0cmVhbWFibGVfcmFuZ2V7fSkgPT0gIm9wPDwoc3RyZWFtYWJsZV9yYW5nZSkiIGZvcjogIm9wPDwoc3RyZWFtYWJsZV9yYW5nZSkiCiA9PQogIm9wPDwoc3RyZWFtYWJsZV9yYW5nZSkiCkBAIC05OTQsNyArMTM3OCwyMCBAQAogPT0KICJzdHJpbmdtYWtlcihzdHJlYW1hYmxlX3JhbmdlKSIKIFRvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoanVzdF9yYW5nZXt9KSA9PSAieyAxLCAyLCAzLCA0IH0iIGZvcjogInsgMSwgMiwgMywgNCB9IiA9PSAieyAxLCAyLCAzLCA0IH0iCi1Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGRpc2FibGVkX3Jhbmdle30pID09ICJ7P30iIGZvcjogIns/fSIgPT0gIns/fSIKK1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoZGlzYWJsZWRfcmFuZ2V7fSkgPT0gInsgISEhIH0iIGZvcjogInsgISEhIH0iID09ICJ7ICEhISB9IgorVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggaXRlbSApID09ICJTdHJpbmdNYWtlcjxoYXNfbWFrZXI+IiBmb3I6ICJTdHJpbmdNYWtlcjxoYXNfbWFrZXI+IgorPT0KKyJTdHJpbmdNYWtlcjxoYXNfbWFrZXI+IgorVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggaXRlbSApID09ICJTdHJpbmdNYWtlcjxoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiIgZm9yOiAiU3RyaW5nTWFrZXI8aGFzX21ha2VyX2FuZF9vcGVyYXRvcj4iCis9PQorIlN0cmluZ01ha2VyPGhhc19tYWtlcl9hbmRfb3BlcmF0b3I+IgorVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShpdGVtKSA9PSAieyAhISEgfSIgZm9yOiAieyAhISEgfSIgPT0gInsgISEhIH0iCitUb1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBpdGVtICkgPT0gIm9wZXJhdG9yPDwoIGhhc19vcGVyYXRvciApIiBmb3I6ICJvcGVyYXRvcjw8KCBoYXNfb3BlcmF0b3IgKSIKKz09Cisib3BlcmF0b3I8PCggaGFzX29wZXJhdG9yICkiCitUb1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBpdGVtICkgPT0gIm9wZXJhdG9yPDwoIGhhc190ZW1wbGF0ZV9vcGVyYXRvciApIiBmb3I6ICJvcGVyYXRvcjw8KCBoYXNfdGVtcGxhdGVfb3BlcmF0b3IgKSIKKz09Cisib3BlcmF0b3I8PCggaGFzX3RlbXBsYXRlX29wZXJhdG9yICkiCiBUb1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCB2ICkgPT0gInsgU3RyaW5nTWFrZXI8aGFzX21ha2VyPiB9IiBmb3I6ICJ7IFN0cmluZ01ha2VyPGhhc19tYWtlcj4gfSIKID09CiAieyBTdHJpbmdNYWtlcjxoYXNfbWFrZXI+IH0iCkBAIC0xMDA0LDYgKzE0MDEsMTkgQEAKIFRvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHYgKSA9PSAieyBvcGVyYXRvcjw8KCBoYXNfb3BlcmF0b3IgKSB9IiBmb3I6ICJ7IG9wZXJhdG9yPDwoIGhhc19vcGVyYXRvciApIH0iCiA9PQogInsgb3BlcmF0b3I8PCggaGFzX29wZXJhdG9yICkgfSIKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZGF0YS5zdHIuc2l6ZSgpID09IGRhdGEubGVuIGZvcjogMyA9PSAzCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IGRhdGEuc3RyLnNpemUoKSA9PSBkYXRhLmxlbiBmb3I6IDMgPT0gMworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBkYXRhLnN0ci5zaXplKCkgPT0gZGF0YS5sZW4gZm9yOiA1ID09IDUKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogZGF0YS5zdHIuc2l6ZSgpID09IGRhdGEubGVuIGZvcjogNCA9PSA0CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0cmxlbihzdGQ6OmdldDwwPihkYXRhKSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6OmdldDwxPihkYXRhKSkgZm9yOiA1ID09IDUKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogc3RybGVuKHN0ZDo6Z2V0PDA+KGRhdGEpKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0ZDo6Z2V0PDE+KGRhdGEpKSBmb3I6IDYgPT0gNgorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiBzdHJsZW4oc3RkOjpnZXQ8MD4oZGF0YSkpID09IHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjpnZXQ8MT4oZGF0YSkpIGZvcjogNSA9PSA1CitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHN0cmxlbihzdGQ6OmdldDwwPihkYXRhKSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6OmdldDwxPihkYXRhKSkgZm9yOiA2ID09IDYKK0V4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogZmFpbGVkOiB1bmV4cGVjdGVkIGV4Y2VwdGlvbiB3aXRoIG1lc3NhZ2U6ICdXaHkgd291bGQgeW91IHRocm93IGEgc3RkOjpzdHJpbmc/JworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiByZXN1bHQgPT0gIlwid2lkZSBsb2FkXCIiIGZvcjogIiJ3aWRlIGxvYWQiIiA9PSAiIndpZGUgbG9hZCIiCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IHJlc3VsdCA9PSAiXCJ3aWRlIGxvYWRcIiIgZm9yOiAiIndpZGUgbG9hZCIiID09ICIid2lkZSBsb2FkIiIKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogcmVzdWx0ID09ICJcIndpZGUgbG9hZFwiIiBmb3I6ICIid2lkZSBsb2FkIiIgPT0gIiJ3aWRlIGxvYWQiIgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiByZXN1bHQgPT0gIlwid2lkZSBsb2FkXCIiIGZvcjogIiJ3aWRlIGxvYWQiIiA9PSAiIndpZGUgbG9hZCIiCiBFbnVtVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoZTApID09ICJFMi9WMCIgZm9yOiAiRTIvVjAiID09ICJFMi9WMCIKIEVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShlMSkgPT0gIkUyL1YxIiBmb3I6ICJFMi9WMSIgPT0gIkUyL1YxIgogRW51bVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGUzKSA9PSAiVW5rbm93biBlbnVtIHZhbHVlIDEwIiBmb3I6ICJVbmtub3duIGVudW0gdmFsdWUgMTAiCkBAIC0xMDIwLDE3ICsxNDMwLDE3IEBACiBUb1N0cmluZ1R1cGxlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICIxLjJmIiA9PSA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShmbG9hdCgxLjIpKSBmb3I6ICIxLjJmIiA9PSAiMS4yZiIKIFRvU3RyaW5nVHVwbGUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogInsgMS4yZiwgMCB9IiA9PSA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh0eXBlezEuMmYsMH0pIGZvcjogInsgMS4yZiwgMCB9IiA9PSAieyAxLjJmLCAwIH0iCiBUb1N0cmluZ1R1cGxlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICJ7IDAgfSIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodHlwZXswfSkgZm9yOiAieyAwIH0iID09ICJ7IDAgfSIKLVRvU3RyaW5nVHVwbGUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogInsgMCwgNDIsIC8iQ2F0Y2ggbWUvIiB9IiA9PSA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2YWx1ZSkgZm9yOiAieyAwLCA0MiwgIkNhdGNoIG1lIiB9IgorVG9TdHJpbmdUdXBsZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiAieyAwLCA0MiwgXCJDYXRjaCBtZVwiIH0iID09IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHZhbHVlKSBmb3I6ICJ7IDAsIDQyLCAiQ2F0Y2ggbWUiIH0iCiA9PQogInsgMCwgNDIsICJDYXRjaCBtZSIgfSIKLVRvU3RyaW5nVHVwbGUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogInsgLyJoZWxsby8iLCAvIndvcmxkLyIgfSIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodHlwZXsiaGVsbG8iLCJ3b3JsZCJ9KSBmb3I6ICJ7ICJoZWxsbyIsICJ3b3JsZCIgfSIKK1RvU3RyaW5nVHVwbGUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogInsgXCJoZWxsb1wiLCBcIndvcmxkXCIgfSIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodHlwZXsiaGVsbG8iLCJ3b3JsZCJ9KSBmb3I6ICJ7ICJoZWxsbyIsICJ3b3JsZCIgfSIKID09CiAieyAiaGVsbG8iLCAid29ybGQiIH0iCiBUb1N0cmluZ1R1cGxlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6ICJ7IHsgNDIgfSwgeyB9LCAxLjJmIH0iID09IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHZhbHVlKSBmb3I6ICJ7IHsgNDIgfSwgeyB9LCAxLjJmIH0iCiA9PQogInsgeyA0MiB9LCB7IH0sIDEuMmYgfSIKIFRvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHYpID09ICJ7ICB9IiBmb3I6ICJ7ICB9IiA9PSAieyAgfSIKLVRvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHYpID09ICJ7IHsgLyJoZWxsby8iIH0sIHsgLyJ3b3JsZC8iIH0gfSIgZm9yOiAieyB7ICJoZWxsbyIgfSwgeyAid29ybGQiIH0gfSIKK1RvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHYpID09ICJ7IHsgXCJoZWxsb1wiIH0sIHsgXCJ3b3JsZFwiIH0gfSIgZm9yOiAieyB7ICJoZWxsbyIgfSwgeyAid29ybGQiIH0gfSIKID09CiAieyB7ICJoZWxsbyIgfSwgeyAid29ybGQiIH0gfSIKIFRvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGJvb2xzKSA9PSAieyAgfSIgZm9yOiAieyAgfSIgPT0gInsgIH0iCkBAIC0xMDQzLDggKzE0NTMsOCBAQAogVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodnYpID09ICJ7IDQyIH0iIGZvcjogInsgNDIgfSIgPT0gInsgNDIgfSIKIFRvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBwYXNzZWQ6IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHZ2KSA9PSAieyA0MiwgMjUwIH0iIGZvcjogInsgNDIsIDI1MCB9IiA9PSAieyA0MiwgMjUwIH0iCiBUb1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogcGFzc2VkOiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2dikgPT0gInsgIH0iIGZvcjogInsgIH0iID09ICJ7ICB9IgotVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodnYpID09ICJ7IC8iaGVsbG8vIiB9IiBmb3I6ICJ7ICJoZWxsbyIgfSIgPT0gInsgImhlbGxvIiB9IgotVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodnYpID09ICJ7IC8iaGVsbG8vIiwgLyJ3b3JsZC8iIH0iIGZvcjogInsgImhlbGxvIiwgIndvcmxkIiB9IgorVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodnYpID09ICJ7IFwiaGVsbG9cIiB9IiBmb3I6ICJ7ICJoZWxsbyIgfSIgPT0gInsgImhlbGxvIiB9IgorVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodnYpID09ICJ7IFwiaGVsbG9cIiwgXCJ3b3JsZFwiIH0iIGZvcjogInsgImhlbGxvIiwgIndvcmxkIiB9IgogPT0KICJ7ICJoZWxsbyIsICJ3b3JsZCIgfSIKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5zaXplKCkgPT0gNSBmb3I6IDUgPT0gNQpAQCAtMTA2Niw1ICsxNDc2LDUgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDogdi5jYXBhY2l0eSgpID49IDUgZm9yOiA1ID49IDUKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDoKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHBhc3NlZDoKLUZhaWxlZCA2MSB0ZXN0IGNhc2VzLCBmYWlsZWQgMTIwIGFzc2VydGlvbnMuCitGYWlsZWQgNzcgdGVzdCBjYXNlcywgZmFpbGVkIDEzOCBhc3NlcnRpb25zLgogCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvY29uc29sZS5zdGQuYXBwcm92ZWQudHh0IGIvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL2NvbnNvbGUuc3RkLmFwcHJvdmVkLnR4dAppbmRleCBhOTRjYzRmLi4zYzUwNDM3IDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvY29uc29sZS5zdGQuYXBwcm92ZWQudHh0CisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9jb25zb2xlLnN0ZC5hcHByb3ZlZC50eHQKQEAgLTEsOCArMSwyMiBAQAorVGhpcyB3b3VsZCBub3QgYmUgY2F1Z2h0IHByZXZpb3VzbHkKK05vciB3b3VsZCB0aGlzCiAKIH5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KIDxleGUtbmFtZT4gaXMgYSA8dmVyc2lvbj4gaG9zdCBhcHBsaWNhdGlvbi4KIFJ1biB3aXRoIC0/IGZvciBvcHRpb25zCiAKK1JhbmRvbW5lc3Mgc2VlZGVkIHRvOiAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMxNTE0OiBzdGRlcnIvc3Rkb3V0IGlzIG5vdCBjYXB0dXJlZCBpbiB0ZXN0cyBhYm9ydGVkIGJ5IGFuIGV4Y2VwdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorZXhwbGljaXRseSB3aXRoIG1lc3NhZ2U6CisgIDE1MTQKKwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIzc0OCAtIGNhcHR1cmVzIHdpdGggdW5leHBlY3RlZCBleGNlcHRpb25zCiAgIG91dHNpZGUgYXNzZXJ0aW9ucwpAQCAtOTEsNiArMTA1LDg3IEBACiAgICJoZWxsbyIgPT0gIndvcmxkIgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gVGVtcGxhdGVfRm9vCis8ZmxvYXQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gVGVtcGxhdGVfRm9vCis8aW50PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKKyAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAxICkKK3dpdGggZXhwYW5zaW9uOgorICAwID09IDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIHN0ZDo6dmVjdG9yCis8ZmxvYXQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gc3RkOjp2ZWN0b3IKKzxpbnQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGRvdWJsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKKyAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAxLjAgPT0gMgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGZsb2F0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlPFRlc3RUeXBlPjo6bV9hID09IDIgKQord2l0aCBleHBhbnNpb246CisgIDEuMGYgPT0gMgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGludAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKKyAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAxID09IDIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQSBURVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC0zMzUsMTIgKzQzMCwxMiBAQAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKICAgQ0hFQ0tfVEhST1dTX01BVENIRVMoIHRocm93cygzKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgez99IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxCisgIFNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKIAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKICAgUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyggdGhyb3dzKDQpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9ICkKIHdpdGggZXhwYW5zaW9uOgotICB7P30gc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKKyAgU3BlY2lhbEV4Y2VwdGlvbjo6d2hhdCBzcGVjaWFsIGV4Y2VwdGlvbiBoYXMgdmFsdWUgb2YgMQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBFeHBlY3RlZCBleGNlcHRpb25zIHRoYXQgZG9uJ3QgdGhyb3cgb3IgdW5leHBlY3RlZCBleGNlcHRpb25zIGZhaWwgdGhlIHRlc3QKQEAgLTM5MCw4ICs0ODUsNyBAQAogZXhwbGljaXRseSB3aXRoIG1lc3NhZ2U6CiAgIFRoaXMgaXMgYSBmYWlsdXJlCiAKLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci13YXJuaW5nOgorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogd2FybmluZzoKICAgVGhpcyBtZXNzYWdlIGFwcGVhcnMgaW4gdGhlIG91dHB1dAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MDAsOCArNDk0LDcgQEAKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLXdhcm5pbmc6CitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiB3YXJuaW5nOgogICB0aGlzIGlzIGEgd2FybmluZwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC01MjYsOCArNjE5LDcgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLXdhcm5pbmc6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiB3YXJuaW5nOgogICBUaGlzIG9uZSByYW4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzM5LDYgKzgzMSwxNiBAQAogICAiCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Rocm93biBzdHJpbmcgbGl0ZXJhbHMgYXJlIHRyYW5zbGF0ZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0V4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKK2R1ZSB0byB1bmV4cGVjdGVkIGV4Y2VwdGlvbiB3aXRoIG1lc3NhZ2U6CisgIEZvciBzb21lIHJlYXNvbiBzb21lb25lIGlzIHRocm93aW5nIGEgc3RyaW5nIGxpdGVyYWwhCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBjYW4gYmUgdHJhbnNsYXRlZAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC04OTcsOCArOTk5LDcgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci13YXJuaW5nOgorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiB3YXJuaW5nOgogICBVbmNvbW1lbnQgdGhlIGNvZGUgaW4gdGhpcyB0ZXN0IHRvIGNoZWNrIHRoYXQgaXQgZ2l2ZXMgYSBzZW5zaWJsZSBjb21waWxlcgogICBlcnJvcgogCkBAIC05MDgsOCArMTAwOSw3IEBACiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ogotd2FybmluZzoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogd2FybmluZzoKICAgVW5jb21tZW50IHRoZSBjb2RlIGluIHRoaXMgdGVzdCB0byBjaGVjayB0aGF0IGl0IGdpdmVzIGEgc2Vuc2libGUgY29tcGlsZXIKICAgZXJyb3IKIApAQCAtOTU3LDggKzEwNTcsMTggQEAKICAgUHJldmlvdXMgaW5mbyBzaG91bGQgbm90IGJlIHNlZW4KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoranVzdCBmYWlsdXJlIGFmdGVyIHVuc2NvcGVkIGluZm8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorZXhwbGljaXRseSB3aXRoIG1lc3NhZ2U6CisgIHByZXZpb3VzIHVuc2NvcGVkIGluZm8gU0hPVUxEIG5vdCBiZSBzZWVuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxvb3BlZCBTRUNUSU9OIHRlc3RzCi0gIHMxCisgIGIgaXMgY3VycmVudGx5OiAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCkBAIC05NjksNiArMTA3OSwxOCBAQAogICAwID4gMQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb29wZWQgU0VDVElPTiB0ZXN0cworICBiIGlzIGN1cnJlbnRseTogMQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBGQUlMRUQ6CisgIENIRUNLKCBiID4gYSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSA+IDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbG9vcGVkIHRlc3RzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC0xMDE3LDkgKzExMzksMjEgQEAKICAgVGVzdGluZyBpZiBmaWJbN10gKDIxKSBpcyBldmVuCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK21peCBpbmZvLCB1bnNjb3BlZCBpbmZvIGFuZCB3YXJuaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHdhcm5pbmc6CisgIGFuZCB3YXJuIG1heSBtaXgKKworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogd2FybmluZzoKKyAgdGhleSBhcmUgbm90IGNsZWFyZWQgYWZ0ZXIgd2FybmluZ3MKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbW9yZSBuZXN0ZWQgU0VDVElPTiB0ZXN0cwotICBzMQotICBzMgorICBkb2Vzbid0IGVxdWFsCisgIGVxdWFsCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCkBAIC0xMDMwLDYgKzExNjQsNDAgQEAKICAgMSA9PSAyCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK25vdCBwcmludHMgdW5zY29wZWQgaW5mbyBmcm9tIHByZXZpb3VzIGZhaWx1cmVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKKyAgUkVRVUlSRSggZmFsc2UgKQord2l0aCBtZXNzYWdlOgorICB0aGlzIFNIT1VMRCBiZSBzZWVuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ByaW50cyB1bnNjb3BlZCBpbmZvIG9uIGZhaWx1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorICBSRVFVSVJFKCBmYWxzZSApCit3aXRoIG1lc3NhZ2VzOgorICB0aGlzIFNIT1VMRCBiZSBzZWVuCisgIHRoaXMgU0hPVUxEIGFsc28gYmUgc2VlbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcmludHMgdW5zY29wZWQgaW5mbyBvbmx5IGZvciB0aGUgZmlyc3QgYXNzZXJ0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKKyAgQ0hFQ0soIGZhbHNlICkKK3dpdGggbWVzc2FnZToKKyAgdGhpcyBTSE9VTEQgYmUgc2VlbiBvbmx5IE9OQ0UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc2VuZCBhIHNpbmdsZSBjaGFyIHRvIElORk8KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KQEAgLTEwNTMsNiArMTIyMSwyOCBAQAogICBpIDo9IDcKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RhY2tzIHVuc2NvcGVkIGluZm8gaW4gbG9vcHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorICBDSEVDSyggZmFsc2UgKQord2l0aCBtZXNzYWdlczoKKyAgQ291bnQgMSB0byAzLi4uCisgIDEKKyAgMgorICAzCisKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKKyAgQ0hFQ0soIGZhbHNlICkKK3dpdGggbWVzc2FnZXM6CisgIENvdW50IDQgdG8gNi4uLgorICA0CisgIDUKKyAgNgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBzdHJpbmcgbGl0ZXJhbHMgb2YgZGlmZmVyZW50IHNpemVzIGNhbiBiZSBjb21wYXJlZAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC0xMDYzLDcgKzEyNTMsMTcgQEAKIHdpdGggZXhwYW5zaW9uOgogICAiZmlyc3QiID09ICJzZWNvbmQiCiAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3Rocm93biBzdGQ6OnN0cmluZ3MgYXJlIHRyYW5zbGF0ZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0V4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKK2R1ZSB0byB1bmV4cGVjdGVkIGV4Y2VwdGlvbiB3aXRoIG1lc3NhZ2U6CisgIFdoeSB3b3VsZCB5b3UgdGhyb3cgYSBzdGQ6OnN0cmluZz8KKwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdGVzdCBjYXNlczogMTk4IHwgMTQ3IHBhc3NlZCB8ICA0NyBmYWlsZWQgfCAgNCBmYWlsZWQgYXMgZXhwZWN0ZWQKLWFzc2VydGlvbnM6IDk5NiB8IDg3MCBwYXNzZWQgfCAxMDUgZmFpbGVkIHwgMjEgZmFpbGVkIGFzIGV4cGVjdGVkCit0ZXN0IGNhc2VzOiAgMjU1IHwgIDE4OSBwYXNzZWQgfCAgNjIgZmFpbGVkIHwgIDQgZmFpbGVkIGFzIGV4cGVjdGVkCithc3NlcnRpb25zOiAxMzkzIHwgMTI1MCBwYXNzZWQgfCAxMjIgZmFpbGVkIHwgMjEgZmFpbGVkIGFzIGV4cGVjdGVkCiAKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9jb25zb2xlLnN3LmFwcHJvdmVkLnR4dCBiL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9jb25zb2xlLnN3LmFwcHJvdmVkLnR4dAppbmRleCAyYjcxNTllLi41YjU0YWNlIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvY29uc29sZS5zdy5hcHByb3ZlZC50eHQKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL2NvbnNvbGUuc3cuYXBwcm92ZWQudHh0CkBAIC0zLDE0ICszLDE1IEBACiA8ZXhlLW5hbWU+IGlzIGEgPHZlcnNpb24+IGhvc3QgYXBwbGljYXRpb24uCiBSdW4gd2l0aCAtPyBmb3Igb3B0aW9ucwogCitSYW5kb21uZXNzIHNlZWRlZCB0bzogMQorCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIEEgdGVzdCBuYW1lIHRoYXQgc3RhcnRzIHdpdGggYSAjCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiB3aXRoIG1lc3NhZ2U6CiAgIHlheQogCkBAIC0yMSwxNCArMjIsMTIgQEAKIERlY29tcG9zaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotRGVjb21wb3NpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0RlY29tcG9zaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZnB0ciA9PSAwICkKIHdpdGggZXhwYW5zaW9uOgogICAwID09IDAKIAotRGVjb21wb3NpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0RlY29tcG9zaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZnB0ciA9PSAwbCApCiB3aXRoIGV4cGFuc2lvbjoKICAgMCA9PSAwCkBAIC0zOSwxNCArMzgsMTIgQEAKIENvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggeS52ID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMAogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDAgPT0geS52ICkKIHdpdGggZXhwYW5zaW9uOgogICAwID09IDAKQEAgLTU3LDQzICs1NCwxMDkgQEAKIENvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdDEgPT0gdDIgKQogd2l0aCBleHBhbnNpb246CiAgIHs/fSA9PSB7P30KIAotQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0MSAhPSB0MiApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99ICE9IHs/fQogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHQxIDwgdDIgKQogd2l0aCBleHBhbnNpb246CiAgIHs/fSA8IHs/fQogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHQxID4gdDIgKQogd2l0aCBleHBhbnNpb246CiAgIHs/fSA+IHs/fQogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHQxIDw9IHQyICkKIHdpdGggZXhwYW5zaW9uOgogICB7P30gPD0gez99CiAKLUNvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdDEgPj0gdDIgKQogd2l0aCBleHBhbnNpb246CiAgIHs/fSA+PSB7P30KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIzExNzUgLSBIaWRkZW4gVGVzdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMxMjM4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBzdGQ6Om1lbWNtcCh1YXJyLCAiMTIzIiwgc2l6ZW9mKHVhcnIpKSA9PSAwICkKK3dpdGggZXhwYW5zaW9uOgorICAwID09IDAKK3dpdGggbWVzc2FnZXM6CisgIHVhcnIgOj0gIjEyMyIKKyAgc2FyciA6PSAiNDU2IgorCitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBzdGQ6Om1lbWNtcChzYXJyLCAiNDU2Iiwgc2l6ZW9mKHNhcnIpKSA9PSAwICkKK3dpdGggZXhwYW5zaW9uOgorICAwID09IDAKK3dpdGggbWVzc2FnZXM6CisgIHVhcnIgOj0gIjEyMyIKKyAgc2FyciA6PSAiNDU2IgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjMTI0NQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIzE0MDMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGgxID09IGgyICkKK3dpdGggZXhwYW5zaW9uOgorICBbMTQwMyBoZWxwZXJdID09IFsxNDAzIGhlbHBlcl0KKworVGhpcyB3b3VsZCBub3QgYmUgY2F1Z2h0IHByZXZpb3VzbHkKK05vciB3b3VsZCB0aGlzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjMTUxNDogc3RkZXJyL3N0ZG91dCBpcyBub3QgY2FwdHVyZWQgaW4gdGVzdHMgYWJvcnRlZCBieSBhbiBleGNlcHRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKK2V4cGxpY2l0bHkgd2l0aCBtZXNzYWdlOgorICAxNTE0CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMxNTQ4CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBzdGQ6OmlzX3NhbWU8VHlwZUxpc3Q8aW50PiwgVHlwZUxpc3Q8aW50Pj46OnZhbHVlICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICM3NDggLSBjYXB0dXJlcyB3aXRoIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucwogICBvdXRzaWRlIGFzc2VydGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTEyNSw4ICsxODgsNyBAQAogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0V4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIUk9XUyggdGhpc1Rocm93cygpICkKIHdpdGggbWVzc2FnZToKICAgYW5zd2VyIDo9IDQyCkBAIC0xMzcsOCArMTk5LDcgQEAKIENvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggNDIgPT0gZiApCiB3aXRoIGV4cGFuc2lvbjoKICAgNDIgPT0gez99CkBAIC0xNDksMzggKzIxMCwzMSBAQAogQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBhID09IHQgKQogd2l0aCBleHBhbnNpb246CiAgIDMgPT0gMwogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBhID09IHQgKQogd2l0aCBleHBhbnNpb246CiAgIDMgPT0gMwogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhST1dTKCB0aHJvd3NfaW50KHRydWUpICkKIAotQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USFJPV1NfQVMoIHRocm93c19pbnQodHJ1ZSksIGludCApCiAKLUNvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9OT1RIUk9XKCB0aHJvd3NfaW50KGZhbHNlKSApCiAKLUNvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USEFUKCAiYWFhIiwgQ2F0Y2g6OkVuZHNXaXRoKCJhYWEiKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgImFhYSIgZW5kcyB3aXRoOiAiYWFhIgogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRlbXBsYXRlZF90ZXN0czxpbnQ+KDMpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCkBAIC0xOTYsOCArMjUwLDcgQEAKIHdpdGggZXhwYW5zaW9uOgogICAxID09IDAKIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZXJybm8gPT0gMSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMSA9PSAxCkBAIC0yMDgsOCArMjYxLDcgQEAKIENvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggeCA9PSA0ICkKIHdpdGggZXhwYW5zaW9uOgogICB7P30gPT0gNApAQCAtMjIzLDggKzI3NSw3IEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiB3aXRoIG1lc3NhZ2U6CiAgIEV2ZXJ5dGhpbmcgaXMgT0sKIApAQCAtMjM1LDggKzI4Niw3IEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiB3aXRoIG1lc3NhZ2U6CiAgIEV2ZXJ5dGhpbmcgaXMgT0sKIApAQCAtMjQ3LDggKzI5Nyw3IEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiB3aXRoIG1lc3NhZ2U6CiAgIEV2ZXJ5dGhpbmcgaXMgT0sKIApAQCAtMjU5LDggKzMwOCw3IEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiB3aXRoIG1lc3NhZ2U6CiAgIEV2ZXJ5dGhpbmcgaXMgT0sKIApAQCAtMjcxLDggKzMxOSw3IEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiB3aXRoIG1lc3NhZ2U6CiAgIEV2ZXJ5dGhpbmcgaXMgT0sKIApAQCAtMzIyLDQ2ICszNjksMzggQEAKIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZmFsc2UgPT0gZmFsc2UgKQogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdHJ1ZSA9PSB0cnVlICkKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoICFmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9GQUxTRSggZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgICFmYWxzZQogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggIWZhbHNlVmFsdWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfRkFMU0UoIGZhbHNlVmFsdWUgKQogd2l0aCBleHBhbnNpb246CiAgICFmYWxzZQogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggISgxID09IDIpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX0ZBTFNFKCAxID09IDIgKQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0zNzEsMTQgKzQxMCwxMiBAQAogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBpc190cnVlPHRydWU+Ojp2YWx1ZSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRydWUgPT0gaXNfdHJ1ZTx0cnVlPjo6dmFsdWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQpAQCAtMzkwLDE0ICs0MjcsMTIgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaXNfdHJ1ZTxmYWxzZT46OnZhbHVlID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZmFsc2UgPT0gaXNfdHJ1ZTxmYWxzZT46OnZhbHVlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtNDA5LDggKzQ0NCw3IEBACiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoICFpc190cnVlPGZhbHNlPjo6dmFsdWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKQEAgLTQyMiw4ICs0NTYsNyBAQAogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCAhIWlzX3RydWU8dHJ1ZT46OnZhbHVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCkBAIC00MzUsMTkgKzQ2OCw1ODQgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaXNfdHJ1ZTx0cnVlPjo6dmFsdWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfRkFMU0UoIGlzX3RydWU8ZmFsc2U+Ojp2YWx1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgIWZhbHNlCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzN4M3gzIGludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeCA8IHkgKQord2l0aCBleHBhbnNpb246CisgIDEgPCA0CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHkgPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICA0IDwgNworCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHggPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICAxIDwgNworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszeDN4MyBpbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHggPCB5ICkKK3dpdGggZXhwYW5zaW9uOgorICAxIDwgNAorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB5IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgNCA8IDgKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB4IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSA8IDgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorM3gzeDMgaW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB4IDwgeSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSA8IDQKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeSA8IHogKQord2l0aCBleHBhbnNpb246CisgIDQgPCA5CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggeCA8IHogKQord2l0aCBleHBhbnNpb246CisgIDEgPCA5CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzN4M3gzIGludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeCA8IHkgKQord2l0aCBleHBhbnNpb246CisgIDEgPCA1CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHkgPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICA1IDwgNworCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHggPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICAxIDwgNworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszeDN4MyBpbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHggPCB5ICkKK3dpdGggZXhwYW5zaW9uOgorICAxIDwgNQorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB5IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA8IDgKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB4IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSA8IDgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorM3gzeDMgaW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB4IDwgeSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSA8IDUKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeSA8IHogKQord2l0aCBleHBhbnNpb246CisgIDUgPCA5CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggeCA8IHogKQord2l0aCBleHBhbnNpb246CisgIDEgPCA5CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzN4M3gzIGludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeCA8IHkgKQord2l0aCBleHBhbnNpb246CisgIDEgPCA2CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHkgPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICA2IDwgNworCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHggPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICAxIDwgNworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszeDN4MyBpbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHggPCB5ICkKK3dpdGggZXhwYW5zaW9uOgorICAxIDwgNgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB5IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgNiA8IDgKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB4IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSA8IDgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorM3gzeDMgaW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB4IDwgeSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSA8IDYKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeSA8IHogKQord2l0aCBleHBhbnNpb246CisgIDYgPCA5CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggeCA8IHogKQord2l0aCBleHBhbnNpb246CisgIDEgPCA5CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzN4M3gzIGludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeCA8IHkgKQord2l0aCBleHBhbnNpb246CisgIDIgPCA0CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHkgPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICA0IDwgNworCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHggPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICAyIDwgNworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszeDN4MyBpbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHggPCB5ICkKK3dpdGggZXhwYW5zaW9uOgorICAyIDwgNAorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB5IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgNCA8IDgKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB4IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA8IDgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorM3gzeDMgaW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB4IDwgeSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA8IDQKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeSA8IHogKQord2l0aCBleHBhbnNpb246CisgIDQgPCA5CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggeCA8IHogKQord2l0aCBleHBhbnNpb246CisgIDIgPCA5CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzN4M3gzIGludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeCA8IHkgKQord2l0aCBleHBhbnNpb246CisgIDIgPCA1CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHkgPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICA1IDwgNworCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHggPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICAyIDwgNworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszeDN4MyBpbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHggPCB5ICkKK3dpdGggZXhwYW5zaW9uOgorICAyIDwgNQorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB5IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA8IDgKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB4IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA8IDgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorM3gzeDMgaW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB4IDwgeSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA8IDUKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeSA8IHogKQord2l0aCBleHBhbnNpb246CisgIDUgPCA5CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggeCA8IHogKQord2l0aCBleHBhbnNpb246CisgIDIgPCA5CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzN4M3gzIGludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeCA8IHkgKQord2l0aCBleHBhbnNpb246CisgIDIgPCA2CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHkgPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICA2IDwgNworCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHggPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICAyIDwgNworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszeDN4MyBpbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHggPCB5ICkKK3dpdGggZXhwYW5zaW9uOgorICAyIDwgNgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB5IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgNiA8IDgKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB4IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA8IDgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorM3gzeDMgaW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB4IDwgeSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA8IDYKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeSA8IHogKQord2l0aCBleHBhbnNpb246CisgIDYgPCA5CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggeCA8IHogKQord2l0aCBleHBhbnNpb246CisgIDIgPCA5CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzN4M3gzIGludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeCA8IHkgKQord2l0aCBleHBhbnNpb246CisgIDMgPCA0CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHkgPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICA0IDwgNworCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHggPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICAzIDwgNworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszeDN4MyBpbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHggPCB5ICkKK3dpdGggZXhwYW5zaW9uOgorICAzIDwgNAorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB5IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgNCA8IDgKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB4IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA8IDgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorM3gzeDMgaW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB4IDwgeSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA8IDQKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeSA8IHogKQord2l0aCBleHBhbnNpb246CisgIDQgPCA5CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggeCA8IHogKQord2l0aCBleHBhbnNpb246CisgIDMgPCA5CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzN4M3gzIGludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeCA8IHkgKQord2l0aCBleHBhbnNpb246CisgIDMgPCA1CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHkgPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICA1IDwgNworCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHggPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICAzIDwgNworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszeDN4MyBpbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHggPCB5ICkKK3dpdGggZXhwYW5zaW9uOgorICAzIDwgNQorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB5IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA8IDgKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB4IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA8IDgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorM3gzeDMgaW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB4IDwgeSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA8IDUKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeSA8IHogKQord2l0aCBleHBhbnNpb246CisgIDUgPCA5CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggeCA8IHogKQord2l0aCBleHBhbnNpb246CisgIDMgPCA5CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzN4M3gzIGludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeCA8IHkgKQord2l0aCBleHBhbnNpb246CisgIDMgPCA2CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHkgPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICA2IDwgNworCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHggPCB6ICkKK3dpdGggZXhwYW5zaW9uOgorICAzIDwgNworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiszeDN4MyBpbnRzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHggPCB5ICkKK3dpdGggZXhwYW5zaW9uOgorICAzIDwgNgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB5IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgNiA8IDgKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB4IDwgeiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA8IDgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorM3gzeDMgaW50cworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCB4IDwgeSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA8IDYKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggeSA8IHogKQord2l0aCBleHBhbnNpb246CisgIDYgPCA5CisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggeCA8IHogKQord2l0aCBleHBhbnNpb246CisgIDMgPCA5CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEEgTUVUSE9EX0FTX1RFU1RfQ0FTRSBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtNDY0LDEzICsxMDYyLDE3NCBAQAogQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzID09ICJoZWxsbyIgKQogd2l0aCBleHBhbnNpb246CiAgICJoZWxsbyIgPT0gImhlbGxvIgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gVGVtcGxhdGVfRm9vCis8ZmxvYXQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gVGVtcGxhdGVfRm9vCis8aW50PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKKyAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAxICkKK3dpdGggZXhwYW5zaW9uOgorICAwID09IDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIHN0ZDo6dmVjdG9yCis8ZmxvYXQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gc3RkOjp2ZWN0b3IKKzxpbnQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gVGVtcGxhdGVfRm9vCis8ZmxvYXQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDAgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gVGVtcGxhdGVfRm9vCis8aW50PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAwICkKK3dpdGggZXhwYW5zaW9uOgorICAwID09IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIHN0ZDo6dmVjdG9yCis8ZmxvYXQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDAgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gc3RkOjp2ZWN0b3IKKzxpbnQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDAgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGRvdWJsZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKKyAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAxLjAgPT0gMgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGZsb2F0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlPFRlc3RUeXBlPjo6bV9hID09IDIgKQord2l0aCBleHBhbnNpb246CisgIDEuMGYgPT0gMgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGludAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKKyAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAxID09IDIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBkb3VibGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0NsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmU8VGVzdFR5cGU+OjptX2EgPT0gMSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMS4wID09IDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBmbG9hdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZTxUZXN0VHlwZT46Om1fYSA9PSAxICkKK3dpdGggZXhwYW5zaW9uOgorICAxLjBmID09IDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBpbnQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0NsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmU8VGVzdFR5cGU+OjptX2EgPT0gMSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSA9PSAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEEgVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtNDg3LDEzICsxMjQ2LDkyIEBACiBDbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbGFzcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIG1fYSA9PSAxICkKIHdpdGggZXhwYW5zaW9uOgogICAxID09IDEKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSAtIEZvbzxmbG9hdD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB4LnNpemUoKSA9PSAwICkKK3dpdGggZXhwYW5zaW9uOgorICAwID09IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSAtIEZvbzxpbnQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggeC5zaXplKCkgPT0gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMCA9PSAwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0EgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2UgLSBzdGQ6OnZlY3RvcjxmbG9hdD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB4LnNpemUoKSA9PSAwICkKK3dpdGggZXhwYW5zaW9uOgorICAwID09IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSAtIHN0ZDo6dmVjdG9yPGludD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB4LnNpemUoKSA9PSAwICkKK3dpdGggZXhwYW5zaW9uOgorICAwID09IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQSBjb21wYXJpc29uIHRoYXQgdXNlcyBsaXRlcmFscyBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgY29uc3RydWN0b3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZCA9PSAxLjIzX2EgKQord2l0aCBleHBhbnNpb246CisgIDEuMjMgPT0gQXBwcm94KCAxLjIzICkKKworQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGQgIT0gMS4yMl9hICkKK3dpdGggZXhwYW5zaW9uOgorICAxLjIzICE9IEFwcHJveCggMS4yMiApCisKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCAtZCA9PSAtMS4yM19hICkKK3dpdGggZXhwYW5zaW9uOgorICAtMS4yMyA9PSBBcHByb3goIC0xLjIzICkKKworQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGQgPT0gMS4yX2EgLmVwc2lsb24oLjEpICkKK3dpdGggZXhwYW5zaW9uOgorICAxLjIzID09IEFwcHJveCggMS4yICkKKworQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGQgIT0gMS4yX2EgLmVwc2lsb24oLjAwMSkgKQord2l0aCBleHBhbnNpb246CisgIDEuMjMgIT0gQXBwcm94KCAxLjIgKQorCitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZCA9PSAxX2EgLmVwc2lsb24oLjMpICkKK3dpdGggZXhwYW5zaW9uOgorICAxLjIzID09IEFwcHJveCggMS4wICkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQSBjb3VwbGUgb2YgbmVzdGVkIHNlY3Rpb25zIGZvbGxvd2VkIGJ5IGEgZmFpbHVyZQogICBPdXRlcgogICBJbm5lcgpAQCAtNTAxLDggKzEzMzksNyBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogd2l0aCBtZXNzYWdlOgogICB0aGF0J3Mgbm90IGZseWluZyAtIHRoYXQncyBmYWlsaW5nIGluIHN0eWxlCiAKQEAgLTUzOCwzOCArMTM3NSwzMiBAQAogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCAxMDQuMCAhPSBBcHByb3goMTAwLjApICkKIHdpdGggZXhwYW5zaW9uOgogICAxMDQuMCAhPSBBcHByb3goIDEwMC4wICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDEwNC4wID09IEFwcHJveCgxMDAuMCkubWFyZ2luKDUpICkKIHdpdGggZXhwYW5zaW9uOgogICAxMDQuMCA9PSBBcHByb3goIDEwMC4wICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDEwNC4wID09IEFwcHJveCgxMDAuMCkubWFyZ2luKDQpICkKIHdpdGggZXhwYW5zaW9uOgogICAxMDQuMCA9PSBBcHByb3goIDEwMC4wICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDEwNC4wICE9IEFwcHJveCgxMDAuMCkubWFyZ2luKDMpICkKIHdpdGggZXhwYW5zaW9uOgogICAxMDQuMCAhPSBBcHByb3goIDEwMC4wICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDEwMC4zICE9IEFwcHJveCgxMDAuMCkgKQogd2l0aCBleHBhbnNpb246CiAgIDEwMC4zICE9IEFwcHJveCggMTAwLjAgKQogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggMTAwLjMgPT0gQXBwcm94KDEwMC4wKS5tYXJnaW4oMC41KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMTAwLjMgPT0gQXBwcm94KCAxMDAuMCApCkBAIC01ODksMTQgKzE0MjAsMTIgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaSsrID09IDcgKQogd2l0aCBleHBhbnNpb246CiAgIDcgPT0gNwogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaSsrID09IDggKQogd2l0aCBleHBhbnNpb246CiAgIDggPT0gOApAQCAtNjA3LDggKzE0MzYsNyBAQAogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0V4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggMSA9PSAxICkKIAogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBGQUlMRUQ6CkBAIC02MjIsOCArMTQ1MCw3IEBACiBWYXJpYWRpY01hY3Jvcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1WYXJpYWRpY01hY3Jvcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1ZhcmlhZGljTWFjcm9zLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiB3aXRoIG1lc3NhZ2U6CiAgIGFub255bW91cyB0ZXN0IGNhc2UKIApAQCAtNjMzLDMyICsxNDYwLDI1IEBACiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfTk9USFJPVyggQXBwcm94KDApLm1hcmdpbigwKSApCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX05PVEhST1coIEFwcHJveCgwKS5tYXJnaW4oMTIzNDY1NikgKQogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USFJPV1NfQVMoIEFwcHJveCgwKS5tYXJnaW4oLTIpLCBzdGQ6OmRvbWFpbl9lcnJvciApCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX05PVEhST1coIEFwcHJveCgwKS5lcHNpbG9uKDApICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfTk9USFJPVyggQXBwcm94KDApLmVwc2lsb24oMSkgKQogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USFJPV1NfQVMoIEFwcHJveCgwKS5lcHNpbG9uKC0wLjAwMSksIHN0ZDo6ZG9tYWluX2Vycm9yICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhST1dTX0FTKCBBcHByb3goMCkuZXBzaWxvbigxLjAwMDEpLCBzdGQ6OmRvbWFpbl9lcnJvciApCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTY2NywzMiArMTQ4NywyNyBAQAogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggMC4yNWYgPT0gQXBwcm94KDAuMGYpLm1hcmdpbigwLjI1ZikgKQogd2l0aCBleHBhbnNpb246CiAgIDAuMjVmID09IEFwcHJveCggMC4wICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCAwLjBmID09IEFwcHJveCgwLjI1ZikubWFyZ2luKDAuMjVmKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMC4wZiA9PSBBcHByb3goIDAuMjUgKQogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIDAuNWYgPT0gQXBwcm94KDAuMjVmKS5tYXJnaW4oMC4yNWYpICkKIHdpdGggZXhwYW5zaW9uOgogICAwLjVmID09IEFwcHJveCggMC4yNSApCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggMjQ1LjBmID09IEFwcHJveCgyNDUuMjVmKS5tYXJnaW4oMC4yNWYpICkKIHdpdGggZXhwYW5zaW9uOgogICAyNDUuMGYgPT0gQXBwcm94KCAyNDUuMjUgKQogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIDI0NS41ZiA9PSBBcHByb3goMjQ1LjI1ZikubWFyZ2luKDAuMjVmKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMjQ1LjVmID09IEFwcHJveCggMjQ1LjI1ICkKQEAgLTcwMywxNCArMTUxOCwxMiBAQAogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkaXZpZGUoIDIyLCA3ICkgPT0gQXBwcm94KCAzLjE0MSApLmVwc2lsb24oIDAuMDAxICkgKQogd2l0aCBleHBhbnNpb246CiAgIDMuMTQyODU3MTQyOSA9PSBBcHByb3goIDMuMTQxICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGRpdmlkZSggMjIsIDcgKSAhPSBBcHByb3goIDMuMTQxICkuZXBzaWxvbiggMC4wMDAxICkgKQogd2l0aCBleHBhbnNpb246CiAgIDMuMTQyODU3MTQyOSAhPSBBcHByb3goIDMuMTQxICkKQEAgLTcyMSwxNCArMTUzNCwxMiBAQAogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkICE9IEFwcHJveCggMS4yMzEgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMS4yMyAhPSBBcHByb3goIDEuMjMxICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGQgPT0gQXBwcm94KCAxLjIzMSApLmVwc2lsb24oIDAuMSApICkKIHdpdGggZXhwYW5zaW9uOgogICAxLjIzID09IEFwcHJveCggMS4yMzEgKQpAQCAtNzM5LDE0ICsxNTUwLDEyIEBACiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDEuMjNmID09IEFwcHJveCggMS4yM2YgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMS4yM2YgPT0gQXBwcm94KCAxLjIzMDAwMDAxOTEgKQogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggMC4wZiA9PSBBcHByb3goIDAuMGYgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMC4wZiA9PSBBcHByb3goIDAuMCApCkBAIC03NTcsMTQgKzE1NjYsMTIgQEAKIEFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggMSA9PSBBcHByb3goIDEgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMSA9PSBBcHByb3goIDEuMCApCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCAwID09IEFwcHJveCggMCApICkKIHdpdGggZXhwYW5zaW9uOgogICAwID09IEFwcHJveCggMC4wICkKQEAgLTc3NSw0NCArMTU4Miw3MiBAQAogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCAxLjBmID09IEFwcHJveCggMSApICkKIHdpdGggZXhwYW5zaW9uOgogICAxLjBmID09IEFwcHJveCggMS4wICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDAgPT0gQXBwcm94KCBkWmVybykgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gQXBwcm94KCAwLjAgKQogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggMCA9PSBBcHByb3goIGRTbWFsbCApLm1hcmdpbiggMC4wMDEgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMCA9PSBBcHByb3goIDAuMDAwMDEgKQogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggMS4yMzRmID09IEFwcHJveCggZE1lZGl1bSApICkKIHdpdGggZXhwYW5zaW9uOgogICAxLjIzNGYgPT0gQXBwcm94KCAxLjIzNCApCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkTWVkaXVtID09IEFwcHJveCggMS4yMzRmICkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMjM0ID09IEFwcHJveCggMS4yMzM5OTk5Njc2ICkKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQXJiaXRyYXJ5IHByZWRpY2F0ZSBtYXRjaGVyCisgIEZ1bmN0aW9uIHBvaW50ZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfVEhBVCggMSwgUHJlZGljYXRlPGludD4oYWx3YXlzVHJ1ZSwgImFsd2F5cyB0cnVlIikgKQord2l0aCBleHBhbnNpb246CisgIDEgbWF0Y2hlcyBwcmVkaWNhdGU6ICJhbHdheXMgdHJ1ZSIKKworTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9USEFUKCAxLCAhUHJlZGljYXRlPGludD4oYWx3YXlzRmFsc2UsICJhbHdheXMgZmFsc2UiKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSBub3QgbWF0Y2hlcyBwcmVkaWNhdGU6ICJhbHdheXMgZmFsc2UiCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FyYml0cmFyeSBwcmVkaWNhdGUgbWF0Y2hlcgorICBMYW1iZGFzICsgZGlmZmVyZW50IHR5cGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfVEhBVCggIkhlbGxvIG9sbGVIIiwgUHJlZGljYXRlPHN0ZDo6c3RyaW5nPiggW10gKHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIpIC0+IGJvb2wgeyByZXR1cm4gc3RyLmZyb250KCkgPT0gc3RyLmJhY2soKTsgfSwgIkZpcnN0IGFuZCBsYXN0IGNoYXJhY3RlciBzaG91bGQgYmUgZXF1YWwiKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgIkhlbGxvIG9sbGVIIiBtYXRjaGVzIHByZWRpY2F0ZTogIkZpcnN0IGFuZCBsYXN0IGNoYXJhY3RlciBzaG91bGQgYmUgZXF1YWwiCisKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfVEhBVCggIlRoaXMgd291bGRuJ3QgcGFzcyIsICFQcmVkaWNhdGU8c3RkOjpzdHJpbmc+KCBbXSAoc3RkOjpzdHJpbmcgY29uc3QmIHN0cikgLT4gYm9vbCB7IHJldHVybiBzdHIuZnJvbnQoKSA9PSBzdHIuYmFjaygpOyB9ICkgKQord2l0aCBleHBhbnNpb246CisgICJUaGlzIHdvdWxkbid0IHBhc3MiIG5vdCBtYXRjaGVzIHVuZGVzY3JpYmVkIHByZWRpY2F0ZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBc3NlcnRpb25zIHRoZW4gc2VjdGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdHJ1ZSApCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTgyMiw4ICsxNjU3LDcgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdHJ1ZSApCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTgzNCw4ICsxNjY4LDcgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdHJ1ZSApCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg0NCw4ICsxNjc3LDcgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdHJ1ZSApCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg1NSw4ICsxNjg3LDcgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdHJ1ZSApCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg2Nyw4ICsxNjk4LDcgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdHJ1ZSApCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTg3NywyMCArMTcwNywxNyBAQAogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBJTkZJTklUWSA9PSBBcHByb3goSU5GSU5JVFkpICkKIHdpdGggZXhwYW5zaW9uOgogICBpbmZmID09IEFwcHJveCggaW5mICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIE5BTiAhPSBBcHByb3goTkFOKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgbmFuZiAhPSBBcHByb3goIG5hbiApCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX0ZBTFNFKCBOQU4gPT0gQXBwcm94KE5BTikgKQogd2l0aCBleHBhbnNpb246CiAgICEobmFuZiA9PSBBcHByb3goIG5hbiApKQpAQCAtOTAxLDI3ICsxNzI4LDU2IEBACiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHkudiA9PSAwICkKIHdpdGggZXhwYW5zaW9uOgogICAwID09IDAKIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDAgPT0geS52ICkKIHdpdGggZXhwYW5zaW9uOgogICAwID09IDAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ0FQVFVSRSBjYW4gZGVhbCB3aXRoIGNvbXBsZXggZXhwcmVzc2lvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgord2l0aCBtZXNzYWdlczoKKyAgYSA6PSAxCisgIGIgOj0gMgorICBjIDo9IDMKKyAgYSArIGIgOj0gMworICBhK2IgOj0gMworICBjID4gYiA6PSB0cnVlCisgIGEgPT0gMSA6PSB0cnVlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NBUFRVUkUgY2FuIGRlYWwgd2l0aCBjb21wbGV4IGV4cHJlc3Npb25zIGludm9sdmluZyBjb21tYXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgord2l0aCBtZXNzYWdlczoKKyAgc3RkOjp2ZWN0b3I8aW50PnsxLCAyLCAzfVswLCAxLCAyXSA6PSAzCisgIHN0ZDo6dmVjdG9yPGludD57MSwgMiwgM31bKDAsIDEpXSA6PSAyCisgIHN0ZDo6dmVjdG9yPGludD57MSwgMiwgM31bMF0gOj0gMQorICAoaGVscGVyXzE0MzY8aW50LCBpbnQ+ezEyLCAtMTJ9KSA6PSB7IDEyLCAtMTIgfQorICAoaGVscGVyXzE0MzY8aW50LCBpbnQ+KC0xMiwgMTIpKSA6PSB7IC0xMiwgMTIgfQorICAoMSwgMikgOj0gMgorICAoMiwgMykgOj0gMworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDYXB0dXJlIGFuZCBpbmZvIG1lc3NhZ2VzCiAgIENhcHR1cmUgc2hvdWxkIHN0cmluZ2lmeSBsaWtlIGFzc2VydGlvbnMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdHJ1ZSApCiB3aXRoIG1lc3NhZ2U6CiAgIGkgOj0gMgpAQCAtOTMzLDggKzE3ODksNyBAQAogVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0cnVlICkKIHdpdGggbWVzc2FnZToKICAgMwpAQCAtOTQ2LDI2ICsxODAxLDIyIEBACiBUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCB0YWIgPT0gJ1x0JyApCiB3aXRoIGV4cGFuc2lvbjoKICAgJ1x0JyA9PSAnXHQnCiAKLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggbmV3bGluZSA9PSAnXG4nICkKIHdpdGggZXhwYW5zaW9uOgogICAnXG4nID09ICdcbicKIAotVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBjYXJyX3JldHVybiA9PSAnXHInICkKIHdpdGggZXhwYW5zaW9uOgogICAnXHInID09ICdccicKIAotVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBmb3JtX2ZlZWQgPT0gJ1xmJyApCiB3aXRoIGV4cGFuc2lvbjoKICAgJ1xmJyA9PSAnXGYnCkBAIC05NzcsMzIgKzE4MjgsMjcgQEAKIFRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwYWNlID09ICcgJyApCiB3aXRoIGV4cGFuc2lvbjoKICAgJyAnID09ICcgJwogCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggYyA9PSBjaGFyc1tpXSApCiB3aXRoIGV4cGFuc2lvbjoKICAgJ2EnID09ICdhJwogCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggYyA9PSBjaGFyc1tpXSApCiB3aXRoIGV4cGFuc2lvbjoKICAgJ3onID09ICd6JwogCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggYyA9PSBjaGFyc1tpXSApCiB3aXRoIGV4cGFuc2lvbjoKICAgJ0EnID09ICdBJwogCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggYyA9PSBjaGFyc1tpXSApCiB3aXRoIGV4cGFuc2lvbjoKICAgJ1onID09ICdaJwpAQCAtMTAxNCwzMiArMTg2MCwyNyBAQAogVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggbnVsbF90ZXJtaW5hdG9yID09ICdcMCcgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMAogCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggYyA9PSBpICkKIHdpdGggZXhwYW5zaW9uOgogICAyID09IDIKIAotVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGMgPT0gaSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMyA9PSAzCiAKLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBjID09IGkgKQogd2l0aCBleHBhbnNpb246CiAgIDQgPT0gNAogCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggYyA9PSBpICkKIHdpdGggZXhwYW5zaW9uOgogICA1ID09IDUKQEAgLTEwNTAsNjQgKzE4OTEsNTIgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USFJPV1MoIHN0ZDo6dmVjdG9yPGNvbnN0cnVjdG9yX3Rocm93cz57Y29uc3RydWN0b3JfdGhyb3dze30sIGNvbnN0cnVjdG9yX3Rocm93c3t9fSApCiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USFJPV1MoIHN0ZDo6dmVjdG9yPGNvbnN0cnVjdG9yX3Rocm93cz57Y29uc3RydWN0b3JfdGhyb3dze30sIGNvbnN0cnVjdG9yX3Rocm93c3t9fSApCiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX05PVEhST1coIHN0ZDo6dmVjdG9yPGludD57MSwgMiwgM30gPT0gc3RkOjp2ZWN0b3I8aW50PnsxLCAyLCAzfSApCiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19OT1RIUk9XKCBzdGQ6OnZlY3RvcjxpbnQ+ezEsIDIsIDN9ID09IHN0ZDo6dmVjdG9yPGludD57MSwgMiwgM30gKQogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggc3RkOjp2ZWN0b3I8aW50PnsxLCAyfSA9PSBzdGQ6OnZlY3RvcjxpbnQ+ezEsIDJ9ICkKIHdpdGggZXhwYW5zaW9uOgogICB7IDEsIDIgfSA9PSB7IDEsIDIgfQogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHN0ZDo6dmVjdG9yPGludD57MSwgMn0gPT0gc3RkOjp2ZWN0b3I8aW50PnsxLCAyfSApCiB3aXRoIGV4cGFuc2lvbjoKICAgeyAxLCAyIH0gPT0geyAxLCAyIH0KIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfRkFMU0UoIHN0ZDo6dmVjdG9yPGludD57MSwgMn0gPT0gc3RkOjp2ZWN0b3I8aW50PnsxLCAyLCAzfSApCiB3aXRoIGV4cGFuc2lvbjoKICAgISh7IDEsIDIgfSA9PSB7IDEsIDIsIDMgfSkKIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX0ZBTFNFKCBzdGQ6OnZlY3RvcjxpbnQ+ezEsIDJ9ID09IHN0ZDo6dmVjdG9yPGludD57MSwgMiwgM30gKQogd2l0aCBleHBhbnNpb246CiAgICEoeyAxLCAyIH0gPT0geyAxLCAyLCAzIH0pCiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19OT0ZBSUwoIHN0ZDo6dmVjdG9yPGludD57MSwgMn0gPT0gc3RkOjp2ZWN0b3I8aW50PnsxLCAyfSApCiB3aXRoIGV4cGFuc2lvbjoKICAgeyAxLCAyIH0gPT0geyAxLCAyIH0KIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLRURfSUYoIHN0ZDo6dmVjdG9yPGludD57MSwgMn0gPT0gc3RkOjp2ZWN0b3I8aW50PnsxLCAyfSApCiB3aXRoIGV4cGFuc2lvbjoKICAgeyAxLCAyIH0gPT0geyAxLCAyIH0KIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRydWUgKQogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0tFRF9FTFNFKCBzdGQ6OnZlY3RvcjxpbnQ+ezEsIDJ9ID09IHN0ZDo6dmVjdG9yPGludD57MSwgMn0gKQogd2l0aCBleHBhbnNpb246CiAgIHsgMSwgMiB9ID09IHsgMSwgMiB9CkBAIC0xMTE4LDE0ICsxOTQ3LDEyIEBACiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGEgKQogd2l0aCBleHBhbnNpb246CiAgIDB4PGhleCBkaWdpdHM+CiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBhID09ICZmb28gKQogd2l0aCBleHBhbnNpb246CiAgIDB4PGhleCBkaWdpdHM+ID09IDB4PGhleCBkaWdpdHM+CkBAIC0xMTM2LDc0ICsxOTYzLDYyIEBACiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRkID09IEFwcHJveCgxMC4wKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgU3Ryb25nRG91YmxlVHlwZWRlZigxMCkgPT0gQXBwcm94KCAxMC4wICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIEFwcHJveCgxMC4wKSA9PSB0ZCApCiB3aXRoIGV4cGFuc2lvbjoKICAgQXBwcm94KCAxMC4wICkgPT0gU3Ryb25nRG91YmxlVHlwZWRlZigxMCkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRkICE9IEFwcHJveCgxMS4wKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgU3Ryb25nRG91YmxlVHlwZWRlZigxMCkgIT0gQXBwcm94KCAxMS4wICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIEFwcHJveCgxMS4wKSAhPSB0ZCApCiB3aXRoIGV4cGFuc2lvbjoKICAgQXBwcm94KCAxMS4wICkgIT0gU3Ryb25nRG91YmxlVHlwZWRlZigxMCkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRkIDw9IEFwcHJveCgxMC4wKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgU3Ryb25nRG91YmxlVHlwZWRlZigxMCkgPD0gQXBwcm94KCAxMC4wICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRkIDw9IEFwcHJveCgxMS4wKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgU3Ryb25nRG91YmxlVHlwZWRlZigxMCkgPD0gQXBwcm94KCAxMS4wICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIEFwcHJveCgxMC4wKSA8PSB0ZCApCiB3aXRoIGV4cGFuc2lvbjoKICAgQXBwcm94KCAxMC4wICkgPD0gU3Ryb25nRG91YmxlVHlwZWRlZigxMCkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIEFwcHJveCg5LjApIDw9IHRkICkKIHdpdGggZXhwYW5zaW9uOgogICBBcHByb3goIDkuMCApIDw9IFN0cm9uZ0RvdWJsZVR5cGVkZWYoMTApCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZCA+PSBBcHByb3goOS4wKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgU3Ryb25nRG91YmxlVHlwZWRlZigxMCkgPj0gQXBwcm94KCA5LjAgKQogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdGQgPj0gQXBwcm94KHRkKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgU3Ryb25nRG91YmxlVHlwZWRlZigxMCkgPj0gQXBwcm94KCAxMC4wICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIEFwcHJveCh0ZCkgPj0gdGQgKQogd2l0aCBleHBhbnNpb246CiAgIEFwcHJveCggMTAuMCApID49IFN0cm9uZ0RvdWJsZVR5cGVkZWYoMTApCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBBcHByb3goMTEuMCkgPj0gdGQgKQogd2l0aCBleHBhbnNpb246CiAgIEFwcHJveCggMTEuMCApID49IFN0cm9uZ0RvdWJsZVR5cGVkZWYoMTApCkBAIC0xMjE0LDggKzIwMjksNyBAQAogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggNTQgPT0gNio5ICkKIHdpdGggZXhwYW5zaW9uOgogICA1NCA9PSA1NApAQCAtMTIyNywzOCArMjA0MSwzMiBAQAogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggKCAtMSA+IDJ1ICkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCAtMSA+IDJ1ICkKIHdpdGggZXhwYW5zaW9uOgogICAtMSA+IDIKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCAoIDJ1IDwgLTEgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIDJ1IDwgLTEgKQogd2l0aCBleHBhbnNpb246CiAgIDIgPCAtMQogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soICggbWluSW50ID4gMnUgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIG1pbkludCA+IDJ1ICkKIHdpdGggZXhwYW5zaW9uOgogICAtMjE0NzQ4MzY0OCA+IDIKQEAgLTEyNjksODAgKzIwNzcsNjcgQEAKIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaSA9PSAxICkKIHdpdGggZXhwYW5zaW9uOgogICAxID09IDEKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHVpID09IDIgKQogd2l0aCBleHBhbnNpb246CiAgIDIgPT0gMgogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggbCA9PSAzICkKIHdpdGggZXhwYW5zaW9uOgogICAzID09IDMKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHVsID09IDQgKQogd2l0aCBleHBhbnNpb246CiAgIDQgPT0gNAogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggYyA9PSA1ICkKIHdpdGggZXhwYW5zaW9uOgogICA1ID09IDUKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHVjID09IDYgKQogd2l0aCBleHBhbnNpb246CiAgIDYgPT0gNgogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggMSA9PSBpICkKIHdpdGggZXhwYW5zaW9uOgogICAxID09IDEKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDIgPT0gdWkgKQogd2l0aCBleHBhbnNpb246CiAgIDIgPT0gMgogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggMyA9PSBsICkKIHdpdGggZXhwYW5zaW9uOgogICAzID09IDMKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDQgPT0gdWwgKQogd2l0aCBleHBhbnNpb246CiAgIDQgPT0gNAogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggNSA9PSBjICkKIHdpdGggZXhwYW5zaW9uOgogICA1ID09IDUKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDYgPT0gdWMgKQogd2l0aCBleHBhbnNpb246CiAgIDYgPT0gNgogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggKHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgpKCkgPiB1bCApCiB3aXRoIGV4cGFuc2lvbjoKICAgNDI5NDk2NzI5NSAoMHg8aGV4IGRpZ2l0cz4pID4gNApAQCAtMTQwMiwxNCArMjE5NywxMiBAQAogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCAxMDEuMDAwMDAxICE9IEFwcHJveCgxMDApLmVwc2lsb24oMC4wMSkgKQogd2l0aCBleHBhbnNpb246CiAgIDEwMS4wMDAwMDEgIT0gQXBwcm94KCAxMDAuMCApCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzdGQ6OnBvdygxMCwgLTUpICE9IEFwcHJveChzdGQ6OnBvdygxMCwgLTcpKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMC4wMDAwMSAhPSBBcHByb3goIDAuMDAwMDAwMSApCkBAIC0xNDM3LDggKzIyMzAsNyBAQAogQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCAxMDEuMDEgIT0gQXBwcm94KDEwMCkuZXBzaWxvbigwLjAxKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMTAxLjAxICE9IEFwcHJveCggMTAwLjAgKQpAQCAtMTUyMCw0NCArMjMxMiwzNyBAQAogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkYXRhLmludF9zZXZlbiA9PSA3ICkKIHdpdGggZXhwYW5zaW9uOgogICA3ID09IDcKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGRhdGEuZmxvYXRfbmluZV9wb2ludF9vbmUgPT0gQXBwcm94KCA5LjFmICkgKQogd2l0aCBleHBhbnNpb246CiAgIDkuMWYgPT0gQXBwcm94KCA5LjEwMDAwMDM4MTUgKQogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZGF0YS5kb3VibGVfcGkgPT0gQXBwcm94KCAzLjE0MTU5MjY1MzUgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMy4xNDE1OTI2NTM1ID09IEFwcHJveCggMy4xNDE1OTI2NTM1ICkKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGRhdGEuc3RyX2hlbGxvID09ICJoZWxsbyIgKQogd2l0aCBleHBhbnNpb246CiAgICJoZWxsbyIgPT0gImhlbGxvIgogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggImhlbGxvIiA9PSBkYXRhLnN0cl9oZWxsbyApCiB3aXRoIGV4cGFuc2lvbjoKICAgImhlbGxvIiA9PSAiaGVsbG8iCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkYXRhLnN0cl9oZWxsby5zaXplKCkgPT0gNSApCiB3aXRoIGV4cGFuc2lvbjoKICAgNSA9PSA1CiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB4ID09IEFwcHJveCggMS4zICkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMyA9PSBBcHByb3goIDEuMyApCkBAIC0xNTY4LDE1ICsyMzUzLDEzIEBACiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBFcXVhbHMoInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIikgKQogd2l0aCBleHBhbnNpb246CiAgICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgZXF1YWxzOiAidGhpcyBzdHJpbmcgY29udGFpbnMKICAgJ2FiYycgYXMgYSBzdWJzdHJpbmciCiAKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0tfVEhBVCggdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIEVxdWFscygidGhpcyBzdHJpbmcgY29udGFpbnMgJ0FCQycgYXMgYSBzdWJzdHJpbmciLCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8pICkKIHdpdGggZXhwYW5zaW9uOgogICAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIGVxdWFsczogInRoaXMgc3RyaW5nIGNvbnRhaW5zCkBAIC0xNjAxLDYgKzIzODQsMzEgQEAKICAgaW5zZW5zaXRpdmUpCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0V4Y2VwdGlvbiBhcyBhIHZhbHVlIChlLmcuIGluIFJFUVVJUkVfVEhST1dTX01BVENIRVMpIGNhbiBiZSBzdHJpbmdpZmllZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShXaGF0RXhjZXB0aW9ue30pID09ICJUaGlzIGV4Y2VwdGlvbiBoYXMgb3ZlcnJpZGVuIHdoYXQoKSBtZXRob2QiICkKK3dpdGggZXhwYW5zaW9uOgorICAiVGhpcyBleGNlcHRpb24gaGFzIG92ZXJyaWRlbiB3aGF0KCkgbWV0aG9kIgorICA9PQorICAiVGhpcyBleGNlcHRpb24gaGFzIG92ZXJyaWRlbiB3aGF0KCkgbWV0aG9kIgorCitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoT3BlcmF0b3JFeGNlcHRpb257fSkgPT0gIk9wZXJhdG9yRXhjZXB0aW9uIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIk9wZXJhdG9yRXhjZXB0aW9uIiA9PSAiT3BlcmF0b3JFeGNlcHRpb24iCisKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShTdHJpbmdNYWtlckV4Y2VwdGlvbnt9KSA9PSAiU3RyaW5nTWFrZXJFeGNlcHRpb24iICkKK3dpdGggZXhwYW5zaW9uOgorICAiU3RyaW5nTWFrZXJFeGNlcHRpb24iCisgID09CisgICJTdHJpbmdNYWtlckV4Y2VwdGlvbiIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRXhjZXB0aW9uIG1hdGNoZXJzIHRoYXQgZmFpbAogICBObyBleGNlcHRpb24KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE2NDIsMTIgKzI0NTAsMTIgQEAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBGQUlMRUQ6CiAgIENIRUNLX1RIUk9XU19NQVRDSEVTKCB0aHJvd3MoMyksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0gKQogd2l0aCBleHBhbnNpb246Ci0gIHs/fSBzcGVjaWFsIGV4Y2VwdGlvbiBoYXMgdmFsdWUgb2YgMQorICBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxCiAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBGQUlMRUQ6CiAgIFJFUVVJUkVfVEhST1dTX01BVENIRVMoIHRocm93cyg0KSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgez99IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxCisgIFNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRXhjZXB0aW9uIG1hdGNoZXJzIHRoYXQgc3VjY2VlZApAQCAtMTY1NSwxNyArMjQ2MywxNSBAQAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USFJPV1NfTUFUQ0hFUyggdGhyb3dzKDEpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9ICkKIHdpdGggZXhwYW5zaW9uOgotICB7P30gc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKKyAgU3BlY2lhbEV4Y2VwdGlvbjo6d2hhdCBzcGVjaWFsIGV4Y2VwdGlvbiBoYXMgdmFsdWUgb2YgMQogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhST1dTX01BVENIRVMoIHRocm93cygyKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsyfSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgez99IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAyCisgIFNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDIKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRXhjZXB0aW9uIG1lc3NhZ2VzIGNhbiBiZSB0ZXN0ZWQgZm9yCkBAIC0xNjc0LDggKzI0ODAsNyBAQAogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0V4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIUk9XU19XSVRIKCB0aGlzVGhyb3dzKCksICJleHBlY3RlZCBleGNlcHRpb24iICkKIHdpdGggZXhwYW5zaW9uOgogICAiZXhwZWN0ZWQgZXhjZXB0aW9uIiBlcXVhbHM6ICJleHBlY3RlZCBleGNlcHRpb24iCkBAIC0xNjg3LDggKzI0OTIsNyBAQAogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0V4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIUk9XU19XSVRIKCB0aGlzVGhyb3dzKCksIEVxdWFscyggImV4cGVjdGVEIEV4Y2VwdGlvbiIsIENhdGNoOjpDYXNlU2Vuc2l0aXZlOjpObyApICkKIHdpdGggZXhwYW5zaW9uOgogICAiZXhwZWN0ZWQgZXhjZXB0aW9uIiBlcXVhbHM6ICJleHBlY3RlZCBleGNlcHRpb24iIChjYXNlIGluc2Vuc2l0aXZlKQpAQCAtMTcwMCwyNiArMjUwNCwyMiBAQAogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0V4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIUk9XU19XSVRIKCB0aGlzVGhyb3dzKCksIFN0YXJ0c1dpdGgoICJleHBlY3RlZCIgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgImV4cGVjdGVkIGV4Y2VwdGlvbiIgc3RhcnRzIHdpdGg6ICJleHBlY3RlZCIKIAotRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhST1dTX1dJVEgoIHRoaXNUaHJvd3MoKSwgRW5kc1dpdGgoICJleGNlcHRpb24iICkgKQogd2l0aCBleHBhbnNpb246CiAgICJleHBlY3RlZCBleGNlcHRpb24iIGVuZHMgd2l0aDogImV4Y2VwdGlvbiIKIAotRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhST1dTX1dJVEgoIHRoaXNUaHJvd3MoKSwgQ29udGFpbnMoICJleGNlcHQiICkgKQogd2l0aCBleHBhbnNpb246CiAgICJleHBlY3RlZCBleGNlcHRpb24iIGNvbnRhaW5zOiAiZXhjZXB0IgogCi1FeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USFJPV1NfV0lUSCggdGhpc1Rocm93cygpLCBDb250YWlucyggImV4Q2VwdCIsIENhdGNoOjpDYXNlU2Vuc2l0aXZlOjpObyApICkKIHdpdGggZXhwYW5zaW9uOgogICAiZXhwZWN0ZWQgZXhjZXB0aW9uIiBjb250YWluczogImV4Y2VwdCIgKGNhc2UgaW5zZW5zaXRpdmUpCkBAIC0xNzcyLDggKzI1NzIsNyBAQAogZXhwbGljaXRseSB3aXRoIG1lc3NhZ2U6CiAgIFRoaXMgaXMgYSBmYWlsdXJlCiAKLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci13YXJuaW5nOgorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogd2FybmluZzoKICAgVGhpcyBtZXNzYWdlIGFwcGVhcnMgaW4gdGhlIG91dHB1dAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNzgyLDMyICsyNTgxLDI3IEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIEZhY3RvcmlhbCgwKSA9PSAxICkKIHdpdGggZXhwYW5zaW9uOgogICAxID09IDEKIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggRmFjdG9yaWFsKDEpID09IDEgKQogd2l0aCBleHBhbnNpb246CiAgIDEgPT0gMQogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBGYWN0b3JpYWwoMikgPT0gMiApCiB3aXRoIGV4cGFuc2lvbjoKICAgMiA9PSAyCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIEZhY3RvcmlhbCgzKSA9PSA2ICkKIHdpdGggZXhwYW5zaW9uOgogICA2ID09IDYKIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggRmFjdG9yaWFsKDEwKSA9PSAzNjI4ODAwICkKIHdpdGggZXhwYW5zaW9uOgogICAzNjI4ODAwICgweDxoZXggZGlnaXRzPikgPT0gMzYyODgwMCAoMHg8aGV4IGRpZ2l0cz4pCkBAIC0xODE5LDM2ICsyNjEzLDUxIEBACiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMS4sIFdpdGhpbkFicygxLiwgMCkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMCBpcyB3aXRoaW4gMC4wIG9mIDEuMAogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMC4sIFdpdGhpbkFicygxLiwgMSkgKQogd2l0aCBleHBhbnNpb246CiAgIDAuMCBpcyB3aXRoaW4gMS4wIG9mIDEuMAogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMC4sICFXaXRoaW5BYnMoMS4sIDAuOTkpICkKIHdpdGggZXhwYW5zaW9uOgogICAwLjAgbm90IGlzIHdpdGhpbiAwLjk5IG9mIDEuMAogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMC4sICFXaXRoaW5BYnMoMS4sIDAuOTkpICkKIHdpdGggZXhwYW5zaW9uOgogICAwLjAgbm90IGlzIHdpdGhpbiAwLjk5IG9mIDEuMAogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggTkFOLCAhV2l0aGluQWJzKE5BTiwgMCkgKQogd2l0aCBleHBhbnNpb246CiAgIG5hbmYgbm90IGlzIHdpdGhpbiAwLjAgb2YgbmFuCiAKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfVEhBVCggMTEuLCAhV2l0aGluQWJzKDEwLiwgMC41KSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMTEuMCBub3QgaXMgd2l0aGluIDAuNSBvZiAxMC4wCisKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfVEhBVCggMTAuLCAhV2l0aGluQWJzKDExLiwgMC41KSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMTAuMCBub3QgaXMgd2l0aGluIDAuNSBvZiAxMS4wCisKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfVEhBVCggLTEwLiwgV2l0aGluQWJzKC0xMC4sIDAuNSkgKQord2l0aCBleHBhbnNpb246CisgIC0xMC4wIGlzIHdpdGhpbiAwLjUgb2YgLTEwLjAKKworTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9USEFUKCAtMTAuLCBXaXRoaW5BYnMoLTkuNiwgMC41KSApCit3aXRoIGV4cGFuc2lvbjoKKyAgLTEwLjAgaXMgd2l0aGluIDAuNSBvZiAtOS42CisKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBkb3VibGUKICAgVUxQcwpAQCAtMTg1Niw0NCArMjY2NSwzNyBAQAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIQVQoIDEuLCBXaXRoaW5VTFAoMS4sIDApICkKIHdpdGggZXhwYW5zaW9uOgogICAxLjAgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkVfVEhBVCggc3RkOjpuZXh0YWZ0ZXIoMS4sIDIuKSwgV2l0aGluVUxQKDEuLCAxKSApCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFX1RIQVQoIG5leHRhZnRlcigxLiwgMi4pLCBXaXRoaW5VTFAoMS4sIDEpICkKIHdpdGggZXhwYW5zaW9uOgogICAxLjAgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjAKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkVfVEhBVCggc3RkOjpuZXh0YWZ0ZXIoMS4sIDAuKSwgV2l0aGluVUxQKDEuLCAxKSApCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFX1RIQVQoIG5leHRhZnRlcigxLiwgMC4pLCBXaXRoaW5VTFAoMS4sIDEpICkKIHdpdGggZXhwYW5zaW9uOgogICAxLjAgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjAKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkVfVEhBVCggc3RkOjpuZXh0YWZ0ZXIoMS4sIDIuKSwgIVdpdGhpblVMUCgxLiwgMCkgKQorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9USEFUKCBuZXh0YWZ0ZXIoMS4sIDIuKSwgIVdpdGhpblVMUCgxLiwgMCkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMCBub3QgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIQVQoIDEuLCBXaXRoaW5VTFAoMS4sIDApICkKIHdpdGggZXhwYW5zaW9uOgogICAxLjAgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIQVQoIC0wLiwgV2l0aGluVUxQKDAuLCAwKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgLTAuMCBpcyB3aXRoaW4gMCBVTFBzIG9mIDAuMAogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggTkFOLCAhV2l0aGluVUxQKE5BTiwgMTIzKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgbmFuZiBub3QgaXMgd2l0aGluIDEyMyBVTFBzIG9mIG5hbmYKQEAgLTE5MDUsMjAgKzI3MDcsMTcgQEAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USEFUKCAxLiwgV2l0aGluQWJzKDEuLCAwLjUpIHx8IFdpdGhpblVMUCgyLiwgMSkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMCAoIGlzIHdpdGhpbiAwLjUgb2YgMS4wIG9yIGlzIHdpdGhpbiAxIFVMUHMgb2YgMi4wICkKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIQVQoIDEuLCBXaXRoaW5BYnMoMi4sIDAuNSkgfHwgV2l0aGluVUxQKDEuLCAwKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMS4wICggaXMgd2l0aGluIDAuNSBvZiAyLjAgb3IgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjAgKQogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggTkFOLCAhKFdpdGhpbkFicyhOQU4sIDEwMCkgfHwgV2l0aGluVUxQKE5BTiwgMTIzKSkgKQogd2l0aCBleHBhbnNpb246CiAgIG5hbmYgbm90ICggaXMgd2l0aGluIDEwMC4wIG9mIG5hbiBvciBpcyB3aXRoaW4gMTIzIFVMUHMgb2YgbmFuZiApCkBAIC0xOTMwLDIwICsyNzI5LDE2IEBACiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfTk9USFJPVyggV2l0aGluQWJzKDEuLCAwLikgKQogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhST1dTX0FTKCBXaXRoaW5BYnMoMS4sIC0xLiksIHN0ZDo6ZG9tYWluX2Vycm9yICkKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX05PVEhST1coIFdpdGhpblVMUCgxLiwgMCkgKQogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhST1dTX0FTKCBXaXRoaW5VTFAoMS4sIC0xKSwgc3RkOjpkb21haW5fZXJyb3IgKQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xOTUzLDQyICsyNzQ4LDU2IEBACiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMS5mLCBXaXRoaW5BYnMoMS5mLCAwKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMS4wZiBpcyB3aXRoaW4gMC4wIG9mIDEuMAogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMC5mLCBXaXRoaW5BYnMoMS5mLCAxKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMC4wZiBpcyB3aXRoaW4gMS4wIG9mIDEuMAogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMC5mLCAhV2l0aGluQWJzKDEuZiwgMC45OWYpICkKIHdpdGggZXhwYW5zaW9uOgogICAwLjBmIG5vdCBpcyB3aXRoaW4gMC45OTAwMDAwMDk1IG9mIDEuMAogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMC5mLCAhV2l0aGluQWJzKDEuZiwgMC45OWYpICkKIHdpdGggZXhwYW5zaW9uOgogICAwLjBmIG5vdCBpcyB3aXRoaW4gMC45OTAwMDAwMDk1IG9mIDEuMAogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMC5mLCBXaXRoaW5BYnMoLTAuZiwgMCkgKQogd2l0aCBleHBhbnNpb246CiAgIDAuMGYgaXMgd2l0aGluIDAuMCBvZiAtMC4wCiAKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USEFUKCBOQU4sICFXaXRoaW5BYnMoTkFOLCAwKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgbmFuZiBub3QgaXMgd2l0aGluIDAuMCBvZiBuYW4KIAorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9USEFUKCAxMS5mLCAhV2l0aGluQWJzKDEwLmYsIDAuNWYpICkKK3dpdGggZXhwYW5zaW9uOgorICAxMS4wZiBub3QgaXMgd2l0aGluIDAuNSBvZiAxMC4wCisKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfVEhBVCggMTAuZiwgIVdpdGhpbkFicygxMS5mLCAwLjVmKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMTAuMGYgbm90IGlzIHdpdGhpbiAwLjUgb2YgMTEuMAorCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFX1RIQVQoIC0xMC5mLCBXaXRoaW5BYnMoLTEwLmYsIDAuNWYpICkKK3dpdGggZXhwYW5zaW9uOgorICAtMTAuMGYgaXMgd2l0aGluIDAuNSBvZiAtMTAuMAorCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFX1RIQVQoIC0xMC5mLCBXaXRoaW5BYnMoLTkuNmYsIDAuNWYpICkKK3dpdGggZXhwYW5zaW9uOgorICAtMTAuMGYgaXMgd2l0aGluIDAuNSBvZiAtOS42MDAwMDAzODE1CisKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEZsb2F0aW5nIHBvaW50IG1hdGNoZXJzOiBmbG9hdAogICBVTFBzCkBAIC0xOTk2LDQ0ICsyODA1LDM3IEBACiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggMS5mLCBXaXRoaW5VTFAoMS5mLCAwKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMS4wZiBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMGYKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkVfVEhBVCggc3RkOjpuZXh0YWZ0ZXIoMS5mLCAyLmYpLCBXaXRoaW5VTFAoMS5mLCAxKSApCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFX1RIQVQoIG5leHRhZnRlcigxLmYsIDIuZiksIFdpdGhpblVMUCgxLmYsIDEpICkKIHdpdGggZXhwYW5zaW9uOgogICAxLjBmIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wZgogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRV9USEFUKCBzdGQ6Om5leHRhZnRlcigxLmYsIDAuZiksIFdpdGhpblVMUCgxLmYsIDEpICkKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfVEhBVCggbmV4dGFmdGVyKDEuZiwgMC5mKSwgV2l0aGluVUxQKDEuZiwgMSkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMGYgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjBmCiAKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFX1RIQVQoIHN0ZDo6bmV4dGFmdGVyKDEuZiwgMi5mKSwgIVdpdGhpblVMUCgxLmYsIDApICkKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfVEhBVCggbmV4dGFmdGVyKDEuZiwgMi5mKSwgIVdpdGhpblVMUCgxLmYsIDApICkKIHdpdGggZXhwYW5zaW9uOgogICAxLjBmIG5vdCBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMGYKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIQVQoIDEuZiwgV2l0aGluVUxQKDEuZiwgMCkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMGYgaXMgd2l0aGluIDAgVUxQcyBvZiAxLjBmCiAKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USEFUKCAtMC5mLCBXaXRoaW5VTFAoMC5mLCAwKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgLTAuMGYgaXMgd2l0aGluIDAgVUxQcyBvZiAwLjBmCiAKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USEFUKCBOQU4sICFXaXRoaW5VTFAoTkFOLCAxMjMpICkKIHdpdGggZXhwYW5zaW9uOgogICBuYW5mIG5vdCBpcyB3aXRoaW4gMTIzIFVMUHMgb2YgbmFuZgpAQCAtMjA0NSwyMCArMjg0NywxNyBAQAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIQVQoIDEuZiwgV2l0aGluQWJzKDEuZiwgMC41KSB8fCBXaXRoaW5VTFAoMS5mLCAxKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMS4wZiAoIGlzIHdpdGhpbiAwLjUgb2YgMS4wIG9yIGlzIHdpdGhpbiAxIFVMUHMgb2YgMS4wZiApCiAKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USEFUKCAxLmYsIFdpdGhpbkFicygyLmYsIDAuNSkgfHwgV2l0aGluVUxQKDEuZiwgMCkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMGYgKCBpcyB3aXRoaW4gMC41IG9mIDIuMCBvciBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMGYgKQogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggTkFOLCAhKFdpdGhpbkFicyhOQU4sIDEwMCkgfHwgV2l0aGluVUxQKE5BTiwgMTIzKSkgKQogd2l0aCBleHBhbnNpb246CiAgIG5hbmYgbm90ICggaXMgd2l0aGluIDEwMC4wIG9mIG5hbiBvciBpcyB3aXRoaW4gMTIzIFVMUHMgb2YgbmFuZiApCkBAIC0yMDcwLDQ4ICsyODY5LDEzNzMgQEAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9OT1RIUk9XKCBXaXRoaW5BYnMoMS5mLCAwLmYpICkKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIUk9XU19BUyggV2l0aGluQWJzKDEuZiwgLTEuZiksIHN0ZDo6ZG9tYWluX2Vycm9yICkKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX05PVEhST1coIFdpdGhpblVMUCgxLmYsIDApICkKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIUk9XU19BUyggV2l0aGluVUxQKDEuZiwgLTEpLCBzdGQ6OmRvbWFpbl9lcnJvciApCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gYWRhcHRlcnMKKyAgRmlsdGVyaW5nIGJ5IHByZWRpY2F0ZQorICBCYXNpYyB1c2FnZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGkgJSAyID09IDAgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzCisgIEZpbHRlcmluZyBieSBwcmVkaWNhdGUKKyAgQmFzaWMgdXNhZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBpICUgMiA9PSAwICkKK3dpdGggZXhwYW5zaW9uOgorICAwID09IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBGaWx0ZXJpbmcgYnkgcHJlZGljYXRlCisgIEJhc2ljIHVzYWdlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggaSAlIDIgPT0gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMCA9PSAwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gYWRhcHRlcnMKKyAgRmlsdGVyaW5nIGJ5IHByZWRpY2F0ZQorICBUaHJvd3MgaWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIHZhbHVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfVEhST1dTX0FTKCBmaWx0ZXIoW10gKGludCkge3JldHVybiBmYWxzZTsgfSwgdmFsdWUoMSkpLCBDYXRjaDo6R2VuZXJhdG9yRXhjZXB0aW9uICkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBTaG9ydGVuaW5nIGEgcmFuZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBpIDwgNCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSA8IDQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBTaG9ydGVuaW5nIGEgcmFuZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBpIDwgNCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA8IDQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBTaG9ydGVuaW5nIGEgcmFuZ2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBpIDwgNCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA8IDQKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBUcmFuc2Zvcm1pbmcgZWxlbWVudHMKKyAgU2FtZSB0eXBlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggaSAlIDIgPT0gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMCA9PSAwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gYWRhcHRlcnMKKyAgVHJhbnNmb3JtaW5nIGVsZW1lbnRzCisgIFNhbWUgdHlwZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGkgJSAyID09IDAgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzCisgIFRyYW5zZm9ybWluZyBlbGVtZW50cworICBTYW1lIHR5cGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBpICUgMiA9PSAwICkKK3dpdGggZXhwYW5zaW9uOgorICAwID09IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBUcmFuc2Zvcm1pbmcgZWxlbWVudHMKKyAgRGlmZmVyZW50IHR5cGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBpLnNpemUoKSA9PSAxICkKK3dpdGggZXhwYW5zaW9uOgorICAxID09IDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBUcmFuc2Zvcm1pbmcgZWxlbWVudHMKKyAgRGlmZmVyZW50IHR5cGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBpLnNpemUoKSA9PSAxICkKK3dpdGggZXhwYW5zaW9uOgorICAxID09IDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBUcmFuc2Zvcm1pbmcgZWxlbWVudHMKKyAgRGlmZmVyZW50IHR5cGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBpLnNpemUoKSA9PSAxICkKK3dpdGggZXhwYW5zaW9uOgorICAxID09IDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBSZXBlYXRpbmcgYSBnZW5lcmF0b3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBqID4gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSA+IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBSZXBlYXRpbmcgYSBnZW5lcmF0b3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBqID4gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA+IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBSZXBlYXRpbmcgYSBnZW5lcmF0b3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBqID4gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA+IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBSZXBlYXRpbmcgYSBnZW5lcmF0b3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBqID4gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSA+IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBSZXBlYXRpbmcgYSBnZW5lcmF0b3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBqID4gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA+IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBSZXBlYXRpbmcgYSBnZW5lcmF0b3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBqID4gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA+IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBDaHVua2luZyBhIGdlbmVyYXRvciBpbnRvIHNpemVkIHBpZWNlcworICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gc291cmNlIGlzIGRpdmlzaWJsZSBieSBjaHVuayBzaXplCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggY2h1bmsyLnNpemUoKSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAyID09IDIKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBjaHVuazIuZnJvbnQoKSA9PSBjaHVuazIuYmFjaygpICkKK3dpdGggZXhwYW5zaW9uOgorICAxID09IDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBDaHVua2luZyBhIGdlbmVyYXRvciBpbnRvIHNpemVkIHBpZWNlcworICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gc291cmNlIGlzIGRpdmlzaWJsZSBieSBjaHVuayBzaXplCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggY2h1bmsyLnNpemUoKSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAyID09IDIKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBjaHVuazIuZnJvbnQoKSA9PSBjaHVuazIuYmFjaygpICkKK3dpdGggZXhwYW5zaW9uOgorICAyID09IDIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBDaHVua2luZyBhIGdlbmVyYXRvciBpbnRvIHNpemVkIHBpZWNlcworICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gc291cmNlIGlzIGRpdmlzaWJsZSBieSBjaHVuayBzaXplCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggY2h1bmsyLnNpemUoKSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAyID09IDIKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBjaHVuazIuZnJvbnQoKSA9PSBjaHVuazIuYmFjaygpICkKK3dpdGggZXhwYW5zaW9uOgorICAzID09IDMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBhZGFwdGVycworICBDaHVua2luZyBhIGdlbmVyYXRvciBpbnRvIHNpemVkIHBpZWNlcworICBOdW1iZXIgb2YgZWxlbWVudHMgaW4gc291cmNlIGlzIG5vdCBkaXZpc2libGUgYnkgY2h1bmsgc2l6ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGNodW5rMi5zaXplKCkgPT0gMiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA9PSAyCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggY2h1bmsyLmZyb250KCkgPT0gY2h1bmsyLmJhY2soKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSA9PSAxCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggY2h1bmsyLmZyb250KCkgPCAzICkKK3dpdGggZXhwYW5zaW9uOgorICAxIDwgMworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzCisgIENodW5raW5nIGEgZ2VuZXJhdG9yIGludG8gc2l6ZWQgcGllY2VzCisgIE51bWJlciBvZiBlbGVtZW50cyBpbiBzb3VyY2UgaXMgbm90IGRpdmlzaWJsZSBieSBjaHVuayBzaXplCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggY2h1bmsyLnNpemUoKSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAyID09IDIKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBjaHVuazIuZnJvbnQoKSA9PSBjaHVuazIuYmFjaygpICkKK3dpdGggZXhwYW5zaW9uOgorICAyID09IDIKKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBjaHVuazIuZnJvbnQoKSA8IDMgKQord2l0aCBleHBhbnNpb246CisgIDIgPCAzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gYWRhcHRlcnMKKyAgQ2h1bmtpbmcgYSBnZW5lcmF0b3IgaW50byBzaXplZCBwaWVjZXMKKyAgVGhyb3dzIG9uIHRvbyBzbWFsbCBnZW5lcmF0b3JzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9USFJPV1NfQVMoIGNodW5rKDIsIHZhbHVlKDEpKSwgQ2F0Y2g6OkdlbmVyYXRvckV4Y2VwdGlvbiApCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gc2ltcGxlCisgIG9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGogPCBpICkKK3dpdGggZXhwYW5zaW9uOgorICAtMyA8IDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBzaW1wbGUKKyAgb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggaiA8IGkgKQord2l0aCBleHBhbnNpb246CisgIC0yIDwgMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzIC0tIHNpbXBsZQorICBvbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBqIDwgaSApCit3aXRoIGV4cGFuc2lvbjoKKyAgLTEgPCAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gc2ltcGxlCisgIHR3bworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIDR1ICogaSA+IHN0ci5zaXplKCkgKQord2l0aCBleHBhbnNpb246CisgIDQgPiAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gc2ltcGxlCisgIHR3bworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIDR1ICogaSA+IHN0ci5zaXplKCkgKQord2l0aCBleHBhbnNpb246CisgIDQgPiAyCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gc2ltcGxlCisgIHR3bworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIDR1ICogaSA+IHN0ci5zaXplKCkgKQord2l0aCBleHBhbnNpb246CisgIDQgPiAzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gc2ltcGxlCisgIG9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGogPCBpICkKK3dpdGggZXhwYW5zaW9uOgorICAtMyA8IDIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBzaW1wbGUKKyAgb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggaiA8IGkgKQord2l0aCBleHBhbnNpb246CisgIC0yIDwgMgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzIC0tIHNpbXBsZQorICBvbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBqIDwgaSApCit3aXRoIGV4cGFuc2lvbjoKKyAgLTEgPCAyCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gc2ltcGxlCisgIHR3bworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIDR1ICogaSA+IHN0ci5zaXplKCkgKQord2l0aCBleHBhbnNpb246CisgIDggPiAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gc2ltcGxlCisgIHR3bworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIDR1ICogaSA+IHN0ci5zaXplKCkgKQord2l0aCBleHBhbnNpb246CisgIDggPiAyCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gc2ltcGxlCisgIHR3bworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIDR1ICogaSA+IHN0ci5zaXplKCkgKQord2l0aCBleHBhbnNpb246CisgIDggPiAzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gc2ltcGxlCisgIG9uZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGogPCBpICkKK3dpdGggZXhwYW5zaW9uOgorICAtMyA8IDMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBzaW1wbGUKKyAgb25lCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggaiA8IGkgKQord2l0aCBleHBhbnNpb246CisgIC0yIDwgMworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzIC0tIHNpbXBsZQorICBvbmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBqIDwgaSApCit3aXRoIGV4cGFuc2lvbjoKKyAgLTEgPCAzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgLS0gc2ltcGxlCisgIHR3bworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIDR1ICogaSA+IHN0ci5zaXplKCkgKQord2l0aCBleHBhbnNpb246CisgIDEyID4gMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzIC0tIHNpbXBsZQorICB0d28KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCA0dSAqIGkgPiBzdHIuc2l6ZSgpICkKK3dpdGggZXhwYW5zaW9uOgorICAxMiA+IDIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyAtLSBzaW1wbGUKKyAgdHdvCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggNHUgKiBpID4gc3RyLnNpemUoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMTIgPiAzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgaW50ZXJuYWxzCisgIFNpbmdsZSB2YWx1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IDEyMyApCit3aXRoIGV4cGFuc2lvbjoKKyAgMTIzID09IDEyMworCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFX0ZBTFNFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICAhZmFsc2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyBpbnRlcm5hbHMKKyAgUHJlc2V0IHZhbHVlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IDEgKQord2l0aCBleHBhbnNpb246CisgIDEgPT0gMQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAzICkKK3dpdGggZXhwYW5zaW9uOgorICAzID09IDMKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA9PSA1CisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfRkFMU0UoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgICFmYWxzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzIGludGVybmFscworICBHZW5lcmF0b3IgY29tYmluYXRvcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IDEgKQord2l0aCBleHBhbnNpb246CisgIDEgPT0gMQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID09IDUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gMiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA9PSAyCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IDQgKQord2l0aCBleHBhbnNpb246CisgIDQgPT0gNAorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAwICkKK3dpdGggZXhwYW5zaW9uOgorICAwID09IDAKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9GQUxTRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgIWZhbHNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgaW50ZXJuYWxzCisgIEV4cGxpY2l0bHkgdHlwZWQgZ2VuZXJhdG9yIHNlcXVlbmNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkuc2l6ZSgpID09IDIgKQord2l0aCBleHBhbnNpb246CisgIDIgPT0gMgorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gImFhIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgImFhIiA9PSAiYWEiCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09ICJiYiIgKQord2l0aCBleHBhbnNpb246CisgICJiYiIgPT0gImJiIgorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAiY2MiICkKK3dpdGggZXhwYW5zaW9uOgorICAiY2MiID09ICJjYyIKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9GQUxTRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgIWZhbHNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgaW50ZXJuYWxzCisgIEZpbHRlciBnZW5lcmF0b3IKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAxICkKK3dpdGggZXhwYW5zaW9uOgorICAxID09IDEKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gMyApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA9PSAzCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfRkFMU0UoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgICFmYWxzZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFX1RIUk9XU19BUyggZmlsdGVyKFtdIChpbnQpIHsgcmV0dXJuIGZhbHNlOyB9LCB2YWx1ZSgxKSksIENhdGNoOjpHZW5lcmF0b3JFeGNlcHRpb24gKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzIGludGVybmFscworICBUYWtlIGdlbmVyYXRvcgorICBUYWtlIGxlc3MKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAxICkKK3dpdGggZXhwYW5zaW9uOgorICAxID09IDEKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gMiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA9PSAyCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfRkFMU0UoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgICFmYWxzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzIGludGVybmFscworICBUYWtlIGdlbmVyYXRvcgorICBUYWtlIG1vcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAxICkKK3dpdGggZXhwYW5zaW9uOgorICAxID09IDEKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9GQUxTRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgIWZhbHNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgaW50ZXJuYWxzCisgIE1hcAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IDIuMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMi4wID09IDIuMAorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSA0LjAgKQord2l0aCBleHBhbnNpb246CisgIDQuMCA9PSA0LjAKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gNi4wICkKK3dpdGggZXhwYW5zaW9uOgorICA2LjAgPT0gNi4wCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfRkFMU0UoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgICFmYWxzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzIGludGVybmFscworICBSZXBlYXQKKyAgU2luZ3VsYXIgcmVwZWF0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gMyApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA9PSAzCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfRkFMU0UoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgICFmYWxzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzIGludGVybmFscworICBSZXBlYXQKKyAgQWN0dWFsIHJlcGVhdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IDEgKQord2l0aCBleHBhbnNpb246CisgIDEgPT0gMQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAyID09IDIKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gMyApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA9PSAzCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IDEgKQord2l0aCBleHBhbnNpb246CisgIDEgPT0gMQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAyID09IDIKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gMyApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA9PSAzCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfRkFMU0UoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgICFmYWxzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzIGludGVybmFscworICBSYW5nZQorICBQb3NpdGl2ZSBhdXRvIHN0ZXAKKyAgSW50ZWdlcgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IC0yICkKK3dpdGggZXhwYW5zaW9uOgorICAtMiA9PSAtMgorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAtMSApCit3aXRoIGV4cGFuc2lvbjoKKyAgLTEgPT0gLTEKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMCA9PSAwCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IDEgKQord2l0aCBleHBhbnNpb246CisgIDEgPT0gMQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFX0ZBTFNFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICAhZmFsc2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyBpbnRlcm5hbHMKKyAgUmFuZ2UKKyAgTmVnYXRpdmUgYXV0byBzdGVwCisgIEludGVnZXIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAyID09IDIKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gMSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMSA9PSAxCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IDAgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMAorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAtMSApCit3aXRoIGV4cGFuc2lvbjoKKyAgLTEgPT0gLTEKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9GQUxTRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgIWZhbHNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgaW50ZXJuYWxzCisgIFJhbmdlCisgIFBvc2l0aXZlIG1hbnVhbCBzdGVwCisgIEludGVnZXIKKyAgRXhhY3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAtNyApCit3aXRoIGV4cGFuc2lvbjoKKyAgLTcgPT0gLTcKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gLTQgKQord2l0aCBleHBhbnNpb246CisgIC00ID09IC00CisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IC0xICkKK3dpdGggZXhwYW5zaW9uOgorICAtMSA9PSAtMQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAyID09IDIKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9GQUxTRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgIWZhbHNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgaW50ZXJuYWxzCisgIFJhbmdlCisgIFBvc2l0aXZlIG1hbnVhbCBzdGVwCisgIEludGVnZXIKKyAgU2xpZ2h0bHkgb3ZlciBlbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAtNyApCit3aXRoIGV4cGFuc2lvbjoKKyAgLTcgPT0gLTcKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gLTQgKQord2l0aCBleHBhbnNpb246CisgIC00ID09IC00CisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IC0xICkKK3dpdGggZXhwYW5zaW9uOgorICAtMSA9PSAtMQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAyID09IDIKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9GQUxTRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgIWZhbHNlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMgaW50ZXJuYWxzCisgIFJhbmdlCisgIFBvc2l0aXZlIG1hbnVhbCBzdGVwCisgIEludGVnZXIKKyAgU2xpZ2h0bHkgdW5kZXIgZW5kCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gLTcgKQord2l0aCBleHBhbnNpb246CisgIC03ID09IC03CisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IC00ICkKK3dpdGggZXhwYW5zaW9uOgorICAtNCA9PSAtNAorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAtMSApCit3aXRoIGV4cGFuc2lvbjoKKyAgLTEgPT0gLTEKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gMiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA9PSAyCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPT0gNQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFX0ZBTFNFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICAhZmFsc2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyBpbnRlcm5hbHMKKyAgUmFuZ2UKKyAgTmVnYXRpdmUgbWFudWFsIHN0ZXAKKyAgSW50ZWdlcgorICBFeGFjdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPT0gNQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAyID09IDIKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gLTEgKQord2l0aCBleHBhbnNpb246CisgIC0xID09IC0xCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IC00ICkKK3dpdGggZXhwYW5zaW9uOgorICAtNCA9PSAtNAorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFX0ZBTFNFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICAhZmFsc2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyBpbnRlcm5hbHMKKyAgUmFuZ2UKKyAgTmVnYXRpdmUgbWFudWFsIHN0ZXAKKyAgSW50ZWdlcgorICBTbGlnaHRseSBvdmVyIGVuZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPT0gNQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAyICkKK3dpdGggZXhwYW5zaW9uOgorICAyID09IDIKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gLTEgKQord2l0aCBleHBhbnNpb246CisgIC0xID09IC0xCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IC00ICkKK3dpdGggZXhwYW5zaW9uOgorICAtNCA9PSAtNAorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFX0ZBTFNFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICAhZmFsc2UKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycyBpbnRlcm5hbHMKKyAgUmFuZ2UKKyAgTmVnYXRpdmUgbWFudWFsIHN0ZXAKKyAgSW50ZWdlcgorICBTbGlnaHRseSB1bmRlciBlbmQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID09IDUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gMiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA9PSAyCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLmdldCgpID09IC0xICkKK3dpdGggZXhwYW5zaW9uOgorICAtMSA9PSAtMQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4ubmV4dCgpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGdlbi5nZXQoKSA9PSAtNCApCit3aXRoIGV4cGFuc2lvbjoKKyAgLTQgPT0gLTQKKworR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZ2VuLm5leHQoKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCitHZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBnZW4uZ2V0KCkgPT0gLTcgKQord2l0aCBleHBhbnNpb246CisgIC03ID09IC03CisKK0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfRkFMU0UoIGdlbi5uZXh0KCkgKQord2l0aCBleHBhbnNpb246CisgICFmYWxzZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBHcmVhdGVyLXRoYW4gaW5lcXVhbGl0aWVzIHdpdGggZGlmZmVyZW50IGVwc2lsb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGQgPj0gQXBwcm94KCAxLjIyICkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMjMgPj0gQXBwcm94KCAxLjIyICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGQgPj0gQXBwcm94KCAxLjIzICkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMjMgPj0gQXBwcm94KCAxLjIzICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfRkFMU0UoIGQgPj0gQXBwcm94KCAxLjI0ICkgKQogd2l0aCBleHBhbnNpb246CiAgICEoMS4yMyA+PSBBcHByb3goIDEuMjQgKSkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGQgPj0gQXBwcm94KCAxLjI0ICkuZXBzaWxvbigwLjEpICkKIHdpdGggZXhwYW5zaW9uOgogICAxLjIzID49IEFwcHJveCggMS4yNCApCkBAIC0yMTIyLDggKzQyNDYsNyBAQAogTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ogotd2FybmluZzoKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHdhcm5pbmc6CiAgIHRoaXMgaXMgYSBtZXNzYWdlCiAgIHRoaXMgaXMgYSB3YXJuaW5nCiAKQEAgLTIxNTAsOCArNDI3Myw3IEBACiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBhID09IDIgKQogd2l0aCBleHBhbnNpb246CiAgIDIgPT0gMgpAQCAtMjE3NSw4ICs0Mjk3LDcgQEAKICAgdGhpcyBtZXNzYWdlIHNob3VsZCBiZSBsb2dnZWQKICAgYW5kIHRoaXMsIGJ1dCBsYXRlcgogCi1NZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggYSA9PSAyICkKIHdpdGggZXhwYW5zaW9uOgogICAyID09IDIKQEAgLTIxOTIsOCArNDMxMyw3IEBACiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGkgPCAxMCApCiB3aXRoIGV4cGFuc2lvbjoKICAgMCA8IDEwCkBAIC0yMjAxLDggKzQzMjEsNyBAQAogICBjdXJyZW50IGNvdW50ZXIgMAogICBpIDo9IDAKIAotTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaSA8IDEwICkKIHdpdGggZXhwYW5zaW9uOgogICAxIDwgMTAKQEAgLTIyMTAsOCArNDMyOSw3IEBACiAgIGN1cnJlbnQgY291bnRlciAxCiAgIGkgOj0gMQogCi1NZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBpIDwgMTAgKQogd2l0aCBleHBhbnNpb246CiAgIDIgPCAxMApAQCAtMjIxOSw4ICs0MzM3LDcgQEAKICAgY3VycmVudCBjb3VudGVyIDIKICAgaSA6PSAyCiAKLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGkgPCAxMCApCiB3aXRoIGV4cGFuc2lvbjoKICAgMyA8IDEwCkBAIC0yMjI4LDggKzQzNDUsNyBAQAogICBjdXJyZW50IGNvdW50ZXIgMwogICBpIDo9IDMKIAotTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaSA8IDEwICkKIHdpdGggZXhwYW5zaW9uOgogICA0IDwgMTAKQEAgLTIyMzcsOCArNDM1Myw3IEBACiAgIGN1cnJlbnQgY291bnRlciA0CiAgIGkgOj0gNAogCi1NZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBpIDwgMTAgKQogd2l0aCBleHBhbnNpb246CiAgIDUgPCAxMApAQCAtMjI0Niw4ICs0MzYxLDcgQEAKICAgY3VycmVudCBjb3VudGVyIDUKICAgaSA6PSA1CiAKLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGkgPCAxMCApCiB3aXRoIGV4cGFuc2lvbjoKICAgNiA8IDEwCkBAIC0yMjU1LDggKzQzNjksNyBAQAogICBjdXJyZW50IGNvdW50ZXIgNgogICBpIDo9IDYKIAotTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaSA8IDEwICkKIHdpdGggZXhwYW5zaW9uOgogICA3IDwgMTAKQEAgLTIyNjQsOCArNDM3Nyw3IEBACiAgIGN1cnJlbnQgY291bnRlciA3CiAgIGkgOj0gNwogCi1NZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBpIDwgMTAgKQogd2l0aCBleHBhbnNpb246CiAgIDggPCAxMApAQCAtMjI3Myw4ICs0Mzg1LDcgQEAKICAgY3VycmVudCBjb3VudGVyIDgKICAgaSA6PSA4CiAKLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGkgPCAxMCApCiB3aXRoIGV4cGFuc2lvbjoKICAgOSA8IDEwCkBAIC0yMzI3LDY4ICs0NDM4LDU3IEBACiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGRhdGEuaW50X3NldmVuICE9IDYgKQogd2l0aCBleHBhbnNpb246CiAgIDcgIT0gNgogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZGF0YS5pbnRfc2V2ZW4gIT0gOCApCiB3aXRoIGV4cGFuc2lvbjoKICAgNyAhPSA4CiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lICE9IEFwcHJveCggOS4xMWYgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgOS4xZiAhPSBBcHByb3goIDkuMTA5OTk5NjU2NyApCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lICE9IEFwcHJveCggOS4wZiApICkKIHdpdGggZXhwYW5zaW9uOgogICA5LjFmICE9IEFwcHJveCggOS4wICkKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGRhdGEuZmxvYXRfbmluZV9wb2ludF9vbmUgIT0gQXBwcm94KCAxICkgKQogd2l0aCBleHBhbnNpb246CiAgIDkuMWYgIT0gQXBwcm94KCAxLjAgKQogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZGF0YS5mbG9hdF9uaW5lX3BvaW50X29uZSAhPSBBcHByb3goIDAgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgOS4xZiAhPSBBcHByb3goIDAuMCApCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkYXRhLmRvdWJsZV9waSAhPSBBcHByb3goIDMuMTQxNSApICkKIHdpdGggZXhwYW5zaW9uOgogICAzLjE0MTU5MjY1MzUgIT0gQXBwcm94KCAzLjE0MTUgKQogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZGF0YS5zdHJfaGVsbG8gIT0gImdvb2RieWUiICkKIHdpdGggZXhwYW5zaW9uOgogICAiaGVsbG8iICE9ICJnb29kYnllIgogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZGF0YS5zdHJfaGVsbG8gIT0gImhlbGwiICkKIHdpdGggZXhwYW5zaW9uOgogICAiaGVsbG8iICE9ICJoZWxsIgogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZGF0YS5zdHJfaGVsbG8gIT0gImhlbGxvMSIgKQogd2l0aCBleHBhbnNpb246CiAgICJoZWxsbyIgIT0gImhlbGxvMSIKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGRhdGEuc3RyX2hlbGxvLnNpemUoKSAhPSA2ICkKIHdpdGggZXhwYW5zaW9uOgogICA1ICE9IDYKQEAgLTIzOTksMjYgKzQ0OTksMjIgQEAKIEFwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZCA8PSBBcHByb3goIDEuMjQgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMS4yMyA8PSBBcHByb3goIDEuMjQgKQogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZCA8PSBBcHByb3goIDEuMjMgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMS4yMyA8PSBBcHByb3goIDEuMjMgKQogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9GQUxTRSggZCA8PSBBcHByb3goIDEuMjIgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgISgxLjIzIDw9IEFwcHJveCggMS4yMiApKQogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZCA8PSBBcHByb3goIDEuMjIgKS5lcHNpbG9uKDAuMSkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMjMgPD0gQXBwcm94KCAxLjIyICkKQEAgLTI0MjksOCArNDUyNSw3IEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiB3aXRoIG1lc3NhZ2U6CiAgIHdhcyBjYWxsZWQKIApAQCAtMjQ0MCw4ICs0NTM1LDcgQEAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0tfVEhBVCggdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIENvbnRhaW5zKCJzdHJpbmciKSAmJiBDb250YWlucygiYWJjIikgJiYgQ29udGFpbnMoInN1YnN0cmluZyIpICYmIENvbnRhaW5zKCJjb250YWlucyIpICkKIHdpdGggZXhwYW5zaW9uOgogICAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciICggY29udGFpbnM6ICJzdHJpbmciIGFuZApAQCAtMjQ1MywxNSArNDU0NywxMyBAQAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USEFUKCB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgQ29udGFpbnMoInN0cmluZyIpIHx8IENvbnRhaW5zKCJkaWZmZXJlbnQiKSB8fCBDb250YWlucygicmFuZG9tIikgKQogd2l0aCBleHBhbnNpb246CiAgICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgKCBjb250YWluczogInN0cmluZyIgb3IgY29udGFpbnM6CiAgICJkaWZmZXJlbnQiIG9yIGNvbnRhaW5zOiAicmFuZG9tIiApCiAKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0tfVEhBVCggdGVzdFN0cmluZ0Zvck1hdGNoaW5nMigpLCBDb250YWlucygic3RyaW5nIikgfHwgQ29udGFpbnMoImRpZmZlcmVudCIpIHx8IENvbnRhaW5zKCJyYW5kb20iKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgInNvbWUgY29tcGxldGVseSBkaWZmZXJlbnQgdGV4dCB0aGF0IGNvbnRhaW5zIG9uZSBjb21tb24gd29yZCIgKCBjb250YWluczoKQEAgLTI0NzMsOCArNDU2NSw3IEBACiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCAoQ29udGFpbnMoInN0cmluZyIpIHx8IENvbnRhaW5zKCJkaWZmZXJlbnQiKSkgJiYgQ29udGFpbnMoInN1YnN0cmluZyIpICkKIHdpdGggZXhwYW5zaW9uOgogICAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciICggKCBjb250YWluczogInN0cmluZyIgb3IKQEAgLTI0OTgsOCArNDU4OSw3IEBACiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCAhQ29udGFpbnMoImRpZmZlcmVudCIpICkKIHdpdGggZXhwYW5zaW9uOgogICAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIG5vdCBjb250YWluczogImRpZmZlcmVudCIKQEAgLTI1MjEsOCArNDYxMSw3IEBACiBFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhST1dTX1dJVEgoIHRoaXNUaHJvd3MoKSwgImV4cGVjdGVkIGV4Y2VwdGlvbiIgKQogd2l0aCBleHBhbnNpb246CiAgICJleHBlY3RlZCBleGNlcHRpb24iIGVxdWFsczogImV4cGVjdGVkIGV4Y2VwdGlvbiIKQEAgLTI1MzgsOCArNDYyNyw3IEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci13YXJuaW5nOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogd2FybmluZzoKICAgVGhpcyBvbmUgcmFuCiAKIApAQCAtMjU2MSwyNSArNDY0OSwzNiBAQAogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggVHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99CiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggIUZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19GQUxTRSggRmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgICF7P30KIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorT3B0aW9uYWxseSBzdGF0aWMgYXNzZXJ0aW9ucworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKK3dpdGggbWVzc2FnZToKKyAgc3RkOjppc192b2lkPHZvaWQ+Ojp2YWx1ZQorCitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgord2l0aCBtZXNzYWdlOgorICAhKHN0ZDo6aXNfdm9pZDxpbnQ+Ojp2YWx1ZSkKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogT3JkZXJpbmcgY29tcGFyaXNvbiBjaGVja3MgdGhhdCBzaG91bGQgZmFpbAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC0yNjg2LDEwNCArNDc4NSw4NyBAQAogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkYXRhLmludF9zZXZlbiA8IDggKQogd2l0aCBleHBhbnNpb246CiAgIDcgPCA4CiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkYXRhLmludF9zZXZlbiA+IDYgKQogd2l0aCBleHBhbnNpb246CiAgIDcgPiA2CiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkYXRhLmludF9zZXZlbiA+IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDcgPiAwCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkYXRhLmludF9zZXZlbiA+IC0xICkKIHdpdGggZXhwYW5zaW9uOgogICA3ID4gLTEKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGRhdGEuaW50X3NldmVuID49IDcgKQogd2l0aCBleHBhbnNpb246CiAgIDcgPj0gNwogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZGF0YS5pbnRfc2V2ZW4gPj0gNiApCiB3aXRoIGV4cGFuc2lvbjoKICAgNyA+PSA2CiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkYXRhLmludF9zZXZlbiA8PSA3ICkKIHdpdGggZXhwYW5zaW9uOgogICA3IDw9IDcKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGRhdGEuaW50X3NldmVuIDw9IDggKQogd2l0aCBleHBhbnNpb246CiAgIDcgPD0gOAogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZGF0YS5mbG9hdF9uaW5lX3BvaW50X29uZSA+IDkgKQogd2l0aCBleHBhbnNpb246CiAgIDkuMWYgPiA5CiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkYXRhLmZsb2F0X25pbmVfcG9pbnRfb25lIDwgMTAgKQogd2l0aCBleHBhbnNpb246CiAgIDkuMWYgPCAxMAogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZGF0YS5mbG9hdF9uaW5lX3BvaW50X29uZSA8IDkuMiApCiB3aXRoIGV4cGFuc2lvbjoKICAgOS4xZiA8IDkuMgogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZGF0YS5zdHJfaGVsbG8gPD0gImhlbGxvIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgImhlbGxvIiA8PSAiaGVsbG8iCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBkYXRhLnN0cl9oZWxsbyA+PSAiaGVsbG8iICkKIHdpdGggZXhwYW5zaW9uOgogICAiaGVsbG8iID49ICJoZWxsbyIKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGRhdGEuc3RyX2hlbGxvIDwgImhlbGxwIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgImhlbGxvIiA8ICJoZWxscCIKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGRhdGEuc3RyX2hlbGxvIDwgInplYnJhIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgImhlbGxvIiA8ICJ6ZWJyYSIKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGRhdGEuc3RyX2hlbGxvID4gImhlbGxtIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgImhlbGxvIiA+ICJoZWxsbSIKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGRhdGEuc3RyX2hlbGxvID4gImEiICkKIHdpdGggZXhwYW5zaW9uOgogICAiaGVsbG8iID4gImEiCkBAIC0yODE3LDIwICs0ODk5LDE3IEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLmhhc0ZpbHRlcnMoKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNBICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQiApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtMjg0MiwyMCArNDkyMSwxNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXModGNBICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQiApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtMjg2NywyMCArNDk0MywxNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKQEAgLTI4OTIsMjAgKzQ5NjUsMTcgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMuaGFzRmlsdGVycygpID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0EgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNCICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCkBAIC0yOTE3LDIwICs0OTg3LDE3IEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLmhhc0ZpbHRlcnMoKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNBICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQiApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQpAQCAtMjk0MiwyNiArNTAwOSwyMiBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCkBAIC0yOTczLDM4ICs1MDM2LDMyIEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLmhhc0ZpbHRlcnMoKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNBICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQiApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0MgKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNEICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBwYXJzZVRlc3RTcGVjKCAiKmEiICkubWF0Y2hlcyggdGNBICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCkBAIC0zMDE2LDM4ICs1MDczLDMyIEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLmhhc0ZpbHRlcnMoKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNBICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQiApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0MgKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNEICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBwYXJzZVRlc3RTcGVjKCAiYSoiICkubWF0Y2hlcyggdGNBICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCkBAIC0zMDU5LDM4ICs1MTEwLDMyIEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLmhhc0ZpbHRlcnMoKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNBICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQiApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0MgKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNEICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBwYXJzZVRlc3RTcGVjKCAiKmEqIiApLm1hdGNoZXMoIHRjQSApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQpAQCAtMzEwMiwyMCArNTE0NywxNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKQEAgLTMxMjcsMjAgKzUxNjksMTcgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMuaGFzRmlsdGVycygpID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0EgKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNCICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCkBAIC0zMTUyLDIwICs1MTkxLDE3IEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLmhhc0ZpbHRlcnMoKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNBICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQiApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtMzE3NywzMiArNTIxMywyNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjRCApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQpAQCAtMzIxNCwzMiArNTI0NSwyNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjRCApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQpAQCAtMzI1MSwyNiArNTI3NywyMiBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCkBAIC0zMjgyLDI2ICs1MzA0LDIyIEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLmhhc0ZpbHRlcnMoKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNBICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQiApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0MgKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKQEAgLTMzMTMsMjYgKzUzMzEsMjIgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMuaGFzRmlsdGVycygpID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0EgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNCICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQyApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQpAQCAtMzM0NCwyNiArNTM1OCwyMiBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCkBAIC0zMzc1LDMyICs1Mzg1LDI3IEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLmhhc0ZpbHRlcnMoKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNBICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQiApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0MgKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNEICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCkBAIC0zNDEyLDI2ICs1NDE3LDIyIEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLmhhc0ZpbHRlcnMoKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNBICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQiApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0MgKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKQEAgLTM0NDMsMjYgKzU0NDQsMjIgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMuaGFzRmlsdGVycygpID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0EgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNCICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQyApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtMzQ3NCwzMiArNTQ3MSwyNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjRCApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQpAQCAtMzUxMSwzMiArNTUwMywyNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjRCApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQpAQCAtMzU0OCwzMiArNTUzNSwyNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjRCApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQpAQCAtMzU4NSwzMiArNTU2NywyNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjRCApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtMzYyMiwzMiArNTU5OSwyNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjRCApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtMzY1OSwzMiArNTYzMSwyNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjRCApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtMzY5NiwzMiArNTY2MywyNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjRCApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtMzczMywzMiArNTY5NSwyNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjRCApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtMzc3MCwzMiArNTcyNywyNyBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5oYXNGaWx0ZXJzKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQSApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0IgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNDICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjRCApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtMzgwNywxMTcgKzU3NTksMTAxIEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLmhhc0ZpbHRlcnMoKSA9PSB0cnVlICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlID09IHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNBICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzcGVjLm1hdGNoZXMoIHRjQiApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggc3BlYy5tYXRjaGVzKCB0Y0MgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHNwZWMubWF0Y2hlcyggdGNEICkgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBhcnNpbmcgYSBzdGQ6OnBhaXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIChzdGQ6OnBhaXI8aW50LCBpbnQ+KCAxLCAyICkpID09IGFOaWNlUGFpciApCi13aXRoIGV4cGFuc2lvbjoKLSAgez99ID09IHs/fQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBQb2ludGVycyBjYW4gYmUgY29tcGFyZWQgdG8gbnVsbAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBwID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMAogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggcCA9PSBwTlVMTCApCiB3aXRoIGV4cGFuc2lvbjoKICAgMCA9PSAwCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBwICE9IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDB4PGhleCBkaWdpdHM+ICE9IDAKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGNwICE9IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDB4PGhleCBkaWdpdHM+ICE9IDAKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGNwYyAhPSAwICkKIHdpdGggZXhwYW5zaW9uOgogICAweDxoZXggZGlnaXRzPiAhPSAwCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCByZXR1cm5zTnVsbCgpID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIHtudWxsIHN0cmluZ30gPT0gMAogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggcmV0dXJuc0NvbnN0TnVsbCgpID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIHtudWxsIHN0cmluZ30gPT0gMAogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggMCAhPSBwICkKIHdpdGggZXhwYW5zaW9uOgogICAwICE9IDB4PGhleCBkaWdpdHM+CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1ByZWRpY2F0ZSBtYXRjaGVyIGNhbiBhY2NlcHQgY29uc3QgY2hhcioKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkVfVEhBVCggImZvbyIsIFByZWRpY2F0ZTxjb25zdCBjaGFyKj4oW10gKGNvbnN0IGNoYXIqIGNvbnN0JikgeyByZXR1cm4gdHJ1ZTsgfSkgKQord2l0aCBleHBhbnNpb246CisgICJmb28iIG1hdGNoZXMgdW5kZXNjcmliZWQgcHJlZGljYXRlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lCiAgIGVtcHR5IGFyZ3MgZG9uJ3QgY2F1c2UgYSBjcmFzaAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggcmVzdWx0ICkKIHdpdGggZXhwYW5zaW9uOgogICB7P30KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIGNvbmZpZy5wcm9jZXNzTmFtZSA9PSAiIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgIiIgPT0gIiIKQEAgLTM5MjksNjQgKzU4NjUsNjUgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHJlc3VsdCApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99CiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBjb25maWcucHJvY2Vzc05hbWUgPT0gInRlc3QiICkKIHdpdGggZXhwYW5zaW9uOgogICAidGVzdCIgPT0gInRlc3QiCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBjb25maWcuc2hvdWxkRGVidWdCcmVhayA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIGNvbmZpZy5hYm9ydEFmdGVyID09IC0xICkKIHdpdGggZXhwYW5zaW9uOgogICAtMSA9PSAtMQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggY29uZmlnLm5vVGhyb3cgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIENIRUNLKCBjb25maWcucmVwb3J0ZXJOYW1lcy5lbXB0eSgpICkKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGNvbmZpZy5yZXBvcnRlck5hbWUgPT0gImNvbnNvbGUiICkKIHdpdGggZXhwYW5zaW9uOgotICB0cnVlCisgICJjb25zb2xlIiA9PSAiY29uc29sZSIKKworQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDS19GQUxTRSggY2ZnLmhhc1Rlc3RGaWx0ZXJzKCkgKQord2l0aCBleHBhbnNpb246CisgICFmYWxzZQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZQogICB0ZXN0IGxpc3RzCi0gIDEgdGVzdAorICBTcGVjaWZ5IG9uZSB0ZXN0IGNhc2UgdXNpbmcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHJlc3VsdCApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99CiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGNmZy5oYXNUZXN0RmlsdGVycygpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggY2ZnLnRlc3RTcGVjKCkubWF0Y2hlcyhmYWtlVGVzdENhc2UoIm5vdEluY2x1ZGVkIikpID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBjZmcudGVzdFNwZWMoKS5tYXRjaGVzKGZha2VUZXN0Q2FzZSgidGVzdDEiKSkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKQEAgLTM5OTksMjAgKzU5MzYsMjIgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHJlc3VsdCApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99CiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGNmZy5oYXNUZXN0RmlsdGVycygpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggY2ZnLnRlc3RTcGVjKCkubWF0Y2hlcyhmYWtlVGVzdENhc2UoInRlc3QxIikpID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBjZmcudGVzdFNwZWMoKS5tYXRjaGVzKGZha2VUZXN0Q2FzZSgiYWx3YXlzSW5jbHVkZWQiKSkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKQEAgLTQwMjUsMjAgKzU5NjQsMjIgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHJlc3VsdCApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99CiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGNmZy5oYXNUZXN0RmlsdGVycygpICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggY2ZnLnRlc3RTcGVjKCkubWF0Y2hlcyhmYWtlVGVzdENhc2UoInRlc3QxIikpID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBjZmcudGVzdFNwZWMoKS5tYXRjaGVzKGZha2VUZXN0Q2FzZSgiYWx3YXlzSW5jbHVkZWQiKSkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKQEAgLTQwNTEsMTUgKzU5OTIsMTMgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIGNsaS5wYXJzZSh7InRlc3QiLCAiLXIiLCAiY29uc29sZSJ9KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99CiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIGNvbmZpZy5yZXBvcnRlck5hbWVzWzBdID09ICJjb25zb2xlIiApCitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGNvbmZpZy5yZXBvcnRlck5hbWUgPT0gImNvbnNvbGUiICkKIHdpdGggZXhwYW5zaW9uOgogICAiY29uc29sZSIgPT0gImNvbnNvbGUiCiAKQEAgLTQwNzEsODYgKzYwMTAsODAgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIGNsaS5wYXJzZSh7InRlc3QiLCAiLXIiLCAieG1sIn0pICkKIHdpdGggZXhwYW5zaW9uOgogICB7P30KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggY29uZmlnLnJlcG9ydGVyTmFtZXNbMF0gPT0gInhtbCIgKQorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBjb25maWcucmVwb3J0ZXJOYW1lID09ICJ4bWwiICkKIHdpdGggZXhwYW5zaW9uOgogICAieG1sIiA9PSAieG1sIgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZQogICByZXBvcnRlcgotICAtciB4bWwgYW5kIGp1bml0Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIENIRUNLKCBjbGkucGFyc2UoeyJ0ZXN0IiwgIi1yIiwgInhtbCIsICItciIsICJqdW5pdCJ9KSApCi13aXRoIGV4cGFuc2lvbjoKLSAgez99Ci0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIGNvbmZpZy5yZXBvcnRlck5hbWVzLnNpemUoKSA9PSAyICkKLXdpdGggZXhwYW5zaW9uOgotICAyID09IDIKLQotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggY29uZmlnLnJlcG9ydGVyTmFtZXNbMF0gPT0gInhtbCIgKQotd2l0aCBleHBhbnNpb246Ci0gICJ4bWwiID09ICJ4bWwiCi0KLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIGNvbmZpZy5yZXBvcnRlck5hbWVzWzFdID09ICJqdW5pdCIgKQotd2l0aCBleHBhbnNpb246Ci0gICJqdW5pdCIgPT0gImp1bml0IgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Qcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZQotICByZXBvcnRlcgogICAtLXJlcG9ydGVyL2p1bml0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBjbGkucGFyc2UoeyJ0ZXN0IiwgIi0tcmVwb3J0ZXIiLCAianVuaXQifSkgKQogd2l0aCBleHBhbnNpb246CiAgIHs/fQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBjb25maWcucmVwb3J0ZXJOYW1lc1swXSA9PSAianVuaXQiICkKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggY29uZmlnLnJlcG9ydGVyTmFtZSA9PSAianVuaXQiICkKIHdpdGggZXhwYW5zaW9uOgogICAianVuaXQiID09ICJqdW5pdCIKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUKKyAgcmVwb3J0ZXIKKyAgT25seSBvbmUgcmVwb3J0ZXIgaXMgYWNjZXB0ZWQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFX0ZBTFNFKCBjbGkucGFyc2UoeyAidGVzdCIsICItciIsICJ4bWwiLCAiLXIiLCAianVuaXQiIH0pICkKK3dpdGggZXhwYW5zaW9uOgorICAhez99CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lCisgIHJlcG9ydGVyCisgIG11c3QgbWF0Y2ggb25lIG9mIHRoZSBhdmFpbGFibGUgb25lcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCAhcmVzdWx0ICkKK3dpdGggZXhwYW5zaW9uOgorICB0cnVlCisKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRV9USEFUKCByZXN1bHQuZXJyb3JNZXNzYWdlKCksIENvbnRhaW5zKCJVbnJlY29nbml6ZWQgcmVwb3J0ZXIiKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlVucmVjb2duaXplZCByZXBvcnRlciwgJ3Vuc3VwcG9ydGVkJy4gQ2hlY2sgYXZhaWxhYmxlIHdpdGggLS1saXN0LXJlcG9ydGVycyIKKyAgY29udGFpbnM6ICJVbnJlY29nbml6ZWQgcmVwb3J0ZXIiCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lCiAgIGRlYnVnZ2VyCiAgIC1iCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBjbGkucGFyc2UoeyJ0ZXN0IiwgIi1iIn0pICkKIHdpdGggZXhwYW5zaW9uOgogICB7P30KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggY29uZmlnLnNob3VsZERlYnVnQnJlYWsgPT0gdHJ1ZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZSA9PSB0cnVlCkBAIC00MTYzLDE0ICs2MDk2LDEyIEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBjbGkucGFyc2UoeyJ0ZXN0IiwgIi0tYnJlYWsifSkgKQogd2l0aCBleHBhbnNpb246CiAgIHs/fQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBjb25maWcuc2hvdWxkRGVidWdCcmVhayApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQpAQCAtNDE4MywxNCArNjExNCwxMiBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggY2xpLnBhcnNlKHsidGVzdCIsICItYSJ9KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99CiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGNvbmZpZy5hYm9ydEFmdGVyID09IDEgKQogd2l0aCBleHBhbnNpb246CiAgIDEgPT0gMQpAQCAtNDIwMywxNCArNjEzMiwxMiBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggY2xpLnBhcnNlKHsidGVzdCIsICIteCIsICIyIn0pICkKIHdpdGggZXhwYW5zaW9uOgogICB7P30KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggY29uZmlnLmFib3J0QWZ0ZXIgPT0gMiApCiB3aXRoIGV4cGFuc2lvbjoKICAgMiA9PSAyCkBAIC00MjIzLDE0ICs2MTUwLDEyIEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCAhcmVzdWx0ICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggcmVzdWx0LmVycm9yTWVzc2FnZSgpLCBDb250YWlucygiY29udmVydCIpICYmIENvbnRhaW5zKCJvb3BzIikgKQogd2l0aCBleHBhbnNpb246CiAgICJVbmFibGUgdG8gY29udmVydCAnb29wcycgdG8gZGVzdGluYXRpb24gdHlwZSIgKCBjb250YWluczogImNvbnZlcnQiIGFuZApAQCAtNDI0NCwxNCArNjE2OSwxMiBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggY2xpLnBhcnNlKHsidGVzdCIsICItZSJ9KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99CiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGNvbmZpZy5ub1Rocm93ICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCkBAIC00MjY0LDE0ICs2MTg3LDEyIEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBjbGkucGFyc2UoeyJ0ZXN0IiwgIi0tbm90aHJvdyJ9KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99CiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGNvbmZpZy5ub1Rocm93ICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCkBAIC00Mjg0LDE0ICs2MjA1LDEyIEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBjbGkucGFyc2UoeyJ0ZXN0IiwgIi1vIiwgImZpbGVuYW1lLmV4dCJ9KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99CiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGNvbmZpZy5vdXRwdXRGaWxlbmFtZSA9PSAiZmlsZW5hbWUuZXh0IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgImZpbGVuYW1lLmV4dCIgPT0gImZpbGVuYW1lLmV4dCIKQEAgLTQzMDQsMTQgKzYyMjMsMTIgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIGNsaS5wYXJzZSh7InRlc3QiLCAiLS1vdXQiLCAiZmlsZW5hbWUuZXh0In0pICkKIHdpdGggZXhwYW5zaW9uOgogICB7P30KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggY29uZmlnLm91dHB1dEZpbGVuYW1lID09ICJmaWxlbmFtZS5leHQiICkKIHdpdGggZXhwYW5zaW9uOgogICAiZmlsZW5hbWUuZXh0IiA9PSAiZmlsZW5hbWUuZXh0IgpAQCAtNDMyNCwyNiArNjI0MSwyMiBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggY2xpLnBhcnNlKHsidGVzdCIsICItYWJlIn0pICkKIHdpdGggZXhwYW5zaW9uOgogICB7P30KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIGNvbmZpZy5hYm9ydEFmdGVyID09IDEgKQogd2l0aCBleHBhbnNpb246CiAgIDEgPT0gMQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggY29uZmlnLnNob3VsZERlYnVnQnJlYWsgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIGNvbmZpZy5ub1Rocm93ID09IHRydWUgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUgPT0gdHJ1ZQpAQCAtNDM1NiwxNCArNjI2OSwxMiBAQAogQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggY2xpLnBhcnNlKHsidGVzdCJ9KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99CiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGNvbmZpZy51c2VDb2xvdXIgPT0gVXNlQ29sb3VyOjpBdXRvICkKIHdpdGggZXhwYW5zaW9uOgogICAwID09IDAKQEAgLTQzNzYsMTQgKzYyODcsMTIgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIGNsaS5wYXJzZSh7InRlc3QiLCAiLS11c2UtY29sb3VyIiwgImF1dG8ifSkgKQogd2l0aCBleHBhbnNpb246CiAgIHs/fQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBjb25maWcudXNlQ29sb3VyID09IFVzZUNvbG91cjo6QXV0byApCiB3aXRoIGV4cGFuc2lvbjoKICAgMCA9PSAwCkBAIC00Mzk2LDE0ICs2MzA1LDEyIEBACiBDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBjbGkucGFyc2UoeyJ0ZXN0IiwgIi0tdXNlLWNvbG91ciIsICJ5ZXMifSkgKQogd2l0aCBleHBhbnNpb246CiAgIHs/fQogCi1DbWRMaW5lLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBjb25maWcudXNlQ29sb3VyID09IFVzZUNvbG91cjo6WWVzICkKIHdpdGggZXhwYW5zaW9uOgogICAxID09IDEKQEAgLTQ0MTYsMTQgKzYzMjMsMTIgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIGNsaS5wYXJzZSh7InRlc3QiLCAiLS11c2UtY29sb3VyIiwgIm5vIn0pICkKIHdpdGggZXhwYW5zaW9uOgogICB7P30KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggY29uZmlnLnVzZUNvbG91ciA9PSBVc2VDb2xvdXI6Ok5vICkKIHdpdGggZXhwYW5zaW9uOgogICAyID09IDIKQEAgLTQ0MzYsMjAgKzYzNDEsNTEgQEAKIENtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soICFyZXN1bHQgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotQ21kTGluZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NtZExpbmUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0tfVEhBVCggcmVzdWx0LmVycm9yTWVzc2FnZSgpLCBDb250YWlucyggImNvbG91ciBtb2RlIG11c3QgYmUgb25lIG9mIiApICkKIHdpdGggZXhwYW5zaW9uOgogICAiY29sb3VyIG1vZGUgbXVzdCBiZSBvbmUgb2Y6IGF1dG8sIHllcyBvciBuby4gJ3dyb25nJyBub3QgcmVjb2duaXNlZCIKICAgY29udGFpbnM6ICJjb2xvdXIgbW9kZSBtdXN0IGJlIG9uZSBvZiIKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUHJvZHVjdCB3aXRoIGRpZmZlcmluZyBhcml0aWVzIC0gc3RkOjp0dXBsZTxpbnQsIGRvdWJsZSwgZmxvYXQ+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggc3RkOjp0dXBsZV9zaXplPFRlc3RUeXBlPjo6dmFsdWUgPj0gMSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA+PSAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb2R1Y3Qgd2l0aCBkaWZmZXJpbmcgYXJpdGllcyAtIHN0ZDo6dHVwbGU8aW50LCBkb3VibGU+CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggc3RkOjp0dXBsZV9zaXplPFRlc3RUeXBlPjo6dmFsdWUgPj0gMSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA+PSAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1Byb2R1Y3Qgd2l0aCBkaWZmZXJpbmcgYXJpdGllcyAtIHN0ZDo6dHVwbGU8aW50PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHN0ZDo6dHVwbGVfc2l6ZTxUZXN0VHlwZT46OnZhbHVlID49IDEgKQord2l0aCBleHBhbnNpb246CisgIDEgPj0gMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBSZWNvbnN0cnVjdGlvbiBzaG91bGQgYmUgYmFzZWQgb24gc3RyaW5naWZpY2F0aW9uOiAjOTE0CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBEZWNvbXBvc2l0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC00NDg1LDEzICs2NDIxLDIzIEBACiAgICdhYmMnIGFzIGEiIGNhc2Ugc2Vuc2l0aXZlbHkKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVncmVzc2lvbiB0ZXN0ICMxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDS19USEFUKCBhY3R1YWwsICFVbm9yZGVyZWRFcXVhbHMoZXhwZWN0ZWQpICkKK3dpdGggZXhwYW5zaW9uOgorICB7ICdhJywgJ2InIH0gbm90IFVub3JkZXJlZEVxdWFsczogeyAnYycsICdiJyB9CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNVQ0NFRUQgY291bnRzIGFzIGEgdGVzdCBwYXNzCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiB3aXRoIG1lc3NhZ2U6CiAgIHRoaXMgaXMgYSBzdWNjZXNzCiAKQEAgLTQ1MDEsMTkgKzY0NDcsMTcgQEAKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU2NlbmFyaW86IEJERCB0ZXN0cyByZXF1aXJpbmcgRml4dHVyZXMgdG8gcHJvdmlkZSBjb21tb25seS1hY2Nlc3NlZCBkYXRhIG9yCiAgICAgICAgICAgbWV0aG9kcwotICAgICBHaXZlbjogTm8gb3BlcmF0aW9ucyBwcmVjZWRlIG1lCisgICAgICBHaXZlbjogTm8gb3BlcmF0aW9ucyBwcmVjZWRlIG1lCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBCREQudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQkRELnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQkRELnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGJlZm9yZSA9PSAwICkKIHdpdGggZXhwYW5zaW9uOgogICAwID09IDAKQEAgLTQ1MjEsNDYgKzY0NjUsNDUgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNjZW5hcmlvOiBCREQgdGVzdHMgcmVxdWlyaW5nIEZpeHR1cmVzIHRvIHByb3ZpZGUgY29tbW9ubHktYWNjZXNzZWQgZGF0YSBvcgogICAgICAgICAgIG1ldGhvZHMKLSAgICAgR2l2ZW46IE5vIG9wZXJhdGlvbnMgcHJlY2VkZSBtZQotICAgICAgV2hlbjogV2UgZ2V0IHRoZSBjb3VudAotICAgICAgVGhlbjogU3Vic2VxdWVudGx5IHZhbHVlcyBhcmUgaGlnaGVyCisgICAgICBHaXZlbjogTm8gb3BlcmF0aW9ucyBwcmVjZWRlIG1lCisgICAgICAgV2hlbjogV2UgZ2V0IHRoZSBjb3VudAorICAgICAgIFRoZW46IFN1YnNlcXVlbnRseSB2YWx1ZXMgYXJlIGhpZ2hlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQkRELnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUJERC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0JERC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBhZnRlciA+IGJlZm9yZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMSA+IDAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU2NlbmFyaW86IERvIHRoYXQgdGhpbmcgd2l0aCB0aGUgdGhpbmcKLSAgICAgR2l2ZW46IFRoaXMgc3R1ZmYgZXhpc3RzCi0gICAgICBXaGVuOiBJIGRvIHRoaXMKLSAgICAgIFRoZW46IGl0IHNob3VsZCBkbyB0aGlzCisgICAgICBHaXZlbjogVGhpcyBzdHVmZiBleGlzdHMKKyAgQW5kIGdpdmVuOiBBbmQgc29tZSBhc3N1bXB0aW9uCisgICAgICAgV2hlbjogSSBkbyB0aGlzCisgICAgICAgVGhlbjogaXQgc2hvdWxkIGRvIHRoaXMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEJERC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1CREQudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitCREQudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaXREb2VzVGhpcygpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNjZW5hcmlvOiBEbyB0aGF0IHRoaW5nIHdpdGggdGhlIHRoaW5nCi0gICAgIEdpdmVuOiBUaGlzIHN0dWZmIGV4aXN0cwotICAgICAgV2hlbjogSSBkbyB0aGlzCi0gICAgICBUaGVuOiBpdCBzaG91bGQgZG8gdGhpcwotICAgICAgIEFuZDogZG8gdGhhdAorICAgICAgR2l2ZW46IFRoaXMgc3R1ZmYgZXhpc3RzCisgIEFuZCBnaXZlbjogQW5kIHNvbWUgYXNzdW1wdGlvbgorICAgICAgIFdoZW46IEkgZG8gdGhpcworICAgICAgIFRoZW46IGl0IHNob3VsZCBkbyB0aGlzCisgICAgICAgIEFuZDogZG8gdGhhdAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQkRELnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUJERC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0JERC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBpdERvZXNUaGF0KCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKQEAgLTQ1NjgsMTA4ICs2NTExLDk5IEBACiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTY2VuYXJpbzogVGhpcyBpcyBhIHJlYWxseSBsb25nIHNjZW5hcmlvIG5hbWUgdG8gc2VlIGhvdyB0aGUgbGlzdCBjb21tYW5kIGRlYWxzCiAgICAgICAgICAgd2l0aCB3cmFwcGluZwotICAgICBHaXZlbjogQSBzZWN0aW9uIG5hbWUgdGhhdCBpcyBzbyBsb25nIHRoYXQgaXQgY2Fubm90IGZpdCBpbiBhIHNpbmdsZQotICAgICAgICAgICAgY29uc29sZSB3aWR0aAotICAgICAgV2hlbjogVGhlIHRlc3QgaGVhZGVycyBhcmUgcHJpbnRlZCBhcyBwYXJ0IG9mIHRoZSBub3JtYWwgcnVubmluZyBvZiB0aGUKLSAgICAgICAgICAgIHNjZW5hcmlvCi0gICAgICBUaGVuOiBUaGUsIGRlbGliZXJhdGVseSB2ZXJ5IGxvbmcgYW5kIG92ZXJseSB2ZXJib3NlICh5b3Ugc2VlIHdoYXQgSSBkaWQKLSAgICAgICAgICAgIHRoZXJlPykgc2VjdGlvbiBuYW1lcyBtdXN0IHdyYXAsIGFsb25nIHdpdGggYW4gaW5kZW50CisgICAgICBHaXZlbjogQSBzZWN0aW9uIG5hbWUgdGhhdCBpcyBzbyBsb25nIHRoYXQgaXQgY2Fubm90IGZpdCBpbiBhIHNpbmdsZQorICAgICAgICAgICAgIGNvbnNvbGUgd2lkdGgKKyAgICAgICBXaGVuOiBUaGUgdGVzdCBoZWFkZXJzIGFyZSBwcmludGVkIGFzIHBhcnQgb2YgdGhlIG5vcm1hbCBydW5uaW5nIG9mIHRoZQorICAgICAgICAgICAgIHNjZW5hcmlvCisgICAgICAgVGhlbjogVGhlLCBkZWxpYmVyYXRlbHkgdmVyeSBsb25nIGFuZCBvdmVybHkgdmVyYm9zZSAoeW91IHNlZSB3aGF0IEkgZGlkCisgICAgICAgICAgICAgdGhlcmU/KSBzZWN0aW9uIG5hbWVzIG11c3Qgd3JhcCwgYWxvbmcgd2l0aCBhbiBpbmRlbnQKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEJERC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1CREQudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitCREQudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKIHdpdGggbWVzc2FnZToKICAgYm9vIQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTY2VuYXJpbzogVmVjdG9yIHJlc2l6aW5nIGFmZmVjdHMgc2l6ZSBhbmQgY2FwYWNpdHkKLSAgICAgR2l2ZW46IGFuIGVtcHR5IHZlY3RvcgorICAgICAgR2l2ZW46IGFuIGVtcHR5IHZlY3RvcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQkRELnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUJERC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0JERC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB2LnNpemUoKSA9PSAwICkKIHdpdGggZXhwYW5zaW9uOgogICAwID09IDAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU2NlbmFyaW86IFZlY3RvciByZXNpemluZyBhZmZlY3RzIHNpemUgYW5kIGNhcGFjaXR5Ci0gICAgIEdpdmVuOiBhbiBlbXB0eSB2ZWN0b3IKLSAgICAgIFdoZW46IGl0IGlzIG1hZGUgbGFyZ2VyCi0gICAgICBUaGVuOiB0aGUgc2l6ZSBhbmQgY2FwYWNpdHkgZ28gdXAKKyAgICAgIEdpdmVuOiBhbiBlbXB0eSB2ZWN0b3IKKyAgICAgICBXaGVuOiBpdCBpcyBtYWRlIGxhcmdlcgorICAgICAgIFRoZW46IHRoZSBzaXplIGFuZCBjYXBhY2l0eSBnbyB1cAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQkRELnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUJERC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0JERC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB2LnNpemUoKSA9PSAxMCApCiB3aXRoIGV4cGFuc2lvbjoKICAgMTAgPT0gMTAKIAotQkRELnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQkRELnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSAxMCApCiB3aXRoIGV4cGFuc2lvbjoKICAgMTAgPj0gMTAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU2NlbmFyaW86IFZlY3RvciByZXNpemluZyBhZmZlY3RzIHNpemUgYW5kIGNhcGFjaXR5Ci0gICAgIEdpdmVuOiBhbiBlbXB0eSB2ZWN0b3IKLSAgICAgIFdoZW46IGl0IGlzIG1hZGUgbGFyZ2VyCi0gICAgICBUaGVuOiB0aGUgc2l6ZSBhbmQgY2FwYWNpdHkgZ28gdXAKLSAgQW5kIHdoZW46IGl0IGlzIG1hZGUgc21hbGxlciBhZ2FpbgotICAgICAgVGhlbjogdGhlIHNpemUgZ29lcyBkb3duIGJ1dCB0aGUgY2FwYWNpdHkgc3RheXMgdGhlIHNhbWUKKyAgICAgIEdpdmVuOiBhbiBlbXB0eSB2ZWN0b3IKKyAgICAgICBXaGVuOiBpdCBpcyBtYWRlIGxhcmdlcgorICAgICAgIFRoZW46IHRoZSBzaXplIGFuZCBjYXBhY2l0eSBnbyB1cAorICAgQW5kIHdoZW46IGl0IGlzIG1hZGUgc21hbGxlciBhZ2FpbgorICAgICAgIFRoZW46IHRoZSBzaXplIGdvZXMgZG93biBidXQgdGhlIGNhcGFjaXR5IHN0YXlzIHRoZSBzYW1lCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBCREQudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQkRELnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQkRELnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKQogd2l0aCBleHBhbnNpb246CiAgIDUgPT0gNQogCi1CREQudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitCREQudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDEwICkKIHdpdGggZXhwYW5zaW9uOgogICAxMCA+PSAxMAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBTY2VuYXJpbzogVmVjdG9yIHJlc2l6aW5nIGFmZmVjdHMgc2l6ZSBhbmQgY2FwYWNpdHkKLSAgICAgR2l2ZW46IGFuIGVtcHR5IHZlY3RvcgorICAgICAgR2l2ZW46IGFuIGVtcHR5IHZlY3RvcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogQkRELnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUJERC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0JERC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB2LnNpemUoKSA9PSAwICkKIHdpdGggZXhwYW5zaW9uOgogICAwID09IDAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU2NlbmFyaW86IFZlY3RvciByZXNpemluZyBhZmZlY3RzIHNpemUgYW5kIGNhcGFjaXR5Ci0gICAgIEdpdmVuOiBhbiBlbXB0eSB2ZWN0b3IKLSAgICAgIFdoZW46IHdlIHJlc2VydmUgbW9yZSBzcGFjZQotICAgICAgVGhlbjogVGhlIGNhcGFjaXR5IGlzIGluY3JlYXNlZCBidXQgdGhlIHNpemUgcmVtYWlucyB0aGUgc2FtZQorICAgICAgR2l2ZW46IGFuIGVtcHR5IHZlY3RvcgorICAgICAgIFdoZW46IHdlIHJlc2VydmUgbW9yZSBzcGFjZQorICAgICAgIFRoZW46IFRoZSBjYXBhY2l0eSBpcyBpbmNyZWFzZWQgYnV0IHRoZSBzaXplIHJlbWFpbnMgdGhlIHNhbWUKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEJERC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1CREQudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitCREQudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDEwICkKIHdpdGggZXhwYW5zaW9uOgogICAxMCA+PSAxMAogCi1CREQudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitCREQudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdi5zaXplKCkgPT0gMCApCiB3aXRoIGV4cGFuc2lvbjoKICAgMCA9PSAwCkBAIC00NjkyLDQ0ICs2NjI2LDQ3IEBACiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGQgPT0gQXBwcm94KCAxLjIzICkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMjMgPT0gQXBwcm94KCAxLjIzICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGQgIT0gQXBwcm94KCAxLjIyICkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMjMgIT0gQXBwcm94KCAxLjIyICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGQgIT0gQXBwcm94KCAxLjI0ICkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMjMgIT0gQXBwcm94KCAxLjI0ICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGQgPT0gMS4yM19hICkKK3dpdGggZXhwYW5zaW9uOgorICAxLjIzID09IEFwcHJveCggMS4yMyApCisKK0FwcHJveC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBkICE9IDEuMjJfYSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMS4yMyAhPSBBcHByb3goIDEuMjIgKQorCitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggQXBwcm94KCBkICkgPT0gMS4yMyApCiB3aXRoIGV4cGFuc2lvbjoKICAgQXBwcm94KCAxLjIzICkgPT0gMS4yMwogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggQXBwcm94KCBkICkgIT0gMS4yMiApCiB3aXRoIGV4cGFuc2lvbjoKICAgQXBwcm94KCAxLjIzICkgIT0gMS4yMgogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggQXBwcm94KCBkICkgIT0gMS4yNCApCiB3aXRoIGV4cGFuc2lvbjoKICAgQXBwcm94KCAxLjIzICkgIT0gMS4yNAogCi1BcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggSU5GSU5JVFkgPT0gQXBwcm94KElORklOSVRZKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgaW5mZiA9PSBBcHByb3goIGluZiApCkBAIC00NzgwLDggKzY3MTcsNyBAQAogVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoc2luZ3VsYXIpID09ICJ7IDEgfSIgKQogd2l0aCBleHBhbnNpb246CiAgICJ7IDEgfSIgPT0gInsgMSB9IgpAQCAtNDc5Myw4ICs2NzI5LDcgQEAKIFRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggQ2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGFycikgPT0gInsgMywgMiwgMSB9IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgMywgMiwgMSB9IiA9PSAieyAzLCAyLCAxIH0iCkBAIC00ODA2LDggKzY3NDEsNyBAQAogVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoYXJyKSA9PSBSIih7IHsgIjE6MSIsICIxOjIiLCAiMTozIiB9LCB7ICIyOjEiLCAiMjoyIiB9IH0pIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgeyAiMToxIiwgIjE6MiIsICIxOjMiIH0sIHsgIjI6MSIsICIyOjIiIH0gfSIKQEAgLTQ4MjAsNTMgKzY3NTQsNDUgQEAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USEFUKCB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgQ29udGFpbnMoInN0cmluZyIpICkKIHdpdGggZXhwYW5zaW9uOgogICAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIGNvbnRhaW5zOiAic3RyaW5nIgogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggdGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIENvbnRhaW5zKCJzdHJpbmciLCBDYXRjaDo6Q2FzZVNlbnNpdGl2ZTo6Tm8pICkKIHdpdGggZXhwYW5zaW9uOgogICAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIGNvbnRhaW5zOiAic3RyaW5nIiAoY2FzZQogICBpbnNlbnNpdGl2ZSkKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USEFUKCB0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgQ29udGFpbnMoImFiYyIpICkKIHdpdGggZXhwYW5zaW9uOgogICAidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciIGNvbnRhaW5zOiAiYWJjIgogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBDb250YWlucygiYUJDIiwgQ2F0Y2g6OkNhc2VTZW5zaXRpdmU6Ok5vKSApCiB3aXRoIGV4cGFuc2lvbjoKLSAgInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBjb250YWluczogImFiYyIgKGNhc2UgaW5zZW5zaXRpdmUpCisgICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgY29udGFpbnM6ICJhYmMiIChjYXNlCiAgIGluc2Vuc2l0aXZlKQogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBTdGFydHNXaXRoKCJ0aGlzIikgKQogd2l0aCBleHBhbnNpb246CiAgICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgc3RhcnRzIHdpdGg6ICJ0aGlzIgogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBTdGFydHNXaXRoKCJUSElTIiwgQ2F0Y2g6OkNhc2VTZW5zaXRpdmU6Ok5vKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIiBzdGFydHMgd2l0aDogInRoaXMiIChjYXNlCiAgIGluc2Vuc2l0aXZlKQogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBFbmRzV2l0aCgic3Vic3RyaW5nIikgKQogd2l0aCBleHBhbnNpb246CiAgICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgZW5kcyB3aXRoOiAic3Vic3RyaW5nIgogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX1RIQVQoIHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBFbmRzV2l0aCgiIFN1QnNUckluRyIsIENhdGNoOjpDYXNlU2Vuc2l0aXZlOjpObykgKQogd2l0aCBleHBhbnNpb246CiAgICJ0aGlzIHN0cmluZyBjb250YWlucyAnYWJjJyBhcyBhIHN1YnN0cmluZyIgZW5kcyB3aXRoOiAiIHN1YnN0cmluZyIgKGNhc2UKQEAgLTQ4NzksMjAgKzY4MDUsMTcgQEAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZW1wdHkuZW1wdHkoKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZW1wdHkuc2l6ZSgpID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMAogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggc3RkOjpzdHJjbXAoIGVtcHR5LmNfc3RyKCksICIiICkgPT0gMCApCiB3aXRoIGV4cGFuc2lvbjoKICAgMCA9PSAwCkBAIC00OTA0LDI2ICs2ODI3LDIyIEBACiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHMuZW1wdHkoKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHMuc2l6ZSgpID09IDUgKQogd2l0aCBleHBhbnNpb246CiAgIDUgPT0gNQogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaXNTdWJzdHJpbmcoIHMgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHN0ZDo6c3RyY21wKCByYXdDaGFycywgImhlbGxvIiApID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMApAQCAtNDkzNiwyMCArNjg1NSwxNyBAQAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBpc093bmVkKCBzICkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzLmNfc3RyKCkgPT0gcmF3Q2hhcnMgKQogd2l0aCBleHBhbnNpb246CiAgICJoZWxsbyIgPT0gImhlbGxvIgogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaXNPd25lZCggcyApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtNDk2MSwxNCArNjg3NywyOCBAQAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBvcmlnaW5hbCA9PSAib3JpZ2luYWwiICkKIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBGQUlMRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaXNTdWJzdHJpbmcoIG9yaWdpbmFsICkgKQogd2l0aCBleHBhbnNpb246Ci0gIGZhbHNlCisgIHRydWUKKworU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGlzT3duZWQoIG9yaWdpbmFsICkgPT0gZmFsc2UgKQord2l0aCBleHBhbnNpb246CisgIGZhbHNlID09IGZhbHNlCisKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBpc1N1YnN0cmluZyggb3JpZ2luYWwgKSA9PSBmYWxzZSApCit3aXRoIGV4cGFuc2lvbjoKKyAgZmFsc2UgPT0gZmFsc2UKKworU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGlzT3duZWQoIG9yaWdpbmFsICkgKQord2l0aCBleHBhbnNpb246CisgIHRydWUKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU3RyaW5nUmVmCkBAIC00OTc4LDI2ICs2OTA4LDIyIEBACiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHNzLmVtcHR5KCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzcy5zaXplKCkgPT0gNSApCiB3aXRoIGV4cGFuc2lvbjoKICAgNSA9PSA1CiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzdGQ6OnN0cmNtcCggc3MuY19zdHIoKSwgImhlbGxvIiApID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMAogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggc3MgPT0gImhlbGxvIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgaGVsbG8gPT0gImhlbGxvIgpAQCAtNTAxMCw0NSArNjkzNiwzOCBAQAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBpc1N1YnN0cmluZyggc3MgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaXNPd25lZCggc3MgKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCByYXdDaGFycyA9PSBkYXRhKCBzICkgKQorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHJhd0NoYXJzID09IHMuY3VycmVudERhdGEoKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgImhlbGxvIHdvcmxkISIgPT0gImhlbGxvIHdvcmxkISIKIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHNzLmNfc3RyKCkgIT0gcmF3Q2hhcnMgKQogd2l0aCBleHBhbnNpb246CiAgICJoZWxsbyIgIT0gImhlbGxvIHdvcmxkISIKIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGlzU3Vic3RyaW5nKCBzcyApID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggaXNPd25lZCggc3MgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIGRhdGEoIHNzICkgIT0gZGF0YSggcyApICkKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBzcy5jdXJyZW50RGF0YSgpICE9IHMuY3VycmVudERhdGEoKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgImhlbGxvIiAhPSAiaGVsbG8gd29ybGQhIgogCkBAIC01MDYwLDE0ICs2OTc5LDEyIEBACiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHNzLnNpemUoKSA9PSA2ICkKIHdpdGggZXhwYW5zaW9uOgogICA2ID09IDYKIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHN0ZDo6c3RyY21wKCBzcy5jX3N0cigpLCAid29ybGQhIiApID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMApAQCAtNTA4MCw4ICs2OTk3LDcgQEAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggcy5jX3N0cigpID09IHMyLmNfc3RyKCkgKQogd2l0aCBleHBhbnNpb246CiAgICJoZWxsbyB3b3JsZCEiID09ICJoZWxsbyB3b3JsZCEiCkBAIC01MDk0LDggKzcwMTAsNyBAQAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzLmNfc3RyKCkgIT0gc3MuY19zdHIoKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgImhlbGxvIHdvcmxkISIgIT0gImhlbGxvIgpAQCAtNTEwNywxNCArNzAyMiwxMiBAQAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBTdHJpbmdSZWYoImhlbGxvIikgPT0gU3RyaW5nUmVmKCJoZWxsbyIpICkKIHdpdGggZXhwYW5zaW9uOgogICBoZWxsbyA9PSBoZWxsbwogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggU3RyaW5nUmVmKCJoZWxsbyIpICE9IFN0cmluZ1JlZigiY2VsbG8iKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgaGVsbG8gIT0gY2VsbG8KQEAgLTUxMjcsMTQgKzcwNDAsMTIgQEAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggc3IgPT0gImEgc3RhbmRhcmQgc3RyaW5nIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgYSBzdGFuZGFyZCBzdHJpbmcgPT0gImEgc3RhbmRhcmQgc3RyaW5nIgogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggc3Iuc2l6ZSgpID09IHN0ZFN0ci5zaXplKCkgKQogd2l0aCBleHBhbnNpb246CiAgIDE3ID09IDE3CkBAIC01MTQ3LDE0ICs3MDU4LDEyIEBACiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHNyID09ICJhIHN0YW5kYXJkIHN0cmluZyIgKQogd2l0aCBleHBhbnNpb246CiAgIGEgc3RhbmRhcmQgc3RyaW5nID09ICJhIHN0YW5kYXJkIHN0cmluZyIKIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHNyLnNpemUoKSA9PSBzdGRTdHIuc2l6ZSgpICkKIHdpdGggZXhwYW5zaW9uOgogICAxNyA9PSAxNwpAQCAtNTE2NywxNCArNzA3NiwxMiBAQAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzciA9PSAiYSBzdGFuZGFyZCBzdHJpbmciICkKIHdpdGggZXhwYW5zaW9uOgogICBhIHN0YW5kYXJkIHN0cmluZyA9PSAiYSBzdGFuZGFyZCBzdHJpbmciCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzci5zaXplKCkgPT0gc3RkU3RyLnNpemUoKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMTcgPT0gMTcKQEAgLTUxODcsMTQgKzcwOTQsMTIgQEAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggc3RkU3RyID09ICJhIHN0cmluZ3JlZiIgKQogd2l0aCBleHBhbnNpb246CiAgICJhIHN0cmluZ3JlZiIgPT0gImEgc3RyaW5ncmVmIgogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggc3RkU3RyLnNpemUoKSA9PSBzci5zaXplKCkgKQogd2l0aCBleHBhbnNpb246CiAgIDExID09IDExCkBAIC01MjA3LDE0ICs3MTEyLDEyIEBACiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHN0ZFN0ciA9PSAiYSBzdHJpbmdyZWYiICkKIHdpdGggZXhwYW5zaW9uOgogICAiYSBzdHJpbmdyZWYiID09ICJhIHN0cmluZ3JlZiIKIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHN0ZFN0ci5zaXplKCkgPT0gc3Iuc2l6ZSgpICkKIHdpdGggZXhwYW5zaW9uOgogICAxMSA9PSAxMQpAQCAtNTIyNyw0NCArNzEzMCw2MCBAQAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzdGRTdHIgPT0gImEgc3RyaW5ncmVmIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgImEgc3RyaW5ncmVmIiA9PSAiYSBzdHJpbmdyZWYiCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzdGRTdHIuc2l6ZSgpID09IHNyLnNpemUoKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMTEgPT0gMTEKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorU3RyaW5nUmVmCisgIENvdW50aW5nIHV0Zi04IGNvZGVwb2ludHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggYXNjaWkubnVtYmVyT2ZDaGFyYWN0ZXJzKCkgPT0gYXNjaWkuc2l6ZSgpICkKK3dpdGggZXhwYW5zaW9uOgorICAzOSA9PSAzOQorCitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggc2ltcGxldTgubnVtYmVyT2ZDaGFyYWN0ZXJzKCkgPT0gMzAgKQord2l0aCBleHBhbnNpb246CisgIDMwID09IDMwCisKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBlbW9qaXMubnVtYmVyT2ZDaGFyYWN0ZXJzKCkgPT0gOSApCit3aXRoIGV4cGFuc2lvbjoKKyAgOSA9PSA5CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFN0cmluZ2lmeWluZyBzdGQ6OmNocm9ubzo6ZHVyYXRpb24gaGVscGVycwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVG9TdHJpbmdDaHJvbm8udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVG9TdHJpbmdDaHJvbm8udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0Nocm9uby50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBtaW51dGUgPT0gc2Vjb25kcyApCiB3aXRoIGV4cGFuc2lvbjoKICAgMSBtID09IDYwIHMKIAotVG9TdHJpbmdDaHJvbm8udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0Nocm9uby50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBob3VyICE9IHNlY29uZHMgKQogd2l0aCBleHBhbnNpb246CiAgIDEgaCAhPSA2MCBzCiAKLVRvU3RyaW5nQ2hyb25vLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdDaHJvbm8udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggbWljcm8gIT0gbWlsbGkgKQogd2l0aCBleHBhbnNpb246CiAgIDEgdXMgIT0gMSBtcwogCi1Ub1N0cmluZ0Nocm9uby50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nQ2hyb25vLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIG5hbm8gIT0gbWljcm8gKQogd2l0aCBleHBhbnNpb246CiAgIDEgbnMgIT0gMSB1cwpAQCAtNTI3NSwxNCArNzE5NCwxMiBAQAogVG9TdHJpbmdDaHJvbm8udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVG9TdHJpbmdDaHJvbm8udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0Nocm9uby50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBoYWxmX21pbnV0ZSAhPSBmZW10b19zZWNvbmQgKQogd2l0aCBleHBhbnNpb246CiAgIDEgWzMwLzFdcyAhPSAxIGZzCiAKLVRvU3RyaW5nQ2hyb25vLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdDaHJvbm8udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggcGljb19zZWNvbmQgIT0gYXR0b19zZWNvbmQgKQogd2l0aCBleHBhbnNpb246CiAgIDEgcHMgIT0gMSBhcwpAQCAtNTI5Myw4ICs3MjEwLDcgQEAKIFRvU3RyaW5nQ2hyb25vLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRvU3RyaW5nQ2hyb25vLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdDaHJvbm8udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggbm93ICE9IGxhdGVyICkKIHdpdGggZXhwYW5zaW9uOgogICB7aXNvODYwMS10aW1lc3RhbXB9CkBAIC01MzI2LDMyICs3MjQyLDI4IEBACiBUYWdBbGlhcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1UYWdBbGlhcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RhZ0FsaWFzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX1RIQVQoIHdoYXQsIENvbnRhaW5zKCAiW0B6enpdIiApICkKIHdpdGggZXhwYW5zaW9uOgogICAiZXJyb3I6IHRhZyBhbGlhcywgJ1tAenp6XScgYWxyZWFkeSByZWdpc3RlcmVkLgogICAJRmlyc3Qgc2VlbiBhdDogZmlsZToyCiAgIAlSZWRlZmluZWQgYXQ6IGZpbGU6MTAiIGNvbnRhaW5zOiAiW0B6enpdIgogCi1UYWdBbGlhcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RhZ0FsaWFzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX1RIQVQoIHdoYXQsIENvbnRhaW5zKCAiZmlsZSIgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgImVycm9yOiB0YWcgYWxpYXMsICdbQHp6el0nIGFscmVhZHkgcmVnaXN0ZXJlZC4KICAgCUZpcnN0IHNlZW4gYXQ6IGZpbGU6MgogICAJUmVkZWZpbmVkIGF0OiBmaWxlOjEwIiBjb250YWluczogImZpbGUiCiAKLVRhZ0FsaWFzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVGFnQWxpYXMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0tfVEhBVCggd2hhdCwgQ29udGFpbnMoICIyIiApICkKIHdpdGggZXhwYW5zaW9uOgogICAiZXJyb3I6IHRhZyBhbGlhcywgJ1tAenp6XScgYWxyZWFkeSByZWdpc3RlcmVkLgogICAJRmlyc3Qgc2VlbiBhdDogZmlsZToyCiAgIAlSZWRlZmluZWQgYXQ6IGZpbGU6MTAiIGNvbnRhaW5zOiAiMiIKIAotVGFnQWxpYXMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUYWdBbGlhcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USEFUKCB3aGF0LCBDb250YWlucyggIjEwIiApICkKIHdpdGggZXhwYW5zaW9uOgogICAiZXJyb3I6IHRhZyBhbGlhcywgJ1tAenp6XScgYWxyZWFkeSByZWdpc3RlcmVkLgpAQCAtNTM2NSwzMCArNzI3Nyw2MDUgQEAKIFRhZ0FsaWFzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRhZ0FsaWFzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVGFnQWxpYXMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0tfVEhST1dTKCByZWdpc3RyeS5hZGQoICJbbm8gYW1wZXJzYXRdIiwgIiIsIENhdGNoOjpTb3VyY2VMaW5lSW5mbyggImZpbGUiLCAzICkgKSApCiAKLVRhZ0FsaWFzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVGFnQWxpYXMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0tfVEhST1dTKCByZWdpc3RyeS5hZGQoICJbdGhlIEAgaXMgbm90IGF0IHRoZSBzdGFydF0iLCAiIiwgQ2F0Y2g6OlNvdXJjZUxpbmVJbmZvKCAiZmlsZSIsIDMgKSApICkKIAotVGFnQWxpYXMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUYWdBbGlhcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USFJPV1MoIHJlZ2lzdHJ5LmFkZCggIkBubyBzcXVhcmUgYnJhY2tldCBhdCBzdGFydF0iLCAiIiwgQ2F0Y2g6OlNvdXJjZUxpbmVJbmZvKCAiZmlsZSIsIDMgKSApICkKIAotVGFnQWxpYXMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUYWdBbGlhcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USFJPV1MoIHJlZ2lzdHJ5LmFkZCggIltAbm8gc3F1YXJlIGJyYWNrZXQgYXQgZW5kIiwgIiIsIENhdGNoOjpTb3VyY2VMaW5lSW5mbyggImZpbGUiLCAzICkgKSApCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPT0gNQorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID49IDUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGZsb2F0CisgIHJlc2l6aW5nIGJpZ2dlciBjaGFuZ2VzIHNpemUgYW5kIGNhcGFjaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5zaXplKCkgPT0gMTAgKQord2l0aCBleHBhbnNpb246CisgIDEwID09IDEwCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDEwICkKK3dpdGggZXhwYW5zaW9uOgorICAxMCA+PSAxMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LnNpemUoKSA9PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID09IDUKKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA+PSA1CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdAorICByZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5zaXplKCkgPT0gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMCA9PSAwCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPj0gNQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQKKyAgcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eQorICBXZSBjYW4gdXNlIHRoZSAnc3dhcCB0cmljaycgdG8gcmVzZXQgdGhlIGNhcGFjaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID09IDAgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LnNpemUoKSA9PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID09IDUKKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA+PSA1CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdAorICByZXNlcnZpbmcgYmlnZ2VyIGNoYW5nZXMgY2FwYWNpdHkgYnV0IG5vdCBzaXplCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA9PSA1CisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDEwICkKK3dpdGggZXhwYW5zaW9uOgorICAxMCA+PSAxMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LnNpemUoKSA9PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID09IDUKKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA+PSA1CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdAorICByZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPT0gNQorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID49IDUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPT0gNQorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID49IDUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludAorICByZXNpemluZyBiaWdnZXIgY2hhbmdlcyBzaXplIGFuZCBjYXBhY2l0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDEwICkKK3dpdGggZXhwYW5zaW9uOgorICAxMCA9PSAxMAorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSAxMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMTAgPj0gMTAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPT0gNQorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID49IDUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludAorICByZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5zaXplKCkgPT0gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMCA9PSAwCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPj0gNQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gaW50CisgIHJlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkKKyAgV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA9PSAwICkKK3dpdGggZXhwYW5zaW9uOgorICAwID09IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPT0gNQorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID49IDUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludAorICByZXNlcnZpbmcgYmlnZ2VyIGNoYW5nZXMgY2FwYWNpdHkgYnV0IG5vdCBzaXplCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA9PSA1CisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDEwICkKK3dpdGggZXhwYW5zaW9uOgorICAxMCA+PSAxMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gaW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA9PSA1CisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPj0gNQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gaW50CisgIHJlc2VydmluZyBzbWFsbGVyIGRvZXMgbm90IGNoYW5nZSBzaXplIG9yIGNhcGFjaXR5CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA9PSA1CisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPj0gNQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LnNpemUoKSA9PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID09IDUKKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA+PSA1CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZworICByZXNpemluZyBiaWdnZXIgY2hhbmdlcyBzaXplIGFuZCBjYXBhY2l0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDEwICkKK3dpdGggZXhwYW5zaW9uOgorICAxMCA9PSAxMAorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSAxMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMTAgPj0gMTAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6c3RyaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA9PSA1CisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPj0gNQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcKKyAgcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDAgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMAorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID49IDUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6c3RyaW5nCisgIHJlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkKKyAgV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA9PSAwICkKK3dpdGggZXhwYW5zaW9uOgorICAwID09IDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6c3RyaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA9PSA1CisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPj0gNQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcKKyAgcmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPT0gNQorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSAxMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMTAgPj0gMTAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6c3RyaW5nCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA9PSA1CisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPj0gNQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcKKyAgcmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LnNpemUoKSA9PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID09IDUKKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA+PSA1CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnR1cGxlPGludCxmbG9hdD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LnNpemUoKSA9PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID09IDUKKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA+PSA1CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnR1cGxlPGludCxmbG9hdD4KKyAgcmVzaXppbmcgYmlnZ2VyIGNoYW5nZXMgc2l6ZSBhbmQgY2FwYWNpdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LnNpemUoKSA9PSAxMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMTAgPT0gMTAKKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gMTAgKQord2l0aCBleHBhbnNpb246CisgIDEwID49IDEwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnR1cGxlPGludCxmbG9hdD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LnNpemUoKSA9PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID09IDUKKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA+PSA1CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnR1cGxlPGludCxmbG9hdD4KKyAgcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDAgKQord2l0aCBleHBhbnNpb246CisgIDAgPT0gMAorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID49IDUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6dHVwbGU8aW50LGZsb2F0PgorICByZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5CisgIFdlIGNhbiB1c2UgdGhlICdzd2FwIHRyaWNrJyB0byByZXNldCB0aGUgY2FwYWNpdHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPT0gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMCA9PSAwCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnR1cGxlPGludCxmbG9hdD4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LnNpemUoKSA9PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID09IDUKKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA+PSA1CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnR1cGxlPGludCxmbG9hdD4KKyAgcmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPT0gNQorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSAxMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMTAgPj0gMTAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6dHVwbGU8aW50LGZsb2F0PgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPT0gNQorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID49IDUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6dHVwbGU8aW50LGZsb2F0PgorICByZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKQord2l0aCBleHBhbnNpb246CisgIDUgPT0gNQorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID49IDUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVGVzdCBjYXNlIHdpdGggb25lIGFyZ3VtZW50CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBWYXJpYWRpY01hY3Jvcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1WYXJpYWRpY01hY3Jvcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1ZhcmlhZGljTWFjcm9zLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiB3aXRoIG1lc3NhZ2U6CiAgIG5vIGFzc2VydGlvbnMKIApAQCAtNTM5OCw4ICs3ODg1LDcgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggMHg8aGV4IGRpZ2l0cz4gPT0gYml0MzBhbmQzMSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMzIyMTIyNTQ3MiAoMHg8aGV4IGRpZ2l0cz4pID09IDMyMjEyMjU0NzIKQEAgLTU0MTAsOCArNzg5Niw3IEBACiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1GQUlMRUQgLSBidXQgd2FzIG9rOgorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEIC0gYnV0IHdhcyBvazoKICAgQ0hFQ0tfTk9GQUlMKCAxID09IDIgKQogCiAKQEAgLTU0MjMsMjUgKzc5MDgsMzIgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKIHdpdGggbWVzc2FnZToKICAgb29wcyEKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVGhyb3duIHN0cmluZyBsaXRlcmFscyBhcmUgdHJhbnNsYXRlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0V4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorZHVlIHRvIHVuZXhwZWN0ZWQgZXhjZXB0aW9uIHdpdGggbWVzc2FnZToKKyAgRm9yIHNvbWUgcmVhc29uIHNvbWVvbmUgaXMgdGhyb3dpbmcgYSBzdHJpbmcgbGl0ZXJhbCEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVHJhY2tlcgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc09wZW4oKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHMxLmlzT3BlbigpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCkBAIC01NDUzLDI2ICs3OTQ1LDIyIEBACiBQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHMxLmlzU3VjY2Vzc2Z1bGx5Q29tcGxldGVkKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggY3R4LmNvbXBsZXRlZEN5Y2xlKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc1N1Y2Nlc3NmdWxseUNvbXBsZXRlZCgpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCkBAIC01NDgzLDE0ICs3OTcxLDEyIEBACiBQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRlc3RDYXNlLmlzT3BlbigpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggczEuaXNPcGVuKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKQEAgLTU1MDIsMzIgKzc5ODgsMjcgQEAKIFBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggczEuaXNDb21wbGV0ZSgpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggczEuaXNTdWNjZXNzZnVsbHlDb21wbGV0ZWQoKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggY3R4LmNvbXBsZXRlZEN5Y2xlKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc1N1Y2Nlc3NmdWxseUNvbXBsZXRlZCgpID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtNTU0MCwzMiArODAyMSwyNyBAQAogUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZTIuaXNPcGVuKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzMWIuaXNPcGVuKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggY3R4LmNvbXBsZXRlZEN5Y2xlKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc0NvbXBsZXRlKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc1N1Y2Nlc3NmdWxseUNvbXBsZXRlZCgpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCkBAIC01NTc2LDE0ICs4MDUyLDEyIEBACiBQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRlc3RDYXNlLmlzT3BlbigpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggczEuaXNPcGVuKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKQEAgLTU1OTUsMzIgKzgwNjksMjcgQEAKIFBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggczEuaXNDb21wbGV0ZSgpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggczEuaXNTdWNjZXNzZnVsbHlDb21wbGV0ZWQoKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggY3R4LmNvbXBsZXRlZEN5Y2xlKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc1N1Y2Nlc3NmdWxseUNvbXBsZXRlZCgpID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQpAQCAtNTYzMywzOCArODEwMiwzMiBAQAogUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZTIuaXNPcGVuKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzMWIuaXNPcGVuKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggczIuaXNPcGVuKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBjdHguY29tcGxldGVkQ3ljbGUoKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRlc3RDYXNlLmlzQ29tcGxldGUoKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRlc3RDYXNlLmlzU3VjY2Vzc2Z1bGx5Q29tcGxldGVkKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKQEAgLTU2NzUsMTQgKzgxMzgsMTIgQEAKIFBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdGVzdENhc2UuaXNPcGVuKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzMS5pc09wZW4oKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQpAQCAtNTY5NCwxNCArODE1NSwxMiBAQAogUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzMi5pc09wZW4oKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCkBAIC01NzE0LDI2ICs4MTczLDIyIEBACiBQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRlc3RDYXNlMi5pc09wZW4oKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHMxYi5pc09wZW4oKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzMmIuaXNPcGVuKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBjdHguY29tcGxldGVkQ3ljbGUoKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKQEAgLTU3NDcsMjYgKzgyMDIsMjIgQEAKIFBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggY3R4LmNvbXBsZXRlZEN5Y2xlKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzMmIuaXNTdWNjZXNzZnVsbHlDb21wbGV0ZWQoKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRlc3RDYXNlMi5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdGVzdENhc2UyLmlzU3VjY2Vzc2Z1bGx5Q29tcGxldGVkKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKQEAgLTU3NzcsMTQgKzgyMjgsMTIgQEAKIFBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdGVzdENhc2UuaXNPcGVuKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzMS5pc09wZW4oKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQpAQCAtNTc5NiwxNCArODI0NSwxMiBAQAogUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzMi5pc09wZW4oKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCkBAIC01ODE2LDI2ICs4MjYzLDIyIEBACiBQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHRlc3RDYXNlMi5pc09wZW4oKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHMxYi5pc09wZW4oKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzMmIuaXNPcGVuKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBjdHguY29tcGxldGVkQ3ljbGUoKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKQEAgLTU4NDksNTAgKzgyOTIsNDIgQEAKIFBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggY3R4LmNvbXBsZXRlZEN5Y2xlKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzMmIuaXNDb21wbGV0ZSgpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggczJiLmlzU3VjY2Vzc2Z1bGx5Q29tcGxldGVkKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdGVzdENhc2UyLmlzU3VjY2Vzc2Z1bGx5Q29tcGxldGVkKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdGVzdENhc2UzLmlzT3BlbigpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggczFjLmlzT3BlbigpID09IGZhbHNlICkKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZSA9PSBmYWxzZQogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHMyYy5pc09wZW4oKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZTMuaXNTdWNjZXNzZnVsbHlDb21wbGV0ZWQoKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQpAQCAtNTkwMywxNCArODMzOCwxMiBAQAogUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc09wZW4oKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHMxLmlzT3BlbigpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCkBAIC01OTIyLDUxMSArODM1NSwzNyBAQAogUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzMi5pc09wZW4oKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHMyLmlzQ29tcGxldGUoKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1BhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHMxLmlzQ29tcGxldGUoKSA9PSBmYWxzZSApCiB3aXRoIGV4cGFuc2lvbjoKICAgZmFsc2UgPT0gZmFsc2UKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBzMS5pc0NvbXBsZXRlKCkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitQYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKQogd2l0aCBleHBhbnNpb246CiAgIGZhbHNlID09IGZhbHNlCiAKLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdGVzdENhc2UuaXNDb21wbGV0ZSgpICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRyYWNrZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc09wZW4oKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggczEuaXNPcGVuKCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVHJhY2tlcgotICBzdGFydCBhIGdlbmVyYXRvcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIGcxLmlzT3BlbigpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBnMS5pbmRleCgpID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDAgPT0gMAotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggZzEuaXNDb21wbGV0ZSgpID09IGZhbHNlICkKLXdpdGggZXhwYW5zaW9uOgotICBmYWxzZSA9PSBmYWxzZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggczEuaXNDb21wbGV0ZSgpID09IGZhbHNlICkKLXdpdGggZXhwYW5zaW9uOgotICBmYWxzZSA9PSBmYWxzZQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UcmFja2VyCi0gIHN0YXJ0IGEgZ2VuZXJhdG9yCi0gIGNsb3NlIG91dGVyIHNlY3Rpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBzMS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKQotd2l0aCBleHBhbnNpb246Ci0gIGZhbHNlID09IGZhbHNlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc1N1Y2Nlc3NmdWxseUNvbXBsZXRlZCgpID09IGZhbHNlICkKLXdpdGggZXhwYW5zaW9uOgotICBmYWxzZSA9PSBmYWxzZQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UcmFja2VyCi0gIHN0YXJ0IGEgZ2VuZXJhdG9yCi0gIGNsb3NlIG91dGVyIHNlY3Rpb24KLSAgUmUtZW50ZXIgZm9yIHNlY29uZCBnZW5lcmF0aW9uCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggdGVzdENhc2UyLmlzT3BlbigpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBzMWIuaXNPcGVuKCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIGcxYi5pc09wZW4oKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggZzFiLmluZGV4KCkgPT0gMSApCi13aXRoIGV4cGFuc2lvbjoKLSAgMSA9PSAxCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBzMS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKQotd2l0aCBleHBhbnNpb246Ci0gIGZhbHNlID09IGZhbHNlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBzMWIuaXNDb21wbGV0ZSgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBnMWIuaXNDb21wbGV0ZSgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCB0ZXN0Q2FzZTIuaXNDb21wbGV0ZSgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRyYWNrZXIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc09wZW4oKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggczEuaXNPcGVuKCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVHJhY2tlcgotICBzdGFydCBhIGdlbmVyYXRvcgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIGcxLmlzT3BlbigpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBnMS5pbmRleCgpID09IDAgKQotd2l0aCBleHBhbnNpb246Ci0gIDAgPT0gMAotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggZzEuaXNDb21wbGV0ZSgpID09IGZhbHNlICkKLXdpdGggZXhwYW5zaW9uOgotICBmYWxzZSA9PSBmYWxzZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggczEuaXNDb21wbGV0ZSgpID09IGZhbHNlICkKLXdpdGggZXhwYW5zaW9uOgotICBmYWxzZSA9PSBmYWxzZQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UcmFja2VyCi0gIHN0YXJ0IGEgZ2VuZXJhdG9yCi0gIFN0YXJ0IGEgbmV3IGlubmVyIHNlY3Rpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBzMi5pc09wZW4oKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggczIuaXNDb21wbGV0ZSgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBzMS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKQotd2l0aCBleHBhbnNpb246Ci0gIGZhbHNlID09IGZhbHNlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKQotd2l0aCBleHBhbnNpb246Ci0gIGZhbHNlID09IGZhbHNlCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRyYWNrZXIKLSAgc3RhcnQgYSBnZW5lcmF0b3IKLSAgU3RhcnQgYSBuZXcgaW5uZXIgc2VjdGlvbgotICBSZS1lbnRlciBmb3Igc2Vjb25kIGdlbmVyYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCB0ZXN0Q2FzZTIuaXNPcGVuKCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIHMxYi5pc09wZW4oKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggZzFiLmlzT3BlbigpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBnMWIuaW5kZXgoKSA9PSAxICkKLXdpdGggZXhwYW5zaW9uOgotICAxID09IDEKLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIHMyYi5pc09wZW4oKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggczJiLmlzQ29tcGxldGUoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggZzFiLmlzQ29tcGxldGUoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggczFiLmlzQ29tcGxldGUoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggdGVzdENhc2UyLmlzQ29tcGxldGUoKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UcmFja2VyCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgotLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggdGVzdENhc2UuaXNPcGVuKCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIHMxLmlzT3BlbigpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRyYWNrZXIKLSAgc3RhcnQgYSBnZW5lcmF0b3IKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBnMS5pc09wZW4oKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggZzEuaW5kZXgoKSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICAwID09IDAKLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIGcxLmlzQ29tcGxldGUoKSA9PSBmYWxzZSApCi13aXRoIGV4cGFuc2lvbjoKLSAgZmFsc2UgPT0gZmFsc2UKLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIHMxLmlzQ29tcGxldGUoKSA9PSBmYWxzZSApCi13aXRoIGV4cGFuc2lvbjoKLSAgZmFsc2UgPT0gZmFsc2UKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotVHJhY2tlcgotICBzdGFydCBhIGdlbmVyYXRvcgotICBGYWlsIGFuIGlubmVyIHNlY3Rpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBzMi5pc09wZW4oKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggczIuaXNDb21wbGV0ZSgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBzMi5pc1N1Y2Nlc3NmdWxseUNvbXBsZXRlZCgpID09IGZhbHNlICkKLXdpdGggZXhwYW5zaW9uOgotICBmYWxzZSA9PSBmYWxzZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggczEuaXNDb21wbGV0ZSgpID09IGZhbHNlICkKLXdpdGggZXhwYW5zaW9uOgotICBmYWxzZSA9PSBmYWxzZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggdGVzdENhc2UuaXNDb21wbGV0ZSgpID09IGZhbHNlICkKLXdpdGggZXhwYW5zaW9uOgotICBmYWxzZSA9PSBmYWxzZQotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1UcmFja2VyCi0gIHN0YXJ0IGEgZ2VuZXJhdG9yCi0gIEZhaWwgYW4gaW5uZXIgc2VjdGlvbgotICBSZS1lbnRlciBmb3Igc2Vjb25kIGdlbmVyYXRpb24KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCB0ZXN0Q2FzZTIuaXNPcGVuKCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIHMxYi5pc09wZW4oKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggZzFiLmlzT3BlbigpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBnMWIuaW5kZXgoKSA9PSAwICkKLXdpdGggZXhwYW5zaW9uOgotICAwID09IDAKLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIHMyYi5pc09wZW4oKSA9PSBmYWxzZSApCi13aXRoIGV4cGFuc2lvbjoKLSAgZmFsc2UgPT0gZmFsc2UKLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIGcxYi5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKQotd2l0aCBleHBhbnNpb246Ci0gIGZhbHNlID09IGZhbHNlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBzMWIuaXNDb21wbGV0ZSgpID09IGZhbHNlICkKLXdpdGggZXhwYW5zaW9uOgotICBmYWxzZSA9PSBmYWxzZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggdGVzdENhc2UyLmlzQ29tcGxldGUoKSA9PSBmYWxzZSApCi13aXRoIGV4cGFuc2lvbjoKLSAgZmFsc2UgPT0gZmFsc2UKLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIHRlc3RDYXNlMy5pc09wZW4oKSApCi13aXRoIGV4cGFuc2lvbjoKLSAgdHJ1ZQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggczFjLmlzT3BlbigpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBnMWMuaXNPcGVuKCkgKQotd2l0aCBleHBhbnNpb246Ci0gIHRydWUKLQotUGFydFRyYWNrZXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIGcxYy5pbmRleCgpID09IDEgKQotd2l0aCBleHBhbnNpb246Ci0gIDEgPT0gMQotCi1QYXJ0VHJhY2tlci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggczJjLmlzT3BlbigpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBzMmMuaXNDb21wbGV0ZSgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBnMWMuaXNDb21wbGV0ZSgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCBzMWMuaXNDb21wbGV0ZSgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLVBhcnRUcmFja2VyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCB0ZXN0Q2FzZTMuaXNDb21wbGV0ZSgpICkKLXdpdGggZXhwYW5zaW9uOgotICB0cnVlCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBjYW4gYmUgdHJhbnNsYXRlZAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC02NDQyLDUwICs4NDAxLDQyIEBACiBBcHByb3gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGQgPT0gYXBwcm94KCAxLjIzICkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMjMgPT0gQXBwcm94KCAxLjIzICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGQgPT0gYXBwcm94KCAxLjIyICkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMjMgPT0gQXBwcm94KCAxLjIyICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGQgPT0gYXBwcm94KCAxLjI0ICkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMjMgPT0gQXBwcm94KCAxLjI0ICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGQgIT0gYXBwcm94KCAxLjI1ICkgKQogd2l0aCBleHBhbnNpb246CiAgIDEuMjMgIT0gQXBwcm94KCAxLjI1ICkKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGFwcHJveCggZCApID09IDEuMjMgKQogd2l0aCBleHBhbnNpb246CiAgIEFwcHJveCggMS4yMyApID09IDEuMjMKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGFwcHJveCggZCApID09IDEuMjIgKQogd2l0aCBleHBhbnNpb246CiAgIEFwcHJveCggMS4yMyApID09IDEuMjIKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGFwcHJveCggZCApID09IDEuMjQgKQogd2l0aCBleHBhbnNpb246CiAgIEFwcHJveCggMS4yMyApID09IDEuMjQKIAotQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQXBwcm94LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGFwcHJveCggZCApICE9IDEuMjUgKQogd2l0aCBleHBhbnNpb246CiAgIEFwcHJveCggMS4yMyApICE9IDEuMjUKQEAgLTY0OTcsOCArODQ0OCw3IEBACiBWYXJpYWRpY01hY3Jvcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1WYXJpYWRpY01hY3Jvcy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1ZhcmlhZGljTWFjcm9zLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiB3aXRoIG1lc3NhZ2U6CiAgIG5vIGFzc2VydGlvbnMKIApAQCAtNjUwOSwxNCArODQ1OSwxMiBAQAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USEFUKCB2LCBWZWN0b3JDb250YWlucygxKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgeyAxLCAyLCAzIH0gQ29udGFpbnM6IDEKIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USEFUKCB2LCBWZWN0b3JDb250YWlucygyKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgeyAxLCAyLCAzIH0gQ29udGFpbnM6IDIKQEAgLTY1MjgsMjYgKzg0NzYsMjIgQEAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0tfVEhBVCggdiwgQ29udGFpbnModjIpICkKIHdpdGggZXhwYW5zaW9uOgogICB7IDEsIDIsIDMgfSBDb250YWluczogeyAxLCAyIH0KIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USEFUKCB2LCBDb250YWlucyh2MikgKQogd2l0aCBleHBhbnNpb246CiAgIHsgMSwgMiwgMyB9IENvbnRhaW5zOiB7IDEsIDIsIDMgfQogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX1RIQVQoIHYsIENvbnRhaW5zKGVtcHR5KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgeyAxLCAyLCAzIH0gQ29udGFpbnM6IHsgIH0KIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USEFUKCBlbXB0eSwgQ29udGFpbnMoZW1wdHkpICkKIHdpdGggZXhwYW5zaW9uOgogICB7ICB9IENvbnRhaW5zOiB7ICB9CkBAIC02NTU5LDggKzg1MDMsNyBAQAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USEFUKCB2LCBWZWN0b3JDb250YWlucygxKSAmJiBWZWN0b3JDb250YWlucygyKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgeyAxLCAyLCAzIH0gKCBDb250YWluczogMSBhbmQgQ29udGFpbnM6IDIgKQpAQCAtNjU3MiwyMCArODUxNSwxNyBAQAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USEFUKCB2LCBFcXVhbHModikgKQogd2l0aCBleHBhbnNpb246CiAgIHsgMSwgMiwgMyB9IEVxdWFsczogeyAxLCAyLCAzIH0KIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USEFUKCBlbXB0eSwgRXF1YWxzKGVtcHR5KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgeyAgfSBFcXVhbHM6IHsgIH0KIAotTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS19USEFUKCB2LCBFcXVhbHModjIpICkKIHdpdGggZXhwYW5zaW9uOgogICB7IDEsIDIsIDMgfSBFcXVhbHM6IHsgMSwgMiwgMyB9CkBAIC02NTk3LDI2ICs4NTM3LDIyIEBACiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX1RIQVQoIHYsIFVub3JkZXJlZEVxdWFscyh2KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgeyAxLCAyLCAzIH0gVW5vcmRlcmVkRXF1YWxzOiB7IDEsIDIsIDMgfQogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLX1RIQVQoIGVtcHR5LCBVbm9yZGVyZWRFcXVhbHMoZW1wdHkpICkKIHdpdGggZXhwYW5zaW9uOgogICB7ICB9IFVub3JkZXJlZEVxdWFsczogeyAgfQogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggcGVybXV0ZWQsIFVub3JkZXJlZEVxdWFscyh2KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgeyAxLCAzLCAyIH0gVW5vcmRlcmVkRXF1YWxzOiB7IDEsIDIsIDMgfQogCi1NYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggcGVybXV0ZWQsIFVub3JkZXJlZEVxdWFscyh2KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgeyAyLCAzLCAxIH0gVW5vcmRlcmVkRXF1YWxzOiB7IDEsIDIsIDMgfQpAQCAtNjcxNSwxNiArODY1MSwxMyBAQAogRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0V4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIUk9XU19BUyggdGhpc1Rocm93cygpLCBzdGQ6OmRvbWFpbl9lcnJvciApCiAKLUV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0V4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX05PVEhST1coIHRoaXNEb2VzbnRUaHJvdygpICkKIAotRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhST1dTKCB0aGlzVGhyb3dzKCkgKQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC02Nzk3LDggKzg3MzAsNyBAQAogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLXdhcm5pbmc6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IHdhcm5pbmc6CiAgIFVuY29tbWVudCB0aGUgY29kZSBpbiB0aGlzIHRlc3QgdG8gY2hlY2sgdGhhdCBpdCBnaXZlcyBhIHNlbnNpYmxlIGNvbXBpbGVyCiAgIGVycm9yCiAKQEAgLTY4MTEsOCArODc0Myw3IEBACiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ogotd2FybmluZzoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogd2FybmluZzoKICAgVW5jb21tZW50IHRoZSBjb2RlIGluIHRoaXMgdGVzdCB0byBjaGVjayB0aGF0IGl0IGdpdmVzIGEgc2Vuc2libGUgY29tcGlsZXIKICAgZXJyb3IKIApAQCAtNjgyNSw4ICs4NzU2LDcgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogWC9sZXZlbC8wL2IKQEAgLTY4MzQsOCArODc2NCw3IEBACiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFgvbGV2ZWwvMS9hCkBAIC02ODQzLDggKzg3NzIsNyBAQAogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBYL2xldmVsLzEvYgpAQCAtNjg1Miw4ICs4NzgwLDcgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogWG1sRW5jb2RlCkBAIC02ODYyLDggKzg3ODksNyBAQAogWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVhtbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBlbmNvZGUoICJub3JtYWwgc3RyaW5nIiApID09ICJub3JtYWwgc3RyaW5nIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgIm5vcm1hbCBzdHJpbmciID09ICJub3JtYWwgc3RyaW5nIgpAQCAtNjg3NSw4ICs4ODAxLDcgQEAKIFhtbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1YbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZW5jb2RlKCAiIiApID09ICIiICkKIHdpdGggZXhwYW5zaW9uOgogICAiIiA9PSAiIgpAQCAtNjg4OCw4ICs4ODEzLDcgQEAKIFhtbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1YbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZW5jb2RlKCAic21pdGggJiBqb25lcyIgKSA9PSAic21pdGggJmFtcDsgam9uZXMiICkKIHdpdGggZXhwYW5zaW9uOgogICAic21pdGggJmFtcDsgam9uZXMiID09ICJzbWl0aCAmYW1wOyBqb25lcyIKQEAgLTY5MDEsOCArODgyNSw3IEBACiBYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGVuY29kZSggInNtaXRoIDwgam9uZXMiICkgPT0gInNtaXRoICZsdDsgam9uZXMiICkKIHdpdGggZXhwYW5zaW9uOgogICAic21pdGggJmx0OyBqb25lcyIgPT0gInNtaXRoICZsdDsgam9uZXMiCkBAIC02OTE0LDE0ICs4ODM3LDEyIEBACiBYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGVuY29kZSggInNtaXRoID4gam9uZXMiICkgPT0gInNtaXRoID4gam9uZXMiICkKIHdpdGggZXhwYW5zaW9uOgogICAic21pdGggPiBqb25lcyIgPT0gInNtaXRoID4gam9uZXMiCiAKLVhtbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBlbmNvZGUoICJzbWl0aCBdXT4gam9uZXMiICkgPT0gInNtaXRoIF1dJmd0OyBqb25lcyIgKQogd2l0aCBleHBhbnNpb246CiAgICJzbWl0aCBdXSZndDsgam9uZXMiCkBAIC02OTM1LDE2ICs4ODU2LDE0IEBACiBYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGVuY29kZSggc3RyaW5nV2l0aFF1b3RlcyApID09IHN0cmluZ1dpdGhRdW90ZXMgKQogd2l0aCBleHBhbnNpb246CiAgICJkb24ndCAicXVvdGUiIG1lIG9uIHRoYXQiCiAgID09CiAgICJkb24ndCAicXVvdGUiIG1lIG9uIHRoYXQiCiAKLVhtbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBlbmNvZGUoIHN0cmluZ1dpdGhRdW90ZXMsIENhdGNoOjpYbWxFbmNvZGU6OkZvckF0dHJpYnV0ZXMgKSA9PSAiZG9uJ3QgJnF1b3Q7cXVvdGUmcXVvdDsgbWUgb24gdGhhdCIgKQogd2l0aCBleHBhbnNpb246CiAgICJkb24ndCAmcXVvdDtxdW90ZSZxdW90OyBtZSBvbiB0aGF0IgpAQCAtNjk1OCw4ICs4ODc3LDcgQEAKIFhtbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1YbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggZW5jb2RlKCAiW1x4MDFdIiApID09ICJbXFx4MDFdIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgIltceDAxXSIgPT0gIltceDAxXSIKQEAgLTY5NzEsMzIgKzg4ODksMjg1IEBACiBYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGVuY29kZSggIltceDdGXSIgKSA9PSAiW1xceDdGXSIgKQogd2l0aCBleHBhbnNpb246CiAgICJbXHg3Rl0iID09ICJbXHg3Rl0iCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1htbEVuY29kZTogVVRGLTgKKyAgVmFsaWQgdXRmLTggc3RyaW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKHU4IkhlcmUgYmUg8J+RviIpID09IHU4IkhlcmUgYmUg8J+RviIgKQord2l0aCBleHBhbnNpb246CisgICJIZXJlIGJlIPCfkb4iID09ICJIZXJlIGJlIPCfkb4iCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKHU4IsWhxaEiKSA9PSB1OCLFocWhIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIsWhxaEiID09ICLFocWhIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhERlx4QkYiKSA9PSAiXHhERlx4QkYiICkKK3dpdGggZXhwYW5zaW9uOgorICAi378iID09ICLfvyIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RTBceEEwXHg4MCIpID09ICJceEUwXHhBMFx4ODAiICkKK3dpdGggZXhwYW5zaW9uOgorICAi4KCAIiA9PSAi4KCAIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhFRFx4OUZceEJGIikgPT0gIlx4RURceDlGXHhCRiIgKQord2l0aCBleHBhbnNpb246CisgICLtn78iID09ICLtn78iCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEVFXHg4MFx4ODAiKSA9PSAiXHhFRVx4ODBceDgwIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIu6AgCIgPT0gIu6AgCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RUZceEJGXHhCRiIpID09ICJceEVGXHhCRlx4QkYiICkKK3dpdGggZXhwYW5zaW9uOgorICAi77+/IiA9PSAi77+/IgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhGMFx4OTBceDgwXHg4MCIpID09ICJceEYwXHg5MFx4ODBceDgwIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIvCQgIAiID09ICLwkICAIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhGNFx4OEZceEJGXHhCRiIpID09ICJceEY0XHg4Rlx4QkZceEJGIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIvSPv78iID09ICL0j7+/IgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitYbWxFbmNvZGU6IFVURi04CisgIEludmFsaWQgdXRmLTggc3RyaW5ncworICBWYXJpb3VzIGJyb2tlbiBzdHJpbmdzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIkhlcmUgXHhGRiBiZSDwn5G+IikgPT0gdTgiSGVyZSBcXHhGRiBiZSDwn5G+IiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIkhlcmUgXHhGRiBiZSDwn5G+IiA9PSAiSGVyZSBceEZGIGJlIPCfkb4iCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEZGIikgPT0gIlxceEZGIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4RkYiID09ICJceEZGIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhDNVx4QzVceEEwIikgPT0gdTgiXFx4QzXFoCIgKQord2l0aCBleHBhbnNpb246CisgICJceEM1xaAiID09ICJceEM1xaAiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEY0XHg5MFx4ODBceDgwIikgPT0gdTgiXFx4RjRcXHg5MFxceDgwXFx4ODAiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhGNFx4OTBceDgwXHg4MCIgPT0gIlx4RjRceDkwXHg4MFx4ODAiCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1htbEVuY29kZTogVVRGLTgKKyAgSW52YWxpZCB1dGYtOCBzdHJpbmdzCisgIE92ZXJsb25nIGVuY29kaW5ncworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEMwXHg4MCIpID09IHU4IlxceEMwXFx4ODAiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhDMFx4ODAiID09ICJceEMwXHg4MCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RjBceDgwXHg4MFx4ODAiKSA9PSB1OCJcXHhGMFxceDgwXFx4ODBcXHg4MCIgKQord2l0aCBleHBhbnNpb246CisgICJceEYwXHg4MFx4ODBceDgwIiA9PSAiXHhGMFx4ODBceDgwXHg4MCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4QzFceEJGIikgPT0gdTgiXFx4QzFcXHhCRiIgKQord2l0aCBleHBhbnNpb246CisgICJceEMxXHhCRiIgPT0gIlx4QzFceEJGIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhFMFx4OUZceEJGIikgPT0gdTgiXFx4RTBcXHg5RlxceEJGIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4RTBceDlGXHhCRiIgPT0gIlx4RTBceDlGXHhCRiIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RjBceDhGXHhCRlx4QkYiKSA9PSB1OCJcXHhGMFxceDhGXFx4QkZcXHhCRiIgKQord2l0aCBleHBhbnNpb246CisgICJceEYwXHg4Rlx4QkZceEJGIiA9PSAiXHhGMFx4OEZceEJGXHhCRiIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorWG1sRW5jb2RlOiBVVEYtOAorICBJbnZhbGlkIHV0Zi04IHN0cmluZ3MKKyAgU3Vycm9nYXRlIHBhaXJzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RURceEEwXHg4MCIpID09ICJceEVEXHhBMFx4ODAiICkKK3dpdGggZXhwYW5zaW9uOgorICAi7aCAIiA9PSAi7aCAIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhFRFx4QUZceEJGIikgPT0gIlx4RURceEFGXHhCRiIgKQord2l0aCBleHBhbnNpb246CisgICLtr78iID09ICLtr78iCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEVEXHhCMFx4ODAiKSA9PSAiXHhFRFx4QjBceDgwIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIu2wgCIgPT0gIu2wgCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RURceEJGXHhCRiIpID09ICJceEVEXHhCRlx4QkYiICkKK3dpdGggZXhwYW5zaW9uOgorICAi7b+/IiA9PSAi7b+/IgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitYbWxFbmNvZGU6IFVURi04CisgIEludmFsaWQgdXRmLTggc3RyaW5ncworICBJbnZhbGlkIHN0YXJ0IGJ5dGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHg4MCIpID09IHU4IlxceDgwIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4ODAiID09ICJceDgwIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHg4MSIpID09IHU4IlxceDgxIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4ODEiID09ICJceDgxIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhCQyIpID09IHU4IlxceEJDIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4QkMiID09ICJceEJDIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhCRiIpID09IHU4IlxceEJGIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4QkYiID09ICJceEJGIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhGNVx4ODBceDgwXHg4MCIpID09IHU4IlxceEY1XFx4ODBcXHg4MFxceDgwIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4RjVceDgwXHg4MFx4ODAiID09ICJceEY1XHg4MFx4ODBceDgwIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhGNlx4ODBceDgwXHg4MCIpID09IHU4IlxceEY2XFx4ODBcXHg4MFxceDgwIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4RjZceDgwXHg4MFx4ODAiID09ICJceEY2XHg4MFx4ODBceDgwIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhGN1x4ODBceDgwXHg4MCIpID09IHU4IlxceEY3XFx4ODBcXHg4MFxceDgwIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4RjdceDgwXHg4MFx4ODAiID09ICJceEY3XHg4MFx4ODBceDgwIgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitYbWxFbmNvZGU6IFVURi04CisgIEludmFsaWQgdXRmLTggc3RyaW5ncworICBNaXNzaW5nIGNvbnRpbnVhdGlvbiBieXRlKHMpCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4REUiKSA9PSB1OCJcXHhERSIgKQord2l0aCBleHBhbnNpb246CisgICJceERFIiA9PSAiXHhERSIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4REYiKSA9PSB1OCJcXHhERiIgKQord2l0aCBleHBhbnNpb246CisgICJceERGIiA9PSAiXHhERiIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RTAiKSA9PSB1OCJcXHhFMCIgKQord2l0aCBleHBhbnNpb246CisgICJceEUwIiA9PSAiXHhFMCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RUYiKSA9PSB1OCJcXHhFRiIgKQord2l0aCBleHBhbnNpb246CisgICJceEVGIiA9PSAiXHhFRiIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RjAiKSA9PSB1OCJcXHhGMCIgKQord2l0aCBleHBhbnNpb246CisgICJceEYwIiA9PSAiXHhGMCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RjQiKSA9PSB1OCJcXHhGNCIgKQord2l0aCBleHBhbnNpb246CisgICJceEY0IiA9PSAiXHhGNCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RTBceDgwIikgPT0gdTgiXFx4RTBcXHg4MCIgKQord2l0aCBleHBhbnNpb246CisgICJceEUwXHg4MCIgPT0gIlx4RTBceDgwIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhFMFx4QkYiKSA9PSB1OCJcXHhFMFxceEJGIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4RTBceEJGIiA9PSAiXHhFMFx4QkYiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEUxXHg4MCIpID09IHU4IlxceEUxXFx4ODAiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhFMVx4ODAiID09ICJceEUxXHg4MCIKKworWG1sLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBlbmNvZGUoIlx4RjBceDgwIikgPT0gdTgiXFx4RjBcXHg4MCIgKQord2l0aCBleHBhbnNpb246CisgICJceEYwXHg4MCIgPT0gIlx4RjBceDgwIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhGNFx4ODAiKSA9PSB1OCJcXHhGNFxceDgwIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4RjRceDgwIiA9PSAiXHhGNFx4ODAiCisKK1htbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggZW5jb2RlKCJceEYwXHg4MFx4ODAiKSA9PSB1OCJcXHhGMFxceDgwXFx4ODAiICkKK3dpdGggZXhwYW5zaW9uOgorICAiXHhGMFx4ODBceDgwIiA9PSAiXHhGMFx4ODBceDgwIgorCitYbWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGVuY29kZSgiXHhGNFx4ODBceDgwIikgPT0gdTgiXFx4RjRcXHg4MFxceDgwIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgIlx4RjRceDgwXHg4MCIgPT0gIlx4RjRceDgwXHg4MCIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogYXJyYXk8aW50LCBOPiAtPiB0b1N0cmluZwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIGVtcHR5ICkgPT0gInsgIH0iICkKIHdpdGggZXhwYW5zaW9uOgogICAieyAgfSIgPT0gInsgIH0iCiAKLVRvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggQ2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBvbmVWYWx1ZSApID09ICJ7IDQyIH0iICkKIHdpdGggZXhwYW5zaW9uOgogICAieyA0MiB9IiA9PSAieyA0MiB9IgogCi1Ub1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggdHdvVmFsdWVzICkgPT0gInsgNDIsIDI1MCB9IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgNDIsIDI1MCB9IiA9PSAieyA0MiwgMjUwIH0iCkBAIC03MDA3LDggKzkxNzgsNyBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB4ID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMApAQCAtNzAxOSw4ICs5MTg5LDcgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggb2JqLnByb3AgIT0gMCApCiB3aXRoIGV4cGFuc2lvbjoKICAgMHg8aGV4IGRpZ2l0cz4gIT0gMApAQCAtNzAzMSwxNCArOTIwMCwxMiBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDS0VEX0VMU0UoIGZsYWcgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdGVzdENoZWNrZWRFbHNlKCB0cnVlICkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKQEAgLTcwNjUsMTQgKzkyMzIsMTIgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0tFRF9JRiggZmxhZyApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZXN0Q2hlY2tlZElmKCB0cnVlICkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKQEAgLTcwOTksMjYgKzkyNjQsMjIgQEAKIENvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdW5zaWduZWRfY2hhcl92YXIgPT0gMSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMSA9PSAxCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB1bnNpZ25lZF9zaG9ydF92YXIgPT0gMSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMSA9PSAxCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB1bnNpZ25lZF9pbnRfdmFyID09IDEgKQogd2l0aCBleHBhbnNpb246CiAgIDEgPT0gMQogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdW5zaWduZWRfbG9uZ192YXIgPT0gMSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMSA9PSAxCkBAIC03MTI5LDI2ICs5MjkwLDIyIEBACiBDb25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGxvbmdfdmFyID09IHVuc2lnbmVkX2NoYXJfdmFyICkKIHdpdGggZXhwYW5zaW9uOgogICAxID09IDEKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGxvbmdfdmFyID09IHVuc2lnbmVkX3Nob3J0X3ZhciApCiB3aXRoIGV4cGFuc2lvbjoKICAgMSA9PSAxCiAKLUNvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbmRpdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBsb25nX3ZhciA9PSB1bnNpZ25lZF9pbnRfdmFyICkKIHdpdGggZXhwYW5zaW9uOgogICAxID09IDEKIAotQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGxvbmdfdmFyID09IHVuc2lnbmVkX2xvbmdfdmFyICkKIHdpdGggZXhwYW5zaW9uOgogICAxID09IDEKQEAgLTcxNjEsOCArOTMxOCw3IEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGV2ZW4gbW9yZSBuZXN0ZWQgU0VDVElPTiB0ZXN0cwpAQCAtNzE3Miw4ICs5MzI4LDcgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZXZlbiBtb3JlIG5lc3RlZCBTRUNUSU9OIHRlc3RzCkBAIC03MTgyLDggKzkzMzcsNyBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBmaXJzdCB0YWcKQEAgLTcyMTUsNiArOTM2OSwxNiBAQAogICBQcmV2aW91cyBpbmZvIHNob3VsZCBub3QgYmUgc2VlbgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitqdXN0IGZhaWx1cmUgYWZ0ZXIgdW5zY29wZWQgaW5mbworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBGQUlMRUQ6CitleHBsaWNpdGx5IHdpdGggbWVzc2FnZToKKyAgcHJldmlvdXMgdW5zY29wZWQgaW5mbyBTSE9VTEQgbm90IGJlIHNlZW4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoganVzdCBpbmZvCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC03MjI0LDEzICs5Mzg4LDIxIEBACiBObyBhc3NlcnRpb25zIGluIHRlc3QgY2FzZSAnanVzdCBpbmZvJwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitqdXN0IHVuc2NvcGVkIGluZm8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworCitObyBhc3NlcnRpb25zIGluIHRlc3QgY2FzZSAnanVzdCB1bnNjb3BlZCBpbmZvJworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsb25nIGxvbmcKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggbCA9PSBzdGQ6Om51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz46Om1heCgpICkKIHdpdGggZXhwYW5zaW9uOgogICA5MjIzMzcyMDM2ODU0Nzc1ODA3ICgweDxoZXggZGlnaXRzPikKQEAgLTcyMzksNyArOTQxMSw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxvb3BlZCBTRUNUSU9OIHRlc3RzCi0gIHMxCisgIGIgaXMgY3VycmVudGx5OiAwCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCkBAIC03MjUwLDYgKzk0MjIsMTE0IEBACiAgIDAgPiAxCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvb3BlZCBTRUNUSU9OIHRlc3RzCisgIGIgaXMgY3VycmVudGx5OiAxCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKKyAgQ0hFQ0soIGIgPiBhICkKK3dpdGggZXhwYW5zaW9uOgorICAxID4gMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb29wZWQgU0VDVElPTiB0ZXN0cworICBiIGlzIGN1cnJlbnRseTogMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBiID4gYSApCit3aXRoIGV4cGFuc2lvbjoKKyAgMiA+IDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9vcGVkIFNFQ1RJT04gdGVzdHMKKyAgYiBpcyBjdXJyZW50bHk6IDMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggYiA+IGEgKQord2l0aCBleHBhbnNpb246CisgIDMgPiAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvb3BlZCBTRUNUSU9OIHRlc3RzCisgIGIgaXMgY3VycmVudGx5OiA0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGIgPiBhICkKK3dpdGggZXhwYW5zaW9uOgorICA0ID4gMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb29wZWQgU0VDVElPTiB0ZXN0cworICBiIGlzIGN1cnJlbnRseTogNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBiID4gYSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA+IDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9vcGVkIFNFQ1RJT04gdGVzdHMKKyAgYiBpcyBjdXJyZW50bHk6IDYKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggYiA+IGEgKQord2l0aCBleHBhbnNpb246CisgIDYgPiAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2xvb3BlZCBTRUNUSU9OIHRlc3RzCisgIGIgaXMgY3VycmVudGx5OiA3CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIGIgPiBhICkKK3dpdGggZXhwYW5zaW9uOgorICA3ID4gMQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitsb29wZWQgU0VDVElPTiB0ZXN0cworICBiIGlzIGN1cnJlbnRseTogOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIENIRUNLKCBiID4gYSApCit3aXRoIGV4cGFuc2lvbjoKKyAgOCA+IDEKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbG9vcGVkIFNFQ1RJT04gdGVzdHMKKyAgYiBpcyBjdXJyZW50bHk6IDkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggYiA+IGEgKQord2l0aCBleHBhbnNpb246CisgIDkgPiAxCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxvb3BlZCB0ZXN0cwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtNzI2OSw4ICs5NTQ5LDcgQEAKIHdpdGggbWVzc2FnZToKICAgVGVzdGluZyBpZiBmaWJbMV0gKDEpIGlzIGV2ZW4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soICggZmliW2ldICUgMiApID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMApAQCAtNzI5MSw4ICs5NTcwLDcgQEAKIHdpdGggbWVzc2FnZToKICAgVGVzdGluZyBpZiBmaWJbNF0gKDUpIGlzIGV2ZW4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soICggZmliW2ldICUgMiApID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMApAQCAtNzMxNCw5ICs5NTkyLDI4IEBACiAgIFRlc3RpbmcgaWYgZmliWzddICgyMSkgaXMgZXZlbgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittaXggaW5mbywgdW5zY29wZWQgaW5mbyBhbmQgd2FybmluZworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiB3YXJuaW5nOgorICBpbmZvCisgIHVuc2NvcGVkIGluZm8KKyAgYW5kIHdhcm4gbWF5IG1peAorCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiB3YXJuaW5nOgorICBpbmZvCisgIHVuc2NvcGVkIGluZm8KKyAgdGhleSBhcmUgbm90IGNsZWFyZWQgYWZ0ZXIgd2FybmluZ3MKKworCitObyBhc3NlcnRpb25zIGluIHRlc3QgY2FzZSAnbWl4IGluZm8sIHVuc2NvcGVkIGluZm8gYW5kIHdhcm5pbmcnCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIG1vcmUgbmVzdGVkIFNFQ1RJT04gdGVzdHMKLSAgczEKLSAgczIKKyAgZG9lc24ndCBlcXVhbAorICBlcXVhbAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgpAQCAtNzMyOCw2MSArOTYyNSw1NiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBtb3JlIG5lc3RlZCBTRUNUSU9OIHRlc3RzCi0gIHMxCi0gIHMzCisgIGRvZXNuJ3QgZXF1YWwKKyAgbm90IGVxdWFsCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGEgIT0gYiApCiB3aXRoIGV4cGFuc2lvbjoKICAgMSAhPSAyCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIG1vcmUgbmVzdGVkIFNFQ1RJT04gdGVzdHMKLSAgczEKLSAgczQKKyAgZG9lc24ndCBlcXVhbAorICBsZXNzIHRoYW4KIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggYSA8IGIgKQogd2l0aCBleHBhbnNpb246CiAgIDEgPCAyCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIG5lc3RlZCBTRUNUSU9OIHRlc3RzCi0gIHMxCisgIGRvZXNuJ3QgZXF1YWwKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggYSAhPSBiICkKIHdpdGggZXhwYW5zaW9uOgogICAxICE9IDIKIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggYiAhPSBhICkKIHdpdGggZXhwYW5zaW9uOgogICAyICE9IDEKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbmVzdGVkIFNFQ1RJT04gdGVzdHMKLSAgczEKLSAgczIKKyAgZG9lc24ndCBlcXVhbAorICBub3QgZXF1YWwKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggYSAhPSBiICkKIHdpdGggZXhwYW5zaW9uOgogICAxICE9IDIKQEAgLTczOTMsOCArOTY4NSw3IEBACiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHMgPT0gIjciICkKIHdpdGggZXhwYW5zaW9uOgogICAiNyIgPT0gIjciCkBAIC03NDA1LDggKzk2OTYsNyBAQAogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggdGkgPT0gdHlwZWlkKGludCkgKQogd2l0aCBleHBhbnNpb246CiAgIHs/fSA9PSB7P30KQEAgLTc0MTcsOCArOTcwNywzMCBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitub3QgcHJpbnRzIHVuc2NvcGVkIGluZm8gZnJvbSBwcmV2aW91cyBmYWlsdXJlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHRydWUgKQord2l0aCBtZXNzYWdlOgorICB0aGlzIE1BWSBiZSBzZWVuIG9ubHkgZm9yIHRoZSBGSVJTVCBhc3NlcnRpb24gSUYgaW5mbyBpcyBwcmludGVkIGZvciBwYXNzaW5nCisgIGFzc2VydGlvbnMKKworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCB0cnVlICkKK3dpdGggbWVzc2FnZToKKyAgdGhpcyBNQVkgYmUgc2VlbiBvbmx5IGZvciB0aGUgU0VDT05EIGFzc2VydGlvbiBJRiBpbmZvIGlzIHByaW50ZWQgZm9yIHBhc3NpbmcKKyAgYXNzZXJ0aW9ucworCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBGQUlMRUQ6CisgIFJFUVVJUkUoIGZhbHNlICkKK3dpdGggbWVzc2FnZToKKyAgdGhpcyBTSE9VTEQgYmUgc2VlbgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBudWxsIHN0cmluZ3MKQEAgLTc0MjYsMTQgKzk3MzgsMTIgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggbWFrZVN0cmluZyggZmFsc2UgKSAhPSBzdGF0aWNfY2FzdDxjaGFyKj4oMCkgKQogd2l0aCBleHBhbnNpb246CiAgICJ2YWxpZCBzdHJpbmciICE9IHtudWxsIHN0cmluZ30KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggbWFrZVN0cmluZyggdHJ1ZSApID09IHN0YXRpY19jYXN0PGNoYXIqPigwKSApCiB3aXRoIGV4cGFuc2lvbjoKICAge251bGwgc3RyaW5nfSA9PSB7bnVsbCBzdHJpbmd9CkBAIC03NDQ0LDggKzk3NTQsNyBAQAogVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBwdHIuZ2V0KCkgPT0gMCApCiB3aXRoIGV4cGFuc2lvbjoKICAgMCA9PSAwCkBAIC03NDU2LDggKzk3NjUsNyBAQAogVG9TdHJpbmdQYWlyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRvU3RyaW5nUGFpci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nUGFpci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggcGFpciApID09ICJ7IHsgNDIsIFwiQXJ0aHVyXCIgfSwgeyBcIkZvcmRcIiwgMjQgfSB9IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgeyA0MiwgIkFydGh1ciIgfSwgeyAiRm9yZCIsIDI0IH0gfSIKQEAgLTc0NzAsNDAgKzk3NzgsODEgQEAKIFRyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ucmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggcCA9PSAwICkKIHdpdGggZXhwYW5zaW9uOgogICAwID09IDAKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHJpbnQgdW5zY29wZWQgaW5mbyBpZiBwYXNzaW5nIHVuc2NvcGVkIGluZm8gaXMgcHJpbnRlZAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHRydWUgKQord2l0aCBtZXNzYWdlOgorICB0aGlzIE1BWSBiZSBzZWVuIElGIGluZm8gaXMgcHJpbnRlZCBmb3IgcGFzc2luZyBhc3NlcnRpb25zCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3ByaW50cyB1bnNjb3BlZCBpbmZvIG9uIGZhaWx1cmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogRkFJTEVEOgorICBSRVFVSVJFKCBmYWxzZSApCit3aXRoIG1lc3NhZ2VzOgorICB0aGlzIFNIT1VMRCBiZSBzZWVuCisgIHRoaXMgU0hPVUxEIGFsc28gYmUgc2VlbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitwcmludHMgdW5zY29wZWQgaW5mbyBvbmx5IGZvciB0aGUgZmlyc3QgYXNzZXJ0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKKyAgQ0hFQ0soIGZhbHNlICkKK3dpdGggbWVzc2FnZToKKyAgdGhpcyBTSE9VTEQgYmUgc2VlbiBvbmx5IE9OQ0UKKworTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBDSEVDSyggdHJ1ZSApCisKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHRydWUgKQord2l0aCBtZXNzYWdlOgorICB0aGlzIE1BWSBhbHNvIGJlIHNlZW4gb25seSBPTkNFIElGIGluZm8gaXMgcHJpbnRlZCBmb3IgcGFzc2luZyBhc3NlcnRpb25zCisKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgQ0hFQ0soIHRydWUgKQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiByYW5kb20gU0VDVElPTiB0ZXN0cwotICBzMQorICBkb2Vzbid0IGVxdWFsCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGEgIT0gYiApCiB3aXRoIGV4cGFuc2lvbjoKICAgMSAhPSAyCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGIgIT0gYSApCiB3aXRoIGV4cGFuc2lvbjoKICAgMiAhPSAxCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHJhbmRvbSBTRUNUSU9OIHRlc3RzCi0gIHMyCisgIG5vdCBlcXVhbAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBhICE9IGIgKQogd2l0aCBleHBhbnNpb246CiAgIDEgIT0gMgpAQCAtNzUxNSwxNCArOTg2NCwxMiBAQAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAiYiIsICJ6IiApICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggbGV0dGVycyA9PSAiYXpjZGVmY2ciICkKIHdpdGggZXhwYW5zaW9uOgogICAiYXpjZGVmY2ciID09ICJhemNkZWZjZyIKQEAgLTc1MzQsMTQgKzk4ODEsMTIgQEAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIENhdGNoOjpyZXBsYWNlSW5QbGFjZSggbGV0dGVycywgImMiLCAieiIgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIGxldHRlcnMgPT0gImFiemRlZnpnIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgImFiemRlZnpnIiA9PSAiYWJ6ZGVmemciCkBAIC03NTUzLDE0ICs5ODk4LDEyIEBACiBTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBDYXRjaDo6cmVwbGFjZUluUGxhY2UoIGxldHRlcnMsICJhIiwgInoiICkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBsZXR0ZXJzID09ICJ6YmNkZWZjZyIgKQogd2l0aCBleHBhbnNpb246CiAgICJ6YmNkZWZjZyIgPT0gInpiY2RlZmNnIgpAQCAtNzU3MiwxNCArOTkxNSwxMiBAQAogU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAiZyIsICJ6IiApICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggbGV0dGVycyA9PSAiYWJjZGVmY3oiICkKIHdpdGggZXhwYW5zaW9uOgogICAiYWJjZGVmY3oiID09ICJhYmNkZWZjeiIKQEAgLTc1OTEsMTQgKzk5MzIsMTIgQEAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIENhdGNoOjpyZXBsYWNlSW5QbGFjZSggbGV0dGVycywgbGV0dGVycywgInJlcGxhY2VkIiApICkKIHdpdGggZXhwYW5zaW9uOgogICB0cnVlCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggbGV0dGVycyA9PSAicmVwbGFjZWQiICkKIHdpdGggZXhwYW5zaW9uOgogICAicmVwbGFjZWQiID09ICJyZXBsYWNlZCIKQEAgLTc2MTAsMTQgKzk5NDksMTIgQEAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0tfRkFMU0UoIENhdGNoOjpyZXBsYWNlSW5QbGFjZSggbGV0dGVycywgIngiLCAieiIgKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgIWZhbHNlCiAKLVN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggbGV0dGVycyA9PSBsZXR0ZXJzICkKIHdpdGggZXhwYW5zaW9uOgogICAiYWJjZGVmY2ciID09ICJhYmNkZWZjZyIKQEAgLTc2MjksMTQgKzk5NjYsMTIgQEAKIFN0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitTdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIENhdGNoOjpyZXBsYWNlSW5QbGFjZSggcywgIiciLCAifCciICkgKQogd2l0aCBleHBhbnNpb246CiAgIHRydWUKIAotU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCBzID09ICJkaWRufCd0IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgImRpZG58J3QiID09ICJkaWRufCd0IgpAQCAtNzY3NCwxNCArMTAwMDksMzUgQEAKICAgaSA6PSA3CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0YWNrcyB1bnNjb3BlZCBpbmZvIGluIGxvb3BzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK01lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKKyAgQ0hFQ0soIGZhbHNlICkKK3dpdGggbWVzc2FnZXM6CisgIENvdW50IDEgdG8gMy4uLgorICAxCisgIDIKKyAgMworCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBGQUlMRUQ6CisgIENIRUNLKCBmYWxzZSApCit3aXRoIG1lc3NhZ2VzOgorICBDb3VudCA0IHRvIDYuLi4KKyAgNAorICA1CisgIDYKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RkOjptYXAgaXMgY29udmVydGlibGUgc3RyaW5nCiAgIGVtcHR5CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggZW1wdHlNYXAgKSA9PSAieyAgfSIgKQogd2l0aCBleHBhbnNpb246CiAgICJ7ICB9IiA9PSAieyAgfSIKQEAgLTc2OTMsOCArMTAwNDksNyBAQAogVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIG1hcCApID09ICJ7IHsgXCJvbmVcIiwgMSB9IH0iICkKIHdpdGggZXhwYW5zaW9uOgogICAieyB7ICJvbmUiLCAxIH0gfSIgPT0gInsgeyAib25lIiwgMSB9IH0iCkBAIC03NzA2LDggKzEwMDYxLDcgQEAKIFRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggQ2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBtYXAgKSA9PSAieyB7IFwiYWJjXCIsIDEgfSwgeyBcImRlZlwiLCAyIH0sIHsgXCJnaGlcIiwgMyB9IH0iICkKIHdpdGggZXhwYW5zaW9uOgogICAieyB7ICJhYmMiLCAxIH0sIHsgImRlZiIsIDIgfSwgeyAiZ2hpIiwgMyB9IH0iCkBAIC03NzIwLDggKzEwMDc0LDcgQEAKIFRvU3RyaW5nUGFpci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ub1N0cmluZ1BhaXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1BhaXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodmFsdWUpID09ICJ7IDM0LCBcInh5enp5XCIgfSIgKQogd2l0aCBleHBhbnNpb246CiAgICJ7IDM0LCAieHl6enkiIH0iID09ICJ7IDM0LCAieHl6enkiIH0iCkBAIC03NzMyLDggKzEwMDg1LDcgQEAKIFRvU3RyaW5nUGFpci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ub1N0cmluZ1BhaXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1BhaXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHZhbHVlICkgPT0gInsgMzQsIFwieHl6enlcIiB9IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgMzQsICJ4eXp6eSIgfSIgPT0gInsgMzQsICJ4eXp6eSIgfSIKQEAgLTc3NDUsOCArMTAwOTcsNyBAQAogVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIGVtcHR5U2V0ICkgPT0gInsgIH0iICkKIHdpdGggZXhwYW5zaW9uOgogICAieyAgfSIgPT0gInsgIH0iCkBAIC03NzU4LDggKzEwMTA5LDcgQEAKIFRvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggQ2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBzZXQgKSA9PSAieyBcIm9uZVwiIH0iICkKIHdpdGggZXhwYW5zaW9uOgogICAieyAib25lIiB9IiA9PSAieyAib25lIiB9IgpAQCAtNzc3MSw4ICsxMDEyMSw3IEBACiBUb1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggc2V0ICkgPT0gInsgXCJhYmNcIiwgXCJkZWZcIiwgXCJnaGlcIiB9IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgImFiYyIsICJkZWYiLCAiZ2hpIiB9IgpAQCAtNzc4NSw4ICsxMDEzNCw3IEBACiBUb1N0cmluZ1BhaXIudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVG9TdHJpbmdQYWlyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdQYWlyLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBwciApID09ICJ7IHsgXCJncmVlblwiLCA1NSB9IH0iICkKIHdpdGggZXhwYW5zaW9uOgogICAieyB7ICJncmVlbiIsIDU1IH0gfSIKQEAgLTc4MDUsMTMgKzEwMTUzLDQyIEBACiAgICJmaXJzdCIgPT0gInNlY29uZCIKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RyaW5naWZ5IHJhbmdlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitUb1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0cmVhbWFibGVfcmFuZ2V7fSkgPT0gIm9wPDwoc3RyZWFtYWJsZV9yYW5nZSkiICkKK3dpdGggZXhwYW5zaW9uOgorICAib3A8PChzdHJlYW1hYmxlX3JhbmdlKSIKKyAgPT0KKyAgIm9wPDwoc3RyZWFtYWJsZV9yYW5nZSkiCisKK1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoc3RyaW5nbWFrZXJfcmFuZ2V7fSkgPT0gInN0cmluZ21ha2VyKHN0cmVhbWFibGVfcmFuZ2UpIiApCit3aXRoIGV4cGFuc2lvbjoKKyAgInN0cmluZ21ha2VyKHN0cmVhbWFibGVfcmFuZ2UpIgorICA9PQorICAic3RyaW5nbWFrZXIoc3RyZWFtYWJsZV9yYW5nZSkiCisKK1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoanVzdF9yYW5nZXt9KSA9PSAieyAxLCAyLCAzLCA0IH0iICkKK3dpdGggZXhwYW5zaW9uOgorICAieyAxLCAyLCAzLCA0IH0iID09ICJ7IDEsIDIsIDMsIDQgfSIKKworVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShkaXNhYmxlZF9yYW5nZXt9KSA9PSAieyAhISEgfSIgKQord2l0aCBleHBhbnNpb246CisgICJ7ICEhISB9IiA9PSAieyAhISEgfSIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RyaW5naWZ5KCBoYXNfbWFrZXIgKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggaXRlbSApID09ICJTdHJpbmdNYWtlcjxoYXNfbWFrZXI+IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgIlN0cmluZ01ha2VyPGhhc19tYWtlcj4iCkBAIC03ODE5LDEzICsxMDE5NiwxMiBAQAogICAiU3RyaW5nTWFrZXI8aGFzX21ha2VyPiIKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotc3RyaW5naWZ5KCBoYXNfbWFrZXJfYW5kX3RvU3RyaW5nICkKK3N0cmluZ2lmeSggaGFzX21ha2VyX2FuZF9vcGVyYXRvciApCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBUb1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBpdGVtICkgPT0gIlN0cmluZ01ha2VyPGhhc19tYWtlcl9hbmRfb3BlcmF0b3I+IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgIlN0cmluZ01ha2VyPGhhc19tYWtlcl9hbmRfb3BlcmF0b3I+IgpAQCAtNzgzMywxMyArMTAyMDksMjMgQEAKICAgIlN0cmluZ01ha2VyPGhhc19tYWtlcl9hbmRfb3BlcmF0b3I+IgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdHJpbmdpZnkoIGhhc19uZWl0aGVyICkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShpdGVtKSA9PSAieyAhISEgfSIgKQord2l0aCBleHBhbnNpb246CisgICJ7ICEhISB9IiA9PSAieyAhISEgfSIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3RyaW5naWZ5KCBoYXNfb3BlcmF0b3IgKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggaXRlbSApID09ICJvcGVyYXRvcjw8KCBoYXNfb3BlcmF0b3IgKSIgKQogd2l0aCBleHBhbnNpb246CiAgICJvcGVyYXRvcjw8KCBoYXNfb3BlcmF0b3IgKSIKQEAgLTc4NDcsMTMgKzEwMjMzLDE2MiBAQAogICAib3BlcmF0b3I8PCggaGFzX29wZXJhdG9yICkiCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0cmluZ2lmeSggaGFzX3RlbXBsYXRlX29wZXJhdG9yICkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggaXRlbSApID09ICJvcGVyYXRvcjw8KCBoYXNfdGVtcGxhdGVfb3BlcmF0b3IgKSIgKQord2l0aCBleHBhbnNpb246CisgICJvcGVyYXRvcjw8KCBoYXNfdGVtcGxhdGVfb3BlcmF0b3IgKSIKKyAgPT0KKyAgIm9wZXJhdG9yPDwoIGhhc190ZW1wbGF0ZV9vcGVyYXRvciApIgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdHJpbmdpZnkoIHZlY3RvcnM8aGFzX21ha2VyPiApCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUb1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHYgKSA9PSAieyBTdHJpbmdNYWtlcjxoYXNfbWFrZXI+IH0iICkKK3dpdGggZXhwYW5zaW9uOgorICAieyBTdHJpbmdNYWtlcjxoYXNfbWFrZXI+IH0iCisgID09CisgICJ7IFN0cmluZ01ha2VyPGhhc19tYWtlcj4gfSIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RyaW5naWZ5KCB2ZWN0b3JzPGhhc19tYWtlcl9hbmRfb3BlcmF0b3I+ICkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggdiApID09ICJ7IFN0cmluZ01ha2VyPGhhc19tYWtlcl9hbmRfb3BlcmF0b3I+IH0iICkKK3dpdGggZXhwYW5zaW9uOgorICAieyBTdHJpbmdNYWtlcjxoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiB9IgorICA9PQorICAieyBTdHJpbmdNYWtlcjxoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiB9IgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdHJpbmdpZnkoIHZlY3RvcnM8aGFzX29wZXJhdG9yPiApCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUb1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHYgKSA9PSAieyBvcGVyYXRvcjw8KCBoYXNfb3BlcmF0b3IgKSB9IiApCit3aXRoIGV4cGFuc2lvbjoKKyAgInsgb3BlcmF0b3I8PCggaGFzX29wZXJhdG9yICkgfSIKKyAgPT0KKyAgInsgb3BlcmF0b3I8PCggaGFzX29wZXJhdG9yICkgfSIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RybGVuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGRhdGEuc3RyLnNpemUoKSA9PSBkYXRhLmxlbiApCit3aXRoIGV4cGFuc2lvbjoKKyAgMyA9PSAzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N0cmxlbjMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBkYXRhLnN0ci5zaXplKCkgPT0gZGF0YS5sZW4gKQord2l0aCBleHBhbnNpb246CisgIDMgPT0gMworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzdHJsZW4zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggZGF0YS5zdHIuc2l6ZSgpID09IGRhdGEubGVuICkKK3dpdGggZXhwYW5zaW9uOgorICA1ID09IDUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorc3RybGVuMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIGRhdGEuc3RyLnNpemUoKSA9PSBkYXRhLmxlbiApCit3aXRoIGV4cGFuc2lvbjoKKyAgNCA9PSA0CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhYmxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHN0cmxlbihzdGQ6OmdldDwwPihkYXRhKSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6OmdldDwxPihkYXRhKSkgKQord2l0aCBleHBhbnNpb246CisgIDUgPT0gNQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0YWJsZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBzdHJsZW4oc3RkOjpnZXQ8MD4oZGF0YSkpID09IHN0YXRpY19jYXN0PHNpemVfdD4oc3RkOjpnZXQ8MT4oZGF0YSkpICkKK3dpdGggZXhwYW5zaW9uOgorICA2ID09IDYKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQordGFibGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0dlbmVyYXRvcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggc3RybGVuKHN0ZDo6Z2V0PDA+KGRhdGEpKSA9PSBzdGF0aWNfY2FzdDxzaXplX3Q+KHN0ZDo6Z2V0PDE+KGRhdGEpKSApCit3aXRoIGV4cGFuc2lvbjoKKyAgNSA9PSA1CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3RhYmxlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorR2VuZXJhdG9ycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitHZW5lcmF0b3JzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisgIFJFUVVJUkUoIHN0cmxlbihzdGQ6OmdldDwwPihkYXRhKSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6OmdldDwxPihkYXRhKSkgKQord2l0aCBleHBhbnNpb246CisgIDYgPT0gNgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCit0aHJvd24gc3RkOjpzdHJpbmdzIGFyZSB0cmFuc2xhdGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworRXhjZXB0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBGQUlMRUQ6CitkdWUgdG8gdW5leHBlY3RlZCBleGNlcHRpb24gd2l0aCBtZXNzYWdlOgorICBXaHkgd291bGQgeW91IHRocm93IGEgc3RkOjpzdHJpbmc/CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRvU3RyaW5nIG9uIGNvbnN0IHdjaGFyX3QgY29uc3QgcG9pbnRlciByZXR1cm5zIHRoZSBzdHJpbmcgY29udGVudHMKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHJlc3VsdCA9PSAiXCJ3aWRlIGxvYWRcIiIgKQogd2l0aCBleHBhbnNpb246CiAgICIid2lkZSBsb2FkIiIgPT0gIiJ3aWRlIGxvYWQiIgpAQCAtNzg2NCw4ICsxMDM5OSw3IEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCByZXN1bHQgPT0gIlwid2lkZSBsb2FkXCIiICkKIHdpdGggZXhwYW5zaW9uOgogICAiIndpZGUgbG9hZCIiID09ICIid2lkZSBsb2FkIiIKQEAgLTc4NzYsOCArMTA0MTAsNyBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggcmVzdWx0ID09ICJcIndpZGUgbG9hZFwiIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgIiJ3aWRlIGxvYWQiIiA9PSAiIndpZGUgbG9hZCIiCkBAIC03ODg4LDEwOCArMTA0MjEsMjggQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIHJlc3VsdCA9PSAiXCJ3aWRlIGxvYWRcIiIgKQogd2l0aCBleHBhbnNpb246CiAgICIid2lkZSBsb2FkIiIgPT0gIiJ3aWRlIGxvYWQiIgogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi10b1N0cmluZyBzdHJlYW1hYmxlIHJhbmdlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVRvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0cmVhbWFibGVfcmFuZ2V7fSkgPT0gIm9wPDwoc3RyZWFtYWJsZV9yYW5nZSkiICkKLXdpdGggZXhwYW5zaW9uOgotICAib3A8PChzdHJlYW1hYmxlX3JhbmdlKSIKLSAgPT0KLSAgIm9wPDwoc3RyZWFtYWJsZV9yYW5nZSkiCi0KLVRvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0cmluZ21ha2VyX3Jhbmdle30pID09ICJzdHJpbmdtYWtlcihzdHJlYW1hYmxlX3JhbmdlKSIgKQotd2l0aCBleHBhbnNpb246Ci0gICJzdHJpbmdtYWtlcihzdHJlYW1hYmxlX3JhbmdlKSIKLSAgPT0KLSAgInN0cmluZ21ha2VyKHN0cmVhbWFibGVfcmFuZ2UpIgotCi1Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShqdXN0X3Jhbmdle30pID09ICJ7IDEsIDIsIDMsIDQgfSIgKQotd2l0aCBleHBhbnNpb246Ci0gICJ7IDEsIDIsIDMsIDQgfSIgPT0gInsgMSwgMiwgMywgNCB9IgotCi1Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgotICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShkaXNhYmxlZF9yYW5nZXt9KSA9PSAiez99IiApCi13aXRoIGV4cGFuc2lvbjoKLSAgIns/fSIgPT0gIns/fSIKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdG9TdHJpbmcoIHZlY3RvcnM8aGFzX21ha2VyPiApCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVRvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCB2ICkgPT0gInsgU3RyaW5nTWFrZXI8aGFzX21ha2VyPiB9IiApCi13aXRoIGV4cGFuc2lvbjoKLSAgInsgU3RyaW5nTWFrZXI8aGFzX21ha2VyPiB9IgotICA9PQotICAieyBTdHJpbmdNYWtlcjxoYXNfbWFrZXI+IH0iCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLXRvU3RyaW5nKCB2ZWN0b3JzPGhhc19tYWtlcl9hbmRfb3BlcmF0b3I+ICkKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLVRvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLS4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KLQotVG9TdHJpbmdXaGljaC50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKLSAgUkVRVUlSRSggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHYgKSA9PSAieyBTdHJpbmdNYWtlcjxoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiB9IiApCi13aXRoIGV4cGFuc2lvbjoKLSAgInsgU3RyaW5nTWFrZXI8aGFzX21ha2VyX2FuZF9vcGVyYXRvcj4gfSIKLSAgPT0KLSAgInsgU3RyaW5nTWFrZXI8aGFzX21ha2VyX2FuZF9vcGVyYXRvcj4gfSIKLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotdG9TdHJpbmcoIHZlY3RvcnM8aGFzX29wZXJhdG9yPiApCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+Ci0uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCi0KLVRvU3RyaW5nV2hpY2gudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6Ci0gIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCB2ICkgPT0gInsgb3BlcmF0b3I8PCggaGFzX29wZXJhdG9yICkgfSIgKQotd2l0aCBleHBhbnNpb246Ci0gICJ7IG9wZXJhdG9yPDwoIGhhc19vcGVyYXRvciApIH0iCi0gID09Ci0gICJ7IG9wZXJhdG9yPDwoIGhhc19vcGVyYXRvciApIH0iCi0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRvU3RyaW5nKGVudW0gY2xhc3Mgdy9vcGVyYXRvcjw8KQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRW51bVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0VudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoZTApID09ICJFMi9WMCIgKQogd2l0aCBleHBhbnNpb246CiAgICJFMi9WMCIgPT0gIkUyL1YwIgogCi1FbnVtVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitFbnVtVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGUxKSA9PSAiRTIvVjEiICkKIHdpdGggZXhwYW5zaW9uOgogICAiRTIvVjEiID09ICJFMi9WMSIKIAotRW51bVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorRW51bVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShlMykgPT0gIlVua25vd24gZW51bSB2YWx1ZSAxMCIgKQogd2l0aCBleHBhbnNpb246CiAgICJVbmtub3duIGVudW0gdmFsdWUgMTAiCkBAIC04MDAyLDE0ICsxMDQ1NSwxMiBAQAogRW51bVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0VudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoZTApID09ICIwIiApCiB3aXRoIGV4cGFuc2lvbjoKICAgIjAiID09ICIwIgogCi1FbnVtVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitFbnVtVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGUxKSA9PSAiMSIgKQogd2l0aCBleHBhbnNpb246CiAgICIxIiA9PSAiMSIKQEAgLTgwMjAsMTQgKzEwNDcxLDEyIEBACiBFbnVtVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotRW51bVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorRW51bVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShlMCkgPT0gIkUyezB9IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgIkUyezB9IiA9PSAiRTJ7MH0iCiAKLUVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0VudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoZTEpID09ICJFMnsxfSIgKQogd2l0aCBleHBhbnNpb246CiAgICJFMnsxfSIgPT0gIkUyezF9IgpAQCAtODAzOCwxNCArMTA0ODcsMTIgQEAKIEVudW1Ub1N0cmluZy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1FbnVtVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitFbnVtVG9TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGUwKSA9PSAiMCIgKQogd2l0aCBleHBhbnNpb246CiAgICIwIiA9PSAiMCIKIAotRW51bVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorRW51bVRvU3RyaW5nLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShlMSkgPT0gIjEiICkKIHdpdGggZXhwYW5zaW9uOgogICAiMSIgPT0gIjEiCkBAIC04MDU2LDE0ICsxMDUwMywxMiBAQAogVG9TdHJpbmdUdXBsZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ub1N0cmluZ1R1cGxlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdUdXBsZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggInsgfSIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodHlwZXt9KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgfSIgPT0gInsgfSIKIAotVG9TdHJpbmdUdXBsZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nVHVwbGUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soICJ7IH0iID09IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHZhbHVlKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgfSIgPT0gInsgfSIKQEAgLTgwNzQsMTQgKzEwNTE5LDEyIEBACiBUb1N0cmluZ1R1cGxlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRvU3RyaW5nVHVwbGUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1R1cGxlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCAiMS4yZiIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoZmxvYXQoMS4yKSkgKQogd2l0aCBleHBhbnNpb246CiAgICIxLjJmIiA9PSAiMS4yZiIKIAotVG9TdHJpbmdUdXBsZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nVHVwbGUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soICJ7IDEuMmYsIDAgfSIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodHlwZXsxLjJmLDB9KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgMS4yZiwgMCB9IiA9PSAieyAxLjJmLCAwIH0iCkBAIC04MDkyLDggKzEwNTM1LDcgQEAKIFRvU3RyaW5nVHVwbGUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVG9TdHJpbmdUdXBsZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nVHVwbGUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0soICJ7IDAgfSIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodHlwZXswfSkgKQogd2l0aCBleHBhbnNpb246CiAgICJ7IDAgfSIgPT0gInsgMCB9IgpAQCAtODEwNCw4ICsxMDU0Niw3IEBACiBUb1N0cmluZ1R1cGxlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRvU3RyaW5nVHVwbGUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1R1cGxlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCAieyAwLCA0MiwgXCJDYXRjaCBtZVwiIH0iID09IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHZhbHVlKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgMCwgNDIsICJDYXRjaCBtZSIgfSIKQEAgLTgxMTgsOCArMTA1NTksNyBAQAogVG9TdHJpbmdUdXBsZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ub1N0cmluZ1R1cGxlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdUdXBsZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggInsgXCJoZWxsb1wiLCBcIndvcmxkXCIgfSIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodHlwZXsiaGVsbG8iLCJ3b3JsZCJ9KSApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgImhlbGxvIiwgIndvcmxkIiB9IgpAQCAtODEzMiw4ICsxMDU3Miw3IEBACiBUb1N0cmluZ1R1cGxlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRvU3RyaW5nVHVwbGUudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1R1cGxlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIENIRUNLKCAieyB7IDQyIH0sIHsgfSwgMS4yZiB9IiA9PSA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2YWx1ZSkgKQogd2l0aCBleHBhbnNpb246CiAgICJ7IHsgNDIgfSwgeyB9LCAxLjJmIH0iCkBAIC04MTQ2LDE0ICsxMDU4NSwxMiBAQAogVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2KSA9PSAieyAgfSIgKQogd2l0aCBleHBhbnNpb246CiAgICJ7ICB9IiA9PSAieyAgfSIKIAotVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2KSA9PSAieyB7IFwiaGVsbG9cIiB9LCB7IFwid29ybGRcIiB9IH0iICkKIHdpdGggZXhwYW5zaW9uOgogICAieyB7ICJoZWxsbyIgfSwgeyAid29ybGQiIH0gfSIKQEAgLTgxNjYsMjAgKzEwNjAzLDE3IEBACiBUb1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ub1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGJvb2xzKSA9PSAieyAgfSIgKQogd2l0aCBleHBhbnNpb246CiAgICJ7ICB9IiA9PSAieyAgfSIKIAotVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShib29scykgPT0gInsgdHJ1ZSB9IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgdHJ1ZSB9IiA9PSAieyB0cnVlIH0iCiAKLVRvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoYm9vbHMpID09ICJ7IHRydWUsIGZhbHNlIH0iICkKIHdpdGggZXhwYW5zaW9uOgogICAieyB0cnVlLCBmYWxzZSB9IiA9PSAieyB0cnVlLCBmYWxzZSB9IgpAQCAtODE5MCwyMCArMTA2MjQsMTcgQEAKIFRvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLVRvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodnYpID09ICJ7ICB9IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgIH0iID09ICJ7ICB9IgogCi1Ub1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHZ2KSA9PSAieyA0MiB9IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgNDIgfSIgPT0gInsgNDIgfSIKIAotVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2dikgPT0gInsgNDIsIDI1MCB9IiApCiB3aXRoIGV4cGFuc2lvbjoKICAgInsgNDIsIDI1MCB9IiA9PSAieyA0MiwgMjUwIH0iCkBAIC04MjE0LDIwICsxMDY0NSwxNyBAQAogVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2dikgPT0gInsgIH0iICkKIHdpdGggZXhwYW5zaW9uOgogICAieyAgfSIgPT0gInsgIH0iCiAKLVRvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodnYpID09ICJ7IDQyIH0iICkKIHdpdGggZXhwYW5zaW9uOgogICAieyA0MiB9IiA9PSAieyA0MiB9IgogCi1Ub1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHZ2KSA9PSAieyA0MiwgMjUwIH0iICkKIHdpdGggZXhwYW5zaW9uOgogICAieyA0MiwgMjUwIH0iID09ICJ7IDQyLCAyNTAgfSIKQEAgLTgyMzgsMjAgKzEwNjY2LDE3IEBACiBUb1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Ub1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK1RvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHZ2KSA9PSAieyAgfSIgKQogd2l0aCBleHBhbnNpb246CiAgICJ7ICB9IiA9PSAieyAgfSIKIAotVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2dikgPT0gInsgXCJoZWxsb1wiIH0iICkKIHdpdGggZXhwYW5zaW9uOgogICAieyAiaGVsbG8iIH0iID09ICJ7ICJoZWxsbyIgfSIKIAotVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitUb1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2dikgPT0gInsgXCJoZWxsb1wiLCBcIndvcmxkXCIgfSIgKQogd2l0aCBleHBhbnNpb246CiAgICJ7ICJoZWxsbyIsICJ3b3JsZCIgfSIKQEAgLTgyNjQsMTQgKzEwNjg5LDEyIEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKQogd2l0aCBleHBhbnNpb246CiAgIDUgPT0gNQogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApCiB3aXRoIGV4cGFuc2lvbjoKICAgNSA+PSA1CkBAIC04MjgzLDE0ICsxMDcwNiwxMiBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB2LnNpemUoKSA9PSAxMCApCiB3aXRoIGV4cGFuc2lvbjoKICAgMTAgPT0gMTAKIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDEwICkKIHdpdGggZXhwYW5zaW9uOgogICAxMCA+PSAxMApAQCAtODMwMSwxNCArMTA3MjIsMTIgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApCiB3aXRoIGV4cGFuc2lvbjoKICAgNSA9PSA1CiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICkKIHdpdGggZXhwYW5zaW9uOgogICA1ID49IDUKQEAgLTgzMjAsMTQgKzEwNzM5LDEyIEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMAogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApCiB3aXRoIGV4cGFuc2lvbjoKICAgNSA+PSA1CkBAIC04MzQwLDggKzEwNzU3LDcgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID09IDAgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMApAQCAtODM1MiwxNCArMTA3NjgsMTIgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApCiB3aXRoIGV4cGFuc2lvbjoKICAgNSA9PSA1CiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICkKIHdpdGggZXhwYW5zaW9uOgogICA1ID49IDUKQEAgLTgzNzEsMTQgKzEwNzg1LDEyIEBACiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDUgKQogd2l0aCBleHBhbnNpb246CiAgIDUgPT0gNQogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gMTAgKQogd2l0aCBleHBhbnNpb246CiAgIDEwID49IDEwCkBAIC04Mzg5LDE0ICsxMDgwMSwxMiBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB2LnNpemUoKSA9PSA1ICkKIHdpdGggZXhwYW5zaW9uOgogICA1ID09IDUKIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDUgKQogd2l0aCBleHBhbnNpb246CiAgIDUgPj0gNQpAQCAtODQwOCwzOSArMTA4MTgsMzcgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApCiB3aXRoIGV4cGFuc2lvbjoKICAgNSA9PSA1CiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICkKIHdpdGggZXhwYW5zaW9uOgogICA1ID49IDUKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogeG1sZW50aXR5Y2hlY2sKLSAgZW1iZWRkZWQgeG1sCisgIGVtYmVkZGVkIHhtbDogPHRlc3Q+aXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGVtYmVkIHhtbCBjaGFyYWN0ZXJzLCBzdWNoIGFzIDwsCisgICAgICAgICAgICAgICAgIiBvciAmLCBvciBldmVuIHdob2xlIDx4bWw+ZG9jdW1lbnRzPC94bWw+IHdpdGhpbiBhbiBhdHRyaWJ1dGUKKyAgICAgICAgICAgICAgICA8L3Rlc3Q+CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHhtbGVudGl0eWNoZWNrCi0gIGVuY29kZWQgY2hhcnMKKyAgZW5jb2RlZCBjaGFyczogdGhlc2Ugc2hvdWxkIGFsbCBiZSBlbmNvZGVkOiAmJiYiIiI8PDwmIjw8JiIKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KIAotTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKIAogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotdGVzdCBjYXNlczogIDE5OCB8IDEzMyBwYXNzZWQgfCAgNjEgZmFpbGVkIHwgIDQgZmFpbGVkIGFzIGV4cGVjdGVkCi1hc3NlcnRpb25zOiAxMDA3IHwgODY2IHBhc3NlZCB8IDEyMCBmYWlsZWQgfCAyMSBmYWlsZWQgYXMgZXhwZWN0ZWQKK3Rlc3QgY2FzZXM6ICAyNTUgfCAgMTc0IHBhc3NlZCB8ICA3NyBmYWlsZWQgfCAgNCBmYWlsZWQgYXMgZXhwZWN0ZWQKK2Fzc2VydGlvbnM6IDE0MDkgfCAxMjUwIHBhc3NlZCB8IDEzOCBmYWlsZWQgfCAyMSBmYWlsZWQgYXMgZXhwZWN0ZWQKIApkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL2NvbnNvbGUuc3dhNC5hcHByb3ZlZC50eHQgYi9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvY29uc29sZS5zd2E0LmFwcHJvdmVkLnR4dAppbmRleCA2MjMyZjhkLi4yZWZkNzYxIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvY29uc29sZS5zd2E0LmFwcHJvdmVkLnR4dAorKysgYi9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvY29uc29sZS5zd2E0LmFwcHJvdmVkLnR4dApAQCAtMywxNCArMywxNSBAQAogPGV4ZS1uYW1lPiBpcyBhIDx2ZXJzaW9uPiBob3N0IGFwcGxpY2F0aW9uLgogUnVuIHdpdGggLT8gZm9yIG9wdGlvbnMKIAorUmFuZG9tbmVzcyBzZWVkZWQgdG86IDEKKwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBBIHRlc3QgbmFtZSB0aGF0IHN0YXJ0cyB3aXRoIGEgIwogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogd2l0aCBtZXNzYWdlOgogICB5YXkKIApAQCAtMjEsMTQgKzIyLDEyIEBACiBEZWNvbXBvc2l0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLURlY29tcG9zaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitEZWNvbXBvc2l0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGZwdHIgPT0gMCApCiB3aXRoIGV4cGFuc2lvbjoKICAgMCA9PSAwCiAKLURlY29tcG9zaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitEZWNvbXBvc2l0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGZwdHIgPT0gMGwgKQogd2l0aCBleHBhbnNpb246CiAgIDAgPT0gMApAQCAtMzksMTQgKzM4LDEyIEBACiBDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHkudiA9PSAwICkKIHdpdGggZXhwYW5zaW9uOgogICAwID09IDAKIAotQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCAwID09IHkudiApCiB3aXRoIGV4cGFuc2lvbjoKICAgMCA9PSAwCkBAIC01Nyw0MyArNTQsMTA5IEBACiBDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHQxID09IHQyICkKIHdpdGggZXhwYW5zaW9uOgogICB7P30gPT0gez99CiAKLUNvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggdDEgIT0gdDIgKQogd2l0aCBleHBhbnNpb246CiAgIHs/fSAhPSB7P30KIAotQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0MSA8IHQyICkKIHdpdGggZXhwYW5zaW9uOgogICB7P30gPCB7P30KIAotQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0MSA+IHQyICkKIHdpdGggZXhwYW5zaW9uOgogICB7P30gPiB7P30KIAotQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0MSA8PSB0MiApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99IDw9IHs/fQogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHQxID49IHQyICkKIHdpdGggZXhwYW5zaW9uOgogICB7P30gPj0gez99CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMxMTc1IC0gSGlkZGVuIFRlc3QKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjMTIzOAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggc3RkOjptZW1jbXAodWFyciwgIjEyMyIsIHNpemVvZih1YXJyKSkgPT0gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMCA9PSAwCit3aXRoIG1lc3NhZ2VzOgorICB1YXJyIDo9ICIxMjMiCisgIHNhcnIgOj0gIjQ1NiIKKworQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggc3RkOjptZW1jbXAoc2FyciwgIjQ1NiIsIHNpemVvZihzYXJyKSkgPT0gMCApCit3aXRoIGV4cGFuc2lvbjoKKyAgMCA9PSAwCit3aXRoIG1lc3NhZ2VzOgorICB1YXJyIDo9ICIxMjMiCisgIHNhcnIgOj0gIjQ1NiIKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIzEyNDUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMxNDAzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgorCitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgorICBSRVFVSVJFKCBoMSA9PSBoMiApCit3aXRoIGV4cGFuc2lvbjoKKyAgWzE0MDMgaGVscGVyXSA9PSBbMTQwMyBoZWxwZXJdCisKK1RoaXMgd291bGQgbm90IGJlIGNhdWdodCBwcmV2aW91c2x5CitOb3Igd291bGQgdGhpcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIzE1MTQ6IHN0ZGVyci9zdGRvdXQgaXMgbm90IGNhcHR1cmVkIGluIHRlc3RzIGFib3J0ZWQgYnkgYW4gZXhjZXB0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworVHJpY2t5LnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBGQUlMRUQ6CitleHBsaWNpdGx5IHdpdGggbWVzc2FnZToKKyAgMTUxNAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjMTU0OAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKy4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKKyAgUkVRVUlSRSggc3RkOjppc19zYW1lPFR5cGVMaXN0PGludD4sIFR5cGVMaXN0PGludD4+Ojp2YWx1ZSApCit3aXRoIGV4cGFuc2lvbjoKKyAgdHJ1ZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjNzQ4IC0gY2FwdHVyZXMgd2l0aCB1bmV4cGVjdGVkIGV4Y2VwdGlvbnMKICAgb3V0c2lkZSBhc3NlcnRpb25zCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMjUsOCArMTg4LDcgQEAKIEV4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1FeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRV9USFJPV1MoIHRoaXNUaHJvd3MoKSApCiB3aXRoIG1lc3NhZ2U6CiAgIGFuc3dlciA6PSA0MgpAQCAtMTM3LDggKzE5OSw3IEBACiBDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIDQyID09IGYgKQogd2l0aCBleHBhbnNpb246CiAgIDQyID09IHs/fQpAQCAtMTQ5LDM4ICsyMTAsMzEgQEAKIENvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCiAKLUNvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgUkVRVUlSRSggYSA9PSB0ICkKIHdpdGggZXhwYW5zaW9uOgogICAzID09IDMKIAotQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBDSEVDSyggYSA9PSB0ICkKIHdpdGggZXhwYW5zaW9uOgogICAzID09IDMKIAotQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFX1RIUk9XUyggdGhyb3dzX2ludCh0cnVlKSApCiAKLUNvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IFBBU1NFRDoKICAgQ0hFQ0tfVEhST1dTX0FTKCB0aHJvd3NfaW50KHRydWUpLCBpbnQgKQogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfTk9USFJPVyggdGhyb3dzX2ludChmYWxzZSkgKQogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkVfVEhBVCggImFhYSIsIENhdGNoOjpFbmRzV2l0aCgiYWFhIikgKQogd2l0aCBleHBhbnNpb246CiAgICJhYWEiIGVuZHMgd2l0aDogImFhYSIKIAotQ29tcGlsYXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogICBSRVFVSVJFKCB0ZW1wbGF0ZWRfdGVzdHM8aW50PigzKSApCiB3aXRoIGV4cGFuc2lvbjoKICAgdHJ1ZQpAQCAtMTk2LDggKzI1MCw3IEBACiB3aXRoIGV4cGFuc2lvbjoKICAgMSA9PSAwCiAKLU1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj46Ci1QQVNTRUQ6CitNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIGVycm5vID09IDEgKQogd2l0aCBleHBhbnNpb246CiAgIDEgPT0gMQpAQCAtMjA4LDggKzI2MSw3IEBACiBDb21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1Db21waWxhdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjoKLVBBU1NFRDoKK0NvbXBpbGF0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OiBQQVNTRUQ6CiAgIFJFUVVJUkUoIHggPT0gNCApCiB3aXRoIGV4cGFuc2lvbjoKICAgez99ID09IDQKQEAgLTIyMyw4ICsyNzUsNyBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogd2l0aCBtZXNzYWdlOgogICBFdmVyeXRoaW5nIGlzIE9LCiAKQEAgLTIzNSw4ICsyODYsNyBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogd2l0aCBtZXNzYWdlOgogICBFdmVyeXRoaW5nIGlzIE9LCiAKQEAgLTI0Nyw4ICsyOTcsNyBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogd2l0aCBtZXNzYWdlOgogICBFdmVyeXRoaW5nIGlzIE9LCiAKQEAgLTI1OSw4ICszMDgsNyBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogd2l0aCBtZXNzYWdlOgogICBFdmVyeXRoaW5nIGlzIE9LCiAKQEAgLTI3MSw4ICszMTksNyBAQAogTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLgogCi1NaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+OgotUEFTU0VEOgorTWlzYy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPjogUEFTU0VEOgogd2l0aCBtZXNzYWdlOgogICBFdmVyeXRoaW5nIGlzIE9LCiAKQEAgLTI5MywxMiArMzQwLDcgQEAKIHdpdGggZXhwYW5zaW9uOgogICBmYWxzZQogCi1Db25kaXRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj46IEZBSUxFRDoKLSAgQ0hFQ0tfRkFMU0UoIHRydWUgKQotd2l0aCBleHBhbnNpb246Ci0gICF0cnVlCi0KID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLXRlc3QgY2FzZXM6IDExIHwgIDggcGFzc2VkIHwgMSBmYWlsZWQgfCAyIGZhaWxlZCBhcyBleHBlY3RlZAotYXNzZXJ0aW9uczogMzQgfCAyNyBwYXNzZWQgfCA0IGZhaWxlZCB8IDMgZmFpbGVkIGFzIGV4cGVjdGVkCit0ZXN0IGNhc2VzOiAxNyB8IDEzIHBhc3NlZCB8IDIgZmFpbGVkIHwgMiBmYWlsZWQgYXMgZXhwZWN0ZWQKK2Fzc2VydGlvbnM6IDQwIHwgMzMgcGFzc2VkIHwgNCBmYWlsZWQgfCAzIGZhaWxlZCBhcyBleHBlY3RlZAogCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvanVuaXQuc3cuYXBwcm92ZWQudHh0IGIvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL2p1bml0LnN3LmFwcHJvdmVkLnR4dAppbmRleCBiOTlmMGI4Li4yNWM0ODIzIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMvanVuaXQuc3cuYXBwcm92ZWQudHh0CisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy9qdW5pdC5zdy5hcHByb3ZlZC50eHQKQEAgLTEsMTEgKzEsMzEgQEAKIDw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04Ij8+Ci08dGVzdHN1aXRlc2xvb3NlIHRleHQgYXJ0aWZhY3QKLT4KLSAgPHRlc3RzdWl0ZSBuYW1lPSI8ZXhlLW5hbWU+IiBlcnJvcnM9IjE1IiBmYWlsdXJlcz0iMTA2IiB0ZXN0cz0iMTAwOCIgaG9zdG5hbWU9InRiZCIgdGltZT0ie2R1cmF0aW9ufSIgdGltZXN0YW1wPSJ7aXNvODYwMS10aW1lc3RhbXB9Ij4KKzx0ZXN0c3VpdGVzPgorICA8cHJvcGVydGllcz4KKyAgICA8cHJvcGVydHkgbmFtZT0icmFuZG9tLXNlZWQiIHZhbHVlPSIxIi8+CisgIDwvcHJvcGVydGllcz4KK2xvb3NlIHRleHQgYXJ0aWZhY3QKKyAgPHRlc3RzdWl0ZSBuYW1lPSI8ZXhlLW5hbWU+IiBlcnJvcnM9IjE3IiBmYWlsdXJlcz0iMTIyIiB0ZXN0cz0iMTQxMCIgaG9zdG5hbWU9InRiZCIgdGltZT0ie2R1cmF0aW9ufSIgdGltZXN0YW1wPSJ7aXNvODYwMS10aW1lc3RhbXB9Ij4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iIyBBIHRlc3QgbmFtZSB0aGF0IHN0YXJ0cyB3aXRoIGEgIyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIjMTAwNTogQ29tcGFyaW5nIHBvaW50ZXIgdG8gaW50IGFuZCBsb25nIChOVUxMIGNhbiBiZSBlaXRoZXIgb24gdmFyaW91cyBzeXN0ZW1zKSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIjMTAyNyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIjMTE0NyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIjMTE3NSAtIEhpZGRlbiBUZXN0IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IiMxMjM4IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi4oRml4dHVyZV8xMjQ1Jmx0O2ludCwgaW50PikiIG5hbWU9IiMxMjQ1IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IiMxNDAzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IiMxNTE0OiBzdGRlcnIvc3Rkb3V0IGlzIG5vdCBjYXB0dXJlZCBpbiB0ZXN0cyBhYm9ydGVkIGJ5IGFuIGV4Y2VwdGlvbiIgdGltZT0ie2R1cmF0aW9ufSI+CisgICAgICA8ZmFpbHVyZSB0eXBlPSJGQUlMIj4KKzE1MTQKK1RyaWNreS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorICAgICAgPC9mYWlsdXJlPgorICAgICAgPHN5c3RlbS1vdXQ+CitUaGlzIHdvdWxkIG5vdCBiZSBjYXVnaHQgcHJldmlvdXNseQorICAgICAgPC9zeXN0ZW0tb3V0PgorICAgICAgPHN5c3RlbS1lcnI+CitOb3Igd291bGQgdGhpcworICAgICAgPC9zeXN0ZW0tZXJyPgorICAgIDwvdGVzdGNhc2U+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IiMxNTQ4IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IiM3NDggLSBjYXB0dXJlcyB3aXRoIHVuZXhwZWN0ZWQgZXhjZXB0aW9ucy9vdXRzaWRlIGFzc2VydGlvbnMiIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGVycm9yIHR5cGU9IlRFU1RfQ0FTRSI+CiBleHBlY3RlZCBleGNlcHRpb24KQEAgLTY2LDE4ICs4Niw2NiBAQAogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIodW5pbXBsZW1lbnRlZCkgc3RhdGljIGJvb2xzIGNhbiBiZSBldmFsdWF0ZWQvbmVnYXRpb24iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iKHVuaW1wbGVtZW50ZWQpIHN0YXRpYyBib29scyBjYW4gYmUgZXZhbHVhdGVkL2RvdWJsZSBuZWdhdGlvbiIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSIodW5pbXBsZW1lbnRlZCkgc3RhdGljIGJvb2xzIGNhbiBiZSBldmFsdWF0ZWQvZGlyZWN0IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IjN4M3gzIGludHMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LlRlc3RDbGFzcyIgbmFtZT0iQSBNRVRIT0RfQVNfVEVTVF9DQVNFIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMiIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iJnF1b3Q7aGVsbG8mcXVvdDsgPT0gJnF1b3Q7d29ybGQmcXVvdDsiIHR5cGU9IlJFUVVJUkUiPgogQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVzdENsYXNzIiBuYW1lPSJBIE1FVEhPRF9BU19URVNUX0NBU0UgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZV8yIiBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gVGVtcGxhdGVfRm9vJmx0O2Zsb2F0PiIgdGltZT0ie2R1cmF0aW9ufSI+CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIwID09IDEiIHR5cGU9IlJFUVVJUkUiPgorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKyAgICAgIDwvZmFpbHVyZT4KKyAgICA8L3Rlc3RjYXNlPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZV8yIiBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gVGVtcGxhdGVfRm9vJmx0O2ludD4iIHRpbWU9IntkdXJhdGlvbn0iPgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMCA9PSAxIiB0eXBlPSJSRVFVSVJFIj4KK0NsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisgICAgICA8L2ZhaWx1cmU+CisgICAgPC90ZXN0Y2FzZT4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LlRlbXBsYXRlX0ZpeHR1cmVfMiIgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIHN0ZDo6dmVjdG9yJmx0O2Zsb2F0PiIgdGltZT0ie2R1cmF0aW9ufSI+CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIwID09IDEiIHR5cGU9IlJFUVVJUkUiPgorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKyAgICAgIDwvZmFpbHVyZT4KKyAgICA8L3Rlc3RjYXNlPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZV8yIiBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gc3RkOjp2ZWN0b3ImbHQ7aW50PiIgdGltZT0ie2R1cmF0aW9ufSI+CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIwID09IDEiIHR5cGU9IlJFUVVJUkUiPgorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKyAgICAgIDwvZmFpbHVyZT4KKyAgICA8L3Rlc3RjYXNlPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZV8yIiBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gVGVtcGxhdGVfRm9vJmx0O2Zsb2F0PiIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZV8yIiBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gVGVtcGxhdGVfRm9vJmx0O2ludD4iIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LlRlbXBsYXRlX0ZpeHR1cmVfMiIgbmFtZT0iQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIHN0ZDo6dmVjdG9yJmx0O2Zsb2F0PiIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZV8yIiBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gc3RkOjp2ZWN0b3ImbHQ7aW50PiIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZSIgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBkb3VibGUiIHRpbWU9IntkdXJhdGlvbn0iPgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMS4wID09IDIiIHR5cGU9IlJFUVVJUkUiPgorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKyAgICAgIDwvZmFpbHVyZT4KKyAgICA8L3Rlc3RjYXNlPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZSIgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBmbG9hdCIgdGltZT0ie2R1cmF0aW9ufSI+CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSIxLjBmID09IDIiIHR5cGU9IlJFUVVJUkUiPgorQ2xhc3MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKyAgICAgIDwvZmFpbHVyZT4KKyAgICA8L3Rlc3RjYXNlPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uVGVtcGxhdGVfRml4dHVyZSIgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBpbnQiIHRpbWU9IntkdXJhdGlvbn0iPgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMSA9PSAyIiB0eXBlPSJSRVFVSVJFIj4KK0NsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisgICAgICA8L2ZhaWx1cmU+CisgICAgPC90ZXN0Y2FzZT4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LlRlbXBsYXRlX0ZpeHR1cmUiIG5hbWU9IkEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gZG91YmxlIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5UZW1wbGF0ZV9GaXh0dXJlIiBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIGZsb2F0IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5UZW1wbGF0ZV9GaXh0dXJlIiBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIGludCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uRml4dHVyZSIgbmFtZT0iQSBURVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMiIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMSA9PSAyIiB0eXBlPSJSRVFVSVJFIj4KIENsYXNzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+LkZpeHR1cmUiIG5hbWU9IkEgVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2UgLSBGb28mbHQ7ZmxvYXQ+IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2UgLSBGb28mbHQ7aW50PiIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJBIFRlbXBsYXRlIHByb2R1Y3QgdGVzdCBjYXNlIC0gc3RkOjp2ZWN0b3ImbHQ7ZmxvYXQ+IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2UgLSBzdGQ6OnZlY3RvciZsdDtpbnQ+IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkEgY29tcGFyaXNvbiB0aGF0IHVzZXMgbGl0ZXJhbHMgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIGNvbnN0cnVjdG9yIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkEgY291cGxlIG9mIG5lc3RlZCBzZWN0aW9ucyBmb2xsb3dlZCBieSBhIGZhaWx1cmUiIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGZhaWx1cmUgdHlwZT0iRkFJTCI+CiB0byBpbmZpbml0eSBhbmQgYmV5b25kCkBAIC0xMDksMTIgKzE3NywxNiBAQAogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJBcHByb3hpbWF0ZSBjb21wYXJpc29ucyB3aXRoIGZsb2F0cyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJBcHByb3hpbWF0ZSBjb21wYXJpc29ucyB3aXRoIGludHMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQXBwcm94aW1hdGUgY29tcGFyaXNvbnMgd2l0aCBtaXhlZCBudW1lcmljIHR5cGVzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkFyYml0cmFyeSBwcmVkaWNhdGUgbWF0Y2hlci9GdW5jdGlvbiBwb2ludGVyIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkFyYml0cmFyeSBwcmVkaWNhdGUgbWF0Y2hlci9MYW1iZGFzICsgZGlmZmVyZW50IHR5cGUiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQXNzZXJ0aW9ucyB0aGVuIHNlY3Rpb25zIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkFzc2VydGlvbnMgdGhlbiBzZWN0aW9ucy9BIHNlY3Rpb24iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQXNzZXJ0aW9ucyB0aGVuIHNlY3Rpb25zL0Egc2VjdGlvbi9Bbm90aGVyIHNlY3Rpb24iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQXNzZXJ0aW9ucyB0aGVuIHNlY3Rpb25zL0Egc2VjdGlvbi9Bbm90aGVyIG90aGVyIHNlY3Rpb24iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQXNzb3J0ZWQgbWlzY2VsbGFuZW91cyB0ZXN0cyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJCaXRmaWVsZHMgY2FuIGJlIGNhcHR1cmVkICgjMTAyNykiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQ0FQVFVSRSBjYW4gZGVhbCB3aXRoIGNvbXBsZXggZXhwcmVzc2lvbnMiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQ0FQVFVSRSBjYW4gZGVhbCB3aXRoIGNvbXBsZXggZXhwcmVzc2lvbnMgaW52b2x2aW5nIGNvbW1hcyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJDYXB0dXJlIGFuZCBpbmZvIG1lc3NhZ2VzL0NhcHR1cmUgc2hvdWxkIHN0cmluZ2lmeSBsaWtlIGFzc2VydGlvbnMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iQ2FwdHVyZSBhbmQgaW5mbyBtZXNzYWdlcy9JbmZvIHNob3VsZCBOT1Qgc3RyaW5naWZ5IHRoZSB3YXkgYXNzZXJ0aW9ucyBkbyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJDaGFyYWN0ZXIgcHJldHR5IHByaW50aW5nL1NwZWNpZmljYWxseSBlc2NhcGVkIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CkBAIC0yMTMsNiArMjg1LDcgQEAKIE1hdGNoZXJzLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iRXhjZXB0aW9uIGFzIGEgdmFsdWUgKGUuZy4gaW4gUkVRVUlSRV9USFJPV1NfTUFUQ0hFUykgY2FuIGJlIHN0cmluZ2lmaWVkIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkV4Y2VwdGlvbiBtYXRjaGVycyB0aGF0IGZhaWwvTm8gZXhjZXB0aW9uIiB0aW1lPSJ7ZHVyYXRpb259Ij4KICAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImRvZXNOb3RUaHJvdygpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9IiB0eXBlPSJDSEVDS19USFJPV1NfTUFUQ0hFUyI+CiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgpAQCAtMjMyLDEwICszMDUsMTAgQEAKICAgICAgIDwvZXJyb3I+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iRXhjZXB0aW9uIG1hdGNoZXJzIHRoYXQgZmFpbC9Db250ZW50cyBhcmUgd3JvbmciIHRpbWU9IntkdXJhdGlvbn0iPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iez99IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxIiB0eXBlPSJDSEVDS19USFJPV1NfTUFUQ0hFUyI+CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxIiB0eXBlPSJDSEVDS19USFJPV1NfTUFUQ0hFUyI+CiBNYXRjaGVycy50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgogICAgICAgPC9mYWlsdXJlPgotICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iez99IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxIiB0eXBlPSJSRVFVSVJFX1RIUk9XU19NQVRDSEVTIj4KKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IlNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEiIHR5cGU9IlJFUVVJUkVfVEhST1dTX01BVENIRVMiPgogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgpAQCAtMjgyLDYgKzM1NSwzNSBAQAogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZmxvYXQvVUxQcyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJGbG9hdGluZyBwb2ludCBtYXRjaGVyczogZmxvYXQvQ29tcG9zZWQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iRmxvYXRpbmcgcG9pbnQgbWF0Y2hlcnM6IGZsb2F0L0NvbnN0cnVjdG9yIHZhbGlkYXRpb24iIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyAtLSBhZGFwdGVycy9GaWx0ZXJpbmcgYnkgcHJlZGljYXRlL0Jhc2ljIHVzYWdlIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgLS0gYWRhcHRlcnMvRmlsdGVyaW5nIGJ5IHByZWRpY2F0ZS9UaHJvd3MgaWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIHZhbHVlcyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzL1Nob3J0ZW5pbmcgYSByYW5nZSIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzL1RyYW5zZm9ybWluZyBlbGVtZW50cy9TYW1lIHR5cGUiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyAtLSBhZGFwdGVycy9UcmFuc2Zvcm1pbmcgZWxlbWVudHMvRGlmZmVyZW50IHR5cGUiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyAtLSBhZGFwdGVycy9SZXBlYXRpbmcgYSBnZW5lcmF0b3IiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyAtLSBhZGFwdGVycy9DaHVua2luZyBhIGdlbmVyYXRvciBpbnRvIHNpemVkIHBpZWNlcy9OdW1iZXIgb2YgZWxlbWVudHMgaW4gc291cmNlIGlzIGRpdmlzaWJsZSBieSBjaHVuayBzaXplIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgLS0gYWRhcHRlcnMvQ2h1bmtpbmcgYSBnZW5lcmF0b3IgaW50byBzaXplZCBwaWVjZXMvTnVtYmVyIG9mIGVsZW1lbnRzIGluIHNvdXJjZSBpcyBub3QgZGl2aXNpYmxlIGJ5IGNodW5rIHNpemUiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyAtLSBhZGFwdGVycy9DaHVua2luZyBhIGdlbmVyYXRvciBpbnRvIHNpemVkIHBpZWNlcy9UaHJvd3Mgb24gdG9vIHNtYWxsIGdlbmVyYXRvcnMiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyAtLSBzaW1wbGUvb25lIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgLS0gc2ltcGxlL3R3byIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9TaW5nbGUgdmFsdWUiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMvUHJlc2V0IHZhbHVlcyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9HZW5lcmF0b3IgY29tYmluYXRvciIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9FeHBsaWNpdGx5IHR5cGVkIGdlbmVyYXRvciBzZXF1ZW5jZSIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9GaWx0ZXIgZ2VuZXJhdG9yIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL1Rha2UgZ2VuZXJhdG9yL1Rha2UgbGVzcyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9UYWtlIGdlbmVyYXRvci9UYWtlIG1vcmUiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMvTWFwIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL1JlcGVhdC9TaW5ndWxhciByZXBlYXQiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMvUmVwZWF0L0FjdHVhbCByZXBlYXQiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMvUmFuZ2UvUG9zaXRpdmUgYXV0byBzdGVwL0ludGVnZXIiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMvUmFuZ2UvTmVnYXRpdmUgYXV0byBzdGVwL0ludGVnZXIiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMvUmFuZ2UvUG9zaXRpdmUgbWFudWFsIHN0ZXAvSW50ZWdlci9FeGFjdCIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9SYW5nZS9Qb3NpdGl2ZSBtYW51YWwgc3RlcC9JbnRlZ2VyL1NsaWdodGx5IG92ZXIgZW5kIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL1JhbmdlL1Bvc2l0aXZlIG1hbnVhbCBzdGVwL0ludGVnZXIvU2xpZ2h0bHkgdW5kZXIgZW5kIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IkdlbmVyYXRvcnMgaW50ZXJuYWxzL1JhbmdlL05lZ2F0aXZlIG1hbnVhbCBzdGVwL0ludGVnZXIvRXhhY3QiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMvUmFuZ2UvTmVnYXRpdmUgbWFudWFsIHN0ZXAvSW50ZWdlci9TbGlnaHRseSBvdmVyIGVuZCIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHZW5lcmF0b3JzIGludGVybmFscy9SYW5nZS9OZWdhdGl2ZSBtYW51YWwgc3RlcC9JbnRlZ2VyL1NsaWdodGx5IHVuZGVyIGVuZCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJHcmVhdGVyLXRoYW4gaW5lcXVhbGl0aWVzIHdpdGggZGlmZmVyZW50IGVwc2lsb25zIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IklORk8gYW5kIFdBUk4gZG8gbm90IGFib3J0IHRlc3RzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IklORk8gZ2V0cyBsb2dnZWQgb24gZmFpbHVyZSIgdGltZT0ie2R1cmF0aW9ufSI+CkBAIC0zNTgsNiArNDYwLDcgQEAKICAgICAgIDwvZXJyb3I+CiAgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iT2JqZWN0cyB0aGF0IGV2YWx1YXRlZCBpbiBib29sZWFuIGNvbnRleHRzIGNhbiBiZSBjaGVja2VkIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Ik9wdGlvbmFsbHkgc3RhdGljIGFzc2VydGlvbnMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iT3JkZXJpbmcgY29tcGFyaXNvbiBjaGVja3MgdGhhdCBzaG91bGQgZmFpbCIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSI3ID4gNyIgdHlwZT0iQ0hFQ0siPgogQ29uZGl0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC00NjEsMTcgKzU2NCwxOCBAQAogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzL2VtcHR5IHRhZyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQYXJzZSB0ZXN0IG5hbWVzIGFuZCB0YWdzL2VtcHR5IHF1b3RlZCBuYW1lIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MvcXVvdGVkIHN0cmluZyBmb2xsb3dlZCBieSB0YWcgZXhjbHVzaW9uIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlBhcnNpbmcgYSBzdGQ6OnBhaXIiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUG9pbnRlcnMgY2FuIGJlIGNvbXBhcmVkIHRvIG51bGwiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJlZGljYXRlIG1hdGNoZXIgY2FuIGFjY2VwdCBjb25zdCBjaGFyKiIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9lbXB0eSBhcmdzIGRvbid0IGNhdXNlIGEgY3Jhc2giIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvZGVmYXVsdCAtIG5vIGFyZ3VtZW50cyIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS90ZXN0IGxpc3RzLzEgdGVzdCIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS90ZXN0IGxpc3RzL1NwZWNpZnkgb25lIHRlc3QgY2FzZSB1c2luZyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS90ZXN0IGxpc3RzL1NwZWNpZnkgb25lIHRlc3QgY2FzZSBleGNsdXNpb24gdXNpbmcgZXhjbHVkZToiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvdGVzdCBsaXN0cy9TcGVjaWZ5IG9uZSB0ZXN0IGNhc2UgZXhjbHVzaW9uIHVzaW5nIH4iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvcmVwb3J0ZXIvLXIvY29uc29sZSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9yZXBvcnRlci8tci94bWwiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvcmVwb3J0ZXIvLXIgeG1sIGFuZCBqdW5pdCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9yZXBvcnRlci8tLXJlcG9ydGVyL2p1bml0IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL3JlcG9ydGVyL09ubHkgb25lIHJlcG9ydGVyIGlzIGFjY2VwdGVkIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL3JlcG9ydGVyL211c3QgbWF0Y2ggb25lIG9mIHRoZSBhdmFpbGFibGUgb25lcyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9kZWJ1Z2dlci8tYiIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS9kZWJ1Z2dlci8tLWJyZWFrIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlByb2Nlc3MgY2FuIGJlIGNvbmZpZ3VyZWQgb24gY29tbWFuZCBsaW5lL2Fib3J0Ly1hIGFib3J0cyBhZnRlciBmaXJzdCBmYWlsdXJlIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CkBAIC00ODcsNiArNTkxLDkgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvdXNlLWNvbG91ci95ZXMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUvdXNlLWNvbG91ci9ubyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9jZXNzIGNhbiBiZSBjb25maWd1cmVkIG9uIGNvbW1hbmQgbGluZS91c2UtY29sb3VyL2Vycm9yIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlByb2R1Y3Qgd2l0aCBkaWZmZXJpbmcgYXJpdGllcyAtIHN0ZDo6dHVwbGUmbHQ7aW50LCBkb3VibGUsIGZsb2F0PiIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9kdWN0IHdpdGggZGlmZmVyaW5nIGFyaXRpZXMgLSBzdGQ6OnR1cGxlJmx0O2ludCwgZG91YmxlPiIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJQcm9kdWN0IHdpdGggZGlmZmVyaW5nIGFyaXRpZXMgLSBzdGQ6OnR1cGxlJmx0O2ludD4iIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iUmVjb25zdHJ1Y3Rpb24gc2hvdWxkIGJlIGJhc2VkIG9uIHN0cmluZ2lmaWNhdGlvbjogIzkxNCIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJIZXksIGl0cyB0cnV0aHkhIiB0eXBlPSJDSEVDSyI+CiBEZWNvbXBvc2l0aW9uLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CkBAIC01MDMsMTIgKzYxMCwxMyBAQAogTWF0Y2hlcnMudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJSZWdyZXNzaW9uIHRlc3QgIzEiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU1VDQ0VFRCBjb3VudHMgYXMgYSB0ZXN0IHBhc3MiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU1VDQ0VFRCBkb2VzIG5vdCByZXF1aXJlIGFuIGFyZ3VtZW50IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5GaXh0dXJlIiBuYW1lPSJTY2VuYXJpbzogQkREIHRlc3RzIHJlcXVpcmluZyBGaXh0dXJlcyB0byBwcm92aWRlIGNvbW1vbmx5LWFjY2Vzc2VkIGRhdGEgb3IgbWV0aG9kcy9HaXZlbjogTm8gb3BlcmF0aW9ucyBwcmVjZWRlIG1lIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5GaXh0dXJlIiBuYW1lPSJTY2VuYXJpbzogQkREIHRlc3RzIHJlcXVpcmluZyBGaXh0dXJlcyB0byBwcm92aWRlIGNvbW1vbmx5LWFjY2Vzc2VkIGRhdGEgb3IgbWV0aG9kcy9HaXZlbjogTm8gb3BlcmF0aW9ucyBwcmVjZWRlIG1lL1doZW46IFdlIGdldCB0aGUgY291bnQvVGhlbjogU3Vic2VxdWVudGx5IHZhbHVlcyBhcmUgaGlnaGVyIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlNjZW5hcmlvOiBEbyB0aGF0IHRoaW5nIHdpdGggdGhlIHRoaW5nL0dpdmVuOiBUaGlzIHN0dWZmIGV4aXN0cy9XaGVuOiBJIGRvIHRoaXMvVGhlbjogaXQgc2hvdWxkIGRvIHRoaXMiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU2NlbmFyaW86IERvIHRoYXQgdGhpbmcgd2l0aCB0aGUgdGhpbmcvR2l2ZW46IFRoaXMgc3R1ZmYgZXhpc3RzL1doZW46IEkgZG8gdGhpcy9UaGVuOiBpdCBzaG91bGQgZG8gdGhpcy9BbmQ6IGRvIHRoYXQiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU2NlbmFyaW86IERvIHRoYXQgdGhpbmcgd2l0aCB0aGUgdGhpbmcvR2l2ZW46IFRoaXMgc3R1ZmYgZXhpc3RzL0FuZCBnaXZlbjogQW5kIHNvbWUgYXNzdW1wdGlvbi9XaGVuOiBJIGRvIHRoaXMvVGhlbjogaXQgc2hvdWxkIGRvIHRoaXMiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU2NlbmFyaW86IERvIHRoYXQgdGhpbmcgd2l0aCB0aGUgdGhpbmcvR2l2ZW46IFRoaXMgc3R1ZmYgZXhpc3RzL0FuZCBnaXZlbjogQW5kIHNvbWUgYXNzdW1wdGlvbi9XaGVuOiBJIGRvIHRoaXMvVGhlbjogaXQgc2hvdWxkIGRvIHRoaXMvQW5kOiBkbyB0aGF0IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlNjZW5hcmlvOiBUaGlzIGlzIGEgcmVhbGx5IGxvbmcgc2NlbmFyaW8gbmFtZSB0byBzZWUgaG93IHRoZSBsaXN0IGNvbW1hbmQgZGVhbHMgd2l0aCB3cmFwcGluZy9HaXZlbjogQSBzZWN0aW9uIG5hbWUgdGhhdCBpcyBzbyBsb25nIHRoYXQgaXQgY2Fubm90IGZpdCBpbiBhIHNpbmdsZSBjb25zb2xlIHdpZHRoL1doZW46IFRoZSB0ZXN0IGhlYWRlcnMgYXJlIHByaW50ZWQgYXMgcGFydCBvZiB0aGUgbm9ybWFsIHJ1bm5pbmcgb2YgdGhlIHNjZW5hcmlvL1RoZW46IFRoZSwgZGVsaWJlcmF0ZWx5IHZlcnkgbG9uZyBhbmQgb3Zlcmx5IHZlcmJvc2UgKHlvdSBzZWUgd2hhdCBJIGRpZCB0aGVyZT8pIHNlY3Rpb24gbmFtZXMgbXVzdCB3cmFwLCBhbG9uZyB3aXRoIGFuIGluZGVudCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTY2VuYXJpbzogVmVjdG9yIHJlc2l6aW5nIGFmZmVjdHMgc2l6ZSBhbmQgY2FwYWNpdHkvR2l2ZW46IGFuIGVtcHR5IHZlY3RvciIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTY2VuYXJpbzogVmVjdG9yIHJlc2l6aW5nIGFmZmVjdHMgc2l6ZSBhbmQgY2FwYWNpdHkvR2l2ZW46IGFuIGVtcHR5IHZlY3Rvci9XaGVuOiBpdCBpcyBtYWRlIGxhcmdlci9UaGVuOiB0aGUgc2l6ZSBhbmQgY2FwYWNpdHkgZ28gdXAiIHRpbWU9IntkdXJhdGlvbn0iLz4KQEAgLTU0NSwxMSArNjUzLDcgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmL0VtcHR5IHN0cmluZyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdSZWYvRnJvbSBzdHJpbmcgbGl0ZXJhbCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdSZWYvRnJvbSBzdHJpbmcgbGl0ZXJhbC9jX3N0cigpIGRvZXMgbm90IGNhdXNlIGNvcHkiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmL0Zyb20gc3ViLXN0cmluZyIgdGltZT0ie2R1cmF0aW9ufSI+Ci0gICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSI+Ci1TdHJpbmcudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KLSAgICAgIDwvZmFpbHVyZT4KLSAgICA8L3Rlc3RjYXNlPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdSZWYvRnJvbSBzdWItc3RyaW5nIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlN0cmluZ1JlZi9TdWJzdHJpbmdzL3plcm8tYmFzZWQgc3Vic3RyaW5nIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlN0cmluZ1JlZi9TdWJzdHJpbmdzL2Nfc3RyKCkgY2F1c2VzIGNvcHkiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmL1N1YnN0cmluZ3Mvbm9uLXplcm8tYmFzZWQgc3Vic3RyaW5nIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CkBAIC01NjIsNiArNjY2LDcgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmL3RvIHN0ZDo6c3RyaW5nL2ltcGxpY2l0bHkgY29uc3RydWN0ZWQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmL3RvIHN0ZDo6c3RyaW5nL2V4cGxpY2l0bHkgY29uc3RydWN0ZWQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iU3RyaW5nUmVmL3RvIHN0ZDo6c3RyaW5nL2Fzc2lnbmVkIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlN0cmluZ1JlZi9Db3VudGluZyB1dGYtOCBjb2RlcG9pbnRzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlN0cmluZ2lmeWluZyBzdGQ6OmNocm9ubzo6ZHVyYXRpb24gaGVscGVycyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJTdHJpbmdpZnlpbmcgc3RkOjpjaHJvbm86OmR1cmF0aW9uIHdpdGggd2VpcmQgcmF0aW9zIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlN0cmluZ2lmeWluZyBzdGQ6OmNocm9ubzo6dGltZV9wb2ludCZsdDtzeXN0ZW1fY2xvY2s+IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CkBAIC01NzksMTAgKzY4NCw0MCBAQAogICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRhZyBhbGlhcyBjYW4gYmUgcmVnaXN0ZXJlZCBhZ2FpbnN0IHRhZyBwYXR0ZXJucy9UaGUgc2FtZSB0YWcgYWxpYXMgY2FuIG9ubHkgYmUgcmVnaXN0ZXJlZCBvbmNlIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRhZyBhbGlhcyBjYW4gYmUgcmVnaXN0ZXJlZCBhZ2FpbnN0IHRhZyBwYXR0ZXJucy9UYWcgYWxpYXNlcyBtdXN0IGJlIG9mIHRoZSBmb3JtIFtAbmFtZV0iIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGZsb2F0IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdC9yZXNpemluZyBiaWdnZXIgY2hhbmdlcyBzaXplIGFuZCBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQvcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQvcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eS9XZSBjYW4gdXNlIHRoZSAnc3dhcCB0cmljaycgdG8gcmVzZXQgdGhlIGNhcGFjaXR5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdC9yZXNlcnZpbmcgYmlnZ2VyIGNoYW5nZXMgY2FwYWNpdHkgYnV0IG5vdCBzaXplIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBmbG9hdC9yZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gaW50IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQvcmVzaXppbmcgYmlnZ2VyIGNoYW5nZXMgc2l6ZSBhbmQgY2FwYWNpdHkiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIGludC9yZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQvcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eS9XZSBjYW4gdXNlIHRoZSAnc3dhcCB0cmljaycgdG8gcmVzZXQgdGhlIGNhcGFjaXR5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBpbnQvcmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZSIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gaW50L3Jlc2VydmluZyBzbWFsbGVyIGRvZXMgbm90IGNoYW5nZSBzaXplIG9yIGNhcGFjaXR5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnN0cmluZyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcvcmVzaXppbmcgYmlnZ2VyIGNoYW5nZXMgc2l6ZSBhbmQgY2FwYWNpdHkiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6c3RyaW5nL3Jlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6c3RyaW5nL3Jlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkvV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcvcmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZSIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjpzdHJpbmcvcmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6dHVwbGUmbHQ7aW50LGZsb2F0PiIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjp0dXBsZSZsdDtpbnQsZmxvYXQ+L3Jlc2l6aW5nIGJpZ2dlciBjaGFuZ2VzIHNpemUgYW5kIGNhcGFjaXR5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRlbXBsYXRlVGVzdDogdmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQgLSBzdGQ6OnR1cGxlJmx0O2ludCxmbG9hdD4vcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjp0dXBsZSZsdDtpbnQsZmxvYXQ+L3Jlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkvV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gc3RkOjp0dXBsZSZsdDtpbnQsZmxvYXQ+L3Jlc2VydmluZyBiaWdnZXIgY2hhbmdlcyBjYXBhY2l0eSBidXQgbm90IHNpemUiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6dHVwbGUmbHQ7aW50LGZsb2F0Pi9yZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUZXN0IGNhc2Ugd2l0aCBvbmUgYXJndW1lbnQiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGVzdCBlbnVtIGJpdCB2YWx1ZXMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGhlIE5PX0ZBSUwgbWFjcm8gcmVwb3J0cyBhIGZhaWx1cmUgYnV0IGRvZXMgbm90IGZhaWwgdGhlIHRlc3QiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGhpcyB0ZXN0ICdzaG91bGQnIGZhaWwgYnV0IGRvZXNuJ3QiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVGhyb3duIHN0cmluZyBsaXRlcmFscyBhcmUgdHJhbnNsYXRlZCIgdGltZT0ie2R1cmF0aW9ufSI+CisgICAgICA8ZXJyb3IgdHlwZT0iVEVTVF9DQVNFIj4KK0ZvciBzb21lIHJlYXNvbiBzb21lb25lIGlzIHRocm93aW5nIGEgc3RyaW5nIGxpdGVyYWwhCitFeGNlcHRpb24udGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKyAgICAgIDwvZXJyb3I+CisgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVHJhY2tlciIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUcmFja2VyL3N1Y2Nlc3NmdWxseSBjbG9zZSBvbmUgc2VjdGlvbiIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJUcmFja2VyL2ZhaWwgb25lIHNlY3Rpb24iIHRpbWU9IntkdXJhdGlvbn0iLz4KQEAgLTU5MywxMyArNzI4LDYgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVHJhY2tlci9zdWNjZXNzZnVsbHkgY2xvc2Ugb25lIHNlY3Rpb24sIHRoZW4gZmluZCBhbm90aGVyL1JlLWVudGVyIC0gc2tpcHMgUzEgYW5kIGVudGVycyBTMi9TdWNjZXNzZnVsbHkgY2xvc2UgUzIiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVHJhY2tlci9zdWNjZXNzZnVsbHkgY2xvc2Ugb25lIHNlY3Rpb24sIHRoZW4gZmluZCBhbm90aGVyL1JlLWVudGVyIC0gc2tpcHMgUzEgYW5kIGVudGVycyBTMi9mYWlsIFMyIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRyYWNrZXIvb3BlbiBhIG5lc3RlZCBzZWN0aW9uIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRyYWNrZXIvc3RhcnQgYSBnZW5lcmF0b3IiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVHJhY2tlci9zdGFydCBhIGdlbmVyYXRvci9jbG9zZSBvdXRlciBzZWN0aW9uIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRyYWNrZXIvc3RhcnQgYSBnZW5lcmF0b3IvY2xvc2Ugb3V0ZXIgc2VjdGlvbi9SZS1lbnRlciBmb3Igc2Vjb25kIGdlbmVyYXRpb24iIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVHJhY2tlci9zdGFydCBhIGdlbmVyYXRvci9TdGFydCBhIG5ldyBpbm5lciBzZWN0aW9uIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlRyYWNrZXIvc3RhcnQgYSBnZW5lcmF0b3IvU3RhcnQgYSBuZXcgaW5uZXIgc2VjdGlvbi9SZS1lbnRlciBmb3Igc2Vjb25kIGdlbmVyYXRpb24iIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVHJhY2tlci9zdGFydCBhIGdlbmVyYXRvci9GYWlsIGFuIGlubmVyIHNlY3Rpb24iIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iVHJhY2tlci9zdGFydCBhIGdlbmVyYXRvci9GYWlsIGFuIGlubmVyIHNlY3Rpb24vUmUtZW50ZXIgZm9yIHNlY29uZCBnZW5lcmF0aW9uIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBjYW4gYmUgdHJhbnNsYXRlZCIgdGltZT0ie2R1cmF0aW9ufSI+CiAgICAgICA8ZXJyb3IgdHlwZT0iVEVTVF9DQVNFIj4KIDMuMTQKQEAgLTcwMiw2ICs4MzAsMTIgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iWG1sRW5jb2RlL3N0cmluZyB3aXRoIHF1b3RlcyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJYbWxFbmNvZGUvc3RyaW5nIHdpdGggY29udHJvbCBjaGFyICgxKSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJYbWxFbmNvZGUvc3RyaW5nIHdpdGggY29udHJvbCBjaGFyICh4N0YpIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlhtbEVuY29kZTogVVRGLTgvVmFsaWQgdXRmLTggc3RyaW5ncyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJYbWxFbmNvZGU6IFVURi04L0ludmFsaWQgdXRmLTggc3RyaW5ncy9WYXJpb3VzIGJyb2tlbiBzdHJpbmdzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlhtbEVuY29kZTogVVRGLTgvSW52YWxpZCB1dGYtOCBzdHJpbmdzL092ZXJsb25nIGVuY29kaW5ncyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJYbWxFbmNvZGU6IFVURi04L0ludmFsaWQgdXRmLTggc3RyaW5ncy9TdXJyb2dhdGUgcGFpcnMiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iWG1sRW5jb2RlOiBVVEYtOC9JbnZhbGlkIHV0Zi04IHN0cmluZ3MvSW52YWxpZCBzdGFydCBieXRlIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9IlhtbEVuY29kZTogVVRGLTgvSW52YWxpZCB1dGYtOCBzdHJpbmdzL01pc3NpbmcgY29udGludWF0aW9uIGJ5dGUocykiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iYXJyYXkmbHQ7aW50LCBOPiAtPiB0b1N0cmluZyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJhdG9taWMgaWYiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0iYm9vbGVhbiBtZW1iZXIiIHRpbWU9IntkdXJhdGlvbn0iLz4KQEAgLTczNCwxMiArODY4LDMxIEBACiBNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ianVzdCBmYWlsdXJlIGFmdGVyIHVuc2NvcGVkIGluZm8iIHRpbWU9IntkdXJhdGlvbn0iPgorICAgICAgPGZhaWx1cmUgdHlwZT0iRkFJTCI+CitwcmV2aW91cyB1bnNjb3BlZCBpbmZvIFNIT1VMRCBub3QgYmUgc2VlbgorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorICAgICAgPC9mYWlsdXJlPgorICAgIDwvdGVzdGNhc2U+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9ImxvbmcgbG9uZyIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9zMSIgdGltZT0ie2R1cmF0aW9ufSI+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Imxvb3BlZCBTRUNUSU9OIHRlc3RzL2IgaXMgY3VycmVudGx5OiAwIiB0aW1lPSJ7ZHVyYXRpb259Ij4KICAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjAgPiAxIiB0eXBlPSJDSEVDSyI+CiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ibG9vcGVkIFNFQ1RJT04gdGVzdHMvYiBpcyBjdXJyZW50bHk6IDEiIHRpbWU9IntkdXJhdGlvbn0iPgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMSA+IDEiIHR5cGU9IkNIRUNLIj4KK01pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KKyAgICAgIDwvZmFpbHVyZT4KKyAgICA8L3Rlc3RjYXNlPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogMiIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogMyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogNCIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogNSIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogNiIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogNyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogOCIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgU0VDVElPTiB0ZXN0cy9iIGlzIGN1cnJlbnRseTogOSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJsb29wZWQgdGVzdHMiIHRpbWU9IntkdXJhdGlvbn0iPgogICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iMSA9PSAwIiB0eXBlPSJDSEVDSyI+CiBUZXN0aW5nIGlmIGZpYlswXSAoMSkgaXMgZXZlbgpAQCAtNzY2LDI0ICs5MTksNDUgQEAKIE1pc2MudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJtb3JlIG5lc3RlZCBTRUNUSU9OIHRlc3RzL3MyL3MxIiB0aW1lPSJ7ZHVyYXRpb259Ij4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ibWl4IGluZm8sIHVuc2NvcGVkIGluZm8gYW5kIHdhcm5pbmciIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ibW9yZSBuZXN0ZWQgU0VDVElPTiB0ZXN0cy9lcXVhbC9kb2Vzbid0IGVxdWFsIiB0aW1lPSJ7ZHVyYXRpb259Ij4KICAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9IjEgPT0gMiIgdHlwZT0iUkVRVUlSRSI+CiBNaXNjLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CiAgICAgICA8L2ZhaWx1cmU+CiAgICAgPC90ZXN0Y2FzZT4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ibW9yZSBuZXN0ZWQgU0VDVElPTiB0ZXN0cy9zMS9zMyIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJtb3JlIG5lc3RlZCBTRUNUSU9OIHRlc3RzL3MxL3M0IiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Im5lc3RlZCBTRUNUSU9OIHRlc3RzL3MxIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Im5lc3RlZCBTRUNUSU9OIHRlc3RzL3MxL3MyIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Im1vcmUgbmVzdGVkIFNFQ1RJT04gdGVzdHMvZG9lc24ndCBlcXVhbC9ub3QgZXF1YWwiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ibW9yZSBuZXN0ZWQgU0VDVElPTiB0ZXN0cy9kb2Vzbid0IGVxdWFsL2xlc3MgdGhhbiIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJuZXN0ZWQgU0VDVElPTiB0ZXN0cy9kb2Vzbid0IGVxdWFsIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Im5lc3RlZCBTRUNUSU9OIHRlc3RzL2RvZXNuJ3QgZXF1YWwvbm90IGVxdWFsIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Im5vbiBzdHJlYW1hYmxlIC0gd2l0aCBjb252LiBvcCIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJub24tY29weWFibGUgb2JqZWN0cyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJub3QgYWxsb3dlZCIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJub3QgcHJpbnRzIHVuc2NvcGVkIGluZm8gZnJvbSBwcmV2aW91cyBmYWlsdXJlcyIgdGltZT0ie2R1cmF0aW9ufSI+CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSI+Cit0aGlzIFNIT1VMRCBiZSBzZWVuCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisgICAgICA8L2ZhaWx1cmU+CisgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ibnVsbCBzdHJpbmdzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9Im51bGxfcHRyIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InBhaXImbHQ7cGFpciZsdDtpbnQsY29uc3QgY2hhciAqLHBhaXImbHQ7c3RkOjpzdHJpbmcsaW50PiA+IC0+IHRvU3RyaW5nIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InBvaW50ZXIgdG8gY2xhc3MiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0icmFuZG9tIFNFQ1RJT04gdGVzdHMvczEiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0icmFuZG9tIFNFQ1RJT04gdGVzdHMvczIiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0icHJpbnQgdW5zY29wZWQgaW5mbyBpZiBwYXNzaW5nIHVuc2NvcGVkIGluZm8gaXMgcHJpbnRlZCIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJwcmludHMgdW5zY29wZWQgaW5mbyBvbiBmYWlsdXJlIiB0aW1lPSJ7ZHVyYXRpb259Ij4KKyAgICAgIDxmYWlsdXJlIG1lc3NhZ2U9ImZhbHNlIiB0eXBlPSJSRVFVSVJFIj4KK3RoaXMgU0hPVUxEIGJlIHNlZW4KK3RoaXMgU0hPVUxEIGFsc28gYmUgc2VlbgorTWVzc2FnZS50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorICAgICAgPC9mYWlsdXJlPgorICAgIDwvdGVzdGNhc2U+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InByaW50cyB1bnNjb3BlZCBpbmZvIG9ubHkgZm9yIHRoZSBmaXJzdCBhc3NlcnRpb24iIHRpbWU9IntkdXJhdGlvbn0iPgorICAgICAgPGZhaWx1cmUgbWVzc2FnZT0iZmFsc2UiIHR5cGU9IkNIRUNLIj4KK3RoaXMgU0hPVUxEIGJlIHNlZW4gb25seSBPTkNFCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisgICAgICA8L2ZhaWx1cmU+CisgICAgPC90ZXN0Y2FzZT4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0icmFuZG9tIFNFQ1RJT04gdGVzdHMvZG9lc24ndCBlcXVhbCIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJyYW5kb20gU0VDVElPTiB0ZXN0cy9ub3QgZXF1YWwiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0icmVwbGFjZUluUGxhY2UvcmVwbGFjZSBzaW5nbGUgY2hhciIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJyZXBsYWNlSW5QbGFjZS9yZXBsYWNlIHR3byBjaGFycyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJyZXBsYWNlSW5QbGFjZS9yZXBsYWNlIGZpcnN0IGNoYXIiIHRpbWU9IntkdXJhdGlvbn0iLz4KQEAgLTgwNCw2ICs5NzgsMjIgQEAKIE1lc3NhZ2UudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJzdGFja3MgdW5zY29wZWQgaW5mbyBpbiBsb29wcyIgdGltZT0ie2R1cmF0aW9ufSI+CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJmYWxzZSIgdHlwZT0iQ0hFQ0siPgorQ291bnQgMSB0byAzLi4uCisxCisyCiszCitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisgICAgICA8L2ZhaWx1cmU+CisgICAgICA8ZmFpbHVyZSBtZXNzYWdlPSJmYWxzZSIgdHlwZT0iQ0hFQ0siPgorQ291bnQgNCB0byA2Li4uCis0Cis1Cis2CitNZXNzYWdlLnRlc3RzLmNwcDo8bGluZSBudW1iZXI+CisgICAgICA8L2ZhaWx1cmU+CisgICAgPC90ZXN0Y2FzZT4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ic3RkOjptYXAgaXMgY29udmVydGlibGUgc3RyaW5nL2VtcHR5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InN0ZDo6bWFwIGlzIGNvbnZlcnRpYmxlIHN0cmluZy9zaW5nbGUgaXRlbSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJzdGQ6Om1hcCBpcyBjb252ZXJ0aWJsZSBzdHJpbmcvc2V2ZXJhbCBpdGVtcyIgdGltZT0ie2R1cmF0aW9ufSIvPgpAQCAtODE4LDE3ICsxMDA4LDI3IEBACiBUcmlja3kudGVzdHMuY3BwOjxsaW5lIG51bWJlcj4KICAgICAgIDwvZmFpbHVyZT4KICAgICA8L3Rlc3RjYXNlPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJzdHJpbmdpZnkgcmFuZ2VzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InN0cmluZ2lmeSggaGFzX21ha2VyICkiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ic3RyaW5naWZ5KCBoYXNfbWFrZXJfYW5kX3RvU3RyaW5nICkiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ic3RyaW5naWZ5KCBoYXNfbWFrZXJfYW5kX29wZXJhdG9yICkiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ic3RyaW5naWZ5KCBoYXNfbmVpdGhlciApIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InN0cmluZ2lmeSggaGFzX29wZXJhdG9yICkiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ic3RyaW5naWZ5KCBoYXNfdGVtcGxhdGVfb3BlcmF0b3IgKSIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJzdHJpbmdpZnkoIHZlY3RvcnMmbHQ7aGFzX21ha2VyPiApIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InN0cmluZ2lmeSggdmVjdG9ycyZsdDtoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiApIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InN0cmluZ2lmeSggdmVjdG9ycyZsdDtoYXNfb3BlcmF0b3I+ICkiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ic3RybGVuMyIgdGltZT0ie2R1cmF0aW9ufSIvPgorICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJ0YWJsZXMiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0idGhyb3duIHN0ZDo6c3RyaW5ncyBhcmUgdHJhbnNsYXRlZCIgdGltZT0ie2R1cmF0aW9ufSI+CisgICAgICA8ZXJyb3IgdHlwZT0iVEVTVF9DQVNFIj4KK1doeSB3b3VsZCB5b3UgdGhyb3cgYSBzdGQ6OnN0cmluZz8KK0V4Y2VwdGlvbi50ZXN0cy5jcHA6PGxpbmUgbnVtYmVyPgorICAgICAgPC9lcnJvcj4KKyAgICA8L3Rlc3RjYXNlPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJ0b1N0cmluZyBvbiBjb25zdCB3Y2hhcl90IGNvbnN0IHBvaW50ZXIgcmV0dXJucyB0aGUgc3RyaW5nIGNvbnRlbnRzIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InRvU3RyaW5nIG9uIGNvbnN0IHdjaGFyX3QgcG9pbnRlciByZXR1cm5zIHRoZSBzdHJpbmcgY29udGVudHMiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0idG9TdHJpbmcgb24gd2NoYXJfdCBjb25zdCBwb2ludGVyIHJldHVybnMgdGhlIHN0cmluZyBjb250ZW50cyIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJ0b1N0cmluZyBvbiB3Y2hhcl90IHJldHVybnMgdGhlIHN0cmluZyBjb250ZW50cyIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJ0b1N0cmluZyBzdHJlYW1hYmxlIHJhbmdlIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InRvU3RyaW5nKCB2ZWN0b3JzJmx0O2hhc19tYWtlcj4gKSIgdGltZT0ie2R1cmF0aW9ufSIvPgotICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJ0b1N0cmluZyggdmVjdG9ycyZsdDtoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiApIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InRvU3RyaW5nKCB2ZWN0b3JzJmx0O2hhc19vcGVyYXRvcj4gKSIgdGltZT0ie2R1cmF0aW9ufSIvPgogICAgIDx0ZXN0Y2FzZSBjbGFzc25hbWU9IjxleGUtbmFtZT4uZ2xvYmFsIiBuYW1lPSJ0b1N0cmluZyhlbnVtIGNsYXNzIHcvb3BlcmF0b3ImbHQ7Jmx0OykiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0idG9TdHJpbmcoZW51bSBjbGFzcykiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0idG9TdHJpbmcoZW51bSB3L29wZXJhdG9yJmx0OyZsdDspIiB0aW1lPSJ7ZHVyYXRpb259Ii8+CkBAIC04NTAsMTQgKzEwNTAsMTYgQEAKICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0idmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQvcmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eS9XZSBjYW4gdXNlIHRoZSAnc3dhcCB0cmljaycgdG8gcmVzZXQgdGhlIGNhcGFjaXR5IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkL3Jlc2VydmluZyBiaWdnZXIgY2hhbmdlcyBjYXBhY2l0eSBidXQgbm90IHNpemUiIHRpbWU9IntkdXJhdGlvbn0iLz4KICAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0idmVjdG9ycyBjYW4gYmUgc2l6ZWQgYW5kIHJlc2l6ZWQvcmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkiIHRpbWU9IntkdXJhdGlvbn0iLz4KLSAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ieG1sZW50aXR5Y2hlY2svZW1iZWRkZWQgeG1sIiB0aW1lPSJ7ZHVyYXRpb259Ii8+Ci0gICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InhtbGVudGl0eWNoZWNrL2VuY29kZWQgY2hhcnMiIHRpbWU9IntkdXJhdGlvbn0iLz4KKyAgICA8dGVzdGNhc2UgY2xhc3NuYW1lPSI8ZXhlLW5hbWU+Lmdsb2JhbCIgbmFtZT0ieG1sZW50aXR5Y2hlY2svZW1iZWRkZWQgeG1sOiAmbHQ7dGVzdD5pdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZW1iZWQgeG1sIGNoYXJhY3RlcnMsIHN1Y2ggYXMgJmx0OywgJnF1b3Q7IG9yICZhbXA7LCBvciBldmVuIHdob2xlICZsdDt4bWw+ZG9jdW1lbnRzJmx0Oy94bWw+IHdpdGhpbiBhbiBhdHRyaWJ1dGUmbHQ7L3Rlc3Q+IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CisgICAgPHRlc3RjYXNlIGNsYXNzbmFtZT0iPGV4ZS1uYW1lPi5nbG9iYWwiIG5hbWU9InhtbGVudGl0eWNoZWNrL2VuY29kZWQgY2hhcnM6IHRoZXNlIHNob3VsZCBhbGwgYmUgZW5jb2RlZDogJmFtcDsmYW1wOyZhbXA7JnF1b3Q7JnF1b3Q7JnF1b3Q7Jmx0OyZsdDsmbHQ7JmFtcDsmcXVvdDsmbHQ7Jmx0OyZhbXA7JnF1b3Q7IiB0aW1lPSJ7ZHVyYXRpb259Ii8+CiAgICAgPHN5c3RlbS1vdXQ+CitUaGlzIHdvdWxkIG5vdCBiZSBjYXVnaHQgcHJldmlvdXNseQogQSBzdHJpbmcgc2VudCBkaXJlY3RseSB0byBzdGRvdXQKIE1lc3NhZ2UgZnJvbSBzZWN0aW9uIG9uZQogTWVzc2FnZSBmcm9tIHNlY3Rpb24gdHdvCiAgICAgPC9zeXN0ZW0tb3V0PgogICAgIDxzeXN0ZW0tZXJyPgorTm9yIHdvdWxkIHRoaXMKIEEgc3RyaW5nIHNlbnQgZGlyZWN0bHkgdG8gc3RkZXJyCiBBIHN0cmluZyBzZW50IHRvIHN0ZGVyciB2aWEgY2xvZwogICAgIDwvc3lzdGVtLWVycj4KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L0Jhc2VsaW5lcy94bWwuc3cuYXBwcm92ZWQudHh0IGIvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL3htbC5zdy5hcHByb3ZlZC50eHQKaW5kZXggY2VhYzMzYi4uNjM3Njg5YSAxMDA2NDQKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL3htbC5zdy5hcHByb3ZlZC50eHQKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzL3htbC5zdy5hcHByb3ZlZC50eHQKQEAgLTEsNSArMSw2IEBACiA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgogPENhdGNoIG5hbWU9IjxleGUtbmFtZT4iPgorICA8UmFuZG9tbmVzcyBzZWVkPSIxIi8+CiAgIDxHcm91cCBuYW1lPSI8ZXhlLW5hbWU+Ij4KICAgICA8VGVzdENhc2UgbmFtZT0iIyBBIHRlc3QgbmFtZSB0aGF0IHN0YXJ0cyB3aXRoIGEgIyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgpAQCAtOTMsNiArOTQsNzggQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSIjMTE3NSAtIEhpZGRlbiBUZXN0IiB0YWdzPSJbLl0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSIjMTIzOCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db21waWxhdGlvbi50ZXN0cy5jcHAiID4KKyAgICAgIDxJbmZvPgorICAgICAgICB1YXJyIDo9ICIxMjMiCisgICAgICA8L0luZm8+CisgICAgICA8SW5mbz4KKyAgICAgICAgc2FyciA6PSAiNDU2IgorICAgICAgPC9JbmZvPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db21waWxhdGlvbi50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHN0ZDo6bWVtY21wKHVhcnIsICIxMjMiLCBzaXplb2YodWFycikpID09IDAKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDAgPT0gMAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEluZm8+CisgICAgICAgIHVhcnIgOj0gIjEyMyIKKyAgICAgIDwvSW5mbz4KKyAgICAgIDxJbmZvPgorICAgICAgICBzYXJyIDo9ICI0NTYiCisgICAgICA8L0luZm8+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NvbXBpbGF0aW9uLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgc3RkOjptZW1jbXAoc2FyciwgIjQ1NiIsIHNpemVvZihzYXJyKSkgPT0gMAorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMCA9PSAwCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iIzEyNDUiIHRhZ3M9Iltjb21waWxhdGlvbl0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ29tcGlsYXRpb24udGVzdHMuY3BwIiA+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iIzE0MDMiIHRhZ3M9Iltjb21waWxhdGlvbl0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ29tcGlsYXRpb24udGVzdHMuY3BwIiA+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NvbXBpbGF0aW9uLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgaDEgPT0gaDIKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIFsxNDAzIGhlbHBlcl0gPT0gWzE0MDMgaGVscGVyXQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9IiMxNTE0OiBzdGRlcnIvc3Rkb3V0IGlzIG5vdCBjYXB0dXJlZCBpbiB0ZXN0cyBhYm9ydGVkIGJ5IGFuIGV4Y2VwdGlvbiIgdGFncz0iWy5dW291dHB1dC1jYXB0dXJlXVtyZWdyZXNzaW9uXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ucmlja3kudGVzdHMuY3BwIiA+CisgICAgICA8RmFpbHVyZSBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAiID4KKyAgICAgICAgMTUxNAorICAgICAgPC9GYWlsdXJlPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiPgorICAgICAgICA8U3RkT3V0PgorVGhpcyB3b3VsZCBub3QgYmUgY2F1Z2h0IHByZXZpb3VzbHkKKyAgICAgICAgPC9TdGRPdXQ+CisgICAgICAgIDxTdGRFcnI+CitOb3Igd291bGQgdGhpcworICAgICAgICA8L1N0ZEVycj4KKyAgICAgIDwvT3ZlcmFsbFJlc3VsdD4KKyAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSIjMTU0OCIgdGFncz0iW2NvbXBpbGF0aW9uXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db21waWxhdGlvbi50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ29tcGlsYXRpb24udGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBzdGQ6OmlzX3NhbWUmbHQ7VHlwZUxpc3QmbHQ7aW50PiwgVHlwZUxpc3QmbHQ7aW50Pj46OnZhbHVlCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICB0cnVlCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KICAgICA8VGVzdENhc2UgbmFtZT0iIzc0OCAtIGNhcHR1cmVzIHdpdGggdW5leHBlY3RlZCBleGNlcHRpb25zIiB0YWdzPSJbIXNob3VsZGZhaWxdWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KICAgICAgIDxTZWN0aW9uIG5hbWU9Im91dHNpZGUgYXNzZXJ0aW9ucyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CiAgICAgICAgIDxJbmZvPgpAQCAtNDczLDYgKzU0Niw2NTcgQEAKICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSIzeDN4MyBpbnRzIiB0YWdzPSJbZ2VuZXJhdG9yc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgeQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMSAmbHQ7IDQKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB5ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNCAmbHQ7IDcKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAxICZsdDsgNworICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB5CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAxICZsdDsgNAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHkgJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA0ICZsdDsgOAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDEgJmx0OyA4CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHkKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDEgJmx0OyA0CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeSAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDQgJmx0OyA5CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMSAmbHQ7IDkKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgeQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMSAmbHQ7IDUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB5ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNSAmbHQ7IDcKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAxICZsdDsgNworICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB5CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAxICZsdDsgNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHkgJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA1ICZsdDsgOAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDEgJmx0OyA4CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHkKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDEgJmx0OyA1CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeSAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgJmx0OyA5CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMSAmbHQ7IDkKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgeQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMSAmbHQ7IDYKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB5ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNiAmbHQ7IDcKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAxICZsdDsgNworICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB5CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAxICZsdDsgNgorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHkgJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA2ICZsdDsgOAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDEgJmx0OyA4CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHkKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDEgJmx0OyA2CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeSAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDYgJmx0OyA5CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMSAmbHQ7IDkKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgeQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMiAmbHQ7IDQKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB5ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNCAmbHQ7IDcKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAyICZsdDsgNworICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB5CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAyICZsdDsgNAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHkgJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA0ICZsdDsgOAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDIgJmx0OyA4CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHkKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDIgJmx0OyA0CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeSAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDQgJmx0OyA5CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMiAmbHQ7IDkKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgeQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMiAmbHQ7IDUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB5ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNSAmbHQ7IDcKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAyICZsdDsgNworICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB5CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAyICZsdDsgNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHkgJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA1ICZsdDsgOAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDIgJmx0OyA4CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHkKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDIgJmx0OyA1CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeSAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgJmx0OyA5CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMiAmbHQ7IDkKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgeQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMiAmbHQ7IDYKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB5ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNiAmbHQ7IDcKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAyICZsdDsgNworICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB5CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAyICZsdDsgNgorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHkgJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA2ICZsdDsgOAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDIgJmx0OyA4CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHkKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDIgJmx0OyA2CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeSAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDYgJmx0OyA5CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMiAmbHQ7IDkKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgeQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMyAmbHQ7IDQKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB5ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNCAmbHQ7IDcKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAzICZsdDsgNworICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB5CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAzICZsdDsgNAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHkgJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA0ICZsdDsgOAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDMgJmx0OyA4CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHkKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDMgJmx0OyA0CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeSAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDQgJmx0OyA5CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMyAmbHQ7IDkKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgeQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMyAmbHQ7IDUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB5ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNSAmbHQ7IDcKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAzICZsdDsgNworICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB5CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAzICZsdDsgNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHkgJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA1ICZsdDsgOAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDMgJmx0OyA4CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHkKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDMgJmx0OyA1CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeSAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgJmx0OyA5CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMyAmbHQ7IDkKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgeQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMyAmbHQ7IDYKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB5ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNiAmbHQ7IDcKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAzICZsdDsgNworICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHggJmx0OyB5CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAzICZsdDsgNgorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHkgJmx0OyB6CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA2ICZsdDsgOAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDMgJmx0OyA4CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeCAmbHQ7IHkKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDMgJmx0OyA2CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeSAmbHQ7IHoKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDYgJmx0OyA5CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB4ICZsdDsgegorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMyAmbHQ7IDkKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJBIE1FVEhPRF9BU19URVNUX0NBU0UgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyIgdGFncz0iWy5dW2NsYXNzXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CkBAIC00OTUsNiArMTIxOSwxNjAgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gVGVtcGxhdGVfRm9vJmx0O2Zsb2F0PiIgdGFncz0iWy5dW2NsYXNzXVtmYWlsaW5nXVtwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmVfMiZsdDtUZXN0VHlwZT46Om1fYS5zaXplKCkgPT0gMQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMCA9PSAxCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgorICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBUZW1wbGF0ZV9Gb28mbHQ7aW50PiIgdGFncz0iWy5dW2NsYXNzXVtmYWlsaW5nXVtwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmVfMiZsdDtUZXN0VHlwZT46Om1fYS5zaXplKCkgPT0gMQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMCA9PSAxCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgorICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBzdGQ6OnZlY3RvciZsdDtmbG9hdD4iIHRhZ3M9IlsuXVtjbGFzc11bZmFpbGluZ11bcHJvZHVjdF1bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0iZmFsc2UiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDEKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDAgPT0gMQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KKyAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gc3RkOjp2ZWN0b3ImbHQ7aW50PiIgdGFncz0iWy5dW2NsYXNzXVtmYWlsaW5nXVtwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmVfMiZsdDtUZXN0VHlwZT46Om1fYS5zaXplKCkgPT0gMQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMCA9PSAxCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgorICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBUZW1wbGF0ZV9Gb28mbHQ7ZmxvYXQ+IiB0YWdzPSJbY2xhc3NdW3Byb2R1Y3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDAKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDAgPT0gMAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBUZW1wbGF0ZV9Gb28mbHQ7aW50PiIgdGFncz0iW2NsYXNzXVtwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgVGVtcGxhdGVfRml4dHVyZV8yJmx0O1Rlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAwCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAwID09IDAKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gc3RkOjp2ZWN0b3ImbHQ7ZmxvYXQ+IiB0YWdzPSJbY2xhc3NdW3Byb2R1Y3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDAKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDAgPT0gMAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBzdGQ6OnZlY3RvciZsdDtpbnQ+IiB0YWdzPSJbY2xhc3NdW3Byb2R1Y3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBUZW1wbGF0ZV9GaXh0dXJlXzImbHQ7VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDAKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDAgPT0gMAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIC0gZG91YmxlIiB0YWdzPSJbLl1bY2xhc3NdW2ZhaWxpbmddW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgVGVtcGxhdGVfRml4dHVyZSZsdDtUZXN0VHlwZT46Om1fYSA9PSAyCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAxLjAgPT0gMgorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KKyAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyAtIGZsb2F0IiB0YWdzPSJbLl1bY2xhc3NdW2ZhaWxpbmddW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgVGVtcGxhdGVfRml4dHVyZSZsdDtUZXN0VHlwZT46Om1fYSA9PSAyCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAxLjBmID09IDIKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CisgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMgLSBpbnQiIHRhZ3M9IlsuXVtjbGFzc11bZmFpbGluZ11bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0iZmFsc2UiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBUZW1wbGF0ZV9GaXh0dXJlJmx0O1Rlc3RUeXBlPjo6bV9hID09IDIKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDEgPT0gMgorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KKyAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyAtIGRvdWJsZSIgdGFncz0iW2NsYXNzXVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgVGVtcGxhdGVfRml4dHVyZSZsdDtUZXN0VHlwZT46Om1fYSA9PSAxCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAxLjAgPT0gMQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9IkEgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IHN1Y2NlZWRzIC0gZmxvYXQiIHRhZ3M9IltjbGFzc11bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmUmbHQ7VGVzdFR5cGU+OjptX2EgPT0gMQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMS4wZiA9PSAxCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iQSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgc3VjY2VlZHMgLSBpbnQiIHRhZ3M9IltjbGFzc11bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIFRlbXBsYXRlX0ZpeHR1cmUmbHQ7VGVzdFR5cGU+OjptX2EgPT0gMQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMSA9PSAxCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KICAgICA8VGVzdENhc2UgbmFtZT0iQSBURVNUX0NBU0VfTUVUSE9EIGJhc2VkIHRlc3QgcnVuIHRoYXQgZmFpbHMiIHRhZ3M9IlsuXVtjbGFzc11bZmFpbGluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ2xhc3MudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgpAQCAtNTE3LDYgKzEzOTUsMTAxIEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSAtIEZvbyZsdDtmbG9hdD4iIHRhZ3M9Iltwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHguc2l6ZSgpID09IDAKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDAgPT0gMAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9IkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2UgLSBGb28mbHQ7aW50PiIgdGFncz0iW3Byb2R1Y3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeC5zaXplKCkgPT0gMAorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMCA9PSAwCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSAtIHN0ZDo6dmVjdG9yJmx0O2Zsb2F0PiIgdGFncz0iW3Byb2R1Y3RdW3RlbXBsYXRlXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgeC5zaXplKCkgPT0gMAorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMCA9PSAwCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iQSBUZW1wbGF0ZSBwcm9kdWN0IHRlc3QgY2FzZSAtIHN0ZDo6dmVjdG9yJmx0O2ludD4iIHRhZ3M9Iltwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHguc2l6ZSgpID09IDAKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDAgPT0gMAorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9IkEgY29tcGFyaXNvbiB0aGF0IHVzZXMgbGl0ZXJhbHMgaW5zdGVhZCBvZiB0aGUgbm9ybWFsIGNvbnN0cnVjdG9yIiB0YWdzPSJbQXBwcm94XSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwIiA+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0FwcHJveC50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIGQgPT0gMS4yM19hCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAxLjIzID09IEFwcHJveCggMS4yMyApCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0FwcHJveC50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIGQgIT0gMS4yMl9hCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAxLjIzICE9IEFwcHJveCggMS4yMiApCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0FwcHJveC50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIC1kID09IC0xLjIzX2EKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIC0xLjIzID09IEFwcHJveCggLTEuMjMgKQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBkID09IDEuMl9hIC5lcHNpbG9uKC4xKQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMS4yMyA9PSBBcHByb3goIDEuMiApCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0FwcHJveC50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIGQgIT0gMS4yX2EgLmVwc2lsb24oLjAwMSkKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDEuMjMgIT0gQXBwcm94KCAxLjIgKQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBkID09IDFfYSAuZXBzaWxvbiguMykKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDEuMjMgPT0gQXBwcm94KCAxLjAgKQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9IkEgY291cGxlIG9mIG5lc3RlZCBzZWN0aW9ucyBmb2xsb3dlZCBieSBhIGZhaWx1cmUiIHRhZ3M9IlsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgPFNlY3Rpb24gbmFtZT0iT3V0ZXIiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgPFNlY3Rpb24gbmFtZT0iSW5uZXIiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KQEAgLTg2Nyw2ICsxODQwLDQ3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iQXJiaXRyYXJ5IHByZWRpY2F0ZSBtYXRjaGVyIiB0YWdzPSJbZ2VuZXJpY11bbWF0Y2hlcnNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgorICAgICAgPFNlY3Rpb24gbmFtZT0iRnVuY3Rpb24gcG9pbnRlciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIDEsIFByZWRpY2F0ZSZsdDtpbnQ+KGFsd2F5c1RydWUsICJhbHdheXMgdHJ1ZSIpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAxIG1hdGNoZXMgcHJlZGljYXRlOiAiYWx3YXlzIHRydWUiCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgMSwgIVByZWRpY2F0ZSZsdDtpbnQ+KGFsd2F5c0ZhbHNlLCAiYWx3YXlzIGZhbHNlIikKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDEgbm90IG1hdGNoZXMgcHJlZGljYXRlOiAiYWx3YXlzIGZhbHNlIgorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IkxhbWJkYXMgKyBkaWZmZXJlbnQgdHlwZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICJIZWxsbyBvbGxlSCIsIFByZWRpY2F0ZSZsdDtzdGQ6OnN0cmluZz4oIFtdIChzdGQ6OnN0cmluZyBjb25zdCZhbXA7IHN0cikgLT4gYm9vbCB7IHJldHVybiBzdHIuZnJvbnQoKSA9PSBzdHIuYmFjaygpOyB9LCAiRmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVyIHNob3VsZCBiZSBlcXVhbCIpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAiSGVsbG8gb2xsZUgiIG1hdGNoZXMgcHJlZGljYXRlOiAiRmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVyIHNob3VsZCBiZSBlcXVhbCIKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAiVGhpcyB3b3VsZG4ndCBwYXNzIiwgIVByZWRpY2F0ZSZsdDtzdGQ6OnN0cmluZz4oIFtdIChzdGQ6OnN0cmluZyBjb25zdCZhbXA7IHN0cikgLT4gYm9vbCB7IHJldHVybiBzdHIuZnJvbnQoKSA9PSBzdHIuYmFjaygpOyB9ICkKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICJUaGlzIHdvdWxkbid0IHBhc3MiIG5vdCBtYXRjaGVzIHVuZGVzY3JpYmVkIHByZWRpY2F0ZQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJBc3NlcnRpb25zIHRoZW4gc2VjdGlvbnMiIHRhZ3M9IltUcmlja3ldIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CkBAIC05NzYsNiArMTk5MCw1NCBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9IkNBUFRVUkUgY2FuIGRlYWwgd2l0aCBjb21wbGV4IGV4cHJlc3Npb25zIiB0YWdzPSJbY2FwdHVyZV1bbWVzc2FnZXNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CisgICAgICA8SW5mbz4KKyAgICAgICAgYSA6PSAxCisgICAgICA8L0luZm8+CisgICAgICA8SW5mbz4KKyAgICAgICAgYiA6PSAyCisgICAgICA8L0luZm8+CisgICAgICA8SW5mbz4KKyAgICAgICAgYyA6PSAzCisgICAgICA8L0luZm8+CisgICAgICA8SW5mbz4KKyAgICAgICAgYSArIGIgOj0gMworICAgICAgPC9JbmZvPgorICAgICAgPEluZm8+CisgICAgICAgIGErYiA6PSAzCisgICAgICA8L0luZm8+CisgICAgICA8SW5mbz4KKyAgICAgICAgYyA+IGIgOj0gdHJ1ZQorICAgICAgPC9JbmZvPgorICAgICAgPEluZm8+CisgICAgICAgIGEgPT0gMSA6PSB0cnVlCisgICAgICA8L0luZm8+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iQ0FQVFVSRSBjYW4gZGVhbCB3aXRoIGNvbXBsZXggZXhwcmVzc2lvbnMgaW52b2x2aW5nIGNvbW1hcyIgdGFncz0iW2NhcHR1cmVdW21lc3NhZ2VzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgICAgPEluZm8+CisgICAgICAgIHN0ZDo6dmVjdG9yJmx0O2ludD57MSwgMiwgM31bMCwgMSwgMl0gOj0gMworICAgICAgPC9JbmZvPgorICAgICAgPEluZm8+CisgICAgICAgIHN0ZDo6dmVjdG9yJmx0O2ludD57MSwgMiwgM31bKDAsIDEpXSA6PSAyCisgICAgICA8L0luZm8+CisgICAgICA8SW5mbz4KKyAgICAgICAgc3RkOjp2ZWN0b3ImbHQ7aW50PnsxLCAyLCAzfVswXSA6PSAxCisgICAgICA8L0luZm8+CisgICAgICA8SW5mbz4KKyAgICAgICAgKGhlbHBlcl8xNDM2Jmx0O2ludCwgaW50PnsxMiwgLTEyfSkgOj0geyAxMiwgLTEyIH0KKyAgICAgIDwvSW5mbz4KKyAgICAgIDxJbmZvPgorICAgICAgICAoaGVscGVyXzE0MzYmbHQ7aW50LCBpbnQ+KC0xMiwgMTIpKSA6PSB7IC0xMiwgMTIgfQorICAgICAgPC9JbmZvPgorICAgICAgPEluZm8+CisgICAgICAgICgxLCAyKSA6PSAyCisgICAgICA8L0luZm8+CisgICAgICA8SW5mbz4KKyAgICAgICAgKDIsIDMpIDo9IDMKKyAgICAgIDwvSW5mbz4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJDYXB0dXJlIGFuZCBpbmZvIG1lc3NhZ2VzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHAiID4KICAgICAgIDxTZWN0aW9uIG5hbWU9IkNhcHR1cmUgc2hvdWxkIHN0cmluZ2lmeSBsaWtlIGFzc2VydGlvbnMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcCIgPgogICAgICAgICA8SW5mbz4KQEAgLTE4MjMsNiArMjg4NSwzNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJFeGNlcHRpb24gYXMgYSB2YWx1ZSAoZS5nLiBpbiBSRVFVSVJFX1RIUk9XU19NQVRDSEVTKSBjYW4gYmUgc3RyaW5naWZpZWQiIHRhZ3M9IltleGNlcHRpb25dW3RvU3RyaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwIiA+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KFdoYXRFeGNlcHRpb257fSkgPT0gIlRoaXMgZXhjZXB0aW9uIGhhcyBvdmVycmlkZW4gd2hhdCgpIG1ldGhvZCIKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICJUaGlzIGV4Y2VwdGlvbiBoYXMgb3ZlcnJpZGVuIHdoYXQoKSBtZXRob2QiCis9PQorIlRoaXMgZXhjZXB0aW9uIGhhcyBvdmVycmlkZW4gd2hhdCgpIG1ldGhvZCIKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoT3BlcmF0b3JFeGNlcHRpb257fSkgPT0gIk9wZXJhdG9yRXhjZXB0aW9uIgorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgIk9wZXJhdG9yRXhjZXB0aW9uIiA9PSAiT3BlcmF0b3JFeGNlcHRpb24iCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KFN0cmluZ01ha2VyRXhjZXB0aW9ue30pID09ICJTdHJpbmdNYWtlckV4Y2VwdGlvbiIKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICJTdHJpbmdNYWtlckV4Y2VwdGlvbiIKKz09CisiU3RyaW5nTWFrZXJFeGNlcHRpb24iCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KICAgICA8VGVzdENhc2UgbmFtZT0iRXhjZXB0aW9uIG1hdGNoZXJzIHRoYXQgZmFpbCIgdGFncz0iWyF0aHJvd3NdWy5dWy5mYWlsaW5nXVtleGNlcHRpb25zXVttYXRjaGVyc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJObyBleGNlcHRpb24iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDS19USFJPV1NfTUFUQ0hFUyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KQEAgLTE4NzQsNyArMjk2Nyw3IEBACiAgICAgICAgICAgICB0aHJvd3MoMyksIFNwZWNpYWxFeGNlcHRpb24sIEV4Y2VwdGlvbk1hdGNoZXJ7MX0KICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIHs/fSBzcGVjaWFsIGV4Y2VwdGlvbiBoYXMgdmFsdWUgb2YgMQorICAgICAgICAgICAgU3BlY2lhbEV4Y2VwdGlvbjo6d2hhdCBzcGVjaWFsIGV4Y2VwdGlvbiBoYXMgdmFsdWUgb2YgMQogICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0iZmFsc2UiIHR5cGU9IlJFUVVJUkVfVEhST1dTX01BVENIRVMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CkBAIC0xODgyLDcgKzI5NzUsNyBAQAogICAgICAgICAgICAgdGhyb3dzKDQpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9CiAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICB7P30gc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKKyAgICAgICAgICAgIFNwZWNpYWxFeGNlcHRpb246OndoYXQgc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDEKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjAiIGZhaWx1cmVzPSIyIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CkBAIC0xODk1LDcgKzI5ODgsNyBAQAogICAgICAgICAgIHRocm93cygxKSwgU3BlY2lhbEV4Y2VwdGlvbiwgRXhjZXB0aW9uTWF0Y2hlcnsxfQogICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgez99IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAxCisgICAgICAgICAgU3BlY2lhbEV4Y2VwdGlvbjo6d2hhdCBzcGVjaWFsIGV4Y2VwdGlvbiBoYXMgdmFsdWUgb2YgMQogICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USFJPV1NfTUFUQ0hFUyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KQEAgLTE5MDMsNyArMjk5Niw3IEBACiAgICAgICAgICAgdGhyb3dzKDIpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezJ9CiAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICB7P30gc3BlY2lhbCBleGNlcHRpb24gaGFzIHZhbHVlIG9mIDIKKyAgICAgICAgICBTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IHNwZWNpYWwgZXhjZXB0aW9uIGhhcyB2YWx1ZSBvZiAyCiAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CkBAIC0yMTA1LDcgKzMxOTgsMzkgQEAKICAgICAgICAgICAgIG5hbmYgbm90IGlzIHdpdGhpbiAwLjAgb2YgbmFuCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI1IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgMTEuLCAhV2l0aGluQWJzKDEwLiwgMC41KQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMTEuMCBub3QgaXMgd2l0aGluIDAuNSBvZiAxMC4wCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgMTAuLCAhV2l0aGluQWJzKDExLiwgMC41KQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMTAuMCBub3QgaXMgd2l0aGluIDAuNSBvZiAxMS4wCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgLTEwLiwgV2l0aGluQWJzKC0xMC4sIDAuNSkKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIC0xMC4wIGlzIHdpdGhpbiAwLjUgb2YgLTEwLjAKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAtMTAuLCBXaXRoaW5BYnMoLTkuNiwgMC41KQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgLTEwLjAgaXMgd2l0aGluIDAuNSBvZiAtOS42CisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI5IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgogICAgICAgPFNlY3Rpb24gbmFtZT0iVUxQcyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgpAQCAtMjExOCw3ICszMjQzLDcgQEAKICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgc3RkOjpuZXh0YWZ0ZXIoMS4sIDIuKSwgV2l0aGluVUxQKDEuLCAxKQorICAgICAgICAgICAgbmV4dGFmdGVyKDEuLCAyLiksIFdpdGhpblVMUCgxLiwgMSkKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KICAgICAgICAgICAgIDEuMCBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuMApAQCAtMjEyNiw3ICszMjUxLDcgQEAKICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgc3RkOjpuZXh0YWZ0ZXIoMS4sIDAuKSwgV2l0aGluVUxQKDEuLCAxKQorICAgICAgICAgICAgbmV4dGFmdGVyKDEuLCAwLiksIFdpdGhpblVMUCgxLiwgMSkKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KICAgICAgICAgICAgIDEuMCBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuMApAQCAtMjEzNCw3ICszMjU5LDcgQEAKICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgc3RkOjpuZXh0YWZ0ZXIoMS4sIDIuKSwgIVdpdGhpblVMUCgxLiwgMCkKKyAgICAgICAgICAgIG5leHRhZnRlcigxLiwgMi4pLCAhV2l0aGluVUxQKDEuLCAwKQogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgogICAgICAgICAgICAgMS4wIG5vdCBpcyB3aXRoaW4gMCBVTFBzIG9mIDEuMApAQCAtMjI4MCw3ICszNDA1LDM5IEBACiAgICAgICAgICAgICBuYW5mIG5vdCBpcyB3aXRoaW4gMC4wIG9mIG5hbgogICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIDExLmYsICFXaXRoaW5BYnMoMTAuZiwgMC41ZikKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDExLjBmIG5vdCBpcyB3aXRoaW4gMC41IG9mIDEwLjAKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAxMC5mLCAhV2l0aGluQWJzKDExLmYsIDAuNWYpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAxMC4wZiBub3QgaXMgd2l0aGluIDAuNSBvZiAxMS4wCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgLTEwLmYsIFdpdGhpbkFicygtMTAuZiwgMC41ZikKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIC0xMC4wZiBpcyB3aXRoaW4gMC41IG9mIC0xMC4wCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgLTEwLmYsIFdpdGhpbkFicygtOS42ZiwgMC41ZikKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIC0xMC4wZiBpcyB3aXRoaW4gMC41IG9mIC05LjYwMDAwMDM4MTUKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEwIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgogICAgICAgPFNlY3Rpb24gbmFtZT0iVUxQcyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgpAQCAtMjI5Myw3ICszNDUwLDcgQEAKICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgc3RkOjpuZXh0YWZ0ZXIoMS5mLCAyLmYpLCBXaXRoaW5VTFAoMS5mLCAxKQorICAgICAgICAgICAgbmV4dGFmdGVyKDEuZiwgMi5mKSwgV2l0aGluVUxQKDEuZiwgMSkKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KICAgICAgICAgICAgIDEuMGYgaXMgd2l0aGluIDEgVUxQcyBvZiAxLjBmCkBAIC0yMzAxLDcgKzM0NTgsNyBAQAogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhBVCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBzdGQ6Om5leHRhZnRlcigxLmYsIDAuZiksIFdpdGhpblVMUCgxLmYsIDEpCisgICAgICAgICAgICBuZXh0YWZ0ZXIoMS5mLCAwLmYpLCBXaXRoaW5VTFAoMS5mLCAxKQogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgogICAgICAgICAgICAgMS4wZiBpcyB3aXRoaW4gMSBVTFBzIG9mIDEuMGYKQEAgLTIzMDksNyArMzQ2Niw3IEBACiAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USEFUIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01hdGNoZXJzLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHN0ZDo6bmV4dGFmdGVyKDEuZiwgMi5mKSwgIVdpdGhpblVMUCgxLmYsIDApCisgICAgICAgICAgICBuZXh0YWZ0ZXIoMS5mLCAyLmYpLCAhV2l0aGluVUxQKDEuZiwgMCkKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KICAgICAgICAgICAgIDEuMGYgbm90IGlzIHdpdGhpbiAwIFVMUHMgb2YgMS4wZgpAQCAtMjQwNSw2ICszNTYyLDE3MTYgQEAKICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzIiB0YWdzPSJbZ2VuZXJhdG9yc11bZ2VuZXJpY10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IkZpbHRlcmluZyBieSBwcmVkaWNhdGUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iQmFzaWMgdXNhZ2UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGkgJSAyID09IDAKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIDAgPT0gMAorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iRmlsdGVyaW5nIGJ5IHByZWRpY2F0ZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJCYXNpYyB1c2FnZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgaSAlIDIgPT0gMAorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgMCA9PSAwCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJGaWx0ZXJpbmcgYnkgcHJlZGljYXRlIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9IkJhc2ljIHVzYWdlIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBpICUgMiA9PSAwCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAwID09IDAKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IkZpbHRlcmluZyBieSBwcmVkaWNhdGUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iVGhyb3dzIGlmIHRoZXJlIGFyZSBubyBtYXRjaGluZyB2YWx1ZXMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIUk9XU19BUyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBmaWx0ZXIoW10gKGludCkge3JldHVybiBmYWxzZTsgfSwgdmFsdWUoMSkpLCBDYXRjaDo6R2VuZXJhdG9yRXhjZXB0aW9uCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICBmaWx0ZXIoW10gKGludCkge3JldHVybiBmYWxzZTsgfSwgdmFsdWUoMSkpLCBDYXRjaDo6R2VuZXJhdG9yRXhjZXB0aW9uCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJTaG9ydGVuaW5nIGEgcmFuZ2UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGkgJmx0OyA0CisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAxICZsdDsgNAorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IlNob3J0ZW5pbmcgYSByYW5nZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgaSAmbHQ7IDQKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDIgJmx0OyA0CisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iU2hvcnRlbmluZyBhIHJhbmdlIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBpICZsdDsgNAorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMyAmbHQ7IDQKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJUcmFuc2Zvcm1pbmcgZWxlbWVudHMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iU2FtZSB0eXBlIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBpICUgMiA9PSAwCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAwID09IDAKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IlRyYW5zZm9ybWluZyBlbGVtZW50cyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJTYW1lIHR5cGUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGkgJSAyID09IDAKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIDAgPT0gMAorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iVHJhbnNmb3JtaW5nIGVsZW1lbnRzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9IlNhbWUgdHlwZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgaSAlIDIgPT0gMAorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgMCA9PSAwCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJUcmFuc2Zvcm1pbmcgZWxlbWVudHMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iRGlmZmVyZW50IHR5cGUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGkuc2l6ZSgpID09IDEKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIDEgPT0gMQorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iVHJhbnNmb3JtaW5nIGVsZW1lbnRzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9IkRpZmZlcmVudCB0eXBlIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBpLnNpemUoKSA9PSAxCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAxID09IDEKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IlRyYW5zZm9ybWluZyBlbGVtZW50cyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJEaWZmZXJlbnQgdHlwZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgaS5zaXplKCkgPT0gMQorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgMSA9PSAxCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJSZXBlYXRpbmcgYSBnZW5lcmF0b3IiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGogPiAwCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAxID4gMAorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IlJlcGVhdGluZyBhIGdlbmVyYXRvciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgaiA+IDAKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDIgPiAwCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iUmVwZWF0aW5nIGEgZ2VuZXJhdG9yIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBqID4gMAorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMyA+IDAKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJSZXBlYXRpbmcgYSBnZW5lcmF0b3IiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGogPiAwCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAxID4gMAorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IlJlcGVhdGluZyBhIGdlbmVyYXRvciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgaiA+IDAKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDIgPiAwCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iUmVwZWF0aW5nIGEgZ2VuZXJhdG9yIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBqID4gMAorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMyA+IDAKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJDaHVua2luZyBhIGdlbmVyYXRvciBpbnRvIHNpemVkIHBpZWNlcyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJOdW1iZXIgb2YgZWxlbWVudHMgaW4gc291cmNlIGlzIGRpdmlzaWJsZSBieSBjaHVuayBzaXplIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBjaHVuazIuc2l6ZSgpID09IDIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIDIgPT0gMgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBjaHVuazIuZnJvbnQoKSA9PSBjaHVuazIuYmFjaygpCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAxID09IDEKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IkNodW5raW5nIGEgZ2VuZXJhdG9yIGludG8gc2l6ZWQgcGllY2VzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9Ik51bWJlciBvZiBlbGVtZW50cyBpbiBzb3VyY2UgaXMgZGl2aXNpYmxlIGJ5IGNodW5rIHNpemUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGNodW5rMi5zaXplKCkgPT0gMgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgMiA9PSAyCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGNodW5rMi5mcm9udCgpID09IGNodW5rMi5iYWNrKCkKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIDIgPT0gMgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iQ2h1bmtpbmcgYSBnZW5lcmF0b3IgaW50byBzaXplZCBwaWVjZXMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iTnVtYmVyIG9mIGVsZW1lbnRzIGluIHNvdXJjZSBpcyBkaXZpc2libGUgYnkgY2h1bmsgc2l6ZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgY2h1bmsyLnNpemUoKSA9PSAyCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAyID09IDIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgY2h1bmsyLmZyb250KCkgPT0gY2h1bmsyLmJhY2soKQorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgMyA9PSAzCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJDaHVua2luZyBhIGdlbmVyYXRvciBpbnRvIHNpemVkIHBpZWNlcyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJOdW1iZXIgb2YgZWxlbWVudHMgaW4gc291cmNlIGlzIG5vdCBkaXZpc2libGUgYnkgY2h1bmsgc2l6ZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgY2h1bmsyLnNpemUoKSA9PSAyCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAyID09IDIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgY2h1bmsyLmZyb250KCkgPT0gY2h1bmsyLmJhY2soKQorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgMSA9PSAxCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGNodW5rMi5mcm9udCgpICZsdDsgMworICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgMSAmbHQ7IDMKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IkNodW5raW5nIGEgZ2VuZXJhdG9yIGludG8gc2l6ZWQgcGllY2VzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9Ik51bWJlciBvZiBlbGVtZW50cyBpbiBzb3VyY2UgaXMgbm90IGRpdmlzaWJsZSBieSBjaHVuayBzaXplIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBjaHVuazIuc2l6ZSgpID09IDIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIDIgPT0gMgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBjaHVuazIuZnJvbnQoKSA9PSBjaHVuazIuYmFjaygpCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAyID09IDIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgY2h1bmsyLmZyb250KCkgJmx0OyAzCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAyICZsdDsgMworICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIzIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iQ2h1bmtpbmcgYSBnZW5lcmF0b3IgaW50byBzaXplZCBwaWVjZXMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iVGhyb3dzIG9uIHRvbyBzbWFsbCBnZW5lcmF0b3JzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9USFJPV1NfQVMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgY2h1bmsoMiwgdmFsdWUoMSkpLCBDYXRjaDo6R2VuZXJhdG9yRXhjZXB0aW9uCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICBjaHVuaygyLCB2YWx1ZSgxKSksIENhdGNoOjpHZW5lcmF0b3JFeGNlcHRpb24KKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJHZW5lcmF0b3JzIC0tIHNpbXBsZSIgdGFncz0iW2dlbmVyYXRvcnNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICA8U2VjdGlvbiBuYW1lPSJvbmUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGogJmx0OyBpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAtMyAmbHQ7IDEKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJvbmUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGogJmx0OyBpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAtMiAmbHQ7IDEKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJvbmUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGogJmx0OyBpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAtMSAmbHQ7IDEKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJ0d28iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIDR1ICogaSA+IHN0ci5zaXplKCkKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDQgPiAxCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0idHdvIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICA0dSAqIGkgPiBzdHIuc2l6ZSgpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICA0ID4gMgorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9InR3byIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgNHUgKiBpID4gc3RyLnNpemUoKQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgNCA+IDMKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJvbmUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGogJmx0OyBpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAtMyAmbHQ7IDIKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJvbmUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGogJmx0OyBpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAtMiAmbHQ7IDIKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJvbmUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGogJmx0OyBpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAtMSAmbHQ7IDIKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJ0d28iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIDR1ICogaSA+IHN0ci5zaXplKCkKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDggPiAxCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0idHdvIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICA0dSAqIGkgPiBzdHIuc2l6ZSgpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICA4ID4gMgorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9InR3byIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgNHUgKiBpID4gc3RyLnNpemUoKQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgOCA+IDMKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJvbmUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGogJmx0OyBpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAtMyAmbHQ7IDMKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJvbmUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGogJmx0OyBpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAtMiAmbHQ7IDMKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJvbmUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGogJmx0OyBpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAtMSAmbHQ7IDMKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJ0d28iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIDR1ICogaSA+IHN0ci5zaXplKCkKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDEyID4gMQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9InR3byIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgNHUgKiBpID4gc3RyLnNpemUoKQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMTIgPiAyCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0idHdvIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICA0dSAqIGkgPiBzdHIuc2l6ZSgpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAxMiA+IDMKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iR2VuZXJhdG9ycyBpbnRlcm5hbHMiIHRhZ3M9IltnZW5lcmF0b3JzXVtpbnRlcm5hbHNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICA8U2VjdGlvbiBuYW1lPSJTaW5nbGUgdmFsdWUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAxMjMKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDEyMyA9PSAxMjMKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAhKGdlbi5uZXh0KCkpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAhZmFsc2UKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJQcmVzZXQgdmFsdWVzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gMQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMSA9PSAxCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAzCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAzID09IDMKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBnZW4ubmV4dCgpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICB0cnVlCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZ2VuLmdldCgpID09IDUKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDUgPT0gNQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9GQUxTRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICEoZ2VuLm5leHQoKSkKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICFmYWxzZQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IkdlbmVyYXRvciBjb21iaW5hdG9yIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gMQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMSA9PSAxCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGdlbi5nZXQoKSA9PSA1CisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICA1ID09IDUKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBnZW4ubmV4dCgpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICB0cnVlCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZ2VuLmdldCgpID09IDIKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDIgPT0gMgorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGdlbi5uZXh0KCkKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIHRydWUKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gNAorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgNCA9PSA0CisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAwCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAwID09IDAKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAhKGdlbi5uZXh0KCkpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAhZmFsc2UKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEwIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iRXhwbGljaXRseSB0eXBlZCBnZW5lcmF0b3Igc2VxdWVuY2UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGdlbi5nZXQoKS5zaXplKCkgPT0gMgorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMiA9PSAyCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZ2VuLmdldCgpID09ICJhYSIKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICJhYSIgPT0gImFhIgorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGdlbi5uZXh0KCkKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIHRydWUKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gImJiIgorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgImJiIiA9PSAiYmIiCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAiY2MiCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAiY2MiID09ICJjYyIKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAhKGdlbi5uZXh0KCkpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAhZmFsc2UKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjciIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJGaWx0ZXIgZ2VuZXJhdG9yIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gMQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMSA9PSAxCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAzCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAzID09IDMKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAhKGdlbi5uZXh0KCkpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAhZmFsc2UKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfVEhST1dTX0FTIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZmlsdGVyKFtdIChpbnQpIHsgcmV0dXJuIGZhbHNlOyB9LCB2YWx1ZSgxKSksIENhdGNoOjpHZW5lcmF0b3JFeGNlcHRpb24KKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIGZpbHRlcihbXSAoaW50KSB7IHJldHVybiBmYWxzZTsgfSwgdmFsdWUoMSkpLCBDYXRjaDo6R2VuZXJhdG9yRXhjZXB0aW9uCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI1IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iVGFrZSBnZW5lcmF0b3IiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iVGFrZSBsZXNzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gMQorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgMSA9PSAxCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGdlbi5uZXh0KCkKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZ2VuLmdldCgpID09IDIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIDIgPT0gMgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9GQUxTRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAhKGdlbi5uZXh0KCkpCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAhZmFsc2UKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjQiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IlRha2UgZ2VuZXJhdG9yIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9IlRha2UgbW9yZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZ2VuLmdldCgpID09IDEKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIDEgPT0gMQorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9GQUxTRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAhKGdlbi5uZXh0KCkpCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAhZmFsc2UKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9Ik1hcCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZ2VuLmdldCgpID09IDIuMAorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMi4wID09IDIuMAorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGdlbi5uZXh0KCkKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIHRydWUKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gNC4wCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICA0LjAgPT0gNC4wCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGdlbi5nZXQoKSA9PSA2LjAKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDYuMCA9PSA2LjAKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAhKGdlbi5uZXh0KCkpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAhZmFsc2UKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjYiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJSZXBlYXQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iU2luZ3VsYXIgcmVwZWF0IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gMworICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgMyA9PSAzCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX0ZBTFNFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICEoZ2VuLm5leHQoKSkKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICFmYWxzZQorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iUmVwZWF0IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9IkFjdHVhbCByZXBlYXQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAxCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAxID09IDEKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gMgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgMiA9PSAyCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGdlbi5uZXh0KCkKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZ2VuLmdldCgpID09IDMKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIDMgPT0gMworICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBnZW4ubmV4dCgpCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAxCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAxID09IDEKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gMgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgMiA9PSAyCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGdlbi5uZXh0KCkKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZ2VuLmdldCgpID09IDMKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIDMgPT0gMworICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9GQUxTRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAhKGdlbi5uZXh0KCkpCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAhZmFsc2UKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iUmFuZ2UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iUG9zaXRpdmUgYXV0byBzdGVwIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPFNlY3Rpb24gbmFtZT0iSW50ZWdlciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IC0yCisgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAtMiA9PSAtMgorICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IC0xCisgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAtMSA9PSAtMQorICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IDAKKyAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgIDAgPT0gMAorICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IDEKKyAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgIDEgPT0gMQorICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9GQUxTRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgIShnZW4ubmV4dCgpKQorICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgIWZhbHNlCisgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI4IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI4IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjgiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJSYW5nZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJOZWdhdGl2ZSBhdXRvIHN0ZXAiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8U2VjdGlvbiBuYW1lPSJJbnRlZ2VyIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gMgorICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgMiA9PSAyCisgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCisgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gMQorICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgMSA9PSAxCisgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCisgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gMAorICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgMCA9PSAwCisgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCisgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gLTEKKyAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgIC0xID09IC0xCisgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX0ZBTFNFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAhKGdlbi5uZXh0KCkpCisgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAhZmFsc2UKKyAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjgiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjgiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iOCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IlJhbmdlIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9IlBvc2l0aXZlIG1hbnVhbCBzdGVwIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPFNlY3Rpb24gbmFtZT0iSW50ZWdlciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPFNlY3Rpb24gbmFtZT0iRXhhY3QiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAtNworICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgLTcgPT0gLTcKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IC00CisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICAtNCA9PSAtNAorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gLTEKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgIC0xID09IC0xCisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAyCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICAyID09IDIKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICAhKGdlbi5uZXh0KCkpCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICAhZmFsc2UKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjgiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI4IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI4IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjgiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJSYW5nZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJQb3NpdGl2ZSBtYW51YWwgc3RlcCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxTZWN0aW9uIG5hbWU9IkludGVnZXIiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxTZWN0aW9uIG5hbWU9IlNsaWdodGx5IG92ZXIgZW5kIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gLTcKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgIC03ID09IC03CisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAtNAorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgLTQgPT0gLTQKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IC0xCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICAtMSA9PSAtMQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gMgorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgMiA9PSAyCisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX0ZBTFNFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgIShnZW4ubmV4dCgpKQorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgIWZhbHNlCisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI4IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iOCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iOCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI4IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iUmFuZ2UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iUG9zaXRpdmUgbWFudWFsIHN0ZXAiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8U2VjdGlvbiBuYW1lPSJJbnRlZ2VyIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8U2VjdGlvbiBuYW1lPSJTbGlnaHRseSB1bmRlciBlbmQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAtNworICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgLTcgPT0gLTcKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IC00CisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICAtNCA9PSAtNAorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gLTEKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgIC0xID09IC0xCisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAyCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICAyID09IDIKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IDUKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgIDUgPT0gNQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9GQUxTRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgICEoZ2VuLm5leHQoKSkKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgICFmYWxzZQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTAiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxMCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTAiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTAiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJSYW5nZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJOZWdhdGl2ZSBtYW51YWwgc3RlcCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxTZWN0aW9uIG5hbWU9IkludGVnZXIiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxTZWN0aW9uIG5hbWU9IkV4YWN0IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gNQorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgNSA9PSA1CisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAyCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICAyID09IDIKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IC0xCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICAtMSA9PSAtMQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gLTQKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgIC00ID09IC00CisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX0ZBTFNFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgIShnZW4ubmV4dCgpKQorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgIWZhbHNlCisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI4IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iOCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iOCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI4IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iUmFuZ2UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iTmVnYXRpdmUgbWFudWFsIHN0ZXAiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8U2VjdGlvbiBuYW1lPSJJbnRlZ2VyIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8U2VjdGlvbiBuYW1lPSJTbGlnaHRseSBvdmVyIGVuZCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IDUKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgIDUgPT0gNQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gMgorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgMiA9PSAyCisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAtMQorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgLTEgPT0gLTEKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IC00CisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICAtNCA9PSAtNAorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRV9GQUxTRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgICEoZ2VuLm5leHQoKSkKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgICFmYWxzZQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iOCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjgiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjgiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iOCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IlJhbmdlIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9Ik5lZ2F0aXZlIG1hbnVhbCBzdGVwIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPFNlY3Rpb24gbmFtZT0iSW50ZWdlciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPFNlY3Rpb24gbmFtZT0iU2xpZ2h0bHkgdW5kZXIgZW5kIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gNQorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgNSA9PSA1CisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAyCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICAyID09IDIKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4ubmV4dCgpCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLmdldCgpID09IC0xCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICAtMSA9PSAtMQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5uZXh0KCkKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICBnZW4uZ2V0KCkgPT0gLTQKKyAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgICAgIC00ID09IC00CisgICAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgZ2VuLm5leHQoKQorICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgIGdlbi5nZXQoKSA9PSAtNworICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgLTcgPT0gLTcKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9HZW5lcmF0b3JzSW1wbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgICAgICAhKGdlbi5uZXh0KCkpCisgICAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICAgICAhZmFsc2UKKyAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEwIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTAiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEwIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEwIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9IkdyZWF0ZXItdGhhbiBpbmVxdWFsaXRpZXMgd2l0aCBkaWZmZXJlbnQgZXBzaWxvbnMiIHRhZ3M9IltBcHByb3hdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0FwcHJveC50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQXBwcm94LnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CkBAIC0yOTkyLDYgKzU4NTksOSBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9Ik9wdGlvbmFsbHkgc3RhdGljIGFzc2VydGlvbnMiIHRhZ3M9Iltjb21waWxhdGlvbl0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQ29tcGlsYXRpb24udGVzdHMuY3BwIiA+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KICAgICA8VGVzdENhc2UgbmFtZT0iT3JkZXJpbmcgY29tcGFyaXNvbiBjaGVja3MgdGhhdCBzaG91bGQgZmFpbCIgdGFncz0iWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NvbmRpdGlvbi50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db25kaXRpb24udGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTQ0NzcsMTcgKzczNDcsNiBAQAogICAgICAgPC9TZWN0aW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlBhcnNpbmcgYSBzdGQ6OnBhaXIiIHRhZ3M9IltUcmlja3ldW3N0ZDo6cGFpcl0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ucmlja3kudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAoc3RkOjpwYWlyJmx0O2ludCwgaW50PiggMSwgMiApKSA9PSBhTmljZVBhaXIKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIHs/fSA9PSB7P30KLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJQb2ludGVycyBjYW4gYmUgY29tcGFyZWQgdG8gbnVsbCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Db25kaXRpb24udGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0NvbmRpdGlvbi50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgpAQCAtNDU1NSw2ICs3NDE0LDE3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iUHJlZGljYXRlIG1hdGNoZXIgY2FuIGFjY2VwdCBjb25zdCBjaGFyKiIgdGFncz0iW2NvbXBpbGF0aW9uXVttYXRjaGVyc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAiZm9vIiwgUHJlZGljYXRlJmx0O2NvbnN0IGNoYXIqPihbXSAoY29uc3QgY2hhciogY29uc3QmYW1wOykgeyByZXR1cm4gdHJ1ZTsgfSkKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICJmb28iIG1hdGNoZXMgdW5kZXNjcmliZWQgcHJlZGljYXRlCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KICAgICA8VGVzdENhc2UgbmFtZT0iUHJvY2VzcyBjYW4gYmUgY29uZmlndXJlZCBvbiBjb21tYW5kIGxpbmUiIHRhZ3M9Iltjb21tYW5kLWxpbmVdW2NvbmZpZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgogICAgICAgPFNlY3Rpb24gbmFtZT0iZW1wdHkgYXJncyBkb24ndCBjYXVzZSBhIGNyYXNoIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgpAQCAtNDYxOCwxNiArNzQ4OCwyNCBAQAogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBjb25maWcucmVwb3J0ZXJOYW1lcy5lbXB0eSgpCisgICAgICAgICAgICBjb25maWcucmVwb3J0ZXJOYW1lID09ICJjb25zb2xlIgogICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgImNvbnNvbGUiID09ICJjb25zb2xlIgogICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0tfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICEoY2ZnLmhhc1Rlc3RGaWx0ZXJzKCkpCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAhZmFsc2UKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjciIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJ0ZXN0IGxpc3RzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iMSB0ZXN0IiBkZXNjcmlwdGlvbj0iU3BlY2lmeSBvbmUgdGVzdCBjYXNlIHVzaW5nIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iU3BlY2lmeSBvbmUgdGVzdCBjYXNlIHVzaW5nIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CiAgICAgICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgICAgIHJlc3VsdApAQCAtNDYzOCw2ICs3NTE2LDE0IEBACiAgICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgogICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBjZmcuaGFzVGVzdEZpbHRlcnMoKQorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgICAgIGNmZy50ZXN0U3BlYygpLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJub3RJbmNsdWRlZCIpKSA9PSBmYWxzZQogICAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICAgIDxFeHBhbmRlZD4KQEAgLTQ2NTIsOSArNzUzOCw5IEBACiAgICAgICAgICAgICAgIHRydWUKICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIzIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI0IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgogICAgICAgPFNlY3Rpb24gbmFtZT0idGVzdCBsaXN0cyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CiAgICAgICAgIDxTZWN0aW9uIG5hbWU9IlNwZWNpZnkgb25lIHRlc3QgY2FzZSBleGNsdXNpb24gdXNpbmcgZXhjbHVkZToiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgpAQCAtNDY2OCw2ICs3NTU0LDE0IEBACiAgICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgogICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBjZmcuaGFzVGVzdEZpbHRlcnMoKQorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgICAgIGNmZy50ZXN0U3BlYygpLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJ0ZXN0MSIpKSA9PSBmYWxzZQogICAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICAgIDxFeHBhbmRlZD4KQEAgLTQ2ODIsOSArNzU3Niw5IEBACiAgICAgICAgICAgICAgIHRydWUKICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIzIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI0IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgogICAgICAgPFNlY3Rpb24gbmFtZT0idGVzdCBsaXN0cyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CiAgICAgICAgIDxTZWN0aW9uIG5hbWU9IlNwZWNpZnkgb25lIHRlc3QgY2FzZSBleGNsdXNpb24gdXNpbmcgfiIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CkBAIC00Njk4LDYgKzc1OTIsMTQgQEAKICAgICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CiAgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGNmZy5oYXNUZXN0RmlsdGVycygpCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICAgICAgY2ZnLnRlc3RTcGVjKCkubWF0Y2hlcyhmYWtlVGVzdENhc2UoInRlc3QxIikpID09IGZhbHNlCiAgICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgICAgPEV4cGFuZGVkPgpAQCAtNDcxMiw5ICs3NjE0LDkgQEAKICAgICAgICAgICAgICAgdHJ1ZQogICAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI0IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjQiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJyZXBvcnRlciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CiAgICAgICAgIDxTZWN0aW9uIG5hbWU9Ii1yL2NvbnNvbGUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgpAQCAtNDcyOCw3ICs3NjMwLDcgQEAKICAgICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CiAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIGNvbmZpZy5yZXBvcnRlck5hbWVzWzBdID09ICJjb25zb2xlIgorICAgICAgICAgICAgICBjb25maWcucmVwb3J0ZXJOYW1lID09ICJjb25zb2xlIgogICAgICAgICAgICAgPC9PcmlnaW5hbD4KICAgICAgICAgICAgIDxFeHBhbmRlZD4KICAgICAgICAgICAgICAgImNvbnNvbGUiID09ICJjb25zb2xlIgpAQCAtNDc1MCw3ICs3NjUyLDcgQEAKICAgICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CiAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIGNvbmZpZy5yZXBvcnRlck5hbWVzWzBdID09ICJ4bWwiCisgICAgICAgICAgICAgIGNvbmZpZy5yZXBvcnRlck5hbWUgPT0gInhtbCIKICAgICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgICA8RXhwYW5kZWQ+CiAgICAgICAgICAgICAgICJ4bWwiID09ICJ4bWwiCkBAIC00NzYxLDQ0ICs3NjYzLDYgQEAKICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxTZWN0aW9uIG5hbWU9InJlcG9ydGVyIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iLXIgeG1sIGFuZCBqdW5pdCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICBjbGkucGFyc2UoeyJ0ZXN0IiwgIi1yIiwgInhtbCIsICItciIsICJqdW5pdCJ9KQotICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgez99Ci0gICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgY29uZmlnLnJlcG9ydGVyTmFtZXMuc2l6ZSgpID09IDIKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIDIgPT0gMgotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIGNvbmZpZy5yZXBvcnRlck5hbWVzWzBdID09ICJ4bWwiCi0gICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAieG1sIiA9PSAieG1sIgotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIGNvbmZpZy5yZXBvcnRlck5hbWVzWzFdID09ICJqdW5pdCIKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICJqdW5pdCIgPT0gImp1bml0IgotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI0IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPFNlY3Rpb24gbmFtZT0icmVwb3J0ZXIiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgogICAgICAgICA8U2VjdGlvbiBuYW1lPSItLXJlcG9ydGVyL2p1bml0IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CiAgICAgICAgICAgICA8T3JpZ2luYWw+CkBAIC00ODEwLDcgKzc2NzQsNyBAQAogICAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgY29uZmlnLnJlcG9ydGVyTmFtZXNbMF0gPT0gImp1bml0IgorICAgICAgICAgICAgICBjb25maWcucmVwb3J0ZXJOYW1lID09ICJqdW5pdCIKICAgICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgICA8RXhwYW5kZWQ+CiAgICAgICAgICAgICAgICJqdW5pdCIgPT0gImp1bml0IgpAQCAtNDgyMCw2ICs3Njg0LDQyIEBACiAgICAgICAgIDwvU2VjdGlvbj4KICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9InJlcG9ydGVyIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iT25seSBvbmUgcmVwb3J0ZXIgaXMgYWNjZXB0ZWQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkVfRkFMU0UiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAhKGNsaS5wYXJzZSh7ICJ0ZXN0IiwgIi1yIiwgInhtbCIsICItciIsICJqdW5pdCIgfSkpCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAhez99CisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJyZXBvcnRlciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9Im11c3QgbWF0Y2ggb25lIG9mIHRoZSBhdmFpbGFibGUgb25lcyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICAhcmVzdWx0CisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICByZXN1bHQuZXJyb3JNZXNzYWdlKCksIENvbnRhaW5zKCJVbnJlY29nbml6ZWQgcmVwb3J0ZXIiKQorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlVucmVjb2duaXplZCByZXBvcnRlciwgJ3Vuc3VwcG9ydGVkJy4gQ2hlY2sgYXZhaWxhYmxlIHdpdGggLS1saXN0LXJlcG9ydGVycyIgY29udGFpbnM6ICJVbnJlY29nbml6ZWQgcmVwb3J0ZXIiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJkZWJ1Z2dlciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CiAgICAgICAgIDxTZWN0aW9uIG5hbWU9Ii1iIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAiID4KICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIiA+CkBAIC01MTY4LDYgKzgwNjgsMzkgQEAKICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJQcm9kdWN0IHdpdGggZGlmZmVyaW5nIGFyaXRpZXMgLSBzdGQ6OnR1cGxlJmx0O2ludCwgZG91YmxlLCBmbG9hdD4iIHRhZ3M9Iltwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHN0ZDo6dHVwbGVfc2l6ZSZsdDtUZXN0VHlwZT46OnZhbHVlID49IDEKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDMgPj0gMQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9IlByb2R1Y3Qgd2l0aCBkaWZmZXJpbmcgYXJpdGllcyAtIHN0ZDo6dHVwbGUmbHQ7aW50LCBkb3VibGU+IiB0YWdzPSJbcHJvZHVjdF1bdGVtcGxhdGVdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBzdGQ6OnR1cGxlX3NpemUmbHQ7VGVzdFR5cGU+Ojp2YWx1ZSA+PSAxCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAyID49IDEKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJQcm9kdWN0IHdpdGggZGlmZmVyaW5nIGFyaXRpZXMgLSBzdGQ6OnR1cGxlJmx0O2ludD4iIHRhZ3M9Iltwcm9kdWN0XVt0ZW1wbGF0ZV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHN0ZDo6dHVwbGVfc2l6ZSZsdDtUZXN0VHlwZT46OnZhbHVlID49IDEKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDEgPj0gMQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9IlJlY29uc3RydWN0aW9uIHNob3VsZCBiZSBiYXNlZCBvbiBzdHJpbmdpZmljYXRpb246ICM5MTQiIHRhZ3M9IlsuXVtEZWNvbXBvc2l0aW9uXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9EZWNvbXBvc2l0aW9uLnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0iZmFsc2UiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0RlY29tcG9zaXRpb24udGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTUyMDYsNiArODEzOSwxNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJSZWdyZXNzaW9uIHRlc3QgIzEiIHRhZ3M9IlttYXRjaGVyc11bdmVjdG9yXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLX1RIQVQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBhY3R1YWwsICFVbm9yZGVyZWRFcXVhbHMoZXhwZWN0ZWQpCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICB7ICdhJywgJ2InIH0gbm90IFVub3JkZXJlZEVxdWFsczogeyAnYycsICdiJyB9CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KICAgICA8VGVzdENhc2UgbmFtZT0iU1VDQ0VFRCBjb3VudHMgYXMgYSB0ZXN0IHBhc3MiIHRhZ3M9IlttZXNzYWdlc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgpAQCAtNTI0MiwyNiArODE4NiwyOSBAQAogICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9IlNjZW5hcmlvOiBEbyB0aGF0IHRoaW5nIHdpdGggdGhlIHRoaW5nIiB0YWdzPSJbVGFnc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQkRELnRlc3RzLmNwcCIgPgogICAgICAgPFNlY3Rpb24gbmFtZT0iR2l2ZW46IFRoaXMgc3R1ZmYgZXhpc3RzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0JERC50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iV2hlbjogSSBkbyB0aGlzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0JERC50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8U2VjdGlvbiBuYW1lPSJUaGVuOiBpdCBzaG91bGQgZG8gdGhpcyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9CREQudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0JERC50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIGl0RG9lc1RoaXMoKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPFNlY3Rpb24gbmFtZT0iQW5kOiBkbyB0aGF0IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0JERC50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iQW5kIGdpdmVuOiBBbmQgc29tZSBhc3N1bXB0aW9uIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0JERC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8U2VjdGlvbiBuYW1lPSJXaGVuOiBJIGRvIHRoaXMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQkRELnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPFNlY3Rpb24gbmFtZT0iVGhlbjogaXQgc2hvdWxkIGRvIHRoaXMiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvQkRELnRlc3RzLmNwcCIgPgogICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0JERC50ZXN0cy5jcHAiID4KICAgICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgICBpdERvZXNUaGF0KCkKKyAgICAgICAgICAgICAgICAgIGl0RG9lc1RoaXMoKQogICAgICAgICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgogICAgICAgICAgICAgICAgICAgdHJ1ZQogICAgICAgICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgICAgICAgPFNlY3Rpb24gbmFtZT0iQW5kOiBkbyB0aGF0IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0JERC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0JERC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgICAgICAgaXREb2VzVGhhdCgpCisgICAgICAgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICAgICAgICA8L1NlY3Rpb24+CiAgICAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgICAgIDwvU2VjdGlvbj4KQEAgLTU0MTIsNiArODM1OSwyMiBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBkID09IDEuMjNfYQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMS4yMyA9PSBBcHByb3goIDEuMjMgKQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBkICE9IDEuMjJfYQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMS4yMyAhPSBBcHByb3goIDEuMjIgKQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICBBcHByb3goIGQgKSA9PSAxLjIzCiAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgIDxFeHBhbmRlZD4KQEAgLTU1ODIsNyArODU0NSw3IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0iU3RyaW5nUmVmIiB0YWdzPSJbU3RyaW5nc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9IlN0cmluZ1JlZiIgdGFncz0iW1N0cmluZ1JlZl1bU3RyaW5nc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICA8U2VjdGlvbiBuYW1lPSJFbXB0eSBzdHJpbmciIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgpAQCAtNTY4MSwxNSArODY0NCwzOSBAQAogICAgICAgICAgICAgb3JpZ2luYWwgPT0gIm9yaWdpbmFsIgogICAgICAgICAgIDwvRXhwYW5kZWQ+CiAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0iZmFsc2UiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgICAgaXNTdWJzdHJpbmcoIG9yaWdpbmFsICkKICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIGZhbHNlCisgICAgICAgICAgICB0cnVlCiAgICAgICAgICAgPC9FeHBhbmRlZD4KICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMSIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGlzT3duZWQoIG9yaWdpbmFsICkgPT0gZmFsc2UKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIGZhbHNlID09IGZhbHNlCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGlzU3Vic3RyaW5nKCBvcmlnaW5hbCApID09IGZhbHNlCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICBmYWxzZSA9PSBmYWxzZQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBpc093bmVkKCBvcmlnaW5hbCApCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICB0cnVlCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI1IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgogICAgICAgPFNlY3Rpb24gbmFtZT0iU3Vic3RyaW5ncyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgPFNlY3Rpb24gbmFtZT0iemVyby1iYXNlZCBzdWJzdHJpbmciIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CkBAIC01NzQ5LDcgKzg3MzYsNyBAQAogICAgICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICByYXdDaGFycyA9PSBkYXRhKCBzICkKKyAgICAgICAgICAgICAgcmF3Q2hhcnMgPT0gcy5jdXJyZW50RGF0YSgpCiAgICAgICAgICAgICA8L09yaWdpbmFsPgogICAgICAgICAgICAgPEV4cGFuZGVkPgogICAgICAgICAgICAgICAiaGVsbG8gd29ybGQhIiA9PSAiaGVsbG8gd29ybGQhIgpAQCAtNTc4MSw3ICs4NzY4LDcgQEAKICAgICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgZGF0YSggc3MgKSAhPSBkYXRhKCBzICkKKyAgICAgICAgICAgICAgc3MuY3VycmVudERhdGEoKSAhPSBzLmN1cnJlbnREYXRhKCkKICAgICAgICAgICAgIDwvT3JpZ2luYWw+CiAgICAgICAgICAgICA8RXhwYW5kZWQ+CiAgICAgICAgICAgICAgICJoZWxsbyIgIT0gImhlbGxvIHdvcmxkISIKQEAgLTU5OTIsNyArODk3OSwzNCBAQAogICAgICAgICA8L1NlY3Rpb24+CiAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgorICAgICAgPFNlY3Rpb24gbmFtZT0iQ291bnRpbmcgdXRmLTggY29kZXBvaW50cyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBhc2NpaS5udW1iZXJPZkNoYXJhY3RlcnMoKSA9PSBhc2NpaS5zaXplKCkKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDM5ID09IDM5CisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHNpbXBsZXU4Lm51bWJlck9mQ2hhcmFjdGVycygpID09IDMwCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAzMCA9PSAzMAorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBlbW9qaXMubnVtYmVyT2ZDaGFyYWN0ZXJzKCkgPT0gOQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgOSA9PSA5CisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIzIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9IlN0cmluZ2lmeWluZyBzdGQ6OmNocm9ubzo6ZHVyYXRpb24gaGVscGVycyIgdGFncz0iW2Nocm9ub11bdG9TdHJpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nQ2hyb25vLnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ0Nocm9uby50ZXN0cy5jcHAiID4KQEAgLTYxNjAsNiArOTE3NCw2MjIgQEAKICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gZmxvYXQiIHRhZ3M9Ilt0ZW1wbGF0ZV1bdmVjdG9yXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdi5zaXplKCkgPT0gNQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNSA9PSA1CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gNQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNSA+PSA1CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJyZXNpemluZyBiaWdnZXIgY2hhbmdlcyBzaXplIGFuZCBjYXBhY2l0eSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgdi5zaXplKCkgPT0gMTAKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDEwID09IDEwCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDEwCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAxMCA+PSAxMAorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHYuc2l6ZSgpID09IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPT0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPj0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0icmVzaXppbmcgc21hbGxlciBjaGFuZ2VzIHNpemUgYnV0IG5vdCBjYXBhY2l0eSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgdi5zaXplKCkgPT0gMAorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMCA9PSAwCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDUKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDUgPj0gNQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgdi5jYXBhY2l0eSgpID09IDAKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgIDAgPT0gMAorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIzIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdi5zaXplKCkgPT0gNQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNSA9PSA1CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gNQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNSA+PSA1CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJyZXNlcnZpbmcgYmlnZ2VyIGNoYW5nZXMgY2FwYWNpdHkgYnV0IG5vdCBzaXplIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICB2LnNpemUoKSA9PSA1CisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICA1ID09IDUKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gMTAKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDEwID49IDEwCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdi5zaXplKCkgPT0gNQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNSA9PSA1CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gNQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNSA+PSA1CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJyZXNlcnZpbmcgc21hbGxlciBkb2VzIG5vdCBjaGFuZ2Ugc2l6ZSBvciBjYXBhY2l0eSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgdi5zaXplKCkgPT0gNQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgNSA9PSA1CisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDUKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDUgPj0gNQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJUZW1wbGF0ZVRlc3Q6IHZlY3RvcnMgY2FuIGJlIHNpemVkIGFuZCByZXNpemVkIC0gaW50IiB0YWdzPSJbdGVtcGxhdGVdW3ZlY3Rvcl0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHYuc2l6ZSgpID09IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPT0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPj0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0icmVzaXppbmcgYmlnZ2VyIGNoYW5nZXMgc2l6ZSBhbmQgY2FwYWNpdHkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuc2l6ZSgpID09IDEwCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAxMCA9PSAxMAorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSAxMAorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMTAgPj0gMTAKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB2LnNpemUoKSA9PSA1CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA1ID09IDUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSA1CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA1ID49IDUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9InJlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuc2l6ZSgpID09IDAKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDAgPT0gMAorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSA1CisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICA1ID49IDUKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9IldlIGNhbiB1c2UgdGhlICdzd2FwIHRyaWNrJyB0byByZXNldCB0aGUgY2FwYWNpdHkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIHYuY2FwYWNpdHkoKSA9PSAwCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAwID09IDAKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHYuc2l6ZSgpID09IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPT0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPj0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0icmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgdi5zaXplKCkgPT0gNQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgNSA9PSA1CisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDEwCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAxMCA+PSAxMAorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHYuc2l6ZSgpID09IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPT0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPj0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0icmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuc2l6ZSgpID09IDUKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDUgPT0gNQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSA1CisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICA1ID49IDUKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6c3RyaW5nIiB0YWdzPSJbdGVtcGxhdGVdW3ZlY3Rvcl0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHYuc2l6ZSgpID09IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPT0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPj0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0icmVzaXppbmcgYmlnZ2VyIGNoYW5nZXMgc2l6ZSBhbmQgY2FwYWNpdHkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuc2l6ZSgpID09IDEwCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAxMCA9PSAxMAorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSAxMAorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMTAgPj0gMTAKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB2LnNpemUoKSA9PSA1CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA1ID09IDUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSA1CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA1ID49IDUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9InJlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuc2l6ZSgpID09IDAKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDAgPT0gMAorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSA1CisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICA1ID49IDUKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9IldlIGNhbiB1c2UgdGhlICdzd2FwIHRyaWNrJyB0byByZXNldCB0aGUgY2FwYWNpdHkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIHYuY2FwYWNpdHkoKSA9PSAwCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAwID09IDAKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHYuc2l6ZSgpID09IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPT0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPj0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0icmVzZXJ2aW5nIGJpZ2dlciBjaGFuZ2VzIGNhcGFjaXR5IGJ1dCBub3Qgc2l6ZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgdi5zaXplKCkgPT0gNQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgNSA9PSA1CisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDEwCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAxMCA+PSAxMAorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMiIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHYuc2l6ZSgpID09IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPT0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdi5jYXBhY2l0eSgpID49IDUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPj0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0icmVzZXJ2aW5nIHNtYWxsZXIgZG9lcyBub3QgY2hhbmdlIHNpemUgb3IgY2FwYWNpdHkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuc2l6ZSgpID09IDUKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDUgPT0gNQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSA1CisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICA1ID49IDUKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0iVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCAtIHN0ZDo6dHVwbGUmbHQ7aW50LGZsb2F0PiIgdGFncz0iW3RlbXBsYXRlXVt2ZWN0b3JdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB2LnNpemUoKSA9PSA1CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA1ID09IDUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSA1CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA1ID49IDUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9InJlc2l6aW5nIGJpZ2dlciBjaGFuZ2VzIHNpemUgYW5kIGNhcGFjaXR5IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICB2LnNpemUoKSA9PSAxMAorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMTAgPT0gMTAKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gMTAKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDEwID49IDEwCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdi5zaXplKCkgPT0gNQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNSA9PSA1CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gNQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNSA+PSA1CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJyZXNpemluZyBzbWFsbGVyIGNoYW5nZXMgc2l6ZSBidXQgbm90IGNhcGFjaXR5IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICB2LnNpemUoKSA9PSAwCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAwID09IDAKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gNQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgNSA+PSA1CisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJXZSBjYW4gdXNlIHRoZSAnc3dhcCB0cmljaycgdG8gcmVzZXQgdGhlIGNhcGFjaXR5IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICB2LmNhcGFjaXR5KCkgPT0gMAorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgMCA9PSAwCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjMiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB2LnNpemUoKSA9PSA1CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA1ID09IDUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSA1CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA1ID49IDUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9InJlc2VydmluZyBiaWdnZXIgY2hhbmdlcyBjYXBhY2l0eSBidXQgbm90IHNpemUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuc2l6ZSgpID09IDUKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDUgPT0gNQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSAxMAorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMTAgPj0gMTAKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB2LnNpemUoKSA9PSA1CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA1ID09IDUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHYuY2FwYWNpdHkoKSA+PSA1CisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA1ID49IDUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9InJlc2VydmluZyBzbWFsbGVyIGRvZXMgbm90IGNoYW5nZSBzaXplIG9yIGNhcGFjaXR5IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICB2LnNpemUoKSA9PSA1CisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICA1ID09IDUKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICB2LmNhcGFjaXR5KCkgPj0gNQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgNSA+PSA1CisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9IlRlc3QgY2FzZSB3aXRoIG9uZSBhcmd1bWVudCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9WYXJpYWRpY01hY3Jvcy50ZXN0cy5jcHAiID4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgpAQCAtNjE4OCw2ICs5ODE4LDEyIEBACiAgICAgPFRlc3RDYXNlIG5hbWU9IlRoaXMgdGVzdCAnc2hvdWxkJyBmYWlsIGJ1dCBkb2Vzbid0IiB0YWdzPSJbIXNob3VsZGZhaWxdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgogICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9IlRocm93biBzdHJpbmcgbGl0ZXJhbHMgYXJlIHRyYW5zbGF0ZWQiIHRhZ3M9IlshdGhyb3dzXVsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CisgICAgICA8RXhjZXB0aW9uIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcCIgPgorICAgICAgICBGb3Igc29tZSByZWFzb24gc29tZW9uZSBpcyB0aHJvd2luZyBhIHN0cmluZyBsaXRlcmFsIQorICAgICAgPC9FeGNlcHRpb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgorICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9IlRyYWNrZXIiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgpAQCAtNjc2MSw1MzcgKzEwMzk3LDYgQEAKICAgICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI2IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgogICAgICAgPC9TZWN0aW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdGVzdENhc2UuaXNPcGVuKCkKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIHRydWUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHMxLmlzT3BlbigpCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICB0cnVlCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJzdGFydCBhIGdlbmVyYXRvciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgZzEuaXNPcGVuKCkKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIHRydWUKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBnMS5pbmRleCgpID09IDAKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDAgPT0gMAotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIGcxLmlzQ29tcGxldGUoKSA9PSBmYWxzZQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgZmFsc2UgPT0gZmFsc2UKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBzMS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIGZhbHNlID09IGZhbHNlCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8U2VjdGlvbiBuYW1lPSJjbG9zZSBvdXRlciBzZWN0aW9uIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICBzMS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIGZhbHNlID09IGZhbHNlCi0gICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIHRlc3RDYXNlLmlzU3VjY2Vzc2Z1bGx5Q29tcGxldGVkKCkgPT0gZmFsc2UKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIGZhbHNlID09IGZhbHNlCi0gICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICA8U2VjdGlvbiBuYW1lPSJSZS1lbnRlciBmb3Igc2Vjb25kIGdlbmVyYXRpb24iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIHRlc3RDYXNlMi5pc09wZW4oKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgczFiLmlzT3BlbigpCi0gICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICBnMWIuaXNPcGVuKCkKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIGcxYi5pbmRleCgpID09IDEKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIDEgPT0gMQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgczEuaXNDb21wbGV0ZSgpID09IGZhbHNlCi0gICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICBmYWxzZSA9PSBmYWxzZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgczFiLmlzQ29tcGxldGUoKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgZzFiLmlzQ29tcGxldGUoKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgdGVzdENhc2UyLmlzQ29tcGxldGUoKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iOCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KLSAgICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTAiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgIDwvU2VjdGlvbj4KLSAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTQiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICA8L1NlY3Rpb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICB0ZXN0Q2FzZS5pc09wZW4oKQotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgdHJ1ZQotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgczEuaXNPcGVuKCkKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIHRydWUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9InN0YXJ0IGEgZ2VuZXJhdG9yIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBnMS5pc09wZW4oKQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIGcxLmluZGV4KCkgPT0gMAotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgMCA9PSAwCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgZzEuaXNDb21wbGV0ZSgpID09IGZhbHNlCi0gICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICBmYWxzZSA9PSBmYWxzZQotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIHMxLmlzQ29tcGxldGUoKSA9PSBmYWxzZQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgZmFsc2UgPT0gZmFsc2UKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxTZWN0aW9uIG5hbWU9IlN0YXJ0IGEgbmV3IGlubmVyIHNlY3Rpb24iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIHMyLmlzT3BlbigpCi0gICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIHMyLmlzQ29tcGxldGUoKQotICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICBzMS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIGZhbHNlID09IGZhbHNlCi0gICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIHRlc3RDYXNlLmlzQ29tcGxldGUoKSA9PSBmYWxzZQotICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgZmFsc2UgPT0gZmFsc2UKLSAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgIDxTZWN0aW9uIG5hbWU9IlJlLWVudGVyIGZvciBzZWNvbmQgZ2VuZXJhdGlvbiIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgdGVzdENhc2UyLmlzT3BlbigpCi0gICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICBzMWIuaXNPcGVuKCkKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIGcxYi5pc09wZW4oKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgZzFiLmluZGV4KCkgPT0gMQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgMSA9PSAxCi0gICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICBzMmIuaXNPcGVuKCkKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIHMyYi5pc0NvbXBsZXRlKCkKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIGcxYi5pc0NvbXBsZXRlKCkKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIHMxYi5pc0NvbXBsZXRlKCkKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIHRlc3RDYXNlMi5pc0NvbXBsZXRlKCkKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjkiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEzIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjE3IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgdGVzdENhc2UuaXNPcGVuKCkKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgIHRydWUKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIHMxLmlzT3BlbigpCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICB0cnVlCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJzdGFydCBhIGdlbmVyYXRvciIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgZzEuaXNPcGVuKCkKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIHRydWUKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBnMS5pbmRleCgpID09IDAKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIDAgPT0gMAotICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgIGcxLmlzQ29tcGxldGUoKSA9PSBmYWxzZQotICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgZmFsc2UgPT0gZmFsc2UKLSAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICBzMS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UKLSAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgIGZhbHNlID09IGZhbHNlCi0gICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICA8U2VjdGlvbiBuYW1lPSJGYWlsIGFuIGlubmVyIHNlY3Rpb24iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIHMyLmlzT3BlbigpCi0gICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIHMyLmlzQ29tcGxldGUoKQotICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICBzMi5pc1N1Y2Nlc3NmdWxseUNvbXBsZXRlZCgpID09IGZhbHNlCi0gICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICBmYWxzZSA9PSBmYWxzZQotICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICBzMS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UKLSAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgIGZhbHNlID09IGZhbHNlCi0gICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgIHRlc3RDYXNlLmlzQ29tcGxldGUoKSA9PSBmYWxzZQotICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgZmFsc2UgPT0gZmFsc2UKLSAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgIDxTZWN0aW9uIG5hbWU9IlJlLWVudGVyIGZvciBzZWNvbmQgZ2VuZXJhdGlvbiIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgdGVzdENhc2UyLmlzT3BlbigpCi0gICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICBzMWIuaXNPcGVuKCkKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIGcxYi5pc09wZW4oKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgZzFiLmluZGV4KCkgPT0gMAotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgMCA9PSAwCi0gICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICBzMmIuaXNPcGVuKCkgPT0gZmFsc2UKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIGZhbHNlID09IGZhbHNlCi0gICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICBnMWIuaXNDb21wbGV0ZSgpID09IGZhbHNlCi0gICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICBmYWxzZSA9PSBmYWxzZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgczFiLmlzQ29tcGxldGUoKSA9PSBmYWxzZQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgZmFsc2UgPT0gZmFsc2UKLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIHRlc3RDYXNlMi5pc0NvbXBsZXRlKCkgPT0gZmFsc2UKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIGZhbHNlID09IGZhbHNlCi0gICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICB0ZXN0Q2FzZTMuaXNPcGVuKCkKLSAgICAgICAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICAgICAgIHRydWUKLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIHMxYy5pc09wZW4oKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgZzFjLmlzT3BlbigpCi0gICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICB0cnVlCi0gICAgICAgICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwIiA+Ci0gICAgICAgICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICAgICAgICBnMWMuaW5kZXgoKSA9PSAxCi0gICAgICAgICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAgICAgICAxID09IDEKLSAgICAgICAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgICAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAiID4KLSAgICAgICAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgICAgICAgIHMyYy5pc09wZW4oKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgczJjLmlzQ29tcGxldGUoKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgZzFjLmlzQ29tcGxldGUoKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgczFjLmlzQ29tcGxldGUoKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcCIgPgotICAgICAgICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgICAgICAgdGVzdENhc2UzLmlzQ29tcGxldGUoKQotICAgICAgICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgICAgICAgdHJ1ZQotICAgICAgICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMTciIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+Ci0gICAgICAgICAgPC9TZWN0aW9uPgotICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIyIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgICA8L1NlY3Rpb24+Ci0gICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjI2IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgotICAgICAgPC9TZWN0aW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9IlVuZXhwZWN0ZWQgZXhjZXB0aW9ucyBjYW4gYmUgdHJhbnNsYXRlZCIgdGFncz0iWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KQEAgLTc3MjUsNyArMTA4MzAsNyBAQAogICAgIDxUZXN0Q2FzZSBuYW1lPSJYL2xldmVsLzEvYiIgdGFncz0iW1RyaWNreV0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcCIgPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9IlhtbEVuY29kZSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICA8VGVzdENhc2UgbmFtZT0iWG1sRW5jb2RlIiB0YWdzPSJbWE1MXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KICAgICAgIDxTZWN0aW9uIG5hbWU9Im5vcm1hbCBzdHJpbmciIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPE9yaWdpbmFsPgpAQCAtNzgzOCw2ICsxMDk0MywzNzggQEAKICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJYbWxFbmNvZGU6IFVURi04IiB0YWdzPSJbVVRGLThdW1hNTF0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICA8U2VjdGlvbiBuYW1lPSJWYWxpZCB1dGYtOCBzdHJpbmdzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBlbmNvZGUodTgiSGVyZSBiZSDwn5G+IikgPT0gdTgiSGVyZSBiZSDwn5G+IgorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgIkhlcmUgYmUg8J+RviIgPT0gIkhlcmUgYmUg8J+RviIKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGVuY29kZSh1OCLFocWhIikgPT0gdTgixaHFoSIKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICLFocWhIiA9PSAixaHFoSIKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGVuY29kZSgiXHhERlx4QkYiKSA9PSAiXHhERlx4QkYiCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAi378iID09ICLfvyIKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGVuY29kZSgiXHhFMFx4QTBceDgwIikgPT0gIlx4RTBceEEwXHg4MCIKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICLgoIAiID09ICLgoIAiCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBlbmNvZGUoIlx4RURceDlGXHhCRiIpID09ICJceEVEXHg5Rlx4QkYiCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAi7Z+/IiA9PSAi7Z+/IgorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgZW5jb2RlKCJceEVFXHg4MFx4ODAiKSA9PSAiXHhFRVx4ODBceDgwIgorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgIu6AgCIgPT0gIu6AgCIKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGVuY29kZSgiXHhFRlx4QkZceEJGIikgPT0gIlx4RUZceEJGXHhCRiIKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICLvv78iID09ICLvv78iCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBlbmNvZGUoIlx4RjBceDkwXHg4MFx4ODAiKSA9PSAiXHhGMFx4OTBceDgwXHg4MCIKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICLwkICAIiA9PSAi8JCAgCIKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGVuY29kZSgiXHhGNFx4OEZceEJGXHhCRiIpID09ICJceEY0XHg4Rlx4QkZceEJGIgorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgIvSPv78iID09ICL0j7+/IgorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iOSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IkludmFsaWQgdXRmLTggc3RyaW5ncyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iVmFyaW91cyBicm9rZW4gc3RyaW5ncyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJIZXJlIFx4RkYgYmUg8J+RviIpID09IHU4IkhlcmUgXFx4RkYgYmUg8J+RviIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJIZXJlIFx4RkYgYmUg8J+RviIgPT0gIkhlcmUgXHhGRiBiZSDwn5G+IgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhGRiIpID09ICJcXHhGRiIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEZGIiA9PSAiXHhGRiIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4QzVceEM1XHhBMCIpID09IHU4IlxceEM1xaAiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhDNcWgIiA9PSAiXHhDNcWgIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhGNFx4OTBceDgwXHg4MCIpID09IHU4IlxceEY0XFx4OTBcXHg4MFxceDgwIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4RjRceDkwXHg4MFx4ODAiID09ICJceEY0XHg5MFx4ODBceDgwIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI0IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iSW52YWxpZCB1dGYtOCBzdHJpbmdzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICA8U2VjdGlvbiBuYW1lPSJPdmVybG9uZyBlbmNvZGluZ3MiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhDMFx4ODAiKSA9PSB1OCJcXHhDMFxceDgwIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4QzBceDgwIiA9PSAiXHhDMFx4ODAiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEYwXHg4MFx4ODBceDgwIikgPT0gdTgiXFx4RjBcXHg4MFxceDgwXFx4ODAiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhGMFx4ODBceDgwXHg4MCIgPT0gIlx4RjBceDgwXHg4MFx4ODAiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEMxXHhCRiIpID09IHU4IlxceEMxXFx4QkYiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhDMVx4QkYiID09ICJceEMxXHhCRiIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RTBceDlGXHhCRiIpID09IHU4IlxceEUwXFx4OUZcXHhCRiIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEUwXHg5Rlx4QkYiID09ICJceEUwXHg5Rlx4QkYiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEYwXHg4Rlx4QkZceEJGIikgPT0gdTgiXFx4RjBcXHg4RlxceEJGXFx4QkYiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhGMFx4OEZceEJGXHhCRiIgPT0gIlx4RjBceDhGXHhCRlx4QkYiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI1IiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgICA8L1NlY3Rpb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjUiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJJbnZhbGlkIHV0Zi04IHN0cmluZ3MiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9IlN1cnJvZ2F0ZSBwYWlycyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEVEXHhBMFx4ODAiKSA9PSAiXHhFRFx4QTBceDgwIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIu2ggCIgPT0gIu2ggCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RURceEFGXHhCRiIpID09ICJceEVEXHhBRlx4QkYiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAi7a+/IiA9PSAi7a+/IgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhFRFx4QjBceDgwIikgPT0gIlx4RURceEIwXHg4MCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICLtsIAiID09ICLtsIAiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEVEXHhCRlx4QkYiKSA9PSAiXHhFRFx4QkZceEJGIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIu2/vyIgPT0gIu2/vyIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjQiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNCIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IkludmFsaWQgdXRmLTggc3RyaW5ncyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iSW52YWxpZCBzdGFydCBieXRlIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4ODAiKSA9PSB1OCJcXHg4MCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceDgwIiA9PSAiXHg4MCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4ODEiKSA9PSB1OCJcXHg4MSIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceDgxIiA9PSAiXHg4MSIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4QkMiKSA9PSB1OCJcXHhCQyIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEJDIiA9PSAiXHhCQyIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4QkYiKSA9PSB1OCJcXHhCRiIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEJGIiA9PSAiXHhCRiIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RjVceDgwXHg4MFx4ODAiKSA9PSB1OCJcXHhGNVxceDgwXFx4ODBcXHg4MCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEY1XHg4MFx4ODBceDgwIiA9PSAiXHhGNVx4ODBceDgwXHg4MCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RjZceDgwXHg4MFx4ODAiKSA9PSB1OCJcXHhGNlxceDgwXFx4ODBcXHg4MCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEY2XHg4MFx4ODBceDgwIiA9PSAiXHhGNlx4ODBceDgwXHg4MCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RjdceDgwXHg4MFx4ODAiKSA9PSB1OCJcXHhGN1xceDgwXFx4ODBcXHg4MCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEY3XHg4MFx4ODBceDgwIiA9PSAiXHhGN1x4ODBceDgwXHg4MCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjciIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICAgIDwvU2VjdGlvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iNyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9IkludmFsaWQgdXRmLTggc3RyaW5ncyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iTWlzc2luZyBjb250aW51YXRpb24gYnl0ZShzKSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceERFIikgPT0gdTgiXFx4REUiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhERSIgPT0gIlx4REUiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceERGIikgPT0gdTgiXFx4REYiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhERiIgPT0gIlx4REYiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEUwIikgPT0gdTgiXFx4RTAiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhFMCIgPT0gIlx4RTAiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEVGIikgPT0gdTgiXFx4RUYiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhFRiIgPT0gIlx4RUYiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEYwIikgPT0gdTgiXFx4RjAiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhGMCIgPT0gIlx4RjAiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEY0IikgPT0gdTgiXFx4RjQiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhGNCIgPT0gIlx4RjQiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEUwXHg4MCIpID09IHU4IlxceEUwXFx4ODAiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhFMFx4ODAiID09ICJceEUwXHg4MCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RTBceEJGIikgPT0gdTgiXFx4RTBcXHhCRiIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEUwXHhCRiIgPT0gIlx4RTBceEJGIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhFMVx4ODAiKSA9PSB1OCJcXHhFMVxceDgwIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4RTFceDgwIiA9PSAiXHhFMVx4ODAiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1htbC50ZXN0cy5jcHAiID4KKyAgICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgICAgZW5jb2RlKCJceEYwXHg4MCIpID09IHU4IlxceEYwXFx4ODAiCisgICAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgICAiXHhGMFx4ODAiID09ICJceEYwXHg4MCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RjRceDgwIikgPT0gdTgiXFx4RjRcXHg4MCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEY0XHg4MCIgPT0gIlx4RjRceDgwIgorICAgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwIiA+CisgICAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICAgIGVuY29kZSgiXHhGMFx4ODBceDgwIikgPT0gdTgiXFx4RjBcXHg4MFxceDgwIgorICAgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgICAgIlx4RjBceDgwXHg4MCIgPT0gIlx4RjBceDgwXHg4MCIKKyAgICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCIgPgorICAgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgICBlbmNvZGUoIlx4RjRceDgwXHg4MCIpID09IHU4IlxceEY0XFx4ODBcXHg4MCIKKyAgICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAgICJceEY0XHg4MFx4ODAiID09ICJceEY0XHg4MFx4ODAiCisgICAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxMyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgICAgPC9TZWN0aW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxMyIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJhcnJheSZsdDtpbnQsIE4+IC0+IHRvU3RyaW5nIiB0YWdzPSJbYXJyYXldW2NvbnRhaW5lcnNdW3RvU3RyaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdWZWN0b3IudGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTgwNjQsOSArMTE1NDEsMTggQEAKICAgICAgIDwvRmFpbHVyZT4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0ianVzdCBmYWlsdXJlIGFmdGVyIHVuc2NvcGVkIGluZm8iIHRhZ3M9IlsuXVtmYWlsaW5nXVtpbmZvXVt1bnNjb3BlZF0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICAgIDxGYWlsdXJlIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICAgICAgcHJldmlvdXMgdW5zY29wZWQgaW5mbyBTSE9VTEQgbm90IGJlIHNlZW4KKyAgICAgIDwvRmFpbHVyZT4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CisgICAgPC9UZXN0Q2FzZT4KICAgICA8VGVzdENhc2UgbmFtZT0ianVzdCBpbmZvIiB0YWdzPSJbaW5mb11baXNvbGF0ZWQgaW5mb11bbWVzc2FnZXNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgogICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9Imp1c3QgdW5zY29wZWQgaW5mbyIgdGFncz0iW2luZm9dW3Vuc2NvcGVkXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KKyAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJsb25nIGxvbmciIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgpAQCAtODA4MSw3ICsxMTU2Nyw3IEBACiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KICAgICA8VGVzdENhc2UgbmFtZT0ibG9vcGVkIFNFQ1RJT04gdGVzdHMiIHRhZ3M9IlsuXVtmYWlsaW5nXVtzZWN0aW9uc10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgIDxTZWN0aW9uIG5hbWU9InMxIiBkZXNjcmlwdGlvbj0iYiBpcyBjdXJyZW50bHk6IDAiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgIDxTZWN0aW9uIG5hbWU9ImIgaXMgY3VycmVudGx5OiAwIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICAgIGIgPiBhCkBAIC04MDkyLDYgKzExNTc4LDEwNSBAQAogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjAiIGZhaWx1cmVzPSIxIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJiIGlzIGN1cnJlbnRseTogMSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBiID4gYQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgMSA+IDEKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjAiIGZhaWx1cmVzPSIxIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJiIGlzIGN1cnJlbnRseTogMiIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGIgPiBhCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICAyID4gMQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9ImIgaXMgY3VycmVudGx5OiAzIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgYiA+IGEKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDMgPiAxCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iYiBpcyBjdXJyZW50bHk6IDQiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBiID4gYQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgNCA+IDEKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJiIGlzIGN1cnJlbnRseTogNSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGIgPiBhCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICA1ID4gMQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9ImIgaXMgY3VycmVudGx5OiA2IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgYiA+IGEKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDYgPiAxCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgorICAgICAgPFNlY3Rpb24gbmFtZT0iYiBpcyBjdXJyZW50bHk6IDciIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgICBiID4gYQorICAgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICAgNyA+IDEKKyAgICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgICA8L0V4cHJlc3Npb24+CisgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CisgICAgICA8L1NlY3Rpb24+CisgICAgICA8U2VjdGlvbiBuYW1lPSJiIGlzIGN1cnJlbnRseTogOCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICAgIGIgPiBhCisgICAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgICA4ID4gMQorICAgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KKyAgICAgIDwvU2VjdGlvbj4KKyAgICAgIDxTZWN0aW9uIG5hbWU9ImIgaXMgY3VycmVudGx5OiA5IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgICAgYiA+IGEKKyAgICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAgIDkgPiAxCisgICAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxIiBmYWlsdXJlcz0iMCIgZXhwZWN0ZWRGYWlsdXJlcz0iMCIvPgorICAgICAgPC9TZWN0aW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJsb29wZWQgdGVzdHMiIHRhZ3M9IlsuXVtmYWlsaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgpAQCAtODE4NSw5ICsxMTc3MCwzMCBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KICAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJtaXggaW5mbywgdW5zY29wZWQgaW5mbyBhbmQgd2FybmluZyIgdGFncz0iW2luZm9dW3Vuc2NvcGVkXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgICAgPEluZm8+CisgICAgICAgIGluZm8KKyAgICAgIDwvSW5mbz4KKyAgICAgIDxJbmZvPgorICAgICAgICB1bnNjb3BlZCBpbmZvCisgICAgICA8L0luZm8+CisgICAgICA8V2FybmluZz4KKyAgICAgICAgYW5kIHdhcm4gbWF5IG1peAorICAgICAgPC9XYXJuaW5nPgorICAgICAgPEluZm8+CisgICAgICAgIGluZm8KKyAgICAgIDwvSW5mbz4KKyAgICAgIDxJbmZvPgorICAgICAgICB1bnNjb3BlZCBpbmZvCisgICAgICA8L0luZm8+CisgICAgICA8V2FybmluZz4KKyAgICAgICAgdGhleSBhcmUgbm90IGNsZWFyZWQgYWZ0ZXIgd2FybmluZ3MKKyAgICAgIDwvV2FybmluZz4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CisgICAgPC9UZXN0Q2FzZT4KICAgICA8VGVzdENhc2UgbmFtZT0ibW9yZSBuZXN0ZWQgU0VDVElPTiB0ZXN0cyIgdGFncz0iWy5dW2ZhaWxpbmddW3NlY3Rpb25zXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgPFNlY3Rpb24gbmFtZT0iczEiIGRlc2NyaXB0aW9uPSJkb2Vzbid0IGVxdWFsIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxTZWN0aW9uIG5hbWU9InMyIiBkZXNjcmlwdGlvbj0iZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgIDxTZWN0aW9uIG5hbWU9ImRvZXNuJ3QgZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0iZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgICAgICBhID09IGIKQEAgLTgyMDAsOCArMTE4MDYsOCBAQAogICAgICAgICA8L1NlY3Rpb24+CiAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjAiIGZhaWx1cmVzPSIxIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJzMSIgZGVzY3JpcHRpb249ImRvZXNuJ3QgZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iczMiIGRlc2NyaXB0aW9uPSJub3QgZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgIDxTZWN0aW9uIG5hbWU9ImRvZXNuJ3QgZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0ibm90IGVxdWFsIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgICAgICBhICE9IGIKQEAgLTgyMTQsOCArMTE4MjAsOCBAQAogICAgICAgICA8L1NlY3Rpb24+CiAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJzMSIgZGVzY3JpcHRpb249ImRvZXNuJ3QgZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KLSAgICAgICAgPFNlY3Rpb24gbmFtZT0iczQiIGRlc2NyaXB0aW9uPSJsZXNzIHRoYW4iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgIDxTZWN0aW9uIG5hbWU9ImRvZXNuJ3QgZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgICAgPFNlY3Rpb24gbmFtZT0ibGVzcyB0aGFuIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgICAgICAgPE9yaWdpbmFsPgogICAgICAgICAgICAgICBhICZsdDsgYgpAQCAtODIzMSw3ICsxMTgzNyw3IEBACiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgogICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9Im5lc3RlZCBTRUNUSU9OIHRlc3RzIiB0YWdzPSJbLl1bZmFpbGluZ11bc2VjdGlvbnNdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJzMSIgZGVzY3JpcHRpb249ImRvZXNuJ3QgZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KKyAgICAgIDxTZWN0aW9uIG5hbWU9ImRvZXNuJ3QgZXF1YWwiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICAgIGEgIT0gYgpAQCAtODI0OCw3ICsxMTg1NCw3IEBACiAgICAgICAgICAgICAyICE9IDEKICAgICAgICAgICA8L0V4cGFuZGVkPgogICAgICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICAgIDxTZWN0aW9uIG5hbWU9InMyIiBkZXNjcmlwdGlvbj0ibm90IGVxdWFsIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICAgIDxTZWN0aW9uIG5hbWU9Im5vdCBlcXVhbCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICAgICAgYSAhPSBiCkBAIC04Mjg4LDYgKzExODk0LDQyIEBACiAgICAgPFRlc3RDYXNlIG5hbWU9Im5vdCBhbGxvd2VkIiB0YWdzPSJbIXRocm93c10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJub3QgcHJpbnRzIHVuc2NvcGVkIGluZm8gZnJvbSBwcmV2aW91cyBmYWlsdXJlcyIgdGFncz0iWy5dW2ZhaWxpbmddW2luZm9dW3Vuc2NvcGVkXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgICAgPEluZm8+CisgICAgICAgIHRoaXMgTUFZIGJlIHNlZW4gb25seSBmb3IgdGhlIEZJUlNUIGFzc2VydGlvbiBJRiBpbmZvIGlzIHByaW50ZWQgZm9yIHBhc3NpbmcgYXNzZXJ0aW9ucworICAgICAgPC9JbmZvPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdHJ1ZQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgdHJ1ZQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEluZm8+CisgICAgICAgIHRoaXMgTUFZIGJlIHNlZW4gb25seSBmb3IgdGhlIFNFQ09ORCBhc3NlcnRpb24gSUYgaW5mbyBpcyBwcmludGVkIGZvciBwYXNzaW5nIGFzc2VydGlvbnMKKyAgICAgIDwvSW5mbz4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHRydWUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIHRydWUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxJbmZvPgorICAgICAgICB0aGlzIFNIT1VMRCBiZSBzZWVuCisgICAgICA8L0luZm8+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgZmFsc2UKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIGZhbHNlCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJmYWxzZSIvPgorICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9Im51bGwgc3RyaW5ncyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CkBAIC04MzQyLDggKzExOTg0LDgwIEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0icHJpbnQgdW5zY29wZWQgaW5mbyBpZiBwYXNzaW5nIHVuc2NvcGVkIGluZm8gaXMgcHJpbnRlZCIgdGFncz0iW2luZm9dW3Vuc2NvcGVkXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgICAgPEluZm8+CisgICAgICAgIHRoaXMgTUFZIGJlIHNlZW4gSUYgaW5mbyBpcyBwcmludGVkIGZvciBwYXNzaW5nIGFzc2VydGlvbnMKKyAgICAgIDwvSW5mbz4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHRydWUKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIHRydWUKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJwcmludHMgdW5zY29wZWQgaW5mbyBvbiBmYWlsdXJlIiB0YWdzPSJbLl1bZmFpbGluZ11baW5mb11bdW5zY29wZWRdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CisgICAgICA8SW5mbz4KKyAgICAgICAgdGhpcyBTSE9VTEQgYmUgc2VlbgorICAgICAgPC9JbmZvPgorICAgICAgPEluZm8+CisgICAgICAgIHRoaXMgU0hPVUxEIGFsc28gYmUgc2VlbgorICAgICAgPC9JbmZvPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0iZmFsc2UiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIGZhbHNlCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICBmYWxzZQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KKyAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJwcmludHMgdW5zY29wZWQgaW5mbyBvbmx5IGZvciB0aGUgZmlyc3QgYXNzZXJ0aW9uIiB0YWdzPSJbLl1bZmFpbGluZ11baW5mb11bdW5zY29wZWRdIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CisgICAgICA8SW5mbz4KKyAgICAgICAgdGhpcyBTSE9VTEQgYmUgc2VlbiBvbmx5IE9OQ0UKKyAgICAgIDwvSW5mbz4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgZmFsc2UKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIGZhbHNlCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdHJ1ZQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgdHJ1ZQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEluZm8+CisgICAgICAgIHRoaXMgTUFZIGFsc28gYmUgc2VlbiBvbmx5IE9OQ0UgSUYgaW5mbyBpcyBwcmludGVkIGZvciBwYXNzaW5nIGFzc2VydGlvbnMKKyAgICAgIDwvSW5mbz4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICB0cnVlCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICB0cnVlCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgdHJ1ZQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgdHJ1ZQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KKyAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJyYW5kb20gU0VDVElPTiB0ZXN0cyIgdGFncz0iWy5dW2ZhaWxpbmddW3NlY3Rpb25zXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgotICAgICAgPFNlY3Rpb24gbmFtZT0iczEiIGRlc2NyaXB0aW9uPSJkb2Vzbid0IGVxdWFsIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICA8U2VjdGlvbiBuYW1lPSJkb2Vzbid0IGVxdWFsIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgICBhICE9IGIKQEAgLTgzNjIsNyArMTIwNzYsNyBAQAogICAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjIiIGZhaWx1cmVzPSIwIiBleHBlY3RlZEZhaWx1cmVzPSIwIi8+CiAgICAgICA8L1NlY3Rpb24+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJzMiIgZGVzY3JpcHRpb249Im5vdCBlcXVhbCIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgPFNlY3Rpb24gbmFtZT0ibm90IGVxdWFsIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgICA8T3JpZ2luYWw+CiAgICAgICAgICAgICBhICE9IGIKQEAgLTgzNzUsNyArMTIwODksNyBAQAogICAgICAgPC9TZWN0aW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9InJlcGxhY2VJblBsYWNlIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJyZXBsYWNlSW5QbGFjZSIgdGFncz0iW1N0cmluZ01hbmlwXVtTdHJpbmdzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAiID4KICAgICAgIDxTZWN0aW9uIG5hbWU9InJlcGxhY2Ugc2luZ2xlIGNoYXIiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L0ludHJvc3BlY3RpdmVUZXN0cy9TdHJpbmcudGVzdHMuY3BwIiA+CiAgICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IkNIRUNLIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTg1NDUsNiArMTIyNTksNDkgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0ic3RhY2tzIHVuc2NvcGVkIGluZm8gaW4gbG9vcHMiIHRhZ3M9IlsuXVtmYWlsaW5nXVtpbmZvXVt1bnNjb3BlZF0iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICAgIDxJbmZvPgorICAgICAgICBDb3VudCAxIHRvIDMuLi4KKyAgICAgIDwvSW5mbz4KKyAgICAgIDxJbmZvPgorICAgICAgICAxCisgICAgICA8L0luZm8+CisgICAgICA8SW5mbz4KKyAgICAgICAgMgorICAgICAgPC9JbmZvPgorICAgICAgPEluZm8+CisgICAgICAgIDMKKyAgICAgIDwvSW5mbz4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9ImZhbHNlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgZmFsc2UKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIGZhbHNlCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8SW5mbz4KKyAgICAgICAgQ291bnQgNCB0byA2Li4uCisgICAgICA8L0luZm8+CisgICAgICA8SW5mbz4KKyAgICAgICAgNAorICAgICAgPC9JbmZvPgorICAgICAgPEluZm8+CisgICAgICAgIDUKKyAgICAgIDwvSW5mbz4KKyAgICAgIDxJbmZvPgorICAgICAgICA2CisgICAgICA8L0luZm8+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJmYWxzZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIGZhbHNlCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICBmYWxzZQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KKyAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJzdGQ6Om1hcCBpcyBjb252ZXJ0aWJsZSBzdHJpbmciIHRhZ3M9Ilt0b1N0cmluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcCIgPgogICAgICAgPFNlY3Rpb24gbmFtZT0iZW1wdHkiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcCIgPgogICAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHAiID4KQEAgLTg2NjcsNiArMTI0MjQsNDUgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9ImZhbHNlIi8+CiAgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0ic3RyaW5naWZ5IHJhbmdlcyIgdGFncz0iW3RvU3RyaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoc3RyZWFtYWJsZV9yYW5nZXt9KSA9PSAib3AmbHQ7Jmx0OyhzdHJlYW1hYmxlX3JhbmdlKSIKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICJvcCZsdDsmbHQ7KHN0cmVhbWFibGVfcmFuZ2UpIgorPT0KKyJvcCZsdDsmbHQ7KHN0cmVhbWFibGVfcmFuZ2UpIgorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoc3RyaW5nbWFrZXJfcmFuZ2V7fSkgPT0gInN0cmluZ21ha2VyKHN0cmVhbWFibGVfcmFuZ2UpIgorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgInN0cmluZ21ha2VyKHN0cmVhbWFibGVfcmFuZ2UpIgorPT0KKyJzdHJpbmdtYWtlcihzdHJlYW1hYmxlX3JhbmdlKSIKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdXaGljaC50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGp1c3RfcmFuZ2V7fSkgPT0gInsgMSwgMiwgMywgNCB9IgorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgInsgMSwgMiwgMywgNCB9IiA9PSAieyAxLCAyLCAzLCA0IH0iCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShkaXNhYmxlZF9yYW5nZXt9KSA9PSAieyAhISEgfSIKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICJ7ICEhISB9IiA9PSAieyAhISEgfSIKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJzdHJpbmdpZnkoIGhhc19tYWtlciApIiB0YWdzPSJbdG9TdHJpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KQEAgLTg2ODAsNyArMTI0NzYsNyBAQAogICAgICAgPC9FeHByZXNzaW9uPgogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+Ci0gICAgPFRlc3RDYXNlIG5hbWU9InN0cmluZ2lmeSggaGFzX21ha2VyX2FuZF90b1N0cmluZyApIiB0YWdzPSJbLl1bdG9TdHJpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+CisgICAgPFRlc3RDYXNlIG5hbWU9InN0cmluZ2lmeSggaGFzX21ha2VyX2FuZF9vcGVyYXRvciApIiB0YWdzPSJbdG9TdHJpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+CiAgICAgICAgIDxPcmlnaW5hbD4KICAgICAgICAgICA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggaXRlbSApID09ICJTdHJpbmdNYWtlciZsdDtoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiIKQEAgLTg2OTMsNiArMTI0ODksMTcgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJzdHJpbmdpZnkoIGhhc19uZWl0aGVyICkiIHRhZ3M9Ilt0b1N0cmluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdXaGljaC50ZXN0cy5jcHAiID4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdXaGljaC50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGl0ZW0pID09ICJ7ICEhISB9IgorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgInsgISEhIH0iID09ICJ7ICEhISB9IgorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9InN0cmluZ2lmeSggaGFzX29wZXJhdG9yICkiIHRhZ3M9Ilt0b1N0cmluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdXaGljaC50ZXN0cy5jcHAiID4KICAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdXaGljaC50ZXN0cy5jcHAiID4KICAgICAgICAgPE9yaWdpbmFsPgpAQCAtODcwNiw2ICsxMjUxMywxMzQgQEAKICAgICAgIDwvRXhwcmVzc2lvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJzdHJpbmdpZnkoIGhhc190ZW1wbGF0ZV9vcGVyYXRvciApIiB0YWdzPSJbdG9TdHJpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggaXRlbSApID09ICJvcGVyYXRvciZsdDsmbHQ7KCBoYXNfdGVtcGxhdGVfb3BlcmF0b3IgKSIKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgICJvcGVyYXRvciZsdDsmbHQ7KCBoYXNfdGVtcGxhdGVfb3BlcmF0b3IgKSIKKz09Cisib3BlcmF0b3ImbHQ7Jmx0OyggaGFzX3RlbXBsYXRlX29wZXJhdG9yICkiCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0ic3RyaW5naWZ5KCB2ZWN0b3JzJmx0O2hhc19tYWtlcj4gKSIgdGFncz0iW3RvU3RyaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHYgKSA9PSAieyBTdHJpbmdNYWtlciZsdDtoYXNfbWFrZXI+IH0iCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAieyBTdHJpbmdNYWtlciZsdDtoYXNfbWFrZXI+IH0iCis9PQorInsgU3RyaW5nTWFrZXImbHQ7aGFzX21ha2VyPiB9IgorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9InN0cmluZ2lmeSggdmVjdG9ycyZsdDtoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiApIiB0YWdzPSJbdG9TdHJpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggdiApID09ICJ7IFN0cmluZ01ha2VyJmx0O2hhc19tYWtlcl9hbmRfb3BlcmF0b3I+IH0iCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAieyBTdHJpbmdNYWtlciZsdDtoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiB9IgorPT0KKyJ7IFN0cmluZ01ha2VyJmx0O2hhc19tYWtlcl9hbmRfb3BlcmF0b3I+IH0iCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0ic3RyaW5naWZ5KCB2ZWN0b3JzJmx0O2hhc19vcGVyYXRvcj4gKSIgdGFncz0iW3RvU3RyaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHYgKSA9PSAieyBvcGVyYXRvciZsdDsmbHQ7KCBoYXNfb3BlcmF0b3IgKSB9IgorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgInsgb3BlcmF0b3ImbHQ7Jmx0OyggaGFzX29wZXJhdG9yICkgfSIKKz09CisieyBvcGVyYXRvciZsdDsmbHQ7KCBoYXNfb3BlcmF0b3IgKSB9IgorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgorICAgIDwvVGVzdENhc2U+CisgICAgPFRlc3RDYXNlIG5hbWU9InN0cmxlbjMiIHRhZ3M9IltnZW5lcmF0b3JzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgZGF0YS5zdHIuc2l6ZSgpID09IGRhdGEubGVuCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICAzID09IDMKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIGRhdGEuc3RyLnNpemUoKSA9PSBkYXRhLmxlbgorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgMyA9PSAzCisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBkYXRhLnN0ci5zaXplKCkgPT0gZGF0YS5sZW4KKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPT0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgZGF0YS5zdHIuc2l6ZSgpID09IGRhdGEubGVuCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA0ID09IDQKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KKyAgICA8L1Rlc3RDYXNlPgorICAgIDxUZXN0Q2FzZSBuYW1lPSJ0YWJsZXMiIHRhZ3M9IltnZW5lcmF0b3JzXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgc3RybGVuKHN0ZDo6Z2V0Jmx0OzA+KGRhdGEpKSA9PSBzdGF0aWNfY2FzdCZsdDtzaXplX3Q+KHN0ZDo6Z2V0Jmx0OzE+KGRhdGEpKQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNSA9PSA1CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIiA+CisgICAgICAgIDxPcmlnaW5hbD4KKyAgICAgICAgICBzdHJsZW4oc3RkOjpnZXQmbHQ7MD4oZGF0YSkpID09IHN0YXRpY19jYXN0Jmx0O3NpemVfdD4oc3RkOjpnZXQmbHQ7MT4oZGF0YSkpCisgICAgICAgIDwvT3JpZ2luYWw+CisgICAgICAgIDxFeHBhbmRlZD4KKyAgICAgICAgICA2ID09IDYKKyAgICAgICAgPC9FeHBhbmRlZD4KKyAgICAgIDwvRXhwcmVzc2lvbj4KKyAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvR2VuZXJhdG9ycy50ZXN0cy5jcHAiID4KKyAgICAgICAgPE9yaWdpbmFsPgorICAgICAgICAgIHN0cmxlbihzdGQ6OmdldCZsdDswPihkYXRhKSkgPT0gc3RhdGljX2Nhc3QmbHQ7c2l6ZV90PihzdGQ6OmdldCZsdDsxPihkYXRhKSkKKyAgICAgICAgPC9PcmlnaW5hbD4KKyAgICAgICAgPEV4cGFuZGVkPgorICAgICAgICAgIDUgPT0gNQorICAgICAgICA8L0V4cGFuZGVkPgorICAgICAgPC9FeHByZXNzaW9uPgorICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcCIgPgorICAgICAgICA8T3JpZ2luYWw+CisgICAgICAgICAgc3RybGVuKHN0ZDo6Z2V0Jmx0OzA+KGRhdGEpKSA9PSBzdGF0aWNfY2FzdCZsdDtzaXplX3Q+KHN0ZDo6Z2V0Jmx0OzE+KGRhdGEpKQorICAgICAgICA8L09yaWdpbmFsPgorICAgICAgICA8RXhwYW5kZWQ+CisgICAgICAgICAgNiA9PSA2CisgICAgICAgIDwvRXhwYW5kZWQ+CisgICAgICA8L0V4cHJlc3Npb24+CisgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CisgICAgPC9UZXN0Q2FzZT4KKyAgICA8VGVzdENhc2UgbmFtZT0idGhyb3duIHN0ZDo6c3RyaW5ncyBhcmUgdHJhbnNsYXRlZCIgdGFncz0iWyF0aHJvd3NdWy5dW2ZhaWxpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAiID4KKyAgICAgIDxFeGNlcHRpb24gZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIiA+CisgICAgICAgIFdoeSB3b3VsZCB5b3UgdGhyb3cgYSBzdGQ6OnN0cmluZz8KKyAgICAgIDwvRXhjZXB0aW9uPgorICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0iZmFsc2UiLz4KKyAgICA8L1Rlc3RDYXNlPgogICAgIDxUZXN0Q2FzZSBuYW1lPSJ0b1N0cmluZyBvbiBjb25zdCB3Y2hhcl90IGNvbnN0IHBvaW50ZXIgcmV0dXJucyB0aGUgc3RyaW5nIGNvbnRlbnRzIiB0YWdzPSJbdG9TdHJpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CiAgICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJDSEVDSyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CkBAIC04NzUwLDg0ICsxMjY4NSw2IEBACiAgICAgICA8L0V4cHJlc3Npb24+CiAgICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+CiAgICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0idG9TdHJpbmcgc3RyZWFtYWJsZSByYW5nZSIgdGFncz0iW3RvU3RyaW5nXSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcCIgPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoc3RyZWFtYWJsZV9yYW5nZXt9KSA9PSAib3AmbHQ7Jmx0OyhzdHJlYW1hYmxlX3JhbmdlKSIKLSAgICAgICAgPC9PcmlnaW5hbD4KLSAgICAgICAgPEV4cGFuZGVkPgotICAgICAgICAgICJvcCZsdDsmbHQ7KHN0cmVhbWFibGVfcmFuZ2UpIgotPT0KLSJvcCZsdDsmbHQ7KHN0cmVhbWFibGVfcmFuZ2UpIgotICAgICAgICA8L0V4cGFuZGVkPgotICAgICAgPC9FeHByZXNzaW9uPgotICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iUkVRVUlSRSIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcCIgPgotICAgICAgICA8T3JpZ2luYWw+Ci0gICAgICAgICAgOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoc3RyaW5nbWFrZXJfcmFuZ2V7fSkgPT0gInN0cmluZ21ha2VyKHN0cmVhbWFibGVfcmFuZ2UpIgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgInN0cmluZ21ha2VyKHN0cmVhbWFibGVfcmFuZ2UpIgotPT0KLSJzdHJpbmdtYWtlcihzdHJlYW1hYmxlX3JhbmdlKSIKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdXaGljaC50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGp1c3RfcmFuZ2V7fSkgPT0gInsgMSwgMiwgMywgNCB9IgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgInsgMSwgMiwgMywgNCB9IiA9PSAieyAxLCAyLCAzLCA0IH0iCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShkaXNhYmxlZF9yYW5nZXt9KSA9PSAiez99IgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgIns/fSIgPT0gIns/fSIKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJ0b1N0cmluZyggdmVjdG9ycyZsdDtoYXNfbWFrZXI+ICkiIHRhZ3M9Ilt0b1N0cmluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdXaGljaC50ZXN0cy5jcHAiID4KLSAgICAgIDxFeHByZXNzaW9uIHN1Y2Nlc3M9InRydWUiIHR5cGU9IlJFUVVJUkUiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvVG9TdHJpbmdXaGljaC50ZXN0cy5jcHAiID4KLSAgICAgICAgPE9yaWdpbmFsPgotICAgICAgICAgIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCB2ICkgPT0gInsgU3RyaW5nTWFrZXImbHQ7aGFzX21ha2VyPiB9IgotICAgICAgICA8L09yaWdpbmFsPgotICAgICAgICA8RXhwYW5kZWQ+Ci0gICAgICAgICAgInsgU3RyaW5nTWFrZXImbHQ7aGFzX21ha2VyPiB9IgotPT0KLSJ7IFN0cmluZ01ha2VyJmx0O2hhc19tYWtlcj4gfSIKLSAgICAgICAgPC9FeHBhbmRlZD4KLSAgICAgIDwvRXhwcmVzc2lvbj4KLSAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KLSAgICA8L1Rlc3RDYXNlPgotICAgIDxUZXN0Q2FzZSBuYW1lPSJ0b1N0cmluZyggdmVjdG9ycyZsdDtoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiApIiB0YWdzPSJbdG9TdHJpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggdiApID09ICJ7IFN0cmluZ01ha2VyJmx0O2hhc19tYWtlcl9hbmRfb3BlcmF0b3I+IH0iCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAieyBTdHJpbmdNYWtlciZsdDtoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiB9IgotPT0KLSJ7IFN0cmluZ01ha2VyJmx0O2hhc19tYWtlcl9hbmRfb3BlcmF0b3I+IH0iCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KLSAgICA8VGVzdENhc2UgbmFtZT0idG9TdHJpbmcoIHZlY3RvcnMmbHQ7aGFzX29wZXJhdG9yPiApIiB0YWdzPSJbdG9TdHJpbmddIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+Ci0gICAgICA8RXhwcmVzc2lvbiBzdWNjZXNzPSJ0cnVlIiB0eXBlPSJSRVFVSVJFIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwIiA+Ci0gICAgICAgIDxPcmlnaW5hbD4KLSAgICAgICAgICA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggdiApID09ICJ7IG9wZXJhdG9yJmx0OyZsdDsoIGhhc19vcGVyYXRvciApIH0iCi0gICAgICAgIDwvT3JpZ2luYWw+Ci0gICAgICAgIDxFeHBhbmRlZD4KLSAgICAgICAgICAieyBvcGVyYXRvciZsdDsmbHQ7KCBoYXNfb3BlcmF0b3IgKSB9IgotPT0KLSJ7IG9wZXJhdG9yJmx0OyZsdDsoIGhhc19vcGVyYXRvciApIH0iCi0gICAgICAgIDwvRXhwYW5kZWQ+Ci0gICAgICA8L0V4cHJlc3Npb24+Ci0gICAgICA8T3ZlcmFsbFJlc3VsdCBzdWNjZXNzPSJ0cnVlIi8+Ci0gICAgPC9UZXN0Q2FzZT4KICAgICA8VGVzdENhc2UgbmFtZT0idG9TdHJpbmcoZW51bSBjbGFzcyB3L29wZXJhdG9yJmx0OyZsdDspIiB0YWdzPSJbZW51bV1bZW51bUNsYXNzXVt0b1N0cmluZ10iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRW51bVRvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgPEV4cHJlc3Npb24gc3VjY2Vzcz0idHJ1ZSIgdHlwZT0iQ0hFQ0siIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvRW51bVRvU3RyaW5nLnRlc3RzLmNwcCIgPgogICAgICAgICA8T3JpZ2luYWw+CkBAIC05Mjg4LDE1ICsxMzE0NSwxNSBAQAogICAgICAgPE92ZXJhbGxSZXN1bHQgc3VjY2Vzcz0idHJ1ZSIvPgogICAgIDwvVGVzdENhc2U+CiAgICAgPFRlc3RDYXNlIG5hbWU9InhtbGVudGl0eWNoZWNrIiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+Ci0gICAgICA8U2VjdGlvbiBuYW1lPSJlbWJlZGRlZCB4bWwiIGRlc2NyaXB0aW9uPSImbHQ7dGVzdD5pdCBzaG91bGQgYmUgcG9zc2libGUgdG8gZW1iZWQgeG1sIGNoYXJhY3RlcnMsIHN1Y2ggYXMgJmx0OywgJnF1b3Q7IG9yICZhbXA7LCBvciBldmVuIHdob2xlICZsdDt4bWw+ZG9jdW1lbnRzJmx0Oy94bWw+IHdpdGhpbiBhbiBhdHRyaWJ1dGUmbHQ7L3Rlc3Q+IiBmaWxlbmFtZT0icHJvamVjdHMvPGV4ZS1uYW1lPi9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIiA+CisgICAgICA8U2VjdGlvbiBuYW1lPSJlbWJlZGRlZCB4bWw6ICZsdDt0ZXN0Pml0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBlbWJlZCB4bWwgY2hhcmFjdGVycywgc3VjaCBhcyAmbHQ7LCAmcXVvdDsgb3IgJmFtcDssIG9yIGV2ZW4gd2hvbGUgJmx0O3htbD5kb2N1bWVudHMmbHQ7L3htbD4gd2l0aGluIGFuIGF0dHJpYnV0ZSZsdDsvdGVzdD4iIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KLSAgICAgIDxTZWN0aW9uIG5hbWU9ImVuY29kZWQgY2hhcnMiIGRlc2NyaXB0aW9uPSJ0aGVzZSBzaG91bGQgYWxsIGJlIGVuY29kZWQ6ICZhbXA7JmFtcDsmYW1wOyZxdW90OyZxdW90OyZxdW90OyZsdDsmbHQ7Jmx0OyZhbXA7JnF1b3Q7Jmx0OyZsdDsmYW1wOyZxdW90OyIgZmlsZW5hbWU9InByb2plY3RzLzxleGUtbmFtZT4vVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcCIgPgorICAgICAgPFNlY3Rpb24gbmFtZT0iZW5jb2RlZCBjaGFyczogdGhlc2Ugc2hvdWxkIGFsbCBiZSBlbmNvZGVkOiAmYW1wOyZhbXA7JmFtcDsmcXVvdDsmcXVvdDsmcXVvdDsmbHQ7Jmx0OyZsdDsmYW1wOyZxdW90OyZsdDsmbHQ7JmFtcDsmcXVvdDsiIGZpbGVuYW1lPSJwcm9qZWN0cy88ZXhlLW5hbWU+L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAiID4KICAgICAgICAgPE92ZXJhbGxSZXN1bHRzIHN1Y2Nlc3Nlcz0iMSIgZmFpbHVyZXM9IjAiIGV4cGVjdGVkRmFpbHVyZXM9IjAiLz4KICAgICAgIDwvU2VjdGlvbj4KICAgICAgIDxPdmVyYWxsUmVzdWx0IHN1Y2Nlc3M9InRydWUiLz4KICAgICA8L1Rlc3RDYXNlPgotICAgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9Ijg2NiIgZmFpbHVyZXM9IjEyMSIgZXhwZWN0ZWRGYWlsdXJlcz0iMjEiLz4KKyAgICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSIxMjUwIiBmYWlsdXJlcz0iMTM5IiBleHBlY3RlZEZhaWx1cmVzPSIyMSIvPgogICA8L0dyb3VwPgotICA8T3ZlcmFsbFJlc3VsdHMgc3VjY2Vzc2VzPSI4NjYiIGZhaWx1cmVzPSIxMjAiIGV4cGVjdGVkRmFpbHVyZXM9IjIxIi8+CisgIDxPdmVyYWxsUmVzdWx0cyBzdWNjZXNzZXM9IjEyNTAiIGZhaWx1cmVzPSIxMzgiIGV4cGVjdGVkRmFpbHVyZXM9IjIxIi8+CiA8L0NhdGNoPgpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL0NtZExpbmUudGVzdHMuY3BwCmluZGV4IGEwNzM1ODUuLjliNWIwZWQgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9DbWRMaW5lLnRlc3RzLmNwcAorKysgYi9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvQ21kTGluZS50ZXN0cy5jcHAKQEAgLTE1LDcgKzE1LDcgQEAKICMgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2MrKzk4LWNvbXBhdCIKICNlbmRpZgogCi1pbmxpbmUgQ2F0Y2g6OlRlc3RDYXNlIGZha2VUZXN0Q2FzZSggY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogZGVzYyA9ICIiICl7IHJldHVybiBDYXRjaDo6bWFrZVRlc3RDYXNlKCBudWxscHRyLCAiIiwgbmFtZSwgZGVzYywgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8gKTsgfQoraW5saW5lIENhdGNoOjpUZXN0Q2FzZSBmYWtlVGVzdENhc2UoY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogZGVzYyA9ICIiKSB7IHJldHVybiBDYXRjaDo6bWFrZVRlc3RDYXNlKG51bGxwdHIsICIiLCB7IG5hbWUsIGRlc2MgfSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8pOyB9CiAKIFRFU1RfQ0FTRSggIlBhcnNlIHRlc3QgbmFtZXMgYW5kIHRhZ3MiICkgewogCkBAIC0yODAsNyArMjgwLDYgQEAKICAgICAgICAgQ0hFQ0soY29uZmlnLnByb2Nlc3NOYW1lID09ICIiKTsKICAgICB9CiAKLQogICAgIFNFQ1RJT04oImRlZmF1bHQgLSBubyBhcmd1bWVudHMiKSB7CiAgICAgICAgIGF1dG8gcmVzdWx0ID0gY2xpLnBhcnNlKHsidGVzdCJ9KTsKICAgICAgICAgQ0hFQ0socmVzdWx0KTsKQEAgLTI4OCwxNSArMjg3LDE5IEBACiAgICAgICAgIENIRUNLKGNvbmZpZy5zaG91bGREZWJ1Z0JyZWFrID09IGZhbHNlKTsKICAgICAgICAgQ0hFQ0soY29uZmlnLmFib3J0QWZ0ZXIgPT0gLTEpOwogICAgICAgICBDSEVDSyhjb25maWcubm9UaHJvdyA9PSBmYWxzZSk7Ci0gICAgICAgIENIRUNLKGNvbmZpZy5yZXBvcnRlck5hbWVzLmVtcHR5KCkpOworICAgICAgICBDSEVDSyhjb25maWcucmVwb3J0ZXJOYW1lID09ICJjb25zb2xlIik7CisKKyAgICAgICAgQ2F0Y2g6OkNvbmZpZyBjZmcoY29uZmlnKTsKKyAgICAgICAgQ0hFQ0tfRkFMU0UoY2ZnLmhhc1Rlc3RGaWx0ZXJzKCkpOwogICAgIH0KIAogICAgIFNFQ1RJT04oInRlc3QgbGlzdHMiKSB7Ci0gICAgICAgIFNFQ1RJT04oIjEgdGVzdCIsICJTcGVjaWZ5IG9uZSB0ZXN0IGNhc2UgdXNpbmciKSB7CisgICAgICAgIFNFQ1RJT04oIlNwZWNpZnkgb25lIHRlc3QgY2FzZSB1c2luZyIpIHsKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY2xpLnBhcnNlKHsidGVzdCIsICJ0ZXN0MSJ9KTsKICAgICAgICAgICAgIENIRUNLKHJlc3VsdCk7CiAKICAgICAgICAgICAgIENhdGNoOjpDb25maWcgY2ZnKGNvbmZpZyk7CisgICAgICAgICAgICBSRVFVSVJFKGNmZy5oYXNUZXN0RmlsdGVycygpKTsKICAgICAgICAgICAgIFJFUVVJUkUoY2ZnLnRlc3RTcGVjKCkubWF0Y2hlcyhmYWtlVGVzdENhc2UoIm5vdEluY2x1ZGVkIikpID09IGZhbHNlKTsKICAgICAgICAgICAgIFJFUVVJUkUoY2ZnLnRlc3RTcGVjKCkubWF0Y2hlcyhmYWtlVGVzdENhc2UoInRlc3QxIikpKTsKICAgICAgICAgfQpAQCAtMzA1LDYgKzMwOCw3IEBACiAgICAgICAgICAgICBDSEVDSyhyZXN1bHQpOwogCiAgICAgICAgICAgICBDYXRjaDo6Q29uZmlnIGNmZyhjb25maWcpOworICAgICAgICAgICAgUkVRVUlSRShjZmcuaGFzVGVzdEZpbHRlcnMoKSk7CiAgICAgICAgICAgICBSRVFVSVJFKGNmZy50ZXN0U3BlYygpLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJ0ZXN0MSIpKSA9PSBmYWxzZSk7CiAgICAgICAgICAgICBSRVFVSVJFKGNmZy50ZXN0U3BlYygpLm1hdGNoZXMoZmFrZVRlc3RDYXNlKCJhbHdheXNJbmNsdWRlZCIpKSk7CiAgICAgICAgIH0KQEAgLTMxNCw2ICszMTgsNyBAQAogICAgICAgICAgICAgQ0hFQ0socmVzdWx0KTsKIAogICAgICAgICAgICAgQ2F0Y2g6OkNvbmZpZyBjZmcoY29uZmlnKTsKKyAgICAgICAgICAgIFJFUVVJUkUoY2ZnLmhhc1Rlc3RGaWx0ZXJzKCkpOwogICAgICAgICAgICAgUkVRVUlSRShjZmcudGVzdFNwZWMoKS5tYXRjaGVzKGZha2VUZXN0Q2FzZSgidGVzdDEiKSkgPT0gZmFsc2UpOwogICAgICAgICAgICAgUkVRVUlSRShjZmcudGVzdFNwZWMoKS5tYXRjaGVzKGZha2VUZXN0Q2FzZSgiYWx3YXlzSW5jbHVkZWQiKSkpOwogICAgICAgICB9CkBAIC0zMjQsMjggKzMyOSwzMSBAQAogICAgICAgICBTRUNUSU9OKCItci9jb25zb2xlIikgewogICAgICAgICAgICAgQ0hFQ0soY2xpLnBhcnNlKHsidGVzdCIsICItciIsICJjb25zb2xlIn0pKTsKIAotICAgICAgICAgICAgUkVRVUlSRShjb25maWcucmVwb3J0ZXJOYW1lc1swXSA9PSAiY29uc29sZSIpOworICAgICAgICAgICAgUkVRVUlSRShjb25maWcucmVwb3J0ZXJOYW1lID09ICJjb25zb2xlIik7CiAgICAgICAgIH0KICAgICAgICAgU0VDVElPTigiLXIveG1sIikgewogICAgICAgICAgICAgQ0hFQ0soY2xpLnBhcnNlKHsidGVzdCIsICItciIsICJ4bWwifSkpOwogCi0gICAgICAgICAgICBSRVFVSVJFKGNvbmZpZy5yZXBvcnRlck5hbWVzWzBdID09ICJ4bWwiKTsKLSAgICAgICAgfQotICAgICAgICBTRUNUSU9OKCItciB4bWwgYW5kIGp1bml0IikgewotICAgICAgICAgICAgQ0hFQ0soY2xpLnBhcnNlKHsidGVzdCIsICItciIsICJ4bWwiLCAiLXIiLCAianVuaXQifSkpOwotCi0gICAgICAgICAgICBSRVFVSVJFKGNvbmZpZy5yZXBvcnRlck5hbWVzLnNpemUoKSA9PSAyKTsKLSAgICAgICAgICAgIFJFUVVJUkUoY29uZmlnLnJlcG9ydGVyTmFtZXNbMF0gPT0gInhtbCIpOwotICAgICAgICAgICAgUkVRVUlSRShjb25maWcucmVwb3J0ZXJOYW1lc1sxXSA9PSAianVuaXQiKTsKKyAgICAgICAgICAgIFJFUVVJUkUoY29uZmlnLnJlcG9ydGVyTmFtZSA9PSAieG1sIik7CiAgICAgICAgIH0KICAgICAgICAgU0VDVElPTigiLS1yZXBvcnRlci9qdW5pdCIpIHsKICAgICAgICAgICAgIENIRUNLKGNsaS5wYXJzZSh7InRlc3QiLCAiLS1yZXBvcnRlciIsICJqdW5pdCJ9KSk7CiAKLSAgICAgICAgICAgIFJFUVVJUkUoY29uZmlnLnJlcG9ydGVyTmFtZXNbMF0gPT0gImp1bml0Iik7CisgICAgICAgICAgICBSRVFVSVJFKGNvbmZpZy5yZXBvcnRlck5hbWUgPT0gImp1bml0Iik7CisgICAgICAgIH0KKyAgICAgICAgU0VDVElPTigiT25seSBvbmUgcmVwb3J0ZXIgaXMgYWNjZXB0ZWQiKSB7CisgICAgICAgICAgICBSRVFVSVJFX0ZBTFNFKGNsaS5wYXJzZSh7ICJ0ZXN0IiwgIi1yIiwgInhtbCIsICItciIsICJqdW5pdCIgfSkpOworICAgICAgICB9CisgICAgICAgIFNFQ1RJT04oIm11c3QgbWF0Y2ggb25lIG9mIHRoZSBhdmFpbGFibGUgb25lcyIpIHsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gY2xpLnBhcnNlKHsidGVzdCIsICItLXJlcG9ydGVyIiwgInVuc3VwcG9ydGVkIn0pOworICAgICAgICAgICAgQ0hFQ0soIXJlc3VsdCk7CisKKyNpZm5kZWYgQ0FUQ0hfQ09ORklHX0RJU0FCTEVfTUFUQ0hFUlMKKyAgICAgICAgICAgIFJFUVVJUkVfVEhBVChyZXN1bHQuZXJyb3JNZXNzYWdlKCksIENvbnRhaW5zKCJVbnJlY29nbml6ZWQgcmVwb3J0ZXIiKSk7CisjZW5kaWYKICAgICAgICAgfQogICAgIH0KIAotCiAgICAgU0VDVElPTigiZGVidWdnZXIiKSB7CiAgICAgICAgIFNFQ1RJT04oIi1iIikgewogICAgICAgICAgICAgQ0hFQ0soY2xpLnBhcnNlKHsidGVzdCIsICItYiJ9KSk7CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvR2VuZXJhdG9yc0ltcGwudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZThiMGZmCi0tLSAvZGV2L251bGwKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL0dlbmVyYXRvcnNJbXBsLnRlc3RzLmNwcApAQCAtMCwwICsxLDIwOSBAQAorI2luY2x1ZGUgImNhdGNoLmhwcCIKKworLy8gVGVzdHMgb2YgZ2VuZXJhdG9yIGltcGxlbWVudGF0aW9uIGRldGFpbHMKK1RFU1RfQ0FTRSgiR2VuZXJhdG9ycyBpbnRlcm5hbHMiLCAiW2dlbmVyYXRvcnNdW2ludGVybmFsc10iKSB7CisgICAgdXNpbmcgbmFtZXNwYWNlIENhdGNoOjpHZW5lcmF0b3JzOworCisgICAgU0VDVElPTigiU2luZ2xlIHZhbHVlIikgeworICAgICAgICBhdXRvIGdlbiA9IHZhbHVlKDEyMyk7CisgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDEyMyk7CisgICAgICAgIFJFUVVJUkVfRkFMU0UoZ2VuLm5leHQoKSk7CisgICAgfQorICAgIFNFQ1RJT04oIlByZXNldCB2YWx1ZXMiKSB7CisgICAgICAgIGF1dG8gZ2VuID0gdmFsdWVzKHsgMSwgMywgNSB9KTsKKyAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gMSk7CisgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDMpOworICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOworICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSA1KTsKKyAgICAgICAgUkVRVUlSRV9GQUxTRShnZW4ubmV4dCgpKTsKKyAgICB9CisgICAgU0VDVElPTigiR2VuZXJhdG9yIGNvbWJpbmF0b3IiKSB7CisgICAgICAgIGF1dG8gZ2VuID0gbWFrZUdlbmVyYXRvcnMoMSwgNSwgdmFsdWVzKHsgMiwgNCB9KSwgMCk7CisgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDEpOworICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOworICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSA1KTsKKyAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gMik7CisgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDQpOworICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOworICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAwKTsKKyAgICAgICAgUkVRVUlSRV9GQUxTRShnZW4ubmV4dCgpKTsKKyAgICB9CisgICAgU0VDVElPTigiRXhwbGljaXRseSB0eXBlZCBnZW5lcmF0b3Igc2VxdWVuY2UiKSB7CisgICAgICAgIGF1dG8gZ2VuID0gbWFrZUdlbmVyYXRvcnMoYXM8c3RkOjpzdHJpbmc+e30sICJhYSIsICJiYiIsICJjYyIpOworICAgICAgICAvLyBUaGlzIGp1c3QgY2hlY2tzIHRoYXQgdGhlIHR5cGUgaXMgc3RkOjpzdHJpbmc6CisgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpLnNpemUoKSA9PSAyKTsKKyAgICAgICAgLy8gSXRlcmF0ZSBvdmVyIHRoZSBnZW5lcmF0b3IKKyAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gImFhIik7CisgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09ICJiYiIpOworICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOworICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAiY2MiKTsKKyAgICAgICAgUkVRVUlSRV9GQUxTRShnZW4ubmV4dCgpKTsKKyAgICB9CisgICAgU0VDVElPTigiRmlsdGVyIGdlbmVyYXRvciIpIHsKKyAgICAgICAgLy8gTm9ybWFsIHVzYWdlCisgICAgICAgIGF1dG8gZ2VuID0gZmlsdGVyKFtdIChpbnQgaSkgeyByZXR1cm4gaSAhPSAyOyB9LCB2YWx1ZXMoeyAyLCAxLCAyLCAzLCAyLCAyIH0pKTsKKyAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gMSk7CisgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDMpOworICAgICAgICBSRVFVSVJFX0ZBTFNFKGdlbi5uZXh0KCkpOworCisgICAgICAgIC8vIENvbXBsZXRlbHkgZmlsdGVyZWQtb3V0IGdlbmVyYXRvciBzaG91bGQgdGhyb3cgb24gY29uc3RydWN0aW9uCisgICAgICAgIFJFUVVJUkVfVEhST1dTX0FTKGZpbHRlcihbXSAoaW50KSB7IHJldHVybiBmYWxzZTsgfSwgdmFsdWUoMSkpLCBDYXRjaDo6R2VuZXJhdG9yRXhjZXB0aW9uKTsKKyAgICB9CisgICAgU0VDVElPTigiVGFrZSBnZW5lcmF0b3IiKSB7CisgICAgICAgIFNFQ1RJT04oIlRha2UgbGVzcyIpIHsKKyAgICAgICAgICAgIGF1dG8gZ2VuID0gdGFrZSgyLCB2YWx1ZXMoeyAxLCAyLCAzIH0pKTsKKyAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDEpOworICAgICAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDIpOworICAgICAgICAgICAgUkVRVUlSRV9GQUxTRShnZW4ubmV4dCgpKTsKKyAgICAgICAgfQorICAgICAgICBTRUNUSU9OKCJUYWtlIG1vcmUiKSB7CisgICAgICAgICAgICBhdXRvIGdlbiA9IHRha2UoMiwgdmFsdWUoMSkpOworICAgICAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gMSk7CisgICAgICAgICAgICBSRVFVSVJFX0ZBTFNFKGdlbi5uZXh0KCkpOworICAgICAgICB9CisgICAgfQorICAgIFNFQ1RJT04oIk1hcCIpIHsKKyAgICAgICAgYXV0byBnZW4gPSBtYXA8ZG91YmxlPihbXSAoaW50IGkpIHtyZXR1cm4gMi4wICogaTsgfSwgdmFsdWVzKHsgMSwgMiwgMyB9KSk7CisgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDIuMCk7CisgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDQuMCk7CisgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDYuMCk7CisgICAgICAgIFJFUVVJUkVfRkFMU0UoZ2VuLm5leHQoKSk7CisgICAgfQorICAgIFNFQ1RJT04oIlJlcGVhdCIpIHsKKyAgICAgICAgU0VDVElPTigiU2luZ3VsYXIgcmVwZWF0IikgeworICAgICAgICAgICAgYXV0byBnZW4gPSByZXBlYXQoMSwgdmFsdWUoMykpOworICAgICAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gMyk7CisgICAgICAgICAgICBSRVFVSVJFX0ZBTFNFKGdlbi5uZXh0KCkpOworICAgICAgICB9CisgICAgICAgIFNFQ1RJT04oIkFjdHVhbCByZXBlYXQiKSB7CisgICAgICAgICAgICBhdXRvIGdlbiA9IHJlcGVhdCgyLCB2YWx1ZXMoeyAxLCAyLCAzIH0pKTsKKyAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDEpOworICAgICAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDIpOworICAgICAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDMpOworICAgICAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDEpOworICAgICAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDIpOworICAgICAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDMpOworICAgICAgICAgICAgUkVRVUlSRV9GQUxTRShnZW4ubmV4dCgpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBTRUNUSU9OKCJSYW5nZSIpIHsKKyAgICAgICAgU0VDVElPTigiUG9zaXRpdmUgYXV0byBzdGVwIikgeworICAgICAgICAgICAgU0VDVElPTigiSW50ZWdlciIpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGdlbiA9IHJhbmdlKC0yLCAyKTsKKyAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAtMik7CisgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAtMSk7CisgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAwKTsKKyAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOworICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDEpOworICAgICAgICAgICAgICAgIFJFUVVJUkVfRkFMU0UoZ2VuLm5leHQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgU0VDVElPTigiTmVnYXRpdmUgYXV0byBzdGVwIikgeworICAgICAgICAgICAgU0VDVElPTigiSW50ZWdlciIpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGdlbiA9IHJhbmdlKDIsIC0yKTsKKyAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAyKTsKKyAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOworICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDEpOworICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gMCk7CisgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAtMSk7CisgICAgICAgICAgICAgICAgUkVRVUlSRV9GQUxTRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBTRUNUSU9OKCJQb3NpdGl2ZSBtYW51YWwgc3RlcCIpIHsKKyAgICAgICAgICAgIFNFQ1RJT04oIkludGVnZXIiKSB7CisgICAgICAgICAgICAgICAgU0VDVElPTigiRXhhY3QiKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZ2VuID0gcmFuZ2UoLTcsIDUsIDMpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAtNyk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IC00KTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gLTEpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAyKTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRV9GQUxTRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU0VDVElPTigiU2xpZ2h0bHkgb3ZlciBlbmQiKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZ2VuID0gcmFuZ2UoLTcsIDQsIDMpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAtNyk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IC00KTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gLTEpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAyKTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRV9GQUxTRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU0VDVElPTigiU2xpZ2h0bHkgdW5kZXIgZW5kIikgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGdlbiA9IHJhbmdlKC03LCA2LCAzKTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gLTcpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAtNCk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IC0xKTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gMik7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDUpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFX0ZBTFNFKGdlbi5uZXh0KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBTRUNUSU9OKCJOZWdhdGl2ZSBtYW51YWwgc3RlcCIpIHsKKyAgICAgICAgICAgIFNFQ1RJT04oIkludGVnZXIiKSB7CisgICAgICAgICAgICAgICAgU0VDVElPTigiRXhhY3QiKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZ2VuID0gcmFuZ2UoNSwgLTcsIC0zKTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gNSk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDIpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAtMSk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IC00KTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRV9GQUxTRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU0VDVElPTigiU2xpZ2h0bHkgb3ZlciBlbmQiKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8gZ2VuID0gcmFuZ2UoNSwgLTYsIC0zKTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gNSk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDIpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAtMSk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IC00KTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRV9GQUxTRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU0VDVElPTigiU2xpZ2h0bHkgdW5kZXIgZW5kIikgeworICAgICAgICAgICAgICAgICAgICBhdXRvIGdlbiA9IHJhbmdlKDUsIC04LCAtMyk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IDUpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAyKTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRShnZW4uZ2V0KCkgPT0gLTEpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5uZXh0KCkpOworICAgICAgICAgICAgICAgICAgICBSRVFVSVJFKGdlbi5nZXQoKSA9PSAtNCk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLm5leHQoKSk7CisgICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoZ2VuLmdldCgpID09IC03KTsKKyAgICAgICAgICAgICAgICAgICAgUkVRVUlSRV9GQUxTRShnZW4ubmV4dCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK30KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvUGFydFRyYWNrZXIudGVzdHMuY3BwCmluZGV4IDA0MmMwM2EuLjkzNzJiMWMgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9QYXJ0VHJhY2tlci50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL1BhcnRUcmFja2VyLnRlc3RzLmNwcApAQCAtMjEsMjQgKzIxLDE3IEBACiAKIH0gLy8gbmFtZXNwYWNlIENhdGNoCiAKLWlubGluZSBDYXRjaDo6VHJhY2tlckNvbnRleHQmIENfQV9UX0NfSF9Db250ZXh0KCkgewotICAgIHJldHVybiBDYXRjaDo6VHJhY2tlckNvbnRleHQ6Omluc3RhbmNlKCk7Ci19Ci0KIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0KIAogI2luY2x1ZGUgImNhdGNoLmhwcCIKIAogdXNpbmcgbmFtZXNwYWNlIENhdGNoOwogCi0vL2lubGluZSB2b2lkIHRlc3RDYXNlKCBDYXRjaDo6TG9jYWxDb250ZXh0IGNvbnN0JiBDX0FfVF9DX0hfQ29udGV4dCApIHsKLS8vCi0vLyAgICBSRVFVSVJFKCBDX0FfVF9DX0hfQ29udGV4dCgpLmkoKSA9PSA0MiApOwotLy99Ci0KK25hbWVzcGFjZSB7CiBDYXRjaDo6VGVzdENhc2VUcmFja2luZzo6TmFtZUFuZExvY2F0aW9uIG1ha2VOQUwoIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lICkgewogICAgIHJldHVybiBDYXRjaDo6VGVzdENhc2VUcmFja2luZzo6TmFtZUFuZExvY2F0aW9uKCBuYW1lLCBDYXRjaDo6U291cmNlTGluZUluZm8oIiIsMCkgKTsKIH0KK30KIAogVEVTVF9DQVNFKCAiVHJhY2tlciIgKSB7CiAKQEAgLTE4MCwxNTQgKzE3MywzNCBAQAogICAgICAgICB0ZXN0Q2FzZS5jbG9zZSgpOwogICAgICAgICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc0NvbXBsZXRlKCkgKTsKICAgICB9Cit9CiAKLSAgICBTRUNUSU9OKCAic3RhcnQgYSBnZW5lcmF0b3IiICkgewotICAgICAgICBJbmRleFRyYWNrZXImIGcxID0gSW5kZXhUcmFja2VyOjphY3F1aXJlKCBjdHgsIG1ha2VOQUwoICJHMSIgKSwgMiApOwotICAgICAgICBSRVFVSVJFKCBnMS5pc09wZW4oKSApOwotICAgICAgICBSRVFVSVJFKCBnMS5pbmRleCgpID09IDAgKTsKK3N0YXRpYyBib29sIHByZXZpb3VzbHlSdW4gPSBmYWxzZTsKK3N0YXRpYyBib29sIHByZXZpb3VzbHlSdW5OZXN0ZWQgPSBmYWxzZTsKIAotICAgICAgICBSRVFVSVJFKCBnMS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKTsKLSAgICAgICAgUkVRVUlSRSggczEuaXNDb21wbGV0ZSgpID09IGZhbHNlICk7CitURVNUX0NBU0UoICIjMTM5NCIsICJbLl1bYXBwcm92YWxzXVt0cmFja2VyXSIgKSB7CisgICAgLy8gLS0gRG9uJ3QgcmUtcnVuIGFmdGVyIHNwZWNpZmllZCBzZWN0aW9uIGlzIGRvbmUKKyAgICBSRVFVSVJFKHByZXZpb3VzbHlSdW4gPT0gZmFsc2UpOwogCi0gICAgICAgIFNFQ1RJT04oICJjbG9zZSBvdXRlciBzZWN0aW9uIiApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHMxLmNsb3NlKCk7Ci0gICAgICAgICAgICBSRVFVSVJFKCBzMS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKTsKLSAgICAgICAgICAgIHRlc3RDYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc1N1Y2Nlc3NmdWxseUNvbXBsZXRlZCgpID09IGZhbHNlICk7CisgICAgU0VDVElPTiggIlJ1blNlY3Rpb24iICkgeworICAgICAgICBwcmV2aW91c2x5UnVuID0gdHJ1ZTsKKyAgICB9CisgICAgU0VDVElPTiggIlNraXBTZWN0aW9uIiApIHsKKyAgICAgICAgLy8gY2F1c2UgYW4gZXJyb3IgaWYgdGhpcyBzZWN0aW9uIGlzIGNhbGxlZCBiZWNhdXNlIGl0IHNob3VsZG4ndCBiZQorICAgICAgICBSRVFVSVJFKDEgPT0gMCk7CisgICAgfQorfQogCi0gICAgICAgICAgICBTRUNUSU9OKCAiUmUtZW50ZXIgZm9yIHNlY29uZCBnZW5lcmF0aW9uIiApIHsKLSAgICAgICAgICAgICAgICBjdHguc3RhcnRDeWNsZSgpOwotICAgICAgICAgICAgICAgIElUcmFja2VyJiB0ZXN0Q2FzZTIgPSBTZWN0aW9uVHJhY2tlcjo6YWNxdWlyZSggY3R4LCBtYWtlTkFMKCAiVGVzdGNhc2UiICkgKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFKCB0ZXN0Q2FzZTIuaXNPcGVuKCkgKTsKK1RFU1RfQ0FTRSggIiMxMzk0IG5lc3RlZCIsICJbLl1bYXBwcm92YWxzXVt0cmFja2VyXSIgKSB7CisgICAgUkVRVUlSRShwcmV2aW91c2x5UnVuTmVzdGVkID09IGZhbHNlKTsKIAotICAgICAgICAgICAgICAgIElUcmFja2VyJiBzMWIgPSBTZWN0aW9uVHJhY2tlcjo6YWNxdWlyZSggY3R4LCBtYWtlTkFMKCAiUzEiICkgKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFKCBzMWIuaXNPcGVuKCkgKTsKLQotCi0gICAgICAgICAgICAgICAgSW5kZXhUcmFja2VyJiBnMWIgPSBJbmRleFRyYWNrZXI6OmFjcXVpcmUoIGN0eCwgbWFrZU5BTCggIkcxIiApLCAyICk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggZzFiLmlzT3BlbigpICk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggZzFiLmluZGV4KCkgPT0gMSApOwotCi0gICAgICAgICAgICAgICAgUkVRVUlSRSggczEuaXNDb21wbGV0ZSgpID09IGZhbHNlICk7Ci0KLSAgICAgICAgICAgICAgICBzMWIuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFKCBzMWIuaXNDb21wbGV0ZSgpICk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggZzFiLmlzQ29tcGxldGUoKSApOwotICAgICAgICAgICAgICAgIHRlc3RDYXNlMi5jbG9zZSgpOwotICAgICAgICAgICAgICAgIFJFUVVJUkUoIHRlc3RDYXNlMi5pc0NvbXBsZXRlKCkgKTsKLSAgICAgICAgICAgIH0KKyAgICBTRUNUSU9OKCAiTmVzdGVkUnVuU2VjdGlvbiIgKSB7CisgICAgICAgIFNFQ1RJT04oICJzMSIgKSB7CisgICAgICAgICAgICBwcmV2aW91c2x5UnVuTmVzdGVkID0gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBTRUNUSU9OKCAiU3RhcnQgYSBuZXcgaW5uZXIgc2VjdGlvbiIgKSB7Ci0gICAgICAgICAgICBJVHJhY2tlciYgczIgPSBTZWN0aW9uVHJhY2tlcjo6YWNxdWlyZSggY3R4LCBtYWtlTkFMKCAiUzIiICkgKTsKLSAgICAgICAgICAgIFJFUVVJUkUoIHMyLmlzT3BlbigpICk7Ci0KLSAgICAgICAgICAgIHMyLmNsb3NlKCk7Ci0gICAgICAgICAgICBSRVFVSVJFKCBzMi5pc0NvbXBsZXRlKCkgKTsKLQotICAgICAgICAgICAgczEuY2xvc2UoKTsKLSAgICAgICAgICAgIFJFUVVJUkUoIHMxLmlzQ29tcGxldGUoKSA9PSBmYWxzZSApOwotCi0gICAgICAgICAgICB0ZXN0Q2FzZS5jbG9zZSgpOwotICAgICAgICAgICAgUkVRVUlSRSggdGVzdENhc2UuaXNDb21wbGV0ZSgpID09IGZhbHNlICk7Ci0KLSAgICAgICAgICAgIFNFQ1RJT04oICJSZS1lbnRlciBmb3Igc2Vjb25kIGdlbmVyYXRpb24iICkgewotICAgICAgICAgICAgICAgIGN0eC5zdGFydEN5Y2xlKCk7Ci0gICAgICAgICAgICAgICAgSVRyYWNrZXImIHRlc3RDYXNlMiA9IFNlY3Rpb25UcmFja2VyOjphY3F1aXJlKCBjdHgsIG1ha2VOQUwoICJUZXN0Y2FzZSIgKSApOwotICAgICAgICAgICAgICAgIFJFUVVJUkUoIHRlc3RDYXNlMi5pc09wZW4oKSApOwotCi0gICAgICAgICAgICAgICAgSVRyYWNrZXImIHMxYiA9IFNlY3Rpb25UcmFja2VyOjphY3F1aXJlKCBjdHgsIG1ha2VOQUwoICJTMSIgKSApOwotICAgICAgICAgICAgICAgIFJFUVVJUkUoIHMxYi5pc09wZW4oKSApOwotCi0gICAgICAgICAgICAgICAgLy8gZ2VuZXJhdG9yIC0gbmV4dCB2YWx1ZQotICAgICAgICAgICAgICAgIEluZGV4VHJhY2tlciYgZzFiID0gSW5kZXhUcmFja2VyOjphY3F1aXJlKCBjdHgsIG1ha2VOQUwoICJHMSIgKSwgMiApOwotICAgICAgICAgICAgICAgIFJFUVVJUkUoIGcxYi5pc09wZW4oKSApOwotICAgICAgICAgICAgICAgIFJFUVVJUkUoIGcxYi5pbmRleCgpID09IDEgKTsKLQotICAgICAgICAgICAgICAgIC8vIGlubmVyIHNlY3Rpb24gYWdhaW4KLSAgICAgICAgICAgICAgICBJVHJhY2tlciYgczJiID0gU2VjdGlvblRyYWNrZXI6OmFjcXVpcmUoIGN0eCwgbWFrZU5BTCggIlMyIiApICk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggczJiLmlzT3BlbigpICk7Ci0KLSAgICAgICAgICAgICAgICBzMmIuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFKCBzMmIuaXNDb21wbGV0ZSgpICk7Ci0KLSAgICAgICAgICAgICAgICBzMWIuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFKCBnMWIuaXNDb21wbGV0ZSgpICk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggczFiLmlzQ29tcGxldGUoKSApOwotCi0gICAgICAgICAgICAgICAgdGVzdENhc2UyLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggdGVzdENhc2UyLmlzQ29tcGxldGUoKSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgU0VDVElPTiggIkZhaWwgYW4gaW5uZXIgc2VjdGlvbiIgKSB7Ci0gICAgICAgICAgICBJVHJhY2tlciYgczIgPSBTZWN0aW9uVHJhY2tlcjo6YWNxdWlyZSggY3R4LCBtYWtlTkFMKCAiUzIiICkgKTsKLSAgICAgICAgICAgIFJFUVVJUkUoIHMyLmlzT3BlbigpICk7Ci0KLSAgICAgICAgICAgIHMyLmZhaWwoKTsKLSAgICAgICAgICAgIFJFUVVJUkUoIHMyLmlzQ29tcGxldGUoKSApOwotICAgICAgICAgICAgUkVRVUlSRSggczIuaXNTdWNjZXNzZnVsbHlDb21wbGV0ZWQoKSA9PSBmYWxzZSApOwotCi0gICAgICAgICAgICBzMS5jbG9zZSgpOwotICAgICAgICAgICAgUkVRVUlSRSggczEuaXNDb21wbGV0ZSgpID09IGZhbHNlICk7Ci0KLSAgICAgICAgICAgIHRlc3RDYXNlLmNsb3NlKCk7Ci0gICAgICAgICAgICBSRVFVSVJFKCB0ZXN0Q2FzZS5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKTsKLQotICAgICAgICAgICAgU0VDVElPTiggIlJlLWVudGVyIGZvciBzZWNvbmQgZ2VuZXJhdGlvbiIgKSB7Ci0gICAgICAgICAgICAgICAgY3R4LnN0YXJ0Q3ljbGUoKTsKLSAgICAgICAgICAgICAgICBJVHJhY2tlciYgdGVzdENhc2UyID0gU2VjdGlvblRyYWNrZXI6OmFjcXVpcmUoIGN0eCwgbWFrZU5BTCggIlRlc3RjYXNlIiApICk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggdGVzdENhc2UyLmlzT3BlbigpICk7Ci0KLSAgICAgICAgICAgICAgICBJVHJhY2tlciYgczFiID0gU2VjdGlvblRyYWNrZXI6OmFjcXVpcmUoIGN0eCwgbWFrZU5BTCggIlMxIiApICk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggczFiLmlzT3BlbigpICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBnZW5lcmF0b3IgLSBzdGlsbCBzYW1lIHZhbHVlCi0gICAgICAgICAgICAgICAgSW5kZXhUcmFja2VyJiBnMWIgPSBJbmRleFRyYWNrZXI6OmFjcXVpcmUoIGN0eCwgbWFrZU5BTCggIkcxIiApLCAyICk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggZzFiLmlzT3BlbigpICk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggZzFiLmluZGV4KCkgPT0gMCApOwotCi0gICAgICAgICAgICAgICAgLy8gaW5uZXIgc2VjdGlvbiBhZ2FpbiAtIHRoaXMgdGltZSB3b24ndCBvcGVuCi0gICAgICAgICAgICAgICAgSVRyYWNrZXImIHMyYiA9IFNlY3Rpb25UcmFja2VyOjphY3F1aXJlKCBjdHgsIG1ha2VOQUwoICJTMiIgKSApOwotICAgICAgICAgICAgICAgIFJFUVVJUkUoIHMyYi5pc09wZW4oKSA9PSBmYWxzZSApOwotCi0gICAgICAgICAgICAgICAgczFiLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggZzFiLmlzQ29tcGxldGUoKSA9PSBmYWxzZSApOwotICAgICAgICAgICAgICAgIFJFUVVJUkUoIHMxYi5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKTsKLQotICAgICAgICAgICAgICAgIHRlc3RDYXNlMi5jbG9zZSgpOwotICAgICAgICAgICAgICAgIFJFUVVJUkUoIHRlc3RDYXNlMi5pc0NvbXBsZXRlKCkgPT0gZmFsc2UgKTsKLQotICAgICAgICAgICAgICAgIC8vIEFub3RoZXIgY3ljbGUgLSBub3cgc2hvdWxkIGNvbXBsZXRlCi0gICAgICAgICAgICAgICAgY3R4LnN0YXJ0Q3ljbGUoKTsKLSAgICAgICAgICAgICAgICBJVHJhY2tlciYgdGVzdENhc2UzID0gU2VjdGlvblRyYWNrZXI6OmFjcXVpcmUoIGN0eCwgbWFrZU5BTCggIlRlc3RjYXNlIiApICk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggdGVzdENhc2UzLmlzT3BlbigpICk7Ci0KLSAgICAgICAgICAgICAgICBJVHJhY2tlciYgczFjID0gU2VjdGlvblRyYWNrZXI6OmFjcXVpcmUoIGN0eCwgbWFrZU5BTCggIlMxIiApICk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggczFjLmlzT3BlbigpICk7Ci0KLSAgICAgICAgICAgICAgICAvLyBnZW5lcmF0b3IgLSBub3cgbmV4dCB2YWx1ZQotICAgICAgICAgICAgICAgIEluZGV4VHJhY2tlciYgZzFjID0gSW5kZXhUcmFja2VyOjphY3F1aXJlKCBjdHgsIG1ha2VOQUwoICJHMSIgKSwgMiApOwotICAgICAgICAgICAgICAgIFJFUVVJUkUoIGcxYy5pc09wZW4oKSApOwotICAgICAgICAgICAgICAgIFJFUVVJUkUoIGcxYy5pbmRleCgpID09IDEgKTsKLQotICAgICAgICAgICAgICAgIC8vIGlubmVyIHNlY3Rpb24gLSBub3cgc2hvdWxkIG9wZW4gYWdhaW4KLSAgICAgICAgICAgICAgICBJVHJhY2tlciYgczJjID0gU2VjdGlvblRyYWNrZXI6OmFjcXVpcmUoIGN0eCwgbWFrZU5BTCggIlMyIiApICk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggczJjLmlzT3BlbigpICk7Ci0KLSAgICAgICAgICAgICAgICBzMmMuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFKCBzMmMuaXNDb21wbGV0ZSgpICk7Ci0KLSAgICAgICAgICAgICAgICBzMWMuY2xvc2UoKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFKCBnMWMuaXNDb21wbGV0ZSgpICk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggczFjLmlzQ29tcGxldGUoKSApOwotCi0gICAgICAgICAgICAgICAgdGVzdENhc2UzLmNsb3NlKCk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRSggdGVzdENhc2UzLmlzQ29tcGxldGUoKSApOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIC8vICFUQkQiCi0gICAgICAgIC8vICAgbmVzdGVkIGdlbmVyYXRvcgotICAgICAgICAvLyAgIHR3byBzZWN0aW9ucyB3aXRoaW4gYSBnZW5lcmF0b3IKKyAgICB9CisgICAgU0VDVElPTiggIk5lc3RlZFNraXBTZWN0aW9uIiApIHsKKyAgICAgICAgLy8gY2F1c2UgYW4gZXJyb3IgaWYgdGhpcyBzZWN0aW9uIGlzIGNhbGxlZCBiZWNhdXNlIGl0IHNob3VsZG4ndCBiZQorICAgICAgICBSRVFVSVJFKDEgPT0gMCk7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL1N0cmluZy50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcAppbmRleCA5YzljNTU5Li5hZTIxYmIzIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcAorKysgYi9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvU3RyaW5nLnRlc3RzLmNwcApAQCAtMTQsMzEgKzE0LDI0IEBACiAgICAgICAgIHN0YXRpYyBhdXRvIGlzU3Vic3RyaW5nKCBTdHJpbmdSZWYgY29uc3QmIHN0cmluZ1JlZiApIC0+IGJvb2wgewogICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1JlZi5pc1N1YnN0cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIHN0YXRpYyBhdXRvIGRhdGEoIFN0cmluZ1JlZiBjb25zdCYgc3RyaW5nUmVmICkgLT4gY2hhciBjb25zdCogewotICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1JlZi5kYXRhKCk7Ci0gICAgICAgIH0KICAgICB9OwogCisKKyAgICBuYW1lc3BhY2UgewogICAgIGF1dG8gaXNPd25lZCggU3RyaW5nUmVmIGNvbnN0JiBzdHJpbmdSZWYgKSAtPiBib29sIHsKICAgICAgICAgcmV0dXJuIFN0cmluZ1JlZlRlc3RBY2Nlc3M6OmlzT3duZWQoIHN0cmluZ1JlZiApOwogICAgIH0KICAgICBhdXRvIGlzU3Vic3RyaW5nKCBTdHJpbmdSZWYgY29uc3QmIHN0cmluZ1JlZiApIC0+IGJvb2wgewogICAgICAgICByZXR1cm4gU3RyaW5nUmVmVGVzdEFjY2Vzczo6aXNTdWJzdHJpbmcoIHN0cmluZ1JlZiApOwogICAgIH0KLSAgICBhdXRvIGRhdGEoIFN0cmluZ1JlZiBjb25zdCYgc3RyaW5nUmVmICkgLT4gY2hhciBjb25zdCogewotICAgICAgICByZXR1cm4gU3RyaW5nUmVmVGVzdEFjY2Vzczo6ZGF0YSggc3RyaW5nUmVmICk7Ci0gICAgfQotfSAvLyBuYW1lc3BhY2UgQ2F0Y2gyCisgICAgfSAvLyBlbmQgYW5vbnltb3VzIG5hbWVzcGFjZQogCi1uYW1lc3BhY2UgQ2F0Y2ggewotICAgIGlubGluZSBhdXRvIHRvU3RyaW5nKCBDYXRjaDo6U3RyaW5nUmVmIGNvbnN0JiBzdHJpbmdSZWYgKSAtPiBzdGQ6OnN0cmluZyB7Ci0gICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyggZGF0YSggc3RyaW5nUmVmICksIHN0cmluZ1JlZi5zaXplKCkgKTsKLSAgICB9CiB9IC8vIG5hbWVzcGFjZSBDYXRjaAogCi1URVNUX0NBU0UoICJTdHJpbmdSZWYiLCAiW1N0cmluZ3NdIiApIHsKLSAgICAKK1RFU1RfQ0FTRSggIlN0cmluZ1JlZiIsICJbU3RyaW5nc11bU3RyaW5nUmVmXSIgKSB7CisKICAgICB1c2luZyBDYXRjaDo6U3RyaW5nUmVmOworICAgIHVzaW5nIENhdGNoOjppc093bmVkOyB1c2luZyBDYXRjaDo6aXNTdWJzdHJpbmc7CiAKICAgICBTRUNUSU9OKCAiRW1wdHkgc3RyaW5nIiApIHsKICAgICAgICAgU3RyaW5nUmVmIGVtcHR5OwpAQCAtNDYsMjEgKzM5LDIxIEBACiAgICAgICAgIFJFUVVJUkUoIGVtcHR5LnNpemUoKSA9PSAwICk7CiAgICAgICAgIFJFUVVJUkUoIHN0ZDo6c3RyY21wKCBlbXB0eS5jX3N0cigpLCAiIiApID09IDAgKTsKICAgICB9Ci0gICAgCisKICAgICBTRUNUSU9OKCAiRnJvbSBzdHJpbmcgbGl0ZXJhbCIgKSB7CiAgICAgICAgIFN0cmluZ1JlZiBzID0gImhlbGxvIjsKICAgICAgICAgUkVRVUlSRSggcy5lbXB0eSgpID09IGZhbHNlICk7CiAgICAgICAgIFJFUVVJUkUoIHMuc2l6ZSgpID09IDUgKTsKICAgICAgICAgUkVRVUlSRSggaXNTdWJzdHJpbmcoIHMgKSA9PSBmYWxzZSApOwotICAgICAgICAKLSAgICAgICAgYXV0byByYXdDaGFycyA9IGRhdGEoIHMgKTsKKworICAgICAgICBhdXRvIHJhd0NoYXJzID0gcy5jdXJyZW50RGF0YSgpOwogICAgICAgICBSRVFVSVJFKCBzdGQ6OnN0cmNtcCggcmF3Q2hhcnMsICJoZWxsbyIgKSA9PSAwICk7Ci0gICAgICAgIAorCiAgICAgICAgIFNFQ1RJT04oICJjX3N0cigpIGRvZXMgbm90IGNhdXNlIGNvcHkiICkgewogICAgICAgICAgICAgUkVRVUlSRSggaXNPd25lZCggcyApID09IGZhbHNlICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgUkVRVUlSRSggcy5jX3N0cigpID09IHJhd0NoYXJzICk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgUkVRVUlSRSggaXNPd25lZCggcyApID09IGZhbHNlICk7CiAgICAgICAgIH0KICAgICB9CkBAIC02OSwxOSArNjIsMTggQEAKICAgICAgICAgUkVRVUlSRSggb3JpZ2luYWwgPT0gIm9yaWdpbmFsIiApOwogICAgICAgICBSRVFVSVJFKCBpc1N1YnN0cmluZyggb3JpZ2luYWwgKSApOwogICAgICAgICBSRVFVSVJFKCBpc093bmVkKCBvcmlnaW5hbCApID09IGZhbHNlICk7Ci0gICAgICAgIAorCiAgICAgICAgIG9yaWdpbmFsLmNfc3RyKCk7IC8vIEZvcmNlcyBpdCB0byB0YWtlIG93bmVyc2hpcAotICAgICAgICAKKwogICAgICAgICBSRVFVSVJFKCBpc1N1YnN0cmluZyggb3JpZ2luYWwgKSA9PSBmYWxzZSApOwogICAgICAgICBSRVFVSVJFKCBpc093bmVkKCBvcmlnaW5hbCApICk7Ci0gICAgICAgIAogICAgIH0KLSAgICAKLSAgICAKKworCiAgICAgU0VDVElPTiggIlN1YnN0cmluZ3MiICkgewogICAgICAgICBTdHJpbmdSZWYgcyA9ICJoZWxsbyB3b3JsZCEiOwogICAgICAgICBTdHJpbmdSZWYgc3MgPSBzLnN1YnN0cigwLCA1KTsKLSAgICAgICAgCisKICAgICAgICAgU0VDVElPTiggInplcm8tYmFzZWQgc3Vic3RyaW5nIiApIHsKICAgICAgICAgICAgIFJFUVVJUkUoIHNzLmVtcHR5KCkgPT0gZmFsc2UgKTsKICAgICAgICAgICAgIFJFUVVJUkUoIHNzLnNpemUoKSA9PSA1ICk7CkBAIC05MSwzMyArODMsMzMgQEAKICAgICAgICAgU0VDVElPTiggImNfc3RyKCkgY2F1c2VzIGNvcHkiICkgewogICAgICAgICAgICAgUkVRVUlSRSggaXNTdWJzdHJpbmcoIHNzICkgKTsKICAgICAgICAgICAgIFJFUVVJUkUoIGlzT3duZWQoIHNzICkgPT0gZmFsc2UgKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byByYXdDaGFycyA9IGRhdGEoIHNzICk7Ci0gICAgICAgICAgICBSRVFVSVJFKCByYXdDaGFycyA9PSBkYXRhKCBzICkgKTsgLy8gc2FtZSBwb2ludGVyIHZhbHVlCisKKyAgICAgICAgICAgIGF1dG8gcmF3Q2hhcnMgPSBzcy5jdXJyZW50RGF0YSgpOworICAgICAgICAgICAgUkVRVUlSRSggcmF3Q2hhcnMgPT0gcy5jdXJyZW50RGF0YSgpICk7IC8vIHNhbWUgcG9pbnRlciB2YWx1ZQogICAgICAgICAgICAgUkVRVUlSRSggc3MuY19zdHIoKSAhPSByYXdDaGFycyApOwotICAgICAgICAgICAgCisKICAgICAgICAgICAgIFJFUVVJUkUoIGlzU3Vic3RyaW5nKCBzcyApID09IGZhbHNlICk7CiAgICAgICAgICAgICBSRVFVSVJFKCBpc093bmVkKCBzcyApICk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIFJFUVVJUkUoIGRhdGEoIHNzICkgIT0gZGF0YSggcyApICk7IC8vIGRpZmZlcmVudCBwb2ludGVyIHZhbHVlCisKKyAgICAgICAgICAgIFJFUVVJUkUoIHNzLmN1cnJlbnREYXRhKCkgIT0gcy5jdXJyZW50RGF0YSgpICk7IC8vIGRpZmZlcmVudCBwb2ludGVyIHZhbHVlCiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU0VDVElPTiggIm5vbi16ZXJvLWJhc2VkIHN1YnN0cmluZyIpIHsKICAgICAgICAgICAgIHNzID0gcy5zdWJzdHIoIDYsIDYgKTsKICAgICAgICAgICAgIFJFUVVJUkUoIHNzLnNpemUoKSA9PSA2ICk7CiAgICAgICAgICAgICBSRVFVSVJFKCBzdGQ6OnN0cmNtcCggc3MuY19zdHIoKSwgIndvcmxkISIgKSA9PSAwICk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU0VDVElPTiggIlBvaW50ZXIgdmFsdWVzIG9mIGZ1bGwgcmVmcyBzaG91bGQgbWF0Y2giICkgewogICAgICAgICAgICAgU3RyaW5nUmVmIHMyID0gczsKICAgICAgICAgICAgIFJFUVVJUkUoIHMuY19zdHIoKSA9PSBzMi5jX3N0cigpICk7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgU0VDVElPTiggIlBvaW50ZXIgdmFsdWVzIG9mIHN1YnN0cmluZyByZWZzIHNob3VsZCBub3QgbWF0Y2giICkgewogICAgICAgICAgICAgUkVRVUlSRSggcy5jX3N0cigpICE9IHNzLmNfc3RyKCkgKTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIFNFQ1RJT04oICJDb21wYXJpc29ucyIgKSB7CiAgICAgICAgIFJFUVVJUkUoIFN0cmluZ1JlZigiaGVsbG8iKSA9PSBTdHJpbmdSZWYoImhlbGxvIikgKTsKICAgICAgICAgUkVRVUlSRSggU3RyaW5nUmVmKCJoZWxsbyIpICE9IFN0cmluZ1JlZigiY2VsbG8iKSApOwpAQCAtMTY0LDkgKzE1NiwyMSBAQAogICAgICAgICAgICAgUkVRVUlSRSggc3RkU3RyLnNpemUoKSA9PSBzci5zaXplKCkgKTsKICAgICAgICAgfQogICAgIH0KKworICAgIFNFQ1RJT04oICJDb3VudGluZyB1dGYtOCBjb2RlcG9pbnRzIiApIHsKKyAgICAgICAgU3RyaW5nUmVmIGFzY2lpID0gImp1c3QgYSBwbGFpbiBvbGQgYm9yaW5nIGFzY2lpIHN0cmluZy4uLiI7CisgICAgICAgIFJFUVVJUkUoYXNjaWkubnVtYmVyT2ZDaGFyYWN0ZXJzKCkgPT0gYXNjaWkuc2l6ZSgpKTsKKworICAgICAgICBTdHJpbmdSZWYgc2ltcGxldTggPSB1OCJUcm9jaGEgxI1lxaF0aW55IG5pa29obyBuZXphYmlsYSI7CisgICAgICAgIFJFUVVJUkUoc2ltcGxldTgubnVtYmVyT2ZDaGFyYWN0ZXJzKCkgPT0gMzApOworCisgICAgICAgIFN0cmluZ1JlZiBlbW9qaXMgPSB1OCJIZXJlIGJlIPCfkb4iOworICAgICAgICBSRVFVSVJFKGVtb2ppcy5udW1iZXJPZkNoYXJhY3RlcnMoKSA9PSA5KTsKKyAgICB9CisKIH0KIAotVEVTVF9DQVNFKCAicmVwbGFjZUluUGxhY2UiICkgeworVEVTVF9DQVNFKCAicmVwbGFjZUluUGxhY2UiLCAiW1N0cmluZ3NdW1N0cmluZ01hbmlwXSIgKSB7CiAgICAgc3RkOjpzdHJpbmcgbGV0dGVycyA9ICJhYmNkZWZjZyI7CiAgICAgU0VDVElPTiggInJlcGxhY2Ugc2luZ2xlIGNoYXIiICkgewogICAgICAgICBDSEVDSyggQ2F0Y2g6OnJlcGxhY2VJblBsYWNlKCBsZXR0ZXJzLCAiYiIsICJ6IiApICk7CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvVGFnQWxpYXMudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvSW50cm9zcGVjdGl2ZVRlc3RzL1RhZ0FsaWFzLnRlc3RzLmNwcAppbmRleCA4YTBiZGFlLi41NDI4NTg5IDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvVGFnQWxpYXMudGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9UYWdBbGlhcy50ZXN0cy5jcHAKQEAgLTksOSArOSw4IEBACiAjaW5jbHVkZSAiY2F0Y2guaHBwIgogI2luY2x1ZGUgImludGVybmFsL2NhdGNoX3RhZ19hbGlhc19yZWdpc3RyeS5oIgogCi0KIFRFU1RfQ0FTRSggIlRhZyBhbGlhcyBjYW4gYmUgcmVnaXN0ZXJlZCBhZ2FpbnN0IHRhZyBwYXR0ZXJucyIgKSB7Ci0jaWYgQ0FUQ0hfQ09ORklHX1VTRV9FWENFUFRJT05TCisjaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUykKIAogICAgIENhdGNoOjpUYWdBbGlhc1JlZ2lzdHJ5IHJlZ2lzdHJ5OwogCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9JbnRyb3NwZWN0aXZlVGVzdHMvWG1sLnRlc3RzLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwCmluZGV4IDliYmVkMjUuLmMzODg2YWIgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L0ludHJvc3BlY3RpdmVUZXN0cy9YbWwudGVzdHMuY3BwCkBAIC0xLDUgKzEsNCBAQAogI2luY2x1ZGUgImNhdGNoLmhwcCIKLQogI2luY2x1ZGUgImludGVybmFsL2NhdGNoX3htbHdyaXRlci5oIgogCiAjaW5jbHVkZSA8c3N0cmVhbT4KQEAgLTEwLDcgKzksNyBAQAogICAgIHJldHVybiBvc3Muc3RyKCk7CiB9CiAKLVRFU1RfQ0FTRSggIlhtbEVuY29kZSIgKSB7CitURVNUX0NBU0UoICJYbWxFbmNvZGUiLCAiW1hNTF0iICkgewogICAgIFNFQ1RJT04oICJub3JtYWwgc3RyaW5nIiApIHsKICAgICAgICAgUkVRVUlSRSggZW5jb2RlKCAibm9ybWFsIHN0cmluZyIgKSA9PSAibm9ybWFsIHN0cmluZyIgKTsKICAgICB9CkBAIC0zOCw0ICszNyw3NiBAQAogICAgIFNFQ1RJT04oICJzdHJpbmcgd2l0aCBjb250cm9sIGNoYXIgKHg3RikiICkgewogICAgICAgICBSRVFVSVJFKCBlbmNvZGUoICJbXHg3Rl0iICkgPT0gIltcXHg3Rl0iICk7CiAgICAgfQotfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKK30KKworLy8gVGhhbmtzIHRvIFBldGVyIEJpbmRlbHMgKGRhc2NhbmR5KSBmb3Igc29tZSBvZiB0aGUgdGVzdHMKK1RFU1RfQ0FTRSgiWG1sRW5jb2RlOiBVVEYtOCIsICJbWE1MXVtVVEYtOF0iKSB7CisgICAgU0VDVElPTigiVmFsaWQgdXRmLTggc3RyaW5ncyIpIHsKKyAgICAgICAgQ0hFQ0soZW5jb2RlKHU4IkhlcmUgYmUg8J+RviIpID09IHU4IkhlcmUgYmUg8J+RviIpOworICAgICAgICBDSEVDSyhlbmNvZGUodTgixaHFoSIpID09IHU4IsWhxaEiKTsKKworICAgICAgICBDSEVDSyhlbmNvZGUoIlx4REZceEJGIikgICAgICAgICA9PSAiXHhERlx4QkYiKTsgLy8gMHg3RkYKKyAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEUwXHhBMFx4ODAiKSAgICAgPT0gIlx4RTBceEEwXHg4MCIpOyAvLyAweDgwMAorICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RURceDlGXHhCRiIpICAgICA9PSAiXHhFRFx4OUZceEJGIik7IC8vIDB4RDdGRgorICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RUVceDgwXHg4MCIpICAgICA9PSAiXHhFRVx4ODBceDgwIik7IC8vIDB4RTAwMAorICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RUZceEJGXHhCRiIpICAgICA9PSAiXHhFRlx4QkZceEJGIik7IC8vIDB4RkZGRgorICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjBceDkwXHg4MFx4ODAiKSA9PSAiXHhGMFx4OTBceDgwXHg4MCIpOyAvLyAweDEwMDAwCisgICAgICAgIENIRUNLKGVuY29kZSgiXHhGNFx4OEZceEJGXHhCRiIpID09ICJceEY0XHg4Rlx4QkZceEJGIik7IC8vIDB4MTBGRkZGCisgICAgfQorICAgIFNFQ1RJT04oIkludmFsaWQgdXRmLTggc3RyaW5ncyIpIHsKKyAgICAgICAgU0VDVElPTigiVmFyaW91cyBicm9rZW4gc3RyaW5ncyIpIHsKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiSGVyZSBceEZGIGJlIPCfkb4iKSA9PSB1OCJIZXJlIFxceEZGIGJlIPCfkb4iKTsKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhGRiIpID09ICJcXHhGRiIpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEM1XHhDNVx4QTAiKSA9PSB1OCJcXHhDNcWgIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjRceDkwXHg4MFx4ODAiKSA9PSB1OCJcXHhGNFxceDkwXFx4ODBcXHg4MCIpOyAvLyAweDExMDAwMCAtLSBvdXQgb2YgdW5pY29kZSByYW5nZQorICAgICAgICB9CisKKyAgICAgICAgU0VDVElPTigiT3ZlcmxvbmcgZW5jb2RpbmdzIikgeworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEMwXHg4MCIpID09IHU4IlxceEMwXFx4ODAiKTsgLy8gXDAKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhGMFx4ODBceDgwXHg4MCIpID09IHU4IlxceEYwXFx4ODBcXHg4MFxceDgwIik7IC8vIFN1cGVyLW92ZXItbG9uZyBcMAorICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEMxXHhCRiIpID09IHU4IlxceEMxXFx4QkYiKTsgLy8gQVNDSUkgY2hhciBhcyBVVEYtOCAoMHg3RikKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhFMFx4OUZceEJGIikgPT0gdTgiXFx4RTBcXHg5RlxceEJGIik7IC8vIDB4N0ZGCisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjBceDhGXHhCRlx4QkYiKSA9PSB1OCJcXHhGMFxceDhGXFx4QkZcXHhCRiIpOyAvLyAweEZGRkYKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdGUgdGhhdCB3ZSBhY3R1YWxseSBkb24ndCBtb2RpZnkgc3Vycm9nYXRlIHBhaXJzLCBhcyB3ZSBkbyBub3QgZG8gc3RyaWN0IGNoZWNraW5nCisgICAgICAgIFNFQ1RJT04oIlN1cnJvZ2F0ZSBwYWlycyIpIHsKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhFRFx4QTBceDgwIikgPT0gIlx4RURceEEwXHg4MCIpOyAvLyBJbnZhbGlkIHN1cnJvZ2F0ZSBoYWxmIDB4RDgwMAorICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEVEXHhBRlx4QkYiKSA9PSAiXHhFRFx4QUZceEJGIik7IC8vIEludmFsaWQgc3Vycm9nYXRlIGhhbGYgMHhEQkZGCisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RURceEIwXHg4MCIpID09ICJceEVEXHhCMFx4ODAiKTsgLy8gSW52YWxpZCBzdXJyb2dhdGUgaGFsZiAweERDMDAKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhFRFx4QkZceEJGIikgPT0gIlx4RURceEJGXHhCRiIpOyAvLyBJbnZhbGlkIHN1cnJvZ2F0ZSBoYWxmIDB4REZGRgorICAgICAgICB9CisKKyAgICAgICAgU0VDVElPTigiSW52YWxpZCBzdGFydCBieXRlIikgeworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceDgwIikgPT0gdTgiXFx4ODAiKTsKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHg4MSIpID09IHU4IlxceDgxIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4QkMiKSA9PSB1OCJcXHhCQyIpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEJGIikgPT0gdTgiXFx4QkYiKTsKKyAgICAgICAgICAgIC8vIE91dCBvZiByYW5nZQorICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEY1XHg4MFx4ODBceDgwIikgPT0gdTgiXFx4RjVcXHg4MFxceDgwXFx4ODAiKTsKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhGNlx4ODBceDgwXHg4MCIpID09IHU4IlxceEY2XFx4ODBcXHg4MFxceDgwIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjdceDgwXHg4MFx4ODAiKSA9PSB1OCJcXHhGN1xceDgwXFx4ODBcXHg4MCIpOworICAgICAgICB9CisKKyAgICAgICAgU0VDVElPTigiTWlzc2luZyBjb250aW51YXRpb24gYnl0ZShzKSIpIHsKKyAgICAgICAgICAgIC8vIE1pc3NpbmcgZmlyc3QgY29udGludWF0aW9uIGJ5dGUKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhERSIpID09IHU4IlxceERFIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4REYiKSA9PSB1OCJcXHhERiIpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEUwIikgPT0gdTgiXFx4RTAiKTsKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhFRiIpID09IHU4IlxceEVGIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjAiKSA9PSB1OCJcXHhGMCIpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEY0IikgPT0gdTgiXFx4RjQiKTsKKworICAgICAgICAgICAgLy8gTWlzc2luZyBzZWNvbmQgY29udGludWF0aW9uIGJ5dGUKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhFMFx4ODAiKSA9PSB1OCJcXHhFMFxceDgwIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RTBceEJGIikgPT0gdTgiXFx4RTBcXHhCRiIpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEUxXHg4MCIpID09IHU4IlxceEUxXFx4ODAiKTsKKyAgICAgICAgICAgIENIRUNLKGVuY29kZSgiXHhGMFx4ODAiKSA9PSB1OCJcXHhGMFxceDgwIik7CisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjRceDgwIikgPT0gdTgiXFx4RjRcXHg4MCIpOworCisgICAgICAgICAgICAvLyBNaXNzaW5nIHRoaXJkIGNvbnRpbnVhdGlvbiBieXRlCisgICAgICAgICAgICBDSEVDSyhlbmNvZGUoIlx4RjBceDgwXHg4MCIpID09IHU4IlxceEYwXFx4ODBcXHg4MCIpOworICAgICAgICAgICAgQ0hFQ0soZW5jb2RlKCJceEY0XHg4MFx4ODAiKSA9PSB1OCJcXHhGNFxceDgwXFx4ODAiKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvQXBwcm94LnRlc3RzLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvQXBwcm94LnRlc3RzLmNwcAppbmRleCAwNjA1MmIwLi5iOTUzOTRhIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0FwcHJveC50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9BcHByb3gudGVzdHMuY3BwCkBAIC0zMyw4ICszMywyMSBAQAogCiAjZW5kaWYKIAordXNpbmcgbmFtZXNwYWNlIENhdGNoOjpsaXRlcmFsczsKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworVEVTVF9DQVNFKCAiQSBjb21wYXJpc29uIHRoYXQgdXNlcyBsaXRlcmFscyBpbnN0ZWFkIG9mIHRoZSBub3JtYWwgY29uc3RydWN0b3IiLCAiW0FwcHJveF0iICkgeworICAgIGRvdWJsZSBkID0gMS4yMzsKKworICAgIFJFUVVJUkUoIGQgPT0gMS4yM19hICk7CisgICAgUkVRVUlSRSggZCAhPSAxLjIyX2EgKTsKKyAgICBSRVFVSVJFKCAtZCA9PSAtMS4yM19hICk7CisKKyAgICBSRVFVSVJFKCBkID09IDEuMl9hIC5lcHNpbG9uKC4xKSApOworICAgIFJFUVVJUkUoIGQgIT0gMS4yX2EgLmVwc2lsb24oLjAwMSkgKTsKKyAgICBSRVFVSVJFKCBkID09IDFfYSAuZXBzaWxvbiguMykgKTsKK30KKwogVEVTVF9DQVNFKCAiU29tZSBzaW1wbGUgY29tcGFyaXNvbnMgYmV0d2VlbiBkb3VibGVzIiwgIltBcHByb3hdIiApIHsKICAgICBkb3VibGUgZCA9IDEuMjM7CiAKQEAgLTQyLDYgKzU1LDkgQEAKICAgICBSRVFVSVJFKCBkICE9IEFwcHJveCggMS4yMiApICk7CiAgICAgUkVRVUlSRSggZCAhPSBBcHByb3goIDEuMjQgKSApOwogCisgICAgUkVRVUlSRSggZCA9PSAxLjIzX2EgKTsKKyAgICBSRVFVSVJFKCBkICE9IDEuMjJfYSApOworCiAgICAgUkVRVUlSRSggQXBwcm94KCBkICkgPT0gMS4yMyApOwogICAgIFJFUVVJUkUoIEFwcHJveCggZCApICE9IDEuMjIgKTsKICAgICBSRVFVSVJFKCBBcHByb3goIGQgKSAhPSAxLjI0ICk7CkBAIC0xNDksMTcgKzE2NSwxMyBAQAogICAgIFJFUVVJUkVfTk9USFJPVyhBcHByb3goMCkubWFyZ2luKDApKTsKICAgICBSRVFVSVJFX05PVEhST1coQXBwcm94KDApLm1hcmdpbigxMjM0NjU2KSk7CiAKLSNpZiBDQVRDSF9DT05GSUdfVVNFX0VYQ0VQVElPTlMKICAgICBSRVFVSVJFX1RIUk9XU19BUyhBcHByb3goMCkubWFyZ2luKC0yKSwgc3RkOjpkb21haW5fZXJyb3IpOwotI2VuZGlmCiAKICAgICBSRVFVSVJFX05PVEhST1coQXBwcm94KDApLmVwc2lsb24oMCkpOwogICAgIFJFUVVJUkVfTk9USFJPVyhBcHByb3goMCkuZXBzaWxvbigxKSk7CiAKLSNpZiBDQVRDSF9DT05GSUdfVVNFX0VYQ0VQVElPTlMKICAgICBSRVFVSVJFX1RIUk9XU19BUyhBcHByb3goMCkuZXBzaWxvbigtMC4wMDEpLCBzdGQ6OmRvbWFpbl9lcnJvcik7CiAgICAgUkVRVUlSRV9USFJPV1NfQVMoQXBwcm94KDApLmVwc2lsb24oMS4wMDAxKSwgc3RkOjpkb21haW5fZXJyb3IpOwotI2VuZGlmCiB9CiAKIFRFU1RfQ0FTRSgiRGVmYXVsdCBzY2FsZSBpcyBpbnZpc2libGUgdG8gY29tcGFyaXNvbiIsICJbQXBwcm94XSIpIHsKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvQkRELnRlc3RzLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvQkRELnRlc3RzLmNwcAppbmRleCBmNDNmZDk2Li5kMGQzZTAzIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0JERC50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9CREQudGVzdHMuY3BwCkBAIC0zOCwxMSArMzgsMTQgQEAKICAgICBTQ0VOQVJJTygiRG8gdGhhdCB0aGluZyB3aXRoIHRoZSB0aGluZyIsICJbVGFnc10iKSB7CiAgICAgICAgIEdJVkVOKCJUaGlzIHN0dWZmIGV4aXN0cyIpIHsKICAgICAgICAgICAgIC8vIG1ha2Ugc3R1ZmYgZXhpc3QKLSAgICAgICAgICAgIFdIRU4oIkkgZG8gdGhpcyIpIHsKLSAgICAgICAgICAgICAgICAvLyBkbyB0aGlzCi0gICAgICAgICAgICAgICAgVEhFTigiaXQgc2hvdWxkIGRvIHRoaXMiKSB7Ci0gICAgICAgICAgICAgICAgICAgIFJFUVVJUkUoaXREb2VzVGhpcygpKTsKLSAgICAgICAgICAgICAgICAgICAgQU5EX1RIRU4oImRvIHRoYXQiKVJFUVVJUkUoaXREb2VzVGhhdCgpKTsKKyAgICAgICAgICAgIEFORF9HSVZFTigiQW5kIHNvbWUgYXNzdW1wdGlvbiIpIHsKKyAgICAgICAgICAgICAgICAvLyBWYWxpZGF0ZSBhc3N1bXB0aW9uCisgICAgICAgICAgICAgICAgV0hFTigiSSBkbyB0aGlzIikgeworICAgICAgICAgICAgICAgICAgICAvLyBkbyB0aGlzCisgICAgICAgICAgICAgICAgICAgIFRIRU4oIml0IHNob3VsZCBkbyB0aGlzIikgeworICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUlSRShpdERvZXNUaGlzKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgQU5EX1RIRU4oImRvIHRoYXQiKVJFUVVJUkUoaXREb2VzVGhhdCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9DbGFzcy50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcAppbmRleCBjMTlhNTE3Li4zYmRlMWQ4IDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcAorKysgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0NsYXNzLnRlc3RzLmNwcApAQCAtMzksNiArMzksMjUgQEAKICAgICBpbnQgbV9hOwogfTsKIAordGVtcGxhdGU8IHR5cGVuYW1lIFQgPgorc3RydWN0IFRlbXBsYXRlX0ZpeHR1cmUgeworICAgIFRlbXBsYXRlX0ZpeHR1cmUoKTogbV9hKDEpIHt9CisKKyAgICBUIG1fYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgVGVtcGxhdGVfRml4dHVyZV8yIHsKKyAgICBUZW1wbGF0ZV9GaXh0dXJlXzIoKSB7fQorCisgICAgVCBtX2E7Cit9OworCit0ZW1wbGF0ZTwgdHlwZW5hbWUgVD4KK3N0cnVjdCBUZW1wbGF0ZV9Gb28geworICAgIHNpemVfdCBzaXplKCkgeyByZXR1cm4gMDsgfQorfTsKKwogI2VuZGlmCiAKIApAQCAtNTEsNiArNzAsMTUgQEAKICAgICBSRVFVSVJFKCBtX2EgPT0gMSApOwogfQogCitURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKFRlbXBsYXRlX0ZpeHR1cmUsICJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyIsICJbY2xhc3NdW3RlbXBsYXRlXSIsIGludCwgZmxvYXQsIGRvdWJsZSkgeworICAgIFJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmU8VGVzdFR5cGU+OjptX2EgPT0gMSApOworfQorCitURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoVGVtcGxhdGVfRml4dHVyZV8yLCAiQSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBzdWNjZWVkcyIsIltjbGFzc11bdGVtcGxhdGVdW3Byb2R1Y3RdIiwoc3RkOjp2ZWN0b3IsVGVtcGxhdGVfRm9vKSwoaW50LGZsb2F0KSkKK3sKKyAgICBSRVFVSVJFKCBUZW1wbGF0ZV9GaXh0dXJlXzI8VGVzdFR5cGU+OjptX2Euc2l6ZSgpID09IDAgKTsKK30KKwogLy8gV2Ugc2hvdWxkIGJlIGFibGUgdG8gd3JpdGUgb3VyIHRlc3RzIHdpdGhpbiBhIGRpZmZlcmVudCBuYW1lc3BhY2UKIG5hbWVzcGFjZSBJbm5lcgogewpAQCAtNTgsNiArODYsMTggQEAKICAgICB7CiAgICAgICAgIFJFUVVJUkUoIG1fYSA9PSAyICk7CiAgICAgfQorCisgICAgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRChUZW1wbGF0ZV9GaXh0dXJlLCJBIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QgYmFzZWQgdGVzdCBydW4gdGhhdCBmYWlscyIsICJbLl1bY2xhc3NdW3RlbXBsYXRlXVtmYWlsaW5nXSIsIGludCwgZmxvYXQsIGRvdWJsZSkKKyAgICB7CisgICAgICAgIFJFUVVJUkUoIFRlbXBsYXRlX0ZpeHR1cmU8VGVzdFR5cGU+OjptX2EgPT0gMiApOworICAgIH0KKworICAgIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRChUZW1wbGF0ZV9GaXh0dXJlXzIsICJBIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCBiYXNlZCB0ZXN0IHJ1biB0aGF0IGZhaWxzIiwiWy5dW2NsYXNzXVt0ZW1wbGF0ZV1bcHJvZHVjdF1bZmFpbGluZ10iLChzdGQ6OnZlY3RvcixUZW1wbGF0ZV9Gb28pLChpbnQsZmxvYXQpKQorICAgIHsKKyAgICAgICAgUkVRVUlSRSggVGVtcGxhdGVfRml4dHVyZV8yPFRlc3RUeXBlPjo6bV9hLnNpemUoKSA9PSAxICk7CisgICAgfQogfQogCisKKwogfX0gLy8gbmFtZXNwYWNlIENsYXNzVGVzdHMKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvQ29tcGlsYXRpb24udGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Db21waWxhdGlvbi50ZXN0cy5jcHAKaW5kZXggYTJmOGFmMC4uNzBiODE0YSAxMDA2NDQKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Db21waWxhdGlvbi50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Db21waWxhdGlvbi50ZXN0cy5jcHAKQEAgLTUsOCArNSwzNSBAQAogICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KQogICovCiAKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKworLy8gU2V0dXAgZm9yICMxNDAzIC0tIGxvb2sgZm9yIGdsb2JhbCBvdmVybG9hZHMgb2Ygb3BlcmF0b3IgPDwgZm9yIGNsYXNzZXMKKy8vIGluIGEgZGlmZmVyZW50IG5hbWVzcGFjZS4KKyNpbmNsdWRlIDxvc3RyZWFtPgorCituYW1lc3BhY2UgZm9vIHsKKyAgICBzdHJ1Y3QgaGVscGVyXzE0MDMgeworICAgICAgICBib29sIG9wZXJhdG9yPT0oaGVscGVyXzE0MDMpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB9OworfQorCituYW1lc3BhY2UgYmFyIHsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4gVHM+CisgICAgc3RydWN0IFR5cGVMaXN0IHt9OworfQorCisjaWZkZWYgX19HTlVDX18KKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdtaXNzaW5nLWRlY2xhcmF0aW9ucyIKKyNlbmRpZgorc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBmb286OmhlbHBlcl8xNDAzIGNvbnN0JikgeworICAgIHJldHVybiBvdXQgPDwgIlsxNDAzIGhlbHBlcl0iOworfQorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCiAjaW5jbHVkZSAiY2F0Y2guaHBwIgogCisjaW5jbHVkZSA8Y3N0cmluZz4KKwogbmFtZXNwYWNlIHsgbmFtZXNwYWNlIENvbXBpbGF0aW9uVGVzdHMgewogCiAjaWZuZGVmIENPTVBJTEFUSU9OX1RFU1RfSEVMUEVSU19JTkNMVURFRCAvLyBEb24ndCBjb21waWxlIHRoaXMgbW9yZSB0aGFuIG9uY2UgcGVyIFRVCkBAIC00MSw3ICs2OCw3IEBACiAKICAgICB2b2lkIHRocm93c19pbnQoYm9vbCBiKSB7CiAgICAgICAgIGlmIChiKSB7Ci0jaWYgQ0FUQ0hfQ09ORklHX1VTRV9FWENFUFRJT05TCisjaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUykKICAgICAgICAgICAgIHRocm93IDE7CiAjZWxzZQogICAgICAgICAgICAgc3RkOjp0ZXJtaW5hdGUoKTsKQEAgLTU0LDEwICs4MSw4IEBACiAgICAgICAgIGludCBhID0gMzsKICAgICAgICAgUkVRVUlSRShhID09IHQpOwogICAgICAgICBDSEVDSyhhID09IHQpOwotI2lmIENBVENIX0NPTkZJR19VU0VfRVhDRVBUSU9OUwogICAgICAgICBSRVFVSVJFX1RIUk9XUyh0aHJvd3NfaW50KHRydWUpKTsKICAgICAgICAgQ0hFQ0tfVEhST1dTX0FTKHRocm93c19pbnQodHJ1ZSksIGludCk7Ci0jZW5kaWYKICAgICAgICAgUkVRVUlSRV9OT1RIUk9XKHRocm93c19pbnQoZmFsc2UpKTsKICNpZm5kZWYgQ0FUQ0hfQ09ORklHX0RJU0FCTEVfTUFUQ0hFUlMKICAgICAgICAgUkVRVUlSRV9USEFUKCJhYWEiLCBDYXRjaDo6RW5kc1dpdGgoImFhYSIpKTsKQEAgLTkyLDYgKzExNyw5IEBACiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCiAjZW5kaWYKIAorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWU+CisgICAgc3RydWN0IEZpeHR1cmVfMTI0NSB7fTsKKwogI2VuZGlmCiAKICAgICBURVNUX0NBU0UoIiM4MDkiKSB7CkBAIC0xNDAsNCArMTY4LDM2IEBACiAgICAgICAgIFJFUVVJUkUodDEgPj0gdDIpOwogICAgIH0KIAorICAgIC8vIHVuc2lnbmVkIGFycmF5CisgICAgVEVTVF9DQVNFKCIjMTIzOCIpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciB1YXJyW10gPSAiMTIzIjsKKyAgICAgICAgQ0FQVFVSRSh1YXJyKTsKKyAgICAgICAgc2lnbmVkIGNoYXIgc2FycltdID0gIjQ1NiI7CisgICAgICAgIENBUFRVUkUoc2Fycik7CisKKyAgICAgICAgUkVRVUlSRShzdGQ6Om1lbWNtcCh1YXJyLCAiMTIzIiwgc2l6ZW9mKHVhcnIpKSA9PSAwKTsKKyAgICAgICAgUkVRVUlSRShzdGQ6Om1lbWNtcChzYXJyLCAiNDU2Iiwgc2l6ZW9mKHNhcnIpKSA9PSAwKTsKKyAgICB9CisKKyAgICBURVNUX0NBU0VfTUVUSE9EKChGaXh0dXJlXzEyNDU8aW50LCBpbnQ+KSwgIiMxMjQ1IiwgIltjb21waWxhdGlvbl0iKSB7CisgICAgICAgIFNVQ0NFRUQoKTsKKyAgICB9CisKKyAgICBURVNUX0NBU0UoIiMxNDAzIiwgIltjb21waWxhdGlvbl0iKSB7CisgICAgICAgIDo6Zm9vOjpoZWxwZXJfMTQwMyBoMSwgaDI7CisgICAgICAgIFJFUVVJUkUoaDEgPT0gaDIpOworICAgIH0KKworICAgIFRFU1RfQ0FTRSgiT3B0aW9uYWxseSBzdGF0aWMgYXNzZXJ0aW9ucyIsICJbY29tcGlsYXRpb25dIikgeworICAgICAgICBTVEFUSUNfUkVRVUlSRSggc3RkOjppc192b2lkPHZvaWQ+Ojp2YWx1ZSApOworICAgICAgICBTVEFUSUNfUkVRVUlSRV9GQUxTRSggc3RkOjppc192b2lkPGludD46OnZhbHVlICk7CisgICAgfQorCisgICAgVEVTVF9DQVNFKCIjMTU0OCIsICJbY29tcGlsYXRpb25dIikgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgYmFyOworICAgICAgICBSRVFVSVJFKHN0ZDo6aXNfc2FtZTxUeXBlTGlzdDxpbnQ+LCBUeXBlTGlzdDxpbnQ+Pjo6dmFsdWUpOworICAgIH0KKwogfX0gLy8gbmFtZXNwYWNlIENvbXBpbGF0aW9uVGVzdHMKKworCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0RlY29tcG9zaXRpb24udGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9EZWNvbXBvc2l0aW9uLnRlc3RzLmNwcAppbmRleCAxYjQ0YjYwLi41YmIxOWNkIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0RlY29tcG9zaXRpb24udGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvRGVjb21wb3NpdGlvbi50ZXN0cy5jcHAKQEAgLTksNiArOSw4IEBACiAjaW5jbHVkZSA8aW9zdHJlYW0+CiAjaW5jbHVkZSA8Y3N0ZGlvPgogCituYW1lc3BhY2UgeworCiBzdHJ1Y3QgdHJ1dGh5IHsKICAgICB0cnV0aHkoYm9vbCBiKTptX3ZhbHVlKGIpe30KICAgICBvcGVyYXRvciBib29sKCkgY29uc3QgewpAQCAtMjIsNiArMjQsOCBAQAogICAgIHJldHVybiBvOwogfQogCit9IC8vIGVuZCBhbm9ueW1vdXMgbmFtZXNwYWNlCisKICNpbmNsdWRlICJjYXRjaC5ocHAiCiAKIFRFU1RfQ0FTRSggIlJlY29uc3RydWN0aW9uIHNob3VsZCBiZSBiYXNlZCBvbiBzdHJpbmdpZmljYXRpb246ICM5MTQiICwgIltEZWNvbXBvc2l0aW9uXVtmYWlsaW5nXVsuXSIpIHsKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvRW51bVRvU3RyaW5nLnRlc3RzLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvRW51bVRvU3RyaW5nLnRlc3RzLmNwcAppbmRleCA3ZDE4YTI5Li4wYjE4OGE4IDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0VudW1Ub1N0cmluZy50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9FbnVtVG9TdHJpbmcudGVzdHMuY3BwCkBAIC0xLDIyICsxLDI0IEBACiAjaW5jbHVkZSAiY2F0Y2guaHBwIgogCiAKK25hbWVzcGFjZSB7CiAvLyBFbnVtIHdpdGhvdXQgdXNlci1wcm92aWRlZCBzdHJlYW0gb3BlcmF0b3IKIGVudW0gRW51bTEgeyBFbnVtMVZhbHVlMCwgRW51bTFWYWx1ZTEgfTsKIAotVEVTVF9DQVNFKCAidG9TdHJpbmcoZW51bSkiLCAiW3RvU3RyaW5nXVtlbnVtXSIgKSB7Ci0gICAgRW51bTEgZTAgPSBFbnVtMVZhbHVlMDsKLSAgICBDSEVDSyggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoZTApID09ICIwIiApOwotICAgIEVudW0xIGUxID0gRW51bTFWYWx1ZTE7Ci0gICAgQ0hFQ0soIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGUxKSA9PSAiMSIgKTsKLX0KLQogLy8gRW51bSB3aXRoIHVzZXItcHJvdmlkZWQgc3RyZWFtIG9wZXJhdG9yCiBlbnVtIEVudW0yIHsgRW51bTJWYWx1ZTAsIEVudW0yVmFsdWUxIH07CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PCggc3RkOjpvc3RyZWFtJiBvcywgRW51bTIgdiApIHsKICAgICByZXR1cm4gb3MgPDwgIkUyeyIgPDwgc3RhdGljX2Nhc3Q8aW50Pih2KSA8PCAifSI7CiB9Cit9IC8vIGVuZCBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK1RFU1RfQ0FTRSggInRvU3RyaW5nKGVudW0pIiwgIlt0b1N0cmluZ11bZW51bV0iICkgeworICAgIEVudW0xIGUwID0gRW51bTFWYWx1ZTA7CisgICAgQ0hFQ0soIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGUwKSA9PSAiMCIgKTsKKyAgICBFbnVtMSBlMSA9IEVudW0xVmFsdWUxOworICAgIENIRUNLKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShlMSkgPT0gIjEiICk7Cit9CiAKIFRFU1RfQ0FTRSggInRvU3RyaW5nKGVudW0gdy9vcGVyYXRvcjw8KSIsICJbdG9TdHJpbmddW2VudW1dIiApIHsKICAgICBFbnVtMiBlMCA9IEVudW0yVmFsdWUwOwpAQCAtMjYsMTcgKzI4LDExIEBACiB9CiAKIC8vIEVudW0gY2xhc3Mgd2l0aG91dCB1c2VyLXByb3ZpZGVkIHN0cmVhbSBvcGVyYXRvcgorbmFtZXNwYWNlIHsKIGVudW0gY2xhc3MgRW51bUNsYXNzMSB7IEVudW1DbGFzczFWYWx1ZTAsIEVudW1DbGFzczFWYWx1ZTEgfTsKIAotVEVTVF9DQVNFKCAidG9TdHJpbmcoZW51bSBjbGFzcykiLCAiW3RvU3RyaW5nXVtlbnVtXVtlbnVtQ2xhc3NdIiApIHsKLSAgICBFbnVtQ2xhc3MxIGUwID0gRW51bUNsYXNzMTo6RW51bUNsYXNzMVZhbHVlMDsKLSAgICBDSEVDSyggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoZTApID09ICIwIiApOwotICAgIEVudW1DbGFzczEgZTEgPSBFbnVtQ2xhc3MxOjpFbnVtQ2xhc3MxVmFsdWUxOwotICAgIENIRUNLKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShlMSkgPT0gIjEiICk7Ci19Ci0KIC8vIEVudW0gY2xhc3Mgd2l0aCB1c2VyLXByb3ZpZGVkIHN0cmVhbSBvcGVyYXRvcgotZW51bSBjbGFzcyBFbnVtQ2xhc3MyIDogc2hvcnQgeyBFbnVtQ2xhc3MyVmFsdWUwLCBFbnVtQ2xhc3MyVmFsdWUxIH07CitlbnVtIGNsYXNzIEVudW1DbGFzczIgeyBFbnVtQ2xhc3MyVmFsdWUwLCBFbnVtQ2xhc3MyVmFsdWUxIH07CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PCggc3RkOjpvc3RyZWFtJiBvcywgRW51bUNsYXNzMiBlMiApIHsKICAgICBzd2l0Y2goIHN0YXRpY19jYXN0PGludD4oIGUyICkgKSB7CkBAIC00OSw2ICs0NSwxNiBAQAogICAgIH0KIH0KIAorfSAvLyBlbmQgYW5vbnltb3VzIG5hbWVzcGFjZQorCitURVNUX0NBU0UoICJ0b1N0cmluZyhlbnVtIGNsYXNzKSIsICJbdG9TdHJpbmddW2VudW1dW2VudW1DbGFzc10iICkgeworICAgIEVudW1DbGFzczEgZTAgPSBFbnVtQ2xhc3MxOjpFbnVtQ2xhc3MxVmFsdWUwOworICAgIENIRUNLKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShlMCkgPT0gIjAiICk7CisgICAgRW51bUNsYXNzMSBlMSA9IEVudW1DbGFzczE6OkVudW1DbGFzczFWYWx1ZTE7CisgICAgQ0hFQ0soIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGUxKSA9PSAiMSIgKTsKK30KKworCiBURVNUX0NBU0UoICJ0b1N0cmluZyhlbnVtIGNsYXNzIHcvb3BlcmF0b3I8PCkiLCAiW3RvU3RyaW5nXVtlbnVtXVtlbnVtQ2xhc3NdIiApIHsKICAgICBFbnVtQ2xhc3MyIGUwID0gRW51bUNsYXNzMjo6RW51bUNsYXNzMlZhbHVlMDsKICAgICBDSEVDSyggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoZTApID09ICJFMi9WMCIgKTsKQEAgLTU4LDQgKzY0LDMgQEAKICAgICBFbnVtQ2xhc3MyIGUzID0gc3RhdGljX2Nhc3Q8RW51bUNsYXNzMj4oMTApOwogICAgIENIRUNLKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShlMykgPT0gIlVua25vd24gZW51bSB2YWx1ZSAxMCIgKTsKIH0KLQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9FeGNlcHRpb24udGVzdHMuY3BwCmluZGV4IDViODA4MmYuLmIxM2I5M2IgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvRXhjZXB0aW9uLnRlc3RzLmNwcAorKysgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0V4Y2VwdGlvbi50ZXN0cy5jcHAKQEAgLTEyLDE1ICsxMiwxNiBAQAogI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KIAogI2lmZGVmIF9NU0NfVkVSCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NzAyKSAvLyBVbnJlYWNoYWJsZSBjb2RlIC0tIHVuY29kaXRpb25hbCB0aHJvd3MgYW5kIHNvIG9uCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NzAyKSAvLyBVbnJlYWNoYWJsZSBjb2RlIC0tIHVuY29uZGl0aW9uYWwgdGhyb3dzIGFuZCBzbyBvbgogI2VuZGlmCiAjaWZkZWYgX19jbGFuZ19fCiAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1Xd2Vhay12dGFibGVzIgogI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XbWlzc2luZy1ub3JldHVybiIKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VucmVhY2hhYmxlLWNvZGUiCiAjZW5kaWYKIAotI2lmIENBVENIX0NPTkZJR19VU0VfRVhDRVBUSU9OUworI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpCiAvLyBDYW5ub3QgdXNlIHRyeS9jYXRjaCBrZXl3b3JkcyB3aXRoIC1mbm8tZXhjZXB0aW9ucy4KIC8vIEV2ZW4gaWYgYW4gZXhjZXB0aW9uIHdhcyB0byBiZSAidGhyb3duIiBpdCB3b3VsZCBqdXN0IGNhbGwgc3RkOjp0ZXJtaW5hdGUgaW5zdGVhZC4KIApAQCAtMTU4LDYgKzE1OSwxNSBAQAogICAgIHRocm93IGRvdWJsZSggMy4xNCApOwogfQogCitURVNUX0NBU0UoIlRocm93biBzdHJpbmcgbGl0ZXJhbHMgYXJlIHRyYW5zbGF0ZWQiLCAiWy5dW2ZhaWxpbmddWyF0aHJvd3NdIikgeworICAgIHRocm93ICJGb3Igc29tZSByZWFzb24gc29tZW9uZSBpcyB0aHJvd2luZyBhIHN0cmluZyBsaXRlcmFsISI7Cit9CisKK1RFU1RfQ0FTRSgidGhyb3duIHN0ZDo6c3RyaW5ncyBhcmUgdHJhbnNsYXRlZCIsICJbLl1bZmFpbGluZ11bIXRocm93c10iKSB7CisgICAgdGhyb3cgc3RkOjpzdHJpbmd7ICJXaHkgd291bGQgeW91IHRocm93IGEgc3RkOjpzdHJpbmc/IiB9OworfQorCisKICNpZm5kZWYgQ0FUQ0hfQ09ORklHX0RJU0FCTEVfTUFUQ0hFUlMKIAogVEVTVF9DQVNFKCAiRXhjZXB0aW9uIG1lc3NhZ2VzIGNhbiBiZSB0ZXN0ZWQgZm9yIiwgIlshdGhyb3dzXSIgKSB7CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL0dlbmVyYXRvcnMudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2YxY2U2Ci0tLSAvZGV2L251bGwKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9HZW5lcmF0b3JzLnRlc3RzLmNwcApAQCAtMCwwICsxLDE4NSBAQAorI2luY2x1ZGUgImNhdGNoLmhwcCIKKworI2luY2x1ZGUgPGNzdHJpbmc+CisKKworLy8gR2VuZXJhdG9ycyBhbmQgc2VjdGlvbnMgY2FuIGJlIG5lc3RlZCBmcmVlbHkKK1RFU1RfQ0FTRSgiR2VuZXJhdG9ycyAtLSBzaW1wbGUiLCAiW2dlbmVyYXRvcnNdIikgeworICAgIGF1dG8gaSA9IEdFTkVSQVRFKDEsIDIsIDMpOworICAgIFNFQ1RJT04oIm9uZSIpIHsKKyAgICAgICAgYXV0byBqID0gR0VORVJBVEUodmFsdWVzKHsgLTMsIC0yLCAtMSB9KSk7CisgICAgICAgIFJFUVVJUkUoaiA8IGkpOworICAgIH0KKworICAgIFNFQ1RJT04oInR3byIpIHsKKyAgICAgICAgLy8gWW91IGNhbiBhbHNvIGV4cGxpY2l0bHkgc2V0IHR5cGUgZm9yIGdlbmVyYXRvcnMgdmlhIENhdGNoOjpHZW5lcmF0b3JzOjphcworICAgICAgICBhdXRvIHN0ciA9IEdFTkVSQVRFKGFzPHN0ZDo6c3RyaW5nPnt9LCAiYSIsICJiYiIsICJjY2MiKTsKKyAgICAgICAgUkVRVUlSRSg0dSAqIGkgPiBzdHIuc2l6ZSgpKTsKKyAgICB9Cit9CisKKy8vIFlvdSBjYW4gY3JlYXRlIGEgY2FydGVzaWFuLXByb2R1Y3Qgb2YgZ2VuZXJhdG9ycyBieSBjcmVhdGluZyBtdWx0aXBsZSBvbmVzCitURVNUX0NBU0UoIjN4M3gzIGludHMiLCAiW2dlbmVyYXRvcnNdIikgeworICAgIGF1dG8geCA9IEdFTkVSQVRFKDEsIDIsIDMpOworICAgIGF1dG8geSA9IEdFTkVSQVRFKDQsIDUsIDYpOworICAgIGF1dG8geiA9IEdFTkVSQVRFKDcsIDgsIDkpOworICAgIC8vIFRoZXNlIGFzc2VydGlvbnMgd2lsbCBiZSBydW4gMjcgdGltZXMgKDN4M3gzKQorICAgIENIRUNLKHggPCB5KTsKKyAgICBDSEVDSyh5IDwgeik7CisgICAgUkVRVUlSRSh4IDwgeik7Cit9CisKKy8vIFlvdSBjYW4gYWxzbyBjcmVhdGUgZGF0YSB0dXBsZXMKK1RFU1RfQ0FTRSgidGFibGVzIiwgIltnZW5lcmF0b3JzXSIpIHsKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCBjb21waWxlIHdpdGggbGlic3RkYysrIG9sZGVyIHRoYW4gbGlic3RkYysrNgorICAgIC8vIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMjQzNjU4Ni90dXBsZS12ZWN0b3ItYW5kLWluaXRpYWxpemVyLWxpc3QKKyAgICAvLyBmb3IgcG9zc2libGUgd29ya2Fyb3VuZHMKKyAgICAvLyAgICBhdXRvIGRhdGEgPSBHRU5FUkFURSh0YWJsZTxjaGFyIGNvbnN0KiwgaW50Pih7CisgICAgLy8gICAgICAgIHsiZmlyc3QiLCA1fSwKKyAgICAvLyAgICAgICAgeyJzZWNvbmQiLCA2fSwKKyAgICAvLyAgICAgICAgeyJ0aGlyZCIsIDV9LAorICAgIC8vICAgICAgICB7ImV0Yy4uLiIsIDZ9CisgICAgLy8gICAgfSkpOworCisgICAgLy8gV29ya2Fyb3VuZCBmb3IgdGhlIGxpYnN0ZGMrKyBidWcgbWVudGlvbmVkIGFib3ZlCisgICAgdXNpbmcgdHVwbGVfdHlwZSA9IHN0ZDo6dHVwbGU8Y2hhciBjb25zdCosIGludD47CisgICAgYXV0byBkYXRhID0gR0VORVJBVEUodGFibGU8Y2hhciBjb25zdCosIGludD4oeworICAgICAgICB0dXBsZV90eXBleyJmaXJzdCIsIDV9LAorICAgICAgICB0dXBsZV90eXBleyJzZWNvbmQiLCA2fSwKKyAgICAgICAgdHVwbGVfdHlwZXsidGhpcmQiLCA1fSwKKyAgICAgICAgdHVwbGVfdHlwZXsiZXRjLi4uIiwgNn0KKyAgICB9KSk7CisKKyAgICBSRVFVSVJFKHN0cmxlbihzdGQ6OmdldDwwPihkYXRhKSkgPT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihzdGQ6OmdldDwxPihkYXRhKSkpOworfQorCisKKyNpZmRlZiBfX2NwcF9zdHJ1Y3R1cmVkX2JpbmRpbmdzCisKKy8vIFN0cnVjdHVyZWQgYmluZGluZ3MgbWFrZSB0aGUgdGFibGUgdXRpbGl0eSBtdWNoIG5pY2VyIHRvIHVzZQorVEVTVF9DQVNFKCAic3RybGVuMiIsICJbYXBwcm92YWxzXVtnZW5lcmF0b3JzXSIgKSB7CisgICAgYXV0byBbdGVzdF9pbnB1dCwgZXhwZWN0ZWRdID0gR0VORVJBVEUoIHRhYmxlPHN0ZDo6c3RyaW5nLCBzaXplX3Q+KHsKKyAgICAgICAgICAgIHsib25lIiwgM30sCisgICAgICAgICAgICB7InR3byIsIDN9LAorICAgICAgICAgICAgeyJ0aHJlZSIsIDV9LAorICAgICAgICAgICAgeyJmb3VyIiwgNH0KKyAgICAgICAgfSkpOworCisgICAgUkVRVUlSRSggdGVzdF9pbnB1dC5zaXplKCkgPT0gZXhwZWN0ZWQgKTsKK30KKyNlbmRpZgorCisKKy8vIEFuIGFsdGVybmF0ZSB3YXkgb2YgZG9pbmcgZGF0YSB0YWJsZXMgd2l0aG91dCBzdHJ1Y3R1cmVkIGJpbmRpbmdzCitzdHJ1Y3QgRGF0YSB7IHN0ZDo6c3RyaW5nIHN0cjsgc2l6ZV90IGxlbjsgfTsKKworVEVTVF9DQVNFKCAic3RybGVuMyIsICJbZ2VuZXJhdG9yc10iICkgeworICAgIGF1dG8gZGF0YSA9IEdFTkVSQVRFKCB2YWx1ZXM8RGF0YT4oeworICAgICAgICAgICAgeyJvbmUiLCAzfSwKKyAgICAgICAgICAgIHsidHdvIiwgM30sCisgICAgICAgICAgICB7InRocmVlIiwgNX0sCisgICAgICAgICAgICB7ImZvdXIiLCA0fQorICAgICAgICB9KSk7CisKKyAgICBSRVFVSVJFKCBkYXRhLnN0ci5zaXplKCkgPT0gZGF0YS5sZW4gKTsKK30KKworCisKKyNpZmRlZiBfX2NwcF9zdHJ1Y3R1cmVkX2JpbmRpbmdzCisKKy8vIEJhc2VkIG9uIGV4YW1wbGUgZnJvbSBodHRwczovL2RvY3MuY3VjdW1iZXIuaW8vZ2hlcmtpbi9yZWZlcmVuY2UvI3NjZW5hcmlvLW91dGxpbmUKKy8vICh0aGFua3MgdG8gaHR0cHM6Ly9naXRodWIuY29tL2NhdGNob3JnL0NhdGNoMi9pc3N1ZXMvODUwI2lzc3VlY29tbWVudC0zOTk1MDQ4NTEpCisKKy8vIE5vdGUgdGhhdCBHSVZFTiwgV0hFTiwgYW5kIFRIRU4gbm93IGZvcndhcmQgb250byBEWU5BTUlDX1NFQ1RJT04gaW5zdGVhZCBvZiBTRUNUSU9OLgorLy8gRFlOQU1JQ19TRUNUSU9OIHRha2VzIGl0cyBuYW1lIGFzIGEgc3RyaW5nc3RyZWFtLXN0eWxlIGV4cHJlc3Npb24sIHNvIGNhbiBiZSBmb3JtYXR0ZWQgdXNpbmcKKy8vIHZhcmlhYmxlcyBpbiBzY29wZSAtIHN1Y2ggYXMgdGhlIGdlbmVyYXRlZCB2YXJpYWJsZXMgaGVyZS4gVGhpcyByZWFkcyBxdWl0ZSBuaWNlbHkgaW4gdGhlCisvLyB0ZXN0IG5hbWUgb3V0cHV0ICh0aGUgZnVsbCBzY2VuYXJpbyBkZXNjcmlwdGlvbikuCisKK3N0YXRpYyBhdXRvIGVhdEN1Y3VtYmVycyggaW50IHN0YXJ0LCBpbnQgZWF0ICkgLT4gaW50IHsgcmV0dXJuIHN0YXJ0LWVhdDsgfQorCitTQ0VOQVJJTygiRWF0aW5nIGN1Y3VtYmVycyIsICJbZ2VuZXJhdG9yc11bYXBwcm92YWxzXSIpIHsKKworICAgIGF1dG8gW3N0YXJ0LCBlYXQsIGxlZnRdID0gR0VORVJBVEUoIHRhYmxlPGludCxpbnQsaW50PiAoeworICAgICAgICAgICAgeyAxMiwgNSwgNyB9LAorICAgICAgICAgICAgeyAyMCwgNSwgMTUgfQorICAgICAgICB9KSk7CisKKyAgICBHSVZFTiggInRoZXJlIGFyZSAiIDw8IHN0YXJ0IDw8ICIgY3VjdW1iZXJzIiApCisgICAgV0hFTiggIkkgZWF0ICIgPDwgZWF0IDw8ICIgY3VjdW1iZXJzIiApCisgICAgVEhFTiggIkkgc2hvdWxkIGhhdmUgIiA8PCBsZWZ0IDw8ICIgY3VjdW1iZXJzIiApIHsKKyAgICAgICAgUkVRVUlSRSggZWF0Q3VjdW1iZXJzKCBzdGFydCwgZWF0ICkgPT0gbGVmdCApOworICAgIH0KK30KKyNlbmRpZgorCisvLyBUaGVyZSBhcmUgYWxzbyBzb21lIGdlbmVyaWMgZ2VuZXJhdG9yIG1hbmlwdWxhdG9ycworVEVTVF9DQVNFKCJHZW5lcmF0b3JzIC0tIGFkYXB0ZXJzIiwgIltnZW5lcmF0b3JzXVtnZW5lcmljXSIpIHsKKyAgICAvLyBUT0RPOiBUaGlzIHdvbid0IHdvcmsgeWV0LCBpbnRyb2R1Y2UgR0VORVJBVEVfVkFSPworICAgIC8vYXV0byBudW1iZXJzID0gQ2F0Y2g6OkdlbmVyYXRvcnM6OnZhbHVlcyh7IDEsIDIsIDMsIDQsIDUsIDYgfSk7CisgICAgU0VDVElPTigiRmlsdGVyaW5nIGJ5IHByZWRpY2F0ZSIpIHsKKyAgICAgICAgU0VDVElPTigiQmFzaWMgdXNhZ2UiKSB7CisgICAgICAgICAgICAvLyBUaGlzIGZpbHRlcnMgb3V0IGFsbCBvZGQgKGZhbHNlKSBudW1iZXJzLCBnaXZpbmcgWzIsIDQsIDZdCisgICAgICAgICAgICBhdXRvIGkgPSBHRU5FUkFURShmaWx0ZXIoW10gKGludCB2YWwpIHsgcmV0dXJuIHZhbCAlIDIgPT0gMDsgfSwgdmFsdWVzKHsgMSwgMiwgMywgNCwgNSwgNiB9KSkpOworICAgICAgICAgICAgUkVRVUlSRShpICUgMiA9PSAwKTsKKyAgICAgICAgfQorICAgICAgICBTRUNUSU9OKCJUaHJvd3MgaWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIHZhbHVlcyIpIHsKKyAgICAgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBDYXRjaDo6R2VuZXJhdG9yczsKKyAgICAgICAgICAgIFJFUVVJUkVfVEhST1dTX0FTKGZpbHRlcihbXSAoaW50KSB7cmV0dXJuIGZhbHNlOyB9LCB2YWx1ZSgxKSksIENhdGNoOjpHZW5lcmF0b3JFeGNlcHRpb24pOworICAgICAgICB9CisgICAgfQorICAgIFNFQ1RJT04oIlNob3J0ZW5pbmcgYSByYW5nZSIpIHsKKyAgICAgICAgLy8gVGhpcyB0YWtlcyB0aGUgZmlyc3QgMyBlbGVtZW50cyBmcm9tIHRoZSB2YWx1ZXMsIGdpdmluZyBiYWNrIFsxLCAyLCAzXQorICAgICAgICBhdXRvIGkgPSBHRU5FUkFURSh0YWtlKDMsIHZhbHVlcyh7IDEsIDIsIDMsIDQsIDUsIDYgfSkpKTsKKyAgICAgICAgUkVRVUlSRShpIDwgNCk7CisgICAgfQorICAgIFNFQ1RJT04oIlRyYW5zZm9ybWluZyBlbGVtZW50cyIpIHsKKyAgICAgICAgU0VDVElPTigiU2FtZSB0eXBlIikgeworICAgICAgICAgICAgLy8gVGhpcyBkb3VibGVzIHZhbHVlcyBbMSwgMiwgM10gaW50byBbMiwgNCwgNl0KKyAgICAgICAgICAgIGF1dG8gaSA9IEdFTkVSQVRFKG1hcChbXSAoaW50IHZhbCkgeyByZXR1cm4gdmFsICogMjsgfSwgdmFsdWVzKHsgMSwgMiwgMyB9KSkpOworICAgICAgICAgICAgUkVRVUlSRShpICUgMiA9PSAwKTsKKyAgICAgICAgfQorICAgICAgICBTRUNUSU9OKCJEaWZmZXJlbnQgdHlwZSIpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgdGFrZXMgYSBnZW5lcmF0b3IgdGhhdCByZXR1cm5zIGludHMgYW5kIG1hcHMgdGhlbSBpbnRvIHN0cmluZ3MKKyAgICAgICAgICAgIGF1dG8gaSA9IEdFTkVSQVRFKG1hcDxzdGQ6OnN0cmluZz4oW10gKGludCB2YWwpIHsgcmV0dXJuIHN0ZDo6dG9fc3RyaW5nKHZhbCk7IH0sIHZhbHVlcyh7IDEsIDIsIDMgfSkpKTsKKyAgICAgICAgICAgIFJFUVVJUkUoaS5zaXplKCkgPT0gMSk7CisgICAgICAgIH0KKyAgICB9CisgICAgU0VDVElPTigiUmVwZWF0aW5nIGEgZ2VuZXJhdG9yIikgeworICAgICAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIHZhbHVlcyBbMSwgMiwgMywgMSwgMiwgM10KKyAgICAgICAgYXV0byBqID0gR0VORVJBVEUocmVwZWF0KDIsIHZhbHVlcyh7IDEsIDIsIDMgfSkpKTsKKyAgICAgICAgUkVRVUlSRShqID4gMCk7CisgICAgfQorICAgIFNFQ1RJT04oIkNodW5raW5nIGEgZ2VuZXJhdG9yIGludG8gc2l6ZWQgcGllY2VzIikgeworICAgICAgICBTRUNUSU9OKCJOdW1iZXIgb2YgZWxlbWVudHMgaW4gc291cmNlIGlzIGRpdmlzaWJsZSBieSBjaHVuayBzaXplIikgeworICAgICAgICAgICAgYXV0byBjaHVuazIgPSBHRU5FUkFURShjaHVuaygyLCB2YWx1ZXMoeyAxLCAxLCAyLCAyLCAzLCAzIH0pKSk7CisgICAgICAgICAgICBSRVFVSVJFKGNodW5rMi5zaXplKCkgPT0gMik7CisgICAgICAgICAgICBSRVFVSVJFKGNodW5rMi5mcm9udCgpID09IGNodW5rMi5iYWNrKCkpOworICAgICAgICB9CisgICAgICAgIFNFQ1RJT04oIk51bWJlciBvZiBlbGVtZW50cyBpbiBzb3VyY2UgaXMgbm90IGRpdmlzaWJsZSBieSBjaHVuayBzaXplIikgeworICAgICAgICAgICAgYXV0byBjaHVuazIgPSBHRU5FUkFURShjaHVuaygyLCB2YWx1ZXMoeyAxLCAxLCAyLCAyLCAzIH0pKSk7CisgICAgICAgICAgICBSRVFVSVJFKGNodW5rMi5zaXplKCkgPT0gMik7CisgICAgICAgICAgICBSRVFVSVJFKGNodW5rMi5mcm9udCgpID09IGNodW5rMi5iYWNrKCkpOworICAgICAgICAgICAgUkVRVUlSRShjaHVuazIuZnJvbnQoKSA8IDMpOworICAgICAgICB9CisgICAgICAgIFNFQ1RJT04oIlRocm93cyBvbiB0b28gc21hbGwgZ2VuZXJhdG9ycyIpIHsKKyAgICAgICAgICAgIHVzaW5nIG5hbWVzcGFjZSBDYXRjaDo6R2VuZXJhdG9yczsKKyAgICAgICAgICAgIFJFUVVJUkVfVEhST1dTX0FTKGNodW5rKDIsIHZhbHVlKDEpKSwgQ2F0Y2g6OkdlbmVyYXRvckV4Y2VwdGlvbik7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vIE5vdGUgdGhhdCBiZWNhdXNlIG9mIHRoZSBub24tcmVwcm9kdWNpYmlsaXR5IG9mIGRpc3RyaWJ1dGlvbnMsCisvLyBhbnl0aGluZyBpbnZvbHZpbmcgdGhlIHJhbmRvbSBnZW5lcmF0b3JzIGNhbm5vdCBiZSBwYXJ0IG9mIGFwcHJvdmFscworVEVTVF9DQVNFKCJSYW5kb20gZ2VuZXJhdG9yIiwgIltnZW5lcmF0b3JzXVsuXVthcHByb3ZhbHNdIikgeworICAgIFNFQ1RJT04oIkluZmVyIGludCBmcm9tIGludGVncmFsIGFyZ3VtZW50cyIpIHsKKyAgICAgICAgYXV0byB2YWwgPSBHRU5FUkFURSh0YWtlKDQsIHJhbmRvbSgwLCAxKSkpOworICAgICAgICBTVEFUSUNfUkVRVUlSRShzdGQ6OmlzX3NhbWU8ZGVjbHR5cGUodmFsKSwgaW50Pjo6dmFsdWUpOworICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPih2YWwpOyAvLyBTaWxlbmNlIFZTIDIwMTUgdW51c2VkIHZhcmlhYmxlIHdhcm5pbmcKKyAgICB9CisgICAgU0VDVElPTigiSW5mZXIgZG91YmxlIGZyb20gZG91YmxlIGFyZ3VtZW50cyIpIHsKKyAgICAgICAgYXV0byB2YWwgPSBHRU5FUkFURSh0YWtlKDQsIHJhbmRvbSgwLiwgMS4pKSk7CisgICAgICAgIFNUQVRJQ19SRVFVSVJFKHN0ZDo6aXNfc2FtZTxkZWNsdHlwZSh2YWwpLCBkb3VibGU+Ojp2YWx1ZSk7CisgICAgICAgIHN0YXRpY19jYXN0PHZvaWQ+KHZhbCk7IC8vIFNpbGVuY2UgVlMgMjAxNSB1bnVzZWQgdmFyaWFibGUgd2FybmluZworICAgIH0KK30KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvTWF0Y2hlcnMudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAKaW5kZXggY2EyNWNjYS4uZGM0YjcwMSAxMDA2NDQKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9NYXRjaGVycy50ZXN0cy5jcHAKQEAgLTMyLDYgKzMyLDkgQEAKICAgICAgICAgcmV0dXJuICJzb21lIGNvbXBsZXRlbHkgZGlmZmVyZW50IHRleHQgdGhhdCBjb250YWlucyBvbmUgY29tbW9uIHdvcmQiOwogICAgIH0KIAorICAgIGlubGluZSBib29sIGFsd2F5c1RydWUoaW50KSB7IHJldHVybiB0cnVlOyB9CisgICAgaW5saW5lIGJvb2wgYWx3YXlzRmFsc2UoaW50KSB7IHJldHVybiBmYWxzZTsgfQorCiAKICNpZmRlZiBfTVNDX1ZFUgogI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6NDcwMikgLy8gVW5yZWFjaGFibGUgY29kZSAtLSBNU1ZDIDE5IChWUyAyMDE1KSBzZWVzIHJpZ2h0IHRocm91Z2ggdGhlIGluZGlyZWN0aW9uCkBAIC00MiwxMCArNDUsMTQgQEAKICAgICBzdHJ1Y3QgU3BlY2lhbEV4Y2VwdGlvbiA6IHN0ZDo6ZXhjZXB0aW9uIHsKICAgICAgICAgU3BlY2lhbEV4Y2VwdGlvbihpbnQgaV8pIDogaShpXykge30KIAorICAgICAgICBjaGFyIGNvbnN0KiB3aGF0KCkgY29uc3Qgbm9leGNlcHQgb3ZlcnJpZGUgeworICAgICAgICAgICAgcmV0dXJuICJTcGVjaWFsRXhjZXB0aW9uOjp3aGF0IjsKKyAgICAgICAgfQorCiAgICAgICAgIGludCBpOwogICAgIH07CiAKLSNpZiBDQVRDSF9DT05GSUdfVVNFX0VYQ0VQVElPTlMKKyNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TKQogICAgIHZvaWQgZG9lc05vdFRocm93KCkge30KIAogICAgIFtbbm9yZXR1cm5dXQpAQCAtNzksNiArODYsMjAgQEAKIAogICAgIHVzaW5nIG5hbWVzcGFjZSBDYXRjaDo6TWF0Y2hlcnM7CiAKKyNpZmRlZiBfX0RKR1BQX18KKyAgICBmbG9hdCBuZXh0YWZ0ZXIoZmxvYXQgZnJvbSwgZmxvYXQgdG8pCisgICAgeworICAgICAgICByZXR1cm4gOjpuZXh0YWZ0ZXJmKGZyb20sIHRvKTsKKyAgICB9CisKKyAgICBkb3VibGUgbmV4dGFmdGVyKGRvdWJsZSBmcm9tLCBkb3VibGUgdG8pCisgICAgeworICAgICAgICByZXR1cm4gOjpuZXh0YWZ0ZXIoZnJvbSwgdG8pOworICAgIH0KKyNlbHNlCisgICAgdXNpbmcgc3RkOjpuZXh0YWZ0ZXI7CisjZW5kaWYKKwogICAgIFRFU1RfQ0FTRSgiU3RyaW5nIG1hdGNoZXJzIiwgIlttYXRjaGVyc10iKSB7CiAgICAgICAgIFJFUVVJUkVfVEhBVCh0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgQ29udGFpbnMoInN0cmluZyIpKTsKICAgICAgICAgUkVRVUlSRV9USEFUKHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLCBDb250YWlucygic3RyaW5nIiwgQ2F0Y2g6OkNhc2VTZW5zaXRpdmU6Ok5vKSk7CkBAIC0xMzIsNiArMTUzLDggQEAKICAgICAgICAgICAgICAoZGVmaW5lZChfR0xJQkNYWF9SRUxFQVNFKSAmJiBcCiAgICAgICAgICAgICAgX0dMSUJDWFhfUkVMRUFTRSA+IDQpKSkpCiAKKy8vIERKR1BQIG1lZXRzIHRoZSBhYm92ZSBjb25kaXRpb24gYnV0IDxyZWdleD4gZG9lcyBub3Qgd29yayBwcm9wZXJseSBhbnl3YXkKKyNpZm5kZWYgX19ESkdQUF9fCiAgICAgICAgICAgICBSRVFVSVJFX1RIQVQodGVzdFN0cmluZ0Zvck1hdGNoaW5nKCksIE1hdGNoZXMoInRoaXMgc3RyaW5nIGNvbnRhaW5zICdhYmMnIGFzIGEgc3Vic3RyaW5nIikpOwogICAgICAgICAgICAgUkVRVUlSRV9USEFUKHRlc3RTdHJpbmdGb3JNYXRjaGluZygpLAogICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGNoZXMoInRoaXMgc3RyaW5nIENPTlRBSU5TICdhYmMnIGFzIGEgc3Vic3RyaW5nIiwgQ2F0Y2g6OkNhc2VTZW5zaXRpdmU6Ok5vKSk7CkBAIC0xNDAsNiArMTYzLDggQEAKICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCh0ZXN0U3RyaW5nRm9yTWF0Y2hpbmcoKSwgTWF0Y2hlcygiXi4qICdBQkMnIC4qJCIsIENhdGNoOjpDYXNlU2Vuc2l0aXZlOjpObykpOwogI2VuZGlmCiAKKyNlbmRpZgorCiAgICAgICAgICAgICBSRVFVSVJFX1RIQVQodGVzdFN0cmluZ0Zvck1hdGNoaW5nMigpLCAhTWF0Y2hlcygidGhpcyBzdHJpbmcgY29udGFpbnMgJ2FiYycgYXMgYSBzdWJzdHJpbmciKSk7CiAgICAgICAgIH0KIApAQCAtMjc1LDcgKzMwMCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotI2lmIENBVENIX0NPTkZJR19VU0VfRVhDRVBUSU9OUworI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpCiAgICAgICAgIFRFU1RfQ0FTRSgiRXhjZXB0aW9uIG1hdGNoZXJzIHRoYXQgc3VjY2VlZCIsICJbbWF0Y2hlcnNdW2V4Y2VwdGlvbnNdWyF0aHJvd3NdIikgewogICAgICAgICAgICAgQ0hFQ0tfVEhST1dTX01BVENIRVModGhyb3dzKDEpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezF9KTsKICAgICAgICAgICAgIFJFUVVJUkVfVEhST1dTX01BVENIRVModGhyb3dzKDIpLCBTcGVjaWFsRXhjZXB0aW9uLCBFeGNlcHRpb25NYXRjaGVyezJ9KTsKQEAgLTMwNywxMyArMzMyLDE4IEBACiAKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMC5mLCBXaXRoaW5BYnMoLTAuZiwgMCkpOwogICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVChOQU4sICFXaXRoaW5BYnMoTkFOLCAwKSk7CisKKyAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoMTEuZiwgIVdpdGhpbkFicygxMC5mLCAwLjVmKSk7CisgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDEwLmYsICFXaXRoaW5BYnMoMTEuZiwgMC41ZikpOworICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgtMTAuZiwgV2l0aGluQWJzKC0xMC5mLCAwLjVmKSk7CisgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKC0xMC5mLCBXaXRoaW5BYnMoLTkuNmYsIDAuNWYpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFNFQ1RJT04oIlVMUHMiKSB7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDEuZiwgV2l0aGluVUxQKDEuZiwgMCkpOwogCi0gICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKHN0ZDo6bmV4dGFmdGVyKDEuZiwgMi5mKSwgV2l0aGluVUxQKDEuZiwgMSkpOwotICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVChzdGQ6Om5leHRhZnRlcigxLmYsIDAuZiksIFdpdGhpblVMUCgxLmYsIDEpKTsKLSAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoc3RkOjpuZXh0YWZ0ZXIoMS5mLCAyLmYpLCAhV2l0aGluVUxQKDEuZiwgMCkpOworICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVChuZXh0YWZ0ZXIoMS5mLCAyLmYpLCBXaXRoaW5VTFAoMS5mLCAxKSk7CisgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKG5leHRhZnRlcigxLmYsIDAuZiksIFdpdGhpblVMUCgxLmYsIDEpKTsKKyAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQobmV4dGFmdGVyKDEuZiwgMi5mKSwgIVdpdGhpblVMUCgxLmYsIDApKTsKIAogICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgxLmYsIFdpdGhpblVMUCgxLmYsIDApKTsKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoLTAuZiwgV2l0aGluVUxQKDAuZiwgMCkpOwpAQCAtMzI2LDcgKzM1Niw2IEBACiAKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoTkFOLCAhKFdpdGhpbkFicyhOQU4sIDEwMCkgfHwgV2l0aGluVUxQKE5BTiwgMTIzKSkpOwogICAgICAgICAgICAgfQotI2lmIENIRUNLX0NPTkZJR19VU0VfRVhDRVBUSU9OUwogICAgICAgICAgICAgU0VDVElPTigiQ29uc3RydWN0b3IgdmFsaWRhdGlvbiIpIHsKICAgICAgICAgICAgICAgICBSRVFVSVJFX05PVEhST1coV2l0aGluQWJzKDEuZiwgMC5mKSk7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USFJPV1NfQVMoV2l0aGluQWJzKDEuZiwgLTEuZiksIHN0ZDo6ZG9tYWluX2Vycm9yKTsKQEAgLTMzNCw3ICszNjMsNiBAQAogICAgICAgICAgICAgICAgIFJFUVVJUkVfTk9USFJPVyhXaXRoaW5VTFAoMS5mLCAwKSk7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USFJPV1NfQVMoV2l0aGluVUxQKDEuZiwgLTEpLCBzdGQ6OmRvbWFpbl9lcnJvcik7CiAgICAgICAgICAgICB9Ci0jZW5kaWYKICAgICAgICAgfQogCiAgICAgICAgIFRFU1RfQ0FTRSgiRmxvYXRpbmcgcG9pbnQgbWF0Y2hlcnM6IGRvdWJsZSIsICJbbWF0Y2hlcnNdW2Zsb2F0aW5nLXBvaW50XSIpIHsKQEAgLTM0NiwxMyArMzc0LDE4IEBACiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDAuLCAhV2l0aGluQWJzKDEuLCAwLjk5KSk7CiAKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoTkFOLCAhV2l0aGluQWJzKE5BTiwgMCkpOworCisgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDExLiwgIVdpdGhpbkFicygxMC4sIDAuNSkpOworICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgxMC4sICFXaXRoaW5BYnMoMTEuLCAwLjUpKTsKKyAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoLTEwLiwgV2l0aGluQWJzKC0xMC4sIDAuNSkpOworICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgtMTAuLCBXaXRoaW5BYnMoLTkuNiwgMC41KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTRUNUSU9OKCJVTFBzIikgewogICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgxLiwgV2l0aGluVUxQKDEuLCAwKSk7CiAKLSAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoc3RkOjpuZXh0YWZ0ZXIoMS4sIDIuKSwgV2l0aGluVUxQKDEuLCAxKSk7Ci0gICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKHN0ZDo6bmV4dGFmdGVyKDEuLCAwLiksIFdpdGhpblVMUCgxLiwgMSkpOwotICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVChzdGQ6Om5leHRhZnRlcigxLiwgMi4pLCAhV2l0aGluVUxQKDEuLCAwKSk7CisgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKG5leHRhZnRlcigxLiwgMi4pLCBXaXRoaW5VTFAoMS4sIDEpKTsKKyAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQobmV4dGFmdGVyKDEuLCAwLiksIFdpdGhpblVMUCgxLiwgMSkpOworICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVChuZXh0YWZ0ZXIoMS4sIDIuKSwgIVdpdGhpblVMUCgxLiwgMCkpOwogCiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDEuLCBXaXRoaW5VTFAoMS4sIDApKTsKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoLTAuLCBXaXRoaW5VTFAoMC4sIDApKTsKQEAgLTM2NSw3ICszOTgsNiBAQAogCiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKE5BTiwgIShXaXRoaW5BYnMoTkFOLCAxMDApIHx8IFdpdGhpblVMUChOQU4sIDEyMykpKTsKICAgICAgICAgICAgIH0KLSNpZiBDSEVDS19DT05GSUdfVVNFX0VYQ0VQVElPTlMKICAgICAgICAgICAgIFNFQ1RJT04oIkNvbnN0cnVjdG9yIHZhbGlkYXRpb24iKSB7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9OT1RIUk9XKFdpdGhpbkFicygxLiwgMC4pKTsKICAgICAgICAgICAgICAgICBSRVFVSVJFX1RIUk9XU19BUyhXaXRoaW5BYnMoMS4sIC0xLiksIHN0ZDo6ZG9tYWluX2Vycm9yKTsKQEAgLTM3Myw3ICs0MDUsMzkgQEAKICAgICAgICAgICAgICAgICBSRVFVSVJFX05PVEhST1coV2l0aGluVUxQKDEuLCAwKSk7CiAgICAgICAgICAgICAgICAgUkVRVUlSRV9USFJPV1NfQVMoV2l0aGluVUxQKDEuLCAtMSksIHN0ZDo6ZG9tYWluX2Vycm9yKTsKICAgICAgICAgICAgIH0KLSNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgVEVTVF9DQVNFKCJBcmJpdHJhcnkgcHJlZGljYXRlIG1hdGNoZXIiLCAiW21hdGNoZXJzXVtnZW5lcmljXSIpIHsKKyAgICAgICAgICAgIFNFQ1RJT04oIkZ1bmN0aW9uIHBvaW50ZXIiKSB7CisgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDEsICBQcmVkaWNhdGU8aW50PihhbHdheXNUcnVlLCAiYWx3YXlzIHRydWUiKSk7CisgICAgICAgICAgICAgICAgUkVRVUlSRV9USEFUKDEsICFQcmVkaWNhdGU8aW50PihhbHdheXNGYWxzZSwgImFsd2F5cyBmYWxzZSIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNFQ1RJT04oIkxhbWJkYXMgKyBkaWZmZXJlbnQgdHlwZSIpIHsKKyAgICAgICAgICAgICAgICBSRVFVSVJFX1RIQVQoIkhlbGxvIG9sbGVIIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlZGljYXRlPHN0ZDo6c3RyaW5nPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtdIChzdGQ6OnN0cmluZyBjb25zdCYgc3RyKSAtPiBib29sIHsgcmV0dXJuIHN0ci5mcm9udCgpID09IHN0ci5iYWNrKCk7IH0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmlyc3QgYW5kIGxhc3QgY2hhcmFjdGVyIHNob3VsZCBiZSBlcXVhbCIpCisgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgIFJFUVVJUkVfVEhBVCgiVGhpcyB3b3VsZG4ndCBwYXNzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIVByZWRpY2F0ZTxzdGQ6OnN0cmluZz4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbXSAoc3RkOjpzdHJpbmcgY29uc3QmIHN0cikgLT4gYm9vbCB7IHJldHVybiBzdHIuZnJvbnQoKSA9PSBzdHIuYmFjaygpOyB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgVEVTVF9DQVNFKCJSZWdyZXNzaW9uIHRlc3QgIzEiLCAiW21hdGNoZXJzXVt2ZWN0b3JdIikgeworICAgICAgICAgICAgLy8gQXQgc29tZSBwb2ludCwgVW5vcmRlcmVkRXF1YWxzTWF0Y2hlciBza2lwcGVkCisgICAgICAgICAgICAvLyBtaXNtYXRjaGVkIHByZWZpeGVkIGJlZm9yZSBkb2luZyB0aGUgY29tcGFyaXNvbiBpdHNlbGYKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNoYXI+IGFjdHVhbCA9IHsgJ2EnLCAnYicgfTsKKyAgICAgICAgICAgIHN0ZDo6dmVjdG9yPGNoYXI+IGV4cGVjdGVkID0geyAnYycsICdiJyB9OworCisgICAgICAgICAgICBDSEVDS19USEFUKGFjdHVhbCwgIVVub3JkZXJlZEVxdWFscyhleHBlY3RlZCkpOworICAgICAgICB9CisKKyAgICAgICAgVEVTVF9DQVNFKCJQcmVkaWNhdGUgbWF0Y2hlciBjYW4gYWNjZXB0IGNvbnN0IGNoYXIqIiwgIlttYXRjaGVyc11bY29tcGlsYXRpb25dIikgeworICAgICAgICAgICAgUkVRVUlSRV9USEFUKCJmb28iLCBQcmVkaWNhdGU8Y29uc3QgY2hhcio+KFtdIChjb25zdCBjaGFyKiBjb25zdCYpIHsgcmV0dXJuIHRydWU7IH0pKTsKICAgICAgICAgfQogCiB9IH0gLy8gbmFtZXNwYWNlIE1hdGNoZXJzVGVzdHMKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL01lc3NhZ2UudGVzdHMuY3BwCmluZGV4IGYzYWMwMmEuLmM5NTU4MjIgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvTWVzc2FnZS50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9NZXNzYWdlLnRlc3RzLmNwcApAQCAtOSwxMCArOSw2IEBACiAjaW5jbHVkZSAiY2F0Y2guaHBwIgogI2luY2x1ZGUgPGlvc3RyZWFtPgogCi0jaWZkZWYgX19jbGFuZ19fCi0jcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdjKys5OC1jb21wYXQtcGVkYW50aWMiCi0jZW5kaWYKLQogVEVTVF9DQVNFKCAiSU5GTyBhbmQgV0FSTiBkbyBub3QgYWJvcnQgdGVzdHMiLCAiW21lc3NhZ2VzXVsuXSIgKSB7CiAgICAgSU5GTyggInRoaXMgaXMgYSAiIDw8ICJtZXNzYWdlIiApOyAgICAvLyBUaGlzIHNob3VsZCBvdXRwdXQgdGhlIG1lc3NhZ2UgaWYgYSBmYWlsdXJlIG9jY3VycwogICAgIFdBUk4oICJ0aGlzIGlzIGEgIiA8PCAid2FybmluZyIgKTsgICAgLy8gVGhpcyBzaG91bGQgYWx3YXlzIG91dHB1dCB0aGUgbWVzc2FnZSBidXQgdGhlbiBjb250aW51ZQpAQCAtMTM1LDMgKzEzMSwxMjUgQEAKICAgICBXQVJOKCAiYWN0dWFsIGFkZHJlc3Mgb2YgcDogIiA8PCAmcCApOwogICAgIFdBUk4oICJ0b1N0cmluZyhwKTogIiA8PCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggJnAgKSApOwogfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0YXRpYyB2b2lkIHVuc2NvcGVkX2luZm8oIFQgbXNnICkgeworICAgIFVOU0NPUEVEX0lORk8oIG1zZyApOworfQorCitURVNUX0NBU0UoICJqdXN0IHVuc2NvcGVkIGluZm8iLCAiW3Vuc2NvcGVkXVtpbmZvXSIgKSB7CisgICAgdW5zY29wZWRfaW5mbyggInRoaXMgc2hvdWxkIE5PVCBiZSBzZWVuIiApOworICAgIHVuc2NvcGVkX2luZm8oICJ0aGlzIGFsc28gc2hvdWxkIE5PVCBiZSBzZWVuIiApOworfQorCitURVNUX0NBU0UoICJqdXN0IGZhaWx1cmUgYWZ0ZXIgdW5zY29wZWQgaW5mbyIsICJbZmFpbGluZ11bLl1bdW5zY29wZWRdW2luZm9dIiApIHsKKyAgICBGQUlMKCAicHJldmlvdXMgdW5zY29wZWQgaW5mbyBTSE9VTEQgbm90IGJlIHNlZW4iICk7Cit9CisKK1RFU1RfQ0FTRSggInByaW50IHVuc2NvcGVkIGluZm8gaWYgcGFzc2luZyB1bnNjb3BlZCBpbmZvIGlzIHByaW50ZWQiLCAiW3Vuc2NvcGVkXVtpbmZvXSIgKSB7CisgICAgdW5zY29wZWRfaW5mbyggInRoaXMgTUFZIGJlIHNlZW4gSUYgaW5mbyBpcyBwcmludGVkIGZvciBwYXNzaW5nIGFzc2VydGlvbnMiICk7CisgICAgUkVRVUlSRSggdHJ1ZSApOworfQorCitURVNUX0NBU0UoICJwcmludHMgdW5zY29wZWQgaW5mbyBvbiBmYWlsdXJlIiwgIltmYWlsaW5nXVsuXVt1bnNjb3BlZF1baW5mb10iICkgeworICAgIHVuc2NvcGVkX2luZm8oICJ0aGlzIFNIT1VMRCBiZSBzZWVuIiApOworICAgIHVuc2NvcGVkX2luZm8oICJ0aGlzIFNIT1VMRCBhbHNvIGJlIHNlZW4iICk7CisgICAgUkVRVUlSRSggZmFsc2UgKTsKKyAgICB1bnNjb3BlZF9pbmZvKCAiYnV0IHRoaXMgc2hvdWxkIE5PVCBiZSBzZWVuIiApOworfQorCitURVNUX0NBU0UoICJub3QgcHJpbnRzIHVuc2NvcGVkIGluZm8gZnJvbSBwcmV2aW91cyBmYWlsdXJlcyIsICJbZmFpbGluZ11bLl1bdW5zY29wZWRdW2luZm9dIiApIHsKKyAgICB1bnNjb3BlZF9pbmZvKCAidGhpcyBNQVkgYmUgc2VlbiBvbmx5IGZvciB0aGUgRklSU1QgYXNzZXJ0aW9uIElGIGluZm8gaXMgcHJpbnRlZCBmb3IgcGFzc2luZyBhc3NlcnRpb25zIiApOworICAgIFJFUVVJUkUoIHRydWUgKTsKKyAgICB1bnNjb3BlZF9pbmZvKCAidGhpcyBNQVkgYmUgc2VlbiBvbmx5IGZvciB0aGUgU0VDT05EIGFzc2VydGlvbiBJRiBpbmZvIGlzIHByaW50ZWQgZm9yIHBhc3NpbmcgYXNzZXJ0aW9ucyIgKTsKKyAgICBSRVFVSVJFKCB0cnVlICk7CisgICAgdW5zY29wZWRfaW5mbyggInRoaXMgU0hPVUxEIGJlIHNlZW4iICk7CisgICAgUkVRVUlSRSggZmFsc2UgKTsKK30KKworVEVTVF9DQVNFKCAicHJpbnRzIHVuc2NvcGVkIGluZm8gb25seSBmb3IgdGhlIGZpcnN0IGFzc2VydGlvbiIsICJbZmFpbGluZ11bLl1bdW5zY29wZWRdW2luZm9dIiApIHsKKyAgICB1bnNjb3BlZF9pbmZvKCAidGhpcyBTSE9VTEQgYmUgc2VlbiBvbmx5IE9OQ0UiICk7CisgICAgQ0hFQ0soIGZhbHNlICk7CisgICAgQ0hFQ0soIHRydWUgKTsKKyAgICB1bnNjb3BlZF9pbmZvKCAidGhpcyBNQVkgYWxzbyBiZSBzZWVuIG9ubHkgT05DRSBJRiBpbmZvIGlzIHByaW50ZWQgZm9yIHBhc3NpbmcgYXNzZXJ0aW9ucyIgKTsKKyAgICBDSEVDSyggdHJ1ZSApOworICAgIENIRUNLKCB0cnVlICk7Cit9CisKK1RFU1RfQ0FTRSggInN0YWNrcyB1bnNjb3BlZCBpbmZvIGluIGxvb3BzIiwgIltmYWlsaW5nXVsuXVt1bnNjb3BlZF1baW5mb10iICkgeworICAgIFVOU0NPUEVEX0lORk8oIkNvdW50IDEgdG8gMy4uLiIpOworICAgIGZvciAoaW50IGkgPSAxOyBpIDw9IDM7IGkrKykgeworICAgICAgICB1bnNjb3BlZF9pbmZvKGkpOworICAgIH0KKyAgICBDSEVDSyggZmFsc2UgKTsKKworICAgIFVOU0NPUEVEX0lORk8oIkNvdW50IDQgdG8gNi4uLiIpOworICAgIGZvciAoaW50IGkgPSA0OyBpIDw9IDY7IGkrKykgeworICAgICAgICB1bnNjb3BlZF9pbmZvKGkpOworICAgIH0KKyAgICBDSEVDSyggZmFsc2UgKTsKK30KKworVEVTVF9DQVNFKCAibWl4IGluZm8sIHVuc2NvcGVkIGluZm8gYW5kIHdhcm5pbmciLCAiW3Vuc2NvcGVkXVtpbmZvXSIgKSB7CisgICAgSU5GTygiaW5mbyIpOworICAgIHVuc2NvcGVkX2luZm8oInVuc2NvcGVkIGluZm8iKTsKKyAgICBXQVJOKCJhbmQgd2FybiBtYXkgbWl4Iik7CisgICAgV0FSTigidGhleSBhcmUgbm90IGNsZWFyZWQgYWZ0ZXIgd2FybmluZ3MiKTsKK30KKworVEVTVF9DQVNFKCAiQ0FQVFVSRSBjYW4gZGVhbCB3aXRoIGNvbXBsZXggZXhwcmVzc2lvbnMiLCAiW21lc3NhZ2VzXVtjYXB0dXJlXSIgKSB7CisgICAgaW50IGEgPSAxOworICAgIGludCBiID0gMjsKKyAgICBpbnQgYyA9IDM7CisgICAgQ0FQVFVSRSggYSwgYiwgYywgYSArIGIsIGErYiwgYyA+IGIsIGEgPT0gMSApOworICAgIFNVQ0NFRUQoKTsKK30KKworI2lmZGVmIF9fY2xhbmdfXworI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YWx1ZSIgLy8gSW4gKDEsIDIpLCB0aGUgIjEiIGlzIHVudXNlZCAuLi4KKyNlbmRpZgorI2lmZGVmIF9fR05VQ19fCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFsdWUiIC8vIEFsbCB0aGUgY29tbWEgb3BlcmF0b3JzIGFyZSBzaWRlLWVmZmVjdCBmcmVlCisjZW5kaWYKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTo0NzA5KSAvLyBjb21tYSBpbiBpbmRleGluZyBvcGVyYXRvcgorI2VuZGlmCisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDI+CitzdHJ1Y3QgaGVscGVyXzE0MzYgeworICAgIGhlbHBlcl8xNDM2KFQxIHQxLCBUMiB0Mik6CisgICAgICAgIHQxeyB0MSB9LAorICAgICAgICB0MnsgdDIgfQorICAgIHt9CisgICAgVDEgdDE7CisgICAgVDIgdDI7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgorc3RkOjpvc3RyZWFtJiBvcGVyYXRvcjw8KHN0ZDo6b3N0cmVhbSYgb3V0LCBoZWxwZXJfMTQzNjxUMSwgVDI+IGNvbnN0JiBoZWxwZXIpIHsKKyAgICBvdXQgPDwgInsgIiA8PCBoZWxwZXIudDEgPDwgIiwgIiA8PCBoZWxwZXIudDIgPDwgIiB9IjsKKyAgICByZXR1cm4gb3V0OworfQorCitURVNUX0NBU0UoIkNBUFRVUkUgY2FuIGRlYWwgd2l0aCBjb21wbGV4IGV4cHJlc3Npb25zIGludm9sdmluZyBjb21tYXMiLCAiW21lc3NhZ2VzXVtjYXB0dXJlXSIpIHsKKyAgICBDQVBUVVJFKHN0ZDo6dmVjdG9yPGludD57MSwgMiwgM31bMCwgMSwgMl0sCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+ezEsIDIsIDN9WygwLCAxKV0sCisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxpbnQ+ezEsIDIsIDN9WzBdKTsKKyAgICBDQVBUVVJFKChoZWxwZXJfMTQzNjxpbnQsIGludD57MTIsIC0xMn0pLAorICAgICAgICAgICAgKGhlbHBlcl8xNDM2PGludCwgaW50PigtMTIsIDEyKSkpOworICAgIENBUFRVUkUoICgxLCAyKSwgKDIsIDMpICk7CisgICAgU1VDQ0VFRCgpOworfQorCisjaWZkZWYgX19jbGFuZ19fCisjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcG9wCisjZW5kaWYKKyNpZmRlZiBfX0dOVUNfXworI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9NaXNjLnRlc3RzLmNwcAppbmRleCA3NTdhOTliLi40ZGU2ZjFhIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL01pc2MudGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvTWlzYy50ZXN0cy5jcHAKQEAgLTYxLDE4ICs2MSwyMyBAQAogc3RhdGljIEF1dG9UZXN0UmVnIGF1dG9UZXN0UmVnOwogQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTCiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgRm9vIHsKKyAgICBzaXplX3Qgc2l6ZSgpIHsgcmV0dXJuIDA7IH0KK307CisKICNlbmRpZgogCiBURVNUX0NBU0UoICJyYW5kb20gU0VDVElPTiB0ZXN0cyIsICJbLl1bc2VjdGlvbnNdW2ZhaWxpbmddIiApIHsKICAgICBpbnQgYSA9IDE7CiAgICAgaW50IGIgPSAyOwogCi0gICAgU0VDVElPTiggInMxIiwgImRvZXNuJ3QgZXF1YWwiICkgeworICAgIFNFQ1RJT04oICJkb2Vzbid0IGVxdWFsIiApIHsKICAgICAgICAgUkVRVUlSRSggYSAhPSBiICk7CiAgICAgICAgIFJFUVVJUkUoIGIgIT0gYSApOwogICAgIH0KIAotICAgIFNFQ1RJT04oICJzMiIsICJub3QgZXF1YWwiICkgeworICAgIFNFQ1RJT04oICJub3QgZXF1YWwiICkgewogICAgICAgICBSRVFVSVJFKCBhICE9IGIpOwogICAgIH0KIH0KQEAgLTgxLDExICs4NiwxMSBAQAogICAgIGludCBhID0gMTsKICAgICBpbnQgYiA9IDI7CiAKLSAgICBTRUNUSU9OKCAiczEiLCAiZG9lc24ndCBlcXVhbCIgKSB7CisgICAgU0VDVElPTiggImRvZXNuJ3QgZXF1YWwiICkgewogICAgICAgICBSRVFVSVJFKCBhICE9IGIgKTsKICAgICAgICAgUkVRVUlSRSggYiAhPSBhICk7CiAKLSAgICAgICAgU0VDVElPTiggInMyIiwgIm5vdCBlcXVhbCIgKSB7CisgICAgICAgIFNFQ1RJT04oICJub3QgZXF1YWwiICkgewogICAgICAgICAgICAgUkVRVUlSRSggYSAhPSBiKTsKICAgICAgICAgfQogICAgIH0KQEAgLTk1LDE1ICsxMDAsMTUgQEAKICAgICBpbnQgYSA9IDE7CiAgICAgaW50IGIgPSAyOwogCi0gICAgU0VDVElPTiggInMxIiwgImRvZXNuJ3QgZXF1YWwiICkgewotICAgICAgICBTRUNUSU9OKCAiczIiLCAiZXF1YWwiICkgeworICAgIFNFQ1RJT04oICJkb2Vzbid0IGVxdWFsIiApIHsKKyAgICAgICAgU0VDVElPTiggImVxdWFsIiApIHsKICAgICAgICAgICAgIFJFUVVJUkUoIGEgPT0gYiApOwogICAgICAgICB9CiAKLSAgICAgICAgU0VDVElPTiggInMzIiwgIm5vdCBlcXVhbCIgKSB7CisgICAgICAgIFNFQ1RJT04oICJub3QgZXF1YWwiICkgewogICAgICAgICAgICAgUkVRVUlSRSggYSAhPSBiICk7CiAgICAgICAgIH0KLSAgICAgICAgU0VDVElPTiggInM0IiwgImxlc3MgdGhhbiIgKSB7CisgICAgICAgIFNFQ1RJT04oICJsZXNzIHRoYW4iICkgewogICAgICAgICAgICAgUkVRVUlSRSggYSA8IGIgKTsKICAgICAgICAgfQogICAgIH0KQEAgLTExMiwxNiArMTE3LDE2IEBACiBURVNUX0NBU0UoICJldmVuIG1vcmUgbmVzdGVkIFNFQ1RJT04gdGVzdHMiLCAiW3NlY3Rpb25zXSIgKSB7CiAgICAgU0VDVElPTiggImMiICkgewogICAgICAgICBTRUNUSU9OKCAiZCAobGVhZikiICkgewotICAgICAgICAgICAgU1VDQ0VFRCgiIik7IC8vIGF2b2lkIGZhaWxpbmcgZHVlIHRvIG5vIHRlc3RzCisgICAgICAgICAgICBTVUNDRUVEKCk7IC8vIGF2b2lkIGZhaWxpbmcgZHVlIHRvIG5vIHRlc3RzCiAgICAgICAgIH0KIAogICAgICAgICBTRUNUSU9OKCAiZSAobGVhZikiICkgewotICAgICAgICAgICAgU1VDQ0VFRCgiIik7IC8vIGF2b2lkIGZhaWxpbmcgZHVlIHRvIG5vIHRlc3RzCisgICAgICAgICAgICBTVUNDRUVEKCk7IC8vIGF2b2lkIGZhaWxpbmcgZHVlIHRvIG5vIHRlc3RzCiAgICAgICAgIH0KICAgICB9CiAKICAgICBTRUNUSU9OKCAiZiAobGVhZikiICkgewotICAgICAgICBTVUNDRUVEKCIiKTsgLy8gYXZvaWQgZmFpbGluZyBkdWUgdG8gbm8gdGVzdHMKKyAgICAgICAgU1VDQ0VFRCgpOyAvLyBhdm9pZCBmYWlsaW5nIGR1ZSB0byBubyB0ZXN0cwogICAgIH0KIH0KIApAQCAtMTI5LDkgKzEzNCw3IEBACiAgICAgaW50IGEgPSAxOwogCiAgICAgZm9yKCBpbnQgYiA9IDA7IGIgPCAxMDsgKytiICkgewotICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3NzOwotICAgICAgICBvc3MgPDwgImIgaXMgY3VycmVudGx5OiAiIDw8IGI7Ci0gICAgICAgIFNFQ1RJT04oICJzMSIsIG9zcy5zdHIoKSApIHsKKyAgICAgICAgRFlOQU1JQ19TRUNUSU9OKCAiYiBpcyBjdXJyZW50bHk6ICIgPDwgYiApIHsKICAgICAgICAgICAgIENIRUNLKCBiID4gYSApOwogICAgICAgICB9CiAgICAgfQpAQCAtMTc0LDExICsxNzcsMTEgQEAKIH0KIAogVEVTVF9DQVNFKCAieG1sZW50aXR5Y2hlY2siICkgewotICAgIFNFQ1RJT04oICJlbWJlZGRlZCB4bWwiLCAiPHRlc3Q+aXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIGVtYmVkIHhtbCBjaGFyYWN0ZXJzLCBzdWNoIGFzIDwsIFwiIG9yICYsIG9yIGV2ZW4gd2hvbGUgPHhtbD5kb2N1bWVudHM8L3htbD4gd2l0aGluIGFuIGF0dHJpYnV0ZTwvdGVzdD4iICkgewotICAgICAgICBTVUNDRUVEKCIiKTsgLy8gV2UgbmVlZCB0aGlzIGhlcmUgdG8gc3RvcCBpdCBmYWlsaW5nIGR1ZSB0byBubyB0ZXN0cworICAgIFNFQ1RJT04oICJlbWJlZGRlZCB4bWw6IDx0ZXN0Pml0IHNob3VsZCBiZSBwb3NzaWJsZSB0byBlbWJlZCB4bWwgY2hhcmFjdGVycywgc3VjaCBhcyA8LCBcIiBvciAmLCBvciBldmVuIHdob2xlIDx4bWw+ZG9jdW1lbnRzPC94bWw+IHdpdGhpbiBhbiBhdHRyaWJ1dGU8L3Rlc3Q+IiApIHsKKyAgICAgICAgU1VDQ0VFRCgpOyAvLyBXZSBuZWVkIHRoaXMgaGVyZSB0byBzdG9wIGl0IGZhaWxpbmcgZHVlIHRvIG5vIHRlc3RzCiAgICAgfQotICAgIFNFQ1RJT04oICJlbmNvZGVkIGNoYXJzIiwgInRoZXNlIHNob3VsZCBhbGwgYmUgZW5jb2RlZDogJiYmXCJcIlwiPDw8JlwiPDwmXCIiICkgewotICAgICAgICBTVUNDRUVEKCIiKTsgLy8gV2UgbmVlZCB0aGlzIGhlcmUgdG8gc3RvcCBpdCBmYWlsaW5nIGR1ZSB0byBubyB0ZXN0cworICAgIFNFQ1RJT04oICJlbmNvZGVkIGNoYXJzOiB0aGVzZSBzaG91bGQgYWxsIGJlIGVuY29kZWQ6ICYmJlwiXCJcIjw8PCZcIjw8JlwiIiApIHsKKyAgICAgICAgU1VDQ0VFRCgpOyAvLyBXZSBuZWVkIHRoaXMgaGVyZSB0byBzdG9wIGl0IGZhaWxpbmcgZHVlIHRvIG5vIHRlc3RzCiAgICAgfQogfQogCkBAIC0yNjMsMTAgKzI2Niw1OSBAQAogICAgIH0KIH0KIAorVEVNUExBVEVfVEVTVF9DQVNFKCAiVGVtcGxhdGVUZXN0OiB2ZWN0b3JzIGNhbiBiZSBzaXplZCBhbmQgcmVzaXplZCIsICJbdmVjdG9yXVt0ZW1wbGF0ZV0iLCBpbnQsIGZsb2F0LCBzdGQ6OnN0cmluZywgKHN0ZDo6dHVwbGU8aW50LGZsb2F0PikgKSB7CisKKyAgICBzdGQ6OnZlY3RvcjxUZXN0VHlwZT4gdiggNSApOworCisgICAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApOworICAgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA+PSA1ICk7CisKKyAgICBTRUNUSU9OKCAicmVzaXppbmcgYmlnZ2VyIGNoYW5nZXMgc2l6ZSBhbmQgY2FwYWNpdHkiICkgeworICAgICAgICB2LnJlc2l6ZSggMTAgKTsKKworICAgICAgICBSRVFVSVJFKCB2LnNpemUoKSA9PSAxMCApOworICAgICAgICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gMTAgKTsKKyAgICB9CisgICAgU0VDVElPTiggInJlc2l6aW5nIHNtYWxsZXIgY2hhbmdlcyBzaXplIGJ1dCBub3QgY2FwYWNpdHkiICkgeworICAgICAgICB2LnJlc2l6ZSggMCApOworCisgICAgICAgIFJFUVVJUkUoIHYuc2l6ZSgpID09IDAgKTsKKyAgICAgICAgUkVRVUlSRSggdi5jYXBhY2l0eSgpID49IDUgKTsKKworICAgICAgICBTRUNUSU9OKCAiV2UgY2FuIHVzZSB0aGUgJ3N3YXAgdHJpY2snIHRvIHJlc2V0IHRoZSBjYXBhY2l0eSIgKSB7CisgICAgICAgICAgICBzdGQ6OnZlY3RvcjxUZXN0VHlwZT4gZW1wdHk7CisgICAgICAgICAgICBlbXB0eS5zd2FwKCB2ICk7CisKKyAgICAgICAgICAgIFJFUVVJUkUoIHYuY2FwYWNpdHkoKSA9PSAwICk7CisgICAgICAgIH0KKyAgICB9CisgICAgU0VDVElPTiggInJlc2VydmluZyBiaWdnZXIgY2hhbmdlcyBjYXBhY2l0eSBidXQgbm90IHNpemUiICkgeworICAgICAgICB2LnJlc2VydmUoIDEwICk7CisKKyAgICAgICAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApOworICAgICAgICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gMTAgKTsKKyAgICB9CisgICAgU0VDVElPTiggInJlc2VydmluZyBzbWFsbGVyIGRvZXMgbm90IGNoYW5nZSBzaXplIG9yIGNhcGFjaXR5IiApIHsKKyAgICAgICAgdi5yZXNlcnZlKCAwICk7CisKKyAgICAgICAgUkVRVUlSRSggdi5zaXplKCkgPT0gNSApOworICAgICAgICBSRVFVSVJFKCB2LmNhcGFjaXR5KCkgPj0gNSApOworICAgIH0KK30KKworVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIkEgVGVtcGxhdGUgcHJvZHVjdCB0ZXN0IGNhc2UiLCAiW3RlbXBsYXRlXVtwcm9kdWN0XSIsIChzdGQ6OnZlY3RvciwgRm9vKSwgKGludCwgZmxvYXQpKSB7CisgICAgVGVzdFR5cGUgeDsKKyAgICBSRVFVSVJFKHguc2l6ZSgpID09IDApOworfQorCitURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSgiUHJvZHVjdCB3aXRoIGRpZmZlcmluZyBhcml0aWVzIiwgIlt0ZW1wbGF0ZV1bcHJvZHVjdF0iLCBzdGQ6OnR1cGxlLCAoaW50LCAoaW50LCBkb3VibGUpLCAoaW50LCBkb3VibGUsIGZsb2F0KSkpIHsKKyAgICBSRVFVSVJFKHN0ZDo6dHVwbGVfc2l6ZTxUZXN0VHlwZT46OnZhbHVlID49IDEpOworfQorCiAvLyBodHRwczovL2dpdGh1Yi5jb20vcGhpbHNxdWFyZWQvQ2F0Y2gvaXNzdWVzLzE2NgogVEVTVF9DQVNFKCJBIGNvdXBsZSBvZiBuZXN0ZWQgc2VjdGlvbnMgZm9sbG93ZWQgYnkgYSBmYWlsdXJlIiwgIltmYWlsaW5nXVsuXSIpIHsKLSAgICBTRUNUSU9OKCJPdXRlciIsICIiKQotICAgICAgICBTRUNUSU9OKCJJbm5lciIsICIiKQorICAgIFNFQ1RJT04oIk91dGVyIikKKyAgICAgICAgU0VDVElPTigiSW5uZXIiKQogICAgICAgICAgICAgU1VDQ0VFRCgidGhhdCdzIG5vdCBmbHlpbmcgLSB0aGF0J3MgZmFpbGluZyBpbiBzdHlsZSIpOwogCiAgICAgRkFJTCgidG8gaW5maW5pdHkgYW5kIGJleW9uZCIpOwpAQCAtMjc0LDcgKzMyNiw3IEBACiAKIFRFU1RfQ0FTRSgibm90IGFsbG93ZWQiLCAiWyF0aHJvd3NdIikgewogICAgIC8vIFRoaXMgdGVzdCBjYXNlIHNob3VsZCBub3QgYmUgaW5jbHVkZWQgaWYgeW91IHJ1biB3aXRoIC1lIG9uIHRoZSBjb21tYW5kIGxpbmUKLSAgICBTVUNDRUVEKCAiIiApOworICAgIFNVQ0NFRUQoKTsKIH0KIAogLy9URVNUX0NBU0UoICJJcyBiaWcgZW5kaWFuIiApIHsKQEAgLTI5MCw2ICszNDIsNyBAQAogfQogCiAKKyNpZmRlZiBDQVRDSF9DT05GSUdfV0NIQVIKIFRFU1RfQ0FTRSggInRvU3RyaW5nIG9uIGNvbnN0IHdjaGFyX3QgY29uc3QgcG9pbnRlciByZXR1cm5zIHRoZSBzdHJpbmcgY29udGVudHMiLCAiW3RvU3RyaW5nXSIgKSB7CiAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiBjb25zdCBzID0gTCJ3aWRlIGxvYWQiOwogICAgICAgICBzdGQ6OnN0cmluZyByZXN1bHQgPSA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggcyApOwpAQCAtMzAzLDcgKzM1Niw3IEBACiB9CiAKIFRFU1RfQ0FTRSggInRvU3RyaW5nIG9uIHdjaGFyX3QgY29uc3QgcG9pbnRlciByZXR1cm5zIHRoZSBzdHJpbmcgY29udGVudHMiLCAiW3RvU3RyaW5nXSIgKSB7Ci0gICAgICAgIGF1dG8gY29uc3QgcyA9IGNvbnN0X2Nhc3Q8d2NoYXJfdCogY29uc3Q+KCBMIndpZGUgbG9hZCIgKTsKKyAgICAgICAgYXV0byBjb25zdCBzID0gY29uc3RfY2FzdDx3Y2hhcl90Kj4oIEwid2lkZSBsb2FkIiApOwogICAgICAgICBzdGQ6OnN0cmluZyByZXN1bHQgPSA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggcyApOwogICAgICAgICBDSEVDSyggcmVzdWx0ID09ICJcIndpZGUgbG9hZFwiIiApOwogfQpAQCAtMzEzLDYgKzM2Niw3IEBACiAgICAgICAgIHN0ZDo6c3RyaW5nIHJlc3VsdCA9IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBzICk7CiAgICAgICAgIENIRUNLKCByZXN1bHQgPT0gIlwid2lkZSBsb2FkXCIiICk7CiB9CisjZW5kaWYKIAogVEVTVF9DQVNFKCAibG9uZyBsb25nIiApIHsKICAgICBsb25nIGxvbmcgbCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8bG9uZyBsb25nPjo6bWF4KCk7CkBAIC0zNDgsNCArNDAyLDkgQEAKICAgICB9CiB9CiAKK1RFU1RfQ0FTRSggIiMxMTc1IC0gSGlkZGVuIFRlc3QiLCAiWy5dIiApIHsKKyAgLy8gSnVzdCBmb3IgY2hlY2tpbmcgdGhhdCBoaWRkZW4gdGVzdCBpcyBub3QgbGlzdGVkIGJ5IGRlZmF1bHQKKyAgU1VDQ0VFRCgpOworfQorCiB9fSAvLyBuYW1lc3BhY2UgTWlzY1Rlc3RzCmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RvU3RyaW5nR2VuZXJhbC50ZXN0cy5jcHAKaW5kZXggOGFiMzMyNC4uYWNkZGYyMiAxMDA2NDQKLS0tIGEvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Ub1N0cmluZ0dlbmVyYWwudGVzdHMuY3BwCisrKyBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVG9TdHJpbmdHZW5lcmFsLnRlc3RzLmNwcApAQCAtMTE1LDMgKzExNSw2MiBAQAogICAgICAgICBSRVFVSVJFKENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShhcnIpID09IFIiKHsgeyAiMToxIiwgIjE6MiIsICIxOjMiIH0sIHsgIjI6MSIsICIyOjIiIH0gfSkiKTsKICAgICB9CiB9CisKKyNpZmRlZiBDQVRDSF9DT05GSUdfQ1BQMTdfU1RSSU5HX1ZJRVcKKworVEVTVF9DQVNFKCJTdHJpbmcgdmlld3MgYXJlIHN0cmluZ2lmaWVkIGxpa2Ugb3RoZXIgc3RyaW5ncyIsICJbdG9TdHJpbmddW2FwcHJvdmFsc10iKSB7CisgICAgc3RkOjpzdHJpbmdfdmlldyB2aWV3eyJhYmMifTsKKyAgICBDSEVDSyhDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodmlldykgPT0gUiIoImFiYyIpIik7CisKKyAgICBzdGQ6OnN0cmluZ192aWV3IGFycltdIHsgdmlldyB9OworICAgIENIRUNLKENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShhcnIpID09IFIiKHsgImFiYyIgfSkiKTsKK30KKworI2VuZGlmCisKK25hbWVzcGFjZSB7CisKK3N0cnVjdCBXaGF0RXhjZXB0aW9uIDogc3RkOjpleGNlcHRpb24geworICAgIGNoYXIgY29uc3QqIHdoYXQoKSBjb25zdCBub2V4Y2VwdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiAiVGhpcyBleGNlcHRpb24gaGFzIG92ZXJyaWRlbiB3aGF0KCkgbWV0aG9kIjsKKyAgICB9CisgICAgfldoYXRFeGNlcHRpb24oKSBvdmVycmlkZTsKK307CisKK3N0cnVjdCBPcGVyYXRvckV4Y2VwdGlvbiA6IHN0ZDo6ZXhjZXB0aW9uIHsKKyAgICB+T3BlcmF0b3JFeGNlcHRpb24oKSBvdmVycmlkZTsKK307CisKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG91dCwgT3BlcmF0b3JFeGNlcHRpb24gY29uc3QmKSB7CisgICAgb3V0IDw8ICJPcGVyYXRvckV4Y2VwdGlvbiI7CisgICAgcmV0dXJuIG91dDsKK30KKworc3RydWN0IFN0cmluZ01ha2VyRXhjZXB0aW9uIDogc3RkOjpleGNlcHRpb24geworICAgIH5TdHJpbmdNYWtlckV4Y2VwdGlvbigpIG92ZXJyaWRlOworfTsKKworfSAvLyBlbmQgYW5vbnltb3VzIG5hbWVzcGFjZQorCituYW1lc3BhY2UgQ2F0Y2ggewordGVtcGxhdGUgPD4KK3N0cnVjdCBTdHJpbmdNYWtlcjxTdHJpbmdNYWtlckV4Y2VwdGlvbj4geworICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KFN0cmluZ01ha2VyRXhjZXB0aW9uIGNvbnN0JikgeworICAgICAgICByZXR1cm4gIlN0cmluZ01ha2VyRXhjZXB0aW9uIjsKKyAgICB9Cit9OworfQorCisvLyBBdm9pZCAtV3dlYWstdGFibGVzCitXaGF0RXhjZXB0aW9uOjp+V2hhdEV4Y2VwdGlvbigpID0gZGVmYXVsdDsKK09wZXJhdG9yRXhjZXB0aW9uOjp+T3BlcmF0b3JFeGNlcHRpb24oKSA9IGRlZmF1bHQ7CitTdHJpbmdNYWtlckV4Y2VwdGlvbjo6flN0cmluZ01ha2VyRXhjZXB0aW9uKCkgPSBkZWZhdWx0OworCisKKworCitURVNUX0NBU0UoIkV4Y2VwdGlvbiBhcyBhIHZhbHVlIChlLmcuIGluIFJFUVVJUkVfVEhST1dTX01BVENIRVMpIGNhbiBiZSBzdHJpbmdpZmllZCIsICJbdG9TdHJpbmddW2V4Y2VwdGlvbl0iKSB7CisgICAgUkVRVUlSRSg6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShXaGF0RXhjZXB0aW9ue30pID09ICJUaGlzIGV4Y2VwdGlvbiBoYXMgb3ZlcnJpZGVuIHdoYXQoKSBtZXRob2QiKTsKKyAgICBSRVFVSVJFKDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KE9wZXJhdG9yRXhjZXB0aW9ue30pID09ICJPcGVyYXRvckV4Y2VwdGlvbiIpOworICAgIFJFUVVJUkUoOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoU3RyaW5nTWFrZXJFeGNlcHRpb257fSkgPT0gIlN0cmluZ01ha2VyRXhjZXB0aW9uIik7Cit9CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RvU3RyaW5nT3B0aW9uYWwudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Ub1N0cmluZ09wdGlvbmFsLnRlc3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzg1NzlkCi0tLSAvZGV2L251bGwKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Ub1N0cmluZ09wdGlvbmFsLnRlc3RzLmNwcApAQCAtMCwwICsxLDIzIEBACisjZGVmaW5lIENBVENIX0NPTkZJR19FTkFCTEVfT1BUSU9OQUxfU1RSSU5HTUFLRVIKKyNpbmNsdWRlICJjYXRjaC5ocHAiCisKKyNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19DUFAxN19PUFRJT05BTCkKKworVEVTVF9DQVNFKCAic3RkOjpvcHRpb25hbDxpbnQ+IC0+IHRvU3RyaW5nIiwgIlt0b1N0cmluZ11bb3B0aW9uYWxdW2FwcHJvdmFsc10iICkgeworICAgIHVzaW5nIHR5cGUgPSBzdGQ6Om9wdGlvbmFsPGludD47CisgICAgUkVRVUlSRSggInsgfSIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHR5cGV7fSApICk7CisgICAgUkVRVUlSRSggIjAiID09IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCB0eXBleyAwIH0gKSApOworfQorCitURVNUX0NBU0UoICJzdGQ6Om9wdGlvbmFsPHN0ZDo6c3RyaW5nPiAtPiB0b1N0cmluZyIsICJbdG9TdHJpbmddW29wdGlvbmFsXVthcHByb3ZhbHNdIiApIHsKKyAgICB1c2luZyB0eXBlID0gc3RkOjpvcHRpb25hbDxzdGQ6OnN0cmluZz47CisgICAgUkVRVUlSRSggInsgfSIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIHR5cGV7fSApICk7CisgICAgUkVRVUlSRSggIlwiYWJjXCIiID09IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCB0eXBleyAiYWJjIiB9ICkgKTsKK30KKworVEVTVF9DQVNFKCAic3RkOjp2ZWN0b3I8c3RkOjpvcHRpb25hbDxpbnQ+ID4gLT4gdG9TdHJpbmciLCAiW3RvU3RyaW5nXVtvcHRpb25hbF1bYXBwcm92YWxzXSIgKSB7CisgICAgdXNpbmcgdHlwZSA9IHN0ZDo6dmVjdG9yPHN0ZDo6b3B0aW9uYWw8aW50PiA+OworICAgIFJFUVVJUkUoICJ7IDAsIHsgfSwgMiB9IiA9PSA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggdHlwZXsgMCwge30sIDIgfSApICk7Cit9CisKKyNlbmRpZiAvLyBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfT1BUSU9OQUwKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVG9TdHJpbmdWYXJpYW50LnRlc3RzLmNwcCBiL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVG9TdHJpbmdWYXJpYW50LnRlc3RzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDQ4ZTE1Ci0tLSAvZGV2L251bGwKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Ub1N0cmluZ1ZhcmlhbnQudGVzdHMuY3BwCkBAIC0wLDAgKzEsOTEgQEAKKyNkZWZpbmUgQ0FUQ0hfQ09ORklHX0VOQUJMRV9WQVJJQU5UX1NUUklOR01BS0VSCisjaW5jbHVkZSAiY2F0Y2guaHBwIgorCisjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfVkFSSUFOVCkgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUykKKworI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2YXJpYW50PgorCisvLyBXZSBuZWVkIDIgdHlwZXMgd2l0aCBub24tdHJpdmlhbCBjb3BpZXMvbW92ZXMKK3N0cnVjdCBNeVR5cGUxIHsKKyAgICBNeVR5cGUxKCkgPSBkZWZhdWx0OworICAgIE15VHlwZTEoTXlUeXBlMSBjb25zdCYpIHsgdGhyb3cgMTsgfQorICAgIE15VHlwZTEmIG9wZXJhdG9yPShNeVR5cGUxIGNvbnN0JikgeyB0aHJvdyAzOyB9Cit9Oworc3RydWN0IE15VHlwZTIgeworICAgIE15VHlwZTIoKSA9IGRlZmF1bHQ7CisgICAgTXlUeXBlMihNeVR5cGUyIGNvbnN0JikgeyB0aHJvdyAyOyB9CisgICAgTXlUeXBlMiYgb3BlcmF0b3I9KE15VHlwZTIgY29uc3QmKSB7IHRocm93IDQ7IH0KK307CisKK1RFU1RfQ0FTRSggInZhcmlhbnQ8c3RkOjptb25vc3RhdGU+IiwgIlt0b1N0cmluZ11bdmFyaWFudF1bYXBwcm92YWxzXSIpCit7CisgICAgdXNpbmcgdHlwZSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om1vbm9zdGF0ZT47CisgICAgQ0hFQ0soICJ7IH0iID09IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHR5cGV7fSkgKTsKKyAgICB0eXBlIHZhbHVlIHt9OworICAgIENIRUNLKCAieyB9IiA9PSA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2YWx1ZSkgKTsKKyAgICBDSEVDSyggInsgfSIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoc3RkOjpnZXQ8MD4odmFsdWUpKSApOworfQorCitURVNUX0NBU0UoICJ2YXJpYW50PGludD4iLCAiW3RvU3RyaW5nXVt2YXJpYW50XVthcHByb3ZhbHNdIikKK3sKKyAgICB1c2luZyB0eXBlID0gc3RkOjp2YXJpYW50PGludD47CisgICAgQ0hFQ0soICIwIiA9PSA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh0eXBlezB9KSApOworfQorCitURVNUX0NBU0UoICJ2YXJpYW50PGZsb2F0LCBpbnQ+IiwgIlt0b1N0cmluZ11bdmFyaWFudF1bYXBwcm92YWxzXSIpCit7CisgICAgdXNpbmcgdHlwZSA9IHN0ZDo6dmFyaWFudDxmbG9hdCwgaW50PjsKKyAgICBDSEVDSyggIjAuNWYiID09IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHR5cGV7MC41Zn0pICk7CisgICAgQ0hFQ0soICIwIiA9PSA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh0eXBlezB9KSApOworfQorCitURVNUX0NBU0UoICJ2YXJpYW50IC0tIHZhbHVlbGVzcy1ieS1leGNlcHRpb24iLCAiW3RvU3RyaW5nXVt2YXJpYW50XVthcHByb3ZhbHNdIiApIHsKKyAgICB1c2luZyB0eXBlID0gc3RkOjp2YXJpYW50PE15VHlwZTEsIE15VHlwZTI+OworCisgICAgdHlwZSB2YWx1ZTsKKyAgICBSRVFVSVJFX1RIUk9XU19BUyh2YWx1ZS5lbXBsYWNlPE15VHlwZTI+KE15VHlwZTJ7fSksIGludCk7CisgICAgUkVRVUlSRSh2YWx1ZS52YWx1ZWxlc3NfYnlfZXhjZXB0aW9uKCkpOworICAgIENIRUNLKCJ7dmFsdWVsZXNzIHZhcmlhbnR9IiA9PSA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2YWx1ZSkpOworfQorCisKK1RFU1RfQ0FTRSggInZhcmlhbnQ8c3RyaW5nLCBpbnQ+IiwgIlt0b1N0cmluZ11bdmFyaWFudF1bYXBwcm92YWxzXSIpCit7CisgICAgdXNpbmcgdHlwZSA9IHN0ZDo6dmFyaWFudDxzdGQ6OnN0cmluZywgaW50PjsKKyAgICBDSEVDSyggIlwiZm9vXCIiID09IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHR5cGV7ImZvbyJ9KSApOworICAgIENIRUNLKCAiMCIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodHlwZXswfSkgKTsKK30KKworVEVTVF9DQVNFKCAidmFyaWFudDx2YXJpYW50PGZsb2F0LCBpbnQ+LCBzdHJpbmc+IiwgIlt0b1N0cmluZ11bdmFyaWFudF1bYXBwcm92YWxzXSIpCit7CisgICAgdXNpbmcgaW5uZXIgPSBzdGQ6OnZhcmlhbnQ8TXlUeXBlMSwgZmxvYXQsIGludD47CisgICAgdXNpbmcgdHlwZSA9IHN0ZDo6dmFyaWFudDxpbm5lciwgc3RkOjpzdHJpbmc+OworICAgIENIRUNLKCAiMC41ZiIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodHlwZXswLjVmfSkgKTsKKyAgICBDSEVDSyggIjAiID09IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHR5cGV7MH0pICk7CisgICAgQ0hFQ0soICJcImZvb1wiIiA9PSA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh0eXBleyJmb28ifSkgKTsKKworICAgIFNFQ1RJT04oInZhbHVlbGVzcyBuZXN0ZWQgdmFyaWFudCIpIHsKKyAgICAgICAgdHlwZSB2YWx1ZSA9IGlubmVyezAuNWZ9OworICAgICAgICBSRVFVSVJFKCBzdGQ6OmhvbGRzX2FsdGVybmF0aXZlPGlubmVyPih2YWx1ZSkgKTsKKyAgICAgICAgUkVRVUlSRSggc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxmbG9hdD4oc3RkOjpnZXQ8aW5uZXI+KHZhbHVlKSkgKTsKKworICAgICAgICBSRVFVSVJFX1RIUk9XU19BUyggc3RkOjpnZXQ8MD4odmFsdWUpLmVtcGxhY2U8TXlUeXBlMT4oTXlUeXBlMXt9KSwgaW50ICk7CisKKyAgICAgICAgLy8gb3V0ZXIgdmFyaWFudCBpcyBzdGlsbCB2YWxpZCBhbmQgY29udGFpbnMgaW5uZXIKKyAgICAgICAgUkVRVUlSRSggc3RkOjpob2xkc19hbHRlcm5hdGl2ZTxpbm5lcj4odmFsdWUpICk7CisgICAgICAgIC8vIGlubmVyIHZhcmlhbnQgaXMgdmFsdWVsZXNzCisgICAgICAgIFJFUVVJUkUoIHN0ZDo6Z2V0PGlubmVyPih2YWx1ZSkudmFsdWVsZXNzX2J5X2V4Y2VwdGlvbigpICk7CisgICAgICAgIENIRUNLKCAie3ZhbHVlbGVzcyB2YXJpYW50fSIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodmFsdWUpICk7CisgICAgfQorfQorCitURVNUX0NBU0UoICJ2YXJpYW50PG51bGxwdHIsaW50LGNvbnN0IGNoYXIgKj4iLCAiW3RvU3RyaW5nXVt2YXJpYW50XVthcHByb3ZhbHNdIiApCit7CisgICAgdXNpbmcgdHlwZSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCxpbnQsY29uc3QgY2hhciAqPjsKKyAgICBDSEVDSyggIm51bGxwdHIiID09IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHR5cGV7bnVsbHB0cn0pICk7CisgICAgQ0hFQ0soICI0MiIgPT0gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkodHlwZXs0Mn0pICk7CisgICAgQ0hFQ0soICJcIkNhdGNoIG1lXCIiID09IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHR5cGV7IkNhdGNoIG1lIn0pICk7Cit9CisKKyNlbmRpZiAvLyBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfVkFSSUFOVApkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Ub1N0cmluZ1ZlY3Rvci50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcAppbmRleCAxOGU1NmMwLi42M2I0OWU1IDEwMDY0NAotLS0gYS9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcAorKysgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RvU3RyaW5nVmVjdG9yLnRlc3RzLmNwcApAQCAtMiw3ICsyLDcgQEAKICNpbmNsdWRlIDx2ZWN0b3I+CiAjaW5jbHVkZSA8YXJyYXk+CiAKLS8vIHZlZGN0b3IKKy8vIHZlY3RvcgogVEVTVF9DQVNFKCAidmVjdG9yPGludD4gLT4gdG9TdHJpbmciLCAiW3RvU3RyaW5nXVt2ZWN0b3JdIiApCiB7CiAgICAgc3RkOjp2ZWN0b3I8aW50PiB2djsKZGlmZiAtLWdpdCBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVG9TdHJpbmdXaGljaC50ZXN0cy5jcHAgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RvU3RyaW5nV2hpY2gudGVzdHMuY3BwCmluZGV4IGZlOTYxODYuLmNkNGExNTEgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVG9TdHJpbmdXaGljaC50ZXN0cy5jcHAKKysrIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Ub1N0cmluZ1doaWNoLnRlc3RzLmNwcApAQCAtMSwxMyArMSwzNiBAQAotI2luY2x1ZGUgImNhdGNoLmhwcCIKIC8qCi0gICAgRGVtb25zdHJhdGUgd2hpY2ggdmVyc2lvbiBvZiB0b1N0cmluZy9TdHJpbmdNYWtlciBpcyBiZWluZyB1c2VkCi0gICAgZm9yIHZhcmlvdXMgdHlwZXMKLSovCisgKiBEZW1vbnN0cmF0ZSB3aGljaCB2ZXJzaW9uIG9mIHRvU3RyaW5nL1N0cmluZ01ha2VyIGlzIGJlaW5nIHVzZWQKKyAqIGZvciB2YXJpb3VzIHR5cGVzCisgKi8KIAorLy8gUmVwbGFjZSBmYWxsYmFjayBzdHJpbmdpZmllciBmb3IgdGhpcyBUVQorLy8gV2Ugc2hvdWxkIGF2b2lkIE9EUiB2aW9sYXRpb25zIGJlY2F1c2UgdGhlc2Ugc3BlY2lmaWMgdHlwZXMgYXJlbid0CisvLyBwcmVzZW50IGluIGRpZmZlcmVudCBUVXMKKyNpbmNsdWRlIDxzdHJpbmc+Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK3N0ZDo6c3RyaW5nIGZhbGxiYWNrU3RyaW5naWZpZXIoVCBjb25zdCYpIHsKKyAgICByZXR1cm4gInsgISEhIH0iOworfQorCisjZGVmaW5lIENBVENIX0NPTkZJR19GQUxMQkFDS19TVFJJTkdJRklFUiBmYWxsYmFja1N0cmluZ2lmaWVyCisjaW5jbHVkZSAiY2F0Y2guaHBwIgorCisKKworI2lmIGRlZmluZWQoX19HTlVDX18pCisvLyBUaGlzIGhhcyB0byBiZSBsZWZ0IGVuYWJsZWQgdW50aWwgZW5kIG9mIHRoZSBUVSwgYmVjYXVzZSB0aGUgR0NDCisvLyBmcm9udGVuZCByZXBvcnRzIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiBvcywgY29uc3QgaGFzX21ha2VyX2FuZF9vcGVyYXRvciYpCisvLyBhcyB1bnVzZWQgYW55d2F5CisjICAgIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC1mdW5jdGlvbiIKKyNlbmRpZgorCituYW1lc3BhY2UgewogCiBzdHJ1Y3QgaGFzX29wZXJhdG9yIHsgfTsKIHN0cnVjdCBoYXNfbWFrZXIge307CiBzdHJ1Y3QgaGFzX21ha2VyX2FuZF9vcGVyYXRvciB7fTsKK3N0cnVjdCBoYXNfbmVpdGhlciB7fTsKK3N0cnVjdCBoYXNfdGVtcGxhdGVfb3BlcmF0b3Ige307CiAKIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mIG9zLCBjb25zdCBoYXNfb3BlcmF0b3ImKSB7CiAgICAgb3MgPDwgIm9wZXJhdG9yPDwoIGhhc19vcGVyYXRvciApIjsKQEAgLTE5LDYgKzQyLDE0IEBACiAgICAgcmV0dXJuIG9zOwogfQogCit0ZW1wbGF0ZSA8dHlwZW5hbWUgU3RyZWFtVD4KK1N0cmVhbVQmIG9wZXJhdG9yPDwoU3RyZWFtVCYgb3MsIGNvbnN0IGhhc190ZW1wbGF0ZV9vcGVyYXRvciYpIHsKKyAgICBvcyA8PCAib3BlcmF0b3I8PCggaGFzX3RlbXBsYXRlX29wZXJhdG9yICkiOworICAgIHJldHVybiBvczsKK30KKworfSAvLyBlbmQgYW5vbnltb3VzIG5hbWVzcGFjZQorCiBuYW1lc3BhY2UgQ2F0Y2ggewogICAgIHRlbXBsYXRlPD4KICAgICBzdHJ1Y3QgU3RyaW5nTWFrZXI8aGFzX21ha2VyPiB7CkBAIC00NywzMyArNzgsNDMgQEAKIH0KIAogLy8gQ2FsbCB0aGUgc3RyaW5nbWFrZXIKLVRFU1RfQ0FTRSggInN0cmluZ2lmeSggaGFzX21ha2VyX2FuZF90b1N0cmluZyApIiwgIlsuXVt0b1N0cmluZ10iICkgeworVEVTVF9DQVNFKCAic3RyaW5naWZ5KCBoYXNfbWFrZXJfYW5kX29wZXJhdG9yICkiLCAiW3RvU3RyaW5nXSIgKSB7CiAgICAgaGFzX21ha2VyX2FuZF9vcGVyYXRvciBpdGVtOwogICAgIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCBpdGVtICkgPT0gIlN0cmluZ01ha2VyPGhhc19tYWtlcl9hbmRfb3BlcmF0b3I+IiApOwogfQogCitURVNUX0NBU0UoInN0cmluZ2lmeSggaGFzX25laXRoZXIgKSIsICJbdG9TdHJpbmddIikgeworICAgIGhhc19uZWl0aGVyIGl0ZW07CisgICAgUkVRVUlSRSggOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoaXRlbSkgPT0gInsgISEhIH0iICk7Cit9CisKKy8vIENhbGwgdGhlIHRlbXBsYXRlZCBvcGVyYXRvcgorVEVTVF9DQVNFKCAic3RyaW5naWZ5KCBoYXNfdGVtcGxhdGVfb3BlcmF0b3IgKSIsICJbdG9TdHJpbmddIiApIHsKKyAgICBoYXNfdGVtcGxhdGVfb3BlcmF0b3IgaXRlbTsKKyAgICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggaXRlbSApID09ICJvcGVyYXRvcjw8KCBoYXNfdGVtcGxhdGVfb3BlcmF0b3IgKSIgKTsKK30KKworCiAvLyBWZWN0b3JzLi4uCiAKLS8vIERvbid0IHJ1biB0aGlzIGluIGFwcHJvdmFsIHRlc3RzIGFzIGl0IGlzIHNlbnNpdGl2ZSB0byB0d28gcGhhc2UgbG9va3VwIGRpZmZlcmVuY2VzCi1URVNUX0NBU0UoICJ0b1N0cmluZyggdmVjdG9yczxoYXNfb3BlcmF0b3I+ICkiLCAiW3RvU3RyaW5nXSIgKSB7CitURVNUX0NBU0UoICJzdHJpbmdpZnkoIHZlY3RvcnM8aGFzX29wZXJhdG9yPiApIiwgIlt0b1N0cmluZ10iICkgewogICAgIHN0ZDo6dmVjdG9yPGhhc19vcGVyYXRvcj4gdigxKTsKICAgICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggdiApID09ICJ7IG9wZXJhdG9yPDwoIGhhc19vcGVyYXRvciApIH0iICk7CiB9CiAKLVRFU1RfQ0FTRSggInRvU3RyaW5nKCB2ZWN0b3JzPGhhc19tYWtlcj4gKSIsICJbdG9TdHJpbmddIiApIHsKK1RFU1RfQ0FTRSggInN0cmluZ2lmeSggdmVjdG9yczxoYXNfbWFrZXI+ICkiLCAiW3RvU3RyaW5nXSIgKSB7CiAgICAgc3RkOjp2ZWN0b3I8aGFzX21ha2VyPiB2KDEpOwogICAgIFJFUVVJUkUoIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KCB2ICkgPT0gInsgU3RyaW5nTWFrZXI8aGFzX21ha2VyPiB9IiApOwogfQogCi0KLS8vIERvbid0IHJ1biB0aGlzIGluIGFwcHJvdmFsIHRlc3RzIGFzIGl0IGlzIHNlbnNpdGl2ZSB0byB0d28gcGhhc2UgbG9va3VwIGRpZmZlcmVuY2VzCi1URVNUX0NBU0UoICJ0b1N0cmluZyggdmVjdG9yczxoYXNfbWFrZXJfYW5kX29wZXJhdG9yPiApIiwgIlt0b1N0cmluZ10iICkgeworVEVTVF9DQVNFKCAic3RyaW5naWZ5KCB2ZWN0b3JzPGhhc19tYWtlcl9hbmRfb3BlcmF0b3I+ICkiLCAiW3RvU3RyaW5nXSIgKSB7CiAgICAgc3RkOjp2ZWN0b3I8aGFzX21ha2VyX2FuZF9vcGVyYXRvcj4gdigxKTsKICAgICBSRVFVSVJFKCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggdiApID09ICJ7IFN0cmluZ01ha2VyPGhhc19tYWtlcl9hbmRfb3BlcmF0b3I+IH0iICk7CiB9CiAKLS8vIENvbnZlcnNpb24gc2hvdWxkIGdvCi0vLyBTdHJpbmdNYWtlciBzcGVjaWFsaXphdGlvbiwgb3BlcmF0b3I8PCwgcmFuZ2UvZW51bSBkZXRlY3Rpb24sIHVucHJpbnRhYmxlCituYW1lc3BhY2UgeworCisvLyBSYW5nZS1iYXNlZCBjb252ZXJzaW9uIHNob3VsZCBvbmx5IGJlIHVzZWQgaWYgb3RoZXIgcG9zc2liaWxpdGllcyBmYWlsCiBzdHJ1Y3QgaW50X2l0ZXJhdG9yIHsKICAgICB1c2luZyBpdGVyYXRvcl9jYXRlZ29yeSA9IHN0ZDo6aW5wdXRfaXRlcmF0b3JfdGFnOwogICAgIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHN0ZDo6cHRyZGlmZl90OwpAQCAtMTEyLDYgKzE1Myw4IEBACiAgICAgaW50X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHt9OyB9CiB9OwogCit9IC8vIGVuZCBhbm9ueW1vdXMgbmFtZXNwYWNlCisKIG5hbWVzcGFjZSBDYXRjaCB7CiB0ZW1wbGF0ZSA8Pgogc3RydWN0IFN0cmluZ01ha2VyPHN0cmluZ21ha2VyX3JhbmdlPiB7CkBAIC0xMjEsNiArMTY0LDggQEAKIH07CiB9CiAKK25hbWVzcGFjZSB7CisKIHN0cnVjdCBqdXN0X3JhbmdlIHsKICAgICBpbnRfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpbnRfaXRlcmF0b3J7IDEgfTsgfQogICAgIGludF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiB7fTsgfQpAQCAtMTMxLDYgKzE3Niw4IEBACiAgICAgaW50X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIHt9OyB9CiB9OwogCit9IC8vIGVuZCBhbm9ueW1vdXMgbmFtZXNwYWNlCisKIG5hbWVzcGFjZSBDYXRjaCB7CiB0ZW1wbGF0ZSA8Pgogc3RydWN0IGlzX3JhbmdlPGRpc2FibGVkX3JhbmdlPiB7CkBAIC0xMzgsOSArMTg1LDkgQEAKIH07CiB9CiAKLVRFU1RfQ0FTRSgidG9TdHJpbmcgc3RyZWFtYWJsZSByYW5nZSIsICJbdG9TdHJpbmddIikgeworVEVTVF9DQVNFKCJzdHJpbmdpZnkgcmFuZ2VzIiwgIlt0b1N0cmluZ10iKSB7CiAgICAgUkVRVUlSRSg6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzdHJlYW1hYmxlX3Jhbmdle30pID09ICJvcDw8KHN0cmVhbWFibGVfcmFuZ2UpIik7CiAgICAgUkVRVUlSRSg6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzdHJpbmdtYWtlcl9yYW5nZXt9KSA9PSAic3RyaW5nbWFrZXIoc3RyZWFtYWJsZV9yYW5nZSkiKTsKICAgICBSRVFVSVJFKDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KGp1c3RfcmFuZ2V7fSkgPT0gInsgMSwgMiwgMywgNCB9Iik7Ci0gICAgUkVRVUlSRSg6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShkaXNhYmxlZF9yYW5nZXt9KSA9PSAiez99Iik7CisgICAgUkVRVUlSRSg6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShkaXNhYmxlZF9yYW5nZXt9KSA9PSAieyAhISEgfSIpOwogfQpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Ucmlja3kudGVzdHMuY3BwIGIvcHJvamVjdHMvU2VsZlRlc3QvVXNhZ2VUZXN0cy9Ucmlja3kudGVzdHMuY3BwCmluZGV4IDMwNGY0OTIuLjc3YmFkMmYgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1NlbGZUZXN0L1VzYWdlVGVzdHMvVHJpY2t5LnRlc3RzLmNwcAorKysgYi9wcm9qZWN0cy9TZWxmVGVzdC9Vc2FnZVRlc3RzL1RyaWNreS50ZXN0cy5jcHAKQEAgLTE5LDI2ICsxOSw3IEBACiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHNzdHJlYW0+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgc3RkOjpzdHJpbmcgdG9TdHJpbmcoIGNvbnN0IHN0ZDo6cGFpcjxpbnQsIGludD4mIHZhbHVlICkgewotICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gb3NzOwotICAgICAgICBvc3MgPDwgInN0ZDo6cGFpciggIiA8PCB2YWx1ZS5maXJzdCA8PCAiLCAiIDw8IHZhbHVlLnNlY29uZCA8PCAiICkiOwotICAgICAgICByZXR1cm4gb3NzLnN0cigpOwotICAgIH0KLX0KLQotLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwotVEVTVF9DQVNFCi0oCi0gICAgIlBhcnNpbmcgYSBzdGQ6OnBhaXIiLAotICAgICJbVHJpY2t5XVtzdGQ6OnBhaXJdIgotKQotewotICAgIHN0ZDo6cGFpcjxpbnQsIGludD4gYU5pY2VQYWlyKCAxLCAyICk7Ci0KLSAgICBSRVFVSVJFKCAoc3RkOjpwYWlyPGludCwgaW50PiggMSwgMiApKSA9PSBhTmljZVBhaXIgKTsKLX0KKyNpbmNsdWRlIDxpb3N0cmVhbT4KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogVEVTVF9DQVNFCkBAIC0xNzUsNyArMTU2LDcgQEAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAgICAgVEVTVF9DQVNFCiAgICAgKAotICAgICAgICAiT3BlcmF0b3JzIGF0IGRpZmZlcmVudCBuYW1lc3BhY2UgbGV2ZWxzIG5vdCBoaWphY2tlZCBieSBLb2VuaWcgbG9va3VwIiwKKyAgICAgICAgIkltcGxpY2l0IGNvbnZlcnNpb25zIGFyZSBzdXBwb3J0ZWQgaW5zaWRlIGFzc2VydGlvbiBtYWNyb3MiLAogICAgICAgICAiW1RyaWNreV1bYXBwcm92YWxzXSIKICAgICApCiAgICAgewpAQCAtMjMyLDI4ICsyMTMsMjggQEAKIAogVEVTVF9DQVNFKCAiKHVuaW1wbGVtZW50ZWQpIHN0YXRpYyBib29scyBjYW4gYmUgZXZhbHVhdGVkIiwgIltUcmlja3ldIiApCiB7Ci0gICAgU0VDVElPTigiY29tcGFyZSB0byB0cnVlIiwiIikKKyAgICBTRUNUSU9OKCJjb21wYXJlIHRvIHRydWUiKQogICAgIHsKICAgICAgICAgUkVRVUlSRSggaXNfdHJ1ZTx0cnVlPjo6dmFsdWUgPT0gdHJ1ZSApOwogICAgICAgICBSRVFVSVJFKCB0cnVlID09IGlzX3RydWU8dHJ1ZT46OnZhbHVlICk7CiAgICAgfQotICAgIFNFQ1RJT04oImNvbXBhcmUgdG8gZmFsc2UiLCIiKQorICAgIFNFQ1RJT04oImNvbXBhcmUgdG8gZmFsc2UiKQogICAgIHsKICAgICAgICAgUkVRVUlSRSggaXNfdHJ1ZTxmYWxzZT46OnZhbHVlID09IGZhbHNlICk7CiAgICAgICAgIFJFUVVJUkUoIGZhbHNlID09IGlzX3RydWU8ZmFsc2U+Ojp2YWx1ZSApOwogICAgIH0KIAotICAgIFNFQ1RJT04oIm5lZ2F0aW9uIiwgIiIpCisgICAgU0VDVElPTigibmVnYXRpb24iKQogICAgIHsKICAgICAgICAgUkVRVUlSRSggIWlzX3RydWU8ZmFsc2U+Ojp2YWx1ZSApOwogICAgIH0KIAotICAgIFNFQ1RJT04oImRvdWJsZSBuZWdhdGlvbiIsIiIpCisgICAgU0VDVElPTigiZG91YmxlIG5lZ2F0aW9uIikKICAgICB7CiAgICAgICAgIFJFUVVJUkUoICEhaXNfdHJ1ZTx0cnVlPjo6dmFsdWUgKTsKICAgICB9CiAKLSAgICBTRUNUSU9OKCJkaXJlY3QiLCIiKQorICAgIFNFQ1RJT04oImRpcmVjdCIpCiAgICAgewogICAgICAgICBSRVFVSVJFKCBpc190cnVlPHRydWU+Ojp2YWx1ZSApOwogICAgICAgICBSRVFVSVJFX0ZBTFNFKCBpc190cnVlPGZhbHNlPjo6dmFsdWUgKTsKQEAgLTM4Myw3ICszNjQsNyBAQAogfQogCiBuYW1lc3BhY2UgewotI2lmIENIRUNLX0NPTkZJR19VU0VfRVhDRVBUSU9OUworI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpCiAgICAgc3RydWN0IGNvbnN0cnVjdG9yX3Rocm93cyB7CiAgICAgICAgIFtbbm9yZXR1cm5dXSBjb25zdHJ1Y3Rvcl90aHJvd3MoKSB7CiAgICAgICAgICAgICB0aHJvdyAxOwpAQCAtMzkzLDcgKzM3NCw3IEBACiB9CiAKIFRFU1RfQ0FTRSgiQ29tbWFzIGluIHZhcmlvdXMgbWFjcm9zIGFyZSBhbGxvd2VkIikgewotI2lmIENIRUNLX0NPTkZJR19VU0VfRVhDRVBUSU9OUworI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpCiAgICAgUkVRVUlSRV9USFJPV1MoIHN0ZDo6dmVjdG9yPGNvbnN0cnVjdG9yX3Rocm93cz57Y29uc3RydWN0b3JfdGhyb3dze30sIGNvbnN0cnVjdG9yX3Rocm93c3t9fSApOwogICAgIENIRUNLX1RIUk9XUyggc3RkOjp2ZWN0b3I8Y29uc3RydWN0b3JfdGhyb3dzPntjb25zdHJ1Y3Rvcl90aHJvd3N7fSwgY29uc3RydWN0b3JfdGhyb3dze319ICk7CiAjZW5kaWYKQEAgLTQ1MiwzICs0MzMsMTAgQEAKICAgICBSRVFVSVJFKCB5LnYgPT0gMCApOwogICAgIFJFUVVJUkUoIDAgPT0geS52ICk7CiB9CisKK1RFU1RfQ0FTRSgiIzE1MTQ6IHN0ZGVyci9zdGRvdXQgaXMgbm90IGNhcHR1cmVkIGluIHRlc3RzIGFib3J0ZWQgYnkgYW4gZXhjZXB0aW9uIiwgIltvdXRwdXQtY2FwdHVyZV1bcmVncmVzc2lvbl1bLl0iKSB7CisgICAgc3RkOjpjb3V0IDw8ICJUaGlzIHdvdWxkIG5vdCBiZSBjYXVnaHQgcHJldmlvdXNseVxuIiA8PCBzdGQ6OmZsdXNoOworICAgIHN0ZDo6Y2xvZyA8PCAiTm9yIHdvdWxkIHRoaXNcbiIgPDwgc3RkOjpmbHVzaDsKKyAgICAvLyBGQUlMIGFib3J0cyB0aGUgdGVzdCBieSB0aHJvd2luZyBhIENhdGNoIGV4Y2VwdGlvbgorICAgIEZBSUwoIjE1MTQiKTsKK30KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1hDb2RlL09DVGVzdC9PQ1Rlc3QueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL3Byb2plY3RzL1hDb2RlL09DVGVzdC9PQ1Rlc3QueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA5MWUyY2Q5Li43MTUzMjAzIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9YQ29kZS9PQ1Rlc3QvT0NUZXN0Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvcHJvamVjdHMvWENvZGUvT0NUZXN0L09DVGVzdC54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjAsNyArMTIwLDcgQEAKIAkJNEE2M0QyOUMxNEUzQzFBOTAwRjYxNUNCIC8qIFByb2plY3Qgb2JqZWN0ICovID0gewogCQkJaXNhID0gUEJYUHJvamVjdDsKIAkJCWF0dHJpYnV0ZXMgPSB7Ci0JCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDA1MDA7CisJCQkJTGFzdFVwZ3JhZGVDaGVjayA9IDA5NDA7CiAJCQl9OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDRBNjNEMjlGMTRFM0MxQTkwMEY2MTVDQiAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIk9DVGVzdCIgKi87CiAJCQljb21wYXRpYmlsaXR5VmVyc2lvbiA9ICJYY29kZSAzLjIiOwpAQCAtMTU5LDE2ICsxNTksMzAgQEAKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYnVpbGRTZXR0aW5ncyA9IHsKIAkJCQlBTFdBWVNfU0VBUkNIX1VTRVJfUEFUSFMgPSBOTzsKKwkJCQlDTEFOR19XQVJOX0JMT0NLX0NBUFRVUkVfQVVUT1JFTEVBU0lORyA9IFlFUzsKIAkJCQlDTEFOR19XQVJOX0JPT0xfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0NPTU1BID0gWUVTOwogCQkJCUNMQU5HX1dBUk5fQ09OU1RBTlRfQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0RFUFJFQ0FURURfT0JKQ19JTVBMRU1FTlRBVElPTlMgPSBZRVM7CiAJCQkJQ0xBTkdfV0FSTl9FTVBUWV9CT0RZID0gWUVTOwogCQkJCUNMQU5HX1dBUk5fRU5VTV9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fSU5GSU5JVEVfUkVDVVJTSU9OID0gWUVTOwogCQkJCUNMQU5HX1dBUk5fSU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9OT05fTElURVJBTF9OVUxMX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9PQkpDX0lNUExJQ0lUX1JFVEFJTl9TRUxGID0gWUVTOworCQkJCUNMQU5HX1dBUk5fT0JKQ19MSVRFUkFMX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9SQU5HRV9MT09QX0FOQUxZU0lTID0gWUVTOworCQkJCUNMQU5HX1dBUk5fU1RSSUNUX1BST1RPVFlQRVMgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9TVVNQSUNJT1VTX01PVkUgPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9VTlJFQUNIQUJMRV9DT0RFID0gWUVTOwogCQkJCUNMQU5HX1dBUk5fX0RVUExJQ0FURV9NRVRIT0RfTUFUQ0ggPSBZRVM7CiAJCQkJQ09QWV9QSEFTRV9TVFJJUCA9IE5POworCQkJCUVOQUJMRV9TVFJJQ1RfT0JKQ19NU0dTRU5EID0gWUVTOworCQkJCUVOQUJMRV9URVNUQUJJTElUWSA9IFlFUzsKIAkJCQlHQ0NfQ19MQU5HVUFHRV9TVEFOREFSRCA9IGdudTk5OwogCQkJCUdDQ19EWU5BTUlDX05PX1BJQyA9IE5POwogCQkJCUdDQ19FTkFCTEVfT0JKQ19FWENFUFRJT05TID0gWUVTOworCQkJCUdDQ19OT19DT01NT05fQkxPQ0tTID0gWUVTOwogCQkJCUdDQ19PUFRJTUlaQVRJT05fTEVWRUwgPSAwOwogCQkJCUdDQ19QUkVQUk9DRVNTT1JfREVGSU5JVElPTlMgPSAoCiAJCQkJCSJERUJVRz0xIiwKQEAgLTE5NCwxNiArMjA4LDI5IEBACiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJ1aWxkU2V0dGluZ3MgPSB7CiAJCQkJQUxXQVlTX1NFQVJDSF9VU0VSX1BBVEhTID0gTk87CisJCQkJQ0xBTkdfV0FSTl9CTE9DS19DQVBUVVJFX0FVVE9SRUxFQVNJTkcgPSBZRVM7CiAJCQkJQ0xBTkdfV0FSTl9CT09MX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9DT01NQSA9IFlFUzsKIAkJCQlDTEFOR19XQVJOX0NPTlNUQU5UX0NPTlZFUlNJT04gPSBZRVM7CisJCQkJQ0xBTkdfV0FSTl9ERVBSRUNBVEVEX09CSkNfSU1QTEVNRU5UQVRJT05TID0gWUVTOwogCQkJCUNMQU5HX1dBUk5fRU1QVFlfQk9EWSA9IFlFUzsKIAkJCQlDTEFOR19XQVJOX0VOVU1fQ09OVkVSU0lPTiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX0lORklOSVRFX1JFQ1VSU0lPTiA9IFlFUzsKIAkJCQlDTEFOR19XQVJOX0lOVF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fTk9OX0xJVEVSQUxfTlVMTF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fT0JKQ19JTVBMSUNJVF9SRVRBSU5fU0VMRiA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX09CSkNfTElURVJBTF9DT05WRVJTSU9OID0gWUVTOworCQkJCUNMQU5HX1dBUk5fUkFOR0VfTE9PUF9BTkFMWVNJUyA9IFlFUzsKKwkJCQlDTEFOR19XQVJOX1NUUklDVF9QUk9UT1RZUEVTID0gWUVTOworCQkJCUNMQU5HX1dBUk5fU1VTUElDSU9VU19NT1ZFID0gWUVTOworCQkJCUNMQU5HX1dBUk5fVU5SRUFDSEFCTEVfQ09ERSA9IFlFUzsKIAkJCQlDTEFOR19XQVJOX19EVVBMSUNBVEVfTUVUSE9EX01BVENIID0gWUVTOwogCQkJCUNPUFlfUEhBU0VfU1RSSVAgPSBZRVM7CiAJCQkJREVCVUdfSU5GT1JNQVRJT05fRk9STUFUID0gImR3YXJmLXdpdGgtZHN5bSI7CisJCQkJRU5BQkxFX1NUUklDVF9PQkpDX01TR1NFTkQgPSBZRVM7CiAJCQkJR0NDX0NfTEFOR1VBR0VfU1RBTkRBUkQgPSBnbnU5OTsKIAkJCQlHQ0NfRU5BQkxFX09CSkNfRVhDRVBUSU9OUyA9IFlFUzsKKwkJCQlHQ0NfTk9fQ09NTU9OX0JMT0NLUyA9IFlFUzsKIAkJCQlHQ0NfVkVSU0lPTiA9IGNvbS5hcHBsZS5jb21waWxlcnMubGx2bS5jbGFuZy4xXzA7CiAJCQkJR0NDX1dBUk5fNjRfVE9fMzJfQklUX0NPTlZFUlNJT04gPSBZRVM7CiAJCQkJR0NDX1dBUk5fQUJPVVRfTUlTU0lOR19QUk9UT1RZUEVTID0gWUVTOwpkaWZmIC0tZ2l0IGEvcHJvamVjdHMvWENvZGUvT0NUZXN0L09DVGVzdC54Y29kZXByb2ovcHJvamVjdC54Y3dvcmtzcGFjZS94Y3NoYXJlZGRhdGEvSURFV29ya3NwYWNlQ2hlY2tzLnBsaXN0IGIvcHJvamVjdHMvWENvZGUvT0NUZXN0L09DVGVzdC54Y29kZXByb2ovcHJvamVjdC54Y3dvcmtzcGFjZS94Y3NoYXJlZGRhdGEvSURFV29ya3NwYWNlQ2hlY2tzLnBsaXN0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZDk4MTAKLS0tIC9kZXYvbnVsbAorKysgYi9wcm9qZWN0cy9YQ29kZS9PQ1Rlc3QvT0NUZXN0Lnhjb2RlcHJvai9wcm9qZWN0Lnhjd29ya3NwYWNlL3hjc2hhcmVkZGF0YS9JREVXb3Jrc3BhY2VDaGVja3MucGxpc3QKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCI/PgorPCFET0NUWVBFIHBsaXN0IFBVQkxJQyAiLS8vQXBwbGUvL0RURCBQTElTVCAxLjAvL0VOIiAiaHR0cDovL3d3dy5hcHBsZS5jb20vRFREcy9Qcm9wZXJ0eUxpc3QtMS4wLmR0ZCI+Cis8cGxpc3QgdmVyc2lvbj0iMS4wIj4KKzxkaWN0PgorCTxrZXk+SURFRGlkQ29tcHV0ZU1hYzMyQml0V2FybmluZzwva2V5PgorCTx0cnVlLz4KKzwvZGljdD4KKzwvcGxpc3Q+CmRpZmYgLS1naXQgYS9wcm9qZWN0cy9YQ29kZS9PQ1Rlc3QvT0NUZXN0L09DVGVzdC4xIGIvcHJvamVjdHMvWENvZGUvT0NUZXN0L09DVGVzdC9PQ1Rlc3QuMQppbmRleCAzOGFmZWI1Li4xY2QzMzNlIDEwMDY0NAotLS0gYS9wcm9qZWN0cy9YQ29kZS9PQ1Rlc3QvT0NUZXN0L09DVGVzdC4xCisrKyBiL3Byb2plY3RzL1hDb2RlL09DVGVzdC9PQ1Rlc3QvT0NUZXN0LjEKQEAgLTYxLDkgKzYxLDkgQEAKIC5cIiAuU2ggRElBR05PU1RJQ1MgICAgICAgXCIgTWF5IG5vdCBiZSBuZWVkZWQKIC5cIiAuQmwgLWRpYWcKIC5cIiAuSXQgRGlhZ25vc3RpYyBUYWcKLS5cIiBEaWFnbm9zdGljIGluZm9ybXRpb24gaGVyZS4KKy5cIiBEaWFnbm9zdGljIGluZm9ybWF0aW9uIGhlcmUuCiAuXCIgLkl0IERpYWdub3N0aWMgVGFnCi0uXCIgRGlhZ25vc3RpYyBpbmZvcm10aW9uIGhlcmUuCisuXCIgRGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBoZXJlLgogLlwiIC5FbAogLlNoIFNFRSBBTFNPCiAuXCIgTGlzdCBsaW5rcyBpbiBhc2NlbmRpbmcgb3JkZXIgYnkgc2VjdGlvbiwgYWxwaGFiZXRpY2FsbHkgd2l0aGluIGEgc2VjdGlvbi4KZGlmZiAtLWdpdCBhL3Byb2plY3RzL1hDb2RlL09DVGVzdC9jYXRjaF9vYmpjX2ltcGwubW0gYi9wcm9qZWN0cy9YQ29kZS9PQ1Rlc3QvY2F0Y2hfb2JqY19pbXBsLm1tCmluZGV4IDAxNDQzY2MuLmU0MzlhM2EgMTAwNjQ0Ci0tLSBhL3Byb2plY3RzL1hDb2RlL09DVGVzdC9jYXRjaF9vYmpjX2ltcGwubW0KKysrIGIvcHJvamVjdHMvWENvZGUvT0NUZXN0L2NhdGNoX29iamNfaW1wbC5tbQpAQCAtMSw2ICsxLDcgQEAKIC8vIFRoaXMgZmlsZSAjaW5jbHVkZXMgYWxsIHRoZSAuY3BwIGZpbGVzIGludG8gYSBzaW5nbGUgLm1tCiAvLyAtIHNvIHRoZXkgZ2V0IGNvbXBpbGVkIGFzIE9iamVjdGl2ZUMrKwogCisjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90b3N0cmluZy5jcHAiCiAjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9hcHByb3guY3BwIgogI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfYXNzZXJ0aW9uaGFuZGxlci5jcHAiCiAjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9hc3NlcnRpb25yZXN1bHQuY3BwIgpAQCAtMjksNiArMzAsNyBAQAogI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnMuY3BwIgogI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfbWF0Y2hlcnNfc3RyaW5nLmNwcCIKICNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX21lc3NhZ2UuY3BwIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfb3V0cHV0X3JlZGlyZWN0LmNwcCIKICNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmNwcCIKICNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3JlZ2lzdHJ5X2h1Yi5jcHAiCiAjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF9yZXBvcnRlcl9yZWdpc3RyeS5jcHAiCkBAIC01MSw4ICs1Myw4IEBACiAjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90ZXN0X3NwZWMuY3BwIgogI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdGVzdF9zcGVjX3BhcnNlci5jcHAiCiAjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90aW1lci5jcHAiCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90b3N0cmluZy5jcHAiCiAjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF90b3RhbHMuY3BwIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfdW5jYXVnaHRfZXhjZXB0aW9ucy5jcHAiCiAjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9pbnRlcm5hbC9jYXRjaF92ZXJzaW9uLmNwcCIKICNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL2ludGVybmFsL2NhdGNoX3dpbGRjYXJkX3BhdHRlcm4uY3BwIgogI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvaW50ZXJuYWwvY2F0Y2hfeG1sd3JpdGVyLmNwcCIKQEAgLTYzLDUgKzY1LDUgQEAKICNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9jb21wYWN0LmNwcCIKICNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9jb25zb2xlLmNwcCIKICNpbmNsdWRlICIuLi8uLi8uLi9pbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl9qdW5pdC5jcHAiCi0jaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfbXVsdGkuY3BwIgorI2luY2x1ZGUgIi4uLy4uLy4uL2luY2x1ZGUvcmVwb3J0ZXJzL2NhdGNoX3JlcG9ydGVyX2xpc3RlbmluZy5jcHAiCiAjaW5jbHVkZSAiLi4vLi4vLi4vaW5jbHVkZS9yZXBvcnRlcnMvY2F0Y2hfcmVwb3J0ZXJfeG1sLmNwcCIKZGlmZiAtLWdpdCBhL3NjcmlwdHMvYXBwcm92YWxUZXN0cy5weSBiL3NjcmlwdHMvYXBwcm92YWxUZXN0cy5weQppbmRleCBhMmFiNWQ1Li5iYjAxZTZkIDEwMDc1NQotLS0gYS9zY3JpcHRzL2FwcHJvdmFsVGVzdHMucHkKKysrIGIvc2NyaXB0cy9hcHByb3ZhbFRlc3RzLnB5CkBAIC0xLDcgKzEsOCBAQAogIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCiAKLWZyb20gIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCitmcm9tIF9fZnV0dXJlX18gaW1wb3J0IHByaW50X2Z1bmN0aW9uCiAKK2ltcG9ydCBpbwogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCiBpbXBvcnQgc3VicHJvY2VzcwpAQCAtMTEsOSArMTIsMTMgQEAKIGltcG9ydCBzY3JpcHRDb21tb24KIGZyb20gc2NyaXB0Q29tbW9uIGltcG9ydCBjYXRjaFBhdGgKIAoraWYgb3MubmFtZSA9PSAnbnQnOgorICAgICMgRW5hYmxlIGNvbnNvbGUgY29sb3VycyBvbiB3aW5kb3dzCisgICAgb3Muc3lzdGVtKCcnKQorCiByb290UGF0aCA9IG9zLnBhdGguam9pbihjYXRjaFBhdGgsICdwcm9qZWN0cy9TZWxmVGVzdC9CYXNlbGluZXMnKQogCi0KK2xhbmdGaWxlbmFtZVBhcnNlciA9IHJlLmNvbXBpbGUocicoLitcLltjaF1wcCknKQogZmlsZWxvY1BhcnNlciA9IHJlLmNvbXBpbGUocicnJwogICAgIC4qLwogICAgICguK1wuW2NoXXBwKSAgIyBmaWxlbmFtZQpAQCAtNzIsMTAgKzc3LDExIEBACiAKIG92ZXJhbGxSZXN1bHQgPSAwCiAKKwogZGVmIGRpZmZGaWxlcyhmaWxlQSwgZmlsZUIpOgotICAgIHdpdGggb3BlbihmaWxlQSwgJ3InKSBhcyBmaWxlOgorICAgIHdpdGggaW8ub3BlbihmaWxlQSwgJ3InLCBlbmNvZGluZz0ndXRmLTgnLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpIGFzIGZpbGU6CiAgICAgICAgIGFMaW5lcyA9IFtsaW5lLnJzdHJpcCgpIGZvciBsaW5lIGluIGZpbGUucmVhZGxpbmVzKCldCi0gICAgd2l0aCBvcGVuKGZpbGVCLCAncicpIGFzIGZpbGU6CisgICAgd2l0aCBpby5vcGVuKGZpbGVCLCAncicsIGVuY29kaW5nPSd1dGYtOCcsIGVycm9ycz0nc3Vycm9nYXRlZXNjYXBlJykgYXMgZmlsZToKICAgICAgICAgYkxpbmVzID0gW2xpbmUucnN0cmlwKCkgZm9yIGxpbmUgaW4gZmlsZS5yZWFkbGluZXMoKV0KIAogICAgIHNob3J0ZW5lZEZpbGVuYW1lQSA9IGZpbGVBLnJzcGxpdChvcy5zZXAsIDEpWy0xXQpAQCAtODUsMTMgKzkxLDI0IEBACiAgICAgcmV0dXJuIFtsaW5lIGZvciBsaW5lIGluIGRpZmYgaWYgbGluZVswXSBpbiAoJysnLCAnLScpXQogCiAKLWRlZiBmaWx0ZXJMaW5lKGxpbmUpOgorZGVmIG5vcm1hbGl6ZUZpbGVwYXRoKGxpbmUpOgogICAgIGlmIGNhdGNoUGF0aCBpbiBsaW5lOgogICAgICAgICAjIG1ha2UgcGF0aHMgcmVsYXRpdmUgdG8gQ2F0Y2ggcm9vdAogICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKGNhdGNoUGF0aCArIG9zLnNlcCwgJycpCi0gICAgICAgICMgZ28gZnJvbSBcIGluIHdpbmRvd3MgcGF0aHMgdG8gLwotICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCdcXCcsICcvJykKIAorICAgIG0gPSBsYW5nRmlsZW5hbWVQYXJzZXIubWF0Y2gobGluZSkKKyAgICBpZiBtOgorICAgICAgICBmaWxlcGF0aCA9IG0uZ3JvdXAoMCkKKyAgICAgICAgIyBnbyBmcm9tIFwgaW4gd2luZG93cyBwYXRocyB0byAvCisgICAgICAgIGZpbGVwYXRoID0gZmlsZXBhdGgucmVwbGFjZSgnXFwnLCAnLycpCisgICAgICAgICMgcmVtb3ZlIHN0YXJ0IG9mIHJlbGF0aXZlIHBhdGgKKyAgICAgICAgZmlsZXBhdGggPSBmaWxlcGF0aC5yZXBsYWNlKCcuLi8nLCAnJykKKyAgICAgICAgbGluZSA9IGxpbmVbOm0uc3RhcnQoKV0gKyBmaWxlcGF0aCArIGxpbmVbbS5lbmQoKTpdCisKKyAgICByZXR1cm4gbGluZQorCitkZWYgZmlsdGVyTGluZShsaW5lLCBpc0NvbXBhY3QpOgorICAgIGxpbmUgPSBub3JtYWxpemVGaWxlcGF0aChsaW5lKQogCiAgICAgIyBzdHJpcCBzb3VyY2UgbGluZSBudW1iZXJzCiAgICAgbSA9IGZpbGVsb2NQYXJzZXIubWF0Y2gobGluZSkKQEAgLTEwMyw2ICsxMjAsMTAgQEAKICAgICBlbHNlOgogICAgICAgICBsaW5lID0gbGluZU51bWJlclBhcnNlci5zdWIoIiAiLCBsaW5lKQogCisgICAgaWYgaXNDb21wYWN0OgorICAgICAgICBsaW5lID0gbGluZS5yZXBsYWNlKCc6IEZBSUxFRCcsICc6IGZhaWxlZCcpCisgICAgICAgIGxpbmUgPSBsaW5lLnJlcGxhY2UoJzogUEFTU0VEJywgJzogcGFzc2VkJykKKwogICAgICMgc3RyaXAgQ2F0Y2ggdmVyc2lvbiBudW1iZXIKICAgICBsaW5lID0gdmVyc2lvblBhcnNlci5zdWIoIjx2ZXJzaW9uPiIsIGxpbmUpCiAKQEAgLTEzOSwxMCArMTYwLDEwIEBACiAgICAgc3VicHJvY2Vzcy5jYWxsKGFyZ3MsIHN0ZG91dD1mLCBzdGRlcnI9ZikKICAgICBmLmNsb3NlKCkKIAotICAgIHJhd0ZpbGUgPSBvcGVuKHJhd1Jlc3VsdHNQYXRoLCAncicpCi0gICAgZmlsdGVyZWRGaWxlID0gb3BlbihmaWx0ZXJlZFJlc3VsdHNQYXRoLCAndycpCisgICAgcmF3RmlsZSA9IGlvLm9wZW4ocmF3UmVzdWx0c1BhdGgsICdyJywgZW5jb2Rpbmc9J3V0Zi04JywgZXJyb3JzPSdzdXJyb2dhdGVlc2NhcGUnKQorICAgIGZpbHRlcmVkRmlsZSA9IGlvLm9wZW4oZmlsdGVyZWRSZXN1bHRzUGF0aCwgJ3cnLCBlbmNvZGluZz0ndXRmLTgnLCBlcnJvcnM9J3N1cnJvZ2F0ZWVzY2FwZScpCiAgICAgZm9yIGxpbmUgaW4gcmF3RmlsZToKLSAgICAgICAgZmlsdGVyZWRGaWxlLndyaXRlKGZpbHRlckxpbmUobGluZSkucnN0cmlwKCkgKyAiXG4iKQorICAgICAgICBmaWx0ZXJlZEZpbGUud3JpdGUoZmlsdGVyTGluZShsaW5lLCAnY29tcGFjdCcgaW4gYmFzZU5hbWUpLnJzdHJpcCgpICsgIlxuIikKICAgICBmaWx0ZXJlZEZpbGUuY2xvc2UoKQogICAgIHJhd0ZpbGUuY2xvc2UoKQogCkBAIC0xNzAsMTkgKzE5MSwxOSBAQAogcHJpbnQoIiAgIiArIGNtZFBhdGgpCiAKIAotIyMjIEtlZXAgZGVmYXVsdCByZXBvcnRlcnMgaGVyZQorIyAjIyBLZWVwIGRlZmF1bHQgcmVwb3J0ZXJzIGhlcmUgIyMKICMgU3RhbmRhcmQgY29uc29sZSByZXBvcnRlcgotYXBwcm92ZSgiY29uc29sZS5zdGQiLCBbIn5bIW5vbnBvcnRhYmxlXX5bIWJlbmNobWFya11+W2FwcHJvdmFsc10iLCAiLS1vcmRlciIsICJsZXgiXSkKK2FwcHJvdmUoImNvbnNvbGUuc3RkIiwgWyJ+WyFub25wb3J0YWJsZV1+WyFiZW5jaG1hcmtdflthcHByb3ZhbHNdIiwgIi0tb3JkZXIiLCAibGV4IiwgIi0tcm5nLXNlZWQiLCAiMSJdKQogIyBjb25zb2xlIHJlcG9ydGVyLCBpbmNsdWRlIHBhc3Nlcywgd2FybiBhYm91dCBObyBBc3NlcnRpb25zCi1hcHByb3ZlKCJjb25zb2xlLnN3IiwgWyJ+WyFub25wb3J0YWJsZV1+WyFiZW5jaG1hcmtdflthcHByb3ZhbHNdIiwgIi1zIiwgIi13IiwgIk5vQXNzZXJ0aW9ucyIsICItLW9yZGVyIiwgImxleCJdKQorYXBwcm92ZSgiY29uc29sZS5zdyIsIFsiflshbm9ucG9ydGFibGVdflshYmVuY2htYXJrXX5bYXBwcm92YWxzXSIsICItcyIsICItdyIsICJOb0Fzc2VydGlvbnMiLCAiLS1vcmRlciIsICJsZXgiLCAiLS1ybmctc2VlZCIsICIxIl0pCiAjIGNvbnNvbGUgcmVwb3J0ZXIsIGluY2x1ZGUgcGFzc2VzLCB3YXJuIGFib3V0IE5vIEFzc2VydGlvbnMsIGxpbWl0IGZhaWx1cmVzIHRvIGZpcnN0IDQKLWFwcHJvdmUoImNvbnNvbGUuc3dhNCIsIFsiflshbm9ucG9ydGFibGVdflshYmVuY2htYXJrXX5bYXBwcm92YWxzXSIsICItcyIsICItdyIsICJOb0Fzc2VydGlvbnMiLCAiLXgiLCAiNCIsICItLW9yZGVyIiwgImxleCJdKQorYXBwcm92ZSgiY29uc29sZS5zd2E0IiwgWyJ+WyFub25wb3J0YWJsZV1+WyFiZW5jaG1hcmtdflthcHByb3ZhbHNdIiwgIi1zIiwgIi13IiwgIk5vQXNzZXJ0aW9ucyIsICIteCIsICI0IiwgIi0tb3JkZXIiLCAibGV4IiwgIi0tcm5nLXNlZWQiLCAiMSJdKQogIyBqdW5pdCByZXBvcnRlciwgaW5jbHVkZSBwYXNzZXMsIHdhcm4gYWJvdXQgTm8gQXNzZXJ0aW9ucwotYXBwcm92ZSgianVuaXQuc3ciLCBbIn5bIW5vbnBvcnRhYmxlXX5bIWJlbmNobWFya11+W2FwcHJvdmFsc10iLCAiLXMiLCAiLXciLCAiTm9Bc3NlcnRpb25zIiwgIi1yIiwgImp1bml0IiwgIi0tb3JkZXIiLCAibGV4Il0pCithcHByb3ZlKCJqdW5pdC5zdyIsIFsiflshbm9ucG9ydGFibGVdflshYmVuY2htYXJrXX5bYXBwcm92YWxzXSIsICItcyIsICItdyIsICJOb0Fzc2VydGlvbnMiLCAiLXIiLCAianVuaXQiLCAiLS1vcmRlciIsICJsZXgiLCAiLS1ybmctc2VlZCIsICIxIl0pCiAjIHhtbCByZXBvcnRlciwgaW5jbHVkZSBwYXNzZXMsIHdhcm4gYWJvdXQgTm8gQXNzZXJ0aW9ucwotYXBwcm92ZSgieG1sLnN3IiwgWyJ+WyFub25wb3J0YWJsZV1+WyFiZW5jaG1hcmtdflthcHByb3ZhbHNdIiwgIi1zIiwgIi13IiwgIk5vQXNzZXJ0aW9ucyIsICItciIsICJ4bWwiLCAiLS1vcmRlciIsICJsZXgiXSkKK2FwcHJvdmUoInhtbC5zdyIsIFsiflshbm9ucG9ydGFibGVdflshYmVuY2htYXJrXX5bYXBwcm92YWxzXSIsICItcyIsICItdyIsICJOb0Fzc2VydGlvbnMiLCAiLXIiLCAieG1sIiwgIi0tb3JkZXIiLCAibGV4IiwgIi0tcm5nLXNlZWQiLCAiMSJdKQogIyBjb21wYWN0IHJlcG9ydGVyLCBpbmNsdWRlIHBhc3Nlcywgd2FybiBhYm91dCBObyBBc3NlcnRpb25zCi1hcHByb3ZlKCdjb21wYWN0LnN3JywgWyd+WyFub25wb3J0YWJsZV1+WyFiZW5jaG1hcmtdflthcHByb3ZhbHNdJywgJy1zJywgJy13JywgJ05vQXNzZXJ0aW9ucycsICctcicsICdjb21wYWN0JywgJy0tb3JkZXInLCAnbGV4J10pCithcHByb3ZlKCdjb21wYWN0LnN3JywgWyd+WyFub25wb3J0YWJsZV1+WyFiZW5jaG1hcmtdflthcHByb3ZhbHNdJywgJy1zJywgJy13JywgJ05vQXNzZXJ0aW9ucycsICctcicsICdjb21wYWN0JywgJy0tb3JkZXInLCAnbGV4JywgIi0tcm5nLXNlZWQiLCAiMSJdKQogCiBpZiBvdmVyYWxsUmVzdWx0ICE9IDA6CiAgICAgcHJpbnQoIklmIHRoZXNlIGRpZmZlcmVuY2VzIGFyZSBleHBlY3RlZCwgcnVuIGFwcHJvdmUucHkgdG8gYXBwcm92ZSBuZXcgYmFzZWxpbmVzLiIpCmRpZmYgLS1naXQgYS9zY3JpcHRzL2FwcHJvdmUucHkgYi9zY3JpcHRzL2FwcHJvdmUucHkKaW5kZXggNzhhMmE5ZS4uZjAzNDE3ZCAxMDA3NTUKLS0tIGEvc2NyaXB0cy9hcHByb3ZlLnB5CisrKyBiL3NjcmlwdHMvYXBwcm92ZS5weQpAQCAtMTEsMjMgKzExLDIzIEBACiByb290UGF0aCA9IG9zLnBhdGguam9pbiggY2F0Y2hQYXRoLCAncHJvamVjdHMvU2VsZlRlc3QvQmFzZWxpbmVzJyApCiAKIGlmIGxlbihzeXMuYXJndikgPiAxOgotCWZpbGVzID0gW29zLnBhdGguam9pbiggcm9vdFBhdGgsIGYgKSBmb3IgZiBpbiBzeXMuYXJndlsxOl1dCisgICAgZmlsZXMgPSBbb3MucGF0aC5qb2luKCByb290UGF0aCwgZiApIGZvciBmIGluIHN5cy5hcmd2WzE6XV0KIGVsc2U6Ci0JZmlsZXMgPSBnbG9iLmdsb2IoIG9zLnBhdGguam9pbiggcm9vdFBhdGgsICIqLnVuYXBwcm92ZWQudHh0IiApICkKKyAgICBmaWxlcyA9IGdsb2IuZ2xvYiggb3MucGF0aC5qb2luKCByb290UGF0aCwgIioudW5hcHByb3ZlZC50eHQiICkgKQogCiAKIGRlZiBhcHByb3ZlRmlsZSggYXBwcm92ZWRGaWxlLCB1bmFwcHJvdmVkRmlsZSApOgotCWp1c3RGaWxlbmFtZSA9IHVuYXBwcm92ZWRGaWxlW2xlbihyb290UGF0aCkrMTpdCi0JaWYgb3MucGF0aC5leGlzdHMoIHVuYXBwcm92ZWRGaWxlICk6Ci0JCWlmIG9zLnBhdGguZXhpc3RzKCBhcHByb3ZlZEZpbGUgKToKLQkJCW9zLnJlbW92ZSggYXBwcm92ZWRGaWxlICkKLQkJb3MucmVuYW1lKCB1bmFwcHJvdmVkRmlsZSwgYXBwcm92ZWRGaWxlICkKLQkJcHJpbnQoICJhcHByb3ZlZCAiICsganVzdEZpbGVuYW1lICkKLQllbHNlOgotCQlwcmludCggImFwcHJvdmFsIGZpbGUgIiArIGp1c3RGaWxlbmFtZSArICIgZG9lcyBub3QgZXhpc3QiICkKKyAgICBqdXN0RmlsZW5hbWUgPSB1bmFwcHJvdmVkRmlsZVtsZW4ocm9vdFBhdGgpKzE6XQorICAgIGlmIG9zLnBhdGguZXhpc3RzKCB1bmFwcHJvdmVkRmlsZSApOgorICAgICAgICBpZiBvcy5wYXRoLmV4aXN0cyggYXBwcm92ZWRGaWxlICk6CisgICAgICAgICAgICBvcy5yZW1vdmUoIGFwcHJvdmVkRmlsZSApCisgICAgICAgIG9zLnJlbmFtZSggdW5hcHByb3ZlZEZpbGUsIGFwcHJvdmVkRmlsZSApCisgICAgICAgIHByaW50KCAiYXBwcm92ZWQgIiArIGp1c3RGaWxlbmFtZSApCisgICAgZWxzZToKKyAgICAgICAgcHJpbnQoICJhcHByb3ZhbCBmaWxlICIgKyBqdXN0RmlsZW5hbWUgKyAiIGRvZXMgbm90IGV4aXN0IiApCiAKLWlmIGxlbihmaWxlcykgPiAwOgotCWZvciB1bmFwcHJvdmVkRmlsZSBpbiBmaWxlczoKLQkJYXBwcm92ZUZpbGUoIHVuYXBwcm92ZWRGaWxlLnJlcGxhY2UoICJ1bmFwcHJvdmVkLnR4dCIsICJhcHByb3ZlZC50eHQiICksIHVuYXBwcm92ZWRGaWxlICkKK2lmIGZpbGVzOgorICAgIGZvciB1bmFwcHJvdmVkRmlsZSBpbiBmaWxlczoKKyAgICAgICAgYXBwcm92ZUZpbGUoIHVuYXBwcm92ZWRGaWxlLnJlcGxhY2UoICJ1bmFwcHJvdmVkLnR4dCIsICJhcHByb3ZlZC50eHQiICksIHVuYXBwcm92ZWRGaWxlICkKIGVsc2U6Ci0JcHJpbnQoICJubyBmaWxlcyB0byBhcHByb3ZlIiApCisgICAgcHJpbnQoICJubyBmaWxlcyB0byBhcHByb3ZlIiApCmRpZmYgLS1naXQgYS9zY3JpcHRzL2VtYmVkLnB5IGIvc2NyaXB0cy9lbWJlZC5weQppbmRleCAyM2IxNTdjLi42Njc1NzAzIDEwMDY0NAotLS0gYS9zY3JpcHRzL2VtYmVkLnB5CisrKyBiL3NjcmlwdHMvZW1iZWQucHkKQEAgLTI1LDcgKzI1LDcgQEAKICAgICAjIFRCRDoKICAgICAjICAjaWYsICNpZmRlZiwgY29tbWVudHMgYWZ0ZXIgI2Vsc2UKICAgICBkZWYgbWFwTGluZSggc2VsZiwgbGluZU5vLCBsaW5lICk6Ci0gICAgICAgIGZvciBpZEZyb20sIGlkVG8gaW4gc2VsZi5pZE1hcC5pdGVyaXRlbXMoKToKKyAgICAgICAgZm9yIGlkRnJvbSwgaWRUbyBpbiBzZWxmLmlkTWFwLml0ZW1zKCk6CiAgICAgICAgICAgICByID0gcmUuY29tcGlsZSgiKC4qKSIgKyBpZEZyb20gKyAiKC4qKSIpCiAKICAgICAgICAgICAgIG0gPSByLm1hdGNoKCBsaW5lICkKQEAgLTM4LDcgKzM4LDcgQEAKICAgICAgICAgICAgICMgcHJpbnQoIlt7MH1dIG9yaWdpbmFsTnM6ICd7MX0nIC0gY2xvc2luZyIuZm9ybWF0KGxpbmVObywgb3JpZ2luYWxOcykpCiAgICAgICAgICAgICAjIHByaW50KCAiICAiICsgbGluZSApCiAgICAgICAgICAgICAjIHByaW50KCAiICAxOlt7MH1dXG4gIDI6W3sxfV1cbiAgMzpbezJ9XVxuICA0Olt7M31dXG4gIDU6W3s0fV0iLmZvcm1hdCggbS5ncm91cCgxKSwgbS5ncm91cCgyKSwgbS5ncm91cCgzKSwgbS5ncm91cCg0KSwgbS5ncm91cCg1KSApICkKLSAgICAgICAgICAgIGlmIHNlbGYub3V0ZXJOYW1lc3BhY2UuaGFzX2tleShvcmlnaW5hbE5zKToKKyAgICAgICAgICAgIGlmIG9yaWdpbmFsTnMgaW4gc2VsZi5vdXRlck5hbWVzcGFjZToKICAgICAgICAgICAgICAgICBvdXRlck5zLCBpbm5lck5zID0gc2VsZi5vdXRlck5hbWVzcGFjZVtvcmlnaW5hbE5zXQogICAgICAgICAgICAgICAgIHJldHVybiAiezB9fX17MX17Mn06OnszfXs0fXs1fVxuIi5mb3JtYXQoIG0uZ3JvdXAoMSksIG0uZ3JvdXAoMiksIG91dGVyTnMsIGlubmVyTnMsIG0uZ3JvdXAoNCksIG0uZ3JvdXAoNSkpCiAgICAgICAgIG0gPSBuc1JlLm1hdGNoKCBsaW5lICkKQEAgLTQ3LDcgKzQ3LDcgQEAKICAgICAgICAgICAgICMgcHJpbnQoIlt7MH1dIG9yaWdpbmFsTnM6ICd7MX0nIi5mb3JtYXQobGluZU5vLCBvcmlnaW5hbE5zKSkKICAgICAgICAgICAgICMgcHJpbnQoICIgICIgKyBsaW5lICkKICAgICAgICAgICAgICMgcHJpbnQoICIgIDE6W3swfV1cbiAgMjpbezF9XVxuICAzOlt7Mn1dXG4gIDQ6W3szfV0iLmZvcm1hdCggbS5ncm91cCgxKSwgbS5ncm91cCgyKSwgbS5ncm91cCgzKSwgbS5ncm91cCg0KSApICkKLSAgICAgICAgICAgIGlmIHNlbGYub3V0ZXJOYW1lc3BhY2UuaGFzX2tleShvcmlnaW5hbE5zKToKKyAgICAgICAgICAgIGlmIG9yaWdpbmFsTnMgaW4gc2VsZi5vdXRlck5hbWVzcGFjZToKICAgICAgICAgICAgICAgICBvdXRlck5zLCBpbm5lck5zID0gc2VsZi5vdXRlck5hbWVzcGFjZVtvcmlnaW5hbE5zXQogICAgICAgICAgICAgICAgIHJldHVybiAiezB9ezF9IHt7IG5hbWVzcGFjZSB7Mn17M317NH1cbiIuZm9ybWF0KCBtLmdyb3VwKDEpLCBvdXRlck5zLCBpbm5lck5zLCBtLmdyb3VwKDMpLCBtLmdyb3VwKDQpICkKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9lbWJlZENsYXJhLnB5IGIvc2NyaXB0cy9lbWJlZENsYXJhLnB5Cm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggZTdiYjkzMy4uN2NlYjNlMwotLS0gYS9zY3JpcHRzL2VtYmVkQ2xhcmEucHkKKysrIGIvc2NyaXB0cy9lbWJlZENsYXJhLnB5CkBAIC0xLDMgKzEsNSBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisKICMgRXhlY3V0ZSB0aGlzIHNjcmlwdCBhbnkgdGltZSB5b3UgaW1wb3J0IGEgbmV3IGNvcHkgb2YgQ2xhcmEgaW50byB0aGUgdGhpcmRfcGFydHkgYXJlYQogaW1wb3J0IG9zCiBpbXBvcnQgc3lzCmRpZmYgLS1naXQgYS9zY3JpcHRzL2ZpeFdoaXRlc3BhY2UucHkgYi9zY3JpcHRzL2ZpeFdoaXRlc3BhY2UucHkKaW5kZXggNmYzN2M1My4uYmZhNGFhMCAxMDA3NTUKLS0tIGEvc2NyaXB0cy9maXhXaGl0ZXNwYWNlLnB5CisrKyBiL3NjcmlwdHMvZml4V2hpdGVzcGFjZS5weQpAQCAtNCwxOSArNCwyMCBAQAogaW1wb3J0IG9zCiBmcm9tIHNjcmlwdENvbW1vbiBpbXBvcnQgY2F0Y2hQYXRoCiAKLWNoYW5nZWRGaWxlcyA9IDAKLQogZGVmIGlzU291cmNlRmlsZSggcGF0aCApOgogICAgIHJldHVybiBwYXRoLmVuZHN3aXRoKCAiLmNwcCIgKSBvciBwYXRoLmVuZHN3aXRoKCAiLmgiICkgb3IgcGF0aC5lbmRzd2l0aCggIi5ocHAiICkKIAogZGVmIGZpeEFsbEZpbGVzSW5EaXIoIGRpciApOgorICAgIGNoYW5nZWRGaWxlcyA9IDAKICAgICBmb3IgZiBpbiBvcy5saXN0ZGlyKCBkaXIgKToKICAgICAgICAgcGF0aCA9IG9zLnBhdGguam9pbiggZGlyLGYgKQogICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZSggcGF0aCApOgogICAgICAgICAgICAgaWYgaXNTb3VyY2VGaWxlKCBwYXRoICk6Ci0gICAgICAgICAgICAgICAgZml4RmlsZSggcGF0aCApCisgICAgICAgICAgICAgICAgaWYgZml4RmlsZSggcGF0aCApOgorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkRmlsZXMgKz0gMQogICAgICAgICBlbHNlOgogICAgICAgICAgICAgZml4QWxsRmlsZXNJbkRpciggcGF0aCApCisgICAgcmV0dXJuIGNoYW5nZWRGaWxlcwogCiBkZWYgZml4RmlsZSggcGF0aCApOgogICAgIGYgPSBvcGVuKCBwYXRoLCAncicgKQpAQCAtNDEsOCArNDIsMTAgQEAKICAgICAgICAgICAgIGYyLndyaXRlKCBsaW5lICkKICAgICAgICAgZjIuY2xvc2UoKQogICAgICAgICBvcy5yZW1vdmUoIGFsdFBhdGggKQorICAgICAgICByZXR1cm4gVHJ1ZQorICAgIHJldHVybiBGYWxzZQogCi1maXhBbGxGaWxlc0luRGlyKGNhdGNoUGF0aCkKK2NoYW5nZWRGaWxlcyA9IGZpeEFsbEZpbGVzSW5EaXIoY2F0Y2hQYXRoKQogaWYgY2hhbmdlZEZpbGVzID4gMDoKICAgICBwcmludCggIkZpeGVkICIgKyBzdHIoY2hhbmdlZEZpbGVzKSArICIgZmlsZShzKSIgKQogZWxzZToKZGlmZiAtLWdpdCBhL3NjcmlwdHMvZ2VuZXJhdGVTaW5nbGVIZWFkZXIucHkgYi9zY3JpcHRzL2dlbmVyYXRlU2luZ2xlSGVhZGVyLnB5CmluZGV4IDYzM2U4YzEuLjMxMDMzZDYgMTAwNzU1Ci0tLSBhL3NjcmlwdHMvZ2VuZXJhdGVTaW5nbGVIZWFkZXIucHkKKysrIGIvc2NyaXB0cy9nZW5lcmF0ZVNpbmdsZUhlYWRlci5weQpAQCAtNyw3ICs3LDYgQEAKIGltcG9ydCBzeXMKIGltcG9ydCByZQogaW1wb3J0IGRhdGV0aW1lCi1pbXBvcnQgc3RyaW5nCiBmcm9tIGdsb2IgaW1wb3J0IGdsb2IKIAogZnJvbSBzY3JpcHRDb21tb24gaW1wb3J0IGNhdGNoUGF0aApAQCAtMjUsNyArMjQsNyBAQAogCiAgICAgc2VlbkhlYWRlcnMgPSBzZXQoW10pCiAgICAgcm9vdFBhdGggPSBvcy5wYXRoLmpvaW4oIGNhdGNoUGF0aCwgJ2luY2x1ZGUvJyApCi0gICAgb3V0cHV0UGF0aCA9IG9zLnBhdGguam9pbiggY2F0Y2hQYXRoLCAnc2luZ2xlX2luY2x1ZGUvY2F0Y2guaHBwJyApCisgICAgb3V0cHV0UGF0aCA9IG9zLnBhdGguam9pbiggY2F0Y2hQYXRoLCAnc2luZ2xlX2luY2x1ZGUvY2F0Y2gyL2NhdGNoLmhwcCcgKQogCiAgICAgZ2xvYmFscyA9IHsKICAgICAgICAgJ2luY2x1ZGVJbXBsJyA6IFRydWUsCkBAIC0zNCw3ICszMyw3IEBACiAgICAgfQogCiAgICAgZm9yIGFyZyBpbiBzeXMuYXJndlsxOl06Ci0gICAgICAgIGFyZyA9IHN0cmluZy5sb3dlcihhcmcpCisgICAgICAgIGFyZyA9IGFyZy5sb3dlcigpCiAgICAgICAgIGlmIGFyZyA9PSAibm9pbXBsIjoKICAgICAgICAgICAgIGdsb2JhbHNbJ2luY2x1ZGVJbXBsJ10gPSBGYWxzZQogICAgICAgICAgICAgcHJpbnQoICJOb3QgaW5jbHVkaW5nIGltcGwgY29kZSIgKQpAQCAtNDcsMTEgKzQ2LDExIEBACiAgICAgb3V0RGlyID0gb3MucGF0aC5kaXJuYW1lKG91dHB1dFBhdGgpCiAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKG91dERpcik6CiAgICAgICAgIG9zLm1ha2VkaXJzKG91dERpcikKLSAgICBvdXQgPSBpby5vcGVuKCBvdXRwdXRQYXRoLCAndycsIG5ld2xpbmU9J1xuJykKKyAgICBvdXQgPSBpby5vcGVuKCBvdXRwdXRQYXRoLCAndycsIG5ld2xpbmU9J1xuJywgZW5jb2Rpbmc9J3V0Zi04JykKIAogICAgIGRlZiB3cml0ZSggbGluZSApOgogICAgICAgICBpZiBnbG9iYWxzWydpbmNsdWRlSW1wbCddIG9yIGdsb2JhbHNbJ2ltcGxJZkRlZnMnXSA9PSAtMToKLSAgICAgICAgICAgIG91dC53cml0ZSggbGluZS5kZWNvZGUoJ3V0Zi04JykgKQorICAgICAgICAgICAgb3V0LndyaXRlKCBsaW5lICkKIAogICAgIGRlZiBpbnNlcnRDcHBzKCk6CiAgICAgICAgIGRpcnMgPSBbb3MucGF0aC5qb2luKCByb290UGF0aCwgcykgZm9yIHMgaW4gWycnLCAnaW50ZXJuYWwnLCAncmVwb3J0ZXJzJ11dCkBAIC02NSw5ICs2NCw5IEBACiAgICAgICAgICAgICBwYXJzZUZpbGUoZGlyLCBuYW1lKQogCiAgICAgZGVmIHBhcnNlRmlsZSggcGF0aCwgZmlsZW5hbWUgKToKLSAgICAgICAgZiA9IG9wZW4oIG9zLnBhdGguam9pbihwYXRoLCBmaWxlbmFtZSksICdyJyApCisgICAgICAgIGYgPSBpby5vcGVuKCBvcy5wYXRoLmpvaW4ocGF0aCwgZmlsZW5hbWUpLCAncicsIGVuY29kaW5nPSd1dGYtOCcgKQogICAgICAgICBibGFua3MgPSAwCi0gICAgICAgIHdyaXRlKCAiLy8gc3RhcnQgezB9XG4iLmZvcm1hdCggZmlsZW5hbWUgKSApCisgICAgICAgIHdyaXRlKCB1Ii8vIHN0YXJ0IHswfVxuIi5mb3JtYXQoIGZpbGVuYW1lICkgKQogICAgICAgICBmb3IgbGluZSBpbiBmOgogICAgICAgICAgICAgaWYgJy8vIH4qfiogQ0FUQ0hfQ1BQX1NUSVRDSF9QTEFDRSAqfip+JyBpbiBsaW5lOgogICAgICAgICAgICAgICAgIGluc2VydENwcHMoKQpAQCAtODIsNyArODEsNyBAQAogICAgICAgICAgICAgaWYgbToKICAgICAgICAgICAgICAgICBoZWFkZXIgPSBtLmdyb3VwKDEpCiAgICAgICAgICAgICAgICAgaGVhZGVyUGF0aCwgc2VwLCBoZWFkZXJGaWxlID0gaGVhZGVyLnJwYXJ0aXRpb24oICIvIiApCi0gICAgICAgICAgICAgICAgaWYgbm90IGhlYWRlckZpbGUgaW4gc2VlbkhlYWRlcnM6CisgICAgICAgICAgICAgICAgaWYgaGVhZGVyRmlsZSBub3QgaW4gc2VlbkhlYWRlcnM6CiAgICAgICAgICAgICAgICAgICAgIGlmIGhlYWRlckZpbGUgIT0gInRiY190ZXh0X2Zvcm1hdC5oIiBhbmQgaGVhZGVyRmlsZSAhPSAiY2xhcmEuaCI6CiAgICAgICAgICAgICAgICAgICAgICAgICBzZWVuSGVhZGVycy5hZGQoIGhlYWRlckZpbGUgKQogICAgICAgICAgICAgICAgICAgICBpZiBoZWFkZXJQYXRoID09ICJpbnRlcm5hbCIgYW5kIHBhdGguZW5kc3dpdGgoImludGVybmFsLyIpOgpAQCAtMTAyLDI1ICsxMDEsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGJsYW5rcyA9IDAKICAgICAgICAgICAgICAgICAgICAgaWYgYmxhbmtzIDwgMiBhbmQgbm90IGRlZmluZVBhcnNlci5tYXRjaChsaW5lKToKICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlKCBsaW5lLnJzdHJpcCgpICsgIlxuIiApCi0gICAgICAgIHdyaXRlKCAnLy8gZW5kIHt9XG4nLmZvcm1hdChmaWxlbmFtZSkgKQorICAgICAgICB3cml0ZSggdScvLyBlbmQge31cbicuZm9ybWF0KGZpbGVuYW1lKSApCiAKIAotICAgIHdyaXRlKCAiLypcbiIgKQotICAgIHdyaXRlKCAiICogIENhdGNoIHZ7MH1cbiIuZm9ybWF0KCB2LmdldFZlcnNpb25TdHJpbmcoKSApICkKLSAgICB3cml0ZSggIiAqICBHZW5lcmF0ZWQ6IHswfVxuIi5mb3JtYXQoIGRhdGV0aW1lLmRhdGV0aW1lLm5vdygpICkgKQotICAgIHdyaXRlKCAiICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIgKQotICAgIHdyaXRlKCAiICogIFRoaXMgZmlsZSBoYXMgYmVlbiBtZXJnZWQgZnJvbSBtdWx0aXBsZSBoZWFkZXJzLiBQbGVhc2UgZG9uJ3QgZWRpdCBpdCBkaXJlY3RseVxuIiApCi0gICAgd3JpdGUoICIgKiAgQ29weXJpZ2h0IChjKSB7fSBUd28gQmx1ZSBDdWJlcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4iLmZvcm1hdCggZGF0ZXRpbWUuZGF0ZS50b2RheSgpLnllYXIgKSApCi0gICAgd3JpdGUoICIgKlxuIiApCi0gICAgd3JpdGUoICIgKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZ1xuIiApCi0gICAgd3JpdGUoICIgKiAgZmlsZSBMSUNFTlNFXzFfMC50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpXG4iICkKLSAgICB3cml0ZSggIiAqL1xuIiApCi0gICAgd3JpdGUoICIjaWZuZGVmIFRXT0JMVUVDVUJFU19TSU5HTEVfSU5DTFVERV9DQVRDSF9IUFBfSU5DTFVERURcbiIgKQotICAgIHdyaXRlKCAiI2RlZmluZSBUV09CTFVFQ1VCRVNfU0lOR0xFX0lOQ0xVREVfQ0FUQ0hfSFBQX0lOQ0xVREVEXG4iICkKKyAgICB3cml0ZSggdSIvKlxuIiApCisgICAgd3JpdGUoIHUiICogIENhdGNoIHZ7MH1cbiIuZm9ybWF0KCB2LmdldFZlcnNpb25TdHJpbmcoKSApICkKKyAgICB3cml0ZSggdSIgKiAgR2VuZXJhdGVkOiB7MH1cbiIuZm9ybWF0KCBkYXRldGltZS5kYXRldGltZS5ub3coKSApICkKKyAgICB3cml0ZSggdSIgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIiApCisgICAgd3JpdGUoIHUiICogIFRoaXMgZmlsZSBoYXMgYmVlbiBtZXJnZWQgZnJvbSBtdWx0aXBsZSBoZWFkZXJzLiBQbGVhc2UgZG9uJ3QgZWRpdCBpdCBkaXJlY3RseVxuIiApCisgICAgd3JpdGUoIHUiICogIENvcHlyaWdodCAoYykge30gVHdvIEJsdWUgQ3ViZXMgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuIi5mb3JtYXQoIGRhdGV0aW1lLmRhdGUudG9kYXkoKS55ZWFyICkgKQorICAgIHdyaXRlKCB1IiAqXG4iICkKKyAgICB3cml0ZSggdSIgKiAgRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJvb3N0IFNvZnR3YXJlIExpY2Vuc2UsIFZlcnNpb24gMS4wLiAoU2VlIGFjY29tcGFueWluZ1xuIiApCisgICAgd3JpdGUoIHUiICogIGZpbGUgTElDRU5TRV8xXzAudHh0IG9yIGNvcHkgYXQgaHR0cDovL3d3dy5ib29zdC5vcmcvTElDRU5TRV8xXzAudHh0KVxuIiApCisgICAgd3JpdGUoIHUiICovXG4iICkKKyAgICB3cml0ZSggdSIjaWZuZGVmIFRXT0JMVUVDVUJFU19TSU5HTEVfSU5DTFVERV9DQVRDSF9IUFBfSU5DTFVERURcbiIgKQorICAgIHdyaXRlKCB1IiNkZWZpbmUgVFdPQkxVRUNVQkVTX1NJTkdMRV9JTkNMVURFX0NBVENIX0hQUF9JTkNMVURFRFxuIiApCiAKICAgICBwYXJzZUZpbGUoIHJvb3RQYXRoLCAnY2F0Y2guaHBwJyApCiAKLSAgICB3cml0ZSggIiNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfU0lOR0xFX0lOQ0xVREVfQ0FUQ0hfSFBQX0lOQ0xVREVEXG5cbiIgKQorICAgIHdyaXRlKCB1IiNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfU0lOR0xFX0lOQ0xVREVfQ0FUQ0hfSFBQX0lOQ0xVREVEXG5cbiIgKQogICAgIG91dC5jbG9zZSgpCiAgICAgcHJpbnQgKCJHZW5lcmF0ZWQgc2luZ2xlIGluY2x1ZGUgZm9yIENhdGNoIHZ7MH1cbiIuZm9ybWF0KCB2LmdldFZlcnNpb25TdHJpbmcoKSApICkKIApkaWZmIC0tZ2l0IGEvc2NyaXB0cy9yZWxlYXNlQ29tbW9uLnB5IGIvc2NyaXB0cy9yZWxlYXNlQ29tbW9uLnB5CmluZGV4IDZlNDRkYTIuLjljZGM0ZjYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvcmVsZWFzZUNvbW1vbi5weQorKysgYi9zY3JpcHRzL3JlbGVhc2VDb21tb24ucHkKQEAgLTEyLDggKzEyLDYgQEAKIHZlcnNpb25QYXRoID0gb3MucGF0aC5qb2luKCByb290UGF0aCwgImludGVybmFsL2NhdGNoX3ZlcnNpb24uY3BwIiApCiBkZWZpbmVQYXRoID0gb3MucGF0aC5qb2luKHJvb3RQYXRoLCAnY2F0Y2guaHBwJykKIHJlYWRtZVBhdGggPSBvcy5wYXRoLmpvaW4oIGNhdGNoUGF0aCwgIlJFQURNRS5tZCIgKQotY29uYW5QYXRoID0gb3MucGF0aC5qb2luKGNhdGNoUGF0aCwgJ2NvbmFuZmlsZS5weScpCi1jb25hblRlc3RQYXRoID0gb3MucGF0aC5qb2luKGNhdGNoUGF0aCwgJ3Rlc3RfcGFja2FnZScsICdjb25hbmZpbGUucHknKQogY21ha2VQYXRoID0gb3MucGF0aC5qb2luKGNhdGNoUGF0aCwgJ0NNYWtlTGlzdHMudHh0JykKIAogY2xhc3MgVmVyc2lvbjoKQEAgLTk4LDM1ICs5Niw2IEBACiAgICAgICAgICAgICBsaW5lID0gJ1shW1RyeSBvbmxpbmVdKGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vYmFkZ2UvdHJ5LW9ubGluZS1ibHVlLnN2ZyldKHswfSknLmZvcm1hdCh3YW5kYm94TGluaykKICAgICAgICAgZi53cml0ZSggbGluZSArICJcbiIgKQogCi1kZWYgdXBkYXRlQ29uYW5GaWxlKHZlcnNpb24pOgotICAgIGNvbmFuUGFyc2VyID0gcmUuY29tcGlsZSggcicgICAgdmVyc2lvbiA9ICJcZCtcLlxkK1wuXGQrLioiJykKLSAgICBmID0gb3BlbiggY29uYW5QYXRoLCAncicgKQotICAgIGxpbmVzID0gW10KLSAgICBmb3IgbGluZSBpbiBmOgotICAgICAgICBtID0gY29uYW5QYXJzZXIubWF0Y2goIGxpbmUgKQotICAgICAgICBpZiBtOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKCAnICAgIHZlcnNpb24gPSAiezB9IicuZm9ybWF0KGZvcm1hdCh2ZXJzaW9uLmdldFZlcnNpb25TdHJpbmcoKSkpICkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCggbGluZS5yc3RyaXAoKSApCi0gICAgZi5jbG9zZSgpCi0gICAgZiA9IG9wZW4oIGNvbmFuUGF0aCwgJ3cnICkKLSAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgZi53cml0ZSggbGluZSArICJcbiIgKQotCi1kZWYgdXBkYXRlQ29uYW5UZXN0RmlsZSh2ZXJzaW9uKToKLSAgICBjb25hblBhcnNlciA9IHJlLmNvbXBpbGUoIHInICAgIHJlcXVpcmVzID0gXCJDYXRjaFwvXGQrXC5cZCtcLlxkKy4qQCVzXC8lc1wiICUgXCh1c2VybmFtZSwgY2hhbm5lbFwpJykKLSAgICBmID0gb3BlbiggY29uYW5UZXN0UGF0aCwgJ3InICkKLSAgICBsaW5lcyA9IFtdCi0gICAgZm9yIGxpbmUgaW4gZjoKLSAgICAgICAgbSA9IGNvbmFuUGFyc2VyLm1hdGNoKCBsaW5lICkKLSAgICAgICAgaWYgbToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCggJyAgICByZXF1aXJlcyA9ICJDYXRjaC97MH1AJXMvJXMiICUgKHVzZXJuYW1lLCBjaGFubmVsKScuZm9ybWF0KGZvcm1hdCh2ZXJzaW9uLmdldFZlcnNpb25TdHJpbmcoKSkpICkKLSAgICAgICAgZWxzZToKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZCggbGluZS5yc3RyaXAoKSApCi0gICAgZi5jbG9zZSgpCi0gICAgZiA9IG9wZW4oIGNvbmFuVGVzdFBhdGgsICd3JyApCi0gICAgZm9yIGxpbmUgaW4gbGluZXM6Ci0gICAgICAgIGYud3JpdGUoIGxpbmUgKyAiXG4iICkKIAogZGVmIHVwZGF0ZUNtYWtlRmlsZSh2ZXJzaW9uKToKICAgICB3aXRoIG9wZW4oY21ha2VQYXRoLCAncicpIGFzIGZpbGU6CkBAIC0xNjksMTAgKzEzOCw4IEBACiAgICAgaW1wb3J0IHNodXRpbAogICAgIGZvciByZXAgaW4gKCdhdXRvbWFrZScsICd0YXAnLCAndGVhbWNpdHknKToKICAgICAgICAgc291cmNlRmlsZSA9IG9zLnBhdGguam9pbihjYXRjaFBhdGgsICdpbmNsdWRlL3JlcG9ydGVycy9jYXRjaF9yZXBvcnRlcl97fS5ocHAnLmZvcm1hdChyZXApKQotICAgICAgICBkZXN0RmlsZSA9IG9zLnBhdGguam9pbihjYXRjaFBhdGgsICdzaW5nbGVfaW5jbHVkZS9jYXRjaF9yZXBvcnRlcl97fS5ocHAnLmZvcm1hdChyZXApKQorICAgICAgICBkZXN0RmlsZSA9IG9zLnBhdGguam9pbihjYXRjaFBhdGgsICdzaW5nbGVfaW5jbHVkZScsICdjYXRjaDInLCAnY2F0Y2hfcmVwb3J0ZXJfe30uaHBwJy5mb3JtYXQocmVwKSkKICAgICAgICAgc2h1dGlsLmNvcHlmaWxlKHNvdXJjZUZpbGUsIGRlc3RGaWxlKQogCiAgICAgdXBkYXRlUmVhZG1lRmlsZSh2ZXJzaW9uKQotICAgIHVwZGF0ZUNvbmFuRmlsZSh2ZXJzaW9uKQotICAgIHVwZGF0ZUNvbmFuVGVzdEZpbGUodmVyc2lvbikKICAgICB1cGRhdGVDbWFrZUZpbGUodmVyc2lvbikKZGlmZiAtLWdpdCBhL3NjcmlwdHMvcmVsZWFzZU5vdGVzLnB5IGIvc2NyaXB0cy9yZWxlYXNlTm90ZXMucHkKaW5kZXggODBmZmZiZi4uNWU3NzBiYiAxMDA3NTUKLS0tIGEvc2NyaXB0cy9yZWxlYXNlTm90ZXMucHkKKysrIGIvc2NyaXB0cy9yZWxlYXNlTm90ZXMucHkKQEAgLTEsNSArMSw3IEBACiAjIS91c3IvYmluL2VudiBweXRob24KIAorZnJvbSBfX2Z1dHVyZV9fIGltcG9ydCBwcmludF9mdW5jdGlvbgorCiBpbXBvcnQgb3MKIGltcG9ydCByZQogaW1wb3J0IHVybGxpYjIKQEAgLTQxLDcgKzQzLDYgQEAKICAgICAgICAgcGFzcwogICAgIGVsaWYgbGluZS5zdGFydHN3aXRoKCAiRGF0ZToiKToKICAgICAgICAgZGF0ZXMuYXBwZW5kKCBsaW5lWzU6XS5sc3RyaXAoKSApCi0gICAgICAgIHBhc3MKICAgICBlbGlmIGxpbmUgPT0gIiIgYW5kIHByZXZMaW5lID09ICIiOgogICAgICAgICBwYXNzCiAgICAgZWxzZToKQEAgLTU4LDcgKzU5LDcgQEAKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIG1lc3NhZ2VzLmFwcGVuZCggbGluZTIgKQogCi1wcmludCAiQWxsIGNoYW5nZXMgYmV0d2VlbiB7MH0gYW5kIHsxfTpcbiIuZm9ybWF0KCBkYXRlc1stMV0sIGRhdGVzWzBdICkKK3ByaW50KCJBbGwgY2hhbmdlcyBiZXR3ZWVuIHswfSBhbmQgezF9OlxuIi5mb3JtYXQoIGRhdGVzWy0xXSwgZGF0ZXNbMF0gKSkKIAogZm9yIGxpbmUgaW4gbWVzc2FnZXM6Ci0gICAgcHJpbnQgbGluZQorICAgIHByaW50KGxpbmUpCmRpZmYgLS1naXQgYS9zY3JpcHRzL3NjcmlwdENvbW1vbi5weSBiL3NjcmlwdHMvc2NyaXB0Q29tbW9uLnB5CmluZGV4IDlhZGFkYjYuLmVhZGY5ZmYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvc2NyaXB0Q29tbW9uLnB5CisrKyBiL3NjcmlwdHMvc2NyaXB0Q29tbW9uLnB5CkBAIC02LDggKzYsMTMgQEAKIGNhdGNoUGF0aCA9IG9zLnBhdGguZGlybmFtZShvcy5wYXRoLnJlYWxwYXRoKCBvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pKSkKIAogZGVmIGdldEJ1aWxkRXhlY3V0YWJsZSgpOgotICAgIGRpciA9IG9zLmVudmlyb24uZ2V0KCdDQVRDSF9ERVZfT1VUX0RJUicsICJjbWFrZS1idWlsZC1kZWJ1Zy9TZWxmVGVzdCIpCi0gICAgcmV0dXJuIGRpcgorICAgIGlmIG9zLm5hbWUgPT0gJ250JzoKKyAgICAgICAgZGlyID0gb3MuZW52aXJvbi5nZXQoJ0NBVENIX0RFVl9PVVRfRElSJywgImNtYWtlLWJ1aWxkLWRlYnVnL3Byb2plY3RzL1NlbGZUZXN0LmV4ZSIpCisgICAgICAgIHJldHVybiBkaXIKKyAgICBlbHNlOgorICAgICAgICBkaXIgPSBvcy5lbnZpcm9uLmdldCgnQ0FUQ0hfREVWX09VVF9ESVInLCAiY21ha2UtYnVpbGQtZGVidWcvcHJvamVjdHMvU2VsZlRlc3QiKQorICAgICAgICByZXR1cm4gZGlyCisKIAogZGVmIHJ1bkFuZENhcHR1cmUoIGFyZ3MgKToKICAgICBjaGlsZCA9IHN1YnByb2Nlc3MuUG9wZW4oIiAiLmpvaW4oIGFyZ3MgKSwgc2hlbGw9VHJ1ZSwgc3Rkb3V0PXN1YnByb2Nlc3MuUElQRSkKQEAgLTE1LDcgKzIwLDcgQEAKICAgICBsaW5lID0gIiIKICAgICB3aGlsZSBUcnVlOgogICAgICAgICBvdXQgPSBjaGlsZC5zdGRvdXQucmVhZCgxKQotICAgICAgICBpZiBvdXQgPT0gJycgYW5kIGNoaWxkLnBvbGwoKSAhPSBOb25lOgorICAgICAgICBpZiBvdXQgPT0gJycgYW5kIGNoaWxkLnBvbGwoKToKICAgICAgICAgICAgIGJyZWFrCiAgICAgICAgIGlmIG91dCAhPSAnJzoKICAgICAgICAgICAgIGlmIG91dCA9PSAnXG4nOgpkaWZmIC0tZ2l0IGEvc2NyaXB0cy91cGRhdGVEb2N1bWVudFRvQy5weSBiL3NjcmlwdHMvdXBkYXRlRG9jdW1lbnRUb0MucHkKaW5kZXggOTQ4ZTVlMS4uMzI1YzhhMyAxMDA2NDQKLS0tIGEvc2NyaXB0cy91cGRhdGVEb2N1bWVudFRvQy5weQorKysgYi9zY3JpcHRzL3VwZGF0ZURvY3VtZW50VG9DLnB5CkBAIC0xMiw3ICsxMiw2IEBACiAjCiAKIGZyb20gIF9fZnV0dXJlX18gIGltcG9ydCBwcmludF9mdW5jdGlvbgotZnJvbSBzY3JpcHRDb21tb24gaW1wb3J0IGNhdGNoUGF0aAogCiBpbXBvcnQgYXJncGFyc2UKIGltcG9ydCBnbG9iCkBAIC0yMCwxMiArMTksMTQgQEAKIGltcG9ydCByZQogaW1wb3J0IHN5cwogCitmcm9tIHNjcmlwdENvbW1vbiBpbXBvcnQgY2F0Y2hQYXRoCisKICMgQ29uZmlndXJhdGlvbjoKIAogbWluVG9jRW50cmllcyA9IDQKIAogaGVhZGluZ0V4Y2x1ZGVEZWZhdWx0ID0gWzEsMyw0LDVdICAjIHVzZSBsZXZlbCAyIGhlYWRlcnMgZm9yIGF0IGRlZmF1bHQKLWhlYWRpbmdFeGNsdWRlUmVsZWFzZSA9IFsyLDMsNCw1XSAgIyB1c2UgbGV2ZWwgMSBoZWFkZXJzIGZvciByZWxlYXNlLW5vdGVzLm1kCitoZWFkaW5nRXhjbHVkZVJlbGVhc2UgPSBbMSwzLDQsNV0gICMgdXNlIGxldmVsIDEgaGVhZGVycyBmb3IgcmVsZWFzZS1ub3Rlcy5tZAogCiBkb2N1bWVudHNEZWZhdWx0ID0gb3MucGF0aC5qb2luKG9zLnBhdGgucmVscGF0aChjYXRjaFBhdGgpLCAnZG9jcy8qLm1kJykKIHJlbGVhc2VOb3Rlc05hbWUgPSAncmVsZWFzZS1ub3Rlcy5tZCcKQEAgLTkwLDE4ICs5MSwyMCBAQAogICAgIGxldmVsID0gbGVuKHN0cmlwcGVkX3JpZ2h0KSAtIGxlbihzdHJpcHBlZF9ib3RoKQogICAgIHN0cmlwcGVkX3dzcGFjZSA9IHN0cmlwcGVkX2JvdGguc3RyaXAoKQogCi0gICAgIyBjaGFyYWN0ZXIgcmVwbGFjZW1lbnRzCi0gICAgcmVwbGFjZWRfY29sb24gPSBzdHJpcHBlZF93c3BhY2UucmVwbGFjZSgnLicsICcnKQotICAgIHJlcGxhY2VkX3NsYXNoID0gcmVwbGFjZWRfY29sb24ucmVwbGFjZSgnLycsICcnKQotICAgIHJlbV9ub252YWxpZHMgPSAnJy5qb2luKFtjIGlmIGMgaW4gVkFMSURTCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgJy0nIGZvciBjIGluIHJlcGxhY2VkX3NsYXNoXSkKKyAgICAjIEdpdEh1YidzIHNsdWdnaWZpY2F0aW9uIHdvcmtzIGluIGFuIGludGVyZXN0aW5nIHdheQorICAgICMgMSkgJysnLCAnLycsICcoJywgJyknIGFuZCBzbyBvbiBhcmUganVzdCByZW1vdmVkCisgICAgIyAyKSBzcGFjZXMgYXJlIGNvbnZlcnRlZCBpbnRvICctJyBkaXJlY3RseQorICAgICMgMykgbXVsdGlwbGUgLS0gYXJlIG5vdCBjb2xsYXBzZWQKIAotICAgIGxvd2VyZWQgPSByZW1fbm9udmFsaWRzLmxvd2VyKCkKLSAgICBkYXNoaWZpZWQgPSByZS5zdWIocicoLSlcMSsnLCByJ1wxJywgbG93ZXJlZCkgICMgcmVtb3ZlIGR1cGxpY2F0ZSBkYXNoZXMKLSAgICBkYXNoaWZpZWQgPSBkYXNoaWZpZWQuc3RyaXAoJy0nKSAgIyBzdHJpcCBkYXNoZXMgZnJvbSBzdGFydCBhbmQgZW5kCi0KLSAgICAjIGV4Y2VwdGlvbiAnJicgKGRvdWJsZS1kYXNoIGluIGdpdGh1YikKLSAgICBkYXNoaWZpZWQgPSBkYXNoaWZpZWQucmVwbGFjZSgnLSYtJywgJy0tJykKKyAgICBkYXNoaWZpZWQgPSAnJworICAgIGZvciBjIGluIHN0cmlwcGVkX3dzcGFjZToKKyAgICAgICAgaWYgYyBpbiBWQUxJRFM6CisgICAgICAgICAgICBkYXNoaWZpZWQgKz0gYy5sb3dlcigpCisgICAgICAgIGVsaWYgYy5pc3NwYWNlKCk6CisgICAgICAgICAgICBkYXNoaWZpZWQgKz0gJy0nCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICAjIFVua25vd24gc3ltYm9scyBhcmUganVzdCByZW1vdmVkCisgICAgICAgICAgICBjb250aW51ZQogCiAgICAgcmV0dXJuIFtzdHJpcHBlZF93c3BhY2UsIGRhc2hpZmllZCwgbGV2ZWxdCiAKQEAgLTEyNyw3ICsxMzAsNyBAQAogICAgICAgICAgICAgQSBsaXN0IG9mIDMtdmFsdWUgc3VibGlzdHMsIHdoZXJlIHRoZSBmaXJzdCB2YWx1ZQogICAgICAgICAgICAgcmVwcmVzZW50cyB0aGUgaGVhZGluZywgdGhlIHNlY29uZCB2YWx1ZSB0aGUgc3RyaW5nCiAgICAgICAgICAgICB0aGF0IHdhcyBpbnNlcnRlZCBhc3NpZ25lZCB0byB0aGUgSURzIGluIHRoZSBhbmNob3IgdGFncywKLSAgICAgICAgICAgIGFuZCB0aGUgdGhpcmQgdmFsdWUgaXMgYW4gaW50ZWdlciB0aGF0IHJlcHJlbnRzIHRoZSBoZWFkbGluZSBsZXZlbC4KKyAgICAgICAgICAgIGFuZCB0aGUgdGhpcmQgdmFsdWUgaXMgYW4gaW50ZWdlciB0aGF0IHJlcHJlc2VudHMgdGhlIGhlYWRsaW5lIGxldmVsLgogICAgICAgICAgICAgRS5nLiwKICAgICAgICAgICAgIFtbJ3NvbWUgaGVhZGVyIGx2bDMnLCAnc29tZS1oZWFkZXItbHZsMycsIDNdLCAuLi5dCiAKQEAgLTI4Miw3ICsyODUsNyBAQAogICAgICAgaW5wdXRfZmlsZTogc3RyCiAgICAgICAgIFBhdGggdG8gdGhlIG1hcmtkb3duIGlucHV0IGZpbGUuCiAKLSAgICAgIG91dHB1dF9maWxlOiBzdHIgKGRlZmF1bDogTm9uZSkKKyAgICAgIG91dHB1dF9maWxlOiBzdHIgKGRlZmF1bHQ6IE5vbmUpCiAgICAgICAgIFBhdGggdG8gdGhlIG1hcmtkb3duIG91dHB1dCBmaWxlLgogCiAgICAgICBtaW5fdG9jX2xlbjogaW50IChkZWZhdWx0OiAyKQpAQCAtNDIwLDcgKzQyMyw3IEBACiAgICAgICAgIGRlZmF1bHQ9bWluVG9jRW50cmllcywKICAgICAgICAgdHlwZT1pbnQsCiAgICAgICAgIG1ldGF2YXI9J04nLAotICAgICAgICBoZWxwPSd0aGUgbWluaW11bSBudW1iZXIgb2YgZW50cmllcyB0byBjcmVhdGUgYSB0YWJsZSBvZiBjb250ZW50cyBmb3IgW3tkZWZsdH1dJy5mb3JtYXQoZGVmbHQ9bWluVG9jRW50cmllcykpCisgICAgICAgIGhlbHA9J3RoZSBtaW5pbXVtIG51bWJlciBvZiBlbnRyaWVzIHRvIGNyZWF0ZSBhIHRhYmxlIG9mIGNvbnRlbnRzIGZvciBbe2RlZmF1bHR9XScuZm9ybWF0KGRlZmF1bHQ9bWluVG9jRW50cmllcykpCiAKICAgICBwYXJzZXIuYWRkX2FyZ3VtZW50KAogICAgICAgICAnLS1yZW1vdmUtdG9jJywKQEAgLTQzMSw3ICs0MzQsNyBAQAogCiAgICAgYXJncyA9IHBhcnNlci5wYXJzZV9hcmdzKCkKIAotICAgIHBhdGhzID0gYXJncy5JbnB1dCBpZiBsZW4oYXJncy5JbnB1dCkgPiAwIGVsc2UgW2RvY3VtZW50c0RlZmF1bHRdCisgICAgcGF0aHMgPSBhcmdzLklucHV0IGlmIGFyZ3MuSW5wdXQgZWxzZSBbZG9jdW1lbnRzRGVmYXVsdF0KIAogICAgIGNoYW5nZWRGaWxlcyA9IHVwZGF0ZURvY3VtZW50VG9DKHBhdGhzPXBhdGhzLCBtaW5fdG9jX2xlbj1hcmdzLm1pblRvY0VudHJpZXMsIHZlcmJvc2U9YXJncy52ZXJib3NlKQogCmRpZmYgLS1naXQgYS9zY3JpcHRzL3VwZGF0ZVZjcGtnUGFja2FnZS5weSBiL3NjcmlwdHMvdXBkYXRlVmNwa2dQYWNrYWdlLnB5CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MzMyMWUxLi4wMDAwMDAwCi0tLSBhL3NjcmlwdHMvdXBkYXRlVmNwa2dQYWNrYWdlLnB5CisrKyAvZGV2L251bGwKQEAgLTEsMTEwICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotCi1pbXBvcnQgaW8sIG9zLCByZSwgc3lzLCBzdWJwcm9jZXNzCi1pbXBvcnQgaGFzaGxpYgotCi1mcm9tIHNjcmlwdENvbW1vbiBpbXBvcnQgY2F0Y2hQYXRoCi1mcm9tIHJlbGVhc2VDb21tb24gaW1wb3J0IFZlcnNpb24KLQotcHJpbnQoY2F0Y2hQYXRoKQotCi1kZWZhdWx0X3BhdGggPSAnLi4vdmNwa2cvcG9ydHMvY2F0Y2gyLycKLQotZGVmIGFkanVzdGVkX3BhdGgocGF0aCk6Ci0gICAgcmV0dXJuIG9zLnBhdGguam9pbihjYXRjaFBhdGgsIHBhdGgpCi0KLWRlZiBnZXRfaGFzaChwYXRoKToKLSAgICBCVUZGX1NJWkUgPSA2NTUzNgotICAgIHNoYTUxMiA9IGhhc2hsaWIuc2hhNTEyKCkKLSAgICAjIFRoZSBuZXdsaW5lcyBzaG91bGQgYmUgbm9ybWFsaXplZCBpbnRvIFxuLCB3aGljaCBpcyB3aGF0IHdlIHdhbnQKLSAgICAjIElmIHJldXNlZCB1c2UgJ3JiJyB3aXRoIGEgZmlsZSB3cml0dGVuIHdpdGggaW8ub3BlbihuZXdsaW5lPSdcbicpCi0gICAgd2l0aCBvcGVuKHBhdGgsICdyJykgYXMgZjoKLSAgICAgICAgd2hpbGUgVHJ1ZToKLSAgICAgICAgICAgIGRhdGEgPSBmLnJlYWQoQlVGRl9TSVpFKQotICAgICAgICAgICAgaWYgbm90IGRhdGE6Ci0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGlmIHN5cy52ZXJzaW9uX2luZm9bMF0gPCAzOgotICAgICAgICAgICAgICAgIHNoYTUxMi51cGRhdGUoZGF0YSkKLSAgICAgICAgICAgIGVsc2U6Ci0gICAgICAgICAgICAgICAgc2hhNTEyLnVwZGF0ZShkYXRhLmVuY29kZSgndXRmLTgnKSkKLSAgICByZXR1cm4gc2hhNTEyLmhleGRpZ2VzdCgpCi0KLWRlZiB1cGRhdGVfY29udHJvbChwYXRoKToKLSAgICB2ID0gVmVyc2lvbigpCi0gICAgdmVyX3N0cmluZyA9IHYuZ2V0VmVyc2lvblN0cmluZygpCi0KLSAgICAjIFVwZGF0ZSBjb250cm9sCi0gICAgbGluZXMgPSBbXQotICAgIGNvbnRyb2xfcGF0aCA9IG9zLnBhdGguam9pbihwYXRoLCAnQ09OVFJPTCcpCi0gICAgd2l0aCBvcGVuKGNvbnRyb2xfcGF0aCwgJ3InKSBhcyBmOgotICAgICAgICBmb3IgbGluZSBpbiBmOgotICAgICAgICAgICAgbGluZXMuYXBwZW5kKGxpbmUpCi0gICAgd2l0aCBvcGVuKGNvbnRyb2xfcGF0aCwgJ3cnKSBhcyBmOgotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgIGlmICdWZXJzaW9uOiAnIGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICdWZXJzaW9uOiB7fVxuJy5mb3JtYXQodi5nZXRWZXJzaW9uU3RyaW5nKCkpCi0gICAgICAgICAgICBmLndyaXRlKGxpbmUpCi0KLWRlZiB1cGRhdGVfcG9ydGZpbGUocGF0aCwgaGVhZGVyX2hhc2gsIGxpY2VuY2VfaGFzaCk6Ci0gICAgcHJpbnQoJ1VwZGF0aW5nIHBvcnRmaWxlJykKLSAgICB2ID0gVmVyc2lvbigpCi0gICAgdmVyX3N0cmluZyA9IHYuZ2V0VmVyc2lvblN0cmluZygpCi0KLSAgICAjIFVwZGF0ZSBwb3J0ZmlsZQotICAgIGxpbmVzID0gW10KLSAgICBwb3J0ZmlsZV9wYXRoID0gb3MucGF0aC5qb2luKHBhdGgsICdwb3J0ZmlsZS5jbWFrZScpCi0gICAgd2l0aCBvcGVuKHBvcnRmaWxlX3BhdGgsICdyJykgYXMgZjoKLSAgICAgICAgZm9yIGxpbmUgaW4gZjoKLSAgICAgICAgICAgIGxpbmVzLmFwcGVuZChsaW5lKQotICAgIHdpdGggb3Blbihwb3J0ZmlsZV9wYXRoLCAndycpIGFzIGY6Ci0gICAgICAgICMgVGhlcmUgYXJlIHRocmVlIHRoaW5ncyB3ZSBuZWVkIHRvIGNoYW5nZS91cGRhdGUKLSAgICAgICAgIyAxKSBDQVRDSF9WRVJTSU9OIGNtYWtlIHZhcmlhYmxlCi0gICAgICAgICMgMikgSGFzaCBvZiBoZWFkZXIKLSAgICAgICAgIyAzKSBIYXNoIG9mIGxpY2VuY2UKLSAgICAgICAgIyBXZSBjb3VsZCBhc3N1bWUgbGljZW5jZSBuZXZlciBjaGFuZ2VzLCBidXQgd2hlcmUgaXMgdGhlIGZ1biBpbiB0aGF0PwotICAgICAgICBmb3IgbGluZSBpbiBsaW5lczoKLSAgICAgICAgICAgICMgVXBkYXRlIHRoZSB2ZXJzaW9uCi0gICAgICAgICAgICBpZiAnc2V0KENBVENIX1ZFUlNJT04nIGluIGxpbmU6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICdzZXQoQ0FUQ0hfVkVSU0lPTiB2e30pXG4nLmZvcm1hdCh2LmdldFZlcnNpb25TdHJpbmcoKSkKLQotICAgICAgICAgICAgIyBEZXRlcm1pbmUgd2hpY2ggZmlsZSB3ZSBhcmUgdXBkYXRpbmcKLSAgICAgICAgICAgIGlmICd2Y3BrZ19kb3dubG9hZF9kaXN0ZmlsZScgaW4gbGluZToKLSAgICAgICAgICAgICAgICBraW5kID0gbGluZS5zcGxpdCgnKCcpWy0xXS5zdHJpcCgpCi0KLSAgICAgICAgICAgICMgVXBkYXRlIHRoZSBoYXNoZXMKLSAgICAgICAgICAgIGlmICdTSEE1MTInIGluIGxpbmUgYW5kIGtpbmQgPT0gJ0hFQURFUic6Ci0gICAgICAgICAgICAgICAgbGluZSA9ICcgICAgU0hBNTEyIHt9XG4nLmZvcm1hdChoZWFkZXJfaGFzaCkKLSAgICAgICAgICAgIGlmICdTSEE1MTInIGluIGxpbmUgYW5kIGtpbmQgPT0gJ0xJQ0VOU0UnOgotICAgICAgICAgICAgICAgIGxpbmUgPSAnICAgIFNIQTUxMiB7fVxuJy5mb3JtYXQobGljZW5jZV9oYXNoKQotICAgICAgICAgICAgZi53cml0ZShsaW5lKQotCi0KLWRlZiBnaXRfcHVzaChwYXRoX3RvX3JlcG8pOgotICAgIHYgPSBWZXJzaW9uKCkKLSAgICB2ZXJfc3RyaW5nID0gdi5nZXRWZXJzaW9uU3RyaW5nKCkKLQotICAgIG9zLmNoZGlyKHBhdGhfdG9fcmVwbykKLQotICAgICMgV29yayB3aXRoIGdpdAotICAgICMgTWFrZSBzdXJlIHdlIGJyYW5jaCBvZmYgbWFzdGVyCi0gICAgc3VicHJvY2Vzcy5jYWxsKCdnaXQgY2hlY2tvdXQgbWFzdGVyJywgc2hlbGw9VHJ1ZSkKLSAgICAKLSAgICAjIFVwZGF0ZSByZXBvIHRvIGN1cnJlbnQgbWFzdGVyLCBzbyB3ZSBkb24ndCB3b3JrIG9mZiBvbGQgdmVyc2lvbiBvZiB0aGUgcG9ydHNmaWxlIAotICAgIHN1YnByb2Nlc3MuY2FsbCgnZ2l0IHB1bGwgTWljcm9zb2Z0IG1hc3RlcicsIHNoZWxsPVRydWUpCi0gICAgc3VicHJvY2Vzcy5jYWxsKCdnaXQgcHVzaCcsIHNoZWxsPVRydWUpCi0KLSAgICAjIENyZWF0ZSBhIG5ldyBicmFuY2ggZm9yIHRoZSB1cGRhdGUKLSAgICBzdWJwcm9jZXNzLmNhbGwoJ2dpdCBjaGVja291dCAtYiBjYXRjaC17fScuZm9ybWF0KHZlcl9zdHJpbmcpLCBzaGVsbD1UcnVlKQotICAgICMgQWRkIGNoYW5nZWQgZmlsZXMgKHNob3VsZCBiZSBvbmx5IG91ciBmaWxlcykKLSAgICBzdWJwcm9jZXNzLmNhbGwoJ2dpdCBhZGQgLXUgLicsIHNoZWxsPVRydWUpCi0gICAgIyBDcmVhdGUgYSBjb21taXQgd2l0aCB0aGVzZSBjaGFuZ2VzCi0gICAgc3VicHJvY2Vzcy5jYWxsKCdnaXQgY29tbWl0IC1tICJVcGRhdGUgQ2F0Y2ggdG8ge30iJy5mb3JtYXQodmVyX3N0cmluZyksIHNoZWxsPVRydWUpCi0gICAgIyBEb24ndCBwdXNoLCBzbyBhdXRob3IgY2FuIHJldmlldwotICAgIHByaW50KCdDaGFuZ2VzIHdlcmUgY29tbWl0ZWQgdG8gdGhlIHZjcGtnIGZvcmsuIFBsZWFzZSBjaGVjaywgcHVzaCBhbmQgb3BlbiBQUi4nKQotCi1oZWFkZXJfaGFzaCA9IGdldF9oYXNoKGFkanVzdGVkX3BhdGgoJ3NpbmdsZV9pbmNsdWRlL2NhdGNoLmhwcCcpKQotbGljZW5jZV9oYXNoID0gZ2V0X2hhc2goYWRqdXN0ZWRfcGF0aCgnTElDRU5TRS50eHQnKSkKLXVwZGF0ZV9jb250cm9sKGFkanVzdGVkX3BhdGgoZGVmYXVsdF9wYXRoKSkKLXVwZGF0ZV9wb3J0ZmlsZShhZGp1c3RlZF9wYXRoKGRlZmF1bHRfcGF0aCksIGhlYWRlcl9oYXNoLCBsaWNlbmNlX2hhc2gpCi0KLWdpdF9wdXNoKGFkanVzdGVkX3BhdGgoJy4uL3ZjcGtnJykpCmRpZmYgLS1naXQgYS9zY3JpcHRzL3VwZGF0ZVdhbmRib3gucHkgYi9zY3JpcHRzL3VwZGF0ZVdhbmRib3gucHkKaW5kZXggMjVhNzQ2My4uNTY0Zjk0OCAxMDA2NDQKLS0tIGEvc2NyaXB0cy91cGRhdGVXYW5kYm94LnB5CisrKyBiL3NjcmlwdHMvdXBkYXRlV2FuZGJveC5weQpAQCAtMzQsMTQgKzM0LDE0IEBACiAgICAgICAgICdjb2RlJzogbWFpbl9maWxlLAogICAgICAgICAnY29kZXMnOiBbewogICAgICAgICAgICAgJ2ZpbGUnOiAnY2F0Y2guaHBwJywKLSAgICAgICAgICAgICdjb2RlJzogb3Blbihvcy5wYXRoLmpvaW4oY2F0Y2hQYXRoLCAnc2luZ2xlX2luY2x1ZGUnLCAnY2F0Y2guaHBwJykpLnJlYWQoKQorICAgICAgICAgICAgJ2NvZGUnOiBvcGVuKG9zLnBhdGguam9pbihjYXRjaFBhdGgsICdzaW5nbGVfaW5jbHVkZScsICdjYXRjaDInLCAnY2F0Y2guaHBwJykpLnJlYWQoKQogICAgICAgICB9XSwKICAgICAgICAgJ29wdGlvbnMnOiAnYysrMTEsY3BwLW5vLXBlZGFudGljLGJvb3N0LW5vdGhpbmcnLAogICAgICAgICAnY29tcGlsZXItb3B0aW9uLXJhdyc6ICctRENBVENIX0NPTkZJR19GQVNUX0NPTVBJTEUnLAogICAgICAgICAnc2F2ZSc6IFRydWUKICAgICB9KQogCi0gICAgaWYgJ3N0YXR1cycgaW4gcmVzcG9uc2UgYW5kIG5vdCAnY29tcGlsZXJfZXJyb3InIGluIHJlc3BvbnNlOgorICAgIGlmICdzdGF0dXMnIGluIHJlc3BvbnNlIGFuZCAnY29tcGlsZXJfZXJyb3InIG5vdCBpbiByZXNwb25zZToKICAgICAgICAgcmV0dXJuIFRydWUsIHJlc3BvbnNlWyd1cmwnXQogICAgIGVsc2U6CiAgICAgICAgIHJldHVybiBGYWxzZSwgcmVzcG9uc2UKZGlmZiAtLWdpdCBhL3NpbmdsZV9pbmNsdWRlL2NhdGNoLmhwcCBiL3NpbmdsZV9pbmNsdWRlL2NhdGNoMi9jYXRjaC5ocHAKc2ltaWxhcml0eSBpbmRleCA3NSUKcmVuYW1lIGZyb20gc2luZ2xlX2luY2x1ZGUvY2F0Y2guaHBwCnJlbmFtZSB0byBzaW5nbGVfaW5jbHVkZS9jYXRjaDIvY2F0Y2guaHBwCmluZGV4IDgwOGRlYmIuLjE4NTBmZmYgMTAwNjQ0Ci0tLSBhL3NpbmdsZV9pbmNsdWRlL2NhdGNoLmhwcAorKysgYi9zaW5nbGVfaW5jbHVkZS9jYXRjaDIvY2F0Y2guaHBwCkBAIC0xLDkgKzEsOSBAQAogLyoKLSAqICBDYXRjaCB2Mi4xLjEKLSAqICBHZW5lcmF0ZWQ6IDIwMTgtMDEtMjYgMTY6MDQ6MDcuMTkwMDYzCisgKiAgQ2F0Y2ggdjIuNy4wCisgKiAgR2VuZXJhdGVkOiAyMDE5LTAzLTA3IDIxOjM0OjMwLjI1MjE2NAogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqICBUaGlzIGZpbGUgaGFzIGJlZW4gbWVyZ2VkIGZyb20gbXVsdGlwbGUgaGVhZGVycy4gUGxlYXNlIGRvbid0IGVkaXQgaXQgZGlyZWN0bHkKLSAqICBDb3B5cmlnaHQgKGMpIDIwMTggVHdvIEJsdWUgQ3ViZXMgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoYykgMjAxOSBUd28gQmx1ZSBDdWJlcyBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKICAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKQEAgLTEzLDYgKzEzLDEwIEBACiAvLyBzdGFydCBjYXRjaC5ocHAKIAogCisjZGVmaW5lIENBVENIX1ZFUlNJT05fTUFKT1IgMgorI2RlZmluZSBDQVRDSF9WRVJTSU9OX01JTk9SIDcKKyNkZWZpbmUgQ0FUQ0hfVkVSU0lPTl9QQVRDSCAwCisKICNpZmRlZiBfX2NsYW5nX18KICMgICAgcHJhZ21hIGNsYW5nIHN5c3RlbV9oZWFkZXIKICNlbGlmIGRlZmluZWQgX19HTlVDX18KQEAgLTI2LDE2ICszMCwxOSBAQAogIyAgICAgICBwcmFnbWEgd2FybmluZyhwdXNoKQogIyAgICAgICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOiAxNjEgMTY4MikKICMgICBlbHNlIC8vIF9fSUNDCi0jICAgICAgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XdW51c2VkLXZhcmlhYmxlIgogIyAgICAgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCiAjICAgICAgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XcGFkZGVkIgogIyAgICAgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3N3aXRjaC1lbnVtIgogIyAgICAgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2NvdmVyZWQtc3dpdGNoLWRlZmF1bHQiCiAjICAgIGVuZGlmCiAjZWxpZiBkZWZpbmVkIF9fR05VQ19fCi0jICAgIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VudXNlZC12YXJpYWJsZSIKLSMgICAgcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XcGFyZW50aGVzZXMiCisgICAgIC8vIEJlY2F1c2UgUkVRVUlSRXMgdHJpZ2dlciBHQ0MncyAtV3BhcmVudGhlc2VzLCBhbmQgYmVjYXVzZSBzdGlsbAorICAgICAvLyBzdXBwb3J0ZWQgdmVyc2lvbiBvZiBnKysgaGF2ZSBvbmx5IGJ1Z2d5IHN1cHBvcnQgZm9yIF9QcmFnbWFzLAorICAgICAvLyBXcGFyZW50aGVzZXMgaGF2ZSB0byBiZSBzdXBwcmVzc2VkIGdsb2JhbGx5LgorIyAgICBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdwYXJlbnRoZXNlcyIgLy8gU2VlICM2NzQgZm9yIGRldGFpbHMKKwogIyAgICBwcmFnbWEgR0NDIGRpYWdub3N0aWMgcHVzaAorIyAgICBwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVd1bnVzZWQtdmFyaWFibGUiCiAjICAgIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3BhZGRlZCIKICNlbmRpZgogLy8gZW5kIGNhdGNoX3N1cHByZXNzX3dhcm5pbmdzLmgKQEAgLTUxLDcgKzU4LDkgQEAKICMgIGlmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfTUFUQ0hFUlMpCiAjICAgIHVuZGVmIENBVENIX0NPTkZJR19ESVNBQkxFX01BVENIRVJTCiAjICBlbmRpZgotIyAgZGVmaW5lIENBVENIX0NPTkZJR19FTkFCTEVfQ0hST05PX1NUUklOR01BS0VSCisjICBpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX0NIUk9OT19TVFJJTkdNQUtFUikKKyMgICAgZGVmaW5lIENBVENIX0NPTkZJR19FTkFCTEVfQ0hST05PX1NUUklOR01BS0VSCisjICBlbmRpZgogI2VuZGlmCiAKICNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfSU1QTF9PTkxZKQpAQCAtNjgsNyArNzcsNyBAQAogI2VsaWYgZGVmaW5lZChsaW51eCkgfHwgZGVmaW5lZChfX2xpbnV4KSB8fCBkZWZpbmVkKF9fbGludXhfXykKICMgIGRlZmluZSBDQVRDSF9QTEFURk9STV9MSU5VWAogCi0jZWxpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX01TQ19WRVIpCisjZWxpZiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX01TQ19WRVIpIHx8IGRlZmluZWQoX19NSU5HVzMyX18pCiAjICBkZWZpbmUgQ0FUQ0hfUExBVEZPUk1fV0lORE9XUwogI2VuZGlmCiAKQEAgLTEwMCw2ICsxMDksNyBAQAogLy8gQ0FUQ0hfQ09ORklHX0NPVU5URVIgOiBpcyB0aGUgX19DT1VOVEVSX18gbWFjcm8gc3VwcG9ydGVkPwogLy8gQ0FUQ0hfQ09ORklHX1dJTkRPV1NfU0VIIDogaXMgV2luZG93cyBTRUggc3VwcG9ydGVkPwogLy8gQ0FUQ0hfQ09ORklHX1BPU0lYX1NJR05BTFMgOiBhcmUgUE9TSVggc2lnbmFscyBzdXBwb3J0ZWQ/CisvLyBDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TIDogQXJlIGV4Y2VwdGlvbnMgZW5hYmxlZD8KIC8vICoqKioqKioqKioqKioqKioKIC8vIE5vdGUgdG8gbWFpbnRhaW5lcnM6IGlmIG5ldyB0b2dnbGVzIGFyZSBhZGRlZCBwbGVhc2UgZG9jdW1lbnQgdGhlbQogLy8gaW4gY29uZmlndXJhdGlvbi5tZCwgdG9vCkBAIC0xMTIsMTAgKzEyMiwxOCBAQAogCiAjaWZkZWYgX19jcGx1c3BsdXMKIAotIyAgaWYgX19jcGx1c3BsdXMgPj0gMjAxNDAyTAorIyAgaWYgKF9fY3BsdXNwbHVzID49IDIwMTQwMkwpIHx8IChkZWZpbmVkKF9NU1ZDX0xBTkcpICYmIF9NU1ZDX0xBTkcgPj0gMjAxNDAyTCkKICMgICAgZGVmaW5lIENBVENIX0NQUDE0X09SX0dSRUFURVIKICMgIGVuZGlmCiAKKyMgIGlmIChfX2NwbHVzcGx1cyA+PSAyMDE3MDNMKSB8fCAoZGVmaW5lZChfTVNWQ19MQU5HKSAmJiBfTVNWQ19MQU5HID49IDIwMTcwM0wpCisjICAgIGRlZmluZSBDQVRDSF9DUFAxN19PUl9HUkVBVEVSCisjICBlbmRpZgorCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKKyMgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfVU5DQVVHSFRfRVhDRVBUSU9OUwogI2VuZGlmCiAKICNpZmRlZiBfX2NsYW5nX18KQEAgLTEzMywxNiArMTUxLDI0IEBACiAjICAgICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX1BBUkVOVEhFU0VTX1dBUk5JTkdTIFwKICAgICAgICAgICAgIF9QcmFnbWEoICJjbGFuZyBkaWFnbm9zdGljIHBvcCIgKQogCisjICAgICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19VTlVTRURfV0FSTklOR1MgXAorICAgICAgICAgICAgX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgcHVzaCIgKSBcCisgICAgICAgICAgICBfUHJhZ21hKCAiY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkIFwiLVd1bnVzZWQtdmFyaWFibGVcIiIgKQorIyAgICAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19VTlVTRURfV0FSTklOR1MgXAorICAgICAgICAgICAgX1ByYWdtYSggImNsYW5nIGRpYWdub3N0aWMgcG9wIiApCisKICNlbmRpZiAvLyBfX2NsYW5nX18KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEFzc3VtZSB0aGF0IG5vbi1XaW5kb3dzIHBsYXRmb3JtcyBzdXBwb3J0IHBvc2l4IHNpZ25hbHMgYnkgZGVmYXVsdAorI2lmICFkZWZpbmVkKENBVENIX1BMQVRGT1JNX1dJTkRPV1MpCisgICAgI2RlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfUE9TSVhfU0lHTkFMUworI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLyBXZSBrbm93IHNvbWUgZW52aXJvbm1lbnRzIG5vdCB0byBzdXBwb3J0IGZ1bGwgUE9TSVggc2lnbmFscwotI2lmIGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX1FOWF9fKQotCi0jICAgaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX1BPU0lYX1NJR05BTFMpCi0jICAgICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fUE9TSVhfU0lHTkFMUwotIyAgIGVuZGlmCi0KKyNpZiBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX19RTlhfXykgfHwgZGVmaW5lZChfX0VNU0NSSVBURU5fXykgfHwgZGVmaW5lZChfX0RKR1BQX18pCisgICAgI2RlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fUE9TSVhfU0lHTkFMUwogI2VuZGlmCiAKICNpZmRlZiBfX09TNDAwX18KQEAgLTE1MSwxOSArMTc3LDQ4IEBACiAjZW5kaWYKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEFuZHJvaWQgc29tZWhvdyBzdGlsbCBkb2VzIG5vdCBzdXBwb3J0IHN0ZDo6dG9fc3RyaW5nCisjaWYgZGVmaW5lZChfX0FORFJPSURfXykKKyMgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19OT19DUFAxMV9UT19TVFJJTkcKKyNlbmRpZgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gTm90IGFsbCBXaW5kb3dzIGVudmlyb25tZW50cyBzdXBwb3J0IFNFSCBwcm9wZXJseQorI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisjICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fV0lORE9XU19TRUgKKyNlbmRpZgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gUFM0CisjaWYgZGVmaW5lZChfX09SQklTX18pCisjICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fTkVXX0NBUFRVUkUKKyNlbmRpZgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gQ3lnd2luCiAjaWZkZWYgX19DWUdXSU5fXwogCiAvLyBSZXF1aXJlZCBmb3Igc29tZSB2ZXJzaW9ucyBvZiBDeWd3aW4gdG8gZGVjbGFyZSBnZXR0aW1lb2ZkYXkKIC8vIHNlZTogaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8zNjkwMTgwMy9nZXR0aW1lb2ZkYXktbm90LWRlY2xhcmVkLWluLXRoaXMtc2NvcGUtY3lnd2luCiAjICAgZGVmaW5lIF9CU0RfU09VUkNFCisvLyBzb21lIHZlcnNpb25zIG9mIGN5Z3dpbiAobW9zdCkgZG8gbm90IHN1cHBvcnQgc3RkOjp0b19zdHJpbmcuIFVzZSB0aGUgbGlic3RkIGNoZWNrLgorLy8gaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy00LjguMi9saWJzdGRjKysvYXBpL2EwMTA1M19zb3VyY2UuaHRtbCBsaW5lIDI4MTItMjgxMworIyBpZiAhKChfX2NwbHVzcGx1cyA+PSAyMDExMDNMKSAmJiBkZWZpbmVkKF9HTElCQ1hYX1VTRV9DOTkpIFwKKwkgICAgICAgJiYgIWRlZmluZWQoX0dMSUJDWFhfSEFWRV9CUk9LRU5fVlNXUFJJTlRGKSkKIAorIwlkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05PX0NQUDExX1RPX1NUUklORworCisjIGVuZGlmCiAjZW5kaWYgLy8gX19DWUdXSU5fXwogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogLy8gVmlzdWFsIEMrKwogI2lmZGVmIF9NU0NfVkVSCiAKKyMgIGlmIF9NU0NfVkVSID49IDE5MDAgLy8gVmlzdWFsIFN0dWRpbyAyMDE1IG9yIG5ld2VyCisjICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfVU5DQVVHSFRfRVhDRVBUSU9OUworIyAgZW5kaWYKKwogLy8gVW5pdmVyc2FsIFdpbmRvd3MgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCBTRUgKIC8vIE9yIGNvbnNvbGUgY29sb3VycyAob3IgY29uc29sZSBhdCBhbGwuLi4pCiAjICBpZiBkZWZpbmVkKFdJTkFQSV9GQU1JTFkpICYmIChXSU5BUElfRkFNSUxZID09IFdJTkFQSV9GQU1JTFlfQVBQKQpAQCAtMTcyLDkgKzIyNywzNCBAQAogIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX1dJTkRPV1NfU0VICiAjICBlbmRpZgogCisvLyBNU1ZDIHRyYWRpdGlvbmFsIHByZXByb2Nlc3NvciBuZWVkcyBzb21lIHdvcmthcm91bmQgZm9yIF9fVkFfQVJHU19fCisvLyBfTVNWQ19UUkFESVRJT05BTCA9PSAwIG1lYW5zIG5ldyBjb25mb3JtYW50IHByZXByb2Nlc3NvcgorLy8gX01TVkNfVFJBRElUSU9OQUwgPT0gMSBtZWFucyBvbGQgdHJhZGl0aW9uYWwgbm9uLWNvbmZvcm1hbnQgcHJlcHJvY2Vzc29yCisjICBpZiAhZGVmaW5lZChfTVNWQ19UUkFESVRJT05BTCkgfHwgKGRlZmluZWQoX01TVkNfVFJBRElUSU9OQUwpICYmIF9NU1ZDX1RSQURJVElPTkFMKQorIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCisjICBlbmRpZgorCiAjZW5kaWYgLy8gX01TQ19WRVIKIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIENoZWNrIGlmIHdlIGFyZSBjb21waWxlZCB3aXRoIC1mbm8tZXhjZXB0aW9ucyBvciBlcXVpdmFsZW50CisjaWYgZGVmaW5lZChfX0VYQ0VQVElPTlMpIHx8IGRlZmluZWQoX19jcHBfZXhjZXB0aW9ucykgfHwgZGVmaW5lZChfQ1BQVU5XSU5EKQorIyAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19FWENFUFRJT05TX0VOQUJMRUQKKyNlbmRpZgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworLy8gREpHUFAKKyNpZmRlZiBfX0RKR1BQX18KKyMgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fV0NIQVIKKyNlbmRpZiAvLyBfX0RKR1BQX18KKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIEVtYmFyY2FkZXJvIEMrK0J1aWxkCisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCisgICAgI2RlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfUE9MWUZJTExfSVNOQU4KKyNlbmRpZgorCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiAvLyBVc2Ugb2YgX19DT1VOVEVSX18gaXMgc3VwcHJlc3NlZCBkdXJpbmcgY29kZSBhbmFseXNpcyBpbgogLy8gQ0xpb24vQXBwQ29kZSAyMDE3LjIueCBhbmQgZm9ybWVyLCBiZWNhdXNlIF9fQ09VTlRFUl9fIGlzIG5vdCBwcm9wZXJseQpAQCAtMTg1LDE2ICsyNjUsOTIgQEAKICAgICAjZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19DT1VOVEVSCiAjZW5kaWYKIAorLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKy8vIENoZWNrIGlmIHN0cmluZ192aWV3IGlzIGF2YWlsYWJsZSBhbmQgdXNhYmxlCisvLyBUaGUgY2hlY2sgaXMgc3BsaXQgYXBhcnQgdG8gd29yayBhcm91bmQgdjE0MCAoVlMyMDE1KSBwcmVwcm9jZXNzb3IgaXNzdWUuLi4KKyNpZiBkZWZpbmVkKF9faGFzX2luY2x1ZGUpCisjaWYgX19oYXNfaW5jbHVkZSg8c3RyaW5nX3ZpZXc+KSAmJiBkZWZpbmVkKENBVENIX0NQUDE3X09SX0dSRUFURVIpCisjICAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9DT05GSUdfQ1BQMTdfU1RSSU5HX1ZJRVcKKyNlbmRpZgorI2VuZGlmCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDaGVjayBpZiBvcHRpb25hbCBpcyBhdmFpbGFibGUgYW5kIHVzYWJsZQorI2lmIGRlZmluZWQoX19oYXNfaW5jbHVkZSkKKyMgIGlmIF9faGFzX2luY2x1ZGUoPG9wdGlvbmFsPikgJiYgZGVmaW5lZChDQVRDSF9DUFAxN19PUl9HUkVBVEVSKQorIyAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X09QVElPTkFMCisjICBlbmRpZiAvLyBfX2hhc19pbmNsdWRlKDxvcHRpb25hbD4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKKyNlbmRpZiAvLyBfX2hhc19pbmNsdWRlCisKKy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisvLyBDaGVjayBpZiB2YXJpYW50IGlzIGF2YWlsYWJsZSBhbmQgdXNhYmxlCisjaWYgZGVmaW5lZChfX2hhc19pbmNsdWRlKQorIyAgaWYgX19oYXNfaW5jbHVkZSg8dmFyaWFudD4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKKyMgICAgaWYgZGVmaW5lZChfX2NsYW5nX18pICYmIChfX2NsYW5nX21ham9yX18gPCA4KQorICAgICAgIC8vIHdvcmsgYXJvdW5kIGNsYW5nIGJ1ZyB3aXRoIGxpYnN0ZGMrKyBodHRwczovL2J1Z3MubGx2bS5vcmcvc2hvd19idWcuY2dpP2lkPTMxODUyCisgICAgICAgLy8gZml4IHNob3VsZCBiZSBpbiBjbGFuZyA4LCB3b3JrYXJvdW5kIGluIGxpYnN0ZGMrKyA4LjIKKyMgICAgICBpbmNsdWRlIDxjaXNvNjQ2PgorIyAgICAgIGlmIGRlZmluZWQoX19HTElCQ1hYX18pICYmIGRlZmluZWQoX0dMSUJDWFhfUkVMRUFTRSkgJiYgKF9HTElCQ1hYX1JFTEVBU0UgPCA5KQorIyAgICAgICAgZGVmaW5lIENBVENIX0NPTkZJR19OT19DUFAxN19WQVJJQU5UCisjICAgICAgZWxzZQorIyAgICAgICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19WQVJJQU5UCisjICAgICAgZW5kaWYgLy8gZGVmaW5lZChfX0dMSUJDWFhfXykgJiYgZGVmaW5lZChfR0xJQkNYWF9SRUxFQVNFKSAmJiAoX0dMSUJDWFhfUkVMRUFTRSA8IDkpCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X1ZBUklBTlQKKyMgICAgZW5kaWYgLy8gZGVmaW5lZChfX2NsYW5nX18pICYmIChfX2NsYW5nX21ham9yX18gPCA4KQorIyAgZW5kaWYgLy8gX19oYXNfaW5jbHVkZSg8dmFyaWFudD4pICYmIGRlZmluZWQoQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUikKKyNlbmRpZiAvLyBfX2hhc19pbmNsdWRlCisKICNpZiBkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19DT1VOVEVSKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfTk9fQ09VTlRFUikgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0NPVU5URVIpCiAjICAgZGVmaW5lIENBVENIX0NPTkZJR19DT1VOVEVSCiAjZW5kaWYKLSNpZiBkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19XSU5ET1dTX1NFSCkgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX05PX1dJTkRPV1NfU0VIKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfV0lORE9XU19TRUgpCisjaWYgZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9DT05GSUdfV0lORE9XU19TRUgpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19XSU5ET1dTX1NFSCkgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX1dJTkRPV1NfU0VIKSAmJiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fV0lORE9XU19TRUgpCiAjICAgZGVmaW5lIENBVENIX0NPTkZJR19XSU5ET1dTX1NFSAogI2VuZGlmCiAvLyBUaGlzIGlzIHNldCBieSBkZWZhdWx0LCBiZWNhdXNlIHdlIGFzc3VtZSB0aGF0IHVuaXggY29tcGlsZXJzIGFyZSBwb3NpeC1zaWduYWwtY29tcGF0aWJsZSBieSBkZWZhdWx0LgotI2lmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19OT19QT1NJWF9TSUdOQUxTKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfTk9fUE9TSVhfU0lHTkFMUykgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX1BPU0lYX1NJR05BTFMpCisjaWYgZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9DT05GSUdfUE9TSVhfU0lHTkFMUykgJiYgIWRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05PX1BPU0lYX1NJR05BTFMpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19QT1NJWF9TSUdOQUxTKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfUE9TSVhfU0lHTkFMUykKICMgICBkZWZpbmUgQ0FUQ0hfQ09ORklHX1BPU0lYX1NJR05BTFMKICNlbmRpZgorLy8gVGhpcyBpcyBzZXQgYnkgZGVmYXVsdCwgYmVjYXVzZSB3ZSBhc3N1bWUgdGhhdCBjb21waWxlcnMgd2l0aCBubyB3Y2hhcl90IHN1cHBvcnQgYXJlIGp1c3QgcmFyZSBleGNlcHRpb25zLgorI2lmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19OT19XQ0hBUikgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX05PX1dDSEFSKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfV0NIQVIpCisjICAgZGVmaW5lIENBVENIX0NPTkZJR19XQ0hBUgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fQ1BQMTFfVE9fU1RSSU5HKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfTk9fQ1BQMTFfVE9fU1RSSU5HKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTFfVE9fU1RSSU5HKQorIyAgICBkZWZpbmUgQ0FUQ0hfQ09ORklHX0NQUDExX1RPX1NUUklORworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19PUFRJT05BTCkgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX05PX0NQUDE3X09QVElPTkFMKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfT1BUSU9OQUwpCisjICBkZWZpbmUgQ0FUQ0hfQ09ORklHX0NQUDE3X09QVElPTkFMCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X1VOQ0FVR0hUX0VYQ0VQVElPTlMpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19DUFAxN19VTkNBVUdIVF9FWENFUFRJT05TKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfVU5DQVVHSFRfRVhDRVBUSU9OUykKKyMgIGRlZmluZSBDQVRDSF9DT05GSUdfQ1BQMTdfVU5DQVVHSFRfRVhDRVBUSU9OUworI2VuZGlmCisKKyNpZiBkZWZpbmVkKENBVENIX0lOVEVSTkFMX0NPTkZJR19DUFAxN19TVFJJTkdfVklFVykgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX05PX0NQUDE3X1NUUklOR19WSUVXKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfU1RSSU5HX1ZJRVcpCisjICBkZWZpbmUgQ0FUQ0hfQ09ORklHX0NQUDE3X1NUUklOR19WSUVXCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX0NQUDE3X1ZBUklBTlQpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19DUFAxN19WQVJJQU5UKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfVkFSSUFOVCkKKyMgIGRlZmluZSBDQVRDSF9DT05GSUdfQ1BQMTdfVkFSSUFOVAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FWFBFUklNRU5UQUxfUkVESVJFQ1QpCisjICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05FV19DQVBUVVJFCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX05FV19DQVBUVVJFKSAmJiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9DT05GSUdfTk9fTkVXX0NBUFRVUkUpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19ORVdfQ0FQVFVSRSkgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX05FV19DQVBUVVJFKQorIyAgZGVmaW5lIENBVENIX0NPTkZJR19ORVdfQ0FQVFVSRQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9DT05GSUdfRVhDRVBUSU9OU19FTkFCTEVEKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TKQorIyAgZGVmaW5lIENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9DT05GSUdfUE9MWUZJTExfSVNOQU4pICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19OT19QT0xZRklMTF9JU05BTikgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX1BPTFlGSUxMX0lTTkFOKQorIyAgZGVmaW5lIENBVENIX0NPTkZJR19QT0xZRklMTF9JU05BTgorI2VuZGlmCiAKICNpZiAhZGVmaW5lZChDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19QQVJFTlRIRVNFU19XQVJOSU5HUykKICMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfUEFSRU5USEVTRVNfV0FSTklOR1MKQEAgLTIwNCw2ICszNjAsMjQgQEAKICMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfR0xPQkFMU19XQVJOSU5HUwogIyAgIGRlZmluZSBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MKICNlbmRpZgorI2lmICFkZWZpbmVkKENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUykKKyMgICBkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTCisjICAgZGVmaW5lIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUykKKyNkZWZpbmUgQ0FUQ0hfVFJZIGlmICgodHJ1ZSkpCisjZGVmaW5lIENBVENIX0NBVENIX0FMTCBpZiAoKGZhbHNlKSkKKyNkZWZpbmUgQ0FUQ0hfQ0FUQ0hfQU5PTih0eXBlKSBpZiAoKGZhbHNlKSkKKyNlbHNlCisjZGVmaW5lIENBVENIX1RSWSB0cnkKKyNkZWZpbmUgQ0FUQ0hfQ0FUQ0hfQUxMIGNhdGNoICguLi4pCisjZGVmaW5lIENBVENIX0NBVENIX0FOT04odHlwZSkgY2F0Y2ggKHR5cGUpCisjZW5kaWYKKworI2lmIGRlZmluZWQoQ0FUQ0hfSU5URVJOQUxfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SKSAmJiAhZGVmaW5lZChDQVRDSF9DT05GSUdfTk9fVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IpICYmICFkZWZpbmVkKENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUikKKyNkZWZpbmUgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCisjZW5kaWYKIAogLy8gZW5kIGNhdGNoX2NvbXBpbGVyX2NhcGFiaWxpdGllcy5oCiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FX0xJTkUyKCBuYW1lLCBsaW5lICkgbmFtZSMjbGluZQpAQCAtMjE4LDYgKzM5MiwxMCBAQAogI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxjc3RkaW50PgogCisvLyBXZSBuZWVkIGEgZHVtbXkgZ2xvYmFsIG9wZXJhdG9yPDwgc28gd2UgY2FuIGJyaW5nIGl0IGludG8gQ2F0Y2ggbmFtZXNwYWNlIGxhdGVyCitzdHJ1Y3QgQ2F0Y2hfZ2xvYmFsX25hbWVzcGFjZV9kdW1teSB7fTsKK3N0ZDo6b3N0cmVhbSYgb3BlcmF0b3I8PChzdGQ6Om9zdHJlYW0mLCBDYXRjaF9nbG9iYWxfbmFtZXNwYWNlX2R1bW15KTsKKwogbmFtZXNwYWNlIENhdGNoIHsKIAogICAgIHN0cnVjdCBDYXNlU2Vuc2l0aXZlIHsgZW51bSBDaG9pY2UgewpAQCAtMjQ0LDEwICs0MjIsMTAgQEAKICAgICAgICAgICAgIGxpbmUoIF9saW5lICkKICAgICAgICAge30KIAotICAgICAgICBTb3VyY2VMaW5lSW5mbyggU291cmNlTGluZUluZm8gY29uc3QmIG90aGVyICkgICAgICAgID0gZGVmYXVsdDsKLSAgICAgICAgU291cmNlTGluZUluZm8oIFNvdXJjZUxpbmVJbmZvICYmICkgICAgICAgICAgICAgICAgICA9IGRlZmF1bHQ7Ci0gICAgICAgIFNvdXJjZUxpbmVJbmZvJiBvcGVyYXRvciA9ICggU291cmNlTGluZUluZm8gY29uc3QmICkgPSBkZWZhdWx0OwotICAgICAgICBTb3VyY2VMaW5lSW5mbyYgb3BlcmF0b3IgPSAoIFNvdXJjZUxpbmVJbmZvICYmICkgICAgID0gZGVmYXVsdDsKKyAgICAgICAgU291cmNlTGluZUluZm8oIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBvdGhlciApICAgICAgICAgICAgPSBkZWZhdWx0OworICAgICAgICBTb3VyY2VMaW5lSW5mbyYgb3BlcmF0b3IgPSAoIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiApICAgICA9IGRlZmF1bHQ7CisgICAgICAgIFNvdXJjZUxpbmVJbmZvKCBTb3VyY2VMaW5lSW5mbyYmICkgICAgICAgICAgICAgIG5vZXhjZXB0ID0gZGVmYXVsdDsKKyAgICAgICAgU291cmNlTGluZUluZm8mIG9wZXJhdG9yID0gKCBTb3VyY2VMaW5lSW5mbyYmICkgbm9leGNlcHQgPSBkZWZhdWx0OwogCiAgICAgICAgIGJvb2wgZW1wdHkoKSBjb25zdCBub2V4Y2VwdDsKICAgICAgICAgYm9vbCBvcGVyYXRvciA9PSAoIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBvdGhlciApIGNvbnN0IG5vZXhjZXB0OwpAQCAtMjU5LDYgKzQzNywxMSBAQAogCiAgICAgc3RkOjpvc3RyZWFtJiBvcGVyYXRvciA8PCAoIHN0ZDo6b3N0cmVhbSYgb3MsIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBpbmZvICk7CiAKKyAgICAvLyBCcmluZyBpbiBvcGVyYXRvcjw8IGZyb20gZ2xvYmFsIG5hbWVzcGFjZSBpbnRvIENhdGNoIG5hbWVzcGFjZQorICAgIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2UgdGhlIG92ZXJsb2FkIG9mIG9wZXJhdG9yPDwgYWJvdmUgbWFrZXMKKyAgICAvLyBsb29rdXAgc3RvcCBhdCBuYW1lc3BhY2UgQ2F0Y2gKKyAgICB1c2luZyA6Om9wZXJhdG9yPDw7CisKICAgICAvLyBVc2UgdGhpcyBpbiB2YXJpYWRpYyBzdHJlYW1pbmcgbWFjcm9zIHRvIGFsbG93CiAgICAgLy8gICAgPj4gK1N0cmVhbUVuZFN0b3AKICAgICAvLyBhcyB3ZWxsIGFzCkBAIC0yOTUsNyArNDc4LDYgQEAKIC8vIHN0YXJ0IGNhdGNoX2ludGVyZmFjZXNfdGVzdGNhc2UuaAogCiAjaW5jbHVkZSA8dmVjdG9yPgotI2luY2x1ZGUgPG1lbW9yeT4KIAogbmFtZXNwYWNlIENhdGNoIHsKIApAQCAtMzA2LDggKzQ4OCw2IEBACiAgICAgICAgIHZpcnR1YWwgfklUZXN0SW52b2tlcigpOwogICAgIH07CiAKLSAgICB1c2luZyBJVGVzdENhc2VQdHIgPSBzdGQ6OnNoYXJlZF9wdHI8SVRlc3RJbnZva2VyPjsKLQogICAgIGNsYXNzIFRlc3RDYXNlOwogICAgIHN0cnVjdCBJQ29uZmlnOwogCkBAIC0zMzIsOCArNTEyLDYgQEAKIAogbmFtZXNwYWNlIENhdGNoIHsKIAotICAgIGNsYXNzIFN0cmluZ0RhdGE7Ci0KICAgICAvLy8gQSBub24tb3duaW5nIHN0cmluZyBjbGFzcyAoc2ltaWxhciB0byB0aGUgZm9ydGhjb21pbmcgc3RkOjpzdHJpbmdfdmlldykKICAgICAvLy8gTm90ZSB0aGF0LCBiZWNhdXNlIGEgU3RyaW5nUmVmIG1heSBiZSBhIHN1YnN0cmluZyBvZiBhbm90aGVyIHN0cmluZywKICAgICAvLy8gaXQgbWF5IG5vdCBiZSBudWxsIHRlcm1pbmF0ZWQuIGNfc3RyKCkgbXVzdCByZXR1cm4gYSBudWxsIHRlcm1pbmF0ZWQKQEAgLTQyMywxNiArNjAxLDIwIEBACiAgICAgcHVibGljOiAvLyBzdWJzdHJpbmdzIGFuZCBzZWFyY2hlcwogICAgICAgICBhdXRvIHN1YnN0ciggc2l6ZV90eXBlIHN0YXJ0LCBzaXplX3R5cGUgc2l6ZSApIGNvbnN0IG5vZXhjZXB0IC0+IFN0cmluZ1JlZjsKIAorICAgICAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXJ0IHBvaW50ZXIuCisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGUgcG9pbnRlciBjYW4gY2hhbmdlIHdoZW4gaWYgdGhlIFN0cmluZ1JlZiBpcyBhIHN1YnN0cmluZworICAgICAgICBhdXRvIGN1cnJlbnREYXRhKCkgY29uc3Qgbm9leGNlcHQgLT4gY2hhciBjb25zdCo7CisKICAgICBwcml2YXRlOiAvLyBvd25lcnNoaXAgcXVlcmllcyAtIG1heSBub3QgYmUgY29uc2lzdGVudCBiZXR3ZWVuIGNhbGxzCiAgICAgICAgIGF1dG8gaXNPd25lZCgpIGNvbnN0IG5vZXhjZXB0IC0+IGJvb2w7CiAgICAgICAgIGF1dG8gaXNTdWJzdHJpbmcoKSBjb25zdCBub2V4Y2VwdCAtPiBib29sOwotICAgICAgICBhdXRvIGRhdGEoKSBjb25zdCBub2V4Y2VwdCAtPiBjaGFyIGNvbnN0KjsKICAgICB9OwogCiAgICAgYXV0byBvcGVyYXRvciArICggU3RyaW5nUmVmIGNvbnN0JiBsaHMsIFN0cmluZ1JlZiBjb25zdCYgcmhzICkgLT4gc3RkOjpzdHJpbmc7CiAgICAgYXV0byBvcGVyYXRvciArICggU3RyaW5nUmVmIGNvbnN0JiBsaHMsIGNoYXIgY29uc3QqIHJocyApIC0+IHN0ZDo6c3RyaW5nOwogICAgIGF1dG8gb3BlcmF0b3IgKyAoIGNoYXIgY29uc3QqIGxocywgU3RyaW5nUmVmIGNvbnN0JiByaHMgKSAtPiBzdGQ6OnN0cmluZzsKIAorICAgIGF1dG8gb3BlcmF0b3IgKz0gKCBzdGQ6OnN0cmluZyYgbGhzLCBTdHJpbmdSZWYgY29uc3QmIHNyICkgLT4gc3RkOjpzdHJpbmcmOwogICAgIGF1dG8gb3BlcmF0b3IgPDwgKCBzdGQ6Om9zdHJlYW0mIG9zLCBTdHJpbmdSZWYgY29uc3QmIHNyICkgLT4gc3RkOjpvc3RyZWFtJjsKIAogICAgIGlubGluZSBhdXRvIG9wZXJhdG9yICIiIF9zciggY2hhciBjb25zdCogcmF3Q2hhcnMsIHN0ZDo6c2l6ZV90IHNpemUgKSBub2V4Y2VwdCAtPiBTdHJpbmdSZWYgewpAQCAtNDQxLDcgKzYyMywxOTMgQEAKIAogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIAoraW5saW5lIGF1dG8gb3BlcmF0b3IgIiIgX2NhdGNoX3NyKCBjaGFyIGNvbnN0KiByYXdDaGFycywgc3RkOjpzaXplX3Qgc2l6ZSApIG5vZXhjZXB0IC0+IENhdGNoOjpTdHJpbmdSZWYgeworICAgIHJldHVybiBDYXRjaDo6U3RyaW5nUmVmKCByYXdDaGFycywgc2l6ZSApOworfQorCiAvLyBlbmQgY2F0Y2hfc3RyaW5ncmVmLmgKKy8vIHN0YXJ0IGNhdGNoX3R5cGVfdHJhaXRzLmhwcAorCisKKyNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KKworbmFtZXNwYWNlIENhdGNoeworCisjaWZkZWYgQ0FUQ0hfQ1BQMTdfT1JfR1JFQVRFUgorCXRlbXBsYXRlIDx0eXBlbmFtZS4uLj4KKwlpbmxpbmUgY29uc3RleHByIGF1dG8gaXNfdW5pcXVlID0gc3RkOjp0cnVlX3R5cGV7fTsKKworCXRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBSZXN0PgorCWlubGluZSBjb25zdGV4cHIgYXV0byBpc191bmlxdWU8VCwgUmVzdC4uLj4gPSBzdGQ6OmJvb2xfY29uc3RhbnQ8CisJCSghc3RkOjppc19zYW1lX3Y8VCwgUmVzdD4gJiYgLi4uKSAmJiBpc191bmlxdWU8UmVzdC4uLj4KKwk+e307CisjZWxzZQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+CitzdHJ1Y3QgaXNfdW5pcXVlIDogc3RkOjp0cnVlX3R5cGV7fTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUuLi4gUmVzdD4KK3N0cnVjdCBpc191bmlxdWU8VDAsIFQxLCBSZXN0Li4uPiA6IHN0ZDo6aW50ZWdyYWxfY29uc3RhbnQKKzxib29sLAorICAgICAhc3RkOjppc19zYW1lPFQwLCBUMT46OnZhbHVlCisgICAgICYmIGlzX3VuaXF1ZTxUMCwgUmVzdC4uLj46OnZhbHVlCisgICAgICYmIGlzX3VuaXF1ZTxUMSwgUmVzdC4uLj46OnZhbHVlCis+e307CisKKyNlbmRpZgorfQorCisvLyBlbmQgY2F0Y2hfdHlwZV90cmFpdHMuaHBwCisvLyBzdGFydCBjYXRjaF9wcmVwcm9jZXNzb3IuaHBwCisKKworI2RlZmluZSBDQVRDSF9SRUNVUlNJT05fTEVWRUwwKC4uLikgX19WQV9BUkdTX18KKyNkZWZpbmUgQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMMSguLi4pIENBVENIX1JFQ1VSU0lPTl9MRVZFTDAoQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMMChDQVRDSF9SRUNVUlNJT05fTEVWRUwwKF9fVkFfQVJHU19fKSkpCisjZGVmaW5lIENBVENIX1JFQ1VSU0lPTl9MRVZFTDIoLi4uKSBDQVRDSF9SRUNVUlNJT05fTEVWRUwxKENBVENIX1JFQ1VSU0lPTl9MRVZFTDEoQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMMShfX1ZBX0FSR1NfXykpKQorI2RlZmluZSBDQVRDSF9SRUNVUlNJT05fTEVWRUwzKC4uLikgQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMMihDQVRDSF9SRUNVUlNJT05fTEVWRUwyKENBVENIX1JFQ1VSU0lPTl9MRVZFTDIoX19WQV9BUkdTX18pKSkKKyNkZWZpbmUgQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMNCguLi4pIENBVENIX1JFQ1VSU0lPTl9MRVZFTDMoQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMMyhDQVRDSF9SRUNVUlNJT05fTEVWRUwzKF9fVkFfQVJHU19fKSkpCisjZGVmaW5lIENBVENIX1JFQ1VSU0lPTl9MRVZFTDUoLi4uKSBDQVRDSF9SRUNVUlNJT05fTEVWRUw0KENBVENIX1JFQ1VSU0lPTl9MRVZFTDQoQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMNChfX1ZBX0FSR1NfXykpKQorCisjaWZkZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyguLi4pIF9fVkFfQVJHU19fCisvLyBNU1ZDIG5lZWRzIG1vcmUgZXZhbHVhdGlvbnMKKyNkZWZpbmUgQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMNiguLi4pIENBVENIX1JFQ1VSU0lPTl9MRVZFTDUoQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMNShDQVRDSF9SRUNVUlNJT05fTEVWRUw1KF9fVkFfQVJHU19fKSkpCisjZGVmaW5lIENBVENIX1JFQ1VSU0UoLi4uKSAgQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMNihDQVRDSF9SRUNVUlNJT05fTEVWRUw2KF9fVkFfQVJHU19fKSkKKyNlbHNlCisjZGVmaW5lIENBVENIX1JFQ1VSU0UoLi4uKSAgQ0FUQ0hfUkVDVVJTSU9OX0xFVkVMNShfX1ZBX0FSR1NfXykKKyNlbmRpZgorCisjZGVmaW5lIENBVENIX1JFQ19FTkQoLi4uKQorI2RlZmluZSBDQVRDSF9SRUNfT1VUCisKKyNkZWZpbmUgQ0FUQ0hfRU1QVFkoKQorI2RlZmluZSBDQVRDSF9ERUZFUihpZCkgaWQgQ0FUQ0hfRU1QVFkoKQorCisjZGVmaW5lIENBVENIX1JFQ19HRVRfRU5EMigpIDAsIENBVENIX1JFQ19FTkQKKyNkZWZpbmUgQ0FUQ0hfUkVDX0dFVF9FTkQxKC4uLikgQ0FUQ0hfUkVDX0dFVF9FTkQyCisjZGVmaW5lIENBVENIX1JFQ19HRVRfRU5EKC4uLikgQ0FUQ0hfUkVDX0dFVF9FTkQxCisjZGVmaW5lIENBVENIX1JFQ19ORVhUMCh0ZXN0LCBuZXh0LCAuLi4pIG5leHQgQ0FUQ0hfUkVDX09VVAorI2RlZmluZSBDQVRDSF9SRUNfTkVYVDEodGVzdCwgbmV4dCkgQ0FUQ0hfREVGRVIgKCBDQVRDSF9SRUNfTkVYVDAgKSAoIHRlc3QsIG5leHQsIDApCisjZGVmaW5lIENBVENIX1JFQ19ORVhUKHRlc3QsIG5leHQpICBDQVRDSF9SRUNfTkVYVDEoQ0FUQ0hfUkVDX0dFVF9FTkQgdGVzdCwgbmV4dCkKKworI2RlZmluZSBDQVRDSF9SRUNfTElTVDAoZiwgeCwgcGVlaywgLi4uKSAsIGYoeCkgQ0FUQ0hfREVGRVIgKCBDQVRDSF9SRUNfTkVYVChwZWVrLCBDQVRDSF9SRUNfTElTVDEpICkgKCBmLCBwZWVrLCBfX1ZBX0FSR1NfXyApCisjZGVmaW5lIENBVENIX1JFQ19MSVNUMShmLCB4LCBwZWVrLCAuLi4pICwgZih4KSBDQVRDSF9ERUZFUiAoIENBVENIX1JFQ19ORVhUKHBlZWssIENBVENIX1JFQ19MSVNUMCkgKSAoIGYsIHBlZWssIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgQ0FUQ0hfUkVDX0xJU1QyKGYsIHgsIHBlZWssIC4uLikgICBmKHgpIENBVENIX0RFRkVSICggQ0FUQ0hfUkVDX05FWFQocGVlaywgQ0FUQ0hfUkVDX0xJU1QxKSApICggZiwgcGVlaywgX19WQV9BUkdTX18gKQorCisjZGVmaW5lIENBVENIX1JFQ19MSVNUMF9VRChmLCB1c2VyZGF0YSwgeCwgcGVlaywgLi4uKSAsIGYodXNlcmRhdGEsIHgpIENBVENIX0RFRkVSICggQ0FUQ0hfUkVDX05FWFQocGVlaywgQ0FUQ0hfUkVDX0xJU1QxX1VEKSApICggZiwgdXNlcmRhdGEsIHBlZWssIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgQ0FUQ0hfUkVDX0xJU1QxX1VEKGYsIHVzZXJkYXRhLCB4LCBwZWVrLCAuLi4pICwgZih1c2VyZGF0YSwgeCkgQ0FUQ0hfREVGRVIgKCBDQVRDSF9SRUNfTkVYVChwZWVrLCBDQVRDSF9SRUNfTElTVDBfVUQpICkgKCBmLCB1c2VyZGF0YSwgcGVlaywgX19WQV9BUkdTX18gKQorI2RlZmluZSBDQVRDSF9SRUNfTElTVDJfVUQoZiwgdXNlcmRhdGEsIHgsIHBlZWssIC4uLikgICBmKHVzZXJkYXRhLCB4KSBDQVRDSF9ERUZFUiAoIENBVENIX1JFQ19ORVhUKHBlZWssIENBVENIX1JFQ19MSVNUMV9VRCkgKSAoIGYsIHVzZXJkYXRhLCBwZWVrLCBfX1ZBX0FSR1NfXyApCisKKy8vIEFwcGxpZXMgdGhlIGZ1bmN0aW9uIG1hY3JvIGBmYCB0byBlYWNoIG9mIHRoZSByZW1haW5pbmcgcGFyYW1ldGVycywgaW5zZXJ0cyBjb21tYXMgYmV0d2VlbiB0aGUgcmVzdWx0cywKKy8vIGFuZCBwYXNzZXMgdXNlcmRhdGEgYXMgdGhlIGZpcnN0IHBhcmFtZXRlciB0byBlYWNoIGludm9jYXRpb24sCisvLyBlLmcuIENBVENIX1JFQ19MSVNUX1VEKGYsIHgsIGEsIGIsIGMpIGV2YWx1YXRlcyB0byBmKHgsIGEpLCBmKHgsIGIpLCBmKHgsIGMpCisjZGVmaW5lIENBVENIX1JFQ19MSVNUX1VEKGYsIHVzZXJkYXRhLCAuLi4pIENBVENIX1JFQ1VSU0UoQ0FUQ0hfUkVDX0xJU1QyX1VEKGYsIHVzZXJkYXRhLCBfX1ZBX0FSR1NfXywgKCkoKSgpLCAoKSgpKCksICgpKCkoKSwgMCkpCisKKyNkZWZpbmUgQ0FUQ0hfUkVDX0xJU1QoZiwgLi4uKSBDQVRDSF9SRUNVUlNFKENBVENIX1JFQ19MSVNUMihmLCBfX1ZBX0FSR1NfXywgKCkoKSgpLCAoKSgpKCksICgpKCkoKSwgMCkpCisKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EMShwYXJhbSkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EMihwYXJhbSkKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EMiguLi4pIElOVEVSTkFMX0NBVENIX05PIyMgX19WQV9BUkdTX18KKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfREVGKC4uLikgSU5URVJOQUxfQ0FUQ0hfREVGIF9fVkFfQVJHU19fCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX05PSU5URVJOQUxfQ0FUQ0hfREVGCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX1NUUklOR0laRSguLi4pIElOVEVSTkFMX0NBVENIX1NUUklOR0laRTIoX19WQV9BUkdTX18pCisjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9TVFJJTkdJWkUyKC4uLikgI19fVkFfQVJHU19fCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX1NUUklOR0laRV9XSVRIT1VUX1BBUkVOUyhwYXJhbSkgSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMocGFyYW0pKQorI2Vsc2UKKy8vIE1TVkMgaXMgYWRkaW5nIGV4dHJhIHNwYWNlIGFuZCBuZWVkcyBhbm90aGVyIGluZGlyZWN0aW9uIHRvIGV4cGFuZCBJTlRFUk5BTF9DQVRDSF9OT0lOVEVSTkFMX0NBVENIX0RFRgorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9TVFJJTkdJWkUyKC4uLikgSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFMyhfX1ZBX0FSR1NfXykKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFMyguLi4pICNfX1ZBX0FSR1NfXworI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9TVFJJTkdJWkVfV0lUSE9VVF9QQVJFTlMocGFyYW0pIChJTlRFUk5BTF9DQVRDSF9TVFJJTkdJWkUoSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhwYXJhbSkpICsgMSkKKyNlbmRpZgorCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMoLi4uKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkQxKElOVEVSTkFMX0NBVENIX0RFRiBfX1ZBX0FSR1NfXykKKworI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRTIoTmFtZSwgLi4uKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRTMoTmFtZSwgX19WQV9BUkdTX18pCisjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRTMoTmFtZSwuLi4pIE5hbWUgIiAtICIgI19fVkFfQVJHU19fCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1VOSVFVRV9OQU1FKE5hbWUsLi4uKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRTIoTmFtZSwgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhfX1ZBX0FSR1NfXykpCisjZWxzZQorLy8gTVNWQyBpcyBhZGRpbmcgZXh0cmEgc3BhY2UgYW5kIG5lZWRzIG1vcmUgY2FsbHMgdG8gcHJvcGVybHkgcmVtb3ZlICgpCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1VOSVFVRV9OQU1FMyhOYW1lLC4uLikgTmFtZSAiIC0iICNfX1ZBX0FSR1NfXworI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRTEoTmFtZSwgLi4uKSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9VTklRVUVfTkFNRTIoTmFtZSwgX19WQV9BUkdTX18pCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1VOSVFVRV9OQU1FKE5hbWUsIC4uLikgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUxKE5hbWUsIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyhJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKF9fVkFfQVJHU19fKSkpCisjZW5kaWYKKworI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9NQUtFX1RZUEVfTElTVCh0eXBlcykgQ2F0Y2g6OlR5cGVMaXN0PElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlModHlwZXMpPgorCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNUU19GUk9NX1RZUEVTKHR5cGVzKVwKKyAgICBDQVRDSF9SRUNfTElTVChJTlRFUk5BTF9DQVRDSF9NQUtFX1RZUEVfTElTVCxJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKHR5cGVzKSkKKworLy8gZW5kIGNhdGNoX3ByZXByb2Nlc3Nvci5ocHAKKy8vIHN0YXJ0IGNhdGNoX21ldGEuaHBwCisKKworI2luY2x1ZGUgPHR5cGVfdHJhaXRzPgorCituYW1lc3BhY2UgQ2F0Y2ggewordGVtcGxhdGU8IHR5cGVuYW1lLi4uID4KK3N0cnVjdCBUeXBlTGlzdCB7fTsKKwordGVtcGxhdGU8IHR5cGVuYW1lLi4uID4KK3N0cnVjdCBhcHBlbmQ7CisKK3RlbXBsYXRlPCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgTDEKKyAgICAsIHR5cGVuYW1lLi4uRTEKKyAgICAsIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMMgorICAgICwgdHlwZW5hbWUuLi5FMgorPgorc3RydWN0IGFwcGVuZDwgTDE8RTEuLi4+LCBMMjxFMi4uLj4gPiB7CisgICAgdXNpbmcgdHlwZSA9IEwxPEUxLi4uLCBFMi4uLj47Cit9OworCit0ZW1wbGF0ZTwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzIEwxCisgICAgLCB0eXBlbmFtZS4uLkUxCisgICAgLCB0ZW1wbGF0ZTx0eXBlbmFtZS4uLj4gY2xhc3MgTDIKKyAgICAsIHR5cGVuYW1lLi4uRTIKKyAgICAsIHR5cGVuYW1lLi4uUmVzdAorPgorc3RydWN0IGFwcGVuZDwgTDE8RTEuLi4+LCBMMjxFMi4uLj4sIFJlc3QuLi4+IHsKKyAgICB1c2luZyB0eXBlID0gdHlwZW5hbWUgYXBwZW5kPCBMMTxFMS4uLiwgRTIuLi4+LCBSZXN0Li4uID46OnR5cGU7Cit9OworCit0ZW1wbGF0ZTwgdGVtcGxhdGU8dHlwZW5hbWUuLi4+IGNsYXNzCisgICAgLCB0eXBlbmFtZS4uLgorPgorc3RydWN0IHJld3JhcDsKKwordGVtcGxhdGU8IHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBDb250YWluZXIKKyAgICAsIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMaXN0CisgICAgLCB0eXBlbmFtZS4uLmVsZW1zCis+CitzdHJ1Y3QgcmV3cmFwPENvbnRhaW5lciwgTGlzdDxlbGVtcy4uLj4+IHsKKyAgICB1c2luZyB0eXBlID0gVHlwZUxpc3Q8IENvbnRhaW5lcjwgZWxlbXMuLi4gPiA+OworfTsKKwordGVtcGxhdGU8IHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBDb250YWluZXIKKyAgICAsIHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcyBMaXN0CisgICAgLCBjbGFzcy4uLkVsZW1zCisgICAgLCB0eXBlbmFtZS4uLkVsZW1lbnRzPgorICAgIHN0cnVjdCByZXdyYXA8Q29udGFpbmVyLCBMaXN0PEVsZW1zLi4uPiwgRWxlbWVudHMuLi4+IHsKKyAgICB1c2luZyB0eXBlID0gdHlwZW5hbWUgYXBwZW5kPFR5cGVMaXN0PENvbnRhaW5lcjxFbGVtcy4uLj4+LCB0eXBlbmFtZSByZXdyYXA8Q29udGFpbmVyLCBFbGVtZW50cy4uLj46OnR5cGU+Ojp0eXBlOworfTsKKwordGVtcGxhdGU8IHRlbXBsYXRlPHR5cGVuYW1lLi4uPiBjbGFzcy4uLkNvbnRhaW5lcnMgPgorc3RydWN0IGNvbWJpbmUgeworICAgIHRlbXBsYXRlPCB0eXBlbmFtZS4uLlR5cGVzID4KKyAgICBzdHJ1Y3Qgd2l0aF90eXBlcyB7CisgICAgICAgIHRlbXBsYXRlPCB0ZW1wbGF0ZSA8dHlwZW5hbWUuLi4+IGNsYXNzIEZpbmFsID4KKyAgICAgICAgc3RydWN0IGludG8geworICAgICAgICAgICAgdXNpbmcgdHlwZSA9IHR5cGVuYW1lIGFwcGVuZDxGaW5hbDw+LCB0eXBlbmFtZSByZXdyYXA8Q29udGFpbmVycywgVHlwZXMuLi4+Ojp0eXBlLi4uPjo6dHlwZTsKKyAgICAgICAgfTsKKyAgICB9OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK3N0cnVjdCBhbHdheXNfZmFsc2UgOiBzdGQ6OmZhbHNlX3R5cGUge307CisKK30gLy8gbmFtZXNwYWNlIENhdGNoCisKKy8vIGVuZCBjYXRjaF9tZXRhLmhwcAogbmFtZXNwYWNlIENhdGNoIHsKIAogdGVtcGxhdGU8dHlwZW5hbWUgQz4KQEAgLTQ2NCwxMyArODMyLDEzIEBACiB9CiAKIHN0cnVjdCBOYW1lQW5kVGFncyB7Ci0gICAgTmFtZUFuZFRhZ3MoIFN0cmluZ1JlZiBuYW1lXyA9IFN0cmluZ1JlZigpLCBTdHJpbmdSZWYgdGFnc18gPSBTdHJpbmdSZWYoKSApIG5vZXhjZXB0OworICAgIE5hbWVBbmRUYWdzKCBTdHJpbmdSZWYgY29uc3QmIG5hbWVfID0gU3RyaW5nUmVmKCksIFN0cmluZ1JlZiBjb25zdCYgdGFnc18gPSBTdHJpbmdSZWYoKSApIG5vZXhjZXB0OwogICAgIFN0cmluZ1JlZiBuYW1lOwogICAgIFN0cmluZ1JlZiB0YWdzOwogfTsKIAogc3RydWN0IEF1dG9SZWcgOiBOb25Db3B5YWJsZSB7Ci0gICAgQXV0b1JlZyggSVRlc3RJbnZva2VyKiBpbnZva2VyLCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgbGluZUluZm8sIFN0cmluZ1JlZiBjbGFzc09yTWV0aG9kLCBOYW1lQW5kVGFncyBjb25zdCYgbmFtZUFuZFRhZ3MgKSBub2V4Y2VwdDsKKyAgICBBdXRvUmVnKCBJVGVzdEludm9rZXIqIGludm9rZXIsIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbywgU3RyaW5nUmVmIGNvbnN0JiBjbGFzc09yTWV0aG9kLCBOYW1lQW5kVGFncyBjb25zdCYgbmFtZUFuZFRhZ3MgKSBub2V4Y2VwdDsKICAgICB+QXV0b1JlZygpOwogfTsKIApAQCAtNDgxLDE5ICs4NDksMzAgQEAKICAgICAgICAgc3RhdGljIHZvaWQgVGVzdE5hbWUoKQogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTiggVGVzdE5hbWUsIENsYXNzTmFtZSwgLi4uICkgXAogICAgICAgICBuYW1lc3BhY2V7ICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIDogQ2xhc3NOYW1lIHsgXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIDogSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhDbGFzc05hbWUpIHsgXAogICAgICAgICAgICAgICAgIHZvaWQgdGVzdCgpOyAgICAgICAgICAgICAgXAogICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICB2b2lkIFRlc3ROYW1lOjp0ZXN0KCkKLQorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTiggVGVzdE5hbWUsIC4uLiApICBcCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgc3RhdGljIHZvaWQgVGVzdE5hbWUoKQorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9OT19SRUdJU1RSQVRJT04oIFRlc3ROYW1lLCBDbGFzc05hbWUsIC4uLiApICAgIFwKKyAgICAgICAgbmFtZXNwYWNleyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIDogSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhDbGFzc05hbWUgPFRlc3RUeXBlPikgeyAgICAgXAorICAgICAgICAgICAgICAgIHZvaWQgdGVzdCgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIH07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdm9pZCBUZXN0TmFtZTo6dGVzdCgpCiAjZW5kaWYKIAogICAgIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFU1RDQVNFMiggVGVzdE5hbWUsIC4uLiApIFwKICAgICAgICAgc3RhdGljIHZvaWQgVGVzdE5hbWUoKTsgXAogICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKLSAgICAgICAgbmFtZXNwYWNleyBDYXRjaDo6QXV0b1JlZyBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggYXV0b1JlZ2lzdHJhciApKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCAmVGVzdE5hbWUgKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sICIiLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IF9fVkFfQVJHU19fIH0gKTsgfSAvKiBOT0xJTlQgKi8gXAorICAgICAgICBuYW1lc3BhY2V7IENhdGNoOjpBdXRvUmVnIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBhdXRvUmVnaXN0cmFyICkoIENhdGNoOjptYWtlVGVzdEludm9rZXIoICZUZXN0TmFtZSApLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ2F0Y2g6OlN0cmluZ1JlZigpLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IF9fVkFfQVJHU19fIH0gKTsgfSAvKiBOT0xJTlQgKi8gXAogICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgICAgICBzdGF0aWMgdm9pZCBUZXN0TmFtZSgpCiAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRSggLi4uICkgXApAQCAtNTA5LDcgKzg4OCw3IEBACiAgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URVNUX0NBU0VfTUVUSE9EMiggVGVzdE5hbWUsIENsYXNzTmFtZSwgLi4uIClcCiAgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAogICAgICAgICBuYW1lc3BhY2V7IFwKLSAgICAgICAgICAgIHN0cnVjdCBUZXN0TmFtZSA6IENsYXNzTmFtZXsgXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIDogSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhDbGFzc05hbWUpIHsgXAogICAgICAgICAgICAgICAgIHZvaWQgdGVzdCgpOyBcCiAgICAgICAgICAgICB9OyBcCiAgICAgICAgICAgICBDYXRjaDo6QXV0b1JlZyBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggYXV0b1JlZ2lzdHJhciApICggQ2F0Y2g6Om1ha2VUZXN0SW52b2tlciggJlRlc3ROYW1lOjp0ZXN0ICksIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCAjQ2xhc3NOYW1lLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IF9fVkFfQVJHU19fIH0gKTsgLyogTk9MSU5UICovIFwKQEAgLTUyMiw5ICs5MDEsMTUzIEBACiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfUkVHSVNURVJfVEVTVENBU0UoIEZ1bmN0aW9uLCAuLi4gKSBcCiAgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAotICAgICAgICBDYXRjaDo6QXV0b1JlZyBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggYXV0b1JlZ2lzdHJhciApKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCBGdW5jdGlvbiApLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgIiIsIENhdGNoOjpOYW1lQW5kVGFnc3sgX19WQV9BUkdTX18gfSApOyAvKiBOT0xJTlQgKi8gXAorICAgICAgICBDYXRjaDo6QXV0b1JlZyBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggYXV0b1JlZ2lzdHJhciApKCBDYXRjaDo6bWFrZVRlc3RJbnZva2VyKCBGdW5jdGlvbiApLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ2F0Y2g6OlN0cmluZ1JlZigpLCBDYXRjaDo6TmFtZUFuZFRhZ3N7IF9fVkFfQVJHU19fIH0gKTsgLyogTk9MSU5UICovIFwKICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTCiAKKyAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfMihUZXN0TmFtZSwgVGVzdEZ1bmMsIE5hbWUsIFRhZ3MsIC4uLiApXAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGVzdFR5cGU+IFwKKyAgICAgICAgc3RhdGljIHZvaWQgVGVzdEZ1bmMoKTtcCisgICAgICAgIG5hbWVzcGFjZSB7XAorICAgICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi5UeXBlcz4gXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1le1wKKyAgICAgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLlRzPiBcCisgICAgICAgICAgICAgICAgVGVzdE5hbWUoVHMuLi5uYW1lcyl7XAorICAgICAgICAgICAgICAgICAgICBDQVRDSF9JTlRFUk5BTF9DSEVDS19VTklRVUVfVFlQRVMoQ0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUywgX19WQV9BUkdTX18pKSBcCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIGV4cGFuZGVyID0gaW50W107XAorICAgICAgICAgICAgICAgICAgICAodm9pZClleHBhbmRlcnsoQ2F0Y2g6OkF1dG9SZWcoIENhdGNoOjptYWtlVGVzdEludm9rZXIoICZUZXN0RnVuYzxUeXBlcz4gKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENhdGNoOjpTdHJpbmdSZWYoKSwgQ2F0Y2g6Ok5hbWVBbmRUYWdzeyBuYW1lcywgVGFncyB9ICksIDApLi4uIH07LyogTk9MSU5UICovIFwKKyAgICAgICAgICAgICAgICB9XAorICAgICAgICAgICAgfTtcCisgICAgICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9SRUdJU1RSWV9JTklUSUFURShUZXN0TmFtZSwgTmFtZSwgX19WQV9BUkdTX18pIFwKKyAgICAgICAgfVwKKyAgICAgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGVzdFR5cGU+IFwKKyAgICAgICAgc3RhdGljIHZvaWQgVGVzdEZ1bmMoKQorCisjaWYgZGVmaW5lZChDQVRDSF9DUFAxN19PUl9HUkVBVEVSKQorI2RlZmluZSBDQVRDSF9JTlRFUk5BTF9DSEVDS19VTklRVUVfVFlQRVMoLi4uKSBzdGF0aWNfYXNzZXJ0KENhdGNoOjppc191bmlxdWU8X19WQV9BUkdTX18+LCJEdXBsaWNhdGUgdHlwZSBkZXRlY3RlZCBpbiBkZWNsYXJhdGlvbiBvZiB0ZW1wbGF0ZSB0ZXN0IGNhc2UiKTsKKyNlbHNlCisjZGVmaW5lIENBVENIX0lOVEVSTkFMX0NIRUNLX1VOSVFVRV9UWVBFUyguLi4pIHN0YXRpY19hc3NlcnQoQ2F0Y2g6OmlzX3VuaXF1ZTxfX1ZBX0FSR1NfXz46OnZhbHVlLCJEdXBsaWNhdGUgdHlwZSBkZXRlY3RlZCBpbiBkZWNsYXJhdGlvbiBvZiB0ZW1wbGF0ZSB0ZXN0IGNhc2UiKTsKKyNlbmRpZgorCisjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKE5hbWUsIFRhZ3MsIC4uLikgXAorICAgICAgICBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0ZfVV9OX0NfX19fICksIE5hbWUsIFRhZ3MsIF9fVkFfQVJHU19fICkKKyNlbHNlCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0UoTmFtZSwgVGFncywgLi4uKSBcCisgICAgICAgIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFXzIoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApICkKKyNlbmRpZgorCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9SRUdJU1RSWV9JTklUSUFURShUZXN0TmFtZSwgTmFtZSwgLi4uKVwKKyAgICAgICAgc3RhdGljIGludCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggZ2xvYmFsUmVnaXN0cmFyICkgPSBbXSgpe1wKKyAgICAgICAgICAgIFRlc3ROYW1lPENBVENIX1JFQ19MSVNUKElOVEVSTkFMX0NBVENIX1JFTU9WRV9QQVJFTlMsIF9fVkFfQVJHU19fKT4oQ0FUQ0hfUkVDX0xJU1RfVUQoSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVU5JUVVFX05BTUUsTmFtZSwgX19WQV9BUkdTX18pKTtcCisgICAgICAgICAgICByZXR1cm4gMDtcCisgICAgICAgIH0oKTsKKworICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UyKFRlc3ROYW1lLCBUZXN0RnVuY05hbWUsIE5hbWUsIFRhZ3MsIFRtcGxUeXBlcywgVHlwZXNMaXN0KSBcCisgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gc3RhdGljIHZvaWQgVGVzdEZ1bmNOYW1lKCk7ICAgICAgIFwKKyAgICAgICAgbmFtZXNwYWNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUeXBlcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBUZXN0TmFtZSgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX0NIRUNLX1VOSVFVRV9UWVBFUyhUeXBlcy4uLikgICAgICAgXAorICAgICAgICAgICAgICAgICAgICBpbnQgaW5kZXggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgdXNpbmcgZXhwYW5kZXIgPSBpbnRbXTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiB0bXBsX3R5cGVzW10gPSB7Q0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFX1dJVEhPVVRfUEFSRU5TLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFRtcGxUeXBlcykpfTtcCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBjaGFyIGNvbnN0KiB0eXBlc19saXN0W10gPSB7Q0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfU1RSSU5HSVpFX1dJVEhPVVRfUEFSRU5TLCBJTlRFUk5BTF9DQVRDSF9SRU1PVkVfUEFSRU5TKFR5cGVzTGlzdCkpfTtcCisgICAgICAgICAgICAgICAgICAgIGNvbnN0ZXhwciBhdXRvIG51bV90eXBlcyA9IHNpemVvZih0eXBlc19saXN0KSAvIHNpemVvZih0eXBlc19saXN0WzBdKTtcCisgICAgICAgICAgICAgICAgICAgICh2b2lkKWV4cGFuZGVyeyhDYXRjaDo6QXV0b1JlZyggQ2F0Y2g6Om1ha2VUZXN0SW52b2tlciggJlRlc3RGdW5jTmFtZTxUeXBlcz4gKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENhdGNoOjpTdHJpbmdSZWYoKSwgQ2F0Y2g6Ok5hbWVBbmRUYWdzeyBOYW1lICIgLSAiICsgc3RkOjpzdHJpbmcodG1wbF90eXBlc1tpbmRleCAvIG51bV90eXBlc10pICsgIjwiICsgc3RkOjpzdHJpbmcodHlwZXNfbGlzdFtpbmRleCAlIG51bV90eXBlc10pICsgIj4iLCBUYWdzIH0gKSwgaW5kZXgrKywgMCkuLi4gfTsvKiBOT0xJTlQgKi9cCisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHN0YXRpYyBpbnQgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGdsb2JhbFJlZ2lzdHJhciApID0gW10oKXsgXAorICAgICAgICAgICAgICAgIHVzaW5nIFRlc3RJbml0ID0gQ2F0Y2g6OmNvbWJpbmU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhUbXBsVHlwZXMpPiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOjp3aXRoX3R5cGVzPElOVEVSTkFMX0NBVENIX01BS0VfVFlQRV9MSVNUU19GUk9NX1RZUEVTKFR5cGVzTGlzdCk+OjppbnRvPFRlc3ROYW1lPjo6dHlwZTsgXAorICAgICAgICAgICAgICAgIFRlc3RJbml0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBzdGF0aWMgdm9pZCBUZXN0RnVuY05hbWUoKQorCisjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoTmFtZSwgVGFncywgLi4uKVwKKyAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UyKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19GX1VfTl9DX19fXyApLE5hbWUsVGFncyxfX1ZBX0FSR1NfXykKKyNlbHNlCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRShOYW1lLCBUYWdzLCAuLi4pXAorICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fX0ZfVV9OX0NfX19fICksIE5hbWUsIFRhZ3MsIF9fVkFfQVJHU19fICkgKQorI2VuZGlmCisKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfMiggVGVzdE5hbWVDbGFzcywgVGVzdE5hbWUsIENsYXNzTmFtZSwgTmFtZSwgVGFncywgLi4uICkgXAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9TVVBQUkVTU19HTE9CQUxTX1dBUk5JTkdTIFwKKyAgICAgICAgbmFtZXNwYWNleyBcCisgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIDogSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhDbGFzc05hbWUgPFRlc3RUeXBlPikgeyBcCisgICAgICAgICAgICAgICAgdm9pZCB0ZXN0KCk7XAorICAgICAgICAgICAgfTtcCisgICAgICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLlR5cGVzPiBcCisgICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWVDbGFzc3tcCisgICAgICAgICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi5Ucz4gXAorICAgICAgICAgICAgICAgIFRlc3ROYW1lQ2xhc3MoVHMuLi5uYW1lcyl7XAorICAgICAgICAgICAgICAgICAgICBDQVRDSF9JTlRFUk5BTF9DSEVDS19VTklRVUVfVFlQRVMoQ0FUQ0hfUkVDX0xJU1QoSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUywgX19WQV9BUkdTX18pKSBcCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIGV4cGFuZGVyID0gaW50W107XAorICAgICAgICAgICAgICAgICAgICAodm9pZClleHBhbmRlcnsoQ2F0Y2g6OkF1dG9SZWcoIENhdGNoOjptYWtlVGVzdEludm9rZXIoICZUZXN0TmFtZTxUeXBlcz46OnRlc3QgKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sICNDbGFzc05hbWUsIENhdGNoOjpOYW1lQW5kVGFnc3sgbmFtZXMsIFRhZ3MgfSApLCAwKS4uLiB9Oy8qIE5PTElOVCAqLyBcCisgICAgICAgICAgICAgICAgfVwKKyAgICAgICAgICAgIH07XAorICAgICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUkVHSVNUUllfSU5JVElBVEUoVGVzdE5hbWVDbGFzcywgTmFtZSwgX19WQV9BUkdTX18pXAorICAgICAgICB9XAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1NcCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRlc3RUeXBlPiBcCisgICAgICAgIHZvaWQgVGVzdE5hbWU8VGVzdFR5cGU+Ojp0ZXN0KCkKKworI2lmbmRlZiBDQVRDSF9DT05GSUdfVFJBRElUSU9OQUxfTVNWQ19QUkVQUk9DRVNTT1IKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIENsYXNzTmFtZSwgTmFtZSwgVGFncywuLi4gKSBcCisgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0RfMiggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fQ19MX0FfU19TX19fXyApLCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSAsIENsYXNzTmFtZSwgTmFtZSwgVGFncywgX19WQV9BUkdTX18gKQorI2Vsc2UKKyAgICAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIENsYXNzTmFtZSwgTmFtZSwgVGFncywuLi4gKSBcCisgICAgICAgIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX19DX0xfQV9TX1NfX19fICksIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9NX1BfTF9BX1RfRV9fX19UX0VfU19UX19fXyApICwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApICkKKyNlbmRpZgorCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0RfMihUZXN0TmFtZUNsYXNzLCBUZXN0TmFtZSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBUbXBsVHlwZXMsIFR5cGVzTGlzdClcCisgICAgICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAorICAgICAgICAgICAgc3RydWN0IFRlc3ROYW1lIDogSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhDbGFzc05hbWUgPFRlc3RUeXBlPikgeyBcCisgICAgICAgICAgICAgICAgdm9pZCB0ZXN0KCk7XAorICAgICAgICAgICAgfTtcCisgICAgICAgIG5hbWVzcGFjZSB7XAorICAgICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi5UeXBlcz5cCisgICAgICAgICAgICBzdHJ1Y3QgVGVzdE5hbWVDbGFzc3tcCisgICAgICAgICAgICAgICAgVGVzdE5hbWVDbGFzcygpe1wKKyAgICAgICAgICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfQ0hFQ0tfVU5JUVVFX1RZUEVTKFR5cGVzLi4uKVwKKyAgICAgICAgICAgICAgICAgICAgaW50IGluZGV4ID0gMDtcCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIGV4cGFuZGVyID0gaW50W107XAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgY2hhciBjb25zdCogdG1wbF90eXBlc1tdID0ge0NBVENIX1JFQ19MSVNUKElOVEVSTkFMX0NBVENIX1NUUklOR0laRV9XSVRIT1VUX1BBUkVOUywgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhUbXBsVHlwZXMpKX07XAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgY2hhciBjb25zdCogdHlwZXNfbGlzdFtdID0ge0NBVENIX1JFQ19MSVNUKElOVEVSTkFMX0NBVENIX1NUUklOR0laRV9XSVRIT1VUX1BBUkVOUywgSU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhUeXBlc0xpc3QpKX07XAorICAgICAgICAgICAgICAgICAgICBjb25zdGV4cHIgYXV0byBudW1fdHlwZXMgPSBzaXplb2YodHlwZXNfbGlzdCkgLyBzaXplb2YodHlwZXNfbGlzdFswXSk7XAorICAgICAgICAgICAgICAgICAgICAodm9pZClleHBhbmRlcnsoQ2F0Y2g6OkF1dG9SZWcoIENhdGNoOjptYWtlVGVzdEludm9rZXIoICZUZXN0TmFtZTxUeXBlcz46OnRlc3QgKSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sICNDbGFzc05hbWUsIENhdGNoOjpOYW1lQW5kVGFnc3sgTmFtZSAiIC0gIiArIHN0ZDo6c3RyaW5nKHRtcGxfdHlwZXNbaW5kZXggLyBudW1fdHlwZXNdKSArICI8IiArIHN0ZDo6c3RyaW5nKHR5cGVzX2xpc3RbaW5kZXggJSBudW1fdHlwZXNdKSArICI+IiwgVGFncyB9ICksIGluZGV4KyssIDApLi4uIH07LyogTk9MSU5UICovIFwKKyAgICAgICAgICAgICAgICB9XAorICAgICAgICAgICAgfTtcCisgICAgICAgICAgICBzdGF0aWMgaW50IElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBnbG9iYWxSZWdpc3RyYXIgKSA9IFtdKCl7XAorICAgICAgICAgICAgICAgIHVzaW5nIFRlc3RJbml0ID0gQ2F0Y2g6OmNvbWJpbmU8SU5URVJOQUxfQ0FUQ0hfUkVNT1ZFX1BBUkVOUyhUbXBsVHlwZXMpPlwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA6OndpdGhfdHlwZXM8SU5URVJOQUxfQ0FUQ0hfTUFLRV9UWVBFX0xJU1RTX0ZST01fVFlQRVMoVHlwZXNMaXN0KT46OmludG88VGVzdE5hbWVDbGFzcz46OnR5cGU7XAorICAgICAgICAgICAgICAgIFRlc3RJbml0KCk7XAorICAgICAgICAgICAgICAgIHJldHVybiAwO1wKKyAgICAgICAgICAgIH0oKTsgXAorICAgICAgICB9XAorICAgICAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX0dMT0JBTFNfV0FSTklOR1MgXAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUZXN0VHlwZT4gXAorICAgICAgICB2b2lkIFRlc3ROYW1lPFRlc3RUeXBlPjo6dGVzdCgpCisKKyNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCisgICAgI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRV9NRVRIT0QoIENsYXNzTmFtZSwgTmFtZSwgVGFncywgLi4uIClcCisgICAgICAgIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApCisjZWxzZQorICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBDbGFzc05hbWUsIE5hbWUsIFRhZ3MsIC4uLiApXAorICAgICAgICBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRF8yKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fRl9VX05fQ19fX18gKSwgQ2xhc3NOYW1lLCBOYW1lLCBUYWdzLCBfX1ZBX0FSR1NfXyApICkKKyNlbmRpZgorCiAvLyBlbmQgY2F0Y2hfdGVzdF9yZWdpc3RyeS5oCiAvLyBzdGFydCBjYXRjaF9jYXB0dXJlLmhwcAogCkBAIC02MzksMTMgKzExNjIsMTUgQEAKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgfQogICAgICAgICBhdXRvIGdldCgpIC0+IHN0ZDo6b3N0cmVhbSYgeyByZXR1cm4gKm1fb3NzOyB9Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgY2xlYW51cCgpOwogICAgIH07CiB9CiAKIC8vIGVuZCBjYXRjaF9zdHJlYW0uaAogCisjaWZkZWYgQ0FUQ0hfQ09ORklHX0NQUDE3X1NUUklOR19WSUVXCisjaW5jbHVkZSA8c3RyaW5nX3ZpZXc+CisjZW5kaWYKKwogI2lmZGVmIF9fT0JKQ19fCiAvLyBzdGFydCBjYXRjaF9vYmpjX2FyYy5ocHAKIApAQCAtNjk3LDE0ICsxMjIyLDcgQEAKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQxODApIC8vIFdlIGF0dGVtcHQgdG8gc3RyZWFtIGEgZnVuY3Rpb24gKGFkZHJlc3MpIGJ5IGNvbnN0Jiwgd2hpY2ggTVNWQyBjb21wbGFpbnMgYWJvdXQgYnV0IGlzIGhhcm1sZXNzCiAjZW5kaWYKIAotLy8gV2UgbmVlZCBhIGR1bW15IGdsb2JhbCBvcGVyYXRvcjw8IHNvIHdlIGNhbiBicmluZyBpdCBpbnRvIENhdGNoIG5hbWVzcGFjZSBsYXRlcgotc3RydWN0IENhdGNoX2dsb2JhbF9uYW1lc3BhY2VfZHVtbXkge307Ci1zdGQ6Om9zdHJlYW0mIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtJiwgQ2F0Y2hfZ2xvYmFsX25hbWVzcGFjZV9kdW1teSk7Ci0KIG5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgLy8gQnJpbmcgaW4gb3BlcmF0b3I8PCBmcm9tIGdsb2JhbCBuYW1lc3BhY2UgaW50byBDYXRjaCBuYW1lc3BhY2UKLSAgICB1c2luZyA6Om9wZXJhdG9yPDw7Ci0KICAgICBuYW1lc3BhY2UgRGV0YWlsIHsKIAogICAgICAgICBleHRlcm4gY29uc3Qgc3RkOjpzdHJpbmcgdW5wcmludGFibGVTdHJpbmc7CkBAIC03MzMsMTMgKzEyNTEsMzYgQEAKICAgICAgICAgc3RkOjpzdHJpbmcgY29udmVydFVua25vd25FbnVtVG9TdHJpbmcoIEUgZSApOwogCiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFzdGQ6OmlzX2VudW08VD46OnZhbHVlLCBzdGQ6OnN0cmluZz46OnR5cGUgY29udmVydFVuc3RyZWFtYWJsZSggVCBjb25zdCYgKSB7CisgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgIXN0ZDo6aXNfZW51bTxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfYmFzZV9vZjxzdGQ6OmV4Y2VwdGlvbiwgVD46OnZhbHVlLAorICAgICAgICBzdGQ6OnN0cmluZz46OnR5cGUgY29udmVydFVuc3RyZWFtYWJsZSggVCBjb25zdCYgKSB7CiAgICAgICAgICAgICByZXR1cm4gRGV0YWlsOjp1bnByaW50YWJsZVN0cmluZzsKLSAgICAgICAgfTsKKyAgICAgICAgfQogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxzdGQ6OmlzX2VudW08VD46OnZhbHVlLCBzdGQ6OnN0cmluZz46OnR5cGUgY29udmVydFVuc3RyZWFtYWJsZSggVCBjb25zdCYgdmFsdWUgKSB7CisgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgIXN0ZDo6aXNfZW51bTxUPjo6dmFsdWUgJiYgc3RkOjppc19iYXNlX29mPHN0ZDo6ZXhjZXB0aW9uLCBUPjo6dmFsdWUsCisgICAgICAgICBzdGQ6OnN0cmluZz46OnR5cGUgY29udmVydFVuc3RyZWFtYWJsZShUIGNvbnN0JiBleCkgeworICAgICAgICAgICAgcmV0dXJuIGV4LndoYXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPAorICAgICAgICAgICAgc3RkOjppc19lbnVtPFQ+Ojp2YWx1ZQorICAgICAgICAsIHN0ZDo6c3RyaW5nPjo6dHlwZSBjb252ZXJ0VW5zdHJlYW1hYmxlKCBUIGNvbnN0JiB2YWx1ZSApIHsKICAgICAgICAgICAgIHJldHVybiBjb252ZXJ0VW5rbm93bkVudW1Ub1N0cmluZyggdmFsdWUgKTsKLSAgICAgICAgfTsKKyAgICAgICAgfQorCisjaWYgZGVmaW5lZChfTUFOQUdFRCkKKyAgICAgICAgLy8hIENvbnZlcnQgYSBDTFIgc3RyaW5nIHRvIGEgdXRmOCBzdGQ6OnN0cmluZworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICBzdGQ6OnN0cmluZyBjbHJSZWZlcmVuY2VUb1N0cmluZyggVF4gcmVmICkgeworICAgICAgICAgICAgaWYgKHJlZiA9PSBudWxscHRyKQorICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZygibnVsbCIpOworICAgICAgICAgICAgYXV0byBieXRlcyA9IFN5c3RlbTo6VGV4dDo6RW5jb2Rpbmc6OlVURjgtPkdldEJ5dGVzKHJlZi0+VG9TdHJpbmcoKSk7CisgICAgICAgICAgICBjbGk6OnBpbl9wdHI8U3lzdGVtOjpCeXRlPiBwID0gJmJ5dGVzWzBdOworICAgICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciBjb25zdCAqPihwKSwgYnl0ZXMtPkxlbmd0aCk7CisgICAgICAgIH0KKyNlbmRpZgogCiAgICAgfSAvLyBuYW1lc3BhY2UgRGV0YWlsCiAKQEAgLTc1MSw3ICsxMjkyLDkgQEAKICAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8OjpDYXRjaDo6RGV0YWlsOjpJc1N0cmVhbUluc2VydGFibGU8RmFrZT46OnZhbHVlLCBzdGQ6OnN0cmluZz46OnR5cGUKICAgICAgICAgICAgIGNvbnZlcnQoY29uc3QgRmFrZSYgdmFsdWUpIHsKICAgICAgICAgICAgICAgICBSZXVzYWJsZVN0cmluZ1N0cmVhbSByc3M7Ci0gICAgICAgICAgICAgICAgcnNzIDw8IHZhbHVlOworICAgICAgICAgICAgICAgIC8vIE5COiBjYWxsIHVzaW5nIHRoZSBmdW5jdGlvbi1saWtlIHN5bnRheCB0byBhdm9pZCBhbWJpZ3VpdHkgd2l0aAorICAgICAgICAgICAgICAgIC8vIHVzZXItZGVmaW5lZCB0ZW1wbGF0ZWQgb3BlcmF0b3I8PCB1bmRlciBjbGFuZy4KKyAgICAgICAgICAgICAgICByc3Mub3BlcmF0b3I8PCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHJzcy5zdHIoKTsKICAgICAgICAgfQogCkBAIC03NTksNyArMTMwMiwxMSBAQAogICAgICAgICBzdGF0aWMKICAgICAgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8ITo6Q2F0Y2g6OkRldGFpbDo6SXNTdHJlYW1JbnNlcnRhYmxlPEZha2U+Ojp2YWx1ZSwgc3RkOjpzdHJpbmc+Ojp0eXBlCiAgICAgICAgICAgICBjb252ZXJ0KCBjb25zdCBGYWtlJiB2YWx1ZSApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gRGV0YWlsOjpjb252ZXJ0VW5zdHJlYW1hYmxlKCB2YWx1ZSApOworI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19GQUxMQkFDS19TVFJJTkdJRklFUikKKyAgICAgICAgICAgIHJldHVybiBEZXRhaWw6OmNvbnZlcnRVbnN0cmVhbWFibGUodmFsdWUpOworI2Vsc2UKKyAgICAgICAgICAgIHJldHVybiBDQVRDSF9DT05GSUdfRkFMTEJBQ0tfU1RSSU5HSUZJRVIodmFsdWUpOworI2VuZGlmCiAgICAgICAgIH0KICAgICB9OwogCkBAIC03NzcsNiArMTMyNCwxMyBAQAogICAgICAgICAgICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0YXRpY19jYXN0PHR5cGVuYW1lIHN0ZDo6dW5kZXJseWluZ190eXBlPEU+Ojp0eXBlPihlKSk7CiAgICAgICAgIH0KIAorI2lmIGRlZmluZWQoX01BTkFHRUQpCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgICAgICBzdGQ6OnN0cmluZyBzdHJpbmdpZnkoIFReIGUgKSB7CisgICAgICAgICAgICByZXR1cm4gOjpDYXRjaDo6U3RyaW5nTWFrZXI8VF4+Ojpjb252ZXJ0KGUpOworICAgICAgICB9CisjZW5kaWYKKwogICAgIH0gLy8gbmFtZXNwYWNlIERldGFpbAogCiAgICAgLy8gU29tZSBwcmVkZWZpbmVkIHNwZWNpYWxpemF0aW9ucwpAQCAtNzg1LDEwICsxMzM5LDEzIEBACiAgICAgc3RydWN0IFN0cmluZ01ha2VyPHN0ZDo6c3RyaW5nPiB7CiAgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KGNvbnN0IHN0ZDo6c3RyaW5nJiBzdHIpOwogICAgIH07CisKKyNpZmRlZiBDQVRDSF9DT05GSUdfQ1BQMTdfU1RSSU5HX1ZJRVcKICAgICB0ZW1wbGF0ZTw+Ci0gICAgc3RydWN0IFN0cmluZ01ha2VyPHN0ZDo6d3N0cmluZz4gewotICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydChjb25zdCBzdGQ6OndzdHJpbmcmIHdzdHIpOworICAgIHN0cnVjdCBTdHJpbmdNYWtlcjxzdGQ6OnN0cmluZ192aWV3PiB7CisgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KHN0ZDo6c3RyaW5nX3ZpZXcgc3RyKTsKICAgICB9OworI2VuZGlmCiAKICAgICB0ZW1wbGF0ZTw+CiAgICAgc3RydWN0IFN0cmluZ01ha2VyPGNoYXIgY29uc3QgKj4gewpAQCAtNzk4LDYgKzEzNTUsMjAgQEAKICAgICBzdHJ1Y3QgU3RyaW5nTWFrZXI8Y2hhciAqPiB7CiAgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KGNoYXIgKiBzdHIpOwogICAgIH07CisKKyNpZmRlZiBDQVRDSF9DT05GSUdfV0NIQVIKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFN0cmluZ01ha2VyPHN0ZDo6d3N0cmluZz4geworICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydChjb25zdCBzdGQ6OndzdHJpbmcmIHdzdHIpOworICAgIH07CisKKyMgaWZkZWYgQ0FUQ0hfQ09ORklHX0NQUDE3X1NUUklOR19WSUVXCisgICAgdGVtcGxhdGU8PgorICAgIHN0cnVjdCBTdHJpbmdNYWtlcjxzdGQ6OndzdHJpbmdfdmlldz4geworICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydChzdGQ6OndzdHJpbmdfdmlldyBzdHIpOworICAgIH07CisjIGVuZGlmCisKICAgICB0ZW1wbGF0ZTw+CiAgICAgc3RydWN0IFN0cmluZ01ha2VyPHdjaGFyX3QgY29uc3QgKj4gewogICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydCh3Y2hhcl90IGNvbnN0ICogc3RyKTsKQEAgLTgwNiwyMyArMTM3NywyNiBAQAogICAgIHN0cnVjdCBTdHJpbmdNYWtlcjx3Y2hhcl90ICo+IHsKICAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQod2NoYXJfdCAqIHN0cik7CiAgICAgfTsKKyNlbmRpZgogCisgICAgLy8gVEJEOiBTaG91bGQgd2UgdXNlIGBzdHJubGVuYCB0byBlbnN1cmUgdGhhdCB3ZSBkb24ndCBnbyBvdXQgb2YgdGhlIGJ1ZmZlciwKKyAgICAvLyAgICAgIHdoaWxlIGtlZXBpbmcgc3RyaW5nIHNlbWFudGljcz8KICAgICB0ZW1wbGF0ZTxpbnQgU1o+CiAgICAgc3RydWN0IFN0cmluZ01ha2VyPGNoYXJbU1pdPiB7Ci0gICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KGNvbnN0IGNoYXIqIHN0cikgeworICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydChjaGFyIGNvbnN0KiBzdHIpIHsKICAgICAgICAgICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzdGQ6OnN0cmluZ3sgc3RyIH0pOwogICAgICAgICB9CiAgICAgfTsKICAgICB0ZW1wbGF0ZTxpbnQgU1o+CiAgICAgc3RydWN0IFN0cmluZ01ha2VyPHNpZ25lZCBjaGFyW1NaXT4gewotICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydChjb25zdCBjaGFyKiBzdHIpIHsKLSAgICAgICAgICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzdGQ6OnN0cmluZ3sgc3RyIH0pOworICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydChzaWduZWQgY2hhciBjb25zdCogc3RyKSB7CisgICAgICAgICAgICByZXR1cm4gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoc3RkOjpzdHJpbmd7IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciBjb25zdCAqPihzdHIpIH0pOwogICAgICAgICB9CiAgICAgfTsKICAgICB0ZW1wbGF0ZTxpbnQgU1o+CiAgICAgc3RydWN0IFN0cmluZ01ha2VyPHVuc2lnbmVkIGNoYXJbU1pdPiB7Ci0gICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KGNvbnN0IGNoYXIqIHN0cikgewotICAgICAgICAgICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0ZDo6c3RyaW5neyBzdHIgfSk7CisgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KHVuc2lnbmVkIGNoYXIgY29uc3QqIHN0cikgeworICAgICAgICAgICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0ZDo6c3RyaW5neyByZWludGVycHJldF9jYXN0PGNoYXIgY29uc3QgKj4oc3RyKSB9KTsKICAgICAgICAgfQogICAgIH07CiAKQEAgLTkwNiw2ICsxNDgwLDE1IEBACiAgICAgICAgIH0KICAgICB9OwogCisjaWYgZGVmaW5lZChfTUFOQUdFRCkKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgU3RyaW5nTWFrZXI8VF4+IHsKKyAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoIFReIHJlZiApIHsKKyAgICAgICAgICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OmNsclJlZmVyZW5jZVRvU3RyaW5nKHJlZik7CisgICAgICAgIH0KKyAgICB9OworI2VuZGlmCisKICAgICBuYW1lc3BhY2UgRGV0YWlsIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5wdXRJdGVyYXRvcj4KICAgICAgICAgc3RkOjpzdHJpbmcgcmFuZ2VUb1N0cmluZyhJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QpIHsKQEAgLTk1NCw3ICsxNTM3LDkgQEAKICNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FTkFCTEVfQUxMX1NUUklOR01BS0VSUykKICMgIGRlZmluZSBDQVRDSF9DT05GSUdfRU5BQkxFX1BBSVJfU1RSSU5HTUFLRVIKICMgIGRlZmluZSBDQVRDSF9DT05GSUdfRU5BQkxFX1RVUExFX1NUUklOR01BS0VSCisjICBkZWZpbmUgQ0FUQ0hfQ09ORklHX0VOQUJMRV9WQVJJQU5UX1NUUklOR01BS0VSCiAjICBkZWZpbmUgQ0FUQ0hfQ09ORklHX0VOQUJMRV9DSFJPTk9fU1RSSU5HTUFLRVIKKyMgIGRlZmluZSBDQVRDSF9DT05GSUdfRU5BQkxFX09QVElPTkFMX1NUUklOR01BS0VSCiAjZW5kaWYKIAogLy8gU2VwYXJhdGUgc3RkOjpwYWlyIHNwZWNpYWxpemF0aW9uCkBAIC05NzYsNiArMTU2MSwyNCBAQAogfQogI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfUEFJUl9TVFJJTkdNQUtFUgogCisjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRU5BQkxFX09QVElPTkFMX1NUUklOR01BS0VSKSAmJiBkZWZpbmVkKENBVENIX0NPTkZJR19DUFAxN19PUFRJT05BTCkKKyNpbmNsdWRlIDxvcHRpb25hbD4KK25hbWVzcGFjZSBDYXRjaCB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgU3RyaW5nTWFrZXI8c3RkOjpvcHRpb25hbDxUPiA+IHsKKyAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNvbnZlcnQoY29uc3Qgc3RkOjpvcHRpb25hbDxUPiYgb3B0aW9uYWwpIHsKKyAgICAgICAgICAgIFJldXNhYmxlU3RyaW5nU3RyZWFtIHJzczsKKyAgICAgICAgICAgIGlmIChvcHRpb25hbC5oYXNfdmFsdWUoKSkgeworICAgICAgICAgICAgICAgIHJzcyA8PCA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSgqb3B0aW9uYWwpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICByc3MgPDwgInsgfSI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcnNzLnN0cigpOworICAgICAgICB9CisgICAgfTsKK30KKyNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX09QVElPTkFMX1NUUklOR01BS0VSCisKIC8vIFNlcGFyYXRlIHN0ZDo6dHVwbGUgc3BlY2lhbGl6YXRpb24KICNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FTkFCTEVfVFVQTEVfU1RSSU5HTUFLRVIpCiAjaW5jbHVkZSA8dHVwbGU+CkBAIC0xMDE3LDYgKzE2MjAsMzQgQEAKIH0KICNlbmRpZiAvLyBDQVRDSF9DT05GSUdfRU5BQkxFX1RVUExFX1NUUklOR01BS0VSCiAKKyNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19FTkFCTEVfVkFSSUFOVF9TVFJJTkdNQUtFUikgJiYgZGVmaW5lZChDQVRDSF9DT05GSUdfQ1BQMTdfVkFSSUFOVCkKKyNpbmNsdWRlIDx2YXJpYW50PgorbmFtZXNwYWNlIENhdGNoIHsKKyAgICB0ZW1wbGF0ZTw+CisgICAgc3RydWN0IFN0cmluZ01ha2VyPHN0ZDo6bW9ub3N0YXRlPiB7CisgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KGNvbnN0IHN0ZDo6bW9ub3N0YXRlJikgeworICAgICAgICAgICAgcmV0dXJuICJ7IH0iOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEVsZW1lbnRzPgorICAgIHN0cnVjdCBTdHJpbmdNYWtlcjxzdGQ6OnZhcmlhbnQ8RWxlbWVudHMuLi4+PiB7CisgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjb252ZXJ0KGNvbnN0IHN0ZDo6dmFyaWFudDxFbGVtZW50cy4uLj4mIHZhcmlhbnQpIHsKKyAgICAgICAgICAgIGlmICh2YXJpYW50LnZhbHVlbGVzc19ieV9leGNlcHRpb24oKSkgeworICAgICAgICAgICAgICAgIHJldHVybiAie3ZhbHVlbGVzcyB2YXJpYW50fSI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OnZpc2l0KAorICAgICAgICAgICAgICAgICAgICBbXShjb25zdCBhdXRvJiB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFudAorICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworfQorI2VuZGlmIC8vIENBVENIX0NPTkZJR19FTkFCTEVfVkFSSUFOVF9TVFJJTkdNQUtFUgorCiBuYW1lc3BhY2UgQ2F0Y2ggewogICAgIHN0cnVjdCBub3RfdGhpc19vbmUge307IC8vIFRhZyB0eXBlIGZvciBkZXRlY3Rpbmcgd2hpY2ggYmVnaW4vIGVuZCBhcmUgYmVpbmcgc2VsZWN0ZWQKIApAQCAtMTAzNCw2ICsxNjY1LDEzIEBACiAgICAgICAgICAgICAhc3RkOjppc19zYW1lPGRlY2x0eXBlKGVuZChzdGQ6OmRlY2x2YWw8VD4oKSkpLCBub3RfdGhpc19vbmU+Ojp2YWx1ZTsKICAgICB9OwogCisjaWYgZGVmaW5lZChfTUFOQUdFRCkgLy8gTWFuYWdlZCB0eXBlcyBhcmUgbmV2ZXIgcmFuZ2VzCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGlzX3JhbmdlPFRePiB7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7CisgICAgfTsKKyNlbmRpZgorCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmFuZ2U+CiAgICAgc3RkOjpzdHJpbmcgcmFuZ2VUb1N0cmluZyggUmFuZ2UgY29uc3QmIHJhbmdlICkgewogICAgICAgICByZXR1cm4gOjpDYXRjaDo6RGV0YWlsOjpyYW5nZVRvU3RyaW5nKCBiZWdpbiggcmFuZ2UgKSwgZW5kKCByYW5nZSApICk7CkBAIC0xMDU3LDcgKzE2OTUsNyBAQAogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFI+Ci0gICAgc3RydWN0IFN0cmluZ01ha2VyPFIsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPGlzX3JhbmdlPFI+Ojp2YWx1ZSAmJiAhc3RkOjppc19hcnJheTxSPjo6dmFsdWU+Ojp0eXBlPiB7CisgICAgc3RydWN0IFN0cmluZ01ha2VyPFIsIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPGlzX3JhbmdlPFI+Ojp2YWx1ZSAmJiAhOjpDYXRjaDo6RGV0YWlsOjpJc1N0cmVhbUluc2VydGFibGU8Uj46OnZhbHVlPjo6dHlwZT4gewogICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY29udmVydCggUiBjb25zdCYgcmFuZ2UgKSB7CiAgICAgICAgICAgICByZXR1cm4gcmFuZ2VUb1N0cmluZyggcmFuZ2UgKTsKICAgICAgICAgfQpAQCAtMTIwMiw2ICsxODQwLDcgQEAKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQwMTgpIC8vIG1vcmUgInNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaCIKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQzMTIpIC8vIENvbnZlcnRpbmcgaW50IHRvIFQqIHVzaW5nIHJlaW50ZXJwcmV0X2Nhc3QgKGlzc3VlIG9uIHg2NCBwbGF0Zm9ybSkKICNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQxODApIC8vIHF1YWxpZmllciBhcHBsaWVkIHRvIGZ1bmN0aW9uIHR5cGUgaGFzIG5vIG1lYW5pbmcKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ4MDApIC8vIEZvcmNpbmcgcmVzdWx0IHRvIHRydWUgb3IgZmFsc2UKICNlbmRpZgogCiBuYW1lc3BhY2UgQ2F0Y2ggewpAQCAtMTI0NSw2ICsxODg0LDYyIEBACiAgICAgICAgICAgICBtX29wKCBvcCApLAogICAgICAgICAgICAgbV9yaHMoIHJocyApCiAgICAgICAgIHt9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgYXV0byBvcGVyYXRvciAmJiAoIFQgKSBjb25zdCAtPiBCaW5hcnlFeHByPExoc1QsIFJoc1QgY29uc3QmPiBjb25zdCB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGFsd2F5c19mYWxzZTxUPjo6dmFsdWUsCisgICAgICAgICAgICAiY2hhaW5lZCBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUgYXNzZXJ0aW9ucywgIgorICAgICAgICAgICAgIndyYXAgdGhlIGV4cHJlc3Npb24gaW5zaWRlIHBhcmVudGhlc2VzLCBvciBkZWNvbXBvc2UgaXQiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIGF1dG8gb3BlcmF0b3IgfHwgKCBUICkgY29uc3QgLT4gQmluYXJ5RXhwcjxMaHNULCBSaHNUIGNvbnN0Jj4gY29uc3QgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChhbHdheXNfZmFsc2U8VD46OnZhbHVlLAorICAgICAgICAgICAgImNoYWluZWQgY29tcGFyaXNvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGFzc2VydGlvbnMsICIKKyAgICAgICAgICAgICJ3cmFwIHRoZSBleHByZXNzaW9uIGluc2lkZSBwYXJlbnRoZXNlcywgb3IgZGVjb21wb3NlIGl0Iik7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICBhdXRvIG9wZXJhdG9yID09ICggVCApIGNvbnN0IC0+IEJpbmFyeUV4cHI8TGhzVCwgUmhzVCBjb25zdCY+IGNvbnN0IHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoYWx3YXlzX2ZhbHNlPFQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICJjaGFpbmVkIGNvbXBhcmlzb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBhc3NlcnRpb25zLCAiCisgICAgICAgICAgICAid3JhcCB0aGUgZXhwcmVzc2lvbiBpbnNpZGUgcGFyZW50aGVzZXMsIG9yIGRlY29tcG9zZSBpdCIpOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgYXV0byBvcGVyYXRvciAhPSAoIFQgKSBjb25zdCAtPiBCaW5hcnlFeHByPExoc1QsIFJoc1QgY29uc3QmPiBjb25zdCB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGFsd2F5c19mYWxzZTxUPjo6dmFsdWUsCisgICAgICAgICAgICAiY2hhaW5lZCBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUgYXNzZXJ0aW9ucywgIgorICAgICAgICAgICAgIndyYXAgdGhlIGV4cHJlc3Npb24gaW5zaWRlIHBhcmVudGhlc2VzLCBvciBkZWNvbXBvc2UgaXQiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIGF1dG8gb3BlcmF0b3IgPiAoIFQgKSBjb25zdCAtPiBCaW5hcnlFeHByPExoc1QsIFJoc1QgY29uc3QmPiBjb25zdCB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGFsd2F5c19mYWxzZTxUPjo6dmFsdWUsCisgICAgICAgICAgICAiY2hhaW5lZCBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUgYXNzZXJ0aW9ucywgIgorICAgICAgICAgICAgIndyYXAgdGhlIGV4cHJlc3Npb24gaW5zaWRlIHBhcmVudGhlc2VzLCBvciBkZWNvbXBvc2UgaXQiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIGF1dG8gb3BlcmF0b3IgPCAoIFQgKSBjb25zdCAtPiBCaW5hcnlFeHByPExoc1QsIFJoc1QgY29uc3QmPiBjb25zdCB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGFsd2F5c19mYWxzZTxUPjo6dmFsdWUsCisgICAgICAgICAgICAiY2hhaW5lZCBjb21wYXJpc29ucyBhcmUgbm90IHN1cHBvcnRlZCBpbnNpZGUgYXNzZXJ0aW9ucywgIgorICAgICAgICAgICAgIndyYXAgdGhlIGV4cHJlc3Npb24gaW5zaWRlIHBhcmVudGhlc2VzLCBvciBkZWNvbXBvc2UgaXQiKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIGF1dG8gb3BlcmF0b3IgPj0gKCBUICkgY29uc3QgLT4gQmluYXJ5RXhwcjxMaHNULCBSaHNUIGNvbnN0Jj4gY29uc3QgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChhbHdheXNfZmFsc2U8VD46OnZhbHVlLAorICAgICAgICAgICAgImNoYWluZWQgY29tcGFyaXNvbnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGFzc2VydGlvbnMsICIKKyAgICAgICAgICAgICJ3cmFwIHRoZSBleHByZXNzaW9uIGluc2lkZSBwYXJlbnRoZXNlcywgb3IgZGVjb21wb3NlIGl0Iik7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgICAgICBhdXRvIG9wZXJhdG9yIDw9ICggVCApIGNvbnN0IC0+IEJpbmFyeUV4cHI8TGhzVCwgUmhzVCBjb25zdCY+IGNvbnN0IHsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoYWx3YXlzX2ZhbHNlPFQ+Ojp2YWx1ZSwKKyAgICAgICAgICAgICJjaGFpbmVkIGNvbXBhcmlzb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluc2lkZSBhc3NlcnRpb25zLCAiCisgICAgICAgICAgICAid3JhcCB0aGUgZXhwcmVzc2lvbiBpbnNpZGUgcGFyZW50aGVzZXMsIG9yIGRlY29tcG9zZSBpdCIpOworICAgICAgICB9CiAgICAgfTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExoc1Q+CkBAIC0xMjU3LDE0ICsxOTUyLDE0IEBACiAKICAgICBwdWJsaWM6CiAgICAgICAgIGV4cGxpY2l0IFVuYXJ5RXhwciggTGhzVCBsaHMgKQotICAgICAgICA6ICAgSVRyYW5zaWVudEV4cHJlc3Npb257IGZhbHNlLCBsaHMgPyB0cnVlIDogZmFsc2UgfSwKKyAgICAgICAgOiAgIElUcmFuc2llbnRFeHByZXNzaW9ueyBmYWxzZSwgc3RhdGljX2Nhc3Q8Ym9vbD4obGhzKSB9LAogICAgICAgICAgICAgbV9saHMoIGxocyApCiAgICAgICAgIHt9CiAgICAgfTsKIAogICAgIC8vIFNwZWNpYWxpc2VkIGNvbXBhcmlzb24gZnVuY3Rpb25zIHRvIGhhbmRsZSBlcXVhbGl0eSBjb21wYXJpc29ucyBiZXR3ZWVuIGludHMgYW5kIHBvaW50ZXJzIChOVUxMIGRlZHVjZXMgYXMgYW4gaW50KQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIExoc1QsIHR5cGVuYW1lIFJoc1Q+Ci0gICAgYXV0byBjb21wYXJlRXF1YWwoIExoc1QgY29uc3QmIGxocywgUmhzVCBjb25zdCYgcmhzICkgLT4gYm9vbCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihsaHMgPT0gcmhzKTsgfTsKKyAgICBhdXRvIGNvbXBhcmVFcXVhbCggTGhzVCBjb25zdCYgbGhzLCBSaHNUIGNvbnN0JiByaHMgKSAtPiBib29sIHsgcmV0dXJuIHN0YXRpY19jYXN0PGJvb2w+KGxocyA9PSByaHMpOyB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICBhdXRvIGNvbXBhcmVFcXVhbCggVCogY29uc3QmIGxocywgaW50IHJocyApIC0+IGJvb2wgeyByZXR1cm4gbGhzID09IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCBjb25zdCo+KCByaHMgKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CkBAIC0xMjc1LDcgKzE5NzAsNyBAQAogICAgIGF1dG8gY29tcGFyZUVxdWFsKCBsb25nIGxocywgVCogY29uc3QmIHJocyApIC0+IGJvb2wgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkIGNvbnN0Kj4oIGxocyApID09IHJoczsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgTGhzVCwgdHlwZW5hbWUgUmhzVD4KLSAgICBhdXRvIGNvbXBhcmVOb3RFcXVhbCggTGhzVCBjb25zdCYgbGhzLCBSaHNUJiYgcmhzICkgLT4gYm9vbCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihsaHMgIT0gcmhzKTsgfTsKKyAgICBhdXRvIGNvbXBhcmVOb3RFcXVhbCggTGhzVCBjb25zdCYgbGhzLCBSaHNUJiYgcmhzICkgLT4gYm9vbCB7IHJldHVybiBzdGF0aWNfY2FzdDxib29sPihsaHMgIT0gcmhzKTsgfQogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgYXV0byBjb21wYXJlTm90RXF1YWwoIFQqIGNvbnN0JiBsaHMsIGludCByaHMgKSAtPiBib29sIHsgcmV0dXJuIGxocyAhPSByZWludGVycHJldF9jYXN0PHZvaWQgY29uc3QqPiggcmhzICk7IH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtMTMyNCw2ICsyMDE5LDIwIEBACiAgICAgICAgICAgICByZXR1cm4geyBzdGF0aWNfY2FzdDxib29sPihtX2xocyA8PSByaHMpLCBtX2xocywgIjw9IiwgcmhzIH07CiAgICAgICAgIH0KIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBSaHNUPgorICAgICAgICBhdXRvIG9wZXJhdG9yICYmICggUmhzVCBjb25zdCYgKSAtPiBCaW5hcnlFeHByPExoc1QsIFJoc1QgY29uc3QmPiBjb25zdCB7CisgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGFsd2F5c19mYWxzZTxSaHNUPjo6dmFsdWUsCisgICAgICAgICAgICAib3BlcmF0b3ImJiBpcyBub3Qgc3VwcG9ydGVkIGluc2lkZSBhc3NlcnRpb25zLCAiCisgICAgICAgICAgICAid3JhcCB0aGUgZXhwcmVzc2lvbiBpbnNpZGUgcGFyZW50aGVzZXMsIG9yIGRlY29tcG9zZSBpdCIpOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmhzVD4KKyAgICAgICAgYXV0byBvcGVyYXRvciB8fCAoIFJoc1QgY29uc3QmICkgLT4gQmluYXJ5RXhwcjxMaHNULCBSaHNUIGNvbnN0Jj4gY29uc3QgeworICAgICAgICAgICAgc3RhdGljX2Fzc2VydChhbHdheXNfZmFsc2U8UmhzVD46OnZhbHVlLAorICAgICAgICAgICAgIm9wZXJhdG9yfHwgaXMgbm90IHN1cHBvcnRlZCBpbnNpZGUgYXNzZXJ0aW9ucywgIgorICAgICAgICAgICAgIndyYXAgdGhlIGV4cHJlc3Npb24gaW5zaWRlIHBhcmVudGhlc2VzLCBvciBkZWNvbXBvc2UgaXQiKTsKKyAgICAgICAgfQorCiAgICAgICAgIGF1dG8gbWFrZVVuYXJ5RXhwcigpIGNvbnN0IC0+IFVuYXJ5RXhwcjxMaHNUPiB7CiAgICAgICAgICAgICByZXR1cm4gVW5hcnlFeHByPExoc1Q+eyBtX2xocyB9OwogICAgICAgICB9CkBAIC0xMzY1LDEyICsyMDc0LDE1IEBACiAgICAgc3RydWN0IFNlY3Rpb25JbmZvOwogICAgIHN0cnVjdCBTZWN0aW9uRW5kSW5mbzsKICAgICBzdHJ1Y3QgTWVzc2FnZUluZm87CisgICAgc3RydWN0IE1lc3NhZ2VCdWlsZGVyOwogICAgIHN0cnVjdCBDb3VudHM7CiAgICAgc3RydWN0IEJlbmNobWFya0luZm87CiAgICAgc3RydWN0IEJlbmNobWFya1N0YXRzOwogICAgIHN0cnVjdCBBc3NlcnRpb25SZWFjdGlvbjsKKyAgICBzdHJ1Y3QgU291cmNlTGluZUluZm87CiAKICAgICBzdHJ1Y3QgSVRyYW5zaWVudEV4cHJlc3Npb247CisgICAgc3RydWN0IElHZW5lcmF0b3JUcmFja2VyOwogCiAgICAgc3RydWN0IElSZXN1bHRDYXB0dXJlIHsKIApAQCAtMTM4MSwxMiArMjA5MywxNiBAQAogICAgICAgICB2aXJ0dWFsIHZvaWQgc2VjdGlvbkVuZGVkKCBTZWN0aW9uRW5kSW5mbyBjb25zdCYgZW5kSW5mbyApID0gMDsKICAgICAgICAgdmlydHVhbCB2b2lkIHNlY3Rpb25FbmRlZEVhcmx5KCBTZWN0aW9uRW5kSW5mbyBjb25zdCYgZW5kSW5mbyApID0gMDsKIAorICAgICAgICB2aXJ0dWFsIGF1dG8gYWNxdWlyZUdlbmVyYXRvclRyYWNrZXIoIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbyApIC0+IElHZW5lcmF0b3JUcmFja2VyJiA9IDA7CisKICAgICAgICAgdmlydHVhbCB2b2lkIGJlbmNobWFya1N0YXJ0aW5nKCBCZW5jaG1hcmtJbmZvIGNvbnN0JiBpbmZvICkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgYmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzIGNvbnN0JiBzdGF0cyApID0gMDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgcHVzaFNjb3BlZE1lc3NhZ2UoIE1lc3NhZ2VJbmZvIGNvbnN0JiBtZXNzYWdlICkgPSAwOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcG9wU2NvcGVkTWVzc2FnZSggTWVzc2FnZUluZm8gY29uc3QmIG1lc3NhZ2UgKSA9IDA7CiAKKyAgICAgICAgdmlydHVhbCB2b2lkIGVtcGxhY2VVbnNjb3BlZE1lc3NhZ2UoIE1lc3NhZ2VCdWlsZGVyIGNvbnN0JiBidWlsZGVyICkgPSAwOworCiAgICAgICAgIHZpcnR1YWwgdm9pZCBoYW5kbGVGYXRhbEVycm9yQ29uZGl0aW9uKCBTdHJpbmdSZWYgbWVzc2FnZSApID0gMDsKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgaGFuZGxlRXhwcgpAQCAtMTQ2Miw3ICsyMTc4LDcgQEAKIAogICAgIHB1YmxpYzoKICAgICAgICAgQXNzZXJ0aW9uSGFuZGxlcgotICAgICAgICAgICAgKCAgIFN0cmluZ1JlZiBtYWNyb05hbWUsCisgICAgICAgICAgICAoICAgU3RyaW5nUmVmIGNvbnN0JiBtYWNyb05hbWUsCiAgICAgICAgICAgICAgICAgU291cmNlTGluZUluZm8gY29uc3QmIGxpbmVJbmZvLAogICAgICAgICAgICAgICAgIFN0cmluZ1JlZiBjYXB0dXJlZEV4cHJlc3Npb24sCiAgICAgICAgICAgICAgICAgUmVzdWx0RGlzcG9zaXRpb246OkZsYWdzIHJlc3VsdERpc3Bvc2l0aW9uICk7CkBAIC0xNDkzLDcgKzIyMDksNyBAQAogICAgICAgICBhdXRvIGFsbG93VGhyb3dzKCkgY29uc3QgLT4gYm9vbDsKICAgICB9OwogCi0gICAgdm9pZCBoYW5kbGVFeGNlcHRpb25NYXRjaEV4cHIoIEFzc2VydGlvbkhhbmRsZXImIGhhbmRsZXIsIHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIsIFN0cmluZ1JlZiBtYXRjaGVyU3RyaW5nICk7CisgICAgdm9pZCBoYW5kbGVFeGNlcHRpb25NYXRjaEV4cHIoIEFzc2VydGlvbkhhbmRsZXImIGhhbmRsZXIsIHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIsIFN0cmluZ1JlZiBjb25zdCYgbWF0Y2hlclN0cmluZyApOwogCiB9IC8vIG5hbWVzcGFjZSBDYXRjaAogCkBAIC0xNTAxLDE1ICsyMjE3LDE2IEBACiAvLyBzdGFydCBjYXRjaF9tZXNzYWdlLmgKIAogI2luY2x1ZGUgPHN0cmluZz4KKyNpbmNsdWRlIDx2ZWN0b3I+CiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKICAgICBzdHJ1Y3QgTWVzc2FnZUluZm8gewotICAgICAgICBNZXNzYWdlSW5mbyggICAgc3RkOjpzdHJpbmcgY29uc3QmIF9tYWNyb05hbWUsCisgICAgICAgIE1lc3NhZ2VJbmZvKCAgICBTdHJpbmdSZWYgY29uc3QmIF9tYWNyb05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VMaW5lSW5mbyBjb25zdCYgX2xpbmVJbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0V2FzOjpPZlR5cGUgX3R5cGUgKTsKIAotICAgICAgICBzdGQ6OnN0cmluZyBtYWNyb05hbWU7CisgICAgICAgIFN0cmluZ1JlZiBtYWNyb05hbWU7CiAgICAgICAgIHN0ZDo6c3RyaW5nIG1lc3NhZ2U7CiAgICAgICAgIFNvdXJjZUxpbmVJbmZvIGxpbmVJbmZvOwogICAgICAgICBSZXN1bHRXYXM6Ok9mVHlwZSB0eXBlOwpAQCAtMTUzMyw3ICsyMjUwLDcgQEAKICAgICB9OwogCiAgICAgc3RydWN0IE1lc3NhZ2VCdWlsZGVyIDogTWVzc2FnZVN0cmVhbSB7Ci0gICAgICAgIE1lc3NhZ2VCdWlsZGVyKCBzdGQ6OnN0cmluZyBjb25zdCYgbWFjcm9OYW1lLAorICAgICAgICBNZXNzYWdlQnVpbGRlciggU3RyaW5nUmVmIGNvbnN0JiBtYWNyb05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VMaW5lSW5mbyBjb25zdCYgbGluZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBSZXN1bHRXYXM6Ok9mVHlwZSB0eXBlICk7CiAKQEAgLTE1NDksOSArMjI2NiwzNCBAQAogICAgIGNsYXNzIFNjb3BlZE1lc3NhZ2UgewogICAgIHB1YmxpYzoKICAgICAgICAgZXhwbGljaXQgU2NvcGVkTWVzc2FnZSggTWVzc2FnZUJ1aWxkZXIgY29uc3QmIGJ1aWxkZXIgKTsKKyAgICAgICAgU2NvcGVkTWVzc2FnZSggU2NvcGVkTWVzc2FnZSYgZHVwbGljYXRlICkgPSBkZWxldGU7CisgICAgICAgIFNjb3BlZE1lc3NhZ2UoIFNjb3BlZE1lc3NhZ2UmJiBvbGQgKTsKICAgICAgICAgflNjb3BlZE1lc3NhZ2UoKTsKIAogICAgICAgICBNZXNzYWdlSW5mbyBtX2luZm87CisgICAgICAgIGJvb2wgbV9tb3ZlZDsKKyAgICB9OworCisgICAgY2xhc3MgQ2FwdHVyZXIgeworICAgICAgICBzdGQ6OnZlY3RvcjxNZXNzYWdlSW5mbz4gbV9tZXNzYWdlczsKKyAgICAgICAgSVJlc3VsdENhcHR1cmUmIG1fcmVzdWx0Q2FwdHVyZSA9IGdldFJlc3VsdENhcHR1cmUoKTsKKyAgICAgICAgc2l6ZV90IG1fY2FwdHVyZWQgPSAwOworICAgIHB1YmxpYzoKKyAgICAgICAgQ2FwdHVyZXIoIFN0cmluZ1JlZiBtYWNyb05hbWUsIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbywgUmVzdWx0V2FzOjpPZlR5cGUgcmVzdWx0VHlwZSwgU3RyaW5nUmVmIG5hbWVzICk7CisgICAgICAgIH5DYXB0dXJlcigpOworCisgICAgICAgIHZvaWQgY2FwdHVyZVZhbHVlKCBzaXplX3QgaW5kZXgsIHN0ZDo6c3RyaW5nIGNvbnN0JiB2YWx1ZSApOworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgICAgIHZvaWQgY2FwdHVyZVZhbHVlcyggc2l6ZV90IGluZGV4LCBUIGNvbnN0JiB2YWx1ZSApIHsKKyAgICAgICAgICAgIGNhcHR1cmVWYWx1ZSggaW5kZXgsIENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSggdmFsdWUgKSApOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gVHM+CisgICAgICAgIHZvaWQgY2FwdHVyZVZhbHVlcyggc2l6ZV90IGluZGV4LCBUIGNvbnN0JiB2YWx1ZSwgVHMgY29uc3QmLi4uIHZhbHVlcyApIHsKKyAgICAgICAgICAgIGNhcHR1cmVWYWx1ZSggaW5kZXgsIENhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeSh2YWx1ZSkgKTsKKyAgICAgICAgICAgIGNhcHR1cmVWYWx1ZXMoIGluZGV4KzEsIHZhbHVlcy4uLiApOworICAgICAgICB9CiAgICAgfTsKIAogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCkBAIC0xNTY1LDE3ICsyMzA3LDE3IEBACiAgICNkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKC4uLikgIkRpc2FibGVkIGJ5IENBVENIX0NPTkZJR19ESVNBQkxFX1NUUklOR0lGSUNBVElPTiIKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfRkFTVF9DT01QSUxFKQorI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0ZBU1RfQ09NUElMRSkgfHwgZGVmaW5lZChDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TKQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLyBBbm90aGVyIHdheSB0byBzcGVlZC11cCBjb21waWxhdGlvbiBpcyB0byBvbWl0IGxvY2FsIHRyeS1jYXRjaCBmb3IgUkVRVUlSRSoKIC8vIG1hY3Jvcy4KLSNkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfVFJZCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RSWQogI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9DQVRDSCggY2FwdHVyZXIgKQogCiAjZWxzZSAvLyBDQVRDSF9DT05GSUdfRkFTVF9DT01QSUxFCiAKLSNkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfVFJZIHRyeQorI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9UUlkgdHJ5CiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX0NBVENIKCBoYW5kbGVyICkgY2F0Y2goLi4uKSB7IGhhbmRsZXIuaGFuZGxlVW5leHBlY3RlZEluZmxpZ2h0RXhjZXB0aW9uKCk7IH0KIAogI2VuZGlmCkBAIC0xNTg1LDE0ICsyMzI3LDE0IEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RFU1QoIG1hY3JvTmFtZSwgcmVzdWx0RGlzcG9zaXRpb24sIC4uLiApIFwKICAgICBkbyB7IFwKLSAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoX19WQV9BUkdTX18pLCByZXN1bHREaXNwb3NpdGlvbiApOyBcCi0gICAgICAgIENBVENIX0lOVEVSTkFMX1RSWSB7IFwKKyAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUjI19jYXRjaF9zciwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShfX1ZBX0FSR1NfXyksIHJlc3VsdERpc3Bvc2l0aW9uICk7IFwKKyAgICAgICAgSU5URVJOQUxfQ0FUQ0hfVFJZIHsgXAogICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfU1VQUFJFU1NfUEFSRU5USEVTRVNfV0FSTklOR1MgXAogICAgICAgICAgICAgY2F0Y2hBc3NlcnRpb25IYW5kbGVyLmhhbmRsZUV4cHIoIENhdGNoOjpEZWNvbXBvc2VyKCkgPD0gX19WQV9BUkdTX18gKTsgXAogICAgICAgICAgICAgQ0FUQ0hfSU5URVJOQUxfVU5TVVBQUkVTU19QQVJFTlRIRVNFU19XQVJOSU5HUyBcCiAgICAgICAgIH0gSU5URVJOQUxfQ0FUQ0hfQ0FUQ0goIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciApIFwKICAgICAgICAgSU5URVJOQUxfQ0FUQ0hfUkVBQ1QoIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciApIFwKLSAgICB9IHdoaWxlKCAodm9pZCkwLCBmYWxzZSAmJiBzdGF0aWNfY2FzdDxib29sPiggISEoX19WQV9BUkdTX18pICkgKSAvLyB0aGUgZXhwcmVzc2lvbiBoZXJlIGlzIG5ldmVyIGV2YWx1YXRlZCBhdCBydW50aW1lIGJ1dCBpdCBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvIGdpdmUgaXQgYSBsb29rCisgICAgfSB3aGlsZSggKHZvaWQpMCwgKGZhbHNlKSAmJiBzdGF0aWNfY2FzdDxib29sPiggISEoX19WQV9BUkdTX18pICkgKSAvLyB0aGUgZXhwcmVzc2lvbiBoZXJlIGlzIG5ldmVyIGV2YWx1YXRlZCBhdCBydW50aW1lIGJ1dCBpdCBmb3JjZXMgdGhlIGNvbXBpbGVyIHRvIGdpdmUgaXQgYSBsb29rCiAgICAgLy8gVGhlIGRvdWJsZSBuZWdhdGlvbiBzaWxlbmNlcyBNU1ZDJ3MgQzQ4MDAgd2FybmluZywgdGhlIHN0YXRpY19jYXN0IGZvcmNlcyBzaG9ydC1jaXJjdWl0IGV2YWx1YXRpb24gaWYgdGhlIHR5cGUgaGFzIG92ZXJsb2FkZWQgJiYuCiAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTE2MDgsNyArMjM1MCw3IEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX05PX1RIUk9XKCBtYWNyb05hbWUsIHJlc3VsdERpc3Bvc2l0aW9uLCAuLi4gKSBcCiAgICAgZG8geyBcCi0gICAgICAgIENhdGNoOjpBc3NlcnRpb25IYW5kbGVyIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciggbWFjcm9OYW1lLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKF9fVkFfQVJHU19fKSwgcmVzdWx0RGlzcG9zaXRpb24gKTsgXAorICAgICAgICBDYXRjaDo6QXNzZXJ0aW9uSGFuZGxlciBjYXRjaEFzc2VydGlvbkhhbmRsZXIoIG1hY3JvTmFtZSMjX2NhdGNoX3NyLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKF9fVkFfQVJHU19fKSwgcmVzdWx0RGlzcG9zaXRpb24gKTsgXAogICAgICAgICB0cnkgeyBcCiAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPihfX1ZBX0FSR1NfXyk7IFwKICAgICAgICAgICAgIGNhdGNoQXNzZXJ0aW9uSGFuZGxlci5oYW5kbGVFeGNlcHRpb25Ob3RUaHJvd25Bc0V4cGVjdGVkKCk7IFwKQEAgLTE2MjIsNyArMjM2NCw3IEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RIUk9XUyggbWFjcm9OYW1lLCByZXN1bHREaXNwb3NpdGlvbiwgLi4uICkgXAogICAgIGRvIHsgXAotICAgICAgICBDYXRjaDo6QXNzZXJ0aW9uSGFuZGxlciBjYXRjaEFzc2VydGlvbkhhbmRsZXIoIG1hY3JvTmFtZSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShfX1ZBX0FSR1NfXyksIHJlc3VsdERpc3Bvc2l0aW9uKTsgXAorICAgICAgICBDYXRjaDo6QXNzZXJ0aW9uSGFuZGxlciBjYXRjaEFzc2VydGlvbkhhbmRsZXIoIG1hY3JvTmFtZSMjX2NhdGNoX3NyLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKF9fVkFfQVJHU19fKSwgcmVzdWx0RGlzcG9zaXRpb24pOyBcCiAgICAgICAgIGlmKCBjYXRjaEFzc2VydGlvbkhhbmRsZXIuYWxsb3dUaHJvd3MoKSApIFwKICAgICAgICAgICAgIHRyeSB7IFwKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPihfX1ZBX0FSR1NfXyk7IFwKQEAgLTE2MzksNyArMjM4MSw3IEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjZGVmaW5lIElOVEVSTkFMX0NBVENIX1RIUk9XU19BUyggbWFjcm9OYW1lLCBleGNlcHRpb25UeXBlLCByZXN1bHREaXNwb3NpdGlvbiwgZXhwciApIFwKICAgICBkbyB7IFwKLSAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoZXhwcikgIiwgIiBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoZXhjZXB0aW9uVHlwZSksIHJlc3VsdERpc3Bvc2l0aW9uICk7IFwKKyAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUjI19jYXRjaF9zciwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShleHByKSAiLCAiIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShleGNlcHRpb25UeXBlKSwgcmVzdWx0RGlzcG9zaXRpb24gKTsgXAogICAgICAgICBpZiggY2F0Y2hBc3NlcnRpb25IYW5kbGVyLmFsbG93VGhyb3dzKCkgKSBcCiAgICAgICAgICAgICB0cnkgeyBcCiAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4oZXhwcik7IFwKQEAgLTE2NTksMjcgKzI0MDEsMzYgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfTVNHKCBtYWNyb05hbWUsIG1lc3NhZ2VUeXBlLCByZXN1bHREaXNwb3NpdGlvbiwgLi4uICkgXAogICAgIGRvIHsgXAotICAgICAgICBDYXRjaDo6QXNzZXJ0aW9uSGFuZGxlciBjYXRjaEFzc2VydGlvbkhhbmRsZXIoIG1hY3JvTmFtZSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sICIiLCByZXN1bHREaXNwb3NpdGlvbiApOyBcCisgICAgICAgIENhdGNoOjpBc3NlcnRpb25IYW5kbGVyIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciggbWFjcm9OYW1lIyNfY2F0Y2hfc3IsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDYXRjaDo6U3RyaW5nUmVmKCksIHJlc3VsdERpc3Bvc2l0aW9uICk7IFwKICAgICAgICAgY2F0Y2hBc3NlcnRpb25IYW5kbGVyLmhhbmRsZU1lc3NhZ2UoIG1lc3NhZ2VUeXBlLCAoIENhdGNoOjpNZXNzYWdlU3RyZWFtKCkgPDwgX19WQV9BUkdTX18gKyA6OkNhdGNoOjpTdHJlYW1FbmRTdG9wKCkgKS5tX3N0cmVhbS5zdHIoKSApOyBcCiAgICAgICAgIElOVEVSTkFMX0NBVENIX1JFQUNUKCBjYXRjaEFzc2VydGlvbkhhbmRsZXIgKSBcCiAgICAgfSB3aGlsZSggZmFsc2UgKQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX0NBUFRVUkUoIHZhck5hbWUsIG1hY3JvTmFtZSwgLi4uICkgXAorICAgIGF1dG8gdmFyTmFtZSA9IENhdGNoOjpDYXB0dXJlciggbWFjcm9OYW1lLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ2F0Y2g6OlJlc3VsdFdhczo6SW5mbywgI19fVkFfQVJHU19fICk7IFwKKyAgICB2YXJOYW1lLmNhcHR1cmVWYWx1ZXMoIDAsIF9fVkFfQVJHU19fICkKKworLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9JTkZPKCBtYWNyb05hbWUsIGxvZyApIFwKLSAgICBDYXRjaDo6U2NvcGVkTWVzc2FnZSBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggc2NvcGVkTWVzc2FnZSApKCBDYXRjaDo6TWVzc2FnZUJ1aWxkZXIoIG1hY3JvTmFtZSwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENhdGNoOjpSZXN1bHRXYXM6OkluZm8gKSA8PCBsb2cgKTsKKyAgICBDYXRjaDo6U2NvcGVkTWVzc2FnZSBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggc2NvcGVkTWVzc2FnZSApKCBDYXRjaDo6TWVzc2FnZUJ1aWxkZXIoIG1hY3JvTmFtZSMjX2NhdGNoX3NyLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgQ2F0Y2g6OlJlc3VsdFdhczo6SW5mbyApIDw8IGxvZyApOworCisvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX1VOU0NPUEVEX0lORk8oIG1hY3JvTmFtZSwgbG9nICkgXAorICAgIENhdGNoOjpnZXRSZXN1bHRDYXB0dXJlKCkuZW1wbGFjZVVuc2NvcGVkTWVzc2FnZSggQ2F0Y2g6Ok1lc3NhZ2VCdWlsZGVyKCBtYWNyb05hbWUjI19jYXRjaF9zciwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8sIENhdGNoOjpSZXN1bHRXYXM6OkluZm8gKSA8PCBsb2cgKQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAvLyBBbHRob3VnaCB0aGlzIGlzIG1hdGNoZXItYmFzZWQsIGl0IGNhbiBiZSB1c2VkIHdpdGgganVzdCBhIHN0cmluZwogI2RlZmluZSBJTlRFUk5BTF9DQVRDSF9USFJPV1NfU1RSX01BVENIRVMoIG1hY3JvTmFtZSwgcmVzdWx0RGlzcG9zaXRpb24sIG1hdGNoZXIsIC4uLiApIFwKICAgICBkbyB7IFwKLSAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoX19WQV9BUkdTX18pICIsICIgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKG1hdGNoZXIpLCByZXN1bHREaXNwb3NpdGlvbiApOyBcCisgICAgICAgIENhdGNoOjpBc3NlcnRpb25IYW5kbGVyIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciggbWFjcm9OYW1lIyNfY2F0Y2hfc3IsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoX19WQV9BUkdTX18pICIsICIgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKG1hdGNoZXIpLCByZXN1bHREaXNwb3NpdGlvbiApOyBcCiAgICAgICAgIGlmKCBjYXRjaEFzc2VydGlvbkhhbmRsZXIuYWxsb3dUaHJvd3MoKSApIFwKICAgICAgICAgICAgIHRyeSB7IFwKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPihfX1ZBX0FSR1NfXyk7IFwKICAgICAgICAgICAgICAgICBjYXRjaEFzc2VydGlvbkhhbmRsZXIuaGFuZGxlVW5leHBlY3RlZEV4Y2VwdGlvbk5vdFRocm93bigpOyBcCiAgICAgICAgICAgICB9IFwKICAgICAgICAgICAgIGNhdGNoKCAuLi4gKSB7IFwKLSAgICAgICAgICAgICAgICBDYXRjaDo6aGFuZGxlRXhjZXB0aW9uTWF0Y2hFeHByKCBjYXRjaEFzc2VydGlvbkhhbmRsZXIsIG1hdGNoZXIsICNtYXRjaGVyICk7IFwKKyAgICAgICAgICAgICAgICBDYXRjaDo6aGFuZGxlRXhjZXB0aW9uTWF0Y2hFeHByKCBjYXRjaEFzc2VydGlvbkhhbmRsZXIsIG1hdGNoZXIsICNtYXRjaGVyIyNfY2F0Y2hfc3IgKTsgXAogICAgICAgICAgICAgfSBcCiAgICAgICAgIGVsc2UgXAogICAgICAgICAgICAgY2F0Y2hBc3NlcnRpb25IYW5kbGVyLmhhbmRsZVRocm93aW5nQ2FsbFNraXBwZWQoKTsgXApAQCAtMTcxOSw2ICsyNDcwLDcgQEAKIAogICAgICAgICBUb3RhbHMgZGVsdGEoIFRvdGFscyBjb25zdCYgcHJldlRvdGFscyApIGNvbnN0OwogCisgICAgICAgIGludCBlcnJvciA9IDA7CiAgICAgICAgIENvdW50cyBhc3NlcnRpb25zOwogICAgICAgICBDb3VudHMgdGVzdENhc2VzOwogICAgIH07CkBAIC0xNzMyLDE3ICsyNDg0LDIwIEBACiAgICAgc3RydWN0IFNlY3Rpb25JbmZvIHsKICAgICAgICAgU2VjdGlvbkluZm8KICAgICAgICAgICAgICggICBTb3VyY2VMaW5lSW5mbyBjb25zdCYgX2xpbmVJbmZvLAorICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBfbmFtZSApOworCisgICAgICAgIC8vIERlcHJlY2F0ZWQKKyAgICAgICAgU2VjdGlvbkluZm8KKyAgICAgICAgICAgICggICBTb3VyY2VMaW5lSW5mbyBjb25zdCYgX2xpbmVJbmZvLAogICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBfbmFtZSwKLSAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgX2Rlc2NyaXB0aW9uID0gc3RkOjpzdHJpbmcoKSApOworICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiApIDogU2VjdGlvbkluZm8oIF9saW5lSW5mbywgX25hbWUgKSB7fQogCiAgICAgICAgIHN0ZDo6c3RyaW5nIG5hbWU7Ci0gICAgICAgIHN0ZDo6c3RyaW5nIGRlc2NyaXB0aW9uOworICAgICAgICBzdGQ6OnN0cmluZyBkZXNjcmlwdGlvbjsgLy8gIURlcHJlY2F0ZWQ6IHRoaXMgd2lsbCBhbHdheXMgYmUgZW1wdHkKICAgICAgICAgU291cmNlTGluZUluZm8gbGluZUluZm87CiAgICAgfTsKIAogICAgIHN0cnVjdCBTZWN0aW9uRW5kSW5mbyB7Ci0gICAgICAgIFNlY3Rpb25FbmRJbmZvKCBTZWN0aW9uSW5mbyBjb25zdCYgX3NlY3Rpb25JbmZvLCBDb3VudHMgY29uc3QmIF9wcmV2QXNzZXJ0aW9ucywgZG91YmxlIF9kdXJhdGlvbkluU2Vjb25kcyApOwotCiAgICAgICAgIFNlY3Rpb25JbmZvIHNlY3Rpb25JbmZvOwogICAgICAgICBDb3VudHMgcHJldkFzc2VydGlvbnM7CiAgICAgICAgIGRvdWJsZSBkdXJhdGlvbkluU2Vjb25kczsKQEAgLTE3OTYsOCArMjU1MSwxNSBAQAogCiB9IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKIAotICAgICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfU0VDVElPTiggLi4uICkgXAotICAgICAgICBpZiggQ2F0Y2g6OlNlY3Rpb24gY29uc3QmIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBjYXRjaF9pbnRlcm5hbF9TZWN0aW9uICkgPSBDYXRjaDo6U2VjdGlvbkluZm8oIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBfX1ZBX0FSR1NfXyApICkKKyNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfU0VDVElPTiggLi4uICkgXAorICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUyBcCisgICAgaWYoIENhdGNoOjpTZWN0aW9uIGNvbnN0JiBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggY2F0Y2hfaW50ZXJuYWxfU2VjdGlvbiApID0gQ2F0Y2g6OlNlY3Rpb25JbmZvKCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgX19WQV9BUkdTX18gKSApIFwKKyAgICBDQVRDSF9JTlRFUk5BTF9VTlNVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUworCisjZGVmaW5lIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggLi4uICkgXAorICAgIENBVENIX0lOVEVSTkFMX1NVUFBSRVNTX1VOVVNFRF9XQVJOSU5HUyBcCisgICAgaWYoIENhdGNoOjpTZWN0aW9uIGNvbnN0JiBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggY2F0Y2hfaW50ZXJuYWxfU2VjdGlvbiApID0gQ2F0Y2g6OlNlY3Rpb25JbmZvKCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgKENhdGNoOjpSZXVzYWJsZVN0cmluZ1N0cmVhbSgpIDw8IF9fVkFfQVJHU19fKS5zdHIoKSApICkgXAorICAgIENBVENIX0lOVEVSTkFMX1VOU1VQUFJFU1NfVU5VU0VEX1dBUk5JTkdTCiAKIC8vIGVuZCBjYXRjaF9zZWN0aW9uLmgKIC8vIHN0YXJ0IGNhdGNoX2JlbmNobWFyay5oCkBAIC0xODczLDcgKzI2MzUsNyBAQAogICAgICAgICB2aXJ0dWFsIElUZXN0Q2FzZVJlZ2lzdHJ5IGNvbnN0JiBnZXRUZXN0Q2FzZVJlZ2lzdHJ5KCkgY29uc3QgPSAwOwogICAgICAgICB2aXJ0dWFsIElUYWdBbGlhc1JlZ2lzdHJ5IGNvbnN0JiBnZXRUYWdBbGlhc1JlZ2lzdHJ5KCkgY29uc3QgPSAwOwogCi0gICAgICAgIHZpcnR1YWwgSUV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeSYgZ2V0RXhjZXB0aW9uVHJhbnNsYXRvclJlZ2lzdHJ5KCkgPSAwOworICAgICAgICB2aXJ0dWFsIElFeGNlcHRpb25UcmFuc2xhdG9yUmVnaXN0cnkgY29uc3QmIGdldEV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeSgpIGNvbnN0ID0gMDsKIAogICAgICAgICB2aXJ0dWFsIFN0YXJ0dXBFeGNlcHRpb25SZWdpc3RyeSBjb25zdCYgZ2V0U3RhcnR1cEV4Y2VwdGlvblJlZ2lzdHJ5KCkgY29uc3QgPSAwOwogICAgIH07CkBAIC0xODg4LDcgKzI2NTAsNyBAQAogICAgICAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTdGFydHVwRXhjZXB0aW9uKCkgbm9leGNlcHQgPSAwOwogICAgIH07CiAKLSAgICBJUmVnaXN0cnlIdWImIGdldFJlZ2lzdHJ5SHViKCk7CisgICAgSVJlZ2lzdHJ5SHViIGNvbnN0JiBnZXRSZWdpc3RyeUh1YigpOwogICAgIElNdXRhYmxlUmVnaXN0cnlIdWImIGdldE11dGFibGVSZWdpc3RyeUh1YigpOwogICAgIHZvaWQgY2xlYW5VcCgpOwogICAgIHN0ZDo6c3RyaW5nIHRyYW5zbGF0ZUFjdGl2ZUV4Y2VwdGlvbigpOwpAQCAtMTk3MCw3ICsyNzMyLDYgQEAKIC8vIHN0YXJ0IGNhdGNoX2FwcHJveC5oCiAKICNpbmNsdWRlIDx0eXBlX3RyYWl0cz4KLSNpbmNsdWRlIDxzdGRleGNlcHQ+CiAKIG5hbWVzcGFjZSBDYXRjaCB7CiBuYW1lc3BhY2UgRGV0YWlsIHsKQEAgLTE5NzgsMTggKzI3MzksMjYgQEAKICAgICBjbGFzcyBBcHByb3ggewogICAgIHByaXZhdGU6CiAgICAgICAgIGJvb2wgZXF1YWxpdHlDb21wYXJpc29uSW1wbChkb3VibGUgb3RoZXIpIGNvbnN0OworICAgICAgICAvLyBWYWxpZGF0ZXMgdGhlIG5ldyBtYXJnaW4gKG1hcmdpbiA+PSAwKQorICAgICAgICAvLyBvdXQtb2YtbGluZSB0byBhdm9pZCBpbmNsdWRpbmcgc3RkZXhjZXB0IGluIHRoZSBoZWFkZXIKKyAgICAgICAgdm9pZCBzZXRNYXJnaW4oZG91YmxlIG1hcmdpbik7CisgICAgICAgIC8vIFZhbGlkYXRlcyB0aGUgbmV3IGVwc2lsb24gKDAgPCBlcHNpbG9uIDwgMSkKKyAgICAgICAgLy8gb3V0LW9mLWxpbmUgdG8gYXZvaWQgaW5jbHVkaW5nIHN0ZGV4Y2VwdCBpbiB0aGUgaGVhZGVyCisgICAgICAgIHZvaWQgc2V0RXBzaWxvbihkb3VibGUgZXBzaWxvbik7CiAKICAgICBwdWJsaWM6CiAgICAgICAgIGV4cGxpY2l0IEFwcHJveCAoIGRvdWJsZSB2YWx1ZSApOwogCiAgICAgICAgIHN0YXRpYyBBcHByb3ggY3VzdG9tKCk7CiAKKyAgICAgICAgQXBwcm94IG9wZXJhdG9yLSgpIGNvbnN0OworCiAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSA9IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPHN0ZDo6aXNfY29uc3RydWN0aWJsZTxkb3VibGUsIFQ+Ojp2YWx1ZT46OnR5cGU+CiAgICAgICAgIEFwcHJveCBvcGVyYXRvcigpKCBUIGNvbnN0JiB2YWx1ZSApIHsKICAgICAgICAgICAgIEFwcHJveCBhcHByb3goIHN0YXRpY19jYXN0PGRvdWJsZT4odmFsdWUpICk7Ci0gICAgICAgICAgICBhcHByb3guZXBzaWxvbiggbV9lcHNpbG9uICk7Ci0gICAgICAgICAgICBhcHByb3gubWFyZ2luKCBtX21hcmdpbiApOwotICAgICAgICAgICAgYXBwcm94LnNjYWxlKCBtX3NjYWxlICk7CisgICAgICAgICAgICBhcHByb3gubV9lcHNpbG9uID0gbV9lcHNpbG9uOworICAgICAgICAgICAgYXBwcm94Lm1fbWFyZ2luID0gbV9tYXJnaW47CisgICAgICAgICAgICBhcHByb3gubV9zY2FsZSA9IG1fc2NhbGU7CiAgICAgICAgICAgICByZXR1cm4gYXBwcm94OwogICAgICAgICB9CiAKQEAgLTIwNDEsMjcgKzI4MTAsMTQgQEAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb25zdHJ1Y3RpYmxlPGRvdWJsZSwgVD46OnZhbHVlPjo6dHlwZT4KICAgICAgICAgQXBwcm94JiBlcHNpbG9uKCBUIGNvbnN0JiBuZXdFcHNpbG9uICkgewogICAgICAgICAgICAgZG91YmxlIGVwc2lsb25Bc0RvdWJsZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4obmV3RXBzaWxvbik7Ci0gICAgICAgICAgICBpZiggZXBzaWxvbkFzRG91YmxlIDwgMCB8fCBlcHNpbG9uQXNEb3VibGUgPiAxLjAgKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgc3RkOjpkb21haW5fZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgKCAgICJJbnZhbGlkIEFwcHJveDo6ZXBzaWxvbjogIiArCi0gICAgICAgICAgICAgICAgICAgICAgICBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIGVwc2lsb25Bc0RvdWJsZSApICsKLSAgICAgICAgICAgICAgICAgICAgICAgICIsIEFwcHJveDo6ZXBzaWxvbiBoYXMgdG8gYmUgYmV0d2VlbiAwIGFuZCAxIiApOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9lcHNpbG9uID0gZXBzaWxvbkFzRG91YmxlOworICAgICAgICAgICAgc2V0RXBzaWxvbihlcHNpbG9uQXNEb3VibGUpOwogICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICB9CiAKICAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lID0gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19jb25zdHJ1Y3RpYmxlPGRvdWJsZSwgVD46OnZhbHVlPjo6dHlwZT4KICAgICAgICAgQXBwcm94JiBtYXJnaW4oIFQgY29uc3QmIG5ld01hcmdpbiApIHsKICAgICAgICAgICAgIGRvdWJsZSBtYXJnaW5Bc0RvdWJsZSA9IHN0YXRpY19jYXN0PGRvdWJsZT4obmV3TWFyZ2luKTsKLSAgICAgICAgICAgIGlmKCBtYXJnaW5Bc0RvdWJsZSA8IDAgKSB7Ci0gICAgICAgICAgICAgICAgdGhyb3cgc3RkOjpkb21haW5fZXJyb3IKLSAgICAgICAgICAgICAgICAgICAgKCAgICJJbnZhbGlkIEFwcHJveDo6bWFyZ2luOiAiICsKLSAgICAgICAgICAgICAgICAgICAgICAgICBDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIG1hcmdpbkFzRG91YmxlICkgKwotICAgICAgICAgICAgICAgICAgICAgICAgICIsIEFwcHJveDo6TWFyZ2luIGhhcyB0byBiZSBub24tbmVnYXRpdmUuIiApOwotCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX21hcmdpbiA9IG1hcmdpbkFzRG91YmxlOworICAgICAgICAgICAgc2V0TWFyZ2luKG1hcmdpbkFzRG91YmxlKTsKICAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgfQogCkBAIC0yMDc5LDcgKzI4MzUsMTIgQEAKICAgICAgICAgZG91YmxlIG1fc2NhbGU7CiAgICAgICAgIGRvdWJsZSBtX3ZhbHVlOwogICAgIH07Ci19Cit9IC8vIGVuZCBuYW1lc3BhY2UgRGV0YWlsCisKK25hbWVzcGFjZSBsaXRlcmFscyB7CisgICAgRGV0YWlsOjpBcHByb3ggb3BlcmF0b3IgIiIgX2EobG9uZyBkb3VibGUgdmFsKTsKKyAgICBEZXRhaWw6OkFwcHJveCBvcGVyYXRvciAiIiBfYSh1bnNpZ25lZCBsb25nIGxvbmcgdmFsKTsKK30gLy8gZW5kIG5hbWVzcGFjZSBsaXRlcmFscwogCiB0ZW1wbGF0ZTw+CiBzdHJ1Y3QgU3RyaW5nTWFrZXI8Q2F0Y2g6OkRldGFpbDo6QXBwcm94PiB7CkBAIC0yMTQ2LDE0ICsyOTA3LDE5IEBACiAgICAgICAgICAgICBtdXRhYmxlIHN0ZDo6c3RyaW5nIG1fY2FjaGVkVG9TdHJpbmc7CiAgICAgICAgIH07CiAKKyNpZmRlZiBfX2NsYW5nX18KKyMgICAgcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgcHVzaAorIyAgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV25vbi12aXJ0dWFsLWR0b3IiCisjZW5kaWYKKwogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPYmplY3RUPgogICAgICAgICBzdHJ1Y3QgTWF0Y2hlck1ldGhvZCB7CiAgICAgICAgICAgICB2aXJ0dWFsIGJvb2wgbWF0Y2goIE9iamVjdFQgY29uc3QmIGFyZyApIGNvbnN0ID0gMDsKICAgICAgICAgfTsKLSAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUHRyVD4KLSAgICAgICAgc3RydWN0IE1hdGNoZXJNZXRob2Q8UHRyVCo+IHsKLSAgICAgICAgICAgIHZpcnR1YWwgYm9vbCBtYXRjaCggUHRyVCogYXJnICkgY29uc3QgPSAwOwotICAgICAgICB9OworCisjaWZkZWYgX19jbGFuZ19fCisjICAgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCiAKICAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KICAgICAgICAgc3RydWN0IE1hdGNoZXJCYXNlIDogTWF0Y2hlclVudHlwZWRCYXNlLCBNYXRjaGVyTWV0aG9kPFQ+IHsKQEAgLTIzMTAsNiArMzA3Niw1NCBAQAogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIAogLy8gZW5kIGNhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmgKKy8vIHN0YXJ0IGNhdGNoX21hdGNoZXJzX2dlbmVyaWMuaHBwCisKKyNpbmNsdWRlIDxmdW5jdGlvbmFsPgorI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIENhdGNoIHsKK25hbWVzcGFjZSBNYXRjaGVycyB7CituYW1lc3BhY2UgR2VuZXJpYyB7CisKK25hbWVzcGFjZSBEZXRhaWwgeworICAgIHN0ZDo6c3RyaW5nIGZpbmFsaXplRGVzY3JpcHRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGRlc2MpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFByZWRpY2F0ZU1hdGNoZXIgOiBwdWJsaWMgTWF0Y2hlckJhc2U8VD4geworICAgIHN0ZDo6ZnVuY3Rpb248Ym9vbChUIGNvbnN0Jik+IG1fcHJlZGljYXRlOworICAgIHN0ZDo6c3RyaW5nIG1fZGVzY3JpcHRpb247CitwdWJsaWM6CisKKyAgICBQcmVkaWNhdGVNYXRjaGVyKHN0ZDo6ZnVuY3Rpb248Ym9vbChUIGNvbnN0Jik+IGNvbnN0JiBlbGVtLCBzdGQ6OnN0cmluZyBjb25zdCYgZGVzY3IpCisgICAgICAgIDptX3ByZWRpY2F0ZShzdGQ6Om1vdmUoZWxlbSkpLAorICAgICAgICBtX2Rlc2NyaXB0aW9uKERldGFpbDo6ZmluYWxpemVEZXNjcmlwdGlvbihkZXNjcikpCisgICAge30KKworICAgIGJvb2wgbWF0Y2goIFQgY29uc3QmIGl0ZW0gKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgIHJldHVybiBtX3ByZWRpY2F0ZShpdGVtKTsKKyAgICB9CisKKyAgICBzdGQ6OnN0cmluZyBkZXNjcmliZSgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1fZGVzY3JpcHRpb247CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgR2VuZXJpYworCisgICAgLy8gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgY3JlYXRlIHRoZSBhY3R1YWwgbWF0Y2hlciBvYmplY3RzLgorICAgIC8vIFRoZSB1c2VyIGhhcyB0byBleHBsaWNpdGx5IHNwZWNpZnkgdHlwZSB0byB0aGUgZnVuY3Rpb24sIGJlY2F1c2UKKyAgICAvLyBpbmZlcmluZyBzdGQ6OmZ1bmN0aW9uPGJvb2woVCBjb25zdCYpPiBpcyBoYXJkIChidXQgcG9zc2libGUpIGFuZAorICAgIC8vIHJlcXVpcmVzIGEgbG90IG9mIFRNUC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEdlbmVyaWM6OlByZWRpY2F0ZU1hdGNoZXI8VD4gUHJlZGljYXRlKHN0ZDo6ZnVuY3Rpb248Ym9vbChUIGNvbnN0Jik+IGNvbnN0JiBwcmVkaWNhdGUsIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXNjcmlwdGlvbiA9ICIiKSB7CisgICAgICAgIHJldHVybiBHZW5lcmljOjpQcmVkaWNhdGVNYXRjaGVyPFQ+KHByZWRpY2F0ZSwgZGVzY3JpcHRpb24pOworICAgIH0KKworfSAvLyBuYW1lc3BhY2UgTWF0Y2hlcnMKK30gLy8gbmFtZXNwYWNlIENhdGNoCisKKy8vIGVuZCBjYXRjaF9tYXRjaGVyc19nZW5lcmljLmhwcAogLy8gc3RhcnQgY2F0Y2hfbWF0Y2hlcnNfc3RyaW5nLmgKIAogI2luY2x1ZGUgPHN0cmluZz4KQEAgLTI0OTUsNyArMzMwOSw3IEBACiAgICAgICAgICAgICAgICAgYXV0byBsZmlyc3QgPSBtX3RhcmdldC5iZWdpbigpLCBsbGFzdCA9IG1fdGFyZ2V0LmVuZCgpOwogICAgICAgICAgICAgICAgIGF1dG8gcmZpcnN0ID0gdmVjLmJlZ2luKCksIHJsYXN0ID0gdmVjLmVuZCgpOwogICAgICAgICAgICAgICAgIC8vIEN1dCBjb21tb24gcHJlZml4IHRvIG9wdGltaXplIGNoZWNraW5nIG9mIHBlcm11dGVkIHBhcnRzCi0gICAgICAgICAgICAgICAgd2hpbGUgKGxmaXJzdCAhPSBsbGFzdCAmJiAqbGZpcnN0ICE9ICpyZmlyc3QpIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAobGZpcnN0ICE9IGxsYXN0ICYmICpsZmlyc3QgPT0gKnJmaXJzdCkgewogICAgICAgICAgICAgICAgICAgICArK2xmaXJzdDsgKytyZmlyc3Q7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChsZmlyc3QgPT0gbGxhc3QpIHsKQEAgLTI1NjAsNyArMzM3NCw3IEBACiAgICAgICAgIE1hdGNoZXJUIG1fbWF0Y2hlcjsKICAgICAgICAgU3RyaW5nUmVmIG1fbWF0Y2hlclN0cmluZzsKICAgICBwdWJsaWM6Ci0gICAgICAgIE1hdGNoRXhwciggQXJnVCBjb25zdCYgYXJnLCBNYXRjaGVyVCBjb25zdCYgbWF0Y2hlciwgU3RyaW5nUmVmIG1hdGNoZXJTdHJpbmcgKQorICAgICAgICBNYXRjaEV4cHIoIEFyZ1QgY29uc3QmIGFyZywgTWF0Y2hlclQgY29uc3QmIG1hdGNoZXIsIFN0cmluZ1JlZiBjb25zdCYgbWF0Y2hlclN0cmluZyApCiAgICAgICAgIDogICBJVHJhbnNpZW50RXhwcmVzc2lvbnsgdHJ1ZSwgbWF0Y2hlci5tYXRjaCggYXJnICkgfSwKICAgICAgICAgICAgIG1fYXJnKCBhcmcgKSwKICAgICAgICAgICAgIG1fbWF0Y2hlciggbWF0Y2hlciApLApAQCAtMjU3OSwxMCArMzM5MywxMCBAQAogCiAgICAgdXNpbmcgU3RyaW5nTWF0Y2hlciA9IE1hdGNoZXJzOjpJbXBsOjpNYXRjaGVyQmFzZTxzdGQ6OnN0cmluZz47CiAKLSAgICB2b2lkIGhhbmRsZUV4Y2VwdGlvbk1hdGNoRXhwciggQXNzZXJ0aW9uSGFuZGxlciYgaGFuZGxlciwgU3RyaW5nTWF0Y2hlciBjb25zdCYgbWF0Y2hlciwgU3RyaW5nUmVmIG1hdGNoZXJTdHJpbmcgICk7CisgICAgdm9pZCBoYW5kbGVFeGNlcHRpb25NYXRjaEV4cHIoIEFzc2VydGlvbkhhbmRsZXImIGhhbmRsZXIsIFN0cmluZ01hdGNoZXIgY29uc3QmIG1hdGNoZXIsIFN0cmluZ1JlZiBjb25zdCYgbWF0Y2hlclN0cmluZyAgKTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEFyZ1QsIHR5cGVuYW1lIE1hdGNoZXJUPgotICAgIGF1dG8gbWFrZU1hdGNoRXhwciggQXJnVCBjb25zdCYgYXJnLCBNYXRjaGVyVCBjb25zdCYgbWF0Y2hlciwgU3RyaW5nUmVmIG1hdGNoZXJTdHJpbmcgICkgLT4gTWF0Y2hFeHByPEFyZ1QsIE1hdGNoZXJUPiB7CisgICAgYXV0byBtYWtlTWF0Y2hFeHByKCBBcmdUIGNvbnN0JiBhcmcsIE1hdGNoZXJUIGNvbnN0JiBtYXRjaGVyLCBTdHJpbmdSZWYgY29uc3QmIG1hdGNoZXJTdHJpbmcgICkgLT4gTWF0Y2hFeHByPEFyZ1QsIE1hdGNoZXJUPiB7CiAgICAgICAgIHJldHVybiBNYXRjaEV4cHI8QXJnVCwgTWF0Y2hlclQ+KCBhcmcsIG1hdGNoZXIsIG1hdGNoZXJTdHJpbmcgKTsKICAgICB9CiAKQEAgLTI1OTEsOSArMzQwNSw5IEBACiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjZGVmaW5lIElOVEVSTkFMX0NIRUNLX1RIQVQoIG1hY3JvTmFtZSwgbWF0Y2hlciwgcmVzdWx0RGlzcG9zaXRpb24sIGFyZyApIFwKICAgICBkbyB7IFwKLSAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoYXJnKSAiLCAiIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShtYXRjaGVyKSwgcmVzdWx0RGlzcG9zaXRpb24gKTsgXAotICAgICAgICBDQVRDSF9JTlRFUk5BTF9UUlkgeyBcCi0gICAgICAgICAgICBjYXRjaEFzc2VydGlvbkhhbmRsZXIuaGFuZGxlRXhwciggQ2F0Y2g6Om1ha2VNYXRjaEV4cHIoIGFyZywgbWF0Y2hlciwgI21hdGNoZXIgKSApOyBcCisgICAgICAgIENhdGNoOjpBc3NlcnRpb25IYW5kbGVyIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciggbWFjcm9OYW1lIyNfY2F0Y2hfc3IsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoYXJnKSAiLCAiIENBVENIX0lOVEVSTkFMX1NUUklOR0lGWShtYXRjaGVyKSwgcmVzdWx0RGlzcG9zaXRpb24gKTsgXAorICAgICAgICBJTlRFUk5BTF9DQVRDSF9UUlkgeyBcCisgICAgICAgICAgICBjYXRjaEFzc2VydGlvbkhhbmRsZXIuaGFuZGxlRXhwciggQ2F0Y2g6Om1ha2VNYXRjaEV4cHIoIGFyZywgbWF0Y2hlciwgI21hdGNoZXIjI19jYXRjaF9zciApICk7IFwKICAgICAgICAgfSBJTlRFUk5BTF9DQVRDSF9DQVRDSCggY2F0Y2hBc3NlcnRpb25IYW5kbGVyICkgXAogICAgICAgICBJTlRFUk5BTF9DQVRDSF9SRUFDVCggY2F0Y2hBc3NlcnRpb25IYW5kbGVyICkgXAogICAgIH0gd2hpbGUoIGZhbHNlICkKQEAgLTI2MDEsMTQgKzM0MTUsMTQgQEAKIC8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICNkZWZpbmUgSU5URVJOQUxfQ0FUQ0hfVEhST1dTX01BVENIRVMoIG1hY3JvTmFtZSwgZXhjZXB0aW9uVHlwZSwgcmVzdWx0RGlzcG9zaXRpb24sIG1hdGNoZXIsIC4uLiApIFwKICAgICBkbyB7IFwKLSAgICAgICAgQ2F0Y2g6OkFzc2VydGlvbkhhbmRsZXIgY2F0Y2hBc3NlcnRpb25IYW5kbGVyKCBtYWNyb05hbWUsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoX19WQV9BUkdTX18pICIsICIgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKGV4Y2VwdGlvblR5cGUpICIsICIgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKG1hdGNoZXIpLCByZXN1bHREaXNwb3NpdGlvbiApOyBcCisgICAgICAgIENhdGNoOjpBc3NlcnRpb25IYW5kbGVyIGNhdGNoQXNzZXJ0aW9uSGFuZGxlciggbWFjcm9OYW1lIyNfY2F0Y2hfc3IsIENBVENIX0lOVEVSTkFMX0xJTkVJTkZPLCBDQVRDSF9JTlRFUk5BTF9TVFJJTkdJRlkoX19WQV9BUkdTX18pICIsICIgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKGV4Y2VwdGlvblR5cGUpICIsICIgQ0FUQ0hfSU5URVJOQUxfU1RSSU5HSUZZKG1hdGNoZXIpLCByZXN1bHREaXNwb3NpdGlvbiApOyBcCiAgICAgICAgIGlmKCBjYXRjaEFzc2VydGlvbkhhbmRsZXIuYWxsb3dUaHJvd3MoKSApIFwKICAgICAgICAgICAgIHRyeSB7IFwKICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPihfX1ZBX0FSR1NfXyApOyBcCiAgICAgICAgICAgICAgICAgY2F0Y2hBc3NlcnRpb25IYW5kbGVyLmhhbmRsZVVuZXhwZWN0ZWRFeGNlcHRpb25Ob3RUaHJvd24oKTsgXAogICAgICAgICAgICAgfSBcCiAgICAgICAgICAgICBjYXRjaCggZXhjZXB0aW9uVHlwZSBjb25zdCYgZXggKSB7IFwKLSAgICAgICAgICAgICAgICBjYXRjaEFzc2VydGlvbkhhbmRsZXIuaGFuZGxlRXhwciggQ2F0Y2g6Om1ha2VNYXRjaEV4cHIoIGV4LCBtYXRjaGVyLCAjbWF0Y2hlciApICk7IFwKKyAgICAgICAgICAgICAgICBjYXRjaEFzc2VydGlvbkhhbmRsZXIuaGFuZGxlRXhwciggQ2F0Y2g6Om1ha2VNYXRjaEV4cHIoIGV4LCBtYXRjaGVyLCAjbWF0Y2hlciMjX2NhdGNoX3NyICkgKTsgXAogICAgICAgICAgICAgfSBcCiAgICAgICAgICAgICBjYXRjaCggLi4uICkgeyBcCiAgICAgICAgICAgICAgICAgY2F0Y2hBc3NlcnRpb25IYW5kbGVyLmhhbmRsZVVuZXhwZWN0ZWRJbmZsaWdodEV4Y2VwdGlvbigpOyBcCkBAIC0yNjIwLDYgKzM0MzQsNzI1IEBACiAKIC8vIGVuZCBjYXRjaF9jYXB0dXJlX21hdGNoZXJzLmgKICNlbmRpZgorLy8gc3RhcnQgY2F0Y2hfZ2VuZXJhdG9ycy5ocHAKKworLy8gc3RhcnQgY2F0Y2hfaW50ZXJmYWNlc19nZW5lcmF0b3J0cmFja2VyLmgKKworCisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgQ2F0Y2ggeworCisgICAgbmFtZXNwYWNlIEdlbmVyYXRvcnMgeworICAgICAgICBjbGFzcyBHZW5lcmF0b3JVbnR5cGVkQmFzZSB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEdlbmVyYXRvclVudHlwZWRCYXNlKCkgPSBkZWZhdWx0OworICAgICAgICAgICAgdmlydHVhbCB+R2VuZXJhdG9yVW50eXBlZEJhc2UoKTsKKyAgICAgICAgICAgIC8vIEF0dGVtcHRzIHRvIG1vdmUgdGhlIGdlbmVyYXRvciB0byB0aGUgbmV4dCBlbGVtZW50CisgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAvLyBSZXR1cm5zIHRydWUgaWZmIHRoZSBtb3ZlIHN1Y2NlZWRlZCAoYW5kIGEgdmFsaWQgZWxlbWVudAorICAgICAgICAgICAgIC8vIGNhbiBiZSByZXRyaWV2ZWQpLgorICAgICAgICAgICAgdmlydHVhbCBib29sIG5leHQoKSA9IDA7CisgICAgICAgIH07CisgICAgICAgIHVzaW5nIEdlbmVyYXRvckJhc2VQdHIgPSBzdGQ6OnVuaXF1ZV9wdHI8R2VuZXJhdG9yVW50eXBlZEJhc2U+OworCisgICAgfSAvLyBuYW1lc3BhY2UgR2VuZXJhdG9ycworCisgICAgc3RydWN0IElHZW5lcmF0b3JUcmFja2VyIHsKKyAgICAgICAgdmlydHVhbCB+SUdlbmVyYXRvclRyYWNrZXIoKTsKKyAgICAgICAgdmlydHVhbCBhdXRvIGhhc0dlbmVyYXRvcigpIGNvbnN0IC0+IGJvb2wgPSAwOworICAgICAgICB2aXJ0dWFsIGF1dG8gZ2V0R2VuZXJhdG9yKCkgY29uc3QgLT4gR2VuZXJhdG9yczo6R2VuZXJhdG9yQmFzZVB0ciBjb25zdCYgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0R2VuZXJhdG9yKCBHZW5lcmF0b3JzOjpHZW5lcmF0b3JCYXNlUHRyJiYgZ2VuZXJhdG9yICkgPSAwOworICAgIH07CisKK30gLy8gbmFtZXNwYWNlIENhdGNoCisKKy8vIGVuZCBjYXRjaF9pbnRlcmZhY2VzX2dlbmVyYXRvcnRyYWNrZXIuaAorLy8gc3RhcnQgY2F0Y2hfZW5mb3JjZS5oCisKKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisKK25hbWVzcGFjZSBDYXRjaCB7CisjaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUykKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRXg+CisgICAgW1tub3JldHVybl1dCisgICAgdm9pZCB0aHJvd19leGNlcHRpb24oRXggY29uc3QmIGUpIHsKKyAgICAgICAgdGhyb3cgZTsKKyAgICB9CisjZWxzZSAvLyBeXiBFeGNlcHRpb25zIGFyZSBlbmFibGVkIC8vICBFeGNlcHRpb25zIGFyZSBkaXNhYmxlZCB2dgorICAgIFtbbm9yZXR1cm5dXQorICAgIHZvaWQgdGhyb3dfZXhjZXB0aW9uKHN0ZDo6ZXhjZXB0aW9uIGNvbnN0JiBlKTsKKyNlbmRpZgorfSAvLyBuYW1lc3BhY2UgQ2F0Y2g7CisKKyNkZWZpbmUgQ0FUQ0hfUFJFUEFSRV9FWENFUFRJT04oIHR5cGUsIG1zZyApIFwKKyAgICB0eXBlKCAoIENhdGNoOjpSZXVzYWJsZVN0cmluZ1N0cmVhbSgpIDw8IG1zZyApLnN0cigpICkKKyNkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfRVJST1IoIG1zZyApIFwKKyAgICBDYXRjaDo6dGhyb3dfZXhjZXB0aW9uKENBVENIX1BSRVBBUkVfRVhDRVBUSU9OKCBzdGQ6OmxvZ2ljX2Vycm9yLCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTyA8PCAiOiBJbnRlcm5hbCBDYXRjaCBlcnJvcjogIiA8PCBtc2cpKQorI2RlZmluZSBDQVRDSF9FUlJPUiggbXNnICkgXAorICAgIENhdGNoOjp0aHJvd19leGNlcHRpb24oQ0FUQ0hfUFJFUEFSRV9FWENFUFRJT04oIHN0ZDo6ZG9tYWluX2Vycm9yLCBtc2cgKSkKKyNkZWZpbmUgQ0FUQ0hfUlVOVElNRV9FUlJPUiggbXNnICkgXAorICAgIENhdGNoOjp0aHJvd19leGNlcHRpb24oQ0FUQ0hfUFJFUEFSRV9FWENFUFRJT04oIHN0ZDo6cnVudGltZV9lcnJvciwgbXNnICkpCisjZGVmaW5lIENBVENIX0VORk9SQ0UoIGNvbmRpdGlvbiwgbXNnICkgXAorICAgIGRveyBpZiggIShjb25kaXRpb24pICkgQ0FUQ0hfRVJST1IoIG1zZyApOyB9IHdoaWxlKGZhbHNlKQorCisvLyBlbmQgY2F0Y2hfZW5mb3JjZS5oCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHZlY3Rvcj4KKyNpbmNsdWRlIDxjYXNzZXJ0PgorCisjaW5jbHVkZSA8dXRpbGl0eT4KKyNpbmNsdWRlIDxleGNlcHRpb24+CisKK25hbWVzcGFjZSBDYXRjaCB7CisKK2NsYXNzIEdlbmVyYXRvckV4Y2VwdGlvbiA6IHB1YmxpYyBzdGQ6OmV4Y2VwdGlvbiB7CisgICAgY29uc3QgY2hhciogY29uc3QgbV9tc2cgPSAiIjsKKworcHVibGljOgorICAgIEdlbmVyYXRvckV4Y2VwdGlvbihjb25zdCBjaGFyKiBtc2cpOgorICAgICAgICBtX21zZyhtc2cpCisgICAge30KKworICAgIGNvbnN0IGNoYXIqIHdoYXQoKSBjb25zdCBub2V4Y2VwdCBvdmVycmlkZSBmaW5hbDsKK307CisKK25hbWVzcGFjZSBHZW5lcmF0b3JzIHsKKworICAgIC8vICFUQkQgbW92ZSB0aGlzIGludG8gaXRzIG93biBsb2NhdGlvbj8KKyAgICBuYW1lc3BhY2UgcGZ7CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3M+CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxUPiBtYWtlX3VuaXF1ZSggQXJncyYmLi4uIGFyZ3MgKSB7CisgICAgICAgICAgICByZXR1cm4gc3RkOjp1bmlxdWVfcHRyPFQ+KG5ldyBUKHN0ZDo6Zm9yd2FyZDxBcmdzPihhcmdzKS4uLikpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgSUdlbmVyYXRvciA6IEdlbmVyYXRvclVudHlwZWRCYXNlIHsKKyAgICAgICAgdmlydHVhbCB+SUdlbmVyYXRvcigpID0gZGVmYXVsdDsKKworICAgICAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IGVsZW1lbnQgb2YgdGhlIGdlbmVyYXRvcgorICAgICAgICAvLworICAgICAgICAvLyBcUHJlY29uZGl0aW9uIFRoZSBnZW5lcmF0b3IgaXMgZWl0aGVyIGZyZXNobHkgY29uc3RydWN0ZWQsCisgICAgICAgIC8vIG9yIHRoZSBsYXN0IGNhbGwgdG8gYG5leHQoKWAgcmV0dXJuZWQgdHJ1ZQorICAgICAgICB2aXJ0dWFsIFQgY29uc3QmIGdldCgpIGNvbnN0ID0gMDsKKyAgICAgICAgdXNpbmcgdHlwZSA9IFQ7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgU2luZ2xlVmFsdWVHZW5lcmF0b3IgZmluYWwgOiBwdWJsaWMgSUdlbmVyYXRvcjxUPiB7CisgICAgICAgIFQgbV92YWx1ZTsKKyAgICBwdWJsaWM6CisgICAgICAgIFNpbmdsZVZhbHVlR2VuZXJhdG9yKFQgY29uc3QmIHZhbHVlKSA6IG1fdmFsdWUoIHZhbHVlICkge30KKyAgICAgICAgU2luZ2xlVmFsdWVHZW5lcmF0b3IoVCYmIHZhbHVlKSA6IG1fdmFsdWUoc3RkOjptb3ZlKHZhbHVlKSkge30KKworICAgICAgICBUIGNvbnN0JiBnZXQoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICAgICAgfQorICAgICAgICBib29sIG5leHQoKSBvdmVycmlkZSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBGaXhlZFZhbHVlc0dlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBJR2VuZXJhdG9yPFQ+IHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VD4gbV92YWx1ZXM7CisgICAgICAgIHNpemVfdCBtX2lkeCA9IDA7CisgICAgcHVibGljOgorICAgICAgICBGaXhlZFZhbHVlc0dlbmVyYXRvciggc3RkOjppbml0aWFsaXplcl9saXN0PFQ+IHZhbHVlcyApIDogbV92YWx1ZXMoIHZhbHVlcyApIHt9CisKKyAgICAgICAgVCBjb25zdCYgZ2V0KCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWVzW21faWR4XTsKKyAgICAgICAgfQorICAgICAgICBib29sIG5leHQoKSBvdmVycmlkZSB7CisgICAgICAgICAgICArK21faWR4OworICAgICAgICAgICAgcmV0dXJuIG1faWR4IDwgbV92YWx1ZXMuc2l6ZSgpOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNsYXNzIEdlbmVyYXRvcldyYXBwZXIgZmluYWwgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SUdlbmVyYXRvcjxUPj4gbV9nZW5lcmF0b3I7CisgICAgcHVibGljOgorICAgICAgICBHZW5lcmF0b3JXcmFwcGVyKHN0ZDo6dW5pcXVlX3B0cjxJR2VuZXJhdG9yPFQ+PiBnZW5lcmF0b3IpOgorICAgICAgICAgICAgbV9nZW5lcmF0b3Ioc3RkOjptb3ZlKGdlbmVyYXRvcikpCisgICAgICAgIHt9CisgICAgICAgIFQgY29uc3QmIGdldCgpIGNvbnN0IHsKKyAgICAgICAgICAgIHJldHVybiBtX2dlbmVyYXRvci0+Z2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBuZXh0KCkgeworICAgICAgICAgICAgcmV0dXJuIG1fZ2VuZXJhdG9yLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgR2VuZXJhdG9yV3JhcHBlcjxUPiB2YWx1ZShUJiYgdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvcldyYXBwZXI8VD4ocGY6Om1ha2VfdW5pcXVlPFNpbmdsZVZhbHVlR2VuZXJhdG9yPFQ+PihzdGQ6OmZvcndhcmQ8VD4odmFsdWUpKSk7CisgICAgfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIEdlbmVyYXRvcldyYXBwZXI8VD4gdmFsdWVzKHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxUPiB2YWx1ZXMpIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvcldyYXBwZXI8VD4ocGY6Om1ha2VfdW5pcXVlPEZpeGVkVmFsdWVzR2VuZXJhdG9yPFQ+Pih2YWx1ZXMpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNsYXNzIEdlbmVyYXRvcnMgOiBwdWJsaWMgSUdlbmVyYXRvcjxUPiB7CisgICAgICAgIHN0ZDo6dmVjdG9yPEdlbmVyYXRvcldyYXBwZXI8VD4+IG1fZ2VuZXJhdG9yczsKKyAgICAgICAgc2l6ZV90IG1fY3VycmVudCA9IDA7CisKKyAgICAgICAgdm9pZCBwb3B1bGF0ZShHZW5lcmF0b3JXcmFwcGVyPFQ+JiYgZ2VuZXJhdG9yKSB7CisgICAgICAgICAgICBtX2dlbmVyYXRvcnMuZW1wbGFjZV9iYWNrKHN0ZDo6bW92ZShnZW5lcmF0b3IpKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHBvcHVsYXRlKFQmJiB2YWwpIHsKKyAgICAgICAgICAgIG1fZ2VuZXJhdG9ycy5lbXBsYWNlX2JhY2sodmFsdWUoc3RkOjptb3ZlKHZhbCkpKTsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgICAgICB2b2lkIHBvcHVsYXRlKFUmJiB2YWwpIHsKKyAgICAgICAgICAgIHBvcHVsYXRlKFQoc3RkOjptb3ZlKHZhbCkpKTsKKyAgICAgICAgfQorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVLCB0eXBlbmFtZS4uLiBHcz4KKyAgICAgICAgdm9pZCBwb3B1bGF0ZShVJiYgdmFsdWVPckdlbmVyYXRvciwgR3MuLi4gbW9yZUdlbmVyYXRvcnMpIHsKKyAgICAgICAgICAgIHBvcHVsYXRlKHN0ZDo6Zm9yd2FyZDxVPih2YWx1ZU9yR2VuZXJhdG9yKSk7CisgICAgICAgICAgICBwb3B1bGF0ZShzdGQ6OmZvcndhcmQ8R3M+KG1vcmVHZW5lcmF0b3JzKS4uLik7CisgICAgICAgIH0KKworICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lLi4uIEdzPgorICAgICAgICBHZW5lcmF0b3JzKEdzLi4uIG1vcmVHZW5lcmF0b3JzKSB7CisgICAgICAgICAgICBtX2dlbmVyYXRvcnMucmVzZXJ2ZShzaXplb2YuLi4oR3MpKTsKKyAgICAgICAgICAgIHBvcHVsYXRlKHN0ZDo6Zm9yd2FyZDxHcz4obW9yZUdlbmVyYXRvcnMpLi4uKTsKKyAgICAgICAgfQorCisgICAgICAgIFQgY29uc3QmIGdldCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgICAgIHJldHVybiBtX2dlbmVyYXRvcnNbbV9jdXJyZW50XS5nZXQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgbmV4dCgpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnQgPj0gbV9nZW5lcmF0b3JzLnNpemUoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNvbnN0IGJvb2wgY3VycmVudF9zdGF0dXMgPSBtX2dlbmVyYXRvcnNbbV9jdXJyZW50XS5uZXh0KCk7CisgICAgICAgICAgICBpZiAoIWN1cnJlbnRfc3RhdHVzKSB7CisgICAgICAgICAgICAgICAgKyttX2N1cnJlbnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50IDwgbV9nZW5lcmF0b3JzLnNpemUoKTsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBUcz4KKyAgICBHZW5lcmF0b3JXcmFwcGVyPHN0ZDo6dHVwbGU8VHMuLi4+PiB0YWJsZSggc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6dHVwbGU8dHlwZW5hbWUgc3RkOjpkZWNheTxUcz46OnR5cGUuLi4+PiB0dXBsZXMgKSB7CisgICAgICAgIHJldHVybiB2YWx1ZXM8c3RkOjp0dXBsZTxUcy4uLj4+KCB0dXBsZXMgKTsKKyAgICB9CisKKyAgICAvLyBUYWcgdHlwZSB0byBzaWduYWwgdGhhdCBhIGdlbmVyYXRvciBzZXF1ZW5jZSBzaG91bGQgY29udmVydCBhcmd1bWVudHMgdG8gYSBzcGVjaWZpYyB0eXBlCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IGFzIHt9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gR3M+CisgICAgYXV0byBtYWtlR2VuZXJhdG9ycyggR2VuZXJhdG9yV3JhcHBlcjxUPiYmIGdlbmVyYXRvciwgR3MuLi4gbW9yZUdlbmVyYXRvcnMgKSAtPiBHZW5lcmF0b3JzPFQ+IHsKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvcnM8VD4oc3RkOjptb3ZlKGdlbmVyYXRvciksIHN0ZDo6Zm9yd2FyZDxHcz4obW9yZUdlbmVyYXRvcnMpLi4uKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBhdXRvIG1ha2VHZW5lcmF0b3JzKCBHZW5lcmF0b3JXcmFwcGVyPFQ+JiYgZ2VuZXJhdG9yICkgLT4gR2VuZXJhdG9yczxUPiB7CisgICAgICAgIHJldHVybiBHZW5lcmF0b3JzPFQ+KHN0ZDo6bW92ZShnZW5lcmF0b3IpKTsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gR3M+CisgICAgYXV0byBtYWtlR2VuZXJhdG9ycyggVCYmIHZhbCwgR3MuLi4gbW9yZUdlbmVyYXRvcnMgKSAtPiBHZW5lcmF0b3JzPFQ+IHsKKyAgICAgICAgcmV0dXJuIG1ha2VHZW5lcmF0b3JzKCB2YWx1ZSggc3RkOjpmb3J3YXJkPFQ+KCB2YWwgKSApLCBzdGQ6OmZvcndhcmQ8R3M+KCBtb3JlR2VuZXJhdG9ycyApLi4uICk7CisgICAgfQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lLi4uIEdzPgorICAgIGF1dG8gbWFrZUdlbmVyYXRvcnMoIGFzPFQ+LCBVJiYgdmFsLCBHcy4uLiBtb3JlR2VuZXJhdG9ycyApIC0+IEdlbmVyYXRvcnM8VD4geworICAgICAgICByZXR1cm4gbWFrZUdlbmVyYXRvcnMoIHZhbHVlKCBUKCBzdGQ6OmZvcndhcmQ8VT4oIHZhbCApICkgKSwgc3RkOjpmb3J3YXJkPEdzPiggbW9yZUdlbmVyYXRvcnMgKS4uLiApOworICAgIH0KKworICAgIGF1dG8gYWNxdWlyZUdlbmVyYXRvclRyYWNrZXIoIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbyApIC0+IElHZW5lcmF0b3JUcmFja2VyJjsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEw+CisgICAgLy8gTm90ZTogVGhlIHR5cGUgYWZ0ZXIgLT4gaXMgd2VpcmQsIGJlY2F1c2UgVlMyMDE1IGNhbm5vdCBwYXJzZQorICAgIC8vICAgICAgIHRoZSBleHByZXNzaW9uIHVzZWQgaW4gdGhlIHR5cGVkZWYgaW5zaWRlLCB3aGVuIGl0IGlzIGluCisgICAgLy8gICAgICAgcmV0dXJuIHR5cGUuIFllYWguCisgICAgYXV0byBnZW5lcmF0ZSggU291cmNlTGluZUluZm8gY29uc3QmIGxpbmVJbmZvLCBMIGNvbnN0JiBnZW5lcmF0b3JFeHByZXNzaW9uICkgLT4gZGVjbHR5cGUoc3RkOjpkZWNsdmFsPGRlY2x0eXBlKGdlbmVyYXRvckV4cHJlc3Npb24oKSk+KCkuZ2V0KCkpIHsKKyAgICAgICAgdXNpbmcgVW5kZXJseWluZ1R5cGUgPSB0eXBlbmFtZSBkZWNsdHlwZShnZW5lcmF0b3JFeHByZXNzaW9uKCkpOjp0eXBlOworCisgICAgICAgIElHZW5lcmF0b3JUcmFja2VyJiB0cmFja2VyID0gYWNxdWlyZUdlbmVyYXRvclRyYWNrZXIoIGxpbmVJbmZvICk7CisgICAgICAgIGlmICghdHJhY2tlci5oYXNHZW5lcmF0b3IoKSkgeworICAgICAgICAgICAgdHJhY2tlci5zZXRHZW5lcmF0b3IocGY6Om1ha2VfdW5pcXVlPEdlbmVyYXRvcnM8VW5kZXJseWluZ1R5cGU+PihnZW5lcmF0b3JFeHByZXNzaW9uKCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gY29uc3QmIGdlbmVyYXRvciA9IHN0YXRpY19jYXN0PElHZW5lcmF0b3I8VW5kZXJseWluZ1R5cGU+IGNvbnN0Jj4oICp0cmFja2VyLmdldEdlbmVyYXRvcigpICk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZ2V0KCk7CisgICAgfQorCit9IC8vIG5hbWVzcGFjZSBHZW5lcmF0b3JzCit9IC8vIG5hbWVzcGFjZSBDYXRjaAorCisjZGVmaW5lIEdFTkVSQVRFKCAuLi4gKSBcCisgICAgQ2F0Y2g6OkdlbmVyYXRvcnM6OmdlbmVyYXRlKCBDQVRDSF9JTlRFUk5BTF9MSU5FSU5GTywgW117IHVzaW5nIG5hbWVzcGFjZSBDYXRjaDo6R2VuZXJhdG9yczsgcmV0dXJuIG1ha2VHZW5lcmF0b3JzKCBfX1ZBX0FSR1NfXyApOyB9ICkKKworLy8gZW5kIGNhdGNoX2dlbmVyYXRvcnMuaHBwCisvLyBzdGFydCBjYXRjaF9nZW5lcmF0b3JzX2dlbmVyaWMuaHBwCisKK25hbWVzcGFjZSBDYXRjaCB7CituYW1lc3BhY2UgR2VuZXJhdG9ycyB7CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBjbGFzcyBUYWtlR2VuZXJhdG9yIDogcHVibGljIElHZW5lcmF0b3I8VD4geworICAgICAgICBHZW5lcmF0b3JXcmFwcGVyPFQ+IG1fZ2VuZXJhdG9yOworICAgICAgICBzaXplX3QgbV9yZXR1cm5lZCA9IDA7CisgICAgICAgIHNpemVfdCBtX3RhcmdldDsKKyAgICBwdWJsaWM6CisgICAgICAgIFRha2VHZW5lcmF0b3Ioc2l6ZV90IHRhcmdldCwgR2VuZXJhdG9yV3JhcHBlcjxUPiYmIGdlbmVyYXRvcik6CisgICAgICAgICAgICBtX2dlbmVyYXRvcihzdGQ6Om1vdmUoZ2VuZXJhdG9yKSksCisgICAgICAgICAgICBtX3RhcmdldCh0YXJnZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydCh0YXJnZXQgIT0gMCAmJiAiRW1wdHkgZ2VuZXJhdG9ycyBhcmUgbm90IGFsbG93ZWQiKTsKKyAgICAgICAgfQorICAgICAgICBUIGNvbnN0JiBnZXQoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgICAgICByZXR1cm4gbV9nZW5lcmF0b3IuZ2V0KCk7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBuZXh0KCkgb3ZlcnJpZGUgeworICAgICAgICAgICAgKyttX3JldHVybmVkOworICAgICAgICAgICAgaWYgKG1fcmV0dXJuZWQgPj0gbV90YXJnZXQpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNvbnN0IGF1dG8gc3VjY2VzcyA9IG1fZ2VuZXJhdG9yLm5leHQoKTsKKyAgICAgICAgICAgIC8vIElmIHRoZSB1bmRlcmx5aW5nIGdlbmVyYXRvciBkb2VzIG5vdCBjb250YWluIGVub3VnaCB2YWx1ZXMKKyAgICAgICAgICAgIC8vIHRoZW4gd2UgY3V0IHNob3J0IGFzIHdlbGwKKyAgICAgICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgIG1fcmV0dXJuZWQgPSBtX3RhcmdldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBzdWNjZXNzOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIEdlbmVyYXRvcldyYXBwZXI8VD4gdGFrZShzaXplX3QgdGFyZ2V0LCBHZW5lcmF0b3JXcmFwcGVyPFQ+JiYgZ2VuZXJhdG9yKSB7CisgICAgICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFQ+KHBmOjptYWtlX3VuaXF1ZTxUYWtlR2VuZXJhdG9yPFQ+Pih0YXJnZXQsIHN0ZDo6bW92ZShnZW5lcmF0b3IpKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFByZWRpY2F0ZT4KKyAgICBjbGFzcyBGaWx0ZXJHZW5lcmF0b3IgOiBwdWJsaWMgSUdlbmVyYXRvcjxUPiB7CisgICAgICAgIEdlbmVyYXRvcldyYXBwZXI8VD4gbV9nZW5lcmF0b3I7CisgICAgICAgIFByZWRpY2F0ZSBtX3ByZWRpY2F0ZTsKKyAgICBwdWJsaWM6CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBQID0gUHJlZGljYXRlPgorICAgICAgICBGaWx0ZXJHZW5lcmF0b3IoUCYmIHByZWQsIEdlbmVyYXRvcldyYXBwZXI8VD4mJiBnZW5lcmF0b3IpOgorICAgICAgICAgICAgbV9nZW5lcmF0b3Ioc3RkOjptb3ZlKGdlbmVyYXRvcikpLAorICAgICAgICAgICAgbV9wcmVkaWNhdGUoc3RkOjpmb3J3YXJkPFA+KHByZWQpKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1fcHJlZGljYXRlKG1fZ2VuZXJhdG9yLmdldCgpKSkgeworICAgICAgICAgICAgICAgIC8vIEl0IG1pZ2h0IGhhcHBlbiB0aGF0IHRoZXJlIGFyZSBubyB2YWx1ZXMgdGhhdCBwYXNzIHRoZQorICAgICAgICAgICAgICAgIC8vIGZpbHRlci4gSW4gdGhhdCBjYXNlIHdlIHRocm93IGFuIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgICAgICBhdXRvIGhhc19pbml0aWFsX3ZhbHVlID0gbmV4dCgpOworICAgICAgICAgICAgICAgIGlmICghaGFzX2luaXRpYWxfdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgQ2F0Y2g6OnRocm93X2V4Y2VwdGlvbihHZW5lcmF0b3JFeGNlcHRpb24oIk5vIHZhbGlkIHZhbHVlIGZvdW5kIGluIGZpbHRlcmVkIGdlbmVyYXRvciIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBUIGNvbnN0JiBnZXQoKSBjb25zdCBvdmVycmlkZSB7CisgICAgICAgICAgICByZXR1cm4gbV9nZW5lcmF0b3IuZ2V0KCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIG5leHQoKSBvdmVycmlkZSB7CisgICAgICAgICAgICBib29sIHN1Y2Nlc3MgPSBtX2dlbmVyYXRvci5uZXh0KCk7CisgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAoIW1fcHJlZGljYXRlKG1fZ2VuZXJhdG9yLmdldCgpKSAmJiAoc3VjY2VzcyA9IG1fZ2VuZXJhdG9yLm5leHQoKSkgPT0gdHJ1ZSk7CisgICAgICAgICAgICByZXR1cm4gc3VjY2VzczsKKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgdHlwZW5hbWUgUHJlZGljYXRlPgorICAgIEdlbmVyYXRvcldyYXBwZXI8VD4gZmlsdGVyKFByZWRpY2F0ZSYmIHByZWQsIEdlbmVyYXRvcldyYXBwZXI8VD4mJiBnZW5lcmF0b3IpIHsKKyAgICAgICAgcmV0dXJuIEdlbmVyYXRvcldyYXBwZXI8VD4oc3RkOjp1bmlxdWVfcHRyPElHZW5lcmF0b3I8VD4+KHBmOjptYWtlX3VuaXF1ZTxGaWx0ZXJHZW5lcmF0b3I8VCwgUHJlZGljYXRlPj4oc3RkOjpmb3J3YXJkPFByZWRpY2F0ZT4ocHJlZCksIHN0ZDo6bW92ZShnZW5lcmF0b3IpKSkpOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNsYXNzIFJlcGVhdEdlbmVyYXRvciA6IHB1YmxpYyBJR2VuZXJhdG9yPFQ+IHsKKyAgICAgICAgR2VuZXJhdG9yV3JhcHBlcjxUPiBtX2dlbmVyYXRvcjsKKyAgICAgICAgbXV0YWJsZSBzdGQ6OnZlY3RvcjxUPiBtX3JldHVybmVkOworICAgICAgICBzaXplX3QgbV90YXJnZXRfcmVwZWF0czsKKyAgICAgICAgc2l6ZV90IG1fY3VycmVudF9yZXBlYXQgPSAwOworICAgICAgICBzaXplX3QgbV9yZXBlYXRfaW5kZXggPSAwOworICAgIHB1YmxpYzoKKyAgICAgICAgUmVwZWF0R2VuZXJhdG9yKHNpemVfdCByZXBlYXRzLCBHZW5lcmF0b3JXcmFwcGVyPFQ+JiYgZ2VuZXJhdG9yKToKKyAgICAgICAgICAgIG1fZ2VuZXJhdG9yKHN0ZDo6bW92ZShnZW5lcmF0b3IpKSwKKyAgICAgICAgICAgIG1fdGFyZ2V0X3JlcGVhdHMocmVwZWF0cykKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KG1fdGFyZ2V0X3JlcGVhdHMgPiAwICYmICJSZXBlYXQgZ2VuZXJhdG9yIG11c3QgcmVwZWF0IGF0IGxlYXN0IG9uY2UiKTsKKyAgICAgICAgfQorCisgICAgICAgIFQgY29uc3QmIGdldCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRfcmVwZWF0ID09IDApIHsKKyAgICAgICAgICAgICAgICBtX3JldHVybmVkLnB1c2hfYmFjayhtX2dlbmVyYXRvci5nZXQoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcmV0dXJuZWQuYmFjaygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1fcmV0dXJuZWRbbV9yZXBlYXRfaW5kZXhdOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBuZXh0KCkgb3ZlcnJpZGUgeworICAgICAgICAgICAgLy8gVGhlcmUgYXJlIDIgYmFzaWMgY2FzZXM6CisgICAgICAgICAgICAvLyAxKSBXZSBhcmUgc3RpbGwgcmVhZGluZyB0aGUgZ2VuZXJhdG9yCisgICAgICAgICAgICAvLyAyKSBXZSBhcmUgcmVhZGluZyBvdXIgb3duIGNhY2hlCisKKyAgICAgICAgICAgIC8vIEluIHRoZSBmaXJzdCBjYXNlLCB3ZSBuZWVkIHRvIHBva2UgdGhlIHVuZGVybHlpbmcgZ2VuZXJhdG9yLgorICAgICAgICAgICAgLy8gSWYgaXQgaGFwcGlseSBtb3Zlcywgd2UgYXJlIGxlZnQgaW4gdGhhdCBzdGF0ZSwgb3RoZXJ3aXNlIGl0IGlzIHRpbWUgdG8gc3RhcnQgcmVhZGluZyBmcm9tIG91ciBjYWNoZQorICAgICAgICAgICAgaWYgKG1fY3VycmVudF9yZXBlYXQgPT0gMCkgeworICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8gc3VjY2VzcyA9IG1fZ2VuZXJhdG9yLm5leHQoKTsKKyAgICAgICAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgKyttX2N1cnJlbnRfcmVwZWF0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jdXJyZW50X3JlcGVhdCA8IG1fdGFyZ2V0X3JlcGVhdHM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEluIHRoZSBzZWNvbmQgY2FzZSwgd2UgbmVlZCB0byBtb3ZlIGluZGljZXMgZm9yd2FyZCBhbmQgY2hlY2sgdGhhdCB3ZSBoYXZlbid0IHJ1biB1cCBhZ2FpbnN0IHRoZSBlbmQKKyAgICAgICAgICAgICsrbV9yZXBlYXRfaW5kZXg7CisgICAgICAgICAgICBpZiAobV9yZXBlYXRfaW5kZXggPT0gbV9yZXR1cm5lZC5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICBtX3JlcGVhdF9pbmRleCA9IDA7CisgICAgICAgICAgICAgICAgKyttX2N1cnJlbnRfcmVwZWF0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG1fY3VycmVudF9yZXBlYXQgPCBtX3RhcmdldF9yZXBlYXRzOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIEdlbmVyYXRvcldyYXBwZXI8VD4gcmVwZWF0KHNpemVfdCByZXBlYXRzLCBHZW5lcmF0b3JXcmFwcGVyPFQ+JiYgZ2VuZXJhdG9yKSB7CisgICAgICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFQ+KHBmOjptYWtlX3VuaXF1ZTxSZXBlYXRHZW5lcmF0b3I8VD4+KHJlcGVhdHMsIHN0ZDo6bW92ZShnZW5lcmF0b3IpKSk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+CisgICAgY2xhc3MgTWFwR2VuZXJhdG9yIDogcHVibGljIElHZW5lcmF0b3I8VD4geworICAgICAgICAvLyBUQkQ6IHByb3ZpZGUgc3RhdGljIGFzc2VydCBmb3IgbWFwcGluZyBmdW5jdGlvbiwgZm9yIGZyaWVuZGx5IGVycm9yIG1lc3NhZ2UKKyAgICAgICAgR2VuZXJhdG9yV3JhcHBlcjxVPiBtX2dlbmVyYXRvcjsKKyAgICAgICAgRnVuYyBtX2Z1bmN0aW9uOworICAgICAgICAvLyBUbyBhdm9pZCByZXR1cm5pbmcgZGFuZ2xpbmcgcmVmZXJlbmNlLCB3ZSBoYXZlIHRvIHNhdmUgdGhlIHZhbHVlcworICAgICAgICBUIG1fY2FjaGU7CisgICAgcHVibGljOgorICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRjIgPSBGdW5jPgorICAgICAgICBNYXBHZW5lcmF0b3IoRjImJiBmdW5jdGlvbiwgR2VuZXJhdG9yV3JhcHBlcjxVPiYmIGdlbmVyYXRvcikgOgorICAgICAgICAgICAgbV9nZW5lcmF0b3Ioc3RkOjptb3ZlKGdlbmVyYXRvcikpLAorICAgICAgICAgICAgbV9mdW5jdGlvbihzdGQ6OmZvcndhcmQ8RjI+KGZ1bmN0aW9uKSksCisgICAgICAgICAgICBtX2NhY2hlKG1fZnVuY3Rpb24obV9nZW5lcmF0b3IuZ2V0KCkpKQorICAgICAgICB7fQorCisgICAgICAgIFQgY29uc3QmIGdldCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NhY2hlOworICAgICAgICB9CisgICAgICAgIGJvb2wgbmV4dCgpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8gc3VjY2VzcyA9IG1fZ2VuZXJhdG9yLm5leHQoKTsKKyAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgbV9jYWNoZSA9IG1fZnVuY3Rpb24obV9nZW5lcmF0b3IuZ2V0KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHN1Y2Nlc3M7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIEZ1bmM+CisgICAgR2VuZXJhdG9yV3JhcHBlcjxUPiBtYXAoRnVuYyYmIGZ1bmN0aW9uLCBHZW5lcmF0b3JXcmFwcGVyPFU+JiYgZ2VuZXJhdG9yKSB7CisgICAgICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFQ+KAorICAgICAgICAgICAgcGY6Om1ha2VfdW5pcXVlPE1hcEdlbmVyYXRvcjxULCBVLCBGdW5jPj4oc3RkOjpmb3J3YXJkPEZ1bmM+KGZ1bmN0aW9uKSwgc3RkOjptb3ZlKGdlbmVyYXRvcikpCisgICAgICAgICk7CisgICAgfQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBGdW5jPgorICAgIEdlbmVyYXRvcldyYXBwZXI8VD4gbWFwKEZ1bmMmJiBmdW5jdGlvbiwgR2VuZXJhdG9yV3JhcHBlcjxUPiYmIGdlbmVyYXRvcikgeworICAgICAgICByZXR1cm4gR2VuZXJhdG9yV3JhcHBlcjxUPigKKyAgICAgICAgICAgIHBmOjptYWtlX3VuaXF1ZTxNYXBHZW5lcmF0b3I8VCwgVCwgRnVuYz4+KHN0ZDo6Zm9yd2FyZDxGdW5jPihmdW5jdGlvbiksIHN0ZDo6bW92ZShnZW5lcmF0b3IpKQorICAgICAgICApOworICAgIH0KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGNsYXNzIENodW5rR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIElHZW5lcmF0b3I8c3RkOjp2ZWN0b3I8VD4+IHsKKyAgICAgICAgc3RkOjp2ZWN0b3I8VD4gbV9jaHVuazsKKyAgICAgICAgc2l6ZV90IG1fY2h1bmtfc2l6ZTsKKyAgICAgICAgR2VuZXJhdG9yV3JhcHBlcjxUPiBtX2dlbmVyYXRvcjsKKyAgICAgICAgYm9vbCBtX3VzZWRfdXAgPSBmYWxzZTsKKyAgICBwdWJsaWM6CisgICAgICAgIENodW5rR2VuZXJhdG9yKHNpemVfdCBzaXplLCBHZW5lcmF0b3JXcmFwcGVyPFQ+IGdlbmVyYXRvcikgOgorICAgICAgICAgICAgbV9jaHVua19zaXplKHNpemUpLCBtX2dlbmVyYXRvcihzdGQ6Om1vdmUoZ2VuZXJhdG9yKSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9jaHVuay5yZXNlcnZlKG1fY2h1bmtfc2l6ZSk7CisgICAgICAgICAgICBtX2NodW5rLnB1c2hfYmFjayhtX2dlbmVyYXRvci5nZXQoKSk7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1fY2h1bmtfc2l6ZTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2dlbmVyYXRvci5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgQ2F0Y2g6OnRocm93X2V4Y2VwdGlvbihHZW5lcmF0b3JFeGNlcHRpb24oIk5vdCBlbm91Z2ggdmFsdWVzIHRvIGluaXRpYWxpemUgdGhlIGZpcnN0IGNodW5rIikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2NodW5rLnB1c2hfYmFjayhtX2dlbmVyYXRvci5nZXQoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgc3RkOjp2ZWN0b3I8VD4gY29uc3QmIGdldCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NodW5rOworICAgICAgICB9CisgICAgICAgIGJvb2wgbmV4dCgpIG92ZXJyaWRlIHsKKyAgICAgICAgICAgIG1fY2h1bmsuY2xlYXIoKTsKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGlkeCA9IDA7IGlkeCA8IG1fY2h1bmtfc2l6ZTsgKytpZHgpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fZ2VuZXJhdG9yLm5leHQoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fY2h1bmsucHVzaF9iYWNrKG1fZ2VuZXJhdG9yLmdldCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIEdlbmVyYXRvcldyYXBwZXI8c3RkOjp2ZWN0b3I8VD4+IGNodW5rKHNpemVfdCBzaXplLCBHZW5lcmF0b3JXcmFwcGVyPFQ+JiYgZ2VuZXJhdG9yKSB7CisgICAgICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPHN0ZDo6dmVjdG9yPFQ+PigKKyAgICAgICAgICAgIHBmOjptYWtlX3VuaXF1ZTxDaHVua0dlbmVyYXRvcjxUPj4oc2l6ZSwgc3RkOjptb3ZlKGdlbmVyYXRvcikpCisgICAgICAgICk7CisgICAgfQorCit9IC8vIG5hbWVzcGFjZSBHZW5lcmF0b3JzCit9IC8vIG5hbWVzcGFjZSBDYXRjaAorCisvLyBlbmQgY2F0Y2hfZ2VuZXJhdG9yc19nZW5lcmljLmhwcAorLy8gc3RhcnQgY2F0Y2hfZ2VuZXJhdG9yc19zcGVjaWZpYy5ocHAKKworLy8gc3RhcnQgY2F0Y2hfY29udGV4dC5oCisKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBDYXRjaCB7CisKKyAgICBzdHJ1Y3QgSVJlc3VsdENhcHR1cmU7CisgICAgc3RydWN0IElSdW5uZXI7CisgICAgc3RydWN0IElDb25maWc7CisgICAgc3RydWN0IElNdXRhYmxlQ29udGV4dDsKKworICAgIHVzaW5nIElDb25maWdQdHIgPSBzdGQ6OnNoYXJlZF9wdHI8SUNvbmZpZyBjb25zdD47CisKKyAgICBzdHJ1Y3QgSUNvbnRleHQKKyAgICB7CisgICAgICAgIHZpcnR1YWwgfklDb250ZXh0KCk7CisKKyAgICAgICAgdmlydHVhbCBJUmVzdWx0Q2FwdHVyZSogZ2V0UmVzdWx0Q2FwdHVyZSgpID0gMDsKKyAgICAgICAgdmlydHVhbCBJUnVubmVyKiBnZXRSdW5uZXIoKSA9IDA7CisgICAgICAgIHZpcnR1YWwgSUNvbmZpZ1B0ciBjb25zdCYgZ2V0Q29uZmlnKCkgY29uc3QgPSAwOworICAgIH07CisKKyAgICBzdHJ1Y3QgSU11dGFibGVDb250ZXh0IDogSUNvbnRleHQKKyAgICB7CisgICAgICAgIHZpcnR1YWwgfklNdXRhYmxlQ29udGV4dCgpOworICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0Q2FwdHVyZSggSVJlc3VsdENhcHR1cmUqIHJlc3VsdENhcHR1cmUgKSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBzZXRSdW5uZXIoIElSdW5uZXIqIHJ1bm5lciApID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIHNldENvbmZpZyggSUNvbmZpZ1B0ciBjb25zdCYgY29uZmlnICkgPSAwOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RhdGljIElNdXRhYmxlQ29udGV4dCAqY3VycmVudENvbnRleHQ7CisgICAgICAgIGZyaWVuZCBJTXV0YWJsZUNvbnRleHQmIGdldEN1cnJlbnRNdXRhYmxlQ29udGV4dCgpOworICAgICAgICBmcmllbmQgdm9pZCBjbGVhblVwQ29udGV4dCgpOworICAgICAgICBzdGF0aWMgdm9pZCBjcmVhdGVDb250ZXh0KCk7CisgICAgfTsKKworICAgIGlubGluZSBJTXV0YWJsZUNvbnRleHQmIGdldEN1cnJlbnRNdXRhYmxlQ29udGV4dCgpCisgICAgeworICAgICAgICBpZiggIUlNdXRhYmxlQ29udGV4dDo6Y3VycmVudENvbnRleHQgKQorICAgICAgICAgICAgSU11dGFibGVDb250ZXh0OjpjcmVhdGVDb250ZXh0KCk7CisgICAgICAgIHJldHVybiAqSU11dGFibGVDb250ZXh0OjpjdXJyZW50Q29udGV4dDsKKyAgICB9CisKKyAgICBpbmxpbmUgSUNvbnRleHQmIGdldEN1cnJlbnRDb250ZXh0KCkKKyAgICB7CisgICAgICAgIHJldHVybiBnZXRDdXJyZW50TXV0YWJsZUNvbnRleHQoKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFuVXBDb250ZXh0KCk7Cit9CisKKy8vIGVuZCBjYXRjaF9jb250ZXh0LmgKKy8vIHN0YXJ0IGNhdGNoX2ludGVyZmFjZXNfY29uZmlnLmgKKworI2luY2x1ZGUgPGlvc2Z3ZD4KKyNpbmNsdWRlIDxzdHJpbmc+CisjaW5jbHVkZSA8dmVjdG9yPgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIENhdGNoIHsKKworICAgIGVudW0gY2xhc3MgVmVyYm9zaXR5IHsKKyAgICAgICAgUXVpZXQgPSAwLAorICAgICAgICBOb3JtYWwsCisgICAgICAgIEhpZ2gKKyAgICB9OworCisgICAgc3RydWN0IFdhcm5BYm91dCB7IGVudW0gV2hhdCB7CisgICAgICAgIE5vdGhpbmcgPSAweDAwLAorICAgICAgICBOb0Fzc2VydGlvbnMgPSAweDAxLAorICAgICAgICBOb1Rlc3RzID0gMHgwMgorICAgIH07IH07CisKKyAgICBzdHJ1Y3QgU2hvd0R1cmF0aW9ucyB7IGVudW0gT3JOb3QgeworICAgICAgICBEZWZhdWx0Rm9yUmVwb3J0ZXIsCisgICAgICAgIEFsd2F5cywKKyAgICAgICAgTmV2ZXIKKyAgICB9OyB9OworICAgIHN0cnVjdCBSdW5UZXN0cyB7IGVudW0gSW5XaGF0T3JkZXIgeworICAgICAgICBJbkRlY2xhcmF0aW9uT3JkZXIsCisgICAgICAgIEluTGV4aWNvZ3JhcGhpY2FsT3JkZXIsCisgICAgICAgIEluUmFuZG9tT3JkZXIKKyAgICB9OyB9OworICAgIHN0cnVjdCBVc2VDb2xvdXIgeyBlbnVtIFllc09yTm8geworICAgICAgICBBdXRvLAorICAgICAgICBZZXMsCisgICAgICAgIE5vCisgICAgfTsgfTsKKyAgICBzdHJ1Y3QgV2FpdEZvcktleXByZXNzIHsgZW51bSBXaGVuIHsKKyAgICAgICAgTmV2ZXIsCisgICAgICAgIEJlZm9yZVN0YXJ0ID0gMSwKKyAgICAgICAgQmVmb3JlRXhpdCA9IDIsCisgICAgICAgIEJlZm9yZVN0YXJ0QW5kRXhpdCA9IEJlZm9yZVN0YXJ0IHwgQmVmb3JlRXhpdAorICAgIH07IH07CisKKyAgICBjbGFzcyBUZXN0U3BlYzsKKworICAgIHN0cnVjdCBJQ29uZmlnIDogTm9uQ29weWFibGUgeworCisgICAgICAgIHZpcnR1YWwgfklDb25maWcoKTsKKworICAgICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dUaHJvd3MoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgc3RkOjpvc3RyZWFtJiBzdHJlYW0oKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgbmFtZSgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGluY2x1ZGVTdWNjZXNzZnVsUmVzdWx0cygpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIHNob3VsZERlYnVnQnJlYWsoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCB3YXJuQWJvdXRNaXNzaW5nQXNzZXJ0aW9ucygpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIHdhcm5BYm91dE5vVGVzdHMoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgaW50IGFib3J0QWZ0ZXIoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgYm9vbCBzaG93SW52aXNpYmxlcygpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBTaG93RHVyYXRpb25zOjpPck5vdCBzaG93RHVyYXRpb25zKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFRlc3RTcGVjIGNvbnN0JiB0ZXN0U3BlYygpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGhhc1Rlc3RGaWx0ZXJzKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFJ1blRlc3RzOjpJbldoYXRPcmRlciBydW5PcmRlcigpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgcm5nU2VlZCgpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBpbnQgYmVuY2htYXJrUmVzb2x1dGlvbk11bHRpcGxlKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFVzZUNvbG91cjo6WWVzT3JObyB1c2VDb2xvdXIoKSBjb25zdCA9IDA7CisgICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBnZXRTZWN0aW9uc1RvUnVuKCkgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIFZlcmJvc2l0eSB2ZXJib3NpdHkoKSBjb25zdCA9IDA7CisgICAgfTsKKworICAgIHVzaW5nIElDb25maWdQdHIgPSBzdGQ6OnNoYXJlZF9wdHI8SUNvbmZpZyBjb25zdD47Cit9CisKKy8vIGVuZCBjYXRjaF9pbnRlcmZhY2VzX2NvbmZpZy5oCisjaW5jbHVkZSA8cmFuZG9tPgorCituYW1lc3BhY2UgQ2F0Y2ggeworbmFtZXNwYWNlIEdlbmVyYXRvcnMgeworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgRmxvYXQ+CitjbGFzcyBSYW5kb21GbG9hdGluZ0dlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBJR2VuZXJhdG9yPEZsb2F0PiB7CisgICAgLy8gRklYTUU6IFdoYXQgaXMgdGhlIHJpZ2h0IHNlZWQ/CisgICAgc3RkOjptaW5zdGRfcmFuZCBtX3JhbmQ7CisgICAgc3RkOjp1bmlmb3JtX3JlYWxfZGlzdHJpYnV0aW9uPEZsb2F0PiBtX2Rpc3Q7CisgICAgRmxvYXQgbV9jdXJyZW50X251bWJlcjsKK3B1YmxpYzoKKworICAgIFJhbmRvbUZsb2F0aW5nR2VuZXJhdG9yKEZsb2F0IGEsIEZsb2F0IGIpOgorICAgICAgICBtX3JhbmQoZ2V0Q3VycmVudENvbnRleHQoKS5nZXRDb25maWcoKS0+cm5nU2VlZCgpKSwKKyAgICAgICAgbV9kaXN0KGEsIGIpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8dm9pZD4obmV4dCgpKTsKKyAgICB9CisKKyAgICBGbG9hdCBjb25zdCYgZ2V0KCkgY29uc3Qgb3ZlcnJpZGUgeworICAgICAgICByZXR1cm4gbV9jdXJyZW50X251bWJlcjsKKyAgICB9CisgICAgYm9vbCBuZXh0KCkgb3ZlcnJpZGUgeworICAgICAgICBtX2N1cnJlbnRfbnVtYmVyID0gbV9kaXN0KG1fcmFuZCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBJbnRlZ2VyPgorY2xhc3MgUmFuZG9tSW50ZWdlckdlbmVyYXRvciBmaW5hbCA6IHB1YmxpYyBJR2VuZXJhdG9yPEludGVnZXI+IHsKKyAgICBzdGQ6Om1pbnN0ZF9yYW5kIG1fcmFuZDsKKyAgICBzdGQ6OnVuaWZvcm1faW50X2Rpc3RyaWJ1dGlvbjxJbnRlZ2VyPiBtX2Rpc3Q7CisgICAgSW50ZWdlciBtX2N1cnJlbnRfbnVtYmVyOworcHVibGljOgorCisgICAgUmFuZG9tSW50ZWdlckdlbmVyYXRvcihJbnRlZ2VyIGEsIEludGVnZXIgYik6CisgICAgICAgIG1fcmFuZChnZXRDdXJyZW50Q29udGV4dCgpLmdldENvbmZpZygpLT5ybmdTZWVkKCkpLAorICAgICAgICBtX2Rpc3QoYSwgYikgeworICAgICAgICBzdGF0aWNfY2FzdDx2b2lkPihuZXh0KCkpOworICAgIH0KKworICAgIEludGVnZXIgY29uc3QmIGdldCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudF9udW1iZXI7CisgICAgfQorICAgIGJvb2wgbmV4dCgpIG92ZXJyaWRlIHsKKyAgICAgICAgbV9jdXJyZW50X251bWJlciA9IG1fZGlzdChtX3JhbmQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cit9OworCisvLyBUT0RPOiBJZGVhbGx5IHRoaXMgd291bGQgYmUgYWxzbyBjb25zdHJhaW5lZCBhZ2FpbnN0IHRoZSB2YXJpb3VzIGNoYXIgdHlwZXMsCisvLyAgICAgICBidXQgSSBkb24ndCBleHBlY3QgdXNlcnMgdG8gcnVuIGludG8gdGhhdCBpbiBwcmFjdGljZS4KK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWUsCitHZW5lcmF0b3JXcmFwcGVyPFQ+Pjo6dHlwZQorcmFuZG9tKFQgYSwgVCBiKSB7CisgICAgcmV0dXJuIEdlbmVyYXRvcldyYXBwZXI8VD4oCisgICAgICAgIHBmOjptYWtlX3VuaXF1ZTxSYW5kb21JbnRlZ2VyR2VuZXJhdG9yPFQ+PihhLCBiKQorICAgICk7Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgordHlwZW5hbWUgc3RkOjplbmFibGVfaWY8c3RkOjppc19mbG9hdGluZ19wb2ludDxUPjo6dmFsdWUsCitHZW5lcmF0b3JXcmFwcGVyPFQ+Pjo6dHlwZQorcmFuZG9tKFQgYSwgVCBiKSB7CisgICAgcmV0dXJuIEdlbmVyYXRvcldyYXBwZXI8VD4oCisgICAgICAgIHBmOjptYWtlX3VuaXF1ZTxSYW5kb21GbG9hdGluZ0dlbmVyYXRvcjxUPj4oYSwgYikKKyAgICApOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFJhbmdlR2VuZXJhdG9yIGZpbmFsIDogcHVibGljIElHZW5lcmF0b3I8VD4geworICAgIFQgbV9jdXJyZW50OworICAgIFQgbV9lbmQ7CisgICAgVCBtX3N0ZXA7CisgICAgYm9vbCBtX3Bvc2l0aXZlOworCitwdWJsaWM6CisgICAgUmFuZ2VHZW5lcmF0b3IoVCBjb25zdCYgc3RhcnQsIFQgY29uc3QmIGVuZCwgVCBjb25zdCYgc3RlcCk6CisgICAgICAgIG1fY3VycmVudChzdGFydCksCisgICAgICAgIG1fZW5kKGVuZCksCisgICAgICAgIG1fc3RlcChzdGVwKSwKKyAgICAgICAgbV9wb3NpdGl2ZShtX3N0ZXAgPiBUKDApKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KG1fY3VycmVudCAhPSBtX2VuZCAmJiAiUmFuZ2Ugc3RhcnQgYW5kIGVuZCBjYW5ub3QgYmUgZXF1YWwiKTsKKyAgICAgICAgYXNzZXJ0KG1fc3RlcCAhPSBUKDApICYmICJTdGVwIHNpemUgY2Fubm90IGJlIHplcm8iKTsKKyAgICAgICAgYXNzZXJ0KCgobV9wb3NpdGl2ZSAmJiBtX2N1cnJlbnQgPD0gbV9lbmQpIHx8ICghbV9wb3NpdGl2ZSAmJiBtX2N1cnJlbnQgPj0gbV9lbmQpKSAmJiAiU3RlcCBtb3ZlcyBhd2F5IGZyb20gZW5kIik7CisgICAgfQorCisgICAgUmFuZ2VHZW5lcmF0b3IoVCBjb25zdCYgc3RhcnQsIFQgY29uc3QmIGVuZCk6CisgICAgICAgIFJhbmdlR2VuZXJhdG9yKHN0YXJ0LCBlbmQsIChzdGFydCA8IGVuZCkgPyBUKDEpIDogVCgtMSkpCisgICAge30KKworICAgIFQgY29uc3QmIGdldCgpIGNvbnN0IG92ZXJyaWRlIHsKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudDsKKyAgICB9CisKKyAgICBib29sIG5leHQoKSBvdmVycmlkZSB7CisgICAgICAgIG1fY3VycmVudCArPSBtX3N0ZXA7CisgICAgICAgIHJldHVybiAobV9wb3NpdGl2ZSkgPyAobV9jdXJyZW50IDwgbV9lbmQpIDogKG1fY3VycmVudCA+IG1fZW5kKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0dlbmVyYXRvcldyYXBwZXI8VD4gcmFuZ2UoVCBjb25zdCYgc3RhcnQsIFQgY29uc3QmIGVuZCwgVCBjb25zdCYgc3RlcCkgeworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWUsICJUeXBlIG11c3QgYmUgYW4gaW50ZWdlciIpOworICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFQ+KHBmOjptYWtlX3VuaXF1ZTxSYW5nZUdlbmVyYXRvcjxUPj4oc3RhcnQsIGVuZCwgc3RlcCkpOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK0dlbmVyYXRvcldyYXBwZXI8VD4gcmFuZ2UoVCBjb25zdCYgc3RhcnQsIFQgY29uc3QmIGVuZCkgeworICAgIHN0YXRpY19hc3NlcnQoc3RkOjppc19pbnRlZ3JhbDxUPjo6dmFsdWUgJiYgIXN0ZDo6aXNfc2FtZTxULCBib29sPjo6dmFsdWUsICJUeXBlIG11c3QgYmUgYW4gaW50ZWdlciIpOworICAgIHJldHVybiBHZW5lcmF0b3JXcmFwcGVyPFQ+KHBmOjptYWtlX3VuaXF1ZTxSYW5nZUdlbmVyYXRvcjxUPj4oc3RhcnQsIGVuZCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBHZW5lcmF0b3JzCit9IC8vIG5hbWVzcGFjZSBDYXRjaAorCisvLyBlbmQgY2F0Y2hfZ2VuZXJhdG9yc19zcGVjaWZpYy5ocHAKIAogLy8gVGhlc2UgZmlsZXMgYXJlIGluY2x1ZGVkIGhlcmUgc28gdGhlIHNpbmdsZV9pbmNsdWRlIHNjcmlwdCBkb2Vzbid0IHB1dCB0aGVtCiAvLyBpbiB0aGUgY29uZGl0aW9uYWxseSBjb21waWxlZCBzZWN0aW9ucwpAQCAtMjY3Niw3ICs0MjA5LDcgQEAKICAgICBjbGFzcyBUZXN0Q2FzZSA6IHB1YmxpYyBUZXN0Q2FzZUluZm8gewogICAgIHB1YmxpYzoKIAotICAgICAgICBUZXN0Q2FzZSggSVRlc3RJbnZva2VyKiB0ZXN0Q2FzZSwgVGVzdENhc2VJbmZvIGNvbnN0JiBpbmZvICk7CisgICAgICAgIFRlc3RDYXNlKCBJVGVzdEludm9rZXIqIHRlc3RDYXNlLCBUZXN0Q2FzZUluZm8mJiBpbmZvICk7CiAKICAgICAgICAgVGVzdENhc2Ugd2l0aE5hbWUoIHN0ZDo6c3RyaW5nIGNvbnN0JiBfbmV3TmFtZSApIGNvbnN0OwogCkBAIC0yNjkzLDggKzQyMjYsNyBAQAogCiAgICAgVGVzdENhc2UgbWFrZVRlc3RDYXNlKCAgSVRlc3RJbnZva2VyKiB0ZXN0Q2FzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgY2xhc3NOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBkZXNjcmlwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lQW5kVGFncyBjb25zdCYgbmFtZUFuZFRhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlTGluZUluZm8gY29uc3QmIGxpbmVJbmZvICk7CiB9CiAKQEAgLTI3OTcsNyArNDMyOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBkZXNjID0gRGV0YWlsOjpnZXRBbm5vdGF0aW9uKCBjbHMsICJEZXNjcmlwdGlvbiIsIHRlc3RDYXNlTmFtZSApOwogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY2xhc3NOYW1lID0gY2xhc3NfZ2V0TmFtZSggY2xzICk7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGdldE11dGFibGVSZWdpc3RyeUh1YigpLnJlZ2lzdGVyVGVzdCggbWFrZVRlc3RDYXNlKCBuZXcgT2NNZXRob2QoIGNscywgc2VsZWN0b3IgKSwgY2xhc3NOYW1lLCBuYW1lLmNfc3RyKCksIGRlc2MuY19zdHIoKSwgU291cmNlTGluZUluZm8oIiIsMCkgKSApOworICAgICAgICAgICAgICAgICAgICAgICAgZ2V0TXV0YWJsZVJlZ2lzdHJ5SHViKCkucmVnaXN0ZXJUZXN0KCBtYWtlVGVzdENhc2UoIG5ldyBPY01ldGhvZCggY2xzLCBzZWxlY3RvciApLCBjbGFzc05hbWUsIE5hbWVBbmRUYWdzKCBuYW1lLmNfc3RyKCksIGRlc2MuY19zdHIoKSApLCBTb3VyY2VMaW5lSW5mbygiIiwwKSApICk7CiAgICAgICAgICAgICAgICAgICAgICAgICBub1Rlc3RNZXRob2RzKys7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0zMTA3LDc2ICs0NjM5LDYgQEAKICNlbmRpZgogCiAvLyBlbmQgY2F0Y2hfdGVzdF9zcGVjX3BhcnNlci5oCi0vLyBzdGFydCBjYXRjaF9pbnRlcmZhY2VzX2NvbmZpZy5oCi0KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0jaW5jbHVkZSA8c3RyaW5nPgotI2luY2x1ZGUgPHZlY3Rvcj4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0KLSAgICBlbnVtIGNsYXNzIFZlcmJvc2l0eSB7Ci0gICAgICAgIFF1aWV0ID0gMCwKLSAgICAgICAgTm9ybWFsLAotICAgICAgICBIaWdoCi0gICAgfTsKLQotICAgIHN0cnVjdCBXYXJuQWJvdXQgeyBlbnVtIFdoYXQgewotICAgICAgICBOb3RoaW5nID0gMHgwMCwKLSAgICAgICAgTm9Bc3NlcnRpb25zID0gMHgwMQotICAgIH07IH07Ci0KLSAgICBzdHJ1Y3QgU2hvd0R1cmF0aW9ucyB7IGVudW0gT3JOb3QgewotICAgICAgICBEZWZhdWx0Rm9yUmVwb3J0ZXIsCi0gICAgICAgIEFsd2F5cywKLSAgICAgICAgTmV2ZXIKLSAgICB9OyB9OwotICAgIHN0cnVjdCBSdW5UZXN0cyB7IGVudW0gSW5XaGF0T3JkZXIgewotICAgICAgICBJbkRlY2xhcmF0aW9uT3JkZXIsCi0gICAgICAgIEluTGV4aWNvZ3JhcGhpY2FsT3JkZXIsCi0gICAgICAgIEluUmFuZG9tT3JkZXIKLSAgICB9OyB9OwotICAgIHN0cnVjdCBVc2VDb2xvdXIgeyBlbnVtIFllc09yTm8gewotICAgICAgICBBdXRvLAotICAgICAgICBZZXMsCi0gICAgICAgIE5vCi0gICAgfTsgfTsKLSAgICBzdHJ1Y3QgV2FpdEZvcktleXByZXNzIHsgZW51bSBXaGVuIHsKLSAgICAgICAgTmV2ZXIsCi0gICAgICAgIEJlZm9yZVN0YXJ0ID0gMSwKLSAgICAgICAgQmVmb3JlRXhpdCA9IDIsCi0gICAgICAgIEJlZm9yZVN0YXJ0QW5kRXhpdCA9IEJlZm9yZVN0YXJ0IHwgQmVmb3JlRXhpdAotICAgIH07IH07Ci0KLSAgICBjbGFzcyBUZXN0U3BlYzsKLQotICAgIHN0cnVjdCBJQ29uZmlnIDogTm9uQ29weWFibGUgewotCi0gICAgICAgIHZpcnR1YWwgfklDb25maWcoKTsKLQotICAgICAgICB2aXJ0dWFsIGJvb2wgYWxsb3dUaHJvd3MoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgc3RkOjpvc3RyZWFtJiBzdHJlYW0oKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgbmFtZSgpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIGluY2x1ZGVTdWNjZXNzZnVsUmVzdWx0cygpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIHNob3VsZERlYnVnQnJlYWsoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCB3YXJuQWJvdXRNaXNzaW5nQXNzZXJ0aW9ucygpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBpbnQgYWJvcnRBZnRlcigpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29sIHNob3dJbnZpc2libGVzKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIFNob3dEdXJhdGlvbnM6Ok9yTm90IHNob3dEdXJhdGlvbnMoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgVGVzdFNwZWMgY29uc3QmIHRlc3RTcGVjKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIFJ1blRlc3RzOjpJbldoYXRPcmRlciBydW5PcmRlcigpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgcm5nU2VlZCgpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBpbnQgYmVuY2htYXJrUmVzb2x1dGlvbk11bHRpcGxlKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIFVzZUNvbG91cjo6WWVzT3JObyB1c2VDb2xvdXIoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBnZXRTZWN0aW9uc1RvUnVuKCkgY29uc3QgPSAwOwotICAgICAgICB2aXJ0dWFsIFZlcmJvc2l0eSB2ZXJib3NpdHkoKSBjb25zdCA9IDA7Ci0gICAgfTsKLQotICAgIHVzaW5nIElDb25maWdQdHIgPSBzdGQ6OnNoYXJlZF9wdHI8SUNvbmZpZyBjb25zdD47Ci19Ci0KLS8vIGVuZCBjYXRjaF9pbnRlcmZhY2VzX2NvbmZpZy5oCiAvLyBMaWJzdGRjKysgZG9lc24ndCBsaWtlIGluY29tcGxldGUgY2xhc3NlcyBmb3IgdW5pcXVlX3B0cgogCiAjaW5jbHVkZSA8bWVtb3J5PgpAQCAtMzIxOSw4ICs0NjgxLDEyIEBACiAgICAgICAgIHN0ZDo6c3RyaW5nIG91dHB1dEZpbGVuYW1lOwogICAgICAgICBzdGQ6OnN0cmluZyBuYW1lOwogICAgICAgICBzdGQ6OnN0cmluZyBwcm9jZXNzTmFtZTsKKyNpZm5kZWYgQ0FUQ0hfQ09ORklHX0RFRkFVTFRfUkVQT1JURVIKKyNkZWZpbmUgQ0FUQ0hfQ09ORklHX0RFRkFVTFRfUkVQT1JURVIgImNvbnNvbGUiCisjZW5kaWYKKyAgICAgICAgc3RkOjpzdHJpbmcgcmVwb3J0ZXJOYW1lID0gQ0FUQ0hfQ09ORklHX0RFRkFVTFRfUkVQT1JURVI7CisjdW5kZWYgQ0FUQ0hfQ09ORklHX0RFRkFVTFRfUkVQT1JURVIKIAotICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gcmVwb3J0ZXJOYW1lczsKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRlc3RzT3JUYWdzOwogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc2VjdGlvbnNUb1J1bjsKICAgICB9OwpAQCAtMzI0MCwxMSArNDcwNiwxMyBAQAogICAgICAgICBib29sIGxpc3RSZXBvcnRlcnMoKSBjb25zdDsKIAogICAgICAgICBzdGQ6OnN0cmluZyBnZXRQcm9jZXNzTmFtZSgpIGNvbnN0OworICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgZ2V0UmVwb3J0ZXJOYW1lKCkgY29uc3Q7CiAKLSAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBnZXRSZXBvcnRlck5hbWVzKCkgY29uc3Q7CisgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgZ2V0VGVzdHNPclRhZ3MoKSBjb25zdDsKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IGNvbnN0JiBnZXRTZWN0aW9uc1RvUnVuKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAgICAgdmlydHVhbCBUZXN0U3BlYyBjb25zdCYgdGVzdFNwZWMoKSBjb25zdCBvdmVycmlkZTsKKyAgICAgICAgYm9vbCBoYXNUZXN0RmlsdGVycygpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgICAgIGJvb2wgc2hvd0hlbHAoKSBjb25zdDsKIApAQCAtMzI1NCw2ICs0NzIyLDcgQEAKICAgICAgICAgc3RkOjpzdHJpbmcgbmFtZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICBib29sIGluY2x1ZGVTdWNjZXNzZnVsUmVzdWx0cygpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICBib29sIHdhcm5BYm91dE1pc3NpbmdBc3NlcnRpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgd2FybkFib3V0Tm9UZXN0cygpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICBTaG93RHVyYXRpb25zOjpPck5vdCBzaG93RHVyYXRpb25zKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgICAgIFJ1blRlc3RzOjpJbldoYXRPcmRlciBydW5PcmRlcigpIGNvbnN0IG92ZXJyaWRlOwogICAgICAgICB1bnNpZ25lZCBpbnQgcm5nU2VlZCgpIGNvbnN0IG92ZXJyaWRlOwpAQCAtMzI3MSw2ICs0NzQwLDcgQEAKIAogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8SVN0cmVhbSBjb25zdD4gbV9zdHJlYW07CiAgICAgICAgIFRlc3RTcGVjIG1fdGVzdFNwZWM7CisgICAgICAgIGJvb2wgbV9oYXNUZXN0RmlsdGVycyA9IGZhbHNlOwogICAgIH07CiAKIH0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaApAQCAtMzQxMCw2ICs0ODgwLDcgQEAKIAogICAgIHN0cnVjdCBSZXBvcnRlclByZWZlcmVuY2VzIHsKICAgICAgICAgYm9vbCBzaG91bGRSZWRpcmVjdFN0ZE91dCA9IGZhbHNlOworICAgICAgICBib29sIHNob3VsZFJlcG9ydEFsbEFzc2VydGlvbnMgPSBmYWxzZTsKICAgICB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KQEAgLTM0NDcsOCArNDkxOCw4IEBACiAKICAgICAgICAgQXNzZXJ0aW9uU3RhdHMoIEFzc2VydGlvblN0YXRzIGNvbnN0JiApICAgICAgICAgICAgICA9IGRlZmF1bHQ7CiAgICAgICAgIEFzc2VydGlvblN0YXRzKCBBc3NlcnRpb25TdGF0cyAmJiApICAgICAgICAgICAgICAgICAgPSBkZWZhdWx0OwotICAgICAgICBBc3NlcnRpb25TdGF0cyYgb3BlcmF0b3IgPSAoIEFzc2VydGlvblN0YXRzIGNvbnN0JiApID0gZGVmYXVsdDsKLSAgICAgICAgQXNzZXJ0aW9uU3RhdHMmIG9wZXJhdG9yID0gKCBBc3NlcnRpb25TdGF0cyAmJiApICAgICA9IGRlZmF1bHQ7CisgICAgICAgIEFzc2VydGlvblN0YXRzJiBvcGVyYXRvciA9ICggQXNzZXJ0aW9uU3RhdHMgY29uc3QmICkgPSBkZWxldGU7CisgICAgICAgIEFzc2VydGlvblN0YXRzJiBvcGVyYXRvciA9ICggQXNzZXJ0aW9uU3RhdHMgJiYgKSAgICAgPSBkZWxldGU7CiAgICAgICAgIHZpcnR1YWwgfkFzc2VydGlvblN0YXRzKCk7CiAKICAgICAgICAgQXNzZXJ0aW9uUmVzdWx0IGFzc2VydGlvblJlc3VsdDsKQEAgLTM1OTQsOCArNTA2NSw2IEBACiAgICAgICAgIHZpcnR1YWwgTGlzdGVuZXJzIGNvbnN0JiBnZXRMaXN0ZW5lcnMoKSBjb25zdCA9IDA7CiAgICAgfTsKIAotICAgIHZvaWQgYWRkUmVwb3J0ZXIoIElTdHJlYW1pbmdSZXBvcnRlclB0ciYgZXhpc3RpbmdSZXBvcnRlciwgSVN0cmVhbWluZ1JlcG9ydGVyUHRyJiYgYWRkaXRpb25hbFJlcG9ydGVyICk7Ci0KIH0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAogCiAvLyBlbmQgY2F0Y2hfaW50ZXJmYWNlc19yZXBvcnRlci5oCkBAIC0zNjAzLDcgKzUwNzIsNyBAQAogI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8Y2Zsb2F0PgogI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxvc3RyZWFtPgogCkBAIC0zNjIyLDcgKzUwOTEsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgICBtX3JlcG9ydGVyUHJlZnMuc2hvdWxkUmVkaXJlY3RTdGRPdXQgPSBmYWxzZTsKICAgICAgICAgICAgIGlmKCAhRGVyaXZlZFQ6OmdldFN1cHBvcnRlZFZlcmJvc2l0aWVzKCkuY291bnQoIG1fY29uZmlnLT52ZXJib3NpdHkoKSApICkKLSAgICAgICAgICAgICAgICB0aHJvdyBzdGQ6OmRvbWFpbl9lcnJvciggIlZlcmJvc2l0eSBsZXZlbCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcmVwb3J0ZXIiICk7CisgICAgICAgICAgICAgICAgQ0FUQ0hfRVJST1IoICJWZXJib3NpdHkgbGV2ZWwgbm90IHN1cHBvcnRlZCBieSB0aGlzIHJlcG9ydGVyIiApOwogICAgICAgICB9CiAKICAgICAgICAgUmVwb3J0ZXJQcmVmZXJlbmNlcyBnZXRQcmVmZXJlbmNlcygpIGNvbnN0IG92ZXJyaWRlIHsKQEAgLTM3MzYsNyArNTIwNSw3IEBACiAgICAgICAgIHsKICAgICAgICAgICAgIG1fcmVwb3J0ZXJQcmVmcy5zaG91bGRSZWRpcmVjdFN0ZE91dCA9IGZhbHNlOwogICAgICAgICAgICAgaWYoICFEZXJpdmVkVDo6Z2V0U3VwcG9ydGVkVmVyYm9zaXRpZXMoKS5jb3VudCggbV9jb25maWctPnZlcmJvc2l0eSgpICkgKQotICAgICAgICAgICAgICAgIHRocm93IHN0ZDo6ZG9tYWluX2Vycm9yKCAiVmVyYm9zaXR5IGxldmVsIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyByZXBvcnRlciIgKTsKKyAgICAgICAgICAgICAgICBDQVRDSF9FUlJPUiggIlZlcmJvc2l0eSBsZXZlbCBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgcmVwb3J0ZXIiICk7CiAgICAgICAgIH0KICAgICAgICAgfkN1bXVsYXRpdmVSZXBvcnRlckJhc2UoKSBvdmVycmlkZSA9IGRlZmF1bHQ7CiAKQEAgLTM4NTIsNiArNTMyMSw4IEBACiAgICAgc3RydWN0IFRlc3RFdmVudExpc3RlbmVyQmFzZSA6IFN0cmVhbWluZ1JlcG9ydGVyQmFzZTxUZXN0RXZlbnRMaXN0ZW5lckJhc2U+IHsKICAgICAgICAgVGVzdEV2ZW50TGlzdGVuZXJCYXNlKCBSZXBvcnRlckNvbmZpZyBjb25zdCYgX2NvbmZpZyApOwogCisgICAgICAgIHN0YXRpYyBzdGQ6OnNldDxWZXJib3NpdHk+IGdldFN1cHBvcnRlZFZlcmJvc2l0aWVzKCk7CisKICAgICAgICAgdm9pZCBhc3NlcnRpb25TdGFydGluZyhBc3NlcnRpb25JbmZvIGNvbnN0Jikgb3ZlcnJpZGU7CiAgICAgICAgIGJvb2wgYXNzZXJ0aW9uRW5kZWQoQXNzZXJ0aW9uU3RhdHMgY29uc3QmKSBvdmVycmlkZTsKICAgICB9OwpAQCAtMzg4MSwxMCArNTM1MiwxMSBAQAogICAgICAgICAgICAgQnJpZ2h0R3JlZW4gPSBCcmlnaHQgfCBHcmVlbiwKICAgICAgICAgICAgIExpZ2h0R3JleSA9IEJyaWdodCB8IEdyZXksCiAgICAgICAgICAgICBCcmlnaHRXaGl0ZSA9IEJyaWdodCB8IFdoaXRlLAorICAgICAgICAgICAgQnJpZ2h0WWVsbG93ID0gQnJpZ2h0IHwgWWVsbG93LAogCiAgICAgICAgICAgICAvLyBCeSBpbnRlbnRpb24KICAgICAgICAgICAgIEZpbGVOYW1lID0gTGlnaHRHcmV5LAotICAgICAgICAgICAgV2FybmluZyA9IFllbGxvdywKKyAgICAgICAgICAgIFdhcm5pbmcgPSBCcmlnaHRZZWxsb3csCiAgICAgICAgICAgICBSZXN1bHRFcnJvciA9IEJyaWdodFJlZCwKICAgICAgICAgICAgIFJlc3VsdFN1Y2Nlc3MgPSBCcmlnaHRHcmVlbiwKICAgICAgICAgICAgIFJlc3VsdEV4cGVjdGVkRmFpbHVyZSA9IFdhcm5pbmcsCkBAIC0zODkzLDcgKzUzNjUsNyBAQAogICAgICAgICAgICAgU3VjY2VzcyA9IEdyZWVuLAogCiAgICAgICAgICAgICBPcmlnaW5hbEV4cHJlc3Npb24gPSBDeWFuLAotICAgICAgICAgICAgUmVjb25zdHJ1Y3RlZEV4cHJlc3Npb24gPSBZZWxsb3csCisgICAgICAgICAgICBSZWNvbnN0cnVjdGVkRXhwcmVzc2lvbiA9IEJyaWdodFllbGxvdywKIAogICAgICAgICAgICAgU2Vjb25kYXJ5VGV4dCA9IExpZ2h0R3JleSwKICAgICAgICAgICAgIEhlYWRlcnMgPSBXaGl0ZQpAQCAtNDMzNCw3ICs1ODA2LDcgQEAKIAogICAgICAgICAvLyBEZWJ1Zy8gY2hlY2tpbmcKICAgICAgICAgdmlydHVhbCBib29sIGlzU2VjdGlvblRyYWNrZXIoKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBpc0luZGV4VHJhY2tlcigpIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVhbCBib29sIGlzR2VuZXJhdG9yVHJhY2tlcigpIGNvbnN0ID0gMDsKICAgICB9OwogCiAgICAgY2xhc3MgVHJhY2tlckNvbnRleHQgewpAQCAtNDM3NSwxMyArNTg0Nyw2IEBACiAgICAgICAgICAgICBGYWlsZWQKICAgICAgICAgfTsKIAotICAgICAgICBjbGFzcyBUcmFja2VySGFzTmFtZSB7Ci0gICAgICAgICAgICBOYW1lQW5kTG9jYXRpb24gbV9uYW1lQW5kTG9jYXRpb247Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIFRyYWNrZXJIYXNOYW1lKCBOYW1lQW5kTG9jYXRpb24gY29uc3QmIG5hbWVBbmRMb2NhdGlvbiApOwotICAgICAgICAgICAgYm9vbCBvcGVyYXRvciAoKSggSVRyYWNrZXJQdHIgY29uc3QmIHRyYWNrZXIgKSBjb25zdDsKLSAgICAgICAgfTsKLQogICAgICAgICB1c2luZyBDaGlsZHJlbiA9IHN0ZDo6dmVjdG9yPElUcmFja2VyUHRyPjsKICAgICAgICAgTmFtZUFuZExvY2F0aW9uIG1fbmFtZUFuZExvY2F0aW9uOwogICAgICAgICBUcmFja2VyQ29udGV4dCYgbV9jdHg7CkBAIC00NDA2LDcgKzU4NzEsNyBAQAogICAgICAgICB2b2lkIG9wZW5DaGlsZCgpIG92ZXJyaWRlOwogCiAgICAgICAgIGJvb2wgaXNTZWN0aW9uVHJhY2tlcigpIGNvbnN0IG92ZXJyaWRlOwotICAgICAgICBib29sIGlzSW5kZXhUcmFja2VyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgICAgIGJvb2wgaXNHZW5lcmF0b3JUcmFja2VyKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAgICAgdm9pZCBvcGVuKCk7CiAKQEAgLTQ0MjYsNiArNTg5MSw4IEBACiAKICAgICAgICAgYm9vbCBpc1NlY3Rpb25UcmFja2VyKCkgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICAgICAgYm9vbCBpc0NvbXBsZXRlKCkgY29uc3Qgb3ZlcnJpZGU7CisKICAgICAgICAgc3RhdGljIFNlY3Rpb25UcmFja2VyJiBhY3F1aXJlKCBUcmFja2VyQ29udGV4dCYgY3R4LCBOYW1lQW5kTG9jYXRpb24gY29uc3QmIG5hbWVBbmRMb2NhdGlvbiApOwogCiAgICAgICAgIHZvaWQgdHJ5T3BlbigpOwpAQCAtNDQzNCwyOCArNTkwMSwxMSBAQAogICAgICAgICB2b2lkIGFkZE5leHRGaWx0ZXJzKCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIGZpbHRlcnMgKTsKICAgICB9OwogCi0gICAgY2xhc3MgSW5kZXhUcmFja2VyIDogcHVibGljIFRyYWNrZXJCYXNlIHsKLSAgICAgICAgaW50IG1fc2l6ZTsKLSAgICAgICAgaW50IG1faW5kZXggPSAtMTsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEluZGV4VHJhY2tlciggTmFtZUFuZExvY2F0aW9uIGNvbnN0JiBuYW1lQW5kTG9jYXRpb24sIFRyYWNrZXJDb250ZXh0JiBjdHgsIElUcmFja2VyKiBwYXJlbnQsIGludCBzaXplICk7Ci0KLSAgICAgICAgYm9vbCBpc0luZGV4VHJhY2tlcigpIGNvbnN0IG92ZXJyaWRlOwotICAgICAgICB2b2lkIGNsb3NlKCkgb3ZlcnJpZGU7Ci0KLSAgICAgICAgc3RhdGljIEluZGV4VHJhY2tlciYgYWNxdWlyZSggVHJhY2tlckNvbnRleHQmIGN0eCwgTmFtZUFuZExvY2F0aW9uIGNvbnN0JiBuYW1lQW5kTG9jYXRpb24sIGludCBzaXplICk7Ci0KLSAgICAgICAgaW50IGluZGV4KCkgY29uc3Q7Ci0KLSAgICAgICAgdm9pZCBtb3ZlTmV4dCgpOwotICAgIH07Ci0KIH0gLy8gbmFtZXNwYWNlIFRlc3RDYXNlVHJhY2tpbmcKIAogdXNpbmcgVGVzdENhc2VUcmFja2luZzo6SVRyYWNrZXI7CiB1c2luZyBUZXN0Q2FzZVRyYWNraW5nOjpUcmFja2VyQ29udGV4dDsKIHVzaW5nIFRlc3RDYXNlVHJhY2tpbmc6OlNlY3Rpb25UcmFja2VyOwotdXNpbmcgVGVzdENhc2VUcmFja2luZzo6SW5kZXhUcmFja2VyOwogCiB9IC8vIG5hbWVzcGFjZSBDYXRjaAogCkBAIC00NDY3LDYgKzU5MTcsNyBAQAogCiAgICAgc3RydWN0IExlYWtEZXRlY3RvciB7CiAgICAgICAgIExlYWtEZXRlY3RvcigpOworICAgICAgICB+TGVha0RldGVjdG9yKCk7CiAgICAgfTsKIAogfQpAQCAtNDUwMSw2ICs1OTUyLDEyIEBACiAgICAgICAgIHJldHVybiBBcHByb3goIDAgKTsKICAgICB9CiAKKyAgICBBcHByb3ggQXBwcm94OjpvcGVyYXRvci0oKSBjb25zdCB7CisgICAgICAgIGF1dG8gdGVtcCgqdGhpcyk7CisgICAgICAgIHRlbXAubV92YWx1ZSA9IC10ZW1wLm1fdmFsdWU7CisgICAgICAgIHJldHVybiB0ZW1wOworICAgIH0KKwogICAgIHN0ZDo6c3RyaW5nIEFwcHJveDo6dG9TdHJpbmcoKSBjb25zdCB7CiAgICAgICAgIFJldXNhYmxlU3RyaW5nU3RyZWFtIHJzczsKICAgICAgICAgcnNzIDw8ICJBcHByb3goICIgPDwgOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkoIG1fdmFsdWUgKSA8PCAiICkiOwpAQCAtNDUxMyw4ICs1OTcwLDMxIEBACiAgICAgICAgIHJldHVybiBtYXJnaW5Db21wYXJpc29uKG1fdmFsdWUsIG90aGVyLCBtX21hcmdpbikgfHwgbWFyZ2luQ29tcGFyaXNvbihtX3ZhbHVlLCBvdGhlciwgbV9lcHNpbG9uICogKG1fc2NhbGUgKyBzdGQ6OmZhYnMobV92YWx1ZSkpKTsKICAgICB9CiAKKyAgICB2b2lkIEFwcHJveDo6c2V0TWFyZ2luKGRvdWJsZSBtYXJnaW4pIHsKKyAgICAgICAgQ0FUQ0hfRU5GT1JDRShtYXJnaW4gPj0gMCwKKyAgICAgICAgICAgICJJbnZhbGlkIEFwcHJveDo6bWFyZ2luOiAiIDw8IG1hcmdpbiA8PCAnLicKKyAgICAgICAgICAgIDw8ICIgQXBwcm94OjpNYXJnaW4gaGFzIHRvIGJlIG5vbi1uZWdhdGl2ZS4iKTsKKyAgICAgICAgbV9tYXJnaW4gPSBtYXJnaW47CisgICAgfQorCisgICAgdm9pZCBBcHByb3g6OnNldEVwc2lsb24oZG91YmxlIGVwc2lsb24pIHsKKyAgICAgICAgQ0FUQ0hfRU5GT1JDRShlcHNpbG9uID49IDAgJiYgZXBzaWxvbiA8PSAxLjAsCisgICAgICAgICAgICAiSW52YWxpZCBBcHByb3g6OmVwc2lsb246ICIgPDwgZXBzaWxvbiA8PCAnLicKKyAgICAgICAgICAgIDw8ICIgQXBwcm94OjplcHNpbG9uIGhhcyB0byBiZSBpbiBbMCwgMV0iKTsKKyAgICAgICAgbV9lcHNpbG9uID0gZXBzaWxvbjsKKyAgICB9CisKIH0gLy8gZW5kIG5hbWVzcGFjZSBEZXRhaWwKIAorbmFtZXNwYWNlIGxpdGVyYWxzIHsKKyAgICBEZXRhaWw6OkFwcHJveCBvcGVyYXRvciAiIiBfYShsb25nIGRvdWJsZSB2YWwpIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6QXBwcm94KHZhbCk7CisgICAgfQorICAgIERldGFpbDo6QXBwcm94IG9wZXJhdG9yICIiIF9hKHVuc2lnbmVkIGxvbmcgbG9uZyB2YWwpIHsKKyAgICAgICAgcmV0dXJuIERldGFpbDo6QXBwcm94KHZhbCk7CisgICAgfQorfSAvLyBlbmQgbmFtZXNwYWNlIGxpdGVyYWxzCisKIHN0ZDo6c3RyaW5nIFN0cmluZ01ha2VyPENhdGNoOjpEZXRhaWw6OkFwcHJveD46OmNvbnZlcnQoQ2F0Y2g6OkRldGFpbDo6QXBwcm94IGNvbnN0JiB2YWx1ZSkgewogICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpOwogfQpAQCAtNDUyMyw1OCArNjAwMyw2IEBACiAvLyBlbmQgY2F0Y2hfYXBwcm94LmNwcAogLy8gc3RhcnQgY2F0Y2hfYXNzZXJ0aW9uaGFuZGxlci5jcHAKIAotLy8gc3RhcnQgY2F0Y2hfY29udGV4dC5oCi0KLSNpbmNsdWRlIDxtZW1vcnk+Ci0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0KLSAgICBzdHJ1Y3QgSVJlc3VsdENhcHR1cmU7Ci0gICAgc3RydWN0IElSdW5uZXI7Ci0gICAgc3RydWN0IElDb25maWc7Ci0gICAgc3RydWN0IElNdXRhYmxlQ29udGV4dDsKLQotICAgIHVzaW5nIElDb25maWdQdHIgPSBzdGQ6OnNoYXJlZF9wdHI8SUNvbmZpZyBjb25zdD47Ci0KLSAgICBzdHJ1Y3QgSUNvbnRleHQKLSAgICB7Ci0gICAgICAgIHZpcnR1YWwgfklDb250ZXh0KCk7Ci0KLSAgICAgICAgdmlydHVhbCBJUmVzdWx0Q2FwdHVyZSogZ2V0UmVzdWx0Q2FwdHVyZSgpID0gMDsKLSAgICAgICAgdmlydHVhbCBJUnVubmVyKiBnZXRSdW5uZXIoKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgSUNvbmZpZ1B0ciBjb25zdCYgZ2V0Q29uZmlnKCkgY29uc3QgPSAwOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgSU11dGFibGVDb250ZXh0IDogSUNvbnRleHQKLSAgICB7Ci0gICAgICAgIHZpcnR1YWwgfklNdXRhYmxlQ29udGV4dCgpOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc2V0UmVzdWx0Q2FwdHVyZSggSVJlc3VsdENhcHR1cmUqIHJlc3VsdENhcHR1cmUgKSA9IDA7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRSdW5uZXIoIElSdW5uZXIqIHJ1bm5lciApID0gMDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHNldENvbmZpZyggSUNvbmZpZ1B0ciBjb25zdCYgY29uZmlnICkgPSAwOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RhdGljIElNdXRhYmxlQ29udGV4dCAqY3VycmVudENvbnRleHQ7Ci0gICAgICAgIGZyaWVuZCBJTXV0YWJsZUNvbnRleHQmIGdldEN1cnJlbnRNdXRhYmxlQ29udGV4dCgpOwotICAgICAgICBmcmllbmQgdm9pZCBjbGVhblVwQ29udGV4dCgpOwotICAgICAgICBzdGF0aWMgdm9pZCBjcmVhdGVDb250ZXh0KCk7Ci0gICAgfTsKLQotICAgIGlubGluZSBJTXV0YWJsZUNvbnRleHQmIGdldEN1cnJlbnRNdXRhYmxlQ29udGV4dCgpCi0gICAgewotICAgICAgICBpZiggIUlNdXRhYmxlQ29udGV4dDo6Y3VycmVudENvbnRleHQgKQotICAgICAgICAgICAgSU11dGFibGVDb250ZXh0OjpjcmVhdGVDb250ZXh0KCk7Ci0gICAgICAgIHJldHVybiAqSU11dGFibGVDb250ZXh0OjpjdXJyZW50Q29udGV4dDsKLSAgICB9Ci0KLSAgICBpbmxpbmUgSUNvbnRleHQmIGdldEN1cnJlbnRDb250ZXh0KCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBnZXRDdXJyZW50TXV0YWJsZUNvbnRleHQoKTsKLSAgICB9Ci0KLSAgICB2b2lkIGNsZWFuVXBDb250ZXh0KCk7Ci19Ci0KLS8vIGVuZCBjYXRjaF9jb250ZXh0LmgKIC8vIHN0YXJ0IGNhdGNoX2RlYnVnZ2VyLmgKIAogbmFtZXNwYWNlIENhdGNoIHsKQEAgLTQ2MDQsOSArNjAzMiw5IEBACiAjZW5kaWYKIAogI2lmZGVmIENBVENIX1RSQVAKLSAgICAjZGVmaW5lIENBVENIX0JSRUFLX0lOVE9fREVCVUdHRVIoKSBpZiggQ2F0Y2g6OmlzRGVidWdnZXJBY3RpdmUoKSApIHsgQ0FUQ0hfVFJBUCgpOyB9CisgICAgI2RlZmluZSBDQVRDSF9CUkVBS19JTlRPX0RFQlVHR0VSKCkgW117IGlmKCBDYXRjaDo6aXNEZWJ1Z2dlckFjdGl2ZSgpICkgeyBDQVRDSF9UUkFQKCk7IH0gfSgpCiAjZWxzZQotICAgICNkZWZpbmUgQ0FUQ0hfQlJFQUtfSU5UT19ERUJVR0dFUigpICh2b2lkKTAsIDAKKyAgICAjZGVmaW5lIENBVENIX0JSRUFLX0lOVE9fREVCVUdHRVIoKSBbXXt9KCkKICNlbmRpZgogCiAvLyBlbmQgY2F0Y2hfZGVidWdnZXIuaApAQCAtNDYxNCw5ICs2MDQyLDYgQEAKIAogLy8gc3RhcnQgY2F0Y2hfZmF0YWxfY29uZGl0aW9uLmgKIAotI2luY2x1ZGUgPHN0cmluZz4KLQotI2lmIGRlZmluZWQgKCBDQVRDSF9QTEFURk9STV9XSU5ET1dTICkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIC8vIHN0YXJ0IGNhdGNoX3dpbmRvd3NfaF9wcm94eS5oCiAKIApAQCAtNDY0NywxNiArNjA3Miw3IEBACiAjZW5kaWYgLy8gZGVmaW5lZChDQVRDSF9QTEFURk9STV9XSU5ET1dTKQogCiAvLyBlbmQgY2F0Y2hfd2luZG93c19oX3Byb3h5LmgKLQotIyAgaWYgIWRlZmluZWQgKCBDQVRDSF9DT05GSUdfV0lORE9XU19TRUggKQotCi1uYW1lc3BhY2UgQ2F0Y2ggewotICAgIHN0cnVjdCBGYXRhbENvbmRpdGlvbkhhbmRsZXIgewotICAgICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgfTsKLX0KLQotIyAgZWxzZSAvLyBDQVRDSF9DT05GSUdfV0lORE9XU19TRUggaXMgZGVmaW5lZAorI2lmIGRlZmluZWQoIENBVENIX0NPTkZJR19XSU5ET1dTX1NFSCApCiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKQEAgLTQ2NzUsMTkgKzYwOTEsNyBAQAogCiB9IC8vIG5hbWVzcGFjZSBDYXRjaAogCi0jICBlbmRpZiAvLyBDQVRDSF9DT05GSUdfV0lORE9XU19TRUgKLQotI2Vsc2UgLy8gTm90IFdpbmRvd3MgLSBhc3N1bWVkIHRvIGJlIFBPU0lYIGNvbXBhdGlibGUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotIyAgaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX1BPU0lYX1NJR05BTFMpCi0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgc3RydWN0IEZhdGFsQ29uZGl0aW9uSGFuZGxlciB7Ci0gICAgICAgIHZvaWQgcmVzZXQoKTsKLSAgICB9OwotfQotCi0jICBlbHNlIC8vIENBVENIX0NPTkZJR19QT1NJWF9TSUdOQUxTIGlzIGRlZmluZWQKKyNlbGlmIGRlZmluZWQgKCBDQVRDSF9DT05GSUdfUE9TSVhfU0lHTkFMUyApCiAKICNpbmNsdWRlIDxzaWduYWwuaD4KIApAQCAtNDY5Niw3ICs2MTAwLDcgQEAKICAgICBzdHJ1Y3QgRmF0YWxDb25kaXRpb25IYW5kbGVyIHsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc1NldDsKLSAgICAgICAgc3RhdGljIHN0cnVjdCBzaWdhY3Rpb24gb2xkU2lnQWN0aW9uc1tdOy8vIFtzaXplb2Yoc2lnbmFsRGVmcykgLyBzaXplb2YoU2lnbmFsRGVmcyldOworICAgICAgICBzdGF0aWMgc3RydWN0IHNpZ2FjdGlvbiBvbGRTaWdBY3Rpb25zW107CiAgICAgICAgIHN0YXRpYyBzdGFja190IG9sZFNpZ1N0YWNrOwogICAgICAgICBzdGF0aWMgY2hhciBhbHRTdGFja01lbVtdOwogCkBAIC00NzA5LDkgKzYxMTMsMTUgQEAKIAogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIAotIyAgZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX1BPU0lYX1NJR05BTFMKKyNlbHNlCiAKLSNlbmRpZiAvLyBub3QgV2luZG93cworbmFtZXNwYWNlIENhdGNoIHsKKyAgICBzdHJ1Y3QgRmF0YWxDb25kaXRpb25IYW5kbGVyIHsKKyAgICAgICAgdm9pZCByZXNldCgpOworICAgIH07Cit9CisKKyNlbmRpZgogCiAvLyBlbmQgY2F0Y2hfZmF0YWxfY29uZGl0aW9uLmgKICNpbmNsdWRlIDxzdHJpbmc+CkBAIC00NzcxLDEyICs2MTgxLDE2IEBACiAgICAgICAgIHZvaWQgc2VjdGlvbkVuZGVkKCBTZWN0aW9uRW5kSW5mbyBjb25zdCYgZW5kSW5mbyApIG92ZXJyaWRlOwogICAgICAgICB2b2lkIHNlY3Rpb25FbmRlZEVhcmx5KCBTZWN0aW9uRW5kSW5mbyBjb25zdCYgZW5kSW5mbyApIG92ZXJyaWRlOwogCisgICAgICAgIGF1dG8gYWNxdWlyZUdlbmVyYXRvclRyYWNrZXIoIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbyApIC0+IElHZW5lcmF0b3JUcmFja2VyJiBvdmVycmlkZTsKKwogICAgICAgICB2b2lkIGJlbmNobWFya1N0YXJ0aW5nKCBCZW5jaG1hcmtJbmZvIGNvbnN0JiBpbmZvICkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgYmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzIGNvbnN0JiBzdGF0cyApIG92ZXJyaWRlOwogCiAgICAgICAgIHZvaWQgcHVzaFNjb3BlZE1lc3NhZ2UoIE1lc3NhZ2VJbmZvIGNvbnN0JiBtZXNzYWdlICkgb3ZlcnJpZGU7CiAgICAgICAgIHZvaWQgcG9wU2NvcGVkTWVzc2FnZSggTWVzc2FnZUluZm8gY29uc3QmIG1lc3NhZ2UgKSBvdmVycmlkZTsKIAorICAgICAgICB2b2lkIGVtcGxhY2VVbnNjb3BlZE1lc3NhZ2UoIE1lc3NhZ2VCdWlsZGVyIGNvbnN0JiBidWlsZGVyICkgb3ZlcnJpZGU7CisKICAgICAgICAgc3RkOjpzdHJpbmcgZ2V0Q3VycmVudFRlc3ROYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICAgICAgY29uc3QgQXNzZXJ0aW9uUmVzdWx0KiBnZXRMYXN0UmVzdWx0KCkgY29uc3Qgb3ZlcnJpZGU7CkBAIC00NzkxLDcgKzYyMDUsNyBAQAogCiAgICAgcHVibGljOgogICAgICAgICAvLyAhVEJEIFdlIG5lZWQgdG8gZG8gdGhpcyBhbm90aGVyIHdheSEKLSAgICAgICAgYm9vbCBhYm9ydGluZygpIGNvbnN0IG92ZXJyaWRlOworICAgICAgICBib29sIGFib3J0aW5nKCkgY29uc3QgZmluYWw7CiAKICAgICBwcml2YXRlOgogCkBAIC00ODE3LDEzICs2MjMxLDE0IEBACiAgICAgICAgIFRlc3RSdW5JbmZvIG1fcnVuSW5mbzsKICAgICAgICAgSU11dGFibGVDb250ZXh0JiBtX2NvbnRleHQ7CiAgICAgICAgIFRlc3RDYXNlIGNvbnN0KiBtX2FjdGl2ZVRlc3RDYXNlID0gbnVsbHB0cjsKLSAgICAgICAgSVRyYWNrZXIqIG1fdGVzdENhc2VUcmFja2VyOworICAgICAgICBJVHJhY2tlciogbV90ZXN0Q2FzZVRyYWNrZXIgPSBudWxscHRyOwogICAgICAgICBPcHRpb248QXNzZXJ0aW9uUmVzdWx0PiBtX2xhc3RSZXN1bHQ7CiAKICAgICAgICAgSUNvbmZpZ1B0ciBtX2NvbmZpZzsKICAgICAgICAgVG90YWxzIG1fdG90YWxzOwogICAgICAgICBJU3RyZWFtaW5nUmVwb3J0ZXJQdHIgbV9yZXBvcnRlcjsKICAgICAgICAgc3RkOjp2ZWN0b3I8TWVzc2FnZUluZm8+IG1fbWVzc2FnZXM7CisgICAgICAgIHN0ZDo6dmVjdG9yPFNjb3BlZE1lc3NhZ2U+IG1fbWVzc2FnZVNjb3BlczsgLyogS2VlcHMgb3duZXJzIG9mIHNvLWNhbGxlZCB1bnNjb3BlZCBtZXNzYWdlcy4gKi8KICAgICAgICAgQXNzZXJ0aW9uSW5mbyBtX2xhc3RBc3NlcnRpb25JbmZvOwogICAgICAgICBzdGQ6OnZlY3RvcjxTZWN0aW9uRW5kSW5mbz4gbV91bmZpbmlzaGVkU2VjdGlvbnM7CiAgICAgICAgIHN0ZDo6dmVjdG9yPElUcmFja2VyKj4gbV9hY3RpdmVTZWN0aW9uczsKQEAgLTQ4MzgsOSArNjI1MywxMSBAQAogLy8gZW5kIGNhdGNoX3J1bl9jb250ZXh0LmgKIG5hbWVzcGFjZSBDYXRjaCB7CiAKLSAgICBhdXRvIG9wZXJhdG9yIDw8KCBzdGQ6Om9zdHJlYW0mIG9zLCBJVHJhbnNpZW50RXhwcmVzc2lvbiBjb25zdCYgZXhwciApIC0+IHN0ZDo6b3N0cmVhbSYgewotICAgICAgICBleHByLnN0cmVhbVJlY29uc3RydWN0ZWRFeHByZXNzaW9uKCBvcyApOwotICAgICAgICByZXR1cm4gb3M7CisgICAgbmFtZXNwYWNlIHsKKyAgICAgICAgYXV0byBvcGVyYXRvciA8PCggc3RkOjpvc3RyZWFtJiBvcywgSVRyYW5zaWVudEV4cHJlc3Npb24gY29uc3QmIGV4cHIgKSAtPiBzdGQ6Om9zdHJlYW0mIHsKKyAgICAgICAgICAgIGV4cHIuc3RyZWFtUmVjb25zdHJ1Y3RlZEV4cHJlc3Npb24oIG9zICk7CisgICAgICAgICAgICByZXR1cm4gb3M7CisgICAgICAgIH0KICAgICB9CiAKICAgICBMYXp5RXhwcmVzc2lvbjo6TGF6eUV4cHJlc3Npb24oIGJvb2wgaXNOZWdhdGVkICkKQEAgLTQ4NzAsNyArNjI4Nyw3IEBACiAgICAgfQogCiAgICAgQXNzZXJ0aW9uSGFuZGxlcjo6QXNzZXJ0aW9uSGFuZGxlcgotICAgICAgICAoICAgU3RyaW5nUmVmIG1hY3JvTmFtZSwKKyAgICAgICAgKCAgIFN0cmluZ1JlZiBjb25zdCYgbWFjcm9OYW1lLAogICAgICAgICAgICAgU291cmNlTGluZUluZm8gY29uc3QmIGxpbmVJbmZvLAogICAgICAgICAgICAgU3RyaW5nUmVmIGNhcHR1cmVkRXhwcmVzc2lvbiwKICAgICAgICAgICAgIFJlc3VsdERpc3Bvc2l0aW9uOjpGbGFncyByZXN1bHREaXNwb3NpdGlvbiApCkBAIC00ODk5LDggKzYzMTYsMTMgQEAKICAgICAgICAgICAgIC8vIChUbyBnbyBiYWNrIHRvIHRoZSB0ZXN0IGFuZCBjaGFuZ2UgZXhlY3V0aW9uLCBqdW1wIG92ZXIgdGhlIHRocm93LCBuZXh0KQogICAgICAgICAgICAgQ0FUQ0hfQlJFQUtfSU5UT19ERUJVR0dFUigpOwogICAgICAgICB9Ci0gICAgICAgIGlmKCBtX3JlYWN0aW9uLnNob3VsZFRocm93ICkKKyAgICAgICAgaWYgKG1fcmVhY3Rpb24uc2hvdWxkVGhyb3cpIHsKKyNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TKQogICAgICAgICAgICAgdGhyb3cgQ2F0Y2g6OlRlc3RGYWlsdXJlRXhjZXB0aW9uKCk7CisjZWxzZQorICAgICAgICAgICAgQ0FUQ0hfRVJST1IoICJUZXN0IGZhaWx1cmUgcmVxdWlyZXMgYWJvcnRpbmcgdGVzdCEiICk7CisjZW5kaWYKKyAgICAgICAgfQogICAgIH0KICAgICB2b2lkIEFzc2VydGlvbkhhbmRsZXI6OnNldENvbXBsZXRlZCgpIHsKICAgICAgICAgbV9jb21wbGV0ZWQgPSB0cnVlOwpAQCAtNDkyNyw3ICs2MzQ5LDcgQEAKIAogICAgIC8vIFRoaXMgaXMgdGhlIG92ZXJsb2FkIHRoYXQgdGFrZXMgYSBzdHJpbmcgYW5kIGluZmVycyB0aGUgRXF1YWxzIG1hdGNoZXIgZnJvbSBpdAogICAgIC8vIFRoZSBtb3JlIGdlbmVyYWwgb3ZlcmxvYWQsIHRoYXQgdGFrZXMgYW55IHN0cmluZyBtYXRjaGVyLCBpcyBpbiBjYXRjaF9jYXB0dXJlX21hdGNoZXJzLmNwcAotICAgIHZvaWQgaGFuZGxlRXhjZXB0aW9uTWF0Y2hFeHByKCBBc3NlcnRpb25IYW5kbGVyJiBoYW5kbGVyLCBzdGQ6OnN0cmluZyBjb25zdCYgc3RyLCBTdHJpbmdSZWYgbWF0Y2hlclN0cmluZyAgKSB7CisgICAgdm9pZCBoYW5kbGVFeGNlcHRpb25NYXRjaEV4cHIoIEFzc2VydGlvbkhhbmRsZXImIGhhbmRsZXIsIHN0ZDo6c3RyaW5nIGNvbnN0JiBzdHIsIFN0cmluZ1JlZiBjb25zdCYgbWF0Y2hlclN0cmluZyAgKSB7CiAgICAgICAgIGhhbmRsZUV4Y2VwdGlvbk1hdGNoRXhwciggaGFuZGxlciwgTWF0Y2hlcnM6OkVxdWFscyggc3RyICksIG1hdGNoZXJTdHJpbmcgKTsKICAgICB9CiAKQEAgLTQ5OTIsOSArNjQxNCw5IEBACiAgICAgICAgICAgICBleHByID0gbV9pbmZvLmNhcHR1cmVkRXhwcmVzc2lvbjsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBleHByLnJlc2VydmUoIG1faW5mby5tYWNyb05hbWUuc2l6ZSgpICsgbV9pbmZvLmNhcHR1cmVkRXhwcmVzc2lvbi5zaXplKCkgKyA0ICk7Ci0gICAgICAgICAgICBleHByICs9IG1faW5mby5tYWNyb05hbWUuY19zdHIoKTsKKyAgICAgICAgICAgIGV4cHIgKz0gbV9pbmZvLm1hY3JvTmFtZTsKICAgICAgICAgICAgIGV4cHIgKz0gIiggIjsKLSAgICAgICAgICAgIGV4cHIgKz0gbV9pbmZvLmNhcHR1cmVkRXhwcmVzc2lvbi5jX3N0cigpOworICAgICAgICAgICAgZXhwciArPSBtX2luZm8uY2FwdHVyZWRFeHByZXNzaW9uOwogICAgICAgICAgICAgZXhwciArPSAiICkiOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiBleHByOwpAQCAtNTA1Nyw5ICs2NDc5LDkgQEAKICAgICB1c2luZyBTdHJpbmdNYXRjaGVyID0gTWF0Y2hlcnM6OkltcGw6Ok1hdGNoZXJCYXNlPHN0ZDo6c3RyaW5nPjsKIAogICAgIC8vIFRoaXMgaXMgdGhlIGdlbmVyYWwgb3ZlcmxvYWQgdGhhdCB0YWtlcyBhIGFueSBzdHJpbmcgbWF0Y2hlcgotICAgIC8vIFRoZXJlIGlzIGFub3RoZXIgb3ZlcmxvYWQsIGluIGNhdGNoX2Fzc2VydGluaGFuZGxlci5oLy5jcHAsIHRoYXQgb25seSB0YWtlcyBhIHN0cmluZyBhbmQgaW5mZXJzCisgICAgLy8gVGhlcmUgaXMgYW5vdGhlciBvdmVybG9hZCwgaW4gY2F0Y2hfYXNzZXJ0aW9uaGFuZGxlci5oLy5jcHAsIHRoYXQgb25seSB0YWtlcyBhIHN0cmluZyBhbmQgaW5mZXJzCiAgICAgLy8gdGhlIEVxdWFscyBtYXRjaGVyIChzbyB0aGUgaGVhZGVyIGRvZXMgbm90IG1lbnRpb24gbWF0Y2hlcnMpCi0gICAgdm9pZCBoYW5kbGVFeGNlcHRpb25NYXRjaEV4cHIoIEFzc2VydGlvbkhhbmRsZXImIGhhbmRsZXIsIFN0cmluZ01hdGNoZXIgY29uc3QmIG1hdGNoZXIsIFN0cmluZ1JlZiBtYXRjaGVyU3RyaW5nICApIHsKKyAgICB2b2lkIGhhbmRsZUV4Y2VwdGlvbk1hdGNoRXhwciggQXNzZXJ0aW9uSGFuZGxlciYgaGFuZGxlciwgU3RyaW5nTWF0Y2hlciBjb25zdCYgbWF0Y2hlciwgU3RyaW5nUmVmIGNvbnN0JiBtYXRjaGVyU3RyaW5nICApIHsKICAgICAgICAgc3RkOjpzdHJpbmcgZXhjZXB0aW9uTWVzc2FnZSA9IENhdGNoOjp0cmFuc2xhdGVBY3RpdmVFeGNlcHRpb24oKTsKICAgICAgICAgTWF0Y2hFeHByPHN0ZDo6c3RyaW5nLCBTdHJpbmdNYXRjaGVyIGNvbnN0Jj4gZXhwciggZXhjZXB0aW9uTWVzc2FnZSwgbWF0Y2hlciwgbWF0Y2hlclN0cmluZyApOwogICAgICAgICBoYW5kbGVyLmhhbmRsZUV4cHIoIGV4cHIgKTsKQEAgLTUwOTUsNyArNjUxNyw3IEBACiAvLwogLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9waGlsc3F1YXJlZC9DbGFyYSBmb3IgbW9yZSBkZXRhaWxzCiAKLS8vIENsYXJhIHYxLjEuMQorLy8gQ2xhcmEgdjEuMS41CiAKIAogI2lmbmRlZiBDQVRDSF9DTEFSQV9DT05GSUdfQ09OU09MRV9XSURUSApAQCAtNTEwNiwxNCArNjUyOCwyMyBAQAogI2RlZmluZSBDQVRDSF9DTEFSQV9URVhURkxPV19DT05GSUdfQ09OU09MRV9XSURUSCBDQVRDSF9DTEFSQV9DT05GSUdfQ09OU09MRV9XSURUSAogI2VuZGlmCiAKKyNpZm5kZWYgQ0xBUkFfQ09ORklHX09QVElPTkFMX1RZUEUKKyNpZmRlZiBfX2hhc19pbmNsdWRlCisjaWYgX19oYXNfaW5jbHVkZSg8b3B0aW9uYWw+KSAmJiBfX2NwbHVzcGx1cyA+PSAyMDE3MDNMCisjaW5jbHVkZSA8b3B0aW9uYWw+CisjZGVmaW5lIENMQVJBX0NPTkZJR19PUFRJT05BTF9UWVBFIHN0ZDo6b3B0aW9uYWwKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKwogLy8gLS0tLS0tLS0tLS0gI2luY2x1ZGVkIGZyb20gY2xhcmFfdGV4dGZsb3cuaHBwIC0tLS0tLS0tLS0tCiAKIC8vIFRleHRGbG93Q3BwCiAvLwogLy8gQSBzaW5nbGUtaGVhZGVyIGxpYnJhcnkgZm9yIHdyYXBwaW5nIGFuZCBsYXlpbmcgb3V0IGJhc2ljIHRleHQsIGJ5IFBoaWwgTmFzaAogLy8KLS8vIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNEIDItQ2xhdXNlIGxpY2Vuc2UuCi0vLyBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUsIG9yIHRoZSBvbmUgYXQgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMi1DbGF1c2UKKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRS50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCiAvLwogLy8gVGhpcyBwcm9qZWN0IGlzIGhvc3RlZCBhdCBodHRwczovL2dpdGh1Yi5jb20vcGhpbHNxdWFyZWQvdGV4dGZsb3djcHAKIApAQCAtNTEyNywzMTQgKzY1NTgsMzI1IEBACiAjZGVmaW5lIENBVENIX0NMQVJBX1RFWFRGTE9XX0NPTkZJR19DT05TT0xFX1dJRFRIIDgwCiAjZW5kaWYKIAotbmFtZXNwYWNlIENhdGNoIHsgbmFtZXNwYWNlIGNsYXJhIHsgbmFtZXNwYWNlIFRleHRGbG93IHsKK25hbWVzcGFjZSBDYXRjaCB7CituYW1lc3BhY2UgY2xhcmEgeworbmFtZXNwYWNlIFRleHRGbG93IHsKIAotICAgIGlubGluZSBhdXRvIGlzV2hpdGVzcGFjZSggY2hhciBjICkgLT4gYm9vbCB7Ci0gICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBjaGFycyA9ICIgXHRcblxyIjsKLSAgICAgICAgcmV0dXJuIGNoYXJzLmZpbmQoIGMgKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKLSAgICB9Ci0gICAgaW5saW5lIGF1dG8gaXNCcmVha2FibGVCZWZvcmUoIGNoYXIgYyApIC0+IGJvb2wgewotICAgICAgICBzdGF0aWMgc3RkOjpzdHJpbmcgY2hhcnMgPSAiWyh7PHwiOwotICAgICAgICByZXR1cm4gY2hhcnMuZmluZCggYyApICE9IHN0ZDo6c3RyaW5nOjpucG9zOwotICAgIH0KLSAgICBpbmxpbmUgYXV0byBpc0JyZWFrYWJsZUFmdGVyKCBjaGFyIGMgKSAtPiBib29sIHsKLSAgICAgICAgc3RhdGljIHN0ZDo6c3RyaW5nIGNoYXJzID0gIl0pfT4uLDo7KistPSYvXFwiOwotICAgICAgICByZXR1cm4gY2hhcnMuZmluZCggYyApICE9IHN0ZDo6c3RyaW5nOjpucG9zOwotICAgIH0KK2lubGluZSBhdXRvIGlzV2hpdGVzcGFjZShjaGFyIGMpIC0+IGJvb2wgeworCXN0YXRpYyBzdGQ6OnN0cmluZyBjaGFycyA9ICIgXHRcblxyIjsKKwlyZXR1cm4gY2hhcnMuZmluZChjKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKK30KK2lubGluZSBhdXRvIGlzQnJlYWthYmxlQmVmb3JlKGNoYXIgYykgLT4gYm9vbCB7CisJc3RhdGljIHN0ZDo6c3RyaW5nIGNoYXJzID0gIlsoezx8IjsKKwlyZXR1cm4gY2hhcnMuZmluZChjKSAhPSBzdGQ6OnN0cmluZzo6bnBvczsKK30KK2lubGluZSBhdXRvIGlzQnJlYWthYmxlQWZ0ZXIoY2hhciBjKSAtPiBib29sIHsKKwlzdGF0aWMgc3RkOjpzdHJpbmcgY2hhcnMgPSAiXSl9Pi4sOjsqKy09Ji9cXCI7CisJcmV0dXJuIGNoYXJzLmZpbmQoYykgIT0gc3RkOjpzdHJpbmc6Om5wb3M7Cit9CiAKLSAgICBjbGFzcyBDb2x1bW5zOworY2xhc3MgQ29sdW1uczsKIAotICAgIGNsYXNzIENvbHVtbiB7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtX3N0cmluZ3M7Ci0gICAgICAgIHNpemVfdCBtX3dpZHRoID0gQ0FUQ0hfQ0xBUkFfVEVYVEZMT1dfQ09ORklHX0NPTlNPTEVfV0lEVEg7Ci0gICAgICAgIHNpemVfdCBtX2luZGVudCA9IDA7Ci0gICAgICAgIHNpemVfdCBtX2luaXRpYWxJbmRlbnQgPSBzdGQ6OnN0cmluZzo6bnBvczsKK2NsYXNzIENvbHVtbiB7CisJc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IG1fc3RyaW5nczsKKwlzaXplX3QgbV93aWR0aCA9IENBVENIX0NMQVJBX1RFWFRGTE9XX0NPTkZJR19DT05TT0xFX1dJRFRIOworCXNpemVfdCBtX2luZGVudCA9IDA7CisJc2l6ZV90IG1faW5pdGlhbEluZGVudCA9IHN0ZDo6c3RyaW5nOjpucG9zOwogCi0gICAgcHVibGljOgotICAgICAgICBjbGFzcyBpdGVyYXRvciB7Ci0gICAgICAgICAgICBmcmllbmQgQ29sdW1uOworcHVibGljOgorCWNsYXNzIGl0ZXJhdG9yIHsKKwkJZnJpZW5kIENvbHVtbjsKIAotICAgICAgICAgICAgQ29sdW1uIGNvbnN0JiBtX2NvbHVtbjsKLSAgICAgICAgICAgIHNpemVfdCBtX3N0cmluZ0luZGV4ID0gMDsKLSAgICAgICAgICAgIHNpemVfdCBtX3BvcyA9IDA7CisJCUNvbHVtbiBjb25zdCYgbV9jb2x1bW47CisJCXNpemVfdCBtX3N0cmluZ0luZGV4ID0gMDsKKwkJc2l6ZV90IG1fcG9zID0gMDsKIAotICAgICAgICAgICAgc2l6ZV90IG1fbGVuID0gMDsKLSAgICAgICAgICAgIHNpemVfdCBtX2VuZCA9IDA7Ci0gICAgICAgICAgICBib29sIG1fc3VmZml4ID0gZmFsc2U7CisJCXNpemVfdCBtX2xlbiA9IDA7CisJCXNpemVfdCBtX2VuZCA9IDA7CisJCWJvb2wgbV9zdWZmaXggPSBmYWxzZTsKIAotICAgICAgICAgICAgaXRlcmF0b3IoIENvbHVtbiBjb25zdCYgY29sdW1uLCBzaXplX3Qgc3RyaW5nSW5kZXggKQotICAgICAgICAgICAgOiAgIG1fY29sdW1uKCBjb2x1bW4gKSwKLSAgICAgICAgICAgICAgICBtX3N0cmluZ0luZGV4KCBzdHJpbmdJbmRleCApCi0gICAgICAgICAgICB7fQorCQlpdGVyYXRvcihDb2x1bW4gY29uc3QmIGNvbHVtbiwgc2l6ZV90IHN0cmluZ0luZGV4KQorCQkJOiBtX2NvbHVtbihjb2x1bW4pLAorCQkJbV9zdHJpbmdJbmRleChzdHJpbmdJbmRleCkge30KIAotICAgICAgICAgICAgYXV0byBsaW5lKCkgY29uc3QgLT4gc3RkOjpzdHJpbmcgY29uc3QmIHsgcmV0dXJuIG1fY29sdW1uLm1fc3RyaW5nc1ttX3N0cmluZ0luZGV4XTsgfQorCQlhdXRvIGxpbmUoKSBjb25zdCAtPiBzdGQ6OnN0cmluZyBjb25zdCYgeyByZXR1cm4gbV9jb2x1bW4ubV9zdHJpbmdzW21fc3RyaW5nSW5kZXhdOyB9CiAKLSAgICAgICAgICAgIGF1dG8gaXNCb3VuZGFyeSggc2l6ZV90IGF0ICkgY29uc3QgLT4gYm9vbCB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCBhdCA+IDAgKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoIGF0IDw9IGxpbmUoKS5zaXplKCkgKTsKKwkJYXV0byBpc0JvdW5kYXJ5KHNpemVfdCBhdCkgY29uc3QgLT4gYm9vbCB7CisJCQlhc3NlcnQoYXQgPiAwKTsKKwkJCWFzc2VydChhdCA8PSBsaW5lKCkuc2l6ZSgpKTsKIAotICAgICAgICAgICAgICAgIHJldHVybiBhdCA9PSBsaW5lKCkuc2l6ZSgpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICggaXNXaGl0ZXNwYWNlKCBsaW5lKClbYXRdICkgJiYgIWlzV2hpdGVzcGFjZSggbGluZSgpW2F0LTFdICkgKSB8fAotICAgICAgICAgICAgICAgICAgICAgICBpc0JyZWFrYWJsZUJlZm9yZSggbGluZSgpW2F0XSApIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgIGlzQnJlYWthYmxlQWZ0ZXIoIGxpbmUoKVthdC0xXSApOwotICAgICAgICAgICAgfQorCQkJcmV0dXJuIGF0ID09IGxpbmUoKS5zaXplKCkgfHwKKwkJCQkoaXNXaGl0ZXNwYWNlKGxpbmUoKVthdF0pICYmICFpc1doaXRlc3BhY2UobGluZSgpW2F0IC0gMV0pKSB8fAorCQkJCWlzQnJlYWthYmxlQmVmb3JlKGxpbmUoKVthdF0pIHx8CisJCQkJaXNCcmVha2FibGVBZnRlcihsaW5lKClbYXQgLSAxXSk7CisJCX0KIAotICAgICAgICAgICAgdm9pZCBjYWxjTGVuZ3RoKCkgewotICAgICAgICAgICAgICAgIGFzc2VydCggbV9zdHJpbmdJbmRleCA8IG1fY29sdW1uLm1fc3RyaW5ncy5zaXplKCkgKTsKKwkJdm9pZCBjYWxjTGVuZ3RoKCkgeworCQkJYXNzZXJ0KG1fc3RyaW5nSW5kZXggPCBtX2NvbHVtbi5tX3N0cmluZ3Muc2l6ZSgpKTsKIAotICAgICAgICAgICAgICAgIG1fc3VmZml4ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgYXV0byB3aWR0aCA9IG1fY29sdW1uLm1fd2lkdGgtaW5kZW50KCk7Ci0gICAgICAgICAgICAgICAgbV9lbmQgPSBtX3BvczsKLSAgICAgICAgICAgICAgICB3aGlsZSggbV9lbmQgPCBsaW5lKCkuc2l6ZSgpICYmIGxpbmUoKVttX2VuZF0gIT0gJ1xuJyApCi0gICAgICAgICAgICAgICAgICAgICsrbV9lbmQ7CisJCQltX3N1ZmZpeCA9IGZhbHNlOworCQkJYXV0byB3aWR0aCA9IG1fY29sdW1uLm1fd2lkdGggLSBpbmRlbnQoKTsKKwkJCW1fZW5kID0gbV9wb3M7CisJCQl3aGlsZSAobV9lbmQgPCBsaW5lKCkuc2l6ZSgpICYmIGxpbmUoKVttX2VuZF0gIT0gJ1xuJykKKwkJCQkrK21fZW5kOwogCi0gICAgICAgICAgICAgICAgaWYoIG1fZW5kIDwgbV9wb3MgKyB3aWR0aCApIHsKLSAgICAgICAgICAgICAgICAgICAgbV9sZW4gPSBtX2VuZCAtIG1fcG9zOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiA9IHdpZHRoOwotICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuID4gMCAmJiAhaXNCb3VuZGFyeShtX3BvcyArIGxlbikpCi0gICAgICAgICAgICAgICAgICAgICAgICAtLWxlbjsKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGxlbiA+IDAgJiYgaXNXaGl0ZXNwYWNlKCBsaW5lKClbbV9wb3MgKyBsZW4gLSAxXSApKQotICAgICAgICAgICAgICAgICAgICAgICAgLS1sZW47CisJCQlpZiAobV9lbmQgPCBtX3BvcyArIHdpZHRoKSB7CisJCQkJbV9sZW4gPSBtX2VuZCAtIG1fcG9zOworCQkJfSBlbHNlIHsKKwkJCQlzaXplX3QgbGVuID0gd2lkdGg7CisJCQkJd2hpbGUgKGxlbiA+IDAgJiYgIWlzQm91bmRhcnkobV9wb3MgKyBsZW4pKQorCQkJCQktLWxlbjsKKwkJCQl3aGlsZSAobGVuID4gMCAmJiBpc1doaXRlc3BhY2UobGluZSgpW21fcG9zICsgbGVuIC0gMV0pKQorCQkJCQktLWxlbjsKIAotICAgICAgICAgICAgICAgICAgICBpZiAobGVuID4gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9sZW4gPSBsZW47Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3N1ZmZpeCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2xlbiA9IHdpZHRoIC0gMTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KKwkJCQlpZiAobGVuID4gMCkgeworCQkJCQltX2xlbiA9IGxlbjsKKwkJCQl9IGVsc2UgeworCQkJCQltX3N1ZmZpeCA9IHRydWU7CisJCQkJCW1fbGVuID0gd2lkdGggLSAxOworCQkJCX0KKwkJCX0KKwkJfQogCi0gICAgICAgICAgICBhdXRvIGluZGVudCgpIGNvbnN0IC0+IHNpemVfdCB7Ci0gICAgICAgICAgICAgICAgYXV0byBpbml0aWFsID0gbV9wb3MgPT0gMCAmJiBtX3N0cmluZ0luZGV4ID09IDAgPyBtX2NvbHVtbi5tX2luaXRpYWxJbmRlbnQgOiBzdGQ6OnN0cmluZzo6bnBvczsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5pdGlhbCA9PSBzdGQ6OnN0cmluZzo6bnBvcyA/IG1fY29sdW1uLm1faW5kZW50IDogaW5pdGlhbDsKLSAgICAgICAgICAgIH0KKwkJYXV0byBpbmRlbnQoKSBjb25zdCAtPiBzaXplX3QgeworCQkJYXV0byBpbml0aWFsID0gbV9wb3MgPT0gMCAmJiBtX3N0cmluZ0luZGV4ID09IDAgPyBtX2NvbHVtbi5tX2luaXRpYWxJbmRlbnQgOiBzdGQ6OnN0cmluZzo6bnBvczsKKwkJCXJldHVybiBpbml0aWFsID09IHN0ZDo6c3RyaW5nOjpucG9zID8gbV9jb2x1bW4ubV9pbmRlbnQgOiBpbml0aWFsOworCQl9CiAKLSAgICAgICAgICAgIGF1dG8gYWRkSW5kZW50QW5kU3VmZml4KHN0ZDo6c3RyaW5nIGNvbnN0ICZwbGFpbikgY29uc3QgLT4gc3RkOjpzdHJpbmcgewotICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6OnN0cmluZyggaW5kZW50KCksICcgJyApICsgKG1fc3VmZml4ID8gcGxhaW4gKyAiLSIgOiBwbGFpbik7Ci0gICAgICAgICAgICB9CisJCWF1dG8gYWRkSW5kZW50QW5kU3VmZml4KHN0ZDo6c3RyaW5nIGNvbnN0ICZwbGFpbikgY29uc3QgLT4gc3RkOjpzdHJpbmcgeworCQkJcmV0dXJuIHN0ZDo6c3RyaW5nKGluZGVudCgpLCAnICcpICsgKG1fc3VmZml4ID8gcGxhaW4gKyAiLSIgOiBwbGFpbik7CisJCX0KIAotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBleHBsaWNpdCBpdGVyYXRvciggQ29sdW1uIGNvbnN0JiBjb2x1bW4gKSA6IG1fY29sdW1uKCBjb2x1bW4gKSB7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCBtX2NvbHVtbi5tX3dpZHRoID4gbV9jb2x1bW4ubV9pbmRlbnQgKTsKLSAgICAgICAgICAgICAgICBhc3NlcnQoIG1fY29sdW1uLm1faW5pdGlhbEluZGVudCA9PSBzdGQ6OnN0cmluZzo6bnBvcyB8fCBtX2NvbHVtbi5tX3dpZHRoID4gbV9jb2x1bW4ubV9pbml0aWFsSW5kZW50ICk7Ci0gICAgICAgICAgICAgICAgY2FsY0xlbmd0aCgpOwotICAgICAgICAgICAgICAgIGlmKCBtX2xlbiA9PSAwICkKLSAgICAgICAgICAgICAgICAgICAgbV9zdHJpbmdJbmRleCsrOyAvLyBFbXB0eSBzdHJpbmcKLSAgICAgICAgICAgIH0KKwlwdWJsaWM6CisJCXVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHN0ZDo6cHRyZGlmZl90OworCQl1c2luZyB2YWx1ZV90eXBlID0gc3RkOjpzdHJpbmc7CisJCXVzaW5nIHBvaW50ZXIgPSB2YWx1ZV90eXBlICogOworCQl1c2luZyByZWZlcmVuY2UgPSB2YWx1ZV90eXBlICYgOworCQl1c2luZyBpdGVyYXRvcl9jYXRlZ29yeSA9IHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWc7CiAKLSAgICAgICAgICAgIGF1dG8gb3BlcmF0b3IgKigpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nIHsKLSAgICAgICAgICAgICAgICBhc3NlcnQoIG1fc3RyaW5nSW5kZXggPCBtX2NvbHVtbi5tX3N0cmluZ3Muc2l6ZSgpICk7Ci0gICAgICAgICAgICAgICAgYXNzZXJ0KCBtX3BvcyA8PSBtX2VuZCApOwotICAgICAgICAgICAgICAgIGlmKCBtX3BvcyArIG1fY29sdW1uLm1fd2lkdGggPCBtX2VuZCApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRJbmRlbnRBbmRTdWZmaXgobGluZSgpLnN1YnN0cihtX3BvcywgbV9sZW4pKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRJbmRlbnRBbmRTdWZmaXgobGluZSgpLnN1YnN0cihtX3BvcywgbV9lbmQgLSBtX3BvcykpOwotICAgICAgICAgICAgfQorCQlleHBsaWNpdCBpdGVyYXRvcihDb2x1bW4gY29uc3QmIGNvbHVtbikgOiBtX2NvbHVtbihjb2x1bW4pIHsKKwkJCWFzc2VydChtX2NvbHVtbi5tX3dpZHRoID4gbV9jb2x1bW4ubV9pbmRlbnQpOworCQkJYXNzZXJ0KG1fY29sdW1uLm1faW5pdGlhbEluZGVudCA9PSBzdGQ6OnN0cmluZzo6bnBvcyB8fCBtX2NvbHVtbi5tX3dpZHRoID4gbV9jb2x1bW4ubV9pbml0aWFsSW5kZW50KTsKKwkJCWNhbGNMZW5ndGgoKTsKKwkJCWlmIChtX2xlbiA9PSAwKQorCQkJCW1fc3RyaW5nSW5kZXgrKzsgLy8gRW1wdHkgc3RyaW5nCisJCX0KIAotICAgICAgICAgICAgYXV0byBvcGVyYXRvciArKygpIC0+IGl0ZXJhdG9yJiB7Ci0gICAgICAgICAgICAgICAgbV9wb3MgKz0gbV9sZW47Ci0gICAgICAgICAgICAgICAgaWYoIG1fcG9zIDwgbGluZSgpLnNpemUoKSAmJiBsaW5lKClbbV9wb3NdID09ICdcbicgKQotICAgICAgICAgICAgICAgICAgICBtX3BvcyArPSAxOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgd2hpbGUoIG1fcG9zIDwgbGluZSgpLnNpemUoKSAmJiBpc1doaXRlc3BhY2UoIGxpbmUoKVttX3Bvc10gKSApCi0gICAgICAgICAgICAgICAgICAgICAgICArK21fcG9zOworCQlhdXRvIG9wZXJhdG9yICooKSBjb25zdCAtPiBzdGQ6OnN0cmluZyB7CisJCQlhc3NlcnQobV9zdHJpbmdJbmRleCA8IG1fY29sdW1uLm1fc3RyaW5ncy5zaXplKCkpOworCQkJYXNzZXJ0KG1fcG9zIDw9IG1fZW5kKTsKKwkJCXJldHVybiBhZGRJbmRlbnRBbmRTdWZmaXgobGluZSgpLnN1YnN0cihtX3BvcywgbV9sZW4pKTsKKwkJfQogCi0gICAgICAgICAgICAgICAgaWYoIG1fcG9zID09IGxpbmUoKS5zaXplKCkgKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fcG9zID0gMDsKLSAgICAgICAgICAgICAgICAgICAgKyttX3N0cmluZ0luZGV4OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiggbV9zdHJpbmdJbmRleCA8IG1fY29sdW1uLm1fc3RyaW5ncy5zaXplKCkgKQotICAgICAgICAgICAgICAgICAgICBjYWxjTGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0byBvcGVyYXRvciArKyhpbnQpIC0+IGl0ZXJhdG9yIHsKLSAgICAgICAgICAgICAgICBpdGVyYXRvciBwcmV2KCAqdGhpcyApOwotICAgICAgICAgICAgICAgIG9wZXJhdG9yKysoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJldjsKLSAgICAgICAgICAgIH0KKwkJYXV0byBvcGVyYXRvciArKygpIC0+IGl0ZXJhdG9yJiB7CisJCQltX3BvcyArPSBtX2xlbjsKKwkJCWlmIChtX3BvcyA8IGxpbmUoKS5zaXplKCkgJiYgbGluZSgpW21fcG9zXSA9PSAnXG4nKQorCQkJCW1fcG9zICs9IDE7CisJCQllbHNlCisJCQkJd2hpbGUgKG1fcG9zIDwgbGluZSgpLnNpemUoKSAmJiBpc1doaXRlc3BhY2UobGluZSgpW21fcG9zXSkpCisJCQkJCSsrbV9wb3M7CiAKLSAgICAgICAgICAgIGF1dG8gb3BlcmF0b3IgPT0oIGl0ZXJhdG9yIGNvbnN0JiBvdGhlciApIGNvbnN0IC0+IGJvb2wgewotICAgICAgICAgICAgICAgIHJldHVybgotICAgICAgICAgICAgICAgICAgICBtX3BvcyA9PSBvdGhlci5tX3BvcyAmJgotICAgICAgICAgICAgICAgICAgICBtX3N0cmluZ0luZGV4ID09IG90aGVyLm1fc3RyaW5nSW5kZXggJiYKLSAgICAgICAgICAgICAgICAgICAgJm1fY29sdW1uID09ICZvdGhlci5tX2NvbHVtbjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gb3BlcmF0b3IgIT0oIGl0ZXJhdG9yIGNvbnN0JiBvdGhlciApIGNvbnN0IC0+IGJvb2wgewotICAgICAgICAgICAgICAgIHJldHVybiAhb3BlcmF0b3I9PSggb3RoZXIgKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBpdGVyYXRvcjsKKwkJCWlmIChtX3BvcyA9PSBsaW5lKCkuc2l6ZSgpKSB7CisJCQkJbV9wb3MgPSAwOworCQkJCSsrbV9zdHJpbmdJbmRleDsKKwkJCX0KKwkJCWlmIChtX3N0cmluZ0luZGV4IDwgbV9jb2x1bW4ubV9zdHJpbmdzLnNpemUoKSkKKwkJCQljYWxjTGVuZ3RoKCk7CisJCQlyZXR1cm4gKnRoaXM7CisJCX0KKwkJYXV0byBvcGVyYXRvciArKyhpbnQpIC0+IGl0ZXJhdG9yIHsKKwkJCWl0ZXJhdG9yIHByZXYoKnRoaXMpOworCQkJb3BlcmF0b3IrKygpOworCQkJcmV0dXJuIHByZXY7CisJCX0KIAotICAgICAgICBleHBsaWNpdCBDb2x1bW4oIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0ICkgeyBtX3N0cmluZ3MucHVzaF9iYWNrKCB0ZXh0ICk7IH0KKwkJYXV0byBvcGVyYXRvciA9PShpdGVyYXRvciBjb25zdCYgb3RoZXIpIGNvbnN0IC0+IGJvb2wgeworCQkJcmV0dXJuCisJCQkJbV9wb3MgPT0gb3RoZXIubV9wb3MgJiYKKwkJCQltX3N0cmluZ0luZGV4ID09IG90aGVyLm1fc3RyaW5nSW5kZXggJiYKKwkJCQkmbV9jb2x1bW4gPT0gJm90aGVyLm1fY29sdW1uOworCQl9CisJCWF1dG8gb3BlcmF0b3IgIT0oaXRlcmF0b3IgY29uc3QmIG90aGVyKSBjb25zdCAtPiBib29sIHsKKwkJCXJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7CisJCX0KKwl9OworCXVzaW5nIGNvbnN0X2l0ZXJhdG9yID0gaXRlcmF0b3I7CiAKLSAgICAgICAgYXV0byB3aWR0aCggc2l6ZV90IG5ld1dpZHRoICkgLT4gQ29sdW1uJiB7Ci0gICAgICAgICAgICBhc3NlcnQoIG5ld1dpZHRoID4gMCApOwotICAgICAgICAgICAgbV93aWR0aCA9IG5ld1dpZHRoOwotICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICB9Ci0gICAgICAgIGF1dG8gaW5kZW50KCBzaXplX3QgbmV3SW5kZW50ICkgLT4gQ29sdW1uJiB7Ci0gICAgICAgICAgICBtX2luZGVudCA9IG5ld0luZGVudDsKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotICAgICAgICBhdXRvIGluaXRpYWxJbmRlbnQoIHNpemVfdCBuZXdJbmRlbnQgKSAtPiBDb2x1bW4mIHsKLSAgICAgICAgICAgIG1faW5pdGlhbEluZGVudCA9IG5ld0luZGVudDsKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQorCWV4cGxpY2l0IENvbHVtbihzdGQ6OnN0cmluZyBjb25zdCYgdGV4dCkgeyBtX3N0cmluZ3MucHVzaF9iYWNrKHRleHQpOyB9CiAKLSAgICAgICAgYXV0byB3aWR0aCgpIGNvbnN0IC0+IHNpemVfdCB7IHJldHVybiBtX3dpZHRoOyB9Ci0gICAgICAgIGF1dG8gYmVnaW4oKSBjb25zdCAtPiBpdGVyYXRvciB7IHJldHVybiBpdGVyYXRvciggKnRoaXMgKTsgfQotICAgICAgICBhdXRvIGVuZCgpIGNvbnN0IC0+IGl0ZXJhdG9yIHsgcmV0dXJuIHsgKnRoaXMsIG1fc3RyaW5ncy5zaXplKCkgfTsgfQorCWF1dG8gd2lkdGgoc2l6ZV90IG5ld1dpZHRoKSAtPiBDb2x1bW4mIHsKKwkJYXNzZXJ0KG5ld1dpZHRoID4gMCk7CisJCW1fd2lkdGggPSBuZXdXaWR0aDsKKwkJcmV0dXJuICp0aGlzOworCX0KKwlhdXRvIGluZGVudChzaXplX3QgbmV3SW5kZW50KSAtPiBDb2x1bW4mIHsKKwkJbV9pbmRlbnQgPSBuZXdJbmRlbnQ7CisJCXJldHVybiAqdGhpczsKKwl9CisJYXV0byBpbml0aWFsSW5kZW50KHNpemVfdCBuZXdJbmRlbnQpIC0+IENvbHVtbiYgeworCQltX2luaXRpYWxJbmRlbnQgPSBuZXdJbmRlbnQ7CisJCXJldHVybiAqdGhpczsKKwl9CiAKLSAgICAgICAgaW5saW5lIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8ICggc3RkOjpvc3RyZWFtJiBvcywgQ29sdW1uIGNvbnN0JiBjb2wgKSB7Ci0gICAgICAgICAgICBib29sIGZpcnN0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGZvciggYXV0byBsaW5lIDogY29sICkgewotICAgICAgICAgICAgICAgIGlmKCBmaXJzdCApCi0gICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBvcyA8PCAiXG4iOwotICAgICAgICAgICAgICAgIG9zIDw8ICBsaW5lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG9zOwotICAgICAgICB9CisJYXV0byB3aWR0aCgpIGNvbnN0IC0+IHNpemVfdCB7IHJldHVybiBtX3dpZHRoOyB9CisJYXV0byBiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yIHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzKTsgfQorCWF1dG8gZW5kKCkgY29uc3QgLT4gaXRlcmF0b3IgeyByZXR1cm4geyAqdGhpcywgbV9zdHJpbmdzLnNpemUoKSB9OyB9CiAKLSAgICAgICAgYXV0byBvcGVyYXRvciArICggQ29sdW1uIGNvbnN0JiBvdGhlciApIC0+IENvbHVtbnM7CisJaW5saW5lIGZyaWVuZCBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8IChzdGQ6Om9zdHJlYW0mIG9zLCBDb2x1bW4gY29uc3QmIGNvbCkgeworCQlib29sIGZpcnN0ID0gdHJ1ZTsKKwkJZm9yIChhdXRvIGxpbmUgOiBjb2wpIHsKKwkJCWlmIChmaXJzdCkKKwkJCQlmaXJzdCA9IGZhbHNlOworCQkJZWxzZQorCQkJCW9zIDw8ICJcbiI7CisJCQlvcyA8PCBsaW5lOworCQl9CisJCXJldHVybiBvczsKKwl9CiAKLSAgICAgICAgYXV0byB0b1N0cmluZygpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nIHsKLSAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3M7Ci0gICAgICAgICAgICBvc3MgPDwgKnRoaXM7Ci0gICAgICAgICAgICByZXR1cm4gb3NzLnN0cigpOwotICAgICAgICB9Ci0gICAgfTsKKwlhdXRvIG9wZXJhdG9yICsgKENvbHVtbiBjb25zdCYgb3RoZXIpLT5Db2x1bW5zOwogCi0gICAgY2xhc3MgU3BhY2VyIDogcHVibGljIENvbHVtbiB7CisJYXV0byB0b1N0cmluZygpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nIHsKKwkJc3RkOjpvc3RyaW5nc3RyZWFtIG9zczsKKwkJb3NzIDw8ICp0aGlzOworCQlyZXR1cm4gb3NzLnN0cigpOworCX0KK307CiAKLSAgICBwdWJsaWM6Ci0gICAgICAgIGV4cGxpY2l0IFNwYWNlciggc2l6ZV90IHNwYWNlV2lkdGggKSA6IENvbHVtbiggIiIgKSB7Ci0gICAgICAgICAgICB3aWR0aCggc3BhY2VXaWR0aCApOwotICAgICAgICB9Ci0gICAgfTsKK2NsYXNzIFNwYWNlciA6IHB1YmxpYyBDb2x1bW4gewogCi0gICAgY2xhc3MgQ29sdW1ucyB7Ci0gICAgICAgIHN0ZDo6dmVjdG9yPENvbHVtbj4gbV9jb2x1bW5zOworcHVibGljOgorCWV4cGxpY2l0IFNwYWNlcihzaXplX3Qgc3BhY2VXaWR0aCkgOiBDb2x1bW4oIiIpIHsKKwkJd2lkdGgoc3BhY2VXaWR0aCk7CisJfQorfTsKIAotICAgIHB1YmxpYzoKK2NsYXNzIENvbHVtbnMgeworCXN0ZDo6dmVjdG9yPENvbHVtbj4gbV9jb2x1bW5zOwogCi0gICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKLSAgICAgICAgICAgIGZyaWVuZCBDb2x1bW5zOwotICAgICAgICAgICAgc3RydWN0IEVuZFRhZyB7fTsKK3B1YmxpYzoKIAotICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Q29sdW1uPiBjb25zdCYgbV9jb2x1bW5zOwotICAgICAgICAgICAgc3RkOjp2ZWN0b3I8Q29sdW1uOjppdGVyYXRvcj4gbV9pdGVyYXRvcnM7Ci0gICAgICAgICAgICBzaXplX3QgbV9hY3RpdmVJdGVyYXRvcnM7CisJY2xhc3MgaXRlcmF0b3IgeworCQlmcmllbmQgQ29sdW1uczsKKwkJc3RydWN0IEVuZFRhZyB7fTsKIAotICAgICAgICAgICAgaXRlcmF0b3IoIENvbHVtbnMgY29uc3QmIGNvbHVtbnMsIEVuZFRhZyApCi0gICAgICAgICAgICA6ICAgbV9jb2x1bW5zKCBjb2x1bW5zLm1fY29sdW1ucyApLAotICAgICAgICAgICAgICAgIG1fYWN0aXZlSXRlcmF0b3JzKCAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtX2l0ZXJhdG9ycy5yZXNlcnZlKCBtX2NvbHVtbnMuc2l6ZSgpICk7CisJCXN0ZDo6dmVjdG9yPENvbHVtbj4gY29uc3QmIG1fY29sdW1uczsKKwkJc3RkOjp2ZWN0b3I8Q29sdW1uOjppdGVyYXRvcj4gbV9pdGVyYXRvcnM7CisJCXNpemVfdCBtX2FjdGl2ZUl0ZXJhdG9yczsKIAotICAgICAgICAgICAgICAgIGZvciggYXV0byBjb25zdCYgY29sIDogbV9jb2x1bW5zICkKLSAgICAgICAgICAgICAgICAgICAgbV9pdGVyYXRvcnMucHVzaF9iYWNrKCBjb2wuZW5kKCkgKTsKLSAgICAgICAgICAgIH0KKwkJaXRlcmF0b3IoQ29sdW1ucyBjb25zdCYgY29sdW1ucywgRW5kVGFnKQorCQkJOiBtX2NvbHVtbnMoY29sdW1ucy5tX2NvbHVtbnMpLAorCQkJbV9hY3RpdmVJdGVyYXRvcnMoMCkgeworCQkJbV9pdGVyYXRvcnMucmVzZXJ2ZShtX2NvbHVtbnMuc2l6ZSgpKTsKIAotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBleHBsaWNpdCBpdGVyYXRvciggQ29sdW1ucyBjb25zdCYgY29sdW1ucyApCi0gICAgICAgICAgICA6ICAgbV9jb2x1bW5zKCBjb2x1bW5zLm1fY29sdW1ucyApLAotICAgICAgICAgICAgICAgIG1fYWN0aXZlSXRlcmF0b3JzKCBtX2NvbHVtbnMuc2l6ZSgpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtX2l0ZXJhdG9ycy5yZXNlcnZlKCBtX2NvbHVtbnMuc2l6ZSgpICk7CisJCQlmb3IgKGF1dG8gY29uc3QmIGNvbCA6IG1fY29sdW1ucykKKwkJCQltX2l0ZXJhdG9ycy5wdXNoX2JhY2soY29sLmVuZCgpKTsKKwkJfQogCi0gICAgICAgICAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiBjb2wgOiBtX2NvbHVtbnMgKQotICAgICAgICAgICAgICAgICAgICBtX2l0ZXJhdG9ycy5wdXNoX2JhY2soIGNvbC5iZWdpbigpICk7Ci0gICAgICAgICAgICB9CisJcHVibGljOgorCQl1c2luZyBkaWZmZXJlbmNlX3R5cGUgPSBzdGQ6OnB0cmRpZmZfdDsKKwkJdXNpbmcgdmFsdWVfdHlwZSA9IHN0ZDo6c3RyaW5nOworCQl1c2luZyBwb2ludGVyID0gdmFsdWVfdHlwZSAqIDsKKwkJdXNpbmcgcmVmZXJlbmNlID0gdmFsdWVfdHlwZSAmIDsKKwkJdXNpbmcgaXRlcmF0b3JfY2F0ZWdvcnkgPSBzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnOwogCi0gICAgICAgICAgICBhdXRvIG9wZXJhdG9yID09KCBpdGVyYXRvciBjb25zdCYgb3RoZXIgKSBjb25zdCAtPiBib29sIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9pdGVyYXRvcnMgPT0gb3RoZXIubV9pdGVyYXRvcnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvIG9wZXJhdG9yICE9KCBpdGVyYXRvciBjb25zdCYgb3RoZXIgKSBjb25zdCAtPiBib29sIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9pdGVyYXRvcnMgIT0gb3RoZXIubV9pdGVyYXRvcnM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBhdXRvIG9wZXJhdG9yICooKSBjb25zdCAtPiBzdGQ6OnN0cmluZyB7Ci0gICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgcm93LCBwYWRkaW5nOworCQlleHBsaWNpdCBpdGVyYXRvcihDb2x1bW5zIGNvbnN0JiBjb2x1bW5zKQorCQkJOiBtX2NvbHVtbnMoY29sdW1ucy5tX2NvbHVtbnMpLAorCQkJbV9hY3RpdmVJdGVyYXRvcnMobV9jb2x1bW5zLnNpemUoKSkgeworCQkJbV9pdGVyYXRvcnMucmVzZXJ2ZShtX2NvbHVtbnMuc2l6ZSgpKTsKIAotICAgICAgICAgICAgICAgIGZvciggc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2x1bW5zLnNpemUoKTsgKytpICkgewotICAgICAgICAgICAgICAgICAgICBhdXRvIHdpZHRoID0gbV9jb2x1bW5zW2ldLndpZHRoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmKCBtX2l0ZXJhdG9yc1tpXSAhPSBtX2NvbHVtbnNbaV0uZW5kKCkgKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb2wgPSAqbV9pdGVyYXRvcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgICAgICByb3cgKz0gcGFkZGluZyArIGNvbDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBjb2wuc2l6ZSgpIDwgd2lkdGggKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmcgPSBzdGQ6OnN0cmluZyggd2lkdGggLSBjb2wuc2l6ZSgpLCAnICcgKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nID0gIiI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nICs9IHN0ZDo6c3RyaW5nKCB3aWR0aCwgJyAnICk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHJvdzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gb3BlcmF0b3IgKysoKSAtPiBpdGVyYXRvciYgewotICAgICAgICAgICAgICAgIGZvciggc2l6ZV90IGkgPSAwOyBpIDwgbV9jb2x1bW5zLnNpemUoKTsgKytpICkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9pdGVyYXRvcnNbaV0gIT0gbV9jb2x1bW5zW2ldLmVuZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgKyttX2l0ZXJhdG9yc1tpXTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0byBvcGVyYXRvciArKyhpbnQpIC0+IGl0ZXJhdG9yIHsKLSAgICAgICAgICAgICAgICBpdGVyYXRvciBwcmV2KCAqdGhpcyApOwotICAgICAgICAgICAgICAgIG9wZXJhdG9yKysoKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gcHJldjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfTsKLSAgICAgICAgdXNpbmcgY29uc3RfaXRlcmF0b3IgPSBpdGVyYXRvcjsKKwkJCWZvciAoYXV0byBjb25zdCYgY29sIDogbV9jb2x1bW5zKQorCQkJCW1faXRlcmF0b3JzLnB1c2hfYmFjayhjb2wuYmVnaW4oKSk7CisJCX0KIAotICAgICAgICBhdXRvIGJlZ2luKCkgY29uc3QgLT4gaXRlcmF0b3IgeyByZXR1cm4gaXRlcmF0b3IoICp0aGlzICk7IH0KLSAgICAgICAgYXV0byBlbmQoKSBjb25zdCAtPiBpdGVyYXRvciB7IHJldHVybiB7ICp0aGlzLCBpdGVyYXRvcjo6RW5kVGFnKCkgfTsgfQorCQlhdXRvIG9wZXJhdG9yID09KGl0ZXJhdG9yIGNvbnN0JiBvdGhlcikgY29uc3QgLT4gYm9vbCB7CisJCQlyZXR1cm4gbV9pdGVyYXRvcnMgPT0gb3RoZXIubV9pdGVyYXRvcnM7CisJCX0KKwkJYXV0byBvcGVyYXRvciAhPShpdGVyYXRvciBjb25zdCYgb3RoZXIpIGNvbnN0IC0+IGJvb2wgeworCQkJcmV0dXJuIG1faXRlcmF0b3JzICE9IG90aGVyLm1faXRlcmF0b3JzOworCQl9CisJCWF1dG8gb3BlcmF0b3IgKigpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nIHsKKwkJCXN0ZDo6c3RyaW5nIHJvdywgcGFkZGluZzsKIAotICAgICAgICBhdXRvIG9wZXJhdG9yICs9ICggQ29sdW1uIGNvbnN0JiBjb2wgKSAtPiBDb2x1bW5zJiB7Ci0gICAgICAgICAgICBtX2NvbHVtbnMucHVzaF9iYWNrKCBjb2wgKTsKLSAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgfQotICAgICAgICBhdXRvIG9wZXJhdG9yICsgKCBDb2x1bW4gY29uc3QmIGNvbCApIC0+IENvbHVtbnMgewotICAgICAgICAgICAgQ29sdW1ucyBjb21iaW5lZCA9ICp0aGlzOwotICAgICAgICAgICAgY29tYmluZWQgKz0gY29sOwotICAgICAgICAgICAgcmV0dXJuIGNvbWJpbmVkOwotICAgICAgICB9CisJCQlmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY29sdW1ucy5zaXplKCk7ICsraSkgeworCQkJCWF1dG8gd2lkdGggPSBtX2NvbHVtbnNbaV0ud2lkdGgoKTsKKwkJCQlpZiAobV9pdGVyYXRvcnNbaV0gIT0gbV9jb2x1bW5zW2ldLmVuZCgpKSB7CisJCQkJCXN0ZDo6c3RyaW5nIGNvbCA9ICptX2l0ZXJhdG9yc1tpXTsKKwkJCQkJcm93ICs9IHBhZGRpbmcgKyBjb2w7CisJCQkJCWlmIChjb2wuc2l6ZSgpIDwgd2lkdGgpCisJCQkJCQlwYWRkaW5nID0gc3RkOjpzdHJpbmcod2lkdGggLSBjb2wuc2l6ZSgpLCAnICcpOworCQkJCQllbHNlCisJCQkJCQlwYWRkaW5nID0gIiI7CisJCQkJfSBlbHNlIHsKKwkJCQkJcGFkZGluZyArPSBzdGQ6OnN0cmluZyh3aWR0aCwgJyAnKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gcm93OworCQl9CisJCWF1dG8gb3BlcmF0b3IgKysoKSAtPiBpdGVyYXRvciYgeworCQkJZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NvbHVtbnMuc2l6ZSgpOyArK2kpIHsKKwkJCQlpZiAobV9pdGVyYXRvcnNbaV0gIT0gbV9jb2x1bW5zW2ldLmVuZCgpKQorCQkJCQkrK21faXRlcmF0b3JzW2ldOworCQkJfQorCQkJcmV0dXJuICp0aGlzOworCQl9CisJCWF1dG8gb3BlcmF0b3IgKysoaW50KSAtPiBpdGVyYXRvciB7CisJCQlpdGVyYXRvciBwcmV2KCp0aGlzKTsKKwkJCW9wZXJhdG9yKysoKTsKKwkJCXJldHVybiBwcmV2OworCQl9CisJfTsKKwl1c2luZyBjb25zdF9pdGVyYXRvciA9IGl0ZXJhdG9yOwogCi0gICAgICAgIGlubGluZSBmcmllbmQgc3RkOjpvc3RyZWFtJiBvcGVyYXRvciA8PCAoIHN0ZDo6b3N0cmVhbSYgb3MsIENvbHVtbnMgY29uc3QmIGNvbHMgKSB7CisJYXV0byBiZWdpbigpIGNvbnN0IC0+IGl0ZXJhdG9yIHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzKTsgfQorCWF1dG8gZW5kKCkgY29uc3QgLT4gaXRlcmF0b3IgeyByZXR1cm4geyAqdGhpcywgaXRlcmF0b3I6OkVuZFRhZygpIH07IH0KIAotICAgICAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7Ci0gICAgICAgICAgICBmb3IoIGF1dG8gbGluZSA6IGNvbHMgKSB7Ci0gICAgICAgICAgICAgICAgaWYoIGZpcnN0ICkKLSAgICAgICAgICAgICAgICAgICAgZmlyc3QgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG9zIDw8ICJcbiI7Ci0gICAgICAgICAgICAgICAgb3MgPDwgbGluZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBvczsKLSAgICAgICAgfQorCWF1dG8gb3BlcmF0b3IgKz0gKENvbHVtbiBjb25zdCYgY29sKSAtPiBDb2x1bW5zJiB7CisJCW1fY29sdW1ucy5wdXNoX2JhY2soY29sKTsKKwkJcmV0dXJuICp0aGlzOworCX0KKwlhdXRvIG9wZXJhdG9yICsgKENvbHVtbiBjb25zdCYgY29sKSAtPiBDb2x1bW5zIHsKKwkJQ29sdW1ucyBjb21iaW5lZCA9ICp0aGlzOworCQljb21iaW5lZCArPSBjb2w7CisJCXJldHVybiBjb21iaW5lZDsKKwl9CiAKLSAgICAgICAgYXV0byB0b1N0cmluZygpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nIHsKLSAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBvc3M7Ci0gICAgICAgICAgICBvc3MgPDwgKnRoaXM7Ci0gICAgICAgICAgICByZXR1cm4gb3NzLnN0cigpOwotICAgICAgICB9Ci0gICAgfTsKKwlpbmxpbmUgZnJpZW5kIHN0ZDo6b3N0cmVhbSYgb3BlcmF0b3IgPDwgKHN0ZDo6b3N0cmVhbSYgb3MsIENvbHVtbnMgY29uc3QmIGNvbHMpIHsKIAotICAgIGlubGluZSBhdXRvIENvbHVtbjo6b3BlcmF0b3IgKyAoIENvbHVtbiBjb25zdCYgb3RoZXIgKSAtPiBDb2x1bW5zIHsKLSAgICAgICAgQ29sdW1ucyBjb2xzOwotICAgICAgICBjb2xzICs9ICp0aGlzOwotICAgICAgICBjb2xzICs9IG90aGVyOwotICAgICAgICByZXR1cm4gY29sczsKLSAgICB9Ci19fX0gLy8gbmFtZXNwYWNlIENhdGNoOjpjbGFyYTo6VGV4dEZsb3cKKwkJYm9vbCBmaXJzdCA9IHRydWU7CisJCWZvciAoYXV0byBsaW5lIDogY29scykgeworCQkJaWYgKGZpcnN0KQorCQkJCWZpcnN0ID0gZmFsc2U7CisJCQllbHNlCisJCQkJb3MgPDwgIlxuIjsKKwkJCW9zIDw8IGxpbmU7CisJCX0KKwkJcmV0dXJuIG9zOworCX0KKworCWF1dG8gdG9TdHJpbmcoKSBjb25zdCAtPiBzdGQ6OnN0cmluZyB7CisJCXN0ZDo6b3N0cmluZ3N0cmVhbSBvc3M7CisJCW9zcyA8PCAqdGhpczsKKwkJcmV0dXJuIG9zcy5zdHIoKTsKKwl9Cit9OworCitpbmxpbmUgYXV0byBDb2x1bW46Om9wZXJhdG9yICsgKENvbHVtbiBjb25zdCYgb3RoZXIpIC0+IENvbHVtbnMgeworCUNvbHVtbnMgY29sczsKKwljb2xzICs9ICp0aGlzOworCWNvbHMgKz0gb3RoZXI7CisJcmV0dXJuIGNvbHM7Cit9Cit9CisKK30KK30KIAogLy8gLS0tLS0tLS0tLS0gZW5kIG9mICNpbmNsdWRlIGZyb20gY2xhcmFfdGV4dGZsb3cuaHBwIC0tLS0tLS0tLS0tCiAvLyAuLi4uLi4uLi4uLiBiYWNrIGluIGNsYXJhLmhwcAogCisjaW5jbHVkZSA8Y2N0eXBlPgorI2luY2x1ZGUgPHN0cmluZz4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8c2V0PgogI2luY2x1ZGUgPGFsZ29yaXRobT4KQEAgLTU0NzEsMTEgKzY5MTMsOSBAQAogICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gbV9hcmdzOwogCiAgICAgcHVibGljOgotICAgICAgICBBcmdzKCBpbnQgYXJnYywgY2hhciAqYXJndltdICkgewotICAgICAgICAgICAgbV9leGVOYW1lID0gYXJndlswXTsKLSAgICAgICAgICAgIGZvciggaW50IGkgPSAxOyBpIDwgYXJnYzsgKytpICkKLSAgICAgICAgICAgICAgICBtX2FyZ3MucHVzaF9iYWNrKCBhcmd2W2ldICk7Ci0gICAgICAgIH0KKyAgICAgICAgQXJncyggaW50IGFyZ2MsIGNoYXIgY29uc3QqIGNvbnN0KiBhcmd2ICkKKyAgICAgICAgICAgIDogbV9leGVOYW1lKGFyZ3ZbMF0pLAorICAgICAgICAgICAgICBtX2FyZ3MoYXJndiArIDEsIGFyZ3YgKyBhcmdjKSB7fQogCiAgICAgICAgIEFyZ3MoIHN0ZDo6aW5pdGlhbGl6ZXJfbGlzdDxzdGQ6OnN0cmluZz4gYXJncyApCiAgICAgICAgIDogICBtX2V4ZU5hbWUoICphcmdzLmJlZ2luKCkgKSwKQEAgLTU2NjEsMTUgKzcxMDEsMTMgQEAKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBlbmZvcmNlT2soKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgICAgICAgICAvLyAhVEJEOiBJZiBubyBleGNlcHRpb25zLCBzdGQ6OnRlcm1pbmF0ZSBoZXJlIG9yIHNvbWV0aGluZwotICAgICAgICAgICAgc3dpdGNoKCBtX3R5cGUgKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRCYXNlOjpMb2dpY0Vycm9yOgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdGQ6OmxvZ2ljX2Vycm9yKCBtX2Vycm9yTWVzc2FnZSApOwotICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0QmFzZTo6UnVudGltZUVycm9yOgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoIG1fZXJyb3JNZXNzYWdlICk7Ci0gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRCYXNlOjpPazoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEVycm9ycyBzaG91bGRuJ3QgcmVhY2ggdGhpcyBwb2ludCwgYnV0IGlmIHRoZXkgZG8KKyAgICAgICAgICAgIC8vIHRoZSBhY3R1YWwgZXJyb3IgbWVzc2FnZSB3aWxsIGJlIGluIG1fZXJyb3JNZXNzYWdlCisgICAgICAgICAgICBhc3NlcnQoIG1fdHlwZSAhPSBSZXN1bHRCYXNlOjpMb2dpY0Vycm9yICk7CisgICAgICAgICAgICBhc3NlcnQoIG1fdHlwZSAhPSBSZXN1bHRCYXNlOjpSdW50aW1lRXJyb3IgKTsKKyAgICAgICAgICAgIGlmKCBtX3R5cGUgIT0gUmVzdWx0QmFzZTo6T2sgKQorICAgICAgICAgICAgICAgIHN0ZDo6YWJvcnQoKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0ZDo6c3RyaW5nIG1fZXJyb3JNZXNzYWdlOyAvLyBPbmx5IHBvcHVsYXRlZCBpZiByZXN1bHRUeXBlIGlzIGFuIGVycm9yCkBAIC01NzMwLDcgKzcxNjgsNyBAQAogICAgIH0KICAgICBpbmxpbmUgYXV0byBjb252ZXJ0SW50byggc3RkOjpzdHJpbmcgY29uc3QgJnNvdXJjZSwgYm9vbCAmdGFyZ2V0ICkgLT4gUGFyc2VyUmVzdWx0IHsKICAgICAgICAgc3RkOjpzdHJpbmcgc3JjTEMgPSBzb3VyY2U7Ci0gICAgICAgIHN0ZDo6dHJhbnNmb3JtKCBzcmNMQy5iZWdpbigpLCBzcmNMQy5lbmQoKSwgc3JjTEMuYmVnaW4oKSwgW10oIGNoYXIgYyApIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KCA6OnRvbG93ZXIoYykgKTsgfSApOworICAgICAgICBzdGQ6OnRyYW5zZm9ybSggc3JjTEMuYmVnaW4oKSwgc3JjTEMuZW5kKCksIHNyY0xDLmJlZ2luKCksIFtdKCBjaGFyIGMgKSB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPiggc3RkOjp0b2xvd2VyKGMpICk7IH0gKTsKICAgICAgICAgaWYgKHNyY0xDID09ICJ5IiB8fCBzcmNMQyA9PSAiMSIgfHwgc3JjTEMgPT0gInRydWUiIHx8IHNyY0xDID09ICJ5ZXMiIHx8IHNyY0xDID09ICJvbiIpCiAgICAgICAgICAgICB0YXJnZXQgPSB0cnVlOwogICAgICAgICBlbHNlIGlmIChzcmNMQyA9PSAibiIgfHwgc3JjTEMgPT0gIjAiIHx8IHNyY0xDID09ICJmYWxzZSIgfHwgc3JjTEMgPT0gIm5vIiB8fCBzcmNMQyA9PSAib2ZmIikKQEAgLTU3MzksNiArNzE3NywxNiBAQAogICAgICAgICAgICAgcmV0dXJuIFBhcnNlclJlc3VsdDo6cnVudGltZUVycm9yKCAiRXhwZWN0ZWQgYSBib29sZWFuIHZhbHVlIGJ1dCBkaWQgbm90IHJlY29nbmlzZTogJyIgKyBzb3VyY2UgKyAiJyIgKTsKICAgICAgICAgcmV0dXJuIFBhcnNlclJlc3VsdDo6b2soIFBhcnNlUmVzdWx0VHlwZTo6TWF0Y2hlZCApOwogICAgIH0KKyNpZmRlZiBDTEFSQV9DT05GSUdfT1BUSU9OQUxfVFlQRQorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIGF1dG8gY29udmVydEludG8oIHN0ZDo6c3RyaW5nIGNvbnN0ICZzb3VyY2UsIENMQVJBX0NPTkZJR19PUFRJT05BTF9UWVBFPFQ+JiB0YXJnZXQgKSAtPiBQYXJzZXJSZXN1bHQgeworICAgICAgICBUIHRlbXA7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gY29udmVydEludG8oIHNvdXJjZSwgdGVtcCApOworICAgICAgICBpZiggcmVzdWx0ICkKKyAgICAgICAgICAgIHRhcmdldCA9IHN0ZDo6bW92ZSh0ZW1wKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisjZW5kaWYgLy8gQ0xBUkFfQ09ORklHX09QVElPTkFMX1RZUEUKIAogICAgIHN0cnVjdCBOb25Db3B5YWJsZSB7CiAgICAgICAgIE5vbkNvcHlhYmxlKCkgPSBkZWZhdWx0OwpAQCAtNTc1MSwxMiArNzE5OSwxNCBAQAogICAgIHN0cnVjdCBCb3VuZFJlZiA6IE5vbkNvcHlhYmxlIHsKICAgICAgICAgdmlydHVhbCB+Qm91bmRSZWYoKSA9IGRlZmF1bHQ7CiAgICAgICAgIHZpcnR1YWwgYXV0byBpc0NvbnRhaW5lcigpIGNvbnN0IC0+IGJvb2wgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBhdXRvIGlzRmxhZygpIGNvbnN0IC0+IGJvb2wgeyByZXR1cm4gZmFsc2U7IH0KICAgICB9OwogICAgIHN0cnVjdCBCb3VuZFZhbHVlUmVmQmFzZSA6IEJvdW5kUmVmIHsKICAgICAgICAgdmlydHVhbCBhdXRvIHNldFZhbHVlKCBzdGQ6OnN0cmluZyBjb25zdCAmYXJnICkgLT4gUGFyc2VyUmVzdWx0ID0gMDsKICAgICB9OwogICAgIHN0cnVjdCBCb3VuZEZsYWdSZWZCYXNlIDogQm91bmRSZWYgewogICAgICAgICB2aXJ0dWFsIGF1dG8gc2V0RmxhZyggYm9vbCBmbGFnICkgLT4gUGFyc2VyUmVzdWx0ID0gMDsKKyAgICAgICAgdmlydHVhbCBhdXRvIGlzRmxhZygpIGNvbnN0IC0+IGJvb2wgeyByZXR1cm4gdHJ1ZTsgfQogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtNTk4Nyw3ICs3NDM3LDcgQEAKICAgICAgICAgICAgIGlmKCB0b2tlbi50eXBlICE9IFRva2VuVHlwZTo6QXJndW1lbnQgKQogICAgICAgICAgICAgICAgIHJldHVybiBJbnRlcm5hbFBhcnNlUmVzdWx0OjpvayggUGFyc2VTdGF0ZSggUGFyc2VSZXN1bHRUeXBlOjpOb01hdGNoLCByZW1haW5pbmdUb2tlbnMgKSApOwogCi0gICAgICAgICAgICBhc3NlcnQoIGR5bmFtaWNfY2FzdDxkZXRhaWw6OkJvdW5kVmFsdWVSZWZCYXNlKj4oIG1fcmVmLmdldCgpICkgKTsKKyAgICAgICAgICAgIGFzc2VydCggIW1fcmVmLT5pc0ZsYWcoKSApOwogICAgICAgICAgICAgYXV0byB2YWx1ZVJlZiA9IHN0YXRpY19jYXN0PGRldGFpbDo6Qm91bmRWYWx1ZVJlZkJhc2UqPiggbV9yZWYuZ2V0KCkgKTsKIAogICAgICAgICAgICAgYXV0byByZXN1bHQgPSB2YWx1ZVJlZi0+c2V0VmFsdWUoIHJlbWFpbmluZ1Rva2Vucy0+dG9rZW4gKTsKQEAgLTYwNjMsMTQgKzc1MTMsMTQgQEAKICAgICAgICAgICAgIGlmKCByZW1haW5pbmdUb2tlbnMgJiYgcmVtYWluaW5nVG9rZW5zLT50eXBlID09IFRva2VuVHlwZTo6T3B0aW9uICkgewogICAgICAgICAgICAgICAgIGF1dG8gY29uc3QgJnRva2VuID0gKnJlbWFpbmluZ1Rva2VuczsKICAgICAgICAgICAgICAgICBpZiggaXNNYXRjaCh0b2tlbi50b2tlbiApICkgewotICAgICAgICAgICAgICAgICAgICBpZiggYXV0byBmbGFnUmVmID0gZHluYW1pY19jYXN0PGRldGFpbDo6Qm91bmRGbGFnUmVmQmFzZSo+KCBtX3JlZi5nZXQoKSApICkgeworICAgICAgICAgICAgICAgICAgICBpZiggbV9yZWYtPmlzRmxhZygpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBmbGFnUmVmID0gc3RhdGljX2Nhc3Q8ZGV0YWlsOjpCb3VuZEZsYWdSZWZCYXNlKj4oIG1fcmVmLmdldCgpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGZsYWdSZWYtPnNldEZsYWcoIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhcmVzdWx0ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJuYWxQYXJzZVJlc3VsdCggcmVzdWx0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiggcmVzdWx0LnZhbHVlKCkgPT0gUGFyc2VSZXN1bHRUeXBlOjpTaG9ydENpcmN1aXRBbGwgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlcm5hbFBhcnNlUmVzdWx0OjpvayggUGFyc2VTdGF0ZSggcmVzdWx0LnZhbHVlKCksIHJlbWFpbmluZ1Rva2VucyApICk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoIGR5bmFtaWNfY2FzdDxkZXRhaWw6OkJvdW5kVmFsdWVSZWZCYXNlKj4oIG1fcmVmLmdldCgpICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdmFsdWVSZWYgPSBzdGF0aWNfY2FzdDxkZXRhaWw6OkJvdW5kVmFsdWVSZWZCYXNlKj4oIG1fcmVmLmdldCgpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICArK3JlbWFpbmluZ1Rva2VuczsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhcmVtYWluaW5nVG9rZW5zICkKQEAgLTYzNDAsOSArNzc5MCwxOSBAQAogICAgICAgICB1c2luZyBuYW1lc3BhY2UgY2xhcmE7CiAKICAgICAgICAgYXV0byBjb25zdCBzZXRXYXJuaW5nID0gWyZdKCBzdGQ6OnN0cmluZyBjb25zdCYgd2FybmluZyApIHsKLSAgICAgICAgICAgICAgICBpZiggd2FybmluZyAhPSAiTm9Bc3NlcnRpb25zIiApCisgICAgICAgICAgICAgICAgYXV0byB3YXJuaW5nU2V0ID0gWyZdKCkgeworICAgICAgICAgICAgICAgICAgICBpZiggd2FybmluZyA9PSAiTm9Bc3NlcnRpb25zIiApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2FybkFib3V0OjpOb0Fzc2VydGlvbnM7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB3YXJuaW5nID09ICJOb1Rlc3RzIiApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gV2FybkFib3V0OjpOb1Rlc3RzOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBXYXJuQWJvdXQ6Ok5vdGhpbmc7CisgICAgICAgICAgICAgICAgfSgpOworCisgICAgICAgICAgICAgICAgaWYgKHdhcm5pbmdTZXQgPT0gV2FybkFib3V0OjpOb3RoaW5nKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VyUmVzdWx0OjpydW50aW1lRXJyb3IoICJVbnJlY29nbmlzZWQgd2FybmluZzogJyIgKyB3YXJuaW5nICsgIiciICk7Ci0gICAgICAgICAgICAgICAgY29uZmlnLndhcm5pbmdzID0gc3RhdGljX2Nhc3Q8V2FybkFib3V0OjpXaGF0PiggY29uZmlnLndhcm5pbmdzIHwgV2FybkFib3V0OjpOb0Fzc2VydGlvbnMgKTsKKyAgICAgICAgICAgICAgICBjb25maWcud2FybmluZ3MgPSBzdGF0aWNfY2FzdDxXYXJuQWJvdXQ6OldoYXQ+KCBjb25maWcud2FybmluZ3MgfCB3YXJuaW5nU2V0ICk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlclJlc3VsdDo6b2soIFBhcnNlUmVzdWx0VHlwZTo6TWF0Y2hlZCApOwogICAgICAgICAgICAgfTsKICAgICAgICAgYXV0byBjb25zdCBsb2FkVGVzdE5hbWVzRnJvbUZpbGUgPSBbJl0oIHN0ZDo6c3RyaW5nIGNvbnN0JiBmaWxlbmFtZSApIHsKQEAgLTY0MTUsNiArNzg3NSwxOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZXJSZXN1bHQ6OnJ1bnRpbWVFcnJvciggIlVucmVjb2duaXNlZCB2ZXJib3NpdHksICciICsgdmVyYm9zaXR5ICsgIiciICk7CiAgICAgICAgICAgICByZXR1cm4gUGFyc2VyUmVzdWx0OjpvayggUGFyc2VSZXN1bHRUeXBlOjpNYXRjaGVkICk7CiAgICAgICAgIH07CisgICAgICAgIGF1dG8gY29uc3Qgc2V0UmVwb3J0ZXIgPSBbJl0oIHN0ZDo6c3RyaW5nIGNvbnN0JiByZXBvcnRlciApIHsKKyAgICAgICAgICAgIElSZXBvcnRlclJlZ2lzdHJ5OjpGYWN0b3J5TWFwIGNvbnN0JiBmYWN0b3JpZXMgPSBnZXRSZWdpc3RyeUh1YigpLmdldFJlcG9ydGVyUmVnaXN0cnkoKS5nZXRGYWN0b3JpZXMoKTsKKworICAgICAgICAgICAgYXV0byBsY1JlcG9ydGVyID0gdG9Mb3dlciggcmVwb3J0ZXIgKTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gZmFjdG9yaWVzLmZpbmQoIGxjUmVwb3J0ZXIgKTsKKworICAgICAgICAgICAgaWYoIGZhY3Rvcmllcy5lbmQoKSAhPSByZXN1bHQgKQorICAgICAgICAgICAgICAgIGNvbmZpZy5yZXBvcnRlck5hbWUgPSBsY1JlcG9ydGVyOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZXJSZXN1bHQ6OnJ1bnRpbWVFcnJvciggIlVucmVjb2duaXplZCByZXBvcnRlciwgJyIgKyByZXBvcnRlciArICInLiBDaGVjayBhdmFpbGFibGUgd2l0aCAtLWxpc3QtcmVwb3J0ZXJzIiApOworICAgICAgICAgICAgcmV0dXJuIFBhcnNlclJlc3VsdDo6b2soIFBhcnNlUmVzdWx0VHlwZTo6TWF0Y2hlZCApOworICAgICAgICB9OwogCiAgICAgICAgIGF1dG8gY2xpCiAgICAgICAgICAgICA9IEV4ZU5hbWUoIGNvbmZpZy5wcm9jZXNzTmFtZSApCkBAIC02NDQwLDcgKzc5MTIsNyBAQAogICAgICAgICAgICAgfCBPcHQoIGNvbmZpZy5vdXRwdXRGaWxlbmFtZSwgImZpbGVuYW1lIiApCiAgICAgICAgICAgICAgICAgWyItbyJdWyItLW91dCJdCiAgICAgICAgICAgICAgICAgKCAib3V0cHV0IGZpbGVuYW1lIiApCi0gICAgICAgICAgICB8IE9wdCggY29uZmlnLnJlcG9ydGVyTmFtZXMsICJuYW1lIiApCisgICAgICAgICAgICB8IE9wdCggc2V0UmVwb3J0ZXIsICJuYW1lIiApCiAgICAgICAgICAgICAgICAgWyItciJdWyItLXJlcG9ydGVyIl0KICAgICAgICAgICAgICAgICAoICJyZXBvcnRlciB0byB1c2UgKGRlZmF1bHRzIHRvIGNvbnNvbGUpIiApCiAgICAgICAgICAgICB8IE9wdCggY29uZmlnLm5hbWUsICJuYW1lIiApCkBAIC02NTE3LDcgKzc5ODksOSBAQAogICAgICAgICByZXR1cm4gbGluZSA9PSBvdGhlci5saW5lICYmIChmaWxlID09IG90aGVyLmZpbGUgfHwgc3RkOjpzdHJjbXAoZmlsZSwgb3RoZXIuZmlsZSkgPT0gMCk7CiAgICAgfQogICAgIGJvb2wgU291cmNlTGluZUluZm86Om9wZXJhdG9yIDwgKCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgb3RoZXIgKSBjb25zdCBub2V4Y2VwdCB7Ci0gICAgICAgIHJldHVybiBsaW5lIDwgb3RoZXIubGluZSB8fCAoIGxpbmUgPT0gb3RoZXIubGluZSAmJiAoc3RkOjpzdHJjbXAoZmlsZSwgb3RoZXIuZmlsZSkgPCAwKSk7CisgICAgICAgIC8vIFdlIGNhbiBhc3N1bWUgdGhhdCB0aGUgc2FtZSBmaWxlIHdpbGwgdXN1YWxseSBoYXZlIHRoZSBzYW1lIHBvaW50ZXIuCisgICAgICAgIC8vIFRodXMsIGlmIHRoZSBwb2ludGVycyBhcmUgdGhlIHNhbWUsIHRoZXJlIGlzIG5vIHBvaW50IGluIGNhbGxpbmcgdGhlIHN0cmNtcAorICAgICAgICByZXR1cm4gbGluZSA8IG90aGVyLmxpbmUgfHwgKCBsaW5lID09IG90aGVyLmxpbmUgJiYgZmlsZSAhPSBvdGhlci5maWxlICYmIChzdGQ6OnN0cmNtcChmaWxlLCBvdGhlci5maWxlKSA8IDApKTsKICAgICB9CiAKICAgICBzdGQ6Om9zdHJlYW0mIG9wZXJhdG9yIDw8ICggc3RkOjpvc3RyZWFtJiBvcywgU291cmNlTGluZUluZm8gY29uc3QmIGluZm8gKSB7CkBAIC02NTQwLDMzICs4MDE0LDIyIEBACiAvLyBlbmQgY2F0Y2hfY29tbW9uLmNwcAogLy8gc3RhcnQgY2F0Y2hfY29uZmlnLmNwcAogCi0vLyBzdGFydCBjYXRjaF9lbmZvcmNlLmgKLQotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KLSNpbmNsdWRlIDxpb3Nmd2Q+Ci0KLSNkZWZpbmUgQ0FUQ0hfUFJFUEFSRV9FWENFUFRJT04oIHR5cGUsIG1zZyApIFwKLSAgICB0eXBlKCBzdGF0aWNfY2FzdDxzdGQ6Om9zdHJpbmdzdHJlYW0mJj4oIENhdGNoOjpSZXVzYWJsZVN0cmluZ1N0cmVhbSgpLmdldCgpIDw8IG1zZyApLnN0cigpICkKLSNkZWZpbmUgQ0FUQ0hfSU5URVJOQUxfRVJST1IoIG1zZyApIFwKLSAgICB0aHJvdyBDQVRDSF9QUkVQQVJFX0VYQ0VQVElPTiggc3RkOjpsb2dpY19lcnJvciwgQ0FUQ0hfSU5URVJOQUxfTElORUlORk8gPDwgIjogSW50ZXJuYWwgQ2F0Y2ggZXJyb3I6ICIgPDwgbXNnKTsKLSNkZWZpbmUgQ0FUQ0hfRVJST1IoIG1zZyApIFwKLSAgICB0aHJvdyBDQVRDSF9QUkVQQVJFX0VYQ0VQVElPTiggc3RkOjpkb21haW5fZXJyb3IsIG1zZyApCi0jZGVmaW5lIENBVENIX0VORk9SQ0UoIGNvbmRpdGlvbiwgbXNnICkgXAotICAgIGRveyBpZiggIShjb25kaXRpb24pICkgQ0FUQ0hfRVJST1IoIG1zZyApOyB9IHdoaWxlKGZhbHNlKQotCi0vLyBlbmQgY2F0Y2hfZW5mb3JjZS5oCiBuYW1lc3BhY2UgQ2F0Y2ggewogCiAgICAgQ29uZmlnOjpDb25maWcoIENvbmZpZ0RhdGEgY29uc3QmIGRhdGEgKQogICAgIDogICBtX2RhdGEoIGRhdGEgKSwKICAgICAgICAgbV9zdHJlYW0oIG9wZW5TdHJlYW0oKSApCiAgICAgewotICAgICAgICBpZiggIWRhdGEudGVzdHNPclRhZ3MuZW1wdHkoKSApIHsKLSAgICAgICAgICAgIFRlc3RTcGVjUGFyc2VyIHBhcnNlciggSVRhZ0FsaWFzUmVnaXN0cnk6OmdldCgpICk7CisgICAgICAgIFRlc3RTcGVjUGFyc2VyIHBhcnNlcihJVGFnQWxpYXNSZWdpc3RyeTo6Z2V0KCkpOworICAgICAgICBpZiAoZGF0YS50ZXN0c09yVGFncy5lbXB0eSgpKSB7CisgICAgICAgICAgICBwYXJzZXIucGFyc2UoIn5bLl0iKTsgLy8gQWxsIG5vdCBoaWRkZW4gdGVzdHMKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIG1faGFzVGVzdEZpbHRlcnMgPSB0cnVlOwogICAgICAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiB0ZXN0T3JUYWdzIDogZGF0YS50ZXN0c09yVGFncyApCiAgICAgICAgICAgICAgICAgcGFyc2VyLnBhcnNlKCB0ZXN0T3JUYWdzICk7Ci0gICAgICAgICAgICBtX3Rlc3RTcGVjID0gcGFyc2VyLnRlc3RTcGVjKCk7CiAgICAgICAgIH0KKyAgICAgICAgbV90ZXN0U3BlYyA9IHBhcnNlci50ZXN0U3BlYygpOwogICAgIH0KIAogICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBDb25maWc6OmdldEZpbGVuYW1lKCkgY29uc3QgewpAQCAtNjU3OSwxMSArODA0MiwxMyBAQAogICAgIGJvb2wgQ29uZmlnOjpsaXN0UmVwb3J0ZXJzKCkgY29uc3QgICAgICB7IHJldHVybiBtX2RhdGEubGlzdFJlcG9ydGVyczsgfQogCiAgICAgc3RkOjpzdHJpbmcgQ29uZmlnOjpnZXRQcm9jZXNzTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5wcm9jZXNzTmFtZTsgfQorICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBDb25maWc6OmdldFJlcG9ydGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5yZXBvcnRlck5hbWU7IH0KIAotICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBjb25zdCYgQ29uZmlnOjpnZXRSZXBvcnRlck5hbWVzKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLnJlcG9ydGVyTmFtZXM7IH0KKyAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIENvbmZpZzo6Z2V0VGVzdHNPclRhZ3MoKSBjb25zdCB7IHJldHVybiBtX2RhdGEudGVzdHNPclRhZ3M7IH0KICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gY29uc3QmIENvbmZpZzo6Z2V0U2VjdGlvbnNUb1J1bigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zZWN0aW9uc1RvUnVuOyB9CiAKICAgICBUZXN0U3BlYyBjb25zdCYgQ29uZmlnOjp0ZXN0U3BlYygpIGNvbnN0IHsgcmV0dXJuIG1fdGVzdFNwZWM7IH0KKyAgICBib29sIENvbmZpZzo6aGFzVGVzdEZpbHRlcnMoKSBjb25zdCB7IHJldHVybiBtX2hhc1Rlc3RGaWx0ZXJzOyB9CiAKICAgICBib29sIENvbmZpZzo6c2hvd0hlbHAoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuc2hvd0hlbHA7IH0KIApAQCAtNjU5Miw3ICs4MDU3LDggQEAKICAgICBzdGQ6Om9zdHJlYW0mIENvbmZpZzo6c3RyZWFtKCkgY29uc3QgICAgICAgICAgICAgICB7IHJldHVybiBtX3N0cmVhbS0+c3RyZWFtKCk7IH0KICAgICBzdGQ6OnN0cmluZyBDb25maWc6Om5hbWUoKSBjb25zdCAgICAgICAgICAgICAgICAgICB7IHJldHVybiBtX2RhdGEubmFtZS5lbXB0eSgpID8gbV9kYXRhLnByb2Nlc3NOYW1lIDogbV9kYXRhLm5hbWU7IH0KICAgICBib29sIENvbmZpZzo6aW5jbHVkZVN1Y2Nlc3NmdWxSZXN1bHRzKCkgY29uc3QgICAgICB7IHJldHVybiBtX2RhdGEuc2hvd1N1Y2Nlc3NmdWxUZXN0czsgfQotICAgIGJvb2wgQ29uZmlnOjp3YXJuQWJvdXRNaXNzaW5nQXNzZXJ0aW9ucygpIGNvbnN0ICAgIHsgcmV0dXJuIG1fZGF0YS53YXJuaW5ncyAmIFdhcm5BYm91dDo6Tm9Bc3NlcnRpb25zOyB9CisgICAgYm9vbCBDb25maWc6Ondhcm5BYm91dE1pc3NpbmdBc3NlcnRpb25zKCkgY29uc3QgICAgeyByZXR1cm4gISEobV9kYXRhLndhcm5pbmdzICYgV2FybkFib3V0OjpOb0Fzc2VydGlvbnMpOyB9CisgICAgYm9vbCBDb25maWc6Ondhcm5BYm91dE5vVGVzdHMoKSBjb25zdCAgICAgICAgICAgICAgeyByZXR1cm4gISEobV9kYXRhLndhcm5pbmdzICYgV2FybkFib3V0OjpOb1Rlc3RzKTsgfQogICAgIFNob3dEdXJhdGlvbnM6Ok9yTm90IENvbmZpZzo6c2hvd0R1cmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5zaG93RHVyYXRpb25zOyB9CiAgICAgUnVuVGVzdHM6OkluV2hhdE9yZGVyIENvbmZpZzo6cnVuT3JkZXIoKSBjb25zdCAgICAgeyByZXR1cm4gbV9kYXRhLnJ1bk9yZGVyOyB9CiAgICAgdW5zaWduZWQgaW50IENvbmZpZzo6cm5nU2VlZCgpIGNvbnN0ICAgICAgICAgICAgICAgeyByZXR1cm4gbV9kYXRhLnJuZ1NlZWQ7IH0KQEAgLTY2OTEsOCArODE1NywxMiBAQAogICAgICAgICAgICAgICAgIGNhc2UgQ29sb3VyOjpCcmlnaHRSZWQ6ICAgICByZXR1cm4gc2V0VGV4dEF0dHJpYnV0ZSggRk9SRUdST1VORF9JTlRFTlNJVFkgfCBGT1JFR1JPVU5EX1JFRCApOwogICAgICAgICAgICAgICAgIGNhc2UgQ29sb3VyOjpCcmlnaHRHcmVlbjogICByZXR1cm4gc2V0VGV4dEF0dHJpYnV0ZSggRk9SRUdST1VORF9JTlRFTlNJVFkgfCBGT1JFR1JPVU5EX0dSRUVOICk7CiAgICAgICAgICAgICAgICAgY2FzZSBDb2xvdXI6OkJyaWdodFdoaXRlOiAgIHJldHVybiBzZXRUZXh0QXR0cmlidXRlKCBGT1JFR1JPVU5EX0lOVEVOU0lUWSB8IEZPUkVHUk9VTkRfR1JFRU4gfCBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfQkxVRSApOworICAgICAgICAgICAgICAgIGNhc2UgQ29sb3VyOjpCcmlnaHRZZWxsb3c6ICByZXR1cm4gc2V0VGV4dEF0dHJpYnV0ZSggRk9SRUdST1VORF9JTlRFTlNJVFkgfCBGT1JFR1JPVU5EX1JFRCB8IEZPUkVHUk9VTkRfR1JFRU4gKTsKIAogICAgICAgICAgICAgICAgIGNhc2UgQ29sb3VyOjpCcmlnaHQ6IENBVENIX0lOVEVSTkFMX0VSUk9SKCAibm90IGEgY29sb3VyIiApOworCisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgQ0FUQ0hfRVJST1IoICJVbmtub3duIGNvbG91ciByZXF1ZXN0ZWQiICk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIApAQCAtNjc1MCw4ICs4MjIwLDEwIEBACiAgICAgICAgICAgICAgICAgY2FzZSBDb2xvdXI6OkJyaWdodFJlZDogICAgIHJldHVybiBzZXRDb2xvdXIoICJbMTszMW0iICk7CiAgICAgICAgICAgICAgICAgY2FzZSBDb2xvdXI6OkJyaWdodEdyZWVuOiAgIHJldHVybiBzZXRDb2xvdXIoICJbMTszMm0iICk7CiAgICAgICAgICAgICAgICAgY2FzZSBDb2xvdXI6OkJyaWdodFdoaXRlOiAgIHJldHVybiBzZXRDb2xvdXIoICJbMTszN20iICk7CisgICAgICAgICAgICAgICAgY2FzZSBDb2xvdXI6OkJyaWdodFllbGxvdzogIHJldHVybiBzZXRDb2xvdXIoICJbMTszM20iICk7CiAKICAgICAgICAgICAgICAgICBjYXNlIENvbG91cjo6QnJpZ2h0OiBDQVRDSF9JTlRFUk5BTF9FUlJPUiggIm5vdCBhIGNvbG91ciIgKTsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OiBDQVRDSF9JTlRFUk5BTF9FUlJPUiggIlVua25vd24gY29sb3VyIHJlcXVlc3RlZCIgKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBzdGF0aWMgSUNvbG91ckltcGwqIGluc3RhbmNlKCkgewpAQCAtNjc2MSw3ICs4MjMzLDggQEAKIAogICAgIHByaXZhdGU6CiAgICAgICAgIHZvaWQgc2V0Q29sb3VyKCBjb25zdCBjaGFyKiBfZXNjYXBlQ29kZSApIHsKLSAgICAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgJ1wwMzMnIDw8IF9lc2NhcGVDb2RlOworICAgICAgICAgICAgZ2V0Q3VycmVudENvbnRleHQoKS5nZXRDb25maWcoKS0+c3RyZWFtKCkKKyAgICAgICAgICAgICAgICA8PCAnXDAzMycgPDwgX2VzY2FwZUNvZGU7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC02NzcwLDcgKzgyNDMsMTIgQEAKICNpZmRlZiBDQVRDSF9QTEFURk9STV9NQUMKICAgICAgICAgICAgICFpc0RlYnVnZ2VyQWN0aXZlKCkgJiYKICNlbmRpZgotICAgICAgICAgICAgaXNhdHR5KFNURE9VVF9GSUxFTk8pOworI2lmICEoZGVmaW5lZChfX0RKR1BQX18pICYmIGRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKSkKKyAgICAgICAgICAgIGlzYXR0eShTVERPVVRfRklMRU5PKQorI2Vsc2UKKyAgICAgICAgICAgIGZhbHNlCisjZW5kaWYKKyAgICAgICAgICAgIDsKICAgICB9CiAgICAgSUNvbG91ckltcGwqIHBsYXRmb3JtQ29sb3VySW5zdGFuY2UoKSB7CiAgICAgICAgIEVycm5vR3VhcmQgZ3VhcmQ7CkBAIC02OTA0LDEzICs4MzgyLDE2IEBACiAgICAgICAgICAgICA6Ok91dHB1dERlYnVnU3RyaW5nQSggdGV4dC5jX3N0cigpICk7CiAgICAgICAgIH0KICAgICB9CisKICNlbHNlCisKICAgICBuYW1lc3BhY2UgQ2F0Y2ggewogICAgICAgICB2b2lkIHdyaXRlVG9EZWJ1Z0NvbnNvbGUoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0ZXh0ICkgewogICAgICAgICAgICAgLy8gIVRCRDogTmVlZCBhIHZlcnNpb24gZm9yIE1hYy8gWENvZGUgYW5kIG90aGVyIElERXMKICAgICAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgdGV4dDsKICAgICAgICAgfQogICAgIH0KKwogI2VuZGlmIC8vIFBsYXRmb3JtCiAvLyBlbmQgY2F0Y2hfZGVidWdfY29uc29sZS5jcHAKIC8vIHN0YXJ0IGNhdGNoX2RlYnVnZ2VyLmNwcApAQCAtNzAzMSw2ICs4NTEyLDE5IEBACiAgICAgfQogfQogLy8gZW5kIGNhdGNoX2RlY29tcG9zZXIuY3BwCisvLyBzdGFydCBjYXRjaF9lbmZvcmNlLmNwcAorCituYW1lc3BhY2UgQ2F0Y2ggeworI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OUykgJiYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfRVhDRVBUSU9OU19DVVNUT01fSEFORExFUikKKyAgICBbW25vcmV0dXJuXV0KKyAgICB2b2lkIHRocm93X2V4Y2VwdGlvbihzdGQ6OmV4Y2VwdGlvbiBjb25zdCYgZSkgeworICAgICAgICBDYXRjaDo6Y2VycigpIDw8ICJDYXRjaCB3aWxsIHRlcm1pbmF0ZSBiZWNhdXNlIGl0IG5lZWRlZCB0byB0aHJvdyBhbiBleGNlcHRpb24uXG4iCisgICAgICAgICAgICAgICAgICAgICAgPDwgIlRoZSBtZXNzYWdlIHdhczogIiA8PCBlLndoYXQoKSA8PCAnXG4nOworICAgICAgICBzdGQ6OnRlcm1pbmF0ZSgpOworICAgIH0KKyNlbmRpZgorfSAvLyBuYW1lc3BhY2UgQ2F0Y2g7CisvLyBlbmQgY2F0Y2hfZW5mb3JjZS5jcHAKIC8vIHN0YXJ0IGNhdGNoX2Vycm5vX2d1YXJkLmNwcAogCiAjaW5jbHVkZSA8Y2Vycm5vPgpAQCAtNzA3Niw2ICs4NTcwLDcgQEAKICAgICAgICAgbV90cmFuc2xhdG9ycy5wdXNoX2JhY2soIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBJRXhjZXB0aW9uVHJhbnNsYXRvcj4oIHRyYW5zbGF0b3IgKSApOwogICAgIH0KIAorI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpCiAgICAgc3RkOjpzdHJpbmcgRXhjZXB0aW9uVHJhbnNsYXRvclJlZ2lzdHJ5Ojp0cmFuc2xhdGVBY3RpdmVFeGNlcHRpb24oKSBjb25zdCB7CiAgICAgICAgIHRyeSB7CiAjaWZkZWYgX19PQkpDX18KQEAgLTcxMTksMTEgKzg2MTQsMjMgQEAKICAgICB9CiAKICAgICBzdGQ6OnN0cmluZyBFeGNlcHRpb25UcmFuc2xhdG9yUmVnaXN0cnk6OnRyeVRyYW5zbGF0b3JzKCkgY29uc3QgewotICAgICAgICBpZiggbV90cmFuc2xhdG9ycy5lbXB0eSgpICkKKyAgICAgICAgaWYgKG1fdHJhbnNsYXRvcnMuZW1wdHkoKSkgewogICAgICAgICAgICAgc3RkOjpyZXRocm93X2V4Y2VwdGlvbihzdGQ6OmN1cnJlbnRfZXhjZXB0aW9uKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gbV90cmFuc2xhdG9yc1swXS0+dHJhbnNsYXRlKCBtX3RyYW5zbGF0b3JzLmJlZ2luKCkrMSwgbV90cmFuc2xhdG9ycy5lbmQoKSApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIG1fdHJhbnNsYXRvcnNbMF0tPnRyYW5zbGF0ZShtX3RyYW5zbGF0b3JzLmJlZ2luKCkgKyAxLCBtX3RyYW5zbGF0b3JzLmVuZCgpKTsKKyAgICAgICAgfQogICAgIH0KKworI2Vsc2UgLy8gXl4gRXhjZXB0aW9ucyBhcmUgZW5hYmxlZCAvLyBFeGNlcHRpb25zIGFyZSBkaXNhYmxlZCB2dgorICAgIHN0ZDo6c3RyaW5nIEV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeTo6dHJhbnNsYXRlQWN0aXZlRXhjZXB0aW9uKCkgY29uc3QgeworICAgICAgICBDQVRDSF9JTlRFUk5BTF9FUlJPUigiQXR0ZW1wdGVkIHRvIHRyYW5zbGF0ZSBhY3RpdmUgZXhjZXB0aW9uIHVuZGVyIENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMhIik7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgRXhjZXB0aW9uVHJhbnNsYXRvclJlZ2lzdHJ5Ojp0cnlUcmFuc2xhdG9ycygpIGNvbnN0IHsKKyAgICAgICAgQ0FUQ0hfSU5URVJOQUxfRVJST1IoIkF0dGVtcHRlZCB0byB1c2UgZXhjZXB0aW9uIHRyYW5zbGF0b3JzIHVuZGVyIENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMhIik7CisgICAgfQorI2VuZGlmCisKIH0KIC8vIGVuZCBjYXRjaF9leGNlcHRpb25fdHJhbnNsYXRvcl9yZWdpc3RyeS5jcHAKIC8vIHN0YXJ0IGNhdGNoX2ZhdGFsX2NvbmRpdGlvbi5jcHAKQEAgLTcxMzMsNiArODY0MCw4IEBACiAjICAgIHByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV21pc3NpbmctZmllbGQtaW5pdGlhbGl6ZXJzIgogI2VuZGlmCiAKKyNpZiBkZWZpbmVkKCBDQVRDSF9DT05GSUdfV0lORE9XU19TRUggKSB8fCBkZWZpbmVkKCBDQVRDSF9DT05GSUdfUE9TSVhfU0lHTkFMUyApCisKIG5hbWVzcGFjZSB7CiAgICAgLy8gUmVwb3J0IHRoZSBlcnJvciBjb25kaXRpb24KICAgICB2b2lkIHJlcG9ydEZhdGFsKCBjaGFyIGNvbnN0ICogY29uc3QgbWVzc2FnZSApIHsKQEAgLTcxNDAsMTUgKzg2NDksOSBAQAogICAgIH0KIH0KIAotI2lmIGRlZmluZWQgKCBDQVRDSF9QTEFURk9STV9XSU5ET1dTICkgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KKyNlbmRpZiAvLyBzaWduYWxzL1NFSCBoYW5kbGluZwogCi0jICBpZiAhZGVmaW5lZCAoIENBVENIX0NPTkZJR19XSU5ET1dTX1NFSCApCi0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgdm9pZCBGYXRhbENvbmRpdGlvbkhhbmRsZXI6OnJlc2V0KCkge30KLX0KLQotIyAgZWxzZSAvLyBDQVRDSF9DT05GSUdfV0lORE9XU19TRUggaXMgZGVmaW5lZAorI2lmIGRlZmluZWQoIENBVENIX0NPTkZJR19XSU5ET1dTX1NFSCApCiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAgICAgc3RydWN0IFNpZ25hbERlZnMgeyBEV09SRCBpZDsgY29uc3QgY2hhciogbmFtZTsgfTsKQEAgLTcxODgsNyArODY5MSw2IEBACiAKICAgICB2b2lkIEZhdGFsQ29uZGl0aW9uSGFuZGxlcjo6cmVzZXQoKSB7CiAgICAgICAgIGlmIChpc1NldCkgewotICAgICAgICAgICAgLy8gVW5yZWdpc3RlciBoYW5kbGVyIGFuZCByZXN0b3JlIHRoZSBvbGQgZ3VhcmFudGVlCiAgICAgICAgICAgICBSZW1vdmVWZWN0b3JlZEV4Y2VwdGlvbkhhbmRsZXIoZXhjZXB0aW9uSGFuZGxlckhhbmRsZSk7CiAgICAgICAgICAgICBTZXRUaHJlYWRTdGFja0d1YXJhbnRlZSgmZ3VhcmFudGVlU2l6ZSk7CiAgICAgICAgICAgICBleGNlcHRpb25IYW5kbGVySGFuZGxlID0gbnVsbHB0cjsKQEAgLTcyMDYsMTkgKzg3MDgsNyBAQAogCiB9IC8vIG5hbWVzcGFjZSBDYXRjaAogCi0jICBlbmRpZiAvLyBDQVRDSF9DT05GSUdfV0lORE9XU19TRUgKLQotI2Vsc2UgLy8gTm90IFdpbmRvd3MgLSBhc3N1bWVkIHRvIGJlIFBPU0lYIGNvbXBhdGlibGUgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLQotIyAgaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX1BPU0lYX1NJR05BTFMpCi0KLW5hbWVzcGFjZSBDYXRjaCB7Ci0gICAgdm9pZCBGYXRhbENvbmRpdGlvbkhhbmRsZXI6OnJlc2V0KCkge30KLX0KLQotIyAgZWxzZSAvLyBDQVRDSF9DT05GSUdfUE9TSVhfU0lHTkFMUyBpcyBkZWZpbmVkCi0KLSNpbmNsdWRlIDxzaWduYWwuaD4KKyNlbGlmIGRlZmluZWQoIENBVENIX0NPTkZJR19QT1NJWF9TSUdOQUxTICkKIAogbmFtZXNwYWNlIENhdGNoIHsKIApAQCAtNzIyNiw2ICs4NzE2LDExIEBACiAgICAgICAgIGludCBpZDsKICAgICAgICAgY29uc3QgY2hhciogbmFtZTsKICAgICB9OworCisgICAgLy8gMzJrYiBmb3IgdGhlIGFsdGVybmF0ZSBzdGFjayBzZWVtcyB0byBiZSBzdWZmaWNpZW50LiBIb3dldmVyLCB0aGlzIHZhbHVlCisgICAgLy8gaXMgZXhwZXJpbWVudGFsbHkgZGV0ZXJtaW5lZCwgc28gdGhhdCdzIG5vdCBndWFyYW50ZWVkLgorICAgIGNvbnN0ZXhwciBzdGF0aWMgc3RkOjpzaXplX3Qgc2lnU3RhY2tTaXplID0gMzI3NjggPj0gTUlOU0lHU1RLU1ogPyAzMjc2OCA6IE1JTlNJR1NUS1NaOworCiAgICAgc3RhdGljIFNpZ25hbERlZnMgc2lnbmFsRGVmc1tdID0gewogICAgICAgICB7IFNJR0lOVCwgICJTSUdJTlQgLSBUZXJtaW5hbCBpbnRlcnJ1cHQgc2lnbmFsIiB9LAogICAgICAgICB7IFNJR0lMTCwgICJTSUdJTEwgLSBJbGxlZ2FsIGluc3RydWN0aW9uIHNpZ25hbCIgfSwKQEAgLTcyNTIsNyArODc0Nyw3IEBACiAgICAgICAgIGlzU2V0ID0gdHJ1ZTsKICAgICAgICAgc3RhY2tfdCBzaWdTdGFjazsKICAgICAgICAgc2lnU3RhY2suc3Nfc3AgPSBhbHRTdGFja01lbTsKLSAgICAgICAgc2lnU3RhY2suc3Nfc2l6ZSA9IFNJR1NUS1NaOworICAgICAgICBzaWdTdGFjay5zc19zaXplID0gc2lnU3RhY2tTaXplOwogICAgICAgICBzaWdTdGFjay5zc19mbGFncyA9IDA7CiAgICAgICAgIHNpZ2FsdHN0YWNrKCZzaWdTdGFjaywgJm9sZFNpZ1N0YWNrKTsKICAgICAgICAgc3RydWN0IHNpZ2FjdGlvbiBzYSA9IHsgfTsKQEAgLTcyODMsMTggKzg3NzgsNjIgQEAKICAgICBib29sIEZhdGFsQ29uZGl0aW9uSGFuZGxlcjo6aXNTZXQgPSBmYWxzZTsKICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIEZhdGFsQ29uZGl0aW9uSGFuZGxlcjo6b2xkU2lnQWN0aW9uc1tzaXplb2Yoc2lnbmFsRGVmcykvc2l6ZW9mKFNpZ25hbERlZnMpXSA9IHt9OwogICAgIHN0YWNrX3QgRmF0YWxDb25kaXRpb25IYW5kbGVyOjpvbGRTaWdTdGFjayA9IHt9OwotICAgIGNoYXIgRmF0YWxDb25kaXRpb25IYW5kbGVyOjphbHRTdGFja01lbVtTSUdTVEtTWl0gPSB7fTsKKyAgICBjaGFyIEZhdGFsQ29uZGl0aW9uSGFuZGxlcjo6YWx0U3RhY2tNZW1bc2lnU3RhY2tTaXplXSA9IHt9OwogCiB9IC8vIG5hbWVzcGFjZSBDYXRjaAogCi0jICBlbmRpZiAvLyBDQVRDSF9DT05GSUdfUE9TSVhfU0lHTkFMUworI2Vsc2UKIAotI2VuZGlmIC8vIG5vdCBXaW5kb3dzCituYW1lc3BhY2UgQ2F0Y2ggeworICAgIHZvaWQgRmF0YWxDb25kaXRpb25IYW5kbGVyOjpyZXNldCgpIHt9Cit9CisKKyNlbmRpZiAvLyBzaWduYWxzL1NFSCBoYW5kbGluZwogCiAjaWYgZGVmaW5lZChfX0dOVUNfXykKICMgICAgcHJhZ21hIEdDQyBkaWFnbm9zdGljIHBvcAogI2VuZGlmCiAvLyBlbmQgY2F0Y2hfZmF0YWxfY29uZGl0aW9uLmNwcAorLy8gc3RhcnQgY2F0Y2hfZ2VuZXJhdG9ycy5jcHAKKworLy8gc3RhcnQgY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuaAorCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPHJhbmRvbT4KKworbmFtZXNwYWNlIENhdGNoIHsKKworICAgIHN0cnVjdCBJQ29uZmlnOworCisgICAgc3RkOjptdDE5OTM3JiBybmcoKTsKKyAgICB2b2lkIHNlZWRSbmcoIElDb25maWcgY29uc3QmIGNvbmZpZyApOworICAgIHVuc2lnbmVkIGludCBybmdTZWVkKCk7CisKK30KKworLy8gZW5kIGNhdGNoX3JhbmRvbV9udW1iZXJfZ2VuZXJhdG9yLmgKKyNpbmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8c2V0PgorCituYW1lc3BhY2UgQ2F0Y2ggeworCitJR2VuZXJhdG9yVHJhY2tlcjo6fklHZW5lcmF0b3JUcmFja2VyKCkge30KKworY29uc3QgY2hhciogR2VuZXJhdG9yRXhjZXB0aW9uOjp3aGF0KCkgY29uc3Qgbm9leGNlcHQgeworICAgIHJldHVybiBtX21zZzsKK30KKworbmFtZXNwYWNlIEdlbmVyYXRvcnMgeworCisgICAgR2VuZXJhdG9yVW50eXBlZEJhc2U6On5HZW5lcmF0b3JVbnR5cGVkQmFzZSgpIHt9CisKKyAgICBhdXRvIGFjcXVpcmVHZW5lcmF0b3JUcmFja2VyKCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgbGluZUluZm8gKSAtPiBJR2VuZXJhdG9yVHJhY2tlciYgeworICAgICAgICByZXR1cm4gZ2V0UmVzdWx0Q2FwdHVyZSgpLmFjcXVpcmVHZW5lcmF0b3JUcmFja2VyKCBsaW5lSW5mbyApOworICAgIH0KKworfSAvLyBuYW1lc3BhY2UgR2VuZXJhdG9ycworfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKKy8vIGVuZCBjYXRjaF9nZW5lcmF0b3JzLmNwcAogLy8gc3RhcnQgY2F0Y2hfaW50ZXJmYWNlc19jYXB0dXJlLmNwcAogCiBuYW1lc3BhY2UgQ2F0Y2ggewpAQCAtNzMyMywxNiArODg2MiwyMSBAQAogLy8gZW5kIGNhdGNoX2ludGVyZmFjZXNfcmVnaXN0cnlfaHViLmNwcAogLy8gc3RhcnQgY2F0Y2hfaW50ZXJmYWNlc19yZXBvcnRlci5jcHAKIAotLy8gc3RhcnQgY2F0Y2hfcmVwb3J0ZXJfbXVsdGkuaAorLy8gc3RhcnQgY2F0Y2hfcmVwb3J0ZXJfbGlzdGVuaW5nLmgKIAogbmFtZXNwYWNlIENhdGNoIHsKIAotICAgIGNsYXNzIE11bHRpcGxlUmVwb3J0ZXJzIDogcHVibGljIElTdHJlYW1pbmdSZXBvcnRlciB7CisgICAgY2xhc3MgTGlzdGVuaW5nUmVwb3J0ZXIgOiBwdWJsaWMgSVN0cmVhbWluZ1JlcG9ydGVyIHsKICAgICAgICAgdXNpbmcgUmVwb3J0ZXJzID0gc3RkOjp2ZWN0b3I8SVN0cmVhbWluZ1JlcG9ydGVyUHRyPjsKLSAgICAgICAgUmVwb3J0ZXJzIG1fcmVwb3J0ZXJzOworICAgICAgICBSZXBvcnRlcnMgbV9saXN0ZW5lcnM7CisgICAgICAgIElTdHJlYW1pbmdSZXBvcnRlclB0ciBtX3JlcG9ydGVyID0gbnVsbHB0cjsKKyAgICAgICAgUmVwb3J0ZXJQcmVmZXJlbmNlcyBtX3ByZWZlcmVuY2VzOwogCiAgICAgcHVibGljOgotICAgICAgICB2b2lkIGFkZCggSVN0cmVhbWluZ1JlcG9ydGVyUHRyJiYgcmVwb3J0ZXIgKTsKKyAgICAgICAgTGlzdGVuaW5nUmVwb3J0ZXIoKTsKKworICAgICAgICB2b2lkIGFkZExpc3RlbmVyKCBJU3RyZWFtaW5nUmVwb3J0ZXJQdHImJiBsaXN0ZW5lciApOworICAgICAgICB2b2lkIGFkZFJlcG9ydGVyKCBJU3RyZWFtaW5nUmVwb3J0ZXJQdHImJiByZXBvcnRlciApOwogCiAgICAgcHVibGljOiAvLyBJU3RyZWFtaW5nUmVwb3J0ZXIKIApAQCAtNzM2NSw3ICs4OTA5LDcgQEAKIAogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCiAKLS8vIGVuZCBjYXRjaF9yZXBvcnRlcl9tdWx0aS5oCisvLyBlbmQgY2F0Y2hfcmVwb3J0ZXJfbGlzdGVuaW5nLmgKIG5hbWVzcGFjZSBDYXRjaCB7CiAKICAgICBSZXBvcnRlckNvbmZpZzo6UmVwb3J0ZXJDb25maWcoIElDb25maWdQdHIgY29uc3QmIF9mdWxsQ29uZmlnICkKQEAgLTc0NjYsMjcgKzkwMTAsNiBAQAogICAgIElSZXBvcnRlckZhY3Rvcnk6On5JUmVwb3J0ZXJGYWN0b3J5KCkgPSBkZWZhdWx0OwogICAgIElSZXBvcnRlclJlZ2lzdHJ5Ojp+SVJlcG9ydGVyUmVnaXN0cnkoKSA9IGRlZmF1bHQ7CiAKLSAgICB2b2lkIGFkZFJlcG9ydGVyKCBJU3RyZWFtaW5nUmVwb3J0ZXJQdHImIGV4aXN0aW5nUmVwb3J0ZXIsIElTdHJlYW1pbmdSZXBvcnRlclB0ciYmIGFkZGl0aW9uYWxSZXBvcnRlciApIHsKLQotICAgICAgICBpZiggIWV4aXN0aW5nUmVwb3J0ZXIgKSB7Ci0gICAgICAgICAgICBleGlzdGluZ1JlcG9ydGVyID0gc3RkOjptb3ZlKCBhZGRpdGlvbmFsUmVwb3J0ZXIgKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIE11bHRpcGxlUmVwb3J0ZXJzKiBtdWx0aSA9IG51bGxwdHI7Ci0KLSAgICAgICAgaWYoIGV4aXN0aW5nUmVwb3J0ZXItPmlzTXVsdGkoKSApIHsKLSAgICAgICAgICAgIG11bHRpID0gc3RhdGljX2Nhc3Q8TXVsdGlwbGVSZXBvcnRlcnMqPiggZXhpc3RpbmdSZXBvcnRlci5nZXQoKSApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byBuZXdNdWx0aSA9IHN0ZDo6dW5pcXVlX3B0cjxNdWx0aXBsZVJlcG9ydGVycz4oIG5ldyBNdWx0aXBsZVJlcG9ydGVycyApOwotICAgICAgICAgICAgbmV3TXVsdGktPmFkZCggc3RkOjptb3ZlKCBleGlzdGluZ1JlcG9ydGVyICkgKTsKLSAgICAgICAgICAgIG11bHRpID0gbmV3TXVsdGkuZ2V0KCk7Ci0gICAgICAgICAgICBleGlzdGluZ1JlcG9ydGVyID0gc3RkOjptb3ZlKCBuZXdNdWx0aSApOwotICAgICAgICB9Ci0gICAgICAgIG11bHRpLT5hZGQoIHN0ZDo6bW92ZSggYWRkaXRpb25hbFJlcG9ydGVyICkgKTsKLSAgICB9Ci0KIH0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAogLy8gZW5kIGNhdGNoX2ludGVyZmFjZXNfcmVwb3J0ZXIuY3BwCiAvLyBzdGFydCBjYXRjaF9pbnRlcmZhY2VzX3J1bm5lci5jcHAKQEAgLTc1MDksMTYgKzkwMzIsMTYgQEAKIAogbmFtZXNwYWNlIENhdGNoIHsKIAotCUxlYWtEZXRlY3Rvcjo6TGVha0RldGVjdG9yKCkgewotCQlpbnQgZmxhZyA9IF9DcnRTZXREYmdGbGFnKF9DUlREQkdfUkVQT1JUX0ZMQUcpOwotCQlmbGFnIHw9IF9DUlREQkdfTEVBS19DSEVDS19ERjsKLQkJZmxhZyB8PSBfQ1JUREJHX0FMTE9DX01FTV9ERjsKLQkJX0NydFNldERiZ0ZsYWcoZmxhZyk7Ci0JCV9DcnRTZXRSZXBvcnRNb2RlKF9DUlRfV0FSTiwgX0NSVERCR19NT0RFX0ZJTEUgfCBfQ1JUREJHX01PREVfREVCVUcpOwotCQlfQ3J0U2V0UmVwb3J0RmlsZShfQ1JUX1dBUk4sIF9DUlREQkdfRklMRV9TVERFUlIpOwotCQkvLyBDaGFuZ2UgdGhpcyB0byBsZWFraW5nIGFsbG9jYXRpb24ncyBudW1iZXIgdG8gYnJlYWsgdGhlcmUKLQkJX0NydFNldEJyZWFrQWxsb2MoLTEpOwotCX0KKyAgICBMZWFrRGV0ZWN0b3I6OkxlYWtEZXRlY3RvcigpIHsKKyAgICAgICAgaW50IGZsYWcgPSBfQ3J0U2V0RGJnRmxhZyhfQ1JUREJHX1JFUE9SVF9GTEFHKTsKKyAgICAgICAgZmxhZyB8PSBfQ1JUREJHX0xFQUtfQ0hFQ0tfREY7CisgICAgICAgIGZsYWcgfD0gX0NSVERCR19BTExPQ19NRU1fREY7CisgICAgICAgIF9DcnRTZXREYmdGbGFnKGZsYWcpOworICAgICAgICBfQ3J0U2V0UmVwb3J0TW9kZShfQ1JUX1dBUk4sIF9DUlREQkdfTU9ERV9GSUxFIHwgX0NSVERCR19NT0RFX0RFQlVHKTsKKyAgICAgICAgX0NydFNldFJlcG9ydEZpbGUoX0NSVF9XQVJOLCBfQ1JUREJHX0ZJTEVfU1RERVJSKTsKKyAgICAgICAgLy8gQ2hhbmdlIHRoaXMgdG8gbGVha2luZyBhbGxvY2F0aW9uJ3MgbnVtYmVyIHRvIGJyZWFrIHRoZXJlCisgICAgICAgIF9DcnRTZXRCcmVha0FsbG9jKC0xKTsKKyAgICB9CiB9CiAKICNlbHNlCkBAIC03NTI2LDYgKzkwNDksMTAgQEAKICAgICBDYXRjaDo6TGVha0RldGVjdG9yOjpMZWFrRGV0ZWN0b3IoKSB7fQogCiAjZW5kaWYKKworQ2F0Y2g6OkxlYWtEZXRlY3Rvcjo6fkxlYWtEZXRlY3RvcigpIHsKKyAgICBDYXRjaDo6Y2xlYW5VcCgpOworfQogLy8gZW5kIGNhdGNoX2xlYWtfZGV0ZWN0b3IuY3BwCiAvLyBzdGFydCBjYXRjaF9saXN0LmNwcAogCkBAIC03NTQ5LDkgKzkwNzYsOSBAQAogCiAgICAgc3RkOjpzaXplX3QgbGlzdFRhZ3MoIENvbmZpZyBjb25zdCYgY29uZmlnICk7CiAKLSAgICBzdGQ6OnNpemVfdCBsaXN0UmVwb3J0ZXJzKCBDb25maWcgY29uc3QmIC8qY29uZmlnKi8gKTsKKyAgICBzdGQ6OnNpemVfdCBsaXN0UmVwb3J0ZXJzKCk7CiAKLSAgICBPcHRpb248c3RkOjpzaXplX3Q+IGxpc3QoIENvbmZpZyBjb25zdCYgY29uZmlnICk7CisgICAgT3B0aW9uPHN0ZDo6c2l6ZV90PiBsaXN0KCBzdGQ6OnNoYXJlZF9wdHI8Q29uZmlnPiBjb25zdCYgY29uZmlnICk7CiAKIH0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAogCkBAIC03NTcxLDExICs5MDk4LDEwIEBACiAKICAgICBzdGQ6OnNpemVfdCBsaXN0VGVzdHMoIENvbmZpZyBjb25zdCYgY29uZmlnICkgewogICAgICAgICBUZXN0U3BlYyB0ZXN0U3BlYyA9IGNvbmZpZy50ZXN0U3BlYygpOwotICAgICAgICBpZiggY29uZmlnLnRlc3RTcGVjKCkuaGFzRmlsdGVycygpICkKKyAgICAgICAgaWYoIGNvbmZpZy5oYXNUZXN0RmlsdGVycygpICkKICAgICAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgIk1hdGNoaW5nIHRlc3QgY2FzZXM6XG4iOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgIkFsbCBhdmFpbGFibGUgdGVzdCBjYXNlczpcbiI7Ci0gICAgICAgICAgICB0ZXN0U3BlYyA9IFRlc3RTcGVjUGFyc2VyKCBJVGFnQWxpYXNSZWdpc3RyeTo6Z2V0KCkgKS5wYXJzZSggIioiICkudGVzdFNwZWMoKTsKICAgICAgICAgfQogCiAgICAgICAgIGF1dG8gbWF0Y2hlZFRlc3RDYXNlcyA9IGZpbHRlclRlc3RzKCBnZXRBbGxUZXN0Q2FzZXNTb3J0ZWQoIGNvbmZpZyApLCB0ZXN0U3BlYywgY29uZmlnICk7CkBAIC03NTk3LDcgKzkxMjMsNyBAQAogICAgICAgICAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgQ29sdW1uKCB0ZXN0Q2FzZUluZm8udGFnc0FzU3RyaW5nKCkgKS5pbmRlbnQoIDYgKSA8PCAiXG4iOwogICAgICAgICB9CiAKLSAgICAgICAgaWYoICFjb25maWcudGVzdFNwZWMoKS5oYXNGaWx0ZXJzKCkgKQorICAgICAgICBpZiggIWNvbmZpZy5oYXNUZXN0RmlsdGVycygpICkKICAgICAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgcGx1cmFsaXNlKCBtYXRjaGVkVGVzdENhc2VzLnNpemUoKSwgInRlc3QgY2FzZSIgKSA8PCAnXG4nIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgQ2F0Y2g6OmNvdXQoKSA8PCBwbHVyYWxpc2UoIG1hdGNoZWRUZXN0Q2FzZXMuc2l6ZSgpLCAibWF0Y2hpbmcgdGVzdCBjYXNlIiApIDw8ICdcbicgPDwgc3RkOjplbmRsOwpAQCAtNzYwNiw4ICs5MTMyLDYgQEAKIAogICAgIHN0ZDo6c2l6ZV90IGxpc3RUZXN0c05hbWVzT25seSggQ29uZmlnIGNvbnN0JiBjb25maWcgKSB7CiAgICAgICAgIFRlc3RTcGVjIHRlc3RTcGVjID0gY29uZmlnLnRlc3RTcGVjKCk7Ci0gICAgICAgIGlmKCAhY29uZmlnLnRlc3RTcGVjKCkuaGFzRmlsdGVycygpICkKLSAgICAgICAgICAgIHRlc3RTcGVjID0gVGVzdFNwZWNQYXJzZXIoIElUYWdBbGlhc1JlZ2lzdHJ5OjpnZXQoKSApLnBhcnNlKCAiKiIgKS50ZXN0U3BlYygpOwogICAgICAgICBzdGQ6OnNpemVfdCBtYXRjaGVkVGVzdHMgPSAwOwogICAgICAgICBzdGQ6OnZlY3RvcjxUZXN0Q2FzZT4gbWF0Y2hlZFRlc3RDYXNlcyA9IGZpbHRlclRlc3RzKCBnZXRBbGxUZXN0Q2FzZXNTb3J0ZWQoIGNvbmZpZyApLCB0ZXN0U3BlYywgY29uZmlnICk7CiAgICAgICAgIGZvciggYXV0byBjb25zdCYgdGVzdENhc2VJbmZvIDogbWF0Y2hlZFRlc3RDYXNlcyApIHsKQEAgLTc2MzcsMTEgKzkxNjEsMTAgQEAKIAogICAgIHN0ZDo6c2l6ZV90IGxpc3RUYWdzKCBDb25maWcgY29uc3QmIGNvbmZpZyApIHsKICAgICAgICAgVGVzdFNwZWMgdGVzdFNwZWMgPSBjb25maWcudGVzdFNwZWMoKTsKLSAgICAgICAgaWYoIGNvbmZpZy50ZXN0U3BlYygpLmhhc0ZpbHRlcnMoKSApCisgICAgICAgIGlmKCBjb25maWcuaGFzVGVzdEZpbHRlcnMoKSApCiAgICAgICAgICAgICBDYXRjaDo6Y291dCgpIDw8ICJUYWdzIGZvciBtYXRjaGluZyB0ZXN0IGNhc2VzOlxuIjsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBDYXRjaDo6Y291dCgpIDw8ICJBbGwgYXZhaWxhYmxlIHRhZ3M6XG4iOwotICAgICAgICAgICAgdGVzdFNwZWMgPSBUZXN0U3BlY1BhcnNlciggSVRhZ0FsaWFzUmVnaXN0cnk6OmdldCgpICkucGFyc2UoICIqIiApLnRlc3RTcGVjKCk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGQ6Om1hcDxzdGQ6OnN0cmluZywgVGFnSW5mbz4gdGFnQ291bnRzOwpAQCAtNzY3MSw3ICs5MTk0LDcgQEAKICAgICAgICAgcmV0dXJuIHRhZ0NvdW50cy5zaXplKCk7CiAgICAgfQogCi0gICAgc3RkOjpzaXplX3QgbGlzdFJlcG9ydGVycyggQ29uZmlnIGNvbnN0JiAvKmNvbmZpZyovICkgeworICAgIHN0ZDo6c2l6ZV90IGxpc3RSZXBvcnRlcnMoKSB7CiAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgIkF2YWlsYWJsZSByZXBvcnRlcnM6XG4iOwogICAgICAgICBJUmVwb3J0ZXJSZWdpc3RyeTo6RmFjdG9yeU1hcCBjb25zdCYgZmFjdG9yaWVzID0gZ2V0UmVnaXN0cnlIdWIoKS5nZXRSZXBvcnRlclJlZ2lzdHJ5KCkuZ2V0RmFjdG9yaWVzKCk7CiAgICAgICAgIHN0ZDo6c2l6ZV90IG1heE5hbWVMZW4gPSAwOwpAQCAtNzY5MywxNiArOTIxNiwxNyBAQAogICAgICAgICByZXR1cm4gZmFjdG9yaWVzLnNpemUoKTsKICAgICB9CiAKLSAgICBPcHRpb248c3RkOjpzaXplX3Q+IGxpc3QoIENvbmZpZyBjb25zdCYgY29uZmlnICkgeworICAgIE9wdGlvbjxzdGQ6OnNpemVfdD4gbGlzdCggc3RkOjpzaGFyZWRfcHRyPENvbmZpZz4gY29uc3QmIGNvbmZpZyApIHsKICAgICAgICAgT3B0aW9uPHN0ZDo6c2l6ZV90PiBsaXN0ZWRDb3VudDsKLSAgICAgICAgaWYoIGNvbmZpZy5saXN0VGVzdHMoKSApCi0gICAgICAgICAgICBsaXN0ZWRDb3VudCA9IGxpc3RlZENvdW50LnZhbHVlT3IoMCkgKyBsaXN0VGVzdHMoIGNvbmZpZyApOwotICAgICAgICBpZiggY29uZmlnLmxpc3RUZXN0TmFtZXNPbmx5KCkgKQotICAgICAgICAgICAgbGlzdGVkQ291bnQgPSBsaXN0ZWRDb3VudC52YWx1ZU9yKDApICsgbGlzdFRlc3RzTmFtZXNPbmx5KCBjb25maWcgKTsKLSAgICAgICAgaWYoIGNvbmZpZy5saXN0VGFncygpICkKLSAgICAgICAgICAgIGxpc3RlZENvdW50ID0gbGlzdGVkQ291bnQudmFsdWVPcigwKSArIGxpc3RUYWdzKCBjb25maWcgKTsKLSAgICAgICAgaWYoIGNvbmZpZy5saXN0UmVwb3J0ZXJzKCkgKQotICAgICAgICAgICAgbGlzdGVkQ291bnQgPSBsaXN0ZWRDb3VudC52YWx1ZU9yKDApICsgbGlzdFJlcG9ydGVycyggY29uZmlnICk7CisgICAgICAgIGdldEN1cnJlbnRNdXRhYmxlQ29udGV4dCgpLnNldENvbmZpZyggY29uZmlnICk7CisgICAgICAgIGlmKCBjb25maWctPmxpc3RUZXN0cygpICkKKyAgICAgICAgICAgIGxpc3RlZENvdW50ID0gbGlzdGVkQ291bnQudmFsdWVPcigwKSArIGxpc3RUZXN0cyggKmNvbmZpZyApOworICAgICAgICBpZiggY29uZmlnLT5saXN0VGVzdE5hbWVzT25seSgpICkKKyAgICAgICAgICAgIGxpc3RlZENvdW50ID0gbGlzdGVkQ291bnQudmFsdWVPcigwKSArIGxpc3RUZXN0c05hbWVzT25seSggKmNvbmZpZyApOworICAgICAgICBpZiggY29uZmlnLT5saXN0VGFncygpICkKKyAgICAgICAgICAgIGxpc3RlZENvdW50ID0gbGlzdGVkQ291bnQudmFsdWVPcigwKSArIGxpc3RUYWdzKCAqY29uZmlnICk7CisgICAgICAgIGlmKCBjb25maWctPmxpc3RSZXBvcnRlcnMoKSApCisgICAgICAgICAgICBsaXN0ZWRDb3VudCA9IGxpc3RlZENvdW50LnZhbHVlT3IoMCkgKyBsaXN0UmVwb3J0ZXJzKCk7CiAgICAgICAgIHJldHVybiBsaXN0ZWRDb3VudDsKICAgICB9CiAKQEAgLTc3MzIsMTAgKzkyNTYsMzUgQEAKIC8vIGVuZCBjYXRjaF9tYXRjaGVycy5jcHAKIC8vIHN0YXJ0IGNhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmNwcAogCisvLyBzdGFydCBjYXRjaF9wb2x5ZmlsbHMuaHBwCisKK25hbWVzcGFjZSBDYXRjaCB7CisgICAgYm9vbCBpc25hbihmbG9hdCBmKTsKKyAgICBib29sIGlzbmFuKGRvdWJsZSBkKTsKK30KKworLy8gZW5kIGNhdGNoX3BvbHlmaWxscy5ocHAKKy8vIHN0YXJ0IGNhdGNoX3RvX3N0cmluZy5ocHAKKworI2luY2x1ZGUgPHN0cmluZz4KKworbmFtZXNwYWNlIENhdGNoIHsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdGQ6OnN0cmluZyB0b19zdHJpbmcoVCBjb25zdCYgdCkgeworI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX0NQUDExX1RPX1NUUklORykKKyAgICAgICAgcmV0dXJuIHN0ZDo6dG9fc3RyaW5nKHQpOworI2Vsc2UKKyAgICAgICAgUmV1c2FibGVTdHJpbmdTdHJlYW0gcnNzOworICAgICAgICByc3MgPDwgdDsKKyAgICAgICAgcmV0dXJuIHJzcy5zdHIoKTsKKyNlbmRpZgorICAgIH0KK30gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAorCisvLyBlbmQgY2F0Y2hfdG9fc3RyaW5nLmhwcAogI2luY2x1ZGUgPGNzdGRsaWI+CiAjaW5jbHVkZSA8Y3N0ZGludD4KICNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPHN0ZGV4Y2VwdD4KIAogbmFtZXNwYWNlIENhdGNoIHsKIG5hbWVzcGFjZSBNYXRjaGVycyB7CkBAIC03NzgwLDcgKzkzMjksNyBAQAogYm9vbCBhbG1vc3RFcXVhbFVscHMoRlAgbGhzLCBGUCByaHMsIGludCBtYXhVbHBEaWZmKSB7CiAgICAgLy8gQ29tcGFyaXNvbiB3aXRoIE5hTiBzaG91bGQgYWx3YXlzIGJlIGZhbHNlLgogICAgIC8vIFRoaXMgd2F5IHdlIGNhbiBydWxlIGl0IG91dCBiZWZvcmUgZ2V0dGluZyBpbnRvIHRoZSB1Z2x5IGRldGFpbHMKLSAgICBpZiAoc3RkOjppc25hbihsaHMpIHx8IHN0ZDo6aXNuYW4ocmhzKSkgeworICAgIGlmIChDYXRjaDo6aXNuYW4obGhzKSB8fCBDYXRjaDo6aXNuYW4ocmhzKSkgewogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCkBAIC03ODAzLDE1ICs5MzUyLDE0IEBACiBuYW1lc3BhY2UgRmxvYXRpbmcgewogICAgIFdpdGhpbkFic01hdGNoZXI6OldpdGhpbkFic01hdGNoZXIoZG91YmxlIHRhcmdldCwgZG91YmxlIG1hcmdpbikKICAgICAgICAgOm1fdGFyZ2V0eyB0YXJnZXQgfSwgbV9tYXJnaW57IG1hcmdpbiB9IHsKLSAgICAgICAgaWYgKG1fbWFyZ2luIDwgMCkgewotICAgICAgICAgICAgdGhyb3cgc3RkOjpkb21haW5fZXJyb3IoIkFsbG93ZWQgbWFyZ2luIGRpZmZlcmVuY2UgaGFzIHRvIGJlID49IDAiKTsKLSAgICAgICAgfQorICAgICAgICBDQVRDSF9FTkZPUkNFKG1hcmdpbiA+PSAwLCAiSW52YWxpZCBtYXJnaW46ICIgPDwgbWFyZ2luIDw8ICcuJworICAgICAgICAgICAgPDwgIiBNYXJnaW4gaGFzIHRvIGJlIG5vbi1uZWdhdGl2ZS4iKTsKICAgICB9CiAKICAgICAvLyBQZXJmb3JtcyBlcXVpdmFsZW50IGNoZWNrIG9mIHN0ZDo6ZmFicyhsaHMgLSByaHMpIDw9IG1hcmdpbgogICAgIC8vIEJ1dCB3aXRob3V0IHRoZSBzdWJ0cmFjdGlvbiB0byBhbGxvdyBmb3IgSU5GSU5JVFkgaW4gY29tcGFyaXNvbgogICAgIGJvb2wgV2l0aGluQWJzTWF0Y2hlcjo6bWF0Y2goZG91YmxlIGNvbnN0JiBtYXRjaGVlKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAobWF0Y2hlZSArIG1fbWFyZ2luID49IG1fdGFyZ2V0KSAmJiAobV90YXJnZXQgKyBtX21hcmdpbiA+PSBtX21hcmdpbik7CisgICAgICAgIHJldHVybiAobWF0Y2hlZSArIG1fbWFyZ2luID49IG1fdGFyZ2V0KSAmJiAobV90YXJnZXQgKyBtX21hcmdpbiA+PSBtYXRjaGVlKTsKICAgICB9CiAKICAgICBzdGQ6OnN0cmluZyBXaXRoaW5BYnNNYXRjaGVyOjpkZXNjcmliZSgpIGNvbnN0IHsKQEAgLTc4MjAsMTEgKzkzNjgsMTYgQEAKIAogICAgIFdpdGhpblVscHNNYXRjaGVyOjpXaXRoaW5VbHBzTWF0Y2hlcihkb3VibGUgdGFyZ2V0LCBpbnQgdWxwcywgRmxvYXRpbmdQb2ludEtpbmQgYmFzZVR5cGUpCiAgICAgICAgIDptX3RhcmdldHsgdGFyZ2V0IH0sIG1fdWxwc3sgdWxwcyB9LCBtX3R5cGV7IGJhc2VUeXBlIH0gewotICAgICAgICBpZiAobV91bHBzIDwgMCkgewotICAgICAgICAgICAgdGhyb3cgc3RkOjpkb21haW5fZXJyb3IoIkFsbG93ZWQgdWxwIGRpZmZlcmVuY2UgaGFzIHRvIGJlID49IDAiKTsKLSAgICAgICAgfQorICAgICAgICBDQVRDSF9FTkZPUkNFKHVscHMgPj0gMCwgIkludmFsaWQgVUxQIHNldHRpbmc6ICIgPDwgdWxwcyA8PCAnLicKKyAgICAgICAgICAgIDw8ICIgVUxQcyBoYXZlIHRvIGJlIG5vbi1uZWdhdGl2ZS4iKTsKICAgICB9CiAKKyNpZiBkZWZpbmVkKF9fY2xhbmdfXykKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisvLyBDbGFuZyA8My41IHJlcG9ydHMgb24gdGhlIGRlZmF1bHQgYnJhbmNoIGluIHRoZSBzd2l0Y2ggYmVsb3cKKyNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV3VucmVhY2hhYmxlLWNvZGUiCisjZW5kaWYKKwogICAgIGJvb2wgV2l0aGluVWxwc01hdGNoZXI6Om1hdGNoKGRvdWJsZSBjb25zdCYgbWF0Y2hlZSkgY29uc3QgewogICAgICAgICBzd2l0Y2ggKG1fdHlwZSkgewogICAgICAgICBjYXNlIEZsb2F0aW5nUG9pbnRLaW5kOjpGbG9hdDoKQEAgLTc4MzIsMTIgKzkzODUsMTYgQEAKICAgICAgICAgY2FzZSBGbG9hdGluZ1BvaW50S2luZDo6RG91YmxlOgogICAgICAgICAgICAgcmV0dXJuIGFsbW9zdEVxdWFsVWxwczxkb3VibGU+KG1hdGNoZWUsIG1fdGFyZ2V0LCBtX3VscHMpOwogICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdGhyb3cgc3RkOjpkb21haW5fZXJyb3IoIlVua25vd24gRmxvYXRpbmdQb2ludEtpbmQgdmFsdWUiKTsKKyAgICAgICAgICAgIENBVENIX0lOVEVSTkFMX0VSUk9SKCAiVW5rbm93biBGbG9hdGluZ1BvaW50S2luZCB2YWx1ZSIgKTsKICAgICAgICAgfQogICAgIH0KIAorI2lmIGRlZmluZWQoX19jbGFuZ19fKQorI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VuZGlmCisKICAgICBzdGQ6OnN0cmluZyBXaXRoaW5VbHBzTWF0Y2hlcjo6ZGVzY3JpYmUoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiAiaXMgd2l0aGluICIgKyBzdGQ6OnRvX3N0cmluZyhtX3VscHMpICsgIiBVTFBzIG9mICIgKyA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShtX3RhcmdldCkgKyAoKG1fdHlwZSA9PSBGbG9hdGluZ1BvaW50S2luZDo6RmxvYXQpPyAiZiIgOiAiIik7CisgICAgICAgIHJldHVybiAiaXMgd2l0aGluICIgKyBDYXRjaDo6dG9fc3RyaW5nKG1fdWxwcykgKyAiIFVMUHMgb2YgIiArIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KG1fdGFyZ2V0KSArICgobV90eXBlID09IEZsb2F0aW5nUG9pbnRLaW5kOjpGbG9hdCk/ICJmIiA6ICIiKTsKICAgICB9CiAKIH0vLyBuYW1lc3BhY2UgRmxvYXRpbmcKQEAgLTc4NTgsNiArOTQxNSwxNiBAQAogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIAogLy8gZW5kIGNhdGNoX21hdGNoZXJzX2Zsb2F0aW5nLmNwcAorLy8gc3RhcnQgY2F0Y2hfbWF0Y2hlcnNfZ2VuZXJpYy5jcHAKKworc3RkOjpzdHJpbmcgQ2F0Y2g6Ok1hdGNoZXJzOjpHZW5lcmljOjpEZXRhaWw6OmZpbmFsaXplRGVzY3JpcHRpb24oY29uc3Qgc3RkOjpzdHJpbmcmIGRlc2MpIHsKKyAgICBpZiAoZGVzYy5lbXB0eSgpKSB7CisgICAgICAgIHJldHVybiAibWF0Y2hlcyB1bmRlc2NyaWJlZCBwcmVkaWNhdGUiOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAibWF0Y2hlcyBwcmVkaWNhdGU6IFwiIiArIGRlc2MgKyAnIic7CisgICAgfQorfQorLy8gZW5kIGNhdGNoX21hdGNoZXJzX2dlbmVyaWMuY3BwCiAvLyBzdGFydCBjYXRjaF9tYXRjaGVyc19zdHJpbmcuY3BwCiAKICNpbmNsdWRlIDxyZWdleD4KQEAgLTc5NjIsOSArOTUyOSwxOSBAQAogLy8gZW5kIGNhdGNoX21hdGNoZXJzX3N0cmluZy5jcHAKIC8vIHN0YXJ0IGNhdGNoX21lc3NhZ2UuY3BwCiAKKy8vIHN0YXJ0IGNhdGNoX3VuY2F1Z2h0X2V4Y2VwdGlvbnMuaAorCituYW1lc3BhY2UgQ2F0Y2ggeworICAgIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9ucygpOworfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCisKKy8vIGVuZCBjYXRjaF91bmNhdWdodF9leGNlcHRpb25zLmgKKyNpbmNsdWRlIDxjYXNzZXJ0PgorI2luY2x1ZGUgPHN0YWNrPgorCiBuYW1lc3BhY2UgQ2F0Y2ggewogCi0gICAgTWVzc2FnZUluZm86Ok1lc3NhZ2VJbmZvKCAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBfbWFjcm9OYW1lLAorICAgIE1lc3NhZ2VJbmZvOjpNZXNzYWdlSW5mbyggICBTdHJpbmdSZWYgY29uc3QmIF9tYWNyb05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBfbGluZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlc3VsdFdhczo6T2ZUeXBlIF90eXBlICkKICAgICA6ICAgbWFjcm9OYW1lKCBfbWFjcm9OYW1lICksCkBAIC03OTg2LDcgKzk1NjMsNyBAQAogCiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCi0gICAgQ2F0Y2g6Ok1lc3NhZ2VCdWlsZGVyOjpNZXNzYWdlQnVpbGRlciggc3RkOjpzdHJpbmcgY29uc3QmIG1hY3JvTmFtZSwKKyAgICBDYXRjaDo6TWVzc2FnZUJ1aWxkZXI6Ok1lc3NhZ2VCdWlsZGVyKCBTdHJpbmdSZWYgY29uc3QmIG1hY3JvTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2VMaW5lSW5mbyBjb25zdCYgbGluZUluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0V2FzOjpPZlR5cGUgdHlwZSApCiAgICAgICAgIDptX2luZm8obWFjcm9OYW1lLCBsaW5lSW5mbywgdHlwZSkge30KQEAgLTc5OTQsNzkgKzk1NzEsMzc0IEBACiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiAgICAgU2NvcGVkTWVzc2FnZTo6U2NvcGVkTWVzc2FnZSggTWVzc2FnZUJ1aWxkZXIgY29uc3QmIGJ1aWxkZXIgKQotICAgIDogbV9pbmZvKCBidWlsZGVyLm1faW5mbyApCisgICAgOiBtX2luZm8oIGJ1aWxkZXIubV9pbmZvICksIG1fbW92ZWQoKQogICAgIHsKICAgICAgICAgbV9pbmZvLm1lc3NhZ2UgPSBidWlsZGVyLm1fc3RyZWFtLnN0cigpOwogICAgICAgICBnZXRSZXN1bHRDYXB0dXJlKCkucHVzaFNjb3BlZE1lc3NhZ2UoIG1faW5mbyApOwogICAgIH0KIAotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ5OTYpIC8vIHN0ZDo6dW5jYXVnaHRfZXhjZXB0aW9uIGlzIGRlcHJlY2F0ZWQgaW4gQysrMTcKLSNlbmRpZgorICAgIFNjb3BlZE1lc3NhZ2U6OlNjb3BlZE1lc3NhZ2UoIFNjb3BlZE1lc3NhZ2UmJiBvbGQgKQorICAgIDogbV9pbmZvKCBvbGQubV9pbmZvICksIG1fbW92ZWQoKQorICAgIHsKKyAgICAgICAgb2xkLm1fbW92ZWQgPSB0cnVlOworICAgIH0KKwogICAgIFNjb3BlZE1lc3NhZ2U6On5TY29wZWRNZXNzYWdlKCkgewotICAgICAgICBpZiAoICFzdGQ6OnVuY2F1Z2h0X2V4Y2VwdGlvbigpICl7CisgICAgICAgIGlmICggIXVuY2F1Z2h0X2V4Y2VwdGlvbnMoKSAmJiAhbV9tb3ZlZCApewogICAgICAgICAgICAgZ2V0UmVzdWx0Q2FwdHVyZSgpLnBvcFNjb3BlZE1lc3NhZ2UobV9pbmZvKTsKICAgICAgICAgfQogICAgIH0KLSNpZiBkZWZpbmVkKF9NU0NfVkVSKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZgorCisgICAgQ2FwdHVyZXI6OkNhcHR1cmVyKCBTdHJpbmdSZWYgbWFjcm9OYW1lLCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgbGluZUluZm8sIFJlc3VsdFdhczo6T2ZUeXBlIHJlc3VsdFR5cGUsIFN0cmluZ1JlZiBuYW1lcyApIHsKKyAgICAgICAgYXV0byB0cmltbWVkID0gWyZdIChzaXplX3Qgc3RhcnQsIHNpemVfdCBlbmQpIHsKKyAgICAgICAgICAgIHdoaWxlIChuYW1lc1tzdGFydF0gPT0gJywnIHx8IGlzc3BhY2UobmFtZXNbc3RhcnRdKSkgeworICAgICAgICAgICAgICAgICsrc3RhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3aGlsZSAobmFtZXNbZW5kXSA9PSAnLCcgfHwgaXNzcGFjZShuYW1lc1tlbmRdKSkgeworICAgICAgICAgICAgICAgIC0tZW5kOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG5hbWVzLnN1YnN0cihzdGFydCwgZW5kIC0gc3RhcnQgKyAxKTsKKyAgICAgICAgfTsKKworICAgICAgICBzaXplX3Qgc3RhcnQgPSAwOworICAgICAgICBzdGQ6OnN0YWNrPGNoYXI+IG9wZW5pbmdzOworICAgICAgICBmb3IgKHNpemVfdCBwb3MgPSAwOyBwb3MgPCBuYW1lcy5zaXplKCk7ICsrcG9zKSB7CisgICAgICAgICAgICBjaGFyIGMgPSBuYW1lc1twb3NdOworICAgICAgICAgICAgc3dpdGNoIChjKSB7CisgICAgICAgICAgICBjYXNlICdbJzoKKyAgICAgICAgICAgIGNhc2UgJ3snOgorICAgICAgICAgICAgY2FzZSAnKCc6CisgICAgICAgICAgICAvLyBJdCBpcyBiYXNpY2FsbHkgaW1wb3NzaWJsZSB0byBkaXNhbWJpZ3VhdGUgYmV0d2VlbgorICAgICAgICAgICAgLy8gY29tcGFyaXNvbiBhbmQgc3RhcnQgb2YgdGVtcGxhdGUgYXJncyBpbiB0aGlzIGNvbnRleHQKKy8vICAgICAgICAgICAgY2FzZSAnPCc6CisgICAgICAgICAgICAgICAgb3BlbmluZ3MucHVzaChjKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJ10nOgorICAgICAgICAgICAgY2FzZSAnfSc6CisgICAgICAgICAgICBjYXNlICcpJzoKKy8vICAgICAgICAgICBjYXNlICc+JzoKKyAgICAgICAgICAgICAgICBvcGVuaW5ncy5wb3AoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJywnOgorICAgICAgICAgICAgICAgIGlmIChzdGFydCAhPSBwb3MgJiYgb3BlbmluZ3Muc2l6ZSgpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbV9tZXNzYWdlcy5lbXBsYWNlX2JhY2sobWFjcm9OYW1lLCBsaW5lSW5mbywgcmVzdWx0VHlwZSk7CisgICAgICAgICAgICAgICAgICAgIG1fbWVzc2FnZXMuYmFjaygpLm1lc3NhZ2UgPSB0cmltbWVkKHN0YXJ0LCBwb3MpOworICAgICAgICAgICAgICAgICAgICBtX21lc3NhZ2VzLmJhY2soKS5tZXNzYWdlICs9ICIgOj0gIjsKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQgPSBwb3M7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGFzc2VydChvcGVuaW5ncy5zaXplKCkgPT0gMCAmJiAiTWlzbWF0Y2hlZCBvcGVuaW5ncyIpOworICAgICAgICBtX21lc3NhZ2VzLmVtcGxhY2VfYmFjayhtYWNyb05hbWUsIGxpbmVJbmZvLCByZXN1bHRUeXBlKTsKKyAgICAgICAgbV9tZXNzYWdlcy5iYWNrKCkubWVzc2FnZSA9IHRyaW1tZWQoc3RhcnQsIG5hbWVzLnNpemUoKSAtIDEpOworICAgICAgICBtX21lc3NhZ2VzLmJhY2soKS5tZXNzYWdlICs9ICIgOj0gIjsKKyAgICB9CisgICAgQ2FwdHVyZXI6On5DYXB0dXJlcigpIHsKKyAgICAgICAgaWYgKCAhdW5jYXVnaHRfZXhjZXB0aW9ucygpICl7CisgICAgICAgICAgICBhc3NlcnQoIG1fY2FwdHVyZWQgPT0gbV9tZXNzYWdlcy5zaXplKCkgKTsKKyAgICAgICAgICAgIGZvciggc2l6ZV90IGkgPSAwOyBpIDwgbV9jYXB0dXJlZDsgKytpICApCisgICAgICAgICAgICAgICAgbV9yZXN1bHRDYXB0dXJlLnBvcFNjb3BlZE1lc3NhZ2UoIG1fbWVzc2FnZXNbaV0gKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgQ2FwdHVyZXI6OmNhcHR1cmVWYWx1ZSggc2l6ZV90IGluZGV4LCBzdGQ6OnN0cmluZyBjb25zdCYgdmFsdWUgKSB7CisgICAgICAgIGFzc2VydCggaW5kZXggPCBtX21lc3NhZ2VzLnNpemUoKSApOworICAgICAgICBtX21lc3NhZ2VzW2luZGV4XS5tZXNzYWdlICs9IHZhbHVlOworICAgICAgICBtX3Jlc3VsdENhcHR1cmUucHVzaFNjb3BlZE1lc3NhZ2UoIG1fbWVzc2FnZXNbaW5kZXhdICk7CisgICAgICAgIG1fY2FwdHVyZWQrKzsKKyAgICB9CiAKIH0gLy8gZW5kIG5hbWVzcGFjZSBDYXRjaAogLy8gZW5kIGNhdGNoX21lc3NhZ2UuY3BwCi0vLyBzdGFydCBjYXRjaF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5jcHAKKy8vIHN0YXJ0IGNhdGNoX291dHB1dF9yZWRpcmVjdC5jcHAKIAotLy8gc3RhcnQgY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuaAorLy8gc3RhcnQgY2F0Y2hfb3V0cHV0X3JlZGlyZWN0LmgKKyNpZm5kZWYgVFdPQkxVRUNVQkVTX0NBVENIX09VVFBVVF9SRURJUkVDVF9ICisjZGVmaW5lIFRXT0JMVUVDVUJFU19DQVRDSF9PVVRQVVRfUkVESVJFQ1RfSAogCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxpb3Nmd2Q+CisjaW5jbHVkZSA8c3RyaW5nPgogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCi0gICAgc3RydWN0IElDb25maWc7CisgICAgY2xhc3MgUmVkaXJlY3RlZFN0cmVhbSB7CisgICAgICAgIHN0ZDo6b3N0cmVhbSYgbV9vcmlnaW5hbFN0cmVhbTsKKyAgICAgICAgc3RkOjpvc3RyZWFtJiBtX3JlZGlyZWN0aW9uU3RyZWFtOworICAgICAgICBzdGQ6OnN0cmVhbWJ1ZiogbV9wcmV2QnVmOwogCi0gICAgdm9pZCBzZWVkUm5nKCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKTsKLQotICAgIHVuc2lnbmVkIGludCBybmdTZWVkKCk7Ci0KLSAgICBzdHJ1Y3QgUmFuZG9tTnVtYmVyR2VuZXJhdG9yIHsKLSAgICAgICAgdXNpbmcgcmVzdWx0X3R5cGUgPSB1bnNpZ25lZCBpbnQ7Ci0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciByZXN1bHRfdHlwZSAobWluKSgpIHsgcmV0dXJuIDA7IH0KLSAgICAgICAgc3RhdGljIGNvbnN0ZXhwciByZXN1bHRfdHlwZSAobWF4KSgpIHsgcmV0dXJuIDEwMDAwMDA7IH0KLQotICAgICAgICByZXN1bHRfdHlwZSBvcGVyYXRvcigpKCByZXN1bHRfdHlwZSBuICkgY29uc3Q7Ci0gICAgICAgIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoKSBjb25zdDsKLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWPgotICAgICAgICBzdGF0aWMgdm9pZCBzaHVmZmxlKCBWJiB2ZWN0b3IgKSB7Ci0gICAgICAgICAgICBSYW5kb21OdW1iZXJHZW5lcmF0b3Igcm5nOwotICAgICAgICAgICAgc3RkOjpzaHVmZmxlKCB2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLmVuZCgpLCBybmcgKTsKLSAgICAgICAgfQorICAgIHB1YmxpYzoKKyAgICAgICAgUmVkaXJlY3RlZFN0cmVhbSggc3RkOjpvc3RyZWFtJiBvcmlnaW5hbFN0cmVhbSwgc3RkOjpvc3RyZWFtJiByZWRpcmVjdGlvblN0cmVhbSApOworICAgICAgICB+UmVkaXJlY3RlZFN0cmVhbSgpOwogICAgIH07CiAKLX0KKyAgICBjbGFzcyBSZWRpcmVjdGVkU3RkT3V0IHsKKyAgICAgICAgUmV1c2FibGVTdHJpbmdTdHJlYW0gbV9yc3M7CisgICAgICAgIFJlZGlyZWN0ZWRTdHJlYW0gbV9jb3V0OworICAgIHB1YmxpYzoKKyAgICAgICAgUmVkaXJlY3RlZFN0ZE91dCgpOworICAgICAgICBhdXRvIHN0cigpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nOworICAgIH07CiAKLS8vIGVuZCBjYXRjaF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5oCi0jaW5jbHVkZSA8Y3N0ZGxpYj4KKyAgICAvLyBTdGRFcnIgaGFzIHR3byBjb25zdGl0dWVudCBzdHJlYW1zIGluIEMrKywgc3RkOjpjZXJyIGFuZCBzdGQ6OmNsb2cKKyAgICAvLyBUaGlzIG1lYW5zIHRoYXQgd2UgbmVlZCB0byByZWRpcmVjdCAyIHN0cmVhbXMgaW50byAxIHRvIGtlZXAgcHJvcGVyCisgICAgLy8gb3JkZXIgb2Ygd3JpdGVzCisgICAgY2xhc3MgUmVkaXJlY3RlZFN0ZEVyciB7CisgICAgICAgIFJldXNhYmxlU3RyaW5nU3RyZWFtIG1fcnNzOworICAgICAgICBSZWRpcmVjdGVkU3RyZWFtIG1fY2VycjsKKyAgICAgICAgUmVkaXJlY3RlZFN0cmVhbSBtX2Nsb2c7CisgICAgcHVibGljOgorICAgICAgICBSZWRpcmVjdGVkU3RkRXJyKCk7CisgICAgICAgIGF1dG8gc3RyKCkgY29uc3QgLT4gc3RkOjpzdHJpbmc7CisgICAgfTsKKworICAgIGNsYXNzIFJlZGlyZWN0ZWRTdHJlYW1zIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJlZGlyZWN0ZWRTdHJlYW1zKFJlZGlyZWN0ZWRTdHJlYW1zIGNvbnN0JikgPSBkZWxldGU7CisgICAgICAgIFJlZGlyZWN0ZWRTdHJlYW1zJiBvcGVyYXRvcj0oUmVkaXJlY3RlZFN0cmVhbXMgY29uc3QmKSA9IGRlbGV0ZTsKKyAgICAgICAgUmVkaXJlY3RlZFN0cmVhbXMoUmVkaXJlY3RlZFN0cmVhbXMmJikgPSBkZWxldGU7CisgICAgICAgIFJlZGlyZWN0ZWRTdHJlYW1zJiBvcGVyYXRvcj0oUmVkaXJlY3RlZFN0cmVhbXMmJikgPSBkZWxldGU7CisKKyAgICAgICAgUmVkaXJlY3RlZFN0cmVhbXMoc3RkOjpzdHJpbmcmIHJlZGlyZWN0ZWRDb3V0LCBzdGQ6OnN0cmluZyYgcmVkaXJlY3RlZENlcnIpOworICAgICAgICB+UmVkaXJlY3RlZFN0cmVhbXMoKTsKKyAgICBwcml2YXRlOgorICAgICAgICBzdGQ6OnN0cmluZyYgbV9yZWRpcmVjdGVkQ291dDsKKyAgICAgICAgc3RkOjpzdHJpbmcmIG1fcmVkaXJlY3RlZENlcnI7CisgICAgICAgIFJlZGlyZWN0ZWRTdGRPdXQgbV9yZWRpcmVjdGVkU3RkT3V0OworICAgICAgICBSZWRpcmVjdGVkU3RkRXJyIG1fcmVkaXJlY3RlZFN0ZEVycjsKKyAgICB9OworCisjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfTkVXX0NBUFRVUkUpCisKKyAgICAvLyBXaW5kb3dzJ3MgaW1wbGVtZW50YXRpb24gb2Ygc3RkOjp0bXBmaWxlIGlzIHRlcnJpYmxlIChpdCB0cmllcworICAgIC8vIHRvIGNyZWF0ZSBhIGZpbGUgaW5zaWRlIHN5c3RlbSBmb2xkZXIsIHRodXMgcmVxdWlyaW5nIGVsZXZhdGVkCisgICAgLy8gcHJpdmlsZWdlcyBmb3IgdGhlIGJpbmFyeSksIHNvIHdlIGhhdmUgdG8gdXNlIHRtcG5hbShfcykgYW5kCisgICAgLy8gY3JlYXRlIHRoZSBmaWxlIG91cnNlbHZlcyB0aGVyZS4KKyAgICBjbGFzcyBUZW1wRmlsZSB7CisgICAgcHVibGljOgorICAgICAgICBUZW1wRmlsZShUZW1wRmlsZSBjb25zdCYpID0gZGVsZXRlOworICAgICAgICBUZW1wRmlsZSYgb3BlcmF0b3I9KFRlbXBGaWxlIGNvbnN0JikgPSBkZWxldGU7CisgICAgICAgIFRlbXBGaWxlKFRlbXBGaWxlJiYpID0gZGVsZXRlOworICAgICAgICBUZW1wRmlsZSYgb3BlcmF0b3I9KFRlbXBGaWxlJiYpID0gZGVsZXRlOworCisgICAgICAgIFRlbXBGaWxlKCk7CisgICAgICAgIH5UZW1wRmlsZSgpOworCisgICAgICAgIHN0ZDo6RklMRSogZ2V0RmlsZSgpOworICAgICAgICBzdGQ6OnN0cmluZyBnZXRDb250ZW50cygpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgc3RkOjpGSUxFKiBtX2ZpbGUgPSBudWxscHRyOworICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICAgICBjaGFyIG1fYnVmZmVyW0xfdG1wbmFtXSA9IHsgMCB9OworICAgICNlbmRpZgorICAgIH07CisKKyAgICBjbGFzcyBPdXRwdXRSZWRpcmVjdCB7CisgICAgcHVibGljOgorICAgICAgICBPdXRwdXRSZWRpcmVjdChPdXRwdXRSZWRpcmVjdCBjb25zdCYpID0gZGVsZXRlOworICAgICAgICBPdXRwdXRSZWRpcmVjdCYgb3BlcmF0b3I9KE91dHB1dFJlZGlyZWN0IGNvbnN0JikgPSBkZWxldGU7CisgICAgICAgIE91dHB1dFJlZGlyZWN0KE91dHB1dFJlZGlyZWN0JiYpID0gZGVsZXRlOworICAgICAgICBPdXRwdXRSZWRpcmVjdCYgb3BlcmF0b3I9KE91dHB1dFJlZGlyZWN0JiYpID0gZGVsZXRlOworCisgICAgICAgIE91dHB1dFJlZGlyZWN0KHN0ZDo6c3RyaW5nJiBzdGRvdXRfZGVzdCwgc3RkOjpzdHJpbmcmIHN0ZGVycl9kZXN0KTsKKyAgICAgICAgfk91dHB1dFJlZGlyZWN0KCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBpbnQgbV9vcmlnaW5hbFN0ZG91dCA9IC0xOworICAgICAgICBpbnQgbV9vcmlnaW5hbFN0ZGVyciA9IC0xOworICAgICAgICBUZW1wRmlsZSBtX3N0ZG91dEZpbGU7CisgICAgICAgIFRlbXBGaWxlIG1fc3RkZXJyRmlsZTsKKyAgICAgICAgc3RkOjpzdHJpbmcmIG1fc3Rkb3V0RGVzdDsKKyAgICAgICAgc3RkOjpzdHJpbmcmIG1fc3RkZXJyRGVzdDsKKyAgICB9OworCisjZW5kaWYKKworfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCisKKyNlbmRpZiAvLyBUV09CTFVFQ1VCRVNfQ0FUQ0hfT1VUUFVUX1JFRElSRUNUX0gKKy8vIGVuZCBjYXRjaF9vdXRwdXRfcmVkaXJlY3QuaAorI2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPGZzdHJlYW0+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDxzdGRleGNlcHQ+CisKKyNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19ORVdfQ0FQVFVSRSkKKyAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAjaW5jbHVkZSA8aW8uaD4gICAgICAvL19kdXAgYW5kIF9kdXAyCisgICAgI2RlZmluZSBkdXAgX2R1cAorICAgICNkZWZpbmUgZHVwMiBfZHVwMgorICAgICNkZWZpbmUgZmlsZW5vIF9maWxlbm8KKyAgICAjZWxzZQorICAgICNpbmNsdWRlIDx1bmlzdGQuaD4gIC8vIGR1cCBhbmQgZHVwMgorICAgICNlbmRpZgorI2VuZGlmCiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKLSAgICB2b2lkIHNlZWRSbmcoIElDb25maWcgY29uc3QmIGNvbmZpZyApIHsKLSAgICAgICAgaWYoIGNvbmZpZy5ybmdTZWVkKCkgIT0gMCApCi0gICAgICAgICAgICBzdGQ6OnNyYW5kKCBjb25maWcucm5nU2VlZCgpICk7CisgICAgUmVkaXJlY3RlZFN0cmVhbTo6UmVkaXJlY3RlZFN0cmVhbSggc3RkOjpvc3RyZWFtJiBvcmlnaW5hbFN0cmVhbSwgc3RkOjpvc3RyZWFtJiByZWRpcmVjdGlvblN0cmVhbSApCisgICAgOiAgIG1fb3JpZ2luYWxTdHJlYW0oIG9yaWdpbmFsU3RyZWFtICksCisgICAgICAgIG1fcmVkaXJlY3Rpb25TdHJlYW0oIHJlZGlyZWN0aW9uU3RyZWFtICksCisgICAgICAgIG1fcHJldkJ1ZiggbV9vcmlnaW5hbFN0cmVhbS5yZGJ1ZigpICkKKyAgICB7CisgICAgICAgIG1fb3JpZ2luYWxTdHJlYW0ucmRidWYoIG1fcmVkaXJlY3Rpb25TdHJlYW0ucmRidWYoKSApOwogICAgIH0KKworICAgIFJlZGlyZWN0ZWRTdHJlYW06On5SZWRpcmVjdGVkU3RyZWFtKCkgeworICAgICAgICBtX29yaWdpbmFsU3RyZWFtLnJkYnVmKCBtX3ByZXZCdWYgKTsKKyAgICB9CisKKyAgICBSZWRpcmVjdGVkU3RkT3V0OjpSZWRpcmVjdGVkU3RkT3V0KCkgOiBtX2NvdXQoIENhdGNoOjpjb3V0KCksIG1fcnNzLmdldCgpICkge30KKyAgICBhdXRvIFJlZGlyZWN0ZWRTdGRPdXQ6OnN0cigpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nIHsgcmV0dXJuIG1fcnNzLnN0cigpOyB9CisKKyAgICBSZWRpcmVjdGVkU3RkRXJyOjpSZWRpcmVjdGVkU3RkRXJyKCkKKyAgICA6ICAgbV9jZXJyKCBDYXRjaDo6Y2VycigpLCBtX3Jzcy5nZXQoKSApLAorICAgICAgICBtX2Nsb2coIENhdGNoOjpjbG9nKCksIG1fcnNzLmdldCgpICkKKyAgICB7fQorICAgIGF1dG8gUmVkaXJlY3RlZFN0ZEVycjo6c3RyKCkgY29uc3QgLT4gc3RkOjpzdHJpbmcgeyByZXR1cm4gbV9yc3Muc3RyKCk7IH0KKworICAgIFJlZGlyZWN0ZWRTdHJlYW1zOjpSZWRpcmVjdGVkU3RyZWFtcyhzdGQ6OnN0cmluZyYgcmVkaXJlY3RlZENvdXQsIHN0ZDo6c3RyaW5nJiByZWRpcmVjdGVkQ2VycikKKyAgICA6ICAgbV9yZWRpcmVjdGVkQ291dChyZWRpcmVjdGVkQ291dCksCisgICAgICAgIG1fcmVkaXJlY3RlZENlcnIocmVkaXJlY3RlZENlcnIpCisgICAge30KKworICAgIFJlZGlyZWN0ZWRTdHJlYW1zOjp+UmVkaXJlY3RlZFN0cmVhbXMoKSB7CisgICAgICAgIG1fcmVkaXJlY3RlZENvdXQgKz0gbV9yZWRpcmVjdGVkU3RkT3V0LnN0cigpOworICAgICAgICBtX3JlZGlyZWN0ZWRDZXJyICs9IG1fcmVkaXJlY3RlZFN0ZEVyci5zdHIoKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19ORVdfQ0FQVFVSRSkKKworI2lmIGRlZmluZWQoX01TQ19WRVIpCisgICAgVGVtcEZpbGU6OlRlbXBGaWxlKCkgeworICAgICAgICBpZiAodG1wbmFtX3MobV9idWZmZXIpKSB7CisgICAgICAgICAgICBDQVRDSF9SVU5USU1FX0VSUk9SKCJDb3VsZCBub3QgZ2V0IGEgdGVtcCBmaWxlbmFtZSIpOworICAgICAgICB9CisgICAgICAgIGlmIChmb3Blbl9zKCZtX2ZpbGUsIG1fYnVmZmVyLCAidyIpKSB7CisgICAgICAgICAgICBjaGFyIGJ1ZmZlclsxMDBdOworICAgICAgICAgICAgaWYgKHN0cmVycm9yX3MoYnVmZmVyLCBlcnJubykpIHsKKyAgICAgICAgICAgICAgICBDQVRDSF9SVU5USU1FX0VSUk9SKCJDb3VsZCBub3QgdHJhbnNsYXRlIGVycm5vIHRvIGEgc3RyaW5nIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBDQVRDSF9SVU5USU1FX0VSUk9SKCJDb3VsIGRub3Qgb3BlbiB0aGUgdGVtcCBmaWxlOiAnIiA8PCBtX2J1ZmZlciA8PCAiJyBiZWNhdXNlOiAiIDw8IGJ1ZmZlcik7CisgICAgICAgIH0KKyAgICB9CisjZWxzZQorICAgIFRlbXBGaWxlOjpUZW1wRmlsZSgpIHsKKyAgICAgICAgbV9maWxlID0gc3RkOjp0bXBmaWxlKCk7CisgICAgICAgIGlmICghbV9maWxlKSB7CisgICAgICAgICAgICBDQVRDSF9SVU5USU1FX0VSUk9SKCJDb3VsZCBub3QgY3JlYXRlIGEgdGVtcCBmaWxlLiIpOworICAgICAgICB9CisgICAgfQorCisjZW5kaWYKKworICAgIFRlbXBGaWxlOjp+VGVtcEZpbGUoKSB7CisgICAgICAgICAvLyBUQkQ6IFdoYXQgdG8gZG8gYWJvdXQgZXJyb3JzIGhlcmU/CisgICAgICAgICBzdGQ6OmZjbG9zZShtX2ZpbGUpOworICAgICAgICAgLy8gV2UgbWFudWFsbHkgY3JlYXRlIHRoZSBmaWxlIG9uIFdpbmRvd3Mgb25seSwgb24gTGludXgKKyAgICAgICAgIC8vIGl0IHdpbGwgYmUgYXV0b2RlbGV0ZWQKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICAgICAgc3RkOjpyZW1vdmUobV9idWZmZXIpOworI2VuZGlmCisgICAgfQorCisgICAgRklMRSogVGVtcEZpbGU6OmdldEZpbGUoKSB7CisgICAgICAgIHJldHVybiBtX2ZpbGU7CisgICAgfQorCisgICAgc3RkOjpzdHJpbmcgVGVtcEZpbGU6OmdldENvbnRlbnRzKCkgeworICAgICAgICBzdGQ6OnN0cmluZ3N0cmVhbSBzc3RyOworICAgICAgICBjaGFyIGJ1ZmZlclsxMDBdID0ge307CisgICAgICAgIHN0ZDo6cmV3aW5kKG1fZmlsZSk7CisgICAgICAgIHdoaWxlIChzdGQ6OmZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIG1fZmlsZSkpIHsKKyAgICAgICAgICAgIHNzdHIgPDwgYnVmZmVyOworICAgICAgICB9CisgICAgICAgIHJldHVybiBzc3RyLnN0cigpOworICAgIH0KKworICAgIE91dHB1dFJlZGlyZWN0OjpPdXRwdXRSZWRpcmVjdChzdGQ6OnN0cmluZyYgc3Rkb3V0X2Rlc3QsIHN0ZDo6c3RyaW5nJiBzdGRlcnJfZGVzdCkgOgorICAgICAgICBtX29yaWdpbmFsU3Rkb3V0KGR1cCgxKSksCisgICAgICAgIG1fb3JpZ2luYWxTdGRlcnIoZHVwKDIpKSwKKyAgICAgICAgbV9zdGRvdXREZXN0KHN0ZG91dF9kZXN0KSwKKyAgICAgICAgbV9zdGRlcnJEZXN0KHN0ZGVycl9kZXN0KSB7CisgICAgICAgIGR1cDIoZmlsZW5vKG1fc3Rkb3V0RmlsZS5nZXRGaWxlKCkpLCAxKTsKKyAgICAgICAgZHVwMihmaWxlbm8obV9zdGRlcnJGaWxlLmdldEZpbGUoKSksIDIpOworICAgIH0KKworICAgIE91dHB1dFJlZGlyZWN0Ojp+T3V0cHV0UmVkaXJlY3QoKSB7CisgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgc3RkOjpmbHVzaDsKKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgICAgIC8vIFNpbmNlIHdlIHN1cHBvcnQgb3ZlcnJpZGluZyB0aGVzZSBzdHJlYW1zLCB3ZSBmbHVzaCBjZXJyCisgICAgICAgIC8vIGV2ZW4gdGhvdWdoIHN0ZDo6Y2VyciBpcyB1bmJ1ZmZlcmVkCisgICAgICAgIENhdGNoOjpjZXJyKCkgPDwgc3RkOjpmbHVzaDsKKyAgICAgICAgQ2F0Y2g6OmNsb2coKSA8PCBzdGQ6OmZsdXNoOworICAgICAgICBmZmx1c2goc3RkZXJyKTsKKworICAgICAgICBkdXAyKG1fb3JpZ2luYWxTdGRvdXQsIDEpOworICAgICAgICBkdXAyKG1fb3JpZ2luYWxTdGRlcnIsIDIpOworCisgICAgICAgIG1fc3Rkb3V0RGVzdCArPSBtX3N0ZG91dEZpbGUuZ2V0Q29udGVudHMoKTsKKyAgICAgICAgbV9zdGRlcnJEZXN0ICs9IG1fc3RkZXJyRmlsZS5nZXRDb250ZW50cygpOworICAgIH0KKworI2VuZGlmIC8vIENBVENIX0NPTkZJR19ORVdfQ0FQVFVSRQorCit9IC8vIG5hbWVzcGFjZSBDYXRjaAorCisjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfTkVXX0NBUFRVUkUpCisgICAgI2lmIGRlZmluZWQoX01TQ19WRVIpCisgICAgI3VuZGVmIGR1cAorICAgICN1bmRlZiBkdXAyCisgICAgI3VuZGVmIGZpbGVubworICAgICNlbmRpZgorI2VuZGlmCisvLyBlbmQgY2F0Y2hfb3V0cHV0X3JlZGlyZWN0LmNwcAorLy8gc3RhcnQgY2F0Y2hfcG9seWZpbGxzLmNwcAorCisjaW5jbHVkZSA8Y21hdGg+CisKK25hbWVzcGFjZSBDYXRjaCB7CisKKyNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfUE9MWUZJTExfSVNOQU4pCisgICAgYm9vbCBpc25hbihmbG9hdCBmKSB7CisgICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKGYpOworICAgIH0KKyAgICBib29sIGlzbmFuKGRvdWJsZSBkKSB7CisgICAgICAgIHJldHVybiBzdGQ6OmlzbmFuKGQpOworICAgIH0KKyNlbHNlCisgICAgLy8gRm9yIG5vdyB3ZSBvbmx5IHVzZSB0aGlzIGZvciBlbWJhcmNhZGVybworICAgIGJvb2wgaXNuYW4oZmxvYXQgZikgeworICAgICAgICByZXR1cm4gc3RkOjpfaXNuYW4oZik7CisgICAgfQorICAgIGJvb2wgaXNuYW4oZG91YmxlIGQpIHsKKyAgICAgICAgcmV0dXJuIHN0ZDo6X2lzbmFuKGQpOworICAgIH0KKyNlbmRpZgorCit9IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKKy8vIGVuZCBjYXRjaF9wb2x5ZmlsbHMuY3BwCisvLyBzdGFydCBjYXRjaF9yYW5kb21fbnVtYmVyX2dlbmVyYXRvci5jcHAKKworbmFtZXNwYWNlIENhdGNoIHsKKworICAgIHN0ZDo6bXQxOTkzNyYgcm5nKCkgeworICAgICAgICBzdGF0aWMgc3RkOjptdDE5OTM3IHNfcm5nOworICAgICAgICByZXR1cm4gc19ybmc7CisgICAgfQorCisgICAgdm9pZCBzZWVkUm5nKCBJQ29uZmlnIGNvbnN0JiBjb25maWcgKSB7CisgICAgICAgIGlmKCBjb25maWcucm5nU2VlZCgpICE9IDAgKSB7CisgICAgICAgICAgICBzdGQ6OnNyYW5kKCBjb25maWcucm5nU2VlZCgpICk7CisgICAgICAgICAgICBybmcoKS5zZWVkKCBjb25maWcucm5nU2VlZCgpICk7CisgICAgICAgIH0KKyAgICB9CisKICAgICB1bnNpZ25lZCBpbnQgcm5nU2VlZCgpIHsKICAgICAgICAgcmV0dXJuIGdldEN1cnJlbnRDb250ZXh0KCkuZ2V0Q29uZmlnKCktPnJuZ1NlZWQoKTsKICAgICB9Ci0KLSAgICBSYW5kb21OdW1iZXJHZW5lcmF0b3I6OnJlc3VsdF90eXBlIFJhbmRvbU51bWJlckdlbmVyYXRvcjo6b3BlcmF0b3IoKSggcmVzdWx0X3R5cGUgbiApIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIHN0ZDo6cmFuZCgpICUgbjsKLSAgICB9Ci0gICAgUmFuZG9tTnVtYmVyR2VuZXJhdG9yOjpyZXN1bHRfdHlwZSBSYW5kb21OdW1iZXJHZW5lcmF0b3I6Om9wZXJhdG9yKCkoKSBjb25zdCB7Ci0gICAgICAgIHJldHVybiBzdGQ6OnJhbmQoKSAlIChtYXgpKCk7Ci0gICAgfQotCiB9CiAvLyBlbmQgY2F0Y2hfcmFuZG9tX251bWJlcl9nZW5lcmF0b3IuY3BwCiAvLyBzdGFydCBjYXRjaF9yZWdpc3RyeV9odWIuY3BwCkBAIC04MTE4LDcgKzk5OTAsNyBAQAogICAgICAgICB2b2lkIGludm9rZSgpIGNvbnN0IG92ZXJyaWRlOwogICAgIH07CiAKLSAgICBzdGQ6OnN0cmluZyBleHRyYWN0Q2xhc3NOYW1lKCBzdGQ6OnN0cmluZyBjb25zdCYgY2xhc3NPclF1YWxpZmllZE1ldGhvZE5hbWUgKTsKKyAgICBzdGQ6OnN0cmluZyBleHRyYWN0Q2xhc3NOYW1lKCBTdHJpbmdSZWYgY29uc3QmIGNsYXNzT3JRdWFsaWZpZWRNZXRob2ROYW1lICk7CiAKICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIApAQCAtODIwNiw2ICsxMDA3OCw0MSBAQAogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCiAKIC8vIGVuZCBjYXRjaF9zdGFydHVwX2V4Y2VwdGlvbl9yZWdpc3RyeS5oCisvLyBzdGFydCBjYXRjaF9zaW5nbGV0b25zLmhwcAorCituYW1lc3BhY2UgQ2F0Y2ggeworCisgICAgc3RydWN0IElTaW5nbGV0b24geworICAgICAgICB2aXJ0dWFsIH5JU2luZ2xldG9uKCk7CisgICAgfTsKKworICAgIHZvaWQgYWRkU2luZ2xldG9uKCBJU2luZ2xldG9uKiBzaW5nbGV0b24gKTsKKyAgICB2b2lkIGNsZWFudXBTaW5nbGV0b25zKCk7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTaW5nbGV0b25JbXBsVCwgdHlwZW5hbWUgSW50ZXJmYWNlVCA9IFNpbmdsZXRvbkltcGxULCB0eXBlbmFtZSBNdXRhYmxlSW50ZXJmYWNlVCA9IEludGVyZmFjZVQ+CisgICAgY2xhc3MgU2luZ2xldG9uIDogU2luZ2xldG9uSW1wbFQsIHB1YmxpYyBJU2luZ2xldG9uIHsKKworICAgICAgICBzdGF0aWMgYXV0byBnZXRJbnRlcm5hbCgpIC0+IFNpbmdsZXRvbiogeworICAgICAgICAgICAgc3RhdGljIFNpbmdsZXRvbiogc19pbnN0YW5jZSA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiggIXNfaW5zdGFuY2UgKSB7CisgICAgICAgICAgICAgICAgc19pbnN0YW5jZSA9IG5ldyBTaW5nbGV0b247CisgICAgICAgICAgICAgICAgYWRkU2luZ2xldG9uKCBzX2luc3RhbmNlICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gc19pbnN0YW5jZTsKKyAgICAgICAgfQorCisgICAgcHVibGljOgorICAgICAgICBzdGF0aWMgYXV0byBnZXQoKSAtPiBJbnRlcmZhY2VUIGNvbnN0JiB7CisgICAgICAgICAgICByZXR1cm4gKmdldEludGVybmFsKCk7CisgICAgICAgIH0KKyAgICAgICAgc3RhdGljIGF1dG8gZ2V0TXV0YWJsZSgpIC0+IE11dGFibGVJbnRlcmZhY2VUJiB7CisgICAgICAgICAgICByZXR1cm4gKmdldEludGVybmFsKCk7CisgICAgICAgIH0KKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBDYXRjaAorCisvLyBlbmQgY2F0Y2hfc2luZ2xldG9ucy5ocHAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKICAgICBuYW1lc3BhY2UgewpAQCAtODIyMSw3ICsxMDEyOCw3IEBACiAgICAgICAgICAgICBJVGVzdENhc2VSZWdpc3RyeSBjb25zdCYgZ2V0VGVzdENhc2VSZWdpc3RyeSgpIGNvbnN0IG92ZXJyaWRlIHsKICAgICAgICAgICAgICAgICByZXR1cm4gbV90ZXN0Q2FzZVJlZ2lzdHJ5OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgSUV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeSYgZ2V0RXhjZXB0aW9uVHJhbnNsYXRvclJlZ2lzdHJ5KCkgb3ZlcnJpZGUgeworICAgICAgICAgICAgSUV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeSBjb25zdCYgZ2V0RXhjZXB0aW9uVHJhbnNsYXRvclJlZ2lzdHJ5KCkgY29uc3Qgb3ZlcnJpZGUgewogICAgICAgICAgICAgICAgIHJldHVybiBtX2V4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIElUYWdBbGlhc1JlZ2lzdHJ5IGNvbnN0JiBnZXRUYWdBbGlhc1JlZ2lzdHJ5KCkgY29uc3Qgb3ZlcnJpZGUgewpAQCAtODI1OCwyNyArMTAxNjUsMTkgQEAKICAgICAgICAgICAgIFRhZ0FsaWFzUmVnaXN0cnkgbV90YWdBbGlhc1JlZ2lzdHJ5OwogICAgICAgICAgICAgU3RhcnR1cEV4Y2VwdGlvblJlZ2lzdHJ5IG1fZXhjZXB0aW9uUmVnaXN0cnk7CiAgICAgICAgIH07Ci0KLSAgICAgICAgLy8gU2luZ2xlLCBnbG9iYWwsIGluc3RhbmNlCi0gICAgICAgIFJlZ2lzdHJ5SHViKiYgZ2V0VGhlUmVnaXN0cnlIdWIoKSB7Ci0gICAgICAgICAgICBzdGF0aWMgUmVnaXN0cnlIdWIqIHRoZVJlZ2lzdHJ5SHViID0gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmKCAhdGhlUmVnaXN0cnlIdWIgKQotICAgICAgICAgICAgICAgIHRoZVJlZ2lzdHJ5SHViID0gbmV3IFJlZ2lzdHJ5SHViKCk7Ci0gICAgICAgICAgICByZXR1cm4gdGhlUmVnaXN0cnlIdWI7Ci0gICAgICAgIH0KICAgICB9CiAKLSAgICBJUmVnaXN0cnlIdWImIGdldFJlZ2lzdHJ5SHViKCkgewotICAgICAgICByZXR1cm4gKmdldFRoZVJlZ2lzdHJ5SHViKCk7CisgICAgdXNpbmcgUmVnaXN0cnlIdWJTaW5nbGV0b24gPSBTaW5nbGV0b248UmVnaXN0cnlIdWIsIElSZWdpc3RyeUh1YiwgSU11dGFibGVSZWdpc3RyeUh1Yj47CisKKyAgICBJUmVnaXN0cnlIdWIgY29uc3QmIGdldFJlZ2lzdHJ5SHViKCkgeworICAgICAgICByZXR1cm4gUmVnaXN0cnlIdWJTaW5nbGV0b246OmdldCgpOwogICAgIH0KICAgICBJTXV0YWJsZVJlZ2lzdHJ5SHViJiBnZXRNdXRhYmxlUmVnaXN0cnlIdWIoKSB7Ci0gICAgICAgIHJldHVybiAqZ2V0VGhlUmVnaXN0cnlIdWIoKTsKKyAgICAgICAgcmV0dXJuIFJlZ2lzdHJ5SHViU2luZ2xldG9uOjpnZXRNdXRhYmxlKCk7CiAgICAgfQogICAgIHZvaWQgY2xlYW5VcCgpIHsKLSAgICAgICAgZGVsZXRlIGdldFRoZVJlZ2lzdHJ5SHViKCk7Ci0gICAgICAgIGdldFRoZVJlZ2lzdHJ5SHViKCkgPSBudWxscHRyOworICAgICAgICBjbGVhbnVwU2luZ2xldG9ucygpOwogICAgICAgICBjbGVhblVwQ29udGV4dCgpOwotICAgICAgICBSZXVzYWJsZVN0cmluZ1N0cmVhbTo6Y2xlYW51cCgpOwogICAgIH0KICAgICBzdGQ6OnN0cmluZyB0cmFuc2xhdGVBY3RpdmVFeGNlcHRpb24oKSB7CiAgICAgICAgIHJldHVybiBnZXRSZWdpc3RyeUh1YigpLmdldEV4Y2VwdGlvblRyYW5zbGF0b3JSZWdpc3RyeSgpLnRyYW5zbGF0ZUFjdGl2ZUV4Y2VwdGlvbigpOwpAQCAtODM0Myw1NCArMTAyNDIsNjggQEAKIAogbmFtZXNwYWNlIENhdGNoIHsKIAotICAgIGNsYXNzIFJlZGlyZWN0ZWRTdHJlYW0gewotICAgICAgICBzdGQ6Om9zdHJlYW0mIG1fb3JpZ2luYWxTdHJlYW07Ci0gICAgICAgIHN0ZDo6b3N0cmVhbSYgbV9yZWRpcmVjdGlvblN0cmVhbTsKLSAgICAgICAgc3RkOjpzdHJlYW1idWYqIG1fcHJldkJ1ZjsKKyAgICBuYW1lc3BhY2UgR2VuZXJhdG9ycyB7CisgICAgICAgIHN0cnVjdCBHZW5lcmF0b3JUcmFja2VyIDogVGVzdENhc2VUcmFja2luZzo6VHJhY2tlckJhc2UsIElHZW5lcmF0b3JUcmFja2VyIHsKKyAgICAgICAgICAgIEdlbmVyYXRvckJhc2VQdHIgbV9nZW5lcmF0b3I7CiAKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJlZGlyZWN0ZWRTdHJlYW0oIHN0ZDo6b3N0cmVhbSYgb3JpZ2luYWxTdHJlYW0sIHN0ZDo6b3N0cmVhbSYgcmVkaXJlY3Rpb25TdHJlYW0gKQotICAgICAgICA6ICAgbV9vcmlnaW5hbFN0cmVhbSggb3JpZ2luYWxTdHJlYW0gKSwKLSAgICAgICAgICAgIG1fcmVkaXJlY3Rpb25TdHJlYW0oIHJlZGlyZWN0aW9uU3RyZWFtICksCi0gICAgICAgICAgICBtX3ByZXZCdWYoIG1fb3JpZ2luYWxTdHJlYW0ucmRidWYoKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG1fb3JpZ2luYWxTdHJlYW0ucmRidWYoIG1fcmVkaXJlY3Rpb25TdHJlYW0ucmRidWYoKSApOwotICAgICAgICB9Ci0gICAgICAgIH5SZWRpcmVjdGVkU3RyZWFtKCkgewotICAgICAgICAgICAgbV9vcmlnaW5hbFN0cmVhbS5yZGJ1ZiggbV9wcmV2QnVmICk7Ci0gICAgICAgIH0KLSAgICB9OworICAgICAgICAgICAgR2VuZXJhdG9yVHJhY2tlciggVGVzdENhc2VUcmFja2luZzo6TmFtZUFuZExvY2F0aW9uIGNvbnN0JiBuYW1lQW5kTG9jYXRpb24sIFRyYWNrZXJDb250ZXh0JiBjdHgsIElUcmFja2VyKiBwYXJlbnQgKQorICAgICAgICAgICAgOiAgIFRyYWNrZXJCYXNlKCBuYW1lQW5kTG9jYXRpb24sIGN0eCwgcGFyZW50ICkKKyAgICAgICAgICAgIHt9CisgICAgICAgICAgICB+R2VuZXJhdG9yVHJhY2tlcigpOwogCi0gICAgY2xhc3MgUmVkaXJlY3RlZFN0ZE91dCB7Ci0gICAgICAgIFJldXNhYmxlU3RyaW5nU3RyZWFtIG1fcnNzOwotICAgICAgICBSZWRpcmVjdGVkU3RyZWFtIG1fY291dDsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJlZGlyZWN0ZWRTdGRPdXQoKSA6IG1fY291dCggQ2F0Y2g6OmNvdXQoKSwgbV9yc3MuZ2V0KCkgKSB7fQotICAgICAgICBhdXRvIHN0cigpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nIHsgcmV0dXJuIG1fcnNzLnN0cigpOyB9Ci0gICAgfTsKKyAgICAgICAgICAgIHN0YXRpYyBHZW5lcmF0b3JUcmFja2VyJiBhY3F1aXJlKCBUcmFja2VyQ29udGV4dCYgY3R4LCBUZXN0Q2FzZVRyYWNraW5nOjpOYW1lQW5kTG9jYXRpb24gY29uc3QmIG5hbWVBbmRMb2NhdGlvbiApIHsKKyAgICAgICAgICAgICAgICBzdGQ6OnNoYXJlZF9wdHI8R2VuZXJhdG9yVHJhY2tlcj4gdHJhY2tlcjsKIAotICAgIC8vIFN0ZEVyciBoYXMgdHdvIGNvbnN0aXR1ZW50IHN0cmVhbXMgaW4gQysrLCBzdGQ6OmNlcnIgYW5kIHN0ZDo6Y2xvZwotICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB3ZSBuZWVkIHRvIHJlZGlyZWN0IDIgc3RyZWFtcyBpbnRvIDEgdG8ga2VlcCBwcm9wZXIKLSAgICAvLyBvcmRlciBvZiB3cml0ZXMKLSAgICBjbGFzcyBSZWRpcmVjdGVkU3RkRXJyIHsKLSAgICAgICAgUmV1c2FibGVTdHJpbmdTdHJlYW0gbV9yc3M7Ci0gICAgICAgIFJlZGlyZWN0ZWRTdHJlYW0gbV9jZXJyOwotICAgICAgICBSZWRpcmVjdGVkU3RyZWFtIG1fY2xvZzsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFJlZGlyZWN0ZWRTdGRFcnIoKQotICAgICAgICA6ICAgbV9jZXJyKCBDYXRjaDo6Y2VycigpLCBtX3Jzcy5nZXQoKSApLAotICAgICAgICAgICAgbV9jbG9nKCBDYXRjaDo6Y2xvZygpLCBtX3Jzcy5nZXQoKSApCi0gICAgICAgIHt9Ci0gICAgICAgIGF1dG8gc3RyKCkgY29uc3QgLT4gc3RkOjpzdHJpbmcgeyByZXR1cm4gbV9yc3Muc3RyKCk7IH0KLSAgICB9OworICAgICAgICAgICAgICAgIElUcmFja2VyJiBjdXJyZW50VHJhY2tlciA9IGN0eC5jdXJyZW50VHJhY2tlcigpOworICAgICAgICAgICAgICAgIGlmKCBUZXN0Q2FzZVRyYWNraW5nOjpJVHJhY2tlclB0ciBjaGlsZFRyYWNrZXIgPSBjdXJyZW50VHJhY2tlci5maW5kQ2hpbGQoIG5hbWVBbmRMb2NhdGlvbiApICkgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoIGNoaWxkVHJhY2tlciApOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoIGNoaWxkVHJhY2tlci0+aXNHZW5lcmF0b3JUcmFja2VyKCkgKTsKKyAgICAgICAgICAgICAgICAgICAgdHJhY2tlciA9IHN0ZDo6c3RhdGljX3BvaW50ZXJfY2FzdDxHZW5lcmF0b3JUcmFja2VyPiggY2hpbGRUcmFja2VyICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0cmFja2VyID0gc3RkOjptYWtlX3NoYXJlZDxHZW5lcmF0b3JUcmFja2VyPiggbmFtZUFuZExvY2F0aW9uLCBjdHgsICZjdXJyZW50VHJhY2tlciApOworICAgICAgICAgICAgICAgICAgICBjdXJyZW50VHJhY2tlci5hZGRDaGlsZCggdHJhY2tlciApOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmKCAhY3R4LmNvbXBsZXRlZEN5Y2xlKCkgJiYgIXRyYWNrZXItPmlzQ29tcGxldGUoKSApIHsKKyAgICAgICAgICAgICAgICAgICAgdHJhY2tlci0+b3BlbigpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiAqdHJhY2tlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVHJhY2tlckJhc2UgaW50ZXJmYWNlCisgICAgICAgICAgICBib29sIGlzR2VuZXJhdG9yVHJhY2tlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgICAgIGF1dG8gaGFzR2VuZXJhdG9yKCkgY29uc3QgLT4gYm9vbCBvdmVycmlkZSB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEhbV9nZW5lcmF0b3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2b2lkIGNsb3NlKCkgb3ZlcnJpZGUgeworICAgICAgICAgICAgICAgIFRyYWNrZXJCYXNlOjpjbG9zZSgpOworICAgICAgICAgICAgICAgIC8vIEdlbmVyYXRvciBpbnRlcmZhY2Ugb25seSBmaW5kcyBvdXQgaWYgaXQgaGFzIGFub3RoZXIgaXRlbSBvbiBhdHVhbCBtb3ZlCisgICAgICAgICAgICAgICAgaWYgKG1fcnVuU3RhdGUgPT0gQ29tcGxldGVkU3VjY2Vzc2Z1bGx5ICYmIG1fZ2VuZXJhdG9yLT5uZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGlsZHJlbi5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICBtX3J1blN0YXRlID0gRXhlY3V0aW5nOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gSUdlbmVyYXRvclRyYWNrZXIgaW50ZXJmYWNlCisgICAgICAgICAgICBhdXRvIGdldEdlbmVyYXRvcigpIGNvbnN0IC0+IEdlbmVyYXRvckJhc2VQdHIgY29uc3QmIG92ZXJyaWRlIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9nZW5lcmF0b3I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2b2lkIHNldEdlbmVyYXRvciggR2VuZXJhdG9yQmFzZVB0ciYmIGdlbmVyYXRvciApIG92ZXJyaWRlIHsKKyAgICAgICAgICAgICAgICBtX2dlbmVyYXRvciA9IHN0ZDo6bW92ZSggZ2VuZXJhdG9yICk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgICAgIEdlbmVyYXRvclRyYWNrZXI6On5HZW5lcmF0b3JUcmFja2VyKCkge30KKyAgICB9CiAKICAgICBSdW5Db250ZXh0OjpSdW5Db250ZXh0KElDb25maWdQdHIgY29uc3QmIF9jb25maWcsIElTdHJlYW1pbmdSZXBvcnRlclB0ciYmIHJlcG9ydGVyKQogICAgIDogICBtX3J1bkluZm8oX2NvbmZpZy0+bmFtZSgpKSwKICAgICAgICAgbV9jb250ZXh0KGdldEN1cnJlbnRNdXRhYmxlQ29udGV4dCgpKSwKICAgICAgICAgbV9jb25maWcoX2NvbmZpZyksCiAgICAgICAgIG1fcmVwb3J0ZXIoc3RkOjptb3ZlKHJlcG9ydGVyKSksCi0gICAgICAgIG1fbGFzdEFzc2VydGlvbkluZm97ICIiLCBTb3VyY2VMaW5lSW5mbygiIiwwKSwgIiIsIFJlc3VsdERpc3Bvc2l0aW9uOjpOb3JtYWwgfSwKLSAgICAgICAgbV9pbmNsdWRlU3VjY2Vzc2Z1bFJlc3VsdHMoIG1fY29uZmlnLT5pbmNsdWRlU3VjY2Vzc2Z1bFJlc3VsdHMoKSApCisgICAgICAgIG1fbGFzdEFzc2VydGlvbkluZm97IFN0cmluZ1JlZigpLCBTb3VyY2VMaW5lSW5mbygiIiwwKSwgU3RyaW5nUmVmKCksIFJlc3VsdERpc3Bvc2l0aW9uOjpOb3JtYWwgfSwKKyAgICAgICAgbV9pbmNsdWRlU3VjY2Vzc2Z1bFJlc3VsdHMoIG1fY29uZmlnLT5pbmNsdWRlU3VjY2Vzc2Z1bFJlc3VsdHMoKSB8fCBtX3JlcG9ydGVyLT5nZXRQcmVmZXJlbmNlcygpLnNob3VsZFJlcG9ydEFsbEFzc2VydGlvbnMgKQogICAgIHsKICAgICAgICAgbV9jb250ZXh0LnNldFJ1bm5lcih0aGlzKTsKICAgICAgICAgbV9jb250ZXh0LnNldENvbmZpZyhtX2NvbmZpZyk7CkBAIC04NDE2LDcgKzEwMzI5LDcgQEAKICAgICAgICAgc3RkOjpzdHJpbmcgcmVkaXJlY3RlZENvdXQ7CiAgICAgICAgIHN0ZDo6c3RyaW5nIHJlZGlyZWN0ZWRDZXJyOwogCi0gICAgICAgIFRlc3RDYXNlSW5mbyB0ZXN0SW5mbyA9IHRlc3RDYXNlLmdldFRlc3RDYXNlSW5mbygpOworICAgICAgICBhdXRvIGNvbnN0JiB0ZXN0SW5mbyA9IHRlc3RDYXNlLmdldFRlc3RDYXNlSW5mbygpOwogCiAgICAgICAgIG1fcmVwb3J0ZXItPnRlc3RDYXNlU3RhcnRpbmcodGVzdEluZm8pOwogCkBAIC04NDc3LDYgKzEwMzkwLDkgQEAKICAgICAgICAgLy8gYW5kIHNob3VsZCBiZSBsZXQgdG8gY2xlYXIgdGhlbXNlbHZlcyBvdXQuCiAgICAgICAgIHN0YXRpY19jYXN0PHZvaWQ+KG1fcmVwb3J0ZXItPmFzc2VydGlvbkVuZGVkKEFzc2VydGlvblN0YXRzKHJlc3VsdCwgbV9tZXNzYWdlcywgbV90b3RhbHMpKSk7CiAKKyAgICAgICAgaWYgKHJlc3VsdC5nZXRSZXN1bHRUeXBlKCkgIT0gUmVzdWx0V2FzOjpXYXJuaW5nKQorICAgICAgICAgICAgbV9tZXNzYWdlU2NvcGVzLmNsZWFyKCk7CisKICAgICAgICAgLy8gUmVzZXQgd29ya2luZyBzdGF0ZQogICAgICAgICByZXNldEFzc2VydGlvbkluZm8oKTsKICAgICAgICAgbV9sYXN0UmVzdWx0ID0gcmVzdWx0OwpAQCAtODUwMCw2ICsxMDQxNiwxMyBAQAogCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KKyAgICBhdXRvIFJ1bkNvbnRleHQ6OmFjcXVpcmVHZW5lcmF0b3JUcmFja2VyKCBTb3VyY2VMaW5lSW5mbyBjb25zdCYgbGluZUluZm8gKSAtPiBJR2VuZXJhdG9yVHJhY2tlciYgeworICAgICAgICB1c2luZyBuYW1lc3BhY2UgR2VuZXJhdG9yczsKKyAgICAgICAgR2VuZXJhdG9yVHJhY2tlciYgdHJhY2tlciA9IEdlbmVyYXRvclRyYWNrZXI6OmFjcXVpcmUoIG1fdHJhY2tlckNvbnRleHQsIFRlc3RDYXNlVHJhY2tpbmc6Ok5hbWVBbmRMb2NhdGlvbiggImdlbmVyYXRvciIsIGxpbmVJbmZvICkgKTsKKyAgICAgICAgYXNzZXJ0KCB0cmFja2VyLmlzT3BlbigpICk7CisgICAgICAgIG1fbGFzdEFzc2VydGlvbkluZm8ubGluZUluZm8gPSBsaW5lSW5mbzsKKyAgICAgICAgcmV0dXJuIHRyYWNrZXI7CisgICAgfQogCiAgICAgYm9vbCBSdW5Db250ZXh0Ojp0ZXN0Rm9yTWlzc2luZ0Fzc2VydGlvbnMoQ291bnRzJiBhc3NlcnRpb25zKSB7CiAgICAgICAgIGlmIChhc3NlcnRpb25zLnRvdGFsKCkgIT0gMCkKQEAgLTg1MjQsNiArMTA0NDcsNyBAQAogCiAgICAgICAgIG1fcmVwb3J0ZXItPnNlY3Rpb25FbmRlZChTZWN0aW9uU3RhdHMoZW5kSW5mby5zZWN0aW9uSW5mbywgYXNzZXJ0aW9ucywgZW5kSW5mby5kdXJhdGlvbkluU2Vjb25kcywgbWlzc2luZ0Fzc2VydGlvbnMpKTsKICAgICAgICAgbV9tZXNzYWdlcy5jbGVhcigpOworICAgICAgICBtX21lc3NhZ2VTY29wZXMuY2xlYXIoKTsKICAgICB9CiAKICAgICB2b2lkIFJ1bkNvbnRleHQ6OnNlY3Rpb25FbmRlZEVhcmx5KFNlY3Rpb25FbmRJbmZvIGNvbnN0ICYgZW5kSW5mbykgewpAQCAtODU1MCw2ICsxMDQ3NCwxMCBAQAogICAgICAgICBtX21lc3NhZ2VzLmVyYXNlKHN0ZDo6cmVtb3ZlKG1fbWVzc2FnZXMuYmVnaW4oKSwgbV9tZXNzYWdlcy5lbmQoKSwgbWVzc2FnZSksIG1fbWVzc2FnZXMuZW5kKCkpOwogICAgIH0KIAorICAgIHZvaWQgUnVuQ29udGV4dDo6ZW1wbGFjZVVuc2NvcGVkTWVzc2FnZSggTWVzc2FnZUJ1aWxkZXIgY29uc3QmIGJ1aWxkZXIgKSB7CisgICAgICAgIG1fbWVzc2FnZVNjb3Blcy5lbXBsYWNlX2JhY2soIGJ1aWxkZXIgKTsKKyAgICB9CisKICAgICBzdGQ6OnN0cmluZyBSdW5Db250ZXh0OjpnZXRDdXJyZW50VGVzdE5hbWUoKSBjb25zdCB7CiAgICAgICAgIHJldHVybiBtX2FjdGl2ZVRlc3RDYXNlCiAgICAgICAgICAgICA/IG1fYWN0aXZlVGVzdENhc2UtPmdldFRlc3RDYXNlSW5mbygpLm5hbWUKQEAgLTg1ODAsNyArMTA1MDgsNyBAQAogCiAgICAgICAgIC8vIFJlY3JlYXRlIHNlY3Rpb24gZm9yIHRlc3QgY2FzZSAoYXMgd2Ugd2lsbCBsb3NlIHRoZSBvbmUgdGhhdCB3YXMgaW4gc2NvcGUpCiAgICAgICAgIGF1dG8gY29uc3QmIHRlc3RDYXNlSW5mbyA9IG1fYWN0aXZlVGVzdENhc2UtPmdldFRlc3RDYXNlSW5mbygpOwotICAgICAgICBTZWN0aW9uSW5mbyB0ZXN0Q2FzZVNlY3Rpb24odGVzdENhc2VJbmZvLmxpbmVJbmZvLCB0ZXN0Q2FzZUluZm8ubmFtZSwgdGVzdENhc2VJbmZvLmRlc2NyaXB0aW9uKTsKKyAgICAgICAgU2VjdGlvbkluZm8gdGVzdENhc2VTZWN0aW9uKHRlc3RDYXNlSW5mby5saW5lSW5mbywgdGVzdENhc2VJbmZvLm5hbWUpOwogCiAgICAgICAgIENvdW50cyBhc3NlcnRpb25zOwogICAgICAgICBhc3NlcnRpb25zLmZhaWxlZCA9IDE7CkBAIC04NjEwLDQxICsxMDUzOCw0NSBAQAogICAgICAgICBtX2xhc3RBc3NlcnRpb25QYXNzZWQgPSB0cnVlOwogICAgICAgICArK21fdG90YWxzLmFzc2VydGlvbnMucGFzc2VkOwogICAgICAgICByZXNldEFzc2VydGlvbkluZm8oKTsKKyAgICAgICAgbV9tZXNzYWdlU2NvcGVzLmNsZWFyKCk7CiAgICAgfQogCiAgICAgYm9vbCBSdW5Db250ZXh0OjphYm9ydGluZygpIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuIG1fdG90YWxzLmFzc2VydGlvbnMuZmFpbGVkID09IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihtX2NvbmZpZy0+YWJvcnRBZnRlcigpKTsKKyAgICAgICAgcmV0dXJuIG1fdG90YWxzLmFzc2VydGlvbnMuZmFpbGVkID49IHN0YXRpY19jYXN0PHN0ZDo6c2l6ZV90PihtX2NvbmZpZy0+YWJvcnRBZnRlcigpKTsKICAgICB9CiAKICAgICB2b2lkIFJ1bkNvbnRleHQ6OnJ1bkN1cnJlbnRUZXN0KHN0ZDo6c3RyaW5nICYgcmVkaXJlY3RlZENvdXQsIHN0ZDo6c3RyaW5nICYgcmVkaXJlY3RlZENlcnIpIHsKICAgICAgICAgYXV0byBjb25zdCYgdGVzdENhc2VJbmZvID0gbV9hY3RpdmVUZXN0Q2FzZS0+Z2V0VGVzdENhc2VJbmZvKCk7Ci0gICAgICAgIFNlY3Rpb25JbmZvIHRlc3RDYXNlU2VjdGlvbih0ZXN0Q2FzZUluZm8ubGluZUluZm8sIHRlc3RDYXNlSW5mby5uYW1lLCB0ZXN0Q2FzZUluZm8uZGVzY3JpcHRpb24pOworICAgICAgICBTZWN0aW9uSW5mbyB0ZXN0Q2FzZVNlY3Rpb24odGVzdENhc2VJbmZvLmxpbmVJbmZvLCB0ZXN0Q2FzZUluZm8ubmFtZSk7CiAgICAgICAgIG1fcmVwb3J0ZXItPnNlY3Rpb25TdGFydGluZyh0ZXN0Q2FzZVNlY3Rpb24pOwogICAgICAgICBDb3VudHMgcHJldkFzc2VydGlvbnMgPSBtX3RvdGFscy5hc3NlcnRpb25zOwogICAgICAgICBkb3VibGUgZHVyYXRpb24gPSAwOwogICAgICAgICBtX3Nob3VsZFJlcG9ydFVuZXhwZWN0ZWQgPSB0cnVlOwotICAgICAgICBtX2xhc3RBc3NlcnRpb25JbmZvID0geyAiVEVTVF9DQVNFIiwgdGVzdENhc2VJbmZvLmxpbmVJbmZvLCAiIiwgUmVzdWx0RGlzcG9zaXRpb246Ok5vcm1hbCB9OworICAgICAgICBtX2xhc3RBc3NlcnRpb25JbmZvID0geyAiVEVTVF9DQVNFIl9zciwgdGVzdENhc2VJbmZvLmxpbmVJbmZvLCBTdHJpbmdSZWYoKSwgUmVzdWx0RGlzcG9zaXRpb246Ok5vcm1hbCB9OwogCiAgICAgICAgIHNlZWRSbmcoKm1fY29uZmlnKTsKIAogICAgICAgICBUaW1lciB0aW1lcjsKLSAgICAgICAgdHJ5IHsKKyAgICAgICAgQ0FUQ0hfVFJZIHsKICAgICAgICAgICAgIGlmIChtX3JlcG9ydGVyLT5nZXRQcmVmZXJlbmNlcygpLnNob3VsZFJlZGlyZWN0U3RkT3V0KSB7Ci0gICAgICAgICAgICAgICAgUmVkaXJlY3RlZFN0ZE91dCByZWRpcmVjdGVkU3RkT3V0OwotICAgICAgICAgICAgICAgIFJlZGlyZWN0ZWRTdGRFcnIgcmVkaXJlY3RlZFN0ZEVycjsKKyNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfRVhQRVJJTUVOVEFMX1JFRElSRUNUKQorICAgICAgICAgICAgICAgIFJlZGlyZWN0ZWRTdHJlYW1zIHJlZGlyZWN0ZWRTdHJlYW1zKHJlZGlyZWN0ZWRDb3V0LCByZWRpcmVjdGVkQ2Vycik7CisKICAgICAgICAgICAgICAgICB0aW1lci5zdGFydCgpOwogICAgICAgICAgICAgICAgIGludm9rZUFjdGl2ZVRlc3RDYXNlKCk7Ci0gICAgICAgICAgICAgICAgcmVkaXJlY3RlZENvdXQgKz0gcmVkaXJlY3RlZFN0ZE91dC5zdHIoKTsKLSAgICAgICAgICAgICAgICByZWRpcmVjdGVkQ2VyciArPSByZWRpcmVjdGVkU3RkRXJyLnN0cigpOwotCisjZWxzZQorICAgICAgICAgICAgICAgIE91dHB1dFJlZGlyZWN0IHIocmVkaXJlY3RlZENvdXQsIHJlZGlyZWN0ZWRDZXJyKTsKKyAgICAgICAgICAgICAgICB0aW1lci5zdGFydCgpOworICAgICAgICAgICAgICAgIGludm9rZUFjdGl2ZVRlc3RDYXNlKCk7CisjZW5kaWYKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgdGltZXIuc3RhcnQoKTsKICAgICAgICAgICAgICAgICBpbnZva2VBY3RpdmVUZXN0Q2FzZSgpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZHVyYXRpb24gPSB0aW1lci5nZXRFbGFwc2VkU2Vjb25kcygpOwotICAgICAgICB9IGNhdGNoIChUZXN0RmFpbHVyZUV4Y2VwdGlvbiYpIHsKKyAgICAgICAgfSBDQVRDSF9DQVRDSF9BTk9OIChUZXN0RmFpbHVyZUV4Y2VwdGlvbiYpIHsKICAgICAgICAgICAgIC8vIFRoaXMganVzdCBtZWFucyB0aGUgdGVzdCB3YXMgYWJvcnRlZCBkdWUgdG8gZmFpbHVyZQotICAgICAgICB9IGNhdGNoICguLi4pIHsKKyAgICAgICAgfSBDQVRDSF9DQVRDSF9BTEwgewogICAgICAgICAgICAgLy8gVW5kZXIgQ0FUQ0hfQ09ORklHX0ZBU1RfQ09NUElMRSwgdW5leHBlY3RlZCBleGNlcHRpb25zIHVuZGVyIFJFUVVJUkUgYXNzZXJ0aW9ucwogICAgICAgICAgICAgLy8gYXJlIHJlcG9ydGVkIHdpdGhvdXQgdHJhbnNsYXRpb24gYXQgdGhlIHBvaW50IG9mIG9yaWdpbi4KICAgICAgICAgICAgIGlmKCBtX3Nob3VsZFJlcG9ydFVuZXhwZWN0ZWQgKSB7CkBAIC04NjUyLDEyICsxMDU4NCwxNCBAQAogICAgICAgICAgICAgICAgIGhhbmRsZVVuZXhwZWN0ZWRJbmZsaWdodEV4Y2VwdGlvbiggbV9sYXN0QXNzZXJ0aW9uSW5mbywgdHJhbnNsYXRlQWN0aXZlRXhjZXB0aW9uKCksIGR1bW15UmVhY3Rpb24gKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBDb3VudHMgYXNzZXJ0aW9ucyA9IG1fdG90YWxzLmFzc2VydGlvbnMgLSBwcmV2QXNzZXJ0aW9uczsKKyAgICAgICAgYm9vbCBtaXNzaW5nQXNzZXJ0aW9ucyA9IHRlc3RGb3JNaXNzaW5nQXNzZXJ0aW9ucyhhc3NlcnRpb25zKTsKKwogICAgICAgICBtX3Rlc3RDYXNlVHJhY2tlci0+Y2xvc2UoKTsKICAgICAgICAgaGFuZGxlVW5maW5pc2hlZFNlY3Rpb25zKCk7CiAgICAgICAgIG1fbWVzc2FnZXMuY2xlYXIoKTsKKyAgICAgICAgbV9tZXNzYWdlU2NvcGVzLmNsZWFyKCk7CiAKLSAgICAgICAgQ291bnRzIGFzc2VydGlvbnMgPSBtX3RvdGFscy5hc3NlcnRpb25zIC0gcHJldkFzc2VydGlvbnM7Ci0gICAgICAgIGJvb2wgbWlzc2luZ0Fzc2VydGlvbnMgPSB0ZXN0Rm9yTWlzc2luZ0Fzc2VydGlvbnMoYXNzZXJ0aW9ucyk7CiAgICAgICAgIFNlY3Rpb25TdGF0cyB0ZXN0Q2FzZVNlY3Rpb25TdGF0cyh0ZXN0Q2FzZVNlY3Rpb24sIGFzc2VydGlvbnMsIGR1cmF0aW9uLCBtaXNzaW5nQXNzZXJ0aW9ucyk7CiAgICAgICAgIG1fcmVwb3J0ZXItPnNlY3Rpb25FbmRlZCh0ZXN0Q2FzZVNlY3Rpb25TdGF0cyk7CiAgICAgfQpAQCAtODgwNCwyMiArMTA3MzgsMTUgQEAKICAgICAgICAgbV90aW1lci5zdGFydCgpOwogICAgIH0KIAotI2lmIGRlZmluZWQoX01TQ19WRVIpCi0jcHJhZ21hIHdhcm5pbmcocHVzaCkKLSNwcmFnbWEgd2FybmluZyhkaXNhYmxlOjQ5OTYpIC8vIHN0ZDo6dW5jYXVnaHRfZXhjZXB0aW9uIGlzIGRlcHJlY2F0ZWQgaW4gQysrMTcKLSNlbmRpZgogICAgIFNlY3Rpb246On5TZWN0aW9uKCkgewogICAgICAgICBpZiggbV9zZWN0aW9uSW5jbHVkZWQgKSB7Ci0gICAgICAgICAgICBTZWN0aW9uRW5kSW5mbyBlbmRJbmZvKCBtX2luZm8sIG1fYXNzZXJ0aW9ucywgbV90aW1lci5nZXRFbGFwc2VkU2Vjb25kcygpICk7Ci0gICAgICAgICAgICBpZiggc3RkOjp1bmNhdWdodF9leGNlcHRpb24oKSApCisgICAgICAgICAgICBTZWN0aW9uRW5kSW5mbyBlbmRJbmZveyBtX2luZm8sIG1fYXNzZXJ0aW9ucywgbV90aW1lci5nZXRFbGFwc2VkU2Vjb25kcygpIH07CisgICAgICAgICAgICBpZiggdW5jYXVnaHRfZXhjZXB0aW9ucygpICkKICAgICAgICAgICAgICAgICBnZXRSZXN1bHRDYXB0dXJlKCkuc2VjdGlvbkVuZGVkRWFybHkoIGVuZEluZm8gKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBnZXRSZXN1bHRDYXB0dXJlKCkuc2VjdGlvbkVuZGVkKCBlbmRJbmZvICk7CiAgICAgICAgIH0KICAgICB9Ci0jaWYgZGVmaW5lZChfTVNDX1ZFUikKLSNwcmFnbWEgd2FybmluZyhwb3ApCi0jZW5kaWYKIAogICAgIC8vIFRoaXMgaW5kaWNhdGVzIHdoZXRoZXIgdGhlIHNlY3Rpb24gc2hvdWxkIGJlIGV4ZWN1dGVkIG9yIG5vdAogICAgIFNlY3Rpb246Om9wZXJhdG9yIGJvb2woKSBjb25zdCB7CkBAIC04ODM0LDE3ICsxMDc2MSwxMSBAQAogCiAgICAgU2VjdGlvbkluZm86OlNlY3Rpb25JbmZvCiAgICAgICAgICggICBTb3VyY2VMaW5lSW5mbyBjb25zdCYgX2xpbmVJbmZvLAotICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIF9uYW1lLAotICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIF9kZXNjcmlwdGlvbiApCisgICAgICAgICAgICBzdGQ6OnN0cmluZyBjb25zdCYgX25hbWUgKQogICAgIDogICBuYW1lKCBfbmFtZSApLAotICAgICAgICBkZXNjcmlwdGlvbiggX2Rlc2NyaXB0aW9uICksCiAgICAgICAgIGxpbmVJbmZvKCBfbGluZUluZm8gKQogICAgIHt9CiAKLSAgICBTZWN0aW9uRW5kSW5mbzo6U2VjdGlvbkVuZEluZm8oIFNlY3Rpb25JbmZvIGNvbnN0JiBfc2VjdGlvbkluZm8sIENvdW50cyBjb25zdCYgX3ByZXZBc3NlcnRpb25zLCBkb3VibGUgX2R1cmF0aW9uSW5TZWNvbmRzICkKLSAgICA6IHNlY3Rpb25JbmZvKCBfc2VjdGlvbkluZm8gKSwgcHJldkFzc2VydGlvbnMoIF9wcmV2QXNzZXJ0aW9ucyApLCBkdXJhdGlvbkluU2Vjb25kcyggX2R1cmF0aW9uSW5TZWNvbmRzICkKLSAgICB7fQotCiB9IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKIC8vIGVuZCBjYXRjaF9zZWN0aW9uX2luZm8uY3BwCiAvLyBzdGFydCBjYXRjaF9zZXNzaW9uLmNwcApAQCAtODg2NCwxNCArMTA3ODUsMjMgQEAKICAgICAgICAgdm9pZCBzaG93SGVscCgpIGNvbnN0OwogICAgICAgICB2b2lkIGxpYklkZW50aWZ5KCk7CiAKLSAgICAgICAgaW50IGFwcGx5Q29tbWFuZExpbmUoIGludCBhcmdjLCBjaGFyKiBhcmd2W10gKTsKKyAgICAgICAgaW50IGFwcGx5Q29tbWFuZExpbmUoIGludCBhcmdjLCBjaGFyIGNvbnN0ICogY29uc3QgKiBhcmd2ICk7CisgICAgI2lmIGRlZmluZWQoQ0FUQ0hfQ09ORklHX1dDSEFSKSAmJiBkZWZpbmVkKFdJTjMyKSAmJiBkZWZpbmVkKFVOSUNPREUpCisgICAgICAgIGludCBhcHBseUNvbW1hbmRMaW5lKCBpbnQgYXJnYywgd2NoYXJfdCBjb25zdCAqIGNvbnN0ICogYXJndiApOworICAgICNlbmRpZgogCiAgICAgICAgIHZvaWQgdXNlQ29uZmlnRGF0YSggQ29uZmlnRGF0YSBjb25zdCYgY29uZmlnRGF0YSApOwogCi0gICAgICAgIGludCBydW4oIGludCBhcmdjLCBjaGFyKiBhcmd2W10gKTsKLSAgICAjaWYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChVTklDT0RFKQotICAgICAgICBpbnQgcnVuKCBpbnQgYXJnYywgd2NoYXJfdCogY29uc3QgYXJndltdICk7Ci0gICAgI2VuZGlmCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIENoYXJUPgorICAgICAgICBpbnQgcnVuKGludCBhcmdjLCBDaGFyVCBjb25zdCAqIGNvbnN0IGFyZ3ZbXSkgeworICAgICAgICAgICAgaWYgKG1fc3RhcnR1cEV4Y2VwdGlvbnMpCisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICBpbnQgcmV0dXJuQ29kZSA9IGFwcGx5Q29tbWFuZExpbmUoYXJnYywgYXJndik7CisgICAgICAgICAgICBpZiAocmV0dXJuQ29kZSA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybkNvZGUgPSBydW4oKTsKKyAgICAgICAgICAgIHJldHVybiByZXR1cm5Db2RlOworICAgICAgICB9CisKICAgICAgICAgaW50IHJ1bigpOwogCiAgICAgICAgIGNsYXJhOjpQYXJzZXIgY29uc3QmIGNsaSgpIGNvbnN0OwpAQCAtODkzNiwzMiArMTA4NjYsMjggQEAKICAgICAgICAgICAgIHJldHVybiByZXBvcnRlcjsKICAgICAgICAgfQogCi0jaWZuZGVmIENBVENIX0NPTkZJR19ERUZBVUxUX1JFUE9SVEVSCi0jZGVmaW5lIENBVENIX0NPTkZJR19ERUZBVUxUX1JFUE9SVEVSICJjb25zb2xlIgotI2VuZGlmCi0KICAgICAgICAgSVN0cmVhbWluZ1JlcG9ydGVyUHRyIG1ha2VSZXBvcnRlcihzdGQ6OnNoYXJlZF9wdHI8Q29uZmlnPiBjb25zdCYgY29uZmlnKSB7Ci0gICAgICAgICAgICBhdXRvIGNvbnN0JiByZXBvcnRlck5hbWVzID0gY29uZmlnLT5nZXRSZXBvcnRlck5hbWVzKCk7Ci0gICAgICAgICAgICBpZiAocmVwb3J0ZXJOYW1lcy5lbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZXBvcnRlcihDQVRDSF9DT05GSUdfREVGQVVMVF9SRVBPUlRFUiwgY29uZmlnKTsKKyAgICAgICAgICAgIGlmIChDYXRjaDo6Z2V0UmVnaXN0cnlIdWIoKS5nZXRSZXBvcnRlclJlZ2lzdHJ5KCkuZ2V0TGlzdGVuZXJzKCkuZW1wdHkoKSkgeworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVSZXBvcnRlcihjb25maWctPmdldFJlcG9ydGVyTmFtZSgpLCBjb25maWcpOworICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBJU3RyZWFtaW5nUmVwb3J0ZXJQdHIgcmVwb3J0ZXI7Ci0gICAgICAgICAgICBmb3IgKGF1dG8gY29uc3QmIG5hbWUgOiByZXBvcnRlck5hbWVzKQotICAgICAgICAgICAgICAgIGFkZFJlcG9ydGVyKHJlcG9ydGVyLCBjcmVhdGVSZXBvcnRlcihuYW1lLCBjb25maWcpKTsKLSAgICAgICAgICAgIHJldHVybiByZXBvcnRlcjsKLSAgICAgICAgfQotCi0jdW5kZWYgQ0FUQ0hfQ09ORklHX0RFRkFVTFRfUkVQT1JURVIKLQotICAgICAgICB2b2lkIGFkZExpc3RlbmVycyhJU3RyZWFtaW5nUmVwb3J0ZXJQdHImIHJlcG9ydGVycywgSUNvbmZpZ1B0ciBjb25zdCYgY29uZmlnKSB7CisgICAgICAgICAgICAvLyBPbiBvbGRlciBwbGF0Zm9ybXMsIHJldHVybmluZyBzdGQ6OnVuaXF1ZV9wdHI8TGlzdGVuaW5nUmVwb3J0ZXI+CisgICAgICAgICAgICAvLyB3aGVuIHRoZSByZXR1cm4gdHlwZSBpcyBzdGQ6OnVuaXF1ZV9wdHI8SVN0cmVhbWluZ1JlcG9ydGVyPgorICAgICAgICAgICAgLy8gZG9lc24ndCBjb21waWxlIHdpdGhvdXQgYSBzdGQ6Om1vdmUgY2FsbC4gSG93ZXZlciwgdGhpcyBjYXVzZXMKKyAgICAgICAgICAgIC8vIGEgd2FybmluZyBvbiBuZXdlciBwbGF0Zm9ybXMuIFRodXMsIHdlIGhhdmUgdG8gd29yayBhcm91bmQKKyAgICAgICAgICAgIC8vIGl0IGEgYml0IGFuZCBkb3duY2FzdCB0aGUgcG9pbnRlciBtYW51YWxseS4KKyAgICAgICAgICAgIGF1dG8gcmV0ID0gc3RkOjp1bmlxdWVfcHRyPElTdHJlYW1pbmdSZXBvcnRlcj4obmV3IExpc3RlbmluZ1JlcG9ydGVyKTsKKyAgICAgICAgICAgIGF1dG8mIG11bHRpID0gc3RhdGljX2Nhc3Q8TGlzdGVuaW5nUmVwb3J0ZXImPigqcmV0KTsKICAgICAgICAgICAgIGF1dG8gY29uc3QmIGxpc3RlbmVycyA9IENhdGNoOjpnZXRSZWdpc3RyeUh1YigpLmdldFJlcG9ydGVyUmVnaXN0cnkoKS5nZXRMaXN0ZW5lcnMoKTsKLSAgICAgICAgICAgIGZvciAoYXV0byBjb25zdCYgbGlzdGVuZXIgOiBsaXN0ZW5lcnMpCi0gICAgICAgICAgICAgICAgYWRkUmVwb3J0ZXIocmVwb3J0ZXJzLCBsaXN0ZW5lci0+Y3JlYXRlKENhdGNoOjpSZXBvcnRlckNvbmZpZyhjb25maWcpKSk7CisgICAgICAgICAgICBmb3IgKGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbGlzdGVuZXJzKSB7CisgICAgICAgICAgICAgICAgbXVsdGkuYWRkTGlzdGVuZXIobGlzdGVuZXItPmNyZWF0ZShDYXRjaDo6UmVwb3J0ZXJDb25maWcoY29uZmlnKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbXVsdGkuYWRkUmVwb3J0ZXIoY3JlYXRlUmVwb3J0ZXIoY29uZmlnLT5nZXRSZXBvcnRlck5hbWUoKSwgY29uZmlnKSk7CisgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICB9CiAKICAgICAgICAgQ2F0Y2g6OlRvdGFscyBydW5UZXN0cyhzdGQ6OnNoYXJlZF9wdHI8Q29uZmlnPiBjb25zdCYgY29uZmlnKSB7Ci0gICAgICAgICAgICBJU3RyZWFtaW5nUmVwb3J0ZXJQdHIgcmVwb3J0ZXIgPSBtYWtlUmVwb3J0ZXIoY29uZmlnKTsKLSAgICAgICAgICAgIGFkZExpc3RlbmVycyhyZXBvcnRlciwgY29uZmlnKTsKKyAgICAgICAgICAgIGF1dG8gcmVwb3J0ZXIgPSBtYWtlUmVwb3J0ZXIoY29uZmlnKTsKIAogICAgICAgICAgICAgUnVuQ29udGV4dCBjb250ZXh0KGNvbmZpZywgc3RkOjptb3ZlKHJlcG9ydGVyKSk7CiAKQEAgLTg5NzAsOCArMTA4OTYsNiBAQAogICAgICAgICAgICAgY29udGV4dC50ZXN0R3JvdXBTdGFydGluZyhjb25maWctPm5hbWUoKSwgMSwgMSk7CiAKICAgICAgICAgICAgIFRlc3RTcGVjIHRlc3RTcGVjID0gY29uZmlnLT50ZXN0U3BlYygpOwotICAgICAgICAgICAgaWYgKCF0ZXN0U3BlYy5oYXNGaWx0ZXJzKCkpCi0gICAgICAgICAgICAgICAgdGVzdFNwZWMgPSBUZXN0U3BlY1BhcnNlcihJVGFnQWxpYXNSZWdpc3RyeTo6Z2V0KCkpLnBhcnNlKCJ+Wy5dIikudGVzdFNwZWMoKTsgLy8gQWxsIG5vdCBoaWRkZW4gdGVzdHMKIAogICAgICAgICAgICAgYXV0byBjb25zdCYgYWxsVGVzdENhc2VzID0gZ2V0QWxsVGVzdENhc2VzU29ydGVkKCpjb25maWcpOwogICAgICAgICAgICAgZm9yIChhdXRvIGNvbnN0JiB0ZXN0Q2FzZSA6IGFsbFRlc3RDYXNlcykgewpAQCAtODk4MSw2ICsxMDkwNSwyMCBAQAogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LnJlcG9ydGVyKCkuc2tpcFRlc3QodGVzdENhc2UpOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBpZiAoY29uZmlnLT53YXJuQWJvdXROb1Rlc3RzKCkgJiYgdG90YWxzLnRlc3RDYXNlcy50b3RhbCgpID09IDApIHsKKyAgICAgICAgICAgICAgICBSZXVzYWJsZVN0cmluZ1N0cmVhbSB0ZXN0Q29uZmlnOworCisgICAgICAgICAgICAgICAgYm9vbCBmaXJzdCA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBpbnB1dCA6IGNvbmZpZy0+Z2V0VGVzdHNPclRhZ3MoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0KSB7IHRlc3RDb25maWcgPDwgJyAnOyB9CisgICAgICAgICAgICAgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIHRlc3RDb25maWcgPDwgaW5wdXQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY29udGV4dC5yZXBvcnRlcigpLm5vTWF0Y2hpbmdUZXN0Q2FzZXModGVzdENvbmZpZy5zdHIoKSk7CisgICAgICAgICAgICAgICAgdG90YWxzLmVycm9yID0gLTE7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIGNvbnRleHQudGVzdEdyb3VwRW5kZWQoY29uZmlnLT5uYW1lKCksIHRvdGFscywgMSwgMSk7CiAgICAgICAgICAgICByZXR1cm4gdG90YWxzOwogICAgICAgICB9CkBAIC05MDEyLDE1ICsxMDk1MCwxNyBAQAogICAgIFNlc3Npb246OlNlc3Npb24oKSB7CiAgICAgICAgIHN0YXRpYyBib29sIGFscmVhZHlJbnN0YW50aWF0ZWQgPSBmYWxzZTsKICAgICAgICAgaWYoIGFscmVhZHlJbnN0YW50aWF0ZWQgKSB7Ci0gICAgICAgICAgICB0cnkgICAgICAgICB7IENBVENIX0lOVEVSTkFMX0VSUk9SKCAiT25seSBvbmUgaW5zdGFuY2Ugb2YgQ2F0Y2g6OlNlc3Npb24gY2FuIGV2ZXIgYmUgdXNlZCIgKTsgfQotICAgICAgICAgICAgY2F0Y2goLi4uKSAgeyBnZXRNdXRhYmxlUmVnaXN0cnlIdWIoKS5yZWdpc3RlclN0YXJ0dXBFeGNlcHRpb24oKTsgfQorICAgICAgICAgICAgQ0FUQ0hfVFJZIHsgQ0FUQ0hfSU5URVJOQUxfRVJST1IoICJPbmx5IG9uZSBpbnN0YW5jZSBvZiBDYXRjaDo6U2Vzc2lvbiBjYW4gZXZlciBiZSB1c2VkIiApOyB9CisgICAgICAgICAgICBDQVRDSF9DQVRDSF9BTEwgeyBnZXRNdXRhYmxlUmVnaXN0cnlIdWIoKS5yZWdpc3RlclN0YXJ0dXBFeGNlcHRpb24oKTsgfQogICAgICAgICB9CiAKKyAgICAgICAgLy8gVGhlcmUgY2Fubm90IGJlIGV4Y2VwdGlvbnMgYXQgc3RhcnR1cCBpbiBuby1leGNlcHRpb24gbW9kZS4KKyNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfRElTQUJMRV9FWENFUFRJT05TKQogICAgICAgICBjb25zdCBhdXRvJiBleGNlcHRpb25zID0gZ2V0UmVnaXN0cnlIdWIoKS5nZXRTdGFydHVwRXhjZXB0aW9uUmVnaXN0cnkoKS5nZXRFeGNlcHRpb25zKCk7CiAgICAgICAgIGlmICggIWV4Y2VwdGlvbnMuZW1wdHkoKSApIHsKICAgICAgICAgICAgIG1fc3RhcnR1cEV4Y2VwdGlvbnMgPSB0cnVlOwogICAgICAgICAgICAgQ29sb3VyIGNvbG91ckd1YXJkKCBDb2xvdXI6OlJlZCApOwotICAgICAgICAgICAgQ2F0Y2g6OmNlcnIoKSA8PCAiRXJyb3JzIG9jY3VyZWQgZHVyaW5nIHN0YXJ0dXAhIiA8PCAnXG4nOworICAgICAgICAgICAgQ2F0Y2g6OmNlcnIoKSA8PCAiRXJyb3JzIG9jY3VycmVkIGR1cmluZyBzdGFydHVwISIgPDwgJ1xuJzsKICAgICAgICAgICAgIC8vIGl0ZXJhdGUgb3ZlciBhbGwgZXhjZXB0aW9ucyBhbmQgbm90aWZ5IHVzZXIKICAgICAgICAgICAgIGZvciAoIGNvbnN0IGF1dG8mIGV4X3B0ciA6IGV4Y2VwdGlvbnMgKSB7CiAgICAgICAgICAgICAgICAgdHJ5IHsKQEAgLTkwMzAsNiArMTA5NzAsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorI2VuZGlmCiAKICAgICAgICAgYWxyZWFkeUluc3RhbnRpYXRlZCA9IHRydWU7CiAgICAgICAgIG1fY2xpID0gbWFrZUNvbW1hbmRMaW5lUGFyc2VyKCBtX2NvbmZpZ0RhdGEgKTsKQEAgLTkwNTIsMTIgKzEwOTkzLDE0IEBACiAgICAgICAgICAgICAgICAgPDwgc3RkOjpsZWZ0IDw8IHN0ZDo6c2V0dygxNikgPDwgInZlcnNpb246ICIgPDwgbGlicmFyeVZlcnNpb24oKSA8PCBzdGQ6OmVuZGw7CiAgICAgfQogCi0gICAgaW50IFNlc3Npb246OmFwcGx5Q29tbWFuZExpbmUoIGludCBhcmdjLCBjaGFyKiBhcmd2W10gKSB7CisgICAgaW50IFNlc3Npb246OmFwcGx5Q29tbWFuZExpbmUoIGludCBhcmdjLCBjaGFyIGNvbnN0ICogY29uc3QgKiBhcmd2ICkgewogICAgICAgICBpZiggbV9zdGFydHVwRXhjZXB0aW9ucyApCiAgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBhdXRvIHJlc3VsdCA9IG1fY2xpLnBhcnNlKCBjbGFyYTo6QXJncyggYXJnYywgYXJndiApICk7CiAgICAgICAgIGlmKCAhcmVzdWx0ICkgeworICAgICAgICAgICAgY29uZmlnKCk7CisgICAgICAgICAgICBnZXRDdXJyZW50TXV0YWJsZUNvbnRleHQoKS5zZXRDb25maWcobV9jb25maWcpOwogICAgICAgICAgICAgQ2F0Y2g6OmNlcnIoKQogICAgICAgICAgICAgICAgIDw8IENvbG91ciggQ29sb3VyOjpSZWQgKQogICAgICAgICAgICAgICAgIDw8ICJcbkVycm9yKHMpIGluIGlucHV0OlxuIgpAQCAtOTA3NSwyMiArMTEwMTgsOCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICB2b2lkIFNlc3Npb246OnVzZUNvbmZpZ0RhdGEoIENvbmZpZ0RhdGEgY29uc3QmIGNvbmZpZ0RhdGEgKSB7Ci0gICAgICAgIG1fY29uZmlnRGF0YSA9IGNvbmZpZ0RhdGE7Ci0gICAgICAgIG1fY29uZmlnLnJlc2V0KCk7Ci0gICAgfQotCi0gICAgaW50IFNlc3Npb246OnJ1biggaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSApIHsKLSAgICAgICAgaWYoIG1fc3RhcnR1cEV4Y2VwdGlvbnMgKQotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIGludCByZXR1cm5Db2RlID0gYXBwbHlDb21tYW5kTGluZSggYXJnYywgYXJndiApOwotICAgICAgICBpZiggcmV0dXJuQ29kZSA9PSAwICkKLSAgICAgICAgICAgIHJldHVybkNvZGUgPSBydW4oKTsKLSAgICAgICAgcmV0dXJuIHJldHVybkNvZGU7Ci0gICAgfQotCi0jaWYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChVTklDT0RFKQotICAgIGludCBTZXNzaW9uOjpydW4oIGludCBhcmdjLCB3Y2hhcl90KiBjb25zdCBhcmd2W10gKSB7CisjaWYgZGVmaW5lZChDQVRDSF9DT05GSUdfV0NIQVIpICYmIGRlZmluZWQoV0lOMzIpICYmIGRlZmluZWQoVU5JQ09ERSkKKyAgICBpbnQgU2Vzc2lvbjo6YXBwbHlDb21tYW5kTGluZSggaW50IGFyZ2MsIHdjaGFyX3QgY29uc3QgKiBjb25zdCAqIGFyZ3YgKSB7CiAKICAgICAgICAgY2hhciAqKnV0ZjhBcmd2ID0gbmV3IGNoYXIgKlsgYXJnYyBdOwogCkBAIC05MTAyLDcgKzExMDMxLDcgQEAKICAgICAgICAgICAgIFdpZGVDaGFyVG9NdWx0aUJ5dGUoIENQX1VURjgsIDAsIGFyZ3ZbaV0sIC0xLCB1dGY4QXJndltpXSwgYnVmU2l6ZSwgTlVMTCwgTlVMTCApOwogICAgICAgICB9CiAKLSAgICAgICAgaW50IHJldHVybkNvZGUgPSBydW4oIGFyZ2MsIHV0ZjhBcmd2ICk7CisgICAgICAgIGludCByZXR1cm5Db2RlID0gYXBwbHlDb21tYW5kTGluZSggYXJnYywgdXRmOEFyZ3YgKTsKIAogICAgICAgICBmb3IgKCBpbnQgaSA9IDA7IGkgPCBhcmdjOyArK2kgKQogICAgICAgICAgICAgZGVsZXRlIFtdIHV0ZjhBcmd2WyBpIF07CkBAIC05MTEyLDYgKzExMDQxLDEyIEBACiAgICAgICAgIHJldHVybiByZXR1cm5Db2RlOwogICAgIH0KICNlbmRpZgorCisgICAgdm9pZCBTZXNzaW9uOjp1c2VDb25maWdEYXRhKCBDb25maWdEYXRhIGNvbnN0JiBjb25maWdEYXRhICkgeworICAgICAgICBtX2NvbmZpZ0RhdGEgPSBjb25maWdEYXRhOworICAgICAgICBtX2NvbmZpZy5yZXNldCgpOworICAgIH0KKwogICAgIGludCBTZXNzaW9uOjpydW4oKSB7CiAgICAgICAgIGlmKCAoIG1fY29uZmlnRGF0YS53YWl0Rm9yS2V5cHJlc3MgJiBXYWl0Rm9yS2V5cHJlc3M6OkJlZm9yZVN0YXJ0ICkgIT0gMCApIHsKICAgICAgICAgICAgIENhdGNoOjpjb3V0KCkgPDwgIi4uLndhaXRpbmcgZm9yIGVudGVyLyByZXR1cm4gYmVmb3JlIHN0YXJ0aW5nIiA8PCBzdGQ6OmVuZGw7CkBAIC05MTQ0LDExICsxMTA3OSwxMSBAQAogICAgICAgICBpZiggbV9zdGFydHVwRXhjZXB0aW9ucyApCiAgICAgICAgICAgICByZXR1cm4gMTsKIAotICAgICAgICBpZiggbV9jb25maWdEYXRhLnNob3dIZWxwIHx8IG1fY29uZmlnRGF0YS5saWJJZGVudGlmeSApCisgICAgICAgIGlmIChtX2NvbmZpZ0RhdGEuc2hvd0hlbHAgfHwgbV9jb25maWdEYXRhLmxpYklkZW50aWZ5KSB7CiAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQogCi0gICAgICAgIHRyeQotICAgICAgICB7CisgICAgICAgIENBVENIX1RSWSB7CiAgICAgICAgICAgICBjb25maWcoKTsgLy8gRm9yY2UgY29uZmlnIHRvIGJlIGNvbnN0cnVjdGVkCiAKICAgICAgICAgICAgIHNlZWRSbmcoICptX2NvbmZpZyApOwpAQCAtOTE1NywzMCArMTEwOTIsNjIgQEAKICAgICAgICAgICAgICAgICBhcHBseUZpbGVuYW1lc0FzVGFncyggKm1fY29uZmlnICk7CiAKICAgICAgICAgICAgIC8vIEhhbmRsZSBsaXN0IHJlcXVlc3QKLSAgICAgICAgICAgIGlmKCBPcHRpb248c3RkOjpzaXplX3Q+IGxpc3RlZCA9IGxpc3QoIGNvbmZpZygpICkgKQorICAgICAgICAgICAgaWYoIE9wdGlvbjxzdGQ6OnNpemVfdD4gbGlzdGVkID0gbGlzdCggbV9jb25maWcgKSApCiAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oICpsaXN0ZWQgKTsKIAorICAgICAgICAgICAgYXV0byB0b3RhbHMgPSBydW5UZXN0cyggbV9jb25maWcgKTsKICAgICAgICAgICAgIC8vIE5vdGUgdGhhdCBvbiB1bmljZXMgb25seSB0aGUgbG93ZXIgOCBiaXRzIGFyZSB1c3VhbGx5IHVzZWQsIGNsYW1waW5nCiAgICAgICAgICAgICAvLyB0aGUgcmV0dXJuIHZhbHVlIHRvIDI1NSBwcmV2ZW50cyBmYWxzZSBuZWdhdGl2ZSB3aGVuIHNvbWUgbXVsdGlwbGUKICAgICAgICAgICAgIC8vIG9mIDI1NiB0ZXN0cyBoYXMgZmFpbGVkCi0gICAgICAgICAgICByZXR1cm4gKHN0ZDo6bWluKSggTWF4RXhpdENvZGUsIHN0YXRpY19jYXN0PGludD4oIHJ1blRlc3RzKCBtX2NvbmZpZyApLmFzc2VydGlvbnMuZmFpbGVkICkgKTsKKyAgICAgICAgICAgIHJldHVybiAoc3RkOjptaW4pIChNYXhFeGl0Q29kZSwgKHN0ZDo6bWF4KSAodG90YWxzLmVycm9yLCBzdGF0aWNfY2FzdDxpbnQ+KHRvdGFscy5hc3NlcnRpb25zLmZhaWxlZCkpKTsKICAgICAgICAgfQorI2lmICFkZWZpbmVkKENBVENIX0NPTkZJR19ESVNBQkxFX0VYQ0VQVElPTlMpCiAgICAgICAgIGNhdGNoKCBzdGQ6OmV4Y2VwdGlvbiYgZXggKSB7CiAgICAgICAgICAgICBDYXRjaDo6Y2VycigpIDw8IGV4LndoYXQoKSA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICByZXR1cm4gTWF4RXhpdENvZGU7CiAgICAgICAgIH0KKyNlbmRpZgogICAgIH0KIAogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCiAvLyBlbmQgY2F0Y2hfc2Vzc2lvbi5jcHAKKy8vIHN0YXJ0IGNhdGNoX3NpbmdsZXRvbnMuY3BwCisKKyNpbmNsdWRlIDx2ZWN0b3I+CisKK25hbWVzcGFjZSBDYXRjaCB7CisKKyAgICBuYW1lc3BhY2UgeworICAgICAgICBzdGF0aWMgYXV0byBnZXRTaW5nbGV0b25zKCkgLT4gc3RkOjp2ZWN0b3I8SVNpbmdsZXRvbio+KiYgeworICAgICAgICAgICAgc3RhdGljIHN0ZDo6dmVjdG9yPElTaW5nbGV0b24qPiogZ19zaW5nbGV0b25zID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmKCAhZ19zaW5nbGV0b25zICkKKyAgICAgICAgICAgICAgICBnX3NpbmdsZXRvbnMgPSBuZXcgc3RkOjp2ZWN0b3I8SVNpbmdsZXRvbio+KCk7CisgICAgICAgICAgICByZXR1cm4gZ19zaW5nbGV0b25zOworICAgICAgICB9CisgICAgfQorCisgICAgSVNpbmdsZXRvbjo6fklTaW5nbGV0b24oKSB7fQorCisgICAgdm9pZCBhZGRTaW5nbGV0b24oSVNpbmdsZXRvbiogc2luZ2xldG9uICkgeworICAgICAgICBnZXRTaW5nbGV0b25zKCktPnB1c2hfYmFjayggc2luZ2xldG9uICk7CisgICAgfQorICAgIHZvaWQgY2xlYW51cFNpbmdsZXRvbnMoKSB7CisgICAgICAgIGF1dG8mIHNpbmdsZXRvbnMgPSBnZXRTaW5nbGV0b25zKCk7CisgICAgICAgIGZvciggYXV0byBzaW5nbGV0b24gOiAqc2luZ2xldG9ucyApCisgICAgICAgICAgICBkZWxldGUgc2luZ2xldG9uOworICAgICAgICBkZWxldGUgc2luZ2xldG9uczsKKyAgICAgICAgc2luZ2xldG9ucyA9IG51bGxwdHI7CisgICAgfQorCit9IC8vIG5hbWVzcGFjZSBDYXRjaAorLy8gZW5kIGNhdGNoX3NpbmdsZXRvbnMuY3BwCiAvLyBzdGFydCBjYXRjaF9zdGFydHVwX2V4Y2VwdGlvbl9yZWdpc3RyeS5jcHAKIAogbmFtZXNwYWNlIENhdGNoIHsKLSAgICB2b2lkIFN0YXJ0dXBFeGNlcHRpb25SZWdpc3RyeTo6YWRkKCBzdGQ6OmV4Y2VwdGlvbl9wdHIgY29uc3QmIGV4Y2VwdGlvbiApIG5vZXhjZXB0IHsKLSAgICAgICAgdHJ5IHsKK3ZvaWQgU3RhcnR1cEV4Y2VwdGlvblJlZ2lzdHJ5OjphZGQoIHN0ZDo6ZXhjZXB0aW9uX3B0ciBjb25zdCYgZXhjZXB0aW9uICkgbm9leGNlcHQgeworICAgICAgICBDQVRDSF9UUlkgewogICAgICAgICAgICAgbV9leGNlcHRpb25zLnB1c2hfYmFjayhleGNlcHRpb24pOwotICAgICAgICB9Ci0gICAgICAgIGNhdGNoKC4uLikgeworICAgICAgICB9IENBVENIX0NBVENIX0FMTCB7CiAgICAgICAgICAgICAvLyBJZiB3ZSBydW4gb3V0IG9mIG1lbW9yeSBkdXJpbmcgc3RhcnQtdXAgdGhlcmUncyByZWFsbHkgbm90IGEgbG90IG1vcmUgd2UgY2FuIGRvIGFib3V0IGl0CiAgICAgICAgICAgICBzdGQ6OnRlcm1pbmF0ZSgpOwogICAgICAgICB9CkBAIC05MjAxLDExICsxMTE2OCw2IEBACiAjaW5jbHVkZSA8dmVjdG9yPgogI2luY2x1ZGUgPG1lbW9yeT4KIAotI2lmIGRlZmluZWQoX19jbGFuZ19fKQotIyAgICBwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCi0jICAgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIGlnbm9yZWQgIi1XZXhpdC10aW1lLWRlc3RydWN0b3JzIgotI2VuZGlmCi0KIG5hbWVzcGFjZSBDYXRjaCB7CiAKICAgICBDYXRjaDo6SVN0cmVhbTo6fklTdHJlYW0oKSA9IGRlZmF1bHQ7CkBAIC05MzI1LDcgKzExMjg3LDYgQEAKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPHN0ZDo6b3N0cmluZ3N0cmVhbT4+IG1fc3RyZWFtczsKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzaXplX3Q+IG1fdW51c2VkOwogICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbV9yZWZlcmVuY2VTdHJlYW07IC8vIFVzZWQgZm9yIGNvcHkgc3RhdGUvIGZsYWdzIGZyb20KLSAgICAgICAgc3RhdGljIFN0cmluZ1N0cmVhbXMqIHNfaW5zdGFuY2U7CiAKICAgICAgICAgYXV0byBhZGQoKSAtPiBzdGQ6OnNpemVfdCB7CiAgICAgICAgICAgICBpZiggbV91bnVzZWQuZW1wdHkoKSApIHsKQEAgLTkzNDMsMzQgKzExMzA0LDE3IEBACiAgICAgICAgICAgICBtX3N0cmVhbXNbaW5kZXhdLT5jb3B5Zm10KCBtX3JlZmVyZW5jZVN0cmVhbSApOyAvLyBSZXN0b3JlIGluaXRpYWwgZmxhZ3MgYW5kIG90aGVyIHN0YXRlCiAgICAgICAgICAgICBtX3VudXNlZC5wdXNoX2JhY2soaW5kZXgpOwogICAgICAgICB9Ci0KLSAgICAgICAgLy8gIVRCRDogcHV0IGluIFRMUwotICAgICAgICBzdGF0aWMgYXV0byBpbnN0YW5jZSgpIC0+IFN0cmluZ1N0cmVhbXMmIHsKLSAgICAgICAgICAgIGlmKCAhc19pbnN0YW5jZSApCi0gICAgICAgICAgICAgICAgc19pbnN0YW5jZSA9IG5ldyBTdHJpbmdTdHJlYW1zKCk7Ci0gICAgICAgICAgICByZXR1cm4gKnNfaW5zdGFuY2U7Ci0gICAgICAgIH0KLSAgICAgICAgc3RhdGljIHZvaWQgY2xlYW51cCgpIHsKLSAgICAgICAgICAgIGRlbGV0ZSBzX2luc3RhbmNlOwotICAgICAgICAgICAgc19pbnN0YW5jZSA9IG51bGxwdHI7Ci0gICAgICAgIH0KICAgICB9OwogCi0gICAgU3RyaW5nU3RyZWFtcyogU3RyaW5nU3RyZWFtczo6c19pbnN0YW5jZSA9IG51bGxwdHI7Ci0KLSAgICB2b2lkIFJldXNhYmxlU3RyaW5nU3RyZWFtOjpjbGVhbnVwKCkgewotICAgICAgICBTdHJpbmdTdHJlYW1zOjpjbGVhbnVwKCk7Ci0gICAgfQotCiAgICAgUmV1c2FibGVTdHJpbmdTdHJlYW06OlJldXNhYmxlU3RyaW5nU3RyZWFtKCkKLSAgICA6ICAgbV9pbmRleCggU3RyaW5nU3RyZWFtczo6aW5zdGFuY2UoKS5hZGQoKSApLAotICAgICAgICBtX29zcyggU3RyaW5nU3RyZWFtczo6aW5zdGFuY2UoKS5tX3N0cmVhbXNbbV9pbmRleF0uZ2V0KCkgKQorICAgIDogICBtX2luZGV4KCBTaW5nbGV0b248U3RyaW5nU3RyZWFtcz46OmdldE11dGFibGUoKS5hZGQoKSApLAorICAgICAgICBtX29zcyggU2luZ2xldG9uPFN0cmluZ1N0cmVhbXM+OjpnZXRNdXRhYmxlKCkubV9zdHJlYW1zW21faW5kZXhdLmdldCgpICkKICAgICB7fQogCiAgICAgUmV1c2FibGVTdHJpbmdTdHJlYW06On5SZXVzYWJsZVN0cmluZ1N0cmVhbSgpIHsKICAgICAgICAgc3RhdGljX2Nhc3Q8c3RkOjpvc3RyaW5nc3RyZWFtKj4oIG1fb3NzICktPnN0cigiIik7CiAgICAgICAgIG1fb3NzLT5jbGVhcigpOwotICAgICAgICBTdHJpbmdTdHJlYW1zOjppbnN0YW5jZSgpLnJlbGVhc2UoIG1faW5kZXggKTsKKyAgICAgICAgU2luZ2xldG9uPFN0cmluZ1N0cmVhbXM+OjpnZXRNdXRhYmxlKCkucmVsZWFzZSggbV9pbmRleCApOwogICAgIH0KIAogICAgIGF1dG8gUmV1c2FibGVTdHJpbmdTdHJlYW06OnN0cigpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nIHsKQEAgLTkzODUsMTAgKzExMzI5LDYgQEAKICAgICBzdGQ6Om9zdHJlYW0mIGNsb2coKSB7IHJldHVybiBzdGQ6OmNsb2c7IH0KICNlbmRpZgogfQotCi0jaWYgZGVmaW5lZChfX2NsYW5nX18pCi0jICAgIHByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAotI2VuZGlmCiAvLyBlbmQgY2F0Y2hfc3RyZWFtLmNwcAogLy8gc3RhcnQgY2F0Y2hfc3RyaW5nX21hbmlwLmNwcAogCkBAIC05Mzk5LDYgKzExMzM5LDEyIEBACiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKKyAgICBuYW1lc3BhY2UgeworICAgICAgICBjaGFyIHRvTG93ZXJDaChjaGFyIGMpIHsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyPiggc3RkOjp0b2xvd2VyKCBjICkgKTsKKyAgICAgICAgfQorICAgIH0KKwogICAgIGJvb2wgc3RhcnRzV2l0aCggc3RkOjpzdHJpbmcgY29uc3QmIHMsIHN0ZDo6c3RyaW5nIGNvbnN0JiBwcmVmaXggKSB7CiAgICAgICAgIHJldHVybiBzLnNpemUoKSA+PSBwcmVmaXguc2l6ZSgpICYmIHN0ZDo6ZXF1YWwocHJlZml4LmJlZ2luKCksIHByZWZpeC5lbmQoKSwgcy5iZWdpbigpKTsKICAgICB9CkBAIC05NDE0LDkgKzExMzYwLDYgQEAKICAgICBib29sIGNvbnRhaW5zKCBzdGQ6OnN0cmluZyBjb25zdCYgcywgc3RkOjpzdHJpbmcgY29uc3QmIGluZml4ICkgewogICAgICAgICByZXR1cm4gcy5maW5kKCBpbmZpeCApICE9IHN0ZDo6c3RyaW5nOjpucG9zOwogICAgIH0KLSAgICBjaGFyIHRvTG93ZXJDaChjaGFyIGMpIHsKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXI+KCBzdGQ6OnRvbG93ZXIoIGMgKSApOwotICAgIH0KICAgICB2b2lkIHRvTG93ZXJJblBsYWNlKCBzdGQ6OnN0cmluZyYgcyApIHsKICAgICAgICAgc3RkOjp0cmFuc2Zvcm0oIHMuYmVnaW4oKSwgcy5lbmQoKSwgcy5iZWdpbigpLCB0b0xvd2VyQ2ggKTsKICAgICB9CkBAIC05NDcwLDYgKzExNDEzLDEzIEBACiAKICNpbmNsdWRlIDxvc3RyZWFtPgogI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8Y3N0ZGludD4KKworbmFtZXNwYWNlIHsKKyAgICBjb25zdCB1aW50MzJfdCBieXRlXzJfbGVhZCA9IDB4QzA7CisgICAgY29uc3QgdWludDMyX3QgYnl0ZV8zX2xlYWQgPSAweEUwOworICAgIGNvbnN0IHVpbnQzMl90IGJ5dGVfNF9sZWFkID0gMHhGMDsKK30KIAogbmFtZXNwYWNlIENhdGNoIHsKICAgICBTdHJpbmdSZWY6OlN0cmluZ1JlZiggY2hhciBjb25zdCogcmF3Q2hhcnMgKSBub2V4Y2VwdApAQCAtOTQ5MSw3ICsxMTQ0MSw3IEBACiAgICAgICAgICAgIGNvbnN0X2Nhc3Q8U3RyaW5nUmVmKj4oIHRoaXMgKS0+dGFrZU93bmVyc2hpcCgpOwogICAgICAgICByZXR1cm4gbV9zdGFydDsKICAgICB9Ci0gICAgYXV0byBTdHJpbmdSZWY6OmRhdGEoKSBjb25zdCBub2V4Y2VwdCAtPiBjaGFyIGNvbnN0KiB7CisgICAgYXV0byBTdHJpbmdSZWY6OmN1cnJlbnREYXRhKCkgY29uc3Qgbm9leGNlcHQgLT4gY2hhciBjb25zdCogewogICAgICAgICByZXR1cm4gbV9zdGFydDsKICAgICB9CiAKQEAgLTk1MzQsMTMgKzExNDg0LDEyIEBACiAgICAgICAgIC8vIE1ha2UgYWRqdXN0bWVudHMgZm9yIHVmdCBlbmNvZGluZ3MKICAgICAgICAgZm9yKCBzaXplX3R5cGUgaT0wOyBpIDwgbV9zaXplOyArK2kgKSB7CiAgICAgICAgICAgICBjaGFyIGMgPSBtX3N0YXJ0W2ldOwotICAgICAgICAgICAgaWYoICggYyAmIDBiMTEwMDAwMDAgKSA9PSAwYjExMDAwMDAwICkgewotICAgICAgICAgICAgICAgIGlmKCAoIGMgJiAwYjExMTAwMDAwICkgPT0gMGIxMTAwMDAwMCApCisgICAgICAgICAgICBpZiggKCBjICYgYnl0ZV8yX2xlYWQgKSA9PSBieXRlXzJfbGVhZCApIHsKKyAgICAgICAgICAgICAgICBub0NoYXJzLS07CisgICAgICAgICAgICAgICAgaWYgKCggYyAmIGJ5dGVfM19sZWFkICkgPT0gYnl0ZV8zX2xlYWQgKQogICAgICAgICAgICAgICAgICAgICBub0NoYXJzLS07Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiggKCBjICYgMGIxMTExMDAwMCApID09IDBiMTExMDAwMDAgKQotICAgICAgICAgICAgICAgICAgICBub0NoYXJzLT0yOwotICAgICAgICAgICAgICAgIGVsc2UgaWYoICggYyAmIDBiMTExMTEwMDAgKSA9PSAwYjExMTEwMDAwICkKLSAgICAgICAgICAgICAgICAgICAgbm9DaGFycy09MzsKKyAgICAgICAgICAgICAgICBpZiggKCBjICYgYnl0ZV80X2xlYWQgKSA9PSBieXRlXzRfbGVhZCApCisgICAgICAgICAgICAgICAgICAgIG5vQ2hhcnMtLTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICByZXR1cm4gbm9DaGFyczsKQEAgLTk1NjEsNyArMTE1MTAsMTIgQEAKICAgICB9CiAKICAgICBhdXRvIG9wZXJhdG9yIDw8ICggc3RkOjpvc3RyZWFtJiBvcywgU3RyaW5nUmVmIGNvbnN0JiBzdHIgKSAtPiBzdGQ6Om9zdHJlYW0mIHsKLSAgICAgICAgcmV0dXJuIG9zIDw8IHN0ci5jX3N0cigpOworICAgICAgICByZXR1cm4gb3Mud3JpdGUoc3RyLmN1cnJlbnREYXRhKCksIHN0ci5zaXplKCkpOworICAgIH0KKworICAgIGF1dG8gb3BlcmF0b3IrPSggc3RkOjpzdHJpbmcmIGxocywgU3RyaW5nUmVmIGNvbnN0JiByaHMgKSAtPiBzdGQ6OnN0cmluZyYgeworICAgICAgICBsaHMuYXBwZW5kKHJocy5jdXJyZW50RGF0YSgpLCByaHMuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGxoczsKICAgICB9CiAKIH0gLy8gbmFtZXNwYWNlIENhdGNoCkBAIC05NTgxLDkgKzExNTM1LDkgQEAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKICAgICBSZWdpc3RyYXJGb3JUYWdBbGlhc2VzOjpSZWdpc3RyYXJGb3JUYWdBbGlhc2VzKGNoYXIgY29uc3QqIGFsaWFzLCBjaGFyIGNvbnN0KiB0YWcsIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbykgewotICAgICAgICB0cnkgeworICAgICAgICBDQVRDSF9UUlkgewogICAgICAgICAgICAgZ2V0TXV0YWJsZVJlZ2lzdHJ5SHViKCkucmVnaXN0ZXJUYWdBbGlhcyhhbGlhcywgdGFnLCBsaW5lSW5mbyk7Ci0gICAgICAgIH0gY2F0Y2ggKC4uLikgeworICAgICAgICB9IENBVENIX0NBVENIX0FMTCB7CiAgICAgICAgICAgICAvLyBEbyBub3QgdGhyb3cgd2hlbiBjb25zdHJ1Y3RpbmcgZ2xvYmFsIG9iamVjdHMsIGluc3RlYWQgcmVnaXN0ZXIgdGhlIGV4Y2VwdGlvbiB0byBiZSBwcm9jZXNzZWQgbGF0ZXIKICAgICAgICAgICAgIGdldE11dGFibGVSZWdpc3RyeUh1YigpLnJlZ2lzdGVyU3RhcnR1cEV4Y2VwdGlvbigpOwogICAgICAgICB9CkBAIC05NjQ3LDM3ICsxMTYwMSwzOCBAQAogCiBuYW1lc3BhY2UgQ2F0Y2ggewogCi0gICAgVGVzdENhc2VJbmZvOjpTcGVjaWFsUHJvcGVydGllcyBwYXJzZVNwZWNpYWxUYWcoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YWcgKSB7Ci0gICAgICAgIGlmKCBzdGFydHNXaXRoKCB0YWcsICcuJyApIHx8Ci0gICAgICAgICAgICB0YWcgPT0gIiFoaWRlIiApCi0gICAgICAgICAgICByZXR1cm4gVGVzdENhc2VJbmZvOjpJc0hpZGRlbjsKLSAgICAgICAgZWxzZSBpZiggdGFnID09ICIhdGhyb3dzIiApCi0gICAgICAgICAgICByZXR1cm4gVGVzdENhc2VJbmZvOjpUaHJvd3M7Ci0gICAgICAgIGVsc2UgaWYoIHRhZyA9PSAiIXNob3VsZGZhaWwiICkKLSAgICAgICAgICAgIHJldHVybiBUZXN0Q2FzZUluZm86OlNob3VsZEZhaWw7Ci0gICAgICAgIGVsc2UgaWYoIHRhZyA9PSAiIW1heWZhaWwiICkKLSAgICAgICAgICAgIHJldHVybiBUZXN0Q2FzZUluZm86Ok1heUZhaWw7Ci0gICAgICAgIGVsc2UgaWYoIHRhZyA9PSAiIW5vbnBvcnRhYmxlIiApCi0gICAgICAgICAgICByZXR1cm4gVGVzdENhc2VJbmZvOjpOb25Qb3J0YWJsZTsKLSAgICAgICAgZWxzZSBpZiggdGFnID09ICIhYmVuY2htYXJrIiApCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VGVzdENhc2VJbmZvOjpTcGVjaWFsUHJvcGVydGllcz4oIFRlc3RDYXNlSW5mbzo6QmVuY2htYXJrIHwgVGVzdENhc2VJbmZvOjpJc0hpZGRlbiApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gVGVzdENhc2VJbmZvOjpOb25lOwotICAgIH0KLSAgICBib29sIGlzUmVzZXJ2ZWRUYWcoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YWcgKSB7Ci0gICAgICAgIHJldHVybiBwYXJzZVNwZWNpYWxUYWcoIHRhZyApID09IFRlc3RDYXNlSW5mbzo6Tm9uZSAmJiB0YWcuc2l6ZSgpID4gMCAmJiAhc3RkOjppc2FsbnVtKCB0YWdbMF0gKTsKLSAgICB9Ci0gICAgdm9pZCBlbmZvcmNlTm90UmVzZXJ2ZWRUYWcoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YWcsIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBfbGluZUluZm8gKSB7Ci0gICAgICAgIENBVENIX0VORk9SQ0UoICFpc1Jlc2VydmVkVGFnKHRhZyksCi0gICAgICAgICAgICAgICAgICAgICAgIlRhZyBuYW1lOiBbIiA8PCB0YWcgPDwgIl0gaXMgbm90IGFsbG93ZWQuXG4iCi0gICAgICAgICAgICAgICAgICAgICAgPDwgIlRhZyBuYW1lcyBzdGFydGluZyB3aXRoIG5vbiBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMgYXJlIHJlc2VydmVkXG4iCi0gICAgICAgICAgICAgICAgICAgICAgPDwgX2xpbmVJbmZvICk7CisgICAgbmFtZXNwYWNlIHsKKyAgICAgICAgVGVzdENhc2VJbmZvOjpTcGVjaWFsUHJvcGVydGllcyBwYXJzZVNwZWNpYWxUYWcoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YWcgKSB7CisgICAgICAgICAgICBpZiggc3RhcnRzV2l0aCggdGFnLCAnLicgKSB8fAorICAgICAgICAgICAgICAgIHRhZyA9PSAiIWhpZGUiICkKKyAgICAgICAgICAgICAgICByZXR1cm4gVGVzdENhc2VJbmZvOjpJc0hpZGRlbjsKKyAgICAgICAgICAgIGVsc2UgaWYoIHRhZyA9PSAiIXRocm93cyIgKQorICAgICAgICAgICAgICAgIHJldHVybiBUZXN0Q2FzZUluZm86OlRocm93czsKKyAgICAgICAgICAgIGVsc2UgaWYoIHRhZyA9PSAiIXNob3VsZGZhaWwiICkKKyAgICAgICAgICAgICAgICByZXR1cm4gVGVzdENhc2VJbmZvOjpTaG91bGRGYWlsOworICAgICAgICAgICAgZWxzZSBpZiggdGFnID09ICIhbWF5ZmFpbCIgKQorICAgICAgICAgICAgICAgIHJldHVybiBUZXN0Q2FzZUluZm86Ok1heUZhaWw7CisgICAgICAgICAgICBlbHNlIGlmKCB0YWcgPT0gIiFub25wb3J0YWJsZSIgKQorICAgICAgICAgICAgICAgIHJldHVybiBUZXN0Q2FzZUluZm86Ok5vblBvcnRhYmxlOworICAgICAgICAgICAgZWxzZSBpZiggdGFnID09ICIhYmVuY2htYXJrIiApCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFRlc3RDYXNlSW5mbzo6U3BlY2lhbFByb3BlcnRpZXM+KCBUZXN0Q2FzZUluZm86OkJlbmNobWFyayB8IFRlc3RDYXNlSW5mbzo6SXNIaWRkZW4gKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gVGVzdENhc2VJbmZvOjpOb25lOworICAgICAgICB9CisgICAgICAgIGJvb2wgaXNSZXNlcnZlZFRhZyggc3RkOjpzdHJpbmcgY29uc3QmIHRhZyApIHsKKyAgICAgICAgICAgIHJldHVybiBwYXJzZVNwZWNpYWxUYWcoIHRhZyApID09IFRlc3RDYXNlSW5mbzo6Tm9uZSAmJiB0YWcuc2l6ZSgpID4gMCAmJiAhc3RkOjppc2FsbnVtKCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPih0YWdbMF0pICk7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBlbmZvcmNlTm90UmVzZXJ2ZWRUYWcoIHN0ZDo6c3RyaW5nIGNvbnN0JiB0YWcsIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBfbGluZUluZm8gKSB7CisgICAgICAgICAgICBDQVRDSF9FTkZPUkNFKCAhaXNSZXNlcnZlZFRhZyh0YWcpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAiVGFnIG5hbWU6IFsiIDw8IHRhZyA8PCAiXSBpcyBub3QgYWxsb3dlZC5cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIlRhZyBuYW1lcyBzdGFydGluZyB3aXRoIG5vbiBhbHBoYS1udW1lcmljIGNoYXJhY3RlcnMgYXJlIHJlc2VydmVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IF9saW5lSW5mbyApOworICAgICAgICB9CiAgICAgfQogCiAgICAgVGVzdENhc2UgbWFrZVRlc3RDYXNlKCAgSVRlc3RJbnZva2VyKiBfdGVzdENhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIF9jbGFzc05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcgY29uc3QmIF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3RyaW5nIGNvbnN0JiBfZGVzY09yVGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOYW1lQW5kVGFncyBjb25zdCYgbmFtZUFuZFRhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlTGluZUluZm8gY29uc3QmIF9saW5lSW5mbyApCiAgICAgewogICAgICAgICBib29sIGlzSGlkZGVuID0gZmFsc2U7CkBAIC05Njg2LDYgKzExNjQxLDcgQEAKICAgICAgICAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRhZ3M7CiAgICAgICAgIHN0ZDo6c3RyaW5nIGRlc2MsIHRhZzsKICAgICAgICAgYm9vbCBpblRhZyA9IGZhbHNlOworICAgICAgICBzdGQ6OnN0cmluZyBfZGVzY09yVGFncyA9IG5hbWVBbmRUYWdzLnRhZ3M7CiAgICAgICAgIGZvciAoY2hhciBjIDogX2Rlc2NPclRhZ3MpIHsKICAgICAgICAgICAgIGlmKCAhaW5UYWcgKSB7CiAgICAgICAgICAgICAgICAgaWYoIGMgPT0gJ1snICkKQEAgLTk3MTMsOCArMTE2NjksOCBAQAogICAgICAgICAgICAgdGFncy5wdXNoX2JhY2soICIuIiApOwogICAgICAgICB9CiAKLSAgICAgICAgVGVzdENhc2VJbmZvIGluZm8oIF9uYW1lLCBfY2xhc3NOYW1lLCBkZXNjLCB0YWdzLCBfbGluZUluZm8gKTsKLSAgICAgICAgcmV0dXJuIFRlc3RDYXNlKCBfdGVzdENhc2UsIGluZm8gKTsKKyAgICAgICAgVGVzdENhc2VJbmZvIGluZm8oIG5hbWVBbmRUYWdzLm5hbWUsIF9jbGFzc05hbWUsIGRlc2MsIHRhZ3MsIF9saW5lSW5mbyApOworICAgICAgICByZXR1cm4gVGVzdENhc2UoIF90ZXN0Q2FzZSwgc3RkOjptb3ZlKGluZm8pICk7CiAgICAgfQogCiAgICAgdm9pZCBzZXRUYWdzKCBUZXN0Q2FzZUluZm8mIHRlc3RDYXNlSW5mbywgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHRhZ3MgKSB7CkBAIC05Nzc0LDcgKzExNzMwLDcgQEAKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9CiAKLSAgICBUZXN0Q2FzZTo6VGVzdENhc2UoIElUZXN0SW52b2tlciogdGVzdENhc2UsIFRlc3RDYXNlSW5mbyBjb25zdCYgaW5mbyApIDogVGVzdENhc2VJbmZvKCBpbmZvICksIHRlc3QoIHRlc3RDYXNlICkge30KKyAgICBUZXN0Q2FzZTo6VGVzdENhc2UoIElUZXN0SW52b2tlciogdGVzdENhc2UsIFRlc3RDYXNlSW5mbyYmIGluZm8gKSA6IFRlc3RDYXNlSW5mbyggc3RkOjptb3ZlKGluZm8pICksIHRlc3QoIHRlc3RDYXNlICkge30KIAogICAgIFRlc3RDYXNlIFRlc3RDYXNlOjp3aXRoTmFtZSggc3RkOjpzdHJpbmcgY29uc3QmIF9uZXdOYW1lICkgY29uc3QgewogICAgICAgICBUZXN0Q2FzZSBvdGhlciggKnRoaXMgKTsKQEAgLTk4MTksNyArMTE3NzUsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBSdW5UZXN0czo6SW5SYW5kb21PcmRlcjoKICAgICAgICAgICAgICAgICBzZWVkUm5nKCBjb25maWcgKTsKLSAgICAgICAgICAgICAgICBSYW5kb21OdW1iZXJHZW5lcmF0b3I6OnNodWZmbGUoIHNvcnRlZCApOworICAgICAgICAgICAgICAgIHN0ZDo6c2h1ZmZsZSggc29ydGVkLmJlZ2luKCksIHNvcnRlZC5lbmQoKSwgcm5nKCkgKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgUnVuVGVzdHM6OkluRGVjbGFyYXRpb25PcmRlcjoKICAgICAgICAgICAgICAgICAvLyBhbHJlYWR5IGluIGRlY2xhcmF0aW9uIG9yZGVyCkBAIC05ODg1LDcgKzExODQxLDcgQEAKICAgICAgICAgbV90ZXN0QXNGdW5jdGlvbigpOwogICAgIH0KIAotICAgIHN0ZDo6c3RyaW5nIGV4dHJhY3RDbGFzc05hbWUoIHN0ZDo6c3RyaW5nIGNvbnN0JiBjbGFzc09yUXVhbGlmaWVkTWV0aG9kTmFtZSApIHsKKyAgICBzdGQ6OnN0cmluZyBleHRyYWN0Q2xhc3NOYW1lKCBTdHJpbmdSZWYgY29uc3QmIGNsYXNzT3JRdWFsaWZpZWRNZXRob2ROYW1lICkgewogICAgICAgICBzdGQ6OnN0cmluZyBjbGFzc05hbWUgPSBjbGFzc09yUXVhbGlmaWVkTWV0aG9kTmFtZTsKICAgICAgICAgaWYoIHN0YXJ0c1dpdGgoIGNsYXNzTmFtZSwgJyYnICkgKQogICAgICAgICB7CkBAIC05OTAzLDcgKzExODU5LDcgQEAKIC8vIHN0YXJ0IGNhdGNoX3Rlc3RfY2FzZV90cmFja2VyLmNwcAogCiAjaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGNhc3NlcnQ+CiAjaW5jbHVkZSA8c3RkZXhjZXB0PgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDxzc3RyZWFtPgpAQCAtOTk1OSwxMyArMTE5MTUsNiBAQAogICAgICAgICBtX2N1cnJlbnRUcmFja2VyID0gdHJhY2tlcjsKICAgICB9CiAKLSAgICBUcmFja2VyQmFzZTo6VHJhY2tlckhhc05hbWU6OlRyYWNrZXJIYXNOYW1lKCBOYW1lQW5kTG9jYXRpb24gY29uc3QmIG5hbWVBbmRMb2NhdGlvbiApIDogbV9uYW1lQW5kTG9jYXRpb24oIG5hbWVBbmRMb2NhdGlvbiApIHt9Ci0gICAgYm9vbCBUcmFja2VyQmFzZTo6VHJhY2tlckhhc05hbWU6Om9wZXJhdG9yICgpKCBJVHJhY2tlclB0ciBjb25zdCYgdHJhY2tlciApIGNvbnN0IHsKLSAgICAgICAgcmV0dXJuCi0gICAgICAgICAgICB0cmFja2VyLT5uYW1lQW5kTG9jYXRpb24oKS5uYW1lID09IG1fbmFtZUFuZExvY2F0aW9uLm5hbWUgJiYKLSAgICAgICAgICAgIHRyYWNrZXItPm5hbWVBbmRMb2NhdGlvbigpLmxvY2F0aW9uID09IG1fbmFtZUFuZExvY2F0aW9uLmxvY2F0aW9uOwotICAgIH0KLQogICAgIFRyYWNrZXJCYXNlOjpUcmFja2VyQmFzZSggTmFtZUFuZExvY2F0aW9uIGNvbnN0JiBuYW1lQW5kTG9jYXRpb24sIFRyYWNrZXJDb250ZXh0JiBjdHgsIElUcmFja2VyKiBwYXJlbnQgKQogICAgIDogICBtX25hbWVBbmRMb2NhdGlvbiggbmFtZUFuZExvY2F0aW9uICksCiAgICAgICAgIG1fY3R4KCBjdHggKSwKQEAgLTk5OTMsNyArMTE5NDIsMTIgQEAKICAgICB9CiAKICAgICBJVHJhY2tlclB0ciBUcmFja2VyQmFzZTo6ZmluZENoaWxkKCBOYW1lQW5kTG9jYXRpb24gY29uc3QmIG5hbWVBbmRMb2NhdGlvbiApIHsKLSAgICAgICAgYXV0byBpdCA9IHN0ZDo6ZmluZF9pZiggbV9jaGlsZHJlbi5iZWdpbigpLCBtX2NoaWxkcmVuLmVuZCgpLCBUcmFja2VySGFzTmFtZSggbmFtZUFuZExvY2F0aW9uICkgKTsKKyAgICAgICAgYXV0byBpdCA9IHN0ZDo6ZmluZF9pZiggbV9jaGlsZHJlbi5iZWdpbigpLCBtX2NoaWxkcmVuLmVuZCgpLAorICAgICAgICAgICAgWyZuYW1lQW5kTG9jYXRpb25dKCBJVHJhY2tlclB0ciBjb25zdCYgdHJhY2tlciApeworICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgICAgICAgICB0cmFja2VyLT5uYW1lQW5kTG9jYXRpb24oKS5sb2NhdGlvbiA9PSBuYW1lQW5kTG9jYXRpb24ubG9jYXRpb24gJiYKKyAgICAgICAgICAgICAgICAgICAgdHJhY2tlci0+bmFtZUFuZExvY2F0aW9uKCkubmFtZSA9PSBuYW1lQW5kTG9jYXRpb24ubmFtZTsKKyAgICAgICAgICAgIH0gKTsKICAgICAgICAgcmV0dXJuKCBpdCAhPSBtX2NoaWxkcmVuLmVuZCgpICkKICAgICAgICAgICAgID8gKml0CiAgICAgICAgICAgICA6IG51bGxwdHI7CkBAIC0xMDAxMiw3ICsxMTk2Niw3IEBACiAgICAgfQogCiAgICAgYm9vbCBUcmFja2VyQmFzZTo6aXNTZWN0aW9uVHJhY2tlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgYm9vbCBUcmFja2VyQmFzZTo6aXNJbmRleFRyYWNrZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIGJvb2wgVHJhY2tlckJhc2U6OmlzR2VuZXJhdG9yVHJhY2tlcigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2b2lkIFRyYWNrZXJCYXNlOjpvcGVuKCkgewogICAgICAgICBtX3J1blN0YXRlID0gRXhlY3V0aW5nOwpAQCAtMTAwODEsNiArMTIwMzUsMTcgQEAKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgU2VjdGlvblRyYWNrZXI6OmlzQ29tcGxldGUoKSBjb25zdCB7CisgICAgICAgIGJvb2wgY29tcGxldGUgPSB0cnVlOworCisgICAgICAgIGlmICgobV9maWx0ZXJzLmVtcHR5KCkgfHwgbV9maWx0ZXJzWzBdID09ICIiKSB8fAorICAgICAgICAgICAgIHN0ZDo6ZmluZChtX2ZpbHRlcnMuYmVnaW4oKSwgbV9maWx0ZXJzLmVuZCgpLAorICAgICAgICAgICAgICAgICAgICAgICBtX25hbWVBbmRMb2NhdGlvbi5uYW1lKSAhPSBtX2ZpbHRlcnMuZW5kKCkpCisgICAgICAgICAgICBjb21wbGV0ZSA9IFRyYWNrZXJCYXNlOjppc0NvbXBsZXRlKCk7CisgICAgICAgIHJldHVybiBjb21wbGV0ZTsKKworICAgIH0KKwogICAgIGJvb2wgU2VjdGlvblRyYWNrZXI6OmlzU2VjdGlvblRyYWNrZXIoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBTZWN0aW9uVHJhY2tlciYgU2VjdGlvblRyYWNrZXI6OmFjcXVpcmUoIFRyYWNrZXJDb250ZXh0JiBjdHgsIE5hbWVBbmRMb2NhdGlvbiBjb25zdCYgbmFtZUFuZExvY2F0aW9uICkgewpAQCAtMTAxMTgsNTUgKzEyMDgzLDExIEBACiAgICAgICAgICAgICBtX2ZpbHRlcnMuaW5zZXJ0KCBtX2ZpbHRlcnMuZW5kKCksICsrZmlsdGVycy5iZWdpbigpLCBmaWx0ZXJzLmVuZCgpICk7CiAgICAgfQogCi0gICAgSW5kZXhUcmFja2VyOjpJbmRleFRyYWNrZXIoIE5hbWVBbmRMb2NhdGlvbiBjb25zdCYgbmFtZUFuZExvY2F0aW9uLCBUcmFja2VyQ29udGV4dCYgY3R4LCBJVHJhY2tlciogcGFyZW50LCBpbnQgc2l6ZSApCi0gICAgOiAgIFRyYWNrZXJCYXNlKCBuYW1lQW5kTG9jYXRpb24sIGN0eCwgcGFyZW50ICksCi0gICAgICAgIG1fc2l6ZSggc2l6ZSApCi0gICAge30KLQotICAgIGJvb2wgSW5kZXhUcmFja2VyOjppc0luZGV4VHJhY2tlcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIEluZGV4VHJhY2tlciYgSW5kZXhUcmFja2VyOjphY3F1aXJlKCBUcmFja2VyQ29udGV4dCYgY3R4LCBOYW1lQW5kTG9jYXRpb24gY29uc3QmIG5hbWVBbmRMb2NhdGlvbiwgaW50IHNpemUgKSB7Ci0gICAgICAgIHN0ZDo6c2hhcmVkX3B0cjxJbmRleFRyYWNrZXI+IHRyYWNrZXI7Ci0KLSAgICAgICAgSVRyYWNrZXImIGN1cnJlbnRUcmFja2VyID0gY3R4LmN1cnJlbnRUcmFja2VyKCk7Ci0gICAgICAgIGlmKCBJVHJhY2tlclB0ciBjaGlsZFRyYWNrZXIgPSBjdXJyZW50VHJhY2tlci5maW5kQ2hpbGQoIG5hbWVBbmRMb2NhdGlvbiApICkgewotICAgICAgICAgICAgYXNzZXJ0KCBjaGlsZFRyYWNrZXIgKTsKLSAgICAgICAgICAgIGFzc2VydCggY2hpbGRUcmFja2VyLT5pc0luZGV4VHJhY2tlcigpICk7Ci0gICAgICAgICAgICB0cmFja2VyID0gc3RkOjpzdGF0aWNfcG9pbnRlcl9jYXN0PEluZGV4VHJhY2tlcj4oIGNoaWxkVHJhY2tlciApOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgdHJhY2tlciA9IHN0ZDo6bWFrZV9zaGFyZWQ8SW5kZXhUcmFja2VyPiggbmFtZUFuZExvY2F0aW9uLCBjdHgsICZjdXJyZW50VHJhY2tlciwgc2l6ZSApOwotICAgICAgICAgICAgY3VycmVudFRyYWNrZXIuYWRkQ2hpbGQoIHRyYWNrZXIgKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmKCAhY3R4LmNvbXBsZXRlZEN5Y2xlKCkgJiYgIXRyYWNrZXItPmlzQ29tcGxldGUoKSApIHsKLSAgICAgICAgICAgIGlmKCB0cmFja2VyLT5tX3J1blN0YXRlICE9IEV4ZWN1dGluZ0NoaWxkcmVuICYmIHRyYWNrZXItPm1fcnVuU3RhdGUgIT0gTmVlZHNBbm90aGVyUnVuICkKLSAgICAgICAgICAgICAgICB0cmFja2VyLT5tb3ZlTmV4dCgpOwotICAgICAgICAgICAgdHJhY2tlci0+b3BlbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuICp0cmFja2VyOwotICAgIH0KLQotICAgIGludCBJbmRleFRyYWNrZXI6OmluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQotCi0gICAgdm9pZCBJbmRleFRyYWNrZXI6Om1vdmVOZXh0KCkgewotICAgICAgICBtX2luZGV4Kys7Ci0gICAgICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKLSAgICB9Ci0KLSAgICB2b2lkIEluZGV4VHJhY2tlcjo6Y2xvc2UoKSB7Ci0gICAgICAgIFRyYWNrZXJCYXNlOjpjbG9zZSgpOwotICAgICAgICBpZiggbV9ydW5TdGF0ZSA9PSBDb21wbGV0ZWRTdWNjZXNzZnVsbHkgJiYgbV9pbmRleCA8IG1fc2l6ZS0xICkKLSAgICAgICAgICAgIG1fcnVuU3RhdGUgPSBFeGVjdXRpbmc7Ci0gICAgfQotCiB9IC8vIG5hbWVzcGFjZSBUZXN0Q2FzZVRyYWNraW5nCiAKIHVzaW5nIFRlc3RDYXNlVHJhY2tpbmc6OklUcmFja2VyOwogdXNpbmcgVGVzdENhc2VUcmFja2luZzo6VHJhY2tlckNvbnRleHQ7CiB1c2luZyBUZXN0Q2FzZVRyYWNraW5nOjpTZWN0aW9uVHJhY2tlcjsKLXVzaW5nIFRlc3RDYXNlVHJhY2tpbmc6OkluZGV4VHJhY2tlcjsKIAogfSAvLyBuYW1lc3BhY2UgQ2F0Y2gKIApAQCAtMTAxODIsMTkgKzEyMTAzLDE4IEBACiAgICAgICAgIHJldHVybiBuZXcoc3RkOjpub3Rocm93KSBUZXN0SW52b2tlckFzRnVuY3Rpb24oIHRlc3RBc0Z1bmN0aW9uICk7CiAgICAgfQogCi0gICAgTmFtZUFuZFRhZ3M6Ok5hbWVBbmRUYWdzKCBTdHJpbmdSZWYgbmFtZV8gLCBTdHJpbmdSZWYgdGFnc18gKSBub2V4Y2VwdCA6IG5hbWUoIG5hbWVfICksIHRhZ3MoIHRhZ3NfICkge30KKyAgICBOYW1lQW5kVGFnczo6TmFtZUFuZFRhZ3MoIFN0cmluZ1JlZiBjb25zdCYgbmFtZV8gLCBTdHJpbmdSZWYgY29uc3QmIHRhZ3NfICkgbm9leGNlcHQgOiBuYW1lKCBuYW1lXyApLCB0YWdzKCB0YWdzXyApIHt9CiAKLSAgICBBdXRvUmVnOjpBdXRvUmVnKCBJVGVzdEludm9rZXIqIGludm9rZXIsIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbywgU3RyaW5nUmVmIGNsYXNzT3JNZXRob2QsIE5hbWVBbmRUYWdzIGNvbnN0JiBuYW1lQW5kVGFncyApIG5vZXhjZXB0IHsKLSAgICAgICAgdHJ5IHsKKyAgICBBdXRvUmVnOjpBdXRvUmVnKCBJVGVzdEludm9rZXIqIGludm9rZXIsIFNvdXJjZUxpbmVJbmZvIGNvbnN0JiBsaW5lSW5mbywgU3RyaW5nUmVmIGNvbnN0JiBjbGFzc09yTWV0aG9kLCBOYW1lQW5kVGFncyBjb25zdCYgbmFtZUFuZFRhZ3MgKSBub2V4Y2VwdCB7CisgICAgICAgIENBVENIX1RSWSB7CiAgICAgICAgICAgICBnZXRNdXRhYmxlUmVnaXN0cnlIdWIoKQogICAgICAgICAgICAgICAgICAgICAucmVnaXN0ZXJUZXN0KAogICAgICAgICAgICAgICAgICAgICAgICAgbWFrZVRlc3RDYXNlKAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludm9rZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmFjdENsYXNzTmFtZSggY2xhc3NPck1ldGhvZCApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVBbmRUYWdzLm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZUFuZFRhZ3MudGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lQW5kVGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lSW5mbykpOwotICAgICAgICB9IGNhdGNoICguLi4pIHsKKyAgICAgICAgfSBDQVRDSF9DQVRDSF9BTEwgewogICAgICAgICAgICAgLy8gRG8gbm90IHRocm93IHdoZW4gY29uc3RydWN0aW5nIGdsb2JhbCBvYmplY3RzLCBpbnN0ZWFkIHJlZ2lzdGVyIHRoZSBleGNlcHRpb24gdG8gYmUgcHJvY2Vzc2VkIGxhdGVyCiAgICAgICAgICAgICBnZXRNdXRhYmxlUmVnaXN0cnlIdWIoKS5yZWdpc3RlclN0YXJ0dXBFeGNlcHRpb24oKTsKICAgICAgICAgfQpAQCAtMTAzNDAsMzIgKzEyMjYwLDQ0IEBACiAKICNpbmNsdWRlIDxjaHJvbm8+CiAKK3N0YXRpYyBjb25zdCB1aW50NjRfdCBuYW5vc2Vjb25kc0luU2Vjb25kID0gMTAwMDAwMDAwMDsKKwogbmFtZXNwYWNlIENhdGNoIHsKIAogICAgIGF1dG8gZ2V0Q3VycmVudE5hbm9zZWNvbmRzU2luY2VFcG9jaCgpIC0+IHVpbnQ2NF90IHsKICAgICAgICAgcmV0dXJuIHN0ZDo6Y2hyb25vOjpkdXJhdGlvbl9jYXN0PHN0ZDo6Y2hyb25vOjpuYW5vc2Vjb25kcz4oIHN0ZDo6Y2hyb25vOjpoaWdoX3Jlc29sdXRpb25fY2xvY2s6Om5vdygpLnRpbWVfc2luY2VfZXBvY2goKSApLmNvdW50KCk7CiAgICAgfQogCi0gICAgYXV0byBlc3RpbWF0ZUNsb2NrUmVzb2x1dGlvbigpIC0+IHVpbnQ2NF90IHsKLSAgICAgICAgdWludDY0X3Qgc3VtID0gMDsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGl0ZXJhdGlvbnMgPSAxMDAwMDAwOworICAgIG5hbWVzcGFjZSB7CisgICAgICAgIGF1dG8gZXN0aW1hdGVDbG9ja1Jlc29sdXRpb24oKSAtPiB1aW50NjRfdCB7CisgICAgICAgICAgICB1aW50NjRfdCBzdW0gPSAwOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IGl0ZXJhdGlvbnMgPSAxMDAwMDAwOwogCi0gICAgICAgIGZvciggc3RkOjpzaXplX3QgaSA9IDA7IGkgPCBpdGVyYXRpb25zOyArK2kgKSB7CisgICAgICAgICAgICBhdXRvIHN0YXJ0VGltZSA9IGdldEN1cnJlbnROYW5vc2Vjb25kc1NpbmNlRXBvY2goKTsKIAotICAgICAgICAgICAgdWludDY0X3QgdGlja3M7Ci0gICAgICAgICAgICB1aW50NjRfdCBiYXNlVGlja3MgPSBnZXRDdXJyZW50TmFub3NlY29uZHNTaW5jZUVwb2NoKCk7Ci0gICAgICAgICAgICBkbyB7Ci0gICAgICAgICAgICAgICAgdGlja3MgPSBnZXRDdXJyZW50TmFub3NlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgICAgICAgICBmb3IoIHN0ZDo6c2l6ZV90IGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgKytpICkgeworCisgICAgICAgICAgICAgICAgdWludDY0X3QgdGlja3M7CisgICAgICAgICAgICAgICAgdWludDY0X3QgYmFzZVRpY2tzID0gZ2V0Q3VycmVudE5hbm9zZWNvbmRzU2luY2VFcG9jaCgpOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgdGlja3MgPSBnZXRDdXJyZW50TmFub3NlY29uZHNTaW5jZUVwb2NoKCk7CisgICAgICAgICAgICAgICAgfSB3aGlsZSggdGlja3MgPT0gYmFzZVRpY2tzICk7CisKKyAgICAgICAgICAgICAgICBhdXRvIGRlbHRhID0gdGlja3MgLSBiYXNlVGlja3M7CisgICAgICAgICAgICAgICAgc3VtICs9IGRlbHRhOworCisgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBiZWVuIGNhbGlicmF0aW5nIGZvciBvdmVyIDMgc2Vjb25kcyAtLSB0aGUgY2xvY2sKKyAgICAgICAgICAgICAgICAvLyBpcyB0ZXJyaWJsZSBhbmQgd2Ugc2hvdWxkIG1vdmUgb24uCisgICAgICAgICAgICAgICAgLy8gVEJEOiBIb3cgdG8gc2lnbmFsIHRoYXQgdGhlIG1lYXN1cmVkIHJlc29sdXRpb24gaXMgcHJvYmFibHkgd3Jvbmc/CisgICAgICAgICAgICAgICAgaWYgKHRpY2tzID4gc3RhcnRUaW1lICsgMyAqIG5hbm9zZWNvbmRzSW5TZWNvbmQpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1bSAvICggaSArIDF1ICk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQotICAgICAgICAgICAgd2hpbGUoIHRpY2tzID09IGJhc2VUaWNrcyApOwogCi0gICAgICAgICAgICBhdXRvIGRlbHRhID0gdGlja3MgLSBiYXNlVGlja3M7Ci0gICAgICAgICAgICBzdW0gKz0gZGVsdGE7CisgICAgICAgICAgICAvLyBXZSdyZSBqdXN0IHRha2luZyB0aGUgbWVhbiwgaGVyZS4gVG8gZG8gYmV0dGVyIHdlIGNvdWxkIHRha2UgdGhlIHN0ZC4gZGV2IGFuZCBleGNsdWRlIG91dGxpZXJzCisgICAgICAgICAgICAvLyAtIGFuZCBwb3RlbnRpYWxseSBkbyBtb3JlIGl0ZXJhdGlvbnMgaWYgdGhlcmUncyBhIGhpZ2ggdmFyaWFuY2UuCisgICAgICAgICAgICByZXR1cm4gc3VtL2l0ZXJhdGlvbnM7CiAgICAgICAgIH0KLQotICAgICAgICAvLyBXZSdyZSBqdXN0IHRha2luZyB0aGUgbWVhbiwgaGVyZS4gVG8gZG8gYmV0dGVyIHdlIGNvdWxkIHRha2UgdGhlIHN0ZC4gZGV2IGFuZCBleGNsdWRlIG91dGxpZXJzCi0gICAgICAgIC8vIC0gYW5kIHBvdGVudGlhbGx5IGRvIG1vcmUgaXRlcmF0aW9ucyBpZiB0aGVyZSdzIGEgaGlnaCB2YXJpYW5jZS4KLSAgICAgICAgcmV0dXJuIHN1bS9pdGVyYXRpb25zOwogICAgIH0KICAgICBhdXRvIGdldEVzdGltYXRlZENsb2NrUmVzb2x1dGlvbigpIC0+IHVpbnQ2NF90IHsKICAgICAgICAgc3RhdGljIGF1dG8gc19yZXNvbHV0aW9uID0gZXN0aW1hdGVDbG9ja1Jlc29sdXRpb24oKTsKQEAgLTEwNDQ5LDcgKzEyMzgxLDcgQEAKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KIHN0ZDo6c3RyaW5nIGZwVG9TdHJpbmcoIFQgdmFsdWUsIGludCBwcmVjaXNpb24gKSB7Ci0gICAgaWYgKHN0ZDo6aXNuYW4odmFsdWUpKSB7CisgICAgaWYgKENhdGNoOjppc25hbih2YWx1ZSkpIHsKICAgICAgICAgcmV0dXJuICJuYW4iOwogICAgIH0KIApAQCAtMTA0OTYsMTQgKzEyNDI4LDExIEBACiAgICAgcmV0dXJuIHM7CiB9CiAKLXN0ZDo6c3RyaW5nIFN0cmluZ01ha2VyPHN0ZDo6d3N0cmluZz46OmNvbnZlcnQoY29uc3Qgc3RkOjp3c3RyaW5nJiB3c3RyKSB7Ci0gICAgc3RkOjpzdHJpbmcgczsKLSAgICBzLnJlc2VydmUod3N0ci5zaXplKCkpOwotICAgIGZvciAoYXV0byBjIDogd3N0cikgewotICAgICAgICBzICs9IChjIDw9IDB4ZmYpID8gc3RhdGljX2Nhc3Q8Y2hhcj4oYykgOiAnPyc7Ci0gICAgfQotICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzKTsKKyNpZmRlZiBDQVRDSF9DT05GSUdfQ1BQMTdfU1RSSU5HX1ZJRVcKK3N0ZDo6c3RyaW5nIFN0cmluZ01ha2VyPHN0ZDo6c3RyaW5nX3ZpZXc+Ojpjb252ZXJ0KHN0ZDo6c3RyaW5nX3ZpZXcgc3RyKSB7CisgICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0ZDo6c3RyaW5neyBzdHIgfSk7CiB9CisjZW5kaWYKIAogc3RkOjpzdHJpbmcgU3RyaW5nTWFrZXI8Y2hhciBjb25zdCo+Ojpjb252ZXJ0KGNoYXIgY29uc3QqIHN0cikgewogICAgIGlmIChzdHIpIHsKQEAgLTEwNTE5LDYgKzEyNDQ4LDIzIEBACiAgICAgICAgIHJldHVybnsgIntudWxsIHN0cmluZ30iIH07CiAgICAgfQogfQorCisjaWZkZWYgQ0FUQ0hfQ09ORklHX1dDSEFSCitzdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjxzdGQ6OndzdHJpbmc+Ojpjb252ZXJ0KGNvbnN0IHN0ZDo6d3N0cmluZyYgd3N0cikgeworICAgIHN0ZDo6c3RyaW5nIHM7CisgICAgcy5yZXNlcnZlKHdzdHIuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8gYyA6IHdzdHIpIHsKKyAgICAgICAgcyArPSAoYyA8PSAweGZmKSA/IHN0YXRpY19jYXN0PGNoYXI+KGMpIDogJz8nOworICAgIH0KKyAgICByZXR1cm4gOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkocyk7Cit9CisKKyMgaWZkZWYgQ0FUQ0hfQ09ORklHX0NQUDE3X1NUUklOR19WSUVXCitzdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjxzdGQ6OndzdHJpbmdfdmlldz46OmNvbnZlcnQoc3RkOjp3c3RyaW5nX3ZpZXcgc3RyKSB7CisgICAgcmV0dXJuIFN0cmluZ01ha2VyPHN0ZDo6d3N0cmluZz46OmNvbnZlcnQoc3RkOjp3c3RyaW5nKHN0cikpOworfQorIyBlbmRpZgorCiBzdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjx3Y2hhcl90IGNvbnN0Kj46OmNvbnZlcnQod2NoYXJfdCBjb25zdCAqIHN0cikgewogICAgIGlmIChzdHIpIHsKICAgICAgICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0ZDo6d3N0cmluZ3sgc3RyIH0pOwpAQCAtMTA1MzMsNiArMTI0NzksNyBAQAogICAgICAgICByZXR1cm57ICJ7bnVsbCBzdHJpbmd9IiB9OwogICAgIH0KIH0KKyNlbmRpZgogCiBzdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjxpbnQ+Ojpjb252ZXJ0KGludCB2YWx1ZSkgewogICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHZhbHVlKSk7CkBAIC0xMDU2OCw3ICsxMjUxNSw3IEBACiAgICAgcmV0dXJuIGIgPyAidHJ1ZSIgOiAiZmFsc2UiOwogfQogCi1zdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjxjaGFyPjo6Y29udmVydChjaGFyIHZhbHVlKSB7CitzdGQ6OnN0cmluZyBTdHJpbmdNYWtlcjxzaWduZWQgY2hhcj46OmNvbnZlcnQoc2lnbmVkIGNoYXIgdmFsdWUpIHsKICAgICBpZiAodmFsdWUgPT0gJ1xyJykgewogICAgICAgICByZXR1cm4gIidcXHInIjsKICAgICB9IGVsc2UgaWYgKHZhbHVlID09ICdcZicpIHsKQEAgLTEwNTg1LDggKzEyNTMyLDggQEAKICAgICAgICAgcmV0dXJuIGNoc3RyOwogICAgIH0KIH0KLXN0ZDo6c3RyaW5nIFN0cmluZ01ha2VyPHNpZ25lZCBjaGFyPjo6Y29udmVydChzaWduZWQgY2hhciBjKSB7Ci0gICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0YXRpY19jYXN0PGNoYXI+KGMpKTsKK3N0ZDo6c3RyaW5nIFN0cmluZ01ha2VyPGNoYXI+Ojpjb252ZXJ0KGNoYXIgYykgeworICAgIHJldHVybiA6OkNhdGNoOjpEZXRhaWw6OnN0cmluZ2lmeShzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oYykpOwogfQogc3RkOjpzdHJpbmcgU3RyaW5nTWFrZXI8dW5zaWduZWQgY2hhcj46OmNvbnZlcnQodW5zaWduZWQgY2hhciBjKSB7CiAgICAgcmV0dXJuIDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KHN0YXRpY19jYXN0PGNoYXI+KGMpKTsKQEAgLTEwNjA1LDggKzEyNTUyLDggQEAKIAogc3RkOjpzdHJpbmcgcmF0aW9fc3RyaW5nPHN0ZDo6YXR0bz46OnN5bWJvbCgpIHsgcmV0dXJuICJhIjsgfQogc3RkOjpzdHJpbmcgcmF0aW9fc3RyaW5nPHN0ZDo6ZmVtdG8+OjpzeW1ib2woKSB7IHJldHVybiAiZiI7IH0KLXN0ZDo6c3RyaW5nICByYXRpb19zdHJpbmc8c3RkOjpwaWNvPjo6c3ltYm9sKCkgeyByZXR1cm4gInAiOyB9Ci1zdGQ6OnN0cmluZyAgcmF0aW9fc3RyaW5nPHN0ZDo6bmFubz46OnN5bWJvbCgpIHsgcmV0dXJuICJuIjsgfQorc3RkOjpzdHJpbmcgcmF0aW9fc3RyaW5nPHN0ZDo6cGljbz46OnN5bWJvbCgpIHsgcmV0dXJuICJwIjsgfQorc3RkOjpzdHJpbmcgcmF0aW9fc3RyaW5nPHN0ZDo6bmFubz46OnN5bWJvbCgpIHsgcmV0dXJuICJuIjsgfQogc3RkOjpzdHJpbmcgcmF0aW9fc3RyaW5nPHN0ZDo6bWljcm8+OjpzeW1ib2woKSB7IHJldHVybiAidSI7IH0KIHN0ZDo6c3RyaW5nIHJhdGlvX3N0cmluZzxzdGQ6Om1pbGxpPjo6c3ltYm9sKCkgeyByZXR1cm4gIm0iOyB9CiAKQEAgLTEwNjcyLDYgKzEyNjE5LDIwIEBACiAKIH0KIC8vIGVuZCBjYXRjaF90b3RhbHMuY3BwCisvLyBzdGFydCBjYXRjaF91bmNhdWdodF9leGNlcHRpb25zLmNwcAorCisjaW5jbHVkZSA8ZXhjZXB0aW9uPgorCituYW1lc3BhY2UgQ2F0Y2ggeworICAgIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9ucygpIHsKKyNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19DUFAxN19VTkNBVUdIVF9FWENFUFRJT05TKQorICAgICAgICByZXR1cm4gc3RkOjp1bmNhdWdodF9leGNlcHRpb25zKCkgPiAwOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIHN0ZDo6dW5jYXVnaHRfZXhjZXB0aW9uKCk7CisjZW5kaWYKKyAgfQorfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCisvLyBlbmQgY2F0Y2hfdW5jYXVnaHRfZXhjZXB0aW9ucy5jcHAKIC8vIHN0YXJ0IGNhdGNoX3ZlcnNpb24uY3BwCiAKICNpbmNsdWRlIDxvc3RyZWFtPgpAQCAtMTA3MDQsNyArMTI2NjUsNyBAQAogICAgIH0KIAogICAgIFZlcnNpb24gY29uc3QmIGxpYnJhcnlWZXJzaW9uKCkgewotICAgICAgICBzdGF0aWMgVmVyc2lvbiB2ZXJzaW9uKCAyLCAxLCAxLCAiIiwgMCApOworICAgICAgICBzdGF0aWMgVmVyc2lvbiB2ZXJzaW9uKCAyLCA3LCAwLCAiIiwgMCApOwogICAgICAgICByZXR1cm4gdmVyc2lvbjsKICAgICB9CiAKQEAgLTEwNzU1LDQ5ICsxMjcxNiwxNDMgQEAKIAogI2luY2x1ZGUgPGlvbWFuaXA+CiAKK3VzaW5nIHVjaGFyID0gdW5zaWduZWQgY2hhcjsKKwogbmFtZXNwYWNlIENhdGNoIHsKIAorbmFtZXNwYWNlIHsKKworICAgIHNpemVfdCB0cmFpbGluZ0J5dGVzKHVuc2lnbmVkIGNoYXIgYykgeworICAgICAgICBpZiAoKGMgJiAweEUwKSA9PSAweEMwKSB7CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGMgJiAweEYwKSA9PSAweEUwKSB7CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGMgJiAweEY4KSA9PSAweEYwKSB7CisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgfQorICAgICAgICBDQVRDSF9JTlRFUk5BTF9FUlJPUigiSW52YWxpZCBtdWx0aWJ5dGUgdXRmLTggc3RhcnQgYnl0ZSBlbmNvdW50ZXJlZCIpOworICAgIH0KKworICAgIHVpbnQzMl90IGhlYWRlclZhbHVlKHVuc2lnbmVkIGNoYXIgYykgeworICAgICAgICBpZiAoKGMgJiAweEUwKSA9PSAweEMwKSB7CisgICAgICAgICAgICByZXR1cm4gYyAmIDB4MUY7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChjICYgMHhGMCkgPT0gMHhFMCkgeworICAgICAgICAgICAgcmV0dXJuIGMgJiAweDBGOworICAgICAgICB9CisgICAgICAgIGlmICgoYyAmIDB4RjgpID09IDB4RjApIHsKKyAgICAgICAgICAgIHJldHVybiBjICYgMHgwNzsKKyAgICAgICAgfQorICAgICAgICBDQVRDSF9JTlRFUk5BTF9FUlJPUigiSW52YWxpZCBtdWx0aWJ5dGUgdXRmLTggc3RhcnQgYnl0ZSBlbmNvdW50ZXJlZCIpOworICAgIH0KKworICAgIHZvaWQgaGV4RXNjYXBlQ2hhcihzdGQ6Om9zdHJlYW0mIG9zLCB1bnNpZ25lZCBjaGFyIGMpIHsKKyAgICAgICAgc3RkOjppb3NfYmFzZTo6Zm10ZmxhZ3MgZihvcy5mbGFncygpKTsKKyAgICAgICAgb3MgPDwgIlxceCIKKyAgICAgICAgICAgIDw8IHN0ZDo6dXBwZXJjYXNlIDw8IHN0ZDo6aGV4IDw8IHN0ZDo6c2V0ZmlsbCgnMCcpIDw8IHN0ZDo6c2V0dygyKQorICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8aW50PihjKTsKKyAgICAgICAgb3MuZmxhZ3MoZik7CisgICAgfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwogICAgIFhtbEVuY29kZTo6WG1sRW5jb2RlKCBzdGQ6OnN0cmluZyBjb25zdCYgc3RyLCBGb3JXaGF0IGZvcldoYXQgKQogICAgIDogICBtX3N0ciggc3RyICksCiAgICAgICAgIG1fZm9yV2hhdCggZm9yV2hhdCApCiAgICAge30KIAogICAgIHZvaWQgWG1sRW5jb2RlOjplbmNvZGVUbyggc3RkOjpvc3RyZWFtJiBvcyApIGNvbnN0IHsKLQogICAgICAgICAvLyBBcG9zdHJvcGhlIGVzY2FwaW5nIG5vdCBuZWNlc3NhcnkgaWYgd2UgYWx3YXlzIHVzZSAiIHRvIHdyaXRlIGF0dHJpYnV0ZXMKICAgICAgICAgLy8gKHNlZTogaHR0cDovL3d3dy53My5vcmcvVFIveG1sLyNzeW50YXgpCiAKLSAgICAgICAgZm9yKCBzdGQ6OnNpemVfdCBpID0gMDsgaSA8IG1fc3RyLnNpemUoKTsgKysgaSApIHsKLSAgICAgICAgICAgIGNoYXIgYyA9IG1fc3RyW2ldOwotICAgICAgICAgICAgc3dpdGNoKCBjICkgewotICAgICAgICAgICAgICAgIGNhc2UgJzwnOiAgIG9zIDw8ICImbHQ7IjsgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnJic6ICAgb3MgPDwgIiZhbXA7IjsgYnJlYWs7CisgICAgICAgIGZvciggc3RkOjpzaXplX3QgaWR4ID0gMDsgaWR4IDwgbV9zdHIuc2l6ZSgpOyArKyBpZHggKSB7CisgICAgICAgICAgICB1Y2hhciBjID0gbV9zdHJbaWR4XTsKKyAgICAgICAgICAgIHN3aXRjaCAoYykgeworICAgICAgICAgICAgY2FzZSAnPCc6ICAgb3MgPDwgIiZsdDsiOyBicmVhazsKKyAgICAgICAgICAgIGNhc2UgJyYnOiAgIG9zIDw8ICImYW1wOyI7IGJyZWFrOwogCi0gICAgICAgICAgICAgICAgY2FzZSAnPic6Ci0gICAgICAgICAgICAgICAgICAgIC8vIFNlZTogaHR0cDovL3d3dy53My5vcmcvVFIveG1sLyNzeW50YXgKLSAgICAgICAgICAgICAgICAgICAgaWYoIGkgPiAyICYmIG1fc3RyW2ktMV0gPT0gJ10nICYmIG1fc3RyW2ktMl0gPT0gJ10nICkKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8ICImZ3Q7IjsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgb3MgPDwgYzsKKyAgICAgICAgICAgIGNhc2UgJz4nOgorICAgICAgICAgICAgICAgIC8vIFNlZTogaHR0cDovL3d3dy53My5vcmcvVFIveG1sLyNzeW50YXgKKyAgICAgICAgICAgICAgICBpZiAoaWR4ID4gMiAmJiBtX3N0cltpZHggLSAxXSA9PSAnXScgJiYgbV9zdHJbaWR4IC0gMl0gPT0gJ10nKQorICAgICAgICAgICAgICAgICAgICBvcyA8PCAiJmd0OyI7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvcyA8PCBjOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlICdcIic6CisgICAgICAgICAgICAgICAgaWYgKG1fZm9yV2hhdCA9PSBGb3JBdHRyaWJ1dGVzKQorICAgICAgICAgICAgICAgICAgICBvcyA8PCAiJnF1b3Q7IjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9zIDw8IGM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgZm9yIGNvbnRyb2wgY2hhcmFjdGVycyBhbmQgaW52YWxpZCB1dGYtOAorCisgICAgICAgICAgICAgICAgLy8gRXNjYXBlIGNvbnRyb2wgY2hhcmFjdGVycyBpbiBzdGFuZGFyZCBhc2NpaQorICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwNDEwNy93aHktYXJlLWNvbnRyb2wtY2hhcmFjdGVycy1pbGxlZ2FsLWluLXhtbC0xLTAKKyAgICAgICAgICAgICAgICBpZiAoYyA8IDB4MDkgfHwgKGMgPiAweDBEICYmIGMgPCAweDIwKSB8fCBjID09IDB4N0YpIHsKKyAgICAgICAgICAgICAgICAgICAgaGV4RXNjYXBlQ2hhcihvcywgYyk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgIGNhc2UgJ1wiJzoKLSAgICAgICAgICAgICAgICAgICAgaWYoIG1fZm9yV2hhdCA9PSBGb3JBdHRyaWJ1dGVzICkKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8ICImcXVvdDsiOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBvcyA8PCBjOworICAgICAgICAgICAgICAgIC8vIFBsYWluIEFTQ0lJOiBXcml0ZSBpdCB0byBzdHJlYW0KKyAgICAgICAgICAgICAgICBpZiAoYyA8IDB4N0YpIHsKKyAgICAgICAgICAgICAgICAgICAgb3MgPDwgYzsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgLy8gRXNjYXBlIGNvbnRyb2wgY2hhcnMgLSBiYXNlZCBvbiBjb250cmlidXRpb24gYnkgQGVzcGVuYWxiIGluIFBSICM0NjUgYW5kCi0gICAgICAgICAgICAgICAgICAgIC8vIGJ5IEBtcnBpIFBSICM1ODgKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAoIGMgPj0gMCAmJiBjIDwgJ1x4MDknICkgfHwgKCBjID4gJ1x4MEQnICYmIGMgPCAnXHgyMCcpIHx8IGM9PSdceDdGJyApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlZSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzQwNDEwNy93aHktYXJlLWNvbnRyb2wtY2hhcmFjdGVycy1pbGxlZ2FsLWluLXhtbC0xLTAKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8ICJcXHgiIDw8IHN0ZDo6dXBwZXJjYXNlIDw8IHN0ZDo6aGV4IDw8IHN0ZDo6c2V0ZmlsbCgnMCcpIDw8IHN0ZDo6c2V0dygyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8aW50PiggYyApOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIG9zIDw8IGM7CisgICAgICAgICAgICAgICAgLy8gVVRGLTggdGVycml0b3J5CisgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGVuY29kaW5nIGlzIHZhbGlkIGFuZCBpZiBpdCBpcyBub3QsIGhleCBlc2NhcGUgYnl0ZXMuCisgICAgICAgICAgICAgICAgLy8gSW1wb3J0YW50OiBXZSBkbyBub3QgY2hlY2sgdGhlIGV4YWN0IGRlY29kZWQgdmFsdWVzIGZvciB2YWxpZGl0eSwgb25seSB0aGUgZW5jb2RpbmcgZm9ybWF0CisgICAgICAgICAgICAgICAgLy8gRmlyc3QgY2hlY2sgdGhhdCB0aGlzIGJ5dGVzIGlzIGEgdmFsaWQgbGVhZCBieXRlOgorICAgICAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCBpdCBpcyBub3QgZW5jb2RlZCBhcyAxMTExIDFYWFgKKyAgICAgICAgICAgICAgICAvLyBPciBhcyAxMFhYIFhYWFgKKyAgICAgICAgICAgICAgICBpZiAoYyA8ICAweEMwIHx8CisgICAgICAgICAgICAgICAgICAgIGMgPj0gMHhGOCkgeworICAgICAgICAgICAgICAgICAgICBoZXhFc2NhcGVDaGFyKG9zLCBjKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgYXV0byBlbmNCeXRlcyA9IHRyYWlsaW5nQnl0ZXMoYyk7CisgICAgICAgICAgICAgICAgLy8gQXJlIHRoZXJlIGVub3VnaCBieXRlcyBsZWZ0IHRvIGF2b2lkIGFjY2Vzc2luZyBvdXQtb2YtYm91bmRzIG1lbW9yeT8KKyAgICAgICAgICAgICAgICBpZiAoaWR4ICsgZW5jQnl0ZXMgLSAxID49IG1fc3RyLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAgICBoZXhFc2NhcGVDaGFyKG9zLCBjKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8vIFRoZSBoZWFkZXIgaXMgdmFsaWQsIGNoZWNrIGRhdGEKKyAgICAgICAgICAgICAgICAvLyBUaGUgbmV4dCBlbmNCeXRlcyBieXRlcyBtdXN0IHRvZ2V0aGVyIGJlIGEgdmFsaWQgdXRmLTgKKyAgICAgICAgICAgICAgICAvLyBUaGlzIG1lYW5zOiBiaXRwYXR0ZXJuIDEwWFggWFhYWCBhbmQgdGhlIGV4dHJhY3RlZCB2YWx1ZSBpcyBzYW5lIChpc2gpCisgICAgICAgICAgICAgICAgYm9vbCB2YWxpZCA9IHRydWU7CisgICAgICAgICAgICAgICAgdWludDMyX3QgdmFsdWUgPSBoZWFkZXJWYWx1ZShjKTsKKyAgICAgICAgICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IG4gPSAxOyBuIDwgZW5jQnl0ZXM7ICsrbikgeworICAgICAgICAgICAgICAgICAgICB1Y2hhciBuYyA9IG1fc3RyW2lkeCArIG5dOworICAgICAgICAgICAgICAgICAgICB2YWxpZCAmPSAoKG5jICYgMHhDMCkgPT0gMHg4MCk7CisgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKHZhbHVlIDw8IDYpIHwgKG5jICYgMHgzRik7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKAorICAgICAgICAgICAgICAgICAgICAvLyBXcm9uZyBiaXQgcGF0dGVybiBvZiBmb2xsb3dpbmcgYnl0ZXMKKyAgICAgICAgICAgICAgICAgICAgKCF2YWxpZCkgfHwKKyAgICAgICAgICAgICAgICAgICAgLy8gT3ZlcmxvbmcgZW5jb2RpbmdzCisgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA8IDB4ODApIHx8CisgICAgICAgICAgICAgICAgICAgICgweDgwIDw9IHZhbHVlICYmIHZhbHVlIDwgMHg4MDAgICAmJiBlbmNCeXRlcyA+IDIpIHx8CisgICAgICAgICAgICAgICAgICAgICgweDgwMCA8IHZhbHVlICYmIHZhbHVlIDwgMHgxMDAwMCAmJiBlbmNCeXRlcyA+IDMpIHx8CisgICAgICAgICAgICAgICAgICAgIC8vIEVuY29kZWQgdmFsdWUgb3V0IG9mIHJhbmdlCisgICAgICAgICAgICAgICAgICAgICh2YWx1ZSA+PSAweDExMDAwMCkKKyAgICAgICAgICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAgICAgICAgIGhleEVzY2FwZUNoYXIob3MsIGMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBnb3QgaGVyZSwgdGhpcyBpcyBpbiBmYWN0IGEgdmFsaWQoaXNoKSB1dGYtOCBzZXF1ZW5jZQorICAgICAgICAgICAgICAgIGZvciAoc3RkOjpzaXplX3QgbiA9IDA7IG4gPCBlbmNCeXRlczsgKytuKSB7CisgICAgICAgICAgICAgICAgICAgIG9zIDw8IG1fc3RyW2lkeCArIG5dOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZHggKz0gZW5jQnl0ZXMgLSAxOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQpAQCAtMTA5MzksNyArMTI5OTQsNyBAQAogI2luY2x1ZGUgPGNzdHJpbmc+CiAjaW5jbHVkZSA8Y2Zsb2F0PgogI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPG1lbW9yeT4KIAogbmFtZXNwYWNlIENhdGNoIHsKQEAgLTEwOTYyLDcgKzEzMDE3LDcgQEAKICNpZmRlZiBfTVNDX1ZFUgogICAgICAgICBzcHJpbnRmX3MoYnVmZmVyLCAiJS4zZiIsIGR1cmF0aW9uKTsKICNlbHNlCi0gICAgICAgIHNwcmludGYoYnVmZmVyLCAiJS4zZiIsIGR1cmF0aW9uKTsKKyAgICAgICAgc3RkOjpzcHJpbnRmKGJ1ZmZlciwgIiUuM2YiLCBkdXJhdGlvbik7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuIHN0ZDo6c3RyaW5nKGJ1ZmZlcik7CiAgICAgfQpAQCAtMTA5NzAsNiArMTMwMjUsMTAgQEAKICAgICBUZXN0RXZlbnRMaXN0ZW5lckJhc2U6OlRlc3RFdmVudExpc3RlbmVyQmFzZShSZXBvcnRlckNvbmZpZyBjb25zdCAmIF9jb25maWcpCiAgICAgICAgIDpTdHJlYW1pbmdSZXBvcnRlckJhc2UoX2NvbmZpZykge30KIAorICAgIHN0ZDo6c2V0PFZlcmJvc2l0eT4gVGVzdEV2ZW50TGlzdGVuZXJCYXNlOjpnZXRTdXBwb3J0ZWRWZXJib3NpdGllcygpIHsKKyAgICAgICAgcmV0dXJuIHsgVmVyYm9zaXR5OjpRdWlldCwgVmVyYm9zaXR5OjpOb3JtYWwsIFZlcmJvc2l0eTo6SGlnaCB9OworICAgIH0KKwogICAgIHZvaWQgVGVzdEV2ZW50TGlzdGVuZXJCYXNlOjphc3NlcnRpb25TdGFydGluZyhBc3NlcnRpb25JbmZvIGNvbnN0ICYpIHt9CiAKICAgICBib29sIFRlc3RFdmVudExpc3RlbmVyQmFzZTo6YXNzZXJ0aW9uRW5kZWQoQXNzZXJ0aW9uU3RhdHMgY29uc3QgJikgewpAQCAtMTEyMTQsOSArMTMyNzMsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgUmVwb3J0ZXJQcmVmZXJlbmNlcyBDb21wYWN0UmVwb3J0ZXI6OmdldFByZWZlcmVuY2VzKCkgY29uc3QgewotICAgICAgICAgICAgUmVwb3J0ZXJQcmVmZXJlbmNlcyBwcmVmczsKLSAgICAgICAgICAgIHByZWZzLnNob3VsZFJlZGlyZWN0U3RkT3V0ID0gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gcHJlZnM7CisgICAgICAgICAgICByZXR1cm4gbV9yZXBvcnRlclByZWZzOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBDb21wYWN0UmVwb3J0ZXI6Om5vTWF0Y2hpbmdUZXN0Q2FzZXMoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzcGVjICkgewpAQCAtMTEzNjAsOCArMTM0MTcsNiBAQAogICAgIHZvaWQgcHJpbnQoKSBjb25zdCB7CiAgICAgICAgIHByaW50U291cmNlSW5mbygpOwogICAgICAgICBpZiAoc3RhdHMudG90YWxzLmFzc2VydGlvbnMudG90YWwoKSA+IDApIHsKLSAgICAgICAgICAgIGlmIChyZXN1bHQuaXNPaygpKQotICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAnXG4nOwogICAgICAgICAgICAgcHJpbnRSZXN1bHRUeXBlKCk7CiAgICAgICAgICAgICBwcmludE9yaWdpbmFsRXhwcmVzc2lvbigpOwogICAgICAgICAgICAgcHJpbnRSZWNvbnN0cnVjdGVkRXhwcmVzc2lvbigpOwpAQCAtMTE0OTYsNyArMTM1NTEsNyBAQAogICAgICAgICBjYXNlIFVuaXQ6Ok5hbm9zZWNvbmRzOgogICAgICAgICAgICAgcmV0dXJuICJucyI7CiAgICAgICAgIGNhc2UgVW5pdDo6TWljcm9zZWNvbmRzOgotICAgICAgICAgICAgcmV0dXJuICLCtXMiOworICAgICAgICAgICAgcmV0dXJuICJ1cyI7CiAgICAgICAgIGNhc2UgVW5pdDo6TWlsbGlzZWNvbmRzOgogICAgICAgICAgICAgcmV0dXJuICJtcyI7CiAgICAgICAgIGNhc2UgVW5pdDo6U2Vjb25kczoKQEAgLTExODgyLDcgKzEzOTM3LDcgQEAKIC8vIGVuZCBjYXRjaF9yZXBvcnRlcl9jb25zb2xlLmNwcAogLy8gc3RhcnQgY2F0Y2hfcmVwb3J0ZXJfanVuaXQuY3BwCiAKLSNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjYXNzZXJ0PgogI2luY2x1ZGUgPHNzdHJlYW0+CiAjaW5jbHVkZSA8Y3RpbWU+CiAjaW5jbHVkZSA8YWxnb3JpdGhtPgpAQCAtMTE5MzEsOSArMTM5ODYsMTAgQEAKICAgICAgICAgICAgIHhtbCggX2NvbmZpZy5zdHJlYW0oKSApCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fcmVwb3J0ZXJQcmVmcy5zaG91bGRSZWRpcmVjdFN0ZE91dCA9IHRydWU7CisgICAgICAgICAgICBtX3JlcG9ydGVyUHJlZnMuc2hvdWxkUmVwb3J0QWxsQXNzZXJ0aW9ucyA9IHRydWU7CiAgICAgICAgIH0KIAotICAgIEp1bml0UmVwb3J0ZXI6On5KdW5pdFJlcG9ydGVyKCkge307CisgICAgSnVuaXRSZXBvcnRlcjo6fkp1bml0UmVwb3J0ZXIoKSB7fQogCiAgICAgc3RkOjpzdHJpbmcgSnVuaXRSZXBvcnRlcjo6Z2V0RGVzY3JpcHRpb24oKSB7CiAgICAgICAgIHJldHVybiAiUmVwb3J0cyB0ZXN0IHJlc3VsdHMgaW4gYW4gWE1MIGZvcm1hdCB0aGF0IGxvb2tzIGxpa2UgQW50J3MganVuaXRyZXBvcnQgdGFyZ2V0IjsKQEAgLTExOTQ0LDYgKzE0MDAwLDEzIEBACiAgICAgdm9pZCBKdW5pdFJlcG9ydGVyOjp0ZXN0UnVuU3RhcnRpbmcoIFRlc3RSdW5JbmZvIGNvbnN0JiBydW5JbmZvICkgIHsKICAgICAgICAgQ3VtdWxhdGl2ZVJlcG9ydGVyQmFzZTo6dGVzdFJ1blN0YXJ0aW5nKCBydW5JbmZvICk7CiAgICAgICAgIHhtbC5zdGFydEVsZW1lbnQoICJ0ZXN0c3VpdGVzIiApOworICAgICAgICBpZiggbV9jb25maWctPnJuZ1NlZWQoKSAhPSAwICkgeworICAgICAgICAgICAgeG1sLnN0YXJ0RWxlbWVudCggInByb3BlcnRpZXMiICk7CisgICAgICAgICAgICB4bWwuc2NvcGVkRWxlbWVudCggInByb3BlcnR5IiApCisgICAgICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCAibmFtZSIsICJyYW5kb20tc2VlZCIgKQorICAgICAgICAgICAgICAgIC53cml0ZUF0dHJpYnV0ZSggInZhbHVlIiwgbV9jb25maWctPnJuZ1NlZWQoKSApOworICAgICAgICAgICAgeG1sLmVuZEVsZW1lbnQoKTsKKyAgICAgICAgfQogICAgIH0KIAogICAgIHZvaWQgSnVuaXRSZXBvcnRlcjo6dGVzdEdyb3VwU3RhcnRpbmcoIEdyb3VwSW5mbyBjb25zdCYgZ3JvdXBJbmZvICkgewpAQCAtMTIxMTUsMTAwICsxNDE3OCwxMzkgQEAKIAogfSAvLyBlbmQgbmFtZXNwYWNlIENhdGNoCiAvLyBlbmQgY2F0Y2hfcmVwb3J0ZXJfanVuaXQuY3BwCi0vLyBzdGFydCBjYXRjaF9yZXBvcnRlcl9tdWx0aS5jcHAKKy8vIHN0YXJ0IGNhdGNoX3JlcG9ydGVyX2xpc3RlbmluZy5jcHAKKworI2luY2x1ZGUgPGNhc3NlcnQ+CiAKIG5hbWVzcGFjZSBDYXRjaCB7CiAKLSAgICB2b2lkIE11bHRpcGxlUmVwb3J0ZXJzOjphZGQoIElTdHJlYW1pbmdSZXBvcnRlclB0ciYmIHJlcG9ydGVyICkgewotICAgICAgICBtX3JlcG9ydGVycy5wdXNoX2JhY2soIHN0ZDo6bW92ZSggcmVwb3J0ZXIgKSApOworICAgIExpc3RlbmluZ1JlcG9ydGVyOjpMaXN0ZW5pbmdSZXBvcnRlcigpIHsKKyAgICAgICAgLy8gV2Ugd2lsbCBhc3N1bWUgdGhhdCBsaXN0ZW5lcnMgd2lsbCBhbHdheXMgd2FudCBhbGwgYXNzZXJ0aW9ucworICAgICAgICBtX3ByZWZlcmVuY2VzLnNob3VsZFJlcG9ydEFsbEFzc2VydGlvbnMgPSB0cnVlOwogICAgIH0KIAotICAgIFJlcG9ydGVyUHJlZmVyZW5jZXMgTXVsdGlwbGVSZXBvcnRlcnM6OmdldFByZWZlcmVuY2VzKCkgY29uc3QgewotICAgICAgICByZXR1cm4gbV9yZXBvcnRlcnNbMF0tPmdldFByZWZlcmVuY2VzKCk7CisgICAgdm9pZCBMaXN0ZW5pbmdSZXBvcnRlcjo6YWRkTGlzdGVuZXIoIElTdHJlYW1pbmdSZXBvcnRlclB0ciYmIGxpc3RlbmVyICkgeworICAgICAgICBtX2xpc3RlbmVycy5wdXNoX2JhY2soIHN0ZDo6bW92ZSggbGlzdGVuZXIgKSApOwogICAgIH0KIAotICAgIHN0ZDo6c2V0PFZlcmJvc2l0eT4gTXVsdGlwbGVSZXBvcnRlcnM6OmdldFN1cHBvcnRlZFZlcmJvc2l0aWVzKCkgeworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OmFkZFJlcG9ydGVyKElTdHJlYW1pbmdSZXBvcnRlclB0ciYmIHJlcG9ydGVyKSB7CisgICAgICAgIGFzc2VydCghbV9yZXBvcnRlciAmJiAiTGlzdGVuaW5nIHJlcG9ydGVyIGNhbiB3cmFwIG9ubHkgMSByZWFsIHJlcG9ydGVyIik7CisgICAgICAgIG1fcmVwb3J0ZXIgPSBzdGQ6Om1vdmUoIHJlcG9ydGVyICk7CisgICAgICAgIG1fcHJlZmVyZW5jZXMuc2hvdWxkUmVkaXJlY3RTdGRPdXQgPSBtX3JlcG9ydGVyLT5nZXRQcmVmZXJlbmNlcygpLnNob3VsZFJlZGlyZWN0U3RkT3V0OworICAgIH0KKworICAgIFJlcG9ydGVyUHJlZmVyZW5jZXMgTGlzdGVuaW5nUmVwb3J0ZXI6OmdldFByZWZlcmVuY2VzKCkgY29uc3QgeworICAgICAgICByZXR1cm4gbV9wcmVmZXJlbmNlczsKKyAgICB9CisKKyAgICBzdGQ6OnNldDxWZXJib3NpdHk+IExpc3RlbmluZ1JlcG9ydGVyOjpnZXRTdXBwb3J0ZWRWZXJib3NpdGllcygpIHsKICAgICAgICAgcmV0dXJuIHN0ZDo6c2V0PFZlcmJvc2l0eT57IH07CiAgICAgfQogCi0gICAgdm9pZCBNdWx0aXBsZVJlcG9ydGVyczo6bm9NYXRjaGluZ1Rlc3RDYXNlcyggc3RkOjpzdHJpbmcgY29uc3QmIHNwZWMgKSB7Ci0gICAgICAgIGZvciggYXV0byBjb25zdCYgcmVwb3J0ZXIgOiBtX3JlcG9ydGVycyApCi0gICAgICAgICAgICByZXBvcnRlci0+bm9NYXRjaGluZ1Rlc3RDYXNlcyggc3BlYyApOworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6Om5vTWF0Y2hpbmdUZXN0Q2FzZXMoIHN0ZDo6c3RyaW5nIGNvbnN0JiBzcGVjICkgeworICAgICAgICBmb3IgKCBhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzICkgeworICAgICAgICAgICAgbGlzdGVuZXItPm5vTWF0Y2hpbmdUZXN0Q2FzZXMoIHNwZWMgKTsKKyAgICAgICAgfQorICAgICAgICBtX3JlcG9ydGVyLT5ub01hdGNoaW5nVGVzdENhc2VzKCBzcGVjICk7CiAgICAgfQogCi0gICAgdm9pZCBNdWx0aXBsZVJlcG9ydGVyczo6YmVuY2htYXJrU3RhcnRpbmcoIEJlbmNobWFya0luZm8gY29uc3QmIGJlbmNobWFya0luZm8gKSB7Ci0gICAgICAgIGZvciggYXV0byBjb25zdCYgcmVwb3J0ZXIgOiBtX3JlcG9ydGVycyApCi0gICAgICAgICAgICByZXBvcnRlci0+YmVuY2htYXJrU3RhcnRpbmcoIGJlbmNobWFya0luZm8gKTsKKyAgICB2b2lkIExpc3RlbmluZ1JlcG9ydGVyOjpiZW5jaG1hcmtTdGFydGluZyggQmVuY2htYXJrSW5mbyBjb25zdCYgYmVuY2htYXJrSW5mbyApIHsKKyAgICAgICAgZm9yICggYXV0byBjb25zdCYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycyApIHsKKyAgICAgICAgICAgIGxpc3RlbmVyLT5iZW5jaG1hcmtTdGFydGluZyggYmVuY2htYXJrSW5mbyApOworICAgICAgICB9CisgICAgICAgIG1fcmVwb3J0ZXItPmJlbmNobWFya1N0YXJ0aW5nKCBiZW5jaG1hcmtJbmZvICk7CiAgICAgfQotICAgIHZvaWQgTXVsdGlwbGVSZXBvcnRlcnM6OmJlbmNobWFya0VuZGVkKCBCZW5jaG1hcmtTdGF0cyBjb25zdCYgYmVuY2htYXJrU3RhdHMgKSB7Ci0gICAgICAgIGZvciggYXV0byBjb25zdCYgcmVwb3J0ZXIgOiBtX3JlcG9ydGVycyApCi0gICAgICAgICAgICByZXBvcnRlci0+YmVuY2htYXJrRW5kZWQoIGJlbmNobWFya1N0YXRzICk7CisgICAgdm9pZCBMaXN0ZW5pbmdSZXBvcnRlcjo6YmVuY2htYXJrRW5kZWQoIEJlbmNobWFya1N0YXRzIGNvbnN0JiBiZW5jaG1hcmtTdGF0cyApIHsKKyAgICAgICAgZm9yICggYXV0byBjb25zdCYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycyApIHsKKyAgICAgICAgICAgIGxpc3RlbmVyLT5iZW5jaG1hcmtFbmRlZCggYmVuY2htYXJrU3RhdHMgKTsKKyAgICAgICAgfQorICAgICAgICBtX3JlcG9ydGVyLT5iZW5jaG1hcmtFbmRlZCggYmVuY2htYXJrU3RhdHMgKTsKICAgICB9CiAKLSAgICB2b2lkIE11bHRpcGxlUmVwb3J0ZXJzOjp0ZXN0UnVuU3RhcnRpbmcoIFRlc3RSdW5JbmZvIGNvbnN0JiB0ZXN0UnVuSW5mbyApIHsKLSAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiByZXBvcnRlciA6IG1fcmVwb3J0ZXJzICkKLSAgICAgICAgICAgIHJlcG9ydGVyLT50ZXN0UnVuU3RhcnRpbmcoIHRlc3RSdW5JbmZvICk7CisgICAgdm9pZCBMaXN0ZW5pbmdSZXBvcnRlcjo6dGVzdFJ1blN0YXJ0aW5nKCBUZXN0UnVuSW5mbyBjb25zdCYgdGVzdFJ1bkluZm8gKSB7CisgICAgICAgIGZvciAoIGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMgKSB7CisgICAgICAgICAgICBsaXN0ZW5lci0+dGVzdFJ1blN0YXJ0aW5nKCB0ZXN0UnVuSW5mbyApOworICAgICAgICB9CisgICAgICAgIG1fcmVwb3J0ZXItPnRlc3RSdW5TdGFydGluZyggdGVzdFJ1bkluZm8gKTsKICAgICB9CiAKLSAgICB2b2lkIE11bHRpcGxlUmVwb3J0ZXJzOjp0ZXN0R3JvdXBTdGFydGluZyggR3JvdXBJbmZvIGNvbnN0JiBncm91cEluZm8gKSB7Ci0gICAgICAgIGZvciggYXV0byBjb25zdCYgcmVwb3J0ZXIgOiBtX3JlcG9ydGVycyApCi0gICAgICAgICAgICByZXBvcnRlci0+dGVzdEdyb3VwU3RhcnRpbmcoIGdyb3VwSW5mbyApOworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OnRlc3RHcm91cFN0YXJ0aW5nKCBHcm91cEluZm8gY29uc3QmIGdyb3VwSW5mbyApIHsKKyAgICAgICAgZm9yICggYXV0byBjb25zdCYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycyApIHsKKyAgICAgICAgICAgIGxpc3RlbmVyLT50ZXN0R3JvdXBTdGFydGluZyggZ3JvdXBJbmZvICk7CisgICAgICAgIH0KKyAgICAgICAgbV9yZXBvcnRlci0+dGVzdEdyb3VwU3RhcnRpbmcoIGdyb3VwSW5mbyApOwogICAgIH0KIAotICAgIHZvaWQgTXVsdGlwbGVSZXBvcnRlcnM6OnRlc3RDYXNlU3RhcnRpbmcoIFRlc3RDYXNlSW5mbyBjb25zdCYgdGVzdEluZm8gKSB7Ci0gICAgICAgIGZvciggYXV0byBjb25zdCYgcmVwb3J0ZXIgOiBtX3JlcG9ydGVycyApCi0gICAgICAgICAgICByZXBvcnRlci0+dGVzdENhc2VTdGFydGluZyggdGVzdEluZm8gKTsKKyAgICB2b2lkIExpc3RlbmluZ1JlcG9ydGVyOjp0ZXN0Q2FzZVN0YXJ0aW5nKCBUZXN0Q2FzZUluZm8gY29uc3QmIHRlc3RJbmZvICkgeworICAgICAgICBmb3IgKCBhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzICkgeworICAgICAgICAgICAgbGlzdGVuZXItPnRlc3RDYXNlU3RhcnRpbmcoIHRlc3RJbmZvICk7CisgICAgICAgIH0KKyAgICAgICAgbV9yZXBvcnRlci0+dGVzdENhc2VTdGFydGluZyggdGVzdEluZm8gKTsKICAgICB9CiAKLSAgICB2b2lkIE11bHRpcGxlUmVwb3J0ZXJzOjpzZWN0aW9uU3RhcnRpbmcoIFNlY3Rpb25JbmZvIGNvbnN0JiBzZWN0aW9uSW5mbyApIHsKLSAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiByZXBvcnRlciA6IG1fcmVwb3J0ZXJzICkKLSAgICAgICAgICAgIHJlcG9ydGVyLT5zZWN0aW9uU3RhcnRpbmcoIHNlY3Rpb25JbmZvICk7CisgICAgdm9pZCBMaXN0ZW5pbmdSZXBvcnRlcjo6c2VjdGlvblN0YXJ0aW5nKCBTZWN0aW9uSW5mbyBjb25zdCYgc2VjdGlvbkluZm8gKSB7CisgICAgICAgIGZvciAoIGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMgKSB7CisgICAgICAgICAgICBsaXN0ZW5lci0+c2VjdGlvblN0YXJ0aW5nKCBzZWN0aW9uSW5mbyApOworICAgICAgICB9CisgICAgICAgIG1fcmVwb3J0ZXItPnNlY3Rpb25TdGFydGluZyggc2VjdGlvbkluZm8gKTsKICAgICB9CiAKLSAgICB2b2lkIE11bHRpcGxlUmVwb3J0ZXJzOjphc3NlcnRpb25TdGFydGluZyggQXNzZXJ0aW9uSW5mbyBjb25zdCYgYXNzZXJ0aW9uSW5mbyApIHsKLSAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiByZXBvcnRlciA6IG1fcmVwb3J0ZXJzICkKLSAgICAgICAgICAgIHJlcG9ydGVyLT5hc3NlcnRpb25TdGFydGluZyggYXNzZXJ0aW9uSW5mbyApOworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OmFzc2VydGlvblN0YXJ0aW5nKCBBc3NlcnRpb25JbmZvIGNvbnN0JiBhc3NlcnRpb25JbmZvICkgeworICAgICAgICBmb3IgKCBhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzICkgeworICAgICAgICAgICAgbGlzdGVuZXItPmFzc2VydGlvblN0YXJ0aW5nKCBhc3NlcnRpb25JbmZvICk7CisgICAgICAgIH0KKyAgICAgICAgbV9yZXBvcnRlci0+YXNzZXJ0aW9uU3RhcnRpbmcoIGFzc2VydGlvbkluZm8gKTsKICAgICB9CiAKICAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiB0aGUgbWVzc2FnZXMgYnVmZmVyIHNob3VsZCBiZSBjbGVhcmVkOgotICAgIGJvb2wgTXVsdGlwbGVSZXBvcnRlcnM6OmFzc2VydGlvbkVuZGVkKCBBc3NlcnRpb25TdGF0cyBjb25zdCYgYXNzZXJ0aW9uU3RhdHMgKSB7Ci0gICAgICAgIGJvb2wgY2xlYXJCdWZmZXIgPSBmYWxzZTsKLSAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiByZXBvcnRlciA6IG1fcmVwb3J0ZXJzICkKLSAgICAgICAgICAgIGNsZWFyQnVmZmVyIHw9IHJlcG9ydGVyLT5hc3NlcnRpb25FbmRlZCggYXNzZXJ0aW9uU3RhdHMgKTsKLSAgICAgICAgcmV0dXJuIGNsZWFyQnVmZmVyOworICAgIGJvb2wgTGlzdGVuaW5nUmVwb3J0ZXI6OmFzc2VydGlvbkVuZGVkKCBBc3NlcnRpb25TdGF0cyBjb25zdCYgYXNzZXJ0aW9uU3RhdHMgKSB7CisgICAgICAgIGZvciggYXV0byBjb25zdCYgbGlzdGVuZXIgOiBtX2xpc3RlbmVycyApIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHZvaWQ+KCBsaXN0ZW5lci0+YXNzZXJ0aW9uRW5kZWQoIGFzc2VydGlvblN0YXRzICkgKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gbV9yZXBvcnRlci0+YXNzZXJ0aW9uRW5kZWQoIGFzc2VydGlvblN0YXRzICk7CiAgICAgfQogCi0gICAgdm9pZCBNdWx0aXBsZVJlcG9ydGVyczo6c2VjdGlvbkVuZGVkKCBTZWN0aW9uU3RhdHMgY29uc3QmIHNlY3Rpb25TdGF0cyApIHsKLSAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiByZXBvcnRlciA6IG1fcmVwb3J0ZXJzICkKLSAgICAgICAgICAgIHJlcG9ydGVyLT5zZWN0aW9uRW5kZWQoIHNlY3Rpb25TdGF0cyApOworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OnNlY3Rpb25FbmRlZCggU2VjdGlvblN0YXRzIGNvbnN0JiBzZWN0aW9uU3RhdHMgKSB7CisgICAgICAgIGZvciAoIGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMgKSB7CisgICAgICAgICAgICBsaXN0ZW5lci0+c2VjdGlvbkVuZGVkKCBzZWN0aW9uU3RhdHMgKTsKKyAgICAgICAgfQorICAgICAgICBtX3JlcG9ydGVyLT5zZWN0aW9uRW5kZWQoIHNlY3Rpb25TdGF0cyApOwogICAgIH0KIAotICAgIHZvaWQgTXVsdGlwbGVSZXBvcnRlcnM6OnRlc3RDYXNlRW5kZWQoIFRlc3RDYXNlU3RhdHMgY29uc3QmIHRlc3RDYXNlU3RhdHMgKSB7Ci0gICAgICAgIGZvciggYXV0byBjb25zdCYgcmVwb3J0ZXIgOiBtX3JlcG9ydGVycyApCi0gICAgICAgICAgICByZXBvcnRlci0+dGVzdENhc2VFbmRlZCggdGVzdENhc2VTdGF0cyApOworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OnRlc3RDYXNlRW5kZWQoIFRlc3RDYXNlU3RhdHMgY29uc3QmIHRlc3RDYXNlU3RhdHMgKSB7CisgICAgICAgIGZvciAoIGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMgKSB7CisgICAgICAgICAgICBsaXN0ZW5lci0+dGVzdENhc2VFbmRlZCggdGVzdENhc2VTdGF0cyApOworICAgICAgICB9CisgICAgICAgIG1fcmVwb3J0ZXItPnRlc3RDYXNlRW5kZWQoIHRlc3RDYXNlU3RhdHMgKTsKICAgICB9CiAKLSAgICB2b2lkIE11bHRpcGxlUmVwb3J0ZXJzOjp0ZXN0R3JvdXBFbmRlZCggVGVzdEdyb3VwU3RhdHMgY29uc3QmIHRlc3RHcm91cFN0YXRzICkgewotICAgICAgICBmb3IoIGF1dG8gY29uc3QmIHJlcG9ydGVyIDogbV9yZXBvcnRlcnMgKQotICAgICAgICAgICAgcmVwb3J0ZXItPnRlc3RHcm91cEVuZGVkKCB0ZXN0R3JvdXBTdGF0cyApOworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OnRlc3RHcm91cEVuZGVkKCBUZXN0R3JvdXBTdGF0cyBjb25zdCYgdGVzdEdyb3VwU3RhdHMgKSB7CisgICAgICAgIGZvciAoIGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMgKSB7CisgICAgICAgICAgICBsaXN0ZW5lci0+dGVzdEdyb3VwRW5kZWQoIHRlc3RHcm91cFN0YXRzICk7CisgICAgICAgIH0KKyAgICAgICAgbV9yZXBvcnRlci0+dGVzdEdyb3VwRW5kZWQoIHRlc3RHcm91cFN0YXRzICk7CiAgICAgfQogCi0gICAgdm9pZCBNdWx0aXBsZVJlcG9ydGVyczo6dGVzdFJ1bkVuZGVkKCBUZXN0UnVuU3RhdHMgY29uc3QmIHRlc3RSdW5TdGF0cyApIHsKLSAgICAgICAgZm9yKCBhdXRvIGNvbnN0JiByZXBvcnRlciA6IG1fcmVwb3J0ZXJzICkKLSAgICAgICAgICAgIHJlcG9ydGVyLT50ZXN0UnVuRW5kZWQoIHRlc3RSdW5TdGF0cyApOworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OnRlc3RSdW5FbmRlZCggVGVzdFJ1blN0YXRzIGNvbnN0JiB0ZXN0UnVuU3RhdHMgKSB7CisgICAgICAgIGZvciAoIGF1dG8gY29uc3QmIGxpc3RlbmVyIDogbV9saXN0ZW5lcnMgKSB7CisgICAgICAgICAgICBsaXN0ZW5lci0+dGVzdFJ1bkVuZGVkKCB0ZXN0UnVuU3RhdHMgKTsKKyAgICAgICAgfQorICAgICAgICBtX3JlcG9ydGVyLT50ZXN0UnVuRW5kZWQoIHRlc3RSdW5TdGF0cyApOwogICAgIH0KIAotICAgIHZvaWQgTXVsdGlwbGVSZXBvcnRlcnM6OnNraXBUZXN0KCBUZXN0Q2FzZUluZm8gY29uc3QmIHRlc3RJbmZvICkgewotICAgICAgICBmb3IoIGF1dG8gY29uc3QmIHJlcG9ydGVyIDogbV9yZXBvcnRlcnMgKQotICAgICAgICAgICAgcmVwb3J0ZXItPnNraXBUZXN0KCB0ZXN0SW5mbyApOworICAgIHZvaWQgTGlzdGVuaW5nUmVwb3J0ZXI6OnNraXBUZXN0KCBUZXN0Q2FzZUluZm8gY29uc3QmIHRlc3RJbmZvICkgeworICAgICAgICBmb3IgKCBhdXRvIGNvbnN0JiBsaXN0ZW5lciA6IG1fbGlzdGVuZXJzICkgeworICAgICAgICAgICAgbGlzdGVuZXItPnNraXBUZXN0KCB0ZXN0SW5mbyApOworICAgICAgICB9CisgICAgICAgIG1fcmVwb3J0ZXItPnNraXBUZXN0KCB0ZXN0SW5mbyApOwogICAgIH0KIAotICAgIGJvb2wgTXVsdGlwbGVSZXBvcnRlcnM6OmlzTXVsdGkoKSBjb25zdCB7CisgICAgYm9vbCBMaXN0ZW5pbmdSZXBvcnRlcjo6aXNNdWx0aSgpIGNvbnN0IHsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCiB9IC8vIGVuZCBuYW1lc3BhY2UgQ2F0Y2gKLS8vIGVuZCBjYXRjaF9yZXBvcnRlcl9tdWx0aS5jcHAKKy8vIGVuZCBjYXRjaF9yZXBvcnRlcl9saXN0ZW5pbmcuY3BwCiAvLyBzdGFydCBjYXRjaF9yZXBvcnRlcl94bWwuY3BwCiAKICNpZiBkZWZpbmVkKF9NU0NfVkVSKQpAQCAtMTIyMjQsNiArMTQzMjYsNyBAQAogICAgICAgICBtX3htbChfY29uZmlnLnN0cmVhbSgpKQogICAgIHsKICAgICAgICAgbV9yZXBvcnRlclByZWZzLnNob3VsZFJlZGlyZWN0U3RkT3V0ID0gdHJ1ZTsKKyAgICAgICAgbV9yZXBvcnRlclByZWZzLnNob3VsZFJlcG9ydEFsbEFzc2VydGlvbnMgPSB0cnVlOwogICAgIH0KIAogICAgIFhtbFJlcG9ydGVyOjp+WG1sUmVwb3J0ZXIoKSA9IGRlZmF1bHQ7CkBAIC0xMjI1NCw2ICsxNDM1Nyw5IEBACiAgICAgICAgIG1feG1sLnN0YXJ0RWxlbWVudCggIkNhdGNoIiApOwogICAgICAgICBpZiggIW1fY29uZmlnLT5uYW1lKCkuZW1wdHkoKSApCiAgICAgICAgICAgICBtX3htbC53cml0ZUF0dHJpYnV0ZSggIm5hbWUiLCBtX2NvbmZpZy0+bmFtZSgpICk7CisgICAgICAgIGlmKCBtX2NvbmZpZy0+cm5nU2VlZCgpICE9IDAgKQorICAgICAgICAgICAgbV94bWwuc2NvcGVkRWxlbWVudCggIlJhbmRvbW5lc3MiICkKKyAgICAgICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoICJzZWVkIiwgbV9jb25maWctPnJuZ1NlZWQoKSApOwogICAgIH0KIAogICAgIHZvaWQgWG1sUmVwb3J0ZXI6OnRlc3RHcm91cFN0YXJ0aW5nKCBHcm91cEluZm8gY29uc3QmIGdyb3VwSW5mbyApIHsKQEAgLTEyMjgwLDggKzE0Mzg2LDcgQEAKICAgICAgICAgU3RyZWFtaW5nUmVwb3J0ZXJCYXNlOjpzZWN0aW9uU3RhcnRpbmcoIHNlY3Rpb25JbmZvICk7CiAgICAgICAgIGlmKCBtX3NlY3Rpb25EZXB0aCsrID4gMCApIHsKICAgICAgICAgICAgIG1feG1sLnN0YXJ0RWxlbWVudCggIlNlY3Rpb24iICkKLSAgICAgICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoICJuYW1lIiwgdHJpbSggc2VjdGlvbkluZm8ubmFtZSApICkKLSAgICAgICAgICAgICAgICAud3JpdGVBdHRyaWJ1dGUoICJkZXNjcmlwdGlvbiIsIHNlY3Rpb25JbmZvLmRlc2NyaXB0aW9uICk7CisgICAgICAgICAgICAgICAgLndyaXRlQXR0cmlidXRlKCAibmFtZSIsIHRyaW0oIHNlY3Rpb25JbmZvLm5hbWUgKSApOwogICAgICAgICAgICAgd3JpdGVTb3VyY2VJbmZvKCBzZWN0aW9uSW5mby5saW5lSW5mbyApOwogICAgICAgICAgICAgbV94bWwuZW5zdXJlVGFnQ2xvc2VkKCk7CiAgICAgICAgIH0KQEAgLTEyNDM4LDcgKzE0NTQzLDcgQEAKIAogI2lmbmRlZiBfX09CSkNfXwogCi0jaWYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChfVU5JQ09ERSkgJiYgIWRlZmluZWQoRE9fTk9UX1VTRV9XTUFJTikKKyNpZiBkZWZpbmVkKENBVENIX0NPTkZJR19XQ0hBUikgJiYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChfVU5JQ09ERSkgJiYgIWRlZmluZWQoRE9fTk9UX1VTRV9XTUFJTikKIC8vIFN0YW5kYXJkIEMvQysrIFdpbjMyIFVuaWNvZGUgd21haW4gZW50cnkgcG9pbnQKIGV4dGVybiAiQyIgaW50IHdtYWluIChpbnQgYXJnYywgd2NoYXJfdCAqIGFyZ3ZbXSwgd2NoYXJfdCAqIFtdKSB7CiAjZWxzZQpAQCAtMTI0ODYsNyArMTQ1OTEsNyBAQAogI2RlZmluZSBDQVRDSF9SRVFVSVJFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URVNUKCAiQ0FUQ0hfUkVRVUlSRSIsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Tm9ybWFsLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIENBVENIX1JFUVVJUkVfRkFMU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFU1QoICJDQVRDSF9SRVFVSVJFX0ZBTFNFIiwgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpOb3JtYWwgfCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246OkZhbHNlVGVzdCwgX19WQV9BUkdTX18gKQogCi0jZGVmaW5lIENBVENIX1JFUVVJUkVfVEhST1dTKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9USFJPV1MoICJDQVRDSF9SRVFVSVJFX1RIUk9XUyIsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Tm9ybWFsLCAiIiwgX19WQV9BUkdTX18gKQorI2RlZmluZSBDQVRDSF9SRVFVSVJFX1RIUk9XUyggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEhST1dTKCAiQ0FUQ0hfUkVRVUlSRV9USFJPV1MiLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246Ok5vcm1hbCwgX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9SRVFVSVJFX1RIUk9XU19BUyggZXhwciwgZXhjZXB0aW9uVHlwZSApIElOVEVSTkFMX0NBVENIX1RIUk9XU19BUyggIkNBVENIX1JFUVVJUkVfVEhST1dTX0FTIiwgZXhjZXB0aW9uVHlwZSwgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpOb3JtYWwsIGV4cHIgKQogI2RlZmluZSBDQVRDSF9SRVFVSVJFX1RIUk9XU19XSVRIKCBleHByLCBtYXRjaGVyICkgSU5URVJOQUxfQ0FUQ0hfVEhST1dTX1NUUl9NQVRDSEVTKCAiQ0FUQ0hfUkVRVUlSRV9USFJPV1NfV0lUSCIsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Tm9ybWFsLCBtYXRjaGVyLCBleHByICkKICNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfRElTQUJMRV9NQVRDSEVSUykKQEAgLTEyNTAwLDcgKzE0NjA1LDcgQEAKICNkZWZpbmUgQ0FUQ0hfQ0hFQ0tFRF9FTFNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FTFNFKCAiQ0FUQ0hfQ0hFQ0tFRF9FTFNFIiwgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpDb250aW51ZU9uRmFpbHVyZSwgX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9DSEVDS19OT0ZBSUwoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFU1QoICJDQVRDSF9DSEVDS19OT0ZBSUwiLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246OkNvbnRpbnVlT25GYWlsdXJlIHwgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpTdXBwcmVzc0ZhaWwsIF9fVkFfQVJHU19fICkKIAotI2RlZmluZSBDQVRDSF9DSEVDS19USFJPV1MoIC4uLiApICBJTlRFUk5BTF9DQVRDSF9USFJPV1MoICJDQVRDSF9DSEVDS19USFJPV1MiLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246OkNvbnRpbnVlT25GYWlsdXJlLCAiIiwgX19WQV9BUkdTX18gKQorI2RlZmluZSBDQVRDSF9DSEVDS19USFJPV1MoIC4uLiApICBJTlRFUk5BTF9DQVRDSF9USFJPV1MoICJDQVRDSF9DSEVDS19USFJPV1MiLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246OkNvbnRpbnVlT25GYWlsdXJlLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIENBVENIX0NIRUNLX1RIUk9XU19BUyggZXhwciwgZXhjZXB0aW9uVHlwZSApIElOVEVSTkFMX0NBVENIX1RIUk9XU19BUyggIkNBVENIX0NIRUNLX1RIUk9XU19BUyIsIGV4Y2VwdGlvblR5cGUsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Q29udGludWVPbkZhaWx1cmUsIGV4cHIgKQogI2RlZmluZSBDQVRDSF9DSEVDS19USFJPV1NfV0lUSCggZXhwciwgbWF0Y2hlciApIElOVEVSTkFMX0NBVENIX1RIUk9XU19TVFJfTUFUQ0hFUyggIkNBVENIX0NIRUNLX1RIUk9XU19XSVRIIiwgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpDb250aW51ZU9uRmFpbHVyZSwgbWF0Y2hlciwgZXhwciApCiAjaWYgIWRlZmluZWQoQ0FUQ0hfQ09ORklHX0RJU0FCTEVfTUFUQ0hFUlMpCkBAIC0xMjUxNiwyNyArMTQ2MjEsNDkgQEAKIAogI2RlZmluZSBDQVRDSF9JTkZPKCBtc2cgKSBJTlRFUk5BTF9DQVRDSF9JTkZPKCAiQ0FUQ0hfSU5GTyIsIG1zZyApCiAjZGVmaW5lIENBVENIX1dBUk4oIG1zZyApIElOVEVSTkFMX0NBVENIX01TRyggIkNBVENIX1dBUk4iLCBDYXRjaDo6UmVzdWx0V2FzOjpXYXJuaW5nLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246OkNvbnRpbnVlT25GYWlsdXJlLCBtc2cgKQotI2RlZmluZSBDQVRDSF9DQVBUVVJFKCBtc2cgKSBJTlRFUk5BTF9DQVRDSF9JTkZPKCAiQ0FUQ0hfQ0FQVFVSRSIsICNtc2cgIiA6PSAiIDw8IDo6Q2F0Y2g6OkRldGFpbDo6c3RyaW5naWZ5KG1zZykgKQorI2RlZmluZSBDQVRDSF9DQVBUVVJFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9DQVBUVVJFKCBJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRShjYXB0dXJlciksICJDQVRDSF9DQVBUVVJFIixfX1ZBX0FSR1NfXyApCiAKICNkZWZpbmUgQ0FUQ0hfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRSggX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9NRVRIT0RfQVNfVEVTVF9DQVNFKCBtZXRob2QsIC4uLiApIElOVEVSTkFMX0NBVENIX01FVEhPRF9BU19URVNUX0NBU0UoIG1ldGhvZCwgX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9SRUdJU1RFUl9URVNUX0NBU0UoIEZ1bmN0aW9uLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9SRUdJU1RFUl9URVNUQ0FTRSggRnVuY3Rpb24sIF9fVkFfQVJHU19fICkKICNkZWZpbmUgQ0FUQ0hfU0VDVElPTiggLi4uICkgSU5URVJOQUxfQ0FUQ0hfU0VDVElPTiggX19WQV9BUkdTX18gKQorI2RlZmluZSBDQVRDSF9EWU5BTUlDX1NFQ1RJT04oIC4uLiApIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9GQUlMKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9NU0coICJDQVRDSF9GQUlMIiwgQ2F0Y2g6OlJlc3VsdFdhczo6RXhwbGljaXRGYWlsdXJlLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246Ok5vcm1hbCwgX19WQV9BUkdTX18gKQogI2RlZmluZSBDQVRDSF9GQUlMX0NIRUNLKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9NU0coICJDQVRDSF9GQUlMX0NIRUNLIiwgQ2F0Y2g6OlJlc3VsdFdhczo6RXhwbGljaXRGYWlsdXJlLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246OkNvbnRpbnVlT25GYWlsdXJlLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIENBVENIX1NVQ0NFRUQoIC4uLiApIElOVEVSTkFMX0NBVENIX01TRyggIkNBVENIX1NVQ0NFRUQiLCBDYXRjaDo6UmVzdWx0V2FzOjpPaywgQ2F0Y2g6OlJlc3VsdERpc3Bvc2l0aW9uOjpDb250aW51ZU9uRmFpbHVyZSwgX19WQV9BUkdTX18gKQogCiAjZGVmaW5lIENBVENIX0FOT05fVEVTVF9DQVNFKCkgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0UoKQogCisjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgorI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQorI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQorI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCisjZWxzZQorI2RlZmluZSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKSApCisjZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfUlVOVElNRV9TVEFUSUNfUkVRVUlSRSkKKyNkZWZpbmUgQ0FUQ0hfU1RBVElDX1JFUVVJUkUoIC4uLiApICAgICAgIHN0YXRpY19hc3NlcnQoICAgX19WQV9BUkdTX18gLCAgICAgICNfX1ZBX0FSR1NfXyApOyAgICAgQ0FUQ0hfU1VDQ0VFRCggI19fVkFfQVJHU19fICkKKyNkZWZpbmUgQ0FUQ0hfU1RBVElDX1JFUVVJUkVfRkFMU0UoIC4uLiApIHN0YXRpY19hc3NlcnQoICEoX19WQV9BUkdTX18pLCAiISgiICNfX1ZBX0FSR1NfXyAiKSIgKTsgQ0FUQ0hfU1VDQ0VFRCggI19fVkFfQVJHU19fICkKKyNlbHNlCisjZGVmaW5lIENBVENIX1NUQVRJQ19SRVFVSVJFKCAuLi4gKSAgICAgICBDQVRDSF9SRVFVSVJFKCBfX1ZBX0FSR1NfXyApCisjZGVmaW5lIENBVENIX1NUQVRJQ19SRVFVSVJFX0ZBTFNFKCAuLi4gKSBDQVRDSF9SRVFVSVJFX0ZBTFNFKCBfX1ZBX0FSR1NfXyApCisjZW5kaWYKKwogLy8gIkJERC1zdHlsZSIgY29udmVuaWVuY2Ugd3JhcHBlcnMKICNkZWZpbmUgQ0FUQ0hfU0NFTkFSSU8oIC4uLiApIENBVENIX1RFU1RfQ0FTRSggIlNjZW5hcmlvOiAiIF9fVkFfQVJHU19fICkKICNkZWZpbmUgQ0FUQ0hfU0NFTkFSSU9fTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgIlNjZW5hcmlvOiAiIF9fVkFfQVJHU19fICkKLSNkZWZpbmUgQ0FUQ0hfR0lWRU4oIGRlc2MgKSAgICBDQVRDSF9TRUNUSU9OKCBzdGQ6OnN0cmluZyggIkdpdmVuOiAiKSArIGRlc2MgKQotI2RlZmluZSBDQVRDSF9XSEVOKCBkZXNjICkgICAgIENBVENIX1NFQ1RJT04oIHN0ZDo6c3RyaW5nKCAiIFdoZW46ICIpICsgZGVzYyApCi0jZGVmaW5lIENBVENIX0FORF9XSEVOKCBkZXNjICkgQ0FUQ0hfU0VDVElPTiggc3RkOjpzdHJpbmcoICIgIEFuZDogIikgKyBkZXNjICkKLSNkZWZpbmUgQ0FUQ0hfVEhFTiggZGVzYyApICAgICBDQVRDSF9TRUNUSU9OKCBzdGQ6OnN0cmluZyggIiBUaGVuOiAiKSArIGRlc2MgKQotI2RlZmluZSBDQVRDSF9BTkRfVEhFTiggZGVzYyApIENBVENIX1NFQ1RJT04oIHN0ZDo6c3RyaW5nKCAiICBBbmQ6ICIpICsgZGVzYyApCisjZGVmaW5lIENBVENIX0dJVkVOKCBkZXNjICkgICAgIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggIiAgICBHaXZlbjogIiA8PCBkZXNjICkKKyNkZWZpbmUgQ0FUQ0hfQU5EX0dJVkVOKCBkZXNjICkgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAiQW5kIGdpdmVuOiAiIDw8IGRlc2MgKQorI2RlZmluZSBDQVRDSF9XSEVOKCBkZXNjICkgICAgICBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICIgICAgIFdoZW46ICIgPDwgZGVzYyApCisjZGVmaW5lIENBVENIX0FORF9XSEVOKCBkZXNjICkgIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggIiBBbmQgd2hlbjogIiA8PCBkZXNjICkKKyNkZWZpbmUgQ0FUQ0hfVEhFTiggZGVzYyApICAgICAgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAiICAgICBUaGVuOiAiIDw8IGRlc2MgKQorI2RlZmluZSBDQVRDSF9BTkRfVEhFTiggZGVzYyApICBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICIgICAgICBBbmQ6ICIgPDwgZGVzYyApCiAKIC8vIElmIENBVENIX0NPTkZJR19QUkVGSVhfQUxMIGlzIG5vdCBkZWZpbmVkIHRoZW4gdGhlIENBVENIXyBwcmVmaXggaXMgbm90IHJlcXVpcmVkCiAjZWxzZQpAQCAtMTI1NzMsMTkgKzE0NzAwLDQxIEBACiAjZW5kaWYgLy8gQ0FUQ0hfQ09ORklHX0RJU0FCTEVfTUFUQ0hFUlMKIAogI2RlZmluZSBJTkZPKCBtc2cgKSBJTlRFUk5BTF9DQVRDSF9JTkZPKCAiSU5GTyIsIG1zZyApCisjZGVmaW5lIFVOU0NPUEVEX0lORk8oIG1zZyApIElOVEVSTkFMX0NBVENIX1VOU0NPUEVEX0lORk8oICJVTlNDT1BFRF9JTkZPIiwgbXNnICkKICNkZWZpbmUgV0FSTiggbXNnICkgSU5URVJOQUxfQ0FUQ0hfTVNHKCAiV0FSTiIsIENhdGNoOjpSZXN1bHRXYXM6Oldhcm5pbmcsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Q29udGludWVPbkZhaWx1cmUsIG1zZyApCi0jZGVmaW5lIENBUFRVUkUoIG1zZyApIElOVEVSTkFMX0NBVENIX0lORk8oICJDQVBUVVJFIiwgI21zZyAiIDo9ICIgPDwgOjpDYXRjaDo6RGV0YWlsOjpzdHJpbmdpZnkobXNnKSApCisjZGVmaW5lIENBUFRVUkUoIC4uLiApIElOVEVSTkFMX0NBVENIX0NBUFRVUkUoIElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKGNhcHR1cmVyKSwgIkNBUFRVUkUiLF9fVkFfQVJHU19fICkKIAogI2RlZmluZSBURVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFU1RDQVNFKCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIFRFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIE1FVEhPRF9BU19URVNUX0NBU0UoIG1ldGhvZCwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfTUVUSE9EX0FTX1RFU1RfQ0FTRSggbWV0aG9kLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIFJFR0lTVEVSX1RFU1RfQ0FTRSggRnVuY3Rpb24sIC4uLiApIElOVEVSTkFMX0NBVENIX1JFR0lTVEVSX1RFU1RDQVNFKCBGdW5jdGlvbiwgX19WQV9BUkdTX18gKQogI2RlZmluZSBTRUNUSU9OKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9TRUNUSU9OKCBfX1ZBX0FSR1NfXyApCisjZGVmaW5lIERZTkFNSUNfU0VDVElPTiggLi4uICkgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIEZBSUwoIC4uLiApIElOVEVSTkFMX0NBVENIX01TRyggIkZBSUwiLCBDYXRjaDo6UmVzdWx0V2FzOjpFeHBsaWNpdEZhaWx1cmUsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Tm9ybWFsLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIEZBSUxfQ0hFQ0soIC4uLiApIElOVEVSTkFMX0NBVENIX01TRyggIkZBSUxfQ0hFQ0siLCBDYXRjaDo6UmVzdWx0V2FzOjpFeHBsaWNpdEZhaWx1cmUsIENhdGNoOjpSZXN1bHREaXNwb3NpdGlvbjo6Q29udGludWVPbkZhaWx1cmUsIF9fVkFfQVJHU19fICkKICNkZWZpbmUgU1VDQ0VFRCggLi4uICkgSU5URVJOQUxfQ0FUQ0hfTVNHKCAiU1VDQ0VFRCIsIENhdGNoOjpSZXN1bHRXYXM6Ok9rLCBDYXRjaDo6UmVzdWx0RGlzcG9zaXRpb246OkNvbnRpbnVlT25GYWlsdXJlLCBfX1ZBX0FSR1NfXyApCiAjZGVmaW5lIEFOT05fVEVTVF9DQVNFKCkgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0UoKQogCisjaWZuZGVmIENBVENIX0NPTkZJR19UUkFESVRJT05BTF9NU1ZDX1BSRVBST0NFU1NPUgorI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggX19WQV9BUkdTX18gKQorI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQorI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCBfX1ZBX0FSR1NfXyApCisjZWxzZQorI2RlZmluZSBURU1QTEFURV9URVNUX0NBU0UoIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApICkKKyNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKSApCisjZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApICkKKyNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX0VYUEFORF9WQVJHUyggSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkgKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChDQVRDSF9DT05GSUdfUlVOVElNRV9TVEFUSUNfUkVRVUlSRSkKKyNkZWZpbmUgU1RBVElDX1JFUVVJUkUoIC4uLiApICAgICAgIHN0YXRpY19hc3NlcnQoICAgX19WQV9BUkdTX18sICAjX19WQV9BUkdTX18gKTsgU1VDQ0VFRCggI19fVkFfQVJHU19fICkKKyNkZWZpbmUgU1RBVElDX1JFUVVJUkVfRkFMU0UoIC4uLiApIHN0YXRpY19hc3NlcnQoICEoX19WQV9BUkdTX18pLCAiISgiICNfX1ZBX0FSR1NfXyAiKSIgKTsgU1VDQ0VFRCggIiEoIiAjX19WQV9BUkdTX18gIikiICkKKyNlbHNlCisjZGVmaW5lIFNUQVRJQ19SRVFVSVJFKCAuLi4gKSAgICAgICBSRVFVSVJFKCBfX1ZBX0FSR1NfXyApCisjZGVmaW5lIFNUQVRJQ19SRVFVSVJFX0ZBTFNFKCAuLi4gKSBSRVFVSVJFX0ZBTFNFKCBfX1ZBX0FSR1NfXyApCisjZW5kaWYKKwogI2VuZGlmCiAKICNkZWZpbmUgQ0FUQ0hfVFJBTlNMQVRFX0VYQ0VQVElPTiggc2lnbmF0dXJlICkgSU5URVJOQUxfQ0FUQ0hfVFJBTlNMQVRFX0VYQ0VQVElPTiggc2lnbmF0dXJlICkKQEAgLTEyNTk0LDE1ICsxNDc0MywxNyBAQAogI2RlZmluZSBTQ0VOQVJJTyggLi4uICkgVEVTVF9DQVNFKCAiU2NlbmFyaW86ICIgX19WQV9BUkdTX18gKQogI2RlZmluZSBTQ0VOQVJJT19NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAiU2NlbmFyaW86ICIgX19WQV9BUkdTX18gKQogCi0jZGVmaW5lIEdJVkVOKCBkZXNjICkgICAgU0VDVElPTiggc3RkOjpzdHJpbmcoIiAgIEdpdmVuOiAiKSArIGRlc2MgKQotI2RlZmluZSBXSEVOKCBkZXNjICkgICAgIFNFQ1RJT04oIHN0ZDo6c3RyaW5nKCIgICAgV2hlbjogIikgKyBkZXNjICkKLSNkZWZpbmUgQU5EX1dIRU4oIGRlc2MgKSBTRUNUSU9OKCBzdGQ6OnN0cmluZygiQW5kIHdoZW46ICIpICsgZGVzYyApCi0jZGVmaW5lIFRIRU4oIGRlc2MgKSAgICAgU0VDVElPTiggc3RkOjpzdHJpbmcoIiAgICBUaGVuOiAiKSArIGRlc2MgKQotI2RlZmluZSBBTkRfVEhFTiggZGVzYyApIFNFQ1RJT04oIHN0ZDo6c3RyaW5nKCIgICAgIEFuZDogIikgKyBkZXNjICkKKyNkZWZpbmUgR0lWRU4oIGRlc2MgKSAgICAgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAiICAgIEdpdmVuOiAiIDw8IGRlc2MgKQorI2RlZmluZSBBTkRfR0lWRU4oIGRlc2MgKSBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICJBbmQgZ2l2ZW46ICIgPDwgZGVzYyApCisjZGVmaW5lIFdIRU4oIGRlc2MgKSAgICAgIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggIiAgICAgV2hlbjogIiA8PCBkZXNjICkKKyNkZWZpbmUgQU5EX1dIRU4oIGRlc2MgKSAgSU5URVJOQUxfQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAiIEFuZCB3aGVuOiAiIDw8IGRlc2MgKQorI2RlZmluZSBUSEVOKCBkZXNjICkgICAgICBJTlRFUk5BTF9DQVRDSF9EWU5BTUlDX1NFQ1RJT04oICIgICAgIFRoZW46ICIgPDwgZGVzYyApCisjZGVmaW5lIEFORF9USEVOKCBkZXNjICkgIElOVEVSTkFMX0NBVENIX0RZTkFNSUNfU0VDVElPTiggIiAgICAgIEFuZDogIiA8PCBkZXNjICkKIAogdXNpbmcgQ2F0Y2g6OkRldGFpbDo6QXBwcm94OwogCi0jZWxzZQorI2Vsc2UgLy8gQ0FUQ0hfQ09ORklHX0RJU0FCTEUKKwogLy8vLy8vCiAvLyBJZiB0aGlzIGNvbmZpZyBpZGVudGlmaWVyIGlzIGRlZmluZWQgdGhlbiBhbGwgQ0FUQ0ggbWFjcm9zIGFyZSBwcmVmaXhlZCB3aXRoIENBVENIXwogI2lmZGVmIENBVENIX0NPTkZJR19QUkVGSVhfQUxMCkBAIC0xMjY0NywyMSArMTQ3OTgsMzggQEAKICNkZWZpbmUgQ0FUQ0hfTUVUSE9EX0FTX1RFU1RfQ0FTRSggbWV0aG9kLCAuLi4gKQogI2RlZmluZSBDQVRDSF9SRUdJU1RFUl9URVNUX0NBU0UoIEZ1bmN0aW9uLCAuLi4gKSAodm9pZCkoMCkKICNkZWZpbmUgQ0FUQ0hfU0VDVElPTiggLi4uICkKKyNkZWZpbmUgQ0FUQ0hfRFlOQU1JQ19TRUNUSU9OKCAuLi4gKQogI2RlZmluZSBDQVRDSF9GQUlMKCAuLi4gKSAodm9pZCkoMCkKICNkZWZpbmUgQ0FUQ0hfRkFJTF9DSEVDSyggLi4uICkgKHZvaWQpKDApCiAjZGVmaW5lIENBVENIX1NVQ0NFRUQoIC4uLiApICh2b2lkKSgwKQogCiAjZGVmaW5lIENBVENIX0FOT05fVEVTVF9DQVNFKCkgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0VfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICkpCiAKKyNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCisjZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSApCisjZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9OT19SRUdJU1RSQVRJT04oSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIGNsYXNzTmFtZSApCisjZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCAuLi4gKSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQorI2Vsc2UKKyNkZWZpbmUgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9OT19SRUdJU1RSQVRJT04oSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICkgKSApCisjZGVmaW5lIENBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgY2xhc3NOYW1lICkgKQorI2RlZmluZSBDQVRDSF9URU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggLi4uICkgQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApCisjZGVmaW5lIENBVENIX1RFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBDQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKKyNlbmRpZgorCiAvLyAiQkRELXN0eWxlIiBjb252ZW5pZW5jZSB3cmFwcGVycwogI2RlZmluZSBDQVRDSF9TQ0VOQVJJTyggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0VfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICkpCiAjZGVmaW5lIENBVENIX1NDRU5BUklPX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9URVNUQ0FTRV9NRVRIT0RfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICksIGNsYXNzTmFtZSApCiAjZGVmaW5lIENBVENIX0dJVkVOKCBkZXNjICkKKyNkZWZpbmUgQ0FUQ0hfQU5EX0dJVkVOKCBkZXNjICkKICNkZWZpbmUgQ0FUQ0hfV0hFTiggZGVzYyApCiAjZGVmaW5lIENBVENIX0FORF9XSEVOKCBkZXNjICkKICNkZWZpbmUgQ0FUQ0hfVEhFTiggZGVzYyApCiAjZGVmaW5lIENBVENIX0FORF9USEVOKCBkZXNjICkKIAorI2RlZmluZSBDQVRDSF9TVEFUSUNfUkVRVUlSRSggLi4uICkgICAgICAgKHZvaWQpKDApCisjZGVmaW5lIENBVENIX1NUQVRJQ19SRVFVSVJFX0ZBTFNFKCAuLi4gKSAodm9pZCkoMCkKKwogLy8gSWYgQ0FUQ0hfQ09ORklHX1BSRUZJWF9BTEwgaXMgbm90IGRlZmluZWQgdGhlbiB0aGUgQ0FUQ0hfIHByZWZpeCBpcyBub3QgcmVxdWlyZWQKICNlbHNlCiAKQEAgLTEyNzA1LDExICsxNDg3MywyNyBAQAogI2RlZmluZSBNRVRIT0RfQVNfVEVTVF9DQVNFKCBtZXRob2QsIC4uLiApCiAjZGVmaW5lIFJFR0lTVEVSX1RFU1RfQ0FTRSggRnVuY3Rpb24sIC4uLiApICh2b2lkKSgwKQogI2RlZmluZSBTRUNUSU9OKCAuLi4gKQorI2RlZmluZSBEWU5BTUlDX1NFQ1RJT04oIC4uLiApCiAjZGVmaW5lIEZBSUwoIC4uLiApICh2b2lkKSgwKQogI2RlZmluZSBGQUlMX0NIRUNLKCAuLi4gKSAodm9pZCkoMCkKICNkZWZpbmUgU1VDQ0VFRCggLi4uICkgKHZvaWQpKDApCiAjZGVmaW5lIEFOT05fVEVTVF9DQVNFKCkgSU5URVJOQUxfQ0FUQ0hfVEVTVENBU0VfTk9fUkVHSVNUUkFUSU9OKElOVEVSTkFMX0NBVENIX1VOSVFVRV9OQU1FKCBfX19fQ19BX1RfQ19IX19fX1RfRV9TX1RfX19fICkpCiAKKyNpZm5kZWYgQ0FUQ0hfQ09ORklHX1RSQURJVElPTkFMX01TVkNfUFJFUFJPQ0VTU09SCisjZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRSggLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSApCisjZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfVEVNUExBVEVfVEVTVF9DQVNFX01FVEhPRF9OT19SRUdJU1RSQVRJT04oSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICksIGNsYXNzTmFtZSApCisjZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFKCAuLi4gKSBURU1QTEFURV9URVNUX0NBU0UoIF9fVkFfQVJHU19fICkKKyNkZWZpbmUgVEVNUExBVEVfUFJPRFVDVF9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgX19WQV9BUkdTX18gKQorI2Vsc2UKKyNkZWZpbmUgVEVNUExBVEVfVEVTVF9DQVNFKCAuLi4gKSBJTlRFUk5BTF9DQVRDSF9FWFBBTkRfVkFSR1MoIElOVEVSTkFMX0NBVENIX1RFTVBMQVRFX1RFU1RfQ0FTRV9OT19SRUdJU1RSQVRJT04oSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX01fUF9MX0FfVF9FX19fX1RfRV9TX1RfX19fICkgKSApCisjZGVmaW5lIFRFTVBMQVRFX1RFU1RfQ0FTRV9NRVRIT0QoIGNsYXNzTmFtZSwgLi4uICkgSU5URVJOQUxfQ0FUQ0hfRVhQQU5EX1ZBUkdTKCBJTlRFUk5BTF9DQVRDSF9URU1QTEFURV9URVNUX0NBU0VfTUVUSE9EX05PX1JFR0lTVFJBVElPTihJTlRFUk5BTF9DQVRDSF9VTklRVUVfTkFNRSggX19fX0NfQV9UX0NfSF9fX19UX0VfTV9QX0xfQV9UX0VfX19fVF9FX1NfVF9fX18gKSwgY2xhc3NOYW1lICkgKQorI2RlZmluZSBURU1QTEFURV9QUk9EVUNUX1RFU1RfQ0FTRSggLi4uICkgVEVNUExBVEVfVEVTVF9DQVNFKCBfX1ZBX0FSR1NfXyApCisjZGVmaW5lIFRFTVBMQVRFX1BST0RVQ1RfVEVTVF9DQVNFX01FVEhPRCggY2xhc3NOYW1lLCAuLi4gKSBURU1QTEFURV9URVNUX0NBU0VfTUVUSE9EKCBjbGFzc05hbWUsIF9fVkFfQVJHU19fICkKKyNlbmRpZgorCisjZGVmaW5lIFNUQVRJQ19SRVFVSVJFKCAuLi4gKSAgICAgICAodm9pZCkoMCkKKyNkZWZpbmUgU1RBVElDX1JFUVVJUkVfRkFMU0UoIC4uLiApICh2b2lkKSgwKQorCiAjZW5kaWYKIAogI2RlZmluZSBDQVRDSF9UUkFOU0xBVEVfRVhDRVBUSU9OKCBzaWduYXR1cmUgKSBJTlRFUk5BTF9DQVRDSF9UUkFOU0xBVEVfRVhDRVBUSU9OX05PX1JFRyggSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIGNhdGNoX2ludGVybmFsX0V4Y2VwdGlvblRyYW5zbGF0b3IgKSwgc2lnbmF0dXJlICkKQEAgLTEyNzE5LDYgKzE0OTAzLDcgQEAKICNkZWZpbmUgU0NFTkFSSU9fTUVUSE9EKCBjbGFzc05hbWUsIC4uLiApIElOVEVSTkFMX0NBVENIX1RFU1RDQVNFX01FVEhPRF9OT19SRUdJU1RSQVRJT04oSU5URVJOQUxfQ0FUQ0hfVU5JUVVFX05BTUUoIF9fX19DX0FfVF9DX0hfX19fVF9FX1NfVF9fX18gKSwgY2xhc3NOYW1lICkKIAogI2RlZmluZSBHSVZFTiggZGVzYyApCisjZGVmaW5lIEFORF9HSVZFTiggZGVzYyApCiAjZGVmaW5lIFdIRU4oIGRlc2MgKQogI2RlZmluZSBBTkRfV0hFTiggZGVzYyApCiAjZGVmaW5lIFRIRU4oIGRlc2MgKQpkaWZmIC0tZ2l0IGEvc2luZ2xlX2luY2x1ZGUvY2F0Y2hfcmVwb3J0ZXJfYXV0b21ha2UuaHBwIGIvc2luZ2xlX2luY2x1ZGUvY2F0Y2gyL2NhdGNoX3JlcG9ydGVyX2F1dG9tYWtlLmhwcApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gc2luZ2xlX2luY2x1ZGUvY2F0Y2hfcmVwb3J0ZXJfYXV0b21ha2UuaHBwCnJlbmFtZSB0byBzaW5nbGVfaW5jbHVkZS9jYXRjaDIvY2F0Y2hfcmVwb3J0ZXJfYXV0b21ha2UuaHBwCmRpZmYgLS1naXQgYS9zaW5nbGVfaW5jbHVkZS9jYXRjaF9yZXBvcnRlcl90YXAuaHBwIGIvc2luZ2xlX2luY2x1ZGUvY2F0Y2gyL2NhdGNoX3JlcG9ydGVyX3RhcC5ocHAKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gc2luZ2xlX2luY2x1ZGUvY2F0Y2hfcmVwb3J0ZXJfdGFwLmhwcApyZW5hbWUgdG8gc2luZ2xlX2luY2x1ZGUvY2F0Y2gyL2NhdGNoX3JlcG9ydGVyX3RhcC5ocHAKaW5kZXggZWRiNzViNS4uMWJmZTRmNSAxMDA2NDQKLS0tIGEvc2luZ2xlX2luY2x1ZGUvY2F0Y2hfcmVwb3J0ZXJfdGFwLmhwcAorKysgYi9zaW5nbGVfaW5jbHVkZS9jYXRjaDIvY2F0Y2hfcmVwb3J0ZXJfdGFwLmhwcApAQCAtMjYsMTMgKzI2LDExIEBACiAgICAgICAgIH5UQVBSZXBvcnRlcigpIG92ZXJyaWRlOwogCiAgICAgICAgIHN0YXRpYyBzdGQ6OnN0cmluZyBnZXREZXNjcmlwdGlvbigpIHsKLSAgICAgICAgICAgIHJldHVybiAiUmVwb3J0cyB0ZXN0IHJlc3VsdHMgaW4gVEFQIGZvcm1hdCwgc3VpdGFibGUgZm9yIHRlc3QgaGFybmVzZXMiOworICAgICAgICAgICAgcmV0dXJuICJSZXBvcnRzIHRlc3QgcmVzdWx0cyBpbiBUQVAgZm9ybWF0LCBzdWl0YWJsZSBmb3IgdGVzdCBoYXJuZXNzZXMiOwogICAgICAgICB9CiAKICAgICAgICAgUmVwb3J0ZXJQcmVmZXJlbmNlcyBnZXRQcmVmZXJlbmNlcygpIGNvbnN0IG92ZXJyaWRlIHsKLSAgICAgICAgICAgIFJlcG9ydGVyUHJlZmVyZW5jZXMgcHJlZnM7Ci0gICAgICAgICAgICBwcmVmcy5zaG91bGRSZWRpcmVjdFN0ZE91dCA9IGZhbHNlOwotICAgICAgICAgICAgcmV0dXJuIHByZWZzOworICAgICAgICAgICAgcmV0dXJuIG1fcmVwb3J0ZXJQcmVmczsKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgbm9NYXRjaGluZ1Rlc3RDYXNlcyggc3RkOjpzdHJpbmcgY29uc3QmIHNwZWMgKSBvdmVycmlkZSB7CkBAIC00NCw5ICs0Miw5IEBACiAgICAgICAgIGJvb2wgYXNzZXJ0aW9uRW5kZWQoIEFzc2VydGlvblN0YXRzIGNvbnN0JiBfYXNzZXJ0aW9uU3RhdHMgKSBvdmVycmlkZSB7CiAgICAgICAgICAgICArK2NvdW50ZXI7CiAKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiIyAiIDw8IGN1cnJlbnRUZXN0Q2FzZUluZm8tPm5hbWUgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgQXNzZXJ0aW9uUHJpbnRlciBwcmludGVyKCBzdHJlYW0sIF9hc3NlcnRpb25TdGF0cywgY291bnRlciApOwogICAgICAgICAgICAgcHJpbnRlci5wcmludCgpOwotICAgICAgICAgICAgc3RyZWFtIDw8ICIgIyAiIDw8IGN1cnJlbnRUZXN0Q2FzZUluZm8tPm5hbWUgOwogCiAgICAgICAgICAgICBzdHJlYW0gPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zaW5nbGVfaW5jbHVkZS9jYXRjaF9yZXBvcnRlcl90ZWFtY2l0eS5ocHAgYi9zaW5nbGVfaW5jbHVkZS9jYXRjaDIvY2F0Y2hfcmVwb3J0ZXJfdGVhbWNpdHkuaHBwCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIHNpbmdsZV9pbmNsdWRlL2NhdGNoX3JlcG9ydGVyX3RlYW1jaXR5LmhwcApyZW5hbWUgdG8gc2luZ2xlX2luY2x1ZGUvY2F0Y2gyL2NhdGNoX3JlcG9ydGVyX3RlYW1jaXR5LmhwcAppbmRleCBkYmQwZGI1Li5lY2EyODg1IDEwMDY0NAotLS0gYS9zaW5nbGVfaW5jbHVkZS9jYXRjaF9yZXBvcnRlcl90ZWFtY2l0eS5ocHAKKysrIGIvc2luZ2xlX2luY2x1ZGUvY2F0Y2gyL2NhdGNoX3JlcG9ydGVyX3RlYW1jaXR5LmhwcApAQCAtOTcsMTIgKzk3LDEyIEBACiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpPazoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OkluZm86CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpXYXJuaW5nOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RkOjpkb21haW5fZXJyb3IoICJJbnRlcm5hbCBlcnJvciBpbiBUZWFtQ2l0eSByZXBvcnRlciIgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENBVENIX0VSUk9SKCAiSW50ZXJuYWwgZXJyb3IgaW4gVGVhbUNpdHkgcmVwb3J0ZXIiICk7CiAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIGNhc2VzIGFyZSBoZXJlIHRvIHByZXZlbnQgY29tcGlsZXIgd2FybmluZ3MKICAgICAgICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRXYXM6OlVua25vd246CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0V2FzOjpGYWlsdXJlQml0OgogICAgICAgICAgICAgICAgICAgICBjYXNlIFJlc3VsdFdhczo6RXhjZXB0aW9uOgotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgc3RkOjpkb21haW5fZXJyb3IoICJOb3QgaW1wbGVtZW50ZWQiICk7CisgICAgICAgICAgICAgICAgICAgICAgICBDQVRDSF9FUlJPUiggIk5vdCBpbXBsZW1lbnRlZCIgKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYoIGFzc2VydGlvblN0YXRzLmluZm9NZXNzYWdlcy5zaXplKCkgPT0gMSApCiAgICAgICAgICAgICAgICAgICAgIG1zZyA8PCAiIHdpdGggbWVzc2FnZToiOwpkaWZmIC0tZ2l0IGEvdGVzdF9wYWNrYWdlL0NNYWtlTGlzdHMudHh0IGIvdGVzdF9wYWNrYWdlL0NNYWtlTGlzdHMudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzlmYWNiLi4wMDAwMDAwCi0tLSBhL3Rlc3RfcGFja2FnZS9DTWFrZUxpc3RzLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotY21ha2VfbWluaW11bV9yZXF1aXJlZChWRVJTSU9OIDMuMCkKLXByb2plY3QoQ2F0Y2hUZXN0IENYWCkKLQotaW5jbHVkZSgke0NNQUtFX0JJTkFSWV9ESVJ9L2NvbmFuYnVpbGRpbmZvLmNtYWtlKQotY29uYW5fYmFzaWNfc2V0dXAoKQotCi1hZGRfZXhlY3V0YWJsZSgke0NNQUtFX1BST0pFQ1RfTkFNRX0gTWFpblRlc3QuY3BwKQpkaWZmIC0tZ2l0IGEvdGVzdF9wYWNrYWdlL01haW5UZXN0LmNwcCBiL3Rlc3RfcGFja2FnZS9NYWluVGVzdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI4ZWQ3NDQuLjAwMDAwMDAKLS0tIGEvdGVzdF9wYWNrYWdlL01haW5UZXN0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qCi0gKiAgQ3JlYXRlZCBieSBQaGlsIG9uIDIyLzEwLzIwMTAuCi0gKiAgQ29weXJpZ2h0IDIwMTAgVHdvIEJsdWUgQ3ViZXMgTHRkCi0gKgotICogIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKLSAqICBmaWxlIExJQ0VOU0VfMV8wLnR4dCBvciBjb3B5IGF0IGh0dHA6Ly93d3cuYm9vc3Qub3JnL0xJQ0VOU0VfMV8wLnR4dCkKLSAqLwotI2RlZmluZSBDQVRDSF9DT05GSUdfTUFJTgotI2luY2x1ZGUgImNhdGNoLmhwcCIKLQotdW5zaWduZWQgaW50IEZhY3RvcmlhbCggdW5zaWduZWQgaW50IG51bWJlciApIHsKLSAgcmV0dXJuIG51bWJlciA+IDEgPyBGYWN0b3JpYWwobnVtYmVyLTEpKm51bWJlciA6IDE7Ci19Ci0KLVRFU1RfQ0FTRSggIkZhY3RvcmlhbHMgYXJlIGNvbXB1dGVkIiwgIltmYWN0b3JpYWxdIiApIHsKLSAgICBSRVFVSVJFKCBGYWN0b3JpYWwoMCkgPT0gMSApOwotICAgIFJFUVVJUkUoIEZhY3RvcmlhbCgxKSA9PSAxICk7Ci0gICAgUkVRVUlSRSggRmFjdG9yaWFsKDIpID09IDIgKTsKLSAgICBSRVFVSVJFKCBGYWN0b3JpYWwoMykgPT0gNiApOwotICAgIFJFUVVJUkUoIEZhY3RvcmlhbCgxMCkgPT0gMzYyODgwMCApOwotfQpkaWZmIC0tZ2l0IGEvdGVzdF9wYWNrYWdlL2NvbmFuZmlsZS5weSBiL3Rlc3RfcGFja2FnZS9jb25hbmZpbGUucHkKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE3NGJlYmEuLjAwMDAwMDAKLS0tIGEvdGVzdF9wYWNrYWdlL2NvbmFuZmlsZS5weQorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLSMhL3Vzci9iaW4vZW52IHB5dGhvbgotZnJvbSBvcyBpbXBvcnQgZ2V0ZW52Ci1mcm9tIG9zIGltcG9ydCBwYXRoCi1mcm9tIGNvbmFucyBpbXBvcnQgQ29uYW5GaWxlCi1mcm9tIGNvbmFucyBpbXBvcnQgQ01ha2UKLQotCi1jbGFzcyBDYXRjaENvbmFuVGVzdChDb25hbkZpbGUpOgotICAgIGdlbmVyYXRvcnMgPSAiY21ha2UiCi0gICAgc2V0dGluZ3MgPSAib3MiLCAiY29tcGlsZXIiLCAiYXJjaCIsICJidWlsZF90eXBlIgotICAgIHVzZXJuYW1lID0gZ2V0ZW52KCJDT05BTl9VU0VSTkFNRSIsICJwaGlsc3F1YXJlZCIpCi0gICAgY2hhbm5lbCA9IGdldGVudigiQ09OQU5fQ0hBTk5FTCIsICJ0ZXN0aW5nIikKLSAgICByZXF1aXJlcyA9ICJDYXRjaC8yLjEuMUAlcy8lcyIgJSAodXNlcm5hbWUsIGNoYW5uZWwpCi0KLSAgICBkZWYgYnVpbGQoc2VsZik6Ci0gICAgICAgIGNtYWtlID0gQ01ha2Uoc2VsZikKLSAgICAgICAgY21ha2UuY29uZmlndXJlKGJ1aWxkX2Rpcj0iLi8iKQotICAgICAgICBjbWFrZS5idWlsZCgpCi0KLSAgICBkZWYgdGVzdChzZWxmKToKLSAgICAgICAgc2VsZi5ydW4ocGF0aC5qb2luKCJiaW4iLCAiQ2F0Y2hUZXN0IikpCmRpZmYgLS1naXQgYS90aGlyZF9wYXJ0eS9jbGFyYS5ocHAgYi90aGlyZF9wYXJ0eS9jbGFyYS5ocHAKaW5kZXggMjEzNGE0Ni4uNmJlNWE5OCAxMDA2NDQKLS0tIGEvdGhpcmRfcGFydHkvY2xhcmEuaHBwCisrKyBiL3RoaXJkX3BhcnR5L2NsYXJhLmhwcApAQCAtNSw3ICs1LDcgQEAKIC8vCiAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BoaWxzcXVhcmVkL0NsYXJhIGZvciBtb3JlIGRldGFpbHMKIAotLy8gQ2xhcmEgdjEuMS4xCisvLyBDbGFyYSB2MS4xLjUKIAogI2lmbmRlZiBDTEFSQV9IUFBfSU5DTFVERUQKICNkZWZpbmUgQ0xBUkFfSFBQX0lOQ0xVREVECkBAIC0xOCwxNCArMTgsMjQgQEAKICNkZWZpbmUgQ0xBUkFfVEVYVEZMT1dfQ09ORklHX0NPTlNPTEVfV0lEVEggQ0xBUkFfQ09ORklHX0NPTlNPTEVfV0lEVEgKICNlbmRpZgogCisjaWZuZGVmIENMQVJBX0NPTkZJR19PUFRJT05BTF9UWVBFCisjaWZkZWYgX19oYXNfaW5jbHVkZQorI2lmIF9faGFzX2luY2x1ZGUoPG9wdGlvbmFsPikgJiYgX19jcGx1c3BsdXMgPj0gMjAxNzAzTAorI2luY2x1ZGUgPG9wdGlvbmFsPgorI2RlZmluZSBDTEFSQV9DT05GSUdfT1BUSU9OQUxfVFlQRSBzdGQ6Om9wdGlvbmFsCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKwogLy8gLS0tLS0tLS0tLS0gI2luY2x1ZGVkIGZyb20gY2xhcmFfdGV4dGZsb3cuaHBwIC0tLS0tLS0tLS0tCiAKIC8vIFRleHRGbG93Q3BwCiAvLwogLy8gQSBzaW5nbGUtaGVhZGVyIGxpYnJhcnkgZm9yIHdyYXBwaW5nIGFuZCBsYXlpbmcgb3V0IGJhc2ljIHRleHQsIGJ5IFBoaWwgTmFzaAogLy8KLS8vIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQlNEIDItQ2xhdXNlIGxpY2Vuc2UuCi0vLyBTZWUgdGhlIGFjY29tcGFueWluZyBMSUNFTlNFIGZpbGUsIG9yIHRoZSBvbmUgYXQgaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9CU0QtMi1DbGF1c2UKKy8vIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCb29zdCBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMC4gKFNlZSBhY2NvbXBhbnlpbmcKKy8vIGZpbGUgTElDRU5TRS50eHQgb3IgY29weSBhdCBodHRwOi8vd3d3LmJvb3N0Lm9yZy9MSUNFTlNFXzFfMC50eHQpCiAvLwogLy8gVGhpcyBwcm9qZWN0IGlzIGhvc3RlZCBhdCBodHRwczovL2dpdGh1Yi5jb20vcGhpbHNxdWFyZWQvdGV4dGZsb3djcHAKIApAQCAtMTMyLDYgKzE0MiwxMiBAQAogICAgICAgICAgICAgfQogCiAgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIHVzaW5nIGRpZmZlcmVuY2VfdHlwZSA9IHN0ZDo6cHRyZGlmZl90OworICAgICAgICAgICAgdXNpbmcgdmFsdWVfdHlwZSA9IHN0ZDo6c3RyaW5nOworICAgICAgICAgICAgdXNpbmcgcG9pbnRlciA9IHZhbHVlX3R5cGUqOworICAgICAgICAgICAgdXNpbmcgcmVmZXJlbmNlID0gdmFsdWVfdHlwZSY7CisgICAgICAgICAgICB1c2luZyBpdGVyYXRvcl9jYXRlZ29yeSA9IHN0ZDo6Zm9yd2FyZF9pdGVyYXRvcl90YWc7CisKICAgICAgICAgICAgIGV4cGxpY2l0IGl0ZXJhdG9yKCBDb2x1bW4gY29uc3QmIGNvbHVtbiApIDogbV9jb2x1bW4oIGNvbHVtbiApIHsKICAgICAgICAgICAgICAgICBhc3NlcnQoIG1fY29sdW1uLm1fd2lkdGggPiBtX2NvbHVtbi5tX2luZGVudCApOwogICAgICAgICAgICAgICAgIGFzc2VydCggbV9jb2x1bW4ubV9pbml0aWFsSW5kZW50ID09IHN0ZDo6c3RyaW5nOjpucG9zIHx8IG1fY29sdW1uLm1fd2lkdGggPiBtX2NvbHVtbi5tX2luaXRpYWxJbmRlbnQgKTsKQEAgLTE0MywxMCArMTU5LDcgQEAKICAgICAgICAgICAgIGF1dG8gb3BlcmF0b3IgKigpIGNvbnN0IC0+IHN0ZDo6c3RyaW5nIHsKICAgICAgICAgICAgICAgICBhc3NlcnQoIG1fc3RyaW5nSW5kZXggPCBtX2NvbHVtbi5tX3N0cmluZ3Muc2l6ZSgpICk7CiAgICAgICAgICAgICAgICAgYXNzZXJ0KCBtX3BvcyA8PSBtX2VuZCApOwotICAgICAgICAgICAgICAgIGlmKCBtX3BvcyArIG1fY29sdW1uLm1fd2lkdGggPCBtX2VuZCApCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRJbmRlbnRBbmRTdWZmaXgobGluZSgpLnN1YnN0cihtX3BvcywgbV9sZW4pKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBhZGRJbmRlbnRBbmRTdWZmaXgobGluZSgpLnN1YnN0cihtX3BvcywgbV9lbmQgLSBtX3BvcykpOworICAgICAgICAgICAgICAgIHJldHVybiBhZGRJbmRlbnRBbmRTdWZmaXgobGluZSgpLnN1YnN0cihtX3BvcywgbV9sZW4pKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYXV0byBvcGVyYXRvciArKygpIC0+IGl0ZXJhdG9yJiB7CkBAIC0yNTYsNiArMjY5LDEyIEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgcHVibGljOgorICAgICAgICAgICAgdXNpbmcgZGlmZmVyZW5jZV90eXBlID0gc3RkOjpwdHJkaWZmX3Q7CisgICAgICAgICAgICB1c2luZyB2YWx1ZV90eXBlID0gc3RkOjpzdHJpbmc7CisgICAgICAgICAgICB1c2luZyBwb2ludGVyID0gdmFsdWVfdHlwZSo7CisgICAgICAgICAgICB1c2luZyByZWZlcmVuY2UgPSB2YWx1ZV90eXBlJjsKKyAgICAgICAgICAgIHVzaW5nIGl0ZXJhdG9yX2NhdGVnb3J5ID0gc3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZzsKKwogICAgICAgICAgICAgZXhwbGljaXQgaXRlcmF0b3IoIENvbHVtbnMgY29uc3QmIGNvbHVtbnMgKQogICAgICAgICAgICAgOiAgIG1fY29sdW1ucyggY29sdW1ucy5tX2NvbHVtbnMgKSwKICAgICAgICAgICAgICAgICBtX2FjdGl2ZUl0ZXJhdG9ycyggbV9jb2x1bW5zLnNpemUoKSApCkBAIC0zNDUsNyArMzY0LDcgQEAKICAgICAgICAgY29scyArPSBvdGhlcjsKICAgICAgICAgcmV0dXJuIGNvbHM7CiAgICAgfQotfX0gLy8gbmFtZXNwYWNlIGNsYXJhOjpUZXh0RmxvdworfX0KIAogI2VuZGlmIC8vIENMQVJBX1RFWFRGTE9XX0hQUF9JTkNMVURFRAogCkBAIC0zODksMTEgKzQwOCw5IEBACiAgICAgICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBtX2FyZ3M7CiAKICAgICBwdWJsaWM6Ci0gICAgICAgIEFyZ3MoIGludCBhcmdjLCBjaGFyICphcmd2W10gKSB7Ci0gICAgICAgICAgICBtX2V4ZU5hbWUgPSBhcmd2WzBdOwotICAgICAgICAgICAgZm9yKCBpbnQgaSA9IDE7IGkgPCBhcmdjOyArK2kgKQotICAgICAgICAgICAgICAgIG1fYXJncy5wdXNoX2JhY2soIGFyZ3ZbaV0gKTsKLSAgICAgICAgfQorICAgICAgICBBcmdzKCBpbnQgYXJnYywgY2hhciBjb25zdCogY29uc3QqIGFyZ3YgKQorICAgICAgICAgICAgOiBtX2V4ZU5hbWUoYXJndlswXSksCisgICAgICAgICAgICAgIG1fYXJncyhhcmd2ICsgMSwgYXJndiArIGFyZ2MpIHt9CiAKICAgICAgICAgQXJncyggc3RkOjppbml0aWFsaXplcl9saXN0PHN0ZDo6c3RyaW5nPiBhcmdzICkKICAgICAgICAgOiAgIG1fZXhlTmFtZSggKmFyZ3MuYmVnaW4oKSApLApAQCAtNTgwLDE1ICs1OTcsMTMgQEAKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdm9pZCBlbmZvcmNlT2soKSBjb25zdCBvdmVycmlkZSB7Ci0gICAgICAgICAgICAvLyAhVEJEOiBJZiBubyBleGNlcHRpb25zLCBzdGQ6OnRlcm1pbmF0ZSBoZXJlIG9yIHNvbWV0aGluZwotICAgICAgICAgICAgc3dpdGNoKCBtX3R5cGUgKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRCYXNlOjpMb2dpY0Vycm9yOgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdGQ6OmxvZ2ljX2Vycm9yKCBtX2Vycm9yTWVzc2FnZSApOwotICAgICAgICAgICAgICAgIGNhc2UgUmVzdWx0QmFzZTo6UnVudGltZUVycm9yOgotICAgICAgICAgICAgICAgICAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoIG1fZXJyb3JNZXNzYWdlICk7Ci0gICAgICAgICAgICAgICAgY2FzZSBSZXN1bHRCYXNlOjpPazoKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEVycm9ycyBzaG91bGRuJ3QgcmVhY2ggdGhpcyBwb2ludCwgYnV0IGlmIHRoZXkgZG8KKyAgICAgICAgICAgIC8vIHRoZSBhY3R1YWwgZXJyb3IgbWVzc2FnZSB3aWxsIGJlIGluIG1fZXJyb3JNZXNzYWdlCisgICAgICAgICAgICBhc3NlcnQoIG1fdHlwZSAhPSBSZXN1bHRCYXNlOjpMb2dpY0Vycm9yICk7CisgICAgICAgICAgICBhc3NlcnQoIG1fdHlwZSAhPSBSZXN1bHRCYXNlOjpSdW50aW1lRXJyb3IgKTsKKyAgICAgICAgICAgIGlmKCBtX3R5cGUgIT0gUmVzdWx0QmFzZTo6T2sgKQorICAgICAgICAgICAgICAgIHN0ZDo6YWJvcnQoKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0ZDo6c3RyaW5nIG1fZXJyb3JNZXNzYWdlOyAvLyBPbmx5IHBvcHVsYXRlZCBpZiByZXN1bHRUeXBlIGlzIGFuIGVycm9yCkBAIC02NTgsNiArNjczLDE2IEBACiAgICAgICAgICAgICByZXR1cm4gUGFyc2VyUmVzdWx0OjpydW50aW1lRXJyb3IoICJFeHBlY3RlZCBhIGJvb2xlYW4gdmFsdWUgYnV0IGRpZCBub3QgcmVjb2duaXNlOiAnIiArIHNvdXJjZSArICInIiApOwogICAgICAgICByZXR1cm4gUGFyc2VyUmVzdWx0OjpvayggUGFyc2VSZXN1bHRUeXBlOjpNYXRjaGVkICk7CiAgICAgfQorI2lmZGVmIENMQVJBX0NPTkZJR19PUFRJT05BTF9UWVBFCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgYXV0byBjb252ZXJ0SW50byggc3RkOjpzdHJpbmcgY29uc3QgJnNvdXJjZSwgQ0xBUkFfQ09ORklHX09QVElPTkFMX1RZUEU8VD4mIHRhcmdldCApIC0+IFBhcnNlclJlc3VsdCB7CisgICAgICAgIFQgdGVtcDsKKyAgICAgICAgYXV0byByZXN1bHQgPSBjb252ZXJ0SW50byggc291cmNlLCB0ZW1wICk7CisgICAgICAgIGlmKCByZXN1bHQgKQorICAgICAgICAgICAgdGFyZ2V0ID0gc3RkOjptb3ZlKHRlbXApOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNlbmRpZiAvLyBDTEFSQV9DT05GSUdfT1BUSU9OQUxfVFlQRQogCiAgICAgc3RydWN0IE5vbkNvcHlhYmxlIHsKICAgICAgICAgTm9uQ29weWFibGUoKSA9IGRlZmF1bHQ7CkBAIC02NzAsMTIgKzY5NSwxNCBAQAogICAgIHN0cnVjdCBCb3VuZFJlZiA6IE5vbkNvcHlhYmxlIHsKICAgICAgICAgdmlydHVhbCB+Qm91bmRSZWYoKSA9IGRlZmF1bHQ7CiAgICAgICAgIHZpcnR1YWwgYXV0byBpc0NvbnRhaW5lcigpIGNvbnN0IC0+IGJvb2wgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBhdXRvIGlzRmxhZygpIGNvbnN0IC0+IGJvb2wgeyByZXR1cm4gZmFsc2U7IH0KICAgICB9OwogICAgIHN0cnVjdCBCb3VuZFZhbHVlUmVmQmFzZSA6IEJvdW5kUmVmIHsKICAgICAgICAgdmlydHVhbCBhdXRvIHNldFZhbHVlKCBzdGQ6OnN0cmluZyBjb25zdCAmYXJnICkgLT4gUGFyc2VyUmVzdWx0ID0gMDsKICAgICB9OwogICAgIHN0cnVjdCBCb3VuZEZsYWdSZWZCYXNlIDogQm91bmRSZWYgewogICAgICAgICB2aXJ0dWFsIGF1dG8gc2V0RmxhZyggYm9vbCBmbGFnICkgLT4gUGFyc2VyUmVzdWx0ID0gMDsKKyAgICAgICAgdmlydHVhbCBhdXRvIGlzRmxhZygpIGNvbnN0IC0+IGJvb2wgeyByZXR1cm4gdHJ1ZTsgfQogICAgIH07CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgpAQCAtOTA3LDcgKzkzNCw3IEBACiAgICAgICAgICAgICBpZiggdG9rZW4udHlwZSAhPSBUb2tlblR5cGU6OkFyZ3VtZW50ICkKICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJuYWxQYXJzZVJlc3VsdDo6b2soIFBhcnNlU3RhdGUoIFBhcnNlUmVzdWx0VHlwZTo6Tm9NYXRjaCwgcmVtYWluaW5nVG9rZW5zICkgKTsKIAotICAgICAgICAgICAgYXNzZXJ0KCBkeW5hbWljX2Nhc3Q8ZGV0YWlsOjpCb3VuZFZhbHVlUmVmQmFzZSo+KCBtX3JlZi5nZXQoKSApICk7CisgICAgICAgICAgICBhc3NlcnQoICFtX3JlZi0+aXNGbGFnKCkgKTsKICAgICAgICAgICAgIGF1dG8gdmFsdWVSZWYgPSBzdGF0aWNfY2FzdDxkZXRhaWw6OkJvdW5kVmFsdWVSZWZCYXNlKj4oIG1fcmVmLmdldCgpICk7CiAKICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gdmFsdWVSZWYtPnNldFZhbHVlKCByZW1haW5pbmdUb2tlbnMtPnRva2VuICk7CkBAIC05ODMsMTQgKzEwMTAsMTQgQEAKICAgICAgICAgICAgIGlmKCByZW1haW5pbmdUb2tlbnMgJiYgcmVtYWluaW5nVG9rZW5zLT50eXBlID09IFRva2VuVHlwZTo6T3B0aW9uICkgewogICAgICAgICAgICAgICAgIGF1dG8gY29uc3QgJnRva2VuID0gKnJlbWFpbmluZ1Rva2VuczsKICAgICAgICAgICAgICAgICBpZiggaXNNYXRjaCh0b2tlbi50b2tlbiApICkgewotICAgICAgICAgICAgICAgICAgICBpZiggYXV0byBmbGFnUmVmID0gZHluYW1pY19jYXN0PGRldGFpbDo6Qm91bmRGbGFnUmVmQmFzZSo+KCBtX3JlZi5nZXQoKSApICkgeworICAgICAgICAgICAgICAgICAgICBpZiggbV9yZWYtPmlzRmxhZygpICkgeworICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBmbGFnUmVmID0gc3RhdGljX2Nhc3Q8ZGV0YWlsOjpCb3VuZEZsYWdSZWZCYXNlKj4oIG1fcmVmLmdldCgpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHJlc3VsdCA9IGZsYWdSZWYtPnNldEZsYWcoIHRydWUgKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhcmVzdWx0ICkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW50ZXJuYWxQYXJzZVJlc3VsdCggcmVzdWx0ICk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiggcmVzdWx0LnZhbHVlKCkgPT0gUGFyc2VSZXN1bHRUeXBlOjpTaG9ydENpcmN1aXRBbGwgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbnRlcm5hbFBhcnNlUmVzdWx0OjpvayggUGFyc2VTdGF0ZSggcmVzdWx0LnZhbHVlKCksIHJlbWFpbmluZ1Rva2VucyApICk7CiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoIGR5bmFtaWNfY2FzdDxkZXRhaWw6OkJvdW5kVmFsdWVSZWZCYXNlKj4oIG1fcmVmLmdldCgpICkgKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdmFsdWVSZWYgPSBzdGF0aWNfY2FzdDxkZXRhaWw6OkJvdW5kVmFsdWVSZWZCYXNlKj4oIG1fcmVmLmdldCgpICk7CiAgICAgICAgICAgICAgICAgICAgICAgICArK3JlbWFpbmluZ1Rva2VuczsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCAhcmVtYWluaW5nVG9rZW5zICkK