From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH] tools/tests: add xenstore testing framework Date: Wed, 18 Jan 2017 13:33:48 +0100 Message-ID: <20170118123348.5367-1-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cTpRA-0005ga-6H for xen-devel@lists.xenproject.org; Wed, 18 Jan 2017 12:34:00 +0000 List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , wei.liu2@citrix.com, ian.jackson@eu.citrix.com List-Id: xen-devel@lists.xenproject.org QWRkIHRvb2xzL3Rlc3RzL3hlbnN0b3JlIGZvciBhIGZyYW1ld29yayB0byBkbyB0ZXN0cyBvZiB4 ZW5zdG9yZS4KVGhlIGFpbSBpcyB0byB0ZXN0IGZvciBjb3JyZWN0bmVzcyBhbmQgcGVyZm9ybWFu Y2UuCgpBZGQgYSB0ZXN0IHByb2dyYW0gY29udGFpbmluZyBzb21lIHRlc3RzIG1lYW50IHRvIGJl IHJ1biBhZ2FpbnN0IGFueQp4ZW5zdG9yZSBpbXBsZW1lbnRhdGlvbiAoeGVuc3RvcmVkLCBveGVu c3RvcmVkLCB4ZW5zdG9yZS1zdHViZG9tKS4KCkl0IGlzIHVzaW5nIGxpYnhlbnN0b3JlIGZvciBh Y2Nlc3MgdG8geGVuc3RvcmUgYW5kIHN1cHBvcnRzIG11bHRpcGxlCnRlc3RzIHRvIGJlIGVpdGhl ciBzZWxlY3RlZCBhbGwgb3IgaW5kaXZpZHVhbGx5LiBBbGwgdGVzdHMgYXJlIHVzaW5nCi9sb2Nh bC9kb21haW4vPG93bi1kb21pZD4veGVuc3RvcmUtdGVzdC88cGlkPiBhcyBiYXNlIGZvciBkb2lu ZyB0aGUKdGVzdHMuIFRoaXMgYWxsb3dzIG11bHRpcGxlIGluc3RhbmNlcyBvZiB0aGUgcHJvZ3Jh bSB0byBydW4gaW4KcGFyYWxsZWwuCgpTaWduZWQtb2ZmLWJ5OiBKdWVyZ2VuIEdyb3NzIDxqZ3Jv c3NAc3VzZS5jb20+Ci0tLQogLmdpdGlnbm9yZSAgICAgICAgICAgICAgICAgICAgIHwgICAxICsK IHRvb2xzL3Rlc3RzL01ha2VmaWxlICAgICAgICAgICB8ICAgMSArCiB0b29scy90ZXN0cy94ZW5z dG9yZS9NYWtlZmlsZSAgfCAgMjcgKysrCiB0b29scy90ZXN0cy94ZW5zdG9yZS94cy10ZXN0LmMg fCA1MTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDQgZmlsZXMg Y2hhbmdlZCwgNTQxIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0b29scy90ZXN0 cy94ZW5zdG9yZS9NYWtlZmlsZQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3Rlc3RzL3hlbnN0 b3JlL3hzLXRlc3QuYwoKZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4 IDc2ODk1OTYuLmQ5OTgyZjYgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9y ZQpAQCAtMjEyLDYgKzIxMiw3IEBAIHRvb2xzL3Rlc3RzL3g4Nl9lbXVsYXRvci9ibG93ZmlzaC5o CiB0b29scy90ZXN0cy94ODZfZW11bGF0b3IvdGVzdF94ODZfZW11bGF0b3IKIHRvb2xzL3Rlc3Rz L3g4Nl9lbXVsYXRvci94ODZfZW11bGF0ZQogdG9vbHMvdGVzdHMveGVuLWFjY2Vzcy94ZW4tYWNj ZXNzCit0b29scy90ZXN0cy94ZW5zdG9yZS94cy10ZXN0CiB0b29scy90ZXN0cy9yZWdyZXNzaW9u L2luc3RhbGxlZC8qCiB0b29scy90ZXN0cy9yZWdyZXNzaW9uL2J1aWxkLyoKIHRvb2xzL3Rlc3Rz L3JlZ3Jlc3Npb24vZG93bmxvYWRzLyoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RzL01ha2VmaWxl IGIvdG9vbHMvdGVzdHMvTWFrZWZpbGUKaW5kZXggYWRlYjEyMC4uNjM5Nzc2MSAxMDA2NDQKLS0t IGEvdG9vbHMvdGVzdHMvTWFrZWZpbGUKKysrIGIvdG9vbHMvdGVzdHMvTWFrZWZpbGUKQEAgLTEy LDYgKzEyLDcgQEAgU1VCRElSUy15ICs9IHJlZ3Jlc3Npb24KIGVuZGlmCiBTVUJESVJTLSQoQ09O RklHX1g4NikgKz0geDg2X2VtdWxhdG9yCiBTVUJESVJTLXkgKz0geGVuLWFjY2VzcworU1VCRElS Uy15ICs9IHhlbnN0b3JlCiAKIC5QSE9OWTogYWxsIGNsZWFuIGluc3RhbGwgZGlzdGNsZWFuCiBh bGwgY2xlYW4gZGlzdGNsZWFuOiAlOiBzdWJkaXJzLSUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rz L3hlbnN0b3JlL01ha2VmaWxlIGIvdG9vbHMvdGVzdHMveGVuc3RvcmUvTWFrZWZpbGUKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM4NWY5OAotLS0gL2Rldi9udWxsCisrKyBi L3Rvb2xzL3Rlc3RzL3hlbnN0b3JlL01ha2VmaWxlCkBAIC0wLDAgKzEsMjcgQEAKK1hFTl9ST09U PSQoQ1VSRElSKS8uLi8uLi8uLgoraW5jbHVkZSAkKFhFTl9ST09UKS90b29scy9SdWxlcy5tawor CitDRkxBR1MgKz0gLVdlcnJvcgorCitDRkxBR1MgKz0gJChDRkxBR1NfbGlieGVuc3RvcmUpCisK K1RBUkdFVFMteSA6PSB4cy10ZXN0CitUQVJHRVRTIDo9ICQoVEFSR0VUUy15KQorCisuUEhPTlk6 IGFsbAorYWxsOiBidWlsZAorCisuUEhPTlk6IGJ1aWxkCitidWlsZDogJChUQVJHRVRTKQorCisu UEhPTlk6IGNsZWFuCitjbGVhbjoKKwkkKFJNKSAqLm8gJChUQVJHRVRTKSAqfiAkKERFUFMpCisK Ky5QSE9OWTogZGlzdGNsZWFuCitkaXN0Y2xlYW46IGNsZWFuCisKK3hzLXRlc3Q6IHhzLXRlc3Qu byBNYWtlZmlsZQorCSQoQ0MpIC1vICRAICQ8ICQoTERGTEFHUykgJChMRExJQlNfbGlieGVuc3Rv cmUpCisKKy1pbmNsdWRlICQoREVQUykKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3RzL3hlbnN0b3Jl L3hzLXRlc3QuYyBiL3Rvb2xzL3Rlc3RzL3hlbnN0b3JlL3hzLXRlc3QuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi45ODBhZmI2Ci0tLSAvZGV2L251bGwKKysrIGIvdG9vbHMv dGVzdHMveGVuc3RvcmUveHMtdGVzdC5jCkBAIC0wLDAgKzEsNTEyIEBACisvKgorICogeHMtdGVz dC5jCisgKgorICogRG8gWGVuc3RvcmUgdGVzdHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDE2 ICBKdWVyZ2VuIEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+LAorICogICAgICAgICAgICAgICAgICAg ICBTVVNFIExpbnV4IEdtYkgKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl cm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Us IHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW07IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMv Pi4KKyAqLworCisjZGVmaW5lIF9HTlVfU09VUkNFCisjaW5jbHVkZSA8Z2V0b3B0Lmg+CisjaW5j bHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRib29sLmg+CisjaW5jbHVkZSA8c3RkaW8u aD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1 bmlzdGQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8eGVuc3RvcmUuaD4KKworI2Rl ZmluZSBURVNUX1BBVEggInhlbnN0b3JlLXRlc3QiCisjZGVmaW5lIEFSUkFZX1NJWkUoYSkgKHNp emVvZihhKSAvIHNpemVvZihhWzBdKSkKKyNkZWZpbmUgV1JJVEVfQlVGRkVSU19OICAgIDEwCisj ZGVmaW5lIFdSSVRFX0JVRkZFUlNfU0laRSA0MDAwCisjZGVmaW5lIE1BWF9UQV9MT09QUyAgICAg ICAxMDAKKworc3RydWN0IHRlc3QgeworICAgIGNoYXIgKm5hbWU7CisgICAgaW50ICgqZnVuY19p bml0KSh1aW50cHRyX3QgcGFyKTsKKyAgICBpbnQgKCpmdW5jKSh1aW50cHRyX3QgcGFyKTsKKyAg ICBpbnQgKCpmdW5jX2RlaW5pdCkodWludHB0cl90IHBhcik7CisgICAgdWludHB0cl90IHBhcjsK KyAgICBjaGFyICpkZXNjcjsKK307CisKK3N0YXRpYyBzdHJ1Y3QgeHNfaGFuZGxlICp4c2g7Citz dGF0aWMgY2hhciAqcGF0aDsKK3N0YXRpYyBjaGFyICpwYXRoc1tXUklURV9CVUZGRVJTX05dOwor c3RhdGljIGNoYXIgd3JpdGVfYnVmZmVyc1tXUklURV9CVUZGRVJTX05dW1dSSVRFX0JVRkZFUlNf U0laRV07CitzdGF0aWMgaW50IHRhX2xvb3BzOworCitzdGF0aWMgc3RydWN0IG9wdGlvbiBvcHRp b25zW10gPSB7CisgICAgeyAibGlzdC10ZXN0cyIsIDAsIE5VTEwsICdsJyB9LAorICAgIHsgInRl c3QiLCAxLCBOVUxMLCAndCcgfSwKKyAgICB7ICJyYW5kb20iLCAxLCBOVUxMLCAncicgfSwKKyAg ICB7ICJoZWxwIiwgMCwgTlVMTCwgJ2gnIH0sCisgICAgeyAiaXRlcmF0aW9ucyIsIDEsIE5VTEws ICdpJyB9LAorICAgIHsgTlVMTCwgMCwgTlVMTCwgMCB9Cit9OworCitzdGF0aWMgaW50IGNhbGxf dGVzdChzdHJ1Y3QgdGVzdCAqdHN0LCBpbnQgaXRlcnMsIGJvb2wgbm9fY2xvY2spCit7CisgICAg Y2hhciAqc3RhZ2UgPSAiPyI7CisgICAgc3RydWN0IHRpbWVzcGVjIHRwMSwgdHAyOworICAgIHVp bnQ2NF90IG5zZWMsIG5zZWNfbWluLCBuc2VjX21heCwgbnNlY19zdW07CisgICAgaW50IGksIHJl dDsKKworICAgIG5zZWNfbWluID0gLTE7CisgICAgbnNlY19tYXggPSAwOworICAgIG5zZWNfc3Vt ID0gMDsKKworICAgIGZvciAoIGkgPSAwOyBpIDwgaXRlcnM7IGkrKyApCisgICAgeworICAgICAg ICBzdGFnZSA9ICJwcmUtaW5pdCI7CisgICAgICAgIHhzX3JtKHhzaCwgWEJUX05VTEwsIHBhdGgp OworICAgICAgICBpZiAoICF4c193cml0ZSh4c2gsIFhCVF9OVUxMLCBwYXRoLCAiIiwgMCkgKQor ICAgICAgICB7CisgICAgICAgICAgICByZXQgPSBlcnJubzsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisgICAgICAgIHN0YWdlID0gImluaXQiOworICAgICAgICByZXQgPSB0c3QtPmZ1 bmNfaW5pdCh0c3QtPnBhcik7CisgICAgICAgIGlmICggcmV0ICkKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICBpZiAoIGNsb2NrX2dldHRpbWUoQ0xPQ0tfUkVBTFRJTUUsICZ0cDEpICkKKyAg ICAgICAgICAgIG5vX2Nsb2NrID0gdHJ1ZTsKKyAgICAgICAgc3RhZ2UgPSAicnVuIjsKKyAgICAg ICAgcmV0ID0gdHN0LT5mdW5jKHRzdC0+cGFyKTsKKyAgICAgICAgaWYgKCByZXQgKQorICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGlmICggY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwg JnRwMikgKQorICAgICAgICAgICAgbm9fY2xvY2sgPSB0cnVlOworICAgICAgICBpZiAoICFub19j bG9jayApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5zZWMgPSB0cDIudHZfc2VjICogMTAwMDAw MDAwMCArIHRwMi50dl9uc2VjIC0KKyAgICAgICAgICAgICAgICAgICB0cDEudHZfc2VjICogMTAw MDAwMDAwMCAtIHRwMS50dl9uc2VjOworICAgICAgICAgICAgaWYgKCBuc2VjIDwgbnNlY19taW4g KQorICAgICAgICAgICAgICAgIG5zZWNfbWluID0gbnNlYzsKKyAgICAgICAgICAgIGlmICggbnNl YyA+IG5zZWNfbWF4ICkKKyAgICAgICAgICAgICAgICBuc2VjX21heCA9IG5zZWM7CisgICAgICAg ICAgICBuc2VjX3N1bSArPSBuc2VjOworICAgICAgICB9CisgICAgICAgIHN0YWdlID0gImRlaW5p dCI7CisgICAgICAgIHJldCA9IHRzdC0+ZnVuY19kZWluaXQodHN0LT5wYXIpOworICAgICAgICBp ZiAoIHJldCApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIHJldCApCisg ICAgICAgIHByaW50ZigiJS0xMHM6IGZhaWxlZCAocmV0ID0gJWQsIHN0YWdlICVzKVxuIiwgdHN0 LT5uYW1lLCByZXQsIHN0YWdlKTsKKyAgICBlbHNlIGlmICggIW5vX2Nsb2NrICkKKyAgICB7Cisg ICAgICAgIHByaW50ZigiJS0xMHM6IiwgdHN0LT5uYW1lKTsKKyAgICAgICAgaWYgKCBpdGVycyA+ IDEgKQorICAgICAgICAgICAgcHJpbnRmKCIgYXZnOiAlIlBSSXU2NCIgbnMgKCUiUFJJdTY0IiBu cyAuLiAlIlBSSXU2NCIgbnMpIiwKKyAgICAgICAgICAgICAgICAgICBuc2VjX3N1bSAvIGl0ZXJz LCBuc2VjX21pbiwgbnNlY19tYXgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcmludGYo IiAlIlBSSXU2NCIgbnMiLCBuc2VjX3N1bSk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9 CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCB1c2FnZShpbnQgcmV0KQorewor ICAgIEZJTEUgKm91dDsKKworICAgIG91dCA9IHJldCA/IHN0ZGVyciA6IHN0ZG91dDsKKworICAg IGZwcmludGYob3V0LCAidXNhZ2U6IHhzLXRlc3QgWzxvcHRpb25zPl1cbiIpOworICAgIGZwcmlu dGYob3V0LCAiICA8b3B0aW9ucz4gYXJlOlxuIik7CisgICAgZnByaW50ZihvdXQsICIgIC1pfC0t aXRlcmF0aW9ucyA8aT4gIHBlcmZvcm0gZWFjaCB0ZXN0IDxpPiB0aW1lcyAoZGVmYXVsdCAxKVxu Iik7CisgICAgZnByaW50ZihvdXQsICIgIC1sfC0tbGlzdC10ZXN0cyAgICAgIGxpc3QgYXZhaWxh YmxlIHRlc3RzXG4iKTsKKyAgICBmcHJpbnRmKG91dCwgIiAgLXJ8LS1yYW5kb20gPHRpbWU+ICAg cGVyZm9ybSByYW5kb20gdGVzdHMgZm9yIDx0aW1lPiBzZWNvbmRzXG4iKTsKKyAgICBmcHJpbnRm KG91dCwgIiAgLXR8LS10ZXN0IDx0ZXN0PiAgICAgcnVuIDx0ZXN0PiAoZGVmYXVsdCBpcyBhbGwg dGVzdHMpXG4iKTsKKyAgICBmcHJpbnRmKG91dCwgIiAgLWh8LS1oZWxwICAgICAgICAgICAgcHJp bnQgdGhpcyB1c2FnZSBpbmZvcm1hdGlvblxuIik7CisgICAgZXhpdChyZXQpOworfQorCitzdGF0 aWMgaW50IHJldDAodWludHB0cl90IHBhcikKK3sKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludCB2ZXJpZnlfbm9kZShjaGFyICpub2RlLCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgc2l6 ZSkKK3sKKyAgICBjaGFyICpidWY7CisgICAgdW5zaWduZWQgaW50IGxlbjsKKyAgICBpbnQgcmV0 OworCisgICAgYnVmID0geHNfcmVhZCh4c2gsIFhCVF9OVUxMLCBub2RlLCAmbGVuKTsKKyAgICBp ZiAoICFidWYgKQorICAgICAgICByZXR1cm4gZXJybm87CisKKyAgICByZXQgPSAobGVuID09IHNp emUgJiYgIW1lbWNtcChidWYsIGRhdGEsIGxlbikpID8gMCA6IEVOT0RBVEE7CisgICAgZnJlZShi dWYpOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB0ZXN0X3JlYWRfaW5pdCh1 aW50cHRyX3QgcGFyKQoreworICAgIGlmICggcGFyID4gV1JJVEVfQlVGRkVSU19TSVpFICkKKyAg ICAgICAgcmV0dXJuIEVGQklHOworICAgIHJldHVybiB4c193cml0ZSh4c2gsIFhCVF9OVUxMLCBw YXRoc1swXSwgd3JpdGVfYnVmZmVyc1swXSwgcGFyKSA/IDAgOiBlcnJubzsKK30KKworc3RhdGlj IGludCB0ZXN0X3JlYWQodWludHB0cl90IHBhcikKK3sKKyAgICBjaGFyICpidWY7CisgICAgdW5z aWduZWQgaW50IGxlbjsKKworICAgIGJ1ZiA9IHhzX3JlYWQoeHNoLCBYQlRfTlVMTCwgcGF0aHNb MF0sICZsZW4pOworICAgIGlmICggIWJ1ZiApCisgICAgICAgIHJldHVybiBlcnJubzsKKyAgICBm cmVlKGJ1Zik7CisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgdGVzdF9yZWFkX2RlaW5pdCBy ZXQwCisKK3N0YXRpYyBpbnQgdGVzdF93cml0ZV9pbml0KHVpbnRwdHJfdCBwYXIpCit7CisgICAg cmV0dXJuIChwYXIgPiBXUklURV9CVUZGRVJTX1NJWkUpID8gRUZCSUcgOiAwOworfQorCitzdGF0 aWMgaW50IHRlc3Rfd3JpdGUodWludHB0cl90IHBhcikKK3sKKyAgICByZXR1cm4geHNfd3JpdGUo eHNoLCBYQlRfTlVMTCwgcGF0aHNbMF0sIHdyaXRlX2J1ZmZlcnNbMF0sIHBhcikgPyAwIDogZXJy bm87Cit9CisKK3N0YXRpYyBpbnQgdGVzdF93cml0ZV9kZWluaXQodWludHB0cl90IHBhcikKK3sK KyAgICByZXR1cm4gdmVyaWZ5X25vZGUocGF0aHNbMF0sIHdyaXRlX2J1ZmZlcnNbMF0sIHBhcik7 Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9kaXJfaW5pdCh1aW50cHRyX3QgcGFyKQoreworICAgIHVu c2lnbmVkIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IFdSSVRFX0JVRkZFUlNfTjsgaSsr KQorICAgICAgICBpZiAoICF4c193cml0ZSh4c2gsIFhCVF9OVUxMLCBwYXRoc1tpXSwgd3JpdGVf YnVmZmVyc1tpXSwgMSkgKQorICAgICAgICAgICAgcmV0dXJuIGVycm5vOworCisgICAgcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQgdGVzdF9kaXIodWludHB0cl90IHBhcikKK3sKKyAgICBjaGFy ICoqZGlyOworICAgIHVuc2lnbmVkIGludCBudW07CisKKyAgICBkaXIgPSB4c19kaXJlY3Rvcnko eHNoLCBYQlRfTlVMTCwgcGF0aCwgJm51bSk7CisgICAgaWYgKCAhZGlyICkKKyAgICAgICAgcmV0 dXJuIGVycm5vOworCisgICAgZnJlZShkaXIpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMg aW50IHRlc3RfZGlyX2RlaW5pdCh1aW50cHRyX3QgcGFyKQoreworICAgIGNoYXIgKipkaXI7Cisg ICAgdW5zaWduZWQgaW50IGksIGosIG51bTsKKyAgICBpbnQgcmMgPSAwOworCisgICAgZGlyID0g eHNfZGlyZWN0b3J5KHhzaCwgWEJUX05VTEwsIHBhdGgsICZudW0pOworICAgIGlmICggIWRpciAp CisgICAgICAgIHJldHVybiBlcnJubzsKKworICAgIGZvciAoaiA9IDA7IGogPCBXUklURV9CVUZG RVJTX047IGorKykKKyAgICB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkrKykKKyAg ICAgICAgICAgIGlmICggZGlyW2ldWzBdID09ICdhJyArIGogJiYgZGlyW2ldWzFdID09IDAgKQor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIGkgPT0gbnVtICkKKyAgICAgICAg ICAgIHJjID0gRU5PREFUQTsKKyAgICB9CisgICAgaWYgKCBudW0gIT0gV1JJVEVfQlVGRkVSU19O ICkKKyAgICAgICAgICAgIHJjID0gRU5PREFUQTsKKyAgICBmcmVlKGRpcik7CisgICAgcmV0dXJu IHJjOworfQorCitzdGF0aWMgaW50IHRlc3Rfcm1faW5pdCh1aW50cHRyX3QgcGFyKQoreworICAg IHVuc2lnbmVkIGludCBpOworCisgICAgaWYgKCBwYXIgPiBXUklURV9CVUZGRVJTX04gKQorICAg ICAgICByZXR1cm4gRUZCSUc7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgcGFyOyBpKyspCisgICAg ICAgIGlmICggeHNfd3JpdGUoeHNoLCBYQlRfTlVMTCwgcGF0aHNbaV0sIHdyaXRlX2J1ZmZlcnNb aV0sIDEpICkKKyAgICAgICAgICAgIHJldHVybiBlcnJubzsKKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IHRlc3Rfcm0odWludHB0cl90IHBhcikKK3sKKyAgICBpZiAoICF4c19ybSh4 c2gsIFhCVF9OVUxMLCBwYXRoKSApCisgICAgICAgIHJldHVybiBlcnJubzsKKworICAgIHJldHVy biAwOworfQorCisjZGVmaW5lIHRlc3Rfcm1fZGVpbml0IHJldDAKKworI2RlZmluZSB0ZXN0X3Rh MV9pbml0IHJldDAKKworc3RhdGljIGludCB0ZXN0X3RhMSh1aW50cHRyX3QgcGFyKQoreworICAg IHhzX3RyYW5zYWN0aW9uX3QgdDsKKyAgICBpbnQgbDsKKworICAgIGZvciAobD0gMDsgbCA8IE1B WF9UQV9MT09QUzsgbCsrKQorICAgIHsKKyAgICAgICAgdCA9IHhzX3RyYW5zYWN0aW9uX3N0YXJ0 KHhzaCk7CisgICAgICAgIGlmICggdCA9PSBYQlRfTlVMTCApCisgICAgICAgICAgICByZXR1cm4g ZXJybm87CisgICAgICAgIGlmICggeHNfdHJhbnNhY3Rpb25fZW5kKHhzaCwgdCwgcGFyID8gdHJ1 ZSA6IGZhbHNlKSApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCBlcnJubyAh PSBFQUdBSU4gKQorICAgICAgICAgICAgcmV0dXJuIGVycm5vOworICAgIH0KKworICAgIHRhX2xv b3BzKys7CisgICAgcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgdGVzdF90YTFfZGVpbml0IHJldDAK Kworc3RhdGljIGludCB0ZXN0X3RhMl9pbml0KHVpbnRwdHJfdCBwYXIpCit7CisgICAgcmV0dXJu IHhzX3dyaXRlKHhzaCwgWEJUX05VTEwsIHBhdGhzWzBdLCB3cml0ZV9idWZmZXJzWzBdLCAxKSA/ IDAgOiBlcnJubzsKK30KKworc3RhdGljIGludCB0ZXN0X3RhMih1aW50cHRyX3QgcGFyKQorewor ICAgIHhzX3RyYW5zYWN0aW9uX3QgdDsKKyAgICBjaGFyICpidWY7CisgICAgdW5zaWduZWQgaW50 IGxlbjsKKyAgICBpbnQgcmV0OworICAgIGludCBsOworCisgICAgZm9yIChsPSAwOyBsIDwgTUFY X1RBX0xPT1BTOyBsKyspCisgICAgeworICAgICAgICB0ID0geHNfdHJhbnNhY3Rpb25fc3RhcnQo eHNoKTsKKyAgICAgICAgaWYgKCB0ID09IFhCVF9OVUxMICkKKyAgICAgICAgICAgIHJldHVybiBl cnJubzsKKyAgICAgICAgYnVmID0geHNfcmVhZCh4c2gsIHQsIHBhdGhzWzBdLCAmbGVuKTsKKyAg ICAgICAgaWYgKCAhYnVmICkKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICBmcmVlKGJ1 Zik7CisgICAgICAgIGlmICggIXhzX3dyaXRlKHhzaCwgdCwgcGF0aHNbMF0sICJiIiwgMSkgKQor ICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIGJ1ZiA9IHhzX3JlYWQoeHNoLCB0LCBwYXRo c1swXSwgJmxlbik7CisgICAgICAgIGlmICggIWJ1ZiApCisgICAgICAgICAgICBnb3RvIG91dDsK KyAgICAgICAgZXJybm8gPSAobGVuID09IDEgJiYgYnVmWzBdID09ICdiJykgPyAwIDogRU5PREFU QTsKKyAgICAgICAgZnJlZShidWYpOworICAgICAgICBpZiAoIGVycm5vICkKKyAgICAgICAgICAg IGdvdG8gb3V0OworICAgICAgICBidWYgPSB4c19yZWFkKHhzaCwgWEJUX05VTEwsIHBhdGhzWzBd LCAmbGVuKTsKKyAgICAgICAgaWYgKCAhYnVmICkKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAg ICAgICBlcnJubyA9IChsZW4gPT0gMSAmJiBidWZbMF0gPT0gJ2EnKSA/IDAgOiBFTk9EQVRBOwor ICAgICAgICBmcmVlKGJ1Zik7CisgICAgICAgIGlmICggZXJybm8gKQorICAgICAgICAgICAgZ290 byBvdXQ7CisgICAgICAgIGlmICggeHNfdHJhbnNhY3Rpb25fZW5kKHhzaCwgdCwgcGFyID8gdHJ1 ZSA6IGZhbHNlKSApCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgaWYgKCBlcnJubyAh PSBFQUdBSU4gKQorICAgICAgICAgICAgcmV0dXJuIGVycm5vOworICAgIH0KKworICAgIHRhX2xv b3BzKys7CisgICAgcmV0dXJuIDA7CisKKyBvdXQ6CisgICAgcmV0ID0gZXJybm87CisgICAgeHNf dHJhbnNhY3Rpb25fZW5kKHhzaCwgdCwgdHJ1ZSk7CisgICAgcmV0dXJuIHJldDsKK30KKworc3Rh dGljIGludCB0ZXN0X3RhMl9kZWluaXQodWludHB0cl90IHBhcikKK3sKKyAgICByZXR1cm4gdmVy aWZ5X25vZGUocGF0aHNbMF0sIHBhciA/ICJhIiA6ICJiIiwgMSk7Cit9CisKK3N0YXRpYyBpbnQg dGVzdF90YTNfaW5pdCh1aW50cHRyX3QgcGFyKQoreworICAgIHJldHVybiB4c193cml0ZSh4c2gs IFhCVF9OVUxMLCBwYXRoc1swXSwgd3JpdGVfYnVmZmVyc1swXSwgMSkgPyAwIDogZXJybm87Cit9 CisKK3N0YXRpYyBpbnQgdGVzdF90YTModWludHB0cl90IHBhcikKK3sKKyAgICB4c190cmFuc2Fj dGlvbl90IHQ7CisgICAgY2hhciAqYnVmOworICAgIHVuc2lnbmVkIGludCBsZW47CisgICAgaW50 IHJldDsKKworICAgIHQgPSB4c190cmFuc2FjdGlvbl9zdGFydCh4c2gpOworICAgIGlmICggdCA9 PSBYQlRfTlVMTCApCisgICAgICAgIHJldHVybiBlcnJubzsKKyAgICBidWYgPSB4c19yZWFkKHhz aCwgdCwgcGF0aHNbMF0sICZsZW4pOworICAgIGlmICggIWJ1ZiApCisgICAgICAgIGdvdG8gb3V0 OworICAgIGZyZWUoYnVmKTsKKyAgICBpZiAoICF4c193cml0ZSh4c2gsIFhCVF9OVUxMLCBwYXRo c1swXSwgImIiLCAxKSApCisgICAgICAgIGdvdG8gb3V0OworICAgIGJ1ZiA9IHhzX3JlYWQoeHNo LCB0LCBwYXRoc1swXSwgJmxlbik7CisgICAgaWYgKCAhYnVmICkKKyAgICAgICAgZ290byBvdXQ7 CisgICAgZXJybm8gPSAobGVuID09IDEgJiYgYnVmWzBdID09ICdhJykgPyAwIDogRU5PREFUQTsK KyAgICBmcmVlKGJ1Zik7CisgICAgaWYgKCBlcnJubyApCisgICAgICAgIGdvdG8gb3V0OworICAg IGlmICggIXhzX3dyaXRlKHhzaCwgdCwgcGF0aHNbMF0sICJjIiwgMSkgKQorICAgICAgICBnb3Rv IG91dDsKKyAgICBidWYgPSB4c19yZWFkKHhzaCwgdCwgcGF0aHNbMF0sICZsZW4pOworICAgIGlm ICggIWJ1ZiApCisgICAgICAgIGdvdG8gb3V0OworICAgIGVycm5vID0gKGxlbiA9PSAxICYmIGJ1 ZlswXSA9PSAnYycpID8gMCA6IEVOT0RBVEE7CisgICAgZnJlZShidWYpOworICAgIGlmICggZXJy bm8gKQorICAgICAgICBnb3RvIG91dDsKKyAgICBpZiAoIHhzX3RyYW5zYWN0aW9uX2VuZCh4c2gs IHQsIGZhbHNlKSB8fCBlcnJubyAhPSBFQUdBSU4gKQorICAgICAgICByZXR1cm4gRU5PREFUQTsK KyAgICByZXR1cm4gMDsKKworIG91dDoKKyAgICByZXQgPSBlcnJubzsKKyAgICB4c190cmFuc2Fj dGlvbl9lbmQoeHNoLCB0LCB0cnVlKTsKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50 IHRlc3RfdGEzX2RlaW5pdCh1aW50cHRyX3QgcGFyKQoreworICAgIHJldHVybiB2ZXJpZnlfbm9k ZShwYXRoc1swXSwgImIiLCAxKTsKK30KKworI2RlZmluZSBURVNUKHMsIGYsIHAsIGwpIHsgcywg ZiAjIyBfaW5pdCwgZiwgZiAjIyBfZGVpbml0LCAodWludHB0cl90KShwKSwgbCB9CitzdHJ1Y3Qg dGVzdCB0ZXN0c1tdID0geworVEVTVCgicmVhZCAxIiwgdGVzdF9yZWFkLCAxLCAiUmVhZCBub2Rl IHdpdGggMSBieXRlIGRhdGEiKSwKK1RFU1QoInJlYWQgMzAwMCIsIHRlc3Rfd3JpdGUsIDMwMDAs ICJXcml0ZSBub2RlIHdpdGggMzAwMCBieXRlcyBkYXRhIiksCitURVNUKCJ3cml0ZSAxIiwgdGVz dF93cml0ZSwgMSwgIldyaXRlIG5vZGUgd2l0aCAxIGJ5dGUgZGF0YSIpLAorVEVTVCgid3JpdGUg MzAwMCIsIHRlc3RfcmVhZCwgMzAwMCwgIlJlYWQgbm9kZSB3aXRoIDMwMDAgYnl0ZXMgZGF0YSIp LAorVEVTVCgiZGlyIiwgdGVzdF9kaXIsIDAsICJMaXN0IGRpcmVjdG9yeSIpLAorVEVTVCgicm0g bm9kZSIsIHRlc3Rfcm0sIDAsICJSZW1vdmUgc2luZ2xlIG5vZGUiKSwKK1RFU1QoInJtIGRpciIs IHRlc3Rfcm0sIFdSSVRFX0JVRkZFUlNfTiwgIlJlbW92ZSBub2RlIHdpdGggc3ViLW5vZGVzIiks CitURVNUKCJ0YSBlbXB0eSIsIHRlc3RfdGExLCAwLCAiRW1wdHkgdHJhbnNhY3Rpb24iKSwKK1RF U1QoInRhIGVtcHR5IHgiLCB0ZXN0X3RhMSwgMSwgIkVtcHR5IHRyYW5zYWN0aW9uIGFib3J0Iiks CitURVNUKCJ0YSBybXciLCB0ZXN0X3RhMiwgMCwgIlJlYWQtbW9kaWZ5LXdyaXRlIHRyYW5zYWN0 aW9uIiksCitURVNUKCJ0YSBybXcgeCIsIHRlc3RfdGEyLCAxLCAiUmVhZC1tb2RpZnktd3JpdGUg dHJhbnNhY3Rpb24gYWJvcnQiKSwKK1RFU1QoInRhIGVyciIsIHRlc3RfdGEzLCAwLCAiVHJhbnNh Y3Rpb24gd2l0aCBjb25mbGljdCIpLAorfTsKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFy Z3ZbXSkKK3sKKyAgICBpbnQgb3B0LCB0LCBpdGVycyA9IDEsIHJldCA9IDAsIHJhbmR0aW1lID0g MDsKKyAgICBjaGFyICp0ZXN0ID0gTlVMTDsKKyAgICBib29sIGxpc3QgPSBmYWxzZTsKKyAgICB0 aW1lX3Qgc3RvcDsKKworICAgIHdoaWxlICggKG9wdCA9IGdldG9wdF9sb25nKGFyZ2MsIGFyZ3Ys ICJscjp0OmhpOiIsIG9wdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVM TCkpICE9IC0xICkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3B0KQorICAgICAgICB7CisgICAg ICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgaXRlcnMgPSBhdG9pKG9wdGFyZyk7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICBsaXN0ID0gdHJ1ZTsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgIHJhbmR0 aW1lID0gYXRvaShvcHRhcmcpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3Qn OgorICAgICAgICAgICAgdGVzdCA9IG9wdGFyZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlICdoJzoKKyAgICAgICAgICAgIHVzYWdlKDApOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIH0KKyAgICB9CisgICAgaWYgKCBvcHRpbmQgIT0gYXJnYyApCisgICAgICAgIHVzYWdl KDEpOworCisgICAgaWYgKCBsaXN0ICkKKyAgICB7CisgICAgICAgIGZvciAoIHQgPSAwOyB0IDwg QVJSQVlfU0laRSh0ZXN0cyk7IHQrKyApCisgICAgICAgICAgICBwcmludGYoIiUtMTBzOiAlc1xu IiwgdGVzdHNbdF0ubmFtZSwgdGVzdHNbdF0uZGVzY3IpOworICAgICAgICByZXR1cm4gMDsKKyAg ICB9CisKKyAgICBhc3ByaW50ZigmcGF0aCwgIiVzLyV1IiwgVEVTVF9QQVRILCBnZXRwaWQoKSk7 CisgICAgZm9yICggdCA9IDA7IHQgPCBXUklURV9CVUZGRVJTX047IHQrKyApCisgICAgeworICAg ICAgICBtZW1zZXQod3JpdGVfYnVmZmVyc1t0XSwgJ2EnICsgdCwgV1JJVEVfQlVGRkVSU19TSVpF KTsKKyAgICAgICAgYXNwcmludGYoJnBhdGhzW3RdLCAiJXMvJWMiLCBwYXRoLCAnYScgKyB0KTsK KyAgICB9CisKKyAgICB4c2ggPSB4c19vcGVuKDApOworICAgIGlmICggIXhzaCApCisgICAgewor ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImNvdWxkIG5vdCBjb25uZWN0IHRvIHhlbnN0b3JlXG4i KTsKKyAgICAgICAgZXhpdCgyKTsKKyAgICB9CisKKyAgICBpZiAoIHJhbmR0aW1lICkKKyAgICB7 CisgICAgICAgIHN0b3AgPSB0aW1lKE5VTEwpICsgcmFuZHRpbWU7CisgICAgICAgIHNyYW5kb20o KHVuc2lnbmVkIGludClzdG9wKTsKKworICAgICAgICB3aGlsZSAoIHRpbWUoTlVMTCkgPCBzdG9w ICkKKyAgICAgICAgeworICAgICAgICAgICAgdCA9IHJhbmRvbSgpICUgQVJSQVlfU0laRSh0ZXN0 cyk7CisgICAgICAgICAgICByZXQgPSBjYWxsX3Rlc3QodGVzdHMgKyB0LCBpdGVycywgdHJ1ZSk7 CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgICBmb3IgKCB0ID0gMDsgdCA8IEFS UkFZX1NJWkUodGVzdHMpOyB0KysgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoICF0ZXN0 IHx8ICFzdHJjbXAodGVzdCwgdGVzdHNbdF0ubmFtZSkgKQorICAgICAgICAgICAgICAgIHJldCA9 IGNhbGxfdGVzdCh0ZXN0cyArIHQsIGl0ZXJzLCBmYWxzZSk7CisgICAgICAgIH0KKworICAgIGlm ICggIXJldCApCisgICAgICAgIHhzX3JtKHhzaCwgWEJUX05VTEwsIHBhdGgpOworCisgICAgeHNf Y2xvc2UoeHNoKTsKKworICAgIGlmICggdGFfbG9vcHMgKQorICAgICAgICBwcmludGYoIkV4aGF1 c3RpdmUgdHJhbnNhY3Rpb24gcmV0cmllcyAoJWQpIG9jY3VycnJlZCAlZCB0aW1lcy5cbiIsCisg ICAgICAgICAgICAgICBNQVhfVEFfTE9PUFMsIHRhX2xvb3BzKTsKKworICAgIHJldHVybiAwOwor fQorCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICogYy1maWxlLXN0eWxl OiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAor ICogRW5kOgorICovCi0tIAoyLjEwLjIKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54 ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK