From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v6 08/29] libxc: introduce a xc_dom_arch for hvm-3.0-x86_32 guests Date: Fri, 4 Sep 2015 14:08:47 +0200 Message-ID: <1441368548-43465-9-git-send-email-roger.pau@citrix.com> References: <1441368548-43465-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZXpoO-0005T2-Db for xen-devel@lists.xenproject.org; Fri, 04 Sep 2015 12:09:44 +0000 In-Reply-To: <1441368548-43465-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Ian Campbell , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org VGhpcyB4Y19kb21fYXJjaCB3aWxsIGJlIHVzZWQgaW4gb3JkZXIgdG8gYnVpbGQgSFZNIGRvbWFp bnMuIFRoZSBjb2RlIGlzCmJhc2VkIG9uIHRoZSBleGlzdGluZyB4Y19odm1fcG9wdWxhdGVfbWVt b3J5IGFuZCB4Y19odm1fcG9wdWxhdGVfcGFyYW1zCmZ1bmN0aW9ucy4KClNpZ25lZC1vZmYtYnk6 IFJvZ2VyIFBhdSBNb25uw6kgPHJvZ2VyLnBhdUBjaXRyaXguY29tPgpSZXZpZXdlZC1ieTogQW5k cmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KQWNrZWQtYnk6IFdlaSBMaXUg PHdlaS5saXUyQGNpdHJpeC5jb20+CkNjOiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0 cml4LmNvbT4KQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3RlZmFuby5zdGFiZWxsaW5pQGV1LmNp dHJpeC5jb20+CkNjOiBJYW4gQ2FtcGJlbGwgPGlhbi5jYW1wYmVsbEBjaXRyaXguY29tPgpDYzog V2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCkNoYW5nZXMgc2luY2UgdjU6CiAtIFNl dCB0ciBsaW1pdCB0byAweDY3LgogLSBVc2UgImdvdG8gb3V0IiBjb25zaXN0ZW50bHkgaW4gdmNw dV9odm0uCiAtIFVuY29uZGl0aW9uYWxseSBjYWxsIGZyZWUoZnVsbF9jdHgpIGJlZm9yZSBleGl0 aW5nIHZjcHVfaHZtLgogLSBBZGQgV2VpIExpdSBBY2suCgpDaGFuZ2VzIHNpbmNlIHY0OgogLSBS ZXBsYWNlIGEgbWFsbG9jK21lbXNldCB3aXRoIGEgY2FsbG9jLgogLSBSZW1vdmUgYSAhPSBOVUxM IGNoZWNrLgogLSBBZGQgQW5kcmV3IENvb3BlciBSZXZpZXdlZC1ieS4KCkNoYW5nZXMgc2luY2Ug djM6CiAtIE1ha2Ugc3VyZSBjL3MgYjlkYmUzMyBpcyBub3QgcmV2ZXJ0ZWQgb24gdGhpcyBwYXRj aC4KIC0gU2V0IHRoZSBpbml0aWFsIEJTUCBzdGF0ZSB1c2luZyB7Z2V0L3NldH1odm1jb250ZXh0 LgotLS0KIHRvb2xzL2xpYnhjL2luY2x1ZGUveGNfZG9tLmggfCAgIDYgKwogdG9vbHMvbGlieGMv eGNfZG9tX3g4Ni5jICAgICB8IDYxOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDYxMyBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy9pbmNsdWRlL3hjX2RvbS5oIGIvdG9vbHMv bGlieGMvaW5jbHVkZS94Y19kb20uaAppbmRleCAwMjQ1ZDI0Li5jZGE0MGQ5IDEwMDY0NAotLS0g YS90b29scy9saWJ4Yy9pbmNsdWRlL3hjX2RvbS5oCisrKyBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUv eGNfZG9tLmgKQEAgLTE4OCw2ICsxODgsMTIgQEAgc3RydWN0IHhjX2RvbV9pbWFnZSB7CiAgICAg fSBjb250YWluZXJfdHlwZTsKIAogICAgIC8qIEhWTSBzcGVjaWZpYyBmaWVsZHMuICovCisgICAg eGVuX3Bmbl90IHRhcmdldF9wYWdlczsKKyAgICB4ZW5fcGZuX3QgbW1pb19zdGFydDsKKyAgICB4 ZW5fcGZuX3QgbW1pb19zaXplOworICAgIHhlbl9wZm5fdCBsb3dtZW1fZW5kOworICAgIHhlbl9w Zm5fdCBoaWdobWVtX2VuZDsKKwogICAgIC8qIEV4dHJhIEFDUEkgdGFibGVzIHBhc3NlZCB0byBI Vk1MT0FERVIgKi8KICAgICBzdHJ1Y3QgeGNfaHZtX2Zpcm13YXJlX21vZHVsZSBhY3BpX21vZHVs ZTsKIApkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMveGNfZG9tX3g4Ni5jIGIvdG9vbHMvbGlieGMv eGNfZG9tX3g4Ni5jCmluZGV4IGFlODE4N2YuLmYzNmI2ZjYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xp YnhjL3hjX2RvbV94ODYuYworKysgYi90b29scy9saWJ4Yy94Y19kb21feDg2LmMKQEAgLTM5LDEw ICszOSwzMiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotI2RlZmluZSBTVVBFUlBBR0Vf UEZOX1NISUZUICA5Ci0jZGVmaW5lIFNVUEVSUEFHRV9OUl9QRk5TICAgICgxVUwgPDwgU1VQRVJQ QUdFX1BGTl9TSElGVCkKICNkZWZpbmUgU1VQRVJQQUdFX0JBVENIX1NJWkUgNTEyCiAKKyNkZWZp bmUgU1VQRVJQQUdFXzJNQl9TSElGVCAgIDkKKyNkZWZpbmUgU1VQRVJQQUdFXzJNQl9OUl9QRk5T ICgxVUwgPDwgU1VQRVJQQUdFXzJNQl9TSElGVCkKKyNkZWZpbmUgU1VQRVJQQUdFXzFHQl9TSElG VCAgIDE4CisjZGVmaW5lIFNVUEVSUEFHRV8xR0JfTlJfUEZOUyAoMVVMIDw8IFNVUEVSUEFHRV8x R0JfU0hJRlQpCisKKyNkZWZpbmUgWDg2X0NSMF9QRSAweDAxCisjZGVmaW5lIFg4Nl9DUjBfRVQg MHgxMAorCisjZGVmaW5lIFZHQV9IT0xFX1NJWkUgKDB4MjApCisKKyNkZWZpbmUgU1BFQ0lBTFBB R0VfUEFHSU5HICAgMAorI2RlZmluZSBTUEVDSUFMUEFHRV9BQ0NFU1MgICAxCisjZGVmaW5lIFNQ RUNJQUxQQUdFX1NIQVJJTkcgIDIKKyNkZWZpbmUgU1BFQ0lBTFBBR0VfQlVGSU9SRVEgMworI2Rl ZmluZSBTUEVDSUFMUEFHRV9YRU5TVE9SRSA0CisjZGVmaW5lIFNQRUNJQUxQQUdFX0lPUkVRICAg IDUKKyNkZWZpbmUgU1BFQ0lBTFBBR0VfSURFTlRfUFQgNgorI2RlZmluZSBTUEVDSUFMUEFHRV9D T05TT0xFICA3CisjZGVmaW5lIE5SX1NQRUNJQUxfUEFHRVMgICAgIDgKKyNkZWZpbmUgc3BlY2lh bF9wZm4oeCkgKDB4ZmYwMDB1IC0gTlJfU1BFQ0lBTF9QQUdFUyArICh4KSkKKworI2RlZmluZSBO Ul9JT1JFUV9TRVJWRVJfUEFHRVMgOAorI2RlZmluZSBpb3JlcV9zZXJ2ZXJfcGZuKHgpIChzcGVj aWFsX3BmbigwKSAtIE5SX0lPUkVRX1NFUlZFUl9QQUdFUyArICh4KSkKKwogI2RlZmluZSBiaXRz X3RvX21hc2soYml0cykgICAgICAgKCgoeGVuX3ZhZGRyX3QpMSA8PCAoYml0cykpLTEpCiAjZGVm aW5lIHJvdW5kX2Rvd24oYWRkciwgbWFzaykgICAoKGFkZHIpICYgfihtYXNrKSkKICNkZWZpbmUg cm91bmRfdXAoYWRkciwgbWFzaykgICAgICgoYWRkcikgfCAobWFzaykpCkBAIC00NjEsNiArNDgz LDEzNSBAQCBzdGF0aWMgaW50IGFsbG9jX21hZ2ljX3BhZ2VzKHN0cnVjdCB4Y19kb21faW1hZ2Ug KmRvbSkKICAgICByZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgYnVpbGRfaHZtX2luZm8odm9p ZCAqaHZtX2luZm9fcGFnZSwgc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKQoreworICAgIHN0cnVj dCBodm1faW5mb190YWJsZSAqaHZtX2luZm8gPSAoc3RydWN0IGh2bV9pbmZvX3RhYmxlICopCisg ICAgICAgICgoKHVuc2lnbmVkIGNoYXIgKilodm1faW5mb19wYWdlKSArIEhWTV9JTkZPX09GRlNF VCk7CisgICAgdWludDhfdCBzdW07CisgICAgaW50IGk7CisKKyAgICBtZW1zZXQoaHZtX2luZm9f cGFnZSwgMCwgUEFHRV9TSVpFKTsKKworICAgIC8qIEZpbGwgaW4gdGhlIGhlYWRlci4gKi8KKyAg ICBtZW1jcHkoaHZtX2luZm8tPnNpZ25hdHVyZSwgIkhWTSBJTkZPIiwgc2l6ZW9mKGh2bV9pbmZv LT5zaWduYXR1cmUpKTsKKyAgICBodm1faW5mby0+bGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBodm1f aW5mb190YWJsZSk7CisKKyAgICAvKiBTZW5zaWJsZSBkZWZhdWx0czogdGhlc2UgY2FuIGJlIG92 ZXJyaWRkZW4gYnkgdGhlIGNhbGxlci4gKi8KKyAgICBodm1faW5mby0+YXBpY19tb2RlID0gMTsK KyAgICBodm1faW5mby0+bnJfdmNwdXMgPSAxOworICAgIG1lbXNldChodm1faW5mby0+dmNwdV9v bmxpbmUsIDB4ZmYsIHNpemVvZihodm1faW5mby0+dmNwdV9vbmxpbmUpKTsKKworICAgIC8qIE1l bW9yeSBwYXJhbWV0ZXJzLiAqLworICAgIGh2bV9pbmZvLT5sb3dfbWVtX3BnZW5kID0gZG9tLT5s b3dtZW1fZW5kID4+IFBBR0VfU0hJRlQ7CisgICAgaHZtX2luZm8tPmhpZ2hfbWVtX3BnZW5kID0g ZG9tLT5oaWdobWVtX2VuZCA+PiBQQUdFX1NISUZUOworICAgIGh2bV9pbmZvLT5yZXNlcnZlZF9t ZW1fcGdzdGFydCA9IGlvcmVxX3NlcnZlcl9wZm4oMCk7CisKKyAgICAvKiBGaW5pc2ggd2l0aCB0 aGUgY2hlY2tzdW0uICovCisgICAgZm9yICggaSA9IDAsIHN1bSA9IDA7IGkgPCBodm1faW5mby0+ bGVuZ3RoOyBpKysgKQorICAgICAgICBzdW0gKz0gKCh1aW50OF90ICopaHZtX2luZm8pW2ldOwor ICAgIGh2bV9pbmZvLT5jaGVja3N1bSA9IC1zdW07Cit9CisKK3N0YXRpYyBpbnQgYWxsb2NfbWFn aWNfcGFnZXNfaHZtKHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKK3sKKyAgICB1bnNpZ25lZCBs b25nIGk7CisgICAgdm9pZCAqaHZtX2luZm9fcGFnZTsKKyAgICB1aW50MzJfdCAqaWRlbnRfcHQs IGRvbWlkID0gZG9tLT5ndWVzdF9kb21pZDsKKyAgICBpbnQgcmM7CisgICAgeGVuX3Bmbl90IHNw ZWNpYWxfYXJyYXlbTlJfU1BFQ0lBTF9QQUdFU107CisgICAgeGVuX3Bmbl90IGlvcmVxX3NlcnZl cl9hcnJheVtOUl9JT1JFUV9TRVJWRVJfUEFHRVNdOworICAgIHhjX2ludGVyZmFjZSAqeGNoID0g ZG9tLT54Y2g7CisKKyAgICBpZiAoIChodm1faW5mb19wYWdlID0geGNfbWFwX2ZvcmVpZ25fcmFu Z2UoCisgICAgICAgICAgICAgIHhjaCwgZG9taWQsIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJP VF9XUklURSwKKyAgICAgICAgICAgICAgSFZNX0lORk9fUEZOKSkgPT0gTlVMTCApCisgICAgICAg IGdvdG8gZXJyb3Jfb3V0OworICAgIGJ1aWxkX2h2bV9pbmZvKGh2bV9pbmZvX3BhZ2UsIGRvbSk7 CisgICAgbXVubWFwKGh2bV9pbmZvX3BhZ2UsIFBBR0VfU0laRSk7CisKKyAgICAvKiBBbGxvY2F0 ZSBhbmQgY2xlYXIgc3BlY2lhbCBwYWdlcy4gKi8KKyAgICBmb3IgKCBpID0gMDsgaSA8IE5SX1NQ RUNJQUxfUEFHRVM7IGkrKyApCisgICAgICAgIHNwZWNpYWxfYXJyYXlbaV0gPSBzcGVjaWFsX3Bm bihpKTsKKworICAgIHJjID0geGNfZG9tYWluX3BvcHVsYXRlX3BoeXNtYXBfZXhhY3QoeGNoLCBk b21pZCwgTlJfU1BFQ0lBTF9QQUdFUywgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNwZWNpYWxfYXJyYXkpOworICAgIGlmICggcmMgIT0gMCApCisgICAg eworICAgICAgICBET01QUklOVEYoIkNvdWxkIG5vdCBhbGxvY2F0ZSBzcGVjaWFsIHBhZ2VzLiIp OworICAgICAgICBnb3RvIGVycm9yX291dDsKKyAgICB9CisKKyAgICBpZiAoIHhjX2NsZWFyX2Rv bWFpbl9wYWdlcyh4Y2gsIGRvbWlkLCBzcGVjaWFsX3BmbigwKSwgTlJfU1BFQ0lBTF9QQUdFUykg KQorICAgICAgICAgICAgZ290byBlcnJvcl9vdXQ7CisKKyAgICB4Y19odm1fcGFyYW1fc2V0KHhj aCwgZG9taWQsIEhWTV9QQVJBTV9TVE9SRV9QRk4sCisgICAgICAgICAgICAgICAgICAgICBzcGVj aWFsX3BmbihTUEVDSUFMUEFHRV9YRU5TVE9SRSkpOworICAgIHhjX2h2bV9wYXJhbV9zZXQoeGNo LCBkb21pZCwgSFZNX1BBUkFNX0JVRklPUkVRX1BGTiwKKyAgICAgICAgICAgICAgICAgICAgIHNw ZWNpYWxfcGZuKFNQRUNJQUxQQUdFX0JVRklPUkVRKSk7CisgICAgeGNfaHZtX3BhcmFtX3NldCh4 Y2gsIGRvbWlkLCBIVk1fUEFSQU1fSU9SRVFfUEZOLAorICAgICAgICAgICAgICAgICAgICAgc3Bl Y2lhbF9wZm4oU1BFQ0lBTFBBR0VfSU9SRVEpKTsKKyAgICB4Y19odm1fcGFyYW1fc2V0KHhjaCwg ZG9taWQsIEhWTV9QQVJBTV9DT05TT0xFX1BGTiwKKyAgICAgICAgICAgICAgICAgICAgIHNwZWNp YWxfcGZuKFNQRUNJQUxQQUdFX0NPTlNPTEUpKTsKKyAgICB4Y19odm1fcGFyYW1fc2V0KHhjaCwg ZG9taWQsIEhWTV9QQVJBTV9QQUdJTkdfUklOR19QRk4sCisgICAgICAgICAgICAgICAgICAgICBz cGVjaWFsX3BmbihTUEVDSUFMUEFHRV9QQUdJTkcpKTsKKyAgICB4Y19odm1fcGFyYW1fc2V0KHhj aCwgZG9taWQsIEhWTV9QQVJBTV9NT05JVE9SX1JJTkdfUEZOLAorICAgICAgICAgICAgICAgICAg ICAgc3BlY2lhbF9wZm4oU1BFQ0lBTFBBR0VfQUNDRVNTKSk7CisgICAgeGNfaHZtX3BhcmFtX3Nl dCh4Y2gsIGRvbWlkLCBIVk1fUEFSQU1fU0hBUklOR19SSU5HX1BGTiwKKyAgICAgICAgICAgICAg ICAgICAgIHNwZWNpYWxfcGZuKFNQRUNJQUxQQUdFX1NIQVJJTkcpKTsKKworICAgIC8qCisgICAg ICogQWxsb2NhdGUgYW5kIGNsZWFyIGFkZGl0aW9uYWwgaW9yZXEgc2VydmVyIHBhZ2VzLiBUaGUg ZGVmYXVsdAorICAgICAqIHNlcnZlciB3aWxsIHVzZSB0aGUgSU9SRVEgYW5kIEJVRklPUkVRIHNw ZWNpYWwgcGFnZXMgYWJvdmUuCisgICAgICovCisgICAgZm9yICggaSA9IDA7IGkgPCBOUl9JT1JF UV9TRVJWRVJfUEFHRVM7IGkrKyApCisgICAgICAgIGlvcmVxX3NlcnZlcl9hcnJheVtpXSA9IGlv cmVxX3NlcnZlcl9wZm4oaSk7CisKKyAgICByYyA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFw X2V4YWN0KHhjaCwgZG9taWQsIE5SX0lPUkVRX1NFUlZFUl9QQUdFUywgMCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGlvcmVxX3NlcnZlcl9hcnJheSk7Cisg ICAgaWYgKCByYyAhPSAwICkKKyAgICB7CisgICAgICAgIERPTVBSSU5URigiQ291bGQgbm90IGFs bG9jYXRlIGlvcmVxIHNlcnZlciBwYWdlcy4iKTsKKyAgICAgICAgZ290byBlcnJvcl9vdXQ7Cisg ICAgfQorCisgICAgaWYgKCB4Y19jbGVhcl9kb21haW5fcGFnZXMoeGNoLCBkb21pZCwgaW9yZXFf c2VydmVyX3BmbigwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOUl9JT1JFUV9T RVJWRVJfUEFHRVMpICkKKyAgICAgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworCisgICAgLyogVGVs bCB0aGUgZG9tYWluIHdoZXJlIHRoZSBwYWdlcyBhcmUgYW5kIGhvdyBtYW55IHRoZXJlIGFyZSAq LworICAgIHhjX2h2bV9wYXJhbV9zZXQoeGNoLCBkb21pZCwgSFZNX1BBUkFNX0lPUkVRX1NFUlZF Ul9QRk4sCisgICAgICAgICAgICAgICAgICAgICBpb3JlcV9zZXJ2ZXJfcGZuKDApKTsKKyAgICB4 Y19odm1fcGFyYW1fc2V0KHhjaCwgZG9taWQsIEhWTV9QQVJBTV9OUl9JT1JFUV9TRVJWRVJfUEFH RVMsCisgICAgICAgICAgICAgICAgICAgICBOUl9JT1JFUV9TRVJWRVJfUEFHRVMpOworCisgICAg LyoKKyAgICAgKiBJZGVudGl0eS1tYXAgcGFnZSB0YWJsZSBpcyByZXF1aXJlZCBmb3IgcnVubmlu ZyB3aXRoIENSMC5QRz0wIHdoZW4KKyAgICAgKiB1c2luZyBJbnRlbCBFUFQuIENyZWF0ZSBhIDMy LWJpdCBub24tUEFFIHBhZ2UgZGlyZWN0b3J5IG9mIHN1cGVycGFnZXMuCisgICAgICovCisgICAg aWYgKCAoaWRlbnRfcHQgPSB4Y19tYXBfZm9yZWlnbl9yYW5nZSgKKyAgICAgICAgICAgICAgeGNo LCBkb21pZCwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorICAgICAgICAgICAg ICBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9JREVOVF9QVCkpKSA9PSBOVUxMICkKKyAgICAgICAg Z290byBlcnJvcl9vdXQ7CisgICAgZm9yICggaSA9IDA7IGkgPCBQQUdFX1NJWkUgLyBzaXplb2Yo KmlkZW50X3B0KTsgaSsrICkKKyAgICAgICAgaWRlbnRfcHRbaV0gPSAoKGkgPDwgMjIpIHwgX1BB R0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8CisgICAgICAgICAgICAgICAgICAg ICAgIF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9QU0UpOworICAgIG11bm1h cChpZGVudF9wdCwgUEFHRV9TSVpFKTsKKyAgICB4Y19odm1fcGFyYW1fc2V0KHhjaCwgZG9taWQs IEhWTV9QQVJBTV9JREVOVF9QVCwKKyAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxfcGZuKFNQ RUNJQUxQQUdFX0lERU5UX1BUKSA8PCBQQUdFX1NISUZUKTsKKworICAgIGRvbS0+Y29uc29sZV9w Zm4gPSBzcGVjaWFsX3BmbihTUEVDSUFMUEFHRV9DT05TT0xFKTsKKyAgICBkb20tPnhlbnN0b3Jl X3BmbiA9IHNwZWNpYWxfcGZuKFNQRUNJQUxQQUdFX1hFTlNUT1JFKTsKKyAgICBkb20tPnBhcm1z LnZpcnRfaHlwZXJjYWxsID0gLTE7CisKKyAgICByYyA9IDA7CisgICAgZ290byBvdXQ7CisgZXJy b3Jfb3V0OgorICAgIHJjID0gLTE7Cisgb3V0OgorCisgICAgcmV0dXJuIHJjOworfQorCiAvKiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBzdGFydF9pbmZvX3g4Nl8zMihzdHJ1Y3Qg eGNfZG9tX2ltYWdlICpkb20pCkBAIC02ODIsNiArODMzLDEwMiBAQCBzdGF0aWMgaW50IHZjcHVf eDg2XzY0KHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKICAgICByZXR1cm4gcmM7CiB9CiAKK3N0 YXRpYyBpbnQgdmNwdV9odm0oc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKQoreworICAgIHN0cnVj dCB7CisgICAgICAgIHN0cnVjdCBodm1fc2F2ZV9kZXNjcmlwdG9yIGhlYWRlcl9kOworICAgICAg ICBIVk1fU0FWRV9UWVBFKEhFQURFUikgaGVhZGVyOworICAgICAgICBzdHJ1Y3QgaHZtX3NhdmVf ZGVzY3JpcHRvciBjcHVfZDsKKyAgICAgICAgSFZNX1NBVkVfVFlQRShDUFUpIGNwdTsKKyAgICAg ICAgc3RydWN0IGh2bV9zYXZlX2Rlc2NyaXB0b3IgZW5kX2Q7CisgICAgICAgIEhWTV9TQVZFX1RZ UEUoRU5EKSBlbmQ7CisgICAgfSBic3BfY3R4OworICAgIHVpbnQ4X3QgKmZ1bGxfY3R4ID0gTlVM TDsKKyAgICBpbnQgcmM7CisKKyAgICBET01QUklOVEZfQ0FMTEVEKGRvbS0+eGNoKTsKKworICAg IC8qCisgICAgICogR2V0IHRoZSBmdWxsIEhWTSBjb250ZXh0IGluIG9yZGVyIHRvIGhhdmUgdGhl IGhlYWRlciwgaXQgaXMgbm90CisgICAgICogcG9zc2libGUgdG8gZ2V0IHRoZSBoZWFkZXIgd2l0 aCBnZXRjb250ZXh0X3BhcnRpYWwsIGFuZCBjcmFmdGluZyBvbmUKKyAgICAgKiBmcm9tIHVzZXJz cGFjZSBpcyBhbHNvIG5vdCBhbiBvcHRpb24gc2luY2UgY3B1aWQgaXMgdHJhcHBlZCBhbmQKKyAg ICAgKiBtb2RpZmllZCBieSBYZW4uCisgICAgICovCisKKyAgICByYyA9IHhjX2RvbWFpbl9odm1f Z2V0Y29udGV4dChkb20tPnhjaCwgZG9tLT5ndWVzdF9kb21pZCwgTlVMTCwgMCk7CisgICAgaWYg KCByYyA8PSAwICkKKyAgICB7CisgICAgICAgIHhjX2RvbV9wYW5pYyhkb20tPnhjaCwgWENfSU5U RVJOQUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAiJXM6IHVuYWJsZSB0byBmZXRjaCBI Vk0gY29udGV4dCBzaXplIChyYz0lZCkiLAorICAgICAgICAgICAgICAgICAgICAgX19mdW5jX18s IHJjKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgZnVsbF9jdHggPSBjYWxsb2Mo MSwgcmMpOworICAgIGlmICggZnVsbF9jdHggPT0gTlVMTCApCisgICAgeworICAgICAgICB4Y19k b21fcGFuaWMoZG9tLT54Y2gsIFhDX0lOVEVSTkFMX0VSUk9SLAorICAgICAgICAgICAgICAgICAg ICAgIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBIVk0gY29udGV4dCAocmM9JWQp IiwKKyAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19fLCByYyk7CisgICAgICAgIHJjID0gLUVO T01FTTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgcmMgPSB4Y19kb21haW5faHZt X2dldGNvbnRleHQoZG9tLT54Y2gsIGRvbS0+Z3Vlc3RfZG9taWQsIGZ1bGxfY3R4LCByYyk7Cisg ICAgaWYgKCByYyA8PSAwICkKKyAgICB7CisgICAgICAgIHhjX2RvbV9wYW5pYyhkb20tPnhjaCwg WENfSU5URVJOQUxfRVJST1IsCisgICAgICAgICAgICAgICAgICAgICAiJXM6IHVuYWJsZSB0byBm ZXRjaCBIVk0gY29udGV4dCAocmM9JWQpIiwKKyAgICAgICAgICAgICAgICAgICAgIF9fZnVuY19f LCByYyk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qIENvcHkgdGhlIGhlYWRl ciB0byBvdXIgcGFydGlhbCBjb250ZXh0LiAqLworICAgIG1lbXNldCgmYnNwX2N0eCwgMCwgc2l6 ZW9mKGJzcF9jdHgpKTsKKyAgICBtZW1jcHkoJmJzcF9jdHgsIGZ1bGxfY3R4LAorICAgICAgICAg ICBzaXplb2Yoc3RydWN0IGh2bV9zYXZlX2Rlc2NyaXB0b3IpICsgSFZNX1NBVkVfTEVOR1RIKEhF QURFUikpOworCisgICAgLyogU2V0IHRoZSBDUFUgZGVzY3JpcHRvci4gKi8KKyAgICBic3BfY3R4 LmNwdV9kLnR5cGVjb2RlID0gSFZNX1NBVkVfQ09ERShDUFUpOworICAgIGJzcF9jdHguY3B1X2Qu aW5zdGFuY2UgPSAwOworICAgIGJzcF9jdHguY3B1X2QubGVuZ3RoID0gSFZNX1NBVkVfTEVOR1RI KENQVSk7CisKKyAgICAvKiBTZXQgdGhlIGNhY2hlZCBwYXJ0IG9mIHRoZSByZWxldmFudCBzZWdt ZW50IHJlZ2lzdGVycy4gKi8KKyAgICBic3BfY3R4LmNwdS5jc19iYXNlID0gMDsKKyAgICBic3Bf Y3R4LmNwdS5kc19iYXNlID0gMDsKKyAgICBic3BfY3R4LmNwdS5zc19iYXNlID0gMDsKKyAgICBi c3BfY3R4LmNwdS50cl9iYXNlID0gMDsKKyAgICBic3BfY3R4LmNwdS5jc19saW1pdCA9IH4wdTsK KyAgICBic3BfY3R4LmNwdS5kc19saW1pdCA9IH4wdTsKKyAgICBic3BfY3R4LmNwdS5zc19saW1p dCA9IH4wdTsKKyAgICBic3BfY3R4LmNwdS50cl9saW1pdCA9IDB4Njc7CisgICAgYnNwX2N0eC5j cHUuY3NfYXJieXRlcyA9IDB4YzliOworICAgIGJzcF9jdHguY3B1LmRzX2FyYnl0ZXMgPSAweGM5 MzsKKyAgICBic3BfY3R4LmNwdS5zc19hcmJ5dGVzID0gMHhjOTM7CisgICAgYnNwX2N0eC5jcHUu dHJfYXJieXRlcyA9IDB4OGI7CisKKyAgICAvKiBTZXQgdGhlIGNvbnRyb2wgcmVnaXN0ZXJzLiAq LworICAgIGJzcF9jdHguY3B1LmNyMCA9IFg4Nl9DUjBfUEUgfCBYODZfQ1IwX0VUOworCisgICAg LyogU2V0IHRoZSBJUC4gKi8KKyAgICBic3BfY3R4LmNwdS5yaXAgPSBkb20tPnBhcm1zLnBoeXNf ZW50cnk7CisKKyAgICAvKiBTZXQgdGhlIGVuZCBkZXNjcmlwdG9yLiAqLworICAgIGJzcF9jdHgu ZW5kX2QudHlwZWNvZGUgPSBIVk1fU0FWRV9DT0RFKEVORCk7CisgICAgYnNwX2N0eC5lbmRfZC5p bnN0YW5jZSA9IDA7CisgICAgYnNwX2N0eC5lbmRfZC5sZW5ndGggPSBIVk1fU0FWRV9MRU5HVEgo RU5EKTsKKworICAgIHJjID0geGNfZG9tYWluX2h2bV9zZXRjb250ZXh0KGRvbS0+eGNoLCBkb20t Pmd1ZXN0X2RvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90 ICopJmJzcF9jdHgsIHNpemVvZihic3BfY3R4KSk7CisgICAgaWYgKCByYyAhPSAwICkKKyAgICAg ICAgeGNfZG9tX3BhbmljKGRvbS0+eGNoLCBYQ19JTlRFUk5BTF9FUlJPUiwKKyAgICAgICAgICAg ICAgICAgICAgICIlczogU0VUSFZNQ09OVEVYVCBmYWlsZWQgKHJjPSVkKSIsIF9fZnVuY19fLCBy Yyk7CisKKyBvdXQ6CisgICAgZnJlZShmdWxsX2N0eCk7CisgICAgcmV0dXJuIHJjOworfQorCiAv KiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCB4ODZfY29tcGF0KHhjX2ludGVyZmFj ZSAqeGNoLCBkb21pZF90IGRvbWlkLCBjaGFyICpndWVzdF90eXBlKQpAQCAtNzYyLDcgKzEwMDks NyBAQCBzdGF0aWMgaW50IG1lbWluaXRfcHYoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKQogCiAg ICAgaWYgKCBkb20tPnN1cGVycGFnZXMgKQogICAgIHsKLSAgICAgICAgaW50IGNvdW50ID0gZG9t LT50b3RhbF9wYWdlcyA+PiBTVVBFUlBBR0VfUEZOX1NISUZUOworICAgICAgICBpbnQgY291bnQg PSBkb20tPnRvdGFsX3BhZ2VzID4+IFNVUEVSUEFHRV8yTUJfU0hJRlQ7CiAgICAgICAgIHhlbl9w Zm5fdCBleHRlbnRzW2NvdW50XTsKIAogICAgICAgICBkb20tPnAybV9zaXplID0gZG9tLT50b3Rh bF9wYWdlczsKQEAgLTc3Myw5ICsxMDIwLDkgQEAgc3RhdGljIGludCBtZW1pbml0X3B2KHN0cnVj dCB4Y19kb21faW1hZ2UgKmRvbSkKIAogICAgICAgICBET01QUklOVEYoIlBvcHVsYXRpbmcgbWVt b3J5IHdpdGggJWQgc3VwZXJwYWdlcyIsIGNvdW50KTsKICAgICAgICAgZm9yICggcGZuID0gMDsg cGZuIDwgY291bnQ7IHBmbisrICkKLSAgICAgICAgICAgIGV4dGVudHNbcGZuXSA9IHBmbiA8PCBT VVBFUlBBR0VfUEZOX1NISUZUOworICAgICAgICAgICAgZXh0ZW50c1twZm5dID0gcGZuIDw8IFNV UEVSUEFHRV8yTUJfU0hJRlQ7CiAgICAgICAgIHJjID0geGNfZG9tYWluX3BvcHVsYXRlX3BoeXNt YXBfZXhhY3QoZG9tLT54Y2gsIGRvbS0+Z3Vlc3RfZG9taWQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvdW50LCBTVVBFUlBBR0VfUEZOX1NISUZULCAw LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCwg U1VQRVJQQUdFXzJNQl9TSElGVCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZXh0ZW50cyk7CiAgICAgICAgIGlmICggcmMgKQogICAgICAgICAgICAg cmV0dXJuIHJjOwpAQCAtNzg1LDcgKzEwMzIsNyBAQCBzdGF0aWMgaW50IG1lbWluaXRfcHYoc3Ry dWN0IHhjX2RvbV9pbWFnZSAqZG9tKQogICAgICAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBp KysgKQogICAgICAgICB7CiAgICAgICAgICAgICBtZm4gPSBleHRlbnRzW2ldOwotICAgICAgICAg ICAgZm9yICggaiA9IDA7IGogPCBTVVBFUlBBR0VfTlJfUEZOUzsgaisrLCBwZm4rKyApCisgICAg ICAgICAgICBmb3IgKCBqID0gMDsgaiA8IFNVUEVSUEFHRV8yTUJfTlJfUEZOUzsgaisrLCBwZm4r KyApCiAgICAgICAgICAgICAgICAgZG9tLT5wMm1faG9zdFtwZm5dID0gbWZuICsgajsKICAgICAg ICAgfQogICAgIH0KQEAgLTg3MCw3ICsxMTE3LDcgQEAgc3RhdGljIGludCBtZW1pbml0X3B2KHN0 cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKIAogICAgICAgICAgICAgcGFnZXMgPSAodm1lbXJhbmdl c1tpXS5lbmQgLSB2bWVtcmFuZ2VzW2ldLnN0YXJ0KQogICAgICAgICAgICAgICAgID4+IFBBR0Vf U0hJRlQ7Ci0gICAgICAgICAgICBzdXBlcl9wYWdlcyA9IHBhZ2VzID4+IFNVUEVSUEFHRV9QRk5f U0hJRlQ7CisgICAgICAgICAgICBzdXBlcl9wYWdlcyA9IHBhZ2VzID4+IFNVUEVSUEFHRV8yTUJf U0hJRlQ7CiAgICAgICAgICAgICBwZm5fYmFzZSA9IHZtZW1yYW5nZXNbaV0uc3RhcnQgPj4gUEFH RV9TSElGVDsKIAogICAgICAgICAgICAgZm9yICggcGZuID0gcGZuX2Jhc2U7IHBmbiA8IHBmbl9i YXNlK3BhZ2VzOyBwZm4rKyApCkBAIC04ODMsMTEgKzExMzAsMTEgQEAgc3RhdGljIGludCBtZW1p bml0X3B2KHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKICAgICAgICAgICAgICAgICBzdXBlcl9w YWdlcyAtPSBjb3VudDsKIAogICAgICAgICAgICAgICAgIGZvciAoIHBmbiA9IHBmbl9iYXNlX2lk eCwgaiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgcGZuIDwgcGZuX2Jhc2VfaWR4ICsgKGNv dW50IDw8IFNVUEVSUEFHRV9QRk5fU0hJRlQpOwotICAgICAgICAgICAgICAgICAgICAgIHBmbiAr PSBTVVBFUlBBR0VfTlJfUEZOUywgaisrICkKKyAgICAgICAgICAgICAgICAgICAgICBwZm4gPCBw Zm5fYmFzZV9pZHggKyAoY291bnQgPDwgU1VQRVJQQUdFXzJNQl9TSElGVCk7CisgICAgICAgICAg ICAgICAgICAgICAgcGZuICs9IFNVUEVSUEFHRV8yTUJfTlJfUEZOUywgaisrICkKICAgICAgICAg ICAgICAgICAgICAgZXh0ZW50c1tqXSA9IGRvbS0+cDJtX2hvc3RbcGZuXTsKICAgICAgICAgICAg ICAgICByYyA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFwKGRvbS0+eGNoLCBkb20tPmd1ZXN0 X2RvbWlkLCBjb3VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFNVUEVSUEFHRV9QRk5fU0hJRlQsIG1lbWZsYWdzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VQRVJQQUdFXzJNQl9TSElGVCwgbWVtZmxh Z3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRl bnRzKTsKICAgICAgICAgICAgICAgICBpZiAoIHJjIDwgMCApCiAgICAgICAgICAgICAgICAgICAg IHJldHVybiByYzsKQEAgLTg5Nyw3ICsxMTQ0LDcgQEAgc3RhdGljIGludCBtZW1pbml0X3B2KHN0 cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKICAgICAgICAgICAgICAgICBmb3IgKCBqID0gMDsgaiA8 IHJjOyBqKysgKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgbWZuID0g ZXh0ZW50c1tqXTsKLSAgICAgICAgICAgICAgICAgICAgZm9yICggayA9IDA7IGsgPCBTVVBFUlBB R0VfTlJfUEZOUzsgaysrLCBwZm4rKyApCisgICAgICAgICAgICAgICAgICAgIGZvciAoIGsgPSAw OyBrIDwgU1VQRVJQQUdFXzJNQl9OUl9QRk5TOyBrKyssIHBmbisrICkKICAgICAgICAgICAgICAg ICAgICAgICAgIGRvbS0+cDJtX2hvc3RbcGZuXSA9IG1mbiArIGs7CiAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgIHBmbl9iYXNlX2lkeCA9IHBmbjsKQEAgLTkzOCw2ICsxMTg1LDMz MiBAQCBzdGF0aWMgaW50IG1lbWluaXRfcHYoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKQogICAg IHJldHVybiByYzsKIH0KIAorLyoKKyAqIENoZWNrIHdoZXRoZXIgdGhlcmUgZXhpc3RzIG1taW8g aG9sZSBpbiB0aGUgc3BlY2lmaWVkIG1lbW9yeSByYW5nZS4KKyAqIFJldHVybnMgMSBpZiBleGlz dHMsIGVsc2UgcmV0dXJucyAwLgorICovCitzdGF0aWMgaW50IGNoZWNrX21taW9faG9sZSh1aW50 NjRfdCBzdGFydCwgdWludDY0X3QgbWVtc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg IHVpbnQ2NF90IG1taW9fc3RhcnQsIHVpbnQ2NF90IG1taW9fc2l6ZSkKK3sKKyAgICBpZiAoIHN0 YXJ0ICsgbWVtc2l6ZSA8PSBtbWlvX3N0YXJ0IHx8IHN0YXJ0ID49IG1taW9fc3RhcnQgKyBtbWlv X3NpemUgKQorICAgICAgICByZXR1cm4gMDsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAxOwor fQorCitzdGF0aWMgaW50IG1lbWluaXRfaHZtKHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKK3sK KyAgICB1bnNpZ25lZCBsb25nIGksIHZtZW1pZCwgbnJfcGFnZXMgPSBkb20tPnRvdGFsX3BhZ2Vz OworICAgIHVuc2lnbmVkIGxvbmcgcDJtX3NpemU7CisgICAgdW5zaWduZWQgbG9uZyB0YXJnZXRf cGFnZXMgPSBkb20tPnRhcmdldF9wYWdlczsKKyAgICB1bnNpZ25lZCBsb25nIGN1cl9wYWdlcywg Y3VyX3BmbjsKKyAgICBpbnQgcmM7CisgICAgeGVuX2NhcGFiaWxpdGllc19pbmZvX3QgY2FwczsK KyAgICB1bnNpZ25lZCBsb25nIHN0YXRfbm9ybWFsX3BhZ2VzID0gMCwgc3RhdF8ybWJfcGFnZXMg PSAwLCAKKyAgICAgICAgc3RhdF8xZ2JfcGFnZXMgPSAwOworICAgIHVuc2lnbmVkIGludCBtZW1m bGFncyA9IDA7CisgICAgaW50IGNsYWltX2VuYWJsZWQgPSBkb20tPmNsYWltX2VuYWJsZWQ7Cisg ICAgdWludDY0X3QgdG90YWxfcGFnZXM7CisgICAgeGVuX3ZtZW1yYW5nZV90IGR1bW15X3ZtZW1y YW5nZVsyXTsKKyAgICB1bnNpZ25lZCBpbnQgZHVtbXlfdm5vZGVfdG9fcG5vZGVbMV07CisgICAg eGVuX3ZtZW1yYW5nZV90ICp2bWVtcmFuZ2VzOworICAgIHVuc2lnbmVkIGludCAqdm5vZGVfdG9f cG5vZGU7CisgICAgdW5zaWduZWQgaW50IG5yX3ZtZW1yYW5nZXMsIG5yX3Zub2RlczsKKyAgICB4 Y19pbnRlcmZhY2UgKnhjaCA9IGRvbS0+eGNoOworICAgIHVpbnQzMl90IGRvbWlkID0gZG9tLT5n dWVzdF9kb21pZDsKKworICAgIGlmICggbnJfcGFnZXMgPiB0YXJnZXRfcGFnZXMgKQorICAgICAg ICBtZW1mbGFncyB8PSBYRU5NRU1GX3BvcHVsYXRlX29uX2RlbWFuZDsKKworICAgIGlmICggZG9t LT5ucl92bWVtcmFuZ2VzID09IDAgKQorICAgIHsKKyAgICAgICAgLyogQnVpbGQgZHVtbXkgdm5v ZGUgaW5mb3JtYXRpb24KKyAgICAgICAgICoKKyAgICAgICAgICogR3Vlc3QgcGh5c2ljYWwgYWRk cmVzcyBzcGFjZSBsYXlvdXQ6CisgICAgICAgICAqIFswLCBob2xlX3N0YXJ0KSBbaG9sZV9zdGFy dCwgNEcpIFs0RywgaGlnaG1lbV9lbmQpCisgICAgICAgICAqCisgICAgICAgICAqIE9mIGNvdXJz ZSBpZiB0aGVyZSBpcyBubyBoaWdoIG1lbW9yeSwgdGhlIHNlY29uZCB2bWVtcmFuZ2UKKyAgICAg ICAgICogaGFzIG5vIGVmZmVjdCBvbiB0aGUgYWN0dWFsIHJlc3VsdC4KKyAgICAgICAgICovCisK KyAgICAgICAgZHVtbXlfdm1lbXJhbmdlWzBdLnN0YXJ0ID0gMDsKKyAgICAgICAgZHVtbXlfdm1l bXJhbmdlWzBdLmVuZCAgID0gZG9tLT5sb3dtZW1fZW5kOworICAgICAgICBkdW1teV92bWVtcmFu Z2VbMF0uZmxhZ3MgPSAwOworICAgICAgICBkdW1teV92bWVtcmFuZ2VbMF0ubmlkICAgPSAwOwor ICAgICAgICBucl92bWVtcmFuZ2VzID0gMTsKKworICAgICAgICBpZiAoIGRvbS0+aGlnaG1lbV9l bmQgPiAoMVVMTCA8PCAzMikgKQorICAgICAgICB7CisgICAgICAgICAgICBkdW1teV92bWVtcmFu Z2VbMV0uc3RhcnQgPSAxVUxMIDw8IDMyOworICAgICAgICAgICAgZHVtbXlfdm1lbXJhbmdlWzFd LmVuZCAgID0gZG9tLT5oaWdobWVtX2VuZDsKKyAgICAgICAgICAgIGR1bW15X3ZtZW1yYW5nZVsx XS5mbGFncyA9IDA7CisgICAgICAgICAgICBkdW1teV92bWVtcmFuZ2VbMV0ubmlkICAgPSAwOwor CisgICAgICAgICAgICBucl92bWVtcmFuZ2VzKys7CisgICAgICAgIH0KKworICAgICAgICBkdW1t eV92bm9kZV90b19wbm9kZVswXSA9IFhDX05VTUFfTk9fTk9ERTsKKyAgICAgICAgbnJfdm5vZGVz ID0gMTsKKyAgICAgICAgdm1lbXJhbmdlcyA9IGR1bW15X3ZtZW1yYW5nZTsKKyAgICAgICAgdm5v ZGVfdG9fcG5vZGUgPSBkdW1teV92bm9kZV90b19wbm9kZTsKKyAgICB9CisgICAgZWxzZQorICAg IHsKKyAgICAgICAgaWYgKCBucl9wYWdlcyA+IHRhcmdldF9wYWdlcyApCisgICAgICAgIHsKKyAg ICAgICAgICAgIERPTVBSSU5URigiQ2Fubm90IGVuYWJsZSB2TlVNQSBhbmQgUG9EIGF0IHRoZSBz YW1lIHRpbWUiKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworICAgICAgICB9CisKKyAg ICAgICAgbnJfdm1lbXJhbmdlcyA9IGRvbS0+bnJfdm1lbXJhbmdlczsKKyAgICAgICAgbnJfdm5v ZGVzID0gZG9tLT5ucl92bm9kZXM7CisgICAgICAgIHZtZW1yYW5nZXMgPSBkb20tPnZtZW1yYW5n ZXM7CisgICAgICAgIHZub2RlX3RvX3Bub2RlID0gZG9tLT52bm9kZV90b19wbm9kZTsKKyAgICB9 CisKKyAgICB0b3RhbF9wYWdlcyA9IDA7CisgICAgcDJtX3NpemUgPSAwOworICAgIGZvciAoIGkg PSAwOyBpIDwgbnJfdm1lbXJhbmdlczsgaSsrICkKKyAgICB7CisgICAgICAgIHRvdGFsX3BhZ2Vz ICs9ICgodm1lbXJhbmdlc1tpXS5lbmQgLSB2bWVtcmFuZ2VzW2ldLnN0YXJ0KQorICAgICAgICAg ICAgICAgICAgICAgICAgPj4gUEFHRV9TSElGVCk7CisgICAgICAgIHAybV9zaXplID0gcDJtX3Np emUgPiAodm1lbXJhbmdlc1tpXS5lbmQgPj4gUEFHRV9TSElGVCkgPworICAgICAgICAgICAgcDJt X3NpemUgOiAodm1lbXJhbmdlc1tpXS5lbmQgPj4gUEFHRV9TSElGVCk7CisgICAgfQorCisgICAg aWYgKCB0b3RhbF9wYWdlcyAhPSBucl9wYWdlcyApCisgICAgeworICAgICAgICBET01QUklOVEYo InZOVU1BIG1lbW9yeSBwYWdlcyBtaXNtYXRjaCAoMHglIlBSSXg2NCIgIT0gMHglIlBSSXg2NCIp IiwKKyAgICAgICAgICAgICAgIHRvdGFsX3BhZ2VzLCBucl9wYWdlcyk7CisgICAgICAgIGdvdG8g ZXJyb3Jfb3V0OworICAgIH0KKworICAgIGlmICggeGNfdmVyc2lvbih4Y2gsIFhFTlZFUl9jYXBh YmlsaXRpZXMsICZjYXBzKSAhPSAwICkKKyAgICB7CisgICAgICAgIERPTVBSSU5URigiQ291bGQg bm90IGdldCBYZW4gY2FwYWJpbGl0aWVzIik7CisgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworICAg IH0KKworICAgIGRvbS0+cDJtX3NpemUgPSBwMm1fc2l6ZTsKKyAgICBkb20tPnAybV9ob3N0ID0g eGNfZG9tX21hbGxvYyhkb20sIHNpemVvZih4ZW5fcGZuX3QpICoKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZG9tLT5wMm1fc2l6ZSk7CisgICAgaWYgKCBkb20tPnAybV9o b3N0ID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgRE9NUFJJTlRGKCJDb3VsZCBub3QgYWxsb2Nh dGUgcDJtIik7CisgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworICAgIH0KKworICAgIGZvciAoIGkg PSAwOyBpIDwgcDJtX3NpemU7IGkrKyApCisgICAgICAgIGRvbS0+cDJtX2hvc3RbaV0gPSAoKHhl bl9wZm5fdCktMSk7CisgICAgZm9yICggdm1lbWlkID0gMDsgdm1lbWlkIDwgbnJfdm1lbXJhbmdl czsgdm1lbWlkKysgKQorICAgIHsKKyAgICAgICAgdWludDY0X3QgcGZuOworCisgICAgICAgIGZv ciAoIHBmbiA9IHZtZW1yYW5nZXNbdm1lbWlkXS5zdGFydCA+PiBQQUdFX1NISUZUOworICAgICAg ICAgICAgICBwZm4gPCB2bWVtcmFuZ2VzW3ZtZW1pZF0uZW5kID4+IFBBR0VfU0hJRlQ7CisgICAg ICAgICAgICAgIHBmbisrICkKKyAgICAgICAgICAgIGRvbS0+cDJtX2hvc3RbcGZuXSA9IHBmbjsK KyAgICB9CisKKyAgICAvKgorICAgICAqIFRyeSB0byBjbGFpbSBwYWdlcyBmb3IgZWFybHkgd2Fy bmluZyBvZiBpbnN1ZmZpY2llbnQgbWVtb3J5IGF2YWlsYWJsZS4KKyAgICAgKiBUaGlzIHNob3Vs ZCBnbyBiZWZvcmUgeGNfZG9tYWluX3NldF9wb2RfdGFyZ2V0LCBiZWN1YXNlIHRoYXQgZnVuY3Rp b24KKyAgICAgKiBhY3R1YWxseSBhbGxvY2F0ZXMgbWVtb3J5IGZvciB0aGUgZ3Vlc3QuIENsYWlt aW5nIGFmdGVyIG1lbW9yeSBoYXMgYmVlbgorICAgICAqIGFsbG9jYXRlZCBpcyBwb2ludGxlc3Mu CisgICAgICovCisgICAgaWYgKCBjbGFpbV9lbmFibGVkICkgeworICAgICAgICByYyA9IHhjX2Rv bWFpbl9jbGFpbV9wYWdlcyh4Y2gsIGRvbWlkLCB0YXJnZXRfcGFnZXMgLSBWR0FfSE9MRV9TSVpF KTsKKyAgICAgICAgaWYgKCByYyAhPSAwICkKKyAgICAgICAgeworICAgICAgICAgICAgRE9NUFJJ TlRGKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBIVk0gZ3Vlc3QgYXMgd2UgY2Fubm90 IGNsYWltIG1lbW9yeSEiKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworICAgICAgICB9 CisgICAgfQorCisgICAgaWYgKCBtZW1mbGFncyAmIFhFTk1FTUZfcG9wdWxhdGVfb25fZGVtYW5k ICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFN1YnRyYWN0IFZHQV9IT0xFX1NJWkUg ZnJvbSB0YXJnZXRfcGFnZXMgZm9yIHRoZSBWR0EKKyAgICAgICAgICogImhvbGUiLiAgWGVuIHdp bGwgYWRqdXN0IHRoZSBQb0QgY2FjaGUgc2l6ZSBzbyB0aGF0IGRvbWFpbgorICAgICAgICAgKiB0 b3RfcGFnZXMgd2lsbCBiZSB0YXJnZXRfcGFnZXMgLSBWR0FfSE9MRV9TSVpFIGFmdGVyCisgICAg ICAgICAqIHRoaXMgY2FsbC4KKyAgICAgICAgICovCisgICAgICAgIHJjID0geGNfZG9tYWluX3Nl dF9wb2RfdGFyZ2V0KHhjaCwgZG9taWQsIHRhcmdldF9wYWdlcyAtIFZHQV9IT0xFX1NJWkUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOwor ICAgICAgICBpZiAoIHJjICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBET01QUklOVEYo IkNvdWxkIG5vdCBzZXQgUG9EIHRhcmdldCBmb3IgSFZNIGd1ZXN0LlxuIik7CisgICAgICAgICAg ICBnb3RvIGVycm9yX291dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogQWxs b2NhdGUgbWVtb3J5IGZvciBIVk0gZ3Vlc3QsIHNraXBwaW5nIFZHQSBob2xlIDB4QTAwMDAtMHhD MDAwMC4KKyAgICAgKgorICAgICAqIFdlIGF0dGVtcHQgdG8gYWxsb2NhdGUgMUdCIHBhZ2VzIGlm IHBvc3NpYmxlLiBJdCBmYWxscyBiYWNrIG9uIDJNQgorICAgICAqIHBhZ2VzIGlmIDFHQiBhbGxv Y2F0aW9uIGZhaWxzLiA0S0IgcGFnZXMgd2lsbCBiZSB1c2VkIGV2ZW50dWFsbHkgaWYKKyAgICAg KiBib3RoIGZhaWwuCisgICAgICogCisgICAgICogVW5kZXIgMk1CIG1vZGUsIHdlIGFsbG9jYXRl IHBhZ2VzIGluIGJhdGNoZXMgb2Ygbm8gbW9yZSB0aGFuIDhNQiB0byAKKyAgICAgKiBlbnN1cmUg dGhhdCB3ZSBjYW4gYmUgcHJlZW1wdGVkIGFuZCBoZW5jZSBkb20wIHJlbWFpbnMgcmVzcG9uc2l2 ZS4KKyAgICAgKi8KKyAgICByYyA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFwX2V4YWN0KAor ICAgICAgICB4Y2gsIGRvbWlkLCAweGEwLCAwLCBtZW1mbGFncywgJmRvbS0+cDJtX2hvc3RbMHgw MF0pOworCisgICAgc3RhdF9ub3JtYWxfcGFnZXMgPSAwOworICAgIGZvciAoIHZtZW1pZCA9IDA7 IHZtZW1pZCA8IG5yX3ZtZW1yYW5nZXM7IHZtZW1pZCsrICkKKyAgICB7CisgICAgICAgIHVuc2ln bmVkIGludCBuZXdfbWVtZmxhZ3MgPSBtZW1mbGFnczsKKyAgICAgICAgdWludDY0X3QgZW5kX3Bh Z2VzOworICAgICAgICB1bnNpZ25lZCBpbnQgdm5vZGUgPSB2bWVtcmFuZ2VzW3ZtZW1pZF0ubmlk OworICAgICAgICB1bnNpZ25lZCBpbnQgcG5vZGUgPSB2bm9kZV90b19wbm9kZVt2bm9kZV07CisK KyAgICAgICAgaWYgKCBwbm9kZSAhPSBYQ19OVU1BX05PX05PREUgKQorICAgICAgICAgICAgbmV3 X21lbWZsYWdzIHw9IFhFTk1FTUZfZXhhY3Rfbm9kZShwbm9kZSk7CisKKyAgICAgICAgZW5kX3Bh Z2VzID0gdm1lbXJhbmdlc1t2bWVtaWRdLmVuZCA+PiBQQUdFX1NISUZUOworICAgICAgICAvKgor ICAgICAgICAgKiBDb25zaWRlciB2Z2EgaG9sZSBiZWxvbmdzIHRvIHRoZSB2bWVtcmFuZ2UgdGhh dCBjb3ZlcnMKKyAgICAgICAgICogMHhBMDAwMC0weEMwMDAwLiBOb3RlIHRoYXQgMHgwMDAwMC0w eEEwMDAwIGlzIHBvcHVsYXRlZCBqdXN0CisgICAgICAgICAqIGJlZm9yZSB0aGlzIGxvb3AuCisg ICAgICAgICAqLworICAgICAgICBpZiAoIHZtZW1yYW5nZXNbdm1lbWlkXS5zdGFydCA9PSAwICkK KyAgICAgICAgeworICAgICAgICAgICAgY3VyX3BhZ2VzID0gMHhjMDsKKyAgICAgICAgICAgIHN0 YXRfbm9ybWFsX3BhZ2VzICs9IDB4YzA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg ICAgICAgY3VyX3BhZ2VzID0gdm1lbXJhbmdlc1t2bWVtaWRdLnN0YXJ0ID4+IFBBR0VfU0hJRlQ7 CisKKyAgICAgICAgd2hpbGUgKCAocmMgPT0gMCkgJiYgKGVuZF9wYWdlcyA+IGN1cl9wYWdlcykg KQorICAgICAgICB7CisgICAgICAgICAgICAvKiBDbGlwIGNvdW50IHRvIG1heGltdW0gMUdCIGV4 dGVudC4gKi8KKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQgPSBlbmRfcGFnZXMgLSBj dXJfcGFnZXM7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1heF9wYWdlcyA9IFNVUEVSUEFH RV8xR0JfTlJfUEZOUzsKKworICAgICAgICAgICAgaWYgKCBjb3VudCA+IG1heF9wYWdlcyApCisg ICAgICAgICAgICAgICAgY291bnQgPSBtYXhfcGFnZXM7CisKKyAgICAgICAgICAgIGN1cl9wZm4g PSBkb20tPnAybV9ob3N0W2N1cl9wYWdlc107CisKKyAgICAgICAgICAgIC8qIFRha2UgY2FyZSB0 aGUgY29ybmVyIGNhc2VzIG9mIHN1cGVyIHBhZ2UgdGFpbHMgKi8KKyAgICAgICAgICAgIGlmICgg KChjdXJfcGZuICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKSkgIT0gMCkgJiYKKyAgICAgICAg ICAgICAgICAgKGNvdW50ID4gKC1jdXJfcGZuICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKSkp ICkKKyAgICAgICAgICAgICAgICBjb3VudCA9IC1jdXJfcGZuICYgKFNVUEVSUEFHRV8xR0JfTlJf UEZOUy0xKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCAoKGNvdW50ICYgKFNVUEVSUEFHRV8xR0Jf TlJfUEZOUy0xKSkgIT0gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAoY291bnQgPiBTVVBF UlBBR0VfMUdCX05SX1BGTlMpICkKKyAgICAgICAgICAgICAgICBjb3VudCAmPSB+KFNVUEVSUEFH RV8xR0JfTlJfUEZOUyAtIDEpOworCisgICAgICAgICAgICAvKiBBdHRlbXAgdG8gYWxsb2NhdGUg MUdCIHN1cGVyIHBhZ2UuIEJlY2F1c2UgaW4gZWFjaCBwYXNzCisgICAgICAgICAgICAgKiB3ZSBv bmx5IGFsbG9jYXRlIGF0IG1vc3QgMUdCLCB3ZSBkb24ndCBoYXZlIHRvIGNsaXAKKyAgICAgICAg ICAgICAqIHN1cGVyIHBhZ2UgYm91bmRhcmllcy4KKyAgICAgICAgICAgICAqLworICAgICAgICAg ICAgaWYgKCAoKGNvdW50IHwgY3VyX3BmbikgJiAoU1VQRVJQQUdFXzFHQl9OUl9QRk5TIC0gMSkp ID09IDAgJiYKKyAgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlcmUgZXhpc3RzIE1NSU8g aG9sZSBpbiB0aGUgMUdCIG1lbW9yeQorICAgICAgICAgICAgICAgICAgKiByYW5nZSAqLworICAg ICAgICAgICAgICAgICAhY2hlY2tfbW1pb19ob2xlKGN1cl9wZm4gPDwgUEFHRV9TSElGVCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVVBFUlBBR0VfMUdCX05SX1BGTlMgPDwg UEFHRV9TSElGVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb20tPm1taW9f c3RhcnQsIGRvbS0+bW1pb19zaXplKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg bG9uZyBkb25lOworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfZXh0ZW50cyA9IGNv dW50ID4+IFNVUEVSUEFHRV8xR0JfU0hJRlQ7CisgICAgICAgICAgICAgICAgeGVuX3Bmbl90IHNw X2V4dGVudHNbbnJfZXh0ZW50c107CisKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8 IG5yX2V4dGVudHM7IGkrKyApCisgICAgICAgICAgICAgICAgICAgIHNwX2V4dGVudHNbaV0gPQor ICAgICAgICAgICAgICAgICAgICAgICAgZG9tLT5wMm1faG9zdFtjdXJfcGFnZXMrKGk8PFNVUEVS UEFHRV8xR0JfU0hJRlQpXTsKKworICAgICAgICAgICAgICAgIGRvbmUgPSB4Y19kb21haW5fcG9w dWxhdGVfcGh5c21hcCh4Y2gsIGRvbWlkLCBucl9leHRlbnRzLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVVBFUlBBR0VfMUdCX1NISUZULAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfbWVtZmxh Z3MsIHNwX2V4dGVudHMpOworCisgICAgICAgICAgICAgICAgaWYgKCBkb25lID4gMCApCisgICAg ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBzdGF0XzFnYl9wYWdlcyArPSBkb25l OworICAgICAgICAgICAgICAgICAgICBkb25lIDw8PSBTVVBFUlBBR0VfMUdCX1NISUZUOworICAg ICAgICAgICAgICAgICAgICBjdXJfcGFnZXMgKz0gZG9uZTsKKyAgICAgICAgICAgICAgICAgICAg Y291bnQgLT0gZG9uZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIGlmICggY291bnQgIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg LyogQ2xpcCBjb3VudCB0byBtYXhpbXVtIDhNQiBleHRlbnQuICovCisgICAgICAgICAgICAgICAg bWF4X3BhZ2VzID0gU1VQRVJQQUdFXzJNQl9OUl9QRk5TICogNDsKKyAgICAgICAgICAgICAgICBp ZiAoIGNvdW50ID4gbWF4X3BhZ2VzICkKKyAgICAgICAgICAgICAgICAgICAgY291bnQgPSBtYXhf cGFnZXM7CisKKyAgICAgICAgICAgICAgICAvKiBDbGlwIHBhcnRpYWwgc3VwZXJwYWdlIGV4dGVu dHMgdG8gc3VwZXJwYWdlCisgICAgICAgICAgICAgICAgICogYm91bmRhcmllcy4gKi8KKyAgICAg ICAgICAgICAgICBpZiAoICgoY3VyX3BmbiAmIChTVVBFUlBBR0VfMk1CX05SX1BGTlMtMSkpICE9 IDApICYmCisgICAgICAgICAgICAgICAgICAgICAoY291bnQgPiAoLWN1cl9wZm4gJiAoU1VQRVJQ QUdFXzJNQl9OUl9QRk5TLTEpKSkgKQorICAgICAgICAgICAgICAgICAgICBjb3VudCA9IC1jdXJf cGZuICYgKFNVUEVSUEFHRV8yTUJfTlJfUEZOUy0xKTsKKyAgICAgICAgICAgICAgICBlbHNlIGlm ICggKChjb3VudCAmIChTVVBFUlBBR0VfMk1CX05SX1BGTlMtMSkpICE9IDApICYmCisgICAgICAg ICAgICAgICAgICAgICAgICAgIChjb3VudCA+IFNVUEVSUEFHRV8yTUJfTlJfUEZOUykgKQorICAg ICAgICAgICAgICAgICAgICBjb3VudCAmPSB+KFNVUEVSUEFHRV8yTUJfTlJfUEZOUyAtIDEpOyAv KiBjbGlwIG5vbi1zLnAuIHRhaWwgKi8KKworICAgICAgICAgICAgICAgIC8qIEF0dGVtcHQgdG8g YWxsb2NhdGUgc3VwZXJwYWdlIGV4dGVudHMuICovCisgICAgICAgICAgICAgICAgaWYgKCAoKGNv dW50IHwgY3VyX3BmbikgJiAoU1VQRVJQQUdFXzJNQl9OUl9QRk5TIC0gMSkpID09IDAgKQorICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbG9uZyBkb25lOworICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIG5yX2V4dGVudHMgPSBjb3VudCA+PiBTVVBFUlBBR0Vf Mk1CX1NISUZUOworICAgICAgICAgICAgICAgICAgICB4ZW5fcGZuX3Qgc3BfZXh0ZW50c1tucl9l eHRlbnRzXTsKKworICAgICAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG5yX2V4dGVu dHM7IGkrKyApCisgICAgICAgICAgICAgICAgICAgICAgICBzcF9leHRlbnRzW2ldID0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBkb20tPnAybV9ob3N0W2N1cl9wYWdlcysoaTw8U1VQRVJQ QUdFXzJNQl9TSElGVCldOworCisgICAgICAgICAgICAgICAgICAgIGRvbmUgPSB4Y19kb21haW5f cG9wdWxhdGVfcGh5c21hcCh4Y2gsIGRvbWlkLCBucl9leHRlbnRzLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1VQRVJQQUdFXzJNQl9TSElG VCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IG5ld19tZW1mbGFncywgc3BfZXh0ZW50cyk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCBk b25lID4gMCApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAg IHN0YXRfMm1iX3BhZ2VzICs9IGRvbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBkb25lIDw8 PSBTVVBFUlBBR0VfMk1CX1NISUZUOworICAgICAgICAgICAgICAgICAgICAgICAgY3VyX3BhZ2Vz ICs9IGRvbmU7CisgICAgICAgICAgICAgICAgICAgICAgICBjb3VudCAtPSBkb25lOworICAgICAg ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAvKiBGYWxsIGJhY2sgdG8gNGtCIGV4dGVudHMuICovCisgICAgICAgICAgICBpZiAo IGNvdW50ICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJjID0geGNfZG9t YWluX3BvcHVsYXRlX3BoeXNtYXBfZXhhY3QoCisgICAgICAgICAgICAgICAgICAgIHhjaCwgZG9t aWQsIGNvdW50LCAwLCBuZXdfbWVtZmxhZ3MsICZkb20tPnAybV9ob3N0W2N1cl9wYWdlc10pOwor ICAgICAgICAgICAgICAgIGN1cl9wYWdlcyArPSBjb3VudDsKKyAgICAgICAgICAgICAgICBzdGF0 X25vcm1hbF9wYWdlcyArPSBjb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg ICAgIGlmICggcmMgIT0gMCApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAo IHJjICE9IDAgKQorICAgIHsKKyAgICAgICAgRE9NUFJJTlRGKCJDb3VsZCBub3QgYWxsb2NhdGUg bWVtb3J5IGZvciBIVk0gZ3Vlc3QuIik7CisgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworICAgIH0K KworICAgIERQUklOVEYoIlBIWVNJQ0FMIE1FTU9SWSBBTExPQ0FUSU9OOlxuIik7CisgICAgRFBS SU5URigiICA0S0IgUEFHRVM6IDB4JTAxNmx4XG4iLCBzdGF0X25vcm1hbF9wYWdlcyk7CisgICAg RFBSSU5URigiICAyTUIgUEFHRVM6IDB4JTAxNmx4XG4iLCBzdGF0XzJtYl9wYWdlcyk7CisgICAg RFBSSU5URigiICAxR0IgUEFHRVM6IDB4JTAxNmx4XG4iLCBzdGF0XzFnYl9wYWdlcyk7CisKKyAg ICByYyA9IDA7CisgICAgZ290byBvdXQ7CisgZXJyb3Jfb3V0OgorICAgIHJjID0gLTE7Cisgb3V0 OgorCisgICAgLyogZW5zdXJlIG5vIHVuY2xhaW1lZCBwYWdlcyBhcmUgbGVmdCB1bnVzZWQgKi8K KyAgICB4Y19kb21haW5fY2xhaW1fcGFnZXMoeGNoLCBkb21pZCwgMCAvKiBjYW5jZWxzIHRoZSBj bGFpbSAqLyk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwog CiBzdGF0aWMgaW50IGJvb3RlYXJseShzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCkBAIC0xMDUy LDYgKzE2MjUsMTIgQEAgc3RhdGljIGludCBib290bGF0ZV9wdihzdHJ1Y3QgeGNfZG9tX2ltYWdl ICpkb20pCiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYm9vdGxhdGVfaHZtKHN0cnVj dCB4Y19kb21faW1hZ2UgKmRvbSkKK3sKKyAgICBET01QUklOVEYoIiVzOiBkb2luZyBub3RoaW5n IiwgX19mdW5jX18pOworICAgIHJldHVybiAwOworfQorCiBpbnQgeGNfZG9tX2ZlYXR1cmVfdHJh bnNsYXRlZChzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCiB7CiAgICAgLyogR3Vlc3RzIHJ1bm5p bmcgaW5zaWRlIEhWTSBjb250YWluZXJzIGFyZSBhbHdheXMgYXV0by10cmFuc2xhdGVkLiAqLwpA QCAtMTA5NSwxMCArMTY3NCwyNyBAQCBzdGF0aWMgc3RydWN0IHhjX2RvbV9hcmNoIHhjX2RvbV82 NCA9IHsKICAgICAuYm9vdGxhdGUgPSBib290bGF0ZV9wdiwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qg eGNfZG9tX2FyY2ggeGNfaHZtXzMyID0geworICAgIC5ndWVzdF90eXBlID0gImh2bS0zLjAteDg2 XzMyIiwKKyAgICAubmF0aXZlX3Byb3RvY29sID0gWEVOX0lPX1BST1RPX0FCSV9YODZfMzIsCisg ICAgLnBhZ2Vfc2hpZnQgPSBQQUdFX1NISUZUX1g4NiwKKyAgICAuc2l6ZW9mX3BmbiA9IDQsCisg ICAgLmFsbG9jX21hZ2ljX3BhZ2VzID0gYWxsb2NfbWFnaWNfcGFnZXNfaHZtLAorICAgIC5jb3Vu dF9wZ3RhYmxlcyA9IE5VTEwsCisgICAgLnNldHVwX3BndGFibGVzID0gTlVMTCwKKyAgICAuc3Rh cnRfaW5mbyA9IE5VTEwsCisgICAgLnNoYXJlZF9pbmZvID0gTlVMTCwKKyAgICAudmNwdSA9IHZj cHVfaHZtLAorICAgIC5tZW1pbml0ID0gbWVtaW5pdF9odm0sCisgICAgLmJvb3RlYXJseSA9IGJv b3RlYXJseSwKKyAgICAuYm9vdGxhdGUgPSBib290bGF0ZV9odm0sCit9OworCiBzdGF0aWMgdm9p ZCBfX2luaXQgcmVnaXN0ZXJfYXJjaF9ob29rcyh2b2lkKQogewogICAgIHhjX2RvbV9yZWdpc3Rl cl9hcmNoX2hvb2tzKCZ4Y19kb21fMzJfcGFlKTsKICAgICB4Y19kb21fcmVnaXN0ZXJfYXJjaF9o b29rcygmeGNfZG9tXzY0KTsKKyAgICB4Y19kb21fcmVnaXN0ZXJfYXJjaF9ob29rcygmeGNfaHZt XzMyKTsKIH0KIAogLyoKLS0gCjEuOS41IChBcHBsZSBHaXQtNTAuMykKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0 Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=