From mboxrd@z Thu Jan 1 00:00:00 1970 From: Praveen Kumar Subject: [Resend][PATCH 08/17] rbtree: low level optimizations in rb_insert_color() Date: Thu, 1 Jun 2017 02:50:47 +0530 Message-ID: <20170531212056.10583-9-kpraveen.lkml@gmail.com> References: <20170531212056.10583-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: <20170531212056.10583-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, Praveen Kumar , 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 eXMgZm9sbG93CiAgYW5kIG92ZXJyaWRlIHRoZW0uCgpjb21taXQgNWJjOTE4OGFhMjA3ZGFmZDQ3 ZWFiNTdkZjdjNGZlNWIzZDNmNjM2YSBmcm9tIGxpbnV4IHRyZWUKClNpZ25lZC1vZmYtYnk6IFBy YXZlZW4gS3VtYXIgPGtwcmF2ZWVuLmxrbWxAZ21haWwuY29tPgotLS0KIHhlbi9jb21tb24vcmJ0 cmVlLmMgfCAxNjAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0t LS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDEyOSBpbnNlcnRpb25zKCspLCAzMSBkZWxldGlvbnMo LSkKCmRpZmYgLS1naXQgYS94ZW4vY29tbW9uL3JidHJlZS5jIGIveGVuL2NvbW1vbi9yYnRyZWUu YwppbmRleCBjY2Y5MDVlMzVjLi44ZGI3YTViNGNhIDEwMDY0NAotLS0gYS94ZW4vY29tbW9uL3Ji dHJlZS5jCisrKyBiL3hlbi9jb21tb24vcmJ0cmVlLmMKQEAgLTIyLDYgKzIyLDI1IEBACiAjaW5j bHVkZSA8eGVuL3R5cGVzLmg+CiAjaW5jbHVkZSA8eGVuL3JidHJlZS5oPgogCisvKgorICogcmVk LWJsYWNrIHRyZWVzIHByb3BlcnRpZXM6ICBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1Ji dHJlZQorICoKKyAqICAxKSBBIG5vZGUgaXMgZWl0aGVyIHJlZCBvciBibGFjaworICogIDIpIFRo ZSByb290IGlzIGJsYWNrCisgKiAgMykgQWxsIGxlYXZlcyAoTlVMTCkgYXJlIGJsYWNrCisgKiAg NCkgQm90aCBjaGlsZHJlbiBvZiBldmVyeSByZWQgbm9kZSBhcmUgYmxhY2sKKyAqICA1KSBFdmVy eSBzaW1wbGUgcGF0aCBmcm9tIHJvb3QgdG8gbGVhdmVzIGNvbnRhaW5zIHRoZSBzYW1lIG51bWJl cgorICogICAgIG9mIGJsYWNrIG5vZGVzLgorICoKKyAqICA0IGFuZCA1IGdpdmUgdGhlIE8obG9n IG4pIGd1YXJhbnRlZSwgc2luY2UgNCBpbXBsaWVzIHlvdSBjYW5ub3QgaGF2ZSB0d28KKyAqICBj b25zZWN1dGl2ZSByZWQgbm9kZXMgaW4gYSBwYXRoIGFuZCBldmVyeSByZWQgbm9kZSBpcyB0aGVy ZWZvcmUgZm9sbG93ZWQgYnkKKyAqICBhIGJsYWNrLiBTbyBpZiBCIGlzIHRoZSBudW1iZXIgb2Yg YmxhY2sgbm9kZXMgb24gZXZlcnkgc2ltcGxlIHBhdGggKGFzIHBlcgorICogIDUpLCB0aGVuIHRo ZSBsb25nZXN0IHBvc3NpYmxlIHBhdGggZHVlIHRvIDQgaXMgMkIuCisgKgorICogIFdlIHNoYWxs IGluZGljYXRlIGNvbG9yIHdpdGggY2FzZSwgd2hlcmUgYmxhY2sgbm9kZXMgYXJlIHVwcGVyY2Fz ZSBhbmQgcmVkCisgKiAgbm9kZXMgd2lsbCBiZSBsb3dlcmNhc2UuCisgKi8KKwogI2RlZmluZSAg ICBSQl9SRUQgICAgMAogI2RlZmluZSAgICBSQl9CTEFDSyAgMQogCkBAIC00MCw2ICs1OSwxNyBA QCBzdGF0aWMgaW5saW5lIHZvaWQgcmJfc2V0X2NvbG9yKHN0cnVjdCByYl9ub2RlICpyYiwgaW50 IGNvbG9yKQogICAgIHJiLT5fX3JiX3BhcmVudF9jb2xvciA9IChyYi0+X19yYl9wYXJlbnRfY29s b3IgJiB+MSkgfCBjb2xvcjsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHJiX3NldF9wYXJlbnRf Y29sb3Ioc3RydWN0IHJiX25vZGUgKnJiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgcmJfbm9kZSAqcCwgaW50IGNvbG9yKQoreworICAgIHJiLT5fX3JiX3Bh cmVudF9jb2xvciA9ICh1bnNpZ25lZCBsb25nKXAgfCBjb2xvcjsKK30KKworc3RhdGljIGlubGlu ZSBzdHJ1Y3QgcmJfbm9kZSAqcmJfcmVkX3BhcmVudChzdHJ1Y3QgcmJfbm9kZSAqcmVkKQorewor ICAgIHJldHVybiAoc3RydWN0IHJiX25vZGUgKilyZWQtPl9fcmJfcGFyZW50X2NvbG9yOworfQor CiBzdGF0aWMgdm9pZCBfX3JiX3JvdGF0ZV9sZWZ0KHN0cnVjdCByYl9ub2RlICpub2RlLCBzdHJ1 Y3QgcmJfcm9vdCAqcm9vdCkKIHsKICAgICBzdHJ1Y3QgcmJfbm9kZSAqcmlnaHQgPSBub2RlLT5y Yl9yaWdodDsKQEAgLTg2LDkgKzExNiwzMCBAQCBzdGF0aWMgdm9pZCBfX3JiX3JvdGF0ZV9yaWdo dChzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCiAgICAgcmJfc2V0 X3BhcmVudChub2RlLCBsZWZ0KTsKIH0KIAorLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3Igcm90 YXRpb25zOgorICogLSBvbGQncyBwYXJlbnQgYW5kIGNvbG9yIGdldCBhc3NpZ25lZCB0byBuZXcK KyAqIC0gb2xkIGdldHMgYXNzaWduZWQgbmV3IGFzIGEgcGFyZW50IGFuZCAnY29sb3InIGFzIGEg Y29sb3IuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorX19yYl9yb3RhdGVfc2V0X3BhcmVudHMo c3RydWN0IHJiX25vZGUgKm9sZCwgc3RydWN0IHJiX25vZGUgKm5ldywKKyAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCByYl9yb290ICpyb290LCBpbnQgY29sb3IpCit7CisgICAgc3RydWN0 IHJiX25vZGUgKnBhcmVudCA9IHJiX3BhcmVudChvbGQpOworICAgIG5ldy0+X19yYl9wYXJlbnRf Y29sb3IgPSBvbGQtPl9fcmJfcGFyZW50X2NvbG9yOworICAgIHJiX3NldF9wYXJlbnRfY29sb3Io b2xkLCBuZXcsIGNvbG9yKTsKKyAgICBpZiAocGFyZW50KSB7CisgICAgICAgIGlmIChwYXJlbnQt PnJiX2xlZnQgPT0gb2xkKQorICAgICAgICAgICAgcGFyZW50LT5yYl9sZWZ0ID0gbmV3OworICAg ICAgICBlbHNlCisgICAgICAgICAgICBwYXJlbnQtPnJiX3JpZ2h0ID0gbmV3OworICAgIH0gZWxz ZQorICAgICAgICByb290LT5yYl9ub2RlID0gbmV3OworfQorCiB2b2lkIHJiX2luc2VydF9jb2xv cihzdHJ1Y3QgcmJfbm9kZSAqbm9kZSwgc3RydWN0IHJiX3Jvb3QgKnJvb3QpCiB7Ci0gICAgc3Ry dWN0IHJiX25vZGUgKnBhcmVudCwgKmdwYXJlbnQ7CisgICAgc3RydWN0IHJiX25vZGUgKnBhcmVu dCA9IHJiX3JlZF9wYXJlbnQobm9kZSksICpncGFyZW50LCAqdG1wOwogCiAgICAgd2hpbGUgKHRy dWUpCiAgICAgewpAQCAtOTksNjEgKzE1MCwxMDggQEAgdm9pZCByYl9pbnNlcnRfY29sb3Ioc3Ry dWN0IHJiX25vZGUgKm5vZGUsIHN0cnVjdCByYl9yb290ICpyb290KQogICAgICAgICAgKiBPdGhl cndpc2UsIHRha2Ugc29tZSBjb3JyZWN0aXZlIGFjdGlvbiBhcyB3ZSBkb24ndAogICAgICAgICAg KiB3YW50IGEgcmVkIHJvb3Qgb3IgdHdvIGNvbnNlY3V0aXZlIHJlZCBub2Rlcy4KICAgICAgICAg ICovCi0gICAgICAgIHBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKICAgICAgICAgaWYgKCFwYXJl bnQpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJiX3NldF9ibGFjayhub2RlKTsKKyAgICAgICAg ICAgIHJiX3NldF9wYXJlbnRfY29sb3Iobm9kZSwgTlVMTCwgUkJfQkxBQ0spOwogICAgICAgICAg ICAgYnJlYWs7CiAgICAgICAgIH0gZWxzZSBpZiAocmJfaXNfYmxhY2socGFyZW50KSkKICAgICAg ICAgICAgIGJyZWFrOwogCi0gICAgICAgIGdwYXJlbnQgPSByYl9wYXJlbnQocGFyZW50KTsKKyAg ICAgICAgZ3BhcmVudCA9IHJiX3JlZF9wYXJlbnQocGFyZW50KTsKIAogICAgICAgICBpZiAocGFy ZW50ID09IGdwYXJlbnQtPnJiX2xlZnQpCiAgICAgICAgIHsKKyAgICAgICAgICAgIHRtcCA9IGdw YXJlbnQtPnJiX3JpZ2h0OworICAgICAgICAgICAgaWYgKHRtcCAmJiByYl9pc19yZWQodG1wKSkK ICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZWdpc3RlciBzdHJ1Y3QgcmJfbm9kZSAq dW5jbGUgPSBncGFyZW50LT5yYl9yaWdodDsKLSAgICAgICAgICAgICAgICBpZiAodW5jbGUgJiYg cmJfaXNfcmVkKHVuY2xlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAg IHJiX3NldF9ibGFjayh1bmNsZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJiX3NldF9ibGFjayhw YXJlbnQpOwotICAgICAgICAgICAgICAgICAgICByYl9zZXRfcmVkKGdwYXJlbnQpOwotICAgICAg ICAgICAgICAgICAgICBub2RlID0gZ3BhcmVudDsKLSAgICAgICAgICAgICAgICAgICAgY29udGlu dWU7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg ICAgICogQ2FzZSAxIC0gY29sb3IgZmxpcHMKKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAg ICAgICAgICAqICAgICAgIEcgICAgICAgICAgICBnCisgICAgICAgICAgICAgICAgICogICAgICAv IFwgICAgICAgICAgLyBcCisgICAgICAgICAgICAgICAgICogICAgIHAgICB1ICAtLT4gICBQICAg VQorICAgICAgICAgICAgICAgICAqICAgIC8gICAgICAgICAgICAvCisgICAgICAgICAgICAgICAg ICogICBuICAgICAgICAgICAgTgorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAg ICogSG93ZXZlciwgc2luY2UgZydzIHBhcmVudCBtaWdodCBiZSByZWQsIGFuZAorICAgICAgICAg ICAgICAgICAqIDQpIGRvZXMgbm90IGFsbG93IHRoaXMsIHdlIG5lZWQgdG8gcmVjdXJzZQorICAg ICAgICAgICAgICAgICAqIGF0IGcuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAg ICAgcmJfc2V0X3BhcmVudF9jb2xvcih0bXAsIGdwYXJlbnQsIFJCX0JMQUNLKTsKKyAgICAgICAg ICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9yKHBhcmVudCwgZ3BhcmVudCwgUkJfQkxBQ0spOwor ICAgICAgICAgICAgICAgIG5vZGUgPSBncGFyZW50OworICAgICAgICAgICAgICAgIHBhcmVudCA9 IHJiX3BhcmVudChub2RlKTsKKyAgICAgICAgICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9yKG5v ZGUsIHBhcmVudCwgUkJfUkVEKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg ICAgIH0KIAogICAgICAgICAgICAgaWYgKHBhcmVudC0+cmJfcmlnaHQgPT0gbm9kZSkKICAgICAg ICAgICAgIHsKLSAgICAgICAgICAgICAgICBfX3JiX3JvdGF0ZV9sZWZ0KHBhcmVudCwgcm9vdCk7 CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBDYXNlIDIgLSBsZWZ0IHJv dGF0ZSBhdCBwYXJlbnQKKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAgICAqICAg ICAgRyAgICAgICAgICAgICBHCisgICAgICAgICAgICAgICAgICogICAgIC8gXCAgICAgICAgICAg LyBcCisgICAgICAgICAgICAgICAgICogICAgcCAgIFUgIC0tPiAgICBuICAgVQorICAgICAgICAg ICAgICAgICAqICAgICBcICAgICAgICAgICAvCisgICAgICAgICAgICAgICAgICogICAgICBuICAg ICAgICAgcAorICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICogVGhpcyBzdGls bCBsZWF2ZXMgdXMgaW4gdmlvbGF0aW9uIG9mIDQpLCB0aGUKKyAgICAgICAgICAgICAgICAgKiBj b250aW51YXRpb24gaW50byBDYXNlIDMgd2lsbCBmaXggdGhhdC4KKyAgICAgICAgICAgICAgICAg Ki8KKyAgICAgICAgICAgICAgICBwYXJlbnQtPnJiX3JpZ2h0ID0gdG1wID0gbm9kZS0+cmJfbGVm dDsKKyAgICAgICAgICAgICAgICBub2RlLT5yYl9sZWZ0ID0gcGFyZW50OworICAgICAgICAgICAg ICAgIGlmICh0bXApCisgICAgICAgICAgICAgICAgICAgIHJiX3NldF9wYXJlbnRfY29sb3IodG1w LCBwYXJlbnQsIFJCX0JMQUNLKTsKKyAgICAgICAgICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9y KHBhcmVudCwgbm9kZSwgUkJfUkVEKTsKICAgICAgICAgICAgICAgICBwYXJlbnQgPSBub2RlOwog ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICByYl9zZXRfYmxhY2socGFyZW50KTsKLSAgICAg ICAgICAgIHJiX3NldF9yZWQoZ3BhcmVudCk7Ci0gICAgICAgICAgICBfX3JiX3JvdGF0ZV9yaWdo dChncGFyZW50LCByb290KTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBDYXNlIDMg LSByaWdodCByb3RhdGUgYXQgZ3BhcmVudAorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAq ICAgICAgICBHICAgICAgICAgICBQCisgICAgICAgICAgICAgKiAgICAgICAvIFwgICAgICAgICAv IFwKKyAgICAgICAgICAgICAqICAgICAgcCAgIFUgIC0tPiAgbiAgIGcKKyAgICAgICAgICAgICAq ICAgICAvICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgKiAgICBuICAgICAgICAgICAg ICAgICAgIFUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZ3BhcmVudC0+cmJfbGVmdCA9 IHRtcCA9IHBhcmVudC0+cmJfcmlnaHQ7CisgICAgICAgICAgICBwYXJlbnQtPnJiX3JpZ2h0ID0g Z3BhcmVudDsKKyAgICAgICAgICAgIGlmICh0bXApCisgICAgICAgICAgICAgICAgcmJfc2V0X3Bh cmVudF9jb2xvcih0bXAsIGdwYXJlbnQsIFJCX0JMQUNLKTsKKyAgICAgICAgICAgIF9fcmJfcm90 YXRlX3NldF9wYXJlbnRzKGdwYXJlbnQsIHBhcmVudCwgcm9vdCwgUkJfUkVEKTsKKyAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdG1wID0gZ3BhcmVudC0+ cmJfbGVmdDsKKyAgICAgICAgICAgIGlmICh0bXAgJiYgcmJfaXNfcmVkKHRtcCkpCiAgICAgICAg ICAgICB7Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXIgc3RydWN0IHJiX25vZGUgKnVuY2xlID0g Z3BhcmVudC0+cmJfbGVmdDsKLSAgICAgICAgICAgICAgICBpZiAodW5jbGUgJiYgcmJfaXNfcmVk KHVuY2xlKSkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJiX3NldF9i bGFjayh1bmNsZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJiX3NldF9ibGFjayhwYXJlbnQpOwot ICAgICAgICAgICAgICAgICAgICByYl9zZXRfcmVkKGdwYXJlbnQpOwotICAgICAgICAgICAgICAg ICAgICBub2RlID0gZ3BhcmVudDsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIENhc2UgMSAtIGNvbG9yIGZsaXBzICov CisgICAgICAgICAgICAgICAgcmJfc2V0X3BhcmVudF9jb2xvcih0bXAsIGdwYXJlbnQsIFJCX0JM QUNLKTsKKyAgICAgICAgICAgICAgICByYl9zZXRfcGFyZW50X2NvbG9yKHBhcmVudCwgZ3BhcmVu dCwgUkJfQkxBQ0spOworICAgICAgICAgICAgICAgIG5vZGUgPSBncGFyZW50OworICAgICAgICAg ICAgICAgIHBhcmVudCA9IHJiX3BhcmVudChub2RlKTsKKyAgICAgICAgICAgICAgICByYl9zZXRf cGFyZW50X2NvbG9yKG5vZGUsIHBhcmVudCwgUkJfUkVEKTsKKyAgICAgICAgICAgICAgICBjb250 aW51ZTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKHBhcmVudC0+cmJfbGVmdCA9 PSBub2RlKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIF9fcmJfcm90YXRlX3JpZ2h0 KHBhcmVudCwgcm9vdCk7CisgICAgICAgICAgICAgICAgLyogQ2FzZSAyIC0gcmlnaHQgcm90YXRl IGF0IHBhcmVudCAqLworICAgICAgICAgICAgICAgIHBhcmVudC0+cmJfbGVmdCA9IHRtcCA9IG5v ZGUtPnJiX3JpZ2h0OworICAgICAgICAgICAgICAgIG5vZGUtPnJiX3JpZ2h0ID0gcGFyZW50Owor ICAgICAgICAgICAgICAgIGlmICh0bXApCisgICAgICAgICAgICAgICAgICAgIHJiX3NldF9wYXJl bnRfY29sb3IodG1wLCBwYXJlbnQsIFJCX0JMQUNLKTsKKyAgICAgICAgICAgICAgICByYl9zZXRf cGFyZW50X2NvbG9yKHBhcmVudCwgbm9kZSwgUkJfUkVEKTsKICAgICAgICAgICAgICAgICBwYXJl bnQgPSBub2RlOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICByYl9zZXRfYmxhY2socGFy ZW50KTsKLSAgICAgICAgICAgIHJiX3NldF9yZWQoZ3BhcmVudCk7Ci0gICAgICAgICAgICBfX3Ji X3JvdGF0ZV9sZWZ0KGdwYXJlbnQsIHJvb3QpOworICAgICAgICAgICAgLyogQ2FzZSAzIC0gbGVm dCByb3RhdGUgYXQgZ3BhcmVudCAqLworICAgICAgICAgICAgZ3BhcmVudC0+cmJfcmlnaHQgPSB0 bXAgPSBwYXJlbnQtPnJiX2xlZnQ7CisgICAgICAgICAgICBwYXJlbnQtPnJiX2xlZnQgPSBncGFy ZW50OworICAgICAgICAgICAgaWYgKHRtcCkKKyAgICAgICAgICAgICAgICByYl9zZXRfcGFyZW50 X2NvbG9yKHRtcCwgZ3BhcmVudCwgUkJfQkxBQ0spOworICAgICAgICAgICAgX19yYl9yb3RhdGVf c2V0X3BhcmVudHMoZ3BhcmVudCwgcGFyZW50LCByb290LCBSQl9SRUQpOworICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgIH0KICAgICB9CiB9Ci0tIAoyLjEyLjAKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhl bi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK