From mboxrd@z Thu Jan 1 00:00:00 1970 From: George Dunlap Subject: [PATCH] [RFC] Credit2 scheduler prototype Date: Mon, 7 Dec 2009 17:02:22 +0000 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=000e0cdfd704c6493d047a266b25 Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com, Keir Fraser List-Id: xen-devel@lists.xenproject.org --000e0cdfd704c6493d047a266b25 Content-Type: text/plain; charset=ISO-8859-1 I'm attaching patches for the rudimentary new credit2 scheduler which I discussed at the Summit. It's definitely still at a developmental stage, but it's in a state where people should be able to contribute now. I've put up a wiki page to help coordinate development here: http://wiki.xensource.com/xenwiki/Credit2_Scheduler_Development Some caveats: * There is no inter-socket load balancing. This is one of the work items to be done. * It works on my 2-core box, but deadlocks on my 4-core box; cause still to be determined. The wiki page lists a number of semi-independent lines of development that people can take. Let me know if you're interested in any of them, and if you have any questions, and I can elaborate. Keir (and everyone), I think at this point it would be a good idea to start a credit2 development branch in ext/ so we can keep a revision history. Thoughts? -George --000e0cdfd704c6493d047a266b25 Content-Type: text/x-diff; charset=US-ASCII; name="credit2-hypervisor.diff" Content-Disposition: attachment; filename="credit2-hypervisor.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g2xhoy6m0 ZGlmZiAtciAyM2QzNGMzYmE0YjcgeGVuL2FyY2gveDg2L2RvbWFpbi5jCi0tLSBhL3hlbi9hcmNo L3g4Ni9kb21haW4uYwlNb24gTm92IDMwIDE2OjEzOjAxIDIwMDkgLTA2MDAKKysrIGIveGVuL2Fy Y2gveDg2L2RvbWFpbi5jCU1vbiBEZWMgMDcgMTY6NTk6NTMgMjAwOSArMDAwMApAQCAtMTQyNiw5 ICsxNDI2LDkgQEAKIAogICAgIHNldF9jdXJyZW50KG5leHQpOwogCi0gICAgaWYgKCAocGVyX2Nw dShjdXJyX3ZjcHUsIGNwdSkgPT0gbmV4dCkgfHwgaXNfaWRsZV92Y3B1KG5leHQpICkKKyAgICBp ZiAoIChwZXJfY3B1KGN1cnJfdmNwdSwgY3B1KSA9PSBuZXh0KSAvKiB8fCBpc19pZGxlX3ZjcHUo bmV4dCkgKi8pCiAgICAgewotICAgICAgICBsb2NhbF9pcnFfZW5hYmxlKCk7CisgICAgICAgIDsv L2xvY2FsX2lycV9lbmFibGUoKTsKICAgICB9CiAgICAgZWxzZQogICAgIHsKQEAgLTE0NDUsOSAr MTQ0NSw4IEBACiAgICAgICAgICAgICAgICAgd3JpdGVfZWZlcihlZmVyIHwgRUZFUl9TQ0UpOwog ICAgICAgICB9CiAjZW5kaWYKLQogICAgICAgICAvKiBSZS1lbmFibGUgaW50ZXJydXB0cyBiZWZv cmUgcmVzdG9yaW5nIHN0YXRlIHdoaWNoIG1heSBmYXVsdC4gKi8KLSAgICAgICAgbG9jYWxfaXJx X2VuYWJsZSgpOworICAgICAgICAvL2xvY2FsX2lycV9lbmFibGUoKTsKIAogICAgICAgICBpZiAo ICFpc19odm1fdmNwdShuZXh0KSApCiAgICAgICAgIHsKQEAgLTE0NTgsNiArMTQ1NywxMyBAQAog CiAgICAgY29udGV4dF9zYXZlZChwcmV2KTsKIAorICAgIGxvY2FsX2lycV9lbmFibGUoKTsKKwor ICAgIC8qIElmIHdlJ3ZlIGRlYWRsb2NrZWQgc29tZWhvdyBhbmQgdGVtcG9yYXJpbHkgbWFkZSBh IFZNIHVucnVubmFibGUsCisgICAgICogY2xlYXIgdGhlIGJpdCBhbmQgY2FsbCB3YWtlLiAqLwor ICAgIGlmICggdGVzdF9hbmRfY2xlYXJfYml0KF9WUEZfZGVhZGxvY2ssICZwcmV2LT5wYXVzZV9m bGFncyApICkKKyAgICAgICAgIHZjcHVfd2FrZShwcmV2KTsKKwogICAgIGlmIChwcmV2ICE9IG5l eHQpCiAgICAgICAgIHVwZGF0ZV9ydW5zdGF0ZV9hcmVhKG5leHQpOwogCmRpZmYgLXIgMjNkMzRj M2JhNGI3IHhlbi9hcmNoL3g4Ni9ubWkuYwotLS0gYS94ZW4vYXJjaC94ODYvbm1pLmMJTW9uIE5v diAzMCAxNjoxMzowMSAyMDA5IC0wNjAwCisrKyBiL3hlbi9hcmNoL3g4Ni9ubWkuYwlNb24gRGVj IDA3IDE2OjU5OjUzIDIwMDkgKzAwMDAKQEAgLTM5MSw3ICszOTEsNiBAQAogICAgIHUzMiBpZCA9 IGNwdV9waHlzaWNhbF9pZChjcHUpOwogCiAgICAgcHJpbnRrKCJUcmlnZ2VyaW5nIE5NSSBvbiBB UElDIElEICV4XG4iLCBpZCk7Ci0gICAgZGVidWd0cmFjZV9kdW1wKCk7CiAKICAgICBsb2NhbF9p cnFfZGlzYWJsZSgpOwogICAgIGFwaWNfd2FpdF9pY3JfaWRsZSgpOwpAQCAtNDI2LDExICs0MjUs MTIgQEAKICAgICAgICAgaWYgKCB0aGlzX2NwdShhbGVydF9jb3VudGVyKSA9PSA1Km5taV9oeiAp CiAgICAgICAgIHsKICAgICAgICAgICAgIGNvbnNvbGVfZm9yY2VfdW5sb2NrKCk7CisgICAgICAg ICAgICBzcGluX2xvY2soJnBhbmljX2xvY2spOwogICAgICAgICAgICAgcHJpbnRrKCJXYXRjaGRv ZyB0aW1lciBkZXRlY3RzIHRoYXQgQ1BVJWQgaXMgc3R1Y2shXG4iLAogICAgICAgICAgICAgICAg ICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0gICAgICAgICAgICBzcGluX2xvY2soJnBhbmljX2xv Y2spOwogICAgICAgICAgICAgc2hvd19leGVjdXRpb25fc3RhdGUocmVncyk7CiAgICAgICAgICAg ICBkZWJ1Z3RyYWNlX2R1bXAoKTsKKyAgICAgICAgICAgIHNwaW5fdW5sb2NrKCZwYW5pY19sb2Nr KTsKICAgICAgICAgICAgIGF0b21pY19pbmMoJmFsbF9wYW5pYyk7CiAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgaW50IGNwdTsKQEAgLTQ0MSw3ICs0NDEsNiBAQAogICAgICAgICAgICAg ICAgICAgICBkb19ubWlfdHJpZ2dlcl9jcHUoY3B1KTsKICAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICB9Ci0gICAgICAgICAgICBzcGluX3VubG9jaygmcGFuaWNfbG9jayk7CiAgICAgICAg ICAgICB3aGlsZSgxKTsKICAgICAgICAgICAgIC8vZmF0YWxfdHJhcChUUkFQX25taSwgcmVncyk7 CiAgICAgICAgIH0KZGlmZiAtciAyM2QzNGMzYmE0YjcgeGVuL2NvbW1vbi9NYWtlZmlsZQotLS0g YS94ZW4vY29tbW9uL01ha2VmaWxlCU1vbiBOb3YgMzAgMTY6MTM6MDEgMjAwOSAtMDYwMAorKysg Yi94ZW4vY29tbW9uL01ha2VmaWxlCU1vbiBEZWMgMDcgMTY6NTk6NTMgMjAwOSArMDAwMApAQCAt MTMsNiArMTMsNyBAQAogb2JqLXkgKz0gcGFnZV9hbGxvYy5vCiBvYmoteSArPSByYW5nZXNldC5v CiBvYmoteSArPSBzY2hlZF9jcmVkaXQubworb2JqLXkgKz0gc2NoZWRfY3JlZGl0Mi5vCiBvYmot eSArPSBzY2hlZF9zZWRmLm8KIG9iai15ICs9IHNjaGVkdWxlLm8KIG9iai15ICs9IHNodXRkb3du Lm8KZGlmZiAtciAyM2QzNGMzYmE0YjcgeGVuL2NvbW1vbi9zY2hlZF9jcmVkaXQyLmMKLS0tIC9k ZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIveGVuL2NvbW1vbi9z Y2hlZF9jcmVkaXQyLmMJTW9uIERlYyAwNyAxNjo1OTo1MyAyMDA5ICswMDAwCkBAIC0wLDAgKzEs OTkyIEBACisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAoQykgMjAwOSAtIEdlb3JnZSBEdW5s YXAgLSBDaXRyaXggU3lzdGVtcyBSJkQgVUssIEx0ZAorICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAq CisgKiAgICAgICAgRmlsZTogY29tbW9uL2NzY2hlZF9jcmVkaXQyLmMKKyAqICAgICAgQXV0aG9y OiBHZW9yZ2UgRHVubGFwCisgKgorICogRGVzY3JpcHRpb246IENyZWRpdC1iYXNlZCBTTVAgQ1BV IHNjaGVkdWxlcgorICogQmFzZWQgb24gYW4gZWFybGllciB2ZXJzb24gYnkgRW1tYW51ZWwgQWNr YW91eS4KKyAqLworCisjaW5jbHVkZSA8eGVuL2NvbmZpZy5oPgorI2luY2x1ZGUgPHhlbi9pbml0 Lmg+CisjaW5jbHVkZSA8eGVuL2xpYi5oPgorI2luY2x1ZGUgPHhlbi9zY2hlZC5oPgorI2luY2x1 ZGUgPHhlbi9kb21haW4uaD4KKyNpbmNsdWRlIDx4ZW4vZGVsYXkuaD4KKyNpbmNsdWRlIDx4ZW4v ZXZlbnQuaD4KKyNpbmNsdWRlIDx4ZW4vdGltZS5oPgorI2luY2x1ZGUgPHhlbi9wZXJmYy5oPgor I2luY2x1ZGUgPHhlbi9zY2hlZC1pZi5oPgorI2luY2x1ZGUgPHhlbi9zb2Z0aXJxLmg+CisjaW5j bHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPHhlbi9lcnJuby5oPgorI2luY2x1ZGUgPHhl bi90cmFjZS5oPgorCisjaWYgX19pMzg2X18KKyNkZWZpbmUgUFJJX3N0aW1lICJsbGQiCisjZWxz ZQorI2RlZmluZSBQUklfc3RpbWUgImxkIgorI2VuZGlmCisKKyNkZWZpbmUgZDJwcmludGsoeC4u LikKKy8vI2RlZmluZSBkMnByaW50ayBwcmludGsKKworI2RlZmluZSBUUkNfQ1NDSEVEMl9USUNL ICAgICAgICBUUkNfU0NIRURfQ0xBU1MgKyAxCisjZGVmaW5lIFRSQ19DU0NIRUQyX1JVTlFfUE9T ICAgIFRSQ19TQ0hFRF9DTEFTUyArIDIKKyNkZWZpbmUgVFJDX0NTQ0hFRDJfQ1JFRElUX0JVUk4g VFJDX1NDSEVEX0NMQVNTICsgMworI2RlZmluZSBUUkNfQ1NDSEVEMl9DUkVESVRfQUREICBUUkNf U0NIRURfQ0xBU1MgKyA0CisjZGVmaW5lIFRSQ19DU0NIRUQyX1RJQ0tMRV9DSEVDSyBUUkNfU0NI RURfQ0xBU1MgKyA1CisKKy8qIAorICogRGVzaWduOgorICoKKyAqIFZNcyAiYnVybiIgY3JlZGl0 cyBiYXNlZCBvbiB0aGVpciB3ZWlnaHQ7IGhpZ2hlciB3ZWlnaHQgbWVhbnMgY3JlZGl0cyBidXJu CisgKiBtb3JlIHNsb3dseS4KKyAqIAorICogdmNwdXMgYXJlIGluc2VydGVkIGludG8gdGhlIHJ1 bnF1ZXVlIGJ5IGNyZWRpdCBvcmRlci4KKyAqCisgKiBDcmVkaXRzIGFyZSAicmVzZXQiIHdoZW4g dGhlIG5leHQgdmNwdSBpbiB0aGUgcnVucXVldWUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHpl cm8uICBBdCB0aGF0CisgKiBwb2ludCwgZXZlcnlvbmUncyBjcmVkaXRzIGFyZSAiY2xpcHBlZCIg dG8gYSBzbWFsbCB2YWx1ZSwgYW5kIGEgZml4ZWQgY3JlZGl0IGlzIGFkZGVkIHRvIGV2ZXJ5b25l LgorICoKKyAqIFRoZSBwbGFuIGlzIGZvciBhbGwgY29yZXMgdGhhdCBzaGFyZSBhbiBMMiB3aWxs IHNoYXJlIHRoZSBzYW1lIHJ1bnF1ZXVlLiAgQXQgdGhlIG1vbWVudCwgdGhlcmUgaXMKKyAqIG9u ZSBnbG9iYWwgcnVucXVldWUgZm9yIGFsbCBjb3Jlcy4KKyAqLworCisvKgorICogQmFzaWMgY29u c3RhbnRzCisgKi8KKyNkZWZpbmUgQ1NDSEVEX0RFRkFVTFRfV0VJR0hUICAgICAgIDI1NgorI2Rl ZmluZSBDU0NIRURfTUlOX1RJTUVSICAgICAgICAgICAgTUlDUk9TRUNTKDUwMCkKKyNkZWZpbmUg Q1NDSEVEX0NBUlJZT1ZFUl9NQVggICAgICAgIENTQ0hFRF9NSU5fVElNRVIKKyNkZWZpbmUgQ1ND SEVEX0NSRURJVF9SRVNFVCAgICAgICAgIDAKKyNkZWZpbmUgQ1NDSEVEX0NSRURJVF9JTklUICAg ICAgICAgIE1JTExJU0VDUygxMCkKKyNkZWZpbmUgQ1NDSEVEX01BWF9USU1FUiAgICAgICAgICAg IE1JTExJU0VDUygyKQorCisjZGVmaW5lIENTQ0hFRF9JRExFX0NSRURJVCAgICAgICAgICAgICAg ICAgKC0oMTw8MzApKQorCisvKgorICogRmxhZ3MKKyAqLworLy8gUGxhY2Vob2xkZXIgdGVtcGxh dGUgZm9yIHdoZW4gd2UgbmVlZCByZWFsIGZsYWdzCisvLyNkZWZpbmUgX19DU0ZMQUdfZm9vIDEK Ky8vI2RlZmluZSBDU0ZMQUdfZm9vICgxPDxfX0NTRkxBR19mb28pCisKKworLyoKKyAqIFVzZWZ1 bCBtYWNyb3MKKyAqLworI2RlZmluZSBDU0NIRURfUENQVShfYykgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICgoc3RydWN0IGNzY2hlZF9wY3B1 ICopcGVyX2NwdShzY2hlZHVsZV9kYXRhLCBfYykuc2NoZWRfcHJpdikKKyNkZWZpbmUgQ1NDSEVE X1ZDUFUoX3ZjcHUpICAoKHN0cnVjdCBjc2NoZWRfdmNwdSAqKSAoX3ZjcHUpLT5zY2hlZF9wcml2 KQorI2RlZmluZSBDU0NIRURfRE9NKF9kb20pICAgICgoc3RydWN0IGNzY2hlZF9kb20gKikgKF9k b20pLT5zY2hlZF9wcml2KQorLy8jZGVmaW5lIFJVTlEoX2NwdSkgICAgICAgICAgKCYoQ1NDSEVE X0dST1VQKF9jcHUpLT5ydW5xKSkKKyNkZWZpbmUgUlVOUShfY3B1KSAgICAgICAgICAoJmNzY2hl ZF9wcml2LnJ1bnEpCisKKy8qCisgKiBTeXN0ZW0td2lkZSBwcml2YXRlIGRhdGEKKyAqLworc3Ry dWN0IGNzY2hlZF9wcml2YXRlIHsKKyAgICBzcGlubG9ja190IGxvY2s7CisgICAgc3RydWN0IGxp c3RfaGVhZCBzZG9tOworICAgIHN0cnVjdCBsaXN0X2hlYWQgc3ZjOyAgLyogTGlzdCBvZiBhbGwg dmNwdXMgKi8KKyAgICB1aW50MzJfdCBuY3B1czsKKworICAgIC8qIFBlci1ydW5xdWV1ZSBpbmZv ICovCisgICAgc3RydWN0IGxpc3RfaGVhZCBydW5xOyAvKiBHbG9iYWwgcnVucXVldWUgKi8KKyAg ICBpbnQgbWF4X3dlaWdodDsKK307CisKK3N0cnVjdCBjc2NoZWRfcGNwdSB7CisgICAgaW50IF9k dW1teTsKK307CisKKy8qCisgKiBWaXJ0dWFsIENQVQorICovCitzdHJ1Y3QgY3NjaGVkX3ZjcHUg eworICAgIHN0cnVjdCBsaXN0X2hlYWQgZ2xvYmFsX2VsZW07IC8qIE9uIHRoZSBnbG9iYWwgdmNw dSBsaXN0ICovCisgICAgc3RydWN0IGxpc3RfaGVhZCBzZG9tX2VsZW07ICAgLyogT24gdGhlIGRv bWFpbiB2Y3B1IGxpc3QgKi8KKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIHJ1bnFfZWxlbTsgICAvKiBP biB0aGUgcnVucXVldWUgICAgICAgICAqLworCisgICAgLyogVXAtcG9pbnRlcnMgKi8KKyAgICBz dHJ1Y3QgY3NjaGVkX2RvbSAqc2RvbTsKKyAgICBzdHJ1Y3QgdmNwdSAqdmNwdTsKKworICAgIGlu dCB3ZWlnaHQ7CisKKyAgICBpbnQgY3JlZGl0OworICAgIHNfdGltZV90IHN0YXJ0X3RpbWU7IC8q IFdoZW4gd2Ugd2VyZSBzY2hlZHVsZWQgKHVzZWQgZm9yIGNyZWRpdCkgKi8KKyAgICB1bnNpZ25l ZCBmbGFnczsgICAgICAvKiAxNiBiaXRzIGRvZXNuJ3Qgc2VlbSB0byBwbGF5IHdlbGwgd2l0aCBj bGVhcl9iaXQoKSAqLworCit9OworCisvKgorICogRG9tYWluCisgKi8KK3N0cnVjdCBjc2NoZWRf ZG9tIHsKKyAgICBzdHJ1Y3QgbGlzdF9oZWFkIHZjcHU7CisgICAgc3RydWN0IGxpc3RfaGVhZCBz ZG9tX2VsZW07CisgICAgc3RydWN0IGRvbWFpbiAqZG9tOworICAgIHVpbnQxNl90IHdlaWdodDsK KyAgICB1aW50MTZfdCBucl92Y3B1czsKK307CisKKworLyoKKyAqIEdsb2JhbCB2YXJpYWJsZXMK KyAqLworc3RhdGljIHN0cnVjdCBjc2NoZWRfcHJpdmF0ZSBjc2NoZWRfcHJpdjsKKworLyoKKyAq IFRpbWUtdG8tY3JlZGl0LCBjcmVkaXQtdG8tdGltZS4KKyAqIEZJWE1FOiBEbyBwcmUtY2FsY3Vs YXRlZCBkaXZpc2lvbj8KKyAqLworc3RhdGljIHNfdGltZV90IHQyYyhzX3RpbWVfdCB0aW1lLCBz dHJ1Y3QgY3NjaGVkX3ZjcHUgKnN2YykKK3sKKyAgICByZXR1cm4gdGltZSAqIGNzY2hlZF9wcml2 Lm1heF93ZWlnaHQgLyBzdmMtPndlaWdodDsKK30KKworc3RhdGljIHNfdGltZV90IGMydChzX3Rp bWVfdCBjcmVkaXQsIHN0cnVjdCBjc2NoZWRfdmNwdSAqc3ZjKQoreworICAgIHJldHVybiBjcmVk aXQgKiBzdmMtPndlaWdodCAvIGNzY2hlZF9wcml2Lm1heF93ZWlnaHQ7Cit9CisKKy8qCisgKiBS dW5xdWV1ZSByZWxhdGVkIGNvZGUKKyAqLworCitzdGF0aWMgLyppbmxpbmUqLyBpbnQKK19fdmNw dV9vbl9ydW5xKHN0cnVjdCBjc2NoZWRfdmNwdSAqc3ZjKQoreworICAgIHJldHVybiAhbGlzdF9l bXB0eSgmc3ZjLT5ydW5xX2VsZW0pOworfQorCitzdGF0aWMgLyppbmxpbmUqLyBzdHJ1Y3QgY3Nj aGVkX3ZjcHUgKgorX19ydW5xX2VsZW0oc3RydWN0IGxpc3RfaGVhZCAqZWxlbSkKK3sKKyAgICBy ZXR1cm4gbGlzdF9lbnRyeShlbGVtLCBzdHJ1Y3QgY3NjaGVkX3ZjcHUsIHJ1bnFfZWxlbSk7Cit9 CisKK3N0YXRpYyBpbnQKK19fcnVucV9pbnNlcnQoc3RydWN0IGxpc3RfaGVhZCAqcnVucSwgc3Ry dWN0IGNzY2hlZF92Y3B1ICpzdmMpCit7CisgICAgc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKKyAg ICBpbnQgcG9zID0gMDsKKworICAgIGQycHJpbnRrKCJycWkgZCVkdiVkXG4iLAorICAgICAgICAg ICBzdmMtPnZjcHUtPmRvbWFpbi0+ZG9tYWluX2lkLAorICAgICAgICAgICBzdmMtPnZjcHUtPnZj cHVfaWQpOworCisgICAgbGlzdF9mb3JfZWFjaCggaXRlciwgcnVucSApCisgICAgeworICAgICAg ICBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKiBpdGVyX3N2YyA9IF9fcnVucV9lbGVtKGl0ZXIpOworCisg ICAgICAgIGlmICggc3ZjLT5jcmVkaXQgPiBpdGVyX3N2Yy0+Y3JlZGl0ICkKKyAgICAgICAgewor ICAgICAgICAgICAgZDJwcmludGsoIiBwJWQgZCVkdiVkXG4iLAorICAgICAgICAgICAgICAgICAg IHBvcywKKyAgICAgICAgICAgICAgICAgICBpdGVyX3N2Yy0+dmNwdS0+ZG9tYWluLT5kb21haW5f aWQsCisgICAgICAgICAgICAgICAgICAgaXRlcl9zdmMtPnZjcHUtPnZjcHVfaWQpOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcG9zKys7CisgICAgfQorCisgICAgbGlz dF9hZGRfdGFpbCgmc3ZjLT5ydW5xX2VsZW0sIGl0ZXIpOworCisgICAgcmV0dXJuIHBvczsKK30K Kworc3RhdGljIHZvaWQKK3J1bnFfaW5zZXJ0KHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCBjc2No ZWRfdmNwdSAqc3ZjKQoreworICAgIHN0cnVjdCBsaXN0X2hlYWQgKiBydW5xID0gUlVOUShjcHUp OworICAgIGludCBwb3MgPSAwOworCisgICAgLyogRklYTUU6IFJ1bnF1ZXVlIHBlciBMMiAqLwor ICAgIEFTU0VSVCggc3Bpbl9pc19sb2NrZWQoJmNzY2hlZF9wcml2LmxvY2spICk7IAorCisgICAg QlVHX09OKCBfX3ZjcHVfb25fcnVucShzdmMpICk7CisgICAgLyogRklYTUU6IENoZWNrIHJ1bnF1 ZXVlIGhhbmRsZXMgdGhpcyBjcHUqLworICAgIC8vQlVHX09OKCBjcHUgIT0gc3ZjLT52Y3B1LT5w cm9jZXNzb3IgKTsgCisKKyAgICBwb3MgPSBfX3J1bnFfaW5zZXJ0KHJ1bnEsIHN2Yyk7CisKKyAg ICB7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1bnNpZ25lZCBkb206MTYsdmNwdTox NjsKKyAgICAgICAgICAgIHVuc2lnbmVkIHBvczsKKyAgICAgICAgfSBkOworICAgICAgICBkLmRv bSA9IHN2Yy0+dmNwdS0+ZG9tYWluLT5kb21haW5faWQ7CisgICAgICAgIGQudmNwdSA9IHN2Yy0+ dmNwdS0+dmNwdV9pZDsKKyAgICAgICAgZC5wb3MgPSBwb3M7CisgICAgICAgIHRyYWNlX3ZhcihU UkNfQ1NDSEVEMl9SVU5RX1BPUywgMSwKKyAgICAgICAgICAgICAgICAgIHNpemVvZihkKSwKKyAg ICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopJmQpOworICAgIH0KKworICAgIHJldHVy bjsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitfX3J1bnFfcmVtb3ZlKHN0cnVjdCBjc2NoZWRf dmNwdSAqc3ZjKQoreworICAgIEJVR19PTiggIV9fdmNwdV9vbl9ydW5xKHN2YykgKTsKKyAgICBs aXN0X2RlbF9pbml0KCZzdmMtPnJ1bnFfZWxlbSk7Cit9CisKK3ZvaWQgYnVybl9jcmVkaXRzKHN0 cnVjdCBjc2NoZWRfdmNwdSAqLCBzX3RpbWVfdCk7CisKKy8qIENoZWNrIHRvIHNlZSBpZiB0aGUg aXRlbSBvbiB0aGUgcnVucXVldWUgaXMgaGlnaGVyIHByaW9yaXR5IHRoYW4gd2hhdCdzCisgKiBj dXJyZW50bHkgcnVubmluZzsgaWYgc28sIHdha2UgdXAgdGhlIHByb2Nlc3NvciAqLworc3RhdGlj IC8qaW5saW5lKi8gdm9pZAorcnVucV90aWNrbGUodW5zaWduZWQgaW50IGNwdSwgc3RydWN0IGNz Y2hlZF92Y3B1ICpuZXcsIHNfdGltZV90IG5vdykKK3sKKyAgICBpbnQgaSwgaXBpZD0tMTsKKyAg ICBzX3RpbWVfdCBsb3dlc3Q9KDE8PDMwKTsKKworICAgIGQycHJpbnRrKCJycXQgZCVkdiVkIGNk JWR2JWRcbiIsCisgICAgICAgICAgICAgbmV3LT52Y3B1LT5kb21haW4tPmRvbWFpbl9pZCwKKyAg ICAgICAgICAgICBuZXctPnZjcHUtPnZjcHVfaWQsCisgICAgICAgICAgICAgY3VycmVudC0+ZG9t YWluLT5kb21haW5faWQsCisgICAgICAgICAgICAgY3VycmVudC0+dmNwdV9pZCk7CisKKyAgICAv KiBGaW5kIHRoZSBjcHUgaW4gdGhpcyBxdWV1ZSBncm91cCB0aGF0IGhhcyB0aGUgbG93ZXN0IGNy ZWRpdHMgKi8KKyAgICAvKiBGSVhNRTogc2VwYXJhdGUgcnVucXVldWVzICovCisgICAgZm9yX2Vh Y2hfb25saW5lX2NwdSAoIGkgKQorICAgIHsKKyAgICAgICAgc3RydWN0IGNzY2hlZF92Y3B1ICog Y29uc3QgY3VyID0KKyAgICAgICAgICAgIENTQ0hFRF9WQ1BVKHBlcl9jcHUoc2NoZWR1bGVfZGF0 YSwgaSkuY3Vycik7CisKKyAgICAgICAgLyogRklYTUU6IGtlZXAgdHJhY2sgb2YgaWRsZXJzLCBj aG9zZSBmcm9tIHRoZSBtYXNrICovCisgICAgICAgIGlmICggaXNfaWRsZV92Y3B1KGN1ci0+dmNw dSkgKQorICAgICAgICB7CisgICAgICAgICAgICBpcGlkID0gaTsKKyAgICAgICAgICAgIGxvd2Vz dCA9IENTQ0hFRF9JRExFX0NSRURJVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg ICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogVXBkYXRlIGNyZWRpdHMgZm9y IGN1cnJlbnQgdG8gc2VlIGlmIHdlIHdhbnQgdG8gcHJlZW1wdCAqLworICAgICAgICAgICAgYnVy bl9jcmVkaXRzKGN1ciwgbm93KTsKKworICAgICAgICAgICAgaWYgKCBjdXItPmNyZWRpdCA8IGxv d2VzdCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaXBpZCA9IGk7CisgICAgICAg ICAgICAgICAgbG93ZXN0ID0gY3VyLT5jcmVkaXQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgIC8qIFRSQUNFICovIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBkb206MTYsdmNwdToxNjsKKyAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgY3JlZGl0OworICAgICAgICAgICAgICAgIH0gZDsKKyAgICAgICAgICAgICAgICBkLmRv bSA9IGN1ci0+dmNwdS0+ZG9tYWluLT5kb21haW5faWQ7CisgICAgICAgICAgICAgICAgZC52Y3B1 ID0gY3VyLT52Y3B1LT52Y3B1X2lkOworICAgICAgICAgICAgICAgIGQuY3JlZGl0ID0gY3VyLT5j cmVkaXQ7CisgICAgICAgICAgICAgICAgdHJhY2VfdmFyKFRSQ19DU0NIRUQyX1RJQ0tMRV9DSEVD SywgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGQpLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAodW5zaWduZWQgY2hhciAqKSZkKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIH0KKworICAgIGlmICggaXBpZCAhPSAtMSApCisgICAgeworICAgICAgICBpbnQg Y2RpZmYgPSBsb3dlc3QgLSBuZXctPmNyZWRpdDsKKworICAgICAgICBpZiAoIGxvd2VzdCA9PSBD U0NIRURfSURMRV9DUkVESVQgfHwgY2RpZmYgPCAwICkgeworICAgICAgICAgICAgZDJwcmludGso InNpICVkXG4iLCBpcGlkKTsKKyAgICAgICAgICAgIGNwdV9yYWlzZV9zb2Z0aXJxKGlwaWQsIFND SEVEVUxFX1NPRlRJUlEpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8q IEZJWE1FOiBXYWtlIHVwIGxhdGVyPyAqLzsKKyAgICB9Cit9CisKKy8qCisgKiBDcmVkaXQtcmVs YXRlZCBjb2RlCisgKi8KK3N0YXRpYyB2b2lkIHJlc2V0X2NyZWRpdChpbnQgY3B1LCBzX3RpbWVf dCBub3cpCit7CisgICAgc3RydWN0IGxpc3RfaGVhZCAqaXRlcjsKKworICAgIGxpc3RfZm9yX2Vh Y2goIGl0ZXIsICZjc2NoZWRfcHJpdi5zdmMgKQorICAgIHsKKyAgICAgICAgc3RydWN0IGNzY2hl ZF92Y3B1ICogc3ZjID0gbGlzdF9lbnRyeShpdGVyLCBzdHJ1Y3QgY3NjaGVkX3ZjcHUsIGdsb2Jh bF9lbGVtKTsKKyAgICAgICAgc190aW1lX3QgY21heDsKKworICAgICAgICBCVUdfT04oIGlzX2lk bGVfdmNwdShzdmMtPnZjcHUpICk7CisKKyAgICAgICAgLyogTWF4aW11bSBhbW91bnQgb2YgY3Jl ZGl0IHRoYXQgY2FuIGJlIGNhcnJpZWQgb3ZlciAqLworICAgICAgICBjbWF4ID0gQ1NDSEVEX0NB UlJZT1ZFUl9NQVg7CisKKyAgICAgICAgaWYgKCBzdmMtPmNyZWRpdCA+IGNtYXggKQorICAgICAg ICAgICAgc3ZjLT5jcmVkaXQgPSBjbWF4OworICAgICAgICBzdmMtPmNyZWRpdCArPSBDU0NIRURf Q1JFRElUX0lOSVQ7ICAvKiBGaW5kIGEgYmV0dGVyIG5hbWUgKi8KKyAgICAgICAgc3ZjLT5zdGFy dF90aW1lID0gbm93OworCisgICAgICAgIC8qIFRyYWNlIGNyZWRpdCAqLworICAgIH0KKworICAg IC8qIE5vIG5lZWQgdG8gcmVzb3J0IHJ1bnF1ZXVlLCBhcyBldmVyeW9uZSdzIG9yZGVyIHNob3Vs ZCBiZSB0aGUgc2FtZS4gKi8KK30KKwordm9pZCBidXJuX2NyZWRpdHMoc3RydWN0IGNzY2hlZF92 Y3B1ICpzdmMsIHNfdGltZV90IG5vdykKK3sKKyAgICBzX3RpbWVfdCBkZWx0YTsKKworICAgIC8q IEFzc2VydCBzdmMgaXMgY3VycmVudCAqLworICAgIEFTU0VSVChzdmM9PUNTQ0hFRF9WQ1BVKHBl cl9jcHUoc2NoZWR1bGVfZGF0YSwgc3ZjLT52Y3B1LT5wcm9jZXNzb3IpLmN1cnIpKTsKKworICAg IGlmICggaXNfaWRsZV92Y3B1KHN2Yy0+dmNwdSkgKQorICAgIHsKKyAgICAgICAgQlVHX09OKHN2 Yy0+Y3JlZGl0ICE9IENTQ0hFRF9JRExFX0NSRURJVCk7CisgICAgICAgIHJldHVybjsKKyAgICB9 CisKKyAgICBkZWx0YSA9IG5vdyAtIHN2Yy0+c3RhcnRfdGltZTsKKworICAgIGlmICggZGVsdGEg PiAwICkgeworICAgICAgICAvKiBUaGlzIHdpbGwgcm91bmQgZG93bjsgc2hvdWxkIHdlIGNvbnNp ZGVyIHJvdW5kaW5nIHVwLi4uPyAqLworICAgICAgICBzdmMtPmNyZWRpdCAtPSB0MmMoZGVsdGEs IHN2Yyk7CisgICAgICAgIHN2Yy0+c3RhcnRfdGltZSA9IG5vdzsKKworICAgICAgICBkMnByaW50 aygiYiBkJWR2JWQgYyVkXG4iLAorICAgICAgICAgICAgICAgICBzdmMtPnZjcHUtPmRvbWFpbi0+ ZG9tYWluX2lkLAorICAgICAgICAgICAgICAgICBzdmMtPnZjcHUtPnZjcHVfaWQsCisgICAgICAg ICAgICAgICAgIHN2Yy0+Y3JlZGl0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBkMnByaW50aygi JXM6IFRpbWUgd2VudCBiYWNrd2FyZHM/IG5vdyAlIlBSSV9zdGltZSIgc3RhcnQgJSJQUklfc3Rp bWUiXG4iLAorICAgICAgICAgICAgICAgX19mdW5jX18sIG5vdywgc3ZjLT5zdGFydF90aW1lKTsK KyAgICB9CisgICAgCisgICAgLyogVFJBQ0UgKi8KKyAgICB7CisgICAgICAgIHN0cnVjdCB7Cisg ICAgICAgICAgICB1bnNpZ25lZCBkb206MTYsdmNwdToxNjsKKyAgICAgICAgICAgIHVuc2lnbmVk IGNyZWRpdDsKKyAgICAgICAgICAgIGludCBkZWx0YTsKKyAgICAgICAgfSBkOworICAgICAgICBk LmRvbSA9IHN2Yy0+dmNwdS0+ZG9tYWluLT5kb21haW5faWQ7CisgICAgICAgIGQudmNwdSA9IHN2 Yy0+dmNwdS0+dmNwdV9pZDsKKyAgICAgICAgZC5jcmVkaXQgPSBzdmMtPmNyZWRpdDsKKyAgICAg ICAgZC5kZWx0YSA9IGRlbHRhOworICAgICAgICB0cmFjZV92YXIoVFJDX0NTQ0hFRDJfQ1JFRElU X0JVUk4sIDEsCisgICAgICAgICAgICAgICAgICBzaXplb2YoZCksCisgICAgICAgICAgICAgICAg ICAodW5zaWduZWQgY2hhciAqKSZkKTsKKyAgICB9Cit9CisKKy8qIEZpbmQgdGhlIGRvbWFpbiB3 aXRoIHRoZSBoaWdoZXN0IHdlaWdodC4gKi8KK3ZvaWQgdXBkYXRlX21heF93ZWlnaHQoaW50IG5l d193ZWlnaHQsIGludCBvbGRfd2VpZ2h0KQoreworICAgIGlmICggbmV3X3dlaWdodCA+IGNzY2hl ZF9wcml2Lm1heF93ZWlnaHQgKQorICAgIHsKKyAgICAgICAgY3NjaGVkX3ByaXYubWF4X3dlaWdo dCA9IG5ld193ZWlnaHQ7CisgICAgICAgIHByaW50aygiJXM6IE1heCB3ZWlnaHQgJWRcbiIsIF9f ZnVuY19fLCBjc2NoZWRfcHJpdi5tYXhfd2VpZ2h0KTsKKyAgICB9CisgICAgZWxzZSBpZiAoIG9s ZF93ZWlnaHQgPT0gY3NjaGVkX3ByaXYubWF4X3dlaWdodCApCisgICAgeworICAgICAgICBzdHJ1 Y3QgbGlzdF9oZWFkICppdGVyOworICAgICAgICBpbnQgbWF4X3dlaWdodCA9IDE7CisgICAgICAg IAorICAgICAgICBsaXN0X2Zvcl9lYWNoKCBpdGVyLCAmY3NjaGVkX3ByaXYuc2RvbSApCisgICAg ICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBjc2NoZWRfZG9tICogc2RvbSA9IGxpc3RfZW50cnko aXRlciwgc3RydWN0IGNzY2hlZF9kb20sIHNkb21fZWxlbSk7CisgICAgICAgICAgICAKKyAgICAg ICAgICAgIGlmICggc2RvbS0+d2VpZ2h0ID4gbWF4X3dlaWdodCApCisgICAgICAgICAgICAgICAg bWF4X3dlaWdodCA9IHNkb20tPndlaWdodDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg Y3NjaGVkX3ByaXYubWF4X3dlaWdodCA9IG1heF93ZWlnaHQ7CisgICAgICAgIHByaW50aygiJXM6 IE1heCB3ZWlnaHQgJWRcbiIsIF9fZnVuY19fLCBjc2NoZWRfcHJpdi5tYXhfd2VpZ2h0KTsKKyAg ICB9Cit9CisKKy8qCisgKiBJbml0aWFsaXphdGlvbiBjb2RlCisgKi8KK3N0YXRpYyBpbnQKK2Nz Y2hlZF9wY3B1X2luaXQoaW50IGNwdSkKK3sKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworICAg IHN0cnVjdCBjc2NoZWRfcGNwdSAqc3BjOworCisgICAgLyogQWxsb2NhdGUgcGVyLVBDUFUgaW5m byAqLworICAgIHNwYyA9IHhtYWxsb2Moc3RydWN0IGNzY2hlZF9wY3B1KTsKKyAgICBpZiAoIHNw YyA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgc3Bpbl9sb2NrX2lycXNhdmUo JmNzY2hlZF9wcml2LmxvY2ssIGZsYWdzKTsKKworICAgIC8qIEluaXRpYWxpemUvdXBkYXRlIHN5 c3RlbS13aWRlIGNvbmZpZyAqLworICAgIHBlcl9jcHUoc2NoZWR1bGVfZGF0YSwgY3B1KS5zY2hl ZF9wcml2ID0gc3BjOworCisgICAgY3NjaGVkX3ByaXYubmNwdXMrKzsKKworICAgIC8qIFN0YXJ0 IG9mZiBpZGxpbmcuLi4gKi8KKyAgICBCVUdfT04oIWlzX2lkbGVfdmNwdShwZXJfY3B1KHNjaGVk dWxlX2RhdGEsIGNwdSkuY3VycikpOworCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3Nj aGVkX3ByaXYubG9jaywgZmxhZ3MpOworCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZm5kZWYgTkRF QlVHCitzdGF0aWMgLyppbmxpbmUqLyB2b2lkCitfX2NzY2hlZF92Y3B1X2NoZWNrKHN0cnVjdCB2 Y3B1ICp2YykKK3sKKyAgICBzdHJ1Y3QgY3NjaGVkX3ZjcHUgKiBjb25zdCBzdmMgPSBDU0NIRURf VkNQVSh2Yyk7CisgICAgc3RydWN0IGNzY2hlZF9kb20gKiBjb25zdCBzZG9tID0gc3ZjLT5zZG9t OworCisgICAgQlVHX09OKCBzdmMtPnZjcHUgIT0gdmMgKTsKKyAgICBCVUdfT04oIHNkb20gIT0g Q1NDSEVEX0RPTSh2Yy0+ZG9tYWluKSApOworICAgIGlmICggc2RvbSApCisgICAgeworICAgICAg ICBCVUdfT04oIGlzX2lkbGVfdmNwdSh2YykgKTsKKyAgICAgICAgQlVHX09OKCBzZG9tLT5kb20g IT0gdmMtPmRvbWFpbiApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBCVUdfT04o ICFpc19pZGxlX3ZjcHUodmMpICk7CisgICAgfQorfQorI2RlZmluZSBDU0NIRURfVkNQVV9DSEVD SyhfdmMpICAoX19jc2NoZWRfdmNwdV9jaGVjayhfdmMpKQorI2Vsc2UKKyNkZWZpbmUgQ1NDSEVE X1ZDUFVfQ0hFQ0soX3ZjKQorI2VuZGlmCisKK3N0YXRpYyBpbnQKK2NzY2hlZF92Y3B1X2luaXQo c3RydWN0IHZjcHUgKnZjKQoreworICAgIHN0cnVjdCBkb21haW4gKiBjb25zdCBkb20gPSB2Yy0+ ZG9tYWluOworICAgIHN0cnVjdCBjc2NoZWRfZG9tICpzZG9tID0gQ1NDSEVEX0RPTShkb20pOwor ICAgIHN0cnVjdCBjc2NoZWRfdmNwdSAqc3ZjOworCisgICAgcHJpbnRrKCIlczogSW5pdGlhbGl6 aW5nIGQlZHYlZFxuIiwKKyAgICAgICAgICAgX19mdW5jX18sIGRvbS0+ZG9tYWluX2lkLCB2Yy0+ dmNwdV9pZCk7CisKKyAgICAvKiBBbGxvY2F0ZSBwZXItVkNQVSBpbmZvICovCisgICAgc3ZjID0g eG1hbGxvYyhzdHJ1Y3QgY3NjaGVkX3ZjcHUpOworICAgIGlmICggc3ZjID09IE5VTEwgKQorICAg ICAgICByZXR1cm4gLTE7CisKKyAgICBJTklUX0xJU1RfSEVBRCgmc3ZjLT5nbG9iYWxfZWxlbSk7 CisgICAgSU5JVF9MSVNUX0hFQUQoJnN2Yy0+c2RvbV9lbGVtKTsKKyAgICBJTklUX0xJU1RfSEVB RCgmc3ZjLT5ydW5xX2VsZW0pOworCisgICAgc3ZjLT5zZG9tID0gc2RvbTsKKyAgICBzdmMtPnZj cHUgPSB2YzsKKyAgICBzdmMtPmZsYWdzID0gMFU7CisgICAgdmMtPnNjaGVkX3ByaXYgPSBzdmM7 CisKKyAgICBpZiAoICEgaXNfaWRsZV92Y3B1KHZjKSApCisgICAgeworICAgICAgICBCVUdfT04o IHNkb20gPT0gTlVMTCApOworCisgICAgICAgIHN2Yy0+Y3JlZGl0ID0gQ1NDSEVEX0NSRURJVF9J TklUOworICAgICAgICBzdmMtPndlaWdodCA9IHNkb20tPndlaWdodDsKKworICAgICAgICBsaXN0 X2FkZF90YWlsKCZzdmMtPnNkb21fZWxlbSwgJnNkb20tPnZjcHUpOworICAgICAgICBsaXN0X2Fk ZF90YWlsKCZzdmMtPmdsb2JhbF9lbGVtLCAmY3NjaGVkX3ByaXYuc3ZjKTsKKyAgICAgICAgc2Rv bS0+bnJfdmNwdXMrKzsKKyAgICB9IAorICAgIGVsc2UKKyAgICB7CisgICAgICAgIEJVR19PTigg c2RvbSAhPSBOVUxMICk7CisgICAgICAgIHN2Yy0+Y3JlZGl0ID0gQ1NDSEVEX0lETEVfQ1JFRElU OworICAgICAgICBzdmMtPndlaWdodCA9IDA7CisgICAgfQorCisgICAgLyogQWxsb2NhdGUgcGVy LVBDUFUgaW5mbyAqLworICAgIGlmICggdW5saWtlbHkoIUNTQ0hFRF9QQ1BVKHZjLT5wcm9jZXNz b3IpKSApCisgICAgeworICAgICAgICBpZiAoIGNzY2hlZF9wY3B1X2luaXQodmMtPnByb2Nlc3Nv cikgIT0gMCApCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgQ1NDSEVEX1ZD UFVfQ0hFQ0sodmMpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorY3NjaGVkX3Zj cHVfZGVzdHJveShzdHJ1Y3QgdmNwdSAqdmMpCit7CisgICAgc3RydWN0IGNzY2hlZF92Y3B1ICog Y29uc3Qgc3ZjID0gQ1NDSEVEX1ZDUFUodmMpOworICAgIHN0cnVjdCBjc2NoZWRfZG9tICogY29u c3Qgc2RvbSA9IHN2Yy0+c2RvbTsKKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgICAgQlVH X09OKCBzZG9tID09IE5VTEwgKTsKKyAgICBCVUdfT04oICFsaXN0X2VtcHR5KCZzdmMtPnJ1bnFf ZWxlbSkgKTsKKworICAgIHNwaW5fbG9ja19pcnFzYXZlKCZjc2NoZWRfcHJpdi5sb2NrLCBmbGFn cyk7CisKKyAgICAvKiBSZW1vdmUgZnJvbSBzZG9tIGxpc3QgKi8KKyAgICBsaXN0X2RlbF9pbml0 KCZzdmMtPmdsb2JhbF9lbGVtKTsKKyAgICBsaXN0X2RlbF9pbml0KCZzdmMtPnNkb21fZWxlbSk7 CisKKyAgICBzZG9tLT5ucl92Y3B1cy0tOworCisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm Y3NjaGVkX3ByaXYubG9jaywgZmxhZ3MpOworCisgICAgeGZyZWUoc3ZjKTsKK30KKworc3RhdGlj IHZvaWQKK2NzY2hlZF92Y3B1X3NsZWVwKHN0cnVjdCB2Y3B1ICp2YykKK3sKKyAgICBzdHJ1Y3Qg Y3NjaGVkX3ZjcHUgKiBjb25zdCBzdmMgPSBDU0NIRURfVkNQVSh2Yyk7CisKKyAgICBCVUdfT04o IGlzX2lkbGVfdmNwdSh2YykgKTsKKworICAgIGlmICggcGVyX2NwdShzY2hlZHVsZV9kYXRhLCB2 Yy0+cHJvY2Vzc29yKS5jdXJyID09IHZjICkKKyAgICAgICAgY3B1X3JhaXNlX3NvZnRpcnEodmMt PnByb2Nlc3NvciwgU0NIRURVTEVfU09GVElSUSk7CisgICAgZWxzZSBpZiAoIF9fdmNwdV9vbl9y dW5xKHN2YykgKQorICAgICAgICBfX3J1bnFfcmVtb3ZlKHN2Yyk7Cit9CisKK3N0YXRpYyB2b2lk Citjc2NoZWRfdmNwdV93YWtlKHN0cnVjdCB2Y3B1ICp2YykKK3sKKyAgICBzdHJ1Y3QgY3NjaGVk X3ZjcHUgKiBjb25zdCBzdmMgPSBDU0NIRURfVkNQVSh2Yyk7CisgICAgY29uc3QgdW5zaWduZWQg aW50IGNwdSA9IHZjLT5wcm9jZXNzb3I7CisgICAgc190aW1lX3Qgbm93ID0gMDsKKyAgICBpbnQg ZmxhZ3M7CisKKyAgICBkMnByaW50aygidyBkJWR2JWRcbiIsIHZjLT5kb21haW4tPmRvbWFpbl9p ZCwgdmMtPnZjcHVfaWQpOworCisgICAgQlVHX09OKCBpc19pZGxlX3ZjcHUodmMpICk7CisKKyAg ICAvKiBGSVhNRTogUnVucXVldWUgcGVyIEwyICovCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmNz Y2hlZF9wcml2LmxvY2ssIGZsYWdzKTsKKworCisgICAgLyogTWFrZSBzdXJlIHN2YyBwcmlvcml0 eSBtb2QgaGFwcGVucyBiZWZvcmUgcnVucSBjaGVjayAqLworICAgIGlmICggdW5saWtlbHkocGVy X2NwdShzY2hlZHVsZV9kYXRhLCBjcHUpLmN1cnIgPT0gdmMpICkKKyAgICB7CisgICAgICAgIGdv dG8gb3V0OworICAgIH0KKyAgICBpZiAoIHVubGlrZWx5KF9fdmNwdV9vbl9ydW5xKHN2YykpICkK KyAgICB7CisgICAgICAgIC8qIElmIHdlJ3ZlIGJvb3N0ZWQgc29tZW9uZSB0aGF0J3MgYWxyZWFk eSBvbiBhIHJ1bnF1ZXVlLCBwcmlvcml0aXplCisgICAgICAgICAqIGl0IGFuZCBpbmZvcm0gdGhl IGNwdSBpbiBxdWVzdGlvbi4gKi8KKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgbm93 ID0gTk9XKCk7CisKKyAgICAvKiBQdXQgdGhlIFZDUFUgb24gdGhlIHJ1bnEgKi8KKyAgICBydW5x X2luc2VydChjcHUsIHN2Yyk7CisgICAgcnVucV90aWNrbGUoY3B1LCBzdmMsIG5vdyk7CisKK291 dDoKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjc2NoZWRfcHJpdi5sb2NrLCBmbGFncyk7 IAorICAgIGQycHJpbnRrKCJ3LVxuIik7CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgaW50Citj c2NoZWRfY3B1X3BpY2soc3RydWN0IHZjcHUgKnZjKQoreworICAgIC8qIEZJWE1FOiBDaG9zZSBh IHNjaGVkdWxlIGdyb3VwIGJhc2VkIG9uIGxvYWQgKi8KKyAgICByZXR1cm4gMDsKK30KKworc3Rh dGljIGludAorY3NjaGVkX2RvbV9jbnRsKAorICAgIHN0cnVjdCBkb21haW4gKmQsCisgICAgc3Ry dWN0IHhlbl9kb21jdGxfc2NoZWR1bGVyX29wICpvcCkKK3sKKyAgICBzdHJ1Y3QgY3NjaGVkX2Rv bSAqIGNvbnN0IHNkb20gPSBDU0NIRURfRE9NKGQpOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7 CisKKyAgICBpZiAoIG9wLT5jbWQgPT0gWEVOX0RPTUNUTF9TQ0hFRE9QX2dldGluZm8gKQorICAg IHsKKyAgICAgICAgb3AtPnUuY3JlZGl0Mi53ZWlnaHQgPSBzZG9tLT53ZWlnaHQ7CisgICAgfQor ICAgIGVsc2UKKyAgICB7CisgICAgICAgIEFTU0VSVChvcC0+Y21kID09IFhFTl9ET01DVExfU0NI RURPUF9wdXRpbmZvKTsKKworICAgICAgICBpZiAoIG9wLT51LmNyZWRpdDIud2VpZ2h0ICE9IDAg KQorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICppdGVyOworICAgICAg ICAgICAgaW50IG9sZF93ZWlnaHQ7CisKKyAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZj c2NoZWRfcHJpdi5sb2NrLCBmbGFncyk7CisKKyAgICAgICAgICAgIG9sZF93ZWlnaHQgPSBzZG9t LT53ZWlnaHQ7CisKKyAgICAgICAgICAgIHNkb20tPndlaWdodCA9IG9wLT51LmNyZWRpdDIud2Vp Z2h0OworCisgICAgICAgICAgICAvKiBVcGRhdGUgbWF4IHdlaWdodCAqLworICAgICAgICAgICAg dXBkYXRlX21heF93ZWlnaHQoc2RvbS0+d2VpZ2h0LCBvbGRfd2VpZ2h0KTsKKworICAgICAgICAg ICAgLyogVXBkYXRlIHdlaWdodHMgZm9yIHZjcHVzICovCisgICAgICAgICAgICBsaXN0X2Zvcl9l YWNoICggaXRlciwgJnNkb20tPnZjcHUgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IHN0cnVjdCBjc2NoZWRfdmNwdSAqc3ZjID0gbGlzdF9lbnRyeShpdGVyLCBzdHJ1Y3QgY3NjaGVk X3ZjcHUsIHNkb21fZWxlbSk7CisKKyAgICAgICAgICAgICAgICBzdmMtPndlaWdodCA9IHNkb20t PndlaWdodDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmY3NjaGVkX3ByaXYubG9jaywgZmxhZ3MpOworICAgICAgICB9CisgICAgfQorCisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2NzY2hlZF9kb21faW5pdChzdHJ1Y3QgZG9tYWlu ICpkb20pCit7CisgICAgc3RydWN0IGNzY2hlZF9kb20gKnNkb207CisgICAgaW50IGZsYWdzOwor CisgICAgcHJpbnRrKCIlczogSW5pdGlhbGl6aW5nIGRvbWFpbiAlZFxuIiwgX19mdW5jX18sIGRv bS0+ZG9tYWluX2lkKTsKKworICAgIGlmICggaXNfaWRsZV9kb21haW4oZG9tKSApCisgICAgICAg IHJldHVybiAwOworCisgICAgc2RvbSA9IHhtYWxsb2Moc3RydWN0IGNzY2hlZF9kb20pOworICAg IGlmICggc2RvbSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuIC1FTk9NRU07CisKKyAgICAvKiBJ bml0aWFsaXplIGNyZWRpdCBhbmQgd2VpZ2h0ICovCisgICAgSU5JVF9MSVNUX0hFQUQoJnNkb20t PnZjcHUpOworICAgIElOSVRfTElTVF9IRUFEKCZzZG9tLT5zZG9tX2VsZW0pOworICAgIHNkb20t PmRvbSA9IGRvbTsKKyAgICBzZG9tLT53ZWlnaHQgPSBDU0NIRURfREVGQVVMVF9XRUlHSFQ7Cisg ICAgc2RvbS0+bnJfdmNwdXMgPSAwOworCisgICAgZG9tLT5zY2hlZF9wcml2ID0gc2RvbTsKKwor ICAgIHNwaW5fbG9ja19pcnFzYXZlKCZjc2NoZWRfcHJpdi5sb2NrLCBmbGFncyk7CisKKyAgICB1 cGRhdGVfbWF4X3dlaWdodChzZG9tLT53ZWlnaHQsIDApOworCisgICAgbGlzdF9hZGRfdGFpbCgm c2RvbS0+c2RvbV9lbGVtLCAmY3NjaGVkX3ByaXYuc2RvbSk7CisKKyAgICBzcGluX3VubG9ja19p cnFyZXN0b3JlKCZjc2NoZWRfcHJpdi5sb2NrLCBmbGFncyk7CisKKyAgICByZXR1cm4gMDsKK30K Kworc3RhdGljIHZvaWQKK2NzY2hlZF9kb21fZGVzdHJveShzdHJ1Y3QgZG9tYWluICpkb20pCit7 CisgICAgc3RydWN0IGNzY2hlZF9kb20gKnNkb20gPSBDU0NIRURfRE9NKGRvbSk7CisgICAgaW50 IGZsYWdzOworCisgICAgQlVHX09OKCFsaXN0X2VtcHR5KCZzZG9tLT52Y3B1KSk7CisKKyAgICBz cGluX2xvY2tfaXJxc2F2ZSgmY3NjaGVkX3ByaXYubG9jaywgZmxhZ3MpOworCisgICAgbGlzdF9k ZWxfaW5pdCgmc2RvbS0+c2RvbV9lbGVtKTsKKworICAgIHVwZGF0ZV9tYXhfd2VpZ2h0KDAsIHNk b20tPndlaWdodCk7CisKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjc2NoZWRfcHJpdi5s b2NrLCBmbGFncyk7CisgICAgCisgICAgeGZyZWUoQ1NDSEVEX0RPTShkb20pKTsKK30KKworI2lm IDAKK3N0YXRpYyB2b2lkIGNzY2hlZF9sb2FkX2JhbGFuY2UoaW50IGNwdSkKK3sKKyAgICAvKiBG SVhNRTogRG8gc29tZXRoaW5nLiAqLworfQorI2VuZGlmCisKKy8qIEhvdyBsb25nIHNob3VsZCB3 ZSBsZXQgdGhpcyB2Y3B1IHJ1biBmb3I/ICovCitzdGF0aWMgc190aW1lX3QKK2NzY2hlZF9ydW50 aW1lKGludCBjcHUsIHN0cnVjdCBjc2NoZWRfdmNwdSAqc25leHQpCit7CisgICAgc190aW1lX3Qg dGltZSA9IENTQ0hFRF9NQVhfVElNRVI7CisgICAgc3RydWN0IGxpc3RfaGVhZCAqcnVucSA9IFJV TlEoY3B1KTsKKworICAgIGlmICggaXNfaWRsZV92Y3B1KHNuZXh0LT52Y3B1KSApCisgICAgICAg IHJldHVybiBDU0NIRURfTUFYX1RJTUVSOworCisgICAgLyogQmFzaWMgdGltZSAqLworICAgIHRp bWUgPSBjMnQoc25leHQtPmNyZWRpdCwgc25leHQpOworCisgICAgLyogTmV4dCBndXkgb24gcnVu cXVldWUgKi8KKyAgICBpZiAoICEgbGlzdF9lbXB0eShydW5xKSApCisgICAgeworICAgICAgICBz dHJ1Y3QgY3NjaGVkX3ZjcHUgKnN2YyA9IF9fcnVucV9lbGVtKHJ1bnEtPm5leHQpOworICAgICAg ICBzX3RpbWVfdCBudGltZTsKKworICAgICAgICBpZiAoICEgaXNfaWRsZV92Y3B1KHN2Yy0+dmNw dSkgKQorICAgICAgICB7CisgICAgICAgICAgICBudGltZSA9IGMydChzbmV4dC0+Y3JlZGl0IC0g c3ZjLT5jcmVkaXQsIHNuZXh0KTsKKworICAgICAgICAgICAgaWYgKCB0aW1lID4gbnRpbWUgKQor ICAgICAgICAgICAgICAgIHRpbWUgPSBudGltZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8q IENoZWNrIGxpbWl0cyAqLworICAgIGlmICggdGltZSA8IENTQ0hFRF9NSU5fVElNRVIgKQorICAg ICAgICB0aW1lID0gQ1NDSEVEX01JTl9USU1FUjsKKyAgICBlbHNlIGlmICggdGltZSA+IENTQ0hF RF9NQVhfVElNRVIgKQorICAgICAgICB0aW1lID0gQ1NDSEVEX01BWF9USU1FUjsKKworICAgIHJl dHVybiB0aW1lOworfQorCit2b2lkIF9fZHVtcF9leGVjc3RhdGUodm9pZCAqdW51c2VkKTsKKwor LyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgaW4gdGhlIGNyaXRpY2FsIHBhdGguIEl0IGlzIGRlc2ln bmVkIHRvIGJlIHNpbXBsZSBhbmQKKyAqIGZhc3QgZm9yIHRoZSBjb21tb24gY2FzZS4KKyAqLwor c3RhdGljIHN0cnVjdCB0YXNrX3NsaWNlCitjc2NoZWRfc2NoZWR1bGUoc190aW1lX3Qgbm93KQor eworICAgIGNvbnN0IGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisgICAgc3RydWN0IGxp c3RfaGVhZCAqIGNvbnN0IHJ1bnEgPSBSVU5RKGNwdSk7CisgICAgLy9zdHJ1Y3QgY3NjaGVkX3Bj cHUgKnNwYyA9IENTQ0hFRF9QQ1BVKGNwdSk7CisgICAgc3RydWN0IGNzY2hlZF92Y3B1ICogY29u c3Qgc2N1cnIgPSBDU0NIRURfVkNQVShjdXJyZW50KTsKKyAgICBzdHJ1Y3QgY3NjaGVkX3ZjcHUg KnNuZXh0OworICAgIHN0cnVjdCB0YXNrX3NsaWNlIHJldDsKKyAgICBpbnQgZmxhZ3M7CisKKyAg ICBDU0NIRURfVkNQVV9DSEVDSyhjdXJyZW50KTsKKworICAgIGQycHJpbnRrKCJzYyBwJWQgYyBk JWR2JWQgbm93ICUiUFJJX3N0aW1lIlxuIiwKKyAgICAgICAgICAgICBjcHUsCisgICAgICAgICAg ICAgc2N1cnItPnZjcHUtPmRvbWFpbi0+ZG9tYWluX2lkLAorICAgICAgICAgICAgIHNjdXJyLT52 Y3B1LT52Y3B1X2lkLAorICAgICAgICAgICAgIG5vdyk7CisKKworICAgIC8qIEZJWE1FOiBSdW5x dWV1ZSBwZXIgTDIgKi8KKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmY3NjaGVkX3ByaXYubG9jaywg ZmxhZ3MpOworCisgICAgLyogVXBkYXRlIGNyZWRpdHMgKi8KKyAgICBidXJuX2NyZWRpdHMoc2N1 cnIsIG5vdyk7CisKKyAgICAvKgorICAgICAqIFNlbGVjdCBuZXh0IHJ1bm5hYmxlIGxvY2FsIFZD UFUgKGllIHRvcCBvZiBsb2NhbCBydW5xKQorICAgICAqIEluc2VydCB3aWxsIGNhdXNlIGNyZWRp dHMgdG8gYmUgdXBkYXRlZC4gCisgICAgICovCisgICAgaWYgKCB2Y3B1X3J1bm5hYmxlKGN1cnJl bnQpICkKKyAgICAgICAgcnVucV9pbnNlcnQoY3B1LCBzY3Vycik7CisgICAgZWxzZQorICAgICAg ICBCVUdfT04oIGlzX2lkbGVfdmNwdShjdXJyZW50KSB8fCBsaXN0X2VtcHR5KHJ1bnEpICk7CisK KyAgICBzbmV4dCA9IF9fcnVucV9lbGVtKHJ1bnEtPm5leHQpOworCisgICAgaWYgKCBzbmV4dC0+ Y3JlZGl0IDw9IENTQ0hFRF9DUkVESVRfUkVTRVQgJiYgIWlzX2lkbGVfdmNwdShzbmV4dC0+dmNw dSkgKQorICAgIHsKKyAgICAgICAgLyogSWYgdGhlIG5leHQgaXRlbSBoYXMgPD0gMCBjcmVkaXRz LCB1cGRhdGUgY3JlZGl0cyBhbmQgcmVzb3J0ICovCisgICAgICAgIHJlc2V0X2NyZWRpdChjcHUs IG5vdyk7CisgICAgfQorICAgIAorICAgIF9fcnVucV9yZW1vdmUoc25leHQpOworCisgICAgLyog SEFDSy4gIE11bHRpcGxlIGNwdXMgYXJlIHNoYXJpbmcgYSBydW5xdWV1ZTsgYnV0IGR1ZSB0byB0 aGUgd2F5CisgICAgICogdGhpbmdzIGFyZSBzZXQgdXAsIGl0J3MgcG9zc2libGUgZm9yIGEgdmNw dSB0byBiZSBzY2hlZHVsZWQgb3V0IG9uIG9uZQorICAgICAqIGNwdSBhbmQgcHV0IG9uIHRoZSBy dW5xdWV1ZSwgYW5kIHRha2VuIG9mZiBieSBhbm90aGVyIGNwdSwgYmVmb3JlIHRoZSBmaXJzdAor ICAgICAqIGNwdSBoYXMgYWN0dWFsbHkgY29tcGxldGVkIHRoZSBjb250ZXh0IHN3aXRjaCAoaW5k aWNhdGVkIGJ5IGlzX3J1bm5pbmcpLgorICAgICAqIAorICAgICAqIFNvIGluIGdlbmVyYWwgd2Ug anVzdCB3YWl0IGZvciBpc19ydW5uaW5nIHRvIGJlIGZhbHNlLCBhbHdheXMgY2hlY2tpbmcKKyAg ICAgKiB0byBzZWUgaWYgaXQgc2hvdWxkIHN0aWxsIGJlIHB1dCBvbiB0aGUgcnVucXVldWUgKGku ZS4sIGl0IG1heSBiZQorICAgICAqIHBhdXNlZCkuCisgICAgICoKKyAgICAgKiBFdmVuIHNvLCBv Y2Nhc2lvbmFsbHkgd2UgZ2V0IGludG8gYSBkZWFkbG9jayBzaXR1YXRpb24uICBJIGhhdmVuJ3Qg Zm91bmQKKyAgICAgKiBvdXQgd2hvIHRoZSBvdGhlciAiaG9sZC1hbmQtd2FpdCItZXIgaXMgYmVj YXVzZSB0aGV5IHNlZW0gdG8gaGF2ZQorICAgICAqIGlycXMgZGlzYWJsZWQuICBJbiBhbnkgY2Fz ZSwgaWYgd2Ugc3BpbiBmb3IgNjVLIHRpbWVzLCB3ZSBhc3N1bWUgdGhlcmUncworICAgICAqIGEg ZGVhZGxvY2sgYW5kIHB1dCB0aGUgdmNwdSBvbiB0aGUgdGFpbCBvZiB0aGUgcnVucXVldWUgKHll cywgYmVoaW5kIHRoZQorICAgICAqIGlkbGUgdmNwdXMpLiAgSXQgd2lsbCBiZSByZS1vcmRlcmVk IGF0IG1vc3QgMTBtcyBsYXRlciB3aGVuIHdlIGRvIGEKKyAgICAgKiBydW5xdWV1ZSBzb3J0Lgor ICAgICAqCisgICAgICogT3RoZXIgaG9sZC1hbmQtd2FpdGVyczoKKyAgICAgKiArIGZsdXNoX3Rs Yl9tYXNrKCksIHdoaWNoIHdpbGwgdHJ5IHRvIGdldCBhIHN5bmNfbGF6eV9leGVjc3RhdGUuCisg ICAgICogKyB2Y3B1X3dha2UoKTogaWYgYW4gaW50ZXJydXB0IHRoYXQgY2F1c2VzIGEgd2FrZSBo YXBwZW5zIGJldHdlZW4gdW5sb2NrIGluIHNjaGVkdWxlCisgICAgICogICBhbmQgaXJxX2Rpc2Fi bGUoKSBpbiBjb250ZXh0X3N3aXRjaCgpLCBpdCB0cmllcyB0byBncmFiIHRoZSB2Y3B1J3MgY3B1 J3Mgc2NoZWR1bGUgbG9jaworICAgICAqICAgKHdoaWNoIHdlJ3JlIGhvbGRpbmcpLgorICAgICAq Ki8KKyAgICBpZiAoIHNuZXh0ICE9IHNjdXJyICYmIHNuZXh0LT52Y3B1LT5pc19ydW5uaW5nICkK KyAgICB7CisgICAgICAgIGludCBjb3VudCA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg IEJVR19PTihjb3VudCA8IDApOworICAgICAgICAgICAgY291bnQrKzsKKworICAgICAgICAgICAg aWYgKCAoY291bnQgJiAweGZmZmYpID09IDAgKSB7CisgICAgICAgICAgICAgICAgcHJpbnRrKCJw JWQgZCVkdiVkIHJ1bm5pbmcgb24gcCVkLCBwYXNzZWQgJWQgaXRlcmF0aW9ucyFcbiIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgY3B1LCBzbmV4dC0+dmNwdS0+ZG9tYWluLT5kb21haW5faWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgc25leHQtPnZjcHUtPnZjcHVfaWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgc25leHQtPnZjcHUtPnByb2Nlc3NvciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICBjb3VudCk7CisgICAgICAgICAgICAgICAgc2V0X2JpdChfVlBGX2RlYWRsb2Nr LCAmc25leHQtPnZjcHUtPnBhdXNlX2ZsYWdzKTsKKyAgICAgICAgICAgICAgICBCVUdfT04oIHZj cHVfcnVubmFibGUoc25leHQtPnZjcHUpICk7CisKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoIHZj cHVfcnVubmFibGUoc25leHQtPnZjcHUpICkKKyAgICAgICAgICAgICAgICBydW5xX2luc2VydChj cHUsIHNuZXh0KTsKKworICAgICAgICAgICAgQlVHX09OKGxpc3RfZW1wdHkocnVucSkpOworCisg ICAgICAgICAgICBzbmV4dCA9IF9fcnVucV9lbGVtKHJ1bnEtPm5leHQpOworICAgICAgICAgICAg X19ydW5xX3JlbW92ZShzbmV4dCk7CisgICAgICAgIH0gd2hpbGUgKCBzbmV4dCAhPSBzY3VyciAm JiBzbmV4dC0+dmNwdS0+aXNfcnVubmluZyApOworICAgICAgICAvL3ByaW50aygiZG9uZVxuIik7 CisgICAgfQorCisgICAgLyogRklYTUU6IFRoaW5rIGFib3V0IHRoaXMgc29tZSBtb3JlLiAqLwor ICAgIHNuZXh0LT52Y3B1LT5wcm9jZXNzb3IgPSBjcHU7CisKKyAgICBzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZjc2NoZWRfcHJpdi5sb2NrLCBmbGFncyk7CisKKyNpZiAwCisgICAgLyoKKyAgICAg KiBVcGRhdGUgaWRsZXJzIG1hc2sgaWYgbmVjZXNzYXJ5LiBXaGVuIHdlJ3JlIGlkbGluZywgb3Ro ZXIgQ1BVcworICAgICAqIHdpbGwgdGlja2xlIHVzIHdoZW4gdGhleSBnZXQgZXh0cmEgd29yay4K KyAgICAgKi8KKyAgICBpZiAoIGlzX2lkbGVfdmNwdShzbmV4dC0+dmNwdSkgKQorICAgIHsKKyAg ICAgICAgaWYgKCAhY3B1X2lzc2V0KGNwdSwgY3NjaGVkX3ByaXYuaWRsZXJzKSApCisgICAgICAg ICAgICBjcHVfc2V0KGNwdSwgY3NjaGVkX3ByaXYuaWRsZXJzKTsKKyAgICB9CisgICAgZWxzZSBp ZiAoIGNwdV9pc3NldChjcHUsIGNzY2hlZF9wcml2LmlkbGVycykgKQorICAgIHsKKyAgICAgICAg Y3B1X2NsZWFyKGNwdSwgY3NjaGVkX3ByaXYuaWRsZXJzKTsKKyAgICB9CisjZW5kaWYKKworICAg IGlmICggIWlzX2lkbGVfdmNwdShzbmV4dC0+dmNwdSkgKQorICAgICAgICBzbmV4dC0+c3RhcnRf dGltZSA9IG5vdzsKKyAgICAvKgorICAgICAqIFJldHVybiB0YXNrIHRvIHJ1biBuZXh0Li4uCisg ICAgICovCisgICAgcmV0LnRpbWUgPSBjc2NoZWRfcnVudGltZShjcHUsIHNuZXh0KTsKKyAgICBy ZXQudGFzayA9IHNuZXh0LT52Y3B1OworCisgICAgQ1NDSEVEX1ZDUFVfQ0hFQ0socmV0LnRhc2sp OworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkCitjc2NoZWRfZHVtcF92Y3B1KHN0 cnVjdCBjc2NoZWRfdmNwdSAqc3ZjKQoreworICAgIHByaW50aygiWyVpLiVpXSBmbGFncz0leCBj cHU9JWkiLAorICAgICAgICAgICAgc3ZjLT52Y3B1LT5kb21haW4tPmRvbWFpbl9pZCwKKyAgICAg ICAgICAgIHN2Yy0+dmNwdS0+dmNwdV9pZCwKKyAgICAgICAgICAgIHN2Yy0+ZmxhZ3MsCisgICAg ICAgICAgICBzdmMtPnZjcHUtPnByb2Nlc3Nvcik7CisKKyAgICBwcmludGsoIiBjcmVkaXQ9JSIg UFJJaTMyIiBbdz0ldV0iLCBzdmMtPmNyZWRpdCwgc3ZjLT53ZWlnaHQpOworCisgICAgcHJpbnRr KCJcbiIpOworfQorCitzdGF0aWMgdm9pZAorY3NjaGVkX2R1bXBfcGNwdShpbnQgY3B1KQorewor ICAgIHN0cnVjdCBsaXN0X2hlYWQgKnJ1bnEsICppdGVyOworICAgIC8vc3RydWN0IGNzY2hlZF9w Y3B1ICpzcGM7CisgICAgc3RydWN0IGNzY2hlZF92Y3B1ICpzdmM7CisgICAgaW50IGxvb3A7Cisg ICAgY2hhciBjcHVzdHJbMTAwXTsKKworICAgIC8vc3BjID0gQ1NDSEVEX1BDUFUoY3B1KTsKKyAg ICBydW5xID0gUlVOUShjcHUpOworCisgICAgY3B1bWFza19zY25wcmludGYoY3B1c3RyLCBzaXpl b2YoY3B1c3RyKSwgcGVyX2NwdShjcHVfc2libGluZ19tYXAsY3B1KSk7CisgICAgcHJpbnRrKCIg c2libGluZz0lcywgIiwgY3B1c3RyKTsKKyAgICBjcHVtYXNrX3NjbnByaW50ZihjcHVzdHIsIHNp emVvZihjcHVzdHIpLCBwZXJfY3B1KGNwdV9jb3JlX21hcCxjcHUpKTsKKyAgICBwcmludGsoImNv cmU9JXNcbiIsIGNwdXN0cik7CisKKyAgICAvKiBjdXJyZW50IFZDUFUgKi8KKyAgICBzdmMgPSBD U0NIRURfVkNQVShwZXJfY3B1KHNjaGVkdWxlX2RhdGEsIGNwdSkuY3Vycik7CisgICAgaWYgKCBz dmMgKQorICAgIHsKKyAgICAgICAgcHJpbnRrKCJcdHJ1bjogIik7CisgICAgICAgIGNzY2hlZF9k dW1wX3ZjcHUoc3ZjKTsKKyAgICB9CisKKyAgICBsb29wID0gMDsKKyAgICBsaXN0X2Zvcl9lYWNo KCBpdGVyLCBydW5xICkKKyAgICB7CisgICAgICAgIHN2YyA9IF9fcnVucV9lbGVtKGl0ZXIpOwor ICAgICAgICBpZiAoIHN2YyApCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50aygiXHQlM2Q6 ICIsICsrbG9vcCk7CisgICAgICAgICAgICBjc2NoZWRfZHVtcF92Y3B1KHN2Yyk7CisgICAgICAg IH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitjc2NoZWRfZHVtcCh2b2lkKQoreworICAgIHN0 cnVjdCBsaXN0X2hlYWQgKml0ZXJfc2RvbSwgKml0ZXJfc3ZjOworICAgIGludCBsb29wOworCisg ICAgcHJpbnRrKCJpbmZvOlxuIgorICAgICAgICAgICAiXHRuY3B1cyAgICAgICAgICAgICAgPSAl dVxuIgorICAgICAgICAgICAiXHRkZWZhdWx0LXdlaWdodCAgICAgPSAlZFxuIiwKKyAgICAgICAg ICAgY3NjaGVkX3ByaXYubmNwdXMsCisgICAgICAgICAgIENTQ0hFRF9ERUZBVUxUX1dFSUdIVCk7 CisKKyAgICBwcmludGsoImFjdGl2ZSB2Y3B1czpcbiIpOworICAgIGxvb3AgPSAwOworICAgIGxp c3RfZm9yX2VhY2goIGl0ZXJfc2RvbSwgJmNzY2hlZF9wcml2LnNkb20gKQorICAgIHsKKyAgICAg ICAgc3RydWN0IGNzY2hlZF9kb20gKnNkb207CisgICAgICAgIHNkb20gPSBsaXN0X2VudHJ5KGl0 ZXJfc2RvbSwgc3RydWN0IGNzY2hlZF9kb20sIHNkb21fZWxlbSk7CisKKyAgICAgICAgbGlzdF9m b3JfZWFjaCggaXRlcl9zdmMsICZzZG9tLT52Y3B1ICkKKyAgICAgICAgeworICAgICAgICAgICAg c3RydWN0IGNzY2hlZF92Y3B1ICpzdmM7CisgICAgICAgICAgICBzdmMgPSBsaXN0X2VudHJ5KGl0 ZXJfc3ZjLCBzdHJ1Y3QgY3NjaGVkX3ZjcHUsIHNkb21fZWxlbSk7CisKKyAgICAgICAgICAgIHBy aW50aygiXHQlM2Q6ICIsICsrbG9vcCk7CisgICAgICAgICAgICBjc2NoZWRfZHVtcF92Y3B1KHN2 Yyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitjc2NoZWRfaW5pdCh2b2lk KQoreworICAgIHNwaW5fbG9ja19pbml0KCZjc2NoZWRfcHJpdi5sb2NrKTsKKyAgICBJTklUX0xJ U1RfSEVBRCgmY3NjaGVkX3ByaXYuc2RvbSk7CisgICAgSU5JVF9MSVNUX0hFQUQoJmNzY2hlZF9w cml2LnN2Yyk7CisKKyAgICBjc2NoZWRfcHJpdi5uY3B1cyA9IDA7CisKKyAgICAvKiBGSVhNRTog UnVucXVldWUgcGVyIGwyICovCisgICAgY3NjaGVkX3ByaXYubWF4X3dlaWdodCA9IDE7CisgICAg SU5JVF9MSVNUX0hFQUQoJmNzY2hlZF9wcml2LnJ1bnEpOworfQorCitzdHJ1Y3Qgc2NoZWR1bGVy IHNjaGVkX2NyZWRpdDJfZGVmID0geworICAgIC5uYW1lICAgICAgICAgICA9ICJTTVAgQ3JlZGl0 IFNjaGVkdWxlciByZXYyIiwKKyAgICAub3B0X25hbWUgICAgICAgPSAiY3JlZGl0MiIsCisgICAg LnNjaGVkX2lkICAgICAgID0gWEVOX1NDSEVEVUxFUl9DUkVESVQyLAorCisgICAgLmluaXRfZG9t YWluICAgID0gY3NjaGVkX2RvbV9pbml0LAorICAgIC5kZXN0cm95X2RvbWFpbiA9IGNzY2hlZF9k b21fZGVzdHJveSwKKworICAgIC5pbml0X3ZjcHUgICAgICA9IGNzY2hlZF92Y3B1X2luaXQsCisg ICAgLmRlc3Ryb3lfdmNwdSAgID0gY3NjaGVkX3ZjcHVfZGVzdHJveSwKKworICAgIC5zbGVlcCAg ICAgICAgICA9IGNzY2hlZF92Y3B1X3NsZWVwLAorICAgIC53YWtlICAgICAgICAgICA9IGNzY2hl ZF92Y3B1X3dha2UsCisKKyAgICAuYWRqdXN0ICAgICAgICAgPSBjc2NoZWRfZG9tX2NudGwsCisK KyAgICAucGlja19jcHUgICAgICAgPSBjc2NoZWRfY3B1X3BpY2ssCisgICAgLmRvX3NjaGVkdWxl ICAgID0gY3NjaGVkX3NjaGVkdWxlLAorCisgICAgLmR1bXBfY3B1X3N0YXRlID0gY3NjaGVkX2R1 bXBfcGNwdSwKKyAgICAuZHVtcF9zZXR0aW5ncyAgPSBjc2NoZWRfZHVtcCwKKyAgICAuaW5pdCAg ICAgICAgICAgPSBjc2NoZWRfaW5pdCwKK307CmRpZmYgLXIgMjNkMzRjM2JhNGI3IHhlbi9jb21t b24vc2NoZWR1bGUuYwotLS0gYS94ZW4vY29tbW9uL3NjaGVkdWxlLmMJTW9uIE5vdiAzMCAxNjox MzowMSAyMDA5IC0wNjAwCisrKyBiL3hlbi9jb21tb24vc2NoZWR1bGUuYwlNb24gRGVjIDA3IDE2 OjU5OjUzIDIwMDkgKzAwMDAKQEAgLTU4LDkgKzU4LDExIEBACiAKIGV4dGVybiBjb25zdCBzdHJ1 Y3Qgc2NoZWR1bGVyIHNjaGVkX3NlZGZfZGVmOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBzY2hlZHVs ZXIgc2NoZWRfY3JlZGl0X2RlZjsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc2NoZWR1bGVyIHNjaGVk X2NyZWRpdDJfZGVmOwogc3RhdGljIGNvbnN0IHN0cnVjdCBzY2hlZHVsZXIgKl9faW5pdGRhdGEg c2NoZWR1bGVyc1tdID0gewogICAgICZzY2hlZF9zZWRmX2RlZiwKICAgICAmc2NoZWRfY3JlZGl0 X2RlZiwKKyAgICAmc2NoZWRfY3JlZGl0Ml9kZWYsCiAgICAgTlVMTAogfTsKIApkaWZmIC1yIDIz ZDM0YzNiYTRiNyB4ZW4vaW5jbHVkZS9wdWJsaWMvZG9tY3RsLmgKLS0tIGEveGVuL2luY2x1ZGUv cHVibGljL2RvbWN0bC5oCU1vbiBOb3YgMzAgMTY6MTM6MDEgMjAwOSAtMDYwMAorKysgYi94ZW4v aW5jbHVkZS9wdWJsaWMvZG9tY3RsLmgJTW9uIERlYyAwNyAxNjo1OTo1MyAyMDA5ICswMDAwCkBA IC0yOTcsNiArMjk3LDcgQEAKIC8qIFNjaGVkdWxlciB0eXBlcy4gKi8KICNkZWZpbmUgWEVOX1ND SEVEVUxFUl9TRURGICAgICA0CiAjZGVmaW5lIFhFTl9TQ0hFRFVMRVJfQ1JFRElUICAgNQorI2Rl ZmluZSBYRU5fU0NIRURVTEVSX0NSRURJVDIgIDYKIC8qIFNldCBvciBnZXQgaW5mbz8gKi8KICNk ZWZpbmUgWEVOX0RPTUNUTF9TQ0hFRE9QX3B1dGluZm8gMAogI2RlZmluZSBYRU5fRE9NQ1RMX1ND SEVET1BfZ2V0aW5mbyAxCkBAIC0zMTUsNiArMzE2LDkgQEAKICAgICAgICAgICAgIHVpbnQxNl90 IHdlaWdodDsKICAgICAgICAgICAgIHVpbnQxNl90IGNhcDsKICAgICAgICAgfSBjcmVkaXQ7Cisg ICAgICAgIHN0cnVjdCB4ZW5fZG9tY3RsX3NjaGVkX2NyZWRpdDIgeworICAgICAgICAgICAgdWlu dDE2X3Qgd2VpZ2h0OworICAgICAgICB9IGNyZWRpdDI7CiAgICAgfSB1OwogfTsKIHR5cGVkZWYg c3RydWN0IHhlbl9kb21jdGxfc2NoZWR1bGVyX29wIHhlbl9kb21jdGxfc2NoZWR1bGVyX29wX3Q7 CmRpZmYgLXIgMjNkMzRjM2JhNGI3IHhlbi9pbmNsdWRlL3B1YmxpYy90cmFjZS5oCi0tLSBhL3hl bi9pbmNsdWRlL3B1YmxpYy90cmFjZS5oCU1vbiBOb3YgMzAgMTY6MTM6MDEgMjAwOSAtMDYwMAor KysgYi94ZW4vaW5jbHVkZS9wdWJsaWMvdHJhY2UuaAlNb24gRGVjIDA3IDE2OjU5OjUzIDIwMDkg KzAwMDAKQEAgLTUzLDYgKzUzLDcgQEAKICNkZWZpbmUgVFJDX0hWTV9IQU5ETEVSICAgMHgwMDA4 MjAwMCAgIC8qIHZhcmlvdXMgSFZNIGhhbmRsZXJzICAgICAgKi8KIAogI2RlZmluZSBUUkNfU0NI RURfTUlOICAgICAgIDB4MDAwMjEwMDAgICAvKiBKdXN0IHJ1bnN0YXRlIGNoYW5nZXMgKi8KKyNk ZWZpbmUgVFJDX1NDSEVEX0NMQVNTICAgICAweDAwMDIyMDAwICAgLyogU2NoZWR1bGVyLXNwZWNp ZmljICAgICovCiAjZGVmaW5lIFRSQ19TQ0hFRF9WRVJCT1NFICAgMHgwMDAyODAwMCAgIC8qIE1v cmUgaW5jbHVzaXZlIHNjaGVkdWxpbmcgKi8KIAogLyogVHJhY2UgZXZlbnRzIHBlciBjbGFzcyAq LwpkaWZmIC1yIDIzZDM0YzNiYTRiNyB4ZW4vaW5jbHVkZS94ZW4vc2NoZWQuaAotLS0gYS94ZW4v aW5jbHVkZS94ZW4vc2NoZWQuaAlNb24gTm92IDMwIDE2OjEzOjAxIDIwMDkgLTA2MDAKKysrIGIv eGVuL2luY2x1ZGUveGVuL3NjaGVkLmgJTW9uIERlYyAwNyAxNjo1OTo1MyAyMDA5ICswMDAwCkBA IC01MzAsNiArNTMwLDggQEAKICAvKiBWQ1BVIGFmZmluaXR5IGhhcyBjaGFuZ2VkOiBtaWdyYXRp bmcgdG8gYSBuZXcgQ1BVLiAqLwogI2RlZmluZSBfVlBGX21pZ3JhdGluZyAgICAgICAzCiAjZGVm aW5lIFZQRl9taWdyYXRpbmcgICAgICAgICgxVUw8PF9WUEZfbWlncmF0aW5nKQorI2RlZmluZSBf VlBGX2RlYWRsb2NrICAgICAgICA0CisjZGVmaW5lIFZQRl9kZWFkbG9jayAgICAgICAgKDFVTDw8 X1ZQRl9taWdyYXRpbmcpCiAKIHN0YXRpYyBpbmxpbmUgaW50IHZjcHVfcnVubmFibGUoc3RydWN0 IHZjcHUgKnYpCiB7Cg== --000e0cdfd704c6493d047a266b25 Content-Type: text/x-diff; charset=US-ASCII; name="credit2-tools.diff" Content-Disposition: attachment; filename="credit2-tools.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g2xhp8ia1 ZGlmZiAtciBkMmYwODQzYTM4ZTQgdG9vbHMvbGlieGMvTWFrZWZpbGUKLS0tIGEvdG9vbHMvbGli eGMvTWFrZWZpbGUJV2VkIE9jdCAyOCAxNDoyMTozNyAyMDA5ICswMDAwCisrKyBiL3Rvb2xzL2xp YnhjL01ha2VmaWxlCVdlZCBPY3QgMjggMTQ6NDI6MTcgMjAwOSArMDAwMApAQCAtMTcsNiArMTcs NyBAQAogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfcHJpdmF0ZS5jCiBDVFJMX1NSQ1MteSAgICAg ICArPSB4Y19zZWRmLmMKIENUUkxfU1JDUy15ICAgICAgICs9IHhjX2NzY2hlZC5jCitDVFJMX1NS Q1MteSAgICAgICArPSB4Y19jc2NoZWQyLmMKIENUUkxfU1JDUy15ICAgICAgICs9IHhjX3RidWYu YwogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNfcG0uYwogQ1RSTF9TUkNTLXkgICAgICAgKz0geGNf Y3B1X2hvdHBsdWcuYwpkaWZmIC1yIGQyZjA4NDNhMzhlNCB0b29scy9saWJ4Yy94Y19jc2NoZWQy LmMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvdG9v bHMvbGlieGMveGNfY3NjaGVkMi5jCVdlZCBPY3QgMjggMTQ6NDI6MTcgMjAwOSArMDAwMApAQCAt MCwwICsxLDUwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKEMpIDIwMDYgLSBFbW1hbnVl bCBBY2thb3V5IC0gWGVuU291cmNlIEluYy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICog ICAgICAgIEZpbGU6IHhjX2NzY2hlZC5jCisgKiAgICAgIEF1dGhvcjogRW1tYW51ZWwgQWNrYW91 eQorICoKKyAqIERlc2NyaXB0aW9uOiBYQyBJbnRlcmZhY2UgdG8gdGhlIGNyZWRpdCBzY2hlZHVs ZXIKKyAqCisgKi8KKyNpbmNsdWRlICJ4Y19wcml2YXRlLmgiCisKKworaW50Cit4Y19zY2hlZF9j cmVkaXQyX2RvbWFpbl9zZXQoCisgICAgaW50IHhjX2hhbmRsZSwKKyAgICB1aW50MzJfdCBkb21p ZCwKKyAgICBzdHJ1Y3QgeGVuX2RvbWN0bF9zY2hlZF9jcmVkaXQyICpzZG9tKQoreworICAgIERF Q0xBUkVfRE9NQ1RMOworCisgICAgZG9tY3RsLmNtZCA9IFhFTl9ET01DVExfc2NoZWR1bGVyX29w OworICAgIGRvbWN0bC5kb21haW4gPSAoZG9taWRfdCkgZG9taWQ7CisgICAgZG9tY3RsLnUuc2No ZWR1bGVyX29wLnNjaGVkX2lkID0gWEVOX1NDSEVEVUxFUl9DUkVESVQyOworICAgIGRvbWN0bC51 LnNjaGVkdWxlcl9vcC5jbWQgPSBYRU5fRE9NQ1RMX1NDSEVET1BfcHV0aW5mbzsKKyAgICBkb21j dGwudS5zY2hlZHVsZXJfb3AudS5jcmVkaXQyID0gKnNkb207CisKKyAgICByZXR1cm4gZG9fZG9t Y3RsKHhjX2hhbmRsZSwgJmRvbWN0bCk7Cit9CisKK2ludAoreGNfc2NoZWRfY3JlZGl0Ml9kb21h aW5fZ2V0KAorICAgIGludCB4Y19oYW5kbGUsCisgICAgdWludDMyX3QgZG9taWQsCisgICAgc3Ry dWN0IHhlbl9kb21jdGxfc2NoZWRfY3JlZGl0MiAqc2RvbSkKK3sKKyAgICBERUNMQVJFX0RPTUNU TDsKKyAgICBpbnQgZXJyOworCisgICAgZG9tY3RsLmNtZCA9IFhFTl9ET01DVExfc2NoZWR1bGVy X29wOworICAgIGRvbWN0bC5kb21haW4gPSAoZG9taWRfdCkgZG9taWQ7CisgICAgZG9tY3RsLnUu c2NoZWR1bGVyX29wLnNjaGVkX2lkID0gWEVOX1NDSEVEVUxFUl9DUkVESVQyOworICAgIGRvbWN0 bC51LnNjaGVkdWxlcl9vcC5jbWQgPSBYRU5fRE9NQ1RMX1NDSEVET1BfZ2V0aW5mbzsKKworICAg IGVyciA9IGRvX2RvbWN0bCh4Y19oYW5kbGUsICZkb21jdGwpOworICAgIGlmICggZXJyID09IDAg KQorICAgICAgICAqc2RvbSA9IGRvbWN0bC51LnNjaGVkdWxlcl9vcC51LmNyZWRpdDI7CisKKyAg ICByZXR1cm4gZXJyOworfQpkaWZmIC1yIGQyZjA4NDNhMzhlNCB0b29scy9saWJ4Yy94ZW5jdHJs LmgKLS0tIGEvdG9vbHMvbGlieGMveGVuY3RybC5oCVdlZCBPY3QgMjggMTQ6MjE6MzcgMjAwOSAr MDAwMAorKysgYi90b29scy9saWJ4Yy94ZW5jdHJsLmgJV2VkIE9jdCAyOCAxNDo0MjoxNyAyMDA5 ICswMDAwCkBAIC00NjgsNiArNDY4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdWludDMyX3QgZG9taWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHhlbl9kb21jdGxfc2NoZWRfY3JlZGl0ICpzZG9tKTsKIAoraW50IHhjX3NjaGVkX2NyZWRpdDJf ZG9tYWluX3NldChpbnQgeGNfaGFuZGxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4 ZW5fZG9tY3RsX3NjaGVkX2NyZWRpdDIgKnNkb20pOworCitpbnQgeGNfc2NoZWRfY3JlZGl0Ml9k b21haW5fZ2V0KGludCB4Y19oYW5kbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhl bl9kb21jdGxfc2NoZWRfY3JlZGl0MiAqc2RvbSk7CisKIC8qKgogICogVGhpcyBmdW5jdGlvbiBz ZW5kcyBhIHRyaWdnZXIgdG8gYSBkb21haW4uCiAgKgpkaWZmIC1yIGQyZjA4NDNhMzhlNCB0b29s cy9weXRob24veGVuL2xvd2xldmVsL3hjL3hjLmMKLS0tIGEvdG9vbHMvcHl0aG9uL3hlbi9sb3ds ZXZlbC94Yy94Yy5jCVdlZCBPY3QgMjggMTQ6MjE6MzcgMjAwOSArMDAwMAorKysgYi90b29scy9w eXRob24veGVuL2xvd2xldmVsL3hjL3hjLmMJV2VkIE9jdCAyOCAxNDo0MjoxNyAyMDA5ICswMDAw CkBAIC0xMzQwLDYgKzEzNDAsNDUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FwIiwg ICAgIHNkb20uY2FwKTsKIH0KIAorc3RhdGljIFB5T2JqZWN0ICpweXhjX3NjaGVkX2NyZWRpdDJf ZG9tYWluX3NldChYY09iamVjdCAqc2VsZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQeU9iamVjdCAqYXJncywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQeU9iamVjdCAqa3dkcykKK3sKKyAgICB1aW50MzJfdCBk b21pZDsKKyAgICB1aW50MTZfdCB3ZWlnaHQ7CisgICAgc3RhdGljIGNoYXIgKmt3ZF9saXN0W10g PSB7ICJkb21pZCIsICJ3ZWlnaHQiLCBOVUxMIH07CisgICAgc3RhdGljIGNoYXIga3dkX3R5cGVb XSA9ICJJfEgiOworICAgIHN0cnVjdCB4ZW5fZG9tY3RsX3NjaGVkX2NyZWRpdDIgc2RvbTsKKyAg ICAKKyAgICB3ZWlnaHQgPSAwOworICAgIGlmKCAhUHlBcmdfUGFyc2VUdXBsZUFuZEtleXdvcmRz KGFyZ3MsIGt3ZHMsIGt3ZF90eXBlLCBrd2RfbGlzdCwgCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJmRvbWlkLCAmd2VpZ2h0KSApCisgICAgICAgIHJldHVybiBOVUxMOwor CisgICAgc2RvbS53ZWlnaHQgPSB3ZWlnaHQ7CisKKyAgICBpZiAoIHhjX3NjaGVkX2NyZWRpdDJf ZG9tYWluX3NldChzZWxmLT54Y19oYW5kbGUsIGRvbWlkLCAmc2RvbSkgIT0gMCApCisgICAgICAg IHJldHVybiBweXhjX2Vycm9yX3RvX2V4Y2VwdGlvbigpOworCisgICAgUHlfSU5DUkVGKHplcm8p OworICAgIHJldHVybiB6ZXJvOworfQorCitzdGF0aWMgUHlPYmplY3QgKnB5eGNfc2NoZWRfY3Jl ZGl0Ml9kb21haW5fZ2V0KFhjT2JqZWN0ICpzZWxmLCBQeU9iamVjdCAqYXJncykKK3sKKyAgICB1 aW50MzJfdCBkb21pZDsKKyAgICBzdHJ1Y3QgeGVuX2RvbWN0bF9zY2hlZF9jcmVkaXQyIHNkb207 CisgICAgCisgICAgaWYoICFQeUFyZ19QYXJzZVR1cGxlKGFyZ3MsICJJIiwgJmRvbWlkKSApCisg ICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIGlmICggeGNfc2NoZWRfY3JlZGl0Ml9kb21h aW5fZ2V0KHNlbGYtPnhjX2hhbmRsZSwgZG9taWQsICZzZG9tKSAhPSAwICkKKyAgICAgICAgcmV0 dXJuIHB5eGNfZXJyb3JfdG9fZXhjZXB0aW9uKCk7CisKKyAgICByZXR1cm4gUHlfQnVpbGRWYWx1 ZSgie3M6SH0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICJ3ZWlnaHQiLCAgc2RvbS53ZWln aHQpOworfQorCiBzdGF0aWMgUHlPYmplY3QgKnB5eGNfZG9tYWluX3NldG1heG1lbShYY09iamVj dCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgICAgdWludDMyX3QgZG9tOwpAQCAtMTg3MSw2 ICsxOTEwLDI0IEBACiAgICAgICAiUmV0dXJuczogICBbZGljdF1cbiIKICAgICAgICIgd2VpZ2h0 ICAgIFtzaG9ydF06IGRvbWFpbidzIHNjaGVkdWxpbmcgd2VpZ2h0XG4ifSwKIAorICAgIHsgInNj aGVkX2NyZWRpdDJfZG9tYWluX3NldCIsCisgICAgICAoUHlDRnVuY3Rpb24pcHl4Y19zY2hlZF9j cmVkaXQyX2RvbWFpbl9zZXQsCisgICAgICBNRVRIX0tFWVdPUkRTLCAiXG4iCisgICAgICAiU2V0 IHRoZSBzY2hlZHVsaW5nIHBhcmFtZXRlcnMgZm9yIGEgZG9tYWluIHdoZW4gcnVubmluZyB3aXRo IHRoZVxuIgorICAgICAgIlNNUCBjcmVkaXQyIHNjaGVkdWxlci5cbiIKKyAgICAgICIgZG9taWQg ICAgIFtpbnRdOiAgIGRvbWFpbiBpZCB0byBzZXRcbiIKKyAgICAgICIgd2VpZ2h0ICAgIFtzaG9y dF06IGRvbWFpbidzIHNjaGVkdWxpbmcgd2VpZ2h0XG4iCisgICAgICAiUmV0dXJuczogW2ludF0g MCBvbiBzdWNjZXNzOyAtMSBvbiBlcnJvci5cbiIgfSwKKworICAgIHsgInNjaGVkX2NyZWRpdDJf ZG9tYWluX2dldCIsCisgICAgICAoUHlDRnVuY3Rpb24pcHl4Y19zY2hlZF9jcmVkaXQyX2RvbWFp bl9nZXQsCisgICAgICBNRVRIX1ZBUkFSR1MsICJcbiIKKyAgICAgICJHZXQgdGhlIHNjaGVkdWxp bmcgcGFyYW1ldGVycyBmb3IgYSBkb21haW4gd2hlbiBydW5uaW5nIHdpdGggdGhlXG4iCisgICAg ICAiU01QIGNyZWRpdDIgc2NoZWR1bGVyLlxuIgorICAgICAgIiBkb21pZCAgICAgW2ludF06ICAg ZG9tYWluIGlkIHRvIGdldFxuIgorICAgICAgIlJldHVybnM6ICAgW2RpY3RdXG4iCisgICAgICAi IHdlaWdodCAgICBbc2hvcnRdOiBkb21haW4ncyBzY2hlZHVsaW5nIHdlaWdodFxuIn0sCisKICAg ICB7ICJldnRjaG5fYWxsb2NfdW5ib3VuZCIsIAogICAgICAgKFB5Q0Z1bmN0aW9uKXB5eGNfZXZ0 Y2huX2FsbG9jX3VuYm91bmQsCiAgICAgICBNRVRIX1ZBUkFSR1MgfCBNRVRIX0tFWVdPUkRTLCAi XG4iCkBAIC0yMjMwLDYgKzIyODcsNyBAQAogICAgIC8qIEV4cG9zZSBzb21lIGxpYnhjIGNvbnN0 YW50cyB0byBQeXRob24gKi8KICAgICBQeU1vZHVsZV9BZGRJbnRDb25zdGFudChtLCAiWEVOX1ND SEVEVUxFUl9TRURGIiwgWEVOX1NDSEVEVUxFUl9TRURGKTsKICAgICBQeU1vZHVsZV9BZGRJbnRD b25zdGFudChtLCAiWEVOX1NDSEVEVUxFUl9DUkVESVQiLCBYRU5fU0NIRURVTEVSX0NSRURJVCk7 CisgICAgUHlNb2R1bGVfQWRkSW50Q29uc3RhbnQobSwgIlhFTl9TQ0hFRFVMRVJfQ1JFRElUMiIs IFhFTl9TQ0hFRFVMRVJfQ1JFRElUMik7CiAKIH0KIApkaWZmIC1yIGQyZjA4NDNhMzhlNCB0b29s cy9weXRob24veGVuL3hlbmQvWGVuZEFQSS5weQotLS0gYS90b29scy9weXRob24veGVuL3hlbmQv WGVuZEFQSS5weQlXZWQgT2N0IDI4IDE0OjIxOjM3IDIwMDkgKzAwMDAKKysrIGIvdG9vbHMvcHl0 aG9uL3hlbi94ZW5kL1hlbmRBUEkucHkJV2VkIE9jdCAyOCAxNDo0MjoxNyAyMDA5ICswMDAwCkBA IC0xNjEzLDggKzE2MTMsNyBAQAogICAgICAgICBpZiAnd2VpZ2h0JyBpbiB4ZW5pbmZvLmluZm9b J3ZjcHVzX3BhcmFtcyddIFwKICAgICAgICAgICAgYW5kICdjYXAnIGluIHhlbmluZm8uaW5mb1sn dmNwdXNfcGFyYW1zJ106CiAgICAgICAgICAgICB3ZWlnaHQgPSB4ZW5pbmZvLmluZm9bJ3ZjcHVz X3BhcmFtcyddWyd3ZWlnaHQnXQotICAgICAgICAgICAgY2FwID0geGVuaW5mby5pbmZvWyd2Y3B1 c19wYXJhbXMnXVsnY2FwJ10KLSAgICAgICAgICAgIHhlbmRvbS5kb21haW5fc2NoZWRfY3JlZGl0 X3NldCh4ZW5pbmZvLmdldERvbWlkKCksIHdlaWdodCwgY2FwKQorICAgICAgICAgICAgeGVuZG9t LmRvbWFpbl9zY2hlZF9jcmVkaXQyX3NldCh4ZW5pbmZvLmdldERvbWlkKCksIHdlaWdodCkKIAog ICAgIGRlZiBWTV9zZXRfVkNQVXNfbnVtYmVyX2xpdmUoc2VsZiwgXywgdm1fcmVmLCBudW0pOgog ICAgICAgICBkb20gPSBYZW5kRG9tYWluLmluc3RhbmNlKCkuZ2V0X3ZtX2J5X3V1aWQodm1fcmVm KQpkaWZmIC1yIGQyZjA4NDNhMzhlNCB0b29scy9weXRob24veGVuL3hlbmQvWGVuZERvbWFpbi5w eQotLS0gYS90b29scy9weXRob24veGVuL3hlbmQvWGVuZERvbWFpbi5weQlXZWQgT2N0IDI4IDE0 OjIxOjM3IDIwMDkgKzAwMDAKKysrIGIvdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hlbmREb21haW4u cHkJV2VkIE9jdCAyOCAxNDo0MjoxNyAyMDA5ICswMDAwCkBAIC0xNzU3LDYgKzE3NTcsNjAgQEAK ICAgICAgICAgICAgIGxvZy5leGNlcHRpb24oZXgpCiAgICAgICAgICAgICByYWlzZSBYZW5kRXJy b3Ioc3RyKGV4KSkKIAorICAgIGRlZiBkb21haW5fc2NoZWRfY3JlZGl0Ml9nZXQoc2VsZiwgZG9t aWQpOgorICAgICAgICAiIiJHZXQgY3JlZGl0MiBzY2hlZHVsZXIgcGFyYW1ldGVycyBmb3IgYSBk b21haW4uCisKKyAgICAgICAgQHBhcmFtIGRvbWlkOiBEb21haW4gSUQgb3IgTmFtZQorICAgICAg ICBAdHlwZSBkb21pZDogaW50IG9yIHN0cmluZy4KKyAgICAgICAgQHJ0eXBlOiBkaWN0IHdpdGgg a2V5cyAnd2VpZ2h0JworICAgICAgICBAcmV0dXJuOiBjcmVkaXQyIHNjaGVkdWxlciBwYXJhbWV0 ZXJzCisgICAgICAgICIiIgorICAgICAgICBkb21pbmZvID0gc2VsZi5kb21haW5fbG9va3VwX25y KGRvbWlkKQorICAgICAgICBpZiBub3QgZG9taW5mbzoKKyAgICAgICAgICAgIHJhaXNlIFhlbmRJ bnZhbGlkRG9tYWluKHN0cihkb21pZCkpCisgICAgICAgIAorICAgICAgICBpZiBkb21pbmZvLl9z dGF0ZUdldCgpIGluIChET01fU1RBVEVfUlVOTklORywgRE9NX1NUQVRFX1BBVVNFRCk6CisgICAg ICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgcmV0dXJuIHhjLnNjaGVkX2NyZWRpdDJfZG9t YWluX2dldChkb21pbmZvLmdldERvbWlkKCkpCisgICAgICAgICAgICBleGNlcHQgRXhjZXB0aW9u LCBleDoKKyAgICAgICAgICAgICAgICByYWlzZSBYZW5kRXJyb3Ioc3RyKGV4KSkKKyAgICAgICAg ZWxzZToKKyAgICAgICAgICAgIHJldHVybiB7J3dlaWdodCcgOiBkb21pbmZvLmdldFdlaWdodCgp fQorICAgIAorICAgIGRlZiBkb21haW5fc2NoZWRfY3JlZGl0Ml9zZXQoc2VsZiwgZG9taWQsIHdl aWdodCA9IE5vbmUpOgorICAgICAgICAiIiJTZXQgY3JlZGl0MiBzY2hlZHVsZXIgcGFyYW1ldGVy cyBmb3IgYSBkb21haW4uCisKKyAgICAgICAgQHBhcmFtIGRvbWlkOiBEb21haW4gSUQgb3IgTmFt ZQorICAgICAgICBAdHlwZSBkb21pZDogaW50IG9yIHN0cmluZy4KKyAgICAgICAgQHR5cGUgd2Vp Z2h0OiBpbnQKKyAgICAgICAgQHJ0eXBlOiAwCisgICAgICAgICIiIgorICAgICAgICBzZXRfd2Vp Z2h0ID0gRmFsc2UKKyAgICAgICAgZG9taW5mbyA9IHNlbGYuZG9tYWluX2xvb2t1cF9ucihkb21p ZCkKKyAgICAgICAgaWYgbm90IGRvbWluZm86CisgICAgICAgICAgICByYWlzZSBYZW5kSW52YWxp ZERvbWFpbihzdHIoZG9taWQpKQorICAgICAgICB0cnk6CisgICAgICAgICAgICBpZiB3ZWlnaHQg aXMgTm9uZToKKyAgICAgICAgICAgICAgICB3ZWlnaHQgPSBpbnQoMCkKKyAgICAgICAgICAgIGVs aWYgd2VpZ2h0IDwgMSBvciB3ZWlnaHQgPiA2NTUzNToKKyAgICAgICAgICAgICAgICByYWlzZSBY ZW5kRXJyb3IoIndlaWdodCBpcyBvdXQgb2YgcmFuZ2UiKQorICAgICAgICAgICAgZWxzZToKKyAg ICAgICAgICAgICAgICBzZXRfd2VpZ2h0ID0gVHJ1ZQorCisgICAgICAgICAgICBhc3NlcnQgdHlw ZSh3ZWlnaHQpID09IGludAorCisgICAgICAgICAgICByYyA9IDAKKyAgICAgICAgICAgIGlmIGRv bWluZm8uX3N0YXRlR2V0KCkgaW4gKERPTV9TVEFURV9SVU5OSU5HLCBET01fU1RBVEVfUEFVU0VE KToKKyAgICAgICAgICAgICAgICByYyA9IHhjLnNjaGVkX2NyZWRpdDJfZG9tYWluX3NldChkb21p bmZvLmdldERvbWlkKCksIHdlaWdodCkKKyAgICAgICAgICAgIGlmIHJjID09IDA6CisgICAgICAg ICAgICAgICAgaWYgc2V0X3dlaWdodDoKKyAgICAgICAgICAgICAgICAgICAgZG9taW5mby5zZXRX ZWlnaHQod2VpZ2h0KQorICAgICAgICAgICAgICAgIHNlbGYubWFuYWdlZF9jb25maWdfc2F2ZShk b21pbmZvKQorICAgICAgICAgICAgcmV0dXJuIHJjCisgICAgICAgIGV4Y2VwdCBFeGNlcHRpb24s IGV4OgorICAgICAgICAgICAgbG9nLmV4Y2VwdGlvbihleCkKKyAgICAgICAgICAgIHJhaXNlIFhl bmRFcnJvcihzdHIoZXgpKQorCiAgICAgZGVmIGRvbWFpbl9tYXhtZW1fc2V0KHNlbGYsIGRvbWlk LCBtZW0pOgogICAgICAgICAiIiJTZXQgdGhlIG1lbW9yeSBsaW1pdCBmb3IgYSBkb21haW4uCiAK ZGlmZiAtciBkMmYwODQzYTM4ZTQgdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hlbmREb21haW5JbmZv LnB5Ci0tLSBhL3Rvb2xzL3B5dGhvbi94ZW4veGVuZC9YZW5kRG9tYWluSW5mby5weQlXZWQgT2N0 IDI4IDE0OjIxOjM3IDIwMDkgKzAwMDAKKysrIGIvdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hlbmRE b21haW5JbmZvLnB5CVdlZCBPY3QgMjggMTQ6NDI6MTcgMjAwOSArMDAwMApAQCAtMjY0MCw2ICsy NjQwLDEwIEBACiAgICAgICAgICAgICBYZW5kRG9tYWluLmluc3RhbmNlKCkuZG9tYWluX3NjaGVk X2NyZWRpdF9zZXQoc2VsZi5nZXREb21pZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0V2VpZ2h0KCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5n ZXRDYXAoKSkKKyAgICAgICAgZWxpZiBYZW5kTm9kZS5pbnN0YW5jZSgpLnhlbnNjaGVkaW5mbygp ID09ICdjcmVkaXQyJzoKKyAgICAgICAgICAgIGZyb20geGVuLnhlbmQgaW1wb3J0IFhlbmREb21h aW4KKyAgICAgICAgICAgIFhlbmREb21haW4uaW5zdGFuY2UoKS5kb21haW5fc2NoZWRfY3JlZGl0 Ml9zZXQoc2VsZi5nZXREb21pZCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmdldFdlaWdodCgpKQogCiAgICAgZGVmIF9p bml0RG9tYWluKHNlbGYpOgogICAgICAgICBsb2cuZGVidWcoJ1hlbmREb21haW5JbmZvLmluaXRE b21haW46ICVzICVzJywKZGlmZiAtciBkMmYwODQzYTM4ZTQgdG9vbHMvcHl0aG9uL3hlbi94ZW5k L1hlbmROb2RlLnB5Ci0tLSBhL3Rvb2xzL3B5dGhvbi94ZW4veGVuZC9YZW5kTm9kZS5weQlXZWQg T2N0IDI4IDE0OjIxOjM3IDIwMDkgKzAwMDAKKysrIGIvdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hl bmROb2RlLnB5CVdlZCBPY3QgMjggMTQ6NDI6MTcgMjAwOSArMDAwMApAQCAtNjc5LDYgKzY3OSw4 IEBACiAgICAgICAgICAgICByZXR1cm4gJ3NlZGYnCiAgICAgICAgIGVsaWYgc2NoZWRfaWQgPT0g eGVuLmxvd2xldmVsLnhjLlhFTl9TQ0hFRFVMRVJfQ1JFRElUOgogICAgICAgICAgICAgcmV0dXJu ICdjcmVkaXQnCisgICAgICAgIGVsaWYgc2NoZWRfaWQgPT0geGVuLmxvd2xldmVsLnhjLlhFTl9T Q0hFRFVMRVJfQ1JFRElUMjoKKyAgICAgICAgICAgIHJldHVybiAnY3JlZGl0MicKICAgICAgICAg ZWxzZToKICAgICAgICAgICAgIHJldHVybiAndW5rbm93bicKIApAQCAtODc0LDYgKzg3Niw4IEBA CiAgICAgICAgICAgICByZXR1cm4gJ3NlZGYnCiAgICAgICAgIGVsaWYgc2NoZWRfaWQgPT0geGVu Lmxvd2xldmVsLnhjLlhFTl9TQ0hFRFVMRVJfQ1JFRElUOgogICAgICAgICAgICAgcmV0dXJuICdj cmVkaXQnCisgICAgICAgIGVsaWYgc2NoZWRfaWQgPT0geGVuLmxvd2xldmVsLnhjLlhFTl9TQ0hF RFVMRVJfQ1JFRElUMjoKKyAgICAgICAgICAgIHJldHVybiAnY3JlZGl0MicKICAgICAgICAgZWxz ZToKICAgICAgICAgICAgIHJldHVybiAndW5rbm93bicKIApkaWZmIC1yIGQyZjA4NDNhMzhlNCB0 b29scy9weXRob24veGVuL3hlbmQvWGVuZFZNTWV0cmljcy5weQotLS0gYS90b29scy9weXRob24v eGVuL3hlbmQvWGVuZFZNTWV0cmljcy5weQlXZWQgT2N0IDI4IDE0OjIxOjM3IDIwMDkgKzAwMDAK KysrIGIvdG9vbHMvcHl0aG9uL3hlbi94ZW5kL1hlbmRWTU1ldHJpY3MucHkJV2VkIE9jdCAyOCAx NDo0MjoxNyAyMDA5ICswMDAwCkBAIC0xMjksNiArMTI5LDcgQEAKICAgICAgICAgICAgICAgICBw YXJhbXNfbGl2ZVsnY3B1bWFwJWknICUgaV0gPSBcCiAgICAgICAgICAgICAgICAgICAgICIsIi5q b2luKG1hcChzdHIsIGluZm9bJ2NwdW1hcCddKSkKIAorICAgICAgICAgICAgICAgICMgRklYTUU6 IGNyZWRpdDI/PwogICAgICAgICAgICAgcGFyYW1zX2xpdmUudXBkYXRlKHhjLnNjaGVkX2NyZWRp dF9kb21haW5fZ2V0KGRvbWlkKSkKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIHBh cmFtc19saXZlCmRpZmYgLXIgZDJmMDg0M2EzOGU0IHRvb2xzL3B5dGhvbi94ZW4veGVuZC9zZXJ2 ZXIvU3J2RG9tYWluLnB5Ci0tLSBhL3Rvb2xzL3B5dGhvbi94ZW4veGVuZC9zZXJ2ZXIvU3J2RG9t YWluLnB5CVdlZCBPY3QgMjggMTQ6MjE6MzcgMjAwOSArMDAwMAorKysgYi90b29scy9weXRob24v eGVuL3hlbmQvc2VydmVyL1NydkRvbWFpbi5weQlXZWQgT2N0IDI4IDE0OjQyOjE3IDIwMDkgKzAw MDAKQEAgLTE2Myw2ICsxNjMsMjAgQEAKICAgICAgICAgdmFsID0gZm4ocmVxLmFyZ3MsIHsnZG9t Jzogc2VsZi5kb20uZ2V0TmFtZSgpfSkKICAgICAgICAgcmV0dXJuIHZhbAogCisgICAgZGVmIG9w X2RvbWFpbl9zY2hlZF9jcmVkaXQyX2dldChzZWxmLCBfLCByZXEpOgorICAgICAgICBmbiA9IEZv cm1GbihzZWxmLnhkLmRvbWFpbl9zY2hlZF9jcmVkaXQyX2dldCwKKyAgICAgICAgICAgICAgICAg ICAgW1snZG9tJywgJ3N0ciddXSkKKyAgICAgICAgdmFsID0gZm4ocmVxLmFyZ3MsIHsnZG9tJzog c2VsZi5kb20uZ2V0TmFtZSgpfSkKKyAgICAgICAgcmV0dXJuIHZhbAorCisKKyAgICBkZWYgb3Bf ZG9tYWluX3NjaGVkX2NyZWRpdDJfc2V0KHNlbGYsIF8sIHJlcSk6CisgICAgICAgIGZuID0gRm9y bUZuKHNlbGYueGQuZG9tYWluX3NjaGVkX2NyZWRpdDJfc2V0LAorICAgICAgICAgICAgICAgICAg ICBbWydkb20nLCAnc3RyJ10sCisgICAgICAgICAgICAgICAgICAgICBbJ3dlaWdodCcsICdpbnQn XV0pCisgICAgICAgIHZhbCA9IGZuKHJlcS5hcmdzLCB7J2RvbSc6IHNlbGYuZG9tLmdldE5hbWUo KX0pCisgICAgICAgIHJldHVybiB2YWwKKwogICAgIGRlZiBvcF9tYXhtZW1fc2V0KHNlbGYsIF8s IHJlcSk6CiAgICAgICAgIHJldHVybiBzZWxmLmNhbGwoc2VsZi5kb20uc2V0TWVtb3J5TWF4aW11 bSwKICAgICAgICAgICAgICAgICAgICAgICAgICBbWydtZW1vcnknLCAnaW50J11dLApkaWZmIC1y IGQyZjA4NDNhMzhlNCB0b29scy9weXRob24veGVuL3htL21haW4ucHkKLS0tIGEvdG9vbHMvcHl0 aG9uL3hlbi94bS9tYWluLnB5CVdlZCBPY3QgMjggMTQ6MjE6MzcgMjAwOSArMDAwMAorKysgYi90 b29scy9weXRob24veGVuL3htL21haW4ucHkJV2VkIE9jdCAyOCAxNDo0MjoxNyAyMDA5ICswMDAw CkBAIC0xNTAsNiArMTUwLDggQEAKICAgICAnc2NoZWQtc2VkZicgIDogKCc8RG9tYWluPiBbb3B0 aW9uc10nLCAnR2V0L3NldCBFREYgcGFyYW1ldGVycy4nKSwKICAgICAnc2NoZWQtY3JlZGl0Jzog KCdbLWQgPERvbWFpbj4gWy13Wz1XRUlHSFRdfC1jWz1DQVBdXV0nLAogICAgICAgICAgICAgICAg ICAgICAgJ0dldC9zZXQgY3JlZGl0IHNjaGVkdWxlciBwYXJhbWV0ZXJzLicpLAorICAgICdzY2hl ZC1jcmVkaXQyJzogKCdbLWQgPERvbWFpbj4gWy13Wz1XRUlHSFRdXScsCisgICAgICAgICAgICAg ICAgICAgICAnR2V0L3NldCBjcmVkaXQyIHNjaGVkdWxlciBwYXJhbWV0ZXJzLicpLAogICAgICdz eXNycScgICAgICAgOiAoJzxEb21haW4+IDxsZXR0ZXI+JywgJ1NlbmQgYSBzeXNycSB0byBhIGRv bWFpbi4nKSwKICAgICAnZGVidWcta2V5cycgIDogKCc8S2V5cz4nLCAnU2VuZCBkZWJ1ZyBrZXlz IHRvIFhlbi4nKSwKICAgICAndHJpZ2dlcicgICAgIDogKCc8RG9tYWluPiA8bm1pfHJlc2V0fGlu aXR8czNyZXN1bWV8cG93ZXI+IFs8VkNQVT5dJywKQEAgLTI2NSw2ICsyNjcsMTAgQEAKICAgICAg ICAoJy13IFdFSUdIVCcsICctLXdlaWdodD1XRUlHSFQnLCAnV2VpZ2h0IChpbnQpJyksCiAgICAg ICAgKCctYyBDQVAnLCAgICAnLS1jYXA9Q0FQJywgICAgICAgJ0NhcCAoaW50KScpLAogICAgICks CisgICAgJ3NjaGVkLWNyZWRpdDInOiAoCisgICAgICAgKCctZCBET01BSU4nLCAnLS1kb21haW49 RE9NQUlOJywgJ0RvbWFpbiB0byBtb2RpZnknKSwKKyAgICAgICAoJy13IFdFSUdIVCcsICctLXdl aWdodD1XRUlHSFQnLCAnV2VpZ2h0IChpbnQpJyksCisgICAgKSwKICAgICAnbGlzdCc6ICgKICAg ICAgICAoJy1sJywgJy0tbG9uZycsICAgICAgICAgJ091dHB1dCBhbGwgVk0gZGV0YWlscyBpbiBT WFAnKSwKICAgICAgICAoJycsICctLWxhYmVsJywgICAgICAgICAgJ0luY2x1ZGUgc2VjdXJpdHkg bGFiZWxzJyksCkBAIC00MDYsNiArNDEyLDcgQEAKICAgICBdCiAKIHNjaGVkdWxlcl9jb21tYW5k cyA9IFsKKyAgICAic2NoZWQtY3JlZGl0MiIsCiAgICAgInNjaGVkLWNyZWRpdCIsCiAgICAgInNj aGVkLXNlZGYiLAogICAgIF0KQEAgLTE3MjAsNiArMTcyNyw4MCBAQAogICAgICAgICAgICAgaWYg cmVzdWx0ICE9IDA6CiAgICAgICAgICAgICAgICAgZXJyKHN0cihyZXN1bHQpKQogCitkZWYgeG1f c2NoZWRfY3JlZGl0MihhcmdzKToKKyAgICAiIiJHZXQvU2V0IG9wdGlvbnMgZm9yIENyZWRpdDIg U2NoZWR1bGVyLiIiIgorICAgIAorICAgIGNoZWNrX3NjaGVkX3R5cGUoJ2NyZWRpdDInKQorCisg ICAgdHJ5OgorICAgICAgICBvcHRzLCBwYXJhbXMgPSBnZXRvcHQuZ2V0b3B0KGFyZ3MsICJkOnc6 IiwKKyAgICAgICAgICAgIFsiZG9tYWluPSIsICJ3ZWlnaHQ9Il0pCisgICAgZXhjZXB0IGdldG9w dC5HZXRvcHRFcnJvciwgb3B0ZXJyOgorICAgICAgICBlcnIob3B0ZXJyKQorICAgICAgICB1c2Fn ZSgnc2NoZWQtY3JlZGl0MicpCisKKyAgICBkb21pZCA9IE5vbmUKKyAgICB3ZWlnaHQgPSBOb25l CisKKyAgICBmb3IgbywgYSBpbiBvcHRzOgorICAgICAgICBpZiBvIGluIFsiLWQiLCAiLS1kb21h aW4iXToKKyAgICAgICAgICAgIGRvbWlkID0gYQorICAgICAgICBlbGlmIG8gaW4gWyItdyIsICIt LXdlaWdodCJdOgorICAgICAgICAgICAgd2VpZ2h0ID0gaW50KGEpCisKKyAgICBkb21zID0gZmls dGVyKGxhbWJkYSB4IDogZG9taWRfbWF0Y2goZG9taWQsIHgpLAorICAgICAgICAgICAgICAgICAg W3BhcnNlX2RvbXNfaW5mbyhkb20pCisgICAgICAgICAgICAgICAgICBmb3IgZG9tIGluIGdldERv bWFpbnMoTm9uZSwgJ2FsbCcpXSkKKworICAgIGlmIHdlaWdodCBpcyBOb25lOgorICAgICAgICBp ZiBkb21pZCBpcyBub3QgTm9uZSBhbmQgZG9tcyA9PSBbXTogCisgICAgICAgICAgICBlcnIoIkRv bWFpbiAnJXMnIGRvZXMgbm90IGV4aXN0LiIgJSBkb21pZCkKKyAgICAgICAgICAgIHVzYWdlKCdz Y2hlZC1jcmVkaXQyJykKKyAgICAgICAgIyBwcmludCBoZWFkZXIgaWYgd2UgYXJlbid0IHNldHRp bmcgYW55IHBhcmFtZXRlcnMKKyAgICAgICAgcHJpbnQgJyUtMzNzICU0cyAlNnMnICUgKCdOYW1l JywnSUQnLCdXZWlnaHQnKQorICAgICAgICAKKyAgICAgICAgZm9yIGQgaW4gZG9tczoKKyAgICAg ICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBzZXJ2ZXJUeXBlID09IFNFUlZFUl9YRU5f QVBJOgorICAgICAgICAgICAgICAgICAgICBpbmZvID0gc2VydmVyLnhlbmFwaS5WTV9tZXRyaWNz LmdldF9WQ1BVc19wYXJhbXMoCisgICAgICAgICAgICAgICAgICAgICAgICBzZXJ2ZXIueGVuYXBp LlZNLmdldF9tZXRyaWNzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9zaW5nbGVf dm0oZFsnbmFtZSddKSkpCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAg ICAgaW5mbyA9IHNlcnZlci54ZW5kLmRvbWFpbi5zY2hlZF9jcmVkaXQyX2dldChkWyduYW1lJ10p CisgICAgICAgICAgICBleGNlcHQgeG1scnBjbGliLkZhdWx0OgorICAgICAgICAgICAgICAgIHBh c3MKKworICAgICAgICAgICAgaWYgJ3dlaWdodCcgbm90IGluIGluZm86CisgICAgICAgICAgICAg ICAgIyBkb21haW4gZG9lcyBub3Qgc3VwcG9ydCBzY2hlZC1jcmVkaXQyPworICAgICAgICAgICAg ICAgIGluZm8gPSB7J3dlaWdodCc6IC0xfQorCisgICAgICAgICAgICBpbmZvWyd3ZWlnaHQnXSA9 IGludChpbmZvWyd3ZWlnaHQnXSkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaW5mb1snbmFt ZSddICA9IGRbJ25hbWUnXQorICAgICAgICAgICAgaW5mb1snZG9taWQnXSA9IHN0cihkWydkb21p ZCddKQorICAgICAgICAgICAgcHJpbnQoICgiJShuYW1lKS0zMnMgJShkb21pZCk1cyAlKHdlaWdo dCk2ZCIpICUgaW5mbykKKyAgICBlbHNlOgorICAgICAgICBpZiBkb21pZCBpcyBOb25lOgorICAg ICAgICAgICAgIyBwbGFjZSBob2xkZXIgZm9yIHN5c3RlbS13aWRlIHNjaGVkdWxlciBwYXJhbWV0 ZXJzCisgICAgICAgICAgICBlcnIoIk5vIGRvbWFpbiBnaXZlbi4iKQorICAgICAgICAgICAgdXNh Z2UoJ3NjaGVkLWNyZWRpdDInKQorCisgICAgICAgIGlmIHNlcnZlclR5cGUgPT0gU0VSVkVSX1hF Tl9BUEk6CisgICAgICAgICAgICBpZiBkb21zWzBdWydkb21pZCddOgorICAgICAgICAgICAgICAg IHNlcnZlci54ZW5hcGkuVk0uYWRkX3RvX1ZDUFVzX3BhcmFtc19saXZlKAorICAgICAgICAgICAg ICAgICAgICBnZXRfc2luZ2xlX3ZtKGRvbWlkKSwKKyAgICAgICAgICAgICAgICAgICAgIndlaWdo dCIsCisgICAgICAgICAgICAgICAgICAgIHdlaWdodCkKKyAgICAgICAgICAgIGVsc2U6CisgICAg ICAgICAgICAgICAgc2VydmVyLnhlbmFwaS5WTS5hZGRfdG9fVkNQVXNfcGFyYW1zKAorICAgICAg ICAgICAgICAgICAgICBnZXRfc2luZ2xlX3ZtKGRvbWlkKSwKKyAgICAgICAgICAgICAgICAgICAg IndlaWdodCIsCisgICAgICAgICAgICAgICAgICAgIHdlaWdodCkKKyAgICAgICAgZWxzZToKKyAg ICAgICAgICAgIHJlc3VsdCA9IHNlcnZlci54ZW5kLmRvbWFpbi5zY2hlZF9jcmVkaXQyX3NldChk b21pZCwgd2VpZ2h0KQorICAgICAgICAgICAgaWYgcmVzdWx0ICE9IDA6CisgICAgICAgICAgICAg ICAgZXJyKHN0cihyZXN1bHQpKQorCiBkZWYgeG1faW5mbyhhcmdzKToKICAgICBhcmdfY2hlY2so YXJncywgImluZm8iLCAwLCAxKQogICAgIApAQCAtMzI5OCw2ICszMzc5LDcgQEAKICAgICAjIHNj aGVkdWxlcgogICAgICJzY2hlZC1zZWRmIjogeG1fc2NoZWRfc2VkZiwKICAgICAic2NoZWQtY3Jl ZGl0IjogeG1fc2NoZWRfY3JlZGl0LAorICAgICJzY2hlZC1jcmVkaXQyIjogeG1fc2NoZWRfY3Jl ZGl0MiwKICAgICAjIGJsb2NrCiAgICAgImJsb2NrLWF0dGFjaCI6IHhtX2Jsb2NrX2F0dGFjaCwK ICAgICAiYmxvY2stZGV0YWNoIjogeG1fYmxvY2tfZGV0YWNoLAo= --000e0cdfd704c6493d047a266b25 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --000e0cdfd704c6493d047a266b25--