Return-Path: Delivered-To: apmail-httpd-dev-archive@www.apache.org Received: (qmail 39327 invoked from network); 9 Apr 2004 21:09:35 -0000 Received: from daedalus.apache.org (HELO mail.apache.org) (208.185.179.12) by minotaur-2.apache.org with SMTP; 9 Apr 2004 21:09:35 -0000 Received: (qmail 40020 invoked by uid 500); 9 Apr 2004 21:09:11 -0000 Delivered-To: apmail-httpd-dev-archive@httpd.apache.org Received: (qmail 39972 invoked by uid 500); 9 Apr 2004 21:09:10 -0000 Mailing-List: contact dev-help@httpd.apache.org; run by ezmlm Precedence: bulk Reply-To: dev@httpd.apache.org list-help: list-unsubscribe: list-post: Delivered-To: mailing list dev@httpd.apache.org Received: (qmail 39907 invoked from network); 9 Apr 2004 21:09:07 -0000 Received: from unknown (HELO hugin.webthing.com) (80.229.52.226) by daedalus.apache.org with SMTP; 9 Apr 2004 21:09:07 -0000 Received: by hugin.webthing.com (Postfix, from userid 500) id 799CD3CBB2; Fri, 9 Apr 2004 22:09:12 +0100 (BST) Received: from localhost (localhost [127.0.0.1]) by hugin.webthing.com (Postfix) with ESMTP id 6444D3C983; Fri, 9 Apr 2004 22:09:12 +0100 (BST) Date: Fri, 9 Apr 2004 22:09:12 +0100 (BST) From: Nick Kew To: dev@httpd.apache.org, apache-modules@covalent.net Subject: mod_deflate updates Message-ID: MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="-1463810294-1109216496-1081544952=:4702" X-Spam-Rating: daedalus.apache.org 1.6.2 0/1000/N X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. Send mail to mime@docserver.cac.washington.edu for more info. ---1463810294-1109216496-1081544952=:4702 Content-Type: TEXT/PLAIN; charset=US-ASCII Hi, I've made a couple of patches to mod_deflate. Basically I need to be able to deploy a content-transforming filter in a proxy, and I want that to work with compressed content coming from a backend. This is a subject that has been on the apache-modules wishlist for a while. The attached module is mod_deflate with two fixes. (1) (trivial) The DEFLATE output filter compresses if and only if gzip is in an Accept-Encoding Request header. I've modified it to accept Accept-Encoding in r->notes if it's not in r->headers_in. This means a module that unsets the Accept-Encoding Request Header for a proxy request can set it in Notes instead, and DEFLATE content-negotiation with the browser works even if we disable it in the backend. (2) (in need of scrutiny) I have added an INFLATE output filter, to put in front of a content-transforming proxy and uncompress gzipped content coming from a backend server. As I don't understand the libz stuff, this was very much feeling my way - based on the DEFLATE input filter. It works in my simple tests. If anyone finds the time to review this, please let me have your feedback. If people find it useful then good! Once it's had a bit more exposure, I'll have a look at the docs and style guide, and turn it into a patch. -- Nick Kew Nick's manifesto: http://www.htmlhelp.com/~nick/ ---1463810294-1109216496-1081544952=:4702 Content-Type: TEXT/PLAIN; charset=US-ASCII; name="mod_deflate.c" Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: mod_deflate.c Content-Disposition: attachment; filename="mod_deflate.c" LyogQ29weXJpZ2h0IDIwMDItMjAwNCBUaGUgQXBhY2hlIFNvZnR3YXJlIEZv dW5kYXRpb24NCiAqDQogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExp Y2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsNCiAqIHlvdSBt YXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0 aCB0aGUgTGljZW5zZS4NCiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0 aGUgTGljZW5zZSBhdA0KICoNCiAqICAgICBodHRwOi8vd3d3LmFwYWNoZS5v cmcvbGljZW5zZXMvTElDRU5TRS0yLjANCiAqDQogKiBVbmxlc3MgcmVxdWly ZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcs IHNvZnR3YXJlDQogKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBp cyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLA0KICogV0lUSE9V VCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhl ciBleHByZXNzIG9yIGltcGxpZWQuDQogKiBTZWUgdGhlIExpY2Vuc2UgZm9y IHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMg YW5kDQogKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4NCiAqLw0K DQovKg0KICogUG9ydGlvbnMgb2YgdGhpcyBzb2Z0d2FyZSBhcmUgYmFzZWQg dXBvbiBwdWJsaWMgZG9tYWluIHNvZnR3YXJlDQogKiAoemxpYiBmdW5jdGlv bnMgZ3pfb3BlbiBhbmQgZ3p3cml0ZSkNCiAqLw0KDQovKg0KICogbW9kX2Rl ZmxhdGUuYzogUGVyZm9ybSBkZWZsYXRlIHRyYW5zZmVyLWVuY29kaW5nIG9u IHRoZSBmbHkNCiAqDQogKiBXcml0dGVuIGJ5IElhbiBIb2xzbWFuDQogKg0K ICogTW9kaWZpZWQgYnkgTmljayBLZXcsIEFwcmlsIDIwMDQNCiAqDQogKiBG SVg6CWRlZmxhdGUgaHRtbCBjb250ZW50IGJhc2VkIG9uIGEgTk9URSBmcm9t IGh0bWwtcGFyc2UgZmlsdGVyLg0KICogQUREOglpbmZsYXRlX291dF9maWx0 ZXIgdG8gZGVjb21wcmVzcyBjb250ZW50IGZvciBvdXRwdXQgZmlsdGVycw0K ICoJaW4gYSBwcm94eSB3aXRoIGNvbXByZXNzZWQgYmFja2VuZC4gIEkgZG9u J3QgdW5kZXJzdGFuZCB0aGUNCiAqCXpsaWIgc3R1ZmYsIHNvIGl0J3MgbW9k aWZpZWQgImJsaW5kIiBmcm9tIHRoZSBpbnB1dCBmaWx0ZXIuDQogKi8NCg0K I2luY2x1ZGUgImh0dHBkLmgiDQojaW5jbHVkZSAiaHR0cF9jb25maWcuaCIN CiNpbmNsdWRlICJodHRwX2xvZy5oIg0KI2luY2x1ZGUgImFwcl9zdHJpbmdz LmgiDQojaW5jbHVkZSAiYXByX2dlbmVyYWwuaCINCiNpbmNsdWRlICJ1dGls X2ZpbHRlci5oIg0KI2luY2x1ZGUgImFwcl9idWNrZXRzLmgiDQojaW5jbHVk ZSAiaHR0cF9yZXF1ZXN0LmgiDQojZGVmaW5lIEFQUl9XQU5UX1NUUkZVTkMN CiNpbmNsdWRlICJhcHJfd2FudC5oIg0KDQojaW5jbHVkZSAiemxpYi5oIg0K DQojaWZkZWYgSEFWRV9aVVRJTF9IDQojaW5jbHVkZSAienV0aWwuaCINCiNl bHNlDQovKiBBcyBwYXJ0IG9mIHRoZSBlbmNvZGluZyBwcm9jZXNzLCB3ZSBt dXN0IHNlbmQgd2hhdCBvdXIgT1NfQ09ERSBpcw0KICogKG9yIHNvIGl0IHNl ZW1zIGJhc2VkIG9uIHdoYXQgSSBjYW4gdGVsbCBvZiBob3cgZ3ppcCBlbmNv ZGluZyB3b3JrcykuDQogKg0KICogenV0aWwuaCBpcyBub3QgYWx3YXlzIGlu Y2x1ZGVkIHdpdGggemxpYiBkaXN0cmlidXRpb25zIChpdCBpcyBhIHByaXZh dGUNCiAqIGhlYWRlciksIHNvIHRoaXMgaXMgc3RyYWlnaHQgZnJvbSB6bGli IDEuMS4zJ3MgenV0aWwuaC4NCiAqLw0KI2lmZGVmIE9TMg0KI2RlZmluZSBP U19DT0RFICAweDA2DQojZW5kaWYNCg0KI2lmZGVmIFdJTjMyIC8qIFdpbmRv dyA5NSAmIFdpbmRvd3MgTlQgKi8NCiNkZWZpbmUgT1NfQ09ERSAgMHgwYg0K I2VuZGlmDQoNCiNpZiBkZWZpbmVkKFZBWEMpIHx8IGRlZmluZWQoVk1TKQ0K I2RlZmluZSBPU19DT0RFICAweDAyDQojZW5kaWYNCg0KI2lmZGVmIEFNSUdB DQojZGVmaW5lIE9TX0NPREUgIDB4MDENCiNlbmRpZg0KDQojaWYgZGVmaW5l ZChBVEFSSSkgfHwgZGVmaW5lZChhdGFyaXN0KQ0KI2RlZmluZSBPU19DT0RF ICAweDA1DQojZW5kaWYNCg0KI2lmIGRlZmluZWQoTUFDT1MpIHx8IGRlZmlu ZWQoVEFSR0VUX09TX01BQykNCiNkZWZpbmUgT1NfQ09ERSAgMHgwNw0KI2Vu ZGlmDQoNCiNpZmRlZiBfXzUwU0VSSUVTIC8qIFByaW1lL1BSSU1PUyAqLw0K I2RlZmluZSBPU19DT0RFICAweDBGDQojZW5kaWYNCg0KI2lmZGVmIFRPUFMy MA0KI2RlZmluZSBPU19DT0RFICAweDBhDQojZW5kaWYNCg0KI2lmbmRlZiBP U19DT0RFDQojZGVmaW5lIE9TX0NPREUgIDB4MDMgIC8qIGFzc3VtZSBVbml4 ICovDQojZW5kaWYNCiNlbmRpZg0KDQpzdGF0aWMgY29uc3QgY2hhciBkZWZs YXRlRmlsdGVyTmFtZVtdID0gIkRFRkxBVEUiOw0KbW9kdWxlIEFQX01PRFVM RV9ERUNMQVJFX0RBVEEgZGVmbGF0ZV9tb2R1bGU7DQoNCnR5cGVkZWYgc3Ry dWN0IGRlZmxhdGVfZmlsdGVyX2NvbmZpZ190DQp7DQogICAgaW50IHdpbmRv d1NpemU7DQogICAgaW50IG1lbWxldmVsOw0KICAgIGludCBjb21wcmVzc2lv bmxldmVsOw0KICAgIGFwcl9zaXplX3QgYnVmZmVyU2l6ZTsNCiAgICBjaGFy ICpub3RlX3JhdGlvX25hbWU7DQogICAgY2hhciAqbm90ZV9pbnB1dF9uYW1l Ow0KICAgIGNoYXIgKm5vdGVfb3V0cHV0X25hbWU7DQp9IGRlZmxhdGVfZmls dGVyX2NvbmZpZzsNCg0KLyogd2luZG93c2l6ZSBpcyBuZWdhdGl2ZSB0byBz dXBwcmVzcyBabGliIGhlYWRlciAqLw0KI2RlZmluZSBERUZBVUxUX0NPTVBS RVNTSU9OIFpfREVGQVVMVF9DT01QUkVTU0lPTg0KI2RlZmluZSBERUZBVUxU X1dJTkRPV1NJWkUgLTE1DQojZGVmaW5lIERFRkFVTFRfTUVNTEVWRUwgOQ0K I2RlZmluZSBERUZBVUxUX0JVRkZFUlNJWkUgODA5Ng0KDQovKiBPdXRwdXRz IGEgbG9uZyBpbiBMU0Igb3JkZXIgdG8gdGhlIGdpdmVuIGZpbGUNCiAqIG9u bHkgdGhlIGJvdHRvbSA0IGJpdHMgYXJlIHJlcXVpcmVkIGZvciB0aGUgZGVm bGF0ZSBmaWxlIGZvcm1hdC4NCiAqLw0Kc3RhdGljIHZvaWQgcHV0TG9uZyh1 bnNpZ25lZCBjaGFyICpzdHJpbmcsIHVuc2lnbmVkIGxvbmcgeCkNCnsNCiAg ICBzdHJpbmdbMF0gPSAodW5zaWduZWQgY2hhcikoeCAmIDB4ZmYpOw0KICAg IHN0cmluZ1sxXSA9ICh1bnNpZ25lZCBjaGFyKSgoeCAmIDB4ZmYwMCkgPj4g OCk7DQogICAgc3RyaW5nWzJdID0gKHVuc2lnbmVkIGNoYXIpKCh4ICYgMHhm ZjAwMDApID4+IDE2KTsNCiAgICBzdHJpbmdbM10gPSAodW5zaWduZWQgY2hh cikoKHggJiAweGZmMDAwMDAwKSA+PiAyNCk7DQp9DQoNCi8qIElucHV0cyBh IHN0cmluZyBhbmQgcmV0dXJucyBhIGxvbmcuDQogKi8NCnN0YXRpYyB1bnNp Z25lZCBsb25nIGdldExvbmcodW5zaWduZWQgY2hhciAqc3RyaW5nKQ0Kew0K ICAgIHJldHVybiAoKHVuc2lnbmVkIGxvbmcpc3RyaW5nWzBdKQ0KICAgICAg ICAgIHwgKCgodW5zaWduZWQgbG9uZylzdHJpbmdbMV0pIDw8IDgpDQogICAg ICAgICAgfCAoKCh1bnNpZ25lZCBsb25nKXN0cmluZ1syXSkgPDwgMTYpDQog ICAgICAgICAgfCAoKCh1bnNpZ25lZCBsb25nKXN0cmluZ1szXSkgPDwgMjQp Ow0KfQ0KDQpzdGF0aWMgdm9pZCAqY3JlYXRlX2RlZmxhdGVfc2VydmVyX2Nv bmZpZyhhcHJfcG9vbF90ICpwLCBzZXJ2ZXJfcmVjICpzKQ0Kew0KICAgIGRl ZmxhdGVfZmlsdGVyX2NvbmZpZyAqYyA9IGFwcl9wY2FsbG9jKHAsIHNpemVv ZiAqYyk7DQoNCiAgICBjLT5tZW1sZXZlbCAgID0gREVGQVVMVF9NRU1MRVZF TDsNCiAgICBjLT53aW5kb3dTaXplID0gREVGQVVMVF9XSU5ET1dTSVpFOw0K ICAgIGMtPmJ1ZmZlclNpemUgPSBERUZBVUxUX0JVRkZFUlNJWkU7DQogICAg Yy0+Y29tcHJlc3Npb25sZXZlbCA9IERFRkFVTFRfQ09NUFJFU1NJT047DQoN CiAgICByZXR1cm4gYzsNCn0NCg0Kc3RhdGljIGNvbnN0IGNoYXIgKmRlZmxh dGVfc2V0X3dpbmRvd19zaXplKGNtZF9wYXJtcyAqY21kLCB2b2lkICpkdW1t eSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICphcmcpDQp7DQogICAgZGVmbGF0ZV9maWx0ZXJfY29u ZmlnICpjID0gYXBfZ2V0X21vZHVsZV9jb25maWcoY21kLT5zZXJ2ZXItPm1v ZHVsZV9jb25maWcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmRlZmxhdGVfbW9kdWxlKTsNCiAgICBp bnQgaTsNCg0KICAgIGkgPSBhdG9pKGFyZyk7DQoNCiAgICBpZiAoaSA8IDEg fHwgaSA+IDE1KQ0KICAgICAgICByZXR1cm4gIkRlZmxhdGVXaW5kb3dTaXpl IG11c3QgYmUgYmV0d2VlbiAxIGFuZCAxNSI7DQoNCiAgICBjLT53aW5kb3dT aXplID0gaSAqIC0xOw0KDQogICAgcmV0dXJuIE5VTEw7DQp9DQoNCnN0YXRp YyBjb25zdCBjaGFyICpkZWZsYXRlX3NldF9idWZmZXJfc2l6ZShjbWRfcGFy bXMgKmNtZCwgdm9pZCAqZHVtbXksDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYXJnKQ0Kew0KICAg IGRlZmxhdGVfZmlsdGVyX2NvbmZpZyAqYyA9IGFwX2dldF9tb2R1bGVfY29u ZmlnKGNtZC0+c2VydmVyLT5tb2R1bGVfY29uZmlnLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkZWZs YXRlX21vZHVsZSk7DQogICAgaW50IG4gPSBhdG9pKGFyZyk7DQoNCiAgICBp ZiAobiA8PSAwKSB7DQogICAgICAgIHJldHVybiAiRGVmbGF0ZUJ1ZmZlclNp emUgc2hvdWxkIGJlIHBvc2l0aXZlIjsNCiAgICB9DQoNCiAgICBjLT5idWZm ZXJTaXplID0gKGFwcl9zaXplX3QpbjsNCg0KICAgIHJldHVybiBOVUxMOw0K fQ0Kc3RhdGljIGNvbnN0IGNoYXIgKmRlZmxhdGVfc2V0X25vdGUoY21kX3Bh cm1zICpjbWQsIHZvaWQgKmR1bW15LA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYXJnMSwgY29uc3QgY2hhciAq YXJnMikNCnsNCiAgICBkZWZsYXRlX2ZpbHRlcl9jb25maWcgKmMgPSBhcF9n ZXRfbW9kdWxlX2NvbmZpZyhjbWQtPnNlcnZlci0+bW9kdWxlX2NvbmZpZywN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmZGVmbGF0ZV9tb2R1bGUpOw0KICAgIA0KICAgIGlmIChhcmcy ID09IE5VTEwpIHsNCiAgICAgICAgYy0+bm90ZV9yYXRpb19uYW1lID0gYXBy X3BzdHJkdXAoY21kLT5wb29sLCBhcmcxKTsNCiAgICB9DQogICAgZWxzZSBp ZiAoIXN0cmNhc2VjbXAoYXJnMSwgInJhdGlvIikpIHsNCiAgICAgICAgYy0+ bm90ZV9yYXRpb19uYW1lID0gYXByX3BzdHJkdXAoY21kLT5wb29sLCBhcmcy KTsNCiAgICB9DQogICAgZWxzZSBpZiAoIXN0cmNhc2VjbXAoYXJnMSwgImlu cHV0IikpIHsNCiAgICAgICAgYy0+bm90ZV9pbnB1dF9uYW1lID0gYXByX3Bz dHJkdXAoY21kLT5wb29sLCBhcmcyKTsNCiAgICB9DQogICAgZWxzZSBpZiAo IXN0cmNhc2VjbXAoYXJnMSwgIm91dHB1dCIpKSB7DQogICAgICAgIGMtPm5v dGVfb3V0cHV0X25hbWUgPSBhcHJfcHN0cmR1cChjbWQtPnBvb2wsIGFyZzIp Ow0KICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgcmV0dXJuIGFwcl9wc3By aW50ZihjbWQtPnBvb2wsICJVbmtub3duIG5vdGUgdHlwZSAlcyIsIGFyZzEp Ow0KICAgIH0NCg0KICAgIHJldHVybiBOVUxMOw0KfQ0KDQpzdGF0aWMgY29u c3QgY2hhciAqZGVmbGF0ZV9zZXRfbWVtbGV2ZWwoY21kX3Bhcm1zICpjbWQs IHZvaWQgKmR1bW15LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmFyZykNCnsNCiAgICBkZWZsYXRlX2Zp bHRlcl9jb25maWcgKmMgPSBhcF9nZXRfbW9kdWxlX2NvbmZpZyhjbWQtPnNl cnZlci0+bW9kdWxlX2NvbmZpZywNCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZGVmbGF0ZV9tb2R1bGUp Ow0KICAgIGludCBpOw0KDQogICAgaSA9IGF0b2koYXJnKTsNCg0KICAgIGlm IChpIDwgMSB8fCBpID4gOSkNCiAgICAgICAgcmV0dXJuICJEZWZsYXRlTWVt TGV2ZWwgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDkiOw0KDQogICAgYy0+bWVt bGV2ZWwgPSBpOw0KDQogICAgcmV0dXJuIE5VTEw7DQp9DQoNCnN0YXRpYyBj b25zdCBjaGFyICpkZWZsYXRlX3NldF9jb21wcmVzc2lvbmxldmVsKGNtZF9w YXJtcyAqY21kLCB2b2lkICpkdW1teSwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICphcmcpDQp7DQogICAg ZGVmbGF0ZV9maWx0ZXJfY29uZmlnICpjID0gYXBfZ2V0X21vZHVsZV9jb25m aWcoY21kLT5zZXJ2ZXItPm1vZHVsZV9jb25maWcsDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmRlZmxh dGVfbW9kdWxlKTsNCiAgICBpbnQgaTsNCg0KICAgIGkgPSBhdG9pKGFyZyk7 DQoNCiAgICBpZiAoaSA8IDEgfHwgaSA+IDkpDQogICAgICAgIHJldHVybiAi Q29tcHJlc3Npb24gTGV2ZWwgbXVzdCBiZSBiZXR3ZWVuIDEgYW5kIDkiOw0K DQogICAgYy0+Y29tcHJlc3Npb25sZXZlbCA9IGk7DQoNCiAgICByZXR1cm4g TlVMTDsNCn0NCg0KLyogbWFnaWMgaGVhZGVyICovDQpzdGF0aWMgY2hhciBk ZWZsYXRlX21hZ2ljWzJdID0geyAnXDAzNycsICdcMjEzJyB9Ow0KDQp0eXBl ZGVmIHN0cnVjdCBkZWZsYXRlX2N0eF90DQp7DQogICAgel9zdHJlYW0gc3Ry ZWFtOw0KICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsNCiAgICB1bnNpZ25l ZCBsb25nIGNyYzsNCiAgICBhcHJfYnVja2V0X2JyaWdhZGUgKmJiLCAqcHJv Y19iYjsNCn0gZGVmbGF0ZV9jdHg7DQoNCnN0YXRpYyBhcHJfc3RhdHVzX3Qg ZGVmbGF0ZV9vdXRfZmlsdGVyKGFwX2ZpbHRlcl90ICpmLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXByX2J1Y2tldF9icmln YWRlICpiYikNCnsNCiAgICBhcHJfYnVja2V0ICplOw0KICAgIHJlcXVlc3Rf cmVjICpyID0gZi0+cjsNCiAgICBkZWZsYXRlX2N0eCAqY3R4ID0gZi0+Y3R4 Ow0KICAgIGludCB6UkM7DQogICAgZGVmbGF0ZV9maWx0ZXJfY29uZmlnICpj ID0gYXBfZ2V0X21vZHVsZV9jb25maWcoci0+c2VydmVyLT5tb2R1bGVfY29u ZmlnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZkZWZsYXRlX21vZHVsZSk7DQoNCiAgICAvKiBJZiB3 ZSBkb24ndCBoYXZlIGEgY29udGV4dCwgd2UgbmVlZCB0byBlbnN1cmUgdGhh dCBpdCBpcyBva2F5IHRvIHNlbmQNCiAgICAgKiB0aGUgZGVmbGF0ZWQgY29u dGVudC4gIElmIHdlIGhhdmUgYSBjb250ZXh0LCB0aGF0IG1lYW5zIHdlJ3Zl IGRvbmUNCiAgICAgKiB0aGlzIGJlZm9yZSBhbmQgd2UgbGlrZWQgaXQuDQog ICAgICogVGhpcyBjb3VsZCBiZSBub3Qgc28gbmljZSBpZiB3ZSBhbHdheXMg ZmFpbC4gIEJ1dCwgaWYgd2Ugc3VjY2VlZCwNCiAgICAgKiB3ZSdyZSBpbiBi ZXR0ZXIgc2hhcGUuDQogICAgICovDQogICAgaWYgKCFjdHgpIHsNCiAgICAg ICAgY2hhciAqYnVmLCAqdG9rZW47DQogICAgICAgIGNvbnN0IGNoYXIgKmVu Y29kaW5nLCAqYWNjZXB0czsNCg0KICAgICAgICAvKiBvbmx5IHdvcmsgb24g bWFpbiByZXF1ZXN0L25vIHN1YnJlcXVlc3RzICovDQogICAgICAgIGlmIChy LT5tYWluKSB7DQogICAgICAgICAgICBhcF9yZW1vdmVfb3V0cHV0X2ZpbHRl cihmKTsNCiAgICAgICAgICAgIHJldHVybiBhcF9wYXNzX2JyaWdhZGUoZi0+ bmV4dCwgYmIpOw0KICAgICAgICB9DQoNCiAgICAgICAgLyogc29tZSBicm93 c2VycyBtaWdodCBoYXZlIHByb2JsZW1zLCBzbyBzZXQgbm8tZ3ppcA0KICAg ICAgICAgKiAod2l0aCBicm93c2VybWF0Y2gpIGZvciB0aGVtDQogICAgICAg ICAqLw0KICAgICAgICBpZiAoYXByX3RhYmxlX2dldChyLT5zdWJwcm9jZXNz X2VudiwgIm5vLWd6aXAiKSkgew0KICAgICAgICAgICAgYXBfcmVtb3ZlX291 dHB1dF9maWx0ZXIoZik7DQogICAgICAgICAgICByZXR1cm4gYXBfcGFzc19i cmlnYWRlKGYtPm5leHQsIGJiKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8q IFNvbWUgYnJvd3NlcnMgbWlnaHQgaGF2ZSBwcm9ibGVtcyB3aXRoIGNvbnRl bnQgdHlwZXMNCiAgICAgICAgICogb3RoZXIgdGhhbiB0ZXh0L2h0bWwsIHNv IHNldCBnemlwLW9ubHktdGV4dC9odG1sDQogICAgICAgICAqICh3aXRoIGJy b3dzZXJtYXRjaCkgZm9yIHRoZW0NCiAgICAgICAgICovDQogICAgICAgIGlm IChyLT5jb250ZW50X3R5cGUgPT0gTlVMTA0KICAgICAgICAgICAgIHx8IHN0 cm5jbXAoci0+Y29udGVudF90eXBlLCAidGV4dC9odG1sIiwgOSkpIHsNCiAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmVudl92YWx1ZSA9IGFwcl90YWJsZV9n ZXQoci0+c3VicHJvY2Vzc19lbnYsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJnemlwLW9ubHktdGV4dC9o dG1sIik7DQogICAgICAgICAgICBpZiAoIGVudl92YWx1ZSAmJiAoc3RyY21w KGVudl92YWx1ZSwiMSIpID09IDApICkgew0KICAgICAgICAgICAgICAgIGFw X3JlbW92ZV9vdXRwdXRfZmlsdGVyKGYpOw0KICAgICAgICAgICAgICAgIHJl dHVybiBhcF9wYXNzX2JyaWdhZGUoZi0+bmV4dCwgYmIpOw0KICAgICAgICAg ICAgfSAgICAgICAgICAgIA0KICAgICAgICB9DQoNCiAgICAgICAgLyogTGV0 J3Mgc2VlIHdoYXQgb3VyIGN1cnJlbnQgQ29udGVudC1FbmNvZGluZyBpcy4N CiAgICAgICAgICogSWYgaXQncyBhbHJlYWR5IGVuY29kZWQsIGRvbid0IGNv bXByZXNzIGFnYWluLg0KICAgICAgICAgKiAoV2UgY291bGQsIGJ1dCBsZXQn cyBub3QuKQ0KICAgICAgICAgKi8NCiAgICAgICAgZW5jb2RpbmcgPSBhcHJf dGFibGVfZ2V0KHItPmhlYWRlcnNfb3V0LCAiQ29udGVudC1FbmNvZGluZyIp Ow0KICAgICAgICBpZiAoZW5jb2RpbmcpIHsNCiAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmVycl9lbmM7DQoNCiAgICAgICAgICAgIGVycl9lbmMgPSBhcHJf dGFibGVfZ2V0KHItPmVycl9oZWFkZXJzX291dCwgIkNvbnRlbnQtRW5jb2Rp bmciKTsNCiAgICAgICAgICAgIGlmIChlcnJfZW5jKSB7DQogICAgICAgICAg ICAgICAgZW5jb2RpbmcgPSBhcHJfcHN0cmNhdChyLT5wb29sLCBlbmNvZGlu ZywgIiwiLCBlcnJfZW5jLCBOVUxMKTsNCiAgICAgICAgICAgIH0NCiAgICAg ICAgfQ0KICAgICAgICBlbHNlIHsNCiAgICAgICAgICAgIGVuY29kaW5nID0g YXByX3RhYmxlX2dldChyLT5lcnJfaGVhZGVyc19vdXQsICJDb250ZW50LUVu Y29kaW5nIik7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoci0+Y29udGVu dF9lbmNvZGluZykgew0KICAgICAgICAgICAgZW5jb2RpbmcgPSBlbmNvZGlu ZyA/IGFwcl9wc3RyY2F0KHItPnBvb2wsIGVuY29kaW5nLCAiLCIsDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+ Y29udGVudF9lbmNvZGluZywgTlVMTCkNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiByLT5jb250ZW50X2VuY29kaW5nOw0KICAgICAgICB9 DQoNCiAgICAgICAgaWYgKGVuY29kaW5nKSB7DQogICAgICAgICAgICBjb25z dCBjaGFyICp0bXAgPSBlbmNvZGluZzsNCg0KICAgICAgICAgICAgdG9rZW4g PSBhcF9nZXRfdG9rZW4oci0+cG9vbCwgJnRtcCwgMCk7DQogICAgICAgICAg ICB3aGlsZSAodG9rZW4gJiYgKnRva2VuKSB7DQogICAgICAgICAgICAgICAg Lyogc3RvbGVuIGZyb20gbW9kX25lZ290aWF0aW9uOiAqLw0KICAgICAgICAg ICAgICAgIGlmIChzdHJjbXAodG9rZW4sICJpZGVudGl0eSIpICYmIHN0cmNt cCh0b2tlbiwgIjdiaXQiKSAmJg0KICAgICAgICAgICAgICAgICAgICBzdHJj bXAodG9rZW4sICI4Yml0IikgJiYgc3RyY21wKHRva2VuLCAiYmluYXJ5Iikp IHsNCg0KICAgICAgICAgICAgICAgICAgICBhcF9yZW1vdmVfb3V0cHV0X2Zp bHRlcihmKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFwX3Bhc3Nf YnJpZ2FkZShmLT5uZXh0LCBiYik7CQkJDQogICAgICAgICAgICAgICAgfQ0K DQogICAgICAgICAgICAgICAgLyogT3RoZXJ3aXNlLCBza2lwIHRva2VuICov DQogICAgICAgICAgICAgICAgaWYgKCp0bXApIHsNCiAgICAgICAgICAgICAg ICAgICAgKyt0bXA7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg ICAgIHRva2VuID0gKCp0bXApID8gYXBfZ2V0X3Rva2VuKHItPnBvb2wsICZ0 bXAsIDApIDogTlVMTDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KDQog ICAgICAgIC8qIEV2ZW4gaWYgd2UgZG9uJ3QgYWNjZXB0IHRoaXMgcmVxdWVz dCBiYXNlZCBvbiBpdCBub3QgaGF2aW5nDQogICAgICAgICAqIHRoZSBBY2Nl cHQtRW5jb2RpbmcsIHdlIG5lZWQgdG8gbm90ZSB0aGF0IHdlIHdlcmUgbG9v a2luZw0KICAgICAgICAgKiBmb3IgdGhpcyBoZWFkZXIgYW5kIGRvd25zdHJl YW0gcHJveGllcyBzaG91bGQgYmUgYXdhcmUgb2YgdGhhdC4NCiAgICAgICAg ICovDQogICAgICAgIGFwcl90YWJsZV9zZXRuKHItPmhlYWRlcnNfb3V0LCAi VmFyeSIsICJBY2NlcHQtRW5jb2RpbmciKTsNCg0KICAgICAgICAvKiBpZiB0 aGV5IGRvbid0IGhhdmUgdGhlIGxpbmUsIHRoZW4gdGhleSBjYW4ndCBwbGF5 ICovDQogICAgICAgIGFjY2VwdHMgPSBhcHJfdGFibGVfZ2V0KHItPmhlYWRl cnNfaW4sICJBY2NlcHQtRW5jb2RpbmciKTsNCg0KCS8qIE5SSzogYWNjZXB0 IGl0IGlmIHdlIHJlbW92ZWQgQWNjZXB0LUVuY29kaW5nIGVhcmxpZXIgKi8N CiAgICAgICAgaWYgKGFjY2VwdHMgPT0gTlVMTCkgew0KICAgICAgICAJYWNj ZXB0cyA9IGFwcl90YWJsZV9nZXQoci0+bm90ZXMsICJBY2NlcHQtRW5jb2Rp bmciKTsNCgl9DQogICAgICAgIGlmIChhY2NlcHRzID09IE5VTEwpIHsNCiAg ICAgICAgICAgIGFwX3JlbW92ZV9vdXRwdXRfZmlsdGVyKGYpOw0KICAgICAg ICAgICAgcmV0dXJuIGFwX3Bhc3NfYnJpZ2FkZShmLT5uZXh0LCBiYik7DQog ICAgICAgIH0NCg0KICAgICAgICB0b2tlbiA9IGFwX2dldF90b2tlbihyLT5w b29sLCAmYWNjZXB0cywgMCk7DQogICAgICAgIHdoaWxlICh0b2tlbiAmJiB0 b2tlblswXSAmJiBzdHJjYXNlY21wKHRva2VuLCAiZ3ppcCIpKSB7DQogICAg ICAgICAgICAvKiBza2lwIHBhcmFtZXRlcnMsIFhYWDogO3E9Zm9vIGV2YWx1 YXRpb24/ICovDQogICAgICAgICAgICB3aGlsZSAoKmFjY2VwdHMgPT0gJzsn KSB7IA0KICAgICAgICAgICAgICAgICsrYWNjZXB0czsNCiAgICAgICAgICAg ICAgICB0b2tlbiA9IGFwX2dldF90b2tlbihyLT5wb29sLCAmYWNjZXB0cywg MSk7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8qIHJldHJpZXZl IG5leHQgdG9rZW4gKi8NCiAgICAgICAgICAgIGlmICgqYWNjZXB0cyA9PSAn LCcpIHsNCiAgICAgICAgICAgICAgICArK2FjY2VwdHM7DQogICAgICAgICAg ICB9DQogICAgICAgICAgICB0b2tlbiA9ICgqYWNjZXB0cykgPyBhcF9nZXRf dG9rZW4oci0+cG9vbCwgJmFjY2VwdHMsIDApIDogTlVMTDsNCiAgICAgICAg fQ0KDQogICAgICAgIC8qIE5vIGFjY2VwdGFibGUgdG9rZW4gZm91bmQuICov DQogICAgICAgIGlmICh0b2tlbiA9PSBOVUxMIHx8IHRva2VuWzBdID09ICdc MCcpIHsNCiAgICAgICAgICAgIGFwX3JlbW92ZV9vdXRwdXRfZmlsdGVyKGYp Ow0KICAgICAgICAgICAgcmV0dXJuIGFwX3Bhc3NfYnJpZ2FkZShmLT5uZXh0 LCBiYik7DQogICAgICAgIH0NCg0KICAgICAgICAvKiBXZSdyZSBjb29sIHdp dGggZmlsdGVyaW5nIHRoaXMuICovDQogICAgICAgIGN0eCA9IGYtPmN0eCA9 IGFwcl9wY2FsbG9jKHItPnBvb2wsIHNpemVvZigqY3R4KSk7DQogICAgICAg IGN0eC0+YmIgPSBhcHJfYnJpZ2FkZV9jcmVhdGUoci0+cG9vbCwgZi0+Yy0+ YnVja2V0X2FsbG9jKTsNCiAgICAgICAgY3R4LT5idWZmZXIgPSBhcHJfcGFs bG9jKHItPnBvb2wsIGMtPmJ1ZmZlclNpemUpOw0KDQogICAgICAgIHpSQyA9 IGRlZmxhdGVJbml0MigmY3R4LT5zdHJlYW0sIGMtPmNvbXByZXNzaW9ubGV2 ZWwsIFpfREVGTEFURUQsDQogICAgICAgICAgICAgICAgICAgICAgICAgICBj LT53aW5kb3dTaXplLCBjLT5tZW1sZXZlbCwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIFpfREVGQVVMVF9TVFJBVEVHWSk7DQoNCiAgICAgICAgaWYg KHpSQyAhPSBaX09LKSB7DQogICAgICAgICAgICBmLT5jdHggPSBOVUxMOw0K ICAgICAgICAgICAgYXBfbG9nX3JlcnJvcihBUExPR19NQVJLLCBBUExPR19F UlIsIDAsIHIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUg dG8gaW5pdCBabGliOiAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICJk ZWZsYXRlSW5pdDIgcmV0dXJuZWQgJWQ6IFVSTCAlcyIsDQogICAgICAgICAg ICAgICAgICAgICAgICAgIHpSQywgci0+dXJpKTsNCiAgICAgICAgICAgIHJl dHVybiBhcF9wYXNzX2JyaWdhZGUoZi0+bmV4dCwgYmIpOw0KICAgICAgICB9 DQoNCiAgICAgICAgLyogUkZDIDE5NTIgU2VjdGlvbiAyLjMgZGljdGF0ZXMg dGhlIGd6aXAgaGVhZGVyOg0KICAgICAgICAgKg0KICAgICAgICAgKiArLS0t Ky0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKw0KICAgICAg ICAgKiB8SUQxfElEMnxDTSB8RkxHfCAgICAgTVRJTUUgICAgIHxYRkx8T1Mg fA0KICAgICAgICAgKiArLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0t LSstLS0rLS0tKw0KICAgICAgICAgKg0KICAgICAgICAgKiBJZiB3ZSB3aXNo IHRvIHBvcHVsYXRlIGluIE1USU1FIChhcyBoaW50ZWQgaW4gUkZDIDE5NTIp LCBkbzoNCiAgICAgICAgICogcHV0TG9uZyhkYXRlX2FycmF5LCBhcHJfdGlt ZV9ub3coKSAvIEFQUl9VU0VDX1BFUl9TRUMpOw0KICAgICAgICAgKiB3aGVy ZSBkYXRlX2FycmF5IGlzIGEgY2hhcls0XSBhbmQgdGhlbiBwcmludCBkYXRl X2FycmF5IGluIHRoZQ0KICAgICAgICAgKiBNVElNRSBwb3NpdGlvbi4gIFdB Uk5JTkc6IEVORElBTk5FU1MgSVNTVUUgSEVSRS4NCiAgICAgICAgICovDQog ICAgICAgIGJ1ZiA9IGFwcl9wc3ByaW50ZihyLT5wb29sLCAiJWMlYyVjJWMl YyVjJWMlYyVjJWMiLCBkZWZsYXRlX21hZ2ljWzBdLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGVmbGF0ZV9tYWdpY1sxXSwgWl9ERUZMQVRFRCwg MCAvKiBmbGFncyAqLywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDAs IDAsIDAsIDAgLyogNCBjaGFycyBmb3IgbXRpbWUgKi8sDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAwIC8qIHhmbGFncyAqLywgT1NfQ09ERSk7DQog ICAgICAgIGUgPSBhcHJfYnVja2V0X3Bvb2xfY3JlYXRlKGJ1ZiwgMTAsIHIt PnBvb2wsIGYtPmMtPmJ1Y2tldF9hbGxvYyk7DQogICAgICAgIEFQUl9CUklH QURFX0lOU0VSVF9UQUlMKGN0eC0+YmIsIGUpOw0KDQogICAgICAgIC8qIElm IHRoZSBlbnRpcmUgQ29udGVudC1FbmNvZGluZyBpcyAiaWRlbnRpdHkiLCB3 ZSBjYW4gcmVwbGFjZSBpdC4gKi8NCiAgICAgICAgaWYgKCFlbmNvZGluZyB8 fCAhc3RyY2FzZWNtcChlbmNvZGluZywgImlkZW50aXR5IikpIHsNCiAgICAg ICAgICAgIGFwcl90YWJsZV9zZXRuKHItPmhlYWRlcnNfb3V0LCAiQ29udGVu dC1FbmNvZGluZyIsICJnemlwIik7DQogICAgICAgIH0NCiAgICAgICAgZWxz ZSB7DQogICAgICAgICAgICBhcHJfdGFibGVfbWVyZ2VuKHItPmhlYWRlcnNf b3V0LCAiQ29udGVudC1FbmNvZGluZyIsICJnemlwIik7DQogICAgICAgIH0N CiAgICAgICAgYXByX3RhYmxlX3Vuc2V0KHItPmhlYWRlcnNfb3V0LCAiQ29u dGVudC1MZW5ndGgiKTsNCg0KICAgICAgICAvKiBpbml0aWFsaXplIGRlZmxh dGUgb3V0cHV0IGJ1ZmZlciAqLw0KICAgICAgICBjdHgtPnN0cmVhbS5uZXh0 X291dCA9IGN0eC0+YnVmZmVyOw0KICAgICAgICBjdHgtPnN0cmVhbS5hdmFp bF9vdXQgPSBjLT5idWZmZXJTaXplOw0KICAgIH0NCiAgICANCiAgICBBUFJf QlJJR0FERV9GT1JFQUNIKGUsIGJiKSB7DQogICAgICAgIGNvbnN0IGNoYXIg KmRhdGE7DQogICAgICAgIGFwcl9idWNrZXQgKmI7DQogICAgICAgIGFwcl9z aXplX3QgbGVuOw0KDQogICAgICAgIGludCBkb25lID0gMDsNCg0KICAgICAg ICBpZiAoQVBSX0JVQ0tFVF9JU19FT1MoZSkpIHsNCiAgICAgICAgICAgIGNo YXIgKmJ1ZjsNCiAgICAgICAgICAgIHVuc2lnbmVkIGludCBkZWZsYXRlX2xl bjsNCg0KICAgICAgICAgICAgY3R4LT5zdHJlYW0uYXZhaWxfaW4gPSAwOyAv KiBzaG91bGQgYmUgemVybyBhbHJlYWR5IGFueXdheSAqLw0KICAgICAgICAg ICAgZm9yICg7Oykgew0KICAgICAgICAgICAgICAgIGRlZmxhdGVfbGVuID0g Yy0+YnVmZmVyU2l6ZSAtIGN0eC0+c3RyZWFtLmF2YWlsX291dDsNCg0KICAg ICAgICAgICAgICAgIGlmIChkZWZsYXRlX2xlbiAhPSAwKSB7DQogICAgICAg ICAgICAgICAgICAgIGIgPSBhcHJfYnVja2V0X2hlYXBfY3JlYXRlKChjaGFy ICopY3R4LT5idWZmZXIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRlZmxhdGVfbGVuLCBOVUxMLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLT5j LT5idWNrZXRfYWxsb2MpOw0KICAgICAgICAgICAgICAgICAgICBBUFJfQlJJ R0FERV9JTlNFUlRfVEFJTChjdHgtPmJiLCBiKTsNCiAgICAgICAgICAgICAg ICAgICAgY3R4LT5zdHJlYW0ubmV4dF9vdXQgPSBjdHgtPmJ1ZmZlcjsNCiAg ICAgICAgICAgICAgICAgICAgY3R4LT5zdHJlYW0uYXZhaWxfb3V0ID0gYy0+ YnVmZmVyU2l6ZTsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg ICAgICBpZiAoZG9uZSkgew0KICAgICAgICAgICAgICAgICAgICBicmVhazsN CiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB6UkMgPSBk ZWZsYXRlKCZjdHgtPnN0cmVhbSwgWl9GSU5JU0gpOw0KDQogICAgICAgICAg ICAgICAgaWYgKGRlZmxhdGVfbGVuID09IDAgJiYgelJDID09IFpfQlVGX0VS Uk9SKSB7DQogICAgICAgICAgICAgICAgICAgIHpSQyA9IFpfT0s7DQogICAg ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgZG9uZSA9IChjdHgt PnN0cmVhbS5hdmFpbF9vdXQgIT0gMCB8fCB6UkMgPT0gWl9TVFJFQU1fRU5E KTsNCg0KICAgICAgICAgICAgICAgIGlmICh6UkMgIT0gWl9PSyAmJiB6UkMg IT0gWl9TVFJFQU1fRU5EKSB7DQogICAgICAgICAgICAgICAgICAgIGJyZWFr Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAg ICAgICAgYnVmID0gYXByX3BhbGxvYyhyLT5wb29sLCA4KTsNCiAgICAgICAg ICAgIHB1dExvbmcoKHVuc2lnbmVkIGNoYXIgKikmYnVmWzBdLCBjdHgtPmNy Yyk7DQogICAgICAgICAgICBwdXRMb25nKCh1bnNpZ25lZCBjaGFyICopJmJ1 Zls0XSwgY3R4LT5zdHJlYW0udG90YWxfaW4pOw0KDQogICAgICAgICAgICBi ID0gYXByX2J1Y2tldF9wb29sX2NyZWF0ZShidWYsIDgsIHItPnBvb2wsIGYt PmMtPmJ1Y2tldF9hbGxvYyk7DQogICAgICAgICAgICBBUFJfQlJJR0FERV9J TlNFUlRfVEFJTChjdHgtPmJiLCBiKTsNCiAgICAgICAgICAgIGFwX2xvZ19y ZXJyb3IoQVBMT0dfTUFSSywgQVBMT0dfREVCVUcsIDAsIHIsDQogICAgICAg ICAgICAgICAgICAgICAgICAgICJabGliOiBDb21wcmVzc2VkICVsZCB0byAl bGQgOiBVUkwgJXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgt PnN0cmVhbS50b3RhbF9pbiwgY3R4LT5zdHJlYW0udG90YWxfb3V0LCByLT51 cmkpOw0KDQogICAgICAgICAgICAvKiBsZWF2ZSBub3RlcyBmb3IgbG9nZ2lu ZyAqLw0KICAgICAgICAgICAgaWYgKGMtPm5vdGVfaW5wdXRfbmFtZSkgew0K ICAgICAgICAgICAgICAgIGFwcl90YWJsZV9zZXRuKHItPm5vdGVzLCBjLT5u b3RlX2lucHV0X25hbWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGN0eC0+c3RyZWFtLnRvdGFsX2luID4gMCkNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgPyBhcHJfb2ZmX3RfdG9hKHItPnBvb2wsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjdHgtPnN0cmVhbS50b3RhbF9pbikNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOiAiLSIpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAg ICAgICBpZiAoYy0+bm90ZV9vdXRwdXRfbmFtZSkgew0KICAgICAgICAgICAg ICAgIGFwcl90YWJsZV9zZXRuKHItPm5vdGVzLCBjLT5ub3RlX291dHB1dF9u YW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgtPnN0 cmVhbS50b3RhbF9pbiA+IDApDQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID8gYXByX29mZl90X3RvYShyLT5wb29sLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5zdHJl YW0udG90YWxfb3V0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA6ICItIik7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChj LT5ub3RlX3JhdGlvX25hbWUpIHsNCiAgICAgICAgICAgICAgICBhcHJfdGFi bGVfc2V0bihyLT5ub3RlcywgYy0+bm90ZV9yYXRpb19uYW1lLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChjdHgtPnN0cmVhbS50b3RhbF9p biA+IDApDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYXBy X2l0b2Eoci0+cG9vbCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoaW50KShjdHgtPnN0cmVhbS50b3RhbF9vdXQNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqIDEwMA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8gY3R4LT5zdHJlYW0udG90YWxfaW4pKQ0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA6ICItIik7DQogICAgICAgICAg ICB9DQoNCiAgICAgICAgICAgIGRlZmxhdGVFbmQoJmN0eC0+c3RyZWFtKTsN Cg0KICAgICAgICAgICAgLyogUmVtb3ZlIEVPUyBmcm9tIHRoZSBvbGQgbGlz dCwgYW5kIGluc2VydCBpbnRvIHRoZSBuZXcuICovDQogICAgICAgICAgICBB UFJfQlVDS0VUX1JFTU9WRShlKTsNCiAgICAgICAgICAgIEFQUl9CUklHQURF X0lOU0VSVF9UQUlMKGN0eC0+YmIsIGUpOw0KDQogICAgICAgICAgICAvKiBP a2F5LCB3ZSd2ZSBzZWVuIHRoZSBFT1MuDQogICAgICAgICAgICAgKiBUaW1l IHRvIHBhc3MgaXQgYWxvbmcgZG93biB0aGUgY2hhaW4uDQogICAgICAgICAg ICAgKi8NCiAgICAgICAgICAgIHJldHVybiBhcF9wYXNzX2JyaWdhZGUoZi0+ bmV4dCwgY3R4LT5iYik7DQogICAgICAgIH0NCg0KICAgICAgICBpZiAoQVBS X0JVQ0tFVF9JU19GTFVTSChlKSkgew0KICAgICAgICAgICAgYXByX2J1Y2tl dCAqYmt0Ow0KICAgICAgICAgICAgYXByX3N0YXR1c190IHJ2Ow0KICAgICAg ICAgICAgaWYgKGN0eC0+c3RyZWFtLmF2YWlsX2luID4gMCkgew0KICAgICAg ICAgICAgICAgIHpSQyA9IGRlZmxhdGUoJihjdHgtPnN0cmVhbSksIFpfU1lO Q19GTFVTSCk7DQogICAgICAgICAgICAgICAgaWYgKHpSQyAhPSBaX09LKSB7 DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBBUFJfRUdFTkVSQUw7DQog ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAg ICBjdHgtPnN0cmVhbS5uZXh0X291dCA9IGN0eC0+YnVmZmVyOw0KICAgICAg ICAgICAgbGVuID0gYy0+YnVmZmVyU2l6ZSAtIGN0eC0+c3RyZWFtLmF2YWls X291dDsNCg0KICAgICAgICAgICAgYiA9IGFwcl9idWNrZXRfaGVhcF9jcmVh dGUoKGNoYXIgKiljdHgtPmJ1ZmZlciwgbGVuLA0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgZi0+Yy0+YnVja2V0X2Fs bG9jKTsNCiAgICAgICAgICAgIEFQUl9CUklHQURFX0lOU0VSVF9UQUlMKGN0 eC0+YmIsIGIpOw0KICAgICAgICAgICAgY3R4LT5zdHJlYW0uYXZhaWxfb3V0 ID0gYy0+YnVmZmVyU2l6ZTsNCg0KICAgICAgICAgICAgYmt0ID0gYXByX2J1 Y2tldF9mbHVzaF9jcmVhdGUoZi0+Yy0+YnVja2V0X2FsbG9jKTsNCiAgICAg ICAgICAgIEFQUl9CUklHQURFX0lOU0VSVF9UQUlMKGN0eC0+YmIsIGJrdCk7 DQogICAgICAgICAgICBydiA9IGFwX3Bhc3NfYnJpZ2FkZShmLT5uZXh0LCBj dHgtPmJiKTsNCiAgICAgICAgICAgIGlmIChydiAhPSBBUFJfU1VDQ0VTUykg ew0KICAgICAgICAgICAgICAgIHJldHVybiBydjsNCiAgICAgICAgICAgIH0N CiAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICB9DQoNCiAgICAgICAg LyogcmVhZCAqLw0KICAgICAgICBhcHJfYnVja2V0X3JlYWQoZSwgJmRhdGEs ICZsZW4sIEFQUl9CTE9DS19SRUFEKTsNCg0KICAgICAgICAvKiBUaGlzIGNy YzMyIGZ1bmN0aW9uIGlzIGZyb20gemxpYi4gKi8NCiAgICAgICAgY3R4LT5j cmMgPSBjcmMzMihjdHgtPmNyYywgKGNvbnN0IEJ5dGVmICopZGF0YSwgbGVu KTsNCg0KICAgICAgICAvKiB3cml0ZSAqLw0KICAgICAgICBjdHgtPnN0cmVh bS5uZXh0X2luID0gKHVuc2lnbmVkIGNoYXIgKilkYXRhOyAvKiBXZSBqdXN0 IGxvc3QgY29uc3QtbmVzcywNCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICogYnV0IHdlJ2xsIGp1c3Qg aGF2ZSB0bw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKiB0cnVzdCB6bGliICovDQogICAgICAgIGN0 eC0+c3RyZWFtLmF2YWlsX2luID0gbGVuOw0KDQogICAgICAgIHdoaWxlIChj dHgtPnN0cmVhbS5hdmFpbF9pbiAhPSAwKSB7DQogICAgICAgICAgICBpZiAo Y3R4LT5zdHJlYW0uYXZhaWxfb3V0ID09IDApIHsNCiAgICAgICAgICAgICAg ICBhcHJfc3RhdHVzX3QgcnY7DQoNCiAgICAgICAgICAgICAgICBjdHgtPnN0 cmVhbS5uZXh0X291dCA9IGN0eC0+YnVmZmVyOw0KICAgICAgICAgICAgICAg IGxlbiA9IGMtPmJ1ZmZlclNpemUgLSBjdHgtPnN0cmVhbS5hdmFpbF9vdXQ7 DQoNCiAgICAgICAgICAgICAgICBiID0gYXByX2J1Y2tldF9oZWFwX2NyZWF0 ZSgoY2hhciAqKWN0eC0+YnVmZmVyLCBsZW4sDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgZi0+Yy0+YnVja2V0 X2FsbG9jKTsNCiAgICAgICAgICAgICAgICBBUFJfQlJJR0FERV9JTlNFUlRf VEFJTChjdHgtPmJiLCBiKTsNCiAgICAgICAgICAgICAgICBjdHgtPnN0cmVh bS5hdmFpbF9vdXQgPSBjLT5idWZmZXJTaXplOw0KICAgICAgICAgICAgICAg IC8qIFNlbmQgd2hhdCB3ZSBoYXZlIHJpZ2h0IG5vdyB0byB0aGUgbmV4dCBm aWx0ZXIuICovDQogICAgICAgICAgICAgICAgcnYgPSBhcF9wYXNzX2JyaWdh ZGUoZi0+bmV4dCwgY3R4LT5iYik7DQogICAgICAgICAgICAgICAgaWYgKHJ2 ICE9IEFQUl9TVUNDRVNTKSB7DQogICAgICAgICAgICAgICAgICAgIHJldHVy biBydjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAg ICAgICAgICAgIHpSQyA9IGRlZmxhdGUoJihjdHgtPnN0cmVhbSksIFpfTk9f RkxVU0gpOw0KDQogICAgICAgICAgICBpZiAoelJDICE9IFpfT0spDQogICAg ICAgICAgICAgICAgcmV0dXJuIEFQUl9FR0VORVJBTDsNCiAgICAgICAgfQ0K ICAgIH0NCg0KICAgIGFwcl9icmlnYWRlX2NsZWFudXAoYmIpOw0KICAgIHJl dHVybiBBUFJfU1VDQ0VTUzsNCn0NCiNpZiAwDQpzdGF0aWMgYXByX3N0YXR1 c190IGluZmxhdGVfb3V0X2ZpbHRlcihhcF9maWx0ZXJfdCAqZiwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcl9idWNrZXRf YnJpZ2FkZSAqYmIpDQp7DQogICAgYXByX2J1Y2tldCAqZTsNCiAgICByZXF1 ZXN0X3JlYyAqciA9IGYtPnI7DQogICAgZGVmbGF0ZV9jdHggKmN0eCA9IGYt PmN0eDsNCiAgICBpbnQgelJDOw0KICAgIGRlZmxhdGVfZmlsdGVyX2NvbmZp ZyAqYyA9IGFwX2dldF9tb2R1bGVfY29uZmlnKHItPnNlcnZlci0+bW9kdWxl X2NvbmZpZywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmZGVmbGF0ZV9tb2R1bGUpOw0KDQogICAgLyog SWYgd2UgZG9uJ3QgaGF2ZSBhIGNvbnRleHQsIHdlIG5lZWQgdG8gZW5zdXJl IHRoYXQgaXQgaXMgb2theSB0byBzZW5kDQogICAgICogdGhlIGRlZmxhdGVk IGNvbnRlbnQuICBJZiB3ZSBoYXZlIGEgY29udGV4dCwgdGhhdCBtZWFucyB3 ZSd2ZSBkb25lDQogICAgICogdGhpcyBiZWZvcmUgYW5kIHdlIGxpa2VkIGl0 Lg0KICAgICAqIFRoaXMgY291bGQgYmUgbm90IHNvIG5pY2UgaWYgd2UgYWx3 YXlzIGZhaWwuICBCdXQsIGlmIHdlIHN1Y2NlZWQsDQogICAgICogd2UncmUg aW4gYmV0dGVyIHNoYXBlLg0KICAgICAqLw0KICAgIGlmICghY3R4KSB7DQog ICAgICAgIGNoYXIgKmJ1ZiwgKnRva2VuOw0KICAgICAgICBjb25zdCBjaGFy ICplbmNvZGluZywgKmFjY2VwdHM7DQoNCiAgICAgICAgLyogb25seSB3b3Jr IG9uIG1haW4gcmVxdWVzdC9ubyBzdWJyZXF1ZXN0cyAqLw0KICAgICAgICBp ZiAoci0+bWFpbikgew0KICAgICAgICAgICAgYXBfcmVtb3ZlX291dHB1dF9m aWx0ZXIoZik7DQogICAgICAgICAgICByZXR1cm4gYXBfcGFzc19icmlnYWRl KGYtPm5leHQsIGJiKTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8qIExldCdz IHNlZSB3aGF0IG91ciBjdXJyZW50IENvbnRlbnQtRW5jb2RpbmcgaXMuDQog ICAgICAgICAqIElmIGl0J3MgYWxyZWFkeSBlbmNvZGVkLCBkb24ndCBjb21w cmVzcyBhZ2Fpbi4NCiAgICAgICAgICogKFdlIGNvdWxkLCBidXQgbGV0J3Mg bm90LikNCiAgICAgICAgICovDQogICAgICAgIGVuY29kaW5nID0gYXByX3Rh YmxlX2dldChyLT5oZWFkZXJzX291dCwgIkNvbnRlbnQtRW5jb2RpbmciKTsN CiAgICAgICAgaWYgKGVuY29kaW5nKSB7DQogICAgICAgICAgICBjb25zdCBj aGFyICplcnJfZW5jOw0KDQogICAgICAgICAgICBlcnJfZW5jID0gYXByX3Rh YmxlX2dldChyLT5lcnJfaGVhZGVyc19vdXQsICJDb250ZW50LUVuY29kaW5n Iik7DQogICAgICAgICAgICBpZiAoZXJyX2VuYykgew0KICAgICAgICAgICAg ICAgIGVuY29kaW5nID0gYXByX3BzdHJjYXQoci0+cG9vbCwgZW5jb2Rpbmcs ICIsIiwgZXJyX2VuYywgTlVMTCk7DQogICAgICAgICAgICB9DQogICAgICAg IH0NCiAgICAgICAgZWxzZSB7DQogICAgICAgICAgICBlbmNvZGluZyA9IGFw cl90YWJsZV9nZXQoci0+ZXJyX2hlYWRlcnNfb3V0LCAiQ29udGVudC1FbmNv ZGluZyIpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKHItPmNvbnRlbnRf ZW5jb2RpbmcpIHsNCiAgICAgICAgICAgIGVuY29kaW5nID0gZW5jb2Rpbmcg PyBhcHJfcHN0cmNhdChyLT5wb29sLCBlbmNvZGluZywgIiwiLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHItPmNv bnRlbnRfZW5jb2RpbmcsIE5VTEwpDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogci0+Y29udGVudF9lbmNvZGluZzsNCiAgICAgICAgfQ0K DQogICAgICAgIGlmIChlbmNvZGluZykgew0KICAgICAgICAgICAgY29uc3Qg Y2hhciAqdG1wID0gZW5jb2Rpbmc7DQoNCiAgICAgICAgICAgIHRva2VuID0g YXBfZ2V0X3Rva2VuKHItPnBvb2wsICZ0bXAsIDApOw0KICAgICAgICAgICAg d2hpbGUgKHRva2VuICYmICp0b2tlbikgew0KICAgICAgICAgICAgICAgIC8q IHN0b2xlbiBmcm9tIG1vZF9uZWdvdGlhdGlvbjogKi8NCiAgICAgICAgICAg ICAgICBpZiAoc3RyY21wKHRva2VuLCAiaWRlbnRpdHkiKSAmJiBzdHJjbXAo dG9rZW4sICI3Yml0IikgJiYNCiAgICAgICAgICAgICAgICAgICAgc3RyY21w KHRva2VuLCAiOGJpdCIpICYmIHN0cmNtcCh0b2tlbiwgImJpbmFyeSIpKSB7 DQoNCiAgICAgICAgICAgICAgICAgICAgYXBfcmVtb3ZlX291dHB1dF9maWx0 ZXIoZik7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBhcF9wYXNzX2Jy aWdhZGUoZi0+bmV4dCwgYmIpOwkJCQ0KICAgICAgICAgICAgICAgIH0NCg0K ICAgICAgICAgICAgICAgIC8qIE90aGVyd2lzZSwgc2tpcCB0b2tlbiAqLw0K ICAgICAgICAgICAgICAgIGlmICgqdG1wKSB7DQogICAgICAgICAgICAgICAg ICAgICsrdG1wOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg ICB0b2tlbiA9ICgqdG1wKSA/IGFwX2dldF90b2tlbihyLT5wb29sLCAmdG1w LCAwKSA6IE5VTEw7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAg ICAgICAvKiBFdmVuIGlmIHdlIGRvbid0IGFjY2VwdCB0aGlzIHJlcXVlc3Qg YmFzZWQgb24gaXQgbm90IGhhdmluZw0KICAgICAgICAgKiB0aGUgQWNjZXB0 LUVuY29kaW5nLCB3ZSBuZWVkIHRvIG5vdGUgdGhhdCB3ZSB3ZXJlIGxvb2tp bmcNCiAgICAgICAgICogZm9yIHRoaXMgaGVhZGVyIGFuZCBkb3duc3RyZWFt IHByb3hpZXMgc2hvdWxkIGJlIGF3YXJlIG9mIHRoYXQuDQogICAgICAgICAq Lw0KICAgICAgICBhcHJfdGFibGVfc2V0bihyLT5oZWFkZXJzX291dCwgIlZh cnkiLCAiQWNjZXB0LUVuY29kaW5nIik7DQoNCiAgICAgICAgLyogaWYgdGhl eSBkb24ndCBoYXZlIHRoZSBsaW5lLCB0aGVuIHRoZXkgY2FuJ3QgcGxheSAq Lw0KICAgICAgICBhY2NlcHRzID0gYXByX3RhYmxlX2dldChyLT5oZWFkZXJz X2luLCAiQWNjZXB0LUVuY29kaW5nIik7DQoNCgkvKiBOUks6IGFjY2VwdCBp dCBpZiB3ZSByZW1vdmVkIEFjY2VwdC1FbmNvZGluZyBlYXJsaWVyICovDQog ICAgICAgIGlmIChhY2NlcHRzID09IE5VTEwpIHsNCiAgICAgICAgCWFjY2Vw dHMgPSBhcHJfdGFibGVfZ2V0KHItPm5vdGVzLCAiQWNjZXB0LUVuY29kaW5n Iik7DQoJfQ0KICAgICAgICBpZiAoYWNjZXB0cyA9PSBOVUxMKSB7DQogICAg ICAgICAgICBhcF9yZW1vdmVfb3V0cHV0X2ZpbHRlcihmKTsNCiAgICAgICAg ICAgIHJldHVybiBhcF9wYXNzX2JyaWdhZGUoZi0+bmV4dCwgYmIpOw0KICAg ICAgICB9DQoNCiAgICAgICAgdG9rZW4gPSBhcF9nZXRfdG9rZW4oci0+cG9v bCwgJmFjY2VwdHMsIDApOw0KICAgICAgICB3aGlsZSAodG9rZW4gJiYgdG9r ZW5bMF0gJiYgc3RyY2FzZWNtcCh0b2tlbiwgImd6aXAiKSkgew0KICAgICAg ICAgICAgLyogc2tpcCBwYXJhbWV0ZXJzLCBYWFg6IDtxPWZvbyBldmFsdWF0 aW9uPyAqLw0KICAgICAgICAgICAgd2hpbGUgKCphY2NlcHRzID09ICc7Jykg eyANCiAgICAgICAgICAgICAgICArK2FjY2VwdHM7DQogICAgICAgICAgICAg ICAgdG9rZW4gPSBhcF9nZXRfdG9rZW4oci0+cG9vbCwgJmFjY2VwdHMsIDEp Ow0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvKiByZXRyaWV2ZSBu ZXh0IHRva2VuICovDQogICAgICAgICAgICBpZiAoKmFjY2VwdHMgPT0gJywn KSB7DQogICAgICAgICAgICAgICAgKythY2NlcHRzOw0KICAgICAgICAgICAg fQ0KICAgICAgICAgICAgdG9rZW4gPSAoKmFjY2VwdHMpID8gYXBfZ2V0X3Rv a2VuKHItPnBvb2wsICZhY2NlcHRzLCAwKSA6IE5VTEw7DQogICAgICAgIH0N Cg0KICAgICAgICAvKiBObyBhY2NlcHRhYmxlIHRva2VuIGZvdW5kLiAqLw0K ICAgICAgICBpZiAodG9rZW4gPT0gTlVMTCB8fCB0b2tlblswXSA9PSAnXDAn KSB7DQogICAgICAgICAgICBhcF9yZW1vdmVfb3V0cHV0X2ZpbHRlcihmKTsN CiAgICAgICAgICAgIHJldHVybiBhcF9wYXNzX2JyaWdhZGUoZi0+bmV4dCwg YmIpOw0KICAgICAgICB9DQoNCiAgICAgICAgLyogV2UncmUgY29vbCB3aXRo IGZpbHRlcmluZyB0aGlzLiAqLw0KICAgICAgICBjdHggPSBmLT5jdHggPSBh cHJfcGNhbGxvYyhyLT5wb29sLCBzaXplb2YoKmN0eCkpOw0KICAgICAgICBj dHgtPmJiID0gYXByX2JyaWdhZGVfY3JlYXRlKHItPnBvb2wsIGYtPmMtPmJ1 Y2tldF9hbGxvYyk7DQogICAgICAgIGN0eC0+YnVmZmVyID0gYXByX3BhbGxv YyhyLT5wb29sLCBjLT5idWZmZXJTaXplKTsNCg0KICAgICAgICB6UkMgPSBk ZWZsYXRlSW5pdDIoJmN0eC0+c3RyZWFtLCBjLT5jb21wcmVzc2lvbmxldmVs LCBaX0RFRkxBVEVELA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgYy0+ d2luZG93U2l6ZSwgYy0+bWVtbGV2ZWwsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICBaX0RFRkFVTFRfU1RSQVRFR1kpOw0KDQogICAgICAgIGlmICh6 UkMgIT0gWl9PSykgew0KICAgICAgICAgICAgZi0+Y3R4ID0gTlVMTDsNCiAg ICAgICAgICAgIGFwX2xvZ19yZXJyb3IoQVBMT0dfTUFSSywgQVBMT0dfRVJS LCAwLCByLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAidW5hYmxlIHRv IGluaXQgWmxpYjogIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVm bGF0ZUluaXQyIHJldHVybmVkICVkOiBVUkwgJXMiLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICB6UkMsIHItPnVyaSk7DQogICAgICAgICAgICByZXR1 cm4gYXBfcGFzc19icmlnYWRlKGYtPm5leHQsIGJiKTsNCiAgICAgICAgfQ0K DQogICAgICAgIC8qIFJGQyAxOTUyIFNlY3Rpb24gMi4zIGRpY3RhdGVzIHRo ZSBnemlwIGhlYWRlcjoNCiAgICAgICAgICoNCiAgICAgICAgICogKy0tLSst LS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSsNCiAgICAgICAg ICogfElEMXxJRDJ8Q00gfEZMR3wgICAgIE1USU1FICAgICB8WEZMfE9TIHwN CiAgICAgICAgICogKy0tLSstLS0rLS0tKy0tLSstLS0rLS0tKy0tLSstLS0r LS0tKy0tLSsNCiAgICAgICAgICoNCiAgICAgICAgICogSWYgd2Ugd2lzaCB0 byBwb3B1bGF0ZSBpbiBNVElNRSAoYXMgaGludGVkIGluIFJGQyAxOTUyKSwg ZG86DQogICAgICAgICAqIHB1dExvbmcoZGF0ZV9hcnJheSwgYXByX3RpbWVf bm93KCkgLyBBUFJfVVNFQ19QRVJfU0VDKTsNCiAgICAgICAgICogd2hlcmUg ZGF0ZV9hcnJheSBpcyBhIGNoYXJbNF0gYW5kIHRoZW4gcHJpbnQgZGF0ZV9h cnJheSBpbiB0aGUNCiAgICAgICAgICogTVRJTUUgcG9zaXRpb24uICBXQVJO SU5HOiBFTkRJQU5ORVNTIElTU1VFIEhFUkUuDQogICAgICAgICAqLw0KICAg ICAgICBidWYgPSBhcHJfcHNwcmludGYoci0+cG9vbCwgIiVjJWMlYyVjJWMl YyVjJWMlYyVjIiwgZGVmbGF0ZV9tYWdpY1swXSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRlZmxhdGVfbWFnaWNbMV0sIFpfREVGTEFURUQsIDAg LyogZmxhZ3MgKi8sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAw LCAwLCAwIC8qIDQgY2hhcnMgZm9yIG10aW1lICovLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgMCAvKiB4ZmxhZ3MgKi8sIE9TX0NPREUpOw0KICAg ICAgICBlID0gYXByX2J1Y2tldF9wb29sX2NyZWF0ZShidWYsIDEwLCByLT5w b29sLCBmLT5jLT5idWNrZXRfYWxsb2MpOw0KICAgICAgICBBUFJfQlJJR0FE RV9JTlNFUlRfVEFJTChjdHgtPmJiLCBlKTsNCg0KICAgICAgICAvKiBJZiB0 aGUgZW50aXJlIENvbnRlbnQtRW5jb2RpbmcgaXMgImlkZW50aXR5Iiwgd2Ug Y2FuIHJlcGxhY2UgaXQuICovDQogICAgICAgIGlmICghZW5jb2RpbmcgfHwg IXN0cmNhc2VjbXAoZW5jb2RpbmcsICJpZGVudGl0eSIpKSB7DQogICAgICAg ICAgICBhcHJfdGFibGVfc2V0bihyLT5oZWFkZXJzX291dCwgIkNvbnRlbnQt RW5jb2RpbmciLCAiZ3ppcCIpOw0KICAgICAgICB9DQogICAgICAgIGVsc2Ug ew0KICAgICAgICAgICAgYXByX3RhYmxlX21lcmdlbihyLT5oZWFkZXJzX291 dCwgIkNvbnRlbnQtRW5jb2RpbmciLCAiZ3ppcCIpOw0KICAgICAgICB9DQog ICAgICAgIGFwcl90YWJsZV91bnNldChyLT5oZWFkZXJzX291dCwgIkNvbnRl bnQtTGVuZ3RoIik7DQoNCiAgICAgICAgLyogaW5pdGlhbGl6ZSBkZWZsYXRl IG91dHB1dCBidWZmZXIgKi8NCiAgICAgICAgY3R4LT5zdHJlYW0ubmV4dF9v dXQgPSBjdHgtPmJ1ZmZlcjsNCiAgICAgICAgY3R4LT5zdHJlYW0uYXZhaWxf b3V0ID0gYy0+YnVmZmVyU2l6ZTsNCiAgICB9DQogICAgDQogICAgQVBSX0JS SUdBREVfRk9SRUFDSChlLCBiYikgew0KICAgICAgICBjb25zdCBjaGFyICpk YXRhOw0KICAgICAgICBhcHJfYnVja2V0ICpiOw0KICAgICAgICBhcHJfc2l6 ZV90IGxlbjsNCg0KICAgICAgICBpbnQgZG9uZSA9IDA7DQoNCiAgICAgICAg aWYgKEFQUl9CVUNLRVRfSVNfRU9TKGUpKSB7DQogICAgICAgICAgICBjaGFy ICpidWY7DQogICAgICAgICAgICB1bnNpZ25lZCBpbnQgZGVmbGF0ZV9sZW47 DQoNCiAgICAgICAgICAgIGN0eC0+c3RyZWFtLmF2YWlsX2luID0gMDsgLyog c2hvdWxkIGJlIHplcm8gYWxyZWFkeSBhbnl3YXkgKi8NCiAgICAgICAgICAg IGZvciAoOzspIHsNCiAgICAgICAgICAgICAgICBkZWZsYXRlX2xlbiA9IGMt PmJ1ZmZlclNpemUgLSBjdHgtPnN0cmVhbS5hdmFpbF9vdXQ7DQoNCiAgICAg ICAgICAgICAgICBpZiAoZGVmbGF0ZV9sZW4gIT0gMCkgew0KICAgICAgICAg ICAgICAgICAgICBiID0gYXByX2J1Y2tldF9oZWFwX2NyZWF0ZSgoY2hhciAq KWN0eC0+YnVmZmVyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZWZsYXRlX2xlbiwgTlVMTCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZi0+Yy0+ YnVja2V0X2FsbG9jKTsNCiAgICAgICAgICAgICAgICAgICAgQVBSX0JSSUdB REVfSU5TRVJUX1RBSUwoY3R4LT5iYiwgYik7DQogICAgICAgICAgICAgICAg ICAgIGN0eC0+c3RyZWFtLm5leHRfb3V0ID0gY3R4LT5idWZmZXI7DQogICAg ICAgICAgICAgICAgICAgIGN0eC0+c3RyZWFtLmF2YWlsX291dCA9IGMtPmJ1 ZmZlclNpemU7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg ICAgaWYgKGRvbmUpIHsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQog ICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgelJDID0gZGVm bGF0ZSgmY3R4LT5zdHJlYW0sIFpfRklOSVNIKTsNCg0KICAgICAgICAgICAg ICAgIGlmIChkZWZsYXRlX2xlbiA9PSAwICYmIHpSQyA9PSBaX0JVRl9FUlJP Uikgew0KICAgICAgICAgICAgICAgICAgICB6UkMgPSBaX09LOw0KICAgICAg ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGRvbmUgPSAoY3R4LT5z dHJlYW0uYXZhaWxfb3V0ICE9IDAgfHwgelJDID09IFpfU1RSRUFNX0VORCk7 DQoNCiAgICAgICAgICAgICAgICBpZiAoelJDICE9IFpfT0sgJiYgelJDICE9 IFpfU1RSRUFNX0VORCkgew0KICAgICAgICAgICAgICAgICAgICBicmVhazsN CiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAgICAgICAg ICAgIGJ1ZiA9IGFwcl9wYWxsb2Moci0+cG9vbCwgOCk7DQogICAgICAgICAg ICBwdXRMb25nKCh1bnNpZ25lZCBjaGFyICopJmJ1ZlswXSwgY3R4LT5jcmMp Ow0KICAgICAgICAgICAgcHV0TG9uZygodW5zaWduZWQgY2hhciAqKSZidWZb NF0sIGN0eC0+c3RyZWFtLnRvdGFsX2luKTsNCg0KICAgICAgICAgICAgYiA9 IGFwcl9idWNrZXRfcG9vbF9jcmVhdGUoYnVmLCA4LCByLT5wb29sLCBmLT5j LT5idWNrZXRfYWxsb2MpOw0KICAgICAgICAgICAgQVBSX0JSSUdBREVfSU5T RVJUX1RBSUwoY3R4LT5iYiwgYik7DQogICAgICAgICAgICBhcF9sb2dfcmVy cm9yKEFQTE9HX01BUkssIEFQTE9HX0RFQlVHLCAwLCByLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAiWmxpYjogQ29tcHJlc3NlZCAlbGQgdG8gJWxk IDogVVJMICVzIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5z dHJlYW0udG90YWxfaW4sIGN0eC0+c3RyZWFtLnRvdGFsX291dCwgci0+dXJp KTsNCg0KICAgICAgICAgICAgLyogbGVhdmUgbm90ZXMgZm9yIGxvZ2dpbmcg Ki8NCiAgICAgICAgICAgIGlmIChjLT5ub3RlX2lucHV0X25hbWUpIHsNCiAg ICAgICAgICAgICAgICBhcHJfdGFibGVfc2V0bihyLT5ub3RlcywgYy0+bm90 ZV9pbnB1dF9uYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjdHgtPnN0cmVhbS50b3RhbF9pbiA+IDApDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgID8gYXByX29mZl90X3RvYShyLT5wb29sLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y3R4LT5zdHJlYW0udG90YWxfaW4pDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogIi0iKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAg ICAgaWYgKGMtPm5vdGVfb3V0cHV0X25hbWUpIHsNCiAgICAgICAgICAgICAg ICBhcHJfdGFibGVfc2V0bihyLT5ub3RlcywgYy0+bm90ZV9vdXRwdXRfbmFt ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY3R4LT5zdHJl YW0udG90YWxfaW4gPiAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA/IGFwcl9vZmZfdF90b2Eoci0+cG9vbCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+c3RyZWFt LnRvdGFsX291dCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OiAiLSIpOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoYy0+ bm90ZV9yYXRpb19uYW1lKSB7DQogICAgICAgICAgICAgICAgYXByX3RhYmxl X3NldG4oci0+bm90ZXMsIGMtPm5vdGVfcmF0aW9fbmFtZSwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoY3R4LT5zdHJlYW0udG90YWxfaW4g PiAwKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGFwcl9p dG9hKHItPnBvb2wsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGludCkoY3R4LT5zdHJlYW0udG90YWxfb3V0DQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KiAxMDANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAvIGN0eC0+c3RyZWFtLnRvdGFsX2luKSkNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiAiLSIpOw0KICAgICAgICAgICAg fQ0KDQogICAgICAgICAgICBkZWZsYXRlRW5kKCZjdHgtPnN0cmVhbSk7DQoN CiAgICAgICAgICAgIC8qIFJlbW92ZSBFT1MgZnJvbSB0aGUgb2xkIGxpc3Qs IGFuZCBpbnNlcnQgaW50byB0aGUgbmV3LiAqLw0KICAgICAgICAgICAgQVBS X0JVQ0tFVF9SRU1PVkUoZSk7DQogICAgICAgICAgICBBUFJfQlJJR0FERV9J TlNFUlRfVEFJTChjdHgtPmJiLCBlKTsNCg0KICAgICAgICAgICAgLyogT2th eSwgd2UndmUgc2VlbiB0aGUgRU9TLg0KICAgICAgICAgICAgICogVGltZSB0 byBwYXNzIGl0IGFsb25nIGRvd24gdGhlIGNoYWluLg0KICAgICAgICAgICAg ICovDQogICAgICAgICAgICByZXR1cm4gYXBfcGFzc19icmlnYWRlKGYtPm5l eHQsIGN0eC0+YmIpOw0KICAgICAgICB9DQoNCiAgICAgICAgaWYgKEFQUl9C VUNLRVRfSVNfRkxVU0goZSkpIHsNCiAgICAgICAgICAgIGFwcl9idWNrZXQg KmJrdDsNCiAgICAgICAgICAgIGFwcl9zdGF0dXNfdCBydjsNCiAgICAgICAg ICAgIGlmIChjdHgtPnN0cmVhbS5hdmFpbF9pbiA+IDApIHsNCiAgICAgICAg ICAgICAgICB6UkMgPSBkZWZsYXRlKCYoY3R4LT5zdHJlYW0pLCBaX1NZTkNf RkxVU0gpOw0KICAgICAgICAgICAgICAgIGlmICh6UkMgIT0gWl9PSykgew0K ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVBSX0VHRU5FUkFMOw0KICAg ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg Y3R4LT5zdHJlYW0ubmV4dF9vdXQgPSBjdHgtPmJ1ZmZlcjsNCiAgICAgICAg ICAgIGxlbiA9IGMtPmJ1ZmZlclNpemUgLSBjdHgtPnN0cmVhbS5hdmFpbF9v dXQ7DQoNCiAgICAgICAgICAgIGIgPSBhcHJfYnVja2V0X2hlYXBfY3JlYXRl KChjaGFyICopY3R4LT5idWZmZXIsIGxlbiwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGYtPmMtPmJ1Y2tldF9hbGxv Yyk7DQogICAgICAgICAgICBBUFJfQlJJR0FERV9JTlNFUlRfVEFJTChjdHgt PmJiLCBiKTsNCiAgICAgICAgICAgIGN0eC0+c3RyZWFtLmF2YWlsX291dCA9 IGMtPmJ1ZmZlclNpemU7DQoNCiAgICAgICAgICAgIGJrdCA9IGFwcl9idWNr ZXRfZmx1c2hfY3JlYXRlKGYtPmMtPmJ1Y2tldF9hbGxvYyk7DQogICAgICAg ICAgICBBUFJfQlJJR0FERV9JTlNFUlRfVEFJTChjdHgtPmJiLCBia3QpOw0K ICAgICAgICAgICAgcnYgPSBhcF9wYXNzX2JyaWdhZGUoZi0+bmV4dCwgY3R4 LT5iYik7DQogICAgICAgICAgICBpZiAocnYgIT0gQVBSX1NVQ0NFU1MpIHsN CiAgICAgICAgICAgICAgICByZXR1cm4gcnY7DQogICAgICAgICAgICB9DQog ICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC8q IHJlYWQgKi8NCiAgICAgICAgYXByX2J1Y2tldF9yZWFkKGUsICZkYXRhLCAm bGVuLCBBUFJfQkxPQ0tfUkVBRCk7DQoNCiAgICAgICAgLyogVGhpcyBjcmMz MiBmdW5jdGlvbiBpcyBmcm9tIHpsaWIuICovDQogICAgICAgIGN0eC0+Y3Jj ID0gY3JjMzIoY3R4LT5jcmMsIChjb25zdCBCeXRlZiAqKWRhdGEsIGxlbik7 DQoNCiAgICAgICAgLyogd3JpdGUgKi8NCiAgICAgICAgY3R4LT5zdHJlYW0u bmV4dF9pbiA9ICh1bnNpZ25lZCBjaGFyICopZGF0YTsgLyogV2UganVzdCBs b3N0IGNvbnN0LW5lc3MsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqIGJ1dCB3ZSdsbCBqdXN0IGhh dmUgdG8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICogdHJ1c3QgemxpYiAqLw0KICAgICAgICBjdHgt PnN0cmVhbS5hdmFpbF9pbiA9IGxlbjsNCg0KICAgICAgICB3aGlsZSAoY3R4 LT5zdHJlYW0uYXZhaWxfaW4gIT0gMCkgew0KICAgICAgICAgICAgaWYgKGN0 eC0+c3RyZWFtLmF2YWlsX291dCA9PSAwKSB7DQogICAgICAgICAgICAgICAg YXByX3N0YXR1c190IHJ2Ow0KDQogICAgICAgICAgICAgICAgY3R4LT5zdHJl YW0ubmV4dF9vdXQgPSBjdHgtPmJ1ZmZlcjsNCiAgICAgICAgICAgICAgICBs ZW4gPSBjLT5idWZmZXJTaXplIC0gY3R4LT5zdHJlYW0uYXZhaWxfb3V0Ow0K DQogICAgICAgICAgICAgICAgYiA9IGFwcl9idWNrZXRfaGVhcF9jcmVhdGUo KGNoYXIgKiljdHgtPmJ1ZmZlciwgbGVuLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGYtPmMtPmJ1Y2tldF9h bGxvYyk7DQogICAgICAgICAgICAgICAgQVBSX0JSSUdBREVfSU5TRVJUX1RB SUwoY3R4LT5iYiwgYik7DQogICAgICAgICAgICAgICAgY3R4LT5zdHJlYW0u YXZhaWxfb3V0ID0gYy0+YnVmZmVyU2l6ZTsNCiAgICAgICAgICAgICAgICAv KiBTZW5kIHdoYXQgd2UgaGF2ZSByaWdodCBub3cgdG8gdGhlIG5leHQgZmls dGVyLiAqLw0KICAgICAgICAgICAgICAgIHJ2ID0gYXBfcGFzc19icmlnYWRl KGYtPm5leHQsIGN0eC0+YmIpOw0KICAgICAgICAgICAgICAgIGlmIChydiAh PSBBUFJfU1VDQ0VTUykgew0KICAgICAgICAgICAgICAgICAgICByZXR1cm4g cnY7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KDQogICAg ICAgICAgICB6UkMgPSBkZWZsYXRlKCYoY3R4LT5zdHJlYW0pLCBaX05PX0ZM VVNIKTsNCg0KICAgICAgICAgICAgaWYgKHpSQyAhPSBaX09LKQ0KICAgICAg ICAgICAgICAgIHJldHVybiBBUFJfRUdFTkVSQUw7DQogICAgICAgIH0NCiAg ICB9DQoNCiAgICBhcHJfYnJpZ2FkZV9jbGVhbnVwKGJiKTsNCiAgICByZXR1 cm4gQVBSX1NVQ0NFU1M7DQp9DQojZW5kaWYNCg0KDQovKiBUaGlzIGlzIHRo ZSBkZWZsYXRlIGlucHV0IGZpbHRlciAoaW5mbGF0ZXMpLiAgKi8NCnN0YXRp YyBhcHJfc3RhdHVzX3QgZGVmbGF0ZV9pbl9maWx0ZXIoYXBfZmlsdGVyX3Qg KmYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFw cl9idWNrZXRfYnJpZ2FkZSAqYmIsDQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFwX2lucHV0X21vZGVfdCBtb2RlLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHJfcmVhZF90eXBl X2UgYmxvY2ssDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGFwcl9vZmZfdCByZWFkYnl0ZXMpDQp7DQogICAgYXByX2J1Y2tldCAq Ymt0Ow0KICAgIHJlcXVlc3RfcmVjICpyID0gZi0+cjsNCiAgICBkZWZsYXRl X2N0eCAqY3R4ID0gZi0+Y3R4Ow0KICAgIGludCB6UkM7DQogICAgYXByX3N0 YXR1c190IHJ2Ow0KICAgIGRlZmxhdGVfZmlsdGVyX2NvbmZpZyAqYzsNCg0K ICAgIC8qIGp1c3QgZ2V0IG91dCBvZiB0aGUgd2F5IG9mIHRoaW5ncyB3ZSBk b24ndCB3YW50LiAqLw0KICAgIGlmIChtb2RlICE9IEFQX01PREVfUkVBREJZ VEVTKSB7DQogICAgICAgIHJldHVybiBhcF9nZXRfYnJpZ2FkZShmLT5uZXh0 LCBiYiwgbW9kZSwgYmxvY2ssIHJlYWRieXRlcyk7DQogICAgfQ0KDQogICAg YyA9IGFwX2dldF9tb2R1bGVfY29uZmlnKHItPnNlcnZlci0+bW9kdWxlX2Nv bmZpZywgJmRlZmxhdGVfbW9kdWxlKTsNCg0KICAgIGlmICghY3R4KSB7DQog ICAgICAgIGludCBmb3VuZCA9IDA7DQogICAgICAgIGNoYXIgKnRva2VuLCBk ZWZsYXRlX2hkclsxMF07DQogICAgICAgIGNvbnN0IGNoYXIgKmVuY29kaW5n Ow0KICAgICAgICBhcHJfc2l6ZV90IGxlbjsNCg0KICAgICAgICAvKiBvbmx5 IHdvcmsgb24gbWFpbiByZXF1ZXN0L25vIHN1YnJlcXVlc3RzICovDQogICAg ICAgIGlmIChyLT5tYWluKSB7DQogICAgICAgICAgICBhcF9yZW1vdmVfaW5w dXRfZmlsdGVyKGYpOw0KICAgICAgICAgICAgcmV0dXJuIGFwX2dldF9icmln YWRlKGYtPm5leHQsIGJiLCBtb2RlLCBibG9jaywgcmVhZGJ5dGVzKTsNCiAg ICAgICAgfQ0KDQogICAgICAgIC8qIExldCdzIHNlZSB3aGF0IG91ciBjdXJy ZW50IENvbnRlbnQtRW5jb2RpbmcgaXMuDQogICAgICAgICAqIElmIGd6aXAg aXMgcHJlc2VudCwgZG9uJ3QgZ3ppcCBhZ2Fpbi4gIChXZSBjb3VsZCwgYnV0 IGxldCdzIG5vdC4pDQogICAgICAgICAqLw0KICAgICAgICBlbmNvZGluZyA9 IGFwcl90YWJsZV9nZXQoci0+aGVhZGVyc19pbiwgIkNvbnRlbnQtRW5jb2Rp bmciKTsNCiAgICAgICAgaWYgKGVuY29kaW5nKSB7DQogICAgICAgICAgICBj b25zdCBjaGFyICp0bXAgPSBlbmNvZGluZzsNCg0KICAgICAgICAgICAgdG9r ZW4gPSBhcF9nZXRfdG9rZW4oci0+cG9vbCwgJnRtcCwgMCk7DQogICAgICAg ICAgICB3aGlsZSAodG9rZW4gJiYgdG9rZW5bMF0pIHsNCiAgICAgICAgICAg ICAgICBpZiAoIXN0cmNhc2VjbXAodG9rZW4sICJnemlwIikpIHsNCiAgICAg ICAgICAgICAgICAgICAgZm91bmQgPSAxOw0KICAgICAgICAgICAgICAgICAg ICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg LyogT3RoZXJ3aXNlLCBza2lwIHRva2VuICovDQogICAgICAgICAgICAgICAg dG1wKys7DQogICAgICAgICAgICAgICAgdG9rZW4gPSBhcF9nZXRfdG9rZW4o ci0+cG9vbCwgJnRtcCwgMCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0N Cg0KICAgICAgICBpZiAoZm91bmQgPT0gMCkgew0KICAgICAgICAgICAgYXBf cmVtb3ZlX2lucHV0X2ZpbHRlcihmKTsNCiAgICAgICAgICAgIHJldHVybiBh cF9nZXRfYnJpZ2FkZShmLT5uZXh0LCBiYiwgbW9kZSwgYmxvY2ssIHJlYWRi eXRlcyk7DQogICAgICAgIH0NCg0KICAgICAgICBmLT5jdHggPSBjdHggPSBh cHJfcGNhbGxvYyhmLT5yLT5wb29sLCBzaXplb2YoKmN0eCkpOw0KICAgICAg ICBjdHgtPmJiID0gYXByX2JyaWdhZGVfY3JlYXRlKHItPnBvb2wsIGYtPmMt PmJ1Y2tldF9hbGxvYyk7DQogICAgICAgIGN0eC0+cHJvY19iYiA9IGFwcl9i cmlnYWRlX2NyZWF0ZShyLT5wb29sLCBmLT5jLT5idWNrZXRfYWxsb2MpOw0K ICAgICAgICBjdHgtPmJ1ZmZlciA9IGFwcl9wYWxsb2Moci0+cG9vbCwgYy0+ YnVmZmVyU2l6ZSk7DQoNCiAgICAgICAgcnYgPSBhcF9nZXRfYnJpZ2FkZShm LT5uZXh0LCBjdHgtPmJiLCBBUF9NT0RFX1JFQURCWVRFUywgYmxvY2ssIDEw KTsNCiAgICAgICAgaWYgKHJ2ICE9IEFQUl9TVUNDRVNTKSB7DQogICAgICAg ICAgICByZXR1cm4gcnY7DQogICAgICAgIH0NCg0KICAgICAgICBsZW4gPSAx MDsgDQogICAgICAgIHJ2ID0gYXByX2JyaWdhZGVfZmxhdHRlbihjdHgtPmJi LCBkZWZsYXRlX2hkciwgJmxlbik7IA0KICAgICAgICBpZiAocnYgIT0gQVBS X1NVQ0NFU1MpIHsNCiAgICAgICAgICAgIHJldHVybiBydjsNCiAgICAgICAg fQ0KDQogICAgICAgIC8qIFdlIGRpZG4ndCBnZXQgdGhlIG1hZ2ljIGJ5dGVz LiAqLw0KICAgICAgICBpZiAobGVuICE9IDEwIHx8DQogICAgICAgICAgICBk ZWZsYXRlX2hkclswXSAhPSBkZWZsYXRlX21hZ2ljWzBdIHx8DQogICAgICAg ICAgICBkZWZsYXRlX2hkclsxXSAhPSBkZWZsYXRlX21hZ2ljWzFdKSB7DQog ICAgICAgICAgICByZXR1cm4gQVBSX0VHRU5FUkFMOw0KICAgICAgICB9DQoN CiAgICAgICAgLyogV2UgY2FuJ3QgaGFuZGxlIGZsYWdzIGZvciBub3cuICov DQogICAgICAgIGlmIChkZWZsYXRlX2hkclszXSAhPSAwKSB7DQogICAgICAg ICAgICByZXR1cm4gQVBSX0VHRU5FUkFMOw0KICAgICAgICB9DQoNCiAgICAg ICAgelJDID0gaW5mbGF0ZUluaXQyKCZjdHgtPnN0cmVhbSwgYy0+d2luZG93 U2l6ZSk7DQoNCiAgICAgICAgaWYgKHpSQyAhPSBaX09LKSB7DQogICAgICAg ICAgICBmLT5jdHggPSBOVUxMOw0KICAgICAgICAgICAgaW5mbGF0ZUVuZCgm Y3R4LT5zdHJlYW0pOw0KICAgICAgICAgICAgYXBfbG9nX3JlcnJvcihBUExP R19NQVJLLCBBUExPR19FUlIsIDAsIHIsDQogICAgICAgICAgICAgICAgICAg ICAgICAgICJ1bmFibGUgdG8gaW5pdCBabGliOiAiDQogICAgICAgICAgICAg ICAgICAgICAgICAgICJpbmZsYXRlSW5pdDIgcmV0dXJuZWQgJWQ6IFVSTCAl cyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgIHpSQywgci0+dXJpKTsN CiAgICAgICAgICAgIGFwX3JlbW92ZV9pbnB1dF9maWx0ZXIoZik7DQogICAg ICAgICAgICByZXR1cm4gYXBfZ2V0X2JyaWdhZGUoZi0+bmV4dCwgYmIsIG1v ZGUsIGJsb2NrLCByZWFkYnl0ZXMpOw0KICAgICAgICB9DQoNCiAgICAgICAg LyogaW5pdGlhbGl6ZSBkZWZsYXRlIG91dHB1dCBidWZmZXIgKi8NCiAgICAg ICAgY3R4LT5zdHJlYW0ubmV4dF9vdXQgPSBjdHgtPmJ1ZmZlcjsNCiAgICAg ICAgY3R4LT5zdHJlYW0uYXZhaWxfb3V0ID0gYy0+YnVmZmVyU2l6ZTsNCg0K ICAgICAgICBhcHJfYnJpZ2FkZV9jbGVhbnVwKGN0eC0+YmIpOw0KICAgIH0N Cg0KICAgIGlmIChBUFJfQlJJR0FERV9FTVBUWShjdHgtPnByb2NfYmIpKSB7 DQogICAgICAgIHJ2ID0gYXBfZ2V0X2JyaWdhZGUoZi0+bmV4dCwgY3R4LT5i YiwgbW9kZSwgYmxvY2ssIHJlYWRieXRlcyk7DQoNCiAgICAgICAgaWYgKHJ2 ICE9IEFQUl9TVUNDRVNTKSB7DQogICAgICAgICAgICAvKiBXaGF0IGFib3V0 IEFQUl9FQUdBSU4gZXJyb3JzPyAqLw0KICAgICAgICAgICAgaW5mbGF0ZUVu ZCgmY3R4LT5zdHJlYW0pOw0KICAgICAgICAgICAgcmV0dXJuIHJ2Ow0KICAg ICAgICB9DQoNCiAgICAgICAgQVBSX0JSSUdBREVfRk9SRUFDSChia3QsIGN0 eC0+YmIpIHsNCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGE7DQogICAg ICAgICAgICBhcHJfc2l6ZV90IGxlbjsNCg0KICAgICAgICAgICAgLyogSWYg d2UgYWN0dWFsbHkgc2VlIHRoZSBFT1MsIHRoYXQgbWVhbnMgd2Ugc2NyZXdl ZCB1cCEgKi8NCiAgICAgICAgICAgIGlmIChBUFJfQlVDS0VUX0lTX0VPUyhi a3QpKSB7DQogICAgICAgICAgICAgICAgaW5mbGF0ZUVuZCgmY3R4LT5zdHJl YW0pOw0KICAgICAgICAgICAgICAgIHJldHVybiBBUFJfRUdFTkVSQUw7DQog ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmIChBUFJfQlVDS0VUX0lT X0ZMVVNIKGJrdCkpIHsNCiAgICAgICAgICAgICAgICBhcHJfYnVja2V0ICp0 bXBfaGVhcDsNCiAgICAgICAgICAgICAgICB6UkMgPSBpbmZsYXRlKCYoY3R4 LT5zdHJlYW0pLCBaX1NZTkNfRkxVU0gpOw0KICAgICAgICAgICAgICAgIGlm ICh6UkMgIT0gWl9PSykgew0KICAgICAgICAgICAgICAgICAgICBpbmZsYXRl RW5kKCZjdHgtPnN0cmVhbSk7DQogICAgICAgICAgICAgICAgICAgIHJldHVy biBBUFJfRUdFTkVSQUw7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAg ICAgICAgICAgY3R4LT5zdHJlYW0ubmV4dF9vdXQgPSBjdHgtPmJ1ZmZlcjsN CiAgICAgICAgICAgICAgICBsZW4gPSBjLT5idWZmZXJTaXplIC0gY3R4LT5z dHJlYW0uYXZhaWxfb3V0Ow0KDQogICAgICAgICAgICAgICAgY3R4LT5jcmMg PSBjcmMzMihjdHgtPmNyYywgKGNvbnN0IEJ5dGVmICopY3R4LT5idWZmZXIs IGxlbik7DQogICAgICAgICAgICAgICAgdG1wX2hlYXAgPSBhcHJfYnVja2V0 X2hlYXBfY3JlYXRlKChjaGFyICopY3R4LT5idWZmZXIsIGxlbiwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO VUxMLCBmLT5jLT5idWNrZXRfYWxsb2MpOw0KICAgICAgICAgICAgICAgIEFQ Ul9CUklHQURFX0lOU0VSVF9UQUlMKGN0eC0+cHJvY19iYiwgdG1wX2hlYXAp Ow0KICAgICAgICAgICAgICAgIGN0eC0+c3RyZWFtLmF2YWlsX291dCA9IGMt PmJ1ZmZlclNpemU7DQoNCiAgICAgICAgICAgICAgICAvKiBNb3ZlIGV2ZXJ5 dGhpbmcgdG8gdGhlIHJldHVybmluZyBicmlnYWRlLiAqLw0KICAgICAgICAg ICAgICAgIEFQUl9CVUNLRVRfUkVNT1ZFKGJrdCk7DQogICAgICAgICAgICAg ICAgQVBSX0JSSUdBREVfQ09OQ0FUKGJiLCBjdHgtPmJiKTsNCiAgICAgICAg ICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg LyogcmVhZCAqLw0KICAgICAgICAgICAgYXByX2J1Y2tldF9yZWFkKGJrdCwg JmRhdGEsICZsZW4sIEFQUl9CTE9DS19SRUFEKTsNCg0KICAgICAgICAgICAg LyogcGFzcyB0aHJvdWdoIHpsaWIgaW5mbGF0ZS4gKi8NCiAgICAgICAgICAg IGN0eC0+c3RyZWFtLm5leHRfaW4gPSAodW5zaWduZWQgY2hhciAqKWRhdGE7 DQogICAgICAgICAgICBjdHgtPnN0cmVhbS5hdmFpbF9pbiA9IGxlbjsNCg0K ICAgICAgICAgICAgelJDID0gWl9PSzsNCg0KICAgICAgICAgICAgd2hpbGUg KGN0eC0+c3RyZWFtLmF2YWlsX2luICE9IDApIHsNCiAgICAgICAgICAgICAg ICBpZiAoY3R4LT5zdHJlYW0uYXZhaWxfb3V0ID09IDApIHsNCiAgICAgICAg ICAgICAgICAgICAgYXByX2J1Y2tldCAqdG1wX2hlYXA7DQogICAgICAgICAg ICAgICAgICAgIGN0eC0+c3RyZWFtLm5leHRfb3V0ID0gY3R4LT5idWZmZXI7 DQogICAgICAgICAgICAgICAgICAgIGxlbiA9IGMtPmJ1ZmZlclNpemUgLSBj dHgtPnN0cmVhbS5hdmFpbF9vdXQ7DQoNCiAgICAgICAgICAgICAgICAgICAg Y3R4LT5jcmMgPSBjcmMzMihjdHgtPmNyYywgKGNvbnN0IEJ5dGVmICopY3R4 LT5idWZmZXIsIGxlbik7DQogICAgICAgICAgICAgICAgICAgIHRtcF9oZWFw ID0gYXByX2J1Y2tldF9oZWFwX2NyZWF0ZSgoY2hhciAqKWN0eC0+YnVmZmVy LCBsZW4sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOVUxMLCBmLT5jLT5idWNrZXRfYWxsb2MpOw0K ICAgICAgICAgICAgICAgICAgICBBUFJfQlJJR0FERV9JTlNFUlRfVEFJTChj dHgtPnByb2NfYmIsIHRtcF9oZWFwKTsNCiAgICAgICAgICAgICAgICAgICAg Y3R4LT5zdHJlYW0uYXZhaWxfb3V0ID0gYy0+YnVmZmVyU2l6ZTsNCiAgICAg ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICB6UkMgPSBpbmZsYXRl KCZjdHgtPnN0cmVhbSwgWl9OT19GTFVTSCk7DQoNCiAgICAgICAgICAgICAg ICBpZiAoelJDID09IFpfU1RSRUFNX0VORCkgew0KICAgICAgICAgICAgICAg ICAgICBicmVhazsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg ICAgICBpZiAoelJDICE9IFpfT0spIHsNCiAgICAgICAgICAgICAgICAgICAg aW5mbGF0ZUVuZCgmY3R4LT5zdHJlYW0pOw0KICAgICAgICAgICAgICAgICAg ICByZXR1cm4gQVBSX0VHRU5FUkFMOw0KICAgICAgICAgICAgICAgIH0NCiAg ICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmICh6UkMgPT0gWl9TVFJFQU1f RU5EKSB7DQogICAgICAgICAgICAgICAgYXByX2J1Y2tldCAqdG1wX2hlYXAs ICplb3M7DQoNCiAgICAgICAgICAgICAgICBhcF9sb2dfcmVycm9yKEFQTE9H X01BUkssIEFQTE9HX0RFQlVHLCAwLCByLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIlpsaWI6IEluZmxhdGVkICVsZCB0byAlbGQgOiBVUkwg JXMiLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5zdHJl YW0udG90YWxfaW4sIGN0eC0+c3RyZWFtLnRvdGFsX291dCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHItPnVyaSk7DQoNCiAgICAgICAgICAg ICAgICBsZW4gPSBjLT5idWZmZXJTaXplIC0gY3R4LT5zdHJlYW0uYXZhaWxf b3V0Ow0KDQogICAgICAgICAgICAgICAgY3R4LT5jcmMgPSBjcmMzMihjdHgt PmNyYywgKGNvbnN0IEJ5dGVmICopY3R4LT5idWZmZXIsIGxlbik7DQogICAg ICAgICAgICAgICAgdG1wX2hlYXAgPSBhcHJfYnVja2V0X2hlYXBfY3JlYXRl KChjaGFyICopY3R4LT5idWZmZXIsIGxlbiwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgZi0+Yy0+ YnVja2V0X2FsbG9jKTsNCiAgICAgICAgICAgICAgICBBUFJfQlJJR0FERV9J TlNFUlRfVEFJTChjdHgtPnByb2NfYmIsIHRtcF9oZWFwKTsNCiAgICAgICAg ICAgICAgICBjdHgtPnN0cmVhbS5hdmFpbF9vdXQgPSBjLT5idWZmZXJTaXpl Ow0KDQogICAgICAgICAgICAgICAgLyogSXMgdGhlIHJlbWFpbmluZyA4IGJ5 dGVzIGFscmVhZHkgaW4gdGhlIGF2YWlsIHN0cmVhbT8gKi8NCiAgICAgICAg ICAgICAgICBpZiAoY3R4LT5zdHJlYW0uYXZhaWxfaW4gPj0gOCkgew0KICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGNvbXBDUkMsIGNvbXBM ZW47DQogICAgICAgICAgICAgICAgICAgIGNvbXBDUkMgPSBnZXRMb25nKGN0 eC0+c3RyZWFtLm5leHRfaW4pOw0KICAgICAgICAgICAgICAgICAgICBpZiAo Y3R4LT5jcmMgIT0gY29tcENSQykgew0KICAgICAgICAgICAgICAgICAgICAg ICAgaW5mbGF0ZUVuZCgmY3R4LT5zdHJlYW0pOw0KICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIEFQUl9FR0VORVJBTDsNCiAgICAgICAgICAgICAg ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjdHgtPnN0cmVhbS5uZXh0 X2luICs9IDQ7DQogICAgICAgICAgICAgICAgICAgIGNvbXBMZW4gPSBnZXRM b25nKGN0eC0+c3RyZWFtLm5leHRfaW4pOw0KICAgICAgICAgICAgICAgICAg ICBpZiAoY3R4LT5zdHJlYW0udG90YWxfb3V0ICE9IGNvbXBMZW4pIHsNCiAg ICAgICAgICAgICAgICAgICAgICAgIGluZmxhdGVFbmQoJmN0eC0+c3RyZWFt KTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBBUFJfRUdFTkVS QUw7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9 DQogICAgICAgICAgICAgICAgZWxzZSB7DQogICAgICAgICAgICAgICAgICAg IC8qIEZJWE1FOiBXZSBuZWVkIHRvIGdyYWIgdGhlIDggdmVyaWZpY2F0aW9u IGJ5dGVzDQogICAgICAgICAgICAgICAgICAgICAqIGZyb20gdGhlIHdpcmUh ICovDQogICAgICAgICAgICAgICAgICAgIGluZmxhdGVFbmQoJmN0eC0+c3Ry ZWFtKTsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFQUl9FR0VORVJB TDsNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpbmZs YXRlRW5kKCZjdHgtPnN0cmVhbSk7DQoNCiAgICAgICAgICAgICAgICBlb3Mg PSBhcHJfYnVja2V0X2Vvc19jcmVhdGUoZi0+Yy0+YnVja2V0X2FsbG9jKTsN CiAgICAgICAgICAgICAgICBBUFJfQlJJR0FERV9JTlNFUlRfVEFJTChjdHgt PnByb2NfYmIsIGVvcyk7IA0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAg ICAgICAgICAgfQ0KDQogICAgICAgIH0NCiAgICAgICAgYXByX2JyaWdhZGVf Y2xlYW51cChjdHgtPmJiKTsNCiAgICB9DQoNCiAgICAvKiBJZiB3ZSBhcmUg YWJvdXQgdG8gcmV0dXJuIG5vdGhpbmcgZm9yIGEgJ2Jsb2NraW5nJyByZWFk IGFuZCB3ZSBoYXZlDQogICAgICogc29tZSBkYXRhIGluIG91ciB6bGliIGJ1 ZmZlciwgZmx1c2ggaXQgb3V0IHNvIHdlIGNhbiByZXR1cm4gc29tZXRoaW5n Lg0KICAgICAqLw0KICAgIGlmIChibG9jayA9PSBBUFJfQkxPQ0tfUkVBRCAm Jg0KICAgICAgICBBUFJfQlJJR0FERV9FTVBUWShjdHgtPnByb2NfYmIpICYm DQogICAgICAgIGN0eC0+c3RyZWFtLmF2YWlsX291dCA8IGMtPmJ1ZmZlclNp emUpIHsNCiAgICAgICAgYXByX2J1Y2tldCAqdG1wX2hlYXA7DQogICAgICAg IGFwcl9zaXplX3QgbGVuOw0KICAgICAgICBjdHgtPnN0cmVhbS5uZXh0X291 dCA9IGN0eC0+YnVmZmVyOw0KICAgICAgICBsZW4gPSBjLT5idWZmZXJTaXpl IC0gY3R4LT5zdHJlYW0uYXZhaWxfb3V0Ow0KDQogICAgICAgIGN0eC0+Y3Jj ID0gY3JjMzIoY3R4LT5jcmMsIChjb25zdCBCeXRlZiAqKWN0eC0+YnVmZmVy LCBsZW4pOw0KICAgICAgICB0bXBfaGVhcCA9IGFwcl9idWNrZXRfaGVhcF9j cmVhdGUoKGNoYXIgKiljdHgtPmJ1ZmZlciwgbGVuLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgZi0+Yy0+YnVj a2V0X2FsbG9jKTsNCiAgICAgICAgQVBSX0JSSUdBREVfSU5TRVJUX1RBSUwo Y3R4LT5wcm9jX2JiLCB0bXBfaGVhcCk7DQogICAgICAgIGN0eC0+c3RyZWFt LmF2YWlsX291dCA9IGMtPmJ1ZmZlclNpemU7DQogICAgfQ0KDQogICAgaWYg KCFBUFJfQlJJR0FERV9FTVBUWShjdHgtPnByb2NfYmIpKSB7DQogICAgICAg IGFwcl9idWNrZXRfYnJpZ2FkZSAqbmV3YmI7DQoNCiAgICAgICAgLyogTWF5 IHJldHVybiBBUFJfSU5DT01QTEVURSB3aGljaCBpcyBmaW5lIGJ5IHVzLiAq Lw0KICAgICAgICBhcHJfYnJpZ2FkZV9wYXJ0aXRpb24oY3R4LT5wcm9jX2Ji LCByZWFkYnl0ZXMsICZia3QpOw0KDQogICAgICAgIG5ld2JiID0gYXByX2Jy aWdhZGVfc3BsaXQoY3R4LT5wcm9jX2JiLCBia3QpOw0KICAgICAgICBBUFJf QlJJR0FERV9DT05DQVQoYmIsIGN0eC0+cHJvY19iYik7DQogICAgICAgIEFQ Ul9CUklHQURFX0NPTkNBVChjdHgtPnByb2NfYmIsIG5ld2JiKTsNCiAgICB9 DQoNCiAgICByZXR1cm4gQVBSX1NVQ0NFU1M7DQp9DQoNCg0KLyogRmlsdGVy IHRvIGluZmxhdGUgZm9yIGEgY29udGVudC10cmFuc2Zvcm1pbmcgcHJveHku ICAqLw0Kc3RhdGljIGFwcl9zdGF0dXNfdCBpbmZsYXRlX291dF9maWx0ZXIo YXBfZmlsdGVyX3QgKmYsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGFwcl9idWNrZXRfYnJpZ2FkZSAqYmIpDQp7DQogICAgaW50 IGRlZmxhdGVfaW5pdCA9IDEgOw0KICAgIGFwcl9idWNrZXQgKmJrdDsNCiAg ICByZXF1ZXN0X3JlYyAqciA9IGYtPnI7DQogICAgZGVmbGF0ZV9jdHggKmN0 eCA9IGYtPmN0eDsNCiAgICBpbnQgelJDOw0KICAgIGFwcl9zdGF0dXNfdCBy djsNCiAgICBkZWZsYXRlX2ZpbHRlcl9jb25maWcgKmM7DQoNCiAgICBjID0g YXBfZ2V0X21vZHVsZV9jb25maWcoci0+c2VydmVyLT5tb2R1bGVfY29uZmln LCAmZGVmbGF0ZV9tb2R1bGUpOw0KDQogICAgaWYgKCFjdHgpIHsNCiAgICAg ICAgaW50IGZvdW5kID0gMDsNCiAgICAgICAgY2hhciAqdG9rZW4sIGRlZmxh dGVfaGRyWzEwXTsNCiAgICAgICAgY29uc3QgY2hhciAqZW5jb2Rpbmc7DQog ICAgICAgIGFwcl9zaXplX3QgbGVuOw0KDQogICAgICAgIC8qIG9ubHkgd29y ayBvbiBtYWluIHJlcXVlc3Qvbm8gc3VicmVxdWVzdHMgKi8NCiAgICAgICAg aWYgKHItPm1haW4pIHsNCiAgICAgICAgICAgIGFwX3JlbW92ZV9vdXRwdXRf ZmlsdGVyKGYpOw0KICAgICAgICAgICAgcmV0dXJuIGFwX3Bhc3NfYnJpZ2Fk ZShmLT5uZXh0LCBiYik7DQogICAgICAgIH0NCg0KICAgICAgICAvKiBMZXQn cyBzZWUgd2hhdCBvdXIgY3VycmVudCBDb250ZW50LUVuY29kaW5nIGlzLg0K ICAgICAgICAgKiBJZiBnemlwIGlzIHByZXNlbnQsIGRvbid0IGd6aXAgYWdh aW4uICAoV2UgY291bGQsIGJ1dCBsZXQncyBub3QuKQ0KICAgICAgICAgKi8N CiAgICAgICAgZW5jb2RpbmcgPSBhcHJfdGFibGVfZ2V0KHItPmhlYWRlcnNf b3V0LCAiQ29udGVudC1FbmNvZGluZyIpOw0KICAgICAgICBpZiAoZW5jb2Rp bmcpIHsNCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRtcCA9IGVuY29kaW5n Ow0KDQogICAgICAgICAgICB0b2tlbiA9IGFwX2dldF90b2tlbihyLT5wb29s LCAmdG1wLCAwKTsNCiAgICAgICAgICAgIHdoaWxlICh0b2tlbiAmJiB0b2tl blswXSkgew0KICAgICAgICAgICAgICAgIGlmICghc3RyY2FzZWNtcCh0b2tl biwgImd6aXAiKSkgew0KICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IDE7 DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAg IH0NCiAgICAgICAgICAgICAgICAvKiBPdGhlcndpc2UsIHNraXAgdG9rZW4g Ki8NCiAgICAgICAgICAgICAgICB0bXArKzsNCiAgICAgICAgICAgICAgICB0 b2tlbiA9IGFwX2dldF90b2tlbihyLT5wb29sLCAmdG1wLCAwKTsNCiAgICAg ICAgICAgIH0NCiAgICAgICAgfQ0KDQogICAgICAgIGlmIChmb3VuZCA9PSAw KSB7DQogICAgICAgICAgICBhcF9yZW1vdmVfb3V0cHV0X2ZpbHRlcihmKTsN CiAgICAgICAgICAgIHJldHVybiBhcF9wYXNzX2JyaWdhZGUoZi0+bmV4dCwg YmIpOw0KICAgICAgICB9DQoNCiAgICAgICAgZi0+Y3R4ID0gY3R4ID0gYXBy X3BjYWxsb2MoZi0+ci0+cG9vbCwgc2l6ZW9mKCpjdHgpKTsNCiAgICAgICAg Y3R4LT5wcm9jX2JiID0gYXByX2JyaWdhZGVfY3JlYXRlKHItPnBvb2wsIGYt PmMtPmJ1Y2tldF9hbGxvYyk7DQogICAgICAgIGN0eC0+YnVmZmVyID0gYXBy X3BhbGxvYyhyLT5wb29sLCBjLT5idWZmZXJTaXplKTsNCg0KDQogICAgICAg IHpSQyA9IGluZmxhdGVJbml0MigmY3R4LT5zdHJlYW0sIGMtPndpbmRvd1Np emUpOw0KDQogICAgICAgIGlmICh6UkMgIT0gWl9PSykgew0KICAgICAgICAg ICAgZi0+Y3R4ID0gTlVMTDsNCiAgICAgICAgICAgIGluZmxhdGVFbmQoJmN0 eC0+c3RyZWFtKTsNCiAgICAgICAgICAgIGFwX2xvZ19yZXJyb3IoQVBMT0df TUFSSywgQVBMT0dfRVJSLCAwLCByLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAidW5hYmxlIHRvIGluaXQgWmxpYjogIg0KICAgICAgICAgICAgICAg ICAgICAgICAgICAiaW5mbGF0ZUluaXQyIHJldHVybmVkICVkOiBVUkwgJXMi LA0KICAgICAgICAgICAgICAgICAgICAgICAgICB6UkMsIHItPnVyaSk7DQog ICAgICAgICAgICBhcF9yZW1vdmVfb3V0cHV0X2ZpbHRlcihmKTsNCiAgICAg ICAgICAgIHJldHVybiBhcF9wYXNzX2JyaWdhZGUoZi0+bmV4dCwgYmIpOw0K ICAgICAgICB9DQoNCiAgICAgICAgLyogaW5pdGlhbGl6ZSBkZWZsYXRlIG91 dHB1dCBidWZmZXIgKi8NCiAgICAgICAgY3R4LT5zdHJlYW0ubmV4dF9vdXQg PSBjdHgtPmJ1ZmZlcjsNCiAgICAgICAgY3R4LT5zdHJlYW0uYXZhaWxfb3V0 ID0gYy0+YnVmZmVyU2l6ZTsNCg0KIAlkZWZsYXRlX2luaXQgPSAwIDsNCiAg ICB9DQoNCg0KICAgICAgICBBUFJfQlJJR0FERV9GT1JFQUNIKGJrdCwgYmIp IHsNCiAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRhdGE7DQogICAgICAgICAg ICBhcHJfc2l6ZV90IGxlbjsNCg0KICAgICAgICAgICAgLyogSWYgd2UgYWN0 dWFsbHkgc2VlIHRoZSBFT1MsIHRoYXQgbWVhbnMgd2Ugc2NyZXdlZCB1cCEg Ki8NCiAgICAgICAgICAgIGlmIChBUFJfQlVDS0VUX0lTX0VPUyhia3QpKSB7 DQogICAgICAgICAgICAgICAgaW5mbGF0ZUVuZCgmY3R4LT5zdHJlYW0pOw0K ICAgICAgICAgICAgICAgIHJldHVybiBBUFJfRUdFTkVSQUw7DQogICAgICAg ICAgICB9DQoNCiAgICAgICAgICAgIGlmIChBUFJfQlVDS0VUX0lTX0ZMVVNI KGJrdCkpIHsNCiAgICAgICAgICAgICAgICBhcHJfYnVja2V0ICp0bXBfaGVh cDsNCiAgICAgICAgICAgICAgICB6UkMgPSBpbmZsYXRlKCYoY3R4LT5zdHJl YW0pLCBaX1NZTkNfRkxVU0gpOw0KICAgICAgICAgICAgICAgIGlmICh6UkMg IT0gWl9PSykgew0KICAgICAgICAgICAgICAgICAgICBpbmZsYXRlRW5kKCZj dHgtPnN0cmVhbSk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBBUFJf RUdFTkVSQUw7DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg ICAgY3R4LT5zdHJlYW0ubmV4dF9vdXQgPSBjdHgtPmJ1ZmZlcjsNCiAgICAg ICAgICAgICAgICBsZW4gPSBjLT5idWZmZXJTaXplIC0gY3R4LT5zdHJlYW0u YXZhaWxfb3V0Ow0KDQogICAgICAgICAgICAgICAgY3R4LT5jcmMgPSBjcmMz MihjdHgtPmNyYywgKGNvbnN0IEJ5dGVmICopY3R4LT5idWZmZXIsIGxlbik7 DQogICAgICAgICAgICAgICAgdG1wX2hlYXAgPSBhcHJfYnVja2V0X2hlYXBf Y3JlYXRlKChjaGFyICopY3R4LT5idWZmZXIsIGxlbiwNCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBm LT5jLT5idWNrZXRfYWxsb2MpOw0KICAgICAgICAgICAgICAgIEFQUl9CUklH QURFX0lOU0VSVF9UQUlMKGN0eC0+cHJvY19iYiwgdG1wX2hlYXApOw0KICAg ICAgICAgICAgICAgIGN0eC0+c3RyZWFtLmF2YWlsX291dCA9IGMtPmJ1ZmZl clNpemU7DQoNCiAgICAgICAgICAgICAgICAvKiBNb3ZlIGV2ZXJ5dGhpbmcg dG8gdGhlIHJldHVybmluZyBicmlnYWRlLiAqLw0KICAgICAgICAgICAgICAg IEFQUl9CVUNLRVRfUkVNT1ZFKGJrdCk7DQogICAgICAgICAgICAgICAgYnJl YWs7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIC8qIHJlYWQgKi8N CiAgICAgICAgICAgIGFwcl9idWNrZXRfcmVhZChia3QsICZkYXRhLCAmbGVu LCBBUFJfQkxPQ0tfUkVBRCk7DQoNCgkvKiBmaXJzdCBidWNrZXQgY29udGFp bnMgemxpYiBoZWFkZXIgKi8NCgkgICAgaWYgKCAhIGRlZmxhdGVfaW5pdCsr ICkgew0KCSAgICAgIGlmICggbGVuIDwgMTAgKSB7DQogICAgICAgICAgICAg ICAgYXBfbG9nX3JlcnJvcihBUExPR19NQVJLLCBBUExPR19FUlIsIDAsIHIs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSW5zdWZmaWNpZW50 IGRhdGEgZm9yIGluZmxhdGUiKSA7DQoJCXJldHVybiBBUFJfRUdFTkVSQUwg Ow0KCSAgICAgIH0gZWxzZSAgew0KICAgICAgICAgICAgICAgIGlmICgJZGF0 YVswXSAhPSBkZWZsYXRlX21hZ2ljWzBdIHx8DQogICAgICAgICAgICAJCWRh dGFbMV0gIT0gZGVmbGF0ZV9tYWdpY1sxXSkgew0KCQkgICAgYXBfbG9nX3Jl cnJvcihBUExPR19NQVJLLCBBUExPR19FUlIsIDAsIHIsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiZGVmbGF0ZTogYmFkIGhlYWRlciIpIDsN CgkJICAgIHJldHVybiBBUFJfRUdFTkVSQUwgOw0KCQl9DQoJCWRhdGEgKz0g MTAgOw0KCQlsZW4gLT0gMTAgOw0KCSAgICAgIH0NCgkgICAgfQ0KDQogICAg ICAgICAgICAvKiBwYXNzIHRocm91Z2ggemxpYiBpbmZsYXRlLiAqLw0KICAg ICAgICAgICAgY3R4LT5zdHJlYW0ubmV4dF9pbiA9ICh1bnNpZ25lZCBjaGFy ICopZGF0YTsNCiAgICAgICAgICAgIGN0eC0+c3RyZWFtLmF2YWlsX2luID0g bGVuOw0KDQogICAgICAgICAgICB6UkMgPSBaX09LOw0KDQogICAgICAgICAg ICB3aGlsZSAoY3R4LT5zdHJlYW0uYXZhaWxfaW4gIT0gMCkgew0KICAgICAg ICAgICAgICAgIGlmIChjdHgtPnN0cmVhbS5hdmFpbF9vdXQgPT0gMCkgew0K ICAgICAgICAgICAgICAgICAgICBhcHJfYnVja2V0ICp0bXBfaGVhcDsNCiAg ICAgICAgICAgICAgICAgICAgY3R4LT5zdHJlYW0ubmV4dF9vdXQgPSBjdHgt PmJ1ZmZlcjsNCiAgICAgICAgICAgICAgICAgICAgbGVuID0gYy0+YnVmZmVy U2l6ZSAtIGN0eC0+c3RyZWFtLmF2YWlsX291dDsNCg0KICAgICAgICAgICAg ICAgICAgICBjdHgtPmNyYyA9IGNyYzMyKGN0eC0+Y3JjLCAoY29uc3QgQnl0 ZWYgKiljdHgtPmJ1ZmZlciwgbGVuKTsNCiAgICAgICAgICAgICAgICAgICAg dG1wX2hlYXAgPSBhcHJfYnVja2V0X2hlYXBfY3JlYXRlKChjaGFyICopY3R4 LT5idWZmZXIsIGxlbiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGYtPmMtPmJ1Y2tldF9h bGxvYyk7DQogICAgICAgICAgICAgICAgICAgIEFQUl9CUklHQURFX0lOU0VS VF9UQUlMKGN0eC0+cHJvY19iYiwgdG1wX2hlYXApOw0KICAgICAgICAgICAg ICAgICAgICBjdHgtPnN0cmVhbS5hdmFpbF9vdXQgPSBjLT5idWZmZXJTaXpl Ow0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIHpSQyA9 IGluZmxhdGUoJmN0eC0+c3RyZWFtLCBaX05PX0ZMVVNIKTsNCg0KICAgICAg ICAgICAgICAgIGlmICh6UkMgPT0gWl9TVFJFQU1fRU5EKSB7DQogICAgICAg ICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIH0NCg0KICAg ICAgICAgICAgICAgIGlmICh6UkMgIT0gWl9PSykgew0KICAgICAgICAgICAg ICAgICAgICBpbmZsYXRlRW5kKCZjdHgtPnN0cmVhbSk7DQogICAgICAgICAg ICAgICAgICAgIHJldHVybiBBUFJfRUdFTkVSQUw7DQogICAgICAgICAgICAg ICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHpSQyA9PSBa X1NUUkVBTV9FTkQpIHsNCiAgICAgICAgICAgICAgICBhcHJfYnVja2V0ICp0 bXBfaGVhcCwgKmVvczsNCg0KICAgICAgICAgICAgICAgIGFwX2xvZ19yZXJy b3IoQVBMT0dfTUFSSywgQVBMT0dfREVCVUcsIDAsIHIsDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiWmxpYjogSW5mbGF0ZWQgJWxkIHRvICVs ZCA6IFVSTCAlcyIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj dHgtPnN0cmVhbS50b3RhbF9pbiwgY3R4LT5zdHJlYW0udG90YWxfb3V0LA0K ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgci0+dXJpKTsNCg0KICAg ICAgICAgICAgICAgIGxlbiA9IGMtPmJ1ZmZlclNpemUgLSBjdHgtPnN0cmVh bS5hdmFpbF9vdXQ7DQoNCiAgICAgICAgICAgICAgICBjdHgtPmNyYyA9IGNy YzMyKGN0eC0+Y3JjLCAoY29uc3QgQnl0ZWYgKiljdHgtPmJ1ZmZlciwgbGVu KTsNCiAgICAgICAgICAgICAgICB0bXBfaGVhcCA9IGFwcl9idWNrZXRfaGVh cF9jcmVhdGUoKGNoYXIgKiljdHgtPmJ1ZmZlciwgbGVuLA0KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxM LCBmLT5jLT5idWNrZXRfYWxsb2MpOw0KICAgICAgICAgICAgICAgIEFQUl9C UklHQURFX0lOU0VSVF9UQUlMKGN0eC0+cHJvY19iYiwgdG1wX2hlYXApOw0K ICAgICAgICAgICAgICAgIGN0eC0+c3RyZWFtLmF2YWlsX291dCA9IGMtPmJ1 ZmZlclNpemU7DQoNCiAgICAgICAgICAgICAgICAvKiBJcyB0aGUgcmVtYWlu aW5nIDggYnl0ZXMgYWxyZWFkeSBpbiB0aGUgYXZhaWwgc3RyZWFtPyAqLw0K ICAgICAgICAgICAgICAgIGlmIChjdHgtPnN0cmVhbS5hdmFpbF9pbiA+PSA4 KSB7DQogICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY29tcENS QywgY29tcExlbjsNCiAgICAgICAgICAgICAgICAgICAgY29tcENSQyA9IGdl dExvbmcoY3R4LT5zdHJlYW0ubmV4dF9pbik7DQogICAgICAgICAgICAgICAg ICAgIGlmIChjdHgtPmNyYyAhPSBjb21wQ1JDKSB7DQogICAgICAgICAgICAg ICAgICAgICAgICBpbmZsYXRlRW5kKCZjdHgtPnN0cmVhbSk7DQogICAgICAg ICAgICAgICAgICAgICAgICByZXR1cm4gQVBSX0VHRU5FUkFMOw0KICAgICAg ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGN0eC0+c3Ry ZWFtLm5leHRfaW4gKz0gNDsNCiAgICAgICAgICAgICAgICAgICAgY29tcExl biA9IGdldExvbmcoY3R4LT5zdHJlYW0ubmV4dF9pbik7DQogICAgICAgICAg ICAgICAgICAgIGlmIChjdHgtPnN0cmVhbS50b3RhbF9vdXQgIT0gY29tcExl bikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaW5mbGF0ZUVuZCgmY3R4 LT5zdHJlYW0pOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFQ Ul9FR0VORVJBTDsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgICAgICBlbHNlIHsNCiAgICAgICAgICAg ICAgICAgICAgLyogRklYTUU6IFdlIG5lZWQgdG8gZ3JhYiB0aGUgOCB2ZXJp ZmljYXRpb24gYnl0ZXMNCiAgICAgICAgICAgICAgICAgICAgICogZnJvbSB0 aGUgd2lyZSEgKi8NCiAgICAgICAgICAgICAgICAgICAgaW5mbGF0ZUVuZCgm Y3R4LT5zdHJlYW0pOw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVBS X0VHRU5FUkFMOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg ICAgIGluZmxhdGVFbmQoJmN0eC0+c3RyZWFtKTsNCg0KICAgICAgICAgICAg ICAgIGVvcyA9IGFwcl9idWNrZXRfZW9zX2NyZWF0ZShmLT5jLT5idWNrZXRf YWxsb2MpOw0KICAgICAgICAgICAgICAgIEFQUl9CUklHQURFX0lOU0VSVF9U QUlMKGN0eC0+cHJvY19iYiwgZW9zKTsgDQogICAgICAgICAgICAgICAgYnJl YWs7DQogICAgICAgICAgICB9DQoNCiAgICAgICAgfQ0KDQogICAgICBydiA9 IGFwX3Bhc3NfYnJpZ2FkZShmLT5uZXh0LCBjdHgtPnByb2NfYmIpIDsNCiAg ICAgIGFwcl9icmlnYWRlX2NsZWFudXAoY3R4LT5wcm9jX2JiKSA7DQogICAg ICByZXR1cm4gcnYgOw0KfQ0KDQpzdGF0aWMgdm9pZCByZWdpc3Rlcl9ob29r cyhhcHJfcG9vbF90ICpwKQ0Kew0KICAgIGFwX3JlZ2lzdGVyX291dHB1dF9m aWx0ZXIoZGVmbGF0ZUZpbHRlck5hbWUsIGRlZmxhdGVfb3V0X2ZpbHRlciwg TlVMTCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFQX0ZUWVBF X0NPTlRFTlRfU0VUKTsNCiAgICBhcF9yZWdpc3Rlcl9vdXRwdXRfZmlsdGVy KCJJTkZMQVRFIiwgaW5mbGF0ZV9vdXRfZmlsdGVyLCBOVUxMLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQVBfRlRZUEVfUkVTT1VSQ0UtMSk7 DQogICAgYXBfcmVnaXN0ZXJfaW5wdXRfZmlsdGVyKGRlZmxhdGVGaWx0ZXJO YW1lLCBkZWZsYXRlX2luX2ZpbHRlciwgTlVMTCwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFQX0ZUWVBFX0NPTlRFTlRfU0VUKTsNCn0NCg0K c3RhdGljIGNvbnN0IGNvbW1hbmRfcmVjIGRlZmxhdGVfZmlsdGVyX2NtZHNb XSA9IHsNCiAgICBBUF9JTklUX1RBS0UxMigiRGVmbGF0ZUZpbHRlck5vdGUi LCBkZWZsYXRlX3NldF9ub3RlLCBOVUxMLCBSU1JDX0NPTkYsDQogICAgICAg ICAgICAgICAgICAiU2V0IGEgbm90ZSB0byByZXBvcnQgb24gY29tcHJlc3Np b24gcmF0aW8iKSwNCiAgICBBUF9JTklUX1RBS0UxKCJEZWZsYXRlV2luZG93 U2l6ZSIsIGRlZmxhdGVfc2V0X3dpbmRvd19zaXplLCBOVUxMLA0KICAgICAg ICAgICAgICAgICAgUlNSQ19DT05GLCAiU2V0IHRoZSBEZWZsYXRlIHdpbmRv dyBzaXplICgxLTE1KSIpLA0KICAgIEFQX0lOSVRfVEFLRTEoIkRlZmxhdGVC dWZmZXJTaXplIiwgZGVmbGF0ZV9zZXRfYnVmZmVyX3NpemUsIE5VTEwsIFJT UkNfQ09ORiwNCiAgICAgICAgICAgICAgICAgICJTZXQgdGhlIERlZmxhdGUg QnVmZmVyIFNpemUiKSwNCiAgICBBUF9JTklUX1RBS0UxKCJEZWZsYXRlTWVt TGV2ZWwiLCBkZWZsYXRlX3NldF9tZW1sZXZlbCwgTlVMTCwgUlNSQ19DT05G LA0KICAgICAgICAgICAgICAgICAgIlNldCB0aGUgRGVmbGF0ZSBNZW1vcnkg TGV2ZWwgKDEtOSkiKSwNCiAgICBBUF9JTklUX1RBS0UxKCJEZWZsYXRlQ29t cHJlc3Npb25MZXZlbCIsIGRlZmxhdGVfc2V0X2NvbXByZXNzaW9ubGV2ZWws IE5VTEwsIFJTUkNfQ09ORiwNCiAgICAgICAgICAgICAgICAgICJTZXQgdGhl IERlZmxhdGUgQ29tcHJlc3Npb24gTGV2ZWwgKDEtOSkiKSwNCiAgICB7TlVM TH0NCn07DQoNCm1vZHVsZSBBUF9NT0RVTEVfREVDTEFSRV9EQVRBIGRlZmxh dGVfbW9kdWxlID0gew0KICAgIFNUQU5EQVJEMjBfTU9EVUxFX1NUVUZGLA0K ICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRpciBjb25m aWcgY3JlYXRlciAqLw0KICAgIE5VTEwsICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIGRpciBtZXJnZXIgLS0tIGRlZmF1bHQgaXMgdG8gb3ZlcnJpZGUg Ki8NCiAgICBjcmVhdGVfZGVmbGF0ZV9zZXJ2ZXJfY29uZmlnLCAvKiBzZXJ2 ZXIgY29uZmlnICovDQogICAgTlVMTCwgICAgICAgICAgICAgICAgICAgICAg ICAgLyogbWVyZ2Ugc2VydmVyIGNvbmZpZyAqLw0KICAgIGRlZmxhdGVfZmls dGVyX2NtZHMsICAgICAgICAgIC8qIGNvbW1hbmQgdGFibGUgKi8NCiAgICBy ZWdpc3Rlcl9ob29rcyAgICAgICAgICAgICAgICAvKiByZWdpc3RlciBob29r cyAqLw0KfTsNCg== ---1463810294-1109216496-1081544952=:4702--