From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 273D66E11F for ; Thu, 18 Apr 2019 12:01:35 +0000 (UTC) From: Stanislav Lisovskiy Date: Thu, 18 Apr 2019 15:01:15 +0300 Message-Id: <20190418120115.20737-1-stanislav.lisovskiy@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v9] igt/tests: kms_plane_stress: Add plane stress test List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: stanislav.lisovskiy@intel.com, ville.syrjala@intel.com, martin.peres@intel.com List-ID: VGhpcyB0ZXN0IGF0dGVtcHRzIHRvIHV0aWxpemUgYWxsIGNvbm5lY3RlZApvdXRwdXRzIGF0IHRo ZSBzYW1lIHRpbWUsIHVzaW5nIG1heGltdW0gcG9zc2libGUKcmVzb2x1dGlvbiBhbmQgYW1vdW50 IG9mIHBsYW5lcywgdG8gY2hlY2sgd2hldGhlcgp3ZSBhcmUgaGl0aW5nIGFueSBraW5kIG9mIGJh bmR3aWR0aCwgd2F0ZXJtYXJrIG9yCm90aGVyIGxpbWl0YXRpb25zLgoKdjI6IEFkZGVkIGNwdSBh bmQgZ3B1IGxvYWQgdGhyZWFkcywgd2hpY2ggY29uc3VtZQogICAgYWRkaXRpb25hbCBiYW5kd2lk dGguCgp2MzogUmVtb3ZlZCBiaW5hcnkgcGljdHVyZSBmaWxlLCB1c2luZyBwYXR0ZXJuIGZiCiAg ICBpbnN0ZWFkLgoKdjQ6IE1vdmVkIEZCIGNyZWF0aW9uL3JlbW92YWwgdG8gYmV0dGVyIHBsYWNl LgoKdjU6IEZpeGVkIHJlYmFzZSBjb25mbGljdCBhbmQgY2hhbmdlZCAiZmItPnRpbGluZyIKICAg IHRvICJmYi0+bW9kaWZpZXIiLgoKdjY6IFJlbW92ZWQgdW5uZWNlc3NhcnkgbmV3IG1hY3JvIGZv ciBpdGVyYXRpbmcgb24KICAgIHBpcGVzLiBUYWtlbiBpbnRvIHVzZSBpZ3RfZ2V0dGltZSBpbnN0 ZWFkIG9mCiAgICBjbG9ja19nZXR0aW1lLgoKdjc6IFB1dCBmYiByZWluaXQgaW50byBpZ3RfZml4 dHVyZSB0byBhdm9pZCBwcm9ibGVtcy4KICAgIE1vdmUgc3RyZXNzIGZ1bmN0aW9uIHVuZGVyIGln dF9zdWJ0ZXN0LiBSZWxlYXNlIHBsYW5lcywKICAgIHJlbW92ZSByZWR1bmRhbnQgY29tbWl0LCBh c3NlcnQgaWYgbm8gcGxhbmVzIGNhbiBiZSB1c2VkLgoKdjg6IC0gQWRkIGJsaXR0aW5nIGFsc28s IHRvIGhhdmUgbW9yZSBmdW4KICAgIC0gTm93IHVzaW5nIHNlcGFyYXRlIGZyYW1lYnVmZmVyIHBl ciBlYWNoIHBsYW5lLgogICAgLSBGaXhlZCBtYWdpYyBudW1iZXIgZm9yIGJwcCB2YWx1ZShub3cg YmFzZWQgb24gZm9ybWF0KQogICAgLSBTb21lIG9wdGltaXphdGlvbnMsIGxpa2Ugbm90IGFwcGx5 aW5nIHNhbWUgbW9kZSBpZiBpdAogICAgICBoYXNuJ3QgY2hhbmdlLCBhbHNvIGRvbid0IGRvIGhp Z2hlc3QgbW9kZSBzZWFyY2ggb24KICAgICAgZWFjaCBpdGVyYXRpb24sIGp1c3QgY2FsY3VsYXRl IG9uY2UgYW5kIHVzZSBpdC4KICAgIC0gU29tZSBjb2RlIHJlZmFjdG9yaW5nOiBleHRyYWN0ZWQg c29tZSBsZW5ndGh5IGNvZGUKICAgICAgdG8gc2VwYXJhdGUgZnVuY3Rpb25zLgogICAgLSBGaXhl ZCB3cm9uZyBpbmRleCBmb3IgY3Vyc29yIEZCKGN1cnNvciBGQiBpcyBvbmUgcGVyIHBpcGUpCgp2 OToKICAgIC0gTW9yZSBoZWxwZXIgZnVuY3Rpb25zKHN0YXJ0L3N0b3AgdGhyZWFkcywgdGVzdCBp bml0KQogICAgLSBOb3cgZG9pbmcgR1BVIHdvcmsgaW4gcHRocmVhZHMgYWxzbwogICAgLSBEbyBH UFUgd29yayBpbiBhIHNlcGFyYXRlIGZyYW1lYnVmZmVyKG5vdCBkaXNwbGF5ZWQpCgpTaWduZWQt b2ZmLWJ5OiBTdGFuaXNsYXYgTGlzb3Zza2l5IDxzdGFuaXNsYXYubGlzb3Zza2l5QGludGVsLmNv bT4KLS0tCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzICAgfCAgIDEgKwogdGVzdHMva21zX3BsYW5l X3N0cmVzcy5jIHwgNzg1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog dGVzdHMvbWVzb24uYnVpbGQgICAgICAgIHwgICAxICsKIDMgZmlsZXMgY2hhbmdlZCwgNzg3IGlu c2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMK CmRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291 cmNlcwppbmRleCA3MWNjZjAwYS4uOWQwNGQ4ODggMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxl LnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtNTksNiArNTksNyBAQCBU RVNUU19wcm9ncyA9IFwKIAlrbXNfcGxhbmVfbG93cmVzIFwKIAlrbXNfcGxhbmVfbXVsdGlwbGUg XAogCWttc19wbGFuZV9zY2FsaW5nIFwKKwlrbXNfcGxhbmVfc3RyZXNzIFwKIAlrbXNfcHJvcF9i bG9iIFwKIAlrbXNfcHJvcGVydGllcyBcCiAJa21zX3BzciBcCmRpZmYgLS1naXQgYS90ZXN0cy9r bXNfcGxhbmVfc3RyZXNzLmMgYi90ZXN0cy9rbXNfcGxhbmVfc3RyZXNzLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAuLmVjZjdkYWMxCi0tLSAvZGV2L251bGwKKysrIGIvdGVz dHMva21zX3BsYW5lX3N0cmVzcy5jCkBAIC0wLDAgKzEsNzg1IEBACisgLyoKKyAqIENvcHlyaWdo dCDCqSAyMDE5IEludGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkg Z3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNv cHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0 aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3Ry aWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK KyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVy c29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJq ZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJp Z2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0 CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3Rh bnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUg SVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVT UyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRI T1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VT IE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNU LCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICog SU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJpZ3QuaCIKKyNpbmNsdWRlICJpZ3Rf cmFuZC5oIgorI2luY2x1ZGUgImRybXRlc3QuaCIKKyNpbmNsdWRlICJzd19zeW5jLmgiCisjaW5j bHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkYm9vbC5o PgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGlt ZS5oPgorI2luY2x1ZGUgPHBvbGwuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNpZm5kZWYg RFJNX0NBUF9DVVJTT1JfV0lEVEgKKyNkZWZpbmUgRFJNX0NBUF9DVVJTT1JfV0lEVEggMHg4Cisj ZW5kaWYKKyNpZm5kZWYgRFJNX0NBUF9DVVJTT1JfSEVJR0hUCisjZGVmaW5lIERSTV9DQVBfQ1VS U09SX0hFSUdIVCAweDkKKyNlbmRpZgorCisKK2RybU1vZGVNb2RlSW5mbyB1aGRfbW9kZV82MGh6 ID0geworCS5uYW1lID0gIjM4NDB4MjE2MEA2MGh6IiwKKwkudnJlZnJlc2ggPSA2MCwKKwkuY2xv Y2sgPSAxNDI2NjcqMiwKKwkuaGRpc3BsYXkgPSAzODQwLAorCS5oc3luY19zdGFydCA9IDE5MzYq MiwKKwkuaHN5bmNfZW5kID0gMTk1MioyLAorCS5odG90YWwgPSAyMTA0KjIsCisJLnZkaXNwbGF5 ID0gMjE2MCwKKwkudnN5bmNfc3RhcnQgPSAxMDgzKjIsCisJLnZzeW5jX2VuZCA9IDEwOTcqMiwK KwkudnRvdGFsID0gMTEyOCoyLAorCS5mbGFncyA9IDB4YSwKK307CisKKyNkZWZpbmUgTl9GT1JN QVRTIDMKK3N0YXRpYyBjb25zdCB1aW50MzJfdCBmb3JtYXRzW05fRk9STUFUU10gPSB7CisJRFJN X0ZPUk1BVF9YUkdCODg4OCwKKwlEUk1fRk9STUFUX1JHQjU2NSwKKwlEUk1fRk9STUFUX1hSR0Iy MTAxMDEwLAorfTsKKworI2RlZmluZSBOX1RJTElOR19NRVRIT0RTIDMKK3N0YXRpYyBjb25zdCB1 aW50NjRfdCB0aWxpbmdzW05fVElMSU5HX01FVEhPRFNdID0geworCURSTV9GT1JNQVRfTU9EX0xJ TkVBUiwKKwlJOTE1X0ZPUk1BVF9NT0RfWF9USUxFRCwKKwlJOTE1X0ZPUk1BVF9NT0RfWV9USUxF RCwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICpmb3JtYXRfc3RyKGludCBmb3JtYXRfaW5kZXgp Cit7CisJc3dpdGNoIChmb3JtYXRzW2Zvcm1hdF9pbmRleF0pIHsKKwljYXNlIERSTV9GT1JNQVRf UkdCNTY1OgorCQlyZXR1cm4gInJnYjU2NSI7CisJY2FzZSBEUk1fRk9STUFUX1hSR0I4ODg4Ogor CQlyZXR1cm4gInhyZ2I4ODg4IjsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjIxMDEwMTA6CisJCXJl dHVybiAieHJnYjIxMDEwMTAiOworCWRlZmF1bHQ6CisJCWlndF9hc3NlcnQoZmFsc2UpOworCX0K K30KKworc3RhdGljIGNvbnN0IGNoYXIgKnRpbGluZ19zdHIoaW50IHRpbGluZ19pbmRleCkKK3sK Kwlzd2l0Y2ggKHRpbGluZ3NbdGlsaW5nX2luZGV4XSkgeworCWNhc2UgRFJNX0ZPUk1BVF9NT0Rf TElORUFSOgorCQlyZXR1cm4gInVudGlsZWQiOworCWNhc2UgSTkxNV9GT1JNQVRfTU9EX1hfVElM RUQ6CisJCXJldHVybiAieHRpbGVkIjsKKwljYXNlIEk5MTVfRk9STUFUX01PRF9ZX1RJTEVEOgor CQlyZXR1cm4gInl0aWxlZCI7CisJZGVmYXVsdDoKKwkJaWd0X2Fzc2VydChmYWxzZSk7CisJfQor fQorCisKKyNkZWZpbmUgTUFYX0NPUkVTIDgKKyNkZWZpbmUgTUFYX1BMQU5FUyAxNgorCitzdHJ1 Y3QgZGF0YTsKKworc3RydWN0IHRocmVhZF9jb250ZXh0IHsKKwlzdHJ1Y3QgZGF0YSAqZGF0YTsK KwlpbnQgaWQ7CisJdm9pZCAqYnVmMTsKKwl2b2lkICpidWYyOworfTsKKworc3RydWN0IHJlY3Qg eworCWludCB4OworCWludCB5OworCWludCB3OworCWludCBoOworfTsKKworc3RydWN0IGdwdV9j b250ZXh0IHsKKwlzdHJ1Y3QgZGF0YSAqZGF0YTsKKwlpbnQgcGlwZTsKKwlpbnQgY29sb3I7CisJ c3RydWN0IHJlY3QgYmx0X3JlY3Q7CisJc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaDsK K307CisKK3N0cnVjdCBkYXRhIHsKKwlpbnQgZHJtX2ZkOworCWlndF9kaXNwbGF5X3QgZGlzcGxh eTsKKwlpbnQgbnVtX3BsYW5lc1tJR1RfTUFYX1BJUEVTXTsKKwl1aW50MzJfdCBmb3JtYXQ7CisJ dWludDY0X3QgbW9kaWZpZXI7CisJdWludDMyX3QgZGV2aWQ7CisJZHJtX2ludGVsX2J1Zm1nciAq YnVmbWdyOworCWRybU1vZGVNb2RlSW5mbyAqbGFzdF9tb2RlW0lHVF9NQVhfUElQRVNdOworCXN0 cnVjdCBpZ3RfZmIgZmJbSUdUX01BWF9QSVBFUyAqIE1BWF9QTEFORVNdOworCXN0cnVjdCBpZ3Rf ZmIgY3Vyc29yX2ZiW0lHVF9NQVhfUElQRVNdOworCXB0aHJlYWRfdCBjcHVfdGhyZWFkW01BWF9D T1JFU107CisJcHRocmVhZF90IGdwdV90aHJlYWRbSUdUX01BWF9QSVBFU107CisJYm9vbCBjcHVf dGhyZWFkX3N0b3BbTUFYX0NPUkVTXTsKKwlib29sIGdwdV90aHJlYWRfc3RvcFtJR1RfTUFYX1BJ UEVTXTsKKwlzdHJ1Y3QgdGhyZWFkX2NvbnRleHQgY3B1X2NvbnRleHRbTUFYX0NPUkVTXTsKKwlz dHJ1Y3QgZ3B1X2NvbnRleHQgZ3B1X2NvbnRleHRbSUdUX01BWF9QSVBFU107CisJZHJtTW9kZU1v ZGVJbmZvICpoaWdoZXN0X21vZGVbSUdUX01BWF9QSVBFU107CisJZHJtTW9kZUNvbm5lY3RvclB0 ciBjb25uZWN0b3JzW0lHVF9NQVhfUElQRVNdOworCWRybU1vZGVSZXMgKm1vZGVfcmVzb3VyY2Vz OworCWludCBudW1iZXJfb2ZfY29yZXM7Cit9OworCisKK3N0cnVjdCBiYXNlX2NyYyB7CisJYm9v bCBzZXQ7CisJaWd0X2NyY190IGNyYzsKK307CisKK2lndF9waXBlX2NyY190ICpwaXBlX2NyYzsK KworI2RlZmluZSBCVUZfU0laRSAxMjgqMTAyNCoxMDI0CisKK3N0YXRpYyB2b2lkICpjcHVfbG9h ZCh2b2lkICpkKQoreworCWNoYXIgKmJ1ZjEsICpidWYyOworCXN0cnVjdCB0aHJlYWRfY29udGV4 dCAqY29udGV4dCA9IChzdHJ1Y3QgdGhyZWFkX2NvbnRleHQgKilkOworCXN0cnVjdCBkYXRhICpk YXRhID0gY29udGV4dC0+ZGF0YTsKKworCWJ1ZjEgPSBjb250ZXh0LT5idWYxOworCWJ1ZjIgPSBj b250ZXh0LT5idWYyOworCisJZGF0YS0+Y3B1X3RocmVhZF9zdG9wW2NvbnRleHQtPmlkXSA9IGZh bHNlOworCisJLyogSnVzdCB0byBtYWtlIENQVSBidXN5Li4uICovCisJd2hpbGUoIWRhdGEtPmNw dV90aHJlYWRfc3RvcFtjb250ZXh0LT5pZF0pIHsKKwkJbWVtY3B5KGJ1ZjEsIGJ1ZjIsIEJVRl9T SVpFKTsKKwkJbWVtY3B5KGJ1ZjIsIGJ1ZjEsIEJVRl9TSVpFKTsKKwl9CisKKwlyZXR1cm4gTlVM TDsKK30KKworCitzdGF0aWMgdm9pZCBzY3JhdGNoX2J1Zl9pbml0KHN0cnVjdCBpZ3RfYnVmICpi dWYsCisJCQlkcm1faW50ZWxfYm8gKmJvLCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGludCBzdHJp ZGUsIGludCB0aWxpbmcsIGludCBicHApCit7CisJYnVmLT5ibyA9IGJvOworCWJ1Zi0+c3RyaWRl ID0gc3RyaWRlOworCWJ1Zi0+dGlsaW5nID0gdGlsaW5nOworCWJ1Zi0+c2l6ZSA9IHdpZHRoICog aGVpZ2h0ICogYnBwIC8gODsKKwlidWYtPmJwcCA9IGJwcDsKK30KKworc3RhdGljIHZvaWQgKmdw dV9sb2FkKHZvaWQgKnB0cikKK3sKKwlzdHJ1Y3QgZ3B1X2NvbnRleHQgKmNvbnRleHQgPSAoc3Ry dWN0IGdwdV9jb250ZXh0ICopcHRyOworCXN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gg PSBOVUxMOworCXN0cnVjdCBpZ3RfYnVmIGRzdDsKKwlzdHJ1Y3QgZGF0YSAqZGF0YSA9IGNvbnRl eHQtPmRhdGE7CisJaW50IHBpcGUgPSBjb250ZXh0LT5waXBlOworCWlndF9maWxsZnVuY190IGdw Z3B1X2ZpbGwgPSBOVUxMOworCWRybV9pbnRlbF9ibyAqYm87CisJc3RydWN0IGlndF9mYiBmYjsK KwlpbnQgcmVjdF9kaXZpc29yOworCWludCByZWN0X3dpZHRoOworCWludCByZWN0X2hlaWdodDsK KwlpbnQgZnJhbWVfd2lkdGg7CisJaW50IGZyYW1lX2hlaWdodDsKKwlpbnQgYnl0ZXNfcGVyX3Bp eGVsOworCWRybU1vZGVNb2RlSW5mbyAqbW9kZTsKKworCWdwZ3B1X2ZpbGwgPSBpZ3RfZ2V0X2dw Z3B1X2ZpbGxmdW5jKGRhdGEtPmRldmlkKTsKKworCWlndF9yZXF1aXJlX2YoZ3BncHVfZmlsbCwK KwkgICAgICAibm8gZ3BncHUtZmlsbCBmdW5jdGlvblxuIik7CisKKwliYXRjaCA9IGNvbnRleHQt PmJhdGNoOworCWlndF9hc3NlcnQoYmF0Y2gpOworCisJbW9kZSA9IGRhdGEtPmhpZ2hlc3RfbW9k ZVtwaXBlXTsKKwlpZ3RfYXNzZXJ0KG1vZGUpOworCisJaWd0X2NyZWF0ZV9jb2xvcl9wYXR0ZXJu X2ZiKGRhdGEtPmRybV9mZCwgbW9kZS0+aGRpc3BsYXksIG1vZGUtPnZkaXNwbGF5LAorCQkgICAg ZGF0YS0+Zm9ybWF0LAorCQkgICAgZGF0YS0+bW9kaWZpZXIsCisJCSAgICAwLjAsIDEuMCwgMC4w LCAmZmIpOworCisJZnJhbWVfd2lkdGggPSBmYi53aWR0aDsKKwlmcmFtZV9oZWlnaHQgPSBmYi5o ZWlnaHQgLyAyOworCWJ5dGVzX3Blcl9waXhlbCA9IGZiLnBsYW5lX2JwcFswXSAvIDg7CisKKwli byA9IGdlbV9oYW5kbGVfdG9fbGliZHJtX2JvKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZHJtX2ZkLCAi IiwgZmIuZ2VtX2hhbmRsZSk7CisJaWd0X2Fzc2VydChibyk7CisKKwlzY3JhdGNoX2J1Zl9pbml0 KCZkc3QsIGJvLCBmcmFtZV93aWR0aCwgZnJhbWVfaGVpZ2h0LCBmYi5zdHJpZGVzWzBdLCBmYi5t b2RpZmllciwgZmIucGxhbmVfYnBwWzBdKTsKKworCS8qIGRpdmlkZSBhdCBsZWFzdCBieSAyIGFu ZCB1cCB0byA4ICovCisJcmVjdF9kaXZpc29yID0gMSA8PCAoaGFyc19wZXRydXNrYV9mNTRfMV9y YW5kb21fdW5zYWZlX21heCgzKSArIDEpOworCisJcmVjdF93aWR0aCA9IGZyYW1lX3dpZHRoIC8g cmVjdF9kaXZpc29yOworCXJlY3RfaGVpZ2h0ID0gZnJhbWVfaGVpZ2h0IC8gcmVjdF9kaXZpc29y OworCisJZGF0YS0+Z3B1X3RocmVhZF9zdG9wW3BpcGVdID0gZmFsc2U7CisKKwl3aGlsZSAoIWRh dGEtPmdwdV90aHJlYWRfc3RvcFtwaXBlXSkgeworCisJCS8qIEZpbGwgdGhlIGZyYW1lYnVmZmVy IHVzaW5nIHNoYWRlciAqLworCQlncGdwdV9maWxsKGJhdGNoLAorCQkgICAmZHN0LCAwLCAwLCAo ZnJhbWVfd2lkdGggKiBieXRlc19wZXJfcGl4ZWwpLCBmcmFtZV9oZWlnaHQsCisJCSAgIGNvbnRl eHQtPmNvbG9yKTsKKworCQljb250ZXh0LT5ibHRfcmVjdC54ID0gKGNvbnRleHQtPmJsdF9yZWN0 LnggKyByZWN0X3dpZHRoKSAlIChmcmFtZV93aWR0aCAtIHJlY3Rfd2lkdGgpOworCQljb250ZXh0 LT5ibHRfcmVjdC55ID0gKGNvbnRleHQtPmJsdF9yZWN0LnkgKyByZWN0X2hlaWdodCkgJSAoZnJh bWVfaGVpZ2h0IC0gcmVjdF9oZWlnaHQpOworCisJCS8qIEJsaXQgcmFuZG9tIHNpemVkIGFuZCBw b3NpdGlvbmVkIHJlY3RhbmdsZSAqLworCQlpZ3RfZHJhd19yZWN0KGRhdGEtPmRybV9mZCwgZGF0 YS0+YnVmbWdyLCBOVUxMLAorCQkJICAgZmIuZ2VtX2hhbmRsZSwgZnJhbWVfd2lkdGggKiBmcmFt ZV9oZWlnaHQgKiBieXRlc19wZXJfcGl4ZWwsIGZiLndpZHRoICogYnl0ZXNfcGVyX3BpeGVsLAor CQkJICAgSUdUX0RSQVdfQkxULCBjb250ZXh0LT5ibHRfcmVjdC54LCBjb250ZXh0LT5ibHRfcmVj dC55LAorCQkJICAgcmVjdF93aWR0aCwgcmVjdF9oZWlnaHQsIDB4ZmYsIGZiLnBsYW5lX2JwcFsw XSk7CisJfQorCisJZHJtX2ludGVsX2JvX3VucmVmZXJlbmNlKGJvKTsKKworCWlndF9yZW1vdmVf ZmIoZGF0YS0+ZGlzcGxheS5kcm1fZmQsICZmYik7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3Rh dGljIGlubGluZSB1aW50MzJfdCBwaXBlX3NlbGVjdChlbnVtIHBpcGUgcGlwZSkKK3sKKwlpZiAo cGlwZSA+IDEpCisJCXJldHVybiBwaXBlIDw8IERSTV9WQkxBTktfSElHSF9DUlRDX1NISUZUOwor CWVsc2UgaWYgKHBpcGUgPiAwKQorCQlyZXR1cm4gRFJNX1ZCTEFOS19TRUNPTkRBUlk7CisJZWxz ZQorCQlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGdldF92YmxhbmsoaW50IGZkLCBl bnVtIHBpcGUgcGlwZSwgdW5zaWduZWQgZmxhZ3MpCit7CisJdW5pb24gZHJtX3dhaXRfdmJsYW5r IHZibDsKKworCW1lbXNldCgmdmJsLCAwLCBzaXplb2YodmJsKSk7CisJdmJsLnJlcXVlc3QudHlw ZSA9IERSTV9WQkxBTktfUkVMQVRJVkUgfCBwaXBlX3NlbGVjdChwaXBlKSB8IGZsYWdzOworCWlm IChkcm1Jb2N0bChmZCwgRFJNX0lPQ1RMX1dBSVRfVkJMQU5LLCAmdmJsKSkKKwkJcmV0dXJuIDA7 CisKKwlyZXR1cm4gdmJsLnJlcGx5LnNlcXVlbmNlOworfQorCisKK3N0YXRpYyBpbnQgcGxhbmVf c3RyZXNzKHN0cnVjdCBkYXRhICpkYXRhLCBpZ3Rfb3V0cHV0X3QgKm91dHB1dCwgZW51bSBwaXBl IHBpcGUsIGRybU1vZGVNb2RlSW5mbyAqbW9kZSkKK3sKKwlpZ3RfcGxhbmVfdCAqcGxhbmU7CisJ aW50IGk7CisJaW50IHJldDsKKwlpZ3RfY3JjX3QgY3JjLCBjcmMyOworCWJvb2wgbmV3X21vZGUg PSBmYWxzZTsKKwl1aW50NjRfdCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQ7CisKKwlkb19v cl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9mZCwgRFJNX0NBUF9DVVJTT1JfV0lEVEgsICZjdXJz b3Jfd2lkdGgpKTsKKwlkb19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9mZCwgRFJNX0NBUF9D VVJTT1JfSEVJR0hULCAmY3Vyc29yX2hlaWdodCkpOworCisJaWYgKGRhdGEtPmxhc3RfbW9kZVtw aXBlXSAhPSBtb2RlKSB7CisJCWlndF9vdXRwdXRfb3ZlcnJpZGVfbW9kZShvdXRwdXQsIG1vZGUp OworCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgcGlwZSk7CisKKwkJcmV0ID0gaWd0X2Rp c3BsYXlfdHJ5X2NvbW1pdF9hdG9taWMoJmRhdGEtPmRpc3BsYXksCisJCQkJRFJNX01PREVfQVRP TUlDX1RFU1RfT05MWSB8IERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxMKTsKKwkJ aWYgKHJldCkgeworCQkJaWd0X3dhcm4oIkNvdWxkIG5vdCBjb21taXQgbW9kZTogXG4iKTsKKwkJ CWttc3Rlc3RfZHVtcF9tb2RlKG1vZGUpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCisJCWlndF9k aXNwbGF5X2NvbW1pdDIoJmRhdGEtPmRpc3BsYXksIENPTU1JVF9BVE9NSUMpOworCQlkYXRhLT5s YXN0X21vZGVbcGlwZV0gPSBtb2RlOworCQluZXdfbW9kZSA9IHRydWU7CisJfQorCisJLyoKKwkg KiBMb29rcyBsaWtlIHdlIGNhbid0IGhhdmUgcGxhbmVzIG9uIHRoYXQgcGlwZSBhdCBhbGwKKwkg Ki8KKwlpZiAoIWRhdGEtPm51bV9wbGFuZXNbcGlwZV0pCisJCXJldHVybiAwOworCisJbW9kZSA9 IGlndF9vdXRwdXRfZ2V0X21vZGUob3V0cHV0KTsKKworCWlmIChuZXdfbW9kZSkgeworCQlpID0g MDsKKwkJZm9yX2VhY2hfcGxhbmVfb25fcGlwZSgmZGF0YS0+ZGlzcGxheSwgcGlwZSwgcGxhbmUp IHsKKwkJCWludCBwbGFuZV93aWR0aCwgcGxhbmVfaGVpZ2h0OworCQkJaWYgKHBsYW5lLT50eXBl ID09IERSTV9QTEFORV9UWVBFX0NVUlNPUikgeworCQkJCWlndF9wbGFuZV9zZXRfZmIocGxhbmUs ICZkYXRhLT5jdXJzb3JfZmJbcGlwZV0pOworCQkJCWlndF9mYl9zZXRfc2l6ZSgmZGF0YS0+Y3Vy c29yX2ZiW3BpcGVdLCBwbGFuZSwgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0KTsKKwkJCQlp Z3RfcGxhbmVfc2V0X3NpemUocGxhbmUsIGN1cnNvcl93aWR0aCwgY3Vyc29yX2hlaWdodCk7CisJ CQkJcGxhbmVfd2lkdGggPSBjdXJzb3Jfd2lkdGg7CisJCQkJcGxhbmVfaGVpZ2h0ID0gY3Vyc29y X2hlaWdodDsKKwkJCX0gZWxzZSB7CisJCQkJaWd0X3BsYW5lX3NldF9mYihwbGFuZSwgJmRhdGEt PmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0pOworCQkJCWlndF9wbGFuZV9zZXRfcG9zaXRpb24o cGxhbmUsIDAsIDApOworCQkJCWlndF9mYl9zZXRfc2l6ZSgmZGF0YS0+ZmJbcGlwZSAqIE1BWF9Q TEFORVMgKyBpXSwgcGxhbmUsIG1vZGUtPmhkaXNwbGF5LCBtb2RlLT52ZGlzcGxheSk7CisJCQkJ aWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBtb2RlLT5oZGlzcGxheSwgbW9kZS0+dmRpc3BsYXkp OworCQkJCXBsYW5lX3dpZHRoID0gbW9kZS0+aGRpc3BsYXk7CisJCQkJcGxhbmVfaGVpZ2h0ID0g bW9kZS0+dmRpc3BsYXk7CisJCQl9CisKKwkJCXJldCA9IGlndF9kaXNwbGF5X3RyeV9jb21taXRf YXRvbWljKCZkYXRhLT5kaXNwbGF5LCBEUk1fTU9ERV9BVE9NSUNfVEVTVF9PTkxZIHwgRFJNX01P REVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOworCQkJd2hpbGUgKHJldCkgeworCQkJCWlm IChwbGFuZV93aWR0aCA8PSBjdXJzb3Jfd2lkdGggfHwgcGxhbmVfaGVpZ2h0IDw9IGN1cnNvcl9o ZWlnaHQpCisJCQkJCWJyZWFrOworCQkJCXBsYW5lX3dpZHRoIC89IDI7CisJCQkJcGxhbmVfaGVp Z2h0IC89IDI7CisJCQkJaWd0X3BsYW5lX3NldF9zaXplKHBsYW5lLCBwbGFuZV93aWR0aCwgcGxh bmVfaGVpZ2h0KTsKKwkJCQlpZ3RfaW5mbygiUmVkdWNlZCBwbGFuZSAlZCBzaXplIHRvICVkeCVk XG4iLCBwbGFuZS0+aW5kZXgsIHBsYW5lX3dpZHRoLCBwbGFuZV9oZWlnaHQpOworCQkJCXJldCA9 IGlndF9kaXNwbGF5X3RyeV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LCBEUk1fTU9ERV9B VE9NSUNfVEVTVF9PTkxZIHwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOwor CQkJfQorCQkJaWYgKHJldCkgeworCQkJCWlndF9pbmZvKCJQbGFuZSAlZCBwaXBlICVkIHRyeSBj b21taXQgZmFpbGVkLCBleGl0aW5nXG4iLCBpLCBwaXBlKTsKKwkJCQlkYXRhLT5udW1fcGxhbmVz W3BpcGVdID0gaTsKKwkJCQkvKgorCQkJCSAqIFdlIGhhdmUgbm93IGRldGVybWluZWQgbWF4IGFt b3VudCBvZiBmdWxsIHNpemVkIHBsYW5lcywgd2Ugd2lsbCBqdXN0CisJCQkJICoga2VlcCBpdCBp biBtaW5kIGFuZCBiZSBzbWFydGVyIG5leHQgdGltZS4gQWxzbyBsZXRzIHJlbW92ZSB1bm5lZWRl ZCBmYnMuCisJCQkJICogRG9uJ3QgZGVzdHJveSBjdXJzb3JfZmIgYXMgd2lsbCB0YWtlIGNhcmUg YWJvdXQgaXQgYXQgdGhlIGVuZC4KKwkJCQkgKi8KKwkJCQlpZ3RfcGxhbmVfc2V0X2ZiKHBsYW5l LCBOVUxMKTsKKwkJCQl3aGlsZSAoaSA8IE1BWF9QTEFORVMpIHsKKwkJCQkJaWd0X3JlbW92ZV9m YihkYXRhLT5kaXNwbGF5LmRybV9mZCwgJmRhdGEtPmZiW3BpcGUgKiBNQVhfUExBTkVTICsgaV0p OworCQkJCQlkYXRhLT5mYltwaXBlICogTUFYX1BMQU5FUyArIGldLmZiX2lkID0gMDsKKwkJCQkJ aSsrOworCQkJCX0KKwkJCQlpID0gZGF0YS0+bnVtX3BsYW5lc1twaXBlXTsKKwkJCX0KKworCQkJ aWYgKCsraSA+PSBkYXRhLT5udW1fcGxhbmVzW3BpcGVdKQorCQkJCWJyZWFrOworCQl9CisKKwkJ aWd0X2Rpc3BsYXlfY29tbWl0MigmZGF0YS0+ZGlzcGxheSwgQ09NTUlUX0FUT01JQyk7CisJfQor CisJZ2V0X3ZibGFuayhkYXRhLT5kaXNwbGF5LmRybV9mZCwgcGlwZSwgRFJNX1ZCTEFOS19ORVhU T05NSVNTKTsKKworCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhwaXBlX2NyYywgJmNyYyk7CisK KwlnZXRfdmJsYW5rKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCBwaXBlLCBEUk1fVkJMQU5LX05FWFRP Tk1JU1MpOworCisJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKHBpcGVfY3JjLCAmY3JjMik7CisJ aWd0X2Fzc2VydF9jcmNfZXF1YWwoJmNyYywgJmNyYzIpOworCisJcmV0dXJuIDA7Cit9CisKKwor c3RhdGljIGRybU1vZGVNb2RlSW5mbyAqIGZpbmRfaGlnaGVzdF9tb2RlKGRybU1vZGVDb25uZWN0 b3IgKmNvbm5lY3RvcikKK3sKKwlkcm1Nb2RlTW9kZUluZm8gKmhpZ2hlc3RfbW9kZSA9IE5VTEw7 CisJaW50IGo7CisKKwlmb3IgKGogPSAwOyBqIDwgY29ubmVjdG9yLT5jb3VudF9tb2Rlczsgaisr KSB7CisJCWlmICghaGlnaGVzdF9tb2RlKSB7CisJCQloaWdoZXN0X21vZGUgPSAmY29ubmVjdG9y LT5tb2Rlc1tqXTsKKwkJfQorCQllbHNlIGlmIChjb25uZWN0b3ItPm1vZGVzW2pdLnZkaXNwbGF5 ICYmIGNvbm5lY3Rvci0+bW9kZXNbal0uaGRpc3BsYXkpIHsKKwkJCWlmIChoaWdoZXN0X21vZGUt PmhkaXNwbGF5IDwgY29ubmVjdG9yLT5tb2Rlc1tqXS5oZGlzcGxheSkKKwkJCQloaWdoZXN0X21v ZGUgPSAmY29ubmVjdG9yLT5tb2Rlc1tqXTsKKwkJCX0KKwl9CisKKwlyZXR1cm4gaGlnaGVzdF9t b2RlOworfQorCit0eXBlZGVmIGRybU1vZGVDb25uZWN0b3IgKiBkcm1Nb2RlQ29ubmVjdG9yUHRy OworCitzdGF0aWMgdm9pZCBmaWxsX2Nvbm5lY3Rvcl90b19waXBlX2FycmF5KHN0cnVjdCBkYXRh ICpkYXRhLCBkcm1Nb2RlUmVzICptb2RlX3Jlc291cmNlcywgZHJtTW9kZUNvbm5lY3RvclB0ciAq Y29ubmVjdG9ycykKK3sKKwlpbnQgcGlwZSA9IDAsIGNydGNfaWQ7CisJaWd0X291dHB1dF90ICpv dXRwdXQ7CisJaW50IGk7CisKKwltZW1zZXQoY29ubmVjdG9ycywgMCwgc2l6ZW9mKGRybU1vZGVD b25uZWN0b3JQdHIpICogSUdUX01BWF9QSVBFUyk7CisKKwlmb3JfZWFjaF9jb25uZWN0ZWRfb3V0 cHV0KCZkYXRhLT5kaXNwbGF5LCBvdXRwdXQpIHsKKwkJY3J0Y19pZCA9IDA7CisJCWZvciAoaSA9 IDA7IGkgPCBtb2RlX3Jlc291cmNlcy0+Y291bnRfY29ubmVjdG9yczsgaSsrKSB7CisJCQlkcm1N b2RlQ29ubmVjdG9yICpjb25uZWN0b3I7CisKKwkJCWNvbm5lY3RvciA9IGRybU1vZGVHZXRDb25u ZWN0b3JDdXJyZW50KGRhdGEtPmRybV9mZCwKKwkJCQkgICAgICAgbW9kZV9yZXNvdXJjZXMtPmNv bm5lY3RvcnNbaV0pOworCisJCQlpZiAoIWNvbm5lY3RvcikgeworCQkJCWlndF93YXJuKCJjb3Vs ZCBub3QgZ2V0IGNvbm5lY3RvciAlaTogJXNcbiIsCisJCQkJCW1vZGVfcmVzb3VyY2VzLT5jb25u ZWN0b3JzW2ldLCBzdHJlcnJvcihlcnJubykpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlp ZiAoY29ubmVjdG9yLT5jb25uZWN0aW9uID09IERSTV9NT0RFX0NPTk5FQ1RFRCkgeworCQkJCWlm IChjcnRjX2lkID09IHBpcGUpIHsKKwkJCQkJY29ubmVjdG9yc1twaXBlXSA9IChkcm1Nb2RlQ29u bmVjdG9yUHRyKWNvbm5lY3RvcjsKKwkJCQl9CisJCQkJY3J0Y19pZCsrOworCQkJfQorCQkJZWxz ZQorCQkJCWRybU1vZGVGcmVlQ29ubmVjdG9yKGNvbm5lY3Rvcik7CisJCX0KKwkJaWYgKCgrK3Bp cGUpID09IElHVF9NQVhfUElQRVMpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHJl bGVhc2VfY29ubmVjdG9ycyhkcm1Nb2RlQ29ubmVjdG9yUHRyICpjb25uZWN0b3JzKQoreworCWlu dCBpOworCWZvciAoaSA9IDA7IGkgPCBJR1RfTUFYX1BJUEVTOyBpKyspIHsKKwkJaWYgKGNvbm5l Y3RvcnNbaV0pCisJCQlkcm1Nb2RlRnJlZUNvbm5lY3Rvcihjb25uZWN0b3JzW2ldKTsKKwl9Cit9 CisKKyNkZWZpbmUgTUlOX0RVUkFUSU9OX1NFQyA1LjAwCisjZGVmaW5lIE1JTl9JVEVSQVRJT05T IDIwCisKK3N0YXRpYyB2b2lkIHN0cmVzcyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlzdHJ1Y3Qg dGltZXNwZWMgc3RhcnQsIGVuZDsKKwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKwlpbnQgcmV0Owor CWludCBwaXBlOworCWludCBpdGVyYXRpb25zID0gMDsKKwlib29sIG5lZWRfY29udGludWU7CisK KwlpZ3RfZ2V0dGltZSgmc3RhcnQpOworCisJZG8geworCQkvKgorCQkgKiBJbmNyZW1lbnQgcGlw ZSBvbmx5IGZvciBjb25uZWN0ZWQgb3V0cHV0cywKKwkJICogZm9yIGVhY2ggY29ubmVjdGVkIG91 dHB1dCB3ZSBzaG91bGQgYXNzaWduIGEKKwkJICogZGlmZmVyZW50IHBpcGUuCisJCSAqLworCQlw aXBlID0gMDsKKwkJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0 cHV0KSB7CisJCQlpZ3RfYXNzZXJ0X2YoZGF0YS0+ZGlzcGxheS5waXBlc1twaXBlXS5uX3BsYW5l cyA8IE1BWF9QTEFORVMsCisJCQkJIkN1cnJlbnRseSB3ZSBkb24ndCBzdXBwb3J0IG1vcmUgdGhh biAlZCBwbGFuZXMhIiwgTUFYX1BMQU5FUyk7CisKKwkJCWlndF9pbmZvKCJQaXBlICVzICVkIHBs YW5lcywgdXNpbmcgbW9kZToiLCBrbXN0ZXN0X3BpcGVfbmFtZShwaXBlKSwKKwkJCQkJZGF0YS0+ bnVtX3BsYW5lc1twaXBlXSk7CisKKwkJCWttc3Rlc3RfZHVtcF9tb2RlKGRhdGEtPmhpZ2hlc3Rf bW9kZVtwaXBlXSk7CisKKwkJCXBpcGVfY3JjID0gaWd0X3BpcGVfY3JjX25ldyhkYXRhLT5kcm1f ZmQsIHBpcGUsCisJCQkJSU5URUxfUElQRV9DUkNfU09VUkNFX0FVVE8pOworCisJCQlyZXQgPSBw bGFuZV9zdHJlc3MoZGF0YSwgb3V0cHV0LCBwaXBlLCBkYXRhLT5oaWdoZXN0X21vZGVbcGlwZV0p OworCisJCQlpZ3RfcGlwZV9jcmNfZnJlZShwaXBlX2NyYyk7CisKKwkJCWlmIChyZXQgfHwgKCsr cGlwZSA9PSBJR1RfTUFYX1BJUEVTKSkKKwkJCQlicmVhazsKKwkJfQorCQlpZ3RfZ2V0dGltZSgm ZW5kKTsKKwkJaXRlcmF0aW9ucysrOworCQluZWVkX2NvbnRpbnVlID0gaWd0X3RpbWVfZWxhcHNl ZCgmc3RhcnQsICZlbmQpIDwgTUlOX0RVUkFUSU9OX1NFQzsKKwl9IHdoaWxlICgobmVlZF9jb250 aW51ZSB8fCBpdGVyYXRpb25zIDwgTUlOX0lURVJBVElPTlMpKTsKKworCit9CisKK3N0YXRpYyB2 b2lkIHN0YXJ0X2dwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKQoreworCWludCBpID0gMDsK KwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsKKworCWlmICghZGF0YS0+ZGV2aWQpIHsKKwkJZGF0YS0+ ZGV2aWQgPSBpbnRlbF9nZXRfZHJtX2RldmlkKGRhdGEtPmRybV9mZCk7CisJCWlndF9yZXF1aXJl X2dlbShkYXRhLT5kcm1fZmQpOworCisJCWRhdGEtPmJ1Zm1nciA9IGRybV9pbnRlbF9idWZtZ3Jf Z2VtX2luaXQoZGF0YS0+ZHJtX2ZkLCA0MDk2KTsKKwkJaWd0X2Fzc2VydChkYXRhLT5idWZtZ3Ip OworCX0KKworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQoJmRhdGEtPmRpc3BsYXksIG91dHB1 dCkgeworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5kYXRhID0gZGF0YTsKKwkJZGF0YS0+Z3B1X2Nv bnRleHRbaV0ucGlwZSA9IGk7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0LnggPSAw OworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5ibHRfcmVjdC55ID0gMDsKKwkJZGF0YS0+Z3B1X2Nv bnRleHRbaV0uYmx0X3JlY3QudyA9IDA7CisJCWRhdGEtPmdwdV9jb250ZXh0W2ldLmJsdF9yZWN0 LmggPSAwOworCQlkYXRhLT5ncHVfY29udGV4dFtpXS5iYXRjaCA9IGludGVsX2JhdGNoYnVmZmVy X2FsbG9jKGRhdGEtPmJ1Zm1nciwgZGF0YS0+ZGV2aWQpOworCQlwdGhyZWFkX2NyZWF0ZSgmZGF0 YS0+Z3B1X3RocmVhZFtpXSwgTlVMTCwgZ3B1X2xvYWQsICh2b2lkKikmZGF0YS0+Z3B1X2NvbnRl eHRbaV0pOworCQlpZiAoKytpID09IElHVF9NQVhfUElQRVMpCisJCQlicmVhazsKKwl9Cit9CisK K3N0YXRpYyB2b2lkIHN0b3BfZ3B1X3RocmVhZHMoc3RydWN0IGRhdGEgKmRhdGEpCit7CisJaW50 IGkgPSAwOworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRw dXQoJmRhdGEtPmRpc3BsYXksIG91dHB1dCkgeworCQlkYXRhLT5ncHVfdGhyZWFkX3N0b3BbaV0g PSB0cnVlOworCQlwdGhyZWFkX2pvaW4oZGF0YS0+Z3B1X3RocmVhZFtpXSwgTlVMTCk7CisJCWlu dGVsX2JhdGNoYnVmZmVyX2ZyZWUoZGF0YS0+Z3B1X2NvbnRleHRbaV0uYmF0Y2gpOworCQlpZiAo KytpID09IElHVF9NQVhfUElQRVMpCisJCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0 YXJ0X2NwdV90aHJlYWRzKHN0cnVjdCBkYXRhICpkYXRhKQoreworCWludCBpOworCWZvciAoaSA9 IDA7IGkgPCBkYXRhLT5udW1iZXJfb2ZfY29yZXM7aSsrKSB7CisJCWRhdGEtPmNwdV9jb250ZXh0 W2ldLmJ1ZjEgPSBtYWxsb2MoQlVGX1NJWkUpOworCQlkYXRhLT5jcHVfY29udGV4dFtpXS5idWYy ID0gbWFsbG9jKEJVRl9TSVpFKTsKKwkJZGF0YS0+Y3B1X2NvbnRleHRbaV0uaWQgPSBpOworCQlk YXRhLT5jcHVfY29udGV4dFtpXS5kYXRhID0gZGF0YTsKKwkJcHRocmVhZF9jcmVhdGUoJmRhdGEt PmNwdV90aHJlYWRbaV0sIE5VTEwsIGNwdV9sb2FkLCAodm9pZCopJmRhdGEtPmNwdV9jb250ZXh0 W2ldKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHN0b3BfY3B1X3RocmVhZHMoc3RydWN0IGRhdGEg KmRhdGEpCit7CisJaW50IGk7CisJZm9yIChpID0gMDsgaSA8IGRhdGEtPm51bWJlcl9vZl9jb3Jl cztpKyspIHsKKwkJZGF0YS0+Y3B1X3RocmVhZF9zdG9wW2ldID0gdHJ1ZTsKKwkJcHRocmVhZF9q b2luKGRhdGEtPmNwdV90aHJlYWRbaV0sIE5VTEwpOworCQlmcmVlKGRhdGEtPmNwdV9jb250ZXh0 W2ldLmJ1ZjEpOworCQlmcmVlKGRhdGEtPmNwdV9jb250ZXh0W2ldLmJ1ZjIpOworCX0KK30KKwor c3RhdGljIHZvaWQgY3JlYXRlX2ZyYW1lYnVmZmVycyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlp bnQgaSwgajsKKwl1aW50NjRfdCBjdXJzb3Jfd2lkdGgsIGN1cnNvcl9oZWlnaHQ7CisJaWd0X291 dHB1dF90ICpvdXRwdXQ7CisKKwlkb19vcl9kaWUoZHJtR2V0Q2FwKGRhdGEtPmRybV9mZCwgRFJN X0NBUF9DVVJTT1JfV0lEVEgsICZjdXJzb3Jfd2lkdGgpKTsKKwlkb19vcl9kaWUoZHJtR2V0Q2Fw KGRhdGEtPmRybV9mZCwgRFJNX0NBUF9DVVJTT1JfSEVJR0hULCAmY3Vyc29yX2hlaWdodCkpOwor CisJaSA9IDA7CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1dCgmZGF0YS0+ZGlzcGxheSwgb3V0 cHV0KSB7CisJCWlmICghZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkKSB7CisJCQlpZ3RfY3JlYXRl X2NvbG9yX2ZiKGRhdGEtPmRybV9mZCwgY3Vyc29yX3dpZHRoLCBjdXJzb3JfaGVpZ2h0LAorCQkJ CQlEUk1fRk9STUFUX0FSR0I4ODg4LAorCQkJCQlMT0NBTF9EUk1fRk9STUFUX01PRF9OT05FLAor CQkJCQkxLjAsMC4wLDAuMCwKKwkJCQkJJmRhdGEtPmN1cnNvcl9mYltpXSk7CisJCX0KKwkJZm9y IChqID0gMDsgaiA8IGRhdGEtPm51bV9wbGFuZXNbaV07aisrKSB7CisJCQlpZiAoIWRhdGEtPmZi W2kgKiBNQVhfUExBTkVTICsgal0uZmJfaWQpIHsKKwkJCQlpZ3RfY3JlYXRlX2NvbG9yX3BhdHRl cm5fZmIoZGF0YS0+ZHJtX2ZkLAorCQkJCSAgICBkYXRhLT5oaWdoZXN0X21vZGVbaV0tPmhkaXNw bGF5LAorCQkJCSAgICBkYXRhLT5oaWdoZXN0X21vZGVbaV0tPnZkaXNwbGF5LAorCQkJCSAgICBk YXRhLT5mb3JtYXQsCisJCQkJICAgIGRhdGEtPm1vZGlmaWVyLAorCQkJCSAgICAwLjAsIDEuMCwg MC4wLCAmZGF0YS0+ZmJbaSAqIE1BWF9QTEFORVMgKyBqXSk7CisJCQl9CisJCX0KKwkJaWYgKCsr aSA9PSBJR1RfTUFYX1BJUEVTKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBkZXN0 cm95X2ZyYW1lYnVmZmVycyhzdHJ1Y3QgZGF0YSAqZGF0YSkKK3sKKwlpbnQgaSwgajsKKwlpZ3Rf b3V0cHV0X3QgKm91dHB1dDsKKworCWkgPSAwOworCWZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQo JmRhdGEtPmRpc3BsYXksIG91dHB1dCkgeworCQlmb3IgKGogPSAwO2ogPCBNQVhfUExBTkVTOyBq KyspIHsKKwkJCWlmIChkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdLmZiX2lkKSB7CisJCQkJ aWd0X3BsYW5lX3NldF9mYigmZGF0YS0+ZGlzcGxheS5waXBlc1tpXS5wbGFuZXNbal0sIE5VTEwp OworCQkJCWlndF9yZW1vdmVfZmIoZGF0YS0+ZGlzcGxheS5kcm1fZmQsICZkYXRhLT5mYltpICog TUFYX1BMQU5FUyArIGpdKTsKKwkJCQlkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdLmZiX2lk ID0gMDsKKwkJCX0KKwkJfQorCQlpZiAoZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkKSB7CisJCQlp Z3RfcmVtb3ZlX2ZiKGRhdGEtPmRpc3BsYXkuZHJtX2ZkLCAmZGF0YS0+Y3Vyc29yX2ZiW2ldKTsK KwkJCWRhdGEtPmN1cnNvcl9mYltpXS5mYl9pZCA9IDA7CisJCX0KKwkJaWYgKCsraSA9PSBJR1Rf TUFYX1BJUEVTKQorCQkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmVwYXJlX3Rlc3Qo c3RydWN0IGRhdGEgKmRhdGEsIGJvb2wgb3ZlcnJpZGUsIGJvb2wgY3B1LCBib29sIGdwdSkKK3sK KwlpbnQgaSxqOworCWlndF9vdXRwdXRfdCAqb3V0cHV0OworCisJZGF0YS0+bnVtYmVyX29mX2Nv cmVzID0gbWluKHN5c2NvbmYoX1NDX05QUk9DRVNTT1JTX09OTE4pLCBNQVhfQ09SRVMpOworCisJ Zm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQRVM7IGkrKykgeworCQlmb3IgKGogPSAwO2ogPCBN QVhfUExBTkVTOyBqKyspCisJCQlkYXRhLT5mYltpICogTUFYX1BMQU5FUyArIGpdLmZiX2lkID0g MDsKKwkJZGF0YS0+Y3Vyc29yX2ZiW2ldLmZiX2lkID0gMDsKKwkJZGF0YS0+bnVtX3BsYW5lc1tp XSA9IC0xOworCQlkYXRhLT5sYXN0X21vZGVbaV0gPSBOVUxMOworCX0KKwlpZiAoY3B1KSB7CisJ CXN0YXJ0X2NwdV90aHJlYWRzKGRhdGEpOworCX0KKworCWRhdGEtPm1vZGVfcmVzb3VyY2VzID0g ZHJtTW9kZUdldFJlc291cmNlcyhkYXRhLT5kcm1fZmQpOworCWlmICghZGF0YS0+bW9kZV9yZXNv dXJjZXMpIHsKKwkJaWd0X3dhcm4oImRybU1vZGVHZXRSZXNvdXJjZXMgZmFpbGVkOiAlc1xuIiwg c3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKworCW1lbXNldChkYXRhLT5oaWdoZXN0 X21vZGUsIDAsIHNpemVvZihkcm1Nb2RlTW9kZUluZm8gKikgKiBJR1RfTUFYX1BJUEVTKTsKKwor CWZpbGxfY29ubmVjdG9yX3RvX3BpcGVfYXJyYXkoZGF0YSwgZGF0YS0+bW9kZV9yZXNvdXJjZXMs IGRhdGEtPmNvbm5lY3RvcnMpOworCisJaSA9IDA7CisJZm9yX2VhY2hfY29ubmVjdGVkX291dHB1 dCgmZGF0YS0+ZGlzcGxheSwgb3V0cHV0KSB7CisJCWRybU1vZGVDb25uZWN0b3IgKmNvbm5lY3Rv ciA9IChkcm1Nb2RlQ29ubmVjdG9yICopZGF0YS0+Y29ubmVjdG9yc1tpXTsKKwkJaWYgKCFjb25u ZWN0b3IpCisJCQljb250aW51ZTsKKwkJaWYgKCFkYXRhLT5oaWdoZXN0X21vZGVbaV0pIHsKKwkJ CWlmICghb3ZlcnJpZGUgJiYgY29ubmVjdG9yLT5jb3VudF9tb2RlcykgeworCQkJCWRhdGEtPmhp Z2hlc3RfbW9kZVtpXSA9IGZpbmRfaGlnaGVzdF9tb2RlKGNvbm5lY3Rvcik7CisJCQl9CisJCQll bHNlCisJCQkJZGF0YS0+aGlnaGVzdF9tb2RlW2ldID0gJnVoZF9tb2RlXzYwaHo7CisJCX0KKwkJ aWYgKCsraSA9PSBJR1RfTUFYX1BJUEVTKQorCQkJYnJlYWs7CisJfQorCisJLyoKKwkgKiBVbnRp bCB3ZSBmaWd1cmUgb3V0IG1heGltdW0gYW1vdW50IG9mIHBsYW5lcywKKwkgKiB1c2UgdGhlIG9u ZSBkZWNsYXJlZCBieSBrZXJuZWwuCisJICovCisJZm9yIChpID0gMDsgaSA8IElHVF9NQVhfUElQ RVM7IGkrKykgeworCQlpZiAoZGF0YS0+bnVtX3BsYW5lc1tpXSA9PSAtMSkKKwkJCWRhdGEtPm51 bV9wbGFuZXNbaV0gPSBkYXRhLT5kaXNwbGF5LnBpcGVzW2ldLm5fcGxhbmVzOworCX0KKwlpZiAo Z3B1KSB7CisJCXN0YXJ0X2dwdV90aHJlYWRzKGRhdGEpOworCX0KKwljcmVhdGVfZnJhbWVidWZm ZXJzKGRhdGEpOworfQorCitzdGF0aWMgdm9pZCBmaW5pc2hfdGVzdChzdHJ1Y3QgZGF0YSAqZGF0 YSwgYm9vbCBvdmVycmlkZSwgYm9vbCBjcHUsIGJvb2wgZ3B1KQoreworCWludCBpOworCisJaWYg KGdwdSkgeworCQlzdG9wX2dwdV90aHJlYWRzKGRhdGEpOworCX0KKwkvKgorCSAqIEFzIHdlIGNo YW5nZSB0aWxpbmcvZm9ybWF0IHdlIG5lZWQgYSBuZXcgRkIKKwkgKi8KKwlkZXN0cm95X2ZyYW1l YnVmZmVycyhkYXRhKTsKKwlmb3IgKGkgPSAwOyBpIDwgSUdUX01BWF9QSVBFUzsgaSsrKSB7CisJ CWRhdGEtPm51bV9wbGFuZXNbaV0gPSAtMTsKKwkJZGF0YS0+bGFzdF9tb2RlW2ldID0gTlVMTDsK Kwl9CisJaWYgKGNwdSkgeworCQlzdG9wX2NwdV90aHJlYWRzKGRhdGEpOworCX0KKwlyZWxlYXNl X2Nvbm5lY3RvcnMoZGF0YS0+Y29ubmVjdG9ycyk7CisKKwlkcm1Nb2RlRnJlZVJlc291cmNlcyhk YXRhLT5tb2RlX3Jlc291cmNlcyk7Cit9CisKK3N0cnVjdCBkYXRhIGRhdGEgPSB7CisJLmZvcm1h dCA9IERSTV9GT1JNQVRfWFJHQjg4ODgsCisJLm1vZGlmaWVyID0gRFJNX0ZPUk1BVF9NT0RfTElO RUFSLAorCS5kZXZpZCA9IDAsCit9OworCitlbnVtIHsKKyAgICBQTEFORVNfT05MWSA9IDAsCisg ICAgQ1BVX0xPQUQsCisgICAgR1BVX0xPQUQsCisgICAgTU9ERV9PVkVSUklERSwKKyAgICBBTExf TU9ERVMgPSBNT0RFX09WRVJSSURFCit9IHRlc3RfYml0czsKKworc3RhdGljIHZvaWQgc2V0X3Bh cmFtcyh1aW50OF90IGJpdHMsIGJvb2wgKm1vZGVfb3ZlcnJpZGUsIGJvb2wgKmNwdV9sb2FkLCBi b29sICpncHVfbG9hZCkKK3sKKwkqY3B1X2xvYWQgPSAoYml0cyAmICgxIDw8IENQVV9MT0FEKSkg IT0gMCA/IHRydWUgOiBmYWxzZTsKKwkqZ3B1X2xvYWQgPSAoYml0cyAmICgxIDw8IEdQVV9MT0FE KSkgIT0gMCA/IHRydWUgOiBmYWxzZTsKKwkqbW9kZV9vdmVycmlkZSA9IChiaXRzICYgKDEgPDwg TU9ERV9PVkVSUklERSkpICE9IDAgPyB0cnVlIDogZmFsc2U7Cit9CisKKworaWd0X21haW4KK3sK Kwlib29sIG1vZGVfb3ZlcnJpZGU7CisJYm9vbCBjcHVfbG9hZDsKKwlib29sIGdwdV9sb2FkOwor CXVpbnQ4X3QgdGVzdF9jb21iID0gUExBTkVTX09OTFk7CisJdWludDhfdCBmb3JtYXRfaWR4ID0g MCwgdGlsaW5nX2lkeCA9IDA7CisJdWludDY0X3QgbWF4X2NvbWJpbmF0aW9ucyA9IDEgPDwgQUxM X01PREVTOworCisJaWd0X2ZpeHR1cmUgeworCQlkYXRhLmRybV9mZCA9IGRhdGEuZGlzcGxheS5k cm1fZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9BTlkpOworCisJCWttc3Rlc3Rf c2V0X3Z0X2dyYXBoaWNzX21vZGUoKTsKKworCQlpZ3RfZGlzcGxheV9yZXF1aXJlKCZkYXRhLmRp c3BsYXksIGRhdGEuZGlzcGxheS5kcm1fZmQpOworCQlpZ3RfcmVxdWlyZShkYXRhLmRpc3BsYXku aXNfYXRvbWljKTsKKwkJaWd0X2Rpc3BsYXlfcmVxdWlyZV9vdXRwdXQoJmRhdGEuZGlzcGxheSk7 CisJfQorCisJZG8geworCQlzZXRfcGFyYW1zKHRlc3RfY29tYiwgJm1vZGVfb3ZlcnJpZGUsICZj cHVfbG9hZCwgJmdwdV9sb2FkKTsKKwkJLyoKKwkJICogRG8gYWxsIGNvbWJpbmF0aW9ucyBvZiBt b2RlX292ZXJyaWRlLCBjcHVfbG9hZCwgZ3B1X2xvYWQgYW5kCisJCSAqIGFsbCBmb3JtYXQgYW5k IHRpbGluZyBmb3IgZWFjaCBvZiB0aG9zZS4KKwkJICovCisJCWZvciAoZm9ybWF0X2lkeCA9IDA7 IGZvcm1hdF9pZHggPCBOX0ZPUk1BVFM7IGZvcm1hdF9pZHgrKykKKwkJCWZvciAodGlsaW5nX2lk eCA9IDA7IHRpbGluZ19pZHggPCBOX1RJTElOR19NRVRIT0RTOyB0aWxpbmdfaWR4KyspIHsKKwkJ CQlkYXRhLmZvcm1hdCA9IGZvcm1hdHNbZm9ybWF0X2lkeF07CisJCQkJZGF0YS5tb2RpZmllciA9 IHRpbGluZ3NbdGlsaW5nX2lkeF07CisKKwkJCQlpZ3RfZml4dHVyZSB7CisJCQkJCXByZXBhcmVf dGVzdCgmZGF0YSwgbW9kZV9vdmVycmlkZSwgY3B1X2xvYWQsIGdwdV9sb2FkKTsKKwkJCQl9CisK KwkJCQlpZ3Rfc3VidGVzdF9mKCJzdHJlc3MlcyVzJXMtJXMtJXMiLAorCQkJCSAgICAgIG1vZGVf b3ZlcnJpZGUgPT0gZmFsc2UgPyAiIiA6ICItbW9kZS1vdmVycmlkZSIsCisJCQkJICAgICAgY3B1 X2xvYWQgPT0gZmFsc2UgPyAiIiA6ICItY3B1LWxvYWQiLAorCQkJCSAgICAgIGdwdV9sb2FkID09 IGZhbHNlID8gIiIgOiAiLWdwdS1sb2FkIiwKKwkJCQkgICAgICBmb3JtYXRfc3RyKGZvcm1hdF9p ZHgpLAorCQkJCSAgICAgIHRpbGluZ19zdHIodGlsaW5nX2lkeCkpIHsKKworCQkJCQlzdHJlc3Mo JmRhdGEpOworCisJCQkJfQorCisJCQkJaWd0X2ZpeHR1cmUgeworCQkJCQlmaW5pc2hfdGVzdCgm ZGF0YSwgbW9kZV9vdmVycmlkZSwgY3B1X2xvYWQsIGdwdV9sb2FkKTsKKwkJCQl9CisJCQl9CisJ fSB3aGlsZSAoKyt0ZXN0X2NvbWIgPCBtYXhfY29tYmluYXRpb25zICk7CisKKwlpZ3RfZml4dHVy ZSB7CisKKwkJaWd0X2Rpc3BsYXlfZmluaSgmZGF0YS5kaXNwbGF5KTsKKwl9Cit9ClwgTm8gbmV3 bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdGVzdHMvbWVzb24uYnVpbGQgYi90ZXN0 cy9tZXNvbi5idWlsZAppbmRleCA5MDE1ZjgwOS4uYzU4NjY0MmMgMTAwNjQ0Ci0tLSBhL3Rlc3Rz L21lc29uLmJ1aWxkCisrKyBiL3Rlc3RzL21lc29uLmJ1aWxkCkBAIC00Niw2ICs0Niw3IEBAIHRl c3RfcHJvZ3MgPSBbCiAJJ2ttc19wbGFuZV9sb3dyZXMnLAogCSdrbXNfcGxhbmVfbXVsdGlwbGUn LAogCSdrbXNfcGxhbmVfc2NhbGluZycsCisJJ2ttc19wbGFuZV9zdHJlc3MnLAogCSdrbXNfcHJv cF9ibG9iJywKIAkna21zX3Byb3BlcnRpZXMnLAogCSdrbXNfcHNyJywKLS0gCjIuMTcuMQoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWls aW5nIGxpc3QKaWd0LWRldkBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pZ3QtZGV2