From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v7 03/11] xen: reduce number of global variables in xen loader Date: Thu, 3 Mar 2016 10:38:08 +0100 Message-ID: <1456997896-14063-4-git-send-email-jgross__30289.4111992375$1456997991$gmane$org@suse.com> References: <1456997896-14063-1-git-send-email-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1456997896-14063-1-git-send-email-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: grub-devel@gnu.org Cc: Juergen Gross , phcoder@gmail.com, daniel.kiper@oracle.com, mchang@suse.com, xen-devel@lists.xen.org List-Id: xen-devel@lists.xenproject.org VGhlIGxvYWRlciBmb3IgeGVuIHBhcmF2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBpcyB1c2luZyBs b3RzIG9mIGdsb2JhbAp2YXJpYWJsZXMuIFJlZHVjZSB0aGUgbnVtYmVyIGJ5IG1ha2luZyB0aGVt IGVpdGhlciBsb2NhbCBvciBieSBwdXR0aW5nCnRoZW0gaW50byBhIHNpbmdsZSBzdGF0ZSBzdHJ1 Y3R1cmUuCgpTaWduZWQtb2ZmLWJ5OiBKdWVyZ2VuIEdyb3NzIDxqZ3Jvc3NAc3VzZS5jb20+ClJl dmlld2VkLWJ5OiBEYW5pZWwgS2lwZXIgPGRhbmllbC5raXBlckBvcmFjbGUuY29tPgotLS0KIGdy dWItY29yZS9sb2FkZXIvaTM4Ni94ZW4uYyB8IDI1OSArKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEzOCBpbnNlcnRpb25zKCspLCAx MjEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L3hlbi5j IGIvZ3J1Yi1jb3JlL2xvYWRlci9pMzg2L3hlbi5jCmluZGV4IGY0NWY3MGYuLjY5MWMyMmUgMTAw NjQ0Ci0tLSBhL2dydWItY29yZS9sb2FkZXIvaTM4Ni94ZW4uYworKysgYi9ncnViLWNvcmUvbG9h ZGVyL2kzODYveGVuLmMKQEAgLTQyLDE2ICs0MiwyMCBAQAogCiBHUlVCX01PRF9MSUNFTlNFICgi R1BMdjMrIik7CiAKLXN0YXRpYyBzdHJ1Y3QgZ3J1Yl9yZWxvY2F0b3IgKnJlbG9jYXRvciA9IE5V TEw7Ci1zdGF0aWMgZ3J1Yl91aW50NjRfdCBtYXhfYWRkcjsKK3N0cnVjdCB4ZW5fbG9hZGVyX3N0 YXRlIHsKKyAgc3RydWN0IGdydWJfcmVsb2NhdG9yICpyZWxvY2F0b3I7CisgIHN0cnVjdCBzdGFy dF9pbmZvIG5leHRfc3RhcnQ7CisgIHN0cnVjdCBncnViX3hlbl9maWxlX2luZm8geGVuX2luZjsK KyAgZ3J1Yl91aW50NjRfdCBtYXhfYWRkcjsKKyAgc3RydWN0IHhlbl9tdWx0aWJvb3RfbW9kX2xp c3QgKm1vZHVsZV9pbmZvX3BhZ2U7CisgIGdydWJfdWludDY0X3QgbW9kdWxlc190YXJnZXRfc3Rh cnQ7CisgIGdydWJfc2l6ZV90IG5fbW9kdWxlczsKKyAgaW50IGxvYWRlZDsKK307CisKK3N0YXRp YyBzdHJ1Y3QgeGVuX2xvYWRlcl9zdGF0ZSB4ZW5fc3RhdGU7CisKIHN0YXRpYyBncnViX2RsX3Qg bXlfbW9kOwotc3RhdGljIGludCBsb2FkZWQgPSAwOwotc3RhdGljIHN0cnVjdCBzdGFydF9pbmZv IG5leHRfc3RhcnQ7Ci1zdGF0aWMgdm9pZCAqa2Vybl9jaHVua19zcmM7Ci1zdGF0aWMgc3RydWN0 IGdydWJfeGVuX2ZpbGVfaW5mbyB4ZW5faW5mOwotc3RhdGljIHN0cnVjdCB4ZW5fbXVsdGlib290 X21vZF9saXN0ICp4ZW5fbW9kdWxlX2luZm9fcGFnZTsKLXN0YXRpYyBncnViX3VpbnQ2NF90IG1v ZHVsZXNfdGFyZ2V0X3N0YXJ0Owotc3RhdGljIGdydWJfc2l6ZV90IG5fbW9kdWxlczsKIAogI2Rl ZmluZSBQQUdFX1NJWkUgNDA5NgogI2RlZmluZSBNQVhfTU9EVUxFUyAoUEFHRV9TSVpFIC8gc2l6 ZW9mIChzdHJ1Y3QgeGVuX211bHRpYm9vdF9tb2RfbGlzdCkpCkBAIC0yMjUsNTAgKzIyOSw1NSBA QCBncnViX3hlbl9ib290ICh2b2lkKQogICBpZiAoZ3J1Yl94ZW5fbl9hbGxvY2F0ZWRfc2hhcmVk X3BhZ2VzKQogICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CVUcsICJhY3RpdmUgZ3Jh bnRzIik7CiAKLSAgc3RhdGUubWZuX2xpc3QgPSBtYXhfYWRkcjsKLSAgbmV4dF9zdGFydC5tZm5f bGlzdCA9IG1heF9hZGRyICsgeGVuX2luZi52aXJ0X2Jhc2U7Ci0gIG5leHRfc3RhcnQuZmlyc3Rf cDJtX3BmbiA9IG1heF9hZGRyID4+IFBBR0VfU0hJRlQ7CS8qIElzIHRoaXMgcmlnaHQ/ICovCisg IHN0YXRlLm1mbl9saXN0ID0geGVuX3N0YXRlLm1heF9hZGRyOworICB4ZW5fc3RhdGUubmV4dF9z dGFydC5tZm5fbGlzdCA9CisgICAgeGVuX3N0YXRlLm1heF9hZGRyICsgeGVuX3N0YXRlLnhlbl9p bmYudmlydF9iYXNlOworICB4ZW5fc3RhdGUubmV4dF9zdGFydC5maXJzdF9wMm1fcGZuID0geGVu X3N0YXRlLm1heF9hZGRyID4+IFBBR0VfU0hJRlQ7CiAgIHBndHNpemUgPSBzaXplb2YgKGdydWJf eGVuX21mbl90KSAqIGdydWJfeGVuX3N0YXJ0X3BhZ2VfYWRkci0+bnJfcGFnZXM7Ci0gIGVyciA9 IGdydWJfcmVsb2NhdG9yX2FsbG9jX2NodW5rX2FkZHIgKHJlbG9jYXRvciwgJmNoLCBtYXhfYWRk ciwgcGd0c2l6ZSk7Ci0gIG5leHRfc3RhcnQubnJfcDJtX2ZyYW1lcyA9IChwZ3RzaXplICsgUEFH RV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKKyAgZXJyID0gZ3J1Yl9yZWxvY2F0b3JfYWxsb2Nf Y2h1bmtfYWRkciAoeGVuX3N0YXRlLnJlbG9jYXRvciwgJmNoLAorCQkJCQkgeGVuX3N0YXRlLm1h eF9hZGRyLCBwZ3RzaXplKTsKKyAgeGVuX3N0YXRlLm5leHRfc3RhcnQubnJfcDJtX2ZyYW1lcyA9 IChwZ3RzaXplICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKICAgaWYgKGVycikKICAg ICByZXR1cm4gZXJyOwogICBuZXdfbWZuX2xpc3QgPSBnZXRfdmlydHVhbF9jdXJyZW50X2FkZHJl c3MgKGNoKTsKICAgZ3J1Yl9tZW1jcHkgKG5ld19tZm5fbGlzdCwKIAkgICAgICAgKHZvaWQgKikg Z3J1Yl94ZW5fc3RhcnRfcGFnZV9hZGRyLT5tZm5fbGlzdCwgcGd0c2l6ZSk7Ci0gIG1heF9hZGRy ID0gQUxJR05fVVAgKG1heF9hZGRyICsgcGd0c2l6ZSwgUEFHRV9TSVpFKTsKKyAgeGVuX3N0YXRl Lm1heF9hZGRyID0gQUxJR05fVVAgKHhlbl9zdGF0ZS5tYXhfYWRkciArIHBndHNpemUsIFBBR0Vf U0laRSk7CiAKLSAgZXJyID0gZ3J1Yl9yZWxvY2F0b3JfYWxsb2NfY2h1bmtfYWRkciAocmVsb2Nh dG9yLCAmY2gsCi0JCQkJCSBtYXhfYWRkciwgc2l6ZW9mIChuZXh0X3N0YXJ0KSk7CisgIGVyciA9 IGdydWJfcmVsb2NhdG9yX2FsbG9jX2NodW5rX2FkZHIgKHhlbl9zdGF0ZS5yZWxvY2F0b3IsICZj aCwKKwkJCQkJIHhlbl9zdGF0ZS5tYXhfYWRkciwKKwkJCQkJIHNpemVvZiAoeGVuX3N0YXRlLm5l eHRfc3RhcnQpKTsKICAgaWYgKGVycikKICAgICByZXR1cm4gZXJyOwotICBzdGF0ZS5zdGFydF9p bmZvID0gbWF4X2FkZHIgKyB4ZW5faW5mLnZpcnRfYmFzZTsKKyAgc3RhdGUuc3RhcnRfaW5mbyA9 IHhlbl9zdGF0ZS5tYXhfYWRkciArIHhlbl9zdGF0ZS54ZW5faW5mLnZpcnRfYmFzZTsKICAgbnN0 ID0gZ2V0X3ZpcnR1YWxfY3VycmVudF9hZGRyZXNzIChjaCk7Ci0gIG1heF9hZGRyID0gQUxJR05f VVAgKG1heF9hZGRyICsgc2l6ZW9mIChuZXh0X3N0YXJ0KSwgUEFHRV9TSVpFKTsKKyAgeGVuX3N0 YXRlLm1heF9hZGRyID0KKyAgICBBTElHTl9VUCAoeGVuX3N0YXRlLm1heF9hZGRyICsgc2l6ZW9m ICh4ZW5fc3RhdGUubmV4dF9zdGFydCksIFBBR0VfU0laRSk7CiAKLSAgbmV4dF9zdGFydC5ucl9w YWdlcyA9IGdydWJfeGVuX3N0YXJ0X3BhZ2VfYWRkci0+bnJfcGFnZXM7Ci0gIGdydWJfbWVtY3B5 IChuZXh0X3N0YXJ0Lm1hZ2ljLCBncnViX3hlbl9zdGFydF9wYWdlX2FkZHItPm1hZ2ljLAotCSAg ICAgICBzaXplb2YgKG5leHRfc3RhcnQubWFnaWMpKTsKLSAgbmV4dF9zdGFydC5zdG9yZV9tZm4g PSBncnViX3hlbl9zdGFydF9wYWdlX2FkZHItPnN0b3JlX21mbjsKLSAgbmV4dF9zdGFydC5zdG9y ZV9ldnRjaG4gPSBncnViX3hlbl9zdGFydF9wYWdlX2FkZHItPnN0b3JlX2V2dGNobjsKLSAgbmV4 dF9zdGFydC5jb25zb2xlLmRvbVUgPSBncnViX3hlbl9zdGFydF9wYWdlX2FkZHItPmNvbnNvbGUu ZG9tVTsKLSAgbmV4dF9zdGFydC5zaGFyZWRfaW5mbyA9IGdydWJfeGVuX3N0YXJ0X3BhZ2VfYWRk ci0+c2hhcmVkX2luZm87CisgIHhlbl9zdGF0ZS5uZXh0X3N0YXJ0Lm5yX3BhZ2VzID0gZ3J1Yl94 ZW5fc3RhcnRfcGFnZV9hZGRyLT5ucl9wYWdlczsKKyAgZ3J1Yl9tZW1jcHkgKHhlbl9zdGF0ZS5u ZXh0X3N0YXJ0Lm1hZ2ljLCBncnViX3hlbl9zdGFydF9wYWdlX2FkZHItPm1hZ2ljLAorCSAgICAg ICBzaXplb2YgKHhlbl9zdGF0ZS5uZXh0X3N0YXJ0Lm1hZ2ljKSk7CisgIHhlbl9zdGF0ZS5uZXh0 X3N0YXJ0LnN0b3JlX21mbiA9IGdydWJfeGVuX3N0YXJ0X3BhZ2VfYWRkci0+c3RvcmVfbWZuOwor ICB4ZW5fc3RhdGUubmV4dF9zdGFydC5zdG9yZV9ldnRjaG4gPSBncnViX3hlbl9zdGFydF9wYWdl X2FkZHItPnN0b3JlX2V2dGNobjsKKyAgeGVuX3N0YXRlLm5leHRfc3RhcnQuY29uc29sZS5kb21V ID0gZ3J1Yl94ZW5fc3RhcnRfcGFnZV9hZGRyLT5jb25zb2xlLmRvbVU7CisgIHhlbl9zdGF0ZS5u ZXh0X3N0YXJ0LnNoYXJlZF9pbmZvID0gZ3J1Yl94ZW5fc3RhcnRfcGFnZV9hZGRyLT5zaGFyZWRf aW5mbzsKIAotICBlcnIgPSBzZXRfbWZucyAobmV3X21mbl9saXN0LCBtYXhfYWRkciA+PiBQQUdF X1NISUZUKTsKKyAgZXJyID0gc2V0X21mbnMgKG5ld19tZm5fbGlzdCwgeGVuX3N0YXRlLm1heF9h ZGRyID4+IFBBR0VfU0hJRlQpOwogICBpZiAoZXJyKQogICAgIHJldHVybiBlcnI7Ci0gIG1heF9h ZGRyICs9IDIgKiBQQUdFX1NJWkU7CisgIHhlbl9zdGF0ZS5tYXhfYWRkciArPSAyICogUEFHRV9T SVpFOwogCi0gIG5leHRfc3RhcnQucHRfYmFzZSA9IG1heF9hZGRyICsgeGVuX2luZi52aXJ0X2Jh c2U7Ci0gIHN0YXRlLnBhZ2luZ19zdGFydCA9IG1heF9hZGRyID4+IFBBR0VfU0hJRlQ7CisgIHhl bl9zdGF0ZS5uZXh0X3N0YXJ0LnB0X2Jhc2UgPQorICAgIHhlbl9zdGF0ZS5tYXhfYWRkciArIHhl bl9zdGF0ZS54ZW5faW5mLnZpcnRfYmFzZTsKKyAgc3RhdGUucGFnaW5nX3N0YXJ0ID0geGVuX3N0 YXRlLm1heF9hZGRyID4+IFBBR0VfU0hJRlQ7CiAKLSAgbnJfaW5mb19wYWdlcyA9IG1heF9hZGRy ID4+IFBBR0VfU0hJRlQ7CisgIG5yX2luZm9fcGFnZXMgPSB4ZW5fc3RhdGUubWF4X2FkZHIgPj4g UEFHRV9TSElGVDsKICAgbnJfcGFnZXMgPSBucl9pbmZvX3BhZ2VzOwogCiAgIHdoaWxlICgxKQog ICAgIHsKICAgICAgIG5yX3BhZ2VzID0gQUxJR05fVVAgKG5yX3BhZ2VzLCAoQUxJR05fU0laRSA+ PiBQQUdFX1NISUZUKSk7Ci0gICAgICBucl9wdF9wYWdlcyA9IGdldF9wZ3RhYmxlX3NpemUgKG5y X3BhZ2VzLCB4ZW5faW5mLnZpcnRfYmFzZSk7CisgICAgICBucl9wdF9wYWdlcyA9IGdldF9wZ3Rh YmxlX3NpemUgKG5yX3BhZ2VzLCB4ZW5fc3RhdGUueGVuX2luZi52aXJ0X2Jhc2UpOwogICAgICAg bnJfbmVlZF9wYWdlcyA9CiAJbnJfaW5mb19wYWdlcyArIG5yX3B0X3BhZ2VzICsKIAkoKEFERElU SU9OQUxfU0laRSArIFNUQUNLX1NJWkUpID4+IFBBR0VfU0hJRlQpOwpAQCAtMjc4LDI3ICsyODcs MjggQEAgZ3J1Yl94ZW5fYm9vdCAodm9pZCkKICAgICB9CiAKICAgZ3J1Yl9kcHJpbnRmICgieGVu IiwgImJvb3RzdHJhcCBkb21haW4gJWxseCslbGx4XG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25n KSB4ZW5faW5mLnZpcnRfYmFzZSwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZykgeGVuX3N0YXRlLnhl bl9pbmYudmlydF9iYXNlLAogCQkodW5zaWduZWQgbG9uZyBsb25nKSBwYWdlMm9mZnNldCAobnJf cGFnZXMpKTsKIAotICBlcnIgPSBncnViX3JlbG9jYXRvcl9hbGxvY19jaHVua19hZGRyIChyZWxv Y2F0b3IsICZjaCwKLQkJCQkJIG1heF9hZGRyLCBwYWdlMm9mZnNldCAobnJfcHRfcGFnZXMpKTsK KyAgZXJyID0gZ3J1Yl9yZWxvY2F0b3JfYWxsb2NfY2h1bmtfYWRkciAoeGVuX3N0YXRlLnJlbG9j YXRvciwgJmNoLAorCQkJCQkgeGVuX3N0YXRlLm1heF9hZGRyLAorCQkJCQkgcGFnZTJvZmZzZXQg KG5yX3B0X3BhZ2VzKSk7CiAgIGlmIChlcnIpCiAgICAgcmV0dXJuIGVycjsKIAogICBnZW5lcmF0 ZV9wYWdlX3RhYmxlIChnZXRfdmlydHVhbF9jdXJyZW50X2FkZHJlc3MgKGNoKSwKLQkJICAgICAg IG1heF9hZGRyID4+IFBBR0VfU0hJRlQsIG5yX3BhZ2VzLAotCQkgICAgICAgeGVuX2luZi52aXJ0 X2Jhc2UsIG5ld19tZm5fbGlzdCk7CisJCSAgICAgICB4ZW5fc3RhdGUubWF4X2FkZHIgPj4gUEFH RV9TSElGVCwgbnJfcGFnZXMsCisJCSAgICAgICB4ZW5fc3RhdGUueGVuX2luZi52aXJ0X2Jhc2Us IG5ld19tZm5fbGlzdCk7CiAKLSAgbWF4X2FkZHIgKz0gcGFnZTJvZmZzZXQgKG5yX3B0X3BhZ2Vz KTsKLSAgc3RhdGUuc3RhY2sgPSBtYXhfYWRkciArIFNUQUNLX1NJWkUgKyB4ZW5faW5mLnZpcnRf YmFzZTsKLSAgc3RhdGUuZW50cnlfcG9pbnQgPSB4ZW5faW5mLmVudHJ5X3BvaW50OworICB4ZW5f c3RhdGUubWF4X2FkZHIgKz0gcGFnZTJvZmZzZXQgKG5yX3B0X3BhZ2VzKTsKKyAgc3RhdGUuc3Rh Y2sgPSB4ZW5fc3RhdGUubWF4X2FkZHIgKyBTVEFDS19TSVpFICsgeGVuX3N0YXRlLnhlbl9pbmYu dmlydF9iYXNlOworICBzdGF0ZS5lbnRyeV9wb2ludCA9IHhlbl9zdGF0ZS54ZW5faW5mLmVudHJ5 X3BvaW50OwogCi0gIG5leHRfc3RhcnQubnJfcDJtX2ZyYW1lcyArPSBucl9wdF9wYWdlczsKLSAg bmV4dF9zdGFydC5ucl9wdF9mcmFtZXMgPSBucl9wdF9wYWdlczsKKyAgeGVuX3N0YXRlLm5leHRf c3RhcnQubnJfcDJtX2ZyYW1lcyArPSBucl9wdF9wYWdlczsKKyAgeGVuX3N0YXRlLm5leHRfc3Rh cnQubnJfcHRfZnJhbWVzID0gbnJfcHRfcGFnZXM7CiAgIHN0YXRlLnBhZ2luZ19zaXplID0gbnJf cHRfcGFnZXM7CiAKLSAgKm5zdCA9IG5leHRfc3RhcnQ7CisgICpuc3QgPSB4ZW5fc3RhdGUubmV4 dF9zdGFydDsKIAogICBncnViX21lbXNldCAoJmdudHRhYl9zZXR2ZXIsIDAsIHNpemVvZiAoZ250 dGFiX3NldHZlcikpOwogCkBAIC0zMDgsMjQgKzMxOCwyMCBAQCBncnViX3hlbl9ib290ICh2b2lk KQogICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSAoZ3J1Yl94ZW5fc2hhcmVkX2luZm8tPmV2 dGNobl9wZW5kaW5nKTsgaSsrKQogICAgIGdydWJfeGVuX3NoYXJlZF9pbmZvLT5ldnRjaG5fcGVu ZGluZ1tpXSA9IDA7CiAKLSAgcmV0dXJuIGdydWJfcmVsb2NhdG9yX3hlbl9ib290IChyZWxvY2F0 b3IsIHN0YXRlLCBucl9wYWdlcywKLQkJCQkgIHhlbl9pbmYudmlydF9iYXNlIDwKKyAgcmV0dXJu IGdydWJfcmVsb2NhdG9yX3hlbl9ib290ICh4ZW5fc3RhdGUucmVsb2NhdG9yLCBzdGF0ZSwgbnJf cGFnZXMsCisJCQkJICB4ZW5fc3RhdGUueGVuX2luZi52aXJ0X2Jhc2UgPAogCQkJCSAgUEFHRV9T SVpFID8gcGFnZTJvZmZzZXQgKG5yX3BhZ2VzKSA6IDAsCiAJCQkJICBucl9wYWdlcyAtIDEsCiAJ CQkJICBwYWdlMm9mZnNldCAobnJfcGFnZXMgLSAxKSArCi0JCQkJICB4ZW5faW5mLnZpcnRfYmFz ZSk7CisJCQkJICB4ZW5fc3RhdGUueGVuX2luZi52aXJ0X2Jhc2UpOwogfQogCiBzdGF0aWMgdm9p ZAogZ3J1Yl94ZW5fcmVzZXQgKHZvaWQpCiB7Ci0gIGdydWJfbWVtc2V0ICgmbmV4dF9zdGFydCwg MCwgc2l6ZW9mIChuZXh0X3N0YXJ0KSk7Ci0gIHhlbl9tb2R1bGVfaW5mb19wYWdlID0gTlVMTDsK LSAgbl9tb2R1bGVzID0gMDsKKyAgZ3J1Yl9yZWxvY2F0b3JfdW5sb2FkICh4ZW5fc3RhdGUucmVs b2NhdG9yKTsKIAotICBncnViX3JlbG9jYXRvcl91bmxvYWQgKHJlbG9jYXRvcik7Ci0gIHJlbG9j YXRvciA9IE5VTEw7Ci0gIGxvYWRlZCA9IDA7CisgIGdydWJfbWVtc2V0ICgmeGVuX3N0YXRlLCAw LCBzaXplb2YgKHhlbl9zdGF0ZSkpOwogfQogCiBzdGF0aWMgZ3J1Yl9lcnJfdApAQCAtNDA5LDE3 ICs0MTUsMjIgQEAgZ3J1Yl9jbWRfeGVuIChncnViX2NvbW1hbmRfdCBjbWQgX19hdHRyaWJ1dGVf XyAoKHVudXNlZCkpLAogICBncnViX2ZpbGVfdCBmaWxlOwogICBncnViX2VsZl90IGVsZjsKICAg Z3J1Yl9lcnJfdCBlcnI7CisgIHZvaWQgKmtlcm5fY2h1bmtfc3JjOworICBncnViX3JlbG9jYXRv cl9jaHVua190IGNoOworICBncnViX2FkZHJfdCBrZXJuX3N0YXJ0OworICBncnViX2FkZHJfdCBr ZXJuX2VuZDsKIAogICBpZiAoYXJnYyA9PSAwKQogICAgIHJldHVybiBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfQVJHVU1FTlQsIE5fKCJmaWxlbmFtZSBleHBlY3RlZCIpKTsKIAorICAvKiBDYWxs IGdydWJfbG9hZGVyX3Vuc2V0IGVhcmx5IHRvIGF2b2lkIGl0IGJlaW5nIGNhbGxlZCBieSBncnVi X2xvYWRlcl9zZXQgKi8KICAgZ3J1Yl9sb2FkZXJfdW5zZXQgKCk7CiAKICAgZ3J1Yl94ZW5fcmVz ZXQgKCk7CiAKICAgZ3J1Yl9jcmVhdGVfbG9hZGVyX2NtZGxpbmUgKGFyZ2MgLSAxLCBhcmd2ICsg MSwKLQkJCSAgICAgIChjaGFyICopIG5leHRfc3RhcnQuY21kX2xpbmUsCi0JCQkgICAgICBzaXpl b2YgKG5leHRfc3RhcnQuY21kX2xpbmUpIC0gMSk7CisJCQkgICAgICAoY2hhciAqKSB4ZW5fc3Rh dGUubmV4dF9zdGFydC5jbWRfbGluZSwKKwkJCSAgICAgIHNpemVvZiAoeGVuX3N0YXRlLm5leHRf c3RhcnQuY21kX2xpbmUpIC0gMSk7CiAKICAgZmlsZSA9IGdydWJfZmlsZV9vcGVuIChhcmd2WzBd KTsKICAgaWYgKCFmaWxlKQpAQCAtNDI5LDg1ICs0NDAsODIgQEAgZ3J1Yl9jbWRfeGVuIChncnVi X2NvbW1hbmRfdCBjbWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAogICBpZiAoIWVsZikKICAg ICBnb3RvIGZhaWw7CiAKLSAgZXJyID0gZ3J1Yl94ZW5fZ2V0X2luZm8gKGVsZiwgJnhlbl9pbmYp OworICBlcnIgPSBncnViX3hlbl9nZXRfaW5mbyAoZWxmLCAmeGVuX3N0YXRlLnhlbl9pbmYpOwog ICBpZiAoZXJyKQogICAgIGdvdG8gZmFpbDsKICNpZmRlZiBfX3g4Nl82NF9fCi0gIGlmICh4ZW5f aW5mLmFyY2ggIT0gR1JVQl9YRU5fRklMRV9YODZfNjQpCisgIGlmICh4ZW5fc3RhdGUueGVuX2lu Zi5hcmNoICE9IEdSVUJfWEVOX0ZJTEVfWDg2XzY0KQogI2Vsc2UKLSAgaWYgKHhlbl9pbmYuYXJj aCAhPSBHUlVCX1hFTl9GSUxFX0kzODZfUEFFCi0gICAgICAmJiB4ZW5faW5mLmFyY2ggIT0gR1JV Ql9YRU5fRklMRV9JMzg2X1BBRV9CSU1PREUpCisgIGlmICh4ZW5fc3RhdGUueGVuX2luZi5hcmNo ICE9IEdSVUJfWEVOX0ZJTEVfSTM4Nl9QQUUKKyAgICAgICYmIHhlbl9zdGF0ZS54ZW5faW5mLmFy Y2ggIT0gR1JVQl9YRU5fRklMRV9JMzg2X1BBRV9CSU1PREUpCiAjZW5kaWYKICAgICB7CiAgICAg ICBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfT1MsICJpbmNvbXBhdGlibGUgYXJjaGl0ZWN0dXJl OiAlZCIsCi0JCSAgeGVuX2luZi5hcmNoKTsKKwkJICB4ZW5fc3RhdGUueGVuX2luZi5hcmNoKTsK ICAgICAgIGdvdG8gZmFpbDsKICAgICB9CiAKLSAgaWYgKHhlbl9pbmYudmlydF9iYXNlICYgKFBB R0VfU0laRSAtIDEpKQorICBpZiAoeGVuX3N0YXRlLnhlbl9pbmYudmlydF9iYXNlICYgKFBBR0Vf U0laRSAtIDEpKQogICAgIHsKICAgICAgIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9PUywgInVu YWxpZ25lZCB2aXJ0X2Jhc2UiKTsKICAgICAgIGdvdG8gZmFpbDsKICAgICB9CiAgIGdydWJfZHBy aW50ZiAoInhlbiIsICJ2aXJ0X2Jhc2UgPSAlbGx4LCBlbnRyeSA9ICVsbHhcbiIsCi0JCSh1bnNp Z25lZCBsb25nIGxvbmcpIHhlbl9pbmYudmlydF9iYXNlLAotCQkodW5zaWduZWQgbG9uZyBsb25n KSB4ZW5faW5mLmVudHJ5X3BvaW50KTsKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZykgeGVuX3N0YXRl Lnhlbl9pbmYudmlydF9iYXNlLAorCQkodW5zaWduZWQgbG9uZyBsb25nKSB4ZW5fc3RhdGUueGVu X2luZi5lbnRyeV9wb2ludCk7CiAKLSAgcmVsb2NhdG9yID0gZ3J1Yl9yZWxvY2F0b3JfbmV3ICgp OwotICBpZiAoIXJlbG9jYXRvcikKKyAgeGVuX3N0YXRlLnJlbG9jYXRvciA9IGdydWJfcmVsb2Nh dG9yX25ldyAoKTsKKyAgaWYgKCF4ZW5fc3RhdGUucmVsb2NhdG9yKQogICAgIGdvdG8gZmFpbDsK IAotICBncnViX3JlbG9jYXRvcl9jaHVua190IGNoOwotICBncnViX2FkZHJfdCBrZXJuX3N0YXJ0 ID0geGVuX2luZi5rZXJuX3N0YXJ0IC0geGVuX2luZi5wYWRkcl9vZmZzZXQ7Ci0gIGdydWJfYWRk cl90IGtlcm5fZW5kID0geGVuX2luZi5rZXJuX2VuZCAtIHhlbl9pbmYucGFkZHJfb2Zmc2V0Owor ICBrZXJuX3N0YXJ0ID0geGVuX3N0YXRlLnhlbl9pbmYua2Vybl9zdGFydCAtIHhlbl9zdGF0ZS54 ZW5faW5mLnBhZGRyX29mZnNldDsKKyAga2Vybl9lbmQgPSB4ZW5fc3RhdGUueGVuX2luZi5rZXJu X2VuZCAtIHhlbl9zdGF0ZS54ZW5faW5mLnBhZGRyX29mZnNldDsKIAotICBpZiAoeGVuX2luZi5o YXNfaHlwZXJjYWxsX3BhZ2UpCisgIGlmICh4ZW5fc3RhdGUueGVuX2luZi5oYXNfaHlwZXJjYWxs X3BhZ2UpCiAgICAgewogICAgICAgZ3J1Yl9kcHJpbnRmICgieGVuIiwgImh5cGVyY2FsbCBwYWdl IGF0IDB4JWxseFxuIiwKLQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHhlbl9pbmYuaHlwZXJj YWxsX3BhZ2UpOwotICAgICAgaWYgKHhlbl9pbmYuaHlwZXJjYWxsX3BhZ2UgLSB4ZW5faW5mLnZp cnRfYmFzZSA8IGtlcm5fc3RhcnQpCi0Ja2Vybl9zdGFydCA9IHhlbl9pbmYuaHlwZXJjYWxsX3Bh Z2UgLSB4ZW5faW5mLnZpcnRfYmFzZTsKLQotICAgICAgaWYgKHhlbl9pbmYuaHlwZXJjYWxsX3Bh Z2UgLSB4ZW5faW5mLnZpcnRfYmFzZSArIFBBR0VfU0laRSA+IGtlcm5fZW5kKQotCWtlcm5fZW5k ID0geGVuX2luZi5oeXBlcmNhbGxfcGFnZSAtIHhlbl9pbmYudmlydF9iYXNlICsgUEFHRV9TSVpF OworCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgeGVuX3N0YXRlLnhlbl9pbmYuaHlwZXJjYWxs X3BhZ2UpOworICAgICAga2Vybl9zdGFydCA9IGdydWJfbWluIChrZXJuX3N0YXJ0LCB4ZW5fc3Rh dGUueGVuX2luZi5oeXBlcmNhbGxfcGFnZSAtCisJCQkJCSB4ZW5fc3RhdGUueGVuX2luZi52aXJ0 X2Jhc2UpOworICAgICAga2Vybl9lbmQgPSBncnViX21heCAoa2Vybl9lbmQsIHhlbl9zdGF0ZS54 ZW5faW5mLmh5cGVyY2FsbF9wYWdlIC0KKwkJCQkgICAgIHhlbl9zdGF0ZS54ZW5faW5mLnZpcnRf YmFzZSArIFBBR0VfU0laRSk7CiAgICAgfQogCi0gIG1heF9hZGRyID0gQUxJR05fVVAgKGtlcm5f ZW5kLCBQQUdFX1NJWkUpOworICB4ZW5fc3RhdGUubWF4X2FkZHIgPSBBTElHTl9VUCAoa2Vybl9l bmQsIFBBR0VfU0laRSk7CiAKLSAgZXJyID0gZ3J1Yl9yZWxvY2F0b3JfYWxsb2NfY2h1bmtfYWRk ciAocmVsb2NhdG9yLCAmY2gsIGtlcm5fc3RhcnQsCisgIGVyciA9IGdydWJfcmVsb2NhdG9yX2Fs bG9jX2NodW5rX2FkZHIgKHhlbl9zdGF0ZS5yZWxvY2F0b3IsICZjaCwga2Vybl9zdGFydCwKIAkJ CQkJIGtlcm5fZW5kIC0ga2Vybl9zdGFydCk7CiAgIGlmIChlcnIpCiAgICAgZ290byBmYWlsOwog ICBrZXJuX2NodW5rX3NyYyA9IGdldF92aXJ0dWFsX2N1cnJlbnRfYWRkcmVzcyAoY2gpOwogCiAg IGdydWJfZHByaW50ZiAoInhlbiIsICJwYWRkcl9vZmZzZXQgPSAweCVsbHhcbiIsCi0JCSh1bnNp Z25lZCBsb25nIGxvbmcpIHhlbl9pbmYucGFkZHJfb2Zmc2V0KTsKKwkJKHVuc2lnbmVkIGxvbmcg bG9uZykgeGVuX3N0YXRlLnhlbl9pbmYucGFkZHJfb2Zmc2V0KTsKICAgZ3J1Yl9kcHJpbnRmICgi eGVuIiwgImtlcm5fc3RhcnQgPSAweCVsbHgsIGtlcm5fZW5kID0gMHglbGx4XG4iLAotCQkodW5z aWduZWQgbG9uZyBsb25nKSB4ZW5faW5mLmtlcm5fc3RhcnQsCi0JCSh1bnNpZ25lZCBsb25nIGxv bmcpIHhlbl9pbmYua2Vybl9lbmQpOworCQkodW5zaWduZWQgbG9uZyBsb25nKSB4ZW5fc3RhdGUu eGVuX2luZi5rZXJuX3N0YXJ0LAorCQkodW5zaWduZWQgbG9uZyBsb25nKSB4ZW5fc3RhdGUueGVu X2luZi5rZXJuX2VuZCk7CiAKICAgZXJyID0gZ3J1Yl9lbGZYWF9sb2FkIChlbGYsIGFyZ3ZbMF0s CiAJCQkgKGdydWJfdWludDhfdCAqKSBrZXJuX2NodW5rX3NyYyAtIGtlcm5fc3RhcnQKLQkJCSAt IHhlbl9pbmYucGFkZHJfb2Zmc2V0LCAwLCAwLCAwKTsKKwkJCSAtIHhlbl9zdGF0ZS54ZW5faW5m LnBhZGRyX29mZnNldCwgMCwgMCwgMCk7CiAKLSAgaWYgKHhlbl9pbmYuaGFzX2h5cGVyY2FsbF9w YWdlKQorICBpZiAoeGVuX3N0YXRlLnhlbl9pbmYuaGFzX2h5cGVyY2FsbF9wYWdlKQogICAgIHsK ICAgICAgIHVuc2lnbmVkIGk7CiAgICAgICBmb3IgKGkgPSAwOyBpIDwgUEFHRV9TSVpFIC8gSFlQ RVJDQUxMX0lOVEVSRkFDRV9TSVpFOyBpKyspCiAJc2V0X2h5cGVyY2FsbF9pbnRlcmZhY2UgKChn cnViX3VpbnQ4X3QgKikga2Vybl9jaHVua19zcmMgKwogCQkJCSBpICogSFlQRVJDQUxMX0lOVEVS RkFDRV9TSVpFICsKLQkJCQkgeGVuX2luZi5oeXBlcmNhbGxfcGFnZSAtIHhlbl9pbmYudmlydF9i YXNlIC0KLQkJCQkga2Vybl9zdGFydCwgaSk7CisJCQkJIHhlbl9zdGF0ZS54ZW5faW5mLmh5cGVy Y2FsbF9wYWdlIC0KKwkJCQkgeGVuX3N0YXRlLnhlbl9pbmYudmlydF9iYXNlIC0ga2Vybl9zdGFy dCwgaSk7CiAgICAgfQogCiAgIGlmIChlcnIpCiAgICAgZ290byBmYWlsOwogCiAgIGdydWJfZGxf cmVmIChteV9tb2QpOwotICBsb2FkZWQgPSAxOworICB4ZW5fc3RhdGUubG9hZGVkID0gMTsKIAog ICBncnViX2xvYWRlcl9zZXQgKGdydWJfeGVuX2Jvb3QsIGdydWJfeGVuX3VubG9hZCwgMCk7Ci0g IGxvYWRlZCA9IDE7CiAKICAgZ290byBmYWlsOwogCkBAIC01NDEsMTQgKzU0OSwxNCBAQCBncnVi X2NtZF9pbml0cmQgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSks CiAgICAgICBnb3RvIGZhaWw7CiAgICAgfQogCi0gIGlmICghbG9hZGVkKQorICBpZiAoIXhlbl9z dGF0ZS5sb2FkZWQpCiAgICAgewogICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VN RU5ULAogCQkgIE5fKCJ5b3UgbmVlZCB0byBsb2FkIHRoZSBrZXJuZWwgZmlyc3QiKSk7CiAgICAg ICBnb3RvIGZhaWw7CiAgICAgfQogCi0gIGlmIChuZXh0X3N0YXJ0Lm1vZF9zdGFydCB8fCBuZXh0 X3N0YXJ0Lm1vZF9sZW4pCisgIGlmICh4ZW5fc3RhdGUubmV4dF9zdGFydC5tb2Rfc3RhcnQgfHwg eGVuX3N0YXRlLm5leHRfc3RhcnQubW9kX2xlbikKICAgICB7CiAgICAgICBncnViX2Vycm9yIChH UlVCX0VSUl9CQURfQVJHVU1FTlQsIE5fKCJpbml0cmQgYWxyZWFkeSBsb2FkZWQiKSk7CiAgICAg ICBnb3RvIGZhaWw7CkBAIC01NjEsNyArNTY5LDggQEAgZ3J1Yl9jbWRfaW5pdHJkIChncnViX2Nv bW1hbmRfdCBjbWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAogCiAgIGlmIChzaXplKQogICAg IHsKLSAgICAgIGVyciA9IGdydWJfcmVsb2NhdG9yX2FsbG9jX2NodW5rX2FkZHIgKHJlbG9jYXRv ciwgJmNoLCBtYXhfYWRkciwgc2l6ZSk7CisgICAgICBlcnIgPSBncnViX3JlbG9jYXRvcl9hbGxv Y19jaHVua19hZGRyICh4ZW5fc3RhdGUucmVsb2NhdG9yLCAmY2gsCisJCQkJCSAgICAgeGVuX3N0 YXRlLm1heF9hZGRyLCBzaXplKTsKICAgICAgIGlmIChlcnIpCiAJZ290byBmYWlsOwogCkBAIC01 NzAsMTMgKzU3OSwxNCBAQCBncnViX2NtZF9pbml0cmQgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0 dHJpYnV0ZV9fICgodW51c2VkKSksCiAJZ290byBmYWlsOwogICAgIH0KIAotICBuZXh0X3N0YXJ0 Lm1vZF9zdGFydCA9IG1heF9hZGRyICsgeGVuX2luZi52aXJ0X2Jhc2U7Ci0gIG5leHRfc3RhcnQu bW9kX2xlbiA9IHNpemU7CisgIHhlbl9zdGF0ZS5uZXh0X3N0YXJ0Lm1vZF9zdGFydCA9CisgICAg eGVuX3N0YXRlLm1heF9hZGRyICsgeGVuX3N0YXRlLnhlbl9pbmYudmlydF9iYXNlOworICB4ZW5f c3RhdGUubmV4dF9zdGFydC5tb2RfbGVuID0gc2l6ZTsKIAotICBtYXhfYWRkciA9IEFMSUdOX1VQ IChtYXhfYWRkciArIHNpemUsIFBBR0VfU0laRSk7CisgIHhlbl9zdGF0ZS5tYXhfYWRkciA9IEFM SUdOX1VQICh4ZW5fc3RhdGUubWF4X2FkZHIgKyBzaXplLCBQQUdFX1NJWkUpOwogCiAgIGdydWJf ZHByaW50ZiAoInhlbiIsICJJbml0cmQsIGFkZHI9MHgleCwgc2l6ZT0weCV4XG4iLAotCQkodW5z aWduZWQpIG5leHRfc3RhcnQubW9kX3N0YXJ0LCAodW5zaWduZWQpIHNpemUpOworCQkodW5zaWdu ZWQpIHhlbl9zdGF0ZS5uZXh0X3N0YXJ0Lm1vZF9zdGFydCwgKHVuc2lnbmVkKSBzaXplKTsKIAog ZmFpbDoKICAgZ3J1Yl9pbml0cmRfY2xvc2UgKCZpbml0cmRfY3R4KTsKQEAgLTYwOCw0NSArNjE4 LDQ4IEBAIGdydWJfY21kX21vZHVsZSAoZ3J1Yl9jb21tYW5kX3QgY21kIF9fYXR0cmlidXRlX18g KCh1bnVzZWQpKSwKICAgaWYgKGFyZ2MgPT0gMCkKICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfQkFEX0FSR1VNRU5ULCBOXygiZmlsZW5hbWUgZXhwZWN0ZWQiKSk7CiAKLSAgaWYgKCFs b2FkZWQpCisgIGlmICgheGVuX3N0YXRlLmxvYWRlZCkKICAgICB7CiAgICAgICByZXR1cm4gZ3J1 Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULAogCQkJIE5fKCJ5b3UgbmVlZCB0byBsb2Fk IHRoZSBrZXJuZWwgZmlyc3QiKSk7CiAgICAgfQogCi0gIGlmICgobmV4dF9zdGFydC5tb2Rfc3Rh cnQgfHwgbmV4dF9zdGFydC5tb2RfbGVuKSAmJiAheGVuX21vZHVsZV9pbmZvX3BhZ2UpCisgIGlm ICgoeGVuX3N0YXRlLm5leHRfc3RhcnQubW9kX3N0YXJ0IHx8IHhlbl9zdGF0ZS5uZXh0X3N0YXJ0 Lm1vZF9sZW4pICYmCisgICAgICAheGVuX3N0YXRlLm1vZHVsZV9pbmZvX3BhZ2UpCiAgICAgewog ICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgTl8oImluaXRy ZCBhbHJlYWR5IGxvYWRlZCIpKTsKICAgICB9CiAKICAgLyogTGVhdmUgb25lIHNwYWNlIGZvciB0 ZXJtaW5hdG9yLiAgKi8KLSAgaWYgKG5fbW9kdWxlcyA+PSBNQVhfTU9EVUxFUyAtIDEpCisgIGlm ICh4ZW5fc3RhdGUubl9tb2R1bGVzID49IE1BWF9NT0RVTEVTIC0gMSkKICAgICB7CiAgICAgICBy ZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAidG9vIG1hbnkgbW9kdWxl cyIpOwogICAgIH0KIAotICBpZiAoIXhlbl9tb2R1bGVfaW5mb19wYWdlKQorICBpZiAoIXhlbl9z dGF0ZS5tb2R1bGVfaW5mb19wYWdlKQogICAgIHsKLSAgICAgIG5fbW9kdWxlcyA9IDA7Ci0gICAg ICBtYXhfYWRkciA9IEFMSUdOX1VQIChtYXhfYWRkciwgUEFHRV9TSVpFKTsKLSAgICAgIG1vZHVs ZXNfdGFyZ2V0X3N0YXJ0ID0gbWF4X2FkZHI7Ci0gICAgICBuZXh0X3N0YXJ0Lm1vZF9zdGFydCA9 IG1heF9hZGRyICsgeGVuX2luZi52aXJ0X2Jhc2U7Ci0gICAgICBuZXh0X3N0YXJ0LmZsYWdzIHw9 IFNJRl9NVUxUSUJPT1RfTU9EOworICAgICAgeGVuX3N0YXRlLm5fbW9kdWxlcyA9IDA7CisgICAg ICB4ZW5fc3RhdGUubWF4X2FkZHIgPSBBTElHTl9VUCAoeGVuX3N0YXRlLm1heF9hZGRyLCBQQUdF X1NJWkUpOworICAgICAgeGVuX3N0YXRlLm1vZHVsZXNfdGFyZ2V0X3N0YXJ0ID0geGVuX3N0YXRl Lm1heF9hZGRyOworICAgICAgeGVuX3N0YXRlLm5leHRfc3RhcnQubW9kX3N0YXJ0ID0KKwl4ZW5f c3RhdGUubWF4X2FkZHIgKyB4ZW5fc3RhdGUueGVuX2luZi52aXJ0X2Jhc2U7CisgICAgICB4ZW5f c3RhdGUubmV4dF9zdGFydC5mbGFncyB8PSBTSUZfTVVMVElCT09UX01PRDsKIAotICAgICAgZXJy ID0gZ3J1Yl9yZWxvY2F0b3JfYWxsb2NfY2h1bmtfYWRkciAocmVsb2NhdG9yLCAmY2gsCi0JCQkJ CSAgICAgbWF4X2FkZHIsIE1BWF9NT0RVTEVTCisgICAgICBlcnIgPSBncnViX3JlbG9jYXRvcl9h bGxvY19jaHVua19hZGRyICh4ZW5fc3RhdGUucmVsb2NhdG9yLCAmY2gsCisJCQkJCSAgICAgeGVu X3N0YXRlLm1heF9hZGRyLCBNQVhfTU9EVUxFUwogCQkJCQkgICAgICoKLQkJCQkJICAgICBzaXpl b2YgKHhlbl9tb2R1bGVfaW5mb19wYWdlCisJCQkJCSAgICAgc2l6ZW9mICh4ZW5fc3RhdGUubW9k dWxlX2luZm9fcGFnZQogCQkJCQkJICAgICBbMF0pKTsKICAgICAgIGlmIChlcnIpCiAJcmV0dXJu IGVycjsKLSAgICAgIHhlbl9tb2R1bGVfaW5mb19wYWdlID0gZ2V0X3ZpcnR1YWxfY3VycmVudF9h ZGRyZXNzIChjaCk7Ci0gICAgICBncnViX21lbXNldCAoeGVuX21vZHVsZV9pbmZvX3BhZ2UsIDAs IE1BWF9NT0RVTEVTCi0JCSAgICogc2l6ZW9mICh4ZW5fbW9kdWxlX2luZm9fcGFnZVswXSkpOwot ICAgICAgbWF4X2FkZHIgKz0gTUFYX01PRFVMRVMgKiBzaXplb2YgKHhlbl9tb2R1bGVfaW5mb19w YWdlWzBdKTsKKyAgICAgIHhlbl9zdGF0ZS5tb2R1bGVfaW5mb19wYWdlID0gZ2V0X3ZpcnR1YWxf Y3VycmVudF9hZGRyZXNzIChjaCk7CisgICAgICBncnViX21lbXNldCAoeGVuX3N0YXRlLm1vZHVs ZV9pbmZvX3BhZ2UsIDAsIE1BWF9NT0RVTEVTCisJCSAgICogc2l6ZW9mICh4ZW5fc3RhdGUubW9k dWxlX2luZm9fcGFnZVswXSkpOworICAgICAgeGVuX3N0YXRlLm1heF9hZGRyICs9CisJTUFYX01P RFVMRVMgKiBzaXplb2YgKHhlbl9zdGF0ZS5tb2R1bGVfaW5mb19wYWdlWzBdKTsKICAgICB9CiAK LSAgbWF4X2FkZHIgPSBBTElHTl9VUCAobWF4X2FkZHIsIFBBR0VfU0laRSk7CisgIHhlbl9zdGF0 ZS5tYXhfYWRkciA9IEFMSUdOX1VQICh4ZW5fc3RhdGUubWF4X2FkZHIsIFBBR0VfU0laRSk7CiAK ICAgaWYgKG5vdW56aXApCiAgICAgZ3J1Yl9maWxlX2ZpbHRlcl9kaXNhYmxlX2NvbXByZXNzaW9u ICgpOwpAQCAtNjU3LDIwICs2NzAsMjIgQEAgZ3J1Yl9jbWRfbW9kdWxlIChncnViX2NvbW1hbmRf dCBjbWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLAogCiAgIGNtZGxpbmVfbGVuID0gZ3J1Yl9s b2FkZXJfY21kbGluZV9zaXplIChhcmdjIC0gMSwgYXJndiArIDEpOwogCi0gIGVyciA9IGdydWJf cmVsb2NhdG9yX2FsbG9jX2NodW5rX2FkZHIgKHJlbG9jYXRvciwgJmNoLAotCQkJCQkgbWF4X2Fk ZHIsIGNtZGxpbmVfbGVuKTsKKyAgZXJyID0gZ3J1Yl9yZWxvY2F0b3JfYWxsb2NfY2h1bmtfYWRk ciAoeGVuX3N0YXRlLnJlbG9jYXRvciwgJmNoLAorCQkJCQkgeGVuX3N0YXRlLm1heF9hZGRyLCBj bWRsaW5lX2xlbik7CiAgIGlmIChlcnIpCiAgICAgZ290byBmYWlsOwogCiAgIGdydWJfY3JlYXRl X2xvYWRlcl9jbWRsaW5lIChhcmdjIC0gMSwgYXJndiArIDEsCiAJCQkgICAgICBnZXRfdmlydHVh bF9jdXJyZW50X2FkZHJlc3MgKGNoKSwgY21kbGluZV9sZW4pOwogCi0gIHhlbl9tb2R1bGVfaW5m b19wYWdlW25fbW9kdWxlc10uY21kbGluZSA9IG1heF9hZGRyIC0gbW9kdWxlc190YXJnZXRfc3Rh cnQ7Ci0gIG1heF9hZGRyID0gQUxJR05fVVAgKG1heF9hZGRyICsgY21kbGluZV9sZW4sIFBBR0Vf U0laRSk7CisgIHhlbl9zdGF0ZS5tb2R1bGVfaW5mb19wYWdlW3hlbl9zdGF0ZS5uX21vZHVsZXNd LmNtZGxpbmUgPQorICAgIHhlbl9zdGF0ZS5tYXhfYWRkciAtIHhlbl9zdGF0ZS5tb2R1bGVzX3Rh cmdldF9zdGFydDsKKyAgeGVuX3N0YXRlLm1heF9hZGRyID0gQUxJR05fVVAgKHhlbl9zdGF0ZS5t YXhfYWRkciArIGNtZGxpbmVfbGVuLCBQQUdFX1NJWkUpOwogCiAgIGlmIChzaXplKQogICAgIHsK LSAgICAgIGVyciA9IGdydWJfcmVsb2NhdG9yX2FsbG9jX2NodW5rX2FkZHIgKHJlbG9jYXRvciwg JmNoLCBtYXhfYWRkciwgc2l6ZSk7CisgICAgICBlcnIgPSBncnViX3JlbG9jYXRvcl9hbGxvY19j aHVua19hZGRyICh4ZW5fc3RhdGUucmVsb2NhdG9yLCAmY2gsCisJCQkJCSAgICAgeGVuX3N0YXRl Lm1heF9hZGRyLCBzaXplKTsKICAgICAgIGlmIChlcnIpCiAJZ290byBmYWlsOwogICAgICAgaWYg KGdydWJfZmlsZV9yZWFkIChmaWxlLCBnZXRfdmlydHVhbF9jdXJyZW50X2FkZHJlc3MgKGNoKSwg c2l6ZSkKQEAgLTY4MiwxNSArNjk3LDE3IEBAIGdydWJfY21kX21vZHVsZSAoZ3J1Yl9jb21tYW5k X3QgY21kIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwKIAkgIGdvdG8gZmFpbDsKIAl9CiAgICAg fQotICBuZXh0X3N0YXJ0Lm1vZF9sZW4gPSBtYXhfYWRkciArIHNpemUgLSBtb2R1bGVzX3Rhcmdl dF9zdGFydDsKLSAgeGVuX21vZHVsZV9pbmZvX3BhZ2Vbbl9tb2R1bGVzXS5tb2Rfc3RhcnQgPSBt YXhfYWRkciAtIG1vZHVsZXNfdGFyZ2V0X3N0YXJ0OwotICB4ZW5fbW9kdWxlX2luZm9fcGFnZVtu X21vZHVsZXNdLm1vZF9lbmQgPQotICAgIG1heF9hZGRyICsgc2l6ZSAtIG1vZHVsZXNfdGFyZ2V0 X3N0YXJ0OworICB4ZW5fc3RhdGUubmV4dF9zdGFydC5tb2RfbGVuID0KKyAgICB4ZW5fc3RhdGUu bWF4X2FkZHIgKyBzaXplIC0geGVuX3N0YXRlLm1vZHVsZXNfdGFyZ2V0X3N0YXJ0OworICB4ZW5f c3RhdGUubW9kdWxlX2luZm9fcGFnZVt4ZW5fc3RhdGUubl9tb2R1bGVzXS5tb2Rfc3RhcnQgPQor ICAgIHhlbl9zdGF0ZS5tYXhfYWRkciAtIHhlbl9zdGF0ZS5tb2R1bGVzX3RhcmdldF9zdGFydDsK KyAgeGVuX3N0YXRlLm1vZHVsZV9pbmZvX3BhZ2VbeGVuX3N0YXRlLm5fbW9kdWxlc10ubW9kX2Vu ZCA9CisgICAgeGVuX3N0YXRlLm1heF9hZGRyICsgc2l6ZSAtIHhlbl9zdGF0ZS5tb2R1bGVzX3Rh cmdldF9zdGFydDsKIAotICBuX21vZHVsZXMrKzsKKyAgeGVuX3N0YXRlLm5fbW9kdWxlcysrOwog ICBncnViX2RwcmludGYgKCJ4ZW4iLCAibW9kdWxlLCBhZGRyPTB4JXgsIHNpemU9MHgleFxuIiwK LQkJKHVuc2lnbmVkKSBtYXhfYWRkciwgKHVuc2lnbmVkKSBzaXplKTsKLSAgbWF4X2FkZHIgPSBB TElHTl9VUCAobWF4X2FkZHIgKyBzaXplLCBQQUdFX1NJWkUpOworCQkodW5zaWduZWQpIHhlbl9z dGF0ZS5tYXhfYWRkciwgKHVuc2lnbmVkKSBzaXplKTsKKyAgeGVuX3N0YXRlLm1heF9hZGRyID0g QUxJR05fVVAgKHhlbl9zdGF0ZS5tYXhfYWRkciArIHNpemUsIFBBR0VfU0laRSk7CiAKIAogZmFp bDoKLS0gCjIuNi4yCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRw Oi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK