From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.3 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_MUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C6E9DC43218 for ; Tue, 11 Jun 2019 03:28:56 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 93A1B2086D for ; Tue, 11 Jun 2019 03:28:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 93A1B2086D Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1haXSd-0004rz-5Z; Tue, 11 Jun 2019 03:28:35 +0000 Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1haXSc-0004rS-B0 for xen-devel@lists.xenproject.org; Tue, 11 Jun 2019 03:28:34 +0000 X-Inumbo-ID: fc11e2ea-8bf8-11e9-8980-bc764e045a96 Received: from mga14.intel.com (unknown [192.55.52.115]) by us1-rack-dfw2.inumbo.com (Halon) with ESMTPS id fc11e2ea-8bf8-11e9-8980-bc764e045a96; Tue, 11 Jun 2019 03:28:31 +0000 (UTC) X-Amp-Result: UNKNOWN X-Amp-Original-Verdict: FILE UNKNOWN X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 10 Jun 2019 20:28:30 -0700 X-ExtLoop1: 1 Received: from gao-cwp.sh.intel.com (HELO gao-cwp) ([10.239.159.26]) by fmsmga007.fm.intel.com with ESMTP; 10 Jun 2019 20:28:29 -0700 Date: Tue, 11 Jun 2019 11:32:42 +0800 From: Chao Gao To: Jan Beulich Message-ID: <20190611033240.GA26361@gao-cwp> References: <1558945891-3015-1-git-send-email-chao.gao@intel.com> <1558945891-3015-7-git-send-email-chao.gao@intel.com> <5CF7B7870200007800235841@prv1-mh.provo.novell.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <5CF7B7870200007800235841@prv1-mh.provo.novell.com> User-Agent: Mutt/1.5.21 (2010-09-15) Subject: Re: [Xen-devel] [PATCH v7 06/10] microcode: split out apply_microcode() from cpu_request_microcode() X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Sergey Dyasli , Ashok Raj , WeiLiu , Andrew Cooper , xen-devel , Roger Pau Monne Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" T24gV2VkLCBKdW4gMDUsIDIwMTkgYXQgMDY6Mzc6MjdBTSAtMDYwMCwgSmFuIEJldWxpY2ggd3Jv dGU6Cj4+Pj4gT24gMjcuMDUuMTkgYXQgMTA6MzEsIDxjaGFvLmdhb0BpbnRlbC5jb20+IHdyb3Rl Ogo+PiBEdXJpbmcgbGF0ZSBtaWNyb2NvZGUgdXBkYXRlLCBhcHBseV9taWNyb2NvZGUoKSBpcyBp bnZva2VkIGluCj4+IGNwdV9yZXF1ZXN0X21pY3JvY29kZSgpLiBUbyBtYWtlIGxhdGUgbWljcm9j b2RlIHVwZGF0ZSBtb3JlIHJlbGlhYmxlLAo+PiB3ZSB3YW50IHRvIHB1dCB0aGUgYXBwbHlfbWlj cm9jb2RlKCkgaW50byBzdG9wX21hY2hpbmUgY29udGV4dC4gU28KPj4gd2Ugc3BsaXQgb3V0IGl0 IGZyb20gY3B1X3JlcXVlc3RfbWljcm9jb2RlKCkuIEFzIGEgY29uc2VxdWVuY2UsCj4+IGFwcGx5 X21pY3JvY29kZSgpIHNob3VsZCBiZSBpbnZva2VkIGV4cGxpY2l0bHkgaW4gdGhlIGNvbW1vbiBj b2RlLgo+PiAKPj4gUHJldmlvdXNseSwgYXBwbHlfbWljcm9jb2RlKCkgZ2V0cyB0aGUgbWljcm9j b2RlIHBhdGNoIHRvIGJlIGFwcGxpZWQgZnJvbQo+PiB0aGUgbWljcm9jb2RlIGNhY2hlLiBOb3cs IHRoZSBwYXRjaCBpcyBwYXNzZWQgYXMgYSBmdW5jdGlvbiBhcmd1bWVudCBhbmQKPj4gYSBwYXRj aCBpcyBjYWNoZWQgZm9yIGNwdS1ob3RwbHVnIGFuZCBjcHUgcmVzdW1pbmcsIG9ubHkgYWZ0ZXIg aXQgaGFzCj4+IGJlZW4gbG9hZGVkIHRvIGEgY3B1IHdpdGhvdXQgYW55IGVycm9yLiBBcyBhIGNv bnNlcXVlbmNlLCB0aGUKPj4gJ21hdGNoX2NwdScgY2hlY2sgaW4gbWljcm9jb2RlX3VwZGF0ZV9j YWNoZSBpcyByZW1vdmVkLCB3aGljaCBvdGhlcndpc2UKPj4gd291bGQgZmFpbC4KPgo+VGhlICJv bmx5IGFmdGVyIGl0IGhhcyBiZWVuIGxvYWRlZCB0byBhIGNwdSB3aXRob3V0IGFueSBlcnJvciIg aXMgYQo+cHJvYmxlbSwgcHJlY2lzZWx5IGZvciB0aGUgY2FzZSB3aGVyZSB1Y29kZSBvbiB0aGUg ZGlmZmVyZW50IGNvcmVzCj5pcyBub3QgaW4gc3luYyBpbml0aWFsbHkuIEkgd291bGQgYWN0dWFs bHkgbGlrZSB0byBwdXQgdXAgdGhpcyBxdWVzdGlvbjoKPldoZW4gYSBjb3JlIGhhcyBubyB1Y29k ZSBsb2FkZWQgYXQgYWxsIHlldCBhbmQgb25seSBzdHJpY3RseSBvbGRlcgo+KHRoYW4gbG9hZGVk IG9uIHNvbWUgb3RoZXIgY29yZXMpIHVjb2RlIGlzIGZvdW5kIHRvIGJlIGF2YWlsYWJsZSwKPndo ZXRoZXIgdGhlbiBpdCB3b3VsZG4ndCBzdGlsbCBiZSBiZXR0ZXIgdG8gYXBwbHkgdGhhdCB1Y29k ZSB0bwo+X2F0IGxlYXN0XyB0aGUgY29yZXMgdGhhdCBoYXZlIG5vbmUgbG9hZGVkIHlldC4KClll cywgaXQgaXMgYmV0dGVyIGZvciB0aGlzIHNwZWNpYWwgY2FzZS4gQW5kIEkgYWdyZWUgdG8gc3Vw cG9ydCB0aGlzIGNhc2UuCgpUaGlzIGluIHY3LCBhIHBhdGNoIGlzIGxvYWRlZCBvbmx5IGlmIGl0 cyByZXZpc2lvbiBpcyBuZXdlciB0aGFuIHRoYXQKbG9hZGVkIHRvIGN1cnJlbnQgQ1BVLiBBbmQg aXQgaXMgc3RvcmVkIG9ubHkgaWYgaXQgaGFzIGJlZW4gbG9hZGVkCnN1Y2Nlc3NmdWxseS4gQnV0 LCBhcyB5b3UgZGVzY3JpYmVkLCBhIGJyb2tlbiBiaW9zIG1pZ2h0IHB1dHMgdGhlIHN5c3RlbQpp biBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgKG11bHRpcGxlIG1pY3JvY29kZSByZXZpc2lvbiBpbiB0 aGUgc3lzdGVtKSBhbmQKZnVydGhlcm1vcmUgaW4gdGhpcyBjYXNlLCBpZiBubyBvciBhbiBvbGRl ciBtaWNyb2NvZGUgdXBkYXRlIGlzCnByb3ZpZGVkLCBlYXJseSBsb2FkaW5nIGNhbm5vdCBnZXQg dGhlIHN5c3RlbSBpbnRvIHNhbmUgc3RhdGUuIFNvIGZvcgpib3RoIGVhcmx5IGFuZCBsYXRlIG1p Y3JvY29kZSBsb2FkaW5nLCB3ZSBjb3VsZCBmYWNlIGEgc2l0dWF0aW9uIHRoYXQKdGhlIHBhdGNo IHRvIGJlIGxvYWRlZCBoYXMgZXF1YWwgb3Igb2xkIHJldmlzaW9uIHRoYW4gbWljcm9jb2RlIG9m IHNvbWUKQ1BVcy4KCkNoYW5nZXMgSSBwbGFuIHRvIG1ha2UgaW4gbmV4dCB2ZXJzaW9uIGFyZToK MS4gRm9yIGVhcmx5IG1pY3JvY29kZSwgYSBwYXRjaCB3b3VsZCBiZSBzdG9yZWQgaWYgaXQgY292 ZXJzIGN1cnJlbnQgQ1BVJ3MKc2lnbmF0dXJlLiBBbGwgQ1BVcyB3b3VsZCB0cnkgdG8gbG9hZCBm cm9tIHRoZSBjYWNoZS4KMi4gRm9yIGxhdGUgbWljcm9jb2RlLCBhIHBhdGNoIGlzIGxvYWRlZCBv bmx5IGlmIGl0cyByZXZpc2lvbiBpcyBuZXdlciB0aGFuCip0aGUgcGF0Y2ggY2FjaGVkKi4gQW5k IGl0IGlzIHN0b3JlZCBvbmx5IGlmIGhhcyBiZWVuIGxvYWRlZCB3aXRob3V0IGFuCiJFSU8iIGVy cm9yLgozLiBDYWNoZSByZXBsYWNlbWVudCByZW1haW5zIHRoZSBzYW1lLgoKQnV0IGl0IGlzIGEg dGVtcGVyYXJ5IHNvbHV0aW9uLCBlc3BlY2lhbGx5IGZvciBDU1BzLiBBIGJldHRlciB3YXkKbWln aHQgYmUgZ2V0dGluZyB0aGUgbmV3ZXN0IHVjb2RlIG9yIHVwZ3JhZGluZyB0byB0aGUgbmV3ZXN0 IGJpb3MsCmV2ZW4gZG93bmdyYWRpbmcgdGhlIGJpb3MgdG8gYW4gb2xkZXIgdmVyc2lvbiB3aGlj aCB3b3VsZG4ndCBwdXQKdGhlIHN5c3RlbSBpbnRvICJpbnNhbmUiIHN0YXRlLgoKPgo+VG8gZ2V0 IHRoZSBzeXN0ZW0gaW50byAic2FuZSIgc3RhdGUgaXQgbWF5IGV2ZW4gYmUgbmVjZXNzYXJ5IHRv Cj5kb3duZ3JhZGUgdWNvZGUgb24gdGhlIGNvcmVzIHdoaWNoIGRpZCBoYXZlIGl0IGxvYWRlZCBh bHJlYWR5LAo+aW4gc3VjaCBhIHNpdHVhdGlvbi4KPgo+PiBPbiBBTUQgc2lkZSwgc3ZtX2hvc3Rf b3N2d19pbml0KCkgaXMgc3VwcG9zZWQgdG8gYmUgY2FsbGVkIGFmdGVyCj4+IG1pY3JvY29kZSB1 cGRhdGUuIEFzIGFwcGx5X21pY3Jjb2RlKCkgd29uJ3QgYmUgY2FsbGVkIGJ5Cj4+IGNwdV9yZXF1 ZXN0X21pY3JvY29kZSgpIG5vdywgc3ZtX2hvc3Rfb3N2d19pbml0KCkgaXMgbW92ZWQgdG8gdGhl Cj4+IGVuZCBvZiBhcHBseV9taWNyb2NvZGUoKS4KPgo+SSBndWVzcyB0aGlzIHJlYWxseSBvdWdo dCB0byBiZWNvbWUgYSB2ZW5kb3IgaG9vayBhcyB3ZWxsLCBidXQgSQo+d291bGRuJ3QgaW5zaXN0 IG9uIHlvdSBkb2luZyBzbyBoZXJlLgo+Cj4+IC0tLSBhL3hlbi9hcmNoL3g4Ni9hY3BpL3Bvd2Vy LmMKPj4gKysrIGIveGVuL2FyY2gveDg2L2FjcGkvcG93ZXIuYwo+PiBAQCAtMjUzLDcgKzI1Myw3 IEBAIHN0YXRpYyBpbnQgZW50ZXJfc3RhdGUodTMyIHN0YXRlKQo+PiAgCj4+ICAgICAgY29uc29s ZV9lbmRfc3luYygpOwo+PiAgCj4+IC0gICAgbWljcm9jb2RlX3Jlc3VtZV9jcHUoKTsKPj4gKyAg ICBlYXJseV9taWNyb2NvZGVfdXBkYXRlX2NwdSgpOwo+Cj5UaGUgdXNlIGhlcmUsIHRoZSAoY2hh bmdlZCkgdXNlIGluIHN0YXJ0X3NlY29uZGFyeSgpLCBhbmQgdGhlIGRyb3BwaW5nCj5vZiBpdHMg X19pbml0IHN1Z2dlc3QgdG8gbWFrZSBhbiBhdHRlbXB0IHRvIGZpbmQgYSBiZXR0ZXIgbmFtZSBm b3IgdGhlCj5mdW5jdGlvbi4gTWF5YmUgbWljcm9jb2RlX3VwZGF0ZV9vbmUoKT8KCldpbGwgZG8u Cgo+PiArLyoKPj4gKyAqIExvYWQgYSBtaWNyb2NvZGUgdXBkYXRlIHRvIGN1cnJlbnQgQ1BVLgo+ PiArICoKPj4gKyAqIElmIG5vIHBhdGNoIGlzIHByb3ZpZGVkLCB0aGUgY2FjaGVkIHBhdGNoIHdp bGwgYmUgbG9hZGVkLiBNaWNyb2NvZGUgdXBkYXRlCj4+ICsgKiBkdXJpbmcgQVBzIGJyaW5ndXAg YW5kIENQVSByZXN1bWluZyBmYWxscyBpbnRvIHRoaXMgY2FzZS4KPj4gKyAqLwo+PiArc3RhdGlj IGludCBtaWNyb2NvZGVfdXBkYXRlX2NwdShzdHJ1Y3QgbWljcm9jb2RlX3BhdGNoICpwYXRjaCkK Pgo+Y29uc3Q/Cj4KPj4gIHsKPj4gLSAgICBpbnQgZXJyOwo+PiAtICAgIHN0cnVjdCBjcHVfc2ln bmF0dXJlICpzaWcgPSAmdGhpc19jcHUoY3B1X3NpZyk7Cj4+ICsgICAgaW50IHJldCA9IG1pY3Jv Y29kZV9vcHMtPmNvbGxlY3RfY3B1X2luZm8oJnRoaXNfY3B1KGNwdV9zaWcpKTsKPj4gIAo+PiAt ICAgIGlmICggIW1pY3JvY29kZV9vcHMgKQo+PiAtICAgICAgICByZXR1cm4gMDsKPj4gKyAgICBp ZiAoIHVubGlrZWx5KHJldCkgKQo+PiArICAgICAgICByZXR1cm4gcmV0Owo+PiAgCj4+ICAgICAg c3Bpbl9sb2NrKCZtaWNyb2NvZGVfbXV0ZXgpOwo+PiAgCj4+IC0gICAgZXJyID0gbWljcm9jb2Rl X29wcy0+Y29sbGVjdF9jcHVfaW5mbyhzaWcpOwo+PiAtICAgIGlmICggbGlrZWx5KCFlcnIpICkK Pj4gLSAgICAgICAgZXJyID0gbWljcm9jb2RlX29wcy0+YXBwbHlfbWljcm9jb2RlKCk7Cj4+IC0g ICAgc3Bpbl91bmxvY2soJm1pY3JvY29kZV9tdXRleCk7Cj4+ICsgICAgaWYgKCBwYXRjaCApCj4+ ICsgICAgewo+PiArICAgICAgICAvKgo+PiArICAgICAgICAgKiBJZiBhIHBhdGNoIGlzIHNwZWNp ZmllZCwgaXQgc2hvdWxkIGhhcyBuZXdlciByZXZpc2lvbiB0aGFuCj4+ICsgICAgICAgICAqIHRo YXQgb2YgdGhlIHBhdGNoIGNhY2hlZC4KPj4gKyAgICAgICAgICovCj4+ICsgICAgICAgIGlmICgg bWljcm9jb2RlX2NhY2hlICYmCj4+ICsgICAgICAgICAgICAgbWljcm9jb2RlX29wcy0+Y29tcGFy ZV9wYXRjaChwYXRjaCwgbWljcm9jb2RlX2NhY2hlKSAhPSBORVdfVUNPREUgKQo+PiArICAgICAg ICB7Cj4+ICsgICAgICAgICAgICBzcGluX3VubG9jaygmbWljcm9jb2RlX211dGV4KTsKPj4gKyAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiArICAgICAgICB9Cj4+ICAKPj4gLSAgICByZXR1 cm4gZXJyOwo+PiAtfQo+PiArICAgICAgICByZXQgPSBtaWNyb2NvZGVfb3BzLT5hcHBseV9taWNy b2NvZGUocGF0Y2gpOwo+Cj5UaGVyZSdzIG5vIHByaW50aygpIGhlcmUgYnV0IC4uLgo+Cj4+ICsg ICAgfQo+PiArICAgIGVsc2UgaWYgKCBtaWNyb2NvZGVfY2FjaGUgKQo+PiArICAgIHsKPj4gKyAg ICAgICAgcmV0ID0gbWljcm9jb2RlX29wcy0+YXBwbHlfbWljcm9jb2RlKG1pY3JvY29kZV9jYWNo ZSk7Cj4+ICsgICAgICAgIGlmICggcmV0ID09IC1FSU8gKQo+PiArICAgICAgICAgICAgcHJpbnRr KCJVcGRhdGUgZmFpbGVkLiBSZWJvb3QgbmVlZGVkXG4iKTsKPgo+Li4uIHlvdSBlbWl0IGEgbG9n IG1lc3NhZ2UgaGVyZS4gV2h5IHRoZSBkaWZmZXJlbmNlPyBBbmQgd291bGRuJ3QKPml0IGJlIGJl dHRlciB0byBoYXZlIGp1c3QgYSBzaW5nbGUgY2FsbCB0byAtPmFwcGx5IGFueXdheSwgYnkgc2lt cGx5Cj5hc3NpZ25pbmcgIm1pY3JvY29kZV9jYWNoZSIgdG8gInBhdGNoIiBhbmQgbW92aW5nIHRo ZSBjYWxsIGEgbGl0dGxlCj5mdXJ0aGVyIGRvd24/CgotRUlPIG1lYW5zIHdlIGxvYWRlZCB0aGUg cGF0Y2ggYnV0IHRoZSByZXZpc2lvbiBkaWRuJ3QgY2hhbmdlLiBUaGlzCmVycm9yIGNvZGUgaW5k aWNhdGVzIGFuIGVycm9yIGluIHRoZSBwYXRjaC4gSXQgaXMgdW5saWtlbHkgdG8gaGFwcGVuLgpB bmQgaW4gdGhpcyB2NywgYSBwYXRjaCBpcyBzdG9yZWQgYWZ0ZXIgYmVpbmcgbG9hZGluZyBzdWNj ZXNzZnVsbHkKb24gYSBDUFUuIFRvIHNpbXBsaWZ5IGhhbmRsaW5nIG9mIGxvYWQgZmFpbHVyZSBh bmQgYXZvaWQgY2xlYW51cCB0byB0aGUKZ2xvYmFsIGNhY2hlIChpZiBhIHBhdGNoIGhhcyBhIHN1 Y2Nlc3MgcmF0ZSwgd2UgbmVlZCB0byBjb25zaWRlciB3aGljaApvbmUgdG8gc2F2ZSB3aGVuIHdl IGhhdmUgYSBuZXcgcGF0Y2ggd2l0aCA5NSUgcmF0ZSBhbmQgYW4gb2xkIG9uZSB3aXRoCjEwMCUg cmF0ZSwgaXQgd291bGQgYmUgcmVhbGx5IGNvbXBsZXgpLCB3ZSBhc3N1bWUgdGhhdCBsb2FkaW5n IHRoZSBjYWNoZQooYmVpbmcgbG9hZGVkIHN1Y2Nlc3NmdWxseSBvbiBhIENQVSkgc2hvdWxkbid0 IHJldHVybiBFSU8uIE90aGVyd2lzZSwKYW4gZXJyb3IgbWVzc2FnZSBpcyBwcm9tcHRlZC4KCj4K Pj4gKyAgICB9Cj4+ICsgICAgZWxzZQo+PiArICAgICAgICAvKiBObyBwYXRjaCB0byB1cGRhdGUg Ki8KPj4gKyAgICAgICAgcmV0ID0gLUVJTlZBTDsKPgo+LUVOT0VOVD8KPgo+PiBAQCAtMjQ3LDQ2 ICsyNzAsMzIgQEAgYm9vbCBtaWNyb2NvZGVfdXBkYXRlX2NhY2hlKHN0cnVjdCBtaWNyb2NvZGVf cGF0Y2ggKnBhdGNoKQo+PiAgICAgIHJldHVybiB0cnVlOwo+PiAgfQo+PiAgCj4+IC1zdGF0aWMg aW50IG1pY3JvY29kZV91cGRhdGVfY3B1KGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCj4+ ICtzdGF0aWMgbG9uZyBkb19taWNyb2NvZGVfdXBkYXRlKHZvaWQgKnBhdGNoKQo+PiAgewo+PiAt ICAgIGludCBlcnI7Cj4+IC0gICAgdW5zaWduZWQgaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQo KTsKPj4gLSAgICBzdHJ1Y3QgY3B1X3NpZ25hdHVyZSAqc2lnID0gJnBlcl9jcHUoY3B1X3NpZywg Y3B1KTsKPj4gLQo+PiAtICAgIHNwaW5fbG9jaygmbWljcm9jb2RlX211dGV4KTsKPj4gKyAgICBp bnQgZXJyb3IsIGNwdTsKPgo+V2hpbGUgImludCIgaXMgZmluZSBmb3IgZXJyb3IgY29kZXMsIGl0 IGFsbW9zdCBjZXJ0YWlubHkgd2FudHMgdG8gYmUKPiJ1bnNpZ25lZCBpbnQiIGZvciAiY3B1Ii4g VGhlIG1vcmUgdGhhdCBpdCBoYWQgYmVlbiB0aGF0IHdhcyBiZWZvcmUuCj5JIGFsc28gZG9uJ3Qg c2VlIHdoeSB5b3UgbmVlZCB0byBzd2l0Y2ggZnJvbSAiZXJyIiB0byAiZXJyb3IiIC0gb2gsCj4u Li4KPgo+PiAtICAgIGVyciA9IG1pY3JvY29kZV9vcHMtPmNvbGxlY3RfY3B1X2luZm8oc2lnKTsK Pj4gLSAgICBpZiAoIGxpa2VseSghZXJyKSApCj4+IC0gICAgICAgIGVyciA9IG1pY3JvY29kZV9v cHMtPmNwdV9yZXF1ZXN0X21pY3JvY29kZShidWYsIHNpemUpOwo+PiAtICAgIHNwaW5fdW5sb2Nr KCZtaWNyb2NvZGVfbXV0ZXgpOwo+PiAtCj4+IC0gICAgcmV0dXJuIGVycjsKPj4gLX0KPj4gLQo+ PiAtc3RhdGljIGxvbmcgZG9fbWljcm9jb2RlX3VwZGF0ZSh2b2lkICpfaW5mbykKPj4gLXsKPj4g LSAgICBzdHJ1Y3QgbWljcm9jb2RlX2luZm8gKmluZm8gPSBfaW5mbzsKPj4gLSAgICBpbnQgZXJy b3I7Cj4+ICsgICAgZXJyb3IgPSBtaWNyb2NvZGVfdXBkYXRlX2NwdShwYXRjaCk7Cj4KPi4uLiB0 aGVyZSB3YXMgYSBwcmUtZXhpc3RpbmcgdmFyaWFibGUgb2YgdGhhdCBuYW1lIGhlcmUuCj4KPj4g KyAgICBpZiAoIGVycm9yICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIG1pY3JvY29kZV9vcHMtPmZy ZWVfcGF0Y2gobWljcm9jb2RlX2NhY2hlKTsKPgo+RG9lcyB0aGlzIGFsc28gc2V0ICJtaWNyb2Nv ZGVfY2FjaGUiIHRvIE5VTEw/IEkgZGlkbid0IHRoaW5rIHNvLgo+SXQncyBhbnl3YXkgbm90IHJl YWxseSBjbGVhciB3aHkgX2FsbF8gZm9ybXMgb2YgZXJyb3JzIHNob3VsZCBsZWFkCj50byBjbGVh cmluZyBvZiB0aGUgY2FjaGUuIEhvd2V2ZXIgLSBsb29raW5nIGF0IHRoZSBjb2RlIGZ1cnRoZXIK PmRvd24sIGRvbid0IHlvdSByYXRoZXIgbWVhbiB0byBmcmVlICJwYXRjaCIgaGVyZSBhbnl3YXk/ CgpTb3JyeSwgaXQgc2hvdWxkIGJlICJwYXRjaCIuCgo+Cj4+ICsgICAgICAgIHJldHVybiBlcnJv cjsKPj4gKyAgICB9Cj4+ICAKPj4gLSAgICBCVUdfT04oaW5mby0+Y3B1ICE9IHNtcF9wcm9jZXNz b3JfaWQoKSk7Cj4+ICAKPj4gLSAgICBlcnJvciA9IG1pY3JvY29kZV91cGRhdGVfY3B1KGluZm8t PmJ1ZmZlciwgaW5mby0+YnVmZmVyX3NpemUpOwo+PiAtICAgIGlmICggZXJyb3IgKQo+PiAtICAg ICAgICBpbmZvLT5lcnJvciA9IGVycm9yOwo+PiArICAgIGNwdSA9IGNwdW1hc2tfbmV4dChzbXBf cHJvY2Vzc29yX2lkKCksICZjcHVfb25saW5lX21hcCk7Cj4+ICsgICAgaWYgKCBjcHUgPCBucl9j cHVfaWRzICkKPj4gKyAgICAgICAgcmV0dXJuIGNvbnRpbnVlX2h5cGVyY2FsbF9vbl9jcHUoY3B1 LCBkb19taWNyb2NvZGVfdXBkYXRlLCBwYXRjaCk7Cj4+ICAKPj4gLSAgICBpbmZvLT5jcHUgPSBj cHVtYXNrX25leHQoaW5mby0+Y3B1LCAmY3B1X29ubGluZV9tYXApOwo+PiAtICAgIGlmICggaW5m by0+Y3B1IDwgbnJfY3B1X2lkcyApCj4+IC0gICAgICAgIHJldHVybiBjb250aW51ZV9oeXBlcmNh bGxfb25fY3B1KGluZm8tPmNwdSwgZG9fbWljcm9jb2RlX3VwZGF0ZSwgaW5mbyk7Cj4+ICsgICAg bWljcm9jb2RlX3VwZGF0ZV9jYWNoZShwYXRjaCk7Cj4KPkluZGVwZW5kZW50IG9mIG15IHJlbWFy a3MgYXQgdGhlIHRvcCBJIHdvdWxkIHRoaW5rIHRoYXQgdXBkYXRpbmcgb2YKPnRoZSBjYWNoZSBz aG91bGQgaGFwcGVuIGFmdGVyIHRoZSBmaXJzdCBzdWNjZXNzZnVsIGxvYWRpbmcgb24gYSBDUFUs Cj5ub3QgYWZ0ZXIgYWxsIENQVXMgaGF2ZSBiZWVuIHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5LiBUaGVy ZSB3b3VsZCB0aGVuCj5hbHNvIG5vdCBiZSBhbnkgbmVlZCB0byBwYXNzICJwYXRjaCIgb24gdG8g Y29udGludWVfaHlwZXJjYWxsX29uX2NwdSgpCj5hIGZldyBsaW5lcyB1cCBmcm9tIGhlcmUgKGFs YmVpdCBmcm9tIGEgZ2VuZXJhbCBsb2dpYyBwZXJzcGVjdGl2ZSBpdCBtYXkKPmluZGVlZCBiZSBl YXNpZXIgdG8ga2VlcCBpdCB0aGF0IHdheSkuCgpUaGUgbG9naWMgaXMgcmVtb3ZlZCBpbiB0aGUg bmV4dCBwYXRjaC4gU28gSSBwcmVmZXIgdG8ga2VlcCBpdCB0aGUgc2FtZS4KCj4KPj4gQEAgLTI5 NCwzMiArMzAzLDQ5IEBAIGludCBtaWNyb2NvZGVfdXBkYXRlKFhFTl9HVUVTVF9IQU5ETEVfUEFS QU0oY29uc3Rfdm9pZCkgYnVmLCB1bnNpZ25lZCBsb25nIGxlbikKPj4gICAgICBpZiAoIG1pY3Jv Y29kZV9vcHMgPT0gTlVMTCApCj4+ICAgICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiAgCj4+IC0g ICAgaW5mbyA9IHhtYWxsb2NfYnl0ZXMoc2l6ZW9mKCppbmZvKSArIGxlbik7Cj4+IC0gICAgaWYg KCBpbmZvID09IE5VTEwgKQo+PiAtICAgICAgICByZXR1cm4gLUVOT01FTTsKPj4gLQo+PiAtICAg IHJldCA9IGNvcHlfZnJvbV9ndWVzdChpbmZvLT5idWZmZXIsIGJ1ZiwgbGVuKTsKPj4gLSAgICBp ZiAoIHJldCAhPSAwICkKPj4gKyAgICBidWZmZXIgPSB4bWFsbG9jX2J5dGVzKGxlbik7Cj4+ICsg ICAgaWYgKCAhYnVmZmVyICkKPj4gICAgICB7Cj4+IC0gICAgICAgIHhmcmVlKGluZm8pOwo+PiAt ICAgICAgICByZXR1cm4gcmV0Owo+PiArICAgICAgICByZXQgPSAtRU5PTUVNOwo+PiArICAgICAg ICBnb3RvIGZyZWU7Cj4+ICAgICAgfQo+PiAgCj4+IC0gICAgaW5mby0+YnVmZmVyX3NpemUgPSBs ZW47Cj4+IC0gICAgaW5mby0+ZXJyb3IgPSAwOwo+PiAtICAgIGluZm8tPmNwdSA9IGNwdW1hc2tf Zmlyc3QoJmNwdV9vbmxpbmVfbWFwKTsKPj4gKyAgICBpZiAoIGNvcHlfZnJvbV9ndWVzdChidWZm ZXIsIGJ1ZiwgbGVuKSApCj4+ICsgICAgewo+PiArICAgICAgICByZXQgPSAtRUZBVUxUOwo+PiAr ICAgICAgICBnb3RvIGZyZWU7Cj4+ICsgICAgfQo+PiAgCj4+ICAgICAgaWYgKCBtaWNyb2NvZGVf b3BzLT5zdGFydF91cGRhdGUgKQo+PiAgICAgIHsKPj4gICAgICAgICAgcmV0ID0gbWljcm9jb2Rl X29wcy0+c3RhcnRfdXBkYXRlKCk7Cj4+ICAgICAgICAgIGlmICggcmV0ICE9IDAgKQo+PiAtICAg ICAgICB7Cj4+IC0gICAgICAgICAgICB4ZnJlZShpbmZvKTsKPj4gLSAgICAgICAgICAgIHJldHVy biByZXQ7Cj4+IC0gICAgICAgIH0KPj4gKyAgICAgICAgICAgIGdvdG8gZnJlZTsKPj4gICAgICB9 Cj4+ICAKPj4gLSAgICByZXR1cm4gY29udGludWVfaHlwZXJjYWxsX29uX2NwdShpbmZvLT5jcHUs IGRvX21pY3JvY29kZV91cGRhdGUsIGluZm8pOwo+PiArICAgIHBhdGNoID0gbWljcm9jb2RlX3Bh cnNlX2Jsb2IoYnVmZmVyLCBsZW4pOwo+PiArICAgIGlmICggSVNfRVJSKHBhdGNoKSApCj4+ICsg ICAgewo+PiArICAgICAgICBwcmludGsoWEVOTE9HX0VSUiAiUGFyc2luZyBtaWNyb2NvZGUgYmxv YiBlcnJvciAlbGRcbiIsIFBUUl9FUlIocGF0Y2gpKTsKPj4gKyAgICAgICAgcmV0ID0gUFRSX0VS UihwYXRjaCk7Cj4KPlNvIEkgYXNzdW1lIHdlIHdvdWxkIGdldCBoZXJlIHdoZW4gdGhlIHN5c3Rl bSBhbHJlYWR5IGhhcyB0aGUKPm5ld2VzdCAob3IgZXZlbiBuZXdlcikgdWNvZGUgbG9hZGVkLiBU aGF0J3Mgbm90IGFuIGVycm9yLCBhbmQKPmltbyBubyBsb2cgbWVzc2FnZSBzdWdnZXN0aW5nIHNv IHNob3VsZCBiZSBpc3N1ZWQuIFBlcmhhcHMgdGhlCj5wYXJzaW5nIGNvZGUgY291bGQgcmV0dXJu IE5VTEwgdG8gaW5kaWNhdGUgc28/CgpZZXMuICdwYXRjaCcgaXMgc2V0IHRvIGluZGljYXRlIGFu IGVycm9yIG9ubHkgaWYgbm8gbWF0Y2hpbmcgcGF0Y2ggaGFzCmJlZW4gZm91bmQgYW5kIGFuIGVy cm9yIChmb3IgZXhhbXBsZSwgLUVOT01FTSkgaGFwcGVucyBkdXJpbmcgcGFyc2luZy4KSWYgbm8g cGF0Y2ggaW4gdGhlIGJsb2IgY292ZXJzIHRoZSBjdXJyZW50IGNwdSBzaWduYXR1cmUsIHRoZSBw YXJzaW5nCmNvZGUgd2lsbCByZXR1cm4gTlVMTC4KCj5BbHRob3VnaCwganVkZ2luZwo+YnkgdGhl IGNvZGUgZnVydGhlciBkb3duIHlvdSBhbHJlYWR5IGV4cGVjdCBOVUxMIHBvdGVudGlhbGx5Cj5j b21pbmcgYmFjaywgYnV0IEkgY2FuJ3Qgc2VlbSB0byBiZSBhYmxlIHRvIGZpZ3VyZSB0aGUgY29u ZGl0aW9uKHMpLgo+Cj5BbHNvIHBsZWFzZSBzd2l0Y2ggdGhlIHR3byBsaW5lcyBhcm91bmQgYW5k IHVzZSAicmV0IiBpbiB0aGUgcHJpbnRrKCkKPmludm9jYXRpb24uCj4KPj4gKyAgICAgICAgZ290 byBmcmVlOwo+PiArICAgIH0KPj4gKwo+PiArICAgIGlmICggIW1pY3JvY29kZV9vcHMtPm1hdGNo X2NwdShwYXRjaCkgKQo+PiArICAgIHsKPj4gKyAgICAgICAgcHJpbnRrKFhFTkxPR19FUlIgIk5v IG1hdGNoaW5nIG9yIG5ld2VyIHVjb2RlIGZvdW5kLiBVcGRhdGUgYWJvcnRlZCFcbiIpOwo+Cj5J IGFzc3VtZSB0aGUgIm1hdGNoaW5nIiBoZXJlIGlzIG1lYW50IHRvIGNvdmVyIHRoZSBDUFUgc2ln bmF0dXJlPwoKWWVzLgoKPlRoZSB3b3JkaW5nIGlzIGFtYmlndW91cyB0aGlzIHdheSwgYmVjYXVz ZSBpdCBjb3VsZCBhbHNvIG1lYW4gdGhlcmUKPndhcyBubyB1Y29kZSBmb3VuZCBtYXRjaGluZyB0 aGF0IHdoaWNoIGlzIGFscmVhZHkgbG9hZGVkICh3aGljaCwgYXMKPnBlciBhYm92ZSwgbWF5IGVu ZCB1cCBiZWluZyByZWxldmFudCkuCgpUaGVuIEkgc3VwcG9zZSBpdCBpcyBmaW5lIHRvIHJlbW92 ZSB0aGUgIm1hdGNoaW5nIG9yIi4KCj4KPkZ1cnRoZXJtb3JlIC0gd2h5IHRoaXMgY2hlY2ssIHdo ZW4gbWljcm9jb2RlX3BhcnNlX2Jsb2IoKSBhbHJlYWR5Cj5sb29rcyBmb3Igc29tZXRoaW5nIHRo YXQncyBuZXdlciB0aGFuIHdoYXQgaXMgY3VycmVudGx5IGxvYWRlZCAoYW5kCj5tYXRjaGVzIHRo ZSBDUFUgc2lnbmF0dXJlKT8KClllcy4gSXQgY2FuIGJlIHJlcGxhY2VkIHdpdGggYSBudWxsIGNo ZWNrLgoKPgo+PiBAQCAtMzYyLDEzICszOTcsNDEgQEAgaW50IF9faW5pdCBlYXJseV9taWNyb2Nv ZGVfdXBkYXRlX2NwdShib29sIHN0YXJ0X3VwZGF0ZSkKPj4gICAgICB9Cj4+ICAgICAgaWYgKCBk YXRhICkKPj4gICAgICB7Cj4+IC0gICAgICAgIGlmICggc3RhcnRfdXBkYXRlICYmIG1pY3JvY29k ZV9vcHMtPnN0YXJ0X3VwZGF0ZSApCj4+ICsgICAgICAgIHN0cnVjdCBtaWNyb2NvZGVfcGF0Y2gg KnBhdGNoOwo+PiArCj4+ICsgICAgICAgIGlmICggbWljcm9jb2RlX29wcy0+c3RhcnRfdXBkYXRl ICkKPj4gICAgICAgICAgICAgIHJjID0gbWljcm9jb2RlX29wcy0+c3RhcnRfdXBkYXRlKCk7Cj4+ ICAKPj4gICAgICAgICAgaWYgKCByYyApCj4+ICAgICAgICAgICAgICByZXR1cm4gcmM7Cj4+ICAK Pj4gLSAgICAgICAgcmV0dXJuIG1pY3JvY29kZV91cGRhdGVfY3B1KGRhdGEsIGxlbik7Cj4+ICsg ICAgICAgIHBhdGNoID0gbWljcm9jb2RlX3BhcnNlX2Jsb2IoZGF0YSwgbGVuKTsKPj4gKyAgICAg ICAgaWYgKCBJU19FUlIocGF0Y2gpICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAgcHJp bnRrKFhFTkxPR19FUlIgIlBhcnNpbmcgbWljcm9jb2RlIGJsb2IgZXJyb3IgJWxkXG4iLAo+PiAr ICAgICAgICAgICAgICAgICAgIFBUUl9FUlIocGF0Y2gpKTsKPj4gKyAgICAgICAgICAgIHJldHVy biBQVFJfRVJSKHBhdGNoKTsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIGlmICggIW1p Y3JvY29kZV9vcHMtPm1hdGNoX2NwdShwYXRjaCkgKQo+PiArICAgICAgICB7Cj4+ICsgICAgICAg ICAgICBwcmludGsoWEVOTE9HX0VSUiAiTm8gbWF0Y2hpbmcgb3IgbmV3ZXIgdWNvZGUgZm91bmQu IFVwZGF0ZSBhYm9ydGVkIVxuIik7Cj4+ICsgICAgICAgICAgICBpZiAoIHBhdGNoICkKPj4gKyAg ICAgICAgICAgICAgICBtaWNyb2NvZGVfb3BzLT5mcmVlX3BhdGNoKHBhdGNoKTsKPj4gKyAgICAg ICAgICAgIHJldHVybiAtRUlOVkFMOwo+PiArICAgICAgICB9Cj4KPlNhbWUgcmVtYXJrcyBoZXJl IHRoZW4uCj4KPj4gQEAgLTI5Miw2ICsyOTEsMTAgQEAgc3RhdGljIGludCBhcHBseV9taWNyb2Nv ZGUodm9pZCkKPj4gIAo+PiAgICAgIHNpZy0+cmV2ID0gcmV2Owo+PiAgCj4+ICsjaWZkZWYgQ09O RklHX0hWTQo+PiArICAgIHN2bV9ob3N0X29zdndfaW5pdCgpOwo+PiArI2VuZGlmCj4+ICsKPj4g ICAgICByZXR1cm4gMDsKPj4gIH0KPgo+V2hpbGUgdGhpcyBub3cgc2l0cyBvbiB0aGUgc3VjY2Vz cyBwYXRoIG9ubHksIC4uLgo+Cj4+IEBAIC01OTIsMTcgKzU5NiwxMCBAQCBzdGF0aWMgaW50IGNw dV9yZXF1ZXN0X21pY3JvY29kZShjb25zdCB2b2lkICpidWYsIHNpemVfdCBidWZzaXplKQo+PiAg ICAgIH0KPj4gIAo+PiAgICBvdXQ6Cj4+IC0jaWYgQ09ORklHX0hWTQo+PiAtICAgIHN2bV9ob3N0 X29zdndfaW5pdCgpOwo+PiAtI2VuZGlmCj4+ICsgICAgaWYgKCBlcnJvciAmJiAhcGF0Y2ggKQo+ PiArICAgICAgICBwYXRjaCA9IEVSUl9QVFIoZXJyb3IpOwo+PiAgCj4+IC0gICAgLyoKPj4gLSAg ICAgKiBJbiBzb21lIGNhc2VzIHdlIG1heSByZXR1cm4gYW4gZXJyb3IgZXZlbiBpZiBwcm9jZXNz b3IncyBtaWNyb2NvZGUgaGFzCj4+IC0gICAgICogYmVlbiB1cGRhdGVkLiBGb3IgZXhhbXBsZSwg dGhlIGZpcnN0IHBhdGNoIGluIGEgY29udGFpbmVyIGZpbGUgaXMgbG9hZGVkCj4+IC0gICAgICog c3VjY2Vzc2Z1bGx5IGJ1dCBzdWJzZXF1ZW50IGNvbnRhaW5lciBmaWxlIHByb2Nlc3NpbmcgZW5j b3VudGVycyBhCj4+IC0gICAgICogZmFpbHVyZS4KPj4gLSAgICAgKi8KPj4gLSAgICByZXR1cm4g ZXJyb3I7Cj4+ICsgICAgcmV0dXJuIHBhdGNoOwo+PiAgfQo+Cj4uLi4gcHJldmlvdXNseSBpdCBo YXMgYWxzbyBiZWVuIGludm9rZWQgaW4gdGhlIGVycm9yIGNhc2UuIFNlZSB0aGUKPmNvbW1lbnQg aW4gc3RhcnRfdXBkYXRlKCkuCgpJdCBkZXBlbmRzIG9uIHRoZSBzY29wZSBvZiByZWxhdGVkIE1T UnMuIEJ1dCBJIGZhaWxlZCB0byBmaW5kIHN1Y2gKaW5mb3JtYXRpb24gaW4gQU1EIFNETS4gU28g SSB3aWxsIGZpbmQgYSBiZXR0ZXIgcGxhY2UgZm9yCnN2bV9ob3N0X29zdndfaW5pdCgpLiBUaGUg bGFzdCByZXNvcnQgaXMgdG8gaW50cm9kdWNlIGFub3RoZXIgY2FsbGJhY2ssCnByb2JhYmx5IC0+ ZW5kX3VwZGF0ZSgpLgoKPgo+PiAtLS0gYS94ZW4vYXJjaC94ODYvbWljcm9jb2RlX2ludGVsLmMK Pj4gKysrIGIveGVuL2FyY2gveDg2L21pY3JvY29kZV9pbnRlbC5jCj4+IEBAIC0yNzMsNDYgKzI3 MywyNyBAQCBzdGF0aWMgZW51bSBtaWNyb2NvZGVfbWF0Y2hfcmVzdWx0IGNvbXBhcmVfcGF0Y2go Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xkX2hlYWRlci0+cGYsIG9s ZF9oZWFkZXItPnJldik7Cj4+ICB9Cj4+ICAKPj4gLS8qCj4+IC0gKiByZXR1cm4gMCAtIG5vIHVw ZGF0ZSBmb3VuZAo+PiAtICogcmV0dXJuIDEgLSBmb3VuZCB1cGRhdGUKPj4gLSAqIHJldHVybiA8 IDAgLSBlcnJvcgo+PiAtICovCj4+IC1zdGF0aWMgaW50IGdldF9tYXRjaGluZ19taWNyb2NvZGUo Y29uc3Qgdm9pZCAqbWMpCj4+ICtzdGF0aWMgc3RydWN0IG1pY3JvY29kZV9wYXRjaCAqYWxsb3df bWljcm9jb2RlX3BhdGNoKAo+Cj5EaWQgeW91IHBlcmhhcHMgbWVhbiB0aGlzIHRvIGJlIGFsbG9j X21pY3JvY29kZV9wYXRjaCgpPwo+Cj4+IEBAIC0zODgsMjYgKzM2OCwzOSBAQCBzdGF0aWMgbG9u ZyBnZXRfbmV4dF91Y29kZV9mcm9tX2J1ZmZlcih2b2lkICoqbWMsIGNvbnN0IHU4ICpidWYsCj4+ ICAgICAgcmV0dXJuIG9mZnNldCArIHRvdGFsX3NpemU7Cj4+ICB9Cj4+ICAKPj4gLXN0YXRpYyBp bnQgY3B1X3JlcXVlc3RfbWljcm9jb2RlKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6ZV90IHNpemUpCj4+ ICtzdGF0aWMgc3RydWN0IG1pY3JvY29kZV9wYXRjaCAqY3B1X3JlcXVlc3RfbWljcm9jb2RlKGNv bnN0IHZvaWQgKmJ1ZiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IHNpemUpCj4+ICB7Cj4+ICAgICAgbG9uZyBvZmZzZXQgPSAw Owo+PiAgICAgIGludCBlcnJvciA9IDA7Cj4+ICAgICAgdm9pZCAqbWM7Cj4+ICsgICAgc3RydWN0 IG1pY3JvY29kZV9wYXRjaCAqcGF0Y2ggPSBOVUxMOwo+PiAgCj4+ICAgICAgd2hpbGUgKCAob2Zm c2V0ID0gZ2V0X25leHRfdWNvZGVfZnJvbV9idWZmZXIoJm1jLCBidWYsIHNpemUsIG9mZnNldCkp ID4gMCApCj4+ICAgICAgewo+PiArICAgICAgICBzdHJ1Y3QgbWljcm9jb2RlX3BhdGNoICpuZXdf cGF0Y2g7Cj4+ICsKPj4gICAgICAgICAgZXJyb3IgPSBtaWNyb2NvZGVfc2FuaXR5X2NoZWNrKG1j KTsKPj4gICAgICAgICAgaWYgKCBlcnJvciApCj4+ICAgICAgICAgICAgICBicmVhazsKPj4gLSAg ICAgICAgZXJyb3IgPSBnZXRfbWF0Y2hpbmdfbWljcm9jb2RlKG1jKTsKPj4gLSAgICAgICAgaWYg KCBlcnJvciA8IDAgKQo+PiArCj4+ICsgICAgICAgIG5ld19wYXRjaCA9IGFsbG93X21pY3JvY29k ZV9wYXRjaChtYyk7Cj4+ICsgICAgICAgIGlmICggSVNfRVJSKG5ld19wYXRjaCkgKQo+PiArICAg ICAgICB7Cj4+ICsgICAgICAgICAgICBlcnJvciA9IFBUUl9FUlIobmV3X3BhdGNoKTsKPj4gICAg ICAgICAgICAgIGJyZWFrOwo+PiAtICAgICAgICAvKgo+PiAtICAgICAgICAgKiBJdCdzIHBvc3Np YmxlIHRoZSBkYXRhIGZpbGUgaGFzIG11bHRpcGxlIG1hdGNoaW5nIHVjb2RlLAo+PiAtICAgICAg ICAgKiBsZXRzIGtlZXAgc2VhcmNoaW5nIHRpbGwgdGhlIGxhdGVzdCB2ZXJzaW9uCj4+IC0gICAg ICAgICAqLwo+PiAtICAgICAgICBpZiAoIGVycm9yID09IDEgKQo+PiAtICAgICAgICAgICAgZXJy b3IgPSAwOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgICAgLyogQ29tcGFyZSBwYXRjaGVz IGFuZCBzdG9yZSB0aGUgb25lIHdpdGggaGlnaGVyIHJldmlzaW9uICovCj4+ICsgICAgICAgIGlm ICggIXBhdGNoICYmIG1hdGNoX2NwdShuZXdfcGF0Y2gpICkKPj4gKyAgICAgICAgICAgIHBhdGNo ID0gbmV3X3BhdGNoOwo+PiArICAgICAgICBlbHNlIGlmICggcGF0Y2ggJiYgKGNvbXBhcmVfcGF0 Y2gobmV3X3BhdGNoLCBwYXRjaCkgPT0gTkVXX1VDT0RFKSApCj4KPkF0IGxlYXN0IHRoZSBhcHBl YXJhbmNlIG9mIHRoaXMgaXMgbWlzbGVhZGluZywgYnV0IHVubGVzcyBJJ20gbWlzc2luZwo+c29t ZXRoaW5nIGl0J3MgYWN0dWFsbHkgd3Jvbmc6IFlvdSBzZWVtIHRvIGltcGx5IHRoYXQgZnJvbQo+ bWF0Y2hfY3B1KHBhdGNoMSkgcmV0dXJuaW5nIHRydWUgYW5kIGNvbXBhcmVfcGF0Y2gocGF0Y2gy LCBwYXRjaDEpCj5yZXR1cm5pbmcgdHJ1ZSBpdCBmb2xsb3dzIHRoYXQgYWxzbyBtYXRjaF9jcHUo cGF0Y2gyKSB3b3VsZCByZXR1cm4KPnRydWUuIEJ1dCBJIGRvbid0IHRoaW5rIHRoYXQncyB0aGUg Y2FzZSwgYmVjYXVzZSBvZiBob3cgdGhlICJwZiIgZmllbGQKPndvcmtzLgo+Cj5FdmVuIGluIGNh c2UgSSd2ZSBvdmVybG9va2VkIGFuIGltcGxpY2l0IG1hdGNoX2NwdShuZXdfcGF0Y2gpIEknZAo+ bGlrZSB0byBhc2sgZm9yIHRoaXMgdG8gYmUgY2xhcmlmaWVkLCBlaXRoZXIgYnkgY2hhbmdpbmcg dGhlIGNvZGUKPnN0cnVjdHVyZSwgb3IgYnkgYXR0YWNoaW5nIGEgc3VpdGFibGUgY29tbWVudC4K CkkgZGlkIHRha2UgaXQgZm9yIGdyYW50ZWQuIENoZWNraW5nIHdoZXRoZXIgZWFjaCBwYXRjaCBj b3ZlcnMgY3VycmVudApzaWduYXR1cmUgYmVmb3JlIHRoZSBjb21wYXJpc29uIGNhbiBzb2x2ZSB0 aGlzIHByb2JsZW0uCgo+Cj4+IC0tLSBhL3hlbi9hcmNoL3g4Ni9zbXBib290LmMKPj4gKysrIGIv eGVuL2FyY2gveDg2L3NtcGJvb3QuYwo+PiBAQCAtMzYzLDEwICszNjMsNyBAQCB2b2lkIHN0YXJ0 X3NlY29uZGFyeSh2b2lkICp1bnVzZWQpCj4+ICAKPj4gICAgICBpbml0aWFsaXplX2NwdV9kYXRh KGNwdSk7Cj4+ICAKPj4gLSAgICBpZiAoIHN5c3RlbV9zdGF0ZSA8PSBTWVNfU1RBVEVfc21wX2Jv b3QgKQo+PiAtICAgICAgICBlYXJseV9taWNyb2NvZGVfdXBkYXRlX2NwdShmYWxzZSk7Cj4+IC0g ICAgZWxzZQo+PiAtICAgICAgICBtaWNyb2NvZGVfcmVzdW1lX2NwdSgpOwo+PiArICAgIGVhcmx5 X21pY3JvY29kZV91cGRhdGVfY3B1KCk7Cj4KPkknbSBzdHJ1Z2dsaW5nIHRvIHVuZGVyc3RhbmQg aG93IHlvdSBnZXQgYXdheSB3aXRob3V0IHRoZSAiZmFsc2UiCj5hcmd1bWVudCB0aGF0IHdhcyBw YXNzZWQgaGVyZSBiZWZvcmUuIFlvdSBsb29rIHRvIG5vdyBiZSBjYWxsaW5nCj4tPnN0YXJ0X3Vw ZGF0ZSgpIHVuY29uZGl0aW9uYWxseSAoc28gbG9uZyBhcyB0aGUgaG9vayBpcyBub3QgTlVMTCks Cj53aGljaCBJIGRvbid0IHRoaW5rIGlzIGNvcnJlY3QuIFRoaXMgc2hvdWxkIGJlIGNhbGxlZCBv bmx5IG9uY2UgYnkKPnRoZSBDUFUgX2xlYWRpbmdfIGFuIHVwZGF0ZSAodGhlIEJTUCBkdXJpbmcg Ym9vdCwgYW5kIHRoZSBDUFUKPnRoZSBoeXBlcmNhbGwgZ2V0cyBpbnZva2VkIG9uIChvciB0aGUg Zmlyc3QgQ1BVIGFuIHVwZGF0ZSBnZXRzCj5pc3N1ZWQgb25lKSBmb3IgYSBsYXRlIHVwZGF0ZS4g QW0gSSBtaXNzaW5nIHNvbWV0aGluZz8KCkJTUCBhbmQgQVBzIGNhbGwgZGlmZmVyZW50IGZ1bmN0 aW9ucywgZWFybHlfbWljcm9jb2RlX3BhcnNlX2FuZF91cGRhdGVfY3B1KCkKYW5kIGVhcmx5X21p Y3JvY29kZV91cGRhdGVfY3B1KCkgcmVzcGVjdGl2ZWx5LiBUaGUgbGF0dGVyIHdvbid0IGNhbGwK LT5zdGFydF91cGRhdGUoKS4KClRoYW5rcwpDaGFvCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBs aXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4v bGlzdGluZm8veGVuLWRldmVs