From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Roger_Pau_Monn=C3=A9?= Subject: Re: [PATCH v3 04/15] argo: init, destroy and soft-reset, with enable command line opt Date: Thu, 10 Jan 2019 11:19:41 +0100 Message-ID: References: <1546846968-7372-1-git-send-email-christopher.w.clark@gmail.com> <1546846968-7372-5-git-send-email-christopher.w.clark@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57] helo=us1-amaz-eas2.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1ghXRM-0006xi-6j for xen-devel@lists.xenproject.org; Thu, 10 Jan 2019 10:19:56 +0000 Received: by mail-oi1-f196.google.com with SMTP id v6so8849815oif.2 for ; Thu, 10 Jan 2019 02:19:54 -0800 (PST) In-Reply-To: <1546846968-7372-5-git-send-email-christopher.w.clark@gmail.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Christopher Clark Cc: Stefano Stabellini , Wei Liu , Ross Philipson , Konrad Rzeszutek Wilk , George Dunlap , Andrew Cooper , Jason Andryuk , Ian Jackson , Julien Grall , Tim Deegan , Daniel Smith , Rich Persaud , Paul Durrant , Jan Beulich , xen-devel , James McKenzie , Eric Chanudet , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org IGFPbiBNb24sIEphbiA3LCAyMDE5IGF0IDg6NDQgQU0gQ2hyaXN0b3BoZXIgQ2xhcmsKPGNocmlz dG9waGVyLncuY2xhcmtAZ21haWwuY29tPiB3cm90ZToKPgo+IEluaXRpYWxpc2VzIGJhc2ljIGRh dGEgc3RydWN0dXJlcyBhbmQgcGVyZm9ybXMgdGVhcmRvd24gb2YgYXJnbyBzdGF0ZQo+IGZvciBk b21haW4gc2h1dGRvd24uCj4KPiBJbmNsdXNpb24gb2YgdGhlIEFyZ28gaW1wbGVtZW50YXRpb24g aXMgZGVwZW5kZW50IG9uIENPTkZJR19BUkdPLgo+Cj4gSW50cm9kdWNlcyBhIG5ldyBYZW4gY29t bWFuZCBsaW5lIHBhcmFtZXRlciAnYXJnbyc6IGJvb2wgdG8gZW5hYmxlL2Rpc2FibGUKPiB0aGUg YXJnbyBoeXBlcmNhbGwuIERlZmF1bHRzIHRvIGRpc2FibGVkLgo+Cj4gTmV3IGhlYWRlcnM6Cj4g ICBwdWJsaWMvYXJnby5oOiB3aXRoIGRlZmluaW9ucyBvZiBhZGRyZXNzZXMgYW5kIHJpbmcgc3Ry dWN0dXJlLCBpbmNsdWRpbmcKPiAgIGluZGV4ZXMgZm9yIGF0b21pYyB1cGRhdGUgZm9yIGNvbW11 bmljYXRpb24gYmV0d2VlbiBkb21haW4gYW5kIGh5cGVydmlzb3IuCj4KPiAgIHhlbi9hcmdvLmg6 IHRvIGV4cG9zZSB0aGUgaG9va3MgZm9yIGludGVncmF0aW9uIGludG8gZG9tYWluIGxpZmVjeWNs ZToKPiAgICAgYXJnb19pbml0OiBwZXItZG9tYWluIGluaXQgb2YgYXJnbyBkYXRhIHN0cnVjdHVy ZXMgZm9yIGRvbWFpbl9jcmVhdGUuCj4gICAgIGFyZ29fZGVzdHJveTogdGVhcmRvd24gZm9yIGRv bWFpbl9kZXN0cm95IGFuZCB0aGUgZXJyb3IgZXhpdAo+ICAgICAgICAgICAgICAgICAgIHBhdGgg b2YgZG9tYWluX2NyZWF0ZS4KPiAgICAgYXJnb19zb2Z0X3Jlc2V0OiByZXNldCBvZiBkb21haW4g c3RhdGUgZm9yIGRvbWFpbl9zb2Z0X3Jlc2V0Lgo+Cj4gQWRkcyB0d28gbmV3IGZpZWxkcyB0byBz dHJ1Y3QgZG9tYWluOgo+ICAgICByd2xvY2tfdCBhcmdvX2xvY2s7Cj4gICAgIHN0cnVjdCBhcmdv X2RvbWFpbiAqYXJnbzsKPgo+IEluIGFjY29yZGFuY2Ugd2l0aCByZWNlbnQgd29yayBvbiBfZG9t YWluX2Rlc3Ryb3ksIGFyZ29fZGVzdHJveSBpcwo+IGlkZW1wb3RlbnQuIEl0IHdpbGwgdGVhciBk b3duOiBhbGwgcmluZ3MgcmVnaXN0ZXJlZCBieSB0aGlzIGRvbWFpbiwgYWxsCj4gcmluZ3Mgd2hl cmUgdGhpcyBkb21haW4gaXMgdGhlIHNpbmdsZSBzZW5kZXIgKGllLiBzcGVjaWZpZWQgcGFydG5l ciwKPiBub24td2lsZGNhcmQgcmluZ3MpLCBhbmQgYWxsIHBlbmRpbmcgbm90aWZpY2F0aW9ucyB3 aGVyZSB0aGlzIGRvbWFpbiBpcwo+IGF3YWl0aW5nIHNpZ25hbCBhYm91dCBhdmFpbGFibGUgc3Bh Y2UgaW4gdGhlIHJpbmdzIG9mIG90aGVyIGRvbWFpbnMuCj4KPiBBIGNvdW50IHdpbGwgYmUgbWFp bnRhaW5lZCBvZiB0aGUgbnVtYmVyIG9mIHJpbmdzIHRoYXQgYSBkb21haW4gaGFzCj4gcmVnaXN0 ZXJlZCBpbiBvcmRlciB0byBsaW1pdCBpdCBiZWxvdyB0aGUgZml4ZWQgbWF4aW11bSBsaW1pdCBk ZWZpbmVkIGhlcmUuCj4KPiBUaGUgc29mdHdhcmUgbGljZW5zZSBvbiB0aGUgcHVibGljIGhlYWRl ciBpcyB0aGUgQlNEIGxpY2Vuc2UsIHN0YW5kYXJkCj4gcHJvY2VkdXJlIGZvciB0aGUgcHVibGlj IFhlbiBoZWFkZXJzLiBUaGUgcHVibGljIGhlYWRlciB3YXMgb3JpZ2luYWxseQo+IHBvc3RlZCB1 bmRlciBhIEdQTCBsaWNlbnNlIGF0OiBbMV06Cj4gaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9y Zy9hcmNoaXZlcy9odG1sL3hlbi1kZXZlbC8yMDEzLTA1L21zZzAyNzEwLmh0bWwKPgo+IFRoZSBm b2xsb3dpbmcgQUNLIGJ5IExhcnMgS3VydGggaXMgdG8gY29uZmlybSB0aGF0IG9ubHkgcGVvcGxl IGJlaW5nCj4gZW1wbG95ZWVzIG9mIENpdHJpeCBjb250cmlidXRlZCB0byB0aGUgaGVhZGVyIGZp bGVzIGluIHRoZSBzZXJpZXMgcG9zdGVkIGF0Cj4gWzFdIGFuZCB0aGF0IHRodXMgdGhlIGNvcHly aWdodCBvZiB0aGUgZmlsZXMgaW4gcXVlc3Rpb24gaXMgZnVsbHkgb3duZWQgYnkKPiBDaXRyaXgu IFRoZSBBQ0sgYWxzbyBjb25maXJtcyB0aGF0IENpdHJpeCBpcyBoYXBweSBmb3IgdGhlIGhlYWRl ciBmaWxlcyB0bwo+IGJlIHB1Ymxpc2hlZCB1bmRlciBhIEJTRCBsaWNlbnNlIGluIHRoaXMgc2Vy aWVzICh3aGljaCBpcyBiYXNlZCBvbiBbMV0pLgo+Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0b3Bo ZXIgQ2xhcmsgPGNocmlzdG9waGVyLmNsYXJrNkBiYWVzeXN0ZW1zLmNvbT4KPiBBY2tlZC1ieTog TGFycyBLdXJ0aCA8bGFycy5rdXJ0aEBjaXRyaXguY29tPgo+IC0tLQo+IHYyIHJld3JpdGUgbG9j a2luZyBleHBsYW5hdGlvbiBjb21tZW50Cj4gdjIgaGVhZGVyIGNvcHlyaWdodCBsaW5lIG5vdyBp bmNsdWRlcyAyMDE5Cj4gdjIgc2VsZjogdXNlIHJpbmdfaW5mbyBiYWNrcG9pbnRlciBpbiBwZW5k aW5nX2VudCB0byBtYWludGFpbiBucGVuZGluZwo+IHYyIHNlbGY6IHJlbmFtZSBhbGxfcmluZ3Nf cmVtb3ZlX2luZm8gdG8gZG9tYWluX3JpbmdzX3JlbW92ZV9hbGwKPiB2MiBmZWVkYmFjayBKYW46 IGRyb3AgY29va2llLCBpbXBsZW1lbnQgdGVhcmRvd24KPiB2MiBzZWxmOiBhZGQgbnBlbmRpbmcg dG8gdHJhY2sgbnVtYmVyIG9mIHBlbmRpbmcgZW50cmllcyBwZXIgcmluZwo+IHYyIHNlbGY6IGFt ZW5kIGNvbW1lbnQgb24gbG9ja2luZzsgZHJvcCBzZWN0aW9uIGNvbW1lbnRzCj4gdjIgY29va2ll X2VxOiB0ZXN0IGxvdyBiaXRzIGZpcnN0IGFuZCB1c2UgbGlrZWx5IG9uIGhpZ2ggYml0cwo+IHYy IHNlbGY6IE9WRVJIQVVMCj4gdjIgc2VsZjogcy9hcmdvX3BlbmRpbmdfZW50L3BlbmRpbmdfZW50 L2cKPiB2MiBzZWxmOiBkcm9wIHBlbmRpbmdfcmVtb3ZlX2VudCwgaW5saW5lIGF0IHNpbmdsZSBj YWxsIHNpdGUKPiB2MSBmZWVkYmFjayBSb2dlciwgSmFuOiBkcm9wIGFyZ28gcHJlZml4IG9uIHN0 YXRpYyBmdW5jdGlvbnMKPiB2MiAjNCBMYXJzOiBhZGQgQWNrZWQtYnkgYW5kIGRldGFpbHMgdG8g Y29tbWl0IG1lc3NhZ2UuCj4gdjIgZmVlZGJhY2sgIzkgSmFuOiBkb2N1bWVudCBhcmdvIGJvb3Qg b3B0IGluIHhlbi1jb21tYW5kLWxpbmUubWFya2Rvd24KPiB2MiBidWdmaXg6IHhzbSB1c2UgaW4g c29mdC1yZXNldCBwcmlvciB0byBpbnRyb2R1Y3Rpb24KPiB2MiBmZWVkYmFjayAjOSBKYW46IGRy b3AgJ21lc3NhZ2UnIGZyb20gZG9fYXJnb19tZXNzYWdlX29wCj4gdjEgIzUgZmVlZGJhY2sgUGF1 bDogaW5pdC9kZXN0cm95IHVuc2lnbmVkLCBicmFja2V0cyBhbmQgd2hpdGVzcGFjZSBmaXhlcwo+ IHYxICM1IGZlZWRiYWNrIFBhdWw6IFVzZSBtZm5fZXEgZm9yIGNvbXBhcmluZyBtZm5zLgo+IHYx ICM1IGZlZWRiYWNrIFBhdWw6IGluaXQvZGVzdHJveSA6IHVzZSBjdXJyZAo+IHYxICM2ICgjNSkg ZmVlZGJhY2sgSmFuOiBpbml0L2Rlc3Ryb3k6IHMvRU5PU1lTL0VPUE5PVFNVUFAvCj4gdjEgIzYg ZmVlZGJhY2sgUGF1bDogRm9sZGVkIHBhdGNoIDYgaW50byBwYXRjaCA1Lgo+IHYxICM2IGZlZWRi YWNrIEphbjogZHJvcCBvcHRfYXJnb19lbmFibGVkIGluaXRpYWxpemVyCj4gdjEgJDYgZmVlZGJh Y2sgSmFuOiBzL0VOT1NZUy9FT1BOT1RTVVBQL2cgYW5kIGRyb3AgdXNlbGVzcyBkcHJpbnRrCj4g djEuICM1IGZlZWRiYWNrIFBhdWw6IGNoYW5nZSB0aGUgbGljZW5zZSBvbiBwdWJsaWMgaGVhZGVy IHRvIEJTRAo+IC0gYWNrIGZyb20gTGFycyBhdCBDaXRyaXguCj4gdjEuIHNlbGYsIEphbjogZHJv cCB1bm5lY2Vzc2FyeSB4ZW4gaW5jbHVkZSBmcm9tIHNjaGVkLmgKPiB2MS4gc2VsZiwgSmFuOiBk cm9wIGluY2x1c2lvbiBvZiBwdWJsaWMgYXJnby5oIGluIHByaXZhdGUgb25lCj4gdjEuIHNlbGYs IEphbjogYWRkIGluY2x1ZGUgb2YgcHVibGljIGFyZ28uaCB0byBhcmdvLmMKPiB2MS4gc2VsZiwg SmFuOiBkcm9wIGZ3ZCBkZWNsIG9mIGFyZ29fZG9tYWluIGluIHByaXYgaGVhZGVyCj4gdjEuIFBh dWwvc2VsZi9KYW46IGFkZCBkYXRhIHN0cnVjdHVyZXMgdG8geGxhdC5sc3QgYW5kIGNvbXBhdC9h cmdvLmggdG8gTWFrZWZpbGUKPiB2MS4gc2VsZjogcmVtb3ZlZCBhbGxvY2F0aW9uIG9mIGV2ZW50 IGNoYW5uZWwgc2luY2Ugc3dpdGNoaW5nIHRvIFZJUlEKPiB2MS4gc2VsZjogZHJvcCB0eXBlcy5o IGluY2x1ZGUgZnJvbSBwcml2YXRlIGFyZ28uaAo+IHYxOiByZW9yZGVyIHB1YmxpYyBhcmdvIGlu Y2x1ZGUgcG9zaXRpb24KPiB2MTogIzEzIGZlZWRiYWNrIEphbjogcHVibGljIG5hbWVzcGFjZTog cHJlZml4IHdpdGggeGVuCj4gdjE6IHNlbGY6IHJlbmFtZSBwZW5kaW5nIGVudCAiaWQiIHRvICJk b21haW5faWQiCj4gdjE6IHNlbGY6IGFkZCBkb21haW5fY29va2llIHRvIGVudCBzdHJ1Y3QKPiB2 MS4gIzE1IGZlZWRiYWNrIEphbjogbWFrZSBjbWQgdW5zaWduZWQKPiB2MS4gIzE1IGZlZWRiYWNr IEphbjogbWFrZSBpIGxvb3AgdmFyaWFibGUgdW5zaWduZWQKPiB2MTogc2VsZjogYWRqdXN0IGRw cmludGtzIGluIGluaXQsIGRlc3Ryb3kKPiB2MTogIzE4IGZlZWRiYWNrIEphbjogbWVsZCBtYXgg cmluZyBjb3VudCBsaW1pdAo+IHYxOiBzZWxmOiB1c2UgdHlwZSBub3Qgc3RydWN0IGluIHB1Ymxp YyBkZWZuLCBhZmZlY3RzIGNvbXBhdCBnZW4gaGVhZGVyCj4gdjE6IGZlZWRiYWNrICMxNSBKYW46 IGhhbmRsZSB1cHBlci1oYWx2ZXMgb2YgaHlwZXJjYWxsIGFyZ3MKPiB2MTogYWRkIGNvbW1lbnQg ZXhwbGFpbmluZyB0aGUgJ21hZ2ljJyBmaWVsZAo+IHYxOiBzZWxmICsgSmFuIGZlZWRiYWNrOiBp bXBsZW1lbnQgc29mdCByZXNldAo+IHYxOiBmZWVkYmFjayAjMTMgUm9nZXI6IHVzZSBBU1NFUlRf VU5SRUFDSEFCTEUKPgo+ICBkb2NzL21pc2MveGVuLWNvbW1hbmQtbGluZS5wYW5kb2MgfCAgMTEg Kwo+ICB4ZW4vY29tbW9uL2FyZ28uYyAgICAgICAgICAgICAgICAgfCA0NjEgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKy0KPiAgeGVuL2NvbW1vbi9kb21haW4uYyAgICAgICAg ICAgICAgIHwgIDIwICsrCj4gIHhlbi9pbmNsdWRlL01ha2VmaWxlICAgICAgICAgICAgICB8ICAg MSArCj4gIHhlbi9pbmNsdWRlL3B1YmxpYy9hcmdvLmggICAgICAgICB8ICA1OSArKysrKwo+ICB4 ZW4vaW5jbHVkZS94ZW4vYXJnby5oICAgICAgICAgICAgfCAgMjMgKysKPiAgeGVuL2luY2x1ZGUv eGVuL3NjaGVkLmggICAgICAgICAgIHwgICA2ICsKPiAgeGVuL2luY2x1ZGUveGxhdC5sc3QgICAg ICAgICAgICAgIHwgICAyICsKPiAgOCBmaWxlcyBjaGFuZ2VkLCA1ODIgaW5zZXJ0aW9ucygrKSwg MSBkZWxldGlvbigtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUvcHVibGljL2Fy Z28uaAo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUveGVuL2FyZ28uaAo+Cj4gZGlm ZiAtLWdpdCBhL2RvY3MvbWlzYy94ZW4tY29tbWFuZC1saW5lLnBhbmRvYyBiL2RvY3MvbWlzYy94 ZW4tY29tbWFuZC1saW5lLnBhbmRvYwo+IGluZGV4IGE3NTVhNjcuLmFlYTEzZWIgMTAwNjQ0Cj4g LS0tIGEvZG9jcy9taXNjL3hlbi1jb21tYW5kLWxpbmUucGFuZG9jCj4gKysrIGIvZG9jcy9taXNj L3hlbi1jb21tYW5kLWxpbmUucGFuZG9jCj4gQEAgLTE4Miw2ICsxODIsMTcgQEAgUGVybWl0IFhl biB0byB1c2UgIkFsd2F5cyBSdW5uaW5nIEFQSUMgVGltZXIiIHN1cHBvcnQgb24gY29tcGF0aWJs ZSBoYXJkd2FyZQo+ICBpbiBjb21iaW5hdGlvbiB3aXRoIGNwdWlkbGUuICBUaGlzIG9wdGlvbiBp cyBvbmx5IGV4cGVjdGVkIHRvIGJlIHVzZWZ1bCBmb3IKPiAgZGV2ZWxvcGVycyB3aXNoaW5nIFhl biB0byBmYWxsIGJhY2sgdG8gb2xkZXIgdGltaW5nIG1ldGhvZHMgb24gbmV3ZXIgaGFyZHdhcmUu Cj4KPiArIyMjIGFyZ28KPiArPiBgPSA8Ym9vbGVhbj5gCj4gKwo+ICs+IERlZmF1bHQ6IGBmYWxz ZWAKPiArCj4gK0VuYWJsZSB0aGUgQXJnbyBoeXBlcnZpc29yLW1lZGlhdGVkIGludGVyZG9tYWlu IGNvbW11bmljYXRpb24gbWVjaGFuaXNtLgo+ICsKPiArVGhpcyBhbGxvd3MgZG9tYWlucyBhY2Nl c3MgdG8gdGhlIEFyZ28gaHlwZXJjYWxsLCB3aGljaCBzdXBwb3J0cyByZWdpc3RyYXRpb24KPiAr b2YgbWVtb3J5IHJpbmdzIHdpdGggdGhlIGh5cGVydmlzb3IgdG8gcmVjZWl2ZSBtZXNzYWdlcywg c2VuZGluZyBtZXNzYWdlcyB0bwo+ICtvdGhlciBkb21haW5zIGJ5IGh5cGVyY2FsbCBhbmQgcXVl cnlpbmcgdGhlIHJpbmcgc3RhdHVzIG9mIG90aGVyIGRvbWFpbnMuCj4gKwo+ICAjIyMgYXNpZCAo eDg2KQo+ICA+IGA9IDxib29sZWFuPmAKPgo+IGRpZmYgLS1naXQgYS94ZW4vY29tbW9uL2FyZ28u YyBiL3hlbi9jb21tb24vYXJnby5jCj4gaW5kZXggNmY3ODJmNy4uODYxOTVkMyAxMDA2NDQKPiAt LS0gYS94ZW4vY29tbW9uL2FyZ28uYwo+ICsrKyBiL3hlbi9jb21tb24vYXJnby5jCj4gQEAgLTE3 LDcgKzE3LDE3NyBAQAo+ICAgKi8KPgo+ICAjaW5jbHVkZSA8eGVuL2Vycm5vLmg+Cj4gKyNpbmNs dWRlIDx4ZW4vc2NoZWQuaD4KPiArI2luY2x1ZGUgPHhlbi9kb21haW4uaD4KPiArI2luY2x1ZGUg PHhlbi9hcmdvLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vZXZlbnQuaD4KPiArI2luY2x1ZGUgPHhlbi9k b21haW5fcGFnZS5oPgo+ICAjaW5jbHVkZSA8eGVuL2d1ZXN0X2FjY2Vzcy5oPgo+ICsjaW5jbHVk ZSA8eGVuL3RpbWUuaD4KPiArI2luY2x1ZGUgPHB1YmxpYy9hcmdvLmg+CgpXZSB1c3VhbGx5IHRy eSB0byBzb3J0IGhlYWRlciBpbmNsdWRlcyBhbHBoYWJldGljYWxseSwgYW5kIEkgd291bGQgYWRk CmEgbmV3bGluZSBiZXR3ZWVuIHRoZSB4ZW4vKiBhbmQgdGhlIHB1YmxpYy8qIGhlYWRlciBpbmNs dWRlcy4KCj4gKwo+ICtERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5fYXJnb19hZGRyX3QpOwo+ ICtERUZJTkVfWEVOX0dVRVNUX0hBTkRMRSh4ZW5fYXJnb19yaW5nX3QpOwo+ICsKPiArLyogWGVu IGNvbW1hbmQgbGluZSBvcHRpb24gdG8gZW5hYmxlIGFyZ28gKi8KPiArc3RhdGljIGJvb2wgX19y ZWFkX21vc3RseSBvcHRfYXJnb19lbmFibGVkOwo+ICtib29sZWFuX3BhcmFtKCJhcmdvIiwgb3B0 X2FyZ29fZW5hYmxlZCk7CgpJIHdvdWxkIGRyb3AgdGhlIG9wdF8qIHByZWZpeCwgbmV3IG9wdGlv bnMgYWRkZWQgcmVjZW50bHkgZG9uJ3QKaW5jbHVkZSB0aGUgcHJlZml4IGFscmVhZHkuCgo+ICsK PiArdHlwZWRlZiBzdHJ1Y3QgYXJnb19yaW5nX2lkCj4gK3sKPiArICAgIHVpbnQzMl90IHBvcnQ7 Cj4gKyAgICBkb21pZF90IHBhcnRuZXJfaWQ7Cj4gKyAgICBkb21pZF90IGRvbWFpbl9pZDsKPiAr fSBhcmdvX3JpbmdfaWQ7Cj4gKwo+ICsvKiBEYXRhIGFib3V0IGEgZG9tYWluJ3Mgb3duIHJpbmcg dGhhdCBpdCBoYXMgcmVnaXN0ZXJlZCAqLwo+ICtzdHJ1Y3QgYXJnb19yaW5nX2luZm8KPiArewo+ ICsgICAgLyogbmV4dCBub2RlIGluIHRoZSBoYXNoLCBwcm90ZWN0ZWQgYnkgTDIgKi8KPiArICAg IHN0cnVjdCBobGlzdF9ub2RlIG5vZGU7Cj4gKyAgICAvKiB0aGlzIHJpbmcncyBpZCwgcHJvdGVj dGVkIGJ5IEwyICovCj4gKyAgICBzdHJ1Y3QgYXJnb19yaW5nX2lkIGlkOwo+ICsgICAgLyogTDMg Ki8KPiArICAgIHNwaW5sb2NrX3QgbG9jazsKPiArICAgIC8qIGxlbmd0aCBvZiB0aGUgcmluZywg cHJvdGVjdGVkIGJ5IEwzICovCj4gKyAgICB1aW50MzJfdCBsZW47Cj4gKyAgICAvKiBudW1iZXIg b2YgcGFnZXMgaW4gdGhlIHJpbmcsIHByb3RlY3RlZCBieSBMMyAqLwo+ICsgICAgdWludDMyX3Qg bnBhZ2U7CgpDYW4geW91IGluZmVyIG51bWJlciBvZiBwYWdlcyBmb3JtIHRoZSBsZW5ndGggb2Yg dGhlIHJpbmcsIG9yIHRoZQpvdGhlciB3YXkgYXJvdW5kPwoKSSdtIG5vdCBzdXJlIHdoeSBib3Ro IG5lZWQgdG8gYmUgc3RvcmVkIGhlcmUuCgo+ICsgICAgLyogbnVtYmVyIG9mIHBhZ2VzIHRyYW5z bGF0ZWQgaW50byBtZm5zLCBwcm90ZWN0ZWQgYnkgTDMgKi8KPiArICAgIHVpbnQzMl90IG5tZm5z Owo+ICsgICAgLyogY2FjaGVkIHR4IHBvaW50ZXIgbG9jYXRpb24sIHByb3RlY3RlZCBieSBMMyAq Lwo+ICsgICAgdWludDMyX3QgdHhfcHRyOwoKQWxsIHRoaXMgZmllbGRzIGFyZSBub3QgcGFydCBv ZiBhbnkgcHVibGljIHN0cnVjdHVyZSwgc28gSSB3b25kZXIgaWYKaXQgd291bGQgYmUgYmV0dGVy IHRvIHNpbXBseSB1c2UgdW5zaWduZWQgaW50IGZvciB0aG9zZSwgb3Igc2l6ZV90LgoKPiArICAg IC8qIG1hcHBlZCByaW5nIHBhZ2VzIHByb3RlY3RlZCBieSBMMyAqLwo+ICsgICAgdWludDhfdCAq Km1mbl9tYXBwaW5nOwoKV2h5ICd1aW50OF90IConLCB3b3VsZG4ndCBpdCBiZSBiZXR0ZXIgdG8g anVzdCB1c2UgJ3ZvaWQgKicgaWYgaXQncyBhIG1hcHBpbmc/Cgo+ICsgICAgLyogbGlzdCBvZiBt Zm5zIG9mIGd1ZXN0IHJpbmcsIHByb3RlY3RlZCBieSBMMyAqLwo+ICsgICAgbWZuX3QgKm1mbnM7 Cj4gKyAgICAvKiBsaXN0IG9mIHN0cnVjdCBwZW5kaW5nX2VudCBmb3IgdGhpcyByaW5nLCBwcm90 ZWN0ZWQgYnkgTDMgKi8KPiArICAgIHN0cnVjdCBobGlzdF9oZWFkIHBlbmRpbmc7Cj4gKyAgICAv KiBudW1iZXIgb2YgcGVuZGluZyBlbnRyaWVzIHF1ZXVlZCBmb3IgdGhpcyByaW5nLCBwcm90ZWN0 ZWQgYnkgTDMgKi8KPiArICAgIHVpbnQzMl90IG5wZW5kaW5nOwo+ICt9Owo+ICsKPiArLyogRGF0 YSBhYm91dCBhIHNpbmdsZS1zZW5kZXIgcmluZywgaGVsZCBieSB0aGUgc2VuZGVyIChwYXJ0bmVy KSBkb21haW4gKi8KPiArc3RydWN0IGFyZ29fc2VuZF9pbmZvCj4gK3sKPiArICAgIC8qIG5leHQg bm9kZSBpbiB0aGUgaGFzaCwgcHJvdGVjdGVkIGJ5IExzZW5kICovCj4gKyAgICBzdHJ1Y3QgaGxp c3Rfbm9kZSBub2RlOwo+ICsgICAgLyogdGhpcyByaW5nJ3MgaWQsIHByb3RlY3RlZCBieSBMc2Vu ZCAqLwo+ICsgICAgc3RydWN0IGFyZ29fcmluZ19pZCBpZDsKPiArfTsKPiArCj4gKy8qIEEgc3Bh Y2UtYXZhaWxhYmxlIG5vdGlmaWNhdGlvbiB0aGF0IGlzIGF3YWl0aW5nIHN1ZmZpY2llbnQgc3Bh Y2UgKi8KPiArc3RydWN0IHBlbmRpbmdfZW50Cj4gK3sKPiArICAgIC8qIExpc3Qgbm9kZSB3aXRo aW4gYXJnb19yaW5nX2luZm8ncyBwZW5kaW5nIGxpc3QgKi8KPiArICAgIHN0cnVjdCBobGlzdF9u b2RlIG5vZGU7Cj4gKyAgICAvKgo+ICsgICAgICogTGlzdCBub2RlIHdpdGhpbiBhcmdvX2RvbWFp bidzIHdpbGRjYXJkX3BlbmRfbGlzdC4gT25seSB1c2VkIGlmIHRoZQo+ICsgICAgICogcmluZyBp cyBvbmUgd2l0aCBhIHdpbGRjYXJkIHBhcnRuZXIgKGllLiB0aGF0IGFueSBkb21haW4gbWF5IHNl bmQgdG8pCj4gKyAgICAgKiB0byBlbmFibGUgY2FuY2VsbGluZyBzaWduYWxzIG9uIHdpbGRjYXJk IHJpbmdzIG9uIGRvbWFpbiBkZXN0cm95Lgo+ICsgICAgICovCj4gKyAgICBzdHJ1Y3QgaGxpc3Rf bm9kZSB3aWxkY2FyZF9ub2RlOwo+ICsgICAgLyoKPiArICAgICAqIFBvaW50ZXIgdG8gdGhlIHJp bmdfaW5mbyB0aGF0IHRoaXMgZW50IHBlcnRhaW5zIHRvLiBVc2VkIHRvIGVuc3VyZSB0aGF0Cj4g KyAgICAgKiByaW5nX2luZm8tPm5wZW5kaW5nIGlzIGRlY3JlbWVudGVkIHdoZW4gZW50cyBmb3Ig d2lsZGNhcmQgcmluZ3MgYXJlCj4gKyAgICAgKiBjYW5jZWxsZWQgZm9yIGRvbWFpbiBkZXN0cm95 Lgo+ICsgICAgICogQ2F1dGlvbjogTXVzdCBob2xkIHRoZSBjb3JyZWN0IGxvY2tzIGJlZm9yZSBh Y2Nlc3NpbmcgcmluZ19pbmZvIHZpYSB0aGlzLgo+ICsgICAgICovCj4gKyAgICBzdHJ1Y3QgYXJn b19yaW5nX2luZm8gKnJpbmdfaW5mbzsKPiArICAgIC8qIGRvbWFpbiB0byBiZSBub3RpZmllZCB3 aGVuIHNwYWNlIGlzIGF2YWlsYWJsZSAqLwo+ICsgICAgZG9taWRfdCBkb21haW5faWQ7Cj4gKyAg ICB1aW50MTZfdCBwYWQ7CgpObyBuZWVkIGZvciB0aGUgcGFkIGluIGludGVybmFsIHN0cnVjdHVy ZXMuCgo+ICsgICAgLyogbWluaW11bSByaW5nIHNwYWNlIGF2YWlsYWJsZSB0aGF0IHRoaXMgc2ln bmFsIGlzIHdhaXRpbmcgdXBvbiAqLwo+ICsgICAgdWludDMyX3QgbGVuOwo+ICt9Owo+ICsKPiAr LyoKPiArICogVGhlIHZhbHVlIG9mIHRoZSBhcmdvIGVsZW1lbnQgaW4gYSBzdHJ1Y3QgZG9tYWlu IGlzCj4gKyAqIHByb3RlY3RlZCBieSB0aGUgZ2xvYmFsIGxvY2sgYXJnb19sb2NrOiBMMQo+ICsg Ki8KPiArI2RlZmluZSBBUkdPX0hUQUJMRV9TSVpFIDMyCj4gK3N0cnVjdCBhcmdvX2RvbWFpbgo+ ICt7Cj4gKyAgICAvKiBMMiAqLwo+ICsgICAgcndsb2NrX3QgbG9jazsKPiArICAgIC8qCj4gKyAg ICAgKiBIYXNoIHRhYmxlIG9mIGFyZ29fcmluZ19pbmZvIGFib3V0IHJpbmdzIHRoaXMgZG9tYWlu IGhhcyByZWdpc3RlcmVkLgo+ICsgICAgICogUHJvdGVjdGVkIGJ5IEwyLgo+ICsgICAgICovCj4g KyAgICBzdHJ1Y3QgaGxpc3RfaGVhZCByaW5nX2hhc2hbQVJHT19IVEFCTEVfU0laRV07Cj4gKyAg ICAvKiBDb3VudGVyIG9mIHJpbmdzIHJlZ2lzdGVyZWQgYnkgdGhpcyBkb21haW4uIFByb3RlY3Rl ZCBieSBMMi4gKi8KPiArICAgIHVpbnQzMl90IHJpbmdfY291bnQ7Cj4gKwo+ICsgICAgLyogTHNl bmQgKi8KPiArICAgIHNwaW5sb2NrX3Qgc2VuZF9sb2NrOwo+ICsgICAgLyoKPiArICAgICAqIEhh c2ggdGFibGUgb2YgYXJnb19zZW5kX2luZm8gYWJvdXQgcmluZ3Mgb3RoZXIgZG9tYWlucyBoYXZl IHJlZ2lzdGVyZWQKPiArICAgICAqIGZvciB0aGlzIGRvbWFpbiB0byBzZW5kIHRvLiBTaW5nbGUg cGFydG5lciwgbm9uLXdpbGRjYXJkIHJpbmdzLgo+ICsgICAgICogUHJvdGVjdGVkIGJ5IExzZW5k Lgo+ICsgICAgICovCj4gKyAgICBzdHJ1Y3QgaGxpc3RfaGVhZCBzZW5kX2hhc2hbQVJHT19IVEFC TEVfU0laRV07Cj4gKwo+ICsgICAgLyogTHdpbGRjYXJkICovCj4gKyAgICBzcGlubG9ja190IHdp bGRjYXJkX2xvY2s7Cj4gKyAgICAvKgo+ICsgICAgICogTGlzdCBvZiBwZW5kaW5nIHNwYWNlLWF2 YWlsYWJsZSBzaWduYWxzIGZvciB0aGlzIGRvbWFpbiBhYm91dCB3aWxkY2FyZAo+ICsgICAgICog cmluZ3MgcmVnaXN0ZXJlZCBieSBvdGhlciBkb21haW5zLiBQcm90ZWN0ZWQgYnkgTHdpbGRjYXJk Lgo+ICsgICAgICovCj4gKyAgICBzdHJ1Y3QgaGxpc3RfaGVhZCB3aWxkY2FyZF9wZW5kX2xpc3Q7 Cj4gK307Cj4gKwo+ICsvKgo+ICsgKiBMb2NraW5nIGlzIG9yZ2FuaXplZCBhcyBmb2xsb3dzOgo+ ICsgKgo+ICsgKiBUZXJtaW5vbG9neTogUig8bG9jaz4pIG1lYW5zIHRha2luZyBhIHJlYWQgbG9j ayBvbiB0aGUgc3BlY2lmaWVkIGxvY2s7Cj4gKyAqICAgICAgICAgICAgICBXKDxsb2NrPikgbWVh bnMgdGFraW5nIGEgd3JpdGUgbG9jayBvbiBpdC4KPiArICoKPiArICogTDEgOiBUaGUgZ2xvYmFs IGxvY2s6IGFyZ29fbG9jawo+ICsgKiBQcm90ZWN0cyB0aGUgYXJnbyBlbGVtZW50cyBvZiBhbGwg c3RydWN0IGRvbWFpbiAqZCBpbiB0aGUgc3lzdGVtLgo+ICsgKiBJdCBkb2VzIG5vdCBwcm90ZWN0 IGFueSBvZiB0aGUgZWxlbWVudHMgb2YgZC0+YXJnbywgb25seSB0aGVpcgo+ICsgKiBhZGRyZXNz ZXMuCj4gKyAqCj4gKyAqIEJ5IGV4dGVuc2lvbiBzaW5jZSB0aGUgZGVzdHJ1Y3Rpb24gb2YgYSBk b21haW4gd2l0aCBhIG5vbi1OVUxMCj4gKyAqIGQtPmFyZ28gd2lsbCBuZWVkIHRvIGZyZWUgdGhl IGQtPmFyZ28gcG9pbnRlciwgaG9sZGluZyBXKEwxKQo+ICsgKiBndWFyYW50ZWVzIHRoYXQgbm8g ZG9tYWlucyBwb2ludGVycyB0aGF0IGFyZ28gaXMgaW50ZXJlc3RlZCBpbgo+ICsgKiBiZWNvbWUg aW52YWxpZCB3aGlsc3QgdGhpcyBsb2NrIGlzIGhlbGQuCj4gKyAqLwo+ICsKPiArc3RhdGljIERF RklORV9SV0xPQ0soYXJnb19sb2NrKTsgLyogTDEgKi8KCllvdSBhbHNvIGFkZCBhbiBhcmdvX2xv Y2sgdG8gZWFjaCBkb21haW4gc3RydWN0IHdoaWNoIGRvZXNuJ3Qgc2VlbSB0bwpiZSBtZW50aW9u ZWQgaGVyZSBhdCBhbGwuIFNob3VsZG4ndCB0aGF0IGxvY2sgYmUgdGhlIG9uZSB0aGF0IHByb3Rl Y3RzCmQtPmFyZ28/IChpbnN0ZWFkIG9mIHRoaXMgZ2xvYmFsIGxvY2s/KQoKPiArCj4gKy8qCj4g KyAqIEwyIDogVGhlIHBlci1kb21haW4gcmluZyBoYXNoIGxvY2s6IGQtPmFyZ28tPmxvY2sKPiAr ICogSG9sZGluZyBhIHJlYWQgbG9jayBvbiBMMiBwcm90ZWN0cyB0aGUgcmluZyBoYXNoIHRhYmxl IGFuZAo+ICsgKiB0aGUgZWxlbWVudHMgaW4gdGhlIGhhc2hfdGFibGUgZC0+YXJnby0+cmluZ19o YXNoLCBhbmQKPiArICogdGhlIG5vZGUgYW5kIGlkIGZpZWxkcyBpbiBzdHJ1Y3QgYXJnb19yaW5n X2luZm8gaW4gdGhlCj4gKyAqIGhhc2ggdGFibGUuCj4gKyAqIEhvbGRpbmcgYSB3cml0ZSBsb2Nr IG9uIEwyIHByb3RlY3RzIGFsbCBvZiB0aGUgZWxlbWVudHMgb2YKPiArICogc3RydWN0IGFyZ29f cmluZ19pbmZvLgo+ICsgKgo+ICsgKiBUbyB0YWtlIEwyIHlvdSBtdXN0IGFscmVhZHkgaGF2ZSBS KEwxKS4gVyhMMSkgaW1wbGllcyBXKEwyKSBhbmQgTDMuCj4gKyAqCj4gKyAqIEwzIDogVGhlIHJp bmdpbmZvIGxvY2s6IGFyZ29fcmluZ19pbmZvICpyaW5naW5mbzsgcmluZ2luZm8tPmxvY2sKPiAr ICogUHJvdGVjdHMgYWxsIHRoZSBmaWVsZHMgd2l0aGluIHRoZSBhcmdvX3JpbmdfaW5mbywgYXNp ZGUgZnJvbSB0aGUgb25lcyB0aGF0Cj4gKyAqIEwyIGFscmVhZHkgcHJvdGVjdHM6IG5vZGUsIGlk LCBsb2NrLgo+ICsgKgo+ICsgKiBUbyBhcXVpcmUgTDMgeW91IG11c3QgYWxyZWFkeSBoYXZlIFIo TDIpLiBXKEwyKSBpbXBsaWVzIEwzLgo+ICsgKgo+ICsgKiBMc2VuZCA6IFRoZSBwZXItZG9tYWlu IHNpbmdsZS1zZW5kZXIgcGFydG5lciByaW5ncyBsb2NrOiBkLT5hcmdvLT5zZW5kX2xvY2sKPiAr ICogUHJvdGVjdHMgdGhlIHBlci1kb21haW4gc2VuZCBoYXNoIHRhYmxlIDogZC0+YXJnby0+c2Vu ZF9oYXNoCj4gKyAqIGFuZCB0aGUgZWxlbWVudHMgaW4gdGhlIGhhc2ggdGFibGUsIGFuZCB0aGUg bm9kZSBhbmQgaWQgZmllbGRzCj4gKyAqIGluIHN0cnVjdCBhcmdvX3NlbmRfaW5mbyBpbiB0aGUg aGFzaCB0YWJsZS4KPiArICoKPiArICogVG8gdGFrZSBMc2VuZCwgeW91IG11c3QgYWxyZWFkeSBo YXZlIFIoTDEpLiBXKEwxKSBpbXBsaWVzIExzZW5kLgo+ICsgKiBEbyBub3QgYXR0ZW1wdCB0byBh Y3F1aXJlIGEgTDIgb24gYW55IGRvbWFpbiBhZnRlciB0YWtpbmcgYW5kIHdoaWxlCj4gKyAqIGhv bGRpbmcgYSBMc2VuZCBsb2NrIC0tIGFjcXVpcmUgdGhlIEwyIChpZiBvbmUgaXMgbmVlZGVkKSBi ZWZvcmVoYW5kLgo+ICsgKgo+ICsgKiBMd2lsZGNhcmQgOiBUaGUgcGVyLWRvbWFpbiB3aWxkY2Fy ZCBwZW5kaW5nIGxpc3QgbG9jazogZC0+YXJnby0+d2lsZGNhcmRfbG9jawo+ICsgKiBQcm90ZWN0 cyB0aGUgcGVyLWRvbWFpbiBsaXN0IG9mIG91dHN0YW5kaW5nIHNpZ25hbHMgZm9yIHNwYWNlIGF2 YWlsYWJpbGl0eQo+ICsgKiBvbiB3aWxkY2FyZCByaW5ncy4KPiArICoKPiArICogVG8gdGFrZSBM d2lsZGNhcmQsIHlvdSBtdXN0IGFscmVhZHkgaGF2ZSBSKEwxKS4gVyhMMSkgaW1wbGllcyBMd2ls ZGNhcmQuCj4gKyAqIE5vIG90aGVyIGxvY2tzIGFyZSBhY3F1aXJlZCBhZnRlciBvYnRhaW5pbmcg THdpbGRjYXJkLgo+ICsgKi8KCklNTyBJIHRoaW5rIHRoZSBsb2NraW5nIGlzIG92ZXJseSBjb21w bGljYXRlZCwgYW5kIHRoZXJlJ3Mgbm8KcmVhc29uaW5nIHdoeSBzbyBtYW55IGxvY2tzIGFyZSBu ZWVkZWQuIFdvdWxkbid0IGl0IGJlIGVub3VnaCB0byBzdGFydAp3aXRoIGEgc2luZ2xlIGxvY2sg dGhhdCBwcm90ZWN0cyB0aGUgd2hvbGUgZC0+YXJnbyBleGlzdGVuY2UgYW5kCmNvbnRlbnRzPwoK SSB3b3VsZCBzdGFydCB3aXRoIGEgdmVyeSBzaW1wbGUgKGFzIHNpbXBsZSBhcyBwb3NzaWJsZSkg bG9ja2luZwpzdHJ1Y3R1cmUgYW5kIGdvIGltcHJvdmluZyBmcm9tIHRoZXJlIGlmIHRoZXJlIGFy ZSBwZXJmb3JtYW5jZQpib3R0bGVuZWNrcy4KCj4gIC8qIENoYW5nZSB0aGlzIHRvICNkZWZpbmUg QVJHT19ERUJVRyBoZXJlIHRvIGVuYWJsZSBtb3JlIGRlYnVnIG1lc3NhZ2VzICovCj4gICN1bmRl ZiBBUkdPX0RFQlVHCj4gQEAgLTI4LDEwICsxOTgsMjk5IEBACj4gICNkZWZpbmUgYXJnb19kcHJp bnRrKGZvcm1hdCwgLi4uICkgKCh2b2lkKTApCj4gICNlbmRpZgo+Cj4gK3N0YXRpYyB2b2lkCj4g K3JpbmdfdW5tYXAoc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm8pCj4gK3sKPiArICAg IHVuc2lnbmVkIGludCBpOwo+ICsKPiArICAgIGlmICggIXJpbmdfaW5mby0+bWZuX21hcHBpbmcg KQo+ICsgICAgICAgIHJldHVybjsKPiArCj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IHJpbmdfaW5m by0+bm1mbnM7IGkrKyApCj4gKyAgICB7Cj4gKyAgICAgICAgaWYgKCAhcmluZ19pbmZvLT5tZm5f bWFwcGluZ1tpXSApCj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAgIGlmICggcmlu Z19pbmZvLT5tZm5zICkKPiArICAgICAgICAgICAgYXJnb19kcHJpbnRrKFhFTkxPR19FUlIgImFy Z286IHVubWFwcGluZyBwYWdlICUiUFJJX21mbiIgZnJvbSAlcFxuIiwKPiArICAgICAgICAgICAg ICAgICAgICAgICAgIG1mbl94KHJpbmdfaW5mby0+bWZuc1tpXSksCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICByaW5nX2luZm8tPm1mbl9tYXBwaW5nW2ldKTsKPiArICAgICAgICB1bm1hcF9k b21haW5fcGFnZV9nbG9iYWwocmluZ19pbmZvLT5tZm5fbWFwcGluZ1tpXSk7Cj4gKyAgICAgICAg cmluZ19pbmZvLT5tZm5fbWFwcGluZ1tpXSA9IE5VTEw7Cj4gKyAgICB9CgpBcyBub3RlZCBpbiBh bm90aGVyIHBhdGNoLCBJIHdvdWxkIGNvbnNpZGVyIG1hcHBpbmcgdGhpcyBpbiBjb250aWd1b3Vz CnZpcnR1YWwgYWRkcmVzcyBzcGFjZSB1c2luZyB2bWFwLCBidXQgSSdtIG5vdCBnb2luZyB0byBp bnNpc3QuCgo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICt3aWxkY2FyZF9wZW5kaW5nX2xpc3Rf cmVtb3ZlKGRvbWlkX3QgZG9tYWluX2lkLCBzdHJ1Y3QgcGVuZGluZ19lbnQgKmVudCkKPiArewo+ ICsgICAgc3RydWN0IGRvbWFpbiAqZCA9IGdldF9kb21haW5fYnlfaWQoZG9tYWluX2lkKTsKCk5l d2xpbmUuCgo+ICsgICAgaWYgKCAhZCApCj4gKyAgICAgICAgcmV0dXJuOwo+ICsKPiArICAgIGlm ICggZC0+YXJnbyApCgpEb24ndCB5b3UgbmVlZCB0byBwaWNrIGQtPmFyZ29fbG9jayBoZXJlIHRv IHByZXZlbnQgZC0+YXJnbyBmcm9tIGJlaW5nCnJlbW92ZWQgdW5kZXIgeW91ciBmZWV0PwoKPiAr ICAgIHsKPiArICAgICAgICBzcGluX2xvY2soJmQtPmFyZ28tPndpbGRjYXJkX2xvY2spOwo+ICsg ICAgICAgIGhsaXN0X2RlbCgmZW50LT53aWxkY2FyZF9ub2RlKTsKPiArICAgICAgICBzcGluX3Vu bG9jaygmZC0+YXJnby0+d2lsZGNhcmRfbG9jayk7Cj4gKyAgICB9Cj4gKyAgICBwdXRfZG9tYWlu KGQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtwZW5kaW5nX3JlbW92ZV9hbGwoc3RydWN0 IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm8pCj4gK3sKPiArICAgIHN0cnVjdCBobGlzdF9ub2Rl ICpub2RlLCAqbmV4dDsKPiArICAgIHN0cnVjdCBwZW5kaW5nX2VudCAqZW50Owo+ICsKPiArICAg IGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50LCBub2RlLCBuZXh0LCAmcmluZ19pbmZvLT5w ZW5kaW5nLCBub2RlKQoKQXMgYSBzaWRlIG5vdGUsIGl0IG1pZ2h0IGJlIGludGVyZXN0aW5nIHRv IGludHJvZHVjZSBhIGhlbHBlciBsaWtlCmhsaXN0X2ZpcnN0X2VudHJ5X29yX251bGwsIHRoYXQg d291bGQgcmVtb3ZlIHRoZSBuZWVkIHRvIGhhdmUgYW4gZXh0cmEKKm5leHQgZWxlbWVudCwgYW5k IHdvdWxkIGJlIHRoZSBtb3JlIG5hdHVyYWwgd2F5IHRvIGRyYWluIGEgaGxpc3QKKHNlZWluZyB0 aGF0IHlvdSBoYXZlIHRoZSBzYW1lIHBhdHRlcm4gaW4Kd2lsZGNhcmRfcmluZ3NfcGVuZGluZ19y ZW1vdmUpLgoKPiArICAgIHsKPiArICAgICAgICBpZiAoIHJpbmdfaW5mby0+aWQucGFydG5lcl9p ZCA9PSBYRU5fQVJHT19ET01JRF9BTlkgKQo+ICsgICAgICAgICAgICB3aWxkY2FyZF9wZW5kaW5n X2xpc3RfcmVtb3ZlKGVudC0+ZG9tYWluX2lkLCBlbnQpOwo+ICsgICAgICAgIGhsaXN0X2RlbCgm ZW50LT5ub2RlKTsKPiArICAgICAgICB4ZnJlZShlbnQpOwo+ICsgICAgfQo+ICsgICAgcmluZ19p bmZvLT5ucGVuZGluZyA9IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3dpbGRjYXJkX3Jp bmdzX3BlbmRpbmdfcmVtb3ZlKHN0cnVjdCBkb21haW4gKmQpCj4gK3sKPiArICAgIHN0cnVjdCBo bGlzdF9ub2RlICpub2RlLCAqbmV4dDsKPiArICAgIHN0cnVjdCBwZW5kaW5nX2VudCAqZW50Owo+ ICsKPiArICAgIEFTU0VSVChyd19pc193cml0ZV9sb2NrZWQoJmFyZ29fbG9jaykpOwo+ICsKPiAr ICAgIGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50LCBub2RlLCBuZXh0LCAmZC0+YXJnby0+ d2lsZGNhcmRfcGVuZF9saXN0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub2Rl KQo+ICsgICAgewo+ICsgICAgICAgIGhsaXN0X2RlbCgmZW50LT5ub2RlKTsKPiArICAgICAgICBl bnQtPnJpbmdfaW5mby0+bnBlbmRpbmctLTsKPiArICAgICAgICBobGlzdF9kZWwoJmVudC0+d2ls ZGNhcmRfbm9kZSk7Cj4gKyAgICAgICAgeGZyZWUoZW50KTsKPiArICAgIH0KPiArfQo+ICsKPiAr c3RhdGljIHZvaWQKPiArcmluZ19yZW1vdmVfbWZucyhjb25zdCBzdHJ1Y3QgZG9tYWluICpkLCBz dHJ1Y3QgYXJnb19yaW5nX2luZm8gKnJpbmdfaW5mbykKPiArewo+ICsgICAgdW5zaWduZWQgaW50 IGk7Cj4gKwo+ICsgICAgQVNTRVJUKHJ3X2lzX3dyaXRlX2xvY2tlZCgmZC0+YXJnby0+bG9jaykg fHwKPiArICAgICAgICAgICByd19pc193cml0ZV9sb2NrZWQoJmFyZ29fbG9jaykpOwoKSSB0aGlu ayB0aGUgYWJvdmUgcmVxdWlyZXMgYSBjb21tZW50IG9mIHdoeSB0d28gZGlmZmVyZW50IGxvY2tz IGFyZQp1c2VkIHRvIHByb3RlY3QgdGhlIHJpbmcgbWZucywgYW5kIHdoeSBqdXN0IGhhdmluZyBv bmUgb2YgdGhlbSBsb2NrZWQKaXMgZW5vdWdoLgoKPiArCj4gKyAgICBpZiAoICFyaW5nX2luZm8t Pm1mbnMgKQo+ICsgICAgICAgIHJldHVybjsKPiArCj4gKyAgICBpZiAoICFyaW5nX2luZm8tPm1m bl9tYXBwaW5nICkKPiArICAgIHsKPiArICAgICAgICBBU1NFUlRfVU5SRUFDSEFCTEUoKTsKPiAr ICAgICAgICByZXR1cm47Cj4gKyAgICB9Cj4gKwo+ICsgICAgcmluZ191bm1hcChyaW5nX2luZm8p Owo+ICsKPiArICAgIGZvciAoIGkgPSAwOyBpIDwgcmluZ19pbmZvLT5ubWZuczsgaSsrICkKPiAr ICAgICAgICBpZiAoICFtZm5fZXEocmluZ19pbmZvLT5tZm5zW2ldLCBJTlZBTElEX01GTikgKQo+ ICsgICAgICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShtZm5fdG9fcGFnZShyaW5nX2luZm8tPm1m bnNbaV0pKTsKPiArCj4gKyAgICB4ZnJlZShyaW5nX2luZm8tPm1mbnMpOwo+ICsgICAgcmluZ19p bmZvLT5tZm5zID0gTlVMTDsKClhlbiBoYXMgYSBoYW5kbHkgbWFjcm8gZm9yIHRoaXMsIFhGUkVF LiBUaGF0IHdvdWxkIGZyZWUgdGhlIG1lbW9yeSBhbmQKYXNzaWduIHRoZSBwb2ludGVyIHRvIE5V TEwuCgo+ICsgICAgcmluZ19pbmZvLT5ucGFnZSA9IDA7Cj4gKyAgICB4ZnJlZShyaW5nX2luZm8t Pm1mbl9tYXBwaW5nKTsKPiArICAgIHJpbmdfaW5mby0+bWZuX21hcHBpbmcgPSBOVUxMOwo+ICsg ICAgcmluZ19pbmZvLT5ubWZucyA9IDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK3Jpbmdf cmVtb3ZlX2luZm8oc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5n X2luZm8pCgpJIHRoaW5rIHRoZSBkb21haW4gcGFyYW1ldGVyIGNhbiBiZSBjb25zdGlmeWVkIGhl cmUsIHNpbmNlIGl0J3Mgb25seQp1c2VkIGJ5IHJpbmdfcmVtb3ZlX21mbnNuZCB0aGF0IGZ1bmN0 aW9uIGFscmVhZHkgZXhwZWN0cyBhIGNvbnN0CmRvbWFpbiBzdHJ1Y3QuCgo+ICt7Cj4gKyAgICBB U1NFUlQocndfaXNfd3JpdGVfbG9ja2VkKCZkLT5hcmdvLT5sb2NrKSB8fAo+ICsgICAgICAgICAg IHJ3X2lzX3dyaXRlX2xvY2tlZCgmYXJnb19sb2NrKSk7Cj4gKwo+ICsgICAgcGVuZGluZ19yZW1v dmVfYWxsKHJpbmdfaW5mbyk7Cj4gKyAgICBobGlzdF9kZWwoJnJpbmdfaW5mby0+bm9kZSk7Cj4g KyAgICByaW5nX3JlbW92ZV9tZm5zKGQsIHJpbmdfaW5mbyk7Cj4gKyAgICB4ZnJlZShyaW5nX2lu Zm8pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZAo+ICtkb21haW5fcmluZ3NfcmVtb3ZlX2FsbChz dHJ1Y3QgZG9tYWluICpkKQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBpbnQgaTsKPiArCj4gKyAgICBm b3IgKCBpID0gMDsgaSA8IEFSR09fSFRBQkxFX1NJWkU7ICsraSApCj4gKyAgICB7Cj4gKyAgICAg ICAgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpuZXh0Owo+ICsgICAgICAgIHN0cnVjdCBhcmdv X3JpbmdfaW5mbyAqcmluZ19pbmZvOwo+ICsKPiArICAgICAgICBobGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKHJpbmdfaW5mbywgbm9kZSwgbmV4dCwKPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZkLT5hcmdvLT5yaW5nX2hhc2hbaV0sIG5vZGUpCj4gKyAgICAgICAgICAgIHJp bmdfcmVtb3ZlX2luZm8oZCwgcmluZ19pbmZvKTsKPiArICAgIH0KPiArICAgIGQtPmFyZ28tPnJp bmdfY291bnQgPSAwOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBUZWFyIGRvd24gYWxsIHJpbmdzIG9m IG90aGVyIGRvbWFpbnMgd2hlcmUgc3JjX2QgZG9tYWluIGlzIHRoZSBwYXJ0bmVyLgo+ICsgKiAo aWUuIGl0IGlzIHRoZSBzaW5nbGUgZG9tYWluIHRoYXQgY2FuIHNlbmQgdG8gdGhvc2UgcmluZ3Mu KQo+ICsgKiBUaGlzIHdpbGwgYWxzbyBjYW5jZWwgYW55IHBlbmRpbmcgbm90aWZpY2F0aW9ucyBh Ym91dCB0aG9zZSByaW5ncy4KPiArICovCj4gK3N0YXRpYyB2b2lkCj4gK3BhcnRuZXJfcmluZ3Nf cmVtb3ZlKHN0cnVjdCBkb21haW4gKnNyY19kKQo+ICt7Cj4gKyAgICB1bnNpZ25lZCBpbnQgaTsK PiArCj4gKyAgICBBU1NFUlQocndfaXNfd3JpdGVfbG9ja2VkKCZhcmdvX2xvY2spKTsKPiArCj4g KyAgICBmb3IgKCBpID0gMDsgaSA8IEFSR09fSFRBQkxFX1NJWkU7ICsraSApCj4gKyAgICB7Cj4g KyAgICAgICAgc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpuZXh0Owo+ICsgICAgICAgIHN0cnVj dCBhcmdvX3NlbmRfaW5mbyAqc2VuZF9pbmZvOwo+ICsKPiArICAgICAgICBobGlzdF9mb3JfZWFj aF9lbnRyeV9zYWZlKHNlbmRfaW5mbywgbm9kZSwgbmV4dCwKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZzcmNfZC0+YXJnby0+c2VuZF9oYXNoW2ldLCBub2RlKQo+ICsgICAg ICAgIHsKPiArICAgICAgICAgICAgc3RydWN0IGFyZ29fcmluZ19pbmZvICpyaW5nX2luZm87Cj4g KyAgICAgICAgICAgIHN0cnVjdCBkb21haW4gKmRzdF9kOwo+ICsKPiArICAgICAgICAgICAgZHN0 X2QgPSBnZXRfZG9tYWluX2J5X2lkKHNlbmRfaW5mby0+aWQuZG9tYWluX2lkKTsKPiArICAgICAg ICAgICAgaWYgKCBkc3RfZCApCj4gKyAgICAgICAgICAgIHsKPiArICAgICAgICAgICAgICAgIHJp bmdfaW5mbyA9IHJpbmdfZmluZF9pbmZvKGRzdF9kLCAmc2VuZF9pbmZvLT5pZCk7Cj4gKyAgICAg ICAgICAgICAgICBpZiAoIHJpbmdfaW5mbyApCj4gKyAgICAgICAgICAgICAgICB7Cj4gKyAgICAg ICAgICAgICAgICAgICAgcmluZ19yZW1vdmVfaW5mbyhkc3RfZCwgcmluZ19pbmZvKTsKPiArICAg ICAgICAgICAgICAgICAgICBkc3RfZC0+YXJnby0+cmluZ19jb3VudC0tOwo+ICsgICAgICAgICAg ICAgICAgfQo+ICsKPiArICAgICAgICAgICAgICAgIHB1dF9kb21haW4oZHN0X2QpOwo+ICsgICAg ICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBobGlzdF9kZWwoJnNlbmRfaW5mby0+bm9kZSk7 Cj4gKyAgICAgICAgICAgIHhmcmVlKHNlbmRfaW5mbyk7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ ICt9Cj4gKwo+ICBsb25nCj4gIGRvX2FyZ29fb3AodW5zaWduZWQgaW50IGNtZCwgWEVOX0dVRVNU X0hBTkRMRV9QQVJBTSh2b2lkKSBhcmcxLAo+ICAgICAgICAgICAgIFhFTl9HVUVTVF9IQU5ETEVf UEFSQU0odm9pZCkgYXJnMiwgdW5zaWduZWQgbG9uZyBhcmczLAo+ICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcgYXJnNCkKPiAgewo+IC0gICAgcmV0dXJuIC1FTk9TWVM7Cj4gKyAgICBzdHJ1Y3Qg ZG9tYWluICpjdXJyZCA9IGN1cnJlbnQtPmRvbWFpbjsKPiArICAgIGxvbmcgcmMgPSAtRUZBVUxU Owo+ICsKPiArICAgIGFyZ29fZHByaW50aygiLT5kb19hcmdvX29wKCV1LCVwLCVwLCVkLCVkKVxu IiwgY21kLAo+ICsgICAgICAgICAgICAgICAgICh2b2lkICopYXJnMS5wLCAodm9pZCAqKWFyZzIu cCwgKGludCkgYXJnMywgKGludCkgYXJnNCk7Cj4gKwo+ICsgICAgaWYgKCB1bmxpa2VseSghb3B0 X2FyZ29fZW5hYmxlZCkgKQo+ICsgICAgewo+ICsgICAgICAgIHJjID0gLUVPUE5PVFNVUFA7Cj4g KyAgICAgICAgcmV0dXJuIHJjOwoKV2h5IG5vdCBqdXN0ICdyZXR1cm4gLUVPUE5PVFNVUFA7Jz8K Cj4gKyAgICB9Cj4gKwo+ICsgICAgZG9tYWluX2xvY2soY3VycmQpOwo+ICsKPiArICAgIHN3aXRj aCAoY21kKQo+ICsgICAgewo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICByYyA9IC1FT1BOT1RT VVBQOwo+ICsgICAgICAgIGJyZWFrOwo+ICsgICAgfQo+ICsKPiArICAgIGRvbWFpbl91bmxvY2so Y3VycmQpOwo+ICsKPiArICAgIGFyZ29fZHByaW50aygiPC1kb19hcmdvX29wKCV1KT0lbGRcbiIs IGNtZCwgcmMpOwo+ICsKPiArICAgIHJldHVybiByYzsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQK PiArYXJnb19kb21haW5faW5pdChzdHJ1Y3QgYXJnb19kb21haW4gKmFyZ28pCj4gK3sKPiArICAg IHVuc2lnbmVkIGludCBpOwo+ICsKPiArICAgIHJ3bG9ja19pbml0KCZhcmdvLT5sb2NrKTsKPiAr ICAgIHNwaW5fbG9ja19pbml0KCZhcmdvLT5zZW5kX2xvY2spOwo+ICsgICAgc3Bpbl9sb2NrX2lu aXQoJmFyZ28tPndpbGRjYXJkX2xvY2spOwo+ICsgICAgYXJnby0+cmluZ19jb3VudCA9IDA7Cj4g Kwo+ICsgICAgZm9yICggaSA9IDA7IGkgPCBBUkdPX0hUQUJMRV9TSVpFOyArK2kgKQo+ICsgICAg ewo+ICsgICAgICAgIElOSVRfSExJU1RfSEVBRCgmYXJnby0+cmluZ19oYXNoW2ldKTsKPiArICAg ICAgICBJTklUX0hMSVNUX0hFQUQoJmFyZ28tPnNlbmRfaGFzaFtpXSk7Cj4gKyAgICB9Cj4gKyAg ICBJTklUX0hMSVNUX0hFQUQoJmFyZ28tPndpbGRjYXJkX3BlbmRfbGlzdCk7Cj4gK30KPiArCj4g K2ludAo+ICthcmdvX2luaXQoc3RydWN0IGRvbWFpbiAqZCkKPiArewo+ICsgICAgc3RydWN0IGFy Z29fZG9tYWluICphcmdvOwo+ICsKPiArICAgIGlmICggIW9wdF9hcmdvX2VuYWJsZWQgKQo+ICsg ICAgewo+ICsgICAgICAgIGFyZ29fZHByaW50aygiYXJnbyBkaXNhYmxlZCwgZG9taWQ6ICVkXG4i LCBkLT5kb21haW5faWQpOwo+ICsgICAgICAgIHJldHVybiAwOwo+ICsgICAgfQo+ICsKPiArICAg IGFyZ29fZHByaW50aygiaW5pdDogZG9taWQ6ICVkXG4iLCBkLT5kb21haW5faWQpOwo+ICsKPiAr ICAgIGFyZ28gPSB4bWFsbG9jKHN0cnVjdCBhcmdvX2RvbWFpbik7Cj4gKyAgICBpZiAoICFhcmdv ICkKPiArICAgICAgICByZXR1cm4gLUVOT01FTTsKPiArCj4gKyAgICB3cml0ZV9sb2NrKCZhcmdv X2xvY2spOwo+ICsKPiArICAgIGFyZ29fZG9tYWluX2luaXQoYXJnbyk7Cj4gKwo+ICsgICAgZC0+ YXJnbyA9IGFyZ287CgpXaGVyZSdzIHRoZSBkLT5hcmdvX2xvY2sgaW5pdGlhbGl6YXRpb24/Cgo+ ICsKPiArICAgIHdyaXRlX3VubG9jaygmYXJnb19sb2NrKTsKPiArCj4gKyAgICByZXR1cm4gMDsK PiArfQo+ICsKPiArdm9pZAo+ICthcmdvX2Rlc3Ryb3koc3RydWN0IGRvbWFpbiAqZCkKPiArewo+ ICsgICAgQlVHX09OKCFkLT5pc19keWluZyk7Cj4gKwo+ICsgICAgd3JpdGVfbG9jaygmYXJnb19s b2NrKTsKPiArCj4gKyAgICBhcmdvX2RwcmludGsoImRlc3Ryb3k6IGRvbWlkICVkIGQtPmFyZ289 JXBcbiIsIGQtPmRvbWFpbl9pZCwgZC0+YXJnbyk7Cj4gKwo+ICsgICAgaWYgKCBkLT5hcmdvICkK PiArICAgIHsKPiArICAgICAgICBkb21haW5fcmluZ3NfcmVtb3ZlX2FsbChkKTsKPiArICAgICAg ICBwYXJ0bmVyX3JpbmdzX3JlbW92ZShkKTsKPiArICAgICAgICB3aWxkY2FyZF9yaW5nc19wZW5k aW5nX3JlbW92ZShkKTsKPiArICAgICAgICB4ZnJlZShkLT5hcmdvKTsKPiArICAgICAgICBkLT5h cmdvID0gTlVMTDsKPiArICAgIH0KPiArICAgIHdyaXRlX3VubG9jaygmYXJnb19sb2NrKTsKPiAr fQo+ICsKPiArdm9pZAo+ICthcmdvX3NvZnRfcmVzZXQoc3RydWN0IGRvbWFpbiAqZCkKPiArewo+ ICsgICAgd3JpdGVfbG9jaygmYXJnb19sb2NrKTsKPiArCj4gKyAgICBhcmdvX2RwcmludGsoInNv ZnQgcmVzZXQgZD0lZCBkLT5hcmdvPSVwXG4iLCBkLT5kb21haW5faWQsIGQtPmFyZ28pOwo+ICsK PiArICAgIGlmICggZC0+YXJnbyApCj4gKyAgICB7Cj4gKyAgICAgICAgZG9tYWluX3JpbmdzX3Jl bW92ZV9hbGwoZCk7Cj4gKyAgICAgICAgcGFydG5lcl9yaW5nc19yZW1vdmUoZCk7Cj4gKyAgICAg ICAgd2lsZGNhcmRfcmluZ3NfcGVuZGluZ19yZW1vdmUoZCk7Cj4gKwo+ICsgICAgICAgIGlmICgg IW9wdF9hcmdvX2VuYWJsZWQgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgeGZyZWUoZC0+ YXJnbyk7Cj4gKyAgICAgICAgICAgIGQtPmFyZ28gPSBOVUxMOwoKQ2FuIG9wdF9hcmdvX2VuYWJs ZWQgY2hhbmdlIGR1cmluZyBydW50aW1lPwoKPiArICAgICAgICB9Cj4gKyAgICAgICAgZWxzZQo+ ICsgICAgICAgICAgICBhcmdvX2RvbWFpbl9pbml0KGQtPmFyZ28pOwo+ICsgICAgfQo+ICsKPiAr ICAgIHdyaXRlX3VubG9jaygmYXJnb19sb2NrKTsKPiAgfQo+IGRpZmYgLS1naXQgYS94ZW4vY29t bW9uL2RvbWFpbi5jIGIveGVuL2NvbW1vbi9kb21haW4uYwo+IGluZGV4IGM2MjNkYWUuLjk1OTY4 NDAgMTAwNjQ0Cj4gLS0tIGEveGVuL2NvbW1vbi9kb21haW4uYwo+ICsrKyBiL3hlbi9jb21tb24v ZG9tYWluLmMKPiBAQCAtMzIsNiArMzIsNyBAQAo+ICAjaW5jbHVkZSA8eGVuL2dyYW50X3RhYmxl Lmg+Cj4gICNpbmNsdWRlIDx4ZW4veGVub3Byb2YuaD4KPiAgI2luY2x1ZGUgPHhlbi9pcnEuaD4K PiArI2luY2x1ZGUgPHhlbi9hcmdvLmg+Cj4gICNpbmNsdWRlIDxhc20vZGVidWdnZXIuaD4KPiAg I2luY2x1ZGUgPGFzbS9wMm0uaD4KPiAgI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KPiBAQCAt Mjc3LDYgKzI3OCwxMCBAQCBzdGF0aWMgdm9pZCBfZG9tYWluX2Rlc3Ryb3koc3RydWN0IGRvbWFp biAqZCkKPgo+ICAgICAgeGZyZWUoZC0+cGJ1Zik7Cj4KPiArI2lmZGVmIENPTkZJR19BUkdPCj4g KyAgICBhcmdvX2Rlc3Ryb3koZCk7Cj4gKyNlbmRpZgoKSW5zdGVhZCBvZiBhZGRpbmcgc3VjaCBp ZmRlZnMgeW91IGNvdWxkIHByb3ZpZGUgZHVtbXkgYXJnb19kZXN0cm95CmlubGluZSBmdW5jdGlv bnMgaW4gYXJnby5oIHdoZW4gQ09ORklHX0FSR08gaXMgbm90IHNldC4KClRoYW5rcywgUm9nZXIu CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2 ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xp c3RzLnhlbnByb2plY3Qub3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs