ZGlmZiAtLWdpdCBhL0xpYi90ZXN0L291dHB1dC90ZXN0X2xvbmdleHAgYi9MaWIvdGVzdC9vdXRwdXQvdGVzdF9sb25nZXhwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiYmRkNzBjLi4wMDAwMDAwCi0tLSBhL0xpYi90ZXN0L291dHB1dC90ZXN0X2xvbmdleHAKKysrIC9kZXYvbnVsbApAQCAtMSwyICswLDAgQEAKLXRlc3RfbG9uZ2V4cAotNjU1ODAKZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfbG9uZ2V4cC5weSBiL0xpYi90ZXN0L3Rlc3RfbG9uZ2V4cC5weQppbmRleCBjMmMyNjEyLi5kZDIyMmExIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2xvbmdleHAucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9sb25nZXhwLnB5CkBAIC0xLDUgKzEsMTQgQEAKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAotUkVQUyA9IDY1NTgwCitjbGFzcyBMb25nRXhwVGV4dCh1bml0dGVzdC5UZXN0Q2FzZSk6CisgICAgZGVmIHRlc3RfbG9uZ2V4cChzZWxmKToKKyAgICAgICAgUkVQUyA9IDY1NTgwCisgICAgICAgIGwgPSBldmFsKCJbIiArICIyLCIgKiBSRVBTICsgIl0iKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbihsKSwgUkVQUykKIAotbCA9IGV2YWwoIlsiICsgIjIsIiAqIFJFUFMgKyAiXSIpCi1wcmludCBsZW4obCkKK2RlZiB0ZXN0X21haW4oKToKKyAgICB0ZXN0X3N1cHBvcnQucnVuX3VuaXR0ZXN0KExvbmdFeHBUZXh0KQorCitpZiBfX25hbWVfXz09Il9fbWFpbl9fIjoKKyAgICB0ZXN0X21haW4oKQpkaWZmIC0tZ2l0IGEvTGliL3Rlc3QvdGVzdF9wZXAyNjMucHkgYi9MaWIvdGVzdC90ZXN0X3BlcDI2My5weQppbmRleCA3Y2M1NTI2Li40OGI4YzEzIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3BlcDI2My5weQorKysgYi9MaWIvdGVzdC90ZXN0X3BlcDI2My5weQpAQCAtMSwzICsxLDIyIEBACi0jISAtKi0gY29kaW5nOiBrb2k4LXIgLSotCi1hc3NlcnQgdSLwydTPziIuZW5jb2RlKCJ1dGYtOCIpID09ICdceGQwXHg5Zlx4ZDBceGI4XHhkMVx4ODJceGQwXHhiZVx4ZDBceGJkJwotYXNzZXJ0IHUiXPAiLmVuY29kZSgidXRmLTgiKSA9PSAnXFxceGQwXHg5ZicKKyMhIC0qLSBjb2Rpbmc6IGtvaTgtciAtKi0NCisNCitpbXBvcnQgdW5pdHRlc3QNCitmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydA0KKw0KK2NsYXNzIFBFUDI2M1Rlc3QodW5pdHRlc3QuVGVzdENhc2UpOg0KKw0KKyAgICBkZWYgdGVzdF9wZXAyNjMoc2VsZik6DQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKA0KKyAgICAgICAgICAgIHUi8MnUz84iLmVuY29kZSgidXRmLTgiKSwNCisgICAgICAgICAgICAnXHhkMFx4OWZceGQwXHhiOFx4ZDFceDgyXHhkMFx4YmVceGQwXHhiZCcNCisgICAgICAgICkNCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoDQorICAgICAgICAgICAgdSJc8CIuZW5jb2RlKCJ1dGYtOCIpLA0KKyAgICAgICAgICAgICdcXFx4ZDBceDlmJw0KKyAgICAgICAgKQ0KKw0KK2RlZiB0ZXN0X21haW4oKToNCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChQRVAyNjNUZXN0KQ0KKw0KK2lmIF9fbmFtZV9fPT0iX19tYWluX18iOg0KKyAgICB0ZXN0X21haW4oKQ0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3Rfc2V0cy5weSBiL0xpYi90ZXN0L3Rlc3Rfc2V0cy5weQppbmRleCBmMGExOTI1Li40MTZiN2NhIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X3NldHMucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9zZXRzLnB5CkBAIC01OTYsNiArNTk2LDcgQEAKICAgICAgICAgICAgIHNlbGYuc2V0LmRpZmZlcmVuY2Uoc2VsZi5vdGhlcikKICAgICAgICAgZWxzZToKICAgICAgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgc2VsZi5zZXQuZGlmZmVyZW5jZSwgc2VsZi5vdGhlcikKKwogIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiBjbGFzcyBUZXN0T25seVNldHNOdW1lcmljKFRlc3RPbmx5U2V0c0luQmluYXJ5T3BzKToKQEAgLTY0Nyw2ICs2NDgsMTQgQEAKICAgICAgICAgc2VsZi5vdGhlciA9IGdlbigpCiAgICAgICAgIHNlbGYub3RoZXJJc0l0ZXJhYmxlID0gVHJ1ZQogCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2NsYXNzIFRlc3RPbmx5U2V0c29mU2V0cyhUZXN0T25seVNldHNJbkJpbmFyeU9wcyk6CisgICAgZGVmIHNldFVwKHNlbGYpOgorICAgICAgICBzZWxmLnNldCAgID0gU2V0KCgxLCAyLCAzKSkKKyAgICAgICAgc2VsZi5vdGhlciA9IFtTZXQoJ2FiJyksIEltbXV0YWJsZVNldCgnY2QnKV0KKyAgICAgICAgc2VsZi5vdGhlcklzSXRlcmFibGUgPSBUcnVlCisKICM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogY2xhc3MgVGVzdENvcHlpbmcodW5pdHRlc3QuVGVzdENhc2UpOgpAQCAtODAxLDYgKzgxMCw3IEBACiAgICAgICAgIFRlc3RPbmx5U2V0c1R1cGxlLAogICAgICAgICBUZXN0T25seVNldHNTdHJpbmcsCiAgICAgICAgIFRlc3RPbmx5U2V0c0dlbmVyYXRvciwKKyAgICAgICAgVGVzdE9ubHlTZXRzb2ZTZXRzLAogICAgICAgICBUZXN0Q29weWluZ0VtcHR5LAogICAgICAgICBUZXN0Q29weWluZ1NpbmdsZXRvbiwKICAgICAgICAgVGVzdENvcHlpbmdUcmlwbGUsCmRpZmYgLS1naXQgYS9MaWIvdGVzdC90ZXN0X3N0cnVjdHNlcS5weSBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5CmluZGV4IDI3NjBkNzIuLmViNmQ1ODEgMTAwNjQ0Ci0tLSBhL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5CisrKyBiL0xpYi90ZXN0L3Rlc3Rfc3RydWN0c2VxLnB5CkBAIC0xLDI4ICsxLDEwNCBAQAotZnJvbSB0ZXN0LnRlc3Rfc3VwcG9ydCBpbXBvcnQgdmVyZXEKK2ltcG9ydCB1bml0dGVzdAorZnJvbSB0ZXN0IGltcG9ydCB0ZXN0X3N1cHBvcnQKIAogaW1wb3J0IHRpbWUKIAotdCA9IHRpbWUuZ210aW1lKCkKLWFzdHVwbGUgPSB0dXBsZSh0KQotdmVyZXEobGVuKHQpLCBsZW4oYXN0dXBsZSkpCi12ZXJlcSh0LCBhc3R1cGxlKQorY2xhc3MgU3RydWN0U2VxVGVzdCh1bml0dGVzdC5UZXN0Q2FzZSk6CiAKLSMgQ2hlY2sgdGhhdCBzbGljaW5nIHdvcmtzIHRoZSBzYW1lIHdheTsgYXQgb25lIHBvaW50LCBzbGljaW5nIHRbaTpqXSB3aXRoCi0jIDAgPCBpIDwgaiBjb3VsZCBwcm9kdWNlIE5VTExzIGluIHRoZSByZXN1bHQuCi1mb3IgaSBpbiByYW5nZSgtbGVuKHQpLCBsZW4odCkpOgotICAgIGZvciBqIGluIHJhbmdlKC1sZW4odCksIGxlbih0KSk6Ci0gICAgICAgIHZlcmVxKHRbaTpqXSwgYXN0dXBsZVtpOmpdKQorICAgIGRlZiB0ZXN0X3R1cGxlKHNlbGYpOgorICAgICAgICB0ID0gdGltZS5nbXRpbWUoKQorICAgICAgICBhc3R1cGxlID0gdHVwbGUodCkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbChsZW4odCksIGxlbihhc3R1cGxlKSkKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0LCBhc3R1cGxlKQogCi0jIERldmlvdXMgY29kZSBjb3VsZCBjcmFzaCBzdHJ1Y3RzZXFzJyBjb250cnVjdG9ycwotY2xhc3MgQzoKLSAgICBkZWYgX19nZXRpdGVtX18oc2VsZiwgaSk6Ci0gICAgICAgIHJhaXNlIEluZGV4RXJyb3IKLSAgICBkZWYgX19sZW5fXyhzZWxmKToKLSAgICAgICAgcmV0dXJuIDkKKyAgICAgICAgIyBDaGVjayB0aGF0IHNsaWNpbmcgd29ya3MgdGhlIHNhbWUgd2F5OyBhdCBvbmUgcG9pbnQsIHNsaWNpbmcgdFtpOmpdIHdpdGgKKyAgICAgICAgIyAwIDwgaSA8IGogY291bGQgcHJvZHVjZSBOVUxMcyBpbiB0aGUgcmVzdWx0LgorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UoLWxlbih0KSwgbGVuKHQpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodFtpOl0sIGFzdHVwbGVbaTpdKQorICAgICAgICAgICAgZm9yIGogaW4geHJhbmdlKC1sZW4odCksIGxlbih0KSk6CisgICAgICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0W2k6al0sIGFzdHVwbGVbaTpqXSkKIAotdHJ5OgotICAgIHJlcHIodGltZS5zdHJ1Y3RfdGltZShDKCkpKQotZXhjZXB0OgotICAgIHBhc3MKKyAgICAgICAgZm9yIGogaW4geHJhbmdlKC1sZW4odCksIGxlbih0KSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbOmpdLCBhc3R1cGxlWzpqXSkKIAotIyBYWFggbW9yZSBuZWVkZWQKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoSW5kZXhFcnJvciwgdC5fX2dldGl0ZW1fXywgLWxlbih0KS0xKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhJbmRleEVycm9yLCB0Ll9fZ2V0aXRlbV9fLCBsZW4odCkpCisgICAgICAgIGZvciBpIGluIHhyYW5nZSgtbGVuKHQpLCBsZW4odCktMSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHRbaV0sIGFzdHVwbGVbaV0pCisKKyAgICBkZWYgdGVzdF9yZXByKHNlbGYpOgorICAgICAgICB0ID0gdGltZS5nbXRpbWUoKQorICAgICAgICByZXByKHQpCisKKyAgICBkZWYgdGVzdF9jb25jYXQoc2VsZik6CisgICAgICAgIHQxID0gdGltZS5nbXRpbWUoKQorICAgICAgICB0MiA9IHQxICsgdHVwbGUodDEpCisgICAgICAgIGZvciBpIGluIHhyYW5nZShsZW4odDEpKToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwodDJbaV0sIHQyW2krbGVuKHQxKV0pCisKKyAgICBkZWYgdGVzdF9yZXBlYXQoc2VsZik6CisgICAgICAgIHQxID0gdGltZS5nbXRpbWUoKQorICAgICAgICB0MiA9IDMgKiB0MQorICAgICAgICBmb3IgaSBpbiB4cmFuZ2UobGVuKHQxKSk6CisgICAgICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQyW2ldLCB0MltpK2xlbih0MSldKQorICAgICAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0MltpXSwgdDJbaSsyKmxlbih0MSldKQorCisgICAgZGVmIHRlc3RfY29udGFpbnMoc2VsZik6CisgICAgICAgIHQxID0gdGltZS5nbXRpbWUoKQorICAgICAgICBmb3IgaXRlbSBpbiB0MToKKyAgICAgICAgICAgIHNlbGYuYXNzZXJ0XyhpdGVtIGluIHQxKQorICAgICAgICBzZWxmLmFzc2VydF8oLTQyIG5vdCBpbiB0MSkKKworICAgIGRlZiB0ZXN0X2hhc2goc2VsZik6CisgICAgICAgIHQxID0gdGltZS5nbXRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGhhc2godDEpLCBoYXNoKHR1cGxlKHQxKSkpCisKKyAgICBkZWYgdGVzdF9jbXAoc2VsZik6CisgICAgICAgIHQxID0gdGltZS5nbXRpbWUoKQorICAgICAgICB0MiA9IHR5cGUodDEpKHQxKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKHQxLCB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCAodDEgPCB0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyh0MSA8PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCAodDEgPiB0MikpCisgICAgICAgIHNlbGYuYXNzZXJ0Xyh0MSA+PSB0MikKKyAgICAgICAgc2VsZi5hc3NlcnRfKG5vdCAodDEgIT0gdDIpKQorCisgICAgZGVmIHRlc3RfZmllbGRzKHNlbGYpOgorICAgICAgICB0ID0gdGltZS5nbXRpbWUoKQorICAgICAgICBzZWxmLmFzc2VydEVxdWFsKGxlbih0KSwgdC5uX2ZpZWxkcykKKyAgICAgICAgc2VsZi5hc3NlcnRFcXVhbCh0Lm5fZmllbGRzLCB0Lm5fc2VxdWVuY2VfZmllbGRzK3Qubl91bm5hbWVkX2ZpZWxkcykKKworICAgIGRlZiB0ZXN0X2NvbnN0cnVjdG9yKHNlbGYpOgorICAgICAgICB0ID0gdGltZS5zdHJ1Y3RfdGltZQorCisgICAgICAgIHNlbGYuYXNzZXJ0UmFpc2VzKFR5cGVFcnJvciwgdCkKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoVHlwZUVycm9yLCB0LCBOb25lKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQsICIxMjMiKQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQsICIxMjMiLCBkaWN0PXt9KQorICAgICAgICBzZWxmLmFzc2VydFJhaXNlcyhUeXBlRXJyb3IsIHQsICIxMjM0NTY3ODkiLCBkaWN0PU5vbmUpCisKKyAgICAgICAgcyA9ICIxMjM0NTY3ODkiCisgICAgICAgIHNlbGYuYXNzZXJ0RXF1YWwoIiIuam9pbih0KHMpKSwgcykKKworICAgIGRlZiB0ZXN0X2V2aWx0dXBsZShzZWxmKToKKyAgICAgICAgY2xhc3MgRXhjKEV4Y2VwdGlvbik6CisgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgIyBEZXZpb3VzIGNvZGUgY291bGQgY3Jhc2ggc3RydWN0c2VxcycgY29udHJ1Y3RvcnMKKyAgICAgICAgY2xhc3MgQzoKKyAgICAgICAgICAgIGRlZiBfX2dldGl0ZW1fXyhzZWxmLCBpKToKKyAgICAgICAgICAgICAgICByYWlzZSBFeGMKKyAgICAgICAgICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICAgICAgICAgIHJldHVybiA5CisKKyAgICAgICAgc2VsZi5hc3NlcnRSYWlzZXMoRXhjLCB0aW1lLnN0cnVjdF90aW1lLCBDKCkpCisKKyAgICBkZWYgdGVzdF9yZWR1Y2Uoc2VsZik6CisgICAgICAgIHQgPSB0aW1lLmdtdGltZSgpCisgICAgICAgIHggPSB0Ll9fcmVkdWNlX18oKQorCitkZWYgdGVzdF9tYWluKCk6CisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChTdHJ1Y3RTZXFUZXN0KQorCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorICAgIHRlc3RfbWFpbigpCg==