From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4005289B33 for ; Wed, 24 Nov 2021 19:07:37 +0000 (UTC) From: "Vudum, Lakshminarayana" Date: Wed, 24 Nov 2021 19:07:32 +0000 Message-ID: <34e991e1361646c686c318c8a995b888@intel.com> References: <20211119150024.2701531-1-Rodrigo.Siqueira@amd.com> In-Reply-To: Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t] tests/amdgpu: Add test for AMD DP DSC List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: Rodrigo Siqueira Jordao Cc: Eryk Brol , "igt-dev@lists.freedesktop.org" , Mikita Lipski List-ID: Q2FuIHlvdSBwb3N0IHRoZSBDaSBmYWlsdXJlIGxpbmsgaGVyZT8gSSBjYW4gY2hlY2sgaWYgd2Ug aGF2ZSBhbiBleGlzdGluZyBidWcgZm9yIHRoZSBmYWlsdXJlIGFscmVhZHkgb3Igbm90Lg0KDQpM YWtzaG1pLg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogUm9kcmlnbyBTaXF1 ZWlyYSBKb3JkYW8gPHJqb3Jkcmlnb0BhbWQuY29tPiANClNlbnQ6IFdlZG5lc2RheSwgTm92ZW1i ZXIgMjQsIDIwMjEgNzozNCBBTQ0KVG86IFZ1ZHVtLCBMYWtzaG1pbmFyYXlhbmEgPGxha3NobWlu YXJheWFuYS52dWR1bUBpbnRlbC5jb20+DQpDYzogTWlraXRhIExpcHNraSA8bWlraXRhLmxpcHNr aUBhbWQuY29tPjsgRXJ5ayBCcm9sIDxlcnlrLmJyb2xAYW1kLmNvbT47IFJvZHJpZ28gU2lxdWVp cmEgPFJvZHJpZ28uU2lxdWVpcmFAYW1kLmNvbT47IGlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Au b3JnOyBoYXJyeS53ZW50bGFuZEBhbWQuY29tOyBOaWNob2xhcy5DaG9pQGFtZC5jb207IG1hcmt5 YWNvdWJAY2hyb21pdW0ub3JnDQpTdWJqZWN0OiBSZTogW2lndC1kZXZdIFtQQVRDSCBpLWctdF0g dGVzdHMvYW1kZ3B1OiBBZGQgdGVzdCBmb3IgQU1EIERQIERTQw0KDQpIaSBMYWtzaG1pLA0KDQpJ IG5vdGljZWQgYSBDSSBmYWlsdXJlIGluIHRoaXMgcGF0Y2ggd2hpY2ggaXMgZm9jdXNlZCBvbiBB TUQsIGV4Y2VwdCBmb3IgdGhlIGJlbG93IGNoYW5nZSBpbiB0aGUgaWd0X2ttcy5oOg0KDQpkaWZm IC0tZ2l0IGEvbGliL2lndF9rbXMuaCBiL2xpYi9pZ3Rfa21zLmggaW5kZXggZTllY2QyMWUuLjVj N2Q3NDgxIDEwMDY0NA0KLS0tIGEvbGliL2lndF9rbXMuaA0KKysrIGIvbGliL2lndF9rbXMuaA0K QEAgLTEyNSw2ICsxMjUsNyBAQCAgZW51bSBpZ3RfYXRvbWljX2NydGNfcHJvcGVydGllcyB7DQog ICAgICAgICBJR1RfQ1JUQ19BQ1RJVkUsDQogICAgICAgICBJR1RfQ1JUQ19PVVRfRkVOQ0VfUFRS LA0KICAgICAgICAgSUdUX0NSVENfVlJSX0VOQUJMRUQsDQorICAgICAgIElHVF9DUlRDX0RTQ19T TElDRV9IRUlHSFQsDQogICAgICAgICBJR1RfTlVNX0NSVENfUFJPUFMNCiAgfTsNCg0KIEZyb20g dGhlIENJIHJlc3VsdHMsIEknbSBub3Qgc3VyZSBpZiB0aGlzIGNoYW5nZSBjYXVzZWQgdGhlIG90 aGVyIGZhaWx1cmVzLCBhbmQgc2luY2Ugd2Ugc2F3IHNvbWUgZmFsc2UgcG9zaXRpdmVzIGluIHRo ZSBBTUQgdGVzdHMgbGFzdCB3ZWVrLCBpcyBpdCBwb3NzaWJsZSB0byB0cmlnZ2VyIHRoZSBDSSB0 ZXN0IGZvciB0aGlzIHBhdGNoIGFnYWluPw0KDQpodHRwczovL3BhdGNod29yay5mcmVlZGVza3Rv cC5vcmcvcGF0Y2gvNDYzNjU1Lz9zZXJpZXM9OTcxMDgmcmV2PTENCg0KVGhhbmtzDQpTaXF1ZWly YQ0KDQpPbiAyMDIxLTExLTE5IDEwOjAwIGEubS4sIFJvZHJpZ28gU2lxdWVpcmEgd3JvdGU6DQo+ IEZyb206IEVyeWsgQnJvbCA8ZXJ5ay5icm9sQGFtZC5jb20+DQo+IA0KPiBUaGlzIGNvbW1pdCBp bnRyb2R1Y2VzIGEgRFAgRFNDIHRlc3QgdGhhdCBjaGVja3M6DQo+IA0KPiAqIEZvcmNlcyBEU0Mg b24vb2ZmIGFuZCBlbnN1cmVzIGl0IGlzIHJlc2V0IHByb3Blcmx5DQo+ICogQ2hlY2sgRFNDIHNs aWNlIGhlaWdodCBwcm9wZXJ0eQ0KPiAqIFZlcmlmeSB2YXJpb3VzIERTQyBzbGljZSBkaW1lbnNp b25zDQo+ICogVGVzdHMgdmFyaW91cyBjb21iaW5hdGlvbnMgb2YgbGlua19yYXRlICsgbGFuZV9j b3VudCBhbmQgbG9ncyBpZiBEU0MNCj4gICAgZW5hYmxlZC9kaXNhYmxlZCBUZXN0cyBkaWZmZXJl bnQgYnBjIHNldHRpbmdzIGFuZCBsb2dzIGlmIERTQyBpcw0KPiAgICBlbmFibGVkL2Rpc2FibGVk DQo+IA0KPiBDYzogSGFycnkgV2VudGxhbmQgPGhhcnJ5LndlbnRsYW5kQGFtZC5jb20+DQo+IENj OiBOaWNob2xhcyBDaG9pIDxOaWNob2xhcy5DaG9pQGFtZC5jb20+DQo+IENjOiBNYXJrIFlhY291 YiA8bWFya3lhY291YkBjaHJvbWl1bS5vcmc+DQo+IFNpZ25lZC1vZmYtYnk6IE1pa2l0YSBMaXBz a2kgPG1pa2l0YS5saXBza2lAYW1kLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogRXJ5ayBCcm9sIDxl cnlrLmJyb2xAYW1kLmNvbT4NCj4gLS0tDQo+ICAgbGliL2lndF9hbWQuYyAgICAgICAgICAgICB8 IDQ5NCArKysrKysrKysrKysrKysrKysrKysrKysrLS0NCj4gICBsaWIvaWd0X2FtZC5oICAgICAg ICAgICAgIHwgIDM1ICsrDQo+ICAgbGliL2lndF9rbXMuaCAgICAgICAgICAgICB8ICAgMSArDQo+ ICAgdGVzdHMvYW1kZ3B1L2FtZF9kcF9kc2MuYyB8IDY4NSArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKw0KPiAgIHRlc3RzL2FtZGdwdS9tZXNvbi5idWlsZCAgfCAgIDEgKw0K PiAgIDUgZmlsZXMgY2hhbmdlZCwgMTE5NCBpbnNlcnRpb25zKCspLCAyMiBkZWxldGlvbnMoLSkN Cj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvYW1kZ3B1L2FtZF9kcF9kc2MuYw0KPiANCj4g ZGlmZiAtLWdpdCBhL2xpYi9pZ3RfYW1kLmMgYi9saWIvaWd0X2FtZC5jIGluZGV4IGYxYmZiNDIx Li40YmNmZDU5NCANCj4gMTAwNjQ0DQo+IC0tLSBhL2xpYi9pZ3RfYW1kLmMNCj4gKysrIGIvbGli L2lndF9hbWQuYw0KPiBAQCAtMjUxLDExICsyNTEsMTEgQEAgYm9vbCBpZ3RfYW1kX2lzX3RpbGVk KHVpbnQ2NF90IG1vZGlmaWVyKQ0KPiAgIH0NCj4gICANCj4gICAvKioNCj4gLSAqIGlndF9hbWRf b3V0cHV0X2hhc19ocGQ6IGNoZWNrIGlmIGNvbm5lY3RvciBoYXMgSFBEIGRlYnVnZnMgZW50cnkN Cj4gKyAqIGlndF9hbWRfb3V0cHV0X2hhc19kc2M6IGNoZWNrIGlmIGNvbm5lY3RvciBoYXMgZHNj IGRlYnVnZnMgZW50cnkNCj4gICAgKiBAZHJtX2ZkOiBEUk0gZmlsZSBkZXNjcmlwdG9yDQo+ICAg ICogQGNvbm5lY3Rvcl9uYW1lOiBUaGUgY29ubmVjdG9yJ3MgbmFtZSwgb24gd2hpY2ggd2UncmUg cmVhZGluZyB0aGUgc3RhdHVzDQo+ICAgICovDQo+IC1zdGF0aWMgYm9vbCBpZ3RfYW1kX291dHB1 dF9oYXNfaHBkKGludCBkcm1fZmQsIGNoYXIgKmNvbm5lY3Rvcl9uYW1lKQ0KPiArc3RhdGljIGJv b2wgaWd0X2FtZF9vdXRwdXRfaGFzX2RzYyhpbnQgZHJtX2ZkLCBjaGFyICpjb25uZWN0b3JfbmFt ZSkNCj4gICB7DQo+ICAgCWludCBmZDsNCj4gICAJaW50IHJlczsNCj4gQEAgLTI2Nyw5ICsyNjcs OSBAQCBzdGF0aWMgYm9vbCBpZ3RfYW1kX291dHB1dF9oYXNfaHBkKGludCBkcm1fZmQsIGNoYXIg KmNvbm5lY3Rvcl9uYW1lKQ0KPiAgIAkJcmV0dXJuIGZhbHNlOw0KPiAgIAl9DQo+ICAgDQo+IC0J cmVzID0gZnN0YXRhdChmZCwgREVCVUdGU19IUERfVFJJR0dFUiwgJnN0YXQsIDApOw0KPiArCXJl cyA9IGZzdGF0YXQoZmQsIERFQlVHRlNfRFNDX0NMT0NLX0VOICwgJnN0YXQsIDApOw0KPiAgIAlp ZiAocmVzICE9IDApIHsNCj4gLQkJaWd0X2luZm8oIiVzIGRlYnVnZnMgbm90IHN1cHBvcnRlZFxu IiwgREVCVUdGU19IUERfVFJJR0dFUik7DQo+ICsJCWlndF9pbmZvKCIlcyBkZWJ1Z2ZzIG5vdCBz dXBwb3J0ZWRcbiIsIERFQlVHRlNfRFNDX0NMT0NLX0VOKTsNCj4gICAJCWNsb3NlKGZkKTsNCj4g ICAJCXJldHVybiBmYWxzZTsNCj4gICAJfQ0KPiBAQCAtMjc5LDQ5ICsyNzksNDk5IEBAIHN0YXRp YyBib29sIGlndF9hbWRfb3V0cHV0X2hhc19ocGQoaW50IGRybV9mZCwgY2hhciAqY29ubmVjdG9y X25hbWUpDQo+ICAgfQ0KPiAgIA0KPiAgIC8qKg0KPiAtICogaWd0X2FtZF9yZXF1aXJlX2hwZDog Q2hlY2tzIGlmIGNvbm5lY3RvcnMgaGF2ZSBIUEQgZGVidWdmcw0KPiArICogaXNfZHBfZHNjX3N1 cHBvcnRlZDogQ2hlY2tzIGlmIGNvbm5lY3RvciBpcyBEU0MgY2FwYWJsZQ0KPiArICogQGRpc3Bs YXk6IEEgcG9pbnRlciB0byBhbiAjaWd0X2Rpc3BsYXlfdCBzdHJ1Y3R1cmUNCj4gKyAqIEBkcm1f ZmQ6IERSTSBmaWxlIGRlc2NyaXB0b3INCj4gKyAqLw0KPiArYm9vbCBpc19kcF9kc2Nfc3VwcG9y dGVkKGludCBkcm1fZmQsIGNoYXIgKmNvbm5lY3Rvcl9uYW1lKSB7DQo+ICsJY2hhciBidWZbNTEy XTsNCj4gKwlpbnQgZmQsIHJldDsNCj4gKw0KPiArCWZkID0gaWd0X2RlYnVnZnNfY29ubmVjdG9y X2Rpcihkcm1fZmQsIGNvbm5lY3Rvcl9uYW1lLCBPX1JET05MWSk7DQo+ICsNCj4gKwlpZiAoZmQg PCAwKSB7DQo+ICsJCWlndF9pbmZvKCJDb3VsZG4ndCBvcGVuIGNvbm5lY3RvciAlcyBkZWJ1Z2Zz IGRpcmVjdG9yeVxuIiwNCj4gKwkJCSBjb25uZWN0b3JfbmFtZSk7DQo+ICsJCXJldHVybiBmYWxz ZTsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBpZ3RfZGVidWdmc19zaW1wbGVfcmVhZChmZCwgREVC VUdGU19EU0NfRkVDX1NVUFBPUlQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KPiArCWNsb3NlKGZkKTsN Cj4gKw0KPiArCWlndF9hc3NlcnRfZihyZXQgPj0gMCwgIlJlYWRpbmcgJXMgZm9yIGNvbm5lY3Rv ciAlcyBmYWlsZWQuXG4iLA0KPiArCQkgICAgIERFQlVHRlNfRFNDX0ZFQ19TVVBQT1JULCBjb25u ZWN0b3JfbmFtZSk7DQo+ICsNCj4gKwlyZXR1cm4gc3Ryc3RyKGJ1ZiwgIkRTQ19TaW5rX1N1cHBv cnQ6IHllcyIpOyB9DQo+ICsNCj4gKy8qKg0KPiArICogaXNfZHBfZmVjX3N1cHBvcnRlZDogQ2hl Y2tzIGlmIGNvbm5lY3RvciBpcyBGRUMgY2FwYWJsZQ0KPiArICogQGRpc3BsYXk6IEEgcG9pbnRl ciB0byBhbiAjaWd0X2Rpc3BsYXlfdCBzdHJ1Y3R1cmUNCj4gKyAqIEBkcm1fZmQ6IERSTSBmaWxl IGRlc2NyaXB0b3INCj4gKyAqLw0KPiArYm9vbCBpc19kcF9mZWNfc3VwcG9ydGVkKGludCBkcm1f ZmQsIGNoYXIgKmNvbm5lY3Rvcl9uYW1lKSB7DQo+ICsJY2hhciBidWZbNTEyXTsNCj4gKwlpbnQg ZmQsIHJldDsNCj4gKw0KPiArCWZkID0gaWd0X2RlYnVnZnNfY29ubmVjdG9yX2Rpcihkcm1fZmQs IGNvbm5lY3Rvcl9uYW1lLCBPX1JET05MWSk7DQo+ICsNCj4gKwlpZiAoZmQgPCAwKSB7DQo+ICsJ CWlndF9pbmZvKCJDb3VsZG4ndCBvcGVuIGNvbm5lY3RvciAlcyBkZWJ1Z2ZzIGRpcmVjdG9yeVxu IiwNCj4gKwkJCSBjb25uZWN0b3JfbmFtZSk7DQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwl9DQo+ ICsNCj4gKwlyZXQgPSBpZ3RfZGVidWdmc19zaW1wbGVfcmVhZChmZCwgREVCVUdGU19EU0NfRkVD X1NVUFBPUlQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KPiArCWNsb3NlKGZkKTsNCj4gKw0KPiArCWln dF9hc3NlcnRfZihyZXQgPj0gMCwgIlJlYWRpbmcgJXMgZm9yIGNvbm5lY3RvciAlcyBmYWlsZWQu XG4iLA0KPiArCQkgICAgIERFQlVHRlNfRFNDX0ZFQ19TVVBQT1JULCBjb25uZWN0b3JfbmFtZSk7 DQo+ICsNCj4gKwlyZXR1cm4gc3Ryc3RyKGJ1ZiwgIkZFQ19TaW5rX1N1cHBvcnQ6IHllcyIpOyB9 DQo+ICsNCj4gKy8qKg0KPiArICogaWd0X2FtZF9yZXF1aXJlX2RzYzogQ2hlY2tzIGlmIGNvbm5l Y3RvcnMgaGF2ZSBEU0MgZGVidWdmcw0KPiAgICAqIEBkaXNwbGF5OiBBIHBvaW50ZXIgdG8gYW4g I2lndF9kaXNwbGF5X3Qgc3RydWN0dXJlDQo+ICAgICogQGRybV9mZDogRFJNIGZpbGUgZGVzY3Jp cHRvcg0KPiAgICAqDQo+IC0gKiBDaGVja3MgaWYgdGhlIEFNREdQVSBkcml2ZXIgaGFzIHN1cHBv cnQgdGhlICd0cmlnZ2VyX2hvdHBsdWcnDQo+IC0gKiBlbnRyeSBmb3IgSFBELiBTa2lwIHRlc3Qg aWYgSFBEIGlzIG5vdCBzdXBwb3J0ZWQuDQo+ICsgKiBDaGVja3MgaWYgdGhlIEFNREdQVSBkcml2 ZXIgaGFzIHN1cHBvcnQgb2YgZGVidWdmcyBlbnRyaWVzIGZvcg0KPiArICogRFNDLiBTa2lwIHRl c3QgaWYgRFNDIGlzIG5vdCBzdXBwb3J0ZWQuDQo+ICAgICovDQo+IC12b2lkIGlndF9hbWRfcmVx dWlyZV9ocGQoaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaW50IGRybV9mZCkNCj4gK3ZvaWQgaWd0 X2FtZF9yZXF1aXJlX2RzYyhpZ3RfZGlzcGxheV90ICpkaXNwbGF5LCBpbnQgZHJtX2ZkKQ0KPiAg IHsNCj4gICAJaWd0X291dHB1dF90ICpvdXRwdXQ7DQo+ICAgDQo+ICAgCWZvcl9lYWNoX2Nvbm5l Y3RlZF9vdXRwdXQoZGlzcGxheSwgb3V0cHV0KSB7DQo+IC0JCWlmIChpZ3RfYW1kX291dHB1dF9o YXNfaHBkKGRybV9mZCwgb3V0cHV0LT5uYW1lKSkNCj4gKwkJaWYgKGlndF9hbWRfb3V0cHV0X2hh c19kc2MoZHJtX2ZkLCBvdXRwdXQtPm5hbWUpKQ0KPiAgIAkJCXJldHVybjsNCj4gICAJfQ0KPiAg IA0KPiAtCWlndF9za2lwKCJObyBIUEQgZGVidWdmcyBzdXBwb3J0LlxuIik7DQo+ICsJaWd0X3Nr aXAoIk5vIERTQyBkZWJ1Z2ZzIHN1cHBvcnQuXG4iKTsNCj4gICB9DQo+ICAgDQo+ICAgLyoqDQo+ IC0gKiBpZ3RfYW1kX3RyaWdnZXJfaG90cGx1dDogVHJpZ2dlcnMgYSBkZWJ1Z2ZzIEhQRA0KPiAr ICogaWd0X2FtZF9yZWFkX2RzY19jbG9ja19zdGF0dXM6IFJlYWQgdGhlIERTQyBDbG9jayBFbmFi bGUgZGVidWdmcw0KPiAgICAqIEBkcm1fZmQ6IERSTSBmaWxlIGRlc2NyaXB0b3INCj4gLSAqIEBj b25uZWN0b3JfbmFtZTogVGhlIGNvbm5lY3RvcidzIG5hbWUsIHdoaWNoIHdlIHRyaWdnZXIgdGhl IA0KPiBob3RwbHVnIG9uDQo+ICsgKiBAY29ubmVjdG9yX25hbWU6IFRoZSBjb25uZWN0b3IncyBu YW1lLCB3aGljaCB3ZSB1c2UgdG8gcmVhZCBzdGF0dXMgDQo+ICsgb24NCj4gICAgKg0KPiAtICog aWd0X2FtZF9yZXF1aXJlX2hwZCBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSBjYWxsaW5nIHRoaXMu DQo+ICAgICovDQo+IC1pbnQgaWd0X2FtZF90cmlnZ2VyX2hvdHBsdWcoaW50IGRybV9mZCwgY2hh ciAqY29ubmVjdG9yX25hbWUpDQo+ICtpbnQgaWd0X2FtZF9yZWFkX2RzY19jbG9ja19zdGF0dXMo aW50IGRybV9mZCwgY2hhciAqY29ubmVjdG9yX25hbWUpIHsNCj4gKwljaGFyIGJ1Zls0XTsNCj4g KwlpbnQgZmQsIHJldDsNCj4gKw0KPiArCWZkID0gaWd0X2RlYnVnZnNfY29ubmVjdG9yX2Rpcihk cm1fZmQsIGNvbm5lY3Rvcl9uYW1lLCBPX1JET05MWSk7DQo+ICsJaWYgKGZkIDwgMCkgew0KPiAr CQlpZ3RfaW5mbygiQ291bGRuJ3Qgb3BlbiBjb25uZWN0b3IgJXMgZGVidWdmcyBkaXJlY3Rvcnlc biIsDQo+ICsJCQkgY29ubmVjdG9yX25hbWUpOw0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsJfQ0K PiArCXJldCA9IGlndF9kZWJ1Z2ZzX3NpbXBsZV9yZWFkKGZkLCBERUJVR0ZTX0RTQ19DTE9DS19F TiwgYnVmLCBzaXplb2YoYnVmKSk7DQo+ICsJY2xvc2UoZmQpOw0KPiArDQo+ICsJaWd0X2Fzc2Vy dF9mKHJldCA+PSAwLCAiUmVhZGluZyAlcyBmb3IgY29ubmVjdG9yICVzIGZhaWxlZC5cbiIsDQo+ ICsJCSAgICAgREVCVUdGU19EU0NfQ0xPQ0tfRU4sIGNvbm5lY3Rvcl9uYW1lKTsNCj4gKw0KPiAr CXJldHVybiBzdHJ0b2woYnVmLCBOVUxMLCAwKTsNCj4gK30NCj4gKw0KPiArDQo+ICsvKioNCj4g KyAqIGlndF9hbWRfd3JpdGVfZHNjX2Nsb2NrX2VuOiBXcml0ZSB0aGUgRFNDIENsb2NrIEVuYWJs ZSBkZWJ1Z2ZzDQo+ICsgKiBAZHJtX2ZkOiBEUk0gZmlsZSBkZXNjcmlwdG9yDQo+ICsgKiBAY29u bmVjdG9yX25hbWU6IFRoZSBjb25uZWN0b3IncyBuYW1lLCB3aGljaCB3ZSB1c2UgdG8gcmVhZCBz dGF0dXMgDQo+ICtvbg0KPiArICogQGRzY19mb3JjZTogRFNDIGZvcmNlIHBhcmFtZXRlciwgMCAt IERTQyBhdXRvbWF0aWMsIDEgLSBEU0MgZm9yY2UgDQo+ICtvbiwNCj4gKyAqIDIgLSBEU0MgZm9y Y2Ugb2ZmDQo+ICsgKg0KPiArICovDQo+ICt2b2lkIGlndF9hbWRfd3JpdGVfZHNjX2Nsb2NrX2Vu KGludCBkcm1fZmQsIGNoYXIgKmNvbm5lY3Rvcl9uYW1lLCBpbnQgDQo+ICtkc2NfZm9yY2UpIHsN Cj4gKwlpbnQgZmQsIGRzY19mZDsNCj4gKwljaGFyIHNyY1s0XTsNCj4gKwlpbnQgd3JfbGVuOw0K PiArDQo+ICsJZmQgPSBpZ3RfZGVidWdmc19jb25uZWN0b3JfZGlyKGRybV9mZCwgY29ubmVjdG9y X25hbWUsIE9fUkRPTkxZKTsNCj4gKwlpZ3RfYXNzZXJ0KGZkID49IDApOw0KPiArCWRzY19mZCA9 IG9wZW5hdChmZCwgREVCVUdGU19EU0NfQ0xPQ0tfRU4sIE9fV1JPTkxZKTsNCj4gKwljbG9zZShm ZCk7DQo+ICsJaWd0X2Fzc2VydChkc2NfZmQgPj0gMCk7DQo+ICsNCj4gKwlpZiAoZHNjX2ZvcmNl ID09IERTQ19GT1JDRV9PTikNCj4gKwkJc25wcmludGYoc3JjLCBzaXplb2Yoc3JjKSwgIiVkIiwg MSk7DQo+ICsJZWxzZSBpZiAoZHNjX2ZvcmNlID09IERTQ19GT1JDRV9PRkYpDQo+ICsJCXNucHJp bnRmKHNyYywgc2l6ZW9mKHNyYyksICIlZCIsIDIpOw0KPiArCWVsc2UNCj4gKwkJc25wcmludGYo c3JjLCBzaXplb2Yoc3JjKSwgIiVkIiwgMCk7DQo+ICsNCj4gKwlpZ3RfaW5mbygiRFNDIENsb2Nr IGZvcmNlLCB3cml0ZSAlcyA+IGRzY19jbG9ja19lblxuIiwgc3JjKTsNCj4gKw0KPiArCXdyX2xl biA9IHdyaXRlKGRzY19mZCwgc3JjLCBzdHJsZW4oc3JjKSk7DQo+ICsJY2xvc2UoZHNjX2ZkKTsN Cj4gKwlpZ3RfYXNzZXJ0X2VxKHdyX2xlbiwgc3RybGVuKHNyYykpOw0KPiArfQ0KPiArDQo+ICsv KioNCj4gKyAqIGlndF9hbWRfd3JpdGVfZHNjX3BhcmFtX3NsaWNlX2hlaWdodDogV3JpdGUgdGhl IERTQyBTbGljZSBIZWlnaHQgDQo+ICtkZWJ1Z2ZzDQo+ICsgKiBAZHJtX2ZkOiBEUk0gZmlsZSBk ZXNjcmlwdG9yDQo+ICsgKiBAY29ubmVjdG9yX25hbWU6IFRoZSBjb25uZWN0b3IncyBuYW1lLCB3 aGljaCB3ZSB1c2UgdG8gcmVhZCBzdGF0dXMgDQo+ICtvbg0KPiArICogQHNsaWNlX2hlaWdodDog RFNDIHNsaWNlIGhlaWdodCBwYXJhbWV0ZXIsIGFjY2VwdHMgYW55IHBvc2l0aXZlIGludGVnZXIs DQo+ICsgKiAJCSAgaWYgcGFyYW1ldGVyIGlzIG5lZ2F0aXZlIC0gaXQgd2lsbCBub3Qgd3JpdGUg dG8gZGVidWdmcy4NCj4gKyAqDQo+ICsgKi8NCj4gK3ZvaWQgaWd0X2FtZF93cml0ZV9kc2NfcGFy YW1fc2xpY2VfaGVpZ2h0KGludCBkcm1fZmQsIGNoYXIgDQo+ICsqY29ubmVjdG9yX25hbWUsIGlu dCBzbGljZV9oZWlnaHQpIHsNCj4gKwlpbnQgZmQsIGRzY19mZDsNCj4gKwljaGFyIHNyY1szMl07 DQo+ICsJaW50IHdyX2xlbjsNCj4gKw0KPiArCWZkID0gaWd0X2RlYnVnZnNfY29ubmVjdG9yX2Rp cihkcm1fZmQsIGNvbm5lY3Rvcl9uYW1lLCBPX1JET05MWSk7DQo+ICsJaWd0X2Fzc2VydChmZCA+ PSAwKTsNCj4gKwlkc2NfZmQgPSBvcGVuYXQoZmQsIERFQlVHRlNfRFNDX1NMSUNFX0hFSUdIVCwg T19XUk9OTFkpOw0KPiArCWNsb3NlKGZkKTsNCj4gKwlpZ3RfYXNzZXJ0KGRzY19mZCA+PSAwKTsN Cj4gKw0KPiArCWlmIChzbGljZV9oZWlnaHQgPj0gMCkgew0KPiArCQlzbnByaW50ZihzcmMsIHNp emVvZihzcmMpLCAiJSN4Iiwgc2xpY2VfaGVpZ2h0KTsNCj4gKwl9IGVsc2Ugew0KPiArCQlpZ3Rf d2FybigiRFNDIFNMSUNFIEhFSUdIVCwgc2xpY2UgaGVpZ2h0IHBhcmFtZXRlciBpcyBpbnZhbGlk ICglZClcbiIsIHNsaWNlX2hlaWdodCk7DQo+ICsJCWdvdG8gZXhpdDsNCj4gKwl9DQo+ICsNCj4g KwlpZ3RfaW5mbygiRFNDIFNMSUNFIEhFSUdIVCwgd3JpdGUgJXMgPiBkc2Nfc2xpY2VfaGVpZ2h0 XG4iLCBzcmMpOw0KPiArDQo+ICsJd3JfbGVuID0gd3JpdGUoZHNjX2ZkLCBzcmMsIHN0cmxlbihz cmMpKTsNCj4gKwlpZ3RfYXNzZXJ0X2VxKHdyX2xlbiwgc3RybGVuKHNyYykpOw0KPiArZXhpdDoN Cj4gKwljbG9zZShkc2NfZmQpOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGlndF9hbWRfcmVh ZF9kc2NfcGFyYW1fc2xpY2VfaGVpZ2h0OiBSZWFkIHRoZSBEU0MgU2xpY2UgSGVpZ2h0IA0KPiAr ZGVidWdmcw0KPiArICogQGRybV9mZDogRFJNIGZpbGUgZGVzY3JpcHRvcg0KPiArICogQGNvbm5l Y3Rvcl9uYW1lOiBUaGUgY29ubmVjdG9yJ3MgbmFtZSwgd2hpY2ggd2UgdXNlIHRvIHJlYWQgc3Rh dHVzIA0KPiArb24NCj4gKyAqDQo+ICsgKi8NCj4gK2ludCBpZ3RfYW1kX3JlYWRfZHNjX3BhcmFt X3NsaWNlX2hlaWdodChpbnQgZHJtX2ZkLCBjaGFyIA0KPiArKmNvbm5lY3Rvcl9uYW1lKSB7DQo+ ICsJY2hhciBidWZbMzJdOw0KPiArCWludCBmZCwgcmV0Ow0KPiArDQo+ICsJZmQgPSBpZ3RfZGVi dWdmc19jb25uZWN0b3JfZGlyKGRybV9mZCwgY29ubmVjdG9yX25hbWUsIE9fUkRPTkxZKTsNCj4g KwlpZiAoZmQgPCAwKSB7DQo+ICsJCWlndF9pbmZvKCJDb3VsZG4ndCBvcGVuIGNvbm5lY3RvciAl cyBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIiwNCj4gKwkJCSBjb25uZWN0b3JfbmFtZSk7DQo+ICsJCXJl dHVybiBmYWxzZTsNCj4gKwl9DQo+ICsJcmV0ID0gaWd0X2RlYnVnZnNfc2ltcGxlX3JlYWQoZmQs IERFQlVHRlNfRFNDX1NMSUNFX0hFSUdIVCwgYnVmLCBzaXplb2YoYnVmKSk7DQo+ICsJY2xvc2Uo ZmQpOw0KPiArDQo+ICsJaWd0X2Fzc2VydF9mKHJldCA+PSAwLCAiUmVhZGluZyAlcyBmb3IgY29u bmVjdG9yICVzIGZhaWxlZC5cbiIsDQo+ICsJCSAgICAgREVCVUdGU19EU0NfU0xJQ0VfSEVJR0hU LCBjb25uZWN0b3JfbmFtZSk7DQo+ICsNCj4gKwlyZXR1cm4gc3RydG9sKGJ1ZiwgTlVMTCwgMCk7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWd0X2FtZF93cml0ZV9kc2NfcGFyYW1fc2xpY2Vf d2lkdGg6IFdyaXRlIHRoZSBEU0MgU2xpY2UgV2lkdGggDQo+ICtkZWJ1Z2ZzDQo+ICsgKiBAZHJt X2ZkOiBEUk0gZmlsZSBkZXNjcmlwdG9yDQo+ICsgKiBAY29ubmVjdG9yX25hbWU6IFRoZSBjb25u ZWN0b3IncyBuYW1lLCB3aGljaCB3ZSB1c2UgdG8gcmVhZCBzdGF0dXMgDQo+ICtvbg0KPiArICog QHNsaWNlX3dpZHRoOiBEU0Mgc2xpY2Ugd2lkdGggcGFyYW1ldGVyLCBhY2NlcHRzIGFueSBwb3Np dGl2ZSBpbnRlZ2VyLA0KPiArICogCQkgaWYgcGFyYW1ldGVyIGlzIG5lZ2F0aXZlIC0gaXQgd2ls bCBub3Qgd3JpdGUgdG8gZGVidWdmcy4NCj4gKyAqDQo+ICsgKi8NCj4gK3ZvaWQgaWd0X2FtZF93 cml0ZV9kc2NfcGFyYW1fc2xpY2Vfd2lkdGgoaW50IGRybV9mZCwgY2hhciANCj4gKypjb25uZWN0 b3JfbmFtZSwgaW50IHNsaWNlX3dpZHRoKQ0KPiAgIHsNCj4gLQlpbnQgZmQsIGhwZF9mZDsNCj4g KwlpbnQgZmQsIGRzY19mZDsNCj4gKwljaGFyIHNyY1szMl07DQo+ICAgCWludCB3cl9sZW47DQo+ IC0JY29uc3QgY2hhciAqZW5hYmxlX2hwZCA9ICIxIjsNCj4gICANCj4gICAJZmQgPSBpZ3RfZGVi dWdmc19jb25uZWN0b3JfZGlyKGRybV9mZCwgY29ubmVjdG9yX25hbWUsIE9fUkRPTkxZKTsNCj4g ICAJaWd0X2Fzc2VydChmZCA+PSAwKTsNCj4gLQlocGRfZmQgPSBvcGVuYXQoZmQsIERFQlVHRlNf SFBEX1RSSUdHRVIsIE9fV1JPTkxZKTsNCj4gKwlkc2NfZmQgPSBvcGVuYXQoZmQsIERFQlVHRlNf RFNDX1NMSUNFX1dJRFRILCBPX1dST05MWSk7DQo+ICsJY2xvc2UoZmQpOw0KPiArCWlndF9hc3Nl cnQoZHNjX2ZkID49IDApOw0KPiArDQo+ICsJaWYgKHNsaWNlX3dpZHRoID49IDApIHsNCj4gKwkJ c25wcmludGYoc3JjLCBzaXplb2Yoc3JjKSwgIiUjeCIsIHNsaWNlX3dpZHRoKTsNCj4gKwl9IGVs c2Ugew0KPiArCQlpZ3Rfd2FybigiRFNDIFNMSUNFIFdJRFRILCBzbGljZSB3aWR0aCBwYXJhbWV0 ZXIgaXMgaW52YWxpZCAoJWQpXG4iLCBzbGljZV93aWR0aCk7DQo+ICsJCWdvdG8gZXhpdDsNCj4g Kwl9DQo+ICsNCj4gKwlpZ3RfaW5mbygiRFNDIFNMSUNFIFdJRFRILCB3cml0ZSAlcyA+IGRzY19z bGljZV93aWR0aFxuIiwgc3JjKTsNCj4gKw0KPiArCXdyX2xlbiA9IHdyaXRlKGRzY19mZCwgc3Jj LCBzdHJsZW4oc3JjKSk7DQo+ICsJaWd0X2Fzc2VydF9lcSh3cl9sZW4sIHN0cmxlbihzcmMpKTsN Cj4gK2V4aXQ6DQo+ICsJY2xvc2UoZHNjX2ZkKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBp Z3RfYW1kX3JlYWRfZHNjX3BhcmFtX3NsaWNlX3dpZHRoOiBSZWFkIHRoZSBEU0MgU2xpY2UgV2lk dGggDQo+ICtkZWJ1Z2ZzDQo+ICsgKiBAZHJtX2ZkOiBEUk0gZmlsZSBkZXNjcmlwdG9yDQo+ICsg KiBAY29ubmVjdG9yX25hbWU6IFRoZSBjb25uZWN0b3IncyBuYW1lLCB3aGljaCB3ZSB1c2UgdG8g cmVhZCBzdGF0dXMgDQo+ICtvbg0KPiArICoNCj4gKyAqLw0KPiAraW50IGlndF9hbWRfcmVhZF9k c2NfcGFyYW1fc2xpY2Vfd2lkdGgoaW50IGRybV9mZCwgY2hhciANCj4gKypjb25uZWN0b3JfbmFt ZSkgew0KPiArCWNoYXIgYnVmWzMyXTsNCj4gKwlpbnQgZmQsIHJldDsNCj4gKw0KPiArCWZkID0g aWd0X2RlYnVnZnNfY29ubmVjdG9yX2Rpcihkcm1fZmQsIGNvbm5lY3Rvcl9uYW1lLCBPX1JET05M WSk7DQo+ICsJaWYgKGZkIDwgMCkgew0KPiArCQlpZ3RfaW5mbygiQ291bGRuJ3Qgb3BlbiBjb25u ZWN0b3IgJXMgZGVidWdmcyBkaXJlY3RvcnlcbiIsDQo+ICsJCQkgY29ubmVjdG9yX25hbWUpOw0K PiArCQlyZXR1cm4gZmFsc2U7DQo+ICsJfQ0KPiArCXJldCA9IGlndF9kZWJ1Z2ZzX3NpbXBsZV9y ZWFkKGZkLCBERUJVR0ZTX0RTQ19TTElDRV9XSURUSCwgYnVmLCANCj4gK3NpemVvZihidWYpKTsN Cj4gICAJY2xvc2UoZmQpOw0KPiAtCWlndF9hc3NlcnQoaHBkX2ZkID49IDApOw0KPiAgIA0KPiAt CXdyX2xlbiA9IHdyaXRlKGhwZF9mZCwgZW5hYmxlX2hwZCwgc3RybGVuKGVuYWJsZV9ocGQpKTsN Cj4gLQljbG9zZShocGRfZmQpOw0KPiAtCWlndF9hc3NlcnRfZXEod3JfbGVuLCBzdHJsZW4oZW5h YmxlX2hwZCkpOw0KPiArCWlndF9hc3NlcnRfZihyZXQgPj0gMCwgIlJlYWRpbmcgJXMgZm9yIGNv bm5lY3RvciAlcyBmYWlsZWQuXG4iLA0KPiArCQkgICAgIERFQlVHRlNfRFNDX1NMSUNFX1dJRFRI LCBjb25uZWN0b3JfbmFtZSk7DQo+ICsNCj4gKwlyZXR1cm4gc3RydG9sKGJ1ZiwgTlVMTCwgMCk7 DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWd0X2FtZF93cml0ZV9kc2NfcGFyYW1fYnBwOiBX cml0ZSB0aGUgRFNDIEJpdHMgUGVyIFBpeGVsIGRlYnVnZnMNCj4gKyAqIEBkcm1fZmQ6IERSTSBm aWxlIGRlc2NyaXB0b3INCj4gKyAqIEBjb25uZWN0b3JfbmFtZTogVGhlIGNvbm5lY3RvcidzIG5h bWUsIHdoaWNoIHdlIHVzZSB0byByZWFkIHN0YXR1cyANCj4gK29uDQo+ICsgKiBAYnBwOiBEU0Mg Yml0cyBwZXIgcGl4ZWwgcGFyYW1ldGVyLCBhY2NlcHRzIGFueSBwb3NpdGl2ZSBpbnRlZ2VyLA0K PiArICogCSBpZiBwYXJhbWV0ZXIgaXMgbmVnYXRpdmUgLSBpdCB3aWxsIG5vdCB3cml0ZSB0byBk ZWJ1Z2ZzLg0KPiArICoNCj4gKyAqLw0KPiArdm9pZCBpZ3RfYW1kX3dyaXRlX2RzY19wYXJhbV9i cHAoaW50IGRybV9mZCwgY2hhciAqY29ubmVjdG9yX25hbWUsIA0KPiAraW50IGJwcCkgew0KPiAr CWludCBmZCwgZHNjX2ZkOw0KPiArCWNoYXIgc3JjWzMyXTsNCj4gKwlpbnQgd3JfbGVuOw0KPiAr DQo+ICsJZmQgPSBpZ3RfZGVidWdmc19jb25uZWN0b3JfZGlyKGRybV9mZCwgY29ubmVjdG9yX25h bWUsIE9fUkRPTkxZKTsNCj4gKwlpZ3RfYXNzZXJ0KGZkID49IDApOw0KPiArCWRzY19mZCA9IG9w ZW5hdChmZCwgREVCVUdGU19EU0NfQklUU19QRVJfUElYRUwsIE9fV1JPTkxZKTsNCj4gKwljbG9z ZShmZCk7DQo+ICsJaWd0X2Fzc2VydChkc2NfZmQgPj0gMCk7DQo+ICsNCj4gKwlpZiAoYnBwID49 IDApIHsNCj4gKwkJc25wcmludGYoc3JjLCBzaXplb2Yoc3JjKSwgIiUjeCIsIGJwcCk7DQo+ICsJ fSBlbHNlIHsNCj4gKwkJaWd0X3dhcm4oIkRTQyBCSVRTIFBFUiBQSVhFTCwgYml0cyBwZXIgcGl4 ZWwgcGFyYW1ldGVyIGlzIGludmFsaWQgKCVkKVxuIiwgYnBwKTsNCj4gKwkJZ290byBleGl0Ow0K PiArCX0NCj4gKw0KPiArCWlndF9pbmZvKCJEU0MgQklUUyBQRVIgUElYRUwsIHdyaXRlICVzID4g ZHNjX2JpdHNfcGVyX3BpeGVsXG4iLCANCj4gK3NyYyk7DQo+ICsNCj4gKwl3cl9sZW4gPSB3cml0 ZShkc2NfZmQsIHNyYywgc3RybGVuKHNyYykpOw0KPiArCWlndF9hc3NlcnRfZXEod3JfbGVuLCBz dHJsZW4oc3JjKSk7DQo+ICtleGl0Og0KPiArCWNsb3NlKGRzY19mZCk7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICogaWd0X2FtZF9yZWFkX2RzY19wYXJhbV9icHA6IFJlYWQgdGhlIERTQyBCaXRz IFBlciBQaXhlbCBkZWJ1Z2ZzDQo+ICsgKiBAZHJtX2ZkOiBEUk0gZmlsZSBkZXNjcmlwdG9yDQo+ ICsgKiBAY29ubmVjdG9yX25hbWU6IFRoZSBjb25uZWN0b3IncyBuYW1lLCB3aGljaCB3ZSB1c2Ug dG8gcmVhZCBzdGF0dXMgDQo+ICtvbg0KPiArICoNCj4gKyAqLw0KPiAraW50IGlndF9hbWRfcmVh ZF9kc2NfcGFyYW1fYnBwKGludCBkcm1fZmQsIGNoYXIgKmNvbm5lY3Rvcl9uYW1lKSB7DQo+ICsJ Y2hhciBidWZbMzJdOw0KPiArCWludCBmZCwgcmV0Ow0KPiArDQo+ICsJZmQgPSBpZ3RfZGVidWdm c19jb25uZWN0b3JfZGlyKGRybV9mZCwgY29ubmVjdG9yX25hbWUsIE9fUkRPTkxZKTsNCj4gKwlp ZiAoZmQgPCAwKSB7DQo+ICsJCWlndF9pbmZvKCJDb3VsZG4ndCBvcGVuIGNvbm5lY3RvciAlcyBk ZWJ1Z2ZzIGRpcmVjdG9yeVxuIiwNCj4gKwkJCSBjb25uZWN0b3JfbmFtZSk7DQo+ICsJCXJldHVy biBmYWxzZTsNCj4gKwl9DQo+ICsJcmV0ID0gaWd0X2RlYnVnZnNfc2ltcGxlX3JlYWQoZmQsIERF QlVHRlNfRFNDX0JJVFNfUEVSX1BJWEVMLCBidWYsIHNpemVvZihidWYpKTsNCj4gKwljbG9zZShm ZCk7DQo+ICsNCj4gKwlpZ3RfYXNzZXJ0X2YocmV0ID49IDAsICJSZWFkaW5nICVzIGZvciBjb25u ZWN0b3IgJXMgZmFpbGVkLlxuIiwNCj4gKwkJICAgICBERUJVR0ZTX0RTQ19CSVRTX1BFUl9QSVhF TCwgY29ubmVjdG9yX25hbWUpOw0KPiArDQo+ICsJcmV0dXJuIHN0cnRvbChidWYsIE5VTEwsIDAp Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGlndF9hbWRfcmVhZF9kc2NfcGFyYW1fcGljX3dp ZHRoOiBSZWFkIHRoZSBEU0MgUGljdHVyZSBXaWR0aCANCj4gK2RlYnVnZnMNCj4gKyAqIEBkcm1f ZmQ6IERSTSBmaWxlIGRlc2NyaXB0b3INCj4gKyAqIEBjb25uZWN0b3JfbmFtZTogVGhlIGNvbm5l Y3RvcidzIG5hbWUsIHdoaWNoIHdlIHVzZSB0byByZWFkIHN0YXR1cyANCj4gK29uDQo+ICsgKg0K PiArICovDQo+ICtpbnQgaWd0X2FtZF9yZWFkX2RzY19wYXJhbV9waWNfd2lkdGgoaW50IGRybV9m ZCwgY2hhciANCj4gKypjb25uZWN0b3JfbmFtZSkgew0KPiArCWNoYXIgYnVmWzRdOw0KPiArCWlu dCBmZCwgcmV0Ow0KPiArDQo+ICsJZmQgPSBpZ3RfZGVidWdmc19jb25uZWN0b3JfZGlyKGRybV9m ZCwgY29ubmVjdG9yX25hbWUsIE9fUkRPTkxZKTsNCj4gKwlpZiAoZmQgPCAwKSB7DQo+ICsJCWln dF9pbmZvKCJDb3VsZG4ndCBvcGVuIGNvbm5lY3RvciAlcyBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIiwN Cj4gKwkJCSBjb25uZWN0b3JfbmFtZSk7DQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwl9DQo+ICsJ cmV0ID0gaWd0X2RlYnVnZnNfc2ltcGxlX3JlYWQoZmQsIERFQlVHRlNfRFNDX1BJQ19XSURUSCwg YnVmLCBzaXplb2YoYnVmKSk7DQo+ICsJY2xvc2UoZmQpOw0KPiArDQo+ICsJaWd0X2Fzc2VydF9m KHJldCA+PSAwLCAiUmVhZGluZyAlcyBmb3IgY29ubmVjdG9yICVzIGZhaWxlZC5cbiIsDQo+ICsJ CSAgICAgREVCVUdGU19EU0NfUElDX1dJRFRILCBjb25uZWN0b3JfbmFtZSk7DQo+ICsNCj4gKwly ZXR1cm4gc3RydG9sKGJ1ZiwgTlVMTCwgMCk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogaWd0 X2FtZF9yZWFkX2RzY19wYXJhbV9waWNfaGVpZ2h0OiBSZWFkIHRoZSBEU0MgUGljdHVyZSBIZWln aHQgDQo+ICtkZWJ1Z2ZzDQo+ICsgKiBAZHJtX2ZkOiBEUk0gZmlsZSBkZXNjcmlwdG9yDQo+ICsg KiBAY29ubmVjdG9yX25hbWU6IFRoZSBjb25uZWN0b3IncyBuYW1lLCB3aGljaCB3ZSB1c2UgdG8g cmVhZCBzdGF0dXMgDQo+ICtvbg0KPiArICoNCj4gKyAqLw0KPiAraW50IGlndF9hbWRfcmVhZF9k c2NfcGFyYW1fcGljX2hlaWdodChpbnQgZHJtX2ZkLCBjaGFyIA0KPiArKmNvbm5lY3Rvcl9uYW1l KSB7DQo+ICsJY2hhciBidWZbNF07DQo+ICsJaW50IGZkLCByZXQ7DQo+ICsNCj4gKwlmZCA9IGln dF9kZWJ1Z2ZzX2Nvbm5lY3Rvcl9kaXIoZHJtX2ZkLCBjb25uZWN0b3JfbmFtZSwgT19SRE9OTFkp Ow0KPiArCWlmIChmZCA8IDApIHsNCj4gKwkJaWd0X2luZm8oIkNvdWxkbid0IG9wZW4gY29ubmVj dG9yICVzIGRlYnVnZnMgZGlyZWN0b3J5XG4iLA0KPiArCQkJIGNvbm5lY3Rvcl9uYW1lKTsNCj4g KwkJcmV0dXJuIGZhbHNlOw0KPiArCX0NCj4gKwlyZXQgPSBpZ3RfZGVidWdmc19zaW1wbGVfcmVh ZChmZCwgREVCVUdGU19EU0NfUElDX0hFSUdIVCwgYnVmLCBzaXplb2YoYnVmKSk7DQo+ICsJY2xv c2UoZmQpOw0KPiArDQo+ICsJaWd0X2Fzc2VydF9mKHJldCA+PSAwLCAiUmVhZGluZyAlcyBmb3Ig Y29ubmVjdG9yICVzIGZhaWxlZC5cbiIsDQo+ICsJCSAgICAgREVCVUdGU19EU0NfUElDX0hFSUdI VCwgY29ubmVjdG9yX25hbWUpOw0KPiArDQo+ICsJcmV0dXJuIHN0cnRvbChidWYsIE5VTEwsIDAp Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAqIGlndF9hbWRfcmVhZF9kc2NfcGFyYW1fY2h1bmtf c2l6ZTogUmVhZCB0aGUgRFNDIENodW5rIFNpemUgZGVidWdmcw0KPiArICogQGRybV9mZDogRFJN IGZpbGUgZGVzY3JpcHRvcg0KPiArICogQGNvbm5lY3Rvcl9uYW1lOiBUaGUgY29ubmVjdG9yJ3Mg bmFtZSwgd2hpY2ggd2UgdXNlIHRvIHJlYWQgc3RhdHVzIA0KPiArb24NCj4gKyAqDQo+ICsgKi8N Cj4gK2ludCBpZ3RfYW1kX3JlYWRfZHNjX3BhcmFtX2NodW5rX3NpemUoaW50IGRybV9mZCwgY2hh ciANCj4gKypjb25uZWN0b3JfbmFtZSkgew0KPiArCWNoYXIgYnVmWzRdOw0KPiArCWludCBmZCwg cmV0Ow0KPiArDQo+ICsJZmQgPSBpZ3RfZGVidWdmc19jb25uZWN0b3JfZGlyKGRybV9mZCwgY29u bmVjdG9yX25hbWUsIE9fUkRPTkxZKTsNCj4gKwlpZiAoZmQgPCAwKSB7DQo+ICsJCWlndF9pbmZv KCJDb3VsZG4ndCBvcGVuIGNvbm5lY3RvciAlcyBkZWJ1Z2ZzIGRpcmVjdG9yeVxuIiwNCj4gKwkJ CSBjb25uZWN0b3JfbmFtZSk7DQo+ICsJCXJldHVybiBmYWxzZTsNCj4gKwl9DQo+ICsJcmV0ID0g aWd0X2RlYnVnZnNfc2ltcGxlX3JlYWQoZmQsIERFQlVHRlNfRFNDX0NIVU5LX1NJWkUsIGJ1Ziwg c2l6ZW9mKGJ1ZikpOw0KPiArCWNsb3NlKGZkKTsNCj4gKw0KPiArCWlndF9hc3NlcnRfZihyZXQg Pj0gMCwgIlJlYWRpbmcgJXMgZm9yIGNvbm5lY3RvciAlcyBmYWlsZWQuXG4iLA0KPiArCQkgICAg IERFQlVHRlNfRFNDX0NIVU5LX1NJWkUsIGNvbm5lY3Rvcl9uYW1lKTsNCj4gKw0KPiArCXJldHVy biBzdHJ0b2woYnVmLCBOVUxMLCAwKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBpZ3RfYW1k X3JlYWRfZHNjX3BhcmFtX3NsaWNlX2JwZzogUmVhZCB0aGUgRFNDIFNsaWNlIEJQRyBPZmZzZXQg DQo+ICtkZWJ1Z2ZzDQo+ICsgKiBAZHJtX2ZkOiBEUk0gZmlsZSBkZXNjcmlwdG9yDQo+ICsgKiBA Y29ubmVjdG9yX25hbWU6IFRoZSBjb25uZWN0b3IncyBuYW1lLCB3aGljaCB3ZSB1c2UgdG8gcmVh ZCBzdGF0dXMgDQo+ICtvbg0KPiArICoNCj4gKyAqLw0KPiAraW50IGlndF9hbWRfcmVhZF9kc2Nf cGFyYW1fc2xpY2VfYnBnKGludCBkcm1fZmQsIGNoYXIgDQo+ICsqY29ubmVjdG9yX25hbWUpIHsN Cj4gKwljaGFyIGJ1Zls0XTsNCj4gKwlpbnQgZmQsIHJldDsNCj4gKw0KPiArCWZkID0gaWd0X2Rl YnVnZnNfY29ubmVjdG9yX2Rpcihkcm1fZmQsIGNvbm5lY3Rvcl9uYW1lLCBPX1JET05MWSk7DQo+ ICsJaWYgKGZkIDwgMCkgew0KPiArCQlpZ3RfaW5mbygiQ291bGRuJ3Qgb3BlbiBjb25uZWN0b3Ig JXMgZGVidWdmcyBkaXJlY3RvcnlcbiIsDQo+ICsJCQkgY29ubmVjdG9yX25hbWUpOw0KPiArCQly ZXR1cm4gZmFsc2U7DQo+ICsJfQ0KPiArCXJldCA9IGlndF9kZWJ1Z2ZzX3NpbXBsZV9yZWFkKGZk LCBERUJVR0ZTX0RTQ19TTElDRV9CUEcsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOw0KPiArCWNsb3NlKGZk KTsNCj4gKw0KPiArCWlndF9hc3NlcnRfZihyZXQgPj0gMCwgIlJlYWRpbmcgJXMgZm9yIGNvbm5l Y3RvciAlcyBmYWlsZWQuXG4iLA0KPiArCQkgICAgIERFQlVHRlNfRFNDX1NMSUNFX0JQRywgY29u bmVjdG9yX25hbWUpOw0KPiArDQo+ICsJcmV0dXJuIHN0cnRvbChidWYsIE5VTEwsIDApOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAqIGlndF9hbWRfb3V0cHV0X2hhc19ocGQ6IGNoZWNrIGlmIGNv bm5lY3RvciBoYXMgSFBEIGRlYnVnZnMgZW50cnkNCj4gKyAqIEBkcm1fZmQ6IERSTSBmaWxlIGRl c2NyaXB0b3INCj4gKyAqIEBjb25uZWN0b3JfbmFtZTogVGhlIGNvbm5lY3RvcidzIG5hbWUsIG9u IHdoaWNoIHdlJ3JlIHJlYWRpbmcgdGhlIA0KPiArc3RhdHVzICAqLyBzdGF0aWMgYm9vbCBpZ3Rf YW1kX291dHB1dF9oYXNfaHBkKGludCBkcm1fZmQsIGNoYXIgDQo+ICsqY29ubmVjdG9yX25hbWUp IHsNCj4gKyAgICAgICAgaW50IGZkOw0KPiArICAgICAgICBpbnQgcmVzOw0KPiArICAgICAgICBz dHJ1Y3Qgc3RhdCBzdGF0Ow0KPiArDQo+ICsgICAgICAgIGZkID0gaWd0X2RlYnVnZnNfY29ubmVj dG9yX2Rpcihkcm1fZmQsIGNvbm5lY3Rvcl9uYW1lLCBPX1JET05MWSk7DQo+ICsgICAgICAgIGlm IChmZCA8IDApIHsNCj4gKyAgICAgICAgICAgICAgICBpZ3RfaW5mbygib3V0cHV0ICVzOiBkZWJ1 Z2ZzIG5vdCBmb3VuZFxuIiwgY29ubmVjdG9yX25hbWUpOw0KPiArICAgICAgICAgICAgICAgIHJl dHVybiBmYWxzZTsNCj4gKyAgICAgICAgfQ0KPiArDQo+ICsgICAgICAgIHJlcyA9IGZzdGF0YXQo ZmQsIERFQlVHRlNfSFBEX1RSSUdHRVIsICZzdGF0LCAwKTsNCj4gKyAgICAgICAgaWYgKHJlcyAh PSAwKSB7DQo+ICsgICAgICAgICAgICAgICAgaWd0X2luZm8oIiVzIGRlYnVnZnMgbm90IHN1cHBv cnRlZFxuIiwgREVCVUdGU19IUERfVFJJR0dFUik7DQo+ICsgICAgICAgICAgICAgICAgY2xvc2Uo ZmQpOw0KPiArICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4gKyAgICAgICAgfQ0KPiAr DQo+ICsgICAgICAgIGNsb3NlKGZkKTsNCj4gKyAgICAgICAgcmV0dXJuIHRydWU7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICogaWd0X2FtZF9yZXF1aXJlX2hwZDogQ2hlY2tzIGlmIGNvbm5lY3Rv cnMgaGF2ZSBIUEQgZGVidWdmcw0KPiArICogQGRpc3BsYXk6IEEgcG9pbnRlciB0byBhbiAjaWd0 X2Rpc3BsYXlfdCBzdHJ1Y3R1cmUNCj4gKyAqIEBkcm1fZmQ6IERSTSBmaWxlIGRlc2NyaXB0b3IN Cj4gKyAqDQo+ICsgKiBDaGVja3MgaWYgdGhlIEFNREdQVSBkcml2ZXIgaGFzIHN1cHBvcnQgdGhl ICd0cmlnZ2VyX2hvdHBsdWcnDQo+ICsgKiBlbnRyeSBmb3IgSFBELiBTa2lwIHRlc3QgaWYgSFBE IGlzIG5vdCBzdXBwb3J0ZWQuDQo+ICsgKi8NCj4gK3ZvaWQgaWd0X2FtZF9yZXF1aXJlX2hwZChp Z3RfZGlzcGxheV90ICpkaXNwbGF5LCBpbnQgZHJtX2ZkKSB7DQo+ICsgICAgICAgIGlndF9vdXRw dXRfdCAqb3V0cHV0Ow0KPiArDQo+ICsgICAgICAgIGZvcl9lYWNoX2Nvbm5lY3RlZF9vdXRwdXQo ZGlzcGxheSwgb3V0cHV0KSB7DQo+ICsgICAgICAgICAgICAgICAgaWYgKGlndF9hbWRfb3V0cHV0 X2hhc19ocGQoZHJtX2ZkLCBvdXRwdXQtPm5hbWUpKQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgcmV0dXJuOw0KPiArICAgICAgICB9DQo+ICsNCj4gKyAgICAgICAgaWd0X3NraXAoIk5vIEhQ RCBkZWJ1Z2ZzIHN1cHBvcnQuXG4iKTsgfQ0KPiArDQo+ICsvKioNCj4gKyAqIGlndF9hbWRfdHJp Z2dlcl9ob3RwbHV0OiBUcmlnZ2VycyBhIGRlYnVnZnMgSFBEDQo+ICsgKiBAZHJtX2ZkOiBEUk0g ZmlsZSBkZXNjcmlwdG9yDQo+ICsgKiBAY29ubmVjdG9yX25hbWU6IFRoZSBjb25uZWN0b3IncyBu YW1lLCB3aGljaCB3ZSB0cmlnZ2VyIHRoZSANCj4gK2hvdHBsdWcgb24NCj4gKyAqDQo+ICsgKiBp Z3RfYW1kX3JlcXVpcmVfaHBkIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGNhbGxpbmcgdGhpcy4N Cj4gKyAqLw0KPiAraW50IGlndF9hbWRfdHJpZ2dlcl9ob3RwbHVnKGludCBkcm1fZmQsIGNoYXIg KmNvbm5lY3Rvcl9uYW1lKSB7DQo+ICsgICAgICAgIGludCBmZCwgaHBkX2ZkOw0KPiArICAgICAg ICBpbnQgd3JfbGVuOw0KPiArICAgICAgICBjb25zdCBjaGFyICplbmFibGVfaHBkID0gIjEiOw0K PiArDQo+ICsgICAgICAgIGZkID0gaWd0X2RlYnVnZnNfY29ubmVjdG9yX2Rpcihkcm1fZmQsIGNv bm5lY3Rvcl9uYW1lLCBPX1JET05MWSk7DQo+ICsgICAgICAgIGlndF9hc3NlcnQoZmQgPj0gMCk7 DQo+ICsgICAgICAgIGhwZF9mZCA9IG9wZW5hdChmZCwgREVCVUdGU19IUERfVFJJR0dFUiwgT19X Uk9OTFkpOw0KPiArICAgICAgICBjbG9zZShmZCk7DQo+ICsgICAgICAgIGlndF9hc3NlcnQoaHBk X2ZkID49IDApOw0KPiArDQo+ICsgICAgICAgIHdyX2xlbiA9IHdyaXRlKGhwZF9mZCwgZW5hYmxl X2hwZCwgc3RybGVuKGVuYWJsZV9ocGQpKTsNCj4gKyAgICAgICAgY2xvc2UoaHBkX2ZkKTsNCj4g KyAgICAgICAgaWd0X2Fzc2VydF9lcSh3cl9sZW4sIHN0cmxlbihlbmFibGVfaHBkKSk7DQo+ICAg DQo+IC0JcmV0dXJuIDA7DQo+ICsgICAgICAgIHJldHVybiAwOw0KPiAgIH0NCj4gICANCj4gICAv Kg0KPiBkaWZmIC0tZ2l0IGEvbGliL2lndF9hbWQuaCBiL2xpYi9pZ3RfYW1kLmggaW5kZXggZTVi ZGJmMzMuLjdhOTFjYmZmIA0KPiAxMDA2NDQNCj4gLS0tIGEvbGliL2lndF9hbWQuaA0KPiArKysg Yi9saWIvaWd0X2FtZC5oDQo+IEBAIC0yNyw5ICsyNywyNyBAQA0KPiAgICNpbmNsdWRlICJpZ3Qu aCINCj4gICAjaW5jbHVkZSAiaWd0X2ZiLmgiDQo+ICAgDQo+ICsvKiBSZWFkICYgV3JpdGUgRFND IHBhcmFtZXRlcnMgKi8NCj4gKyNkZWZpbmUgREVCVUdGU19EU0NfQ0xPQ0tfRU4gImRzY19jbG9j a19lbiINCj4gKyNkZWZpbmUgREVCVUdGU19EU0NfU0xJQ0VfV0lEVEggImRzY19zbGljZV93aWR0 aCINCj4gKyNkZWZpbmUgREVCVUdGU19EU0NfU0xJQ0VfSEVJR0hUICJkc2Nfc2xpY2VfaGVpZ2h0 Ig0KPiArI2RlZmluZSBERUJVR0ZTX0RTQ19CSVRTX1BFUl9QSVhFTCAiZHNjX2JpdHNfcGVyX3Bp eGVsIg0KPiArLyogUmVhZCBvbmx5IERTQyBwYXJhbWV0ZXJzICovDQo+ICsjZGVmaW5lIERFQlVH RlNfRFNDX1BJQ19XSURUSCAiZHNjX3BpY193aWR0aCINCj4gKyNkZWZpbmUgREVCVUdGU19EU0Nf UElDX0hFSUdIVCAiZHNjX3BpY19oZWlnaHQiDQo+ICsjZGVmaW5lIERFQlVHRlNfRFNDX0NIVU5L X1NJWkUgImRzY19jaHVua19zaXplIg0KPiArI2RlZmluZSBERUJVR0ZTX0RTQ19TTElDRV9CUEcg ImRzY19zbGljZV9icGciDQo+ICsjZGVmaW5lIERFQlVHRlNfRFNDX0ZFQ19TVVBQT1JUICJkcF9k c2NfZmVjX3N1cHBvcnQiDQo+ICsNCj4gICAjZGVmaW5lIERFQlVHRlNfRFBfTElOS19TRVRUSU5H UyAibGlua19zZXR0aW5ncyINCj4gICAjZGVmaW5lIERFQlVHRlNfSFBEX1RSSUdHRVIgInRyaWdn ZXJfaG90cGx1ZyINCj4gICANCj4gK2VudW0gYW1kX2RzY19jbG9ja19mb3JjZSB7DQo+ICsJRFND X0FVVE9NQVRJQyA9IDAsDQo+ICsJRFNDX0ZPUkNFX09OLA0KPiArCURTQ19GT1JDRV9PRkYsDQo+ ICt9Ow0KPiArDQo+ICAgZW51bSBkY19sYW5lX2NvdW50IHsNCj4gICAJTEFORV9DT1VOVF9VTktO T1dOID0gMCwNCj4gICAJTEFORV9DT1VOVF9PTkUgPSAxLA0KPiBAQCAtODAsNiArOTgsMjMgQEAg dm9pZCBpZ3RfYW1kX2ZiX2NvbnZlcnRfcGxhbmVfdG9fdGlsZWQoc3RydWN0IGlndF9mYiAqZHN0 LCB2b2lkICpkc3RfYnVmLA0KPiAgIAkJCQkgICAgICAgc3RydWN0IGlndF9mYiAqc3JjLCB2b2lk ICpzcmNfYnVmKTsNCj4gICBib29sIGlndF9hbWRfaXNfdGlsZWQodWludDY0X3QgbW9kaWZpZXIp Ow0KPiAgIA0KPiArLyogSUdUIERTQyBoZWxwZXIgZnVuY3Rpb25zICovDQo+ICtib29sIGlzX2Rw X2RzY19zdXBwb3J0ZWQoaW50IGRybV9mZCwgY2hhciAqY29ubmVjdG9yX25hbWUpOyBib29sIA0K PiAraXNfZHBfZmVjX3N1cHBvcnRlZChpbnQgZHJtX2ZkLCBjaGFyICpjb25uZWN0b3JfbmFtZSk7 IHZvaWQgDQo+ICtpZ3RfYW1kX3JlcXVpcmVfZHNjKGlndF9kaXNwbGF5X3QgKmRpc3BsYXksIGlu dCBkcm1fZmQpOyBpbnQgDQo+ICtpZ3RfYW1kX3JlYWRfZHNjX2Nsb2NrX3N0YXR1cyhpbnQgZHJt X2ZkLCBjaGFyICpjb25uZWN0b3JfbmFtZSk7IHZvaWQgDQo+ICtpZ3RfYW1kX3dyaXRlX2RzY19j bG9ja19lbihpbnQgZHJtX2ZkLCBjaGFyICpjb25uZWN0b3JfbmFtZSwgaW50IA0KPiArZHNjX2Zv cmNlKTsgdm9pZCBpZ3RfYW1kX3dyaXRlX2RzY19wYXJhbV9zbGljZV9oZWlnaHQoaW50IGRybV9m ZCwgDQo+ICtjaGFyICpjb25uZWN0b3JfbmFtZSwgaW50IHNsaWNlX2hlaWdodCk7IGludCANCj4g K2lndF9hbWRfcmVhZF9kc2NfcGFyYW1fc2xpY2VfaGVpZ2h0KGludCBkcm1fZmQsIGNoYXIgDQo+ ICsqY29ubmVjdG9yX25hbWUpOyB2b2lkIGlndF9hbWRfd3JpdGVfZHNjX3BhcmFtX3NsaWNlX3dp ZHRoKGludCANCj4gK2RybV9mZCwgY2hhciAqY29ubmVjdG9yX25hbWUsIGludCBzbGljZV93aWR0 aCk7IGludCANCj4gK2lndF9hbWRfcmVhZF9kc2NfcGFyYW1fc2xpY2Vfd2lkdGgoaW50IGRybV9m ZCwgY2hhciAqY29ubmVjdG9yX25hbWUpOyANCj4gK3ZvaWQgaWd0X2FtZF93cml0ZV9kc2NfcGFy YW1fYnBwKGludCBkcm1fZmQsIGNoYXIgKmNvbm5lY3Rvcl9uYW1lLCANCj4gK2ludCBicHApOyBp bnQgaWd0X2FtZF9yZWFkX2RzY19wYXJhbV9icHAoaW50IGRybV9mZCwgY2hhciANCj4gKypjb25u ZWN0b3JfbmFtZSk7IGludCBpZ3RfYW1kX3JlYWRfZHNjX3BhcmFtX3BpY193aWR0aChpbnQgZHJt X2ZkLCANCj4gK2NoYXIgKmNvbm5lY3Rvcl9uYW1lKTsgaW50IGlndF9hbWRfcmVhZF9kc2NfcGFy YW1fcGljX2hlaWdodChpbnQgDQo+ICtkcm1fZmQsIGNoYXIgKmNvbm5lY3Rvcl9uYW1lKTsgaW50 IA0KPiAraWd0X2FtZF9yZWFkX2RzY19wYXJhbV9jaHVua19zaXplKGludCBkcm1fZmQsIGNoYXIg KmNvbm5lY3Rvcl9uYW1lKTsgDQo+ICtpbnQgaWd0X2FtZF9yZWFkX2RzY19wYXJhbV9zbGljZV9i cGcoaW50IGRybV9mZCwgY2hhciANCj4gKypjb25uZWN0b3JfbmFtZSk7DQo+ICsNCj4gICAvKiBJ R1QgSFBEIGhlbHBlciBmdW5jdGlvbnMgKi8NCj4gICB2b2lkIGlndF9hbWRfcmVxdWlyZV9ocGQo aWd0X2Rpc3BsYXlfdCAqZGlzcGxheSwgaW50IGRybV9mZCk7DQo+ICAgaW50IGlndF9hbWRfdHJp Z2dlcl9ob3RwbHVnKGludCBkcm1fZmQsIGNoYXIgKmNvbm5lY3Rvcl9uYW1lKTsgZGlmZiANCj4g LS1naXQgYS9saWIvaWd0X2ttcy5oIGIvbGliL2lndF9rbXMuaCBpbmRleCBlOWVjZDIxZS4uNWM3 ZDc0ODEgMTAwNjQ0DQo+IC0tLSBhL2xpYi9pZ3Rfa21zLmgNCj4gKysrIGIvbGliL2lndF9rbXMu aA0KPiBAQCAtMTI1LDYgKzEyNSw3IEBAIGVudW0gaWd0X2F0b21pY19jcnRjX3Byb3BlcnRpZXMg ew0KPiAgICAgICAgICBJR1RfQ1JUQ19BQ1RJVkUsDQo+ICAgICAgICAgIElHVF9DUlRDX09VVF9G RU5DRV9QVFIsDQo+ICAgICAgICAgIElHVF9DUlRDX1ZSUl9FTkFCTEVELA0KPiArICAgICAgIElH VF9DUlRDX0RTQ19TTElDRV9IRUlHSFQsDQo+ICAgICAgICAgIElHVF9OVU1fQ1JUQ19QUk9QUw0K PiAgIH07DQo+ICAgDQo+IGRpZmYgLS1naXQgYS90ZXN0cy9hbWRncHUvYW1kX2RwX2RzYy5jIGIv dGVzdHMvYW1kZ3B1L2FtZF9kcF9kc2MuYyBuZXcgDQo+IGZpbGUgbW9kZSAxMDA2NDQgaW5kZXgg MDAwMDAwMDAuLmQ3MzQyNWUyDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvdGVzdHMvYW1kZ3B1 L2FtZF9kcF9kc2MuYw0KPiBAQCAtMCwwICsxLDY4NSBAQA0KPiArLyoNCj4gKyAqIENvcHlyaWdo dCAyMDIxIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4NCj4gKyAqDQo+ICsgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiANCj4g K29idGFpbmluZyBhDQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQg ZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIA0KPiArIlNvZnR3YXJlIiksDQo+ICsgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCAN Cj4gK2xpbWl0YXRpb24NCj4gKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1l cmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCANCj4gK3N1YmxpY2Vuc2UsDQo+ICsgKiBhbmQvb3Ig c2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hv bSANCj4gK3RoZQ0KPiArICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0 IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoNCj4gKyAqDQo+ICsgKiBUaGUgYWJvdmUgY29w eXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSANCj4gK2lu Y2x1ZGVkIGluDQo+ICsgKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZSBTb2Z0d2FyZS4NCj4gKyAqDQo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgDQo+ICtFWFBSRVNTIE9SDQo+ICsgKiBJ TVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIA0K PiArTUVSQ0hBTlRBQklMSVRZLA0KPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIA0KPiArU0hBTEwNCj4gKyAqIFRI RSBDT1BZUklHSFQgSE9MREVSKFMpIE9SIEFVVEhPUihTKSBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJ TSwgDQo+ICtEQU1BR0VTIE9SDQo+ICsgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIA0KPiArT1RIRVJXSVNFLA0KPiArICogQVJJU0lO RyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIA0KPiArT1INCj4gKyAqIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4NCj4gKyAq Lw0KPiArDQo+ICsjaW5jbHVkZSAiaWd0LmgiDQo+ICsjaW5jbHVkZSAiaWd0X2FtZC5oIg0KPiAr I2luY2x1ZGUgInN3X3N5bmMuaCINCj4gKyNpbmNsdWRlIDxmY250bC5oPg0KPiArI2luY2x1ZGUg PHNpZ25hbC5oPg0KPiArDQo+ICsjZGVmaW5lIE5VTV9TTElDRV9TTE9UUyA0DQo+ICsNCj4gKy8q IE1heGltdW1tIHBpcGVzIG9uIGFueSBBTUQgQVNJQy4gKi8gI2RlZmluZSBNQVhfUElQRVMgNg0K PiArDQo+ICsvKiBDb21tb24gdGVzdCBkYXRhLiAqLw0KPiArdHlwZWRlZiBzdHJ1Y3QgZGF0YSB7 DQo+ICsJaWd0X2Rpc3BsYXlfdCBkaXNwbGF5Ow0KPiArCWlndF9wbGFuZV90ICpwcmltYXJ5W01B WF9QSVBFU107DQo+ICsJaWd0X291dHB1dF90ICpvdXRwdXRbTUFYX1BJUEVTXTsNCj4gKwlpZ3Rf cGlwZV90ICpwaXBlW01BWF9QSVBFU107DQo+ICsJaWd0X3BpcGVfY3JjX3QgKnBpcGVfY3JjW01B WF9QSVBFU107DQo+ICsJZHJtTW9kZU1vZGVJbmZvIG1vZGVbTUFYX1BJUEVTXTsNCj4gKwllbnVt IHBpcGUgcGlwZV9pZFtNQVhfUElQRVNdOw0KPiArCWludCBmZDsNCj4gK30gZGF0YV90Ow0KPiAr DQo+ICsvKiBCUEMgY29ubmVjdG9yIHN0YXRlLiAqLw0KPiArdHlwZWRlZiBzdHJ1Y3Qgb3V0cHV0 X2JwYyB7DQo+ICsJdW5zaWduZWQgaW50IGN1cnJlbnQ7DQo+ICsJdW5zaWduZWQgaW50IG1heGlt dW07DQo+ICt9IG91dHB1dF9icGNfdDsNCj4gKw0KPiArLyogQ29tbW9uIHRlc3QgY2xlYW51cC4g Ki8NCj4gK3N0YXRpYyB2b2lkIHRlc3RfZmluaShkYXRhX3QgKmRhdGEpDQo+ICt7DQo+ICsJaWd0 X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Ow0KPiArCWludCBpOw0KPiArDQo+ ICsJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5fcGlwZXM7ICsraSkgew0KPiArCQlpZ3RfcGlw ZV9jcmNfZnJlZShkYXRhLT5waXBlX2NyY1tpXSk7DQo+ICsJfQ0KPiArDQo+ICsJaWd0X2Rpc3Bs YXlfcmVzZXQoZGlzcGxheSk7DQo+ICsJaWd0X2Rpc3BsYXlfY29tbWl0X2F0b21pYyhkaXNwbGF5 LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgDQo+ICswKTsgfQ0KPiArDQo+ICsvKiBD b21tb24gdGVzdCBzZXR1cC4gKi8NCj4gK3N0YXRpYyB2b2lkIHRlc3RfaW5pdChkYXRhX3QgKmRh dGEpDQo+ICt7DQo+ICsJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Ow0K PiArCWludCBpLCBuOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5fcGlwZXM7 ICsraSkgew0KPiArCQlkYXRhLT5waXBlX2lkW2ldID0gUElQRV9BICsgaTsNCj4gKwkJZGF0YS0+ cGlwZVtpXSA9ICZkYXRhLT5kaXNwbGF5LnBpcGVzW2RhdGEtPnBpcGVfaWRbaV1dOw0KPiArCQlk YXRhLT5wcmltYXJ5W2ldID0gaWd0X3BpcGVfZ2V0X3BsYW5lX3R5cGUoDQo+ICsJCQkJZGF0YS0+ cGlwZVtpXSwgRFJNX1BMQU5FX1RZUEVfUFJJTUFSWSk7DQo+ICsJCWRhdGEtPnBpcGVfY3JjW2ld ID0NCj4gKwkJCQlpZ3RfcGlwZV9jcmNfbmV3KGRhdGEtPmZkLCBkYXRhLT5waXBlX2lkW2ldLCAi YXV0byIpOw0KPiArCX0NCj4gKw0KPiArCWZvciAoaSA9IDAsIG4gPSAwOyBpIDwgZGlzcGxheS0+ bl9vdXRwdXRzICYmIG4gPCBkaXNwbGF5LT5uX3BpcGVzOyArK2kpIHsNCj4gKwkJaWd0X291dHB1 dF90ICpvdXRwdXQgPSAmZGlzcGxheS0+b3V0cHV0c1tpXTsNCj4gKwkJZGF0YS0+b3V0cHV0W25d ID0gb3V0cHV0Ow0KPiArDQo+ICsJCS8qIE9ubHkgYWxsb3cgcGh5c2ljYWxseSBjb25uZWN0ZWQg ZGlzcGxheXMgZm9yIHRoZSB0ZXN0cy4gKi8NCj4gKwkJaWYgKCFpZ3Rfb3V0cHV0X2lzX2Nvbm5l Y3RlZChvdXRwdXQpKQ0KPiArCQkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCS8qIEVuc3VyZSB0aGF0 IG91dHB1cyBhcmUgRFAsIERTQyAmIEZFQyBjYXBhYmxlKi8NCj4gKwkJaWYgKCEoaXNfZHBfZmVj X3N1cHBvcnRlZChkYXRhLT5mZCwgb3V0cHV0LT5uYW1lKSAmJg0KPiArCQkJaXNfZHBfZHNjX3N1 cHBvcnRlZChkYXRhLT5mZCwgb3V0cHV0LT5uYW1lKSkpDQo+ICsJCQljb250aW51ZTsNCj4gKw0K PiArCQlpZiAob3V0cHV0LT5jb25maWcuY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPQ0KPiAr CQkJRFJNX01PREVfQ09OTkVDVE9SX0Rpc3BsYXlQb3J0KQ0KPiArCQkJY29udGludWU7DQo+ICsN Cj4gKwkJaWd0X2Fzc2VydChrbXN0ZXN0X2dldF9jb25uZWN0b3JfZGVmYXVsdF9tb2RlKA0KPiAr CQkJCWRhdGEtPmZkLCBvdXRwdXQtPmNvbmZpZy5jb25uZWN0b3IsICZkYXRhLT5tb2RlW25dKSk7 DQo+ICsNCj4gKwkJbiArPSAxOw0KPiArCX0NCj4gKw0KPiArCWlndF9kaXNwbGF5X3Jlc2V0KGRp c3BsYXkpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCB0ZXN0X2RzY19lbmFibGUoZGF0YV90 ICpkYXRhKSB7DQo+ICsJYm9vbCBkc2Nfb24sIGRzY19hZnRlciwgZHNjX2JlZm9yZTsNCj4gKwlp Z3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7DQo+ICsJaWd0X291dHB1dF90 ICpvdXRwdXQ7DQo+ICsJaWd0X2ZiX3QgcmVmX2ZiOw0KPiArCWludCBpLCB0ZXN0X2Nvbm5fY250 ID0gMDsNCj4gKw0KPiArCXRlc3RfaW5pdChkYXRhKTsNCj4gKwlpZ3RfZW5hYmxlX2Nvbm5lY3Rv cnMoZGF0YS0+ZmQpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5fcGlwZXM7 IGkrKykgew0KPiArCQkvKiBTZXR1cCB0aGUgb3V0cHV0ICovDQo+ICsJCW91dHB1dCA9IGRhdGEt Pm91dHB1dFtpXTsNCj4gKwkJaWYgKCFvdXRwdXQgfHwgIWlndF9vdXRwdXRfaXNfY29ubmVjdGVk KG91dHB1dCkpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQlpZ3RfY3JlYXRlX3BhdHRlcm5f ZmIoZGF0YS0+ZmQsDQo+ICsJCQkJCWRhdGEtPm1vZGVbaV0uaGRpc3BsYXksDQo+ICsJCQkJCWRh dGEtPm1vZGVbaV0udmRpc3BsYXksDQo+ICsJCQkJCURSTV9GT1JNQVRfWFJHQjg4ODgsDQo+ICsJ CQkJCTAsDQo+ICsJCQkJCSZyZWZfZmIpOw0KPiArCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1 dCwgZGF0YS0+cGlwZV9pZFtpXSk7DQo+ICsJCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cHJpbWFy eVtpXSwgJnJlZl9mYik7DQo+ICsJCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoZGlzcGxheSwg RFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIA0KPiArMCk7DQo+ICsNCj4gKwkJdGVzdF9j b25uX2NudCsrOw0KPiArDQo+ICsJCS8qIFNhdmUgcGlwZSdzIGluaXRpYWwgRFNDIHN0YXRlICov DQo+ICsJCWRzY19iZWZvcmUgPSBpZ3RfYW1kX3JlYWRfZHNjX2Nsb2NrX3N0YXR1cyhkYXRhLT5m ZCwgb3V0cHV0LT5uYW1lKTsNCj4gKw0KPiArCQkvKiBGb3JjZSBlbmFibGUgRFNDICovDQo+ICsJ CWlndF9hbWRfd3JpdGVfZHNjX2Nsb2NrX2VuKGRhdGEtPmZkLCBvdXRwdXQtPm5hbWUsIERTQ19G T1JDRV9PTik7DQo+ICsNCj4gKwkJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wcmltYXJ5W2ldLCAm cmVmX2ZiKTsNCj4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0X2F0b21pYyhkaXNwbGF5LCBEUk1fTU9E RV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgDQo+ICtOVUxMKTsNCj4gKw0KPiArCQkvKiBDaGVjayBp ZiBEU0MgaXMgZW5hYmxlZCAqLw0KPiArCQlkc2Nfb24gPSBpZ3RfYW1kX3JlYWRfZHNjX2Nsb2Nr X3N0YXR1cyhkYXRhLT5mZCwgb3V0cHV0LT5uYW1lKSA9PSANCj4gKzE7DQo+ICsNCj4gKwkJLyog UmV2ZXJ0IERTQyB0byBhdXRvbWF0aWMgc3RhdGUgKi8NCj4gKwkJaWd0X2FtZF93cml0ZV9kc2Nf Y2xvY2tfZW4oZGF0YS0+ZmQsIG91dHB1dC0+bmFtZSwgRFNDX0ZPUkNFX09GRik7DQo+ICsNCj4g KwkJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wcmltYXJ5W2ldLCAmcmVmX2ZiKTsNCj4gKwkJaWd0 X2Rpc3BsYXlfY29tbWl0X2F0b21pYyhkaXNwbGF5LERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RF U0VULCANCj4gK05VTEwpOw0KPiArDQo+ICsJCWRzY19hZnRlciA9IGlndF9hbWRfcmVhZF9kc2Nf Y2xvY2tfc3RhdHVzKGRhdGEtPmZkLCBvdXRwdXQtPm5hbWUpOw0KPiArDQo+ICsJCS8qIFJldmVy dCBEU0MgYmFjayB0byBhdXRvbWF0aWMgbWVjaGFuaXNtIGJ5IGRpc2FibGluZyBzdGF0ZSBvdmVy d3JpdGVzKi8NCj4gKwkJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wcmltYXJ5W2ldLCAmcmVmX2Zi KTsNCj4gKw0KPiArCQlpZ3RfYW1kX3dyaXRlX2RzY19jbG9ja19lbihkYXRhLT5mZCwgb3V0cHV0 LT5uYW1lLCBEU0NfQVVUT01BVElDKTsNCj4gKw0KPiArCQlpZ3RfZGlzcGxheV9jb21taXRfYXRv bWljKGRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCANCj4gK05VTEwpOw0K PiArDQo+ICsJCWlndF9hc3NlcnRfZihkc2Nfb24sICJFbmFibGluZyBEU0Mgb24gcGlwZSBmYWls ZWQuXG4iKTsNCj4gKwkJaWd0X2Fzc2VydF9mKGRzY19hZnRlciA9PSBkc2NfYmVmb3JlLCAiUmV2 ZXJ0aW5nIERTQyB0byBpbml0aWFsIA0KPiArc3RhdGUgZmFpbGVkLlxuIik7DQo+ICsNCj4gKwkJ LyogQ2xlYW51cCBmYiAqLw0KPiArCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEtPmZkLCAmcmVmX2ZiKTsN Cj4gKwl9DQo+ICsNCj4gKwl0ZXN0X2ZpbmkoZGF0YSk7DQo+ICsJaWd0X3NraXBfb24odGVzdF9j b25uX2NudCA9PSAwKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQgdGVzdF9kc2Nfc2xpY2Vf aGVpZ2h0X3Byb3BlcnR5KGRhdGFfdCAqZGF0YSkgew0KPiArCWJvb2wgZHNjX29uLCBkc2NfYWZ0 ZXIsIGRzY19iZWZvcmU7DQo+ICsJaW50IHNsaWNlX2hlaWdodF9vbiwgc2xpY2VfaGVpZ2h0X29m ZjsNCj4gKwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7DQo+ICsJaWd0 X291dHB1dF90ICpvdXRwdXQ7DQo+ICsJaWd0X2ZiX3QgcmVmX2ZiOw0KPiArCWludCBpLCB0ZXN0 X2Nvbm5fY250ID0gMDsNCj4gKw0KPiArCXRlc3RfaW5pdChkYXRhKTsNCj4gKwlpZ3RfZW5hYmxl X2Nvbm5lY3RvcnMoZGF0YS0+ZmQpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGRpc3BsYXkt Pm5fcGlwZXM7IGkrKykgew0KPiArCQkvKiBTZXR1cCB0aGUgb3V0cHV0ICovDQo+ICsJCW91dHB1 dCA9IGRhdGEtPm91dHB1dFtpXTsNCj4gKwkJaWYgKCFvdXRwdXQgfHwgIWlndF9vdXRwdXRfaXNf Y29ubmVjdGVkKG91dHB1dCkpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQlpZ3RfY3JlYXRl X3BhdHRlcm5fZmIoZGF0YS0+ZmQsDQo+ICsJCQkJCWRhdGEtPm1vZGVbaV0uaGRpc3BsYXksDQo+ ICsJCQkJCWRhdGEtPm1vZGVbaV0udmRpc3BsYXksDQo+ICsJCQkJCURSTV9GT1JNQVRfWFJHQjg4 ODgsDQo+ICsJCQkJCTAsDQo+ICsJCQkJCSZyZWZfZmIpOw0KPiArCQlpZ3Rfb3V0cHV0X3NldF9w aXBlKG91dHB1dCwgZGF0YS0+cGlwZV9pZFtpXSk7DQo+ICsJCWlndF9wbGFuZV9zZXRfZmIoZGF0 YS0+cHJpbWFyeVtpXSwgJnJlZl9mYik7DQo+ICsJCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMo ZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIA0KPiArMCk7DQo+ICsNCj4g KwkJdGVzdF9jb25uX2NudCsrOw0KPiArDQo+ICsJCS8qIFNhdmUgcGlwZSdzIGluaXRpYWwgRFND IHN0YXRlICovDQo+ICsJCWRzY19iZWZvcmUgPSBpZ3RfYW1kX3JlYWRfZHNjX2Nsb2NrX3N0YXR1 cyhkYXRhLT5mZCwgb3V0cHV0LT5uYW1lKTsNCj4gKw0KPiArCQkvKiBGb3JjZSBlbmFibGUgRFND ICovDQo+ICsJCWlndF9hbWRfd3JpdGVfZHNjX2Nsb2NrX2VuKGRhdGEtPmZkLCBvdXRwdXQtPm5h bWUsIERTQ19GT1JDRV9PTik7DQo+ICsNCj4gKwkJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wcmlt YXJ5W2ldLCAmcmVmX2ZiKTsNCj4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0X2F0b21pYyhkaXNwbGF5 LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgDQo+ICtOVUxMKTsNCj4gKw0KPiArCQkv KiBDaGVjayBpZiBEU0MgaXMgZW5hYmxlZCAqLw0KPiArCQlkc2Nfb24gPSBpZ3RfYW1kX3JlYWRf ZHNjX2Nsb2NrX3N0YXR1cyhkYXRhLT5mZCwgb3V0cHV0LT5uYW1lKSA9PSANCj4gKzE7DQo+ICsN Cj4gKwkJc2xpY2VfaGVpZ2h0X29uID0gaWd0X3BpcGVfZ2V0X3Byb3AoZGlzcGxheSwgZGF0YS0+ cGlwZV9pZFtpXSwgDQo+ICtJR1RfQ1JUQ19EU0NfU0xJQ0VfSEVJR0hUKTsNCj4gKw0KPiArCQkv KiBSZXZlcnQgRFNDIHRvIGF1dG9tYXRpYyBzdGF0ZSAqLw0KPiArCQlpZ3RfYW1kX3dyaXRlX2Rz Y19jbG9ja19lbihkYXRhLT5mZCwgb3V0cHV0LT5uYW1lLCBEU0NfRk9SQ0VfT0ZGKTsNCj4gKw0K PiArCQlpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnByaW1hcnlbaV0sICZyZWZfZmIpOw0KPiArCQlp Z3RfZGlzcGxheV9jb21taXRfYXRvbWljKGRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19BTExPV19N T0RFU0VULCANCj4gK05VTEwpOw0KPiArDQo+ICsJCWRzY19hZnRlciA9IGlndF9hbWRfcmVhZF9k c2NfY2xvY2tfc3RhdHVzKGRhdGEtPmZkLCBvdXRwdXQtPm5hbWUpOw0KPiArDQo+ICsJCXNsaWNl X2hlaWdodF9vZmYgPSBpZ3RfcGlwZV9nZXRfcHJvcChkaXNwbGF5LCBkYXRhLT5waXBlX2lkW2ld LCANCj4gK0lHVF9DUlRDX0RTQ19TTElDRV9IRUlHSFQpOw0KPiArDQo+ICsJCS8qIFJldmVydCBE U0MgYmFjayB0byBhdXRvbWF0aWMgbWVjaGFuaXNtIGJ5IGRpc2FibGluZyBzdGF0ZSBvdmVyd3Jp dGVzKi8NCj4gKwkJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wcmltYXJ5W2ldLCAmcmVmX2ZiKTsN Cj4gKw0KPiArCQlpZ3RfYW1kX3dyaXRlX2RzY19jbG9ja19lbihkYXRhLT5mZCwgb3V0cHV0LT5u YW1lLCBEU0NfQVVUT01BVElDKTsNCj4gKw0KPiArCQlpZ3RfZGlzcGxheV9jb21taXRfYXRvbWlj KGRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCANCj4gK05VTEwpOw0KPiAr DQo+ICsJCWlndF9hc3NlcnRfZihkc2Nfb24sICJFbmFibGluZyBEU0Mgb24gcGlwZSBmYWlsZWQu XG4iKTsNCj4gKwkJaWd0X2Fzc2VydF9mKHNsaWNlX2hlaWdodF9vbiA+IDAsICJEU0MgU2xpY2Ug cHJvcGVydHkgd2FzIG5vdCBzZXQgcHJvcGVybHkuXG4iKTsNCj4gKwkJaWd0X2Fzc2VydF9mKGRz Y19hZnRlciA9PSBkc2NfYmVmb3JlLCAiUmV2ZXJ0aW5nIERTQyB0byBpbml0aWFsIHN0YXRlIGZh aWxlZC5cbiIpOw0KPiArCQlpZ3RfYXNzZXJ0X2Yoc2xpY2VfaGVpZ2h0X29mZiA9PSAwLCAiRFND IFNsaWNlIHByb3BlcnR5IHdhcyBub3QgDQo+ICtyZXNldCBwcm9wZXJseS5cbiIpOw0KPiArDQo+ ICsJCS8qIENsZWFudXAgZmIgKi8NCj4gKwkJaWd0X3JlbW92ZV9mYihkYXRhLT5mZCwgJnJlZl9m Yik7DQo+ICsJfQ0KPiArDQo+ICsJdGVzdF9maW5pKGRhdGEpOw0KPiArCWlndF9za2lwX29uKHRl c3RfY29ubl9jbnQgPT0gMCk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBib29sIHVwZGF0ZV9zbGlj ZV9oZWlnaHQoZGF0YV90ICpkYXRhLCBpbnQgdl9hZGRyZXNzYWJsZSwNCj4gKwkJCQkJICBpbnQg Km51bV9zbGljZXMsIGlndF9vdXRwdXRfdCAqb3V0cHV0LCBpbnQgY29ubl9pZHgsIGlndF9mYl90 IA0KPiArcmVmX2ZiKSB7DQo+ICsJaW50IGk7DQo+ICsJYm9vbCBwYXNzID0gdHJ1ZTsNCj4gKw0K PiArCWZvcihpID0gMDsgaSA8IE5VTV9TTElDRV9TTE9UUzsgaSsrKSB7DQo+ICsJCWludCBhY3Rf c2xpY2VfaGVpZ2h0Ow0KPiArCQlpbnQgc2xpY2VfaGVpZ2h0ID0gdl9hZGRyZXNzYWJsZSAvIG51 bV9zbGljZXNbaV0gKyAodl9hZGRyZXNzYWJsZSAlIA0KPiArbnVtX3NsaWNlc1tpXSk7DQo+ICsN Cj4gKwkJLyogT3ZlcndyaXRlIERTQyBzbGljZSBoZWlnaHQgKi8NCj4gKwkJaWd0X2FtZF93cml0 ZV9kc2NfcGFyYW1fc2xpY2VfaGVpZ2h0KGRhdGEtPmZkLCBvdXRwdXQtPm5hbWUsIHNsaWNlX2hl aWdodCk7DQo+ICsJCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cHJpbWFyeVtjb25uX2lkeF0sICZy ZWZfZmIpOw0KPiArCQlpZ3RfZGlzcGxheV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LCAN Cj4gK0RSTV9NT0RFX0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxMKTsNCj4gKw0KPiArCQlpZ3Rf aW5mbygiRm9yY2luZyBzbGljZSBoZWlnaHQ6IHNsaWNlIGhlaWdodCAlZCBudW0gc2xpY2VzIHZl cnRpY2FsIA0KPiArJWRcbiIsIHNsaWNlX2hlaWdodCwgbnVtX3NsaWNlc1tpXSk7DQo+ICsNCj4g KwkJYWN0X3NsaWNlX2hlaWdodCA9IGlndF9hbWRfcmVhZF9kc2NfcGFyYW1fc2xpY2VfaGVpZ2h0 KGRhdGEtPmZkLCANCj4gK291dHB1dC0+bmFtZSk7DQo+ICsNCj4gKwkJaWd0X2luZm8oIlJlYWRp bmcgc2xpY2UgaGVpZ2h0OiBhY3R1YWwgc2xpY2UgaGVpZ2h0ICVkIFZTIGFzc2lnbmVkIA0KPiAr c2xpY2UgaGVpZ2h0ICVkXG4iLCBhY3Rfc2xpY2VfaGVpZ2h0LCBzbGljZV9oZWlnaHQpOw0KPiAr DQo+ICsJCXBhc3MgPSAoc2xpY2VfaGVpZ2h0ID09IGFjdF9zbGljZV9oZWlnaHQpOw0KPiArDQo+ ICsJCWlmICghcGFzcykNCj4gKwkJCWJyZWFrOw0KPiArCX0NCj4gKw0KPiArCWlndF9hbWRfd3Jp dGVfZHNjX3BhcmFtX3NsaWNlX2hlaWdodChkYXRhLT5mZCwgb3V0cHV0LT5uYW1lLCAwKTsNCj4g KwlpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnByaW1hcnlbY29ubl9pZHhdLCAmcmVmX2ZiKTsNCj4g KwlpZ3RfZGlzcGxheV9jb21taXRfYXRvbWljKCZkYXRhLT5kaXNwbGF5LCANCj4gK0RSTV9NT0RF X0FUT01JQ19BTExPV19NT0RFU0VULCBOVUxMKTsNCj4gKw0KPiArCXJldHVybiBwYXNzOw0KPiAr fQ0KPiArDQo+ICtzdGF0aWMgYm9vbCB1cGRhdGVfc2xpY2Vfd2lkdGgoZGF0YV90ICpkYXRhLCBp bnQgaF9hZGRyZXNzYWJsZSwNCj4gKwkJCQkJICBpbnQgKm51bV9zbGljZXMsIGlndF9vdXRwdXRf dCAqb3V0cHV0LCBpbnQgY29ubl9pZHgsIGlndF9mYl90IA0KPiArcmVmX2ZiKSB7DQo+ICsJaW50 IGk7DQo+ICsJYm9vbCBwYXNzID0gdHJ1ZTsNCj4gKw0KPiArCWZvcihpID0gMDsgaSA8IE5VTV9T TElDRV9TTE9UUzsgaSsrKSB7DQo+ICsJCWludCBhY3Rfc2xpY2Vfd2lkdGg7DQo+ICsJCWludCBz bGljZV93aWR0aCA9IGhfYWRkcmVzc2FibGUgLyBudW1fc2xpY2VzW2ldICsgKGhfYWRkcmVzc2Fi bGUgJSANCj4gK251bV9zbGljZXNbaV0pOw0KPiArDQo+ICsJCS8qIE92ZXJ3cml0ZSBEU0Mgc2xp Y2Ugd2lkdGggKi8NCj4gKwkJaWd0X2FtZF93cml0ZV9kc2NfcGFyYW1fc2xpY2Vfd2lkdGgoZGF0 YS0+ZmQsIG91dHB1dC0+bmFtZSwgc2xpY2Vfd2lkdGgpOw0KPiArCQlpZ3RfcGxhbmVfc2V0X2Zi KGRhdGEtPnByaW1hcnlbY29ubl9pZHhdLCAmcmVmX2ZiKTsNCj4gKwkJaWd0X2Rpc3BsYXlfY29t bWl0X2F0b21pYygmZGF0YS0+ZGlzcGxheSwgDQo+ICtEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9E RVNFVCwgTlVMTCk7DQo+ICsNCj4gKwkJaWd0X2luZm8oIkZvcmNpbmcgc2xpY2Ugd2lkdGg6IHNs aWNlIHdpZHRoICVkIG51bSBzbGljZXMgaG9yaXNvbnRhbCANCj4gKyVkXG4iLCBzbGljZV93aWR0 aCwgbnVtX3NsaWNlc1tpXSk7DQo+ICsNCj4gKwkJYWN0X3NsaWNlX3dpZHRoID0gaWd0X2FtZF9y ZWFkX2RzY19wYXJhbV9zbGljZV93aWR0aChkYXRhLT5mZCwgDQo+ICtvdXRwdXQtPm5hbWUpOw0K PiArDQo+ICsJCWlndF9pbmZvKCJSZWFkaW5nIHNsaWNlIHdpZHRoOiBhY3R1YWwgc2xpY2Ugd2lk dGggJWQgVlMgYXNzaWduZWQgDQo+ICtzbGljZSB3aWR0aCAlZFxuIiwgYWN0X3NsaWNlX3dpZHRo LCBzbGljZV93aWR0aCk7DQo+ICsNCj4gKwkJcGFzcyA9IChzbGljZV93aWR0aCA9PSBhY3Rfc2xp Y2Vfd2lkdGgpOw0KPiArDQo+ICsJCWlmICghcGFzcykNCj4gKwkJCWJyZWFrOw0KPiArCX0NCj4g Kw0KPiArCWlndF9hbWRfd3JpdGVfZHNjX3BhcmFtX3NsaWNlX3dpZHRoKGRhdGEtPmZkLCBvdXRw dXQtPm5hbWUsIDApOw0KPiArCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cHJpbWFyeVtjb25uX2lk eF0sICZyZWZfZmIpOw0KPiArCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoJmRhdGEtPmRpc3Bs YXksIA0KPiArRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIE5VTEwpOw0KPiArDQo+ICsJ cmV0dXJuIHBhc3M7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHRlc3RfZHNjX3NsaWNlX2Rp bWVuc2lvbnNfY2hhbmdlKGRhdGFfdCAqZGF0YSkgew0KPiArCWJvb2wgZHNjX29uLCBkc2NfYWZ0 ZXIsIGRzY19iZWZvcmU7DQo+ICsJaWd0X291dHB1dF90ICpvdXRwdXQ7DQo+ICsJaWd0X2Rpc3Bs YXlfdCAqZGlzcGxheSA9ICZkYXRhLT5kaXNwbGF5Ow0KPiArCWlndF9mYl90IHJlZl9mYjsNCj4g KwlpbnQgbnVtX3NsaWNlcyBbXSA9IHsgMSwgMiwgNCwgOCB9Ow0KPiArCWludCBoX2FkZHJlc3Nh YmxlLCB2X2FkZHJlc3NhYmxlOw0KPiArCWJvb2wgcmV0X3NsaWNlX2hlaWdodD0gZmFsc2UsIHJl dF9zbGljZV93aWR0aCA9IGZhbHNlOw0KPiArCWludCBpLCB0ZXN0X2Nvbm5fY250ID0gMDsNCj4g Kw0KPiArCXRlc3RfaW5pdChkYXRhKTsNCj4gKwlpZ3RfZW5hYmxlX2Nvbm5lY3RvcnMoZGF0YS0+ ZmQpOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5fcGlwZXM7IGkrKykgew0K PiArCQkvKiBTZXR1cCB0aGUgb3V0cHV0ICovDQo+ICsJCW91dHB1dCA9IGRhdGEtPm91dHB1dFtp XTsNCj4gKwkJaWYgKCFvdXRwdXQgfHwgIWlndF9vdXRwdXRfaXNfY29ubmVjdGVkKG91dHB1dCkp DQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiArCQlpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGF0YS0+ ZmQsDQo+ICsJCQkJCWRhdGEtPm1vZGVbaV0uaGRpc3BsYXksDQo+ICsJCQkJCWRhdGEtPm1vZGVb aV0udmRpc3BsYXksDQo+ICsJCQkJCURSTV9GT1JNQVRfWFJHQjg4ODgsDQo+ICsJCQkJCTAsDQo+ ICsJCQkJCSZyZWZfZmIpOw0KPiArCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgZGF0YS0+ cGlwZV9pZFtpXSk7DQo+ICsJCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cHJpbWFyeVtpXSwgJnJl Zl9mYik7DQo+ICsJCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoZGlzcGxheSwgRFJNX01PREVf QVRPTUlDX0FMTE9XX01PREVTRVQsIA0KPiArMCk7DQo+ICsNCj4gKwkJdGVzdF9jb25uX2NudCsr Ow0KPiArDQo+ICsJCWhfYWRkcmVzc2FibGUgPSBkYXRhLT5tb2RlLT5oZGlzcGxheTsNCj4gKwkJ dl9hZGRyZXNzYWJsZSA9IGRhdGEtPm1vZGUtPnZkaXNwbGF5Ow0KPiArDQo+ICsJCWlndF9pbmZv KCJNb2RlIGluZm86IHZfYXRpdmUgJWQgIGhfYWN0aXZlICVkXG4iLCB2X2FkZHJlc3NhYmxlLCAN Cj4gK2hfYWRkcmVzc2FibGUpOw0KPiArDQo+ICsJCS8qIFNhdmUgcGlwZSdzIGluaXRpYWwgRFND IHN0YXRlICovDQo+ICsJCWRzY19iZWZvcmUgPSBpZ3RfYW1kX3JlYWRfZHNjX2Nsb2NrX3N0YXR1 cyhkYXRhLT5mZCwgb3V0cHV0LT5uYW1lKTsNCj4gKw0KPiArCQkvKiBGb3JjZSBlbmFibGUgRFND ICovDQo+ICsJCWlndF9hbWRfd3JpdGVfZHNjX2Nsb2NrX2VuKGRhdGEtPmZkLCBvdXRwdXQtPm5h bWUsIERTQ19GT1JDRV9PTik7DQo+ICsNCj4gKwkJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wcmlt YXJ5W2ldLCAmcmVmX2ZiKTsNCj4gKwkJaWd0X2Rpc3BsYXlfY29tbWl0X2F0b21pYyhkaXNwbGF5 LCBEUk1fTU9ERV9BVE9NSUNfQUxMT1dfTU9ERVNFVCwgDQo+ICtOVUxMKTsNCj4gKw0KPiArCQkv KiBDaGVjayBpZiBEU0MgaXMgZW5hYmxlZCAqLw0KPiArCQlkc2Nfb24gPSBpZ3RfYW1kX3JlYWRf ZHNjX2Nsb2NrX3N0YXR1cyhkYXRhLT5mZCwgb3V0cHV0LT5uYW1lKSA9PSANCj4gKzE7DQo+ICsN Cj4gKwkJaWYgKGRzY19vbikgew0KPiArCQkJcmV0X3NsaWNlX2hlaWdodCA9IHVwZGF0ZV9zbGlj ZV9oZWlnaHQoZGF0YSwgdl9hZGRyZXNzYWJsZSwgbnVtX3NsaWNlcywgb3V0cHV0LCBpLCByZWZf ZmIpOw0KPiArCQkJcmV0X3NsaWNlX3dpZHRoID0gdXBkYXRlX3NsaWNlX3dpZHRoKGRhdGEsIGhf YWRkcmVzc2FibGUsIG51bV9zbGljZXMsIG91dHB1dCwgaSwgcmVmX2ZiKTsNCj4gKwkJfQ0KPiAr DQo+ICsJCS8qIEZvcmNlIGRpc2FibGUgRFNDICovDQo+ICsJCWlndF9hbWRfd3JpdGVfZHNjX2Ns b2NrX2VuKGRhdGEtPmZkLCBvdXRwdXQtPm5hbWUsIERTQ19GT1JDRV9PRkYpOw0KPiArDQo+ICsJ CWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cHJpbWFyeVtpXSwgJnJlZl9mYik7DQo+ICsJCWlndF9k aXNwbGF5X2NvbW1pdF9hdG9taWMoZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVT RVQsIA0KPiArTlVMTCk7DQo+ICsNCj4gKwkJZHNjX2FmdGVyID0gaWd0X2FtZF9yZWFkX2RzY19j bG9ja19zdGF0dXMoZGF0YS0+ZmQsIG91dHB1dC0+bmFtZSk7DQo+ICsNCj4gKwkJLyogUmV2ZXJ0 IERTQyBiYWNrIHRvIGF1dG9tYXRpYyBtZWNoYW5pc20gYnkgZGlzYWJsaW5nIHN0YXRlIG92ZXJ3 cml0ZXMqLw0KPiArCQlpZ3RfcGxhbmVfc2V0X2ZiKGRhdGEtPnByaW1hcnlbaV0sICZyZWZfZmIp Ow0KPiArDQo+ICsJCWlndF9hbWRfd3JpdGVfZHNjX2Nsb2NrX2VuKGRhdGEtPmZkLCBvdXRwdXQt Pm5hbWUsIERTQ19BVVRPTUFUSUMpOw0KPiArDQo+ICsJCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9t aWMoZGlzcGxheSwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIA0KPiArTlVMTCk7DQo+ ICsNCj4gKwkJaWd0X2Fzc2VydF9mKGRzY19vbiwgIkVuYWJsaW5nIERTQyBvbiBwaXBlIGZhaWxl ZC5cbiIpOw0KPiArCQlpZ3RfYXNzZXJ0X2YocmV0X3NsaWNlX2hlaWdodCwgIkNoYW5naW5nIHNs aWNlIGhlaWdodCBmYWlsZWQuXG4iKTsNCj4gKwkJaWd0X2Fzc2VydF9mKHJldF9zbGljZV93aWR0 aCwgIkNoYW5naW5nIHNsaWNlIHdpZHRoIGZhaWxlZC5cbiIpOw0KPiArCQlpZ3RfYXNzZXJ0X2Yo ZHNjX2FmdGVyID09IGRzY19iZWZvcmUsICJSZXZlcnRpbmcgRFNDIHRvIGluaXRpYWwgDQo+ICtz dGF0ZSBmYWlsZWQuXG4iKTsNCj4gKw0KPiArCQkvKiBDbGVhbnVwIGZiICovDQo+ICsJCWlndF9y ZW1vdmVfZmIoZGF0YS0+ZmQsICZyZWZfZmIpOw0KPiArCX0NCj4gKw0KPiArCXRlc3RfZmluaShk YXRhKTsNCj4gKwlpZ3Rfc2tpcF9vbih0ZXN0X2Nvbm5fY250ID09IDApOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgdm9pZCB0ZXN0X2RzY19saW5rX3NldHRpbmdzKGRhdGFfdCAqZGF0YSkgew0KPiAr CWlndF9vdXRwdXRfdCAqb3V0cHV0Ow0KPiArCWlndF9mYl90IHJlZl9mYltNQVhfUElQRVNdOw0K PiArCWlndF9jcmNfdCByZWZfY3JjW01BWF9QSVBFU10sIG5ld19jcmNbTUFYX1BJUEVTXTsNCj4g KyAgICBpbnQgbGFuZV9jb3VudFs0XSwgbGlua19yYXRlWzRdLCBsaW5rX3NwcmVhZFs0XTsNCj4g KwlpZ3RfZGlzcGxheV90ICpkaXNwbGF5ID0gJmRhdGEtPmRpc3BsYXk7DQo+ICsJaW50IGksIGxj LCBscjsNCj4gKyAgICBib29sIGRzY19vbjsNCj4gKwljb25zdCBlbnVtIGRjX2xhbmVfY291bnQg bGFuZV9jb3VudF92YWxzW10gPQ0KPiArCXsNCj4gKwkJTEFORV9DT1VOVF9UV08sDQo+ICsJCUxB TkVfQ09VTlRfRk9VUg0KPiArCX07DQo+ICsJY29uc3QgZW51bSBkY19saW5rX3JhdGUgbGlua19y YXRlX3ZhbHNbXSA9DQo+ICsJew0KPiArCQlMSU5LX1JBVEVfTE9XLA0KPiArCQlMSU5LX1JBVEVf SElHSCwNCj4gKwkJTElOS19SQVRFX0hJR0gyLA0KPiArCQlMSU5LX1JBVEVfSElHSDMNCj4gKwl9 Ow0KPiArDQo+ICsgICAgdGVzdF9pbml0KGRhdGEpOw0KPiArDQo+ICsgICAgLyogU2V0dXAgYWxs IG91dHB1dHMgKi8NCj4gKwlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+bl9waXBlczsgaSsrKSB7 DQo+ICsJCW91dHB1dCA9IGRhdGEtPm91dHB1dFtpXTsNCj4gKwkJaWYgKCFvdXRwdXQgfHwgIWln dF9vdXRwdXRfaXNfY29ubmVjdGVkKG91dHB1dCkpDQo+ICsJCQljb250aW51ZTsNCj4gKw0KPiAr ICAgICAgICBpZ3RfY3JlYXRlX3BhdHRlcm5fZmIoZGF0YS0+ZmQsDQo+ICsgICAgICAgICAgICAg ICAgICAgIGRhdGEtPm1vZGVbaV0uaGRpc3BsYXksDQo+ICsgICAgICAgICAgICAgICAgICAgIGRh dGEtPm1vZGVbaV0udmRpc3BsYXksDQo+ICsgICAgICAgICAgICAgICAgICAgIERSTV9GT1JNQVRf WFJHQjg4ODgsDQo+ICsgICAgICAgICAgICAgICAgICAgIDAsDQo+ICsgICAgICAgICAgICAgICAg ICAgICZyZWZfZmJbaV0pOw0KPiArCQlpZ3Rfb3V0cHV0X3NldF9waXBlKG91dHB1dCwgZGF0YS0+ cGlwZV9pZFtpXSk7DQo+ICsJCWlndF9wbGFuZV9zZXRfZmIoZGF0YS0+cHJpbWFyeVtpXSwgJnJl Zl9mYltpXSk7DQo+ICsJfQ0KPiArCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoZGlzcGxheSwg RFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIA0KPiArMCk7DQo+ICsNCj4gKyAgICAvKiBD b2xsZWN0IHJlZmVyZW5jZSBDUkNzICovDQo+ICsJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5f cGlwZXM7IGkrKykgew0KPiArCQlvdXRwdXQgPSBkYXRhLT5vdXRwdXRbaV07DQo+ICsJCWlmICgh b3V0cHV0IHx8ICFpZ3Rfb3V0cHV0X2lzX2Nvbm5lY3RlZChvdXRwdXQpKQ0KPiArCQkJY29udGlu dWU7DQo+ICsNCj4gKwkJaWd0X3BpcGVfY3JjX2NvbGxlY3RfY3JjKGRhdGEtPnBpcGVfY3JjW2ld LCAmcmVmX2NyY1tpXSk7DQo+ICsJfQ0KPiArDQo+ICsJZm9yIChsYyA9IDA7IGxjIDwgQVJSQVlf U0laRShsYW5lX2NvdW50X3ZhbHMpOyBsYysrKSB7DQo+ICsJCWZvciAobHIgPSAwOyBsciA8IEFS UkFZX1NJWkUobGlua19yYXRlX3ZhbHMpOyBscisrKSB7DQo+ICsJCQkvKiBXcml0ZSBuZXcgbGlu a19zZXR0aW5ncyAqLw0KPiArCQkJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm5fcGlwZXM7IGkr Kykgew0KPiArCQkJCW91dHB1dCA9IGRhdGEtPm91dHB1dFtpXTsNCj4gKwkJCQlpZiAoIW91dHB1 dCB8fCAhaWd0X291dHB1dF9pc19jb25uZWN0ZWQob3V0cHV0KSkNCj4gKwkJCQkJY29udGludWU7 DQo+ICsNCj4gKwkJCQkvKiBXcml0ZSBsb3dlciBsaW5rIHNldHRpbmdzICovDQo+ICsJCQkJaWd0 X2luZm8oIkFwcGx5aW5nIGxhbmUgY291bnQ6ICVkLCBsaW5rIHJhdGUgMHglMDJ4LCBvbiBkZWZh dWx0IHRyYWluaW5nXG4iLA0KPiArCQkJCQkJbGFuZV9jb3VudF92YWxzW2xjXSwgbGlua19yYXRl X3ZhbHNbbHJdKTsNCj4gKwkJCQlpZ3RfYW1kX3dyaXRlX2xpbmtfc2V0dGluZ3MoZGF0YS0+ZmQs IG91dHB1dC0+bmFtZSwNCj4gKwkJCQkJCQlsYW5lX2NvdW50X3ZhbHNbbGNdLA0KPiArCQkJCQkJ CWxpbmtfcmF0ZV92YWxzW2xyXSwNCj4gKwkJCQkJCQlMSU5LX1RSQUlOSU5HX0RFRkFVTFQpOw0K PiArCQkJCXVzbGVlcCg1MDAgKiBNU0VDX1BFUl9TRUMpOw0KPiArCQkJfQ0KPiArDQo+ICsJCQkv KiBUcmlnZ2VyIGNvbW1pdCBhZnRlciB3cml0aW5nIG5ldyBsaW5rIHNldHRpbmdzICovDQo+ICsJ CQlpZ3RfZGlzcGxheV9jb21taXRfYXRvbWljKGRpc3BsYXksIERSTV9NT0RFX0FUT01JQ19BTExP V19NT0RFU0VULCANCj4gK05VTEwpOw0KPiArDQo+ICsJCQlmb3IgKGkgPSAwOyBpIDwgZGlzcGxh eS0+bl9waXBlczsgaSsrKSB7DQo+ICsJCQkJb3V0cHV0ID0gZGF0YS0+b3V0cHV0W2ldOw0KPiAr CQkJCWlmICghb3V0cHV0IHx8ICFpZ3Rfb3V0cHV0X2lzX2Nvbm5lY3RlZChvdXRwdXQpKQ0KPiAr CQkJCQljb250aW51ZTsNCj4gKw0KPiArCQkJCS8qIFZlcmlmeSBsb3dlciBsaW5rIHNldHRpbmdz ICovDQo+ICsJCQkJaWd0X2FtZF9yZWFkX2xpbmtfc2V0dGluZ3MoZGF0YS0+ZmQsIG91dHB1dC0+ bmFtZSwNCj4gKwkJCQkJCQlsYW5lX2NvdW50LA0KPiArCQkJCQkJCWxpbmtfcmF0ZSwNCj4gKwkJ CQkJCQlsaW5rX3NwcmVhZCk7DQo+ICsNCj4gKwkJCQlpZ3RfYXNzZXJ0X2YobGFuZV9jb3VudFsw XSA9PSBsYW5lX2NvdW50X3ZhbHNbbGNdLCAiTG93ZXJpbmcgbGFuZSBjb3VudCBzZXR0aW5ncyBm YWlsZWRcbiIpOw0KPiArCQkJCWlndF9hc3NlcnRfZihsaW5rX3JhdGVbMF0gPT0gbGlua19yYXRl X3ZhbHNbbHJdLCAiTG93ZXJpbmcgbGluayANCj4gK3JhdGUgc2V0dGluZ3MgZmFpbGVkXG4iKTsN Cj4gKw0KPiArCQkJCS8qIExvZyBjdXJyZW50IG1vZGUgYW5kIERTQyBzdGF0dXMgKi8NCj4gKwkJ CQlkc2Nfb24gPSBpZ3RfYW1kX3JlYWRfZHNjX2Nsb2NrX3N0YXR1cyhkYXRhLT5mZCwgb3V0cHV0 LT5uYW1lKSA9PSAxOw0KPiArCQkJCWlndF9pbmZvKCJDdXJyZW50IG1vZGUgaXM6ICVkeCVkIEAl ZEh6IC0tIERTQyBpczogJXNcbiIsDQo+ICsJCQkJCQkJZGF0YS0+bW9kZVtpXS5oZGlzcGxheSwN Cj4gKwkJCQkJCQlkYXRhLT5tb2RlW2ldLnZkaXNwbGF5LA0KPiArCQkJCQkJCWRhdGEtPm1vZGVb aV0udnJlZnJlc2gsDQo+ICsJCQkJCQkJZHNjX29uID8gIk9OIiA6ICJPRkYiKTsNCj4gKw0KPiAr CQkJCWlndF9waXBlX2NyY19jb2xsZWN0X2NyYyhkYXRhLT5waXBlX2NyY1tpXSwgJm5ld19jcmNb aV0pOw0KPiArCQkJCWlndF9hc3NlcnRfY3JjX2VxdWFsKCZyZWZfY3JjW2ldLCAmbmV3X2NyY1tp XSk7DQo+ICsJCQl9DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwkvKiBDbGVhbnVwIGFsbCBmYnMg Ki8NCj4gKwlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+bl9waXBlczsgaSsrKSB7DQo+ICsJCW91 dHB1dCA9IGRhdGEtPm91dHB1dFtpXTsNCj4gKwkJaWYgKCFvdXRwdXQgfHwgIWlndF9vdXRwdXRf aXNfY29ubmVjdGVkKG91dHB1dCkpDQo+ICsJCQljb250aW51ZTsNCj4gKwkJaWd0X3JlbW92ZV9m YihkYXRhLT5mZCwgJnJlZl9mYltpXSk7DQo+ICsJfQ0KPiArDQo+ICsgICAgdGVzdF9maW5pKGRh dGEpOw0KPiArfQ0KPiArDQo+ICsvKiBSZXR1cm5zIHRoZSBjdXJyZW50IGFuZCBtYXhpbXVtIGJw YyBmcm9tIHRoZSBjb25uZWN0b3IgZGVidWdmcy4gKi8gDQo+ICtzdGF0aWMgb3V0cHV0X2JwY190 IGdldF9vdXRwdXRfYnBjKGludCBkYXRhX2ZkLCBjaGFyICpjb25uZWN0b3JfbmFtZSkgDQo+ICt7 DQo+ICsJY2hhciBidWZbMjU2XTsNCj4gKwljaGFyICpzdGFydF9sb2M7DQo+ICsJaW50IGZkLCBy ZXM7DQo+ICsJb3V0cHV0X2JwY190IGluZm87DQo+ICsNCj4gKwlmZCA9IGlndF9kZWJ1Z2ZzX2Nv bm5lY3Rvcl9kaXIoZGF0YV9mZCwgY29ubmVjdG9yX25hbWUsIE9fUkRPTkxZKTsNCj4gKwlpZ3Rf YXNzZXJ0KGZkID49IDApOw0KPiArDQo+ICsJcmVzID0gaWd0X2RlYnVnZnNfc2ltcGxlX3JlYWQo ZmQsICJvdXRwdXRfYnBjIiwgYnVmLCBzaXplb2YoYnVmKSk7DQo+ICsNCj4gKwlpZ3RfcmVxdWly ZShyZXMgPiAwKTsNCj4gKw0KPiArCWNsb3NlKGZkKTsNCj4gKw0KPiArCWlndF9hc3NlcnQoc3Rh cnRfbG9jID0gc3Ryc3RyKGJ1ZiwgIkN1cnJlbnQ6ICIpKTsNCj4gKwlpZ3RfYXNzZXJ0X2VxKHNz Y2FuZihzdGFydF9sb2MsICJDdXJyZW50OiAldSIsICZpbmZvLmN1cnJlbnQpLCAxKTsNCj4gKw0K PiArCWlndF9hc3NlcnQoc3RhcnRfbG9jID0gc3Ryc3RyKGJ1ZiwgIk1heGltdW06ICIpKTsNCj4g KwlpZ3RfYXNzZXJ0X2VxKHNzY2FuZihzdGFydF9sb2MsICJNYXhpbXVtOiAldSIsICZpbmZvLm1h eGltdW0pLCAxKTsNCj4gKw0KPiArCXJldHVybiBpbmZvOw0KPiArfQ0KPiArDQo+ICsvKiBWZXJp ZmllcyB0aGF0IGNvbm5lY3RvciBoYXMgdGhlIGNvcnJlY3Qgb3V0cHV0IGJwYyAqLyBzdGF0aWMg dm9pZCANCj4gK2Fzc2VydF9vdXRwdXRfYnBjKGludCBkYXRhX2ZkLCBjaGFyICpjb25uZWN0b3Jf bmFtZSwgdW5zaWduZWQgaW50IA0KPiArYnBjKSB7DQo+ICsJb3V0cHV0X2JwY190IGluZm8gPSBn ZXRfb3V0cHV0X2JwYyhkYXRhX2ZkLCBjb25uZWN0b3JfbmFtZSk7DQo+ICsNCj4gKwlpZ3RfcmVx dWlyZV9mKGluZm8ubWF4aW11bSA+PSBicGMsDQo+ICsJCSAgICAgICJNb25pdG9yIGRvZXNuJ3Qg c3VwcG9ydCAldSBicGMsIG1heCBpcyAldVxuIiwgYnBjLA0KPiArCQkgICAgICBpbmZvLm1heGlt dW0pOw0KPiArDQo+ICsJaWd0X2Fzc2VydF9lcShpbmZvLmN1cnJlbnQsIGJwYyk7DQo+ICt9DQo+ ICsNCj4gKy8qIFJldHVybnMgdGhlIGhpZ2hlc3QgYnBjIHRoaXMgZGlzcGFseSBzdXBwb3J0cyAq LyBzdGF0aWMgaW50IA0KPiArZ2V0X21heF9zdXBwb3J0ZWRfYnBjKGludCBkYXRhX2ZkLCBjaGFy ICpjb25uZWN0b3JfbmFtZSkgew0KPiArCW91dHB1dF9icGNfdCBpbmZvID0gZ2V0X291dHB1dF9i cGMoZGF0YV9mZCwgY29ubmVjdG9yX25hbWUpOw0KPiArCXJldHVybiBpbmZvLm1heGltdW07DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIHRlc3RfZHNjX2JwYyhkYXRhX3QgKmRhdGEpIHsNCj4g KwlpZ3Rfb3V0cHV0X3QgKm91dHB1dDsNCj4gKwlpZ3RfZmJfdCByZWZfZmJbTUFYX1BJUEVTXTsN Cj4gKwlpZ3RfY3JjX3QgdGVzdF9jcmM7DQo+ICsJaWd0X2Rpc3BsYXlfdCAqZGlzcGxheSA9ICZk YXRhLT5kaXNwbGF5Ow0KPiArCWludCBpLCBicGMsIG1heF9zdXBwb3J0ZWRfYnBjW01BWF9QSVBF U107DQo+ICsgICAgYm9vbCBkc2Nfb247DQo+ICsJY29uc3QgaW50IGJwY192YWxzW10gPSB7MTIs IDEwLCA4fTsNCj4gKw0KPiArICAgIHRlc3RfaW5pdChkYXRhKTsNCj4gKw0KPiArCS8qIEZpbmQg bWF4IHN1cHBvcnRlZCBicGMgKi8NCj4gKwlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+bl9waXBl czsgaSsrKSB7DQo+ICsJCW91dHB1dCA9IGRhdGEtPm91dHB1dFtpXTsNCj4gKwkJaWYgKCFvdXRw dXQgfHwgIWlndF9vdXRwdXRfaXNfY29ubmVjdGVkKG91dHB1dCkpDQo+ICsJCQljb250aW51ZTsN Cj4gKwkJaWd0X2luZm8oIkNoZWNraW5nIGJwYyBzdXBwb3J0IG9mIGNvbm4gJXNcbiIsIG91dHB1 dC0+bmFtZSk7DQo+ICsJCW1heF9zdXBwb3J0ZWRfYnBjW2ldID0gZ2V0X21heF9zdXBwb3J0ZWRf YnBjKGRhdGEtPmZkLCBvdXRwdXQtPm5hbWUpOw0KPiArCX0NCj4gKw0KPiArICAgIC8qIFNldHVw IGFsbCBvdXRwdXRzICovDQo+ICsJZm9yIChicGMgPSAwOyBicGMgPCBBUlJBWV9TSVpFKGJwY192 YWxzKTsgYnBjKyspIHsNCj4gKwkJaWd0X2luZm8oIlRlc3RpbmcgYnBjID0gJWRcbiIsIGJwY192 YWxzW2JwY10pOw0KPiArDQo+ICsJCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5uX3BpcGVzOyBp KyspIHsNCj4gKwkJCW91dHB1dCA9IGRhdGEtPm91dHB1dFtpXTsNCj4gKwkJCWlmICghb3V0cHV0 IHx8ICFpZ3Rfb3V0cHV0X2lzX2Nvbm5lY3RlZChvdXRwdXQpKQ0KPiArCQkJCWNvbnRpbnVlOw0K PiArDQo+ICsJCQlpZiAobWF4X3N1cHBvcnRlZF9icGNbaV0gPCBicGNfdmFsc1ticGNdKSB7DQo+ ICsJCQkJaWd0X2luZm8oIkRpc3BsYXkgZG9lc24ndCBzdXBwb3J0IGJwYyBvZiAlZCwgbWF4IGlz ICVkLiBTa2lwcGluZyB0byBuZXh0IGJwYyB2YWx1ZS5cbiIsIGJwY192YWxzW2JwY10sIG1heF9z dXBwb3J0ZWRfYnBjW2ldKTsNCj4gKwkJCQljb250aW51ZTsNCj4gKwkJCX0NCj4gKwkJCWlndF9p bmZvKCJTZXR0aW5nIGJwYyA9ICVkXG4iLCBicGNfdmFsc1ticGNdKTsNCj4gKwkJCWlndF9vdXRw dXRfc2V0X3Byb3BfdmFsdWUob3V0cHV0LCBJR1RfQ09OTkVDVE9SX01BWF9CUEMsIGJwY192YWxz W2JwY10pOw0KPiArCQkJaWd0X2NyZWF0ZV9wYXR0ZXJuX2ZiKGRhdGEtPmZkLA0KPiArCQkJCQkJ ZGF0YS0+bW9kZVtpXS5oZGlzcGxheSwNCj4gKwkJCQkJCWRhdGEtPm1vZGVbaV0udmRpc3BsYXks DQo+ICsJCQkJCQlEUk1fRk9STUFUX1hSR0I4ODg4LA0KPiArCQkJCQkJMCwNCj4gKwkJCQkJCSZy ZWZfZmJbaV0pOw0KPiArCQkJaWd0X291dHB1dF9zZXRfcGlwZShvdXRwdXQsIGRhdGEtPnBpcGVf aWRbaV0pOw0KPiArCQkJaWd0X3BsYW5lX3NldF9mYihkYXRhLT5wcmltYXJ5W2ldLCAmcmVmX2Zi W2ldKTsNCj4gKwkJfQ0KPiArDQo+ICsJCWlndF9kaXNwbGF5X2NvbW1pdF9hdG9taWMoZGlzcGxh eSwgRFJNX01PREVfQVRPTUlDX0FMTE9XX01PREVTRVQsIA0KPiArMCk7DQo+ICsNCj4gKwkJZm9y IChpID0gMDsgaSA8IGRpc3BsYXktPm5fcGlwZXM7IGkrKykgew0KPiArCQkJb3V0cHV0ID0gZGF0 YS0+b3V0cHV0W2ldOw0KPiArCQkJaWYgKCFvdXRwdXQgfHwgIWlndF9vdXRwdXRfaXNfY29ubmVj dGVkKG91dHB1dCkpDQo+ICsJCQkJY29udGludWU7DQo+ICsNCj4gKwkJCWlmIChtYXhfc3VwcG9y dGVkX2JwY1tpXSA8IGJwY192YWxzW2JwY10pDQo+ICsJCQkJY29udGludWU7DQo+ICsNCj4gKwkJ CS8qIENoZWNrIHRoYXQgY3JjIGlzIG5vbi16ZXJvICovDQo+ICsJCQlpZ3RfcGlwZV9jcmNfY29s bGVjdF9jcmMoZGF0YS0+cGlwZV9jcmNbaV0sICZ0ZXN0X2NyYyk7DQo+ICsJCQlpZ3RfYXNzZXJ0 KHRlc3RfY3JjLmNyY1swXSAmJiB0ZXN0X2NyYy5jcmNbMV0gJiYgdGVzdF9jcmMuY3JjWzJdKTsN Cj4gKw0KPiArCQkJLyogQ2hlY2sgY3VycmVudCBicGMgKi8NCj4gKwkJCWlndF9pbmZvKCJWZXJp ZnlpbmcgZGlzcGxheSAlcyBoYXMgY29ycmVjdCBicGNcbiIsIG91dHB1dC0+bmFtZSk7DQo+ICsJ CQlhc3NlcnRfb3V0cHV0X2JwYyhkYXRhLT5mZCwgb3V0cHV0LT5uYW1lLCBicGNfdmFsc1ticGNd KTsNCj4gKw0KPiArCQkJLyogTG9nIGN1cnJlbnQgbW9kZSBhbmQgRFNDIHN0YXR1cyAqLw0KPiAr CQkJZHNjX29uID0gaWd0X2FtZF9yZWFkX2RzY19jbG9ja19zdGF0dXMoZGF0YS0+ZmQsIG91dHB1 dC0+bmFtZSkgPT0gMTsNCj4gKwkJCWlndF9pbmZvKCJDdXJyZW50IG1vZGUgaXM6ICVkeCVkIEAl ZEh6IC0tIERTQyBpczogJXNcbiIsDQo+ICsJCQkJCQlkYXRhLT5tb2RlW2ldLmhkaXNwbGF5LA0K PiArCQkJCQkJZGF0YS0+bW9kZVtpXS52ZGlzcGxheSwNCj4gKwkJCQkJCWRhdGEtPm1vZGVbaV0u dnJlZnJlc2gsDQo+ICsJCQkJCQlkc2Nfb24gPyAiT04iIDogIk9GRiIpOw0KPiArCQl9DQo+ICsN Cj4gKwkJLyogQ2xlYW51cCBhbGwgZmJzICovDQo+ICsJCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5 LT5uX3BpcGVzOyBpKyspIHsNCj4gKwkJCW91dHB1dCA9IGRhdGEtPm91dHB1dFtpXTsNCj4gKwkJ CWlmICghb3V0cHV0IHx8ICFpZ3Rfb3V0cHV0X2lzX2Nvbm5lY3RlZChvdXRwdXQpKQ0KPiArCQkJ CWNvbnRpbnVlOw0KPiArDQo+ICsJCQlpZiAobWF4X3N1cHBvcnRlZF9icGNbaV0gPCBicGNfdmFs c1ticGNdKQ0KPiArCQkJCWNvbnRpbnVlOw0KPiArDQo+ICsJCQlpZ3RfcmVtb3ZlX2ZiKGRhdGEt PmZkLCAmcmVmX2ZiW2ldKTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArICAgIHRlc3RfZmluaShk YXRhKTsNCj4gK30NCj4gKw0KPiAraWd0X21haW4NCj4gK3sNCj4gKwlkYXRhX3QgZGF0YSA9IHsg MCB9Ow0KPiArDQo+ICsJaWd0X3NraXBfb25fc2ltdWxhdGlvbigpOw0KPiArDQo+ICsJaWd0X2Zp eHR1cmUNCj4gKwl7DQo+ICsJCWRhdGEuZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZF Ul9BTlkpOw0KPiArDQo+ICsJCWlndF9kaXNwbGF5X3JlcXVpcmUoJmRhdGEuZGlzcGxheSwgZGF0 YS5mZCk7DQo+ICsJCWlndF9yZXF1aXJlKGRhdGEuZGlzcGxheS5pc19hdG9taWMpOw0KPiArCQlp Z3RfZGlzcGxheV9yZXF1aXJlX291dHB1dCgmZGF0YS5kaXNwbGF5KTsNCj4gKw0KPiArCQlpZ3Rf YW1kX3JlcXVpcmVfZHNjKCZkYXRhLmRpc3BsYXksIGRhdGEuZmQpOw0KPiArCQlrbXN0ZXN0X3Nl dF92dF9ncmFwaGljc19tb2RlKCk7DQo+ICsJfQ0KPiArDQo+ICsJaWd0X2Rlc2NyaWJlKCJGb3Jj ZXMgRFNDIG9uL29mZiAmIGVuc3VyZXMgaXQgaXMgcmVzZXQgcHJvcGVybHkiKTsNCj4gKwlpZ3Rf c3VidGVzdCgiZHNjLWVuYWJsZS1iYXNpYyIpDQo+ICsJCSAgICB0ZXN0X2RzY19lbmFibGUoJmRh dGEpOw0KPiArDQo+ICsJaWd0X2Rlc2NyaWJlKCJUZXN0cyBEU0Mgc2xpY2UgaGVpZ2h0IHByb3Bl cnR5ICYgZW5zdXJlcyBpdCBpcyByZXNldCBwcm9wZXJseSBvbiBEU0MgZW5hYmxlL2Rpc2FibGUi KTsNCj4gKwlpZ3Rfc3VidGVzdCgiZHNjLXNsaWNlLWhlaWdodC1wcm9wZXJ0eSIpDQo+ICsJCSAg ICB0ZXN0X2RzY19zbGljZV9oZWlnaHRfcHJvcGVydHkoJmRhdGEpOw0KPiArDQo+ICsJaWd0X2Rl c2NyaWJlKCJUZXN0cyB2YXJpb3VzIERTQyBzbGljZSBkaW1lbnNpb25zIik7DQo+ICsJaWd0X3N1 YnRlc3QoImRzYy1zbGljZS1kaW1lbnNpb25zLWNoYW5nZSIpDQo+ICsJCSAgICB0ZXN0X2RzY19z bGljZV9kaW1lbnNpb25zX2NoYW5nZSgmZGF0YSk7DQo+ICsNCj4gKwlpZ3RfZGVzY3JpYmUoIlRl c3RzIHZhcmlvdXMgY29tYmluYXRpb25zIG9mIGxpbmtfcmF0ZSArIGxhbmVfY291bnQgYW5kIGxv Z3MgaWYgRFNDIGVuYWJsZWQvZGlzYWJsZWQiKTsNCj4gKwlpZ3Rfc3VidGVzdCgiZHNjLWxpbmst c2V0dGluZ3MiKQ0KPiArCQkgICAgdGVzdF9kc2NfbGlua19zZXR0aW5ncygmZGF0YSk7DQo+ICsN Cj4gKwlpZ3RfZGVzY3JpYmUoIlRlc3RzIGRpZmZlcmVudCBicGMgc2V0dGluZ3MgYW5kIGxvZ3Mg aWYgRFNDIGlzIGVuYWJsZWQvZGlzYWJsZWQiKTsNCj4gKwlpZ3Rfc3VidGVzdCgiZHNjLWJwYyIp DQo+ICsJCQl0ZXN0X2RzY19icGMoJmRhdGEpOw0KPiArDQo+ICsJaWd0X2ZpeHR1cmUNCj4gKwl7 DQo+ICsJCWlndF9yZXNldF9jb25uZWN0b3JzKCk7DQo+ICsJCWlndF9kaXNwbGF5X2ZpbmkoJmRh dGEuZGlzcGxheSk7DQo+ICsJfQ0KPiArfQ0KPiBkaWZmIC0tZ2l0IGEvdGVzdHMvYW1kZ3B1L21l c29uLmJ1aWxkIGIvdGVzdHMvYW1kZ3B1L21lc29uLmJ1aWxkIGluZGV4IA0KPiBiNzM2YzQ1Ni4u MDAxZTM3ZWYgMTAwNjQ0DQo+IC0tLSBhL3Rlc3RzL2FtZGdwdS9tZXNvbi5idWlsZA0KPiArKysg Yi90ZXN0cy9hbWRncHUvbWVzb24uYnVpbGQNCj4gQEAgLTE2LDYgKzE2LDcgQEAgaWYgbGliZHJt X2FtZGdwdS5mb3VuZCgpDQo+ICAgCQkJICAnYW1kX21lbV9sZWFrJywNCj4gICAJCQkgICdhbWRf bGlua19zZXR0aW5ncycsDQo+ICAgCQkJICAnYW1kX3Zycl9yYW5nZScsDQo+ICsJCQkgICdhbWRf ZHBfZHNjJywNCj4gICAJCQldDQo+ICAgCWFtZGdwdV9kZXBzICs9IGxpYmRybV9hbWRncHUNCj4g ICBlbmRpZg0KPiANCg0K