From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id E4278892A8 for ; Wed, 28 Mar 2018 13:32:35 +0000 (UTC) From: "Szwichtenberg, Radoslaw" Date: Wed, 28 Mar 2018 13:32:30 +0000 Message-ID: <1522243947.3030.4.camel@intel.com> References: <20180327133648.30510-1-katarzyna.dec@intel.com> <0f3bbe88-8d88-128a-3f95-2909e4115fb3@intel.com> In-Reply-To: <0f3bbe88-8d88-128a-3f95-2909e4115fb3@intel.com> Content-Language: en-US Content-ID: MIME-Version: 1.0 Subject: Re: [igt-dev] [PATCH i-g-t 1/3] lib: Move common gpgpu/media functions to gpu_fill library List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: "Ceraolo Spurio, Daniele" , "Dec, Katarzyna" , "igt-dev@lists.freedesktop.org" List-ID: T24gVHVlLCAyMDE4LTAzLTI3IGF0IDE2OjUyIC0wNzAwLCBEYW5pZWxlIENlcmFvbG8gU3B1cmlv IHdyb3RlOg0KPiANCj4gT24gMjcvMDMvMTggMDY6MzYsIEthdGFyenluYSBEZWMgd3JvdGU6DQo+ ID4gR3BncHVfZmlsbCBhbmQgbWVkaWFfZmlsbCBsaWJyYXJpZXMgYXJlIHZlcnkgc2ltaWxhciBh bmQgbWFueQ0KPiA+IGZ1bmN0aW9ucyBjYW4gYmUgc2hhcmVkLiBJIGhhdmUgY3JlYXRlZCBsaWJy YXJ5IGdwdV9maWxsIHdpdGgNCj4gPiBhbGwgZnVuY3Rpb25zIG5lZWRlZCBmb3IgaW1wbGVtZW50 aW5nIGdwZ3B1X2ZpbGwgYW5kIG1lZGlhX2ZpbGwNCj4gPiB0ZXN0cyBmb3IgYWxsIEdlbnMuIER1 cGxpY2F0ZXMsIGUuZy4gd2hlcmUgb25seSBuYW1lIHdhcyBjaGFuZ2VkLA0KPiA+IHdlcmUgcmVt b3ZlZC4gVGhlIGVhcmxpZXN0IGNvbW1vbiBmdW5jdGlvbiByZW1haW5lZC4NCj4gPiANCj4gPiBT aWduZWQtb2ZmLWJ5OiBLYXRhcnp5bmEgRGVjIDxrYXRhcnp5bmEuZGVjQGludGVsLmNvbT4NCj4g PiBDYzogTHVrYXN6IEthbGFtYXJ6IDxsdWthc3oua2FsYW1hcnpAaW50ZWwuY29tPg0KPiA+IENj OiBEYW5pZWxlIENlcmFvbG8gU3B1cmlvIDxkYW5pZWxlLmNlcmFvbG9zcHVyaW9AaW50ZWwuY29t Pg0KPiA+IC0tLQ0KPiA+IMKgIGxpYi9NYWtlZmlsZS5zb3VyY2VzwqDCoMKgwqB8wqDCoMKgMiAr DQo+ID4gwqAgbGliL2dwZ3B1X2ZpbGwuY8KgwqDCoMKgwqDCoMKgwqB8IDU2NyArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ID4gwqAgbGliL2dwdV9maWxsLmPCoMKgwqDC oMKgwqDCoMKgwqDCoHwgNzI5DQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrDQo+ID4gwqAgbGliL2dwdV9maWxsLmjCoMKgwqDCoMKgwqDCoMKgwqDC oHwgMTQxICsrKysrKysrKysNCj4gPiDCoCBsaWIvbWVkaWFfZmlsbF9nZW43LmPCoMKgwqB8IDI3 MSArLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiDCoCBsaWIvbWVkaWFfZmlsbF9nZW44LmPCoMKgwqB8 IDI5NyArLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+IMKgIGxpYi9tZWRpYV9maWxsX2dlbjhscC5j IHwgMjg5ICstLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiDCoCBsaWIvbWVkaWFfZmlsbF9nZW45LmPC oMKgwqB8IDMwNCArLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+IMKgIGxpYi9tZXNvbi5idWlsZMKg wqDCoMKgwqDCoMKgwqDCoHzCoMKgwqAxICsNCj4gPiDCoCA5IGZpbGVzIGNoYW5nZWQsIDg5MCBp bnNlcnRpb25zKCspLCAxNzExIGRlbGV0aW9ucygtKQ0KPiA+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWIvZ3B1X2ZpbGwuYw0KPiA+IMKgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvZ3B1X2ZpbGwu aA0KPiA+IA0KPiANCj4gVGhpcyBwYXRjaCBoYXMgYSB2ZXJ5IGJpZyBkaWZmIGFuZCBpdCBpc24n dCBhIDE6MSBtb3ZlIG9mIGNvZGUgc28gScKgDQo+IHN1Z2dlc3QgdG8gYnJlYWsgaXQgdXAgYSBs aXR0bGUgdG8gbWFrZSBpdCBlYXNpZXIgdG8gcmV2aWV3LiANCkxvb2tzIGxpa2UgYWxtb3N0IDE6 MSBtb3ZlIHRvIG1lLiBEaWZmZXJlbmNlcyBpbiB0aGlzIGNvZGUgaXMgb25lIGZ1bmN0aW9uDQp1 bmlmaWVkIGNhdXNlIGl0cyBib2R5IGlzIGV4YWN0bHkgdGhlIHNhbWUgKGdlbjdfZmlsbF9rZXJu ZWwpIGFuZCBzbWFsbA0KbW9kaWZpY2F0aW9uIGluIGdlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJl c3MuDQoNCkFuIGFwcHJvYWNoIHRha2VuIGhlcmUgbG9va3MgbGlrZSBwaGFzZWQgb25lOiBtb3Zp bmcgZXZlcnl0aGluZyB0byBvbmUgcGxhY2UNCihpbW1lZGlhdGVseSByZW1vdmluZyBzb21lIGR1 cGxpY2F0aW9uIGZvciBleGFjdGx5IHNhbWUgZnVuY3Rpb25zKSBhbmQgYXMgc2Vjb25kDQpwaGFz ZSByZXdvcmtpbmcgc2ltaWxhciBmdW5jdGlvbnMgdGhhdCBoYXZlIHZlcnkgbGl0dGxlIGRpZmZl cmVuY2VzIChhcyB5b3UNCnN1Z2dlc3QgYmVsb3cpLiBJbmRlZWQgdGhpcyBwYXRjaCBpcyBxdWl0 ZSBiaWcgdGhvdWdoIGl0IGRvZXNuJ3QgaGF2ZSB0b28gbWFueQ0KZnVuY3Rpb25hbCBjaGFuZ2Vz IHNvIHNob3VsZCBiZSBxdWl0ZSBlYXN5IHRvIHJldmlldy4gRm9yIHJld29ya2luZyBmdW5jdGlv bnMNCnRoYXQgYXJlIHZlcnkgc2ltaWxhciBhbmQgYXJlIHNwcmVhZCBhY3Jvc3MgbWFueSBmaWxl cyAobGlrZSBmaWxsX3N1cmZhY2Vfc3RhdGUpDQogIEkgdGhpbmsgdGhpcyB3YXkgd2lsbCBhbGxv dyBlYXNpZXIgcmV2aWV3IGZvciByZW1haW5pbmcgY2hhbmdlcy4gSSB0aGluayB0aGF0DQp0aG9z ZSBjaGFuZ2VzIHNob3VsZCBiZSBwYXJ0IG9mIHRoaXMgc2VyaWVzIHRob3VnaC4NCg0KUmFkZWsN Cj4gWW91IGNvdWxkwqANCj4gc3RhcnQgd2l0aCBtb3ZpbmcgdGhlIGJhdGNoXyogZnVuY3Rpb25z LCB3aGljaCBidHcgcHJvYmFibHkgc2hvdWxkIGJlwqANCj4gbW92ZWQgdG8gaW50ZWxfYmF0Y2hi dWZmZXIuPGgvYz4uIFRoZXJlIGFyZSBjb3BpZXMgb2YgdGhvc2UgYmF0Y2hfKsKgDQo+IGZ1bmN0 aW9ucyBpbiBvdGhlciBmaWxlcyBhcyB3ZWxsIChlLmcgcmVuZGVyY29weSksIHNvIG9uY2UgeW91 IG1vdmUgdGhlbcKgDQo+IGl0J2QgYmUgbmljZSB0byBtb3ZlIHRoZW0gZnJvbSBldmVyeXdoZXJl LiBOb3RlIHRoYXQgc29tZSBvZiB0aGVzZcKgDQo+IGZ1bmN0aW9ucyBzZWVtIHRvIGJlIHNpbWls YXIgdG8gZXhpc3Rpbmcgb25lcyAoZS5nLiBiYXRjaF9jb3B5IGFuZMKgDQo+IGludGVsX2JhdGNo YnVmZmVyX2RhdGEpLCBzbyB3ZSBjYW4gcHJvYmFibHkgcmVtb3ZlIGV4dHJhIGR1cGxpY2F0aW9u IGJ5wqANCj4gbWVyZ2luZyBzb21lIG9mIHRoZXNlLg0KPiANCj4gQWxzbywgSSB0aGluayB3ZSBj b3VsZCByZW1vdmUgc29tZSBkdXBsaWNhdGlvbiBiZWZvcmUgZG9pbmcgdGhlIG1vdmUswqANCj4g d2hpY2ggY291bGQgbWFrZSB0aGluZ3MgbW9yZSBtb2R1bGFyIGFuZCByZWR1Y2UgdGhlIGRpZmYg b2YgdGhlIG1vdmXCoA0KPiBpdHNlbGYuDQo+IEZvciBleGFtcGxlLCB0aGUgb25seSBkaWZmZXJl bmNlIGJldHdlZW4gbWVkaWFfZmlsbF9nZW44LmMgYW5kwqANCj4gbWVkaWFfZmlsbF9nZW44bHAu YyBpcyB0aGF0IGluIHRoZSAhbHAgY2FzZSB3ZSBlbWl0IGFuIGV4dHJhwqANCj4gR0VOOF9NRURJ QV9TVEFURV9GTFVTSC4gSW5zdGVhZCBvZiBkdXBsaWNhdGluZyB0aGUgd2hvbGUgZmlsZSwgd2Ug Y2FuwqANCj4ganVzdCBhZGQgYSAhSVNfQ0hFUlJZVklFVyhiYXRjaC0+ZGV2aWQpIGNoZWNrIGJl Zm9yZSBlbWl0dGluZyB0aGF0wqANCj4gaW5zdHJ1Y3Rpb24gYW5kIGVsaW1pbmF0ZSBnZW44bHBf bWVkaWFfZmlsbGZ1bmMgYW5kIHJlbGF0aXZlIGZpbGUgZW50aXJlbHkuDQo+IFNpbWlsYXJseSwg dGhlIGRpZmYgYmV0d2VlbiB0aGUgZ2VuOCBhbmQgZ2VuOSBmaWxlIGlzIG9ubHkgaW4gdGhlwqAN Cj4gZ2VuOV9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyBhbmQgZ2VuOV9tZWRpYV9maWxsZnVuYyBm dW5jdGlvbnMuIFRoZcKgDQo+IGZpcnN0IGhhcyBhIHZlcnkgc21hbGwgZGlmZmVyZW5jZSBjb21w YXJlZCB0byB0aGUgZ2VuOCBmdW5jdGlvbiBzbyB3ZcKgDQo+IGNhbiBwcm9iYWJseSBtZXJnZSB0 aGUgMiB1c2luZyBhIElTX0dFTigpIGNoZWNrIHRvIGFwcGx5IHRoZSBkaWZmLCB3aGlsZcKgDQo+ IHRoZSBsYXR0ZXIgd2UgY2FuIGp1c3QgY29weSBpbiB0aGUgZ2VuOCBmaWxlIGFuZCB0aHVzIGdl dCByaWQgb2YgdGhlwqANCj4gZ2VuOSBmaWxlIGFzIHdlbGwuDQo+IA0KPiBEYW5pZWxlDQo+IA0K PiA+IGRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUuc291cmNlcyBiL2xpYi9NYWtlZmlsZS5zb3Vy Y2VzDQo+ID4gaW5kZXggM2QzN2VmMWQuLjY5MGExZDM1IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9N YWtlZmlsZS5zb3VyY2VzDQo+ID4gKysrIGIvbGliL01ha2VmaWxlLnNvdXJjZXMNCj4gPiBAQCAt NTUsNiArNTUsOCBAQCBsaWJfc291cmNlX2xpc3QgPQnCoAlcDQo+ID4gwqDCoAlpbnRlbF9yZWcu aAkJXA0KPiA+IMKgwqAJaW9jdGxfd3JhcHBlcnMuYwlcDQo+ID4gwqDCoAlpb2N0bF93cmFwcGVy cy5oCVwNCj4gPiArCWdwdV9maWxsLmgJCVwNCj4gPiArCWdwdV9maWxsLmMJCVwNCj4gPiDCoMKg CW1lZGlhX2ZpbGwuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoFwNCj4gPiDCoMKgCW1lZGlhX2Zp bGxfZ2VuNy5jwqDCoMKgwqDCoMKgwqBcDQo+ID4gwqDCoAltZWRpYV9maWxsX2dlbjguY8KgwqDC oMKgwqDCoMKgXA0KPiA+IGRpZmYgLS1naXQgYS9saWIvZ3BncHVfZmlsbC5jIGIvbGliL2dwZ3B1 X2ZpbGwuYw0KPiA+IGluZGV4IDRkOTg2NDNkLi42OGNiYWM1ZSAxMDA2NDQNCj4gPiAtLS0gYS9s aWIvZ3BncHVfZmlsbC5jDQo+ID4gKysrIGIvbGliL2dwZ3B1X2ZpbGwuYw0KPiA+IEBAIC0zNCw2 ICszNCw3IEBADQo+ID4gwqAgI2luY2x1ZGUgImdlbjdfbWVkaWEuaCINCj4gPiDCoCAjaW5jbHVk ZSAiZ2VuOF9tZWRpYS5oIg0KPiA+IMKgICNpbmNsdWRlICJncGdwdV9maWxsLmgiDQo+ID4gKyNp bmNsdWRlICJncHVfZmlsbC5oIg0KPiA+IMKgwqANCj4gPiDCoCAvKiBzaGFkZXJzL2dwZ3B1L2dw Z3B1X2ZpbGwuZ3hhICovDQo+ID4gwqAgc3RhdGljIGNvbnN0IHVpbnQzMl90IGdlbjdfZ3BncHVf a2VybmVsW11bNF0gPSB7DQo+ID4gQEAgLTc1LDU3MiArNzYsNiBAQCBzdGF0aWMgY29uc3QgdWlu dDMyX3QgZ2VuOV9ncGdwdV9rZXJuZWxbXVs0XSA9IHsNCj4gPiDCoMKgCXsgMHgwNzgwMDAzMSwg MHgyMDAwMGE0MCwgMHgwNjAwMGUwMCwgMHg4MjAwMDAxMCB9LA0KPiA+IMKgIH07DQo+ID4gwqDC oA0KPiA+IC1zdGF0aWMgdWludDMyX3QNCj4gPiAtYmF0Y2hfdXNlZChzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoKQ0KPiA+IC17DQo+ID4gLQlyZXR1cm4gYmF0Y2gtPnB0ciAtIGJhdGNo LT5idWZmZXI7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1aW50MzJfdA0KPiA+IC1iYXRj aF9hbGlnbihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBhbGlnbikN Cj4gPiAtew0KPiA+IC0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfdXNlZChiYXRjaCk7DQo+ID4g LQlvZmZzZXQgPSBBTElHTihvZmZzZXQsIGFsaWduKTsNCj4gPiAtCWJhdGNoLT5wdHIgPSBiYXRj aC0+YnVmZmVyICsgb2Zmc2V0Ow0KPiA+IC0JcmV0dXJuIG9mZnNldDsNCj4gPiAtfQ0KPiA+IC0N Cj4gPiAtc3RhdGljIHZvaWQgKg0KPiA+IC1iYXRjaF9hbGxvYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBhbGlnbikNCj4gPiAtew0KPiA+ IC0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfYWxpZ24oYmF0Y2gsIGFsaWduKTsNCj4gPiAtCWJh dGNoLT5wdHIgKz0gc2l6ZTsNCj4gPiAtCXJldHVybiBtZW1zZXQoYmF0Y2gtPmJ1ZmZlciArIG9m ZnNldCwgMCwgc2l6ZSk7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1aW50MzJfdA0KPiA+ IC1iYXRjaF9vZmZzZXQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdm9pZCAqcHRy KQ0KPiA+IC17DQo+ID4gLQlyZXR1cm4gKHVpbnQ4X3QgKilwdHIgLSBiYXRjaC0+YnVmZmVyOw0K PiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdWludDMyX3QNCj4gPiAtYmF0Y2hfY29weShzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCB2b2lkICpwdHIsIHVpbnQzMl90IHNp emUsDQo+ID4gLQnCoMKgwqB1aW50MzJfdCBhbGlnbikNCj4gPiAtew0KPiA+IC0JcmV0dXJuIGJh dGNoX29mZnNldChiYXRjaCwgbWVtY3B5KGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplLCBhbGlnbiks DQo+ID4gcHRyLCBzaXplKSk7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB2b2lkDQo+ID4g LWdlbjdfcmVuZGVyX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQz Ml90IGJhdGNoX2VuZCkNCj4gPiAtew0KPiA+IC0JaW50IHJldDsNCj4gPiAtDQo+ID4gLQlyZXQg PSBkcm1faW50ZWxfYm9fc3ViZGF0YShiYXRjaC0+Ym8sIDAsIDQwOTYsIGJhdGNoLT5idWZmZXIp Ow0KPiA+IC0JaWYgKHJldCA9PSAwKQ0KPiA+IC0JCXJldCA9IGRybV9pbnRlbF9ib19tcmJfZXhl YyhiYXRjaC0+Ym8sIGJhdGNoX2VuZCwNCj4gPiAtCQkJCQlOVUxMLCAwLCAwLCAwKTsNCj4gPiAt CWlndF9hc3NlcnQocmV0ID09IDApOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdWludDMy X3QNCj4gPiAtZ2VuN19maWxsX2N1cmJlX2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsIHVpbnQ4X3QgY29sb3IpDQo+ID4gLXsNCj4gPiAtCXVpbnQ4X3QgKmN1cmJl X2J1ZmZlcjsNCj4gPiAtCXVpbnQzMl90IG9mZnNldDsNCj4gPiAtDQo+ID4gLQljdXJiZV9idWZm ZXIgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKHVpbnQzMl90KSAqIDgsIDY0KTsNCj4gPiAt CW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgY3VyYmVfYnVmZmVyKTsNCj4gPiAtCSpjdXJi ZV9idWZmZXIgPSBjb2xvcjsNCj4gPiAtDQo+ID4gLQlyZXR1cm4gb2Zmc2V0Ow0KPiA+IC19DQo+ ID4gLQ0KPiA+IC1zdGF0aWMgdWludDMyX3QNCj4gPiAtZ2VuN19maWxsX3N1cmZhY2Vfc3RhdGUo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwNCj4gPiAtCQkJc3RydWN0IGlndF9idWYg KmJ1ZiwNCj4gPiAtCQkJdWludDMyX3QgZm9ybWF0LA0KPiA+IC0JCQlpbnQgaXNfZHN0KQ0KPiA+ IC17DQo+ID4gLQlzdHJ1Y3QgZ2VuN19zdXJmYWNlX3N0YXRlICpzczsNCj4gPiAtCXVpbnQzMl90 IHdyaXRlX2RvbWFpbiwgcmVhZF9kb21haW4sIG9mZnNldDsNCj4gPiAtCWludCByZXQ7DQo+ID4g LQ0KPiA+IC0JaWYgKGlzX2RzdCkgew0KPiA+IC0JCXdyaXRlX2RvbWFpbiA9IHJlYWRfZG9tYWlu ID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsNCj4gPiAtCX0gZWxzZSB7DQo+ID4gLQkJd3JpdGVf ZG9tYWluID0gMDsNCj4gPiAtCQlyZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVS Ow0KPiA+IC0JfQ0KPiA+IC0NCj4gPiAtCXNzID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigq c3MpLCA2NCk7DQo+ID4gLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIHNzKTsNCj4gPiAt DQo+ID4gLQlzcy0+c3MwLnN1cmZhY2VfdHlwZSA9IEdFTjdfU1VSRkFDRV8yRDsNCj4gPiAtCXNz LT5zczAuc3VyZmFjZV9mb3JtYXQgPSBmb3JtYXQ7DQo+ID4gLQlzcy0+c3MwLnJlbmRlcl9jYWNo ZV9yZWFkX3dyaXRlID0gMTsNCj4gPiAtDQo+ID4gLQlpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9U SUxJTkdfWCkNCj4gPiAtCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAyOw0KPiA+IC0JZWxzZSBpZiAo YnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkNCj4gPiAtCQlzcy0+c3MwLnRpbGVkX21vZGUg PSAzOw0KPiA+IC0NCj4gPiAtCXNzLT5zczEuYmFzZV9hZGRyID0gYnVmLT5iby0+b2Zmc2V0Ow0K PiA+IC0JcmV0ID0gZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLA0KPiA+IC0JCQkJ YmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcykgKyA0LA0KPiA+IC0JCQkJYnVmLT5ibywgMCwNCj4gPiAt CQkJCXJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4pOw0KPiA+IC0JaWd0X2Fzc2VydChyZXQgPT0g MCk7DQo+ID4gLQ0KPiA+IC0Jc3MtPnNzMi5oZWlnaHQgPSBpZ3RfYnVmX2hlaWdodChidWYpIC0g MTsNCj4gPiAtCXNzLT5zczIud2lkdGjCoMKgPSBpZ3RfYnVmX3dpZHRoKGJ1ZikgLSAxOw0KPiA+ IC0NCj4gPiAtCXNzLT5zczMucGl0Y2jCoMKgPSBidWYtPnN0cmlkZSAtIDE7DQo+ID4gLQ0KPiA+ IC0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9yID0gNDsNCj4gPiAtCXNzLT5zczcuc2hh ZGVyX2NoYW5lbF9zZWxlY3RfZyA9IDU7DQo+ID4gLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2Vs ZWN0X2IgPSA2Ow0KPiA+IC0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9hID0gNzsNCj4g PiAtDQo+ID4gLQlyZXR1cm4gb2Zmc2V0Ow0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdWlu dDMyX3QNCj4gPiAtZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwNCj4gPiAtCQkJc3RydWN0IGlndF9idWYgKmJ1ZiwNCj4gPiAtCQkJdWludDMy X3QgZm9ybWF0LA0KPiA+IC0JCQlpbnQgaXNfZHN0KQ0KPiA+IC17DQo+ID4gLQlzdHJ1Y3QgZ2Vu OF9zdXJmYWNlX3N0YXRlICpzczsNCj4gPiAtCXVpbnQzMl90IHdyaXRlX2RvbWFpbiwgcmVhZF9k b21haW4sIG9mZnNldDsNCj4gPiAtCWludCByZXQ7DQo+ID4gLQ0KPiA+IC0JaWYgKGlzX2RzdCkg ew0KPiA+IC0JCXdyaXRlX2RvbWFpbiA9IHJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JF TkRFUjsNCj4gPiAtCX0gZWxzZSB7DQo+ID4gLQkJd3JpdGVfZG9tYWluID0gMDsNCj4gPiAtCQly ZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSOw0KPiA+IC0JfQ0KPiA+IC0NCj4g PiAtCXNzID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigqc3MpLCA2NCk7DQo+ID4gLQlvZmZz ZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIHNzKTsNCj4gPiAtDQo+ID4gLQlzcy0+c3MwLnN1cmZh Y2VfdHlwZSA9IEdFTjhfU1VSRkFDRV8yRDsNCj4gPiAtCXNzLT5zczAuc3VyZmFjZV9mb3JtYXQg PSBmb3JtYXQ7DQo+ID4gLQlzcy0+c3MwLnJlbmRlcl9jYWNoZV9yZWFkX3dyaXRlID0gMTsNCj4g PiAtCXNzLT5zczAudmVydGljYWxfYWxpZ25tZW50ID0gMTsgLyogYWxpZ24gNCAqLw0KPiA+IC0J c3MtPnNzMC5ob3Jpem9udGFsX2FsaWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8NCj4gPiAtDQo+ ID4gLQlpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWCkNCj4gPiAtCQlzcy0+c3MwLnRp bGVkX21vZGUgPSAyOw0KPiA+IC0JZWxzZSBpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdf WSkNCj4gPiAtCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAzOw0KPiA+IC0NCj4gPiAtCXNzLT5zczgu YmFzZV9hZGRyID0gYnVmLT5iby0+b2Zmc2V0Ow0KPiA+IC0NCj4gPiAtCXJldCA9IGRybV9pbnRl bF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywNCj4gPiAtCQkJCWJhdGNoX29mZnNldChiYXRjaCwg c3MpICsgOCAqIDQsDQo+ID4gLQkJCQlidWYtPmJvLCAwLA0KPiA+IC0JCQkJcmVhZF9kb21haW4s IHdyaXRlX2RvbWFpbik7DQo+ID4gLQlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7DQo+ID4gLQ0KPiA+ IC0Jc3MtPnNzMi5oZWlnaHQgPSBpZ3RfYnVmX2hlaWdodChidWYpIC0gMTsNCj4gPiAtCXNzLT5z czIud2lkdGjCoMKgPSBpZ3RfYnVmX3dpZHRoKGJ1ZikgLSAxOw0KPiA+IC0Jc3MtPnNzMy5waXRj aMKgwqA9IGJ1Zi0+c3RyaWRlIC0gMTsNCj4gPiAtDQo+ID4gLQlzcy0+c3M3LnNoYWRlcl9jaGFu ZWxfc2VsZWN0X3IgPSA0Ow0KPiA+IC0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9nID0g NTsNCj4gPiAtCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYiA9IDY7DQo+ID4gLQlzcy0+ c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2EgPSA3Ow0KPiA+IC0NCj4gPiAtCXJldHVybiBvZmZz ZXQ7DQo+ID4gLQ0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdWludDMyX3QNCj4gPiAtZ2Vu N19maWxsX2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwNCj4g PiAtCQkJc3RydWN0IGlndF9idWYgKmRzdCkNCj4gPiAtew0KPiA+IC0JdWludDMyX3QgKmJpbmRp bmdfdGFibGUsIG9mZnNldDsNCj4gPiAtDQo+ID4gLQliaW5kaW5nX3RhYmxlID0gYmF0Y2hfYWxs b2MoYmF0Y2gsIDMyLCA2NCk7DQo+ID4gLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGJp bmRpbmdfdGFibGUpOw0KPiA+IC0NCj4gPiAtCWJpbmRpbmdfdGFibGVbMF0gPSBnZW43X2ZpbGxf c3VyZmFjZV9zdGF0ZShiYXRjaCwgZHN0LA0KPiA+IEdFTjdfU1VSRkFDRUZPUk1BVF9SOF9VTk9S TSwgMSk7DQo+ID4gLQ0KPiA+IC0JcmV0dXJuIG9mZnNldDsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAt c3RhdGljIHVpbnQzMl90DQo+ID4gLWdlbjhfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gLQkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpDQo+ID4g LXsNCj4gPiAtCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxlLCBvZmZzZXQ7DQo+ID4gLQ0KPiA+IC0J YmluZGluZ190YWJsZSA9IGJhdGNoX2FsbG9jKGJhdGNoLCAzMiwgNjQpOw0KPiA+IC0Jb2Zmc2V0 ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsNCj4gPiAtDQo+ID4gLQliaW5k aW5nX3RhYmxlWzBdID0gZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoYmF0Y2gsIGRzdCwNCj4gPiBH RU44X1NVUkZBQ0VGT1JNQVRfUjhfVU5PUk0sIDEpOw0KPiA+IC0NCj4gPiAtCXJldHVybiBvZmZz ZXQ7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1aW50MzJfdA0KPiA+IC1nZW43X2ZpbGxf Z3BncHVfa2VybmVsKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gLQkJY29u c3QgdWludDMyX3Qga2VybmVsW11bNF0sDQo+ID4gLQkJc2l6ZV90IHNpemUpDQo+ID4gLXsNCj4g PiAtCXVpbnQzMl90IG9mZnNldDsNCj4gPiAtDQo+ID4gLQlvZmZzZXQgPSBiYXRjaF9jb3B5KGJh dGNoLCBrZXJuZWwsIHNpemUsIDY0KTsNCj4gPiAtDQo+ID4gLQlyZXR1cm4gb2Zmc2V0Ow0KPiA+ IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdWludDMyX3QNCj4gPiAtZ2VuN19maWxsX2ludGVyZmFj ZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdA0KPiA+ IGlndF9idWYgKmRzdCwNCj4gPiAtCQkJwqDCoMKgwqDCoMKgwqBjb25zdCB1aW50MzJfdCBrZXJu ZWxbXVs0XSwgc2l6ZV90IHNpemUpDQo+ID4gLXsNCj4gPiAtCXN0cnVjdCBnZW43X2ludGVyZmFj ZV9kZXNjcmlwdG9yX2RhdGEgKmlkZDsNCj4gPiAtCXVpbnQzMl90IG9mZnNldDsNCj4gPiAtCXVp bnQzMl90IGJpbmRpbmdfdGFibGVfb2Zmc2V0LCBrZXJuZWxfb2Zmc2V0Ow0KPiA+IC0NCj4gPiAt CWJpbmRpbmdfdGFibGVfb2Zmc2V0ID0gZ2VuN19maWxsX2JpbmRpbmdfdGFibGUoYmF0Y2gsIGRz dCk7DQo+ID4gLQlrZXJuZWxfb2Zmc2V0ID0gZ2VuN19maWxsX2dwZ3B1X2tlcm5lbChiYXRjaCwg a2VybmVsLCBzaXplKTsNCj4gPiAtDQo+ID4gLQlpZGQgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6 ZW9mKCppZGQpLCA2NCk7DQo+ID4gLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGlkZCk7 DQo+ID4gLQ0KPiA+IC0JaWRkLT5kZXNjMC5rZXJuZWxfc3RhcnRfcG9pbnRlciA9IChrZXJuZWxf b2Zmc2V0ID4+IDYpOw0KPiA+IC0NCj4gPiAtCWlkZC0+ZGVzYzEuc2luZ2xlX3Byb2dyYW1fZmxv dyA9IDE7DQo+ID4gLQlpZGQtPmRlc2MxLmZsb2F0aW5nX3BvaW50X21vZGUgPSBHRU43X0ZMT0FU SU5HX1BPSU5UX0lFRUVfNzU0Ow0KPiA+IC0NCj4gPiAtCWlkZC0+ZGVzYzIuc2FtcGxlcl9jb3Vu dCA9IDA7wqDCoMKgwqDCoMKgLyogMCBzYW1wbGVycyB1c2VkICovDQo+ID4gLQlpZGQtPmRlc2My LnNhbXBsZXJfc3RhdGVfcG9pbnRlciA9IDA7DQo+ID4gLQ0KPiA+IC0JaWRkLT5kZXNjMy5iaW5k aW5nX3RhYmxlX2VudHJ5X2NvdW50ID0gMDsNCj4gPiAtCWlkZC0+ZGVzYzMuYmluZGluZ190YWJs ZV9wb2ludGVyID0gKGJpbmRpbmdfdGFibGVfb2Zmc2V0ID4+IDUpOw0KPiA+IC0NCj4gPiAtCWlk ZC0+ZGVzYzQuY29uc3RhbnRfdXJiX2VudHJ5X3JlYWRfb2Zmc2V0ID0gMDsNCj4gPiAtCWlkZC0+ ZGVzYzQuY29uc3RhbnRfdXJiX2VudHJ5X3JlYWRfbGVuZ3RoID0gMTsgLyogZ3JmIDEgKi8NCj4g PiAtDQo+ID4gLQlyZXR1cm4gb2Zmc2V0Ow0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdWlu dDMyX3QNCj4gPiAtZ2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdA0KPiA+IGlndF9idWYgKmRzdCwNCj4gPiAtCQkJwqDC oMKgwqDCoMKgwqBjb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwgc2l6ZV90IHNpemUpDQo+ID4g LXsNCj4gPiAtCXN0cnVjdCBnZW44X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEgKmlkZDsNCj4g PiAtCXVpbnQzMl90IG9mZnNldDsNCj4gPiAtCXVpbnQzMl90IGJpbmRpbmdfdGFibGVfb2Zmc2V0 LCBrZXJuZWxfb2Zmc2V0Ow0KPiA+IC0NCj4gPiAtCWJpbmRpbmdfdGFibGVfb2Zmc2V0ID0gZ2Vu OF9maWxsX2JpbmRpbmdfdGFibGUoYmF0Y2gsIGRzdCk7DQo+ID4gLQlrZXJuZWxfb2Zmc2V0ID0g Z2VuN19maWxsX2dwZ3B1X2tlcm5lbChiYXRjaCwga2VybmVsLCBzaXplKTsNCj4gPiAtDQo+ID4g LQlpZGQgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKCppZGQpLCA2NCk7DQo+ID4gLQlvZmZz ZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGlkZCk7DQo+ID4gLQ0KPiA+IC0JaWRkLT5kZXNjMC5r ZXJuZWxfc3RhcnRfcG9pbnRlciA9IChrZXJuZWxfb2Zmc2V0ID4+IDYpOw0KPiA+IC0NCj4gPiAt CWlkZC0+ZGVzYzIuc2luZ2xlX3Byb2dyYW1fZmxvdyA9IDE7DQo+ID4gLQlpZGQtPmRlc2MyLmZs b2F0aW5nX3BvaW50X21vZGUgPSBHRU44X0ZMT0FUSU5HX1BPSU5UX0lFRUVfNzU0Ow0KPiA+IC0N Cj4gPiAtCWlkZC0+ZGVzYzMuc2FtcGxlcl9jb3VudCA9IDA7wqDCoMKgwqDCoMKgLyogMCBzYW1w bGVycyB1c2VkICovDQo+ID4gLQlpZGQtPmRlc2MzLnNhbXBsZXJfc3RhdGVfcG9pbnRlciA9IDA7 DQo+ID4gLQ0KPiA+IC0JaWRkLT5kZXNjNC5iaW5kaW5nX3RhYmxlX2VudHJ5X2NvdW50ID0gMDsN Cj4gPiAtCWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9wb2ludGVyID0gKGJpbmRpbmdfdGFibGVf b2Zmc2V0ID4+IDUpOw0KPiA+IC0NCj4gPiAtCWlkZC0+ZGVzYzUuY29uc3RhbnRfdXJiX2VudHJ5 X3JlYWRfb2Zmc2V0ID0gMDsNCj4gPiAtCWlkZC0+ZGVzYzUuY29uc3RhbnRfdXJiX2VudHJ5X3Jl YWRfbGVuZ3RoID0gMTsgLyogZ3JmIDEgKi8NCj4gPiAtDQo+ID4gLQlyZXR1cm4gb2Zmc2V0Ow0K PiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdm9pZA0KPiA+IC1nZW43X2VtaXRfc3RhdGVfYmFz ZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpDQo+ID4gLXsNCj4gPiAt CU9VVF9CQVRDSChHRU43X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxMCAtIDIpKTsNCj4gPiAtDQo+ ID4gLQkvKiBnZW5lcmFsICovDQo+ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLQ0KPiA+IC0JLyog c3VyZmFjZSAqLw0KPiA+IC0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OLCAwLA0KPiA+IEJBU0VfQUREUkVTU19NT0RJRlkpOw0KPiA+IC0NCj4gPiAtCS8q IGR5bmFtaWMgKi8NCj4gPiAtCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9J TlNUUlVDVElPTiwgMCwNCj4gPiBCQVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiAtDQo+ID4gLQkv KiBpbmRpcmVjdCAqLw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC0NCj4gPiAtCS8qIGluc3Ry dWN0aW9uICovDQo+ID4gLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5T VFJVQ1RJT04sIDAsDQo+ID4gQkFTRV9BRERSRVNTX01PRElGWSk7DQo+ID4gLQ0KPiA+IC0JLyog Z2VuZXJhbC9keW5hbWljL2luZGlyZWN0L2luc3RydWN0aW9uIGFjY2VzcyBCb3VuZCAqLw0KPiA+ IC0JT1VUX0JBVENIKDApOw0KPiA+IC0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZ KTsNCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNT X01PRElGWSk7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB2b2lkDQo+ID4gLWdlbjhfZW1p dF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkNCj4g PiAtew0KPiA+IC0JT1VUX0JBVENIKEdFTjhfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDE2IC0gMikp Ow0KPiA+IC0NCj4gPiAtCS8qIGdlbmVyYWwgKi8NCj4gPiAtCU9VVF9CQVRDSCgwIHwgKDB4Nzgg PDwgNCkgfCAoMCA8PCAxKSB8wqDCoEJBU0VfQUREUkVTU19NT0RJRlkpOw0KPiA+IC0JT1VUX0JB VENIKDApOw0KPiA+IC0NCj4gPiAtCS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8NCj4gPiAtCU9V VF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7DQo+ID4gLQ0KPiA+IC0JLyogc3VyZmFj ZSAqLw0KPiA+IC0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIs IDAsDQo+ID4gQkFTRV9BRERSRVNTX01PRElGWSk7DQo+ID4gLQ0KPiA+IC0JLyogZHluYW1pYyAq Lw0KPiA+IC0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiB8DQo+ ID4gSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLA0KPiA+IC0JCcKgwqAwLCBCQVNFX0FERFJF U1NfTU9ESUZZKTsNCj4gPiAtDQo+ID4gLQkvKiBpbmRpcmVjdCAqLw0KPiA+IC0JT1VUX0JBVENI KDApOw0KPiA+IC0JT1VUX0JBVENIKDAgKTsNCj4gPiAtDQo+ID4gLQkvKiBpbnN0cnVjdGlvbiAq Lw0KPiA+IC0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9O LCAwLA0KPiA+IEJBU0VfQUREUkVTU19NT0RJRlkpOw0KPiA+IC0NCj4gPiAtCS8qIGdlbmVyYWwg c3RhdGUgYnVmZmVyIHNpemUgKi8NCj4gPiAtCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7DQo+ ID4gLQkvKiBkeW5hbWljIHN0YXRlIGJ1ZmZlciBzaXplICovDQo+ID4gLQlPVVRfQkFUQ0goMSA8 PCAxMiB8IDEpOw0KPiA+IC0JLyogaW5kaXJlY3Qgb2JqZWN0IGJ1ZmZlciBzaXplICovDQo+ID4g LQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOw0KPiA+IC0JLyogaW50cnVjdGlvbiBidWZmZXIg c2l6ZSwgbXVzdCBzZXQgbW9kaWZ5IGVuYWJsZSBiaXQsIG90aGVyd2lzZSBpdA0KPiA+IG1heSBy ZXN1bHQgaW4gR1BVIGhhbmcgKi8NCj4gPiAtCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7DQo+ID4g LX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB2b2lkDQo+ID4gLWdlbjlfZW1pdF9zdGF0ZV9iYXNlX2Fk ZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkNCj4gPiAtew0KPiA+IC0JT1VU X0JBVENIKEdFTjhfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDE5IC0gMikpOw0KPiA+IC0NCj4gPiAt CS8qIGdlbmVyYWwgKi8NCj4gPiAtCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7 DQo+ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLQ0KPiA+IC0JLyogc3RhdGVsZXNzIGRhdGEgcG9y dCAqLw0KPiA+IC0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiAtDQo+ ID4gLQkvKiBzdXJmYWNlICovDQo+ID4gLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9E T01BSU5fU0FNUExFUiwgMCwNCj4gPiBCQVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiAtDQo+ID4g LQkvKiBkeW5hbWljICovDQo+ID4gLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01B SU5fUkVOREVSIHwNCj4gPiBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sDQo+ID4gLQkJMCwg QkFTRV9BRERSRVNTX01PRElGWSk7DQo+ID4gLQ0KPiA+IC0JLyogaW5kaXJlY3QgKi8NCj4gPiAt CU9VVF9CQVRDSCgwKTsNCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtDQo+ID4gLQkvKiBpbnN0 cnVjdGlvbiAqLw0KPiA+IC0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OLCAwLA0KPiA+IEJBU0VfQUREUkVTU19NT0RJRlkpOw0KPiA+IC0NCj4gPiAtCS8q IGdlbmVyYWwgc3RhdGUgYnVmZmVyIHNpemUgKi8NCj4gPiAtCU9VVF9CQVRDSCgweGZmZmZmMDAw IHwgMSk7DQo+ID4gLQkvKiBkeW5hbWljIHN0YXRlIGJ1ZmZlciBzaXplICovDQo+ID4gLQlPVVRf QkFUQ0goMSA8PCAxMiB8IDEpOw0KPiA+IC0JLyogaW5kaXJlY3Qgb2JqZWN0IGJ1ZmZlciBzaXpl ICovDQo+ID4gLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOw0KPiA+IC0JLyogaW50cnVjdGlv biBidWZmZXIgc2l6ZSwgbXVzdCBzZXQgbW9kaWZ5IGVuYWJsZSBiaXQsIG90aGVyd2lzZSBpdA0K PiA+IG1heSByZXN1bHQgaW4gR1BVIGhhbmcgKi8NCj4gPiAtCU9VVF9CQVRDSCgxIDw8IDEyIHwg MSk7DQo+ID4gLQ0KPiA+IC0JLyogQmluZGxlc3Mgc3VyZmFjZSBzdGF0ZSBiYXNlIGFkZHJlc3Mg Ki8NCj4gPiAtCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7DQo+ID4gLQlPVVRf QkFUQ0goMCk7DQo+ID4gLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCk7DQo+ID4gLX0NCj4gPiAtDQo+ ID4gLXN0YXRpYyB2b2lkDQo+ID4gLWdlbjdfZW1pdF92ZmVfc3RhdGVfZ3BncHUoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCkNCj4gPiAtew0KPiA+IC0JT1VUX0JBVENIKEdFTjdfTUVE SUFfVkZFX1NUQVRFIHwgKDggLSAyKSk7DQo+ID4gLQ0KPiA+IC0JLyogc2NyYXRjaCBidWZmZXIg Ki8NCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtDQo+ID4gLQkvKiBudW1iZXIgb2YgdGhyZWFk cyAmIHVyYiBlbnRyaWVzICovDQo+ID4gLQlPVVRfQkFUQ0goMSA8PCAxNiB8IC8qIG1heCBudW0g b2YgdGhyZWFkcyAqLw0KPiA+IC0JCcKgwqAwIDw8IDggfCAvKiBudW0gb2YgVVJCIGVudHJ5ICov DQo+ID4gLQkJwqDCoDEgPDwgMik7IC8qIEdQR1BVIG1vZGUgKi8NCj4gPiAtDQo+ID4gLQlPVVRf QkFUQ0goMCk7DQo+ID4gLQ0KPiA+IC0JLyogdXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICov DQo+ID4gLQlPVVRfQkFUQ0goMCA8PCAxNiB8wqAJLyogVVJCIGVudHJ5IHNpemUgaW4gMjU2IGJp dHMgdW5pdCAqLw0KPiA+IC0JCcKgwqAxKTsJCS8qIENVUkJFIGVudHJ5IHNpemUgaW4gMjU2IGJp dHMgdW5pdA0KPiA+ICovDQo+ID4gLQ0KPiA+IC0JLyogc2NvcmVib2FyZCAqLw0KPiA+IC0JT1VU X0JBVENIKDApOw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+ IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdm9pZA0KPiA+IC1nZW44X2VtaXRfdmZlX3N0YXRlX2dw Z3B1KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpDQo+ID4gLXsNCj4gPiAtCU9VVF9C QVRDSChHRU44X01FRElBX1ZGRV9TVEFURSB8ICg5IC0gMikpOw0KPiA+IC0NCj4gPiAtCS8qIHNj cmF0Y2ggYnVmZmVyICovDQo+ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLQlPVVRfQkFUQ0goMCk7 DQo+ID4gLQ0KPiA+IC0JLyogbnVtYmVyIG9mIHRocmVhZHMgJiB1cmIgZW50cmllcyAqLw0KPiA+ IC0JT1VUX0JBVENIKDEgPDwgMTYgfCAxIDw8IDgpOw0KPiA+IC0NCj4gPiAtCU9VVF9CQVRDSCgw KTsNCj4gPiAtDQo+ID4gLQkvKiB1cmIgZW50cnkgc2l6ZSAmIGN1cmJlIHNpemUgKi8NCj4gPiAt CU9VVF9CQVRDSCgwIDw8IDE2IHwgMSk7DQo+ID4gLQ0KPiA+IC0JLyogc2NvcmVib2FyZCAqLw0K PiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC0JT1VUX0JBVENI KDApOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdm9pZA0KPiA+IC1nZW43X2VtaXRfY3Vy YmVfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdA0KPiA+IGN1 cmJlX2J1ZmZlcikNCj4gPiAtew0KPiA+IC0JT1VUX0JBVENIKEdFTjdfTUVESUFfQ1VSQkVfTE9B RCB8ICg0IC0gMikpOw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC0JLyogY3VyYmUgdG90YWwg ZGF0YSBsZW5ndGggKi8NCj4gPiAtCU9VVF9CQVRDSCg2NCk7DQo+ID4gLQkvKiBjdXJiZSBkYXRh IHN0YXJ0IGFkZHJlc3MsIGlzIHJlbGF0aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlDQo+ID4gYWRk cmVzcyAqLw0KPiA+IC0JT1VUX0JBVENIKGN1cmJlX2J1ZmZlcik7DQo+ID4gLX0NCj4gPiAtDQo+ ID4gLXN0YXRpYyB2b2lkDQo+ID4gLWdlbjdfZW1pdF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9sb2Fk KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gdWludDMyX3QgaW50ZXJmYWNl X2Rlc2NyaXB0b3IpDQo+ID4gLXsNCj4gPiAtCU9VVF9CQVRDSChHRU43X01FRElBX0lOVEVSRkFD RV9ERVNDUklQVE9SX0xPQUQgfCAoNCAtIDIpKTsNCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAt CS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGRhdGEgbGVuZ3RoICovDQo+ID4gLQlPVVRfQkFUQ0go c2l6ZW9mKHN0cnVjdCBnZW43X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEpKTsNCj4gPiAtCS8q IGludGVyZmFjZSBkZXNjcmlwdG9yIGFkZHJlc3MsIGlzIHJlbGF0aXZlIHRvIHRoZSBkeW5hbWlj cyBiYXNlDQo+ID4gYWRkcmVzcyAqLw0KPiA+IC0JT1VUX0JBVENIKGludGVyZmFjZV9kZXNjcmlw dG9yKTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHZvaWQNCj4gPiAtZ2VuOF9lbWl0X2lu dGVyZmFjZV9kZXNjcmlwdG9yX2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwN Cj4gPiB1aW50MzJfdCBpbnRlcmZhY2VfZGVzY3JpcHRvcikNCj4gPiAtew0KPiA+IC0JT1VUX0JB VENIKEdFTjhfTUVESUFfSU5URVJGQUNFX0RFU0NSSVBUT1JfTE9BRCB8ICg0IC0gMikpOw0KPiA+ IC0JT1VUX0JBVENIKDApOw0KPiA+IC0JLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgZGF0YSBsZW5n dGggKi8NCj4gPiAtCU9VVF9CQVRDSChzaXplb2Yoc3RydWN0IGdlbjhfaW50ZXJmYWNlX2Rlc2Ny aXB0b3JfZGF0YSkpOw0KPiA+IC0JLyogaW50ZXJmYWNlIGRlc2NyaXB0b3IgYWRkcmVzcywgaXMg cmVsYXRpdmUgdG8gdGhlIGR5bmFtaWNzIGJhc2UNCj4gPiBhZGRyZXNzICovDQo+ID4gLQlPVVRf QkFUQ0goaW50ZXJmYWNlX2Rlc2NyaXB0b3IpOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMg dm9pZA0KPiA+IC1nZW43X2VtaXRfZ3BncHVfd2FsayhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLA0KPiA+IC0JCcKgwqDCoMKgwqB1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LA0KPiA+IC0J CcKgwqDCoMKgwqB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQ0KPiA+IC17DQo+ID4g LQl1aW50MzJfdCB4X2RpbSwgeV9kaW0sIHRtcCwgcmlnaHRfbWFzazsNCj4gPiAtDQo+ID4gLQkv Kg0KPiA+IC0JwqAqIFNpbXBseSBkbyBTSU1EMTYgYmFzZWQgZGlzcGF0Y2gsIHNvIGV2ZXJ5IHRo cmVhZCB1c2VzDQo+ID4gLQnCoCogU0lNRDE2IGNoYW5uZWxzLg0KPiA+IC0JwqAqDQo+ID4gLQnC oCogRGVmaW5lIG91ciBvd24gdGhyZWFkIGdyb3VwIHNpemUsIGUuZyAxNngxIGZvciBldmVyeSBn cm91cCwgdGhlbg0KPiA+IC0JwqAqIHdpbGwgaGF2ZSAxIHRocmVhZCBlYWNoIGdyb3VwIGluIFNJ TUQxNiBkaXNwYXRjaC4gU28gdGhyZWFkDQo+ID4gLQnCoCogd2lkdGgvaGVpZ2h0L2RlcHRoIGFy ZSBhbGwgMS4NCj4gPiAtCcKgKg0KPiA+IC0JwqAqIFRoZW4gdGhyZWFkIGdyb3VwIFggPSB3aWR0 aCAvIDE2IChhbGlnbmVkIHRvIDE2KQ0KPiA+IC0JwqAqIHRocmVhZCBncm91cCBZID0gaGVpZ2h0 Ow0KPiA+IC0JwqAqLw0KPiA+IC0JeF9kaW0gPSAod2lkdGggKyAxNSkgLyAxNjsNCj4gPiAtCXlf ZGltID0gaGVpZ2h0Ow0KPiA+IC0NCj4gPiAtCXRtcCA9IHdpZHRoICYgMTU7DQo+ID4gLQlpZiAo dG1wID09IDApDQo+ID4gLQkJcmlnaHRfbWFzayA9ICgxIDw8IDE2KSAtIDE7DQo+ID4gLQllbHNl DQo+ID4gLQkJcmlnaHRfbWFzayA9ICgxIDw8IHRtcCkgLSAxOw0KPiA+IC0NCj4gPiAtCU9VVF9C QVRDSChHRU43X0dQR1BVX1dBTEtFUiB8IDkpOw0KPiA+IC0NCj4gPiAtCS8qIGludGVyZmFjZSBk ZXNjcmlwdG9yIG9mZnNldCAqLw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC0NCj4gPiAtCS8q IFNJTUQgc2l6ZSwgdGhyZWFkIHcvaC9kICovDQo+ID4gLQlPVVRfQkFUQ0goMSA8PCAzMCB8IC8q IFNJTUQxNiAqLw0KPiA+IC0JCcKgwqAwIDw8IDE2IHwgLyogZGVwdGg6MSAqLw0KPiA+IC0JCcKg wqAwIDw8IDggfCAvKiBoZWlnaHQ6MSAqLw0KPiA+IC0JCcKgwqAwKTsgLyogd2lkdGg6MSAqLw0K PiA+IC0NCj4gPiAtCS8qIHRocmVhZCBncm91cCBYICovDQo+ID4gLQlPVVRfQkFUQ0goMCk7DQo+ ID4gLQlPVVRfQkFUQ0goeF9kaW0pOw0KPiA+IC0NCj4gPiAtCS8qIHRocmVhZCBncm91cCBZICov DQo+ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLQlPVVRfQkFUQ0goeV9kaW0pOw0KPiA+IC0NCj4g PiAtCS8qIHRocmVhZCBncm91cCBaICovDQo+ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLQlPVVRf QkFUQ0goMSk7DQo+ID4gLQ0KPiA+IC0JLyogcmlnaHQgbWFzayAqLw0KPiA+IC0JT1VUX0JBVENI KHJpZ2h0X21hc2spOw0KPiA+IC0NCj4gPiAtCS8qIGJvdHRvbSBtYXNrLCBoZWlnaHQgMSwgYWx3 YXlzIDB4ZmZmZmZmZmYgKi8NCj4gPiAtCU9VVF9CQVRDSCgweGZmZmZmZmZmKTsNCj4gPiAtfQ0K PiA+IC0NCj4gPiAtc3RhdGljIHZvaWQNCj4gPiAtZ2VuOF9lbWl0X2dwZ3B1X3dhbGsoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwNCj4gPiAtCQnCoMKgwqDCoMKgdW5zaWduZWQgeCwg dW5zaWduZWQgeSwNCj4gPiAtCQnCoMKgwqDCoMKgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhl aWdodCkNCj4gPiAtew0KPiA+IC0JdWludDMyX3QgeF9kaW0sIHlfZGltLCB0bXAsIHJpZ2h0X21h c2s7DQo+ID4gLQ0KPiA+IC0JLyoNCj4gPiAtCcKgKiBTaW1wbHkgZG8gU0lNRDE2IGJhc2VkIGRp c3BhdGNoLCBzbyBldmVyeSB0aHJlYWQgdXNlcw0KPiA+IC0JwqAqIFNJTUQxNiBjaGFubmVscy4N Cj4gPiAtCcKgKg0KPiA+IC0JwqAqIERlZmluZSBvdXIgb3duIHRocmVhZCBncm91cCBzaXplLCBl LmcgMTZ4MSBmb3IgZXZlcnkgZ3JvdXAsIHRoZW4NCj4gPiAtCcKgKiB3aWxsIGhhdmUgMSB0aHJl YWQgZWFjaCBncm91cCBpbiBTSU1EMTYgZGlzcGF0Y2guIFNvIHRocmVhZA0KPiA+IC0JwqAqIHdp ZHRoL2hlaWdodC9kZXB0aCBhcmUgYWxsIDEuDQo+ID4gLQnCoCoNCj4gPiAtCcKgKiBUaGVuIHRo cmVhZCBncm91cCBYID0gd2lkdGggLyAxNiAoYWxpZ25lZCB0byAxNikNCj4gPiAtCcKgKiB0aHJl YWQgZ3JvdXAgWSA9IGhlaWdodDsNCj4gPiAtCcKgKi8NCj4gPiAtCXhfZGltID0gKHdpZHRoICsg MTUpIC8gMTY7DQo+ID4gLQl5X2RpbSA9IGhlaWdodDsNCj4gPiAtDQo+ID4gLQl0bXAgPSB3aWR0 aCAmIDE1Ow0KPiA+IC0JaWYgKHRtcCA9PSAwKQ0KPiA+IC0JCXJpZ2h0X21hc2sgPSAoMSA8PCAx NikgLSAxOw0KPiA+IC0JZWxzZQ0KPiA+IC0JCXJpZ2h0X21hc2sgPSAoMSA8PCB0bXApIC0gMTsN Cj4gPiAtDQo+ID4gLQlPVVRfQkFUQ0goR0VON19HUEdQVV9XQUxLRVIgfCAxMyk7DQo+ID4gLQ0K PiA+IC0JT1VUX0JBVENIKDApOyAvKiBrZXJuZWwgb2Zmc2V0ICovDQo+ID4gLQlPVVRfQkFUQ0go MCk7IC8qIGluZGlyZWN0IGRhdGEgbGVuZ3RoICovDQo+ID4gLQlPVVRfQkFUQ0goMCk7IC8qIGlu ZGlyZWN0IGRhdGEgb2Zmc2V0ICovDQo+ID4gLQ0KPiA+IC0JLyogU0lNRCBzaXplLCB0aHJlYWQg dy9oL2QgKi8NCj4gPiAtCU9VVF9CQVRDSCgxIDw8IDMwIHwgLyogU0lNRDE2ICovDQo+ID4gLQkJ wqDCoDAgPDwgMTYgfCAvKiBkZXB0aDoxICovDQo+ID4gLQkJwqDCoDAgPDwgOCB8IC8qIGhlaWdo dDoxICovDQo+ID4gLQkJwqDCoDApOyAvKiB3aWR0aDoxICovDQo+ID4gLQ0KPiA+IC0JLyogdGhy ZWFkIGdyb3VwIFggKi8NCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtCU9VVF9CQVRDSCgwKTsN Cj4gPiAtCU9VVF9CQVRDSCh4X2RpbSk7DQo+ID4gLQ0KPiA+IC0JLyogdGhyZWFkIGdyb3VwIFkg Ki8NCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtCU9VVF9C QVRDSCh5X2RpbSk7DQo+ID4gLQ0KPiA+IC0JLyogdGhyZWFkIGdyb3VwIFogKi8NCj4gPiAtCU9V VF9CQVRDSCgwKTsNCj4gPiAtCU9VVF9CQVRDSCgxKTsNCj4gPiAtDQo+ID4gLQkvKiByaWdodCBt YXNrICovDQo+ID4gLQlPVVRfQkFUQ0gocmlnaHRfbWFzayk7DQo+ID4gLQ0KPiA+IC0JLyogYm90 dG9tIG1hc2ssIGhlaWdodCAxLCBhbHdheXMgMHhmZmZmZmZmZiAqLw0KPiA+IC0JT1VUX0JBVENI KDB4ZmZmZmZmZmYpOw0KPiA+IC19DQo+ID4gLQ0KPiA+IMKgIC8qDQo+ID4gwqDCoMKgKiBUaGlz IHNldHMgdXAgdGhlIGdwZ3B1IHBpcGVsaW5lLA0KPiA+IMKgwqDCoCoNCj4gPiBkaWZmIC0tZ2l0 IGEvbGliL2dwdV9maWxsLmMgYi9saWIvZ3B1X2ZpbGwuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAuLmY0NTYzMTEyDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ICsrKyBiL2xpYi9ncHVfZmlsbC5jDQo+ID4gQEAgLTAsMCArMSw3MjkgQEANCj4gPiArI2luY2x1 ZGUgPGludGVsX2J1Zm1nci5oPg0KPiA+ICsjaW5jbHVkZSA8aTkxNV9kcm0uaD4NCj4gPiArDQo+ ID4gKyNpbmNsdWRlICJpbnRlbF9yZWcuaCINCj4gPiArI2luY2x1ZGUgImRybXRlc3QuaCINCj4g PiArI2luY2x1ZGUgImdwdV9maWxsLmgiDQo+ID4gKyNpbmNsdWRlIDxhc3NlcnQuaD4NCj4gPiAr I2luY2x1ZGUgImdlbjdfbWVkaWEuaCINCj4gPiArI2luY2x1ZGUgImdlbjhfbWVkaWEuaCINCj4g PiArDQo+ID4gKw0KPiA+ICt1aW50MzJfdA0KPiA+ICtiYXRjaF91c2VkKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gpDQo+ID4gK3sNCj4gPiArCXJldHVybiBiYXRjaC0+cHRyIC0gYmF0 Y2gtPmJ1ZmZlcjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdWludDMyX3QNCj4gPiArYmF0Y2hfYWxp Z24oc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYWxpZ24pDQo+ID4g K3sNCj4gPiArCXVpbnQzMl90IG9mZnNldCA9IGJhdGNoX3VzZWQoYmF0Y2gpOw0KPiA+ICsJb2Zm c2V0ID0gQUxJR04ob2Zmc2V0LCBhbGlnbik7DQo+ID4gKwliYXRjaC0+cHRyID0gYmF0Y2gtPmJ1 ZmZlciArIG9mZnNldDsNCj4gPiArCXJldHVybiBvZmZzZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4g K3ZvaWQgKg0KPiA+ICtiYXRjaF9hbGxvYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBhbGlnbikNCj4gPiArew0KPiA+ICsJdWludDMyX3Qg b2Zmc2V0ID0gYmF0Y2hfYWxpZ24oYmF0Y2gsIGFsaWduKTsNCj4gPiArCWJhdGNoLT5wdHIgKz0g c2l6ZTsNCj4gPiArCXJldHVybiBtZW1zZXQoYmF0Y2gtPmJ1ZmZlciArIG9mZnNldCwgMCwgc2l6 ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3VpbnQzMl90DQo+ID4gK2JhdGNoX29mZnNldChzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB2b2lkICpwdHIpDQo+ID4gK3sNCj4gPiArCXJl dHVybiAodWludDhfdCAqKXB0ciAtIGJhdGNoLT5idWZmZXI7DQo+ID4gK30NCj4gPiArDQo+ID4g K3VpbnQzMl90DQo+ID4gK2JhdGNoX2NvcHkoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwgY29uc3Qgdm9pZCAqcHRyLCB1aW50MzJfdCBzaXplLA0KPiA+IHVpbnQzMl90IGFsaWduKQ0K PiA+ICt7DQo+ID4gKwlyZXR1cm4gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBtZW1jcHkoYmF0Y2hfYWxs b2MoYmF0Y2gsIHNpemUsIGFsaWduKSwNCj4gPiBwdHIsIHNpemUpKTsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArdm9pZA0KPiA+ICtnZW43X3JlbmRlcl9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLCB1aW50MzJfdCBiYXRjaF9lbmQpDQo+ID4gK3sNCj4gPiArCWludCByZXQ7DQo+ ID4gKw0KPiA+ICsJcmV0ID0gZHJtX2ludGVsX2JvX3N1YmRhdGEoYmF0Y2gtPmJvLCAwLCA0MDk2 LCBiYXRjaC0+YnVmZmVyKTsNCj4gPiArCWlmIChyZXQgPT0gMCkNCj4gPiArCQlyZXQgPSBkcm1f aW50ZWxfYm9fbXJiX2V4ZWMoYmF0Y2gtPmJvLCBiYXRjaF9lbmQsDQo+ID4gKwkJCQkJTlVMTCwg MCwgMCwgMCk7DQo+ID4gKwlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArdWludDMyX3QNCj4gPiArZ2VuN19maWxsX2N1cmJlX2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gKwkJCXVpbnQ4X3QgY29sb3IpDQo+ID4gK3sNCj4g PiArCXVpbnQ4X3QgKmN1cmJlX2J1ZmZlcjsNCj4gPiArCXVpbnQzMl90IG9mZnNldDsNCj4gPiAr DQo+ID4gKwljdXJiZV9idWZmZXIgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKHVpbnQzMl90 KSAqIDgsIDY0KTsNCj4gPiArCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgY3VyYmVfYnVm ZmVyKTsNCj4gPiArCSpjdXJiZV9idWZmZXIgPSBjb2xvcjsNCj4gPiArDQo+ID4gKwlyZXR1cm4g b2Zmc2V0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICt1aW50MzJfdA0KPiA+ICtnZW43X2ZpbGxfc3Vy ZmFjZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLA0KPiA+ICsJCQlzdHJ1 Y3QgaWd0X2J1ZiAqYnVmLA0KPiA+ICsJCQl1aW50MzJfdCBmb3JtYXQsDQo+ID4gKwkJCWludCBp c19kc3QpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBnZW43X3N1cmZhY2Vfc3RhdGUgKnNzOw0KPiA+ ICsJdWludDMyX3Qgd3JpdGVfZG9tYWluLCByZWFkX2RvbWFpbiwgb2Zmc2V0Ow0KPiA+ICsJaW50 IHJldDsNCj4gPiArDQo+ID4gKwlpZiAoaXNfZHN0KSB7DQo+ID4gKwkJd3JpdGVfZG9tYWluID0g cmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOw0KPiA+ICsJfSBlbHNlIHsNCj4g PiArCQl3cml0ZV9kb21haW4gPSAwOw0KPiA+ICsJCXJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9N QUlOX1NBTVBMRVI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3MgPSBiYXRjaF9hbGxvYyhiYXRj aCwgc2l6ZW9mKCpzcyksIDY0KTsNCj4gPiArCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwg c3MpOw0KPiA+ICsNCj4gPiArCXNzLT5zczAuc3VyZmFjZV90eXBlID0gR0VON19TVVJGQUNFXzJE Ow0KPiA+ICsJc3MtPnNzMC5zdXJmYWNlX2Zvcm1hdCA9IGZvcm1hdDsNCj4gPiArCXNzLT5zczAu cmVuZGVyX2NhY2hlX3JlYWRfd3JpdGUgPSAxOw0KPiA+ICsNCj4gPiArCWlmIChidWYtPnRpbGlu ZyA9PSBJOTE1X1RJTElOR19YKQ0KPiA+ICsJCXNzLT5zczAudGlsZWRfbW9kZSA9IDI7DQo+ID4g KwllbHNlIGlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZKQ0KPiA+ICsJCXNzLT5zczAu dGlsZWRfbW9kZSA9IDM7DQo+ID4gKw0KPiA+ICsJc3MtPnNzMS5iYXNlX2FkZHIgPSBidWYtPmJv LT5vZmZzZXQ7DQo+ID4gKwlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8s DQo+ID4gKwkJCQliYXRjaF9vZmZzZXQoYmF0Y2gsIHNzKSArIDQsDQo+ID4gKwkJCQlidWYtPmJv LCAwLA0KPiA+ICsJCQkJcmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbik7DQo+ID4gKwlpZ3RfYXNz ZXJ0KHJldCA9PSAwKTsNCj4gPiArDQo+ID4gKwlzcy0+c3MyLmhlaWdodCA9IGlndF9idWZfaGVp Z2h0KGJ1ZikgLSAxOw0KPiA+ICsJc3MtPnNzMi53aWR0aMKgwqA9IGlndF9idWZfd2lkdGgoYnVm KSAtIDE7DQo+ID4gKw0KPiA+ICsJc3MtPnNzMy5waXRjaMKgwqA9IGJ1Zi0+c3RyaWRlIC0gMTsN Cj4gPiArDQo+ID4gKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X3IgPSA0Ow0KPiA+ICsJ c3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9nID0gNTsNCj4gPiArCXNzLT5zczcuc2hhZGVy X2NoYW5lbF9zZWxlY3RfYiA9IDY7DQo+ID4gKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0 X2EgPSA3Ow0KPiA+ICsNCj4gPiArCXJldHVybiBvZmZzZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4g K3VpbnQzMl90DQo+ID4gK2dlbjdfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsDQo+ID4gKwkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpDQo+ID4gK3sNCj4g PiArCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxlLCBvZmZzZXQ7DQo+ID4gKw0KPiA+ICsJYmluZGlu Z190YWJsZSA9IGJhdGNoX2FsbG9jKGJhdGNoLCAzMiwgNjQpOw0KPiA+ICsJb2Zmc2V0ID0gYmF0 Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsNCj4gPiArDQo+ID4gKwliaW5kaW5nX3Rh YmxlWzBdID0gZ2VuN19maWxsX3N1cmZhY2Vfc3RhdGUoYmF0Y2gsIGRzdCwNCj4gPiBHRU43X1NV UkZBQ0VGT1JNQVRfUjhfVU5PUk0sIDEpOw0KPiA+ICsNCj4gPiArCXJldHVybiBvZmZzZXQ7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3VpbnQzMl90DQo+ID4gK2dlbjdfZmlsbF9rZXJuZWwoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwNCj4gPiArCQljb25zdCB1aW50MzJfdCBrZXJuZWxb XVs0XSwNCj4gPiArCQlzaXplX3Qgc2l6ZSkNCj4gPiArew0KPiA+ICsJdWludDMyX3Qgb2Zmc2V0 Ow0KPiA+ICsNCj4gPiArCW9mZnNldCA9IGJhdGNoX2NvcHkoYmF0Y2gsIGtlcm5lbCwgc2l6ZSwg NjQpOw0KPiA+ICsNCj4gPiArCXJldHVybiBvZmZzZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3Vp bnQzMl90DQo+ID4gK2dlbjdfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLCBzdHJ1Y3QNCj4gPiBpZ3RfYnVmICpkc3QsDQo+ID4gKwkJCcKg wqDCoMKgwqDCoMKgY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sIHNpemVfdCBzaXplKQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgZ2VuN19pbnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRhICppZGQ7DQo+ ID4gKwl1aW50MzJfdCBvZmZzZXQ7DQo+ID4gKwl1aW50MzJfdCBiaW5kaW5nX3RhYmxlX29mZnNl dCwga2VybmVsX29mZnNldDsNCj4gPiArDQo+ID4gKwliaW5kaW5nX3RhYmxlX29mZnNldCA9IGdl bjdfZmlsbF9iaW5kaW5nX3RhYmxlKGJhdGNoLCBkc3QpOw0KPiA+ICsJa2VybmVsX29mZnNldCA9 IGdlbjdfZmlsbF9rZXJuZWwoYmF0Y2gsIGtlcm5lbCwgc2l6ZSk7DQo+ID4gKw0KPiA+ICsJaWRk ID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigqaWRkKSwgNjQpOw0KPiA+ICsJb2Zmc2V0ID0g YmF0Y2hfb2Zmc2V0KGJhdGNoLCBpZGQpOw0KPiA+ICsNCj4gPiArCWlkZC0+ZGVzYzAua2VybmVs X3N0YXJ0X3BvaW50ZXIgPSAoa2VybmVsX29mZnNldCA+PiA2KTsNCj4gPiArDQo+ID4gKwlpZGQt PmRlc2MxLnNpbmdsZV9wcm9ncmFtX2Zsb3cgPSAxOw0KPiA+ICsJaWRkLT5kZXNjMS5mbG9hdGlu Z19wb2ludF9tb2RlID0gR0VON19GTE9BVElOR19QT0lOVF9JRUVFXzc1NDsNCj4gPiArDQo+ID4g KwlpZGQtPmRlc2MyLnNhbXBsZXJfY291bnQgPSAwO8KgwqDCoMKgwqDCoC8qIDAgc2FtcGxlcnMg dXNlZCAqLw0KPiA+ICsJaWRkLT5kZXNjMi5zYW1wbGVyX3N0YXRlX3BvaW50ZXIgPSAwOw0KPiA+ ICsNCj4gPiArCWlkZC0+ZGVzYzMuYmluZGluZ190YWJsZV9lbnRyeV9jb3VudCA9IDA7DQo+ID4g KwlpZGQtPmRlc2MzLmJpbmRpbmdfdGFibGVfcG9pbnRlciA9IChiaW5kaW5nX3RhYmxlX29mZnNl dCA+PiA1KTsNCj4gPiArDQo+ID4gKwlpZGQtPmRlc2M0LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFk X29mZnNldCA9IDA7DQo+ID4gKwlpZGQtPmRlc2M0LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX2xl bmd0aCA9IDE7IC8qIGdyZiAxICovDQo+ID4gKw0KPiA+ICsJcmV0dXJuIG9mZnNldDsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArdm9pZA0KPiA+ICtnZW43X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpDQo+ID4gK3sNCj4gPiArCU9VVF9CQVRDSChH RU43X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxMCAtIDIpKTsNCj4gPiArDQo+ID4gKwkvKiBnZW5l cmFsICovDQo+ID4gKwlPVVRfQkFUQ0goMCk7DQo+ID4gKw0KPiA+ICsJLyogc3VyZmFjZSAqLw0K PiA+ICsJT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAw LA0KPiA+IEJBU0VfQUREUkVTU19NT0RJRlkpOw0KPiA+ICsNCj4gPiArCS8qIGR5bmFtaWMgKi8N Cj4gPiArCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwg MCwNCj4gPiBCQVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiArDQo+ID4gKwkvKiBpbmRpcmVjdCAq Lw0KPiA+ICsJT1VUX0JBVENIKDApOw0KPiA+ICsNCj4gPiArCS8qIGluc3RydWN0aW9uICovDQo+ ID4gKwlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAs DQo+ID4gQkFTRV9BRERSRVNTX01PRElGWSk7DQo+ID4gKw0KPiA+ICsJLyogZ2VuZXJhbC9keW5h bWljL2luZGlyZWN0L2luc3RydWN0aW9uIGFjY2VzcyBCb3VuZCAqLw0KPiA+ICsJT1VUX0JBVENI KDApOw0KPiA+ICsJT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiArCU9V VF9CQVRDSCgwKTsNCj4gPiArCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQNCj4gPiArZ2VuN19lbWl0X3ZmZV9zdGF0ZShzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQ0KPiA+ICt7DQo+ID4gKwlPVVRfQkFUQ0goR0VON19N RURJQV9WRkVfU1RBVEUgfCAoOCAtIDIpKTsNCj4gPiArDQo+ID4gKwkvKiBzY3JhdGNoIGJ1ZmZl ciAqLw0KPiA+ICsJT1VUX0JBVENIKDApOw0KPiA+ICsNCj4gPiArCS8qIG51bWJlciBvZiB0aHJl YWRzICYgdXJiIGVudHJpZXMgKi8NCj4gPiArCU9VVF9CQVRDSCgxIDw8IDE2IHwNCj4gPiArCQky IDw8IDgpOw0KPiA+ICsNCj4gPiArCU9VVF9CQVRDSCgwKTsNCj4gPiArDQo+ID4gKwkvKiB1cmIg ZW50cnkgc2l6ZSAmIGN1cmJlIHNpemUgKi8NCj4gPiArCU9VVF9CQVRDSCgyIDw8IDE2IHzCoAkv KiBpbiAyNTYgYml0cyB1bml0ICovDQo+ID4gKwkJMik7CQkvKiBpbiAyNTYgYml0cyB1bml0ICov DQo+ID4gKw0KPiA+ICsJLyogc2NvcmVib2FyZCAqLw0KPiA+ICsJT1VUX0JBVENIKDApOw0KPiA+ ICsJT1VUX0JBVENIKDApOw0KPiA+ICsJT1VUX0JBVENIKDApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICt2b2lkDQo+ID4gK2dlbjdfZW1pdF92ZmVfc3RhdGVfZ3BncHUoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCkNCj4gPiArew0KPiA+ICsJT1VUX0JBVENIKEdFTjdfTUVESUFfVkZFX1NU QVRFIHwgKDggLSAyKSk7DQo+ID4gKw0KPiA+ICsJLyogc2NyYXRjaCBidWZmZXIgKi8NCj4gPiAr CU9VVF9CQVRDSCgwKTsNCj4gPiArDQo+ID4gKwkvKiBudW1iZXIgb2YgdGhyZWFkcyAmIHVyYiBl bnRyaWVzICovDQo+ID4gKwlPVVRfQkFUQ0goMSA8PCAxNiB8IC8qIG1heCBudW0gb2YgdGhyZWFk cyAqLw0KPiA+ICsJCcKgwqAwIDw8IDggfCAvKiBudW0gb2YgVVJCIGVudHJ5ICovDQo+ID4gKwkJ wqDCoDEgPDwgMik7IC8qIEdQR1BVIG1vZGUgKi8NCj4gPiArDQo+ID4gKwlPVVRfQkFUQ0goMCk7 DQo+ID4gKw0KPiA+ICsJLyogdXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICovDQo+ID4gKwlP VVRfQkFUQ0goMCA8PCAxNiB8wqAJLyogVVJCIGVudHJ5IHNpemUgaW4gMjU2IGJpdHMgdW5pdCAq Lw0KPiA+ICsJCcKgwqAxKTsJCS8qIENVUkJFIGVudHJ5IHNpemUgaW4gMjU2IGJpdHMgdW5pdA0K PiA+ICovDQo+ID4gKw0KPiA+ICsJLyogc2NvcmVib2FyZCAqLw0KPiA+ICsJT1VUX0JBVENIKDAp Ow0KPiA+ICsJT1VUX0JBVENIKDApOw0KPiA+ICsJT1VUX0JBVENIKDApOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICt2b2lkDQo+ID4gK2dlbjdfZW1pdF9jdXJiZV9sb2FkKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90DQo+ID4gY3VyYmVfYnVmZmVyKQ0KPiA+ICt7DQo+ID4g KwlPVVRfQkFUQ0goR0VON19NRURJQV9DVVJCRV9MT0FEIHwgKDQgLSAyKSk7DQo+ID4gKwlPVVRf QkFUQ0goMCk7DQo+ID4gKwkvKiBjdXJiZSB0b3RhbCBkYXRhIGxlbmd0aCAqLw0KPiA+ICsJT1VU X0JBVENIKDY0KTsNCj4gPiArCS8qIGN1cmJlIGRhdGEgc3RhcnQgYWRkcmVzcywgaXMgcmVsYXRp dmUgdG8gdGhlIGR5bmFtaWNzIGJhc2UNCj4gPiBhZGRyZXNzICovDQo+ID4gKwlPVVRfQkFUQ0go Y3VyYmVfYnVmZmVyKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZA0KPiA+ICtnZW43X2VtaXRf aW50ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LA0KPiA+IHVpbnQzMl90IGludGVyZmFjZV9kZXNjcmlwdG9yKQ0KPiA+ICt7DQo+ID4gKwlPVVRf QkFUQ0goR0VON19NRURJQV9JTlRFUkZBQ0VfREVTQ1JJUFRPUl9MT0FEIHwgKDQgLSAyKSk7DQo+ ID4gKwlPVVRfQkFUQ0goMCk7DQo+ID4gKwkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBkYXRhIGxl bmd0aCAqLw0KPiA+ICsJT1VUX0JBVENIKHNpemVvZihzdHJ1Y3QgZ2VuN19pbnRlcmZhY2VfZGVz Y3JpcHRvcl9kYXRhKSk7DQo+ID4gKwkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBhZGRyZXNzLCBp cyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZQ0KPiA+IGFkZHJlc3MgKi8NCj4gPiArCU9V VF9CQVRDSChpbnRlcmZhY2VfZGVzY3JpcHRvcik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQN Cj4gPiArZ2VuN19lbWl0X21lZGlhX29iamVjdHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwNCj4gPiArCQkJdW5zaWduZWQgeCwgdW5zaWduZWQgeSwNCj4gPiArCQkJdW5zaWduZWQg d2lkdGgsIHVuc2lnbmVkIGhlaWdodCkNCj4gPiArew0KPiA+ICsJaW50IGksIGo7DQo+ID4gKw0K PiA+ICsJZm9yIChpID0gMDsgaSA8IHdpZHRoIC8gMTY7IGkrKykgew0KPiA+ICsJCWZvciAoaiA9 IDA7IGogPCBoZWlnaHQgLyAxNjsgaisrKSB7DQo+ID4gKwkJCU9VVF9CQVRDSChHRU43X01FRElB X09CSkVDVCB8ICg4IC0gMikpOw0KPiA+ICsNCj4gPiArCQkJLyogaW50ZXJmYWNlIGRlc2NyaXB0 b3Igb2Zmc2V0ICovDQo+ID4gKwkJCU9VVF9CQVRDSCgwKTsNCj4gPiArDQo+ID4gKwkJCS8qIHdp dGhvdXQgaW5kaXJlY3QgZGF0YSAqLw0KPiA+ICsJCQlPVVRfQkFUQ0goMCk7DQo+ID4gKwkJCU9V VF9CQVRDSCgwKTsNCj4gPiArDQo+ID4gKwkJCS8qIHNjb3JlYm9hcmQgKi8NCj4gPiArCQkJT1VU X0JBVENIKDApOw0KPiA+ICsJCQlPVVRfQkFUQ0goMCk7DQo+ID4gKw0KPiA+ICsJCQkvKiBpbmxp bmUgZGF0YSAoeG9mZnNldCwgeW9mZnNldCkgKi8NCj4gPiArCQkJT1VUX0JBVENIKHggKyBpICog MTYpOw0KPiA+ICsJCQlPVVRfQkFUQ0goeSArIGogKiAxNik7DQo+ID4gKwkJfQ0KPiA+ICsJfQ0K PiA+ICt9DQo+ID4gKw0KPiA+ICt1aW50MzJfdA0KPiA+ICtnZW44X2ZpbGxfc3VyZmFjZV9zdGF0 ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLA0KPiA+ICsJCQlzdHJ1Y3QgaWd0X2J1 ZiAqYnVmLA0KPiA+ICsJCQl1aW50MzJfdCBmb3JtYXQsDQo+ID4gKwkJCWludCBpc19kc3QpDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCBnZW44X3N1cmZhY2Vfc3RhdGUgKnNzOw0KPiA+ICsJdWludDMy X3Qgd3JpdGVfZG9tYWluLCByZWFkX2RvbWFpbiwgb2Zmc2V0Ow0KPiA+ICsJaW50IHJldDsNCj4g PiArDQo+ID4gKwlpZiAoaXNfZHN0KSB7DQo+ID4gKwkJd3JpdGVfZG9tYWluID0gcmVhZF9kb21h aW4gPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOw0KPiA+ICsJfSBlbHNlIHsNCj4gPiArCQl3cml0 ZV9kb21haW4gPSAwOw0KPiA+ICsJCXJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1NBTVBM RVI7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJc3MgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9m KCpzcyksIDY0KTsNCj4gPiArCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgc3MpOw0KPiA+ ICsNCj4gPiArCXNzLT5zczAuc3VyZmFjZV90eXBlID0gR0VOOF9TVVJGQUNFXzJEOw0KPiA+ICsJ c3MtPnNzMC5zdXJmYWNlX2Zvcm1hdCA9IGZvcm1hdDsNCj4gPiArCXNzLT5zczAucmVuZGVyX2Nh Y2hlX3JlYWRfd3JpdGUgPSAxOw0KPiA+ICsJc3MtPnNzMC52ZXJ0aWNhbF9hbGlnbm1lbnQgPSAx OyAvKiBhbGlnbiA0ICovDQo+ID4gKwlzcy0+c3MwLmhvcml6b250YWxfYWxpZ25tZW50ID0gMTsg LyogYWxpZ24gNCAqLw0KPiA+ICsNCj4gPiArCWlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElO R19YKQ0KPiA+ICsJCXNzLT5zczAudGlsZWRfbW9kZSA9IDI7DQo+ID4gKwllbHNlIGlmIChidWYt PnRpbGluZyA9PSBJOTE1X1RJTElOR19ZKQ0KPiA+ICsJCXNzLT5zczAudGlsZWRfbW9kZSA9IDM7 DQo+ID4gKw0KPiA+ICsJc3MtPnNzOC5iYXNlX2FkZHIgPSBidWYtPmJvLT5vZmZzZXQ7DQo+ID4g Kw0KPiA+ICsJcmV0ID0gZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLA0KPiA+ICsJ CQkJYmF0Y2hfb2Zmc2V0KGJhdGNoLCBzcykgKyA4ICogNCwNCj4gPiArCQkJCWJ1Zi0+Ym8sIDAs DQo+ID4gKwkJCQlyZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWluKTsNCj4gPiArCWlndF9hc3NlcnQo cmV0ID09IDApOw0KPiA+ICsNCj4gPiArCXNzLT5zczIuaGVpZ2h0ID0gaWd0X2J1Zl9oZWlnaHQo YnVmKSAtIDE7DQo+ID4gKwlzcy0+c3MyLndpZHRowqDCoD0gaWd0X2J1Zl93aWR0aChidWYpIC0g MTsNCj4gPiArCXNzLT5zczMucGl0Y2jCoMKgPSBidWYtPnN0cmlkZSAtIDE7DQo+ID4gKw0KPiA+ ICsJc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9yID0gNDsNCj4gPiArCXNzLT5zczcuc2hh ZGVyX2NoYW5lbF9zZWxlY3RfZyA9IDU7DQo+ID4gKwlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2Vs ZWN0X2IgPSA2Ow0KPiA+ICsJc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9hID0gNzsNCj4g PiArDQo+ID4gKwlyZXR1cm4gb2Zmc2V0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICt1aW50MzJfdA0K PiA+ICtnZW44X2ZpbGxfYmluZGluZ190YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLA0KPiA+ICsJCQlzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQ0KPiA+ICt7DQo+ID4gKwl1aW50MzJf dCAqYmluZGluZ190YWJsZSwgb2Zmc2V0Ow0KPiA+ICsNCj4gPiArCWJpbmRpbmdfdGFibGUgPSBi YXRjaF9hbGxvYyhiYXRjaCwgMzIsIDY0KTsNCj4gPiArCW9mZnNldCA9IGJhdGNoX29mZnNldChi YXRjaCwgYmluZGluZ190YWJsZSk7DQo+ID4gKw0KPiA+ICsJYmluZGluZ190YWJsZVswXSA9IGdl bjhfZmlsbF9zdXJmYWNlX3N0YXRlKGJhdGNoLCBkc3QsDQo+ID4gR0VOOF9TVVJGQUNFRk9STUFU X1I4X1VOT1JNLCAxKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gb2Zmc2V0Ow0KPiA+ICt9DQo+ID4g Kw0KPiA+ICt1aW50MzJfdA0KPiA+ICtnZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Ioc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgc3RydWN0DQo+ID4gaWd0X2J1ZiAqZHN0LCBj b25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwgc2l6ZV90IHNpemUpDQo+ID4gK3sNCj4gPiArCXN0 cnVjdCBnZW44X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEgKmlkZDsNCj4gPiArCXVpbnQzMl90 IG9mZnNldDsNCj4gPiArCXVpbnQzMl90IGJpbmRpbmdfdGFibGVfb2Zmc2V0LCBrZXJuZWxfb2Zm c2V0Ow0KPiA+ICsNCj4gPiArCWJpbmRpbmdfdGFibGVfb2Zmc2V0ID0gZ2VuOF9maWxsX2JpbmRp bmdfdGFibGUoYmF0Y2gsIGRzdCk7DQo+ID4gKwlrZXJuZWxfb2Zmc2V0ID0gZ2VuN19maWxsX2tl cm5lbChiYXRjaCwga2VybmVsLCBzaXplb2Yoa2VybmVsKSk7DQo+ID4gKw0KPiA+ICsJaWRkID0g YmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigqaWRkKSwgNjQpOw0KPiA+ICsJb2Zmc2V0ID0gYmF0 Y2hfb2Zmc2V0KGJhdGNoLCBpZGQpOw0KPiA+ICsNCj4gPiArCWlkZC0+ZGVzYzAua2VybmVsX3N0 YXJ0X3BvaW50ZXIgPSAoa2VybmVsX29mZnNldCA+PiA2KTsNCj4gPiArDQo+ID4gKwlpZGQtPmRl c2MyLnNpbmdsZV9wcm9ncmFtX2Zsb3cgPSAxOw0KPiA+ICsJaWRkLT5kZXNjMi5mbG9hdGluZ19w b2ludF9tb2RlID0gR0VOOF9GTE9BVElOR19QT0lOVF9JRUVFXzc1NDsNCj4gPiArDQo+ID4gKwlp ZGQtPmRlc2MzLnNhbXBsZXJfY291bnQgPSAwO8KgwqDCoMKgwqDCoC8qIDAgc2FtcGxlcnMgdXNl ZCAqLw0KPiA+ICsJaWRkLT5kZXNjMy5zYW1wbGVyX3N0YXRlX3BvaW50ZXIgPSAwOw0KPiA+ICsN Cj4gPiArCWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9lbnRyeV9jb3VudCA9IDA7DQo+ID4gKwlp ZGQtPmRlc2M0LmJpbmRpbmdfdGFibGVfcG9pbnRlciA9IChiaW5kaW5nX3RhYmxlX29mZnNldCA+ PiA1KTsNCj4gPiArDQo+ID4gKwlpZGQtPmRlc2M1LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX29m ZnNldCA9IDA7DQo+ID4gKwlpZGQtPmRlc2M1LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX2xlbmd0 aCA9IDE7IC8qIGdyZiAxICovDQo+ID4gKw0KPiA+ICsJcmV0dXJuIG9mZnNldDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArdm9pZA0KPiA+ICtnZW44X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpDQo+ID4gK3sNCj4gPiArCU9VVF9CQVRDSChHRU44 X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxNiAtIDIpKTsNCj4gPiArDQo+ID4gKwkvKiBnZW5lcmFs ICovDQo+ID4gKwlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOw0KPiA+ICsJT1VU X0JBVENIKDApOw0KPiA+ICsNCj4gPiArCS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8NCj4gPiAr CU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7DQo+ID4gKw0KPiA+ICsJLyogc3Vy ZmFjZSAqLw0KPiA+ICsJT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1NBTVBM RVIsIDAsDQo+ID4gQkFTRV9BRERSRVNTX01PRElGWSk7DQo+ID4gKw0KPiA+ICsJLyogZHluYW1p YyAqLw0KPiA+ICsJT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiB8 DQo+ID4gSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLA0KPiA+ICsJCTAsIEJBU0VfQUREUkVT U19NT0RJRlkpOw0KPiA+ICsNCj4gPiArCS8qIGluZGlyZWN0ICovDQo+ID4gKwlPVVRfQkFUQ0go MCk7DQo+ID4gKwlPVVRfQkFUQ0goMCk7DQo+ID4gKw0KPiA+ICsJLyogaW5zdHJ1Y3Rpb24gKi8N Cj4gPiArCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwg MCwNCj4gPiBCQVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiArDQo+ID4gKwkvKiBnZW5lcmFsIHN0 YXRlIGJ1ZmZlciBzaXplICovDQo+ID4gKwlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOw0KPiA+ ICsJLyogZHluYW1pYyBzdGF0ZSBidWZmZXIgc2l6ZSAqLw0KPiA+ICsJT1VUX0JBVENIKDEgPDwg MTIgfCAxKTsNCj4gPiArCS8qIGluZGlyZWN0IG9iamVjdCBidWZmZXIgc2l6ZSAqLw0KPiA+ICsJ T1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsNCj4gPiArCS8qIGludHJ1Y3Rpb24gYnVmZmVyIHNp emUsIG11c3Qgc2V0IG1vZGlmeSBlbmFibGUgYml0LCBvdGhlcndpc2UgaXQNCj4gPiBtYXkgcmVz dWx0IGluIEdQVSBoYW5nICovDQo+ID4gKwlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICt2b2lkDQo+ID4gK2dlbjhfZW1pdF92ZmVfc3RhdGUoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCkNCj4gPiArew0KPiA+ICsJT1VUX0JBVENIKEdFTjhfTUVESUFf VkZFX1NUQVRFIHwgKDkgLSAyKSk7DQo+ID4gKw0KPiA+ICsJLyogc2NyYXRjaCBidWZmZXIgKi8N Cj4gPiArCU9VVF9CQVRDSCgwKTsNCj4gPiArCU9VVF9CQVRDSCgwKTsNCj4gPiArDQo+ID4gKwkv KiBudW1iZXIgb2YgdGhyZWFkcyAmIHVyYiBlbnRyaWVzICovDQo+ID4gKwlPVVRfQkFUQ0goMSA8 PCAxNiB8DQo+ID4gKwkJMiA8PCA4KTsNCj4gPiArDQo+ID4gKwlPVVRfQkFUQ0goMCk7DQo+ID4g Kw0KPiA+ICsJLyogdXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICovDQo+ID4gKwlPVVRfQkFU Q0goMiA8PCAxNiB8DQo+ID4gKwkJMik7DQo+ID4gKw0KPiA+ICsJLyogc2NvcmVib2FyZCAqLw0K PiA+ICsJT1VUX0JBVENIKDApOw0KPiA+ICsJT1VUX0JBVENIKDApOw0KPiA+ICsJT1VUX0JBVENI KDApOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkDQo+ID4gK2dlbjhfZW1pdF92ZmVfc3RhdGVf Z3BncHUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkNCj4gPiArew0KPiA+ICsJT1VU X0JBVENIKEdFTjhfTUVESUFfVkZFX1NUQVRFIHwgKDkgLSAyKSk7DQo+ID4gKw0KPiA+ICsJLyog c2NyYXRjaCBidWZmZXIgKi8NCj4gPiArCU9VVF9CQVRDSCgwKTsNCj4gPiArCU9VVF9CQVRDSCgw KTsNCj4gPiArDQo+ID4gKwkvKiBudW1iZXIgb2YgdGhyZWFkcyAmIHVyYiBlbnRyaWVzICovDQo+ ID4gKwlPVVRfQkFUQ0goMSA8PCAxNiB8IDEgPDwgOCk7DQo+ID4gKw0KPiA+ICsJT1VUX0JBVENI KDApOw0KPiA+ICsNCj4gPiArCS8qIHVyYiBlbnRyeSBzaXplICYgY3VyYmUgc2l6ZSAqLw0KPiA+ ICsJT1VUX0JBVENIKDAgPDwgMTYgfCAxKTsNCj4gPiArDQo+ID4gKwkvKiBzY29yZWJvYXJkICov DQo+ID4gKwlPVVRfQkFUQ0goMCk7DQo+ID4gKwlPVVRfQkFUQ0goMCk7DQo+ID4gKwlPVVRfQkFU Q0goMCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQNCj4gPiArZ2VuOF9lbWl0X2N1cmJlX2xv YWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QNCj4gPiBjdXJiZV9i dWZmZXIpDQo+ID4gK3sNCj4gPiArCU9VVF9CQVRDSChHRU44X01FRElBX0NVUkJFX0xPQUQgfCAo NCAtIDIpKTsNCj4gPiArCU9VVF9CQVRDSCgwKTsNCj4gPiArCS8qIGN1cmJlIHRvdGFsIGRhdGEg bGVuZ3RoICovDQo+ID4gKwlPVVRfQkFUQ0goNjQpOw0KPiA+ICsJLyogY3VyYmUgZGF0YSBzdGFy dCBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZQ0KPiA+IGFkZHJlc3Mg Ki8NCj4gPiArCU9VVF9CQVRDSChjdXJiZV9idWZmZXIpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2 b2lkDQo+ID4gK2dlbjhfZW1pdF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9sb2FkKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gdWludDMyX3QgaW50ZXJmYWNlX2Rlc2NyaXB0b3Ip DQo+ID4gK3sNCj4gPiArCU9VVF9CQVRDSChHRU44X01FRElBX0lOVEVSRkFDRV9ERVNDUklQVE9S X0xPQUQgfCAoNCAtIDIpKTsNCj4gPiArCU9VVF9CQVRDSCgwKTsNCj4gPiArCS8qIGludGVyZmFj ZSBkZXNjcmlwdG9yIGRhdGEgbGVuZ3RoICovDQo+ID4gKwlPVVRfQkFUQ0goc2l6ZW9mKHN0cnVj dCBnZW44X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEpKTsNCj4gPiArCS8qIGludGVyZmFjZSBk ZXNjcmlwdG9yIGFkZHJlc3MsIGlzIHJlbGF0aXZlIHRvIHRoZSBkeW5hbWljcyBiYXNlDQo+ID4g YWRkcmVzcyAqLw0KPiA+ICsJT1VUX0JBVENIKGludGVyZmFjZV9kZXNjcmlwdG9yKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArdm9pZA0KPiA+ICtnZW44X2VtaXRfbWVkaWFfc3RhdGVfZmx1c2goc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkNCj4gPiArew0KPiA+ICsJT1VUX0JBVENIKEdF TjhfTUVESUFfU1RBVEVfRkxVU0ggfCAoMiAtIDIpKTsNCj4gPiArCU9VVF9CQVRDSCgwKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArdm9pZA0KPiA+ICtnZW44X2VtaXRfbWVkaWFfb2JqZWN0cyhzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLA0KPiA+ICsJCQl1bnNpZ25lZCB4LCB1bnNpZ25l ZCB5LA0KPiA+ICsJCQl1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQ0KPiA+ICt7DQo+ ID4gKwlpbnQgaSwgajsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLyAxNjsg aSsrKSB7DQo+ID4gKwkJZm9yIChqID0gMDsgaiA8IGhlaWdodCAvIDE2OyBqKyspIHsNCj4gPiAr CQkJT1VUX0JBVENIKEdFTjhfTUVESUFfT0JKRUNUIHwgKDggLSAyKSk7DQo+ID4gKw0KPiA+ICsJ CQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBvZmZzZXQgKi8NCj4gPiArCQkJT1VUX0JBVENIKDAp Ow0KPiA+ICsNCj4gPiArCQkJLyogd2l0aG91dCBpbmRpcmVjdCBkYXRhICovDQo+ID4gKwkJCU9V VF9CQVRDSCgwKTsNCj4gPiArCQkJT1VUX0JBVENIKDApOw0KPiA+ICsNCj4gPiArCQkJLyogc2Nv cmVib2FyZCAqLw0KPiA+ICsJCQlPVVRfQkFUQ0goMCk7DQo+ID4gKwkJCU9VVF9CQVRDSCgwKTsN Cj4gPiArDQo+ID4gKwkJCS8qIGlubGluZSBkYXRhICh4b2Zmc2V0LCB5b2Zmc2V0KSAqLw0KPiA+ ICsJCQlPVVRfQkFUQ0goeCArIGkgKiAxNik7DQo+ID4gKwkJCU9VVF9CQVRDSCh5ICsgaiAqIDE2 KTsNCj4gPiArCQkJZ2VuOF9lbWl0X21lZGlhX3N0YXRlX2ZsdXNoKGJhdGNoKTsNCj4gPiArCQl9 DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4gK3ZvaWQNCj4gPiArZ2VuOGxwX2VtaXRfbWVk aWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLA0KPiA+ICsJCQl1bnNp Z25lZCB4LCB1bnNpZ25lZCB5LA0KPiA+ICsJCQl1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVp Z2h0KQ0KPiA+ICt7DQo+ID4gKwlpbnQgaSwgajsNCj4gPiArDQo+ID4gKwlmb3IgKGkgPSAwOyBp IDwgd2lkdGggLyAxNjsgaSsrKSB7DQo+ID4gKwkJZm9yIChqID0gMDsgaiA8IGhlaWdodCAvIDE2 OyBqKyspIHsNCj4gPiArCQkJT1VUX0JBVENIKEdFTjhfTUVESUFfT0JKRUNUIHwgKDggLSAyKSk7 DQo+ID4gKw0KPiA+ICsJCQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBvZmZzZXQgKi8NCj4gPiAr CQkJT1VUX0JBVENIKDApOw0KPiA+ICsNCj4gPiArCQkJLyogd2l0aG91dCBpbmRpcmVjdCBkYXRh ICovDQo+ID4gKwkJCU9VVF9CQVRDSCgwKTsNCj4gPiArCQkJT1VUX0JBVENIKDApOw0KPiA+ICsN Cj4gPiArCQkJLyogc2NvcmVib2FyZCAqLw0KPiA+ICsJCQlPVVRfQkFUQ0goMCk7DQo+ID4gKwkJ CU9VVF9CQVRDSCgwKTsNCj4gPiArDQo+ID4gKwkJCS8qIGlubGluZSBkYXRhICh4b2Zmc2V0LCB5 b2Zmc2V0KSAqLw0KPiA+ICsJCQlPVVRfQkFUQ0goeCArIGkgKiAxNik7DQo+ID4gKwkJCU9VVF9C QVRDSCh5ICsgaiAqIDE2KTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gK30NCj4gPiArDQo+ID4g K3ZvaWQNCj4gPiArZ2VuOV9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoKQ0KPiA+ICt7DQo+ID4gKwlPVVRfQkFUQ0goR0VOOF9TVEFURV9CQVNF X0FERFJFU1MgfCAoMTkgLSAyKSk7DQo+ID4gKw0KPiA+ICsJLyogZ2VuZXJhbCAqLw0KPiA+ICsJ T1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiArCU9VVF9CQVRDSCgwKTsN Cj4gPiArDQo+ID4gKwkvKiBzdGF0ZWxlc3MgZGF0YSBwb3J0ICovDQo+ID4gKwlPVVRfQkFUQ0go MCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOw0KPiA+ICsNCj4gPiArCS8qIHN1cmZhY2UgKi8NCj4g PiArCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLA0KPiA+ IEJBU0VfQUREUkVTU19NT0RJRlkpOw0KPiA+ICsNCj4gPiArCS8qIGR5bmFtaWMgKi8NCj4gPiAr CU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIgfA0KPiA+IEk5MTVf R0VNX0RPTUFJTl9JTlNUUlVDVElPTiwNCj4gPiArCQkwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsN Cj4gPiArDQo+ID4gKwkvKiBpbmRpcmVjdCAqLw0KPiA+ICsJT1VUX0JBVENIKDApOw0KPiA+ICsJ T1VUX0JBVENIKDApOw0KPiA+ICsNCj4gPiArCS8qIGluc3RydWN0aW9uICovDQo+ID4gKwlPVVRf UkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsDQo+ID4gQkFT RV9BRERSRVNTX01PRElGWSk7DQo+ID4gKw0KPiA+ICsJLyogZ2VuZXJhbCBzdGF0ZSBidWZmZXIg c2l6ZSAqLw0KPiA+ICsJT1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsNCj4gPiArCS8qIGR5bmFt aWMgc3RhdGUgYnVmZmVyIHNpemUgKi8NCj4gPiArCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7DQo+ ID4gKwkvKiBpbmRpcmVjdCBvYmplY3QgYnVmZmVyIHNpemUgKi8NCj4gPiArCU9VVF9CQVRDSCgw eGZmZmZmMDAwIHwgMSk7DQo+ID4gKwkvKiBpbnRydWN0aW9uIGJ1ZmZlciBzaXplLCBtdXN0IHNl dCBtb2RpZnkgZW5hYmxlIGJpdCwgb3RoZXJ3aXNlIGl0DQo+ID4gbWF5IHJlc3VsdCBpbiBHUFUg aGFuZyAqLw0KPiA+ICsJT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsNCj4gPiArDQo+ID4gKwkvKiBC aW5kbGVzcyBzdXJmYWNlIHN0YXRlIGJhc2UgYWRkcmVzcyAqLw0KPiA+ICsJT1VUX0JBVENIKDAg fCBCQVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiArCU9VVF9CQVRDSCgwKTsNCj4gPiArCU9VVF9C QVRDSCgweGZmZmZmMDAwKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZA0KPiA+ICtnZW43X2Vt aXRfZ3BncHVfd2FsayhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLA0KPiA+ICsJCcKg wqDCoMKgwqB1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LA0KPiA+ICsJCcKgwqDCoMKgwqB1bnNpZ25l ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQ0KPiA+ICt7DQo+ID4gKwl1aW50MzJfdCB4X2RpbSwg eV9kaW0sIHRtcCwgcmlnaHRfbWFzazsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ICsJwqAqIFNpbXBs eSBkbyBTSU1EMTYgYmFzZWQgZGlzcGF0Y2gsIHNvIGV2ZXJ5IHRocmVhZCB1c2VzDQo+ID4gKwnC oCogU0lNRDE2IGNoYW5uZWxzLg0KPiA+ICsJwqAqDQo+ID4gKwnCoCogRGVmaW5lIG91ciBvd24g dGhyZWFkIGdyb3VwIHNpemUsIGUuZyAxNngxIGZvciBldmVyeSBncm91cCwgdGhlbg0KPiA+ICsJ wqAqIHdpbGwgaGF2ZSAxIHRocmVhZCBlYWNoIGdyb3VwIGluIFNJTUQxNiBkaXNwYXRjaC4gU28g dGhyZWFkDQo+ID4gKwnCoCogd2lkdGgvaGVpZ2h0L2RlcHRoIGFyZSBhbGwgMS4NCj4gPiArCcKg Kg0KPiA+ICsJwqAqIFRoZW4gdGhyZWFkIGdyb3VwIFggPSB3aWR0aCAvIDE2IChhbGlnbmVkIHRv IDE2KQ0KPiA+ICsJwqAqIHRocmVhZCBncm91cCBZID0gaGVpZ2h0Ow0KPiA+ICsJwqAqLw0KPiA+ ICsJeF9kaW0gPSAod2lkdGggKyAxNSkgLyAxNjsNCj4gPiArCXlfZGltID0gaGVpZ2h0Ow0KPiA+ ICsNCj4gPiArCXRtcCA9IHdpZHRoICYgMTU7DQo+ID4gKwlpZiAodG1wID09IDApDQo+ID4gKwkJ cmlnaHRfbWFzayA9ICgxIDw8IDE2KSAtIDE7DQo+ID4gKwllbHNlDQo+ID4gKwkJcmlnaHRfbWFz ayA9ICgxIDw8IHRtcCkgLSAxOw0KPiA+ICsNCj4gPiArCU9VVF9CQVRDSChHRU43X0dQR1BVX1dB TEtFUiB8IDkpOw0KPiA+ICsNCj4gPiArCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIG9mZnNldCAq Lw0KPiA+ICsJT1VUX0JBVENIKDApOw0KPiA+ICsNCj4gPiArCS8qIFNJTUQgc2l6ZSwgdGhyZWFk IHcvaC9kICovDQo+ID4gKwlPVVRfQkFUQ0goMSA8PCAzMCB8IC8qIFNJTUQxNiAqLw0KPiA+ICsJ CcKgwqAwIDw8IDE2IHwgLyogZGVwdGg6MSAqLw0KPiA+ICsJCcKgwqAwIDw8IDggfCAvKiBoZWln aHQ6MSAqLw0KPiA+ICsJCcKgwqAwKTsgLyogd2lkdGg6MSAqLw0KPiA+ICsNCj4gPiArCS8qIHRo cmVhZCBncm91cCBYICovDQo+ID4gKwlPVVRfQkFUQ0goMCk7DQo+ID4gKwlPVVRfQkFUQ0goeF9k aW0pOw0KPiA+ICsNCj4gPiArCS8qIHRocmVhZCBncm91cCBZICovDQo+ID4gKwlPVVRfQkFUQ0go MCk7DQo+ID4gKwlPVVRfQkFUQ0goeV9kaW0pOw0KPiA+ICsNCj4gPiArCS8qIHRocmVhZCBncm91 cCBaICovDQo+ID4gKwlPVVRfQkFUQ0goMCk7DQo+ID4gKwlPVVRfQkFUQ0goMSk7DQo+ID4gKw0K PiA+ICsJLyogcmlnaHQgbWFzayAqLw0KPiA+ICsJT1VUX0JBVENIKHJpZ2h0X21hc2spOw0KPiA+ ICsNCj4gPiArCS8qIGJvdHRvbSBtYXNrLCBoZWlnaHQgMSwgYWx3YXlzIDB4ZmZmZmZmZmYgKi8N Cj4gPiArCU9VVF9CQVRDSCgweGZmZmZmZmZmKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZA0K PiA+ICtnZW44X2VtaXRfZ3BncHVfd2FsayhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LA0KPiA+ICsJCcKgwqDCoMKgwqB1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LA0KPiA+ICsJCcKgwqDC oMKgwqB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQ0KPiA+ICt7DQo+ID4gKwl1aW50 MzJfdCB4X2RpbSwgeV9kaW0sIHRtcCwgcmlnaHRfbWFzazsNCj4gPiArDQo+ID4gKwkvKg0KPiA+ ICsJwqAqIFNpbXBseSBkbyBTSU1EMTYgYmFzZWQgZGlzcGF0Y2gsIHNvIGV2ZXJ5IHRocmVhZCB1 c2VzDQo+ID4gKwnCoCogU0lNRDE2IGNoYW5uZWxzLg0KPiA+ICsJwqAqDQo+ID4gKwnCoCogRGVm aW5lIG91ciBvd24gdGhyZWFkIGdyb3VwIHNpemUsIGUuZyAxNngxIGZvciBldmVyeSBncm91cCwg dGhlbg0KPiA+ICsJwqAqIHdpbGwgaGF2ZSAxIHRocmVhZCBlYWNoIGdyb3VwIGluIFNJTUQxNiBk aXNwYXRjaC4gU28gdGhyZWFkDQo+ID4gKwnCoCogd2lkdGgvaGVpZ2h0L2RlcHRoIGFyZSBhbGwg MS4NCj4gPiArCcKgKg0KPiA+ICsJwqAqIFRoZW4gdGhyZWFkIGdyb3VwIFggPSB3aWR0aCAvIDE2 IChhbGlnbmVkIHRvIDE2KQ0KPiA+ICsJwqAqIHRocmVhZCBncm91cCBZID0gaGVpZ2h0Ow0KPiA+ ICsJwqAqLw0KPiA+ICsJeF9kaW0gPSAod2lkdGggKyAxNSkgLyAxNjsNCj4gPiArCXlfZGltID0g aGVpZ2h0Ow0KPiA+ICsNCj4gPiArCXRtcCA9IHdpZHRoICYgMTU7DQo+ID4gKwlpZiAodG1wID09 IDApDQo+ID4gKwkJcmlnaHRfbWFzayA9ICgxIDw8IDE2KSAtIDE7DQo+ID4gKwllbHNlDQo+ID4g KwkJcmlnaHRfbWFzayA9ICgxIDw8IHRtcCkgLSAxOw0KPiA+ICsNCj4gPiArCU9VVF9CQVRDSChH RU43X0dQR1BVX1dBTEtFUiB8IDEzKTsNCj4gPiArDQo+ID4gKwlPVVRfQkFUQ0goMCk7IC8qIGtl cm5lbCBvZmZzZXQgKi8NCj4gPiArCU9VVF9CQVRDSCgwKTsgLyogaW5kaXJlY3QgZGF0YSBsZW5n dGggKi8NCj4gPiArCU9VVF9CQVRDSCgwKTsgLyogaW5kaXJlY3QgZGF0YSBvZmZzZXQgKi8NCj4g PiArDQo+ID4gKwkvKiBTSU1EIHNpemUsIHRocmVhZCB3L2gvZCAqLw0KPiA+ICsJT1VUX0JBVENI KDEgPDwgMzAgfCAvKiBTSU1EMTYgKi8NCj4gPiArCQnCoMKgMCA8PCAxNiB8IC8qIGRlcHRoOjEg Ki8NCj4gPiArCQnCoMKgMCA8PCA4IHwgLyogaGVpZ2h0OjEgKi8NCj4gPiArCQnCoMKgMCk7IC8q IHdpZHRoOjEgKi8NCj4gPiArDQo+ID4gKwkvKiB0aHJlYWQgZ3JvdXAgWCAqLw0KPiA+ICsJT1VU X0JBVENIKDApOw0KPiA+ICsJT1VUX0JBVENIKDApOw0KPiA+ICsJT1VUX0JBVENIKHhfZGltKTsN Cj4gPiArDQo+ID4gKwkvKiB0aHJlYWQgZ3JvdXAgWSAqLw0KPiA+ICsJT1VUX0JBVENIKDApOw0K PiA+ICsJT1VUX0JBVENIKDApOw0KPiA+ICsJT1VUX0JBVENIKHlfZGltKTsNCj4gPiArDQo+ID4g KwkvKiB0aHJlYWQgZ3JvdXAgWiAqLw0KPiA+ICsJT1VUX0JBVENIKDApOw0KPiA+ICsJT1VUX0JB VENIKDEpOw0KPiA+ICsNCj4gPiArCS8qIHJpZ2h0IG1hc2sgKi8NCj4gPiArCU9VVF9CQVRDSChy aWdodF9tYXNrKTsNCj4gPiArDQo+ID4gKwkvKiBib3R0b20gbWFzaywgaGVpZ2h0IDEsIGFsd2F5 cyAweGZmZmZmZmZmICovDQo+ID4gKwlPVVRfQkFUQ0goMHhmZmZmZmZmZik7DQo+ID4gK30NCj4g PiBkaWZmIC0tZ2l0IGEvbGliL2dwdV9maWxsLmggYi9saWIvZ3B1X2ZpbGwuaA0KPiA+IG5ldyBm aWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAuLmEyNzFjZTZlDQo+ID4gLS0tIC9k ZXYvbnVsbA0KPiA+ICsrKyBiL2xpYi9ncHVfZmlsbC5oDQo+ID4gQEAgLTAsMCArMSwxNDEgQEAN Cj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IMKpIDIwMTggSW50ZWwgQ29ycG9yYXRpb24NCj4g PiArICoNCj4gPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFy Z2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGENCj4gPiArICogY29weSBvZiB0aGlzIHNvZnR3 YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQ0KPiA+ICJTb2Z0d2Fy ZSIpLA0KPiA+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9u LCBpbmNsdWRpbmcgd2l0aG91dA0KPiA+IGxpbWl0YXRpb24NCj4gPiArICogdGhlIHJpZ2h0cyB0 byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vu c2UsDQo+ID4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQ0KPiA+ICsgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KPiA+ICsgKg0K PiA+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSAoaW5jbHVkaW5nIHRoZQ0KPiA+IG5leHQNCj4gPiArICogcGFyYWdyYXBoKSBzaGFsbCBi ZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mDQo+ID4g dGhlDQo+ID4gKyAqIFNvZnR3YXJlLg0KPiA+ICsgKg0KPiA+ICsgKiBUSEUgU09GVFdBUkUgSVMg UFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUw0K PiA+IE9SDQo+ID4gKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLA0KPiA+ICsgKiBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULsKgwqBJTiBOTyBFVkVOVCBTSEFM TA0KPiA+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9S IEFOWSBDTEFJTSwgREFNQUdFUyBPUg0KPiA+IE9USEVSDQo+ID4gKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H DQo+ID4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJF IE9SIFRIRSBVU0UgT1IgT1RIRVINCj4gPiBERUFMSU5HUw0KPiA+ICsgKiBJTiBUSEUgU09GVFdB UkUuDQo+ID4gKyAqDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2lmbmRlZiBHUFVfRklMTF9IDQo+ ID4gKyNkZWZpbmUgR1BVX0ZJTExfSA0KPiA+ICsNCj4gPiArdWludDMyX3QNCj4gPiArYmF0Y2hf dXNlZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKTsNCj4gPiArDQo+ID4gK3VpbnQz Ml90DQo+ID4gK2JhdGNoX2FsaWduKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVp bnQzMl90IGFsaWduKTsNCj4gPiArDQo+ID4gK3ZvaWQgKg0KPiA+ICtiYXRjaF9hbGxvYyhzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBzaXplLCB1aW50MzJfdA0KPiA+ IGFsaWduKTsNCj4gPiArDQo+ID4gK3VpbnQzMl90DQo+ID4gK2JhdGNoX29mZnNldChzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB2b2lkICpwdHIpOw0KPiA+ICsNCj4gPiArdWludDMy X3QNCj4gPiArYmF0Y2hfY29weShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25z dCB2b2lkICpwdHIsIHVpbnQzMl90IHNpemUsDQo+ID4gdWludDMyX3QgYWxpZ24pOw0KPiA+ICsN Cj4gPiArdm9pZA0KPiA+ICtnZW43X3JlbmRlcl9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLCB1aW50MzJfdCBiYXRjaF9lbmQpOw0KPiA+ICsNCj4gPiArdWludDMyX3QNCj4g PiArZ2VuN19maWxsX2N1cmJlX2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsDQo+ID4gKwkJCXVpbnQ4X3QgY29sb3IpOw0KPiA+ICsNCj4gPiArdWludDMyX3QNCj4g PiArZ2VuN19maWxsX3N1cmZhY2Vfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwNCj4gPiArCQkJc3RydWN0IGlndF9idWYgKmJ1ZiwNCj4gPiArCQkJdWludDMyX3QgZm9ybWF0 LA0KPiA+ICsJCQlpbnQgaXNfZHN0KTsNCj4gPiArDQo+ID4gK3VpbnQzMl90DQo+ID4gK2dlbjdf ZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4g KwkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpOw0KPiA+ICt1aW50MzJfdA0KPiA+ICtnZW43X2ZpbGxf a2VybmVsKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gKwkJY29uc3QgdWlu dDMyX3Qga2VybmVsW11bNF0sDQo+ID4gKwkJc2l6ZV90IHNpemUpOw0KPiA+ICsNCj4gPiArdWlu dDMyX3QNCj4gPiArZ2VuN19maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdA0KPiA+IGlndF9idWYgKmRzdCwNCj4gPiArCQkJwqDC oMKgwqDCoMKgwqBjb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwgc2l6ZV90IHNpemUpOw0KPiA+ ICsNCj4gPiArdm9pZA0KPiA+ICtnZW43X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpOw0KPiA+ICsNCj4gPiArdm9pZA0KPiA+ICtnZW43X2Vt aXRfdmZlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpOw0KPiA+ICsNCj4g PiArdm9pZA0KPiA+ICtnZW43X2VtaXRfdmZlX3N0YXRlX2dwZ3B1KHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gpOw0KPiA+ICsNCj4gPiArdm9pZA0KPiA+ICtnZW43X2VtaXRfY3VyYmVf bG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdA0KPiA+IGN1cmJl X2J1ZmZlcik7DQo+ID4gKw0KPiA+ICt2b2lkDQo+ID4gK2dlbjdfZW1pdF9pbnRlcmZhY2VfZGVz Y3JpcHRvcl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gdWludDMy X3QgaW50ZXJmYWNlX2Rlc2NyaXB0b3IpOw0KPiA+ICsNCj4gPiArdm9pZA0KPiA+ICtnZW43X2Vt aXRfbWVkaWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLA0KPiA+ICsJ CQl1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LA0KPiA+ICsJCQl1bnNpZ25lZCB3aWR0aCwgdW5zaWdu ZWQgaGVpZ2h0KTsNCj4gPiArDQo+ID4gK3VpbnQzMl90DQo+ID4gK2dlbjhfZmlsbF9zdXJmYWNl X3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gKwkJCXN0cnVjdCBp Z3RfYnVmICpidWYsDQo+ID4gKwkJCXVpbnQzMl90IGZvcm1hdCwNCj4gPiArCQkJaW50IGlzX2Rz dCk7DQo+ID4gKw0KPiA+ICt1aW50MzJfdA0KPiA+ICtnZW44X2ZpbGxfYmluZGluZ190YWJsZShz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLA0KPiA+ICsJCQlzdHJ1Y3QgaWd0X2J1ZiAq ZHN0KTsNCj4gPiArDQo+ID4gK3VpbnQzMl90DQo+ID4gK2dlbjhfZmlsbF9pbnRlcmZhY2VfZGVz Y3JpcHRvcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBzdHJ1Y3QNCj4gPiBpZ3Rf YnVmICpkc3QsIGNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLCBzaXplX3Qgc2l6ZSk7DQo+ID4g Kw0KPiA+ICt2b2lkDQo+ID4gK2dlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7DQo+ID4gKw0KPiA+ICt2b2lkDQo+ID4gK2dlbjhfZW1p dF92ZmVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7DQo+ID4gKw0KPiA+ ICt2b2lkDQo+ID4gK2dlbjhfZW1pdF92ZmVfc3RhdGVfZ3BncHUoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCk7DQo+ID4gKw0KPiA+ICt2b2lkDQo+ID4gK2dlbjhfZW1pdF9jdXJiZV9s b2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90DQo+ID4gY3VyYmVf YnVmZmVyKTsNCj4gPiArDQo+ID4gK3ZvaWQNCj4gPiArZ2VuOF9lbWl0X2ludGVyZmFjZV9kZXNj cmlwdG9yX2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwNCj4gPiB1aW50MzJf dCBpbnRlcmZhY2VfZGVzY3JpcHRvcik7DQo+ID4gKw0KPiA+ICt2b2lkDQo+ID4gK2dlbjhfZW1p dF9tZWRpYV9zdGF0ZV9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKTsNCj4g PiArDQo+ID4gK3ZvaWQNCj4gPiArZ2VuOF9lbWl0X21lZGlhX29iamVjdHMoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwNCj4gPiArCQkJdW5zaWduZWQgeCwgdW5zaWduZWQgeSwNCj4g PiArCQkJdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7DQo+ID4gKw0KPiA+ICt2b2lk DQo+ID4gK2dlbjhscF9lbWl0X21lZGlhX29iamVjdHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwNCj4gPiArCQkJdW5zaWduZWQgeCwgdW5zaWduZWQgeSwNCj4gPiArCQkJdW5zaWdu ZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCk7DQo+ID4gKw0KPiA+ICt2b2lkDQo+ID4gK2dlbjlf ZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCk7 DQo+ID4gKw0KPiA+ICt2b2lkDQo+ID4gK2dlbjdfZW1pdF9ncGdwdV93YWxrKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gKwkJwqDCoMKgwqDCoHVuc2lnbmVkIHgsIHVuc2ln bmVkIHksDQo+ID4gKwkJwqDCoMKgwqDCoHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQp Ow0KPiA+ICt2b2lkDQo+ID4gK2dlbjhfZW1pdF9ncGdwdV93YWxrKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsDQo+ID4gKwkJwqDCoMKgwqDCoHVuc2lnbmVkIHgsIHVuc2lnbmVkIHks DQo+ID4gKwkJwqDCoMKgwqDCoHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpOw0KPiA+ ICsNCj4gPiArI2VuZGlmIC8qIEdQVV9GSUxMX0ggKi8NCj4gPiBkaWZmIC0tZ2l0IGEvbGliL21l ZGlhX2ZpbGxfZ2VuNy5jIGIvbGliL21lZGlhX2ZpbGxfZ2VuNy5jDQo+ID4gaW5kZXggNmZiNDQ3 OTguLmM5NzU1NWE2IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9tZWRpYV9maWxsX2dlbjcuYw0KPiA+ ICsrKyBiL2xpYi9tZWRpYV9maWxsX2dlbjcuYw0KPiA+IEBAIC01LDcgKzUsNyBAQA0KPiA+IMKg ICNpbmNsdWRlICJnZW43X21lZGlhLmgiDQo+ID4gwqAgI2luY2x1ZGUgImludGVsX3JlZy5oIg0K PiA+IMKgICNpbmNsdWRlICJkcm10ZXN0LmgiDQo+ID4gLQ0KPiA+ICsjaW5jbHVkZSAiZ3B1X2Zp bGwuaCINCj4gPiDCoCAjaW5jbHVkZSA8YXNzZXJ0Lmg+DQo+ID4gwqDCoA0KPiA+IMKgIHN0YXRp YyBjb25zdCB1aW50MzJfdCBtZWRpYV9rZXJuZWxbXVs0XSA9IHsNCj4gPiBAQCAtMjIsMjc1ICsy Miw2IEBAIHN0YXRpYyBjb25zdCB1aW50MzJfdCBtZWRpYV9rZXJuZWxbXVs0XSA9IHsNCj4gPiDC oMKgCXsgMHgwNzgwMDAzMSwgMHgyMDAwMWNhOCwgMHgwMDAwMGUwMCwgMHg4MjAwMDAxMCB9LA0K PiA+IMKgIH07DQo+ID4gwqDCoA0KPiA+IC1zdGF0aWMgdWludDMyX3QNCj4gPiAtYmF0Y2hfdXNl ZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQ0KPiA+IC17DQo+ID4gLQlyZXR1cm4g YmF0Y2gtPnB0ciAtIGJhdGNoLT5idWZmZXI7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1 aW50MzJfdA0KPiA+IC1iYXRjaF9hbGlnbihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LCB1aW50MzJfdCBhbGlnbikNCj4gPiAtew0KPiA+IC0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hf dXNlZChiYXRjaCk7DQo+ID4gLQlvZmZzZXQgPSBBTElHTihvZmZzZXQsIGFsaWduKTsNCj4gPiAt CWJhdGNoLT5wdHIgPSBiYXRjaC0+YnVmZmVyICsgb2Zmc2V0Ow0KPiA+IC0JcmV0dXJuIG9mZnNl dDsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHZvaWQgKg0KPiA+IC1iYXRjaF9hbGxvYyhz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBzaXplLCB1aW50MzJfdCBh bGlnbikNCj4gPiAtew0KPiA+IC0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfYWxpZ24oYmF0Y2gs IGFsaWduKTsNCj4gPiAtCWJhdGNoLT5wdHIgKz0gc2l6ZTsNCj4gPiAtCXJldHVybiBtZW1zZXQo YmF0Y2gtPmJ1ZmZlciArIG9mZnNldCwgMCwgc2l6ZSk7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0 YXRpYyB1aW50MzJfdA0KPiA+IC1iYXRjaF9vZmZzZXQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwgdm9pZCAqcHRyKQ0KPiA+IC17DQo+ID4gLQlyZXR1cm4gKHVpbnQ4X3QgKilwdHIg LSBiYXRjaC0+YnVmZmVyOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdWludDMyX3QNCj4g PiAtYmF0Y2hfY29weShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCB2b2lk ICpwdHIsIHVpbnQzMl90IHNpemUsDQo+ID4gdWludDMyX3QgYWxpZ24pDQo+ID4gLXsNCj4gPiAt CXJldHVybiBiYXRjaF9vZmZzZXQoYmF0Y2gsIG1lbWNweShiYXRjaF9hbGxvYyhiYXRjaCwgc2l6 ZSwgYWxpZ24pLA0KPiA+IHB0ciwgc2l6ZSkpOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMg dm9pZA0KPiA+IC1nZW43X3JlbmRlcl9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLCB1aW50MzJfdCBiYXRjaF9lbmQpDQo+ID4gLXsNCj4gPiAtCWludCByZXQ7DQo+ID4gLQ0K PiA+IC0JcmV0ID0gZHJtX2ludGVsX2JvX3N1YmRhdGEoYmF0Y2gtPmJvLCAwLCA0MDk2LCBiYXRj aC0+YnVmZmVyKTsNCj4gPiAtCWlmIChyZXQgPT0gMCkNCj4gPiAtCQlyZXQgPSBkcm1faW50ZWxf Ym9fbXJiX2V4ZWMoYmF0Y2gtPmJvLCBiYXRjaF9lbmQsDQo+ID4gLQkJCQkJTlVMTCwgMCwgMCwg MCk7DQo+ID4gLQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3Rh dGljIHVpbnQzMl90DQo+ID4gLWdlbjdfZmlsbF9jdXJiZV9idWZmZXJfZGF0YShzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLA0KPiA+IC0JCQl1aW50OF90IGNvbG9yKQ0KPiA+IC17DQo+ ID4gLQl1aW50OF90ICpjdXJiZV9idWZmZXI7DQo+ID4gLQl1aW50MzJfdCBvZmZzZXQ7DQo+ID4g LQ0KPiA+IC0JY3VyYmVfYnVmZmVyID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZih1aW50MzJf dCkgKiA4LCA2NCk7DQo+ID4gLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGN1cmJlX2J1 ZmZlcik7DQo+ID4gLQkqY3VyYmVfYnVmZmVyID0gY29sb3I7DQo+ID4gLQ0KPiA+IC0JcmV0dXJu IG9mZnNldDsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHVpbnQzMl90DQo+ID4gLWdlbjdf ZmlsbF9zdXJmYWNlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4g LQkJCXN0cnVjdCBpZ3RfYnVmICpidWYsDQo+ID4gLQkJCXVpbnQzMl90IGZvcm1hdCwNCj4gPiAt CQkJaW50IGlzX2RzdCkNCj4gPiAtew0KPiA+IC0Jc3RydWN0IGdlbjdfc3VyZmFjZV9zdGF0ZSAq c3M7DQo+ID4gLQl1aW50MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluLCBvZmZzZXQ7DQo+ ID4gLQlpbnQgcmV0Ow0KPiA+IC0NCj4gPiAtCWlmIChpc19kc3QpIHsNCj4gPiAtCQl3cml0ZV9k b21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7DQo+ID4gLQl9IGVs c2Ugew0KPiA+IC0JCXdyaXRlX2RvbWFpbiA9IDA7DQo+ID4gLQkJcmVhZF9kb21haW4gPSBJOTE1 X0dFTV9ET01BSU5fU0FNUExFUjsNCj4gPiAtCX0NCj4gPiAtDQo+ID4gLQlzcyA9IGJhdGNoX2Fs bG9jKGJhdGNoLCBzaXplb2YoKnNzKSwgNjQpOw0KPiA+IC0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0 KGJhdGNoLCBzcyk7DQo+ID4gLQ0KPiA+IC0Jc3MtPnNzMC5zdXJmYWNlX3R5cGUgPSBHRU43X1NV UkZBQ0VfMkQ7DQo+ID4gLQlzcy0+c3MwLnN1cmZhY2VfZm9ybWF0ID0gZm9ybWF0Ow0KPiA+IC0J c3MtPnNzMC5yZW5kZXJfY2FjaGVfcmVhZF93cml0ZSA9IDE7DQo+ID4gLQ0KPiA+IC0JaWYgKGJ1 Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1gpDQo+ID4gLQkJc3MtPnNzMC50aWxlZF9tb2RlID0g MjsNCj4gPiAtCWVsc2UgaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpDQo+ID4gLQkJ c3MtPnNzMC50aWxlZF9tb2RlID0gMzsNCj4gPiAtDQo+ID4gLQlzcy0+c3MxLmJhc2VfYWRkciA9 IGJ1Zi0+Ym8tPm9mZnNldDsNCj4gPiAtCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJh dGNoLT5ibywNCj4gPiAtCQkJCWJhdGNoX29mZnNldChiYXRjaCwgc3MpICsgNCwNCj4gPiAtCQkJ CWJ1Zi0+Ym8sIDAsDQo+ID4gLQkJCQlyZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWluKTsNCj4gPiAt CWlndF9hc3NlcnQocmV0ID09IDApOw0KPiA+IC0NCj4gPiAtCXNzLT5zczIuaGVpZ2h0ID0gaWd0 X2J1Zl9oZWlnaHQoYnVmKSAtIDE7DQo+ID4gLQlzcy0+c3MyLndpZHRowqDCoD0gaWd0X2J1Zl93 aWR0aChidWYpIC0gMTsNCj4gPiAtDQo+ID4gLQlzcy0+c3MzLnBpdGNowqDCoD0gYnVmLT5zdHJp ZGUgLSAxOw0KPiA+IC0NCj4gPiAtCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfciA9IDQ7 DQo+ID4gLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2cgPSA1Ow0KPiA+IC0Jc3MtPnNz Ny5zaGFkZXJfY2hhbmVsX3NlbGVjdF9iID0gNjsNCj4gPiAtCXNzLT5zczcuc2hhZGVyX2NoYW5l bF9zZWxlY3RfYSA9IDc7DQo+ID4gLQ0KPiA+IC0JcmV0dXJuIG9mZnNldDsNCj4gPiAtfQ0KPiA+ IC0NCj4gPiAtc3RhdGljIHVpbnQzMl90DQo+ID4gLWdlbjdfZmlsbF9iaW5kaW5nX3RhYmxlKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gLQkJCXN0cnVjdCBpZ3RfYnVmICpk c3QpDQo+ID4gLXsNCj4gPiAtCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxlLCBvZmZzZXQ7DQo+ID4g LQ0KPiA+IC0JYmluZGluZ190YWJsZSA9IGJhdGNoX2FsbG9jKGJhdGNoLCAzMiwgNjQpOw0KPiA+ IC0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsNCj4gPiAtDQo+ ID4gLQliaW5kaW5nX3RhYmxlWzBdID0gZ2VuN19maWxsX3N1cmZhY2Vfc3RhdGUoYmF0Y2gsIGRz dCwNCj4gPiBHRU43X1NVUkZBQ0VGT1JNQVRfUjhfVU5PUk0sIDEpOw0KPiA+IC0NCj4gPiAtCXJl dHVybiBvZmZzZXQ7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1aW50MzJfdA0KPiA+IC1n ZW43X2ZpbGxfbWVkaWFfa2VybmVsKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ ID4gLQkJY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sDQo+ID4gLQkJc2l6ZV90IHNpemUpDQo+ ID4gLXsNCj4gPiAtCXVpbnQzMl90IG9mZnNldDsNCj4gPiAtDQo+ID4gLQlvZmZzZXQgPSBiYXRj aF9jb3B5KGJhdGNoLCBrZXJuZWwsIHNpemUsIDY0KTsNCj4gPiAtDQo+ID4gLQlyZXR1cm4gb2Zm c2V0Ow0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdWludDMyX3QNCj4gPiAtZ2VuN19maWxs X2ludGVyZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHN0 cnVjdA0KPiA+IGlndF9idWYgKmRzdCwNCj4gPiAtCQkJwqDCoMKgwqDCoMKgwqBjb25zdCB1aW50 MzJfdCBrZXJuZWxbXVs0XSwgc2l6ZV90IHNpemUpDQo+ID4gLXsNCj4gPiAtCXN0cnVjdCBnZW43 X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEgKmlkZDsNCj4gPiAtCXVpbnQzMl90IG9mZnNldDsN Cj4gPiAtCXVpbnQzMl90IGJpbmRpbmdfdGFibGVfb2Zmc2V0LCBrZXJuZWxfb2Zmc2V0Ow0KPiA+ IC0NCj4gPiAtCWJpbmRpbmdfdGFibGVfb2Zmc2V0ID0gZ2VuN19maWxsX2JpbmRpbmdfdGFibGUo YmF0Y2gsIGRzdCk7DQo+ID4gLQlrZXJuZWxfb2Zmc2V0ID0gZ2VuN19maWxsX21lZGlhX2tlcm5l bChiYXRjaCwga2VybmVsLCBzaXplKTsNCj4gPiAtDQo+ID4gLQlpZGQgPSBiYXRjaF9hbGxvYyhi YXRjaCwgc2l6ZW9mKCppZGQpLCA2NCk7DQo+ID4gLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0 Y2gsIGlkZCk7DQo+ID4gLQ0KPiA+IC0JaWRkLT5kZXNjMC5rZXJuZWxfc3RhcnRfcG9pbnRlciA9 IChrZXJuZWxfb2Zmc2V0ID4+IDYpOw0KPiA+IC0NCj4gPiAtCWlkZC0+ZGVzYzEuc2luZ2xlX3By b2dyYW1fZmxvdyA9IDE7DQo+ID4gLQlpZGQtPmRlc2MxLmZsb2F0aW5nX3BvaW50X21vZGUgPSBH RU43X0ZMT0FUSU5HX1BPSU5UX0lFRUVfNzU0Ow0KPiA+IC0NCj4gPiAtCWlkZC0+ZGVzYzIuc2Ft cGxlcl9jb3VudCA9IDA7wqDCoMKgwqDCoMKgLyogMCBzYW1wbGVycyB1c2VkICovDQo+ID4gLQlp ZGQtPmRlc2MyLnNhbXBsZXJfc3RhdGVfcG9pbnRlciA9IDA7DQo+ID4gLQ0KPiA+IC0JaWRkLT5k ZXNjMy5iaW5kaW5nX3RhYmxlX2VudHJ5X2NvdW50ID0gMDsNCj4gPiAtCWlkZC0+ZGVzYzMuYmlu ZGluZ190YWJsZV9wb2ludGVyID0gKGJpbmRpbmdfdGFibGVfb2Zmc2V0ID4+IDUpOw0KPiA+IC0N Cj4gPiAtCWlkZC0+ZGVzYzQuY29uc3RhbnRfdXJiX2VudHJ5X3JlYWRfb2Zmc2V0ID0gMDsNCj4g PiAtCWlkZC0+ZGVzYzQuY29uc3RhbnRfdXJiX2VudHJ5X3JlYWRfbGVuZ3RoID0gMTsgLyogZ3Jm IDEgKi8NCj4gPiAtDQo+ID4gLQlyZXR1cm4gb2Zmc2V0Ow0KPiA+IC19DQo+ID4gLQ0KPiA+IC1z dGF0aWMgdm9pZA0KPiA+IC1nZW43X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gpDQo+ID4gLXsNCj4gPiAtCU9VVF9CQVRDSChHRU43X1NUQVRF X0JBU0VfQUREUkVTUyB8ICgxMCAtIDIpKTsNCj4gPiAtDQo+ID4gLQkvKiBnZW5lcmFsICovDQo+ ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLQ0KPiA+IC0JLyogc3VyZmFjZSAqLw0KPiA+IC0JT1VU X1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLA0KPiA+IEJB U0VfQUREUkVTU19NT0RJRlkpOw0KPiA+IC0NCj4gPiAtCS8qIGR5bmFtaWMgKi8NCj4gPiAtCU9V VF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwNCj4gPiBC QVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiAtDQo+ID4gLQkvKiBpbmRpcmVjdCAqLw0KPiA+IC0J T1VUX0JBVENIKDApOw0KPiA+IC0NCj4gPiAtCS8qIGluc3RydWN0aW9uICovDQo+ID4gLQlPVVRf UkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsDQo+ID4gQkFT RV9BRERSRVNTX01PRElGWSk7DQo+ID4gLQ0KPiA+IC0JLyogZ2VuZXJhbC9keW5hbWljL2luZGly ZWN0L2luc3RydWN0aW9uIGFjY2VzcyBCb3VuZCAqLw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+ IC0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiAtCU9VVF9CQVRDSCgw KTsNCj4gPiAtCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7DQo+ID4gLX0NCj4g PiAtDQo+ID4gLXN0YXRpYyB2b2lkDQo+ID4gLWdlbjdfZW1pdF92ZmVfc3RhdGUoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCkNCj4gPiAtew0KPiA+IC0JT1VUX0JBVENIKEdFTjdfTUVE SUFfVkZFX1NUQVRFIHwgKDggLSAyKSk7DQo+ID4gLQ0KPiA+IC0JLyogc2NyYXRjaCBidWZmZXIg Ki8NCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtDQo+ID4gLQkvKiBudW1iZXIgb2YgdGhyZWFk cyAmIHVyYiBlbnRyaWVzICovDQo+ID4gLQlPVVRfQkFUQ0goMSA8PCAxNiB8DQo+ID4gLQkJMiA8 PCA4KTsNCj4gPiAtDQo+ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLQ0KPiA+IC0JLyogdXJiIGVu dHJ5IHNpemUgJiBjdXJiZSBzaXplICovDQo+ID4gLQlPVVRfQkFUQ0goMiA8PCAxNiB8wqAJLyog aW4gMjU2IGJpdHMgdW5pdCAqLw0KPiA+IC0JCTIpOwkJLyogaW4gMjU2IGJpdHMgdW5pdCAqLw0K PiA+IC0NCj4gPiAtCS8qIHNjb3JlYm9hcmQgKi8NCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAt CU9VVF9CQVRDSCgwKTsNCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAt c3RhdGljIHZvaWQNCj4gPiAtZ2VuN19lbWl0X2N1cmJlX2xvYWQoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwgdWludDMyX3QNCj4gPiBjdXJiZV9idWZmZXIpDQo+ID4gLXsNCj4gPiAt CU9VVF9CQVRDSChHRU43X01FRElBX0NVUkJFX0xPQUQgfCAoNCAtIDIpKTsNCj4gPiAtCU9VVF9C QVRDSCgwKTsNCj4gPiAtCS8qIGN1cmJlIHRvdGFsIGRhdGEgbGVuZ3RoICovDQo+ID4gLQlPVVRf QkFUQ0goNjQpOw0KPiA+IC0JLyogY3VyYmUgZGF0YSBzdGFydCBhZGRyZXNzLCBpcyByZWxhdGl2 ZSB0byB0aGUgZHluYW1pY3MgYmFzZQ0KPiA+IGFkZHJlc3MgKi8NCj4gPiAtCU9VVF9CQVRDSChj dXJiZV9idWZmZXIpOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdm9pZA0KPiA+IC1nZW43 X2VtaXRfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLA0KPiA+IHVpbnQzMl90IGludGVyZmFjZV9kZXNjcmlwdG9yKQ0KPiA+IC17DQo+ID4g LQlPVVRfQkFUQ0goR0VON19NRURJQV9JTlRFUkZBQ0VfREVTQ1JJUFRPUl9MT0FEIHwgKDQgLSAy KSk7DQo+ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBk YXRhIGxlbmd0aCAqLw0KPiA+IC0JT1VUX0JBVENIKHNpemVvZihzdHJ1Y3QgZ2VuN19pbnRlcmZh Y2VfZGVzY3JpcHRvcl9kYXRhKSk7DQo+ID4gLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBhZGRy ZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZQ0KPiA+IGFkZHJlc3MgKi8NCj4g PiAtCU9VVF9CQVRDSChpbnRlcmZhY2VfZGVzY3JpcHRvcik7DQo+ID4gLX0NCj4gPiAtDQo+ID4g LXN0YXRpYyB2b2lkDQo+ID4gLWdlbjdfZW1pdF9tZWRpYV9vYmplY3RzKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gLQkJCXVuc2lnbmVkIHgsIHVuc2lnbmVkIHksDQo+ID4g LQkJCXVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQpDQo+ID4gLXsNCj4gPiAtCWludCBp LCBqOw0KPiA+IC0NCj4gPiAtCWZvciAoaSA9IDA7IGkgPCB3aWR0aCAvIDE2OyBpKyspIHsNCj4g PiAtCQlmb3IgKGogPSAwOyBqIDwgaGVpZ2h0IC8gMTY7IGorKykgew0KPiA+IC0JCQlPVVRfQkFU Q0goR0VON19NRURJQV9PQkpFQ1QgfCAoOCAtIDIpKTsNCj4gPiAtDQo+ID4gLQkJCS8qIGludGVy ZmFjZSBkZXNjcmlwdG9yIG9mZnNldCAqLw0KPiA+IC0JCQlPVVRfQkFUQ0goMCk7DQo+ID4gLQ0K PiA+IC0JCQkvKiB3aXRob3V0IGluZGlyZWN0IGRhdGEgKi8NCj4gPiAtCQkJT1VUX0JBVENIKDAp Ow0KPiA+IC0JCQlPVVRfQkFUQ0goMCk7DQo+ID4gLQ0KPiA+IC0JCQkvKiBzY29yZWJvYXJkICov DQo+ID4gLQkJCU9VVF9CQVRDSCgwKTsNCj4gPiAtCQkJT1VUX0JBVENIKDApOw0KPiA+IC0NCj4g PiAtCQkJLyogaW5saW5lIGRhdGEgKHhvZmZzZXQsIHlvZmZzZXQpICovDQo+ID4gLQkJCU9VVF9C QVRDSCh4ICsgaSAqIDE2KTsNCj4gPiAtCQkJT1VUX0JBVENIKHkgKyBqICogMTYpOw0KPiA+IC0J CX0NCj4gPiAtCX0NCj4gPiAtfQ0KPiA+IC0NCj4gPiDCoCAvKg0KPiA+IMKgwqDCoCogVGhpcyBz ZXRzIHVwIHRoZSBtZWRpYSBwaXBlbGluZSwNCj4gPiDCoMKgwqAqDQo+ID4gZGlmZiAtLWdpdCBh L2xpYi9tZWRpYV9maWxsX2dlbjguYyBiL2xpYi9tZWRpYV9maWxsX2dlbjguYw0KPiA+IGluZGV4 IDRhOGZlNWEyLi44OGM3ZGJkZCAxMDA2NDQNCj4gPiAtLS0gYS9saWIvbWVkaWFfZmlsbF9nZW44 LmMNCj4gPiArKysgYi9saWIvbWVkaWFfZmlsbF9nZW44LmMNCj4gPiBAQCAtNSw3ICs1LDcgQEAN Cj4gPiDCoCAjaW5jbHVkZSAiZ2VuOF9tZWRpYS5oIg0KPiA+IMKgICNpbmNsdWRlICJpbnRlbF9y ZWcuaCINCj4gPiDCoCAjaW5jbHVkZSAiZHJtdGVzdC5oIg0KPiA+IC0NCj4gPiArI2luY2x1ZGUg ImdwdV9maWxsLmgiDQo+ID4gwqAgI2luY2x1ZGUgPGFzc2VydC5oPg0KPiA+IMKgwqANCj4gPiDC oMKgDQo+ID4gQEAgLTIzLDI5NCArMjMsNiBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgbWVkaWFf a2VybmVsW11bNF0gPSB7DQo+ID4gwqDCoAl7IDB4MDc4MDAwMzEsIDB4MjAwMDBhNDAsIDB4MGUw MDBlMDAsIDB4ODIwMDAwMTAgfSwNCj4gPiDCoCB9Ow0KPiA+IMKgwqANCj4gPiAtc3RhdGljIHVp bnQzMl90DQo+ID4gLWJhdGNoX3VzZWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkN Cj4gPiAtew0KPiA+IC0JcmV0dXJuIGJhdGNoLT5wdHIgLSBiYXRjaC0+YnVmZmVyOw0KPiA+IC19 DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdWludDMyX3QNCj4gPiAtYmF0Y2hfYWxpZ24oc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYWxpZ24pDQo+ID4gLXsNCj4gPiAtCXVp bnQzMl90IG9mZnNldCA9IGJhdGNoX3VzZWQoYmF0Y2gpOw0KPiA+IC0Jb2Zmc2V0ID0gQUxJR04o b2Zmc2V0LCBhbGlnbik7DQo+ID4gLQliYXRjaC0+cHRyID0gYmF0Y2gtPmJ1ZmZlciArIG9mZnNl dDsNCj4gPiAtCXJldHVybiBvZmZzZXQ7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB2b2lk ICoNCj4gPiAtYmF0Y2hfYWxsb2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWlu dDMyX3Qgc2l6ZSwgdWludDMyX3QgYWxpZ24pDQo+ID4gLXsNCj4gPiAtCXVpbnQzMl90IG9mZnNl dCA9IGJhdGNoX2FsaWduKGJhdGNoLCBhbGlnbik7DQo+ID4gLQliYXRjaC0+cHRyICs9IHNpemU7 DQo+ID4gLQlyZXR1cm4gbWVtc2V0KGJhdGNoLT5idWZmZXIgKyBvZmZzZXQsIDAsIHNpemUpOw0K PiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdWludDMyX3QNCj4gPiAtYmF0Y2hfb2Zmc2V0KHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHZvaWQgKnB0cikNCj4gPiAtew0KPiA+IC0J cmV0dXJuICh1aW50OF90ICopcHRyIC0gYmF0Y2gtPmJ1ZmZlcjsNCj4gPiAtfQ0KPiA+IC0NCj4g PiAtc3RhdGljIHVpbnQzMl90DQo+ID4gLWJhdGNoX2NvcHkoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwgY29uc3Qgdm9pZCAqcHRyLCB1aW50MzJfdCBzaXplLA0KPiA+IHVpbnQzMl90 IGFsaWduKQ0KPiA+IC17DQo+ID4gLQlyZXR1cm4gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBtZW1jcHko YmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemUsIGFsaWduKSwNCj4gPiBwdHIsIHNpemUpKTsNCj4gPiAt fQ0KPiA+IC0NCj4gPiAtc3RhdGljIHZvaWQNCj4gPiAtZ2VuOF9yZW5kZXJfZmx1c2goc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYmF0Y2hfZW5kKQ0KPiA+IC17DQo+ ID4gLQlpbnQgcmV0Ow0KPiA+IC0NCj4gPiAtCXJldCA9IGRybV9pbnRlbF9ib19zdWJkYXRhKGJh dGNoLT5ibywgMCwgNDA5NiwgYmF0Y2gtPmJ1ZmZlcik7DQo+ID4gLQlpZiAocmV0ID09IDApDQo+ ID4gLQkJcmV0ID0gZHJtX2ludGVsX2JvX21yYl9leGVjKGJhdGNoLT5ibywgYmF0Y2hfZW5kLA0K PiA+IC0JCQkJCU5VTEwsIDAsIDAsIDApOw0KPiA+IC0JaWd0X2Fzc2VydChyZXQgPT0gMCk7DQo+ ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1aW50MzJfdA0KPiA+IC1nZW44X2ZpbGxfY3VyYmVf YnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwNCj4gPiAtCQkJdWlu dDhfdCBjb2xvcikNCj4gPiAtew0KPiA+IC0JdWludDhfdCAqY3VyYmVfYnVmZmVyOw0KPiA+IC0J dWludDMyX3Qgb2Zmc2V0Ow0KPiA+IC0NCj4gPiAtCWN1cmJlX2J1ZmZlciA9IGJhdGNoX2FsbG9j KGJhdGNoLCBzaXplb2YodWludDMyX3QpICogOCwgNjQpOw0KPiA+IC0Jb2Zmc2V0ID0gYmF0Y2hf b2Zmc2V0KGJhdGNoLCBjdXJiZV9idWZmZXIpOw0KPiA+IC0JKmN1cmJlX2J1ZmZlciA9IGNvbG9y Ow0KPiA+IC0NCj4gPiAtCXJldHVybiBvZmZzZXQ7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRp YyB1aW50MzJfdA0KPiA+IC1nZW44X2ZpbGxfc3VyZmFjZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLA0KPiA+IC0JCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLA0KPiA+IC0JCQl1 aW50MzJfdCBmb3JtYXQsDQo+ID4gLQkJCWludCBpc19kc3QpDQo+ID4gLXsNCj4gPiAtCXN0cnVj dCBnZW44X3N1cmZhY2Vfc3RhdGUgKnNzOw0KPiA+IC0JdWludDMyX3Qgd3JpdGVfZG9tYWluLCBy ZWFkX2RvbWFpbiwgb2Zmc2V0Ow0KPiA+IC0JaW50IHJldDsNCj4gPiAtDQo+ID4gLQlpZiAoaXNf ZHN0KSB7DQo+ID4gLQkJd3JpdGVfZG9tYWluID0gcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01B SU5fUkVOREVSOw0KPiA+IC0JfSBlbHNlIHsNCj4gPiAtCQl3cml0ZV9kb21haW4gPSAwOw0KPiA+ IC0JCXJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7DQo+ID4gLQl9DQo+ID4g LQ0KPiA+IC0Jc3MgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzcyksIDY0KTsNCj4gPiAt CW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgc3MpOw0KPiA+IC0NCj4gPiAtCXNzLT5zczAu c3VyZmFjZV90eXBlID0gR0VOOF9TVVJGQUNFXzJEOw0KPiA+IC0Jc3MtPnNzMC5zdXJmYWNlX2Zv cm1hdCA9IGZvcm1hdDsNCj4gPiAtCXNzLT5zczAucmVuZGVyX2NhY2hlX3JlYWRfd3JpdGUgPSAx Ow0KPiA+IC0Jc3MtPnNzMC52ZXJ0aWNhbF9hbGlnbm1lbnQgPSAxOyAvKiBhbGlnbiA0ICovDQo+ ID4gLQlzcy0+c3MwLmhvcml6b250YWxfYWxpZ25tZW50ID0gMTsgLyogYWxpZ24gNCAqLw0KPiA+ IC0NCj4gPiAtCWlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19YKQ0KPiA+IC0JCXNzLT5z czAudGlsZWRfbW9kZSA9IDI7DQo+ID4gLQllbHNlIGlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJ TElOR19ZKQ0KPiA+IC0JCXNzLT5zczAudGlsZWRfbW9kZSA9IDM7DQo+ID4gLQ0KPiA+IC0Jc3Mt PnNzOC5iYXNlX2FkZHIgPSBidWYtPmJvLT5vZmZzZXQ7DQo+ID4gLQ0KPiA+IC0JcmV0ID0gZHJt X2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLA0KPiA+IC0JCQkJYmF0Y2hfb2Zmc2V0KGJh dGNoLCBzcykgKyA4ICogNCwNCj4gPiAtCQkJCWJ1Zi0+Ym8sIDAsDQo+ID4gLQkJCQlyZWFkX2Rv bWFpbiwgd3JpdGVfZG9tYWluKTsNCj4gPiAtCWlndF9hc3NlcnQocmV0ID09IDApOw0KPiA+IC0N Cj4gPiAtCXNzLT5zczIuaGVpZ2h0ID0gaWd0X2J1Zl9oZWlnaHQoYnVmKSAtIDE7DQo+ID4gLQlz cy0+c3MyLndpZHRowqDCoD0gaWd0X2J1Zl93aWR0aChidWYpIC0gMTsNCj4gPiAtCXNzLT5zczMu cGl0Y2jCoMKgPSBidWYtPnN0cmlkZSAtIDE7DQo+ID4gLQ0KPiA+IC0Jc3MtPnNzNy5zaGFkZXJf Y2hhbmVsX3NlbGVjdF9yID0gNDsNCj4gPiAtCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3Rf ZyA9IDU7DQo+ID4gLQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2IgPSA2Ow0KPiA+IC0J c3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9hID0gNzsNCj4gPiAtDQo+ID4gLQlyZXR1cm4g b2Zmc2V0Ow0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdWludDMyX3QNCj4gPiAtZ2VuOF9m aWxsX2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwNCj4gPiAt CQkJc3RydWN0IGlndF9idWYgKmRzdCkNCj4gPiAtew0KPiA+IC0JdWludDMyX3QgKmJpbmRpbmdf dGFibGUsIG9mZnNldDsNCj4gPiAtDQo+ID4gLQliaW5kaW5nX3RhYmxlID0gYmF0Y2hfYWxsb2Mo YmF0Y2gsIDMyLCA2NCk7DQo+ID4gLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGJpbmRp bmdfdGFibGUpOw0KPiA+IC0NCj4gPiAtCWJpbmRpbmdfdGFibGVbMF0gPSBnZW44X2ZpbGxfc3Vy ZmFjZV9zdGF0ZShiYXRjaCwgZHN0LA0KPiA+IEdFTjhfU1VSRkFDRUZPUk1BVF9SOF9VTk9STSwg MSk7DQo+ID4gLQ0KPiA+IC0JcmV0dXJuIG9mZnNldDsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3Rh dGljIHVpbnQzMl90DQo+ID4gLWdlbjhfZmlsbF9tZWRpYV9rZXJuZWwoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwNCj4gPiAtCQljb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwNCj4g PiAtCQlzaXplX3Qgc2l6ZSkNCj4gPiAtew0KPiA+IC0JdWludDMyX3Qgb2Zmc2V0Ow0KPiA+IC0N Cj4gPiAtCW9mZnNldCA9IGJhdGNoX2NvcHkoYmF0Y2gsIGtlcm5lbCwgc2l6ZSwgNjQpOw0KPiA+ IC0NCj4gPiAtCXJldHVybiBvZmZzZXQ7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1aW50 MzJfdA0KPiA+IC1nZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2NyaXB0b3Ioc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwgc3RydWN0DQo+ID4gaWd0X2J1ZiAqZHN0KQ0KPiA+IC17DQo+ID4g LQlzdHJ1Y3QgZ2VuOF9pbnRlcmZhY2VfZGVzY3JpcHRvcl9kYXRhICppZGQ7DQo+ID4gLQl1aW50 MzJfdCBvZmZzZXQ7DQo+ID4gLQl1aW50MzJfdCBiaW5kaW5nX3RhYmxlX29mZnNldCwga2VybmVs X29mZnNldDsNCj4gPiAtDQo+ID4gLQliaW5kaW5nX3RhYmxlX29mZnNldCA9IGdlbjhfZmlsbF9i aW5kaW5nX3RhYmxlKGJhdGNoLCBkc3QpOw0KPiA+IC0Ja2VybmVsX29mZnNldCA9IGdlbjhfZmls bF9tZWRpYV9rZXJuZWwoYmF0Y2gsIG1lZGlhX2tlcm5lbCwNCj4gPiBzaXplb2YobWVkaWFfa2Vy bmVsKSk7DQo+ID4gLQ0KPiA+IC0JaWRkID0gYmF0Y2hfYWxsb2MoYmF0Y2gsIHNpemVvZigqaWRk KSwgNjQpOw0KPiA+IC0Jb2Zmc2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBpZGQpOw0KPiA+IC0N Cj4gPiAtCWlkZC0+ZGVzYzAua2VybmVsX3N0YXJ0X3BvaW50ZXIgPSAoa2VybmVsX29mZnNldCA+ PiA2KTsNCj4gPiAtDQo+ID4gLQlpZGQtPmRlc2MyLnNpbmdsZV9wcm9ncmFtX2Zsb3cgPSAxOw0K PiA+IC0JaWRkLT5kZXNjMi5mbG9hdGluZ19wb2ludF9tb2RlID0gR0VOOF9GTE9BVElOR19QT0lO VF9JRUVFXzc1NDsNCj4gPiAtDQo+ID4gLQlpZGQtPmRlc2MzLnNhbXBsZXJfY291bnQgPSAwO8Kg wqDCoMKgwqDCoC8qIDAgc2FtcGxlcnMgdXNlZCAqLw0KPiA+IC0JaWRkLT5kZXNjMy5zYW1wbGVy X3N0YXRlX3BvaW50ZXIgPSAwOw0KPiA+IC0NCj4gPiAtCWlkZC0+ZGVzYzQuYmluZGluZ190YWJs ZV9lbnRyeV9jb3VudCA9IDA7DQo+ID4gLQlpZGQtPmRlc2M0LmJpbmRpbmdfdGFibGVfcG9pbnRl ciA9IChiaW5kaW5nX3RhYmxlX29mZnNldCA+PiA1KTsNCj4gPiAtDQo+ID4gLQlpZGQtPmRlc2M1 LmNvbnN0YW50X3VyYl9lbnRyeV9yZWFkX29mZnNldCA9IDA7DQo+ID4gLQlpZGQtPmRlc2M1LmNv bnN0YW50X3VyYl9lbnRyeV9yZWFkX2xlbmd0aCA9IDE7IC8qIGdyZiAxICovDQo+ID4gLQ0KPiA+ IC0JcmV0dXJuIG9mZnNldDsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHZvaWQNCj4gPiAt Z2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoKQ0KPiA+IC17DQo+ID4gLQlPVVRfQkFUQ0goR0VOOF9TVEFURV9CQVNFX0FERFJFU1MgfCAo MTYgLSAyKSk7DQo+ID4gLQ0KPiA+IC0JLyogZ2VuZXJhbCAqLw0KPiA+IC0JT1VUX0JBVENIKDAg fCBCQVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtDQo+ID4g LQkvKiBzdGF0ZWxlc3MgZGF0YSBwb3J0ICovDQo+ID4gLQlPVVRfQkFUQ0goMCB8IEJBU0VfQURE UkVTU19NT0RJRlkpOw0KPiA+IC0NCj4gPiAtCS8qIHN1cmZhY2UgKi8NCj4gPiAtCU9VVF9SRUxP QyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLA0KPiA+IEJBU0VfQUREUkVT U19NT0RJRlkpOw0KPiA+IC0NCj4gPiAtCS8qIGR5bmFtaWMgKi8NCj4gPiAtCU9VVF9SRUxPQyhi YXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIgfA0KPiA+IEk5MTVfR0VNX0RPTUFJTl9J TlNUUlVDVElPTiwNCj4gPiAtCQkwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiAtDQo+ID4g LQkvKiBpbmRpcmVjdCAqLw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC0JT1VUX0JBVENIKDAp Ow0KPiA+IC0NCj4gPiAtCS8qIGluc3RydWN0aW9uICovDQo+ID4gLQlPVVRfUkVMT0MoYmF0Y2gt PmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsDQo+ID4gQkFTRV9BRERSRVNTX01P RElGWSk7DQo+ID4gLQ0KPiA+IC0JLyogZ2VuZXJhbCBzdGF0ZSBidWZmZXIgc2l6ZSAqLw0KPiA+ IC0JT1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsNCj4gPiAtCS8qIGR5bmFtaWMgc3RhdGUgYnVm ZmVyIHNpemUgKi8NCj4gPiAtCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7DQo+ID4gLQkvKiBpbmRp cmVjdCBvYmplY3QgYnVmZmVyIHNpemUgKi8NCj4gPiAtCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwg MSk7DQo+ID4gLQkvKiBpbnRydWN0aW9uIGJ1ZmZlciBzaXplLCBtdXN0IHNldCBtb2RpZnkgZW5h YmxlIGJpdCwgb3RoZXJ3aXNlIGl0DQo+ID4gbWF5IHJlc3VsdCBpbiBHUFUgaGFuZyAqLw0KPiA+ IC0JT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHZv aWQNCj4gPiAtZ2VuOF9lbWl0X3ZmZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoKQ0KPiA+IC17DQo+ID4gLQlPVVRfQkFUQ0goR0VOOF9NRURJQV9WRkVfU1RBVEUgfCAoOSAt IDIpKTsNCj4gPiAtDQo+ID4gLQkvKiBzY3JhdGNoIGJ1ZmZlciAqLw0KPiA+IC0JT1VUX0JBVENI KDApOw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC0NCj4gPiAtCS8qIG51bWJlciBvZiB0aHJl YWRzICYgdXJiIGVudHJpZXMgKi8NCj4gPiAtCU9VVF9CQVRDSCgxIDw8IDE2IHwNCj4gPiAtCQky IDw8IDgpOw0KPiA+IC0NCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtDQo+ID4gLQkvKiB1cmIg ZW50cnkgc2l6ZSAmIGN1cmJlIHNpemUgKi8NCj4gPiAtCU9VVF9CQVRDSCgyIDw8IDE2IHwNCj4g PiAtCQkyKTsNCj4gPiAtDQo+ID4gLQkvKiBzY29yZWJvYXJkICovDQo+ID4gLQlPVVRfQkFUQ0go MCk7DQo+ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLX0NCj4g PiAtDQo+ID4gLXN0YXRpYyB2b2lkDQo+ID4gLWdlbjhfZW1pdF9jdXJiZV9sb2FkKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90DQo+ID4gY3VyYmVfYnVmZmVyKQ0KPiA+ IC17DQo+ID4gLQlPVVRfQkFUQ0goR0VOOF9NRURJQV9DVVJCRV9MT0FEIHwgKDQgLSAyKSk7DQo+ ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLQkvKiBjdXJiZSB0b3RhbCBkYXRhIGxlbmd0aCAqLw0K PiA+IC0JT1VUX0JBVENIKDY0KTsNCj4gPiAtCS8qIGN1cmJlIGRhdGEgc3RhcnQgYWRkcmVzcywg aXMgcmVsYXRpdmUgdG8gdGhlIGR5bmFtaWNzIGJhc2UNCj4gPiBhZGRyZXNzICovDQo+ID4gLQlP VVRfQkFUQ0goY3VyYmVfYnVmZmVyKTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHZvaWQN Cj4gPiAtZ2VuOF9lbWl0X2ludGVyZmFjZV9kZXNjcmlwdG9yX2xvYWQoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwNCj4gPiB1aW50MzJfdCBpbnRlcmZhY2VfZGVzY3JpcHRvcikNCj4g PiAtew0KPiA+IC0JT1VUX0JBVENIKEdFTjhfTUVESUFfSU5URVJGQUNFX0RFU0NSSVBUT1JfTE9B RCB8ICg0IC0gMikpOw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC0JLyogaW50ZXJmYWNlIGRl c2NyaXB0b3IgZGF0YSBsZW5ndGggKi8NCj4gPiAtCU9VVF9CQVRDSChzaXplb2Yoc3RydWN0IGdl bjhfaW50ZXJmYWNlX2Rlc2NyaXB0b3JfZGF0YSkpOw0KPiA+IC0JLyogaW50ZXJmYWNlIGRlc2Ny aXB0b3IgYWRkcmVzcywgaXMgcmVsYXRpdmUgdG8gdGhlIGR5bmFtaWNzIGJhc2UNCj4gPiBhZGRy ZXNzICovDQo+ID4gLQlPVVRfQkFUQ0goaW50ZXJmYWNlX2Rlc2NyaXB0b3IpOw0KPiA+IC19DQo+ ID4gLQ0KPiA+IC1zdGF0aWMgdm9pZA0KPiA+IC1nZW44X2VtaXRfbWVkaWFfc3RhdGVfZmx1c2go c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkNCj4gPiAtew0KPiA+IC0JT1VUX0JBVENI KEdFTjhfTUVESUFfU1RBVEVfRkxVU0ggfCAoMiAtIDIpKTsNCj4gPiAtCU9VVF9CQVRDSCgwKTsN Cj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHZvaWQNCj4gPiAtZ2VuOF9lbWl0X21lZGlhX29i amVjdHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwNCj4gPiAtCQkJdW5zaWduZWQg eCwgdW5zaWduZWQgeSwNCj4gPiAtCQkJdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCkN Cj4gPiAtew0KPiA+IC0JaW50IGksIGo7DQo+ID4gLQ0KPiA+IC0JZm9yIChpID0gMDsgaSA8IHdp ZHRoIC8gMTY7IGkrKykgew0KPiA+IC0JCWZvciAoaiA9IDA7IGogPCBoZWlnaHQgLyAxNjsgaisr KSB7DQo+ID4gLQkJCU9VVF9CQVRDSChHRU44X01FRElBX09CSkVDVCB8ICg4IC0gMikpOw0KPiA+ IC0NCj4gPiAtCQkJLyogaW50ZXJmYWNlIGRlc2NyaXB0b3Igb2Zmc2V0ICovDQo+ID4gLQkJCU9V VF9CQVRDSCgwKTsNCj4gPiAtDQo+ID4gLQkJCS8qIHdpdGhvdXQgaW5kaXJlY3QgZGF0YSAqLw0K PiA+IC0JCQlPVVRfQkFUQ0goMCk7DQo+ID4gLQkJCU9VVF9CQVRDSCgwKTsNCj4gPiAtDQo+ID4g LQkJCS8qIHNjb3JlYm9hcmQgKi8NCj4gPiAtCQkJT1VUX0JBVENIKDApOw0KPiA+IC0JCQlPVVRf QkFUQ0goMCk7DQo+ID4gLQ0KPiA+IC0JCQkvKiBpbmxpbmUgZGF0YSAoeG9mZnNldCwgeW9mZnNl dCkgKi8NCj4gPiAtCQkJT1VUX0JBVENIKHggKyBpICogMTYpOw0KPiA+IC0JCQlPVVRfQkFUQ0go eSArIGogKiAxNik7DQo+ID4gLQkJCWdlbjhfZW1pdF9tZWRpYV9zdGF0ZV9mbHVzaChiYXRjaCk7 DQo+ID4gLQkJfQ0KPiA+IC0JfQ0KPiA+IC19DQo+ID4gLQ0KPiA+IMKgIC8qDQo+ID4gwqDCoMKg KiBUaGlzIHNldHMgdXAgdGhlIG1lZGlhIHBpcGVsaW5lLA0KPiA+IMKgwqDCoCoNCj4gPiBAQCAt MzQ4LDggKzYwLDkgQEAgZ2VuOF9tZWRpYV9maWxsZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLA0KPiA+IMKgwqAJLyogc2V0dXAgc3RhdGVzICovDQo+ID4gwqDCoAliYXRjaC0+ cHRyID0gJmJhdGNoLT5idWZmZXJbQkFUQ0hfU1RBVEVfU1BMSVRdOw0KPiA+IMKgwqANCj4gPiAt CWN1cmJlX2J1ZmZlciA9IGdlbjhfZmlsbF9jdXJiZV9idWZmZXJfZGF0YShiYXRjaCwgY29sb3Ip Ow0KPiA+IC0JaW50ZXJmYWNlX2Rlc2NyaXB0b3IgPSBnZW44X2ZpbGxfaW50ZXJmYWNlX2Rlc2Ny aXB0b3IoYmF0Y2gsIGRzdCk7DQo+ID4gKwljdXJiZV9idWZmZXIgPSBnZW43X2ZpbGxfY3VyYmVf YnVmZmVyX2RhdGEoYmF0Y2gsIGNvbG9yKTsNCj4gPiArCWludGVyZmFjZV9kZXNjcmlwdG9yID0g Z2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKGJhdGNoLCBkc3QsDQo+ID4gKwkJCQkJbWVk aWFfa2VybmVsLA0KPiA+IHNpemVvZihtZWRpYV9rZXJuZWwpKTsNCj4gPiDCoMKgCWlndF9hc3Nl cnQoYmF0Y2gtPnB0ciA8ICZiYXRjaC0+YnVmZmVyWzQwOTVdKTsNCj4gPiDCoMKgDQo+ID4gwqDC oAkvKiBtZWRpYSBwaXBlbGluZSAqLw0KPiA+IEBAIC0zNzAsNiArODMsNiBAQCBnZW44X21lZGlh X2ZpbGxmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gwqDCoAliYXRj aF9lbmQgPSBiYXRjaF9hbGlnbihiYXRjaCwgOCk7DQo+ID4gwqDCoAlpZ3RfYXNzZXJ0KGJhdGNo X2VuZCA8IEJBVENIX1NUQVRFX1NQTElUKTsNCj4gPiDCoMKgDQo+ID4gLQlnZW44X3JlbmRlcl9m bHVzaChiYXRjaCwgYmF0Y2hfZW5kKTsNCj4gPiArCWdlbjdfcmVuZGVyX2ZsdXNoKGJhdGNoLCBi YXRjaF9lbmQpOw0KPiA+IMKgwqAJaW50ZWxfYmF0Y2hidWZmZXJfcmVzZXQoYmF0Y2gpOw0KPiA+ IMKgIH0NCj4gPiBkaWZmIC0tZ2l0IGEvbGliL21lZGlhX2ZpbGxfZ2VuOGxwLmMgYi9saWIvbWVk aWFfZmlsbF9nZW44bHAuYw0KPiA+IGluZGV4IDFmOGE0YWRjLi5iMzBkOTZhMyAxMDA2NDQNCj4g PiAtLS0gYS9saWIvbWVkaWFfZmlsbF9nZW44bHAuYw0KPiA+ICsrKyBiL2xpYi9tZWRpYV9maWxs X2dlbjhscC5jDQo+ID4gQEAgLTUsNyArNSw3IEBADQo+ID4gwqAgI2luY2x1ZGUgImdlbjhfbWVk aWEuaCINCj4gPiDCoCAjaW5jbHVkZSAiaW50ZWxfcmVnLmgiDQo+ID4gwqAgI2luY2x1ZGUgImRy bXRlc3QuaCINCj4gPiAtDQo+ID4gKyNpbmNsdWRlICJncHVfZmlsbC5oIg0KPiA+IMKgICNpbmNs dWRlIDxhc3NlcnQuaD4NCj4gPiDCoMKgDQo+ID4gwqDCoA0KPiA+IEBAIC0yMywyODYgKzIzLDYg QEAgc3RhdGljIGNvbnN0IHVpbnQzMl90IG1lZGlhX2tlcm5lbFtdWzRdID0gew0KPiA+IMKgwqAJ eyAweDA3ODAwMDMxLCAweDIwMDAwYTQwLCAweDBlMDAwZTAwLCAweDgyMDAwMDEwIH0sDQo+ID4g wqAgfTsNCj4gPiDCoMKgDQo+ID4gLXN0YXRpYyB1aW50MzJfdA0KPiA+IC1iYXRjaF91c2VkKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpDQo+ID4gLXsNCj4gPiAtCXJldHVybiBiYXRj aC0+cHRyIC0gYmF0Y2gtPmJ1ZmZlcjsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHVpbnQz Ml90DQo+ID4gLWJhdGNoX2FsaWduKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVp bnQzMl90IGFsaWduKQ0KPiA+IC17DQo+ID4gLQl1aW50MzJfdCBvZmZzZXQgPSBiYXRjaF91c2Vk KGJhdGNoKTsNCj4gPiAtCW9mZnNldCA9IEFMSUdOKG9mZnNldCwgYWxpZ24pOw0KPiA+IC0JYmF0 Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIgKyBvZmZzZXQ7DQo+ID4gLQlyZXR1cm4gb2Zmc2V0Ow0K PiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdm9pZCAqDQo+ID4gLWJhdGNoX2FsbG9jKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IGFsaWdu KQ0KPiA+IC17DQo+ID4gLQl1aW50MzJfdCBvZmZzZXQgPSBiYXRjaF9hbGlnbihiYXRjaCwgYWxp Z24pOw0KPiA+IC0JYmF0Y2gtPnB0ciArPSBzaXplOw0KPiA+IC0JcmV0dXJuIG1lbXNldChiYXRj aC0+YnVmZmVyICsgb2Zmc2V0LCAwLCBzaXplKTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGlj IHVpbnQzMl90DQo+ID4gLWJhdGNoX29mZnNldChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLCB2b2lkICpwdHIpDQo+ID4gLXsNCj4gPiAtCXJldHVybiAodWludDhfdCAqKXB0ciAtIGJh dGNoLT5idWZmZXI7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1aW50MzJfdA0KPiA+IC1i YXRjaF9jb3B5KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHZvaWQgKnB0 ciwgdWludDMyX3Qgc2l6ZSwNCj4gPiB1aW50MzJfdCBhbGlnbikNCj4gPiAtew0KPiA+IC0JcmV0 dXJuIGJhdGNoX29mZnNldChiYXRjaCwgbWVtY3B5KGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplLCBh bGlnbiksDQo+ID4gcHRyLCBzaXplKSk7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB2b2lk DQo+ID4gLWdlbjhfcmVuZGVyX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs IHVpbnQzMl90IGJhdGNoX2VuZCkNCj4gPiAtew0KPiA+IC0JaW50IHJldDsNCj4gPiAtDQo+ID4g LQlyZXQgPSBkcm1faW50ZWxfYm9fc3ViZGF0YShiYXRjaC0+Ym8sIDAsIDQwOTYsIGJhdGNoLT5i dWZmZXIpOw0KPiA+IC0JaWYgKHJldCA9PSAwKQ0KPiA+IC0JCXJldCA9IGRybV9pbnRlbF9ib19t cmJfZXhlYyhiYXRjaC0+Ym8sIGJhdGNoX2VuZCwNCj4gPiAtCQkJCQlOVUxMLCAwLCAwLCAwKTsN Cj4gPiAtCWlndF9hc3NlcnQocmV0ID09IDApOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMg dWludDMyX3QNCj4gPiAtZ2VuOF9maWxsX2N1cmJlX2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gLQkJCXVpbnQ4X3QgY29sb3IpDQo+ID4gLXsNCj4gPiAt CXVpbnQ4X3QgKmN1cmJlX2J1ZmZlcjsNCj4gPiAtCXVpbnQzMl90IG9mZnNldDsNCj4gPiAtDQo+ ID4gLQljdXJiZV9idWZmZXIgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKHVpbnQzMl90KSAq IDgsIDY0KTsNCj4gPiAtCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgY3VyYmVfYnVmZmVy KTsNCj4gPiAtCSpjdXJiZV9idWZmZXIgPSBjb2xvcjsNCj4gPiAtDQo+ID4gLQlyZXR1cm4gb2Zm c2V0Ow0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdWludDMyX3QNCj4gPiAtZ2VuOF9maWxs X3N1cmZhY2Vfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwNCj4gPiAtCQkJ c3RydWN0IGlndF9idWYgKmJ1ZiwNCj4gPiAtCQkJdWludDMyX3QgZm9ybWF0LA0KPiA+IC0JCQlp bnQgaXNfZHN0KQ0KPiA+IC17DQo+ID4gLQlzdHJ1Y3QgZ2VuOF9zdXJmYWNlX3N0YXRlICpzczsN Cj4gPiAtCXVpbnQzMl90IHdyaXRlX2RvbWFpbiwgcmVhZF9kb21haW4sIG9mZnNldDsNCj4gPiAt CWludCByZXQ7DQo+ID4gLQ0KPiA+IC0JaWYgKGlzX2RzdCkgew0KPiA+IC0JCXdyaXRlX2RvbWFp biA9IHJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsNCj4gPiAtCX0gZWxzZSB7 DQo+ID4gLQkJd3JpdGVfZG9tYWluID0gMDsNCj4gPiAtCQlyZWFkX2RvbWFpbiA9IEk5MTVfR0VN X0RPTUFJTl9TQU1QTEVSOw0KPiA+IC0JfQ0KPiA+IC0NCj4gPiAtCXNzID0gYmF0Y2hfYWxsb2Mo YmF0Y2gsIHNpemVvZigqc3MpLCA2NCk7DQo+ID4gLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0 Y2gsIHNzKTsNCj4gPiAtDQo+ID4gLQlzcy0+c3MwLnN1cmZhY2VfdHlwZSA9IEdFTjhfU1VSRkFD RV8yRDsNCj4gPiAtCXNzLT5zczAuc3VyZmFjZV9mb3JtYXQgPSBmb3JtYXQ7DQo+ID4gLQlzcy0+ c3MwLnJlbmRlcl9jYWNoZV9yZWFkX3dyaXRlID0gMTsNCj4gPiAtCXNzLT5zczAudmVydGljYWxf YWxpZ25tZW50ID0gMTsgLyogYWxpZ24gNCAqLw0KPiA+IC0Jc3MtPnNzMC5ob3Jpem9udGFsX2Fs aWdubWVudCA9IDE7IC8qIGFsaWduIDQgKi8NCj4gPiAtDQo+ID4gLQlpZiAoYnVmLT50aWxpbmcg PT0gSTkxNV9USUxJTkdfWCkNCj4gPiAtCQlzcy0+c3MwLnRpbGVkX21vZGUgPSAyOw0KPiA+IC0J ZWxzZSBpZiAoYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkNCj4gPiAtCQlzcy0+c3MwLnRp bGVkX21vZGUgPSAzOw0KPiA+IC0NCj4gPiAtCXNzLT5zczguYmFzZV9hZGRyID0gYnVmLT5iby0+ b2Zmc2V0Ow0KPiA+IC0NCj4gPiAtCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNo LT5ibywNCj4gPiAtCQkJCWJhdGNoX29mZnNldChiYXRjaCwgc3MpICsgOCAqIDQsDQo+ID4gLQkJ CQlidWYtPmJvLCAwLA0KPiA+IC0JCQkJcmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbik7DQo+ID4g LQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsNCj4gPiAtDQo+ID4gLQlzcy0+c3MyLmhlaWdodCA9IGln dF9idWZfaGVpZ2h0KGJ1ZikgLSAxOw0KPiA+IC0Jc3MtPnNzMi53aWR0aMKgwqA9IGlndF9idWZf d2lkdGgoYnVmKSAtIDE7DQo+ID4gLQlzcy0+c3MzLnBpdGNowqDCoD0gYnVmLT5zdHJpZGUgLSAx Ow0KPiA+IC0NCj4gPiAtCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfciA9IDQ7DQo+ID4g LQlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2cgPSA1Ow0KPiA+IC0Jc3MtPnNzNy5zaGFk ZXJfY2hhbmVsX3NlbGVjdF9iID0gNjsNCj4gPiAtCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxl Y3RfYSA9IDc7DQo+ID4gLQ0KPiA+IC0JcmV0dXJuIG9mZnNldDsNCj4gPiAtfQ0KPiA+IC0NCj4g PiAtc3RhdGljIHVpbnQzMl90DQo+ID4gLWdlbjhfZmlsbF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gLQkJCXN0cnVjdCBpZ3RfYnVmICpkc3QpDQo+ ID4gLXsNCj4gPiAtCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxlLCBvZmZzZXQ7DQo+ID4gLQ0KPiA+ IC0JYmluZGluZ190YWJsZSA9IGJhdGNoX2FsbG9jKGJhdGNoLCAzMiwgNjQpOw0KPiA+IC0Jb2Zm c2V0ID0gYmF0Y2hfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsNCj4gPiAtDQo+ID4gLQli aW5kaW5nX3RhYmxlWzBdID0gZ2VuOF9maWxsX3N1cmZhY2Vfc3RhdGUoYmF0Y2gsIGRzdCwNCj4g PiBHRU44X1NVUkZBQ0VGT1JNQVRfUjhfVU5PUk0sIDEpOw0KPiA+IC0NCj4gPiAtCXJldHVybiBv ZmZzZXQ7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1aW50MzJfdA0KPiA+IC1nZW44X2Zp bGxfbWVkaWFfa2VybmVsKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gLQkJ Y29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sDQo+ID4gLQkJc2l6ZV90IHNpemUpDQo+ID4gLXsN Cj4gPiAtCXVpbnQzMl90IG9mZnNldDsNCj4gPiAtDQo+ID4gLQlvZmZzZXQgPSBiYXRjaF9jb3B5 KGJhdGNoLCBrZXJuZWwsIHNpemUsIDY0KTsNCj4gPiAtDQo+ID4gLQlyZXR1cm4gb2Zmc2V0Ow0K PiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdWludDMyX3QNCj4gPiAtZ2VuOF9maWxsX2ludGVy ZmFjZV9kZXNjcmlwdG9yKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHN0cnVjdA0K PiA+IGlndF9idWYgKmRzdCkNCj4gPiAtew0KPiA+IC0Jc3RydWN0IGdlbjhfaW50ZXJmYWNlX2Rl c2NyaXB0b3JfZGF0YSAqaWRkOw0KPiA+IC0JdWludDMyX3Qgb2Zmc2V0Ow0KPiA+IC0JdWludDMy X3QgYmluZGluZ190YWJsZV9vZmZzZXQsIGtlcm5lbF9vZmZzZXQ7DQo+ID4gLQ0KPiA+IC0JYmlu ZGluZ190YWJsZV9vZmZzZXQgPSBnZW44X2ZpbGxfYmluZGluZ190YWJsZShiYXRjaCwgZHN0KTsN Cj4gPiAtCWtlcm5lbF9vZmZzZXQgPSBnZW44X2ZpbGxfbWVkaWFfa2VybmVsKGJhdGNoLCBtZWRp YV9rZXJuZWwsDQo+ID4gc2l6ZW9mKG1lZGlhX2tlcm5lbCkpOw0KPiA+IC0NCj4gPiAtCWlkZCA9 IGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplb2YoKmlkZCksIDY0KTsNCj4gPiAtCW9mZnNldCA9IGJh dGNoX29mZnNldChiYXRjaCwgaWRkKTsNCj4gPiAtDQo+ID4gLQlpZGQtPmRlc2MwLmtlcm5lbF9z dGFydF9wb2ludGVyID0gKGtlcm5lbF9vZmZzZXQgPj4gNik7DQo+ID4gLQ0KPiA+IC0JaWRkLT5k ZXNjMi5zaW5nbGVfcHJvZ3JhbV9mbG93ID0gMTsNCj4gPiAtCWlkZC0+ZGVzYzIuZmxvYXRpbmdf cG9pbnRfbW9kZSA9IEdFTjhfRkxPQVRJTkdfUE9JTlRfSUVFRV83NTQ7DQo+ID4gLQ0KPiA+IC0J aWRkLT5kZXNjMy5zYW1wbGVyX2NvdW50ID0gMDvCoMKgwqDCoMKgwqAvKiAwIHNhbXBsZXJzIHVz ZWQgKi8NCj4gPiAtCWlkZC0+ZGVzYzMuc2FtcGxlcl9zdGF0ZV9wb2ludGVyID0gMDsNCj4gPiAt DQo+ID4gLQlpZGQtPmRlc2M0LmJpbmRpbmdfdGFibGVfZW50cnlfY291bnQgPSAwOw0KPiA+IC0J aWRkLT5kZXNjNC5iaW5kaW5nX3RhYmxlX3BvaW50ZXIgPSAoYmluZGluZ190YWJsZV9vZmZzZXQg Pj4gNSk7DQo+ID4gLQ0KPiA+IC0JaWRkLT5kZXNjNS5jb25zdGFudF91cmJfZW50cnlfcmVhZF9v ZmZzZXQgPSAwOw0KPiA+IC0JaWRkLT5kZXNjNS5jb25zdGFudF91cmJfZW50cnlfcmVhZF9sZW5n dGggPSAxOyAvKiBncmYgMSAqLw0KPiA+IC0NCj4gPiAtCXJldHVybiBvZmZzZXQ7DQo+ID4gLX0N Cj4gPiAtDQo+ID4gLXN0YXRpYyB2b2lkDQo+ID4gLWdlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJl c3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkNCj4gPiAtew0KPiA+IC0JT1VUX0JB VENIKEdFTjhfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDE2IC0gMikpOw0KPiA+IC0NCj4gPiAtCS8q IGdlbmVyYWwgKi8NCj4gPiAtCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7DQo+ ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLQ0KPiA+IC0JLyogc3RhdGVsZXNzIGRhdGEgcG9ydCAq Lw0KPiA+IC0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiAtDQo+ID4g LQkvKiBzdXJmYWNlICovDQo+ID4gLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01B SU5fU0FNUExFUiwgMCwNCj4gPiBCQVNFX0FERFJFU1NfTU9ESUZZKTsNCj4gPiAtDQo+ID4gLQkv KiBkeW5hbWljICovDQo+ID4gLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5f UkVOREVSIHwNCj4gPiBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sDQo+ID4gLQkJMCwgQkFT RV9BRERSRVNTX01PRElGWSk7DQo+ID4gLQ0KPiA+IC0JLyogaW5kaXJlY3QgKi8NCj4gPiAtCU9V VF9CQVRDSCgwKTsNCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtDQo+ID4gLQkvKiBpbnN0cnVj dGlvbiAqLw0KPiA+IC0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RS VUNUSU9OLCAwLA0KPiA+IEJBU0VfQUREUkVTU19NT0RJRlkpOw0KPiA+IC0NCj4gPiAtCS8qIGdl bmVyYWwgc3RhdGUgYnVmZmVyIHNpemUgKi8NCj4gPiAtCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwg MSk7DQo+ID4gLQkvKiBkeW5hbWljIHN0YXRlIGJ1ZmZlciBzaXplICovDQo+ID4gLQlPVVRfQkFU Q0goMSA8PCAxMiB8IDEpOw0KPiA+IC0JLyogaW5kaXJlY3Qgb2JqZWN0IGJ1ZmZlciBzaXplICov DQo+ID4gLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOw0KPiA+IC0JLyogaW50cnVjdGlvbiBi dWZmZXIgc2l6ZSwgbXVzdCBzZXQgbW9kaWZ5IGVuYWJsZSBiaXQsIG90aGVyd2lzZSBpdA0KPiA+ IG1heSByZXN1bHQgaW4gR1BVIGhhbmcgKi8NCj4gPiAtCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7 DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB2b2lkDQo+ID4gLWdlbjhfZW1pdF92ZmVfc3Rh dGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkNCj4gPiAtew0KPiA+IC0JT1VUX0JB VENIKEdFTjhfTUVESUFfVkZFX1NUQVRFIHwgKDkgLSAyKSk7DQo+ID4gLQ0KPiA+IC0JLyogc2Ny YXRjaCBidWZmZXIgKi8NCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtCU9VVF9CQVRDSCgwKTsN Cj4gPiAtDQo+ID4gLQkvKiBudW1iZXIgb2YgdGhyZWFkcyAmIHVyYiBlbnRyaWVzICovDQo+ID4g LQlPVVRfQkFUQ0goMSA8PCAxNiB8DQo+ID4gLQkJMiA8PCA4KTsNCj4gPiAtDQo+ID4gLQlPVVRf QkFUQ0goMCk7DQo+ID4gLQ0KPiA+IC0JLyogdXJiIGVudHJ5IHNpemUgJiBjdXJiZSBzaXplICov DQo+ID4gLQlPVVRfQkFUQ0goMiA8PCAxNiB8DQo+ID4gLQkJMik7DQo+ID4gLQ0KPiA+IC0JLyog c2NvcmVib2FyZCAqLw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC0JT1VUX0JBVENIKDApOw0K PiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdm9pZA0KPiA+ IC1nZW44X2VtaXRfY3VyYmVfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1 aW50MzJfdA0KPiA+IGN1cmJlX2J1ZmZlcikNCj4gPiAtew0KPiA+IC0JT1VUX0JBVENIKEdFTjhf TUVESUFfQ1VSQkVfTE9BRCB8ICg0IC0gMikpOw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC0J LyogY3VyYmUgdG90YWwgZGF0YSBsZW5ndGggKi8NCj4gPiAtCU9VVF9CQVRDSCg2NCk7DQo+ID4g LQkvKiBjdXJiZSBkYXRhIHN0YXJ0IGFkZHJlc3MsIGlzIHJlbGF0aXZlIHRvIHRoZSBkeW5hbWlj cyBiYXNlDQo+ID4gYWRkcmVzcyAqLw0KPiA+IC0JT1VUX0JBVENIKGN1cmJlX2J1ZmZlcik7DQo+ ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB2b2lkDQo+ID4gLWdlbjhfZW1pdF9pbnRlcmZhY2Vf ZGVzY3JpcHRvcl9sb2FkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gdWlu dDMyX3QgaW50ZXJmYWNlX2Rlc2NyaXB0b3IpDQo+ID4gLXsNCj4gPiAtCU9VVF9CQVRDSChHRU44 X01FRElBX0lOVEVSRkFDRV9ERVNDUklQVE9SX0xPQUQgfCAoNCAtIDIpKTsNCj4gPiAtCU9VVF9C QVRDSCgwKTsNCj4gPiAtCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGRhdGEgbGVuZ3RoICovDQo+ ID4gLQlPVVRfQkFUQ0goc2l6ZW9mKHN0cnVjdCBnZW44X2ludGVyZmFjZV9kZXNjcmlwdG9yX2Rh dGEpKTsNCj4gPiAtCS8qIGludGVyZmFjZSBkZXNjcmlwdG9yIGFkZHJlc3MsIGlzIHJlbGF0aXZl IHRvIHRoZSBkeW5hbWljcyBiYXNlDQo+ID4gYWRkcmVzcyAqLw0KPiA+IC0JT1VUX0JBVENIKGlu dGVyZmFjZV9kZXNjcmlwdG9yKTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHZvaWQNCj4g PiAtZ2VuOGxwX2VtaXRfbWVkaWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLA0KPiA+IC0JCQl1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LA0KPiA+IC0JCQl1bnNpZ25lZCB3 aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQ0KPiA+IC17DQo+ID4gLQlpbnQgaSwgajsNCj4gPiAtDQo+ ID4gLQlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLyAxNjsgaSsrKSB7DQo+ID4gLQkJZm9yIChqID0g MDsgaiA8IGhlaWdodCAvIDE2OyBqKyspIHsNCj4gPiAtCQkJT1VUX0JBVENIKEdFTjhfTUVESUFf T0JKRUNUIHwgKDggLSAyKSk7DQo+ID4gLQ0KPiA+IC0JCQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRv ciBvZmZzZXQgKi8NCj4gPiAtCQkJT1VUX0JBVENIKDApOw0KPiA+IC0NCj4gPiAtCQkJLyogd2l0 aG91dCBpbmRpcmVjdCBkYXRhICovDQo+ID4gLQkJCU9VVF9CQVRDSCgwKTsNCj4gPiAtCQkJT1VU X0JBVENIKDApOw0KPiA+IC0NCj4gPiAtCQkJLyogc2NvcmVib2FyZCAqLw0KPiA+IC0JCQlPVVRf QkFUQ0goMCk7DQo+ID4gLQkJCU9VVF9CQVRDSCgwKTsNCj4gPiAtDQo+ID4gLQkJCS8qIGlubGlu ZSBkYXRhICh4b2Zmc2V0LCB5b2Zmc2V0KSAqLw0KPiA+IC0JCQlPVVRfQkFUQ0goeCArIGkgKiAx Nik7DQo+ID4gLQkJCU9VVF9CQVRDSCh5ICsgaiAqIDE2KTsNCj4gPiAtCQl9DQo+ID4gLQl9DQo+ ID4gLX0NCj4gPiAtDQo+ID4gwqAgLyoNCj4gPiDCoMKgwqAqIFRoaXMgc2V0cyB1cCB0aGUgbWVk aWEgcGlwZWxpbmUsDQo+ID4gwqDCoMKgKg0KPiA+IEBAIC0zNDAsOCArNjAsOSBAQCBnZW44bHBf bWVkaWFfZmlsbGZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwNCj4gPiDCoMKg CS8qIHNldHVwIHN0YXRlcyAqLw0KPiA+IMKgwqAJYmF0Y2gtPnB0ciA9ICZiYXRjaC0+YnVmZmVy W0JBVENIX1NUQVRFX1NQTElUXTsNCj4gPiDCoMKgDQo+ID4gLQljdXJiZV9idWZmZXIgPSBnZW44 X2ZpbGxfY3VyYmVfYnVmZmVyX2RhdGEoYmF0Y2gsIGNvbG9yKTsNCj4gPiAtCWludGVyZmFjZV9k ZXNjcmlwdG9yID0gZ2VuOF9maWxsX2ludGVyZmFjZV9kZXNjcmlwdG9yKGJhdGNoLCBkc3QpOw0K PiA+ICsJY3VyYmVfYnVmZmVyID0gZ2VuN19maWxsX2N1cmJlX2J1ZmZlcl9kYXRhKGJhdGNoLCBj b2xvcik7DQo+ID4gKwlpbnRlcmZhY2VfZGVzY3JpcHRvciA9IGdlbjhfZmlsbF9pbnRlcmZhY2Vf ZGVzY3JpcHRvcihiYXRjaCwgZHN0LA0KPiA+ICsJCQkJCW1lZGlhX2tlcm5lbCwNCj4gPiBzaXpl b2YobWVkaWFfa2VybmVsKSk7DQo+ID4gwqDCoAlpZ3RfYXNzZXJ0KGJhdGNoLT5wdHIgPCAmYmF0 Y2gtPmJ1ZmZlcls0MDk1XSk7DQo+ID4gwqDCoA0KPiA+IMKgwqAJLyogbWVkaWEgcGlwZWxpbmUg Ki8NCj4gPiBAQCAtMzYyLDYgKzgzLDYgQEAgZ2VuOGxwX21lZGlhX2ZpbGxmdW5jKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gwqDCoAliYXRjaF9lbmQgPSBiYXRjaF9hbGln bihiYXRjaCwgOCk7DQo+ID4gwqDCoAlpZ3RfYXNzZXJ0KGJhdGNoX2VuZCA8IEJBVENIX1NUQVRF X1NQTElUKTsNCj4gPiDCoMKgDQo+ID4gLQlnZW44X3JlbmRlcl9mbHVzaChiYXRjaCwgYmF0Y2hf ZW5kKTsNCj4gPiArCWdlbjdfcmVuZGVyX2ZsdXNoKGJhdGNoLCBiYXRjaF9lbmQpOw0KPiA+IMKg wqAJaW50ZWxfYmF0Y2hidWZmZXJfcmVzZXQoYmF0Y2gpOw0KPiA+IMKgIH0NCj4gPiBkaWZmIC0t Z2l0IGEvbGliL21lZGlhX2ZpbGxfZ2VuOS5jIGIvbGliL21lZGlhX2ZpbGxfZ2VuOS5jDQo+ID4g aW5kZXggM2ZkMjE4MTkuLmU1ZDk0NDg3IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9tZWRpYV9maWxs X2dlbjkuYw0KPiA+ICsrKyBiL2xpYi9tZWRpYV9maWxsX2dlbjkuYw0KPiA+IEBAIC00LDExICs0 LDkgQEANCj4gPiDCoCAjaW5jbHVkZSAibWVkaWFfZmlsbC5oIg0KPiA+IMKgICNpbmNsdWRlICJn ZW44X21lZGlhLmgiDQo+ID4gwqAgI2luY2x1ZGUgImludGVsX3JlZy5oIg0KPiA+IC0NCj4gPiAr I2luY2x1ZGUgImdwdV9maWxsLmgiDQo+ID4gwqAgI2luY2x1ZGUgPGFzc2VydC5oPg0KPiA+IMKg wqANCj4gPiAtI2RlZmluZSBBTElHTih4LCB5KSAoKCh4KSArICh5KS0xKSAmIH4oKHkpLTEpKQ0K PiA+IC0NCj4gPiDCoCBzdGF0aWMgY29uc3QgdWludDMyX3QgbWVkaWFfa2VybmVsW11bNF0gPSB7 DQo+ID4gwqDCoAl7IDB4MDA0MDAwMDEsIDB4MjAyMDIyODgsIDB4MDAwMDAwMjAsIDB4MDAwMDAw MDAgfSwNCj4gPiDCoMKgCXsgMHgwMDYwMDAwMSwgMHgyMDgwMDIwOCwgMHgwMDhkMDAwMCwgMHgw MDAwMDAwMCB9LA0KPiA+IEBAIC0yMywyOTkgKzIxLDYgQEAgc3RhdGljIGNvbnN0IHVpbnQzMl90 IG1lZGlhX2tlcm5lbFtdWzRdID0gew0KPiA+IMKgwqAJeyAweDA3ODAwMDMxLCAweDIwMDAwYTQw LCAweDBlMDAwZTAwLCAweDgyMDAwMDEwIH0sDQo+ID4gwqAgfTsNCj4gPiDCoMKgDQo+ID4gLXN0 YXRpYyB1aW50MzJfdA0KPiA+IC1iYXRjaF91c2VkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gpDQo+ID4gLXsNCj4gPiAtCXJldHVybiBiYXRjaC0+cHRyIC0gYmF0Y2gtPmJ1ZmZlcjsN Cj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHVpbnQzMl90DQo+ID4gLWJhdGNoX2FsaWduKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGFsaWduKQ0KPiA+IC17DQo+ ID4gLQl1aW50MzJfdCBvZmZzZXQgPSBiYXRjaF91c2VkKGJhdGNoKTsNCj4gPiAtCW9mZnNldCA9 IEFMSUdOKG9mZnNldCwgYWxpZ24pOw0KPiA+IC0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIg KyBvZmZzZXQ7DQo+ID4gLQlyZXR1cm4gb2Zmc2V0Ow0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0 aWMgdm9pZCAqDQo+ID4gLWJhdGNoX2FsbG9jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsIHVpbnQzMl90IHNpemUsIHVpbnQzMl90IGFsaWduKQ0KPiA+IC17DQo+ID4gLQl1aW50MzJf dCBvZmZzZXQgPSBiYXRjaF9hbGlnbihiYXRjaCwgYWxpZ24pOw0KPiA+IC0JYmF0Y2gtPnB0ciAr PSBzaXplOw0KPiA+IC0JcmV0dXJuIG1lbXNldChiYXRjaC0+YnVmZmVyICsgb2Zmc2V0LCAwLCBz aXplKTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHVpbnQzMl90DQo+ID4gLWJhdGNoX29m ZnNldChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB2b2lkICpwdHIpDQo+ID4gLXsN Cj4gPiAtCXJldHVybiAodWludDhfdCAqKXB0ciAtIGJhdGNoLT5idWZmZXI7DQo+ID4gLX0NCj4g PiAtDQo+ID4gLXN0YXRpYyB1aW50MzJfdA0KPiA+IC1iYXRjaF9jb3B5KHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHZvaWQgKnB0ciwgdWludDMyX3Qgc2l6ZSwNCj4gPiB1 aW50MzJfdCBhbGlnbikNCj4gPiAtew0KPiA+IC0JcmV0dXJuIGJhdGNoX29mZnNldChiYXRjaCwg bWVtY3B5KGJhdGNoX2FsbG9jKGJhdGNoLCBzaXplLCBhbGlnbiksDQo+ID4gcHRyLCBzaXplKSk7 DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB2b2lkDQo+ID4gLWdlbjhfcmVuZGVyX2ZsdXNo KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGJhdGNoX2VuZCkNCj4g PiAtew0KPiA+IC0JaW50IHJldDsNCj4gPiAtDQo+ID4gLQlyZXQgPSBkcm1faW50ZWxfYm9fc3Vi ZGF0YShiYXRjaC0+Ym8sIDAsIDQwOTYsIGJhdGNoLT5idWZmZXIpOw0KPiA+IC0JaWYgKHJldCA9 PSAwKQ0KPiA+IC0JCXJldCA9IGRybV9pbnRlbF9ib19tcmJfZXhlYyhiYXRjaC0+Ym8sIGJhdGNo X2VuZCwNCj4gPiAtCQkJCQlOVUxMLCAwLCAwLCAwKTsNCj4gPiAtCWFzc2VydChyZXQgPT0gMCk7 DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1aW50MzJfdA0KPiA+IC1nZW44X2ZpbGxfY3Vy YmVfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwNCj4gPiAtCQkJ dWludDhfdCBjb2xvcikNCj4gPiAtew0KPiA+IC0JdWludDhfdCAqY3VyYmVfYnVmZmVyOw0KPiA+ IC0JdWludDMyX3Qgb2Zmc2V0Ow0KPiA+IC0NCj4gPiAtCWN1cmJlX2J1ZmZlciA9IGJhdGNoX2Fs bG9jKGJhdGNoLCBzaXplb2YodWludDMyX3QpICogOCwgNjQpOw0KPiA+IC0Jb2Zmc2V0ID0gYmF0 Y2hfb2Zmc2V0KGJhdGNoLCBjdXJiZV9idWZmZXIpOw0KPiA+IC0JKmN1cmJlX2J1ZmZlciA9IGNv bG9yOw0KPiA+IC0NCj4gPiAtCXJldHVybiBvZmZzZXQ7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0 YXRpYyB1aW50MzJfdA0KPiA+IC1nZW44X2ZpbGxfc3VyZmFjZV9zdGF0ZShzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLA0KPiA+IC0JCQlzdHJ1Y3QgaWd0X2J1ZiAqYnVmLA0KPiA+IC0J CQl1aW50MzJfdCBmb3JtYXQsDQo+ID4gLQkJCWludCBpc19kc3QpDQo+ID4gLXsNCj4gPiAtCXN0 cnVjdCBnZW44X3N1cmZhY2Vfc3RhdGUgKnNzOw0KPiA+IC0JdWludDMyX3Qgd3JpdGVfZG9tYWlu LCByZWFkX2RvbWFpbiwgb2Zmc2V0Ow0KPiA+IC0JaW50IHJldDsNCj4gPiAtDQo+ID4gLQlpZiAo aXNfZHN0KSB7DQo+ID4gLQkJd3JpdGVfZG9tYWluID0gcmVhZF9kb21haW4gPSBJOTE1X0dFTV9E T01BSU5fUkVOREVSOw0KPiA+IC0JfSBlbHNlIHsNCj4gPiAtCQl3cml0ZV9kb21haW4gPSAwOw0K PiA+IC0JCXJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7DQo+ID4gLQl9DQo+ ID4gLQ0KPiA+IC0Jc3MgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzcyksIDY0KTsNCj4g PiAtCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgc3MpOw0KPiA+IC0NCj4gPiAtCXNzLT5z czAuc3VyZmFjZV90eXBlID0gR0VOOF9TVVJGQUNFXzJEOw0KPiA+IC0Jc3MtPnNzMC5zdXJmYWNl X2Zvcm1hdCA9IGZvcm1hdDsNCj4gPiAtCXNzLT5zczAucmVuZGVyX2NhY2hlX3JlYWRfd3JpdGUg PSAxOw0KPiA+IC0Jc3MtPnNzMC52ZXJ0aWNhbF9hbGlnbm1lbnQgPSAxOyAvKiBhbGlnbiA0ICov DQo+ID4gLQlzcy0+c3MwLmhvcml6b250YWxfYWxpZ25tZW50ID0gMTsgLyogYWxpZ24gNCAqLw0K PiA+IC0NCj4gPiAtCWlmIChidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19YKQ0KPiA+IC0JCXNz LT5zczAudGlsZWRfbW9kZSA9IDI7DQo+ID4gLQllbHNlIGlmIChidWYtPnRpbGluZyA9PSBJOTE1 X1RJTElOR19ZKQ0KPiA+IC0JCXNzLT5zczAudGlsZWRfbW9kZSA9IDM7DQo+ID4gLQ0KPiA+IC0J c3MtPnNzOC5iYXNlX2FkZHIgPSBidWYtPmJvLT5vZmZzZXQ7DQo+ID4gLQ0KPiA+IC0JcmV0ID0g ZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLA0KPiA+IC0JCQkJYmF0Y2hfb2Zmc2V0 KGJhdGNoLCBzcykgKyA4ICogNCwNCj4gPiAtCQkJCWJ1Zi0+Ym8sIDAsDQo+ID4gLQkJCQlyZWFk X2RvbWFpbiwgd3JpdGVfZG9tYWluKTsNCj4gPiAtCWFzc2VydChyZXQgPT0gMCk7DQo+ID4gLQ0K PiA+IC0Jc3MtPnNzMi5oZWlnaHQgPSBpZ3RfYnVmX2hlaWdodChidWYpIC0gMTsNCj4gPiAtCXNz LT5zczIud2lkdGjCoMKgPSBpZ3RfYnVmX3dpZHRoKGJ1ZikgLSAxOw0KPiA+IC0Jc3MtPnNzMy5w aXRjaMKgwqA9IGJ1Zi0+c3RyaWRlIC0gMTsNCj4gPiAtDQo+ID4gLQlzcy0+c3M3LnNoYWRlcl9j aGFuZWxfc2VsZWN0X3IgPSA0Ow0KPiA+IC0Jc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9n ID0gNTsNCj4gPiAtCXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYiA9IDY7DQo+ID4gLQlz cy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2EgPSA3Ow0KPiA+IC0NCj4gPiAtCXJldHVybiBv ZmZzZXQ7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1aW50MzJfdA0KPiA+IC1nZW44X2Zp bGxfYmluZGluZ190YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLA0KPiA+IC0J CQlzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQ0KPiA+IC17DQo+ID4gLQl1aW50MzJfdCAqYmluZGluZ190 YWJsZSwgb2Zmc2V0Ow0KPiA+IC0NCj4gPiAtCWJpbmRpbmdfdGFibGUgPSBiYXRjaF9hbGxvYyhi YXRjaCwgMzIsIDY0KTsNCj4gPiAtCW9mZnNldCA9IGJhdGNoX29mZnNldChiYXRjaCwgYmluZGlu Z190YWJsZSk7DQo+ID4gLQ0KPiA+IC0JYmluZGluZ190YWJsZVswXSA9IGdlbjhfZmlsbF9zdXJm YWNlX3N0YXRlKGJhdGNoLCBkc3QsDQo+ID4gR0VOOF9TVVJGQUNFRk9STUFUX1I4X1VOT1JNLCAx KTsNCj4gPiAtDQo+ID4gLQlyZXR1cm4gb2Zmc2V0Ow0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0 aWMgdWludDMyX3QNCj4gPiAtZ2VuOF9maWxsX21lZGlhX2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLA0KPiA+IC0JCWNvbnN0IHVpbnQzMl90IGtlcm5lbFtdWzRdLA0KPiA+ IC0JCXNpemVfdCBzaXplKQ0KPiA+IC17DQo+ID4gLQl1aW50MzJfdCBvZmZzZXQ7DQo+ID4gLQ0K PiA+IC0Jb2Zmc2V0ID0gYmF0Y2hfY29weShiYXRjaCwga2VybmVsLCBzaXplLCA2NCk7DQo+ID4g LQ0KPiA+IC0JcmV0dXJuIG9mZnNldDsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHVpbnQz Ml90DQo+ID4gLWdlbjhfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLCBzdHJ1Y3QNCj4gPiBpZ3RfYnVmICpkc3QpDQo+ID4gLXsNCj4gPiAt CXN0cnVjdCBnZW44X2ludGVyZmFjZV9kZXNjcmlwdG9yX2RhdGEgKmlkZDsNCj4gPiAtCXVpbnQz Ml90IG9mZnNldDsNCj4gPiAtCXVpbnQzMl90IGJpbmRpbmdfdGFibGVfb2Zmc2V0LCBrZXJuZWxf b2Zmc2V0Ow0KPiA+IC0NCj4gPiAtCWJpbmRpbmdfdGFibGVfb2Zmc2V0ID0gZ2VuOF9maWxsX2Jp bmRpbmdfdGFibGUoYmF0Y2gsIGRzdCk7DQo+ID4gLQlrZXJuZWxfb2Zmc2V0ID0gZ2VuOF9maWxs X21lZGlhX2tlcm5lbChiYXRjaCwgbWVkaWFfa2VybmVsLA0KPiA+IHNpemVvZihtZWRpYV9rZXJu ZWwpKTsNCj4gPiAtDQo+ID4gLQlpZGQgPSBiYXRjaF9hbGxvYyhiYXRjaCwgc2l6ZW9mKCppZGQp LCA2NCk7DQo+ID4gLQlvZmZzZXQgPSBiYXRjaF9vZmZzZXQoYmF0Y2gsIGlkZCk7DQo+ID4gLQ0K PiA+IC0JaWRkLT5kZXNjMC5rZXJuZWxfc3RhcnRfcG9pbnRlciA9IChrZXJuZWxfb2Zmc2V0ID4+ IDYpOw0KPiA+IC0NCj4gPiAtCWlkZC0+ZGVzYzIuc2luZ2xlX3Byb2dyYW1fZmxvdyA9IDE7DQo+ ID4gLQlpZGQtPmRlc2MyLmZsb2F0aW5nX3BvaW50X21vZGUgPSBHRU44X0ZMT0FUSU5HX1BPSU5U X0lFRUVfNzU0Ow0KPiA+IC0NCj4gPiAtCWlkZC0+ZGVzYzMuc2FtcGxlcl9jb3VudCA9IDA7wqDC oMKgwqDCoMKgLyogMCBzYW1wbGVycyB1c2VkICovDQo+ID4gLQlpZGQtPmRlc2MzLnNhbXBsZXJf c3RhdGVfcG9pbnRlciA9IDA7DQo+ID4gLQ0KPiA+IC0JaWRkLT5kZXNjNC5iaW5kaW5nX3RhYmxl X2VudHJ5X2NvdW50ID0gMDsNCj4gPiAtCWlkZC0+ZGVzYzQuYmluZGluZ190YWJsZV9wb2ludGVy ID0gKGJpbmRpbmdfdGFibGVfb2Zmc2V0ID4+IDUpOw0KPiA+IC0NCj4gPiAtCWlkZC0+ZGVzYzUu Y29uc3RhbnRfdXJiX2VudHJ5X3JlYWRfb2Zmc2V0ID0gMDsNCj4gPiAtCWlkZC0+ZGVzYzUuY29u c3RhbnRfdXJiX2VudHJ5X3JlYWRfbGVuZ3RoID0gMTsgLyogZ3JmIDEgKi8NCj4gPiAtDQo+ID4g LQlyZXR1cm4gb2Zmc2V0Ow0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdm9pZA0KPiA+IC1n ZW45X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gpDQo+ID4gLXsNCj4gPiAtCU9VVF9CQVRDSChHRU44X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgx OSAtIDIpKTsNCj4gPiAtDQo+ID4gLQkvKiBnZW5lcmFsICovDQo+ID4gLQlPVVRfQkFUQ0goMCB8 IEJBU0VfQUREUkVTU19NT0RJRlkpOw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC0NCj4gPiAt CS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8NCj4gPiAtCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERS RVNTX01PRElGWSk7DQo+ID4gLQ0KPiA+IC0JLyogc3VyZmFjZSAqLw0KPiA+IC0JT1VUX1JFTE9D KGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIsIDAsDQo+ID4gQkFTRV9BRERSRVNT X01PRElGWSk7DQo+ID4gLQ0KPiA+IC0JLyogZHluYW1pYyAqLw0KPiA+IC0JT1VUX1JFTE9DKGJh dGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiB8DQo+ID4gSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OLA0KPiA+IC0JCTAsIEJBU0VfQUREUkVTU19NT0RJRlkpOw0KPiA+IC0NCj4gPiAt CS8qIGluZGlyZWN0ICovDQo+ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLQlPVVRfQkFUQ0goMCk7 DQo+ID4gLQ0KPiA+IC0JLyogaW5zdHJ1Y3Rpb24gKi8NCj4gPiAtCU9VVF9SRUxPQyhiYXRjaC0+ Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwNCj4gPiBCQVNFX0FERFJFU1NfTU9E SUZZKTsNCj4gPiAtDQo+ID4gLQkvKiBnZW5lcmFsIHN0YXRlIGJ1ZmZlciBzaXplICovDQo+ID4g LQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOw0KPiA+IC0JLyogZHluYW1pYyBzdGF0ZSBidWZm ZXIgc2l6ZSAqLw0KPiA+IC0JT1VUX0JBVENIKDEgPDwgMTIgfCAxKTsNCj4gPiAtCS8qIGluZGly ZWN0IG9iamVjdCBidWZmZXIgc2l6ZSAqLw0KPiA+IC0JT1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAx KTsNCj4gPiAtCS8qIGludHJ1Y3Rpb24gYnVmZmVyIHNpemUsIG11c3Qgc2V0IG1vZGlmeSBlbmFi bGUgYml0LCBvdGhlcndpc2UgaXQNCj4gPiBtYXkgcmVzdWx0IGluIEdQVSBoYW5nICovDQo+ID4g LQlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOw0KPiA+IC0NCj4gPiAtCS8qIEJpbmRsZXNzIHN1cmZh Y2Ugc3RhdGUgYmFzZSBhZGRyZXNzICovDQo+ID4gLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVT U19NT0RJRlkpOw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC0JT1VUX0JBVENIKDB4ZmZmZmYw MDApOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdm9pZA0KPiA+IC1nZW44X2VtaXRfdmZl X3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpDQo+ID4gLXsNCj4gPiAtCU9V VF9CQVRDSChHRU44X01FRElBX1ZGRV9TVEFURSB8ICg5IC0gMikpOw0KPiA+IC0NCj4gPiAtCS8q IHNjcmF0Y2ggYnVmZmVyICovDQo+ID4gLQlPVVRfQkFUQ0goMCk7DQo+ID4gLQlPVVRfQkFUQ0go MCk7DQo+ID4gLQ0KPiA+IC0JLyogbnVtYmVyIG9mIHRocmVhZHMgJiB1cmIgZW50cmllcyAqLw0K PiA+IC0JT1VUX0JBVENIKDEgPDwgMTYgfA0KPiA+IC0JCTIgPDwgOCk7DQo+ID4gLQ0KPiA+IC0J T1VUX0JBVENIKDApOw0KPiA+IC0NCj4gPiAtCS8qIHVyYiBlbnRyeSBzaXplICYgY3VyYmUgc2l6 ZSAqLw0KPiA+IC0JT1VUX0JBVENIKDIgPDwgMTYgfA0KPiA+IC0JCTIpOw0KPiA+IC0NCj4gPiAt CS8qIHNjb3JlYm9hcmQgKi8NCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtCU9VVF9CQVRDSCgw KTsNCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAtc3RhdGljIHZvaWQN Cj4gPiAtZ2VuOF9lbWl0X2N1cmJlX2xvYWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwgdWludDMyX3QNCj4gPiBjdXJiZV9idWZmZXIpDQo+ID4gLXsNCj4gPiAtCU9VVF9CQVRDSChH RU44X01FRElBX0NVUkJFX0xPQUQgfCAoNCAtIDIpKTsNCj4gPiAtCU9VVF9CQVRDSCgwKTsNCj4g PiAtCS8qIGN1cmJlIHRvdGFsIGRhdGEgbGVuZ3RoICovDQo+ID4gLQlPVVRfQkFUQ0goNjQpOw0K PiA+IC0JLyogY3VyYmUgZGF0YSBzdGFydCBhZGRyZXNzLCBpcyByZWxhdGl2ZSB0byB0aGUgZHlu YW1pY3MgYmFzZQ0KPiA+IGFkZHJlc3MgKi8NCj4gPiAtCU9VVF9CQVRDSChjdXJiZV9idWZmZXIp Ow0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdm9pZA0KPiA+IC1nZW44X2VtaXRfaW50ZXJm YWNlX2Rlc2NyaXB0b3JfbG9hZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLA0KPiA+ IHVpbnQzMl90IGludGVyZmFjZV9kZXNjcmlwdG9yKQ0KPiA+IC17DQo+ID4gLQlPVVRfQkFUQ0go R0VOOF9NRURJQV9JTlRFUkZBQ0VfREVTQ1JJUFRPUl9MT0FEIHwgKDQgLSAyKSk7DQo+ID4gLQlP VVRfQkFUQ0goMCk7DQo+ID4gLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBkYXRhIGxlbmd0aCAq Lw0KPiA+IC0JT1VUX0JBVENIKHNpemVvZihzdHJ1Y3QgZ2VuOF9pbnRlcmZhY2VfZGVzY3JpcHRv cl9kYXRhKSk7DQo+ID4gLQkvKiBpbnRlcmZhY2UgZGVzY3JpcHRvciBhZGRyZXNzLCBpcyByZWxh dGl2ZSB0byB0aGUgZHluYW1pY3MgYmFzZQ0KPiA+IGFkZHJlc3MgKi8NCj4gPiAtCU9VVF9CQVRD SChpbnRlcmZhY2VfZGVzY3JpcHRvcik7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB2b2lk DQo+ID4gLWdlbjhfZW1pdF9tZWRpYV9zdGF0ZV9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKQ0KPiA+IC17DQo+ID4gLQlPVVRfQkFUQ0goR0VOOF9NRURJQV9TVEFURV9GTFVT SCB8ICgyIC0gMikpOw0KPiA+IC0JT1VUX0JBVENIKDApOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1z dGF0aWMgdm9pZA0KPiA+IC1nZW44X2VtaXRfbWVkaWFfb2JqZWN0cyhzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLA0KPiA+IC0JCQl1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LA0KPiA+IC0J CQl1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0KQ0KPiA+IC17DQo+ID4gLQlpbnQgaSwg ajsNCj4gPiAtDQo+ID4gLQlmb3IgKGkgPSAwOyBpIDwgd2lkdGggLyAxNjsgaSsrKSB7DQo+ID4g LQkJZm9yIChqID0gMDsgaiA8IGhlaWdodCAvIDE2OyBqKyspIHsNCj4gPiAtCQkJT1VUX0JBVENI KEdFTjhfTUVESUFfT0JKRUNUIHwgKDggLSAyKSk7DQo+ID4gLQ0KPiA+IC0JCQkvKiBpbnRlcmZh Y2UgZGVzY3JpcHRvciBvZmZzZXQgKi8NCj4gPiAtCQkJT1VUX0JBVENIKDApOw0KPiA+IC0NCj4g PiAtCQkJLyogd2l0aG91dCBpbmRpcmVjdCBkYXRhICovDQo+ID4gLQkJCU9VVF9CQVRDSCgwKTsN Cj4gPiAtCQkJT1VUX0JBVENIKDApOw0KPiA+IC0NCj4gPiAtCQkJLyogc2NvcmVib2FyZCAqLw0K PiA+IC0JCQlPVVRfQkFUQ0goMCk7DQo+ID4gLQkJCU9VVF9CQVRDSCgwKTsNCj4gPiAtDQo+ID4g LQkJCS8qIGlubGluZSBkYXRhICh4b2Zmc2V0LCB5b2Zmc2V0KSAqLw0KPiA+IC0JCQlPVVRfQkFU Q0goeCArIGkgKiAxNik7DQo+ID4gLQkJCU9VVF9CQVRDSCh5ICsgaiAqIDE2KTsNCj4gPiAtCQkJ Z2VuOF9lbWl0X21lZGlhX3N0YXRlX2ZsdXNoKGJhdGNoKTsNCj4gPiAtCQl9DQo+ID4gLQl9DQo+ ID4gLX0NCj4gPiAtDQo+ID4gwqAgLyoNCj4gPiDCoMKgwqAqIFRoaXMgc2V0cyB1cCB0aGUgbWVk aWEgcGlwZWxpbmUsDQo+ID4gwqDCoMKgKg0KPiA+IEBAIC0zNTMsOCArNTgsOSBAQCBnZW45X21l ZGlhX2ZpbGxmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsDQo+ID4gwqDCoAkv KiBzZXR1cCBzdGF0ZXMgKi8NCj4gPiDCoMKgCWJhdGNoLT5wdHIgPSAmYmF0Y2gtPmJ1ZmZlcltC QVRDSF9TVEFURV9TUExJVF07DQo+ID4gwqDCoA0KPiA+IC0JY3VyYmVfYnVmZmVyID0gZ2VuOF9m aWxsX2N1cmJlX2J1ZmZlcl9kYXRhKGJhdGNoLCBjb2xvcik7DQo+ID4gLQlpbnRlcmZhY2VfZGVz Y3JpcHRvciA9IGdlbjhfZmlsbF9pbnRlcmZhY2VfZGVzY3JpcHRvcihiYXRjaCwgZHN0KTsNCj4g PiArCWN1cmJlX2J1ZmZlciA9IGdlbjdfZmlsbF9jdXJiZV9idWZmZXJfZGF0YShiYXRjaCwgY29s b3IpOw0KPiA+ICsJaW50ZXJmYWNlX2Rlc2NyaXB0b3IgPSBnZW44X2ZpbGxfaW50ZXJmYWNlX2Rl c2NyaXB0b3IoYmF0Y2gsIGRzdCwNCj4gPiArCQkJCQltZWRpYV9rZXJuZWwsDQo+ID4gc2l6ZW9m KG1lZGlhX2tlcm5lbCkpOw0KPiA+IMKgwqAJYXNzZXJ0KGJhdGNoLT5wdHIgPCAmYmF0Y2gtPmJ1 ZmZlcls0MDk1XSk7DQo+ID4gwqDCoA0KPiA+IMKgwqAJLyogbWVkaWEgcGlwZWxpbmUgKi8NCj4g PiBAQCAtMzg3LDYgKzkzLDYgQEAgZ2VuOV9tZWRpYV9maWxsZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLA0KPiA+IMKgwqAJYmF0Y2hfZW5kID0gYmF0Y2hfYWxpZ24oYmF0Y2gs IDgpOw0KPiA+IMKgwqAJYXNzZXJ0KGJhdGNoX2VuZCA8IEJBVENIX1NUQVRFX1NQTElUKTsNCj4g PiDCoMKgDQo+ID4gLQlnZW44X3JlbmRlcl9mbHVzaChiYXRjaCwgYmF0Y2hfZW5kKTsNCj4gPiAr CWdlbjdfcmVuZGVyX2ZsdXNoKGJhdGNoLCBiYXRjaF9lbmQpOw0KPiA+IMKgwqAJaW50ZWxfYmF0 Y2hidWZmZXJfcmVzZXQoYmF0Y2gpOw0KPiA+IMKgIH0NCj4gPiBkaWZmIC0tZ2l0IGEvbGliL21l c29uLmJ1aWxkIGIvbGliL21lc29uLmJ1aWxkDQo+ID4gaW5kZXggYjNiOGIxNGEuLjM4YzNmMTA3 IDEwMDY0NA0KPiA+IC0tLSBhL2xpYi9tZXNvbi5idWlsZA0KPiA+ICsrKyBiL2xpYi9tZXNvbi5i dWlsZA0KPiA+IEBAIC0yNCw2ICsyNCw3IEBAIGxpYl9zb3VyY2VzID0gWw0KPiA+IMKgwqAJJ2lu dGVsX29zLmMnLA0KPiA+IMKgwqAJJ2ludGVsX21taW8uYycsDQo+ID4gwqDCoAknaW9jdGxfd3Jh cHBlcnMuYycsDQo+ID4gKwknZ3B1X2ZpbGwuYycsDQo+ID4gwqDCoAknbWVkaWFfZmlsbF9nZW43 LmMnLA0KPiA+IMKgwqAJJ21lZGlhX2ZpbGxfZ2VuOC5jJywNCj4gPiDCoMKgCSdtZWRpYV9maWxs X2dlbjhscC5jJywNCj4gPiANCj4gDQo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fDQo+IGlndC1kZXYgbWFpbGluZyBsaXN0DQo+IGlndC1kZXZAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnDQo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaWd0LWRldgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwppZ3QtZGV2IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK