From mboxrd@z Thu Jan 1 00:00:00 1970 From: Praveen Kumar Subject: [PATCH v2 10/20] rbtree: low level optimizations in rb_insert_color() Date: Sat, 17 Jun 2017 15:02:43 +0530 Message-ID: <20170617093253.3990-11-kpraveen.lkml@gmail.com> References: <20170617093253.3990-1-kpraveen.lkml@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20170617093253.3990-1-kpraveen.lkml@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: sstabellini@kernel.org, wei.liu2@citrix.com, George.Dunlap@eu.citrix.com, andrew.cooper3@citrix.com, dario.faggioli@citrix.com, ian.jackson@eu.citrix.com, tim@xen.org, kpraveen.lkml@gmail.com, jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org LSBVc2UgdGhlIG5ld2x5IGludHJvZHVjZWQgcmJfc2V0X3BhcmVudF9jb2xvcigpIGZ1bmN0aW9u IHRvIGZsaXAgdGhlIGNvbG9yCiAgb2Ygbm9kZXMgd2hvc2UgcGFyZW50IGlzIGFscmVhZHkga25v d24uCi0gT3B0aW1pemUgcmJfcGFyZW50KCkgd2hlbiB0aGUgbm9kZSBpcyBrbm93biB0byBiZSBy ZWQgLSB0aGVyZSBpcyBubyBuZWVkCiAgdG8gbWFzayBvdXQgdGhlIGNvbG9yIGluIHRoYXQgY2Fz ZS4KLSBGbGlwcGluZyBncGFyZW50J3MgY29sb3IgdG8gcmVkIHJlcXVpcmVzIHVzIHRvIGZldGNo IGl0cyByYl9wYXJlbnRfY29sb3IKICBmaWVsZCwgc28gd2UgY2FuIHJldXNlIGl0IGFzIHRoZSBw YXJlbnQgdmFsdWUgZm9yIHRoZSBuZXh0IGxvb3AgaXRlcmF0aW9uLgotIERvIG5vdCB1c2UgX19y Yl9yb3RhdGVfbGVmdCgpIGFuZCBfX3JiX3JvdGF0ZV9yaWdodCgpIHRvIGhhbmRsZSB0cmVlCiAg cm90YXRpb25zOiB3ZSBhbHJlYWR5IGhhdmUgcG9pbnRlcnMgdG8gYWxsIHJlbGV2YW50IG5vZGVz LCBhbmQga25vdyB0aGVpcgogIGNvbG9ycyAoZWl0aGVyIGJlY2F1c2Ugd2Ugd2FudCB0byBhZGp1 c3QgaXQsIG9yIGJlY2F1c2Ugd2UndmUgdGVzdGVkIGl0LAogIG9yIHdlIGNhbiBkZWR1Y2UgaXQg YXMgYmxhY2sgZHVlIHRvIHRoZSBub2RlIHByb3hpbWl0eSB0byBhIGtub3duIHJlZCBub2RlKS4K ICBTbyB3ZSBjYW4gZ2VuZXJhdGUgbW9yZSBlZmZpY2llbnQgY29kZSBieSBtYWtpbmcgdXNlIG9m IHRoZSBub2RlIHBvaW50ZXJzCiAgd2UgYWxyZWFkeSBoYXZlLCBhbmQgc2V0dGluZyBib3RoIHRo ZSBwYXJlbnQgYW5kIGNvbG9yIGF0dHJpYnV0ZXMgZm9yCiAgbm9kZXMgYWxsIGF0IG9uY2UuIEFs c28gaW4gQ2FzZSAyLCBzb21lIG5vZGUgYXR0cmlidXRlcyBkb24ndCBoYXZlIHRvCiAgYmUgc2V0 IGJlY2F1c2Ugd2Uga25vdyBhbm90aGVyIHRyZWUgcm90YXRpb24gKENhc2UgMykgd2lsbCBhbHdh eXMgZm9sbG93CiAgYW5kIG92ZXJyaWRlIHRoZW0uCgpTaWduZWQtb2ZmLWJ5OiBNaWNoZWwgTGVz cGluYXNzZSA8d2Fsa2VuQGdvb2dsZS5jb20+CkNjOiBBbmRyZWEgQXJjYW5nZWxpIDxhYXJjYW5n ZUByZWRoYXQuY29tPgpBY2tlZC1ieTogRGF2aWQgV29vZGhvdXNlIDxEYXZpZC5Xb29kaG91c2VA aW50ZWwuY29tPgpDYzogUmlrIHZhbiBSaWVsIDxyaWVsQHJlZGhhdC5jb20+CkNjOiBQZXRlciBa aWpsc3RyYSA8YS5wLnppamxzdHJhQGNoZWxsby5ubD4KQ2M6IERhbmllbCBTYW50b3MgPGRhbmll bC5zYW50b3NAcG9ib3guY29tPgpDYzogSmVucyBBeGJvZSA8YXhib2VAa2VybmVsLmRrPgpDYzog IkVyaWMgVy4gQmllZGVybWFuIiA8ZWJpZWRlcm1AeG1pc3Npb24uY29tPgpTaWduZWQtb2ZmLWJ5 OiBBbmRyZXcgTW9ydG9uIDxha3BtQGxpbnV4LWZvdW5kYXRpb24ub3JnPgpTaWduZWQtb2ZmLWJ5 OiBMaW51cyBUb3J2YWxkcyA8dG9ydmFsZHNAbGludXgtZm91bmRhdGlvbi5vcmc+CltMaW51eCBj b21taXQgNWJjOTE4OGFhMjA3ZGFmZDQ3ZWFiNTdkZjdjNGZlNWIzZDNmNjM2YV0KClBvcnRlZCB0 byBYZW4uCgpTaWduZWQtb2ZmLWJ5OiBQcmF2ZWVuIEt1bWFyIDxrcHJhdmVlbi5sa21sQGdtYWls LmNvbT4KLS0tCiB4ZW4vY29tbW9uL3JidHJlZS5jIHwgMTU5ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMjcgaW5z ZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9yYnRy ZWUuYyBiL3hlbi9jb21tb24vcmJ0cmVlLmMKaW5kZXggZmZmOGUyMjUyNi4uZDQ0ZmEyMmRmNSAx MDA2NDQKLS0tIGEveGVuL2NvbW1vbi9yYnRyZWUuYworKysgYi94ZW4vY29tbW9uL3JidHJlZS5j CkBAIC0yMiw2ICsyMiwyNSBAQAogI2luY2x1ZGUgPHhlbi90eXBlcy5oPgogI2luY2x1ZGUgPHhl bi9yYnRyZWUuaD4KIAorLyoKKyAqIHJlZC1ibGFjayB0cmVlcyBwcm9wZXJ0aWVzOiAgaHR0cDov L2VuLndpa2lwZWRpYS5vcmcvd2lraS9SYnRyZWUKKyAqCisgKiAgMSkgQSBub2RlIGlzIGVpdGhl ciByZWQgb3IgYmxhY2sKKyAqICAyKSBUaGUgcm9vdCBpcyBibGFjaworICogIDMpIEFsbCBsZWF2 ZXMgKE5VTEwpIGFyZSBibGFjaworICogIDQpIEJvdGggY2hpbGRyZW4gb2YgZXZlcnkgcmVkIG5v ZGUgYXJlIGJsYWNrCisgKiAgNSkgRXZlcnkgc2ltcGxlIHBhdGggZnJvbSByb290IHRvIGxlYXZl cyBjb250YWlucyB0aGUgc2FtZSBudW1iZXIKKyAqICAgICBvZiBibGFjayBub2Rlcy4KKyAqCisg KiAgNCBhbmQgNSBnaXZlIHRoZSBPKGxvZyBuKSBndWFyYW50ZWUsIHNpbmNlIDQgaW1wbGllcyB5 b3UgY2Fubm90IGhhdmUgdHdvCisgKiAgY29uc2VjdXRpdmUgcmVkIG5vZGVzIGluIGEgcGF0aCBh bmQgZXZlcnkgcmVkIG5vZGUgaXMgdGhlcmVmb3JlIGZvbGxvd2VkIGJ5CisgKiAgYSBibGFjay4g U28gaWYgQiBpcyB0aGUgbnVtYmVyIG9mIGJsYWNrIG5vZGVzIG9uIGV2ZXJ5IHNpbXBsZSBwYXRo IChhcyBwZXIKKyAqICA1KSwgdGhlbiB0aGUgbG9uZ2VzdCBwb3NzaWJsZSBwYXRoIGR1ZSB0byA0 IGlzIDJCLgorICoKKyAqICBXZSBzaGFsbCBpbmRpY2F0ZSBjb2xvciB3aXRoIGNhc2UsIHdoZXJl IGJsYWNrIG5vZGVzIGFyZSB1cHBlcmNhc2UgYW5kIHJlZAorICogIG5vZGVzIHdpbGwgYmUgbG93 ZXJjYXNlLgorICovCisKICNkZWZpbmUgICAgUkJfUkVEICAgIDAKICNkZWZpbmUgICAgUkJfQkxB Q0sgIDEKIApAQCAtNDAsNiArNTksMTcgQEAgc3RhdGljIGlubGluZSB2b2lkIHJiX3NldF9jb2xv cihzdHJ1Y3QgcmJfbm9kZSAqcmIsIGludCBjb2xvcikKICAgICByYi0+X19yYl9wYXJlbnRfY29s b3IgPSAocmItPl9fcmJfcGFyZW50X2NvbG9yICYgfjEpIHwgY29sb3I7CiB9CiAKK3N0YXRpYyBp bmxpbmUgdm9pZCByYl9zZXRfcGFyZW50X2NvbG9yKHN0cnVjdCByYl9ub2RlICpyYiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJiX25vZGUgKnAsIGludCBj b2xvcikKK3sKKyAgICByYi0+X19yYl9wYXJlbnRfY29sb3IgPSAodW5zaWduZWQgbG9uZylwIHwg Y29sb3I7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJiX25vZGUgKnJiX3JlZF9wYXJlbnQo c3RydWN0IHJiX25vZGUgKnJlZCkKK3sKKyAgICByZXR1cm4gKHN0cnVjdCByYl9ub2RlICopcmVk LT5fX3JiX3BhcmVudF9jb2xvcjsKK30KKwogc3RhdGljIHZvaWQgX19yYl9yb3RhdGVfbGVmdChz dHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCiB7CiAgICAgc3RydWN0 IHJiX25vZGUgKnJpZ2h0ID0gbm9kZS0+cmJfcmlnaHQ7CkBAIC04Niw5ICsxMTYsMzAgQEAgc3Rh dGljIHZvaWQgX19yYl9yb3RhdGVfcmlnaHQoc3RydWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCBy Yl9yb290ICpyb290KQogICAgIHJiX3NldF9wYXJlbnQobm9kZSwgbGVmdCk7CiB9CiAKKy8qCisg KiBIZWxwZXIgZnVuY3Rpb24gZm9yIHJvdGF0aW9uczoKKyAqIC0gb2xkJ3MgcGFyZW50IGFuZCBj b2xvciBnZXQgYXNzaWduZWQgdG8gbmV3CisgKiAtIG9sZCBnZXRzIGFzc2lnbmVkIG5ldyBhcyBh IHBhcmVudCBhbmQgJ2NvbG9yJyBhcyBhIGNvbG9yLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQK K19fcmJfcm90YXRlX3NldF9wYXJlbnRzKHN0cnVjdCByYl9ub2RlICpvbGQsIHN0cnVjdCByYl9u b2RlICpuZXcsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwg aW50IGNvbG9yKQoreworICAgIHN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSByYl9wYXJlbnQob2xk KTsKKyAgICBuZXctPl9fcmJfcGFyZW50X2NvbG9yID0gb2xkLT5fX3JiX3BhcmVudF9jb2xvcjsK KyAgICByYl9zZXRfcGFyZW50X2NvbG9yKG9sZCwgbmV3LCBjb2xvcik7CisgICAgaWYgKHBhcmVu dCkgeworICAgICAgICBpZiAocGFyZW50LT5yYl9sZWZ0ID09IG9sZCkKKyAgICAgICAgICAgIHBh cmVudC0+cmJfbGVmdCA9IG5ldzsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGFyZW50LT5y Yl9yaWdodCA9IG5ldzsKKyAgICB9IGVsc2UKKyAgICAgICAgcm9vdC0+cmJfbm9kZSA9IG5ldzsK K30KKwogdm9pZCByYl9pbnNlcnRfY29sb3Ioc3RydWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCBy Yl9yb290ICpyb290KQogewotICAgIHN0cnVjdCByYl9ub2RlICpwYXJlbnQsICpncGFyZW50Owor ICAgIHN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSByYl9yZWRfcGFyZW50KG5vZGUpLCAqZ3BhcmVu dCwgKnRtcDsKIAogICAgIHdoaWxlICh0cnVlKQogICAgIHsKQEAgLTk5LDYyICsxNTAsMTA2IEBA IHZvaWQgcmJfaW5zZXJ0X2NvbG9yKHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1Y3QgcmJfcm9v dCAqcm9vdCkKICAgICAgICAgICogT3RoZXJ3aXNlLCB0YWtlIHNvbWUgY29ycmVjdGl2ZSBhY3Rp b24gYXMgd2UgZG9uJ3QKICAgICAgICAgICogd2FudCBhIHJlZCByb290IG9yIHR3byBjb25zZWN1 dGl2ZSByZWQgbm9kZXMuCiAgICAgICAgICAqLwotICAgICAgICBwYXJlbnQgPSByYl9wYXJlbnQo bm9kZSk7CiAgICAgICAgIGlmICghcGFyZW50KQogICAgICAgICB7Ci0gICAgICAgICAgICByYl9z ZXRfYmxhY2sobm9kZSk7CisgICAgICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9yKG5vZGUsIE5V TEwsIFJCX0JMQUNLKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9IGVsc2UgaWYgKHJi X2lzX2JsYWNrKHBhcmVudCkpCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBncGFyZW50 ID0gcmJfcGFyZW50KHBhcmVudCk7CisgICAgICAgIGdwYXJlbnQgPSByYl9yZWRfcGFyZW50KHBh cmVudCk7CiAKICAgICAgICAgaWYgKHBhcmVudCA9PSBncGFyZW50LT5yYl9sZWZ0KQogICAgICAg ICB7CisgICAgICAgICAgICB0bXAgPSBncGFyZW50LT5yYl9yaWdodDsKKyAgICAgICAgICAgIGlm ICh0bXAgJiYgcmJfaXNfcmVkKHRtcCkpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg cmVnaXN0ZXIgc3RydWN0IHJiX25vZGUgKnVuY2xlID0gZ3BhcmVudC0+cmJfcmlnaHQ7Ci0gICAg ICAgICAgICAgICAgaWYgKHVuY2xlICYmIHJiX2lzX3JlZCh1bmNsZSkpCi0gICAgICAgICAgICAg ICAgewotICAgICAgICAgICAgICAgICAgICByYl9zZXRfYmxhY2sodW5jbGUpOwotICAgICAgICAg ICAgICAgICAgICByYl9zZXRfYmxhY2socGFyZW50KTsKLSAgICAgICAgICAgICAgICAgICAgcmJf c2V0X3JlZChncGFyZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGdwYXJlbnQ7Ci0g ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIENhc2UgMSAtIGNvbG9yIGZsaXBzCisgICAg ICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgKiAgICAgICBHICAgICAgICAgICAgZwor ICAgICAgICAgICAgICAgICAqICAgICAgLyBcICAgICAgICAgIC8gXAorICAgICAgICAgICAgICAg ICAqICAgICBwICAgdSAgLS0+ICAgUCAgIFUKKyAgICAgICAgICAgICAgICAgKiAgICAvICAgICAg ICAgICAgLworICAgICAgICAgICAgICAgICAqICAgbiAgICAgICAgICAgIE4KKyAgICAgICAgICAg ICAgICAgKgorICAgICAgICAgICAgICAgICAqIEhvd2V2ZXIsIHNpbmNlIGcncyBwYXJlbnQgbWln aHQgYmUgcmVkLCBhbmQKKyAgICAgICAgICAgICAgICAgKiA0KSBkb2VzIG5vdCBhbGxvdyB0aGlz LCB3ZSBuZWVkIHRvIHJlY3Vyc2UKKyAgICAgICAgICAgICAgICAgKiBhdCBnLgorICAgICAgICAg ICAgICAgICAqLworICAgICAgICAgICAgICAgIHJiX3NldF9wYXJlbnRfY29sb3IodG1wLCBncGFy ZW50LCBSQl9CTEFDSyk7CisgICAgICAgICAgICAgICAgcmJfc2V0X3BhcmVudF9jb2xvcihwYXJl bnQsIGdwYXJlbnQsIFJCX0JMQUNLKTsKKyAgICAgICAgICAgICAgICBub2RlID0gZ3BhcmVudDsK KyAgICAgICAgICAgICAgICBwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7CisgICAgICAgICAgICAg ICAgcmJfc2V0X3BhcmVudF9jb2xvcihub2RlLCBwYXJlbnQsIFJCX1JFRCk7CisgICAgICAgICAg ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChwYXJlbnQt PnJiX3JpZ2h0ID09IG5vZGUpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgX19yYl9y b3RhdGVfbGVmdChwYXJlbnQsIHJvb3QpOworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAg ICAgICAgICogQ2FzZSAyIC0gbGVmdCByb3RhdGUgYXQgcGFyZW50CisgICAgICAgICAgICAgICAg ICoKKyAgICAgICAgICAgICAgICAgKiAgICAgIEcgICAgICAgICAgICAgRworICAgICAgICAgICAg ICAgICAqICAgICAvIFwgICAgICAgICAgIC8gXAorICAgICAgICAgICAgICAgICAqICAgIHAgICBV ICAtLT4gICAgbiAgIFUKKyAgICAgICAgICAgICAgICAgKiAgICAgXCAgICAgICAgICAgLworICAg ICAgICAgICAgICAgICAqICAgICAgbiAgICAgICAgIHAKKyAgICAgICAgICAgICAgICAgKgorICAg ICAgICAgICAgICAgICAqIFRoaXMgc3RpbGwgbGVhdmVzIHVzIGluIHZpb2xhdGlvbiBvZiA0KSwg dGhlCisgICAgICAgICAgICAgICAgICogY29udGludWF0aW9uIGludG8gQ2FzZSAzIHdpbGwgZml4 IHRoYXQuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcGFyZW50LT5yYl9y aWdodCA9IHRtcCA9IG5vZGUtPnJiX2xlZnQ7CisgICAgICAgICAgICAgICAgbm9kZS0+cmJfbGVm dCA9IHBhcmVudDsKKyAgICAgICAgICAgICAgICBpZiAodG1wKQorICAgICAgICAgICAgICAgICAg ICByYl9zZXRfcGFyZW50X2NvbG9yKHRtcCwgcGFyZW50LCBSQl9CTEFDSyk7CisgICAgICAgICAg ICAgICAgcmJfc2V0X3BhcmVudF9jb2xvcihwYXJlbnQsIG5vZGUsIFJCX1JFRCk7CiAgICAgICAg ICAgICAgICAgcGFyZW50ID0gbm9kZTsKICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmJf c2V0X2JsYWNrKHBhcmVudCk7Ci0gICAgICAgICAgICByYl9zZXRfcmVkKGdwYXJlbnQpOwotICAg ICAgICAgICAgX19yYl9yb3RhdGVfcmlnaHQoZ3BhcmVudCwgcm9vdCk7CisgICAgICAgICAgICAv KgorICAgICAgICAgICAgICogQ2FzZSAzIC0gcmlnaHQgcm90YXRlIGF0IGdwYXJlbnQKKyAgICAg ICAgICAgICAqCisgICAgICAgICAgICAgKiAgICAgICAgRyAgICAgICAgICAgUAorICAgICAgICAg ICAgICogICAgICAgLyBcICAgICAgICAgLyBcCisgICAgICAgICAgICAgKiAgICAgIHAgICBVICAt LT4gIG4gICBnCisgICAgICAgICAgICAgKiAgICAgLyAgICAgICAgICAgICAgICAgXAorICAgICAg ICAgICAgICogICAgbiAgICAgICAgICAgICAgICAgICBVCisgICAgICAgICAgICAgKi8KKyAgICAg ICAgICAgIGdwYXJlbnQtPnJiX2xlZnQgPSB0bXAgPSBwYXJlbnQtPnJiX3JpZ2h0OworICAgICAg ICAgICAgcGFyZW50LT5yYl9yaWdodCA9IGdwYXJlbnQ7CisgICAgICAgICAgICBpZiAodG1wKQor ICAgICAgICAgICAgICAgIHJiX3NldF9wYXJlbnRfY29sb3IodG1wLCBncGFyZW50LCBSQl9CTEFD Syk7CisgICAgICAgICAgICBfX3JiX3JvdGF0ZV9zZXRfcGFyZW50cyhncGFyZW50LCBwYXJlbnQs IHJvb3QsIFJCX1JFRCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIHRtcCA9IGdwYXJlbnQtPnJiX2xlZnQ7CisgICAgICAgICAgICBpZiAodG1wICYm IHJiX2lzX3JlZCh0bXApKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJlZ2lzdGVy IHN0cnVjdCByYl9ub2RlICp1bmNsZSA9IGdwYXJlbnQtPnJiX2xlZnQ7Ci0gICAgICAgICAgICAg ICAgaWYgKHVuY2xlICYmIHJiX2lzX3JlZCh1bmNsZSkpCi0gICAgICAgICAgICAgICAgewotICAg ICAgICAgICAgICAgICAgICByYl9zZXRfYmxhY2sodW5jbGUpOwotICAgICAgICAgICAgICAgICAg ICByYl9zZXRfYmxhY2socGFyZW50KTsKLSAgICAgICAgICAgICAgICAgICAgcmJfc2V0X3JlZChn cGFyZW50KTsKLSAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGdwYXJlbnQ7Ci0gICAgICAgICAg ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAv KiBDYXNlIDEgLSBjb2xvciBmbGlwcyAqLworICAgICAgICAgICAgICAgIHJiX3NldF9wYXJlbnRf Y29sb3IodG1wLCBncGFyZW50LCBSQl9CTEFDSyk7CisgICAgICAgICAgICAgICAgcmJfc2V0X3Bh cmVudF9jb2xvcihwYXJlbnQsIGdwYXJlbnQsIFJCX0JMQUNLKTsKKyAgICAgICAgICAgICAgICBu b2RlID0gZ3BhcmVudDsKKyAgICAgICAgICAgICAgICBwYXJlbnQgPSByYl9wYXJlbnQobm9kZSk7 CisgICAgICAgICAgICAgICAgcmJfc2V0X3BhcmVudF9jb2xvcihub2RlLCBwYXJlbnQsIFJCX1JF RCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg ICAgIGlmIChwYXJlbnQtPnJiX2xlZnQgPT0gbm9kZSkKICAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICBfX3JiX3JvdGF0ZV9yaWdodChwYXJlbnQsIHJvb3QpOworICAgICAgICAgICAgICAg IC8qIENhc2UgMiAtIHJpZ2h0IHJvdGF0ZSBhdCBwYXJlbnQgKi8KKyAgICAgICAgICAgICAgICBw YXJlbnQtPnJiX2xlZnQgPSB0bXAgPSBub2RlLT5yYl9yaWdodDsKKyAgICAgICAgICAgICAgICBu b2RlLT5yYl9yaWdodCA9IHBhcmVudDsKKyAgICAgICAgICAgICAgICBpZiAodG1wKQorICAgICAg ICAgICAgICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9yKHRtcCwgcGFyZW50LCBSQl9CTEFDSyk7 CisgICAgICAgICAgICAgICAgcmJfc2V0X3BhcmVudF9jb2xvcihwYXJlbnQsIG5vZGUsIFJCX1JF RCk7CiAgICAgICAgICAgICAgICAgcGFyZW50ID0gbm9kZTsKICAgICAgICAgICAgIH0KLQotICAg ICAgICAgICAgcmJfc2V0X2JsYWNrKHBhcmVudCk7Ci0gICAgICAgICAgICByYl9zZXRfcmVkKGdw YXJlbnQpOwotICAgICAgICAgICAgX19yYl9yb3RhdGVfbGVmdChncGFyZW50LCByb290KTsKKyAg ICAgICAgICAgIC8qIENhc2UgMyAtIGxlZnQgcm90YXRlIGF0IGdwYXJlbnQgKi8KKyAgICAgICAg ICAgIGdwYXJlbnQtPnJiX3JpZ2h0ID0gdG1wID0gcGFyZW50LT5yYl9sZWZ0OworICAgICAgICAg ICAgcGFyZW50LT5yYl9sZWZ0ID0gZ3BhcmVudDsKKyAgICAgICAgICAgIGlmICh0bXApCisgICAg ICAgICAgICAgICAgcmJfc2V0X3BhcmVudF9jb2xvcih0bXAsIGdwYXJlbnQsIFJCX0JMQUNLKTsK KyAgICAgICAgICAgIF9fcmJfcm90YXRlX3NldF9wYXJlbnRzKGdwYXJlbnQsIHBhcmVudCwgcm9v dCwgUkJfUkVEKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotLSAKMi4x Mi4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVu LWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3Rz Lnhlbi5vcmcveGVuLWRldmVsCg==