From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mx1.redhat.com ([209.132.183.28]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1g5Oql-0002Tp-8O for kexec@lists.infradead.org; Thu, 27 Sep 2018 05:28:35 +0000 Subject: Re: [PATCH 3/3] resource: Fix find_next_iomem_res() iteration issue References: <153782698067.130337.12079523922130875402.stgit@bhelgaas-glaptop.roam.corp.google.com> <153782730364.130337.17794279728329113665.stgit@bhelgaas-glaptop.roam.corp.google.com> From: lijiang Message-ID: <13084ce6-e29a-c244-3f9c-cf0725646d9f@redhat.com> Date: Thu, 27 Sep 2018 13:27:41 +0800 MIME-Version: 1.0 In-Reply-To: <153782730364.130337.17794279728329113665.stgit@bhelgaas-glaptop.roam.corp.google.com> Content-Language: en-US List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "kexec" Errors-To: kexec-bounces+dwmw2=infradead.org@lists.infradead.org To: Bjorn Helgaas Cc: thomas.lendacky@amd.com, brijesh.singh@amd.com, akpm@linux-foundation.org, bhe@redhat.com, tiwai@suse.de, x86@kernel.org, kexec@lists.infradead.org, linux-kernel@vger.kernel.org, mingo@redhat.com, baiyaowei@cmss.chinamobile.com, hpa@zytor.com, dan.j.williams@intel.com, bp@suse.de, dyoung@redhat.com, tglx@linutronix.de, Vivek Goyal 5ZyoIDIwMTjlubQwOeaciDI15pelIDA2OjE1LCBCam9ybiBIZWxnYWFzIOWGmemBkzoKPiBGcm9t OiBCam9ybiBIZWxnYWFzIDxiaGVsZ2Fhc0Bnb29nbGUuY29tPgo+IAo+IFByZXZpb3VzbHkgZmlu ZF9uZXh0X2lvbWVtX3JlcygpIHVzZWQgIipyZXMiIGFzIGJvdGggYW4gaW5wdXQgcGFyYW1ldGVy IGZvcgo+IHRoZSByYW5nZSB0byBzZWFyY2ggYW5kIHRoZSB0eXBlIG9mIHJlc291cmNlIHRvIHNl YXJjaCBmb3IsIGFuZCBhbiBvdXRwdXQKPiBwYXJhbWV0ZXIgZm9yIHRoZSByZXNvdXJjZSB3ZSBm b3VuZCwgd2hpY2ggbWFrZXMgdGhlIGludGVyZmFjZSBjb25mdXNpbmcKPiBhbmQgaGFyZCB0byB1 c2UgY29ycmVjdGx5Lgo+IAo+IEFsbCBjYWxsZXJzIGFsbG9jYXRlIGEgc2luZ2xlIHN0cnVjdCBy ZXNvdXJjZSBhbmQgdXNlIGl0IGZvciByZXBlYXRlZCBjYWxscwo+IHRvIGZpbmRfbmV4dF9pb21l bV9yZXMoKS4gIFdoZW4gZmluZF9uZXh0X2lvbWVtX3JlcygpIHJldHVybnMgYSByZXNvdXJjZSwK PiBpdCBvdmVyd3JpdGVzIHRoZSBzdGFydCwgZW5kLCBmbGFncywgYW5kIGRlc2MgbWVtYmVycyBv ZiB0aGUgc3RydWN0LiAgSWYgd2UKPiBjYWxsIGZpbmRfbmV4dF9pb21lbV9yZXMoKSBhZ2Fpbiwg d2UgbXVzdCB1cGRhdGUgb3IgcmVzdG9yZSB0aGVzZSBmaWVsZHMuCj4gCj4gVGhlIGNhbGxlcnMg KF9fd2Fsa19pb21lbV9yZXNfZGVzYygpIGFuZCB3YWxrX3N5c3RlbV9yYW1fcmFuZ2UoKSkgZG8g bm90Cj4gcmVzdG9yZSByZXMtPmZsYWdzLCBzbyBpZiB0aGUgY2FsbGVyIGlzIHNlYXJjaGluZyBm b3IgZmxhZ3Mgb2YKPiBJT1JFU09VUkNFX01FTSB8IElPUkVTT1VSQ0VfQlVTWSBhbmQgZmluZHMg YSByZXNvdXJjZSB3aXRoIGZsYWdzIG9mCj4gSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0JV U1kgfCBJT1JFU09VUkNFX1NZU1JBTSwgdGhlIG5leHQgc2VhcmNoIHdpbGwKPiBmaW5kIG9ubHkg cmVzb3VyY2VzIG1hcmtlZCBhcyBJT1JFU09VUkNFX1NZU1JBTS4KPiAKPiBGaXggdGhpcyBieSBy ZXN0cnVjdHVyaW5nIHRoZSBpbnRlcmZhY2Ugc28gaXQgdGFrZXMgZXhwbGljaXQgInN0YXJ0LCBl bmQsCj4gZmxhZ3MiIHBhcmFtZXRlcnMgYW5kIHVzZXMgIipyZXMiIG9ubHkgYXMgYW4gb3V0cHV0 IHBhcmFtZXRlci4KPiAKCkhpLCBCam9ybgpJIHBlcnNvbmFsbHkgc3VnZ2VzdCB0aGF0IHNvbWUg Y29tbWVudHMgbWlnaHQgYmUgYWRkZWQgaW4gdGhlIGNvZGUsIG1ha2UgaXQgY2xlYXIKYW5kIGVh c3kgdG8gdW5kZXJzdGFuZCwgdGhlbiB3aGljaCBjb3VsZCBhdm9pZCB0aGUgb2xkIGNvbmZ1c2lv biBhbmQgbW9yZSBjb2RlIGNoYW5nZXMuCgpUaGFua3MKTGlhbmJvCj4gT3JpZ2luYWwtcGF0Y2g6 IGh0dHA6Ly9sb3JlLmtlcm5lbC5vcmcvbGttbC8yMDE4MDkyMTA3MzIxMS4yMDA5Ny0yLWxpamlh bmdAcmVkaGF0LmNvbQo+IEJhc2VkLW9uLXBhdGNoLWJ5OiBMaWFuYm8gSmlhbmcgPGxpamlhbmdA cmVkaGF0LmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBCam9ybiBIZWxnYWFzIDxiaGVsZ2Fhc0Bnb29n bGUuY29tPgo+IC0tLQo+ICBrZXJuZWwvcmVzb3VyY2UuYyB8ICAgOTQgKysrKysrKysrKysrKysr KysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiAgMSBmaWxlIGNoYW5nZWQs IDQxIGluc2VydGlvbnMoKyksIDUzIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9rZXJu ZWwvcmVzb3VyY2UuYyBiL2tlcm5lbC9yZXNvdXJjZS5jCj4gaW5kZXggMTU1ZWM4NzNlYTRkLi45 ODkxZWE5MGNjOGYgMTAwNjQ0Cj4gLS0tIGEva2VybmVsL3Jlc291cmNlLmMKPiArKysgYi9rZXJu ZWwvcmVzb3VyY2UuYwo+IEBAIC0zMTksMjMgKzMxOSwyNiBAQCBpbnQgcmVsZWFzZV9yZXNvdXJj ZShzdHJ1Y3QgcmVzb3VyY2UgKm9sZCkKPiAgRVhQT1JUX1NZTUJPTChyZWxlYXNlX3Jlc291cmNl KTsKPiAgCj4gIC8qCj4gLSAqIEZpbmRzIHRoZSBsb3dlc3QgaW9tZW0gcmVzb3VyY2UgZXhpc3Rp bmcgd2l0aGluIFtyZXMtPnN0YXJ0Li5yZXMtPmVuZF0uCj4gLSAqIFRoZSBjYWxsZXIgbXVzdCBz cGVjaWZ5IHJlcy0+c3RhcnQsIHJlcy0+ZW5kLCByZXMtPmZsYWdzLCBhbmQgb3B0aW9uYWxseQo+ IC0gKiBkZXNjLiAgSWYgZm91bmQsIHJldHVybnMgMCwgcmVzIGlzIG92ZXJ3cml0dGVuLCBpZiBu b3QgZm91bmQsIHJldHVybnMgLTEuCj4gLSAqIFRoaXMgZnVuY3Rpb24gd2Fsa3MgdGhlIHdob2xl IHRyZWUgYW5kIG5vdCBqdXN0IGZpcnN0IGxldmVsIGNoaWxkcmVuIHVudGlsCj4gLSAqIGFuZCB1 bmxlc3MgZmlyc3RfbGV2ZWxfY2hpbGRyZW5fb25seSBpcyB0cnVlLgo+ICsgKiBGaW5kcyB0aGUg bG93ZXN0IGlvbWVtIHJlc291cmNlIHRoYXQgY292ZXJzIHBhcnQgb2YgW3N0YXJ0Li5lbmRdLiAg VGhlCj4gKyAqIGNhbGxlciBtdXN0IHNwZWNpZnkgc3RhcnQsIGVuZCwgZmxhZ3MsIGFuZCBkZXNj ICh3aGljaCBtYXkgYmUKPiArICogSU9SRVNfREVTQ19OT05FKS4KPiArICoKPiArICogSWYgYSBy ZXNvdXJjZSBpcyBmb3VuZCwgcmV0dXJucyAwIGFuZCAqcmVzIGlzIG92ZXJ3cml0dGVuIHdpdGgg dGhlIHBhcnQKPiArICogb2YgdGhlIHJlc291cmNlIHRoYXQncyB3aXRoaW4gW3N0YXJ0Li5lbmRd OyBpZiBub25lIGlzIGZvdW5kLCByZXR1cm5zCj4gKyAqIC0xLgo+ICsgKgo+ICsgKiBUaGlzIGZ1 bmN0aW9uIHdhbGtzIHRoZSB3aG9sZSB0cmVlIGFuZCBub3QganVzdCBmaXJzdCBsZXZlbCBjaGls ZHJlbgo+ICsgKiB1bmxlc3MgZmlyc3RfbGV2ZWxfY2hpbGRyZW5fb25seSBpcyB0cnVlLgo+ICAg Ki8KPiAtc3RhdGljIGludCBmaW5kX25leHRfaW9tZW1fcmVzKHN0cnVjdCByZXNvdXJjZSAqcmVz LCB1bnNpZ25lZCBsb25nIGRlc2MsCj4gLQkJCSAgICAgICBib29sIGZpcnN0X2xldmVsX2NoaWxk cmVuX29ubHkpCj4gK3N0YXRpYyBpbnQgZmluZF9uZXh0X2lvbWVtX3JlcyhyZXNvdXJjZV9zaXpl X3Qgc3RhcnQsIHJlc291cmNlX3NpemVfdCBlbmQsCj4gKwkJCSAgICAgICB1bnNpZ25lZCBsb25n IGZsYWdzLCB1bnNpZ25lZCBsb25nIGRlc2MsCj4gKwkJCSAgICAgICBib29sIGZpcnN0X2xldmVs X2NoaWxkcmVuX29ubHksCj4gKwkJCSAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKPiAgewo+ IC0JcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBlbmQ7Cj4gIAlzdHJ1Y3QgcmVzb3VyY2UgKnA7Cj4g IAlib29sIHNpYmxpbmdfb25seSA9IGZhbHNlOwo+ICAKPiAgCUJVR19PTighcmVzKTsKPiAtCj4g LQlzdGFydCA9IHJlcy0+c3RhcnQ7Cj4gLQllbmQgPSByZXMtPmVuZDsKPiAgCUJVR19PTihzdGFy dCA+PSBlbmQpOwo+ICAKPiAgCWlmIChmaXJzdF9sZXZlbF9jaGlsZHJlbl9vbmx5KQo+IEBAIC0z NDQsNyArMzQ3LDcgQEAgc3RhdGljIGludCBmaW5kX25leHRfaW9tZW1fcmVzKHN0cnVjdCByZXNv dXJjZSAqcmVzLCB1bnNpZ25lZCBsb25nIGRlc2MsCj4gIAlyZWFkX2xvY2soJnJlc291cmNlX2xv Y2spOwo+ICAKPiAgCWZvciAocCA9IGlvbWVtX3Jlc291cmNlLmNoaWxkOyBwOyBwID0gbmV4dF9y ZXNvdXJjZShwLCBzaWJsaW5nX29ubHkpKSB7Cj4gLQkJaWYgKChwLT5mbGFncyAmIHJlcy0+Zmxh Z3MpICE9IHJlcy0+ZmxhZ3MpCj4gKwkJaWYgKChwLT5mbGFncyAmIGZsYWdzKSAhPSBmbGFncykK PiAgCQkJY29udGludWU7Cj4gIAkJaWYgKChkZXNjICE9IElPUkVTX0RFU0NfTk9ORSkgJiYgKGRl c2MgIT0gcC0+ZGVzYykpCj4gIAkJCWNvbnRpbnVlOwo+IEBAIC0zNTksMzIgKzM2MiwzMSBAQCBz dGF0aWMgaW50IGZpbmRfbmV4dF9pb21lbV9yZXMoc3RydWN0IHJlc291cmNlICpyZXMsIHVuc2ln bmVkIGxvbmcgZGVzYywKPiAgCXJlYWRfdW5sb2NrKCZyZXNvdXJjZV9sb2NrKTsKPiAgCWlmICgh cCkKPiAgCQlyZXR1cm4gLTE7Cj4gKwo+ICAJLyogY29weSBkYXRhICovCj4gLQlpZiAocmVzLT5z dGFydCA8IHAtPnN0YXJ0KQo+IC0JCXJlcy0+c3RhcnQgPSBwLT5zdGFydDsKPiAtCWlmIChyZXMt PmVuZCA+IHAtPmVuZCkKPiAtCQlyZXMtPmVuZCA9IHAtPmVuZDsKPiArCXJlcy0+c3RhcnQgPSBt YXgoc3RhcnQsIHAtPnN0YXJ0KTsKPiArCXJlcy0+ZW5kID0gbWluKGVuZCwgcC0+ZW5kKTsKPiAg CXJlcy0+ZmxhZ3MgPSBwLT5mbGFnczsKPiAgCXJlcy0+ZGVzYyA9IHAtPmRlc2M7Cj4gIAlyZXR1 cm4gMDsKPiAgfQo+ICAKPiAtc3RhdGljIGludCBfX3dhbGtfaW9tZW1fcmVzX2Rlc2Moc3RydWN0 IHJlc291cmNlICpyZXMsIHVuc2lnbmVkIGxvbmcgZGVzYywKPiAtCQkJCSBib29sIGZpcnN0X2xl dmVsX2NoaWxkcmVuX29ubHksCj4gLQkJCQkgdm9pZCAqYXJnLAo+ICtzdGF0aWMgaW50IF9fd2Fs a19pb21lbV9yZXNfZGVzYyhyZXNvdXJjZV9zaXplX3Qgc3RhcnQsIHJlc291cmNlX3NpemVfdCBl bmQsCj4gKwkJCQkgdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBkZXNjLAo+ICsJ CQkJIGJvb2wgZmlyc3RfbGV2ZWxfY2hpbGRyZW5fb25seSwgdm9pZCAqYXJnLAo+ICAJCQkJIGlu dCAoKmZ1bmMpKHN0cnVjdCByZXNvdXJjZSAqLCB2b2lkICopKQo+ICB7Cj4gLQl1NjQgb3JpZ19l bmQgPSByZXMtPmVuZDsKPiArCXN0cnVjdCByZXNvdXJjZSByZXM7Cj4gIAlpbnQgcmV0ID0gLTE7 Cj4gIAo+IC0Jd2hpbGUgKChyZXMtPnN0YXJ0IDwgcmVzLT5lbmQpICYmCj4gLQkgICAgICAgIWZp bmRfbmV4dF9pb21lbV9yZXMocmVzLCBkZXNjLCBmaXJzdF9sZXZlbF9jaGlsZHJlbl9vbmx5KSkg ewo+IC0JCXJldCA9ICgqZnVuYykocmVzLCBhcmcpOwo+ICsJd2hpbGUgKHN0YXJ0IDwgZW5kICYm Cj4gKwkgICAgICAgIWZpbmRfbmV4dF9pb21lbV9yZXMoc3RhcnQsIGVuZCwgZmxhZ3MsIGRlc2Ms Cj4gKwkJCQkgICAgZmlyc3RfbGV2ZWxfY2hpbGRyZW5fb25seSwgJnJlcykpIHsKPiArCQlyZXQg PSAoKmZ1bmMpKCZyZXMsIGFyZyk7Cj4gIAkJaWYgKHJldCkKPiAgCQkJYnJlYWs7Cj4gIAo+IC0J CXJlcy0+c3RhcnQgPSByZXMtPmVuZCArIDE7Cj4gLQkJcmVzLT5lbmQgPSBvcmlnX2VuZDsKPiAr CQlzdGFydCA9IHJlcy5lbmQgKyAxOwo+ICAJfQo+ICAKPiAgCXJldHVybiByZXQ7Cj4gQEAgLTQw NywxMyArNDA5LDcgQEAgc3RhdGljIGludCBfX3dhbGtfaW9tZW1fcmVzX2Rlc2Moc3RydWN0IHJl c291cmNlICpyZXMsIHVuc2lnbmVkIGxvbmcgZGVzYywKPiAgaW50IHdhbGtfaW9tZW1fcmVzX2Rl c2ModW5zaWduZWQgbG9uZyBkZXNjLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1NjQgc3RhcnQsCj4g IAkJdTY0IGVuZCwgdm9pZCAqYXJnLCBpbnQgKCpmdW5jKShzdHJ1Y3QgcmVzb3VyY2UgKiwgdm9p ZCAqKSkKPiAgewo+IC0Jc3RydWN0IHJlc291cmNlIHJlczsKPiAtCj4gLQlyZXMuc3RhcnQgPSBz dGFydDsKPiAtCXJlcy5lbmQgPSBlbmQ7Cj4gLQlyZXMuZmxhZ3MgPSBmbGFnczsKPiAtCj4gLQly ZXR1cm4gX193YWxrX2lvbWVtX3Jlc19kZXNjKCZyZXMsIGRlc2MsIGZhbHNlLCBhcmcsIGZ1bmMp Owo+ICsJcmV0dXJuIF9fd2Fsa19pb21lbV9yZXNfZGVzYyhzdGFydCwgZW5kLCBmbGFncywgZGVz YywgZmFsc2UsIGFyZywgZnVuYyk7Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTF9HUEwod2Fsa19pb21l bV9yZXNfZGVzYyk7Cj4gIAo+IEBAIC00MjcsMTMgKzQyMyw5IEBAIEVYUE9SVF9TWU1CT0xfR1BM KHdhbGtfaW9tZW1fcmVzX2Rlc2MpOwo+ICBpbnQgd2Fsa19zeXN0ZW1fcmFtX3Jlcyh1NjQgc3Rh cnQsIHU2NCBlbmQsIHZvaWQgKmFyZywKPiAgCQkJCWludCAoKmZ1bmMpKHN0cnVjdCByZXNvdXJj ZSAqLCB2b2lkICopKQo+ICB7Cj4gLQlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwo+IC0KPiAtCXJlcy5z dGFydCA9IHN0YXJ0Owo+IC0JcmVzLmVuZCA9IGVuZDsKPiAtCXJlcy5mbGFncyA9IElPUkVTT1VS Q0VfU1lTVEVNX1JBTSB8IElPUkVTT1VSQ0VfQlVTWTsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3Mg PSBJT1JFU09VUkNFX1NZU1RFTV9SQU0gfCBJT1JFU09VUkNFX0JVU1k7Cj4gIAo+IC0JcmV0dXJu IF9fd2Fsa19pb21lbV9yZXNfZGVzYygmcmVzLCBJT1JFU19ERVNDX05PTkUsIHRydWUsCj4gKwly ZXR1cm4gX193YWxrX2lvbWVtX3Jlc19kZXNjKHN0YXJ0LCBlbmQsIGZsYWdzLCBJT1JFU19ERVND X05PTkUsIHRydWUsCj4gIAkJCQkgICAgIGFyZywgZnVuYyk7Cj4gIH0KPiAgCj4gQEAgLTQ0NCwx MyArNDM2LDkgQEAgaW50IHdhbGtfc3lzdGVtX3JhbV9yZXModTY0IHN0YXJ0LCB1NjQgZW5kLCB2 b2lkICphcmcsCj4gIGludCB3YWxrX21lbV9yZXModTY0IHN0YXJ0LCB1NjQgZW5kLCB2b2lkICph cmcsCj4gIAkJIGludCAoKmZ1bmMpKHN0cnVjdCByZXNvdXJjZSAqLCB2b2lkICopKQo+ICB7Cj4g LQlzdHJ1Y3QgcmVzb3VyY2UgcmVzOwo+IC0KPiAtCXJlcy5zdGFydCA9IHN0YXJ0Owo+IC0JcmVz LmVuZCA9IGVuZDsKPiAtCXJlcy5mbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJDRV9C VVNZOwo+ICsJdW5zaWduZWQgbG9uZyBmbGFncyA9IElPUkVTT1VSQ0VfTUVNIHwgSU9SRVNPVVJD RV9CVVNZOwo+ICAKPiAtCXJldHVybiBfX3dhbGtfaW9tZW1fcmVzX2Rlc2MoJnJlcywgSU9SRVNf REVTQ19OT05FLCB0cnVlLAo+ICsJcmV0dXJuIF9fd2Fsa19pb21lbV9yZXNfZGVzYyhzdGFydCwg ZW5kLCBmbGFncywgSU9SRVNfREVTQ19OT05FLCB0cnVlLAo+ICAJCQkJICAgICBhcmcsIGZ1bmMp Owo+ICB9Cj4gIAo+IEBAIC00NjQsMjUgKzQ1MiwyNSBAQCBpbnQgd2Fsa19tZW1fcmVzKHU2NCBz dGFydCwgdTY0IGVuZCwgdm9pZCAqYXJnLAo+ICBpbnQgd2Fsa19zeXN0ZW1fcmFtX3JhbmdlKHVu c2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLAo+ICAJCXZvaWQg KmFyZywgaW50ICgqZnVuYykodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdm9pZCAqKSkK PiAgewo+ICsJcmVzb3VyY2Vfc2l6ZV90IHN0YXJ0LCBlbmQ7Cj4gKwl1bnNpZ25lZCBsb25nIGZs YWdzOwo+ICAJc3RydWN0IHJlc291cmNlIHJlczsKPiAgCXVuc2lnbmVkIGxvbmcgcGZuLCBlbmRf cGZuOwo+IC0JdTY0IG9yaWdfZW5kOwo+ICAJaW50IHJldCA9IC0xOwo+ICAKPiAtCXJlcy5zdGFy dCA9ICh1NjQpIHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZUOwo+IC0JcmVzLmVuZCA9ICgodTY0KShz dGFydF9wZm4gKyBucl9wYWdlcykgPDwgUEFHRV9TSElGVCkgLSAxOwo+IC0JcmVzLmZsYWdzID0g SU9SRVNPVVJDRV9TWVNURU1fUkFNIHwgSU9SRVNPVVJDRV9CVVNZOwo+IC0Jb3JpZ19lbmQgPSBy ZXMuZW5kOwo+IC0Jd2hpbGUgKChyZXMuc3RhcnQgPCByZXMuZW5kKSAmJgo+IC0JCShmaW5kX25l eHRfaW9tZW1fcmVzKCZyZXMsIElPUkVTX0RFU0NfTk9ORSwgdHJ1ZSkgPj0gMCkpIHsKPiArCXN0 YXJ0ID0gKHU2NCkgc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7Cj4gKwllbmQgPSAoKHU2NCkoc3Rh cnRfcGZuICsgbnJfcGFnZXMpIDw8IFBBR0VfU0hJRlQpIC0gMTsKPiArCWZsYWdzID0gSU9SRVNP VVJDRV9TWVNURU1fUkFNIHwgSU9SRVNPVVJDRV9CVVNZOwo+ICsJd2hpbGUgKHN0YXJ0IDwgZW5k ICYmCj4gKwkgICAgICAgIWZpbmRfbmV4dF9pb21lbV9yZXMoc3RhcnQsIGVuZCwgZmxhZ3MsIElP UkVTX0RFU0NfTk9ORSwKPiArCQkJCSAgICB0cnVlLCAmcmVzKSkgewo+ICAJCXBmbiA9IChyZXMu c3RhcnQgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwo+ICAJCWVuZF9wZm4gPSAocmVz LmVuZCArIDEpID4+IFBBR0VfU0hJRlQ7Cj4gIAkJaWYgKGVuZF9wZm4gPiBwZm4pCj4gIAkJCXJl dCA9ICgqZnVuYykocGZuLCBlbmRfcGZuIC0gcGZuLCBhcmcpOwo+ICAJCWlmIChyZXQpCj4gIAkJ CWJyZWFrOwo+IC0JCXJlcy5zdGFydCA9IHJlcy5lbmQgKyAxOwo+IC0JCXJlcy5lbmQgPSBvcmln X2VuZDsKPiArCQlzdGFydCA9IHJlcy5lbmQgKyAxOwo+ICAJfQo+ICAJcmV0dXJuIHJldDsKPiAg fQo+IAo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Cj4ga2V4ZWMgbWFpbGluZyBsaXN0Cj4ga2V4ZWNAbGlzdHMuaW5mcmFkZWFkLm9yZwo+IGh0dHA6 Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8va2V4ZWMKPiAKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmtleGVjIG1haWxpbmcgbGlz dAprZXhlY0BsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21h aWxtYW4vbGlzdGluZm8va2V4ZWMK