Received: from localhost (unknown [200.46.204.183]) by postgresql.org (Postfix) with ESMTP id E533764FCBA for ; Fri, 5 Sep 2008 16:39:13 -0300 (ADT) Received: from postgresql.org ([200.46.204.86]) by localhost (mx1.hub.org [200.46.204.183]) (amavisd-maia, port 10024) with ESMTP id 34612-02 for ; Fri, 5 Sep 2008 16:39:07 -0300 (ADT) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mail.esilo.com (web-qwest-sterling2.esilo.com [63.150.152.211]) by postgresql.org (Postfix) with ESMTP id 291A664FF09 for ; Fri, 5 Sep 2008 16:39:06 -0300 (ADT) Received: from [10.0.0.2] (fwext-esilo-jupiter.esilo.com [64.135.45.146]) (authenticated bits=0) by mail.esilo.com (8.13.1/8.13.1) with ESMTP id m85JcwaQ031513; Fri, 5 Sep 2008 15:38:59 -0400 Message-ID: <48C18B48.509@esilo.com> Date: Fri, 05 Sep 2008 15:40:56 -0400 From: Andrew Chernow User-Agent: Thunderbird 2.0.0.16 (Windows/20080708) MIME-Version: 1.0 To: Alvaro Herrera CC: PostgreSQL-development , Merlin Moncure Subject: Re: [PATCHES] libpq events patch (with sgml docs) References: <48C18533.2000204@esilo.com> <20080905192215.GK4353@alvh.no-ip.org> In-Reply-To: <20080905192215.GK4353@alvh.no-ip.org> Content-Type: multipart/mixed; boundary="------------060602090600050205040608" X-Virus-Scanned: Maia Mailguard 1.0.1 X-Spam-Status: No, hits=0 tagged_above=0 required=5 tests=none X-Spam-Level: X-Archive-Number: 200809/371 X-Sequence-Number: 123500 This is a multi-part message in MIME format. --------------060602090600050205040608 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Alvaro Herrera wrote: > Andrew Chernow escribió: > >> ! printfPQExpBuffer(&conn->errorMessage, >> ! libpq_gettext("PGEventProc \"%s\" failed during PGEVT_CONNRESET event\n"), >> ! conn->events[i].name); >> ! else >> ! printfPQExpBuffer(&conn->errorMessage, >> ! libpq_gettext("PGEventProc \"addr:%p\" failed during PGEVT_CONNRESET event\n"), >> ! conn->events[i].proc); >> ! break; > > Please don't do this. It creates extra unnecessary work for > translators. Better create a local var, assign either "name" or > "addr:" to it, and then use that in the message. > > (For the record, I'd prefer that the name is made mandatory.) > The name is now mandatory, no need to toggle the format string anymore. -- Andrew Chernow eSilo, LLC every bit counts http://www.esilo.com/ --------------060602090600050205040608 Content-Type: text/plain; name="libpq-events.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="libpq-events.patch" SW5kZXg6IGRvYy9zcmMvc2dtbC9saWJwcS5zZ21sCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6 IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL2RvYy9zcmMvc2dtbC9saWJwcS5zZ21sLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjI2MApkaWZmIC1DNiAtcjEuMjYwIGxpYnBxLnNnbWwKKioq IGRvYy9zcmMvc2dtbC9saWJwcS5zZ21sCTI3IEp1biAyMDA4IDAyOjQ0OjMxIC0wMDAwCTEu MjYwCi0tLSBkb2Mvc3JjL3NnbWwvbGlicHEuc2dtbAk1IFNlcCAyMDA4IDE5OjM2OjM5IC0w MDAwCioqKioqKioqKioqKioqKgoqKiogMjA5MiwyMTAzICoqKioKLS0tIDIwOTIsMjIyMiAt LS0tCiAgICAgICAgICBOb3RlIHRoYXQgPGZ1bmN0aW9uPlBRY2xlYXI8L2Z1bmN0aW9uPiBz aG91bGQgZXZlbnR1YWxseSBiZSBjYWxsZWQKICAgICAgICAgIG9uIHRoZSBvYmplY3QsIGp1 c3QgYXMgd2l0aCBhIDxzdHJ1Y3RuYW1lPlBHcmVzdWx0PC9zdHJ1Y3RuYW1lPgogICAgICAg ICAgcmV0dXJuZWQgYnkgPGFwcGxpY2F0aW9uPmxpYnBxPC9hcHBsaWNhdGlvbj4gaXRzZWxm LgogICAgICAgICA8L3BhcmE+CiAgICAgICAgPC9saXN0aXRlbT4KICAgICAgIDwvdmFybGlz dGVudHJ5PgorIAorICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT4KKyAgICAg ICAgPGZ1bmN0aW9uPlBRY29weVJlc3VsdDwvZnVuY3Rpb24+CisgICAgICAgIDxpbmRleHRl cm0+CisgICAgICAgICA8cHJpbWFyeT5QUWNvcHlSZXN1bHQ8L3ByaW1hcnk+CisgICAgICAg IDwvaW5kZXh0ZXJtPgorICAgICAgIDwvdGVybT4KKyAKKyAgICAgICA8bGlzdGl0ZW0+Cisg ICAgICAgIDxwYXJhPgorICAgICAgICAgTWFrZXMgYSBjb3B5IG9mIGEgPHN0cnVjdG5hbWU+ UEdyZXN1bHQ8L3N0cnVjdG5hbWU+IG9iamVjdC4KKyAgICAgICAgIDxzeW5vcHNpcz4KKyAg ICAgICAgICBQR3Jlc3VsdCAqUFFjb3B5UmVzdWx0KGNvbnN0IFBHcmVzdWx0ICpzcmMsIGlu dCBmbGFncyk7CisgICAgICAgICA8L3N5bm9wc2lzPgorICAgICAgICA8L3BhcmE+CisgCisg ICAgICAgIDxwYXJhPgorICAgICAgICAgVGhlIHJldHVybmVkIHJlc3VsdCBpcyBhbHdheXMg cHV0IGludG8gPGxpdGVyYWw+UEdSRVNfVFVQTEVTX09LPC9saXRlcmFsPiBzdGF0dXMuCisg ICAgICAgICBJdCBpcyBub3QgbGlua2VkIHRvIHRoZSBzb3VyY2UgcmVzdWx0IGluIGFueSB3 YXkgYW5kCisgICAgICAgICA8ZnVuY3Rpb24+UFFjbGVhcjwvZnVuY3Rpb24+IG11c3QgYmUg Y2FsbGVkIHdoZW4gdGhlIHJlc3VsdCBpcyBubyBsb25nZXIgbmVlZGVkLgorICAgICAgICAg SWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBOVUxMIGlzIHJldHVybmVkLgorICAgICAgICA8L3Bh cmE+CisgCisgICAgICAgIDxwYXJhPgorICAgICAgICAgT3B0aW9uYWxseSwgdGhlIDxwYXJh bWV0ZXI+ZmxhZ3M8L3BhcmFtZXRlcj4gYXJndW1lbnQgY2FuIGJlIHVzZWQgdG8gY29weQor ICAgICAgICAgbW9yZSBwYXJ0cyBvZiB0aGUgcmVzdWx0LiAgPGxpdGVyYWw+UEdfQ09QWVJF U19BVFRSUzwvbGl0ZXJhbD4gd2lsbCBjb3B5IHRoZQorICAgICAgICAgc291cmNlIHJlc3Vs dCdzIGF0dHJpYnV0ZXMuICA8bGl0ZXJhbD5QR19DT1BZUkVTX1RVUExFUzwvbGl0ZXJhbD4g d2lsbCBjb3B5CisgICAgICAgICB0aGUgc291cmNlIHJlc3VsdCdzIHR1cGxlcy4gIFRoaXMg aW1wbGllcyBjb3B5aW5nIHRoZSBhdHRycywgYmVpbmcgaG93IHRoZQorICAgICAgICAgYXR0 cnMgYXJlIG5lZWRlZCBieSB0aGUgdHVwbGVzLiAgPGxpdGVyYWw+UEdfQ09QWVJFU19FVkVO VFM8L2xpdGVyYWw+IHdpbGwKKyAgICAgICAgIGNvcHkgdGhlIHNvdXJjZSByZXN1bHQncyBl dmVudHMuICA8bGl0ZXJhbD5QR19DT1BZUkVTX05PVElDRUhPT0tTPC9saXRlcmFsPgorICAg ICAgICAgd2lsbCBjb3B5IHRoZSBzb3VyY2UgcmVzdWx0J3Mgbm90aWZ5IGhvb2tzLgorICAg ICAgICA8L3BhcmE+CisgICAgICAgPC9saXN0aXRlbT4KKyAgICAgIDwvdmFybGlzdGVudHJ5 PgorIAorICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICA8dGVybT4KKyAgICAgICAgPGZ1 bmN0aW9uPlBRc2V0UmVzdWx0QXR0cnM8L2Z1bmN0aW9uPgorICAgICAgICA8aW5kZXh0ZXJt PgorICAgICAgICAgPHByaW1hcnk+UFFzZXRSZXN1bHRBdHRyczwvcHJpbWFyeT4KKyAgICAg ICAgPC9pbmRleHRlcm0+CisgICAgICAgPC90ZXJtPgorIAorICAgICAgIDxsaXN0aXRlbT4K KyAgICAgICAgPHBhcmE+CisgICAgICAgICBTZXRzIHRoZSBhdHRyaWJ1dGVzIG9mIGEgPHN0 cnVjdG5hbWU+UEdyZXN1bHQ8L3N0cnVjdG5hbWU+IG9iamVjdC4KKyAgICAgICAgIDxzeW5v cHNpcz4KKyAgICAgICAgICBpbnQgUFFzZXRSZXN1bHRBdHRycyhQR3Jlc3VsdCAqcmVzLCBp bnQgbnVtQXR0cmlidXRlcywgUEdyZXNBdHREZXNjICphdHREZXNjcyk7CisgICAgICAgICA8 L3N5bm9wc2lzPgorICAgICAgICA8L3BhcmE+CisgCisgICAgICAgIDxwYXJhPgorICAgICAg ICAgVGhlIHByb3ZpZGVkIDxwYXJhbWV0ZXI+YXR0RGVzY3M8L3BhcmFtZXRlcj4gYXJlIGNv cGllZCBpbnRvIHRoZSByZXN1bHQsIHRodXMgdGhlCisgICAgICAgICA8cGFyYW1ldGVyPmF0 dERlc2NzPC9wYXJhbWV0ZXI+IGFyZSBubyBsb25nZXIgbmVlZGVkIGJ5IDxwYXJhbWV0ZXI+ cmVzPC9wYXJhbWV0ZXI+IGFmdGVyCisgICAgICAgICB0aGUgZnVuY3Rpb24gcmV0dXJucy4g IElmIHRoZSA8cGFyYW1ldGVyPmF0dERlc2NzPC9wYXJhbWV0ZXI+IGFyZSBOVUxMIG9yCisg ICAgICAgICA8cGFyYW1ldGVyPm51bUF0dHJpYnV0ZXM8L3BhcmFtZXRlcj4gaXMgbGVzcyB0 aGFuIG9uZSwgdGhlIHJlcXVlc3QgaXMgaWdub3JlZCBhbmQKKyAgICAgICAgIHRoZSBmdW5j dGlvbiBzdWNjZWVkcy4gIElmIDxwYXJhbWV0ZXI+cmVzPC9wYXJhbWV0ZXI+IGFscmVhZHkg Y29udGFpbnMgYXR0cmlidXRlcywKKyAgICAgICAgIHRoZSBmdW5jdGlvbiB3aWxsIGZhaWwu ICBJZiB0aGUgZnVuY3Rpb24gZmFpbHMsIHRoZSByZXR1cm4gdmFsdWUgaXMgemVyby4gIElm IHRoZQorICAgICAgICAgZnVuY3Rpb24gc3VjY2VlZHMsIHRoZSByZXR1cm4gdmFsdWUgaXMg bm9uLXplcm8uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3RpdGVtPgorICAgICAg PC92YXJsaXN0ZW50cnk+CisgCisgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgIDx0ZXJt PgorICAgICAgICA8ZnVuY3Rpb24+UFFzZXR2YWx1ZTwvZnVuY3Rpb24+CisgICAgICAgIDxp bmRleHRlcm0+CisgICAgICAgICA8cHJpbWFyeT5QUXNldHZhbHVlPC9wcmltYXJ5PgorICAg ICAgICA8L2luZGV4dGVybT4KKyAgICAgICA8L3Rlcm0+CisgCisgICAgICAgPGxpc3RpdGVt PgorICAgICAgICA8cGFyYT4KKyAgICAgICAgIFNldHMgYSB0dXBsZSBmaWVsZCB2YWx1ZSBv ZiBhIDxzdHJ1Y3RuYW1lPlBHcmVzdWx0PC9zdHJ1Y3RuYW1lPiBvYmplY3QuCisgICAgICAg ICA8c3lub3BzaXM+CisgICAgICAgICAgaW50IFBRc2V0dmFsdWUoUEdyZXN1bHQgKnJlcywg aW50IHR1cF9udW0sIGludCBmaWVsZF9udW0sIGNoYXIgKnZhbHVlLCBpbnQgbGVuKTsKKyAg ICAgICAgIDwvc3lub3BzaXM+CisgICAgICAgIDwvcGFyYT4KKyAKKyAgICAgICAgPHBhcmE+ CisgICAgICAgICBUaGUgZnVuY3Rpb24gd2lsbCBhdXRvbWF0aWNhbGx5IGdyb3cgdGhlIHJl c3VsdCdzIGludGVybmFsIHR1cGxlcyBhcnJheSBhcyBuZWVkZWQuCisgICAgICAgICBUaGUg PHBhcmFtZXRlcj50dXBfbnVtPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IG11c3QgYmUgbGVzcyB0 aGFuIG9yIGVxdWFsIHRvCisgICAgICAgICA8ZnVuY3Rpb24+UFFudHVwbGVzPC9mdW5jdGlv bj4sIG1lYW5pbmcgdGhpcyBmdW5jdGlvbiBjYW4gb25seSBncm93IHRoZQorICAgICAgICAg dHVwbGVzIGFycmF5IGluIG9yZGVyIG9uZSB0dXBsZSBhdCBhIHRpbWUuICBBbHRob3VnaCwg YW55IGZpZWxkIGZyb20gYW55CisgICAgICAgICBleGlzdGluZyB0dXBsZSBjYW4gYmUgbW9k aWZpZWQgaW4gYW55IG9yZGVyLiAgSWYgYSB2YWx1ZSBhdCA8cGFyYW1ldGVyPmZpZWxkX251 bTwvcGFyYW1ldGVyPgorICAgICAgICAgYWxyZWFkeSBlaXhzdHMsIGl0IHdpbGwgYmUgb3Zl cndyaXR0ZW4uICBJZiA8cGFyYW1ldGVyPmxlbjwvcGFyYW1ldGVyPiBpcyA8bGl0ZXJhbD4t MTwvbGl0ZXJhbD4gb3IKKyAgICAgICAgIDxwYXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4g aXMgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4sIHRoZSBmaWVsZCB2YWx1ZSB3aWxsCisgICAg ICAgICBiZSBzZXQgdG8gYW4gU1FMIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+LiAgVGhlIDxw YXJhbWV0ZXI+dmFsdWU8L3BhcmFtZXRlcj4gaXMgY29waWVkCisgICAgICAgICBpbnRvIHJl c3VsdCdzIHByaXZhdGUgc3RvcmFnZSwgdGh1cyBubyBsb25nZXIgbmVlZGVkIGJ5IDxwYXJh bWV0ZXI+cmVzPC9wYXJhbWV0ZXI+IGFmdGVyCisgICAgICAgICB0aGUgZnVuY3Rpb24gcmV0 dXJucy4gIElmIHRoZSBmdW5jdGlvbiBmYWlscywgdGhlIHJldHVybiB2YWx1ZQorICAgICAg ICAgaXMgemVyby4gIElmIHRoZSBmdW5jdGlvbiBzdWNjZWVkcywgdGhlIHJldHVybiB2YWx1 ZSBpcyBub24temVyby4KKyAgICAgICAgPC9wYXJhPgorICAgICAgIDwvbGlzdGl0ZW0+Cisg ICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAg PHRlcm0+CisgICAgICAgIDxmdW5jdGlvbj5QUXJlc3VsdEFsbG9jPC9mdW5jdGlvbj4KKyAg ICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgIDxwcmltYXJ5PlBRcmVzdWx0QWxsb2M8L3By aW1hcnk+CisgICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgIDwvdGVybT4KKyAKKyAgICAg ICA8bGlzdGl0ZW0+CisgICAgICAgIDxwYXJhPgorICAgICAgICAgQWxsb2NhdGUgc3Vic2lk aWFyeSBzdG9yYWdlIGZvciBhIDxzdHJ1Y3RuYW1lPlBHcmVzdWx0PC9zdHJ1Y3RuYW1lPiBv YmplY3QuCisgICAgICAgICA8c3lub3BzaXM+CisgICAgICAgICAgdm9pZCAqUFFyZXN1bHRB bGxvYyhQR3Jlc3VsdCAqcmVzLCBzaXplX3QgbkJ5dGVzKTsKKyAgICAgICAgIDwvc3lub3Bz aXM+CisgICAgICAgIDwvcGFyYT4KKyAKKyAgICAgICAgPHBhcmE+CisgICAgICAgICBBbnkg bWVtb3J5IGFsbG9jYXRlZCB3aXRoIHRoaXMgZnVuY3Rpb24sIHdpbGwgYmUgZnJlZWQgd2hl bgorICAgICAgICAgPHBhcmFtZXRlcj5yZXM8L3BhcmFtZXRlcj4gaXMgY2xlYXJlZC4gIElm IHRoZSBmdW5jdGlvbiBmYWlscywKKyAgICAgICAgIHRoZSByZXR1cm4gdmFsdWUgaXMgPGxp dGVyYWw+TlVMTDwvbGl0ZXJhbD4uCisgICAgICAgIDwvcGFyYT4KKyAgICAgICA8L2xpc3Rp dGVtPgorICAgICAgPC92YXJsaXN0ZW50cnk+CiAgICAgIDwvdmFyaWFibGVsaXN0PgogICAg IDwvcGFyYT4KICAgIDwvc2VjdDI+CiAgCiAgICA8c2VjdDIgaWQ9ImxpYnBxLWV4ZWMtc2Vs ZWN0LWluZm8iPgogICAgIDx0aXRsZT5SZXRyaWV2aW5nIFF1ZXJ5IFJlc3VsdCBJbmZvcm1h dGlvbjwvdGl0bGU+CioqKioqKioqKioqKioqKgoqKiogNDU1OCw0NTY5ICoqKioKLS0tIDQ2 NzcsNTE1NyAtLS0tCiAgICAgIDwvbGlzdGl0ZW0+CiAgICAgPC92YXJsaXN0ZW50cnk+CiAg ICA8L3ZhcmlhYmxlbGlzdD4KICAKICAgPC9zZWN0MT4KICAKKyAgPHNlY3QxIGlkPSJsaWJw cS1ldmVudHMiPgorICAgPHRpdGxlPkV2ZW50IFN5c3RlbTwvdGl0bGU+CisgCisgICA8cGFy YT4KKyAgICBUaGUgZXZlbnQgc3lzdGVtIGlzIGRlc2lnbmVkIHRvIG5vdGlmeSByZWdpc3Rl cmVkIGV2ZW50IGhhbmRsZXJzCisgICAgYWJvdXQgcGFydGljdWxhciBsaWJwcSBldmVudHM7 IHN1Y2ggYXMgdGhlIGNyZWF0aW9uIG9yIGRlc3RydWN0aW9uCisgICAgb2YgPHN0cnVjdG5h bWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBhbmQgPHN0cnVjdG5hbWU+UEdyZXN1bHQ8L3N0cnVj dG5hbWU+CisgICAgb2JqZWN0cy4gIE9uZSB1c2UgY2FzZSBpcyB0aGF0IHRoaXMgYWxsb3dz IGFwcGxpY2F0aW9ucyB0byBhc3NvY2lhdGUKKyAgICB0aGVpciBvd24gZGF0YSB3aXRoIGEg PHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBhbmQKKyAgICA8c3RydWN0bmFtZT5Q R3Jlc3VsdDwvc3RydWN0bmFtZT4sIHRoYXQgY2FuIHJldHJpZXZlZCB2aWEKKyAgICA8ZnVu Y3Rpb24+UFFpbnN0YW5jZURhdGE8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPlBRcmVzdWx0 SW5zdGFuY2VEYXRhPC9mdW5jdGlvbj4uCisgICAgQmFzaWNhbGx5LCBpdHMgbGlrZSBhZGRp bmcgbWVtYmVycyB0byB0aGUgb3BhcXVlIGNvbm4gb3IgcmVzdWx0CisgICAgc3RydWN0dXJl cyBhdCBydW50aW1lLgorICAgPC9wYXJhPgorIAorICAgPHBhcmE+CisgICAgQmVsb3cgaXMg YSBsaXN0IG9mIGV2ZW50IHN5c3RlbSBjb25jZXB0czoKKyAgICA8aXRlbWl6ZWRsaXN0IG1h cms9J2J1bGxldCc+CisgICAgIDxsaXN0aXRlbT4KKyAgICAgIDxwYXJhPgorICAgICAgIDxs aXRlcmFsPmV2ZW50SWQ8L2xpdGVyYWw+IC0gSWRlbnRpZmllcyB3aGljaCBldmVudCB3YXMg ZmlyZWQgYnkgbGlicHEuICBBbGwKKyAgICAgICBldmVudHMgYmVnaW4gd2l0aCA8bGl0ZXJh bD5QR0VWVF88L2xpdGVyYWw+LgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3RpdGVtPgor ICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICA8bGl0ZXJhbD5ldmVudElu Zm88L2xpdGVyYWw+IC0gRXZlcnkgPGxpdGVyYWw+ZXZlbnRJZDwvbGl0ZXJhbD4gaGFzIGEg Y29ycmVzcG9uZGluZworICAgICAgIGV2ZW50IGluZm8gc3RydWN0dXJlLCB0aGF0IGNvbnRh aW5zIGRhdGEgdG8gYWlkIGluIHByb2Nlc3NpbmcgdGhlIGV2ZW50LgorICAgICAgPC9wYXJh PgorICAgICA8L2xpc3RpdGVtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAg ICAgICA8bGl0ZXJhbD5pbnN0YW5jZURhdGE8L2xpdGVyYWw+IC0gVGhlIGluc3RhbmNlIGRh dGEgaXMgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBhCisgICAgICAgPHN0cnVjdG5hbWU+UEdj b25uPC9zdHJ1Y3RuYW1lPiBvciA8c3RydWN0bmFtZT5QR3Jlc3VsdDwvc3RydWN0bmFtZT4u ICBUaGUgZGF0YSBpcworICAgICAgIGNyZWF0ZWQgYW5kIGRlc3Ryb3llZCBhbG9uZyB3aXRo IHdpdGggdGhlIGNvbm5lY3Rpb24gb3IgcmVzdWx0LgorICAgICAgIFR5cGljYWxseSwgaW5z dGFuY2UgZGF0YSBpcyBjcmVhdGVkIGluIHJlc3BvbnNlIHRvCisgICAgICAgYSA8bGl0ZXJh bD5QR0VWVF9SRUdJU1RFUjwvbGl0ZXJhbD4gZXZlbnQsIGJ1dCBjYW4gYmUgY3JlYXRlZCBh dCBhbnkgdGltZSBvcgorICAgICAgIG5vdCBhdCBhbGwuICBNYW5hZ2VtZW50IG9mIGluc3Rh bmNlIGRhdGEgaXMgZG9uZSB1c2luZyB0aGUgPGZ1bmN0aW9uPlBRaW5zdGFuY2VEYXRhPC9m dW5jdGlvbj4sCisgICAgICAgPGZ1bmN0aW9uPlBRc2V0SW5zdGFuY2VEYXRhPC9mdW5jdGlv bj4sIDxmdW5jdGlvbj5QUXJlc3VsdEluc3RhbmNlRGF0YTwvZnVuY3Rpb24+IGFuZAorICAg ICAgIDxmdW5jdGlvbj5QUXNldFJlc3VsdEluc3RhbmNlRGF0YTwvZnVuY3Rpb24+IGZ1bmN0 aW9ucy4KKyAgICAgIDwvcGFyYT4KKyAgICAgPC9saXN0aXRlbT4KKyAgICA8L2l0ZW1pemVk bGlzdD4KKyAgIDwvcGFyYT4KKyAKKyAKKyAgIDxzZWN0MiBpZD0ibGlicHEtZXZlbnRzLXR5 cGVzIj4KKyAgICA8dGl0bGU+RXZlbnQgVHlwZXM8L3RpdGxlPgorICAgICA8cGFyYT4KKyAg ICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAgPHRl cm0+PGxpdGVyYWw+UEdFVlRfUkVHSVNURVI8L2xpdGVyYWw+PC90ZXJtPgorICAgICAgICA8 bGlzdGl0ZW0+CisgICAgICAgICA8cGFyYT4KKyAgICAgICAgICBUaGUgcmVnaXN0ZXIgZXZl bnQgb2NjdXJzIHdoZW4gPGZ1bmN0aW9uPlBRcmVnaXN0ZXJFdmVudFByb2M8L2Z1bmN0aW9u PiBpcworICAgICAgICAgIGNhbGxlZC4gIEl0IGlzIHRoZSBpZGVhbCB0aW1lIHRvIGluaXRp YWxpemUgYW55IDxsaXRlcmFsPmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4KKyAgICAgICAgICBh biBldmVudCBwcm9jZWR1cmUgbWF5IG5lZWQuICBPbmx5IG9uZSByZWdpc3RlciBldmVudCB3 aWxsIGJlIGZpcmVkIHBlciBjb25uZWN0aW9uLgorICAgICAgICAgIElmIHRoZSBldmVudCBw cm9jZWR1cmUgZmFpbHMsIHRoZSByZWdpc3RyYXRpb24gaXMgYWJvcnRlZC4KKyAKKyAgICAg ICAgIDxzeW5vcHNpcz4KKyB0eXBlZGVmIHN0cnVjdAorIHsKKyAgICAgY29uc3QgUEdjb25u ICpjb25uOworIH0gUEdFdmVudFJlZ2lzdGVyOzwvc3lub3BzaXM+CisgCisgICAgICAgICAg V2hlbiBhIDxsaXRlcmFsPlBHRVZUX1JFR0lTVEVSPC9saXRlcmFsPiBldmVudCBpcyByZWNl aXZlZCwgdGhlIDxwYXJhbWV0ZXI+ZXZ0SW5mbzwvcGFyYW1ldGVyPgorICAgICAgICAgIHBv aW50ZXIgc2hvdWxkIGJlIGNhc3RlZCB0byBhIDxzdHJ1Y3RuYW1lPlBHRXZlbnRSZWdpc3Rl cio8L3N0cnVjdG5hbWU+LiAgVGhpcyBzdHJ1Y3R1cmUKKyAgICAgICAgICBjb250YWlucyBh IDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4gdGhhdCBzaG91bGQgYmUgaW4gdGhl IDxsaXRlcmFsPkNPTk5FQ1RJT05fT0s8L2xpdGVyYWw+CisgICAgICAgICAgc3RhdHVzOyBn dWFyYW50ZWVkIGlmIG9uZSBjYWxscyA8ZnVuY3Rpb24+UFFyZWdpc3RlckV2ZW50UHJvYzwv ZnVuY3Rpb24+IHJpZ2h0IGFmdGVyIG9idGFpbmluZworICAgICAgICAgIGEgZ29vZCA8c3Ry dWN0bmFtZT5QR2Nvbm48L3N0cnVjdG5hbWU+LiAgVGhlIGNvbm5lY3Rpb24gY2FuIGJlIHVz ZWQgdG8gaW5pdGlhbGl6ZSBhbnkKKyAgICAgICAgICBhcHBsaWNhdGlvbiBzcGVjaWZpYyBu ZWVkczogbGlrZSBhbGxvY2F0aW5nIHN0cnVjdHVyZXMgYXMgdGhlIGV2ZW50IDxsaXRlcmFs Pmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4KKyAgICAgICAgICBvciBleGVjdXRpbmcgU1FMIHN0 YXRlbWVudHMuCisgICAgICAgICA8L3BhcmE+CisgICAgICAgIDwvbGlzdGl0ZW0+CisgICAg ICAgPC92YXJsaXN0ZW50cnk+CisgCisgICAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgICAg PHRlcm0+PGxpdGVyYWw+UEdFVlRfQ09OTlJFU0VUPC9saXRlcmFsPjwvdGVybT4KKyAgICAg ICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGNvbm5lY3Rp b24gcmVzZXQgZXZlbnQgaXMgZmlyZWQgaW4gcmVzcG9uc2UgdG8gYSA8ZnVuY3Rpb24+UFFy ZXNldDwvZnVuY3Rpb24+IG9yIDxmdW5jdGlvbj5QUXJlc2V0UG9sbDwvZnVuY3Rpb24+Lgor ICAgICAgICAgIEluIGJvdGggY2FzZXMsIHRoZSBldmVudCBpcyBvbmx5IGZpcmVkIGlmIHRo ZSByZXNldCB3YXMgc3VjY2Vzc2Z1bC4gIElmIHRoZSBldmVudCBwcm9jZWR1cmUgZmFpbHMs CisgICAgICAgICAgdGhlIGVudGlyZSBjb25uZWN0aW9uIHJlc2V0IHdpbGwgZmFpbDsgdGhl IDxzdHJ1Y3RuYW1lPlBHY29ubjwvc3RydWN0bmFtZT4gaXMgcHV0IGludG8KKyAgICAgICAg ICA8bGl0ZXJhbD5DT05ORUNUSU9OX0JBRDwvbGl0ZXJhbD4gc3RhdHVzIGFuZCA8ZnVuY3Rp b24+UFFyZXNldFBvbGw8L2Z1bmN0aW9uPiB3aWxsIHJldHVybgorICAgICAgICAgIDxsaXRl cmFsPlBHUkVTX1BPTExJTkdfRkFJTEVEPC9saXRlcmFsPi4KKyAgICAgICAgIDxzeW5vcHNp cz4KKyB0eXBlZGVmIHN0cnVjdAorIHsKKyAgICAgY29uc3QgUEdjb25uICpjb25uOworIH0g UEdFdmVudFJlc2V0Ozwvc3lub3BzaXM+CisgCisgICAgICAgICAgV2hlbiBhIDxsaXRlcmFs PlBHRVZUX0NPTk5SRVNFVDwvbGl0ZXJhbD4gZXZlbnQgaXMgcmVjZWl2ZWQsIHRoZSA8cGFy YW1ldGVyPmV2dEluZm88L3BhcmFtZXRlcj4KKyAgICAgICAgICBwb2ludGVyIHNob3VsZCBi ZSBjYXN0ZWQgdG8gYSA8c3RydWN0bmFtZT5QR0V2ZW50UmVzZXQqPC9zdHJ1Y3RuYW1lPi4g IEFsdGhvdWdoIHRoZSBjb250YWluZWQKKyAgICAgICAgICA8c3RydWN0bmFtZT5QR2Nvbm48 L3N0cnVjdG5hbWU+IHdhcyBqdXN0IHJlc2V0LCBhbGwgZXZlbnQgZGF0YSByZW1haW5zIHVu Y2hhbmdlZC4gIFRoaXMgZXZlbnQKKyAgICAgICAgICBzaG91bGQgYmUgdXNlZCB0byByZXNl dC9yZWxvYWQvcmVxdWVyeSBhbnkgYXNzb2NhaXRlZCA8bGl0ZXJhbD5pbnN0YW5jZURhdGE8 L2xpdGVyYWw+LgorICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3RpdGVtPgorICAg ICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICAg IDx0ZXJtPjxsaXRlcmFsPlBHRVZUX0NPTk5ERVNUUk9ZPC9saXRlcmFsPjwvdGVybT4KKyAg ICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIGNvbm5l Y3Rpb24gZGVzdHJveSBldmVudCBpcyBmaXJlZCBpbiByZXNwb25zZSB0byBhIDxmdW5jdGlv bj5QUWZpbmlzaDwvZnVuY3Rpb24+LgorICAgICAgICAgIEl0IGlzIHRoZSBldmVudCBwcm9j ZWR1cmUncyByZXNwb25zaWJpbGl0eSB0byBwcm9wZXJseSBjbGVhbnVwIGl0cyBldmVudCBk YXRhIGFzIGxpYnBxCisgICAgICAgICAgaGFzIG5vIGFiaWxpdHkgdG8gbWFuYWdlIHRoaXMg bWVtb3J5LiAgRmFpbHVyZSB0byBwcm9wZXJseSBjbGVhbnVwIHdpbGwgbGVhZCB0byBtZW1v cnkKKyAgICAgICAgICBsZWFrcy4KKyAgICAgICAgIDxzeW5vcHNpcz4KKyB0eXBlZGVmIHN0 cnVjdAorIHsKKyAgICAgY29uc3QgUEdjb25uICpjb25uOworIH0gUEdFdmVudENvbm5EZXN0 cm95Ozwvc3lub3BzaXM+CisgCisgICAgICAgICAgV2hlbiBhIDxsaXRlcmFsPlBHRVZUX0NP Tk5ERVNUUk9ZPC9saXRlcmFsPiBldmVudCBpcyByZWNlaXZlZCwgdGhlIDxwYXJhbWV0ZXI+ ZXZ0SW5mbzwvcGFyYW1ldGVyPgorICAgICAgICAgIHBvaW50ZXIgc2hvdWxkIGJlIGNhc3Rl ZCB0byBhIDxzdHJ1Y3RuYW1lPlBHRXZlbnRDb25uRGVzdHJveSo8L3N0cnVjdG5hbWU+LiAg VGhpcyBldmVudCBpcyBmaXJlZAorICAgICAgICAgIHByaW9yIHRvIDxmdW5jdGlvbj5QUWZp bmlzaDwvZnVuY3Rpb24+IHBlcmZvcm1pbmcgYW55IGNsZWFudXAuICBUaGUgcmV0dXJuIHZh bHVlIG9mIHRoZSBldmVudAorICAgICAgICAgIHByb2NlZHVyZSBpcyBpZ25vcmVkIHNpbmNl IHRoZXJlIGlzIG5vIHdheSBvZiBpbmRpY2F0aW5nIGEgZmFpbHVyZSBmcm9tIDxmdW5jdGlv bj5QUWZpbmlzaDwvZnVuY3Rpb24+LgorICAgICAgICAgIEFsc28sIGFuIGV2ZW50IHByb2Nl ZHVyZSBmYWlsdXJlIHNob3VsZCBub3QgYWJvcnQgdGhlIHByb2Nlc3Mgb2YgY2xlYW5pbmcg dXAgdW53YW50ZWQgbWVtb3J5LgorICAgICAgICAgPC9wYXJhPgorICAgICAgICA8L2xpc3Rp dGVtPgorICAgICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICAgIDx0ZXJtPjxsaXRlcmFsPlBHRVZUX1JFU1VMVENSRUFURTwvbGl0ZXJhbD48 L3Rlcm0+CisgICAgICAgIDxsaXN0aXRlbT4KKyAgICAgICAgIDxwYXJhPgorICAgICAgICAg IFRoZSByZXN1bHQgY3JlYXRlIGV2ZW50IGlzIGZpcmVkIGluIHJlc3BvbnNlIHRvIGFueSBl eGVjIGZ1bmN0aW9uIHRoYXQgZ2VuZXJhdGVzIGEgcmVzdWx0LAorICAgICAgICAgIGluY2x1 ZGluZyA8ZnVuY3Rpb24+UFFnZXRSZXN1bHQ8L2Z1bmN0aW9uPi4gIFRoaXMgZXZlbnQgd2ls bCBvbmx5IGJlIGZpcmVkIGFmdGVyIHRoZSByZXN1bHQKKyAgICAgICAgICBoYXMgYmVlbiBj cmVhdGVkIHN1Y2Nlc3NmdWxseSwgd2l0aCBhIHJlc3VsdCBzdGF0dXMgb2YgZWl0aGVyIDxs aXRlcmFsPlBHUkVTX0NPTU1BTkRfT0s8L2xpdGVyYWw+LAorICAgICAgICAgIDxsaXRlcmFs PlBHUkVTX1RVUExFU19PSzwvbGl0ZXJhbD4gb3IgPGxpdGVyYWw+UEdSRVNfRU1QVFlfUVVF Ulk8L2xpdGVyYWw+LgorICAgICAgICAgPHN5bm9wc2lzPgorIHR5cGVkZWYgc3RydWN0Cisg eworICAgICBjb25zdCBQR2Nvbm4gKmNvbm47CisgICAgIGNvbnN0IFBHcmVzdWx0ICpyZXN1 bHQ7CisgfSBQR0V2ZW50UmVzdWx0Q3JlYXRlOzwvc3lub3BzaXM+CisgCisgICAgICAgICAg V2hlbiBhIDxsaXRlcmFsPlBHRVZUX1JFU1VMVENSRUFURTwvbGl0ZXJhbD4gZXZlbnQgaXMg cmVjZWl2ZWQsIHRoZSA8cGFyYW1ldGVyPmV2dEluZm88L3BhcmFtZXRlcj4KKyAgICAgICAg ICBwb2ludGVyIHNob3VsZCBiZSBjYXN0ZWQgdG8gYSA8c3RydWN0bmFtZT5QR0V2ZW50UmVz dWx0Q3JlYXRlKjwvc3RydWN0bmFtZT4uICBUaGUgPHBhcmFtZXRlcj5jb25uPC9wYXJhbWV0 ZXI+CisgICAgICAgICAgd2FzIHRoZSBjb25uZWN0aW9uIHVzZWQgdG8gZ2VuZXJhdGUgdGhl IHJlc3VsdC4gIFRoaXMgaXMgdGhlIGlkZWFsIHBsYWNlIHRvIGluaXRpYWxpemUKKyAgICAg ICAgICBhbnkgPGxpdGVyYWw+aW5zdGFuY2VEYXRhPC9saXRlcmFsPiB0aGF0IG5lZWRzIHRv IGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcmVzdWx0LiAgSWYgdGhlIGV2ZW50IHByb2NlZHVy ZSBmYWlscywKKyAgICAgICAgICB0aGUgcmVzdWx0IHdpbGwgYmUgY2xlYXJlZCBhbmQgdGhl IGZhaWx1cmUgd2lsbCBiZSBwcm9wYWdhdGVkLiAgRG8gbm90IGF0dGVtcHQgdG8KKyAgICAg ICAgICBjbGVhciB0aGUgcmVzdWx0IG9iamVjdCBjb250YWluZWQgaW4gdGhlIDxzdHJ1Y3Ru YW1lPlBHRXZlbnRSZXN1bHRDcmVhdGU8L3N0cnVjdG5hbWU+IHN0cnVjdHVyZS4KKyAgICAg ICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0aXRlbT4KKyAgICAgICA8L3Zhcmxpc3RlbnRy eT4KKyAKKyAgICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgICA8dGVybT48bGl0ZXJhbD5Q R0VWVF9SRVNVTFRDT1BZPC9saXRlcmFsPjwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgor ICAgICAgICAgPHBhcmE+CisgICAgICAgICAgVGhlIHJlc3VsdCBjb3B5IGV2ZW50IGlzIGZp cmVkIGluIHJlc3BvbnNlIHRvIDxmdW5jdGlvbj5QUWNvcHlSZXN1bHQ8L2Z1bmN0aW9uPi4K KyAgICAgICAgICBUaGlzIGV2ZW50IHdpbGwgb25seSBiZSBmaXJlZCBhZnRlciB0aGUgY29w eSBpcyBjb21wbGV0ZS4KKyAgICAgICAgIDxzeW5vcHNpcz4KKyB0eXBlZGVmIHN0cnVjdAor IHsKKyAgICAgY29uc3QgUEdyZXN1bHQgKnNyYzsKKyAgICAgUEdyZXN1bHQgKmRlc3Q7Cisg fSBQR0V2ZW50UmVzdWx0Q29weTs8L3N5bm9wc2lzPgorIAorICAgICAgICAgIFdoZW4gYSA8 bGl0ZXJhbD5QR0VWVF9SRVNVTFRDT1BZPC9saXRlcmFsPiBldmVudCBpcyByZWNlaXZlZCwg dGhlIDxwYXJhbWV0ZXI+ZXZ0SW5mbzwvcGFyYW1ldGVyPgorICAgICAgICAgIHBvaW50ZXIg c2hvdWxkIGJlIGNhc3RlZCB0byBhIDxzdHJ1Y3RuYW1lPlBHRXZlbnRSZXN1bHRDb3B5Kjwv c3RydWN0bmFtZT4uICBUaGUgPHBhcmFtZXRlcj5zcmM8L3BhcmFtZXRlcj4KKyAgICAgICAg ICByZXN1bHQgaXMgd2hhdCBpcyBiZWluZyBjb3BpZWQgd2hpbGUgdGhlIDxwYXJhbWV0ZXI+ ZGVzdDwvcGFyYW1ldGVyPiByZXN1bHQgaXMgdGhlIGNvcHkgZGVzdGluYXRpb24uCisgICAg ICAgICAgVGhpcyBldmVudCBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGEgZGVlcCBjb3B5IG9m IDxsaXRlcmFsPmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4sIHNpbmNlCisgICAgICAgICAgPGxp dGVyYWw+UFFjb3B5UmVzdWx0PC9saXRlcmFsPiBjYW5ub3QgZG8gdGhhdC4gIElmIHRoZSBl dmVudCBwcm9jZWR1cmUgZmFpbHMsIHRoZSBlbnRpcmUgY29weSBvcGVyYXRpb24KKyAgICAg ICAgICB3aWxsIGZhaWwgYW5kIHRoZSA8cGFyYW1ldGVyPmRlc3Q8L3BhcmFtZXRlcj4gcmVz dWx0IHdpbGwgYmUgY2xlYXJlZC4KKyAgICAgICAgIDwvcGFyYT4KKyAgICAgICAgPC9saXN0 aXRlbT4KKyAgICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAKKyAgICAgICA8dmFybGlzdGVudHJ5 PgorICAgICAgICA8dGVybT48bGl0ZXJhbD5QR0VWVF9SRVNVTFRERVNUUk9ZPC9saXRlcmFs PjwvdGVybT4KKyAgICAgICAgPGxpc3RpdGVtPgorICAgICAgICAgPHBhcmE+CisgICAgICAg ICAgVGhlIHJlc3VsdCBkZXN0cm95IGV2ZW50IGlzIGZpcmVkIGluIHJlc3BvbnNlIHRvIGEg PGZ1bmN0aW9uPlBRY2xlYXI8L2Z1bmN0aW9uPi4KKyAgICAgICAgICBJdCBpcyB0aGUgZXZl bnQgcHJvY2VkdXJlJ3MgcmVzcG9uc2liaWxpdHkgdG8gcHJvcGVybHkgY2xlYW51cCBpdHMg ZXZlbnQgZGF0YSBhcyBsaWJwcQorICAgICAgICAgIGhhcyBubyBhYmlsaXR5IHRvIG1hbmFn ZSB0aGlzIG1lbW9yeS4gIEZhaWx1cmUgdG8gcHJvcGVybHkgY2xlYW51cCB3aWxsIGxlYWQg dG8gbWVtb3J5CisgICAgICAgICAgbGVha3MuCisgICAgICAgICA8c3lub3BzaXM+CisgdHlw ZWRlZiBzdHJ1Y3QKKyB7CisgICAgIGNvbnN0IFBHcmVzdWx0ICpyZXN1bHQ7CisgfSBQR0V2 ZW50UmVzdWx0RGVzdHJveTs8L3N5bm9wc2lzPgorIAorICAgICAgICAgIFdoZW4gYSA8bGl0 ZXJhbD5QR0VWVF9SRVNVTFRERVNUUk9ZPC9saXRlcmFsPiBldmVudCBpcyByZWNlaXZlZCwg dGhlIDxwYXJhbWV0ZXI+ZXZ0SW5mbzwvcGFyYW1ldGVyPgorICAgICAgICAgIHBvaW50ZXIg c2hvdWxkIGJlIGNhc3RlZCB0byBhIDxzdHJ1Y3RuYW1lPlBHRXZlbnRSZXN1bHREZXN0cm95 Kjwvc3RydWN0bmFtZT4uICBUaGlzIGV2ZW50IGlzIGZpcmVkCisgICAgICAgICAgcHJpb3Ig dG8gPGZ1bmN0aW9uPlBRY2xlYXI8L2Z1bmN0aW9uPiBwZXJmb3JtaW5nIGFueSBjbGVhbnVw LiAgVGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgZXZlbnQKKyAgICAgICAgICBwcm9jZWR1cmUg aXMgaWdub3JlZCBzaW5jZSB0aGVyZSBpcyBubyB3YXkgb2YgaW5kaWNhdGluZyBhIGZhaWx1 cmUgZnJvbSA8ZnVuY3Rpb24+UFFjbGVhcjwvZnVuY3Rpb24+LgorICAgICAgICAgIEFsc28s IGFuIGV2ZW50IHByb2NlZHVyZSBmYWlsdXJlIHNob3VsZCBub3QgYWJvcnQgdGhlIHByb2Nl c3Mgb2YgY2xlYW5pbmcgdXAgdW53YW50ZWQgbWVtb3J5LgorICAgICAgICAgPC9wYXJhPgor ICAgICAgICA8L2xpc3RpdGVtPgorICAgICAgIDwvdmFybGlzdGVudHJ5PgorICAgICAgPC92 YXJpYWJsZWxpc3Q+CisgICAgPC9wYXJhPgorICAgPC9zZWN0Mj4KKyAKKyAgIDxzZWN0MiBp ZD0ibGlicHEtZXZlbnRzLXByb2MiPgorICAgIDx0aXRsZT5FdmVudCBDYWxsYmFjayBQcm9j ZWR1cmU8L3RpdGxlPgorICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICA8dGVybT4KKyAgICAgICA8ZnVuY3Rpb24+UEdFdmVudFByb2M8L2Z1bmN0aW9u PgorICAgICAgIDxpbmRleHRlcm0+CisgICAgICAgIDxwcmltYXJ5PlBHRXZlbnRQcm9jPC9w cmltYXJ5PgorICAgICAgIDwvaW5kZXh0ZXJtPgorICAgICAgPC90ZXJtPgorIAorICAgICAg PGxpc3RpdGVtPgorICAgICAgIDxwYXJhPgorICAgICAgICBVc2VyIGNhbGxiYWNrIGZ1bmN0 aW9uIHRoYXQgcmVjZWl2ZXMgZXZlbnRzIGZyb20gbGlicHEuIFRoZSBhZGRyZXNzIG9mIHRo ZSBldmVudAorICAgICAgICBwcm9jIGlzIGFsc28gdXNlZCB0byBsb29rdXAgdGhlIDxsaXRl cmFsPmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4KKyAgICAgICAgYXNzb2NpYXRlZCB3aXRoIGEg PHN0cnVjdG5hbWU+UEdjb25uPC9zdHJ1Y3RuYW1lPiBvciA8c3RydWN0bmFtZT5QR3Jlc3Vs dDwvc3RydWN0bmFtZT4uCisgICAgICAgIDxzeW5vcHNpcz50eXBlZGVmIGludCAoKlBHRXZl bnRQcm9jKShQR0V2ZW50SWQgZXZ0SWQsIHZvaWQgKmV2dEluZm8sIHZvaWQgKnBhc3NUaHJv dWdoKTs8L3N5bm9wc2lzPgorICAgICAgIDwvcGFyYT4KKyAKKyAgICAgICA8cGFyYT4KKyAg ICAgICAgVGhlIDxwYXJhbWV0ZXI+ZXZ0SWQ8L3BhcmFtZXRlcj4gaW5pZGNhdGVzIHdoaWNo IDxsaXRlcmFsPlBHRVZUXzwvbGl0ZXJhbD4gZXZlbnQgb2NjdXJyZWQuCisgICAgICAgIFRo ZSA8cGFyYW1ldGVyPmV2dEluZm88L3BhcmFtZXRlcj4gbXVzdCBiZSBjYXN0ZWQgdG8gdGhl IGFwcHJvcHJpYXRlIHN0cnVjdHVyZTogZXguIFBHRVZUX1JFR0lTVEVSCisgICAgICAgIG1l YW5zIGNhc3QgZXZ0SW5mbyB0byBhIFBHRXZlbnRSZWdpc3RlciBwb2ludGVyLiAgVGhlIDxw YXJhbWV0ZXI+cGFzc1Rocm91Z2g8L3BhcmFtZXRlcj4gaXMgdGhlCisgICAgICAgIHBvaW50 ZXIgcHJvdmlkZWQgdG8gdGhlIDxmdW5jdGlvbj5QUXJlZ2lzdGVyRXZlbnRQcm9jPC9mdW5j dGlvbj4sIHdoaWNoIGNhbiBiZSBOVUxMLiAgVGhlIGZ1bmN0aW9uCisgICAgICAgIHNob3Vs ZCByZXR1cm4gYSBub24temVybyB2YWx1ZSBpZiBpdCBzdWNjZWVkcyBhbmQgemVybyBpZiBp dCBmYWlscy4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zh cmxpc3RlbnRyeT4KKyAgICA8L3ZhcmlhYmxlbGlzdD4KKyAgIDwvc2VjdDI+CisgCisgICA8 c2VjdDIgaWQ9ImxpYnBxLWV2ZW50cy1mdW5jcyI+CisgICAgPHRpdGxlPkV2ZW50IEZ1bmN0 aW9uczwvdGl0bGU+CisgICAgIDx2YXJpYWJsZWxpc3Q+CisgICAgIDx2YXJsaXN0ZW50cnk+ CisgICAgICA8dGVybT4KKyAgICAgICA8ZnVuY3Rpb24+UFFyZWdpc3RlckV2ZW50UHJvYzwv ZnVuY3Rpb24+CisgICAgICAgPGluZGV4dGVybT4KKyAgICAgICAgPHByaW1hcnk+UFFyZWdp c3RlckV2ZW50UHJvYzwvcHJpbWFyeT4KKyAgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwv dGVybT4KKyAKKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgUmVn aXN0ZXJzIGFuIGV2ZW50IGNhbGxiYWNrIHByb2NlZHVyZSB3aXRoIGxpYnBxLgorICAgICAg ICA8c3lub3BzaXM+aW50IFBRcmVnaXN0ZXJFdmVudFByb2MoUEdjb25uICpjb25uLCBQR0V2 ZW50UHJvYyBwcm9jLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpwYXNzVGhyb3VnaCk7PC9z eW5vcHNpcz4KKyAgICAgICA8L3BhcmE+CisgCisgICAgICAgPHBhcmE+CisgICAgICAgIFJl Z2lzdHJhdGlvbiBtdXN0IGJlIGNhbGxlZCBvbmNlIG9uIGV2ZXJ5IFBHY29ubiB5b3Ugd2Fu dCB0byByZWNlaXZlIGV2ZW50cyBhYm91dC4KKyAgICAgICAgVGhlcmUgaXMgbm8gbGltaXQg b24gdGhlIG51bWJlciBvZiBldmVudCBwcm9jZWR1cmVzIHRoYXQgY2FuIGJlIHJlZ2lzdGVy ZWQgd2l0aCBhIGNvbm5lY3Rpb24uCisgICAgICAgIFRoZSBmdW5jdGlvbiByZXR1cm5zIGEg bm9uLXplcm8gdmFsdWUgaWYgaXQgc3VjY2VlZHMgYW5kIHplcm8gaWYgaXQgZmFpbHMuCisg ICAgICAgPC9wYXJhPgorIAorICAgICAgIDxwYXJhPgorICAgICAgICBUaGUgPHBhcmFtZXRl cj5wcm9jPC9wYXJhbWV0ZXI+IGFyZ3VtZW50IHdpbGwgYmUgY2FsbGVkIHdoZW4gYSBsaWJw cSBldmVudCBpcyBmaXJlZC4gIEl0cworICAgICAgICBtZW1vcnkgYWRkcmVzcyBpcyBhbHNv IHVzZWQgdG8gbG9va3VwIDxsaXRlcmFsPmluc3RhbmNlRGF0YTwvbGl0ZXJhbD4uCisgICAg ICAgIFRoZSA8cGFyYW1ldGVyPm5hbWU8L3BhcmFtZXRlcj4gYXJndW1lbnQgaXMgdXNlZCB0 byBjb250cnVjdCBlcnJvciBtZXNzYWdlcyB0byBhaWQKKyAgICAgICAgaW4gZGVidWdnaW5n LiAgVGhpcyB2YWx1ZSBjYW5ub3QgYmUgTlVMTCBvciBhIHplcm8tbGVuZ3RoIHN0cmluZy4K KyAgICAgICAgVGhlIDxwYXJhbWV0ZXI+cGFzc1Rocm91Z2g8L3BhcmFtZXRlcj4gcG9pbnRl ciBpcyBwYXNzZWQgdG8gdGhlIDxwYXJhbWV0ZXI+cHJvYzwvcGFyYW1ldGVyPiB3aGVuZXZl cgorICAgICAgICBhbiBldmVudCBvY2N1cnMuIFRoaXMgYXJndW1lbnQgY2FuIGJlIE5VTEwu CisgICAgICAgPC9wYXJhPgorICAgICAgPC9saXN0aXRlbT4KKyAgICAgPC92YXJsaXN0ZW50 cnk+CisgCisgICAgIDx2YXJsaXN0ZW50cnk+CisgICAgICA8dGVybT4KKyAgICAgICA8ZnVu Y3Rpb24+UFFpbnN0YW5jZURhdGE8L2Z1bmN0aW9uPgorICAgICAgIDxpbmRleHRlcm0+Cisg ICAgICAgIDxwcmltYXJ5PlBRaW5zdGFuY2VEYXRhPC9wcmltYXJ5PgorICAgICAgIDwvaW5k ZXh0ZXJtPgorICAgICAgPC90ZXJtPgorICAgICAgPGxpc3RpdGVtPgorICAgICAgIDxwYXJh PgorICAgICAgICBSZXR1cm5zIHRoZSBjb25uJ3MgaW5zdGFuY2VEYXRhIGFzc29jaWF0ZWQg d2l0aCBwcm9jLgorICAgICAgICA8c3lub3BzaXM+dm9pZCAqUFFpbnN0YW5jZURhdGEoY29u c3QgUEdjb25uICpjb25uLCBQR0V2ZW50UHJvYyBwcm9jKTs8L3N5bm9wc2lzPgorICAgICAg IDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAgIDwvdmFybGlzdGVudHJ5PgorIAor ICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+CisgICAgICAgPGZ1bmN0aW9uPlBR c2V0SW5zdGFuY2VEYXRhPC9mdW5jdGlvbj4KKyAgICAgICA8aW5kZXh0ZXJtPgorICAgICAg ICA8cHJpbWFyeT5QUXNldEluc3RhbmNlRGF0YTwvcHJpbWFyeT4KKyAgICAgICA8L2luZGV4 dGVybT4KKyAgICAgIDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4K KyAgICAgICAgU2V0cyB0aGUgY29ubidzIGluc3RhbmNlRGF0YSBmb3IgcHJvYyB0byBkYXRh LiAgVGhpcyByZXV0cm5zIG5vbi16ZXJvIGZvcgorICAgICAgICBzdWNjZWVzIGFuZCB6ZXJv IGZvciBmYWlsdXJlLgorICAgICAgICA8c3lub3BzaXM+aW50IFBRc2V0SW5zdGFuY2VEYXRh KFBHY29ubiAqY29ubiwgUEdFdmVudFByb2MgcHJvYywgdm9pZCAqZGF0YSk7PC9zeW5vcHNp cz4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3Rl bnRyeT4KKyAKKyAgICAgPHZhcmxpc3RlbnRyeT4KKyAgICAgIDx0ZXJtPgorICAgICAgIDxm dW5jdGlvbj5QUXJlc3VsdEluc3RhbmNlRGF0YTwvZnVuY3Rpb24+CisgICAgICAgPGluZGV4 dGVybT4KKyAgICAgICAgPHByaW1hcnk+UFFyZXN1bHRJbnN0YW5jZURhdGE8L3ByaW1hcnk+ CisgICAgICAgPC9pbmRleHRlcm0+CisgICAgICA8L3Rlcm0+CisgICAgICA8bGlzdGl0ZW0+ CisgICAgICAgPHBhcmE+CisgICAgICAgIFJldHVybnMgdGhlIHJlc3VsdCdzIGluc3RhbmNl RGF0YSBhc3NvY2lhdGVkIGJ5IHByb2MuCisgICAgICAgIDxzeW5vcHNpcz52b2lkICpQUXJl c3VsdEluc3RhbmNlRGF0YShjb25zdCBQR3Jlc3VsdCAqcmVzLCBQR0V2ZW50UHJvYyBwcm9j KTs8L3N5bm9wc2lzPgorICAgICAgIDwvcGFyYT4KKyAgICAgIDwvbGlzdGl0ZW0+CisgICAg IDwvdmFybGlzdGVudHJ5PgorIAorICAgICA8dmFybGlzdGVudHJ5PgorICAgICAgPHRlcm0+ CisgICAgICAgPGZ1bmN0aW9uPlBRcmVzdWx0U2V0SW5zdGFuY2VEYXRhPC9mdW5jdGlvbj4K KyAgICAgICA8aW5kZXh0ZXJtPgorICAgICAgICA8cHJpbWFyeT5QUXJlc3VsdFNldEluc3Rh bmNlRGF0YTwvcHJpbWFyeT4KKyAgICAgICA8L2luZGV4dGVybT4KKyAgICAgIDwvdGVybT4K KyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgU2V0cyB0aGUgcmVz dWx0J3MgaW5zdGFuY2VEYXRhIGZvciBwcm9jIHRvIGRhdGEuICBUaGlzIHJldXRybnMgbm9u LXplcm8gZm9yCisgICAgICAgIHN1Y2NlZXMgYW5kIHplcm8gZm9yIGZhaWx1cmUuCisgICAg ICAgIDxzeW5vcHNpcz5pbnQgUFFyZXN1bHRTZXRJbnN0YW5jZURhdGEoUEdyZXN1bHQgKnJl cywgUEdFdmVudFByb2MgcHJvYywgdm9pZCAqZGF0YSk7PC9zeW5vcHNpcz4KKyAgICAgICA8 L3BhcmE+CisgICAgICA8L2xpc3RpdGVtPgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKyAgICA8 L3ZhcmlhYmxlbGlzdD4KKyAgIDwvc2VjdDI+CisgCisgICA8c2VjdDIgaWQ9ImxpYnBxLWV2 ZW50cy1leGFtcGxlIj4KKyAgICA8dGl0bGU+RXZlbnQgRXhhbXBsZTwvdGl0bGU+CisgICAg PHByb2dyYW1saXN0aW5nPgorIC8qIHJlcXVpcmVkIGhlYWRlciBmb3IgbGlicHEgZXZlbnRz IChub3RlOiBpbmNsdWRlcyBsaWJwcS1mZS5oKSovCisgI2luY2x1ZGUgJmx0O2xpYnBxLWV2 ZW50cy5oJmd0OworIAorIC8qIFRoZSBpbnN0YW5jZURhdGEgKi8KKyB0eXBlZGVmIHN0cnVj dAorIHsKKyAgICAgaW50IG47CisgICAgIGNoYXIgKnN0cjsKKyB9IG15ZGF0YTsKKyAKKyAv KiBQR0V2ZW50UHJvYyAqLworIGludCBteUV2ZW50UHJvYyhQR0V2ZW50SWQgZXZ0SWQsIHZv aWQgKmV2dEluZm8sIHZvaWQgKnBhc3NUaHJvdWdoKTsKKyAKKyBpbnQgbWFpbih2b2lkKQor IHsKKyAgICAgbXlkYXRhICpkYXRhOworICAgICBQR3Jlc3VsdCAqcmVzOworICAgICBQR2Nv bm4gKmNvbm4gPSBQUWNvbm5lY3RkYigiZGJuYW1lID0gcG9zdGdyZXMiKTsKKyAKKyAgICAg aWYgKFBRc3RhdHVzKGNvbm4pICE9IENPTk5FQ1RJT05fT0spCisgICAgIHsKKyAgICAgICAg IGZwcmludGYoc3RkZXJyLCAiQ29ubmVjdGlvbiB0byBkYXRhYmFzZSBmYWlsZWQ6ICVzIiwK KyAgICAgICAgICAgICBQUWVycm9yTWVzc2FnZShjb25uKSk7CisgICAgICAgICBQUWZpbmlz aChjb25uKTsKKyAgICAgICAgIHJldHVybiAxOworICAgICB9CisgCisgICAgIC8qIGNhbGxl ZCBvbmNlIG9uIGFueSBjb25uZWN0aW9uIHRoYXQgc2hvdWxkIHJlY2VpdmUgZXZlbnRzLgor ICAgICAgKiBTZW5kcyBhIFBHRVZUX1JFR0lTVEVSIHRvIG15RXZlbnRQcm9jLgorICAgICAg Ki8KKyAgICAgaWYgKCFQUXJlZ2lzdGVyRXZlbnRQcm9jKGNvbm4sIG15RXZlbnRQcm9jLCAi bXlkYXRhX3Byb2MiLCBOVUxMKSkKKyAgICAgeworICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJDYW5ub3QgcmVnaXN0ZXIgUEdFdmVudFByb2NcbiIpOworICAgICAgICAgUFFmaW5pc2go Y29ubik7CisgICAgICAgICByZXR1cm4gMTsKKyAgICAgfQorIAorICAgICAvKiBjb25uIGlu c3RhbmNlRGF0YSBpcyBhdmFpbGFibGUgKi8KKyAgICAgZGF0YSA9IFBRaW5zdGFuY2VEYXRh KGNvbm4sIG15RXZlbnRQcm9jKTsKKyAKKyAgICAgLyogU2VuZHMgYSBQR0VWVF9SRVNVTFRD UkVBVEUgdG8gbXlFdmVudFByb2MgKi8KKyAgICAgcmVzID0gUFFleGVjKGNvbm4sICJTRUxF Q1QgMSArIDEiKTsKKyAKKyAgICAgLyogcmVzdWx0IGluc3RhbmNlRGF0YSBpcyBhdmFpbGFi bGUgKi8KKyAgICAgZGF0YSA9IFBRcmVzdWx0SW5zdGFuY2VEYXRhKHJlcywgbXlFdmVudFBy b2MpOworIAorICAgICAvKiBJZiBQR19DT1BZUkVTX0VWRU5UUyBpcyB1c2VkLCBzZW5kcyBh IFBHRVZUX1JFU1VMVENPUFkgdG8gbXlFdmVudFByb2MgKi8KKyAgICAgcmVzX2NvcHkgPSBQ UWNvcHlSZXN1bHQocmVzLCBQR19DT1BZUkVTX1RVUExFUyB8IFBHX0NPUFlSRVNfRVZFTlRT KTsKKyAKKyAgICAgLyogcmVzdWx0IGluc3RhbmNlRGF0YSBpcyBhdmFpbGFibGUgaWYgUEdf Q09QWVJFU19FVkVOVFMgd2FzCisgICAgICAqIHVzZWQgZHVyaW5nIHRoZSBQUWNvcHlSZXN1 bHQgY2FsbC4KKyAgICAgICovCisgICAgIGRhdGEgPSBQUXJlc3VsdEluc3RhbmNlRGF0YShy ZXNfY29weSwgbXlFdmVudFByb2MpOworIAorICAgICAvKiBCb3RoIGNsZWFycyBzZW5kIGEg UEdFVlRfUkVTVUxUREVTVE9SWSB0byBteUV2ZW50UHJvYyAqLworICAgICBQUWNsZWFyKHJl cyk7CisgICAgIFBRY2xlYXIocmVzX2NvcHkpOworIAorICAgICAvKiBTZW5kcyBhIFBHRVZU X0NPTk5ERVNUUk9ZIHRvIG15RXZlbnRQcm9jICovCisgICAgIFBRZmluaXNoKGNvbm4pOwor IAorICAgICByZXR1cm4gMDsKKyB9CisgCisgaW50IG15RXZlbnRQcm9jKFBHRXZlbnRJZCBl dnRJZCwgdm9pZCAqZXZ0SW5mbywgdm9pZCAqcGFzc1Rocm91Z2gpCisgeworICAgICBzd2l0 Y2ggKGV2dElkKQorICAgICB7CisgICAgICAgICBjYXNlIFBHRVZUX1JFR0lTVEVSOgorICAg ICAgICAgeworICAgICAgICAgICAgIFBHRXZlbnRSZWdpc3RlciAqZSA9IChQR0V2ZW50UmVn aXN0ZXIgKilldnRJbmZvOworICAgICAgICAgICAgIG15ZGF0YSAqZGF0YSA9IGdldF9teWRh dGEoZS0+Y29ubik7CisgCisgICAgICAgICAgICAgLyogYXNzb2NpYXRlIGFwcCBzcGVjaWZp YyBkYXRhIHdpdGggY29ubmVjdGlvbiAqLworICAgICAgICAgICAgIFBRc2V0SW5zdGFuY2VE YXRhKGUtPmNvbm4sIG15RXZlbnRQcm9jLCBkYXRhKTsKKyAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgIH0KKyAKKyAgICAgICAgIGNhc2UgUEdFVlRfQ09OTlJFU0VUOgorICAgICAg ICAgeworICAgICAgICAgICAgIFBHRXZlbnRDb25uUmVzZXQgKmUgPSAoUEdFdmVudENvbm5S ZXNldCAqKWV2dEluZm87CisgICAgICAgICAgICAgbXlkYXRhICpkYXRhID0gUFFpbnN0YW5j ZURhdGEoZS0+Y29ubiwgbXlFdmVudFByb2MpOworICAgICAgICAgICAgIGlmIChkYXRhKQor ICAgICAgICAgICAgICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihteWRhdGEpKTsKKyAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgIH0KKyAKKyAgICAgICAgIGNhc2UgUEdFVlRfQ09O TkRFU1RST1k6CisgICAgICAgICB7CisgICAgICAgICAgICAgUEdFdmVudENvbm5EZXN0cm95 ICplID0gKFBHRXZlbnRDb25uRGVzdHJveSAqKWV2dEluZm87CisgICAgICAgICAgICAgbXlk YXRhICpkYXRhID0gUFFpbnN0YW5jZURhdGEoZS0+Y29ubiwgbXlFdmVudFByb2MpOworIAor ICAgICAgICAgICAgIC8qIGZyZWUgaW5zdGFuY2UgZGF0YSBiZWNhdXNlIHRoZSBjb25uIGlz IGJlaW5nIGRlc3Ryb3llZCAqLworICAgICAgICAgICAgIGlmIChkYXRhKQorICAgICAgICAg ICAgICAgZnJlZV9teWRhdGEoZGF0YSk7CisgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICB9CisgCisgICAgICAgICBjYXNlIFBHRVZUX1JFU1VMVENSRUFURToKKyAgICAgICAgIHsK KyAgICAgICAgICAgICBQR0V2ZW50UmVzdWx0Q3JlYXRlICplID0gKFBHRXZlbnRSZXN1bHRD cmVhdGUgKilldnRJbmZvOworICAgICAgICAgICAgIG15ZGF0YSAqY29ubl9kYXRhID0gUFFp bnN0YW5jZURhdGEoZS0+Y29ubiwgbXlFdmVudFByb2MpOworICAgICAgICAgICAgIG15ZGF0 YSAqcmVzX2RhdGEgPSBkdXBfbXlkYXRhKGNvbm5fZGF0YSk7CisgCisgICAgICAgICAgICAg LyogYXNzb2NpYXRlIGFwcCBzcGVjaWZpYyBkYXRhIHdpdGggcmVzdWx0IChjb3B5IGl0IGZy b20gY29ubikgKi8KKyAgICAgICAgICAgICBQUXNldFJlc3VsdEluc3RhbmNlRGF0YShlLT5y ZXN1bHQsIG15RXZlbnRQcm9jLCByZXNfZGF0YSk7CisgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICB9CisgCisgICAgICAgICBjYXNlIFBHRVZUX1JFU1VMVENPUFk6CisgICAgICAg ICB7CisgICAgICAgICAgICAgUEdFdmVudFJlc3VsdENvcHkgKmUgPSAoUEdFdmVudFJlc3Vs dENvcHkgKilldnRJbmZvOworICAgICAgICAgICAgIG15ZGF0YSAqc3JjX2RhdGEgPSBQUXJl c3VsdEluc3RhbmNlRGF0YShlLT5zcmMsIG15RXZlbnRQcm9jKTsKKyAgICAgICAgICAgICBt eWRhdGEgKmRlc3RfZGF0YSA9IGR1cF9teWRhdGEoc3JjX2RhdGEpOworIAorICAgICAgICAg ICAgIC8qIGFzc29jaWF0ZSBhcHAgc3BlY2lmaWMgZGF0YSB3aXRoIHJlc3VsdCAoY29weSBp dCBmcm9tIGEgcmVzdWx0KSAqLworICAgICAgICAgICAgIFBRc2V0UmVzdWx0SW5zdGFuY2VE YXRhKGUtPmRlc3QsIG15RXZlbnRQcm9jLCBkZXN0X2RhdGEpOworICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgfQorIAorICAgICAgICAgY2FzZSBQR0VWVF9SRVNVTFRERVNUUk9Z OgorICAgICAgICAgeworICAgICAgICAgICAgIFBHRXZlbnRSZXN1bHREZXN0cm95ICplID0g KFBHRXZlbnRSZXN1bHREZXN0cm95ICopZXZ0SW5mbzsKKyAgICAgICAgICAgICBteWRhdGEg KmRhdGEgPSBQUXJlc3VsdEluc3RhbmNlRGF0YShlLT5yZXN1bHQsIG15RXZlbnRQcm9jKTsK KyAKKyAgICAgICAgICAgICAvKiBmcmVlIGluc3RhbmNlIGRhdGEgYmVjYXVzZSB0aGUgcmVz dWx0IGlzIGJlaW5nIGRlc3Ryb3llZCAqLworICAgICAgICAgICAgIGlmKCBkYXRhKQorICAg ICAgICAgICAgICAgZnJlZV9teWRhdGEoZGF0YSk7CisgICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICB9CisgCisgICAgICAgICAvKiB1bmtub3duIGV2ZW50IGlkLCBqdXN0IHJldHVy biBUUlVFLiAqLworICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICBicmVhazsKKyAg ICAgfQorIAorICAgICByZXR1cm4gVFJVRTsgLyogZXZlbnQgcHJvY2Vzc2luZyBzdWNjZWVk ZWQgKi8KKyB9ICA8L3Byb2dyYW1saXN0aW5nPgorICAgPC9zZWN0Mj4KKyAgPC9zZWN0MT4K KyAKICAgPHNlY3QxIGlkPSJsaWJwcS1taXNjIj4KICAgIDx0aXRsZT5NaXNjZWxsYW5lb3Vz IEZ1bmN0aW9uczwvdGl0bGU+CiAgCiAgICA8cGFyYT4KICAgICBBcyBhbHdheXMsIHRoZXJl IGFyZSBzb21lIGZ1bmN0aW9ucyB0aGF0IGp1c3QgZG9uJ3QgZml0IGFueXdoZXJlLgogICAg PC9wYXJhPgpJbmRleDogc3JjL2ludGVyZmFjZXMvbGlicHEvTWFrZWZpbGUKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL3Byb2plY3RzL2N2c3Jvb3QvcGdzcWwvc3JjL2ludGVyZmFjZXMv bGlicHEvTWFrZWZpbGUsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTY2CmRpZmYgLUM2IC1y MS4xNjYgTWFrZWZpbGUKKioqIHNyYy9pbnRlcmZhY2VzL2xpYnBxL01ha2VmaWxlCTE2IEFw ciAyMDA4IDE0OjE5OjU2IC0wMDAwCTEuMTY2Ci0tLSBzcmMvaW50ZXJmYWNlcy9saWJwcS9N YWtlZmlsZQk1IFNlcCAyMDA4IDE5OjM2OjM5IC0wMDAwCioqKioqKioqKioqKioqKgoqKiog MjksNDEgKioqKgogICMgdGhlIG9iamVjdCBmaWxlcyBmcm9tIGxpYnBncG9ydCwgdGhpcyB3 b3VsZCBub3QgYmUgdHJ1ZSBvbiBhbGwKICAjIHBsYXRmb3Jtcy4KICBMSUJTIDo9ICQoTElC UzotbHBncG9ydD0pCiAgCiAgT0JKUz0JZmUtYXV0aC5vIGZlLWNvbm5lY3QubyBmZS1leGVj Lm8gZmUtbWlzYy5vIGZlLXByaW50Lm8gZmUtbG9iai5vIFwKICAJZmUtcHJvdG9jb2wyLm8g ZmUtcHJvdG9jb2wzLm8gcHFleHBidWZmZXIubyBwcXNpZ25hbC5vIGZlLXNlY3VyZS5vIFwK ISAJbWQ1Lm8gaXAubyB3Y2hhci5vIGVuY25hbWVzLm8gbm9ibG9jay5vIHBnc3RyY2FzZWNt cC5vIHRocmVhZC5vIFwKICAJJChmaWx0ZXIgY3J5cHQubyBnZXRhZGRyaW5mby5vIGluZXRf YXRvbi5vIG9wZW4ubyBzbnByaW50Zi5vIHN0cmVycm9yLm8gc3RybGNweS5vIHdpbjMyZXJy b3IubywgJChMSUJPQkpTKSkKICAKICBpZmVxICgkKFBPUlROQU1FKSwgY3lnd2luKQogIG92 ZXJyaWRlIHNobGliID0gY3lnJChOQU1FKSQoRExTVUZGSVgpCiAgZW5kaWYKICAKLS0tIDI5 LDQxIC0tLS0KICAjIHRoZSBvYmplY3QgZmlsZXMgZnJvbSBsaWJwZ3BvcnQsIHRoaXMgd291 bGQgbm90IGJlIHRydWUgb24gYWxsCiAgIyBwbGF0Zm9ybXMuCiAgTElCUyA6PSAkKExJQlM6 LWxwZ3BvcnQ9KQogIAogIE9CSlM9CWZlLWF1dGgubyBmZS1jb25uZWN0Lm8gZmUtZXhlYy5v IGZlLW1pc2MubyBmZS1wcmludC5vIGZlLWxvYmoubyBcCiAgCWZlLXByb3RvY29sMi5vIGZl LXByb3RvY29sMy5vIHBxZXhwYnVmZmVyLm8gcHFzaWduYWwubyBmZS1zZWN1cmUubyBcCiEg CW1kNS5vIGlwLm8gd2NoYXIubyBlbmNuYW1lcy5vIG5vYmxvY2subyBwZ3N0cmNhc2VjbXAu byB0aHJlYWQubyBsaWJwcS1ldmVudHMubyBcCiAgCSQoZmlsdGVyIGNyeXB0Lm8gZ2V0YWRk cmluZm8ubyBpbmV0X2F0b24ubyBvcGVuLm8gc25wcmludGYubyBzdHJlcnJvci5vIHN0cmxj cHkubyB3aW4zMmVycm9yLm8sICQoTElCT0JKUykpCiAgCiAgaWZlcSAoJChQT1JUTkFNRSks IGN5Z3dpbikKICBvdmVycmlkZSBzaGxpYiA9IGN5ZyQoTkFNRSkkKERMU1VGRklYKQogIGVu ZGlmCiAgCioqKioqKioqKioqKioqKgoqKiogMTAzLDEyMyAqKioqCiAgCiAgJCh0b3BfYnVp bGRkaXIpL3NyYy9wb3J0L3BnX2NvbmZpZ19wYXRocy5oOgogIAkkKE1BS0UpIC1DICQodG9w X2J1aWxkZGlyKS9zcmMvcG9ydCBwZ19jb25maWdfcGF0aHMuaAogIAogIGluc3RhbGw6IGFs bCBpbnN0YWxsZGlycyBpbnN0YWxsLWxpYgogIAkkKElOU1RBTExfREFUQSkgJChzcmNkaXIp L2xpYnBxLWZlLmggJyQoREVTVERJUikkKGluY2x1ZGVkaXIpJwogIAkkKElOU1RBTExfREFU QSkgJChzcmNkaXIpL2xpYnBxLWludC5oICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVy bmFsKScKICAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9wcWV4cGJ1ZmZlci5oICckKERF U1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKScKICAJJChJTlNUQUxMX0RBVEEpICQoc3Jj ZGlyKS9wZ19zZXJ2aWNlLmNvbmYuc2FtcGxlICckKERFU1RESVIpJChkYXRhZGlyKS9wZ19z ZXJ2aWNlLmNvbmYuc2FtcGxlJwogIAogIGluc3RhbGxkaXJzOiBpbnN0YWxsZGlycy1saWIK ICAJJChta2luc3RhbGxkaXJzKSAnJChERVNURElSKSQoaW5jbHVkZWRpciknICckKERFU1RE SVIpJChpbmNsdWRlZGlyX2ludGVybmFsKScKICAKICB1bmluc3RhbGw6IHVuaW5zdGFsbC1s aWIKISAJcm0gLWYgJyQoREVTVERJUikkKGluY2x1ZGVkaXIpL2xpYnBxLWZlLmgnICckKERF U1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKS9saWJwcS1pbnQuaCcgJyQoREVTVERJUikk KGluY2x1ZGVkaXJfaW50ZXJuYWwpL3BxZXhwYnVmZmVyLmgnICckKERFU1RESVIpJChkYXRh ZGlyKS9wZ19zZXJ2aWNlLmNvbmYuc2FtcGxlJwogIAogIGNsZWFuIGRpc3RjbGVhbjogY2xl YW4tbGliCiAgCXJtIC1mICQoT0JKUykgcGdfY29uZmlnX3BhdGhzLmggY3J5cHQuYyBnZXRh ZGRyaW5mby5jIGluZXRfYXRvbi5jIG5vYmxvY2suYyBvcGVuLmMgcGdzdHJjYXNlY21wLmMg c25wcmludGYuYyBzdHJlcnJvci5jIHN0cmxjcHkuYyB0aHJlYWQuYyBtZDUuYyBpcC5jIGVu Y25hbWVzLmMgd2NoYXIuYyB3aW4zMmVycm9yLmMgcGdzbGVlcC5jIHB0aHJlYWQuaCBsaWJw cS5yYwogICMgTWlnaHQgYmUgbGVmdCBvdmVyIGZyb20gYSBXaW4zMiBjbGllbnQtb25seSBi dWlsZAogIAlybSAtZiBwZ19jb25maWdfcGF0aHMuaAogIAotLS0gMTAzLDEyNCAtLS0tCiAg CiAgJCh0b3BfYnVpbGRkaXIpL3NyYy9wb3J0L3BnX2NvbmZpZ19wYXRocy5oOgogIAkkKE1B S0UpIC1DICQodG9wX2J1aWxkZGlyKS9zcmMvcG9ydCBwZ19jb25maWdfcGF0aHMuaAogIAog IGluc3RhbGw6IGFsbCBpbnN0YWxsZGlycyBpbnN0YWxsLWxpYgogIAkkKElOU1RBTExfREFU QSkgJChzcmNkaXIpL2xpYnBxLWZlLmggJyQoREVTVERJUikkKGluY2x1ZGVkaXIpJworIAkk KElOU1RBTExfREFUQSkgJChzcmNkaXIpL2xpYnBxLWV2ZW50cy5oICckKERFU1RESVIpJChp bmNsdWRlZGlyKScKICAJJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9saWJwcS1pbnQuaCAn JChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCknCiAgCSQoSU5TVEFMTF9EQVRBKSAk KHNyY2RpcikvcHFleHBidWZmZXIuaCAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5h bCknCiAgCSQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvcGdfc2VydmljZS5jb25mLnNhbXBs ZSAnJChERVNURElSKSQoZGF0YWRpcikvcGdfc2VydmljZS5jb25mLnNhbXBsZScKICAKICBp bnN0YWxsZGlyczogaW5zdGFsbGRpcnMtbGliCiAgCSQobWtpbnN0YWxsZGlycykgJyQoREVT VERJUikkKGluY2x1ZGVkaXIpJyAnJChERVNURElSKSQoaW5jbHVkZWRpcl9pbnRlcm5hbCkn CiAgCiAgdW5pbnN0YWxsOiB1bmluc3RhbGwtbGliCiEgCXJtIC1mICckKERFU1RESVIpJChp bmNsdWRlZGlyKS9saWJwcS1mZS5oJyAnJChERVNURElSKSQoaW5jbHVkZWRpcikvbGlicHEt ZXZlbnRzLmgnICckKERFU1RESVIpJChpbmNsdWRlZGlyX2ludGVybmFsKS9saWJwcS1pbnQu aCcgJyQoREVTVERJUikkKGluY2x1ZGVkaXJfaW50ZXJuYWwpL3BxZXhwYnVmZmVyLmgnICck KERFU1RESVIpJChkYXRhZGlyKS9wZ19zZXJ2aWNlLmNvbmYuc2FtcGxlJwogIAogIGNsZWFu IGRpc3RjbGVhbjogY2xlYW4tbGliCiAgCXJtIC1mICQoT0JKUykgcGdfY29uZmlnX3BhdGhz LmggY3J5cHQuYyBnZXRhZGRyaW5mby5jIGluZXRfYXRvbi5jIG5vYmxvY2suYyBvcGVuLmMg cGdzdHJjYXNlY21wLmMgc25wcmludGYuYyBzdHJlcnJvci5jIHN0cmxjcHkuYyB0aHJlYWQu YyBtZDUuYyBpcC5jIGVuY25hbWVzLmMgd2NoYXIuYyB3aW4zMmVycm9yLmMgcGdzbGVlcC5j IHB0aHJlYWQuaCBsaWJwcS5yYwogICMgTWlnaHQgYmUgbGVmdCBvdmVyIGZyb20gYSBXaW4z MiBjbGllbnQtb25seSBidWlsZAogIAlybSAtZiBwZ19jb25maWdfcGF0aHMuaAogIApJbmRl eDogc3JjL2ludGVyZmFjZXMvbGlicHEvZXhwb3J0cy50eHQKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1Mg ZmlsZTogL3Byb2plY3RzL2N2c3Jvb3QvcGdzcWwvc3JjL2ludGVyZmFjZXMvbGlicHEvZXhw b3J0cy50eHQsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTkKZGlmZiAtQzYgLXIxLjE5IGV4 cG9ydHMudHh0CioqKiBzcmMvaW50ZXJmYWNlcy9saWJwcS9leHBvcnRzLnR4dAkxOSBNYXIg MjAwOCAwMDozOTozMyAtMDAwMAkxLjE5Ci0tLSBzcmMvaW50ZXJmYWNlcy9saWJwcS9leHBv cnRzLnR4dAk1IFNlcCAyMDA4IDE5OjM2OjM5IC0wMDAwCioqKioqKioqKioqKioqKgoqKiog MTM4LDE0MyAqKioqCi0tLSAxMzgsMTUyIC0tLS0KICBQUXNlbmREZXNjcmliZVBvcnRhbCAg ICAgIDEzNgogIGxvX3RydW5jYXRlICAgICAgICAgICAgICAgMTM3CiAgUFFjb25uZWN0aW9u VXNlZFBhc3N3b3JkICAxMzgKICBwZ192YWxpZF9zZXJ2ZXJfZW5jb2RpbmdfaWQgMTM5CiAg UFFjb25uZWN0aW9uTmVlZHNQYXNzd29yZCAxNDAKICBsb19pbXBvcnRfd2l0aF9vaWQJCSAg MTQxCisgUFFjb3B5UmVzdWx0ICAgICAgICAgICAgICAxNDIKKyBQUXNldFJlc3VsdEF0dHJz ICAgICAgICAgIDE0MworIFBRc2V0dmFsdWUgICAgICAgICAgICAgICAgMTQ0CisgUFFyZXN1 bHRBbGxvYyAgICAgICAgICAgICAxNDUKKyBQUXJlZ2lzdGVyRXZlbnRQcm9jICAgICAgIDE0 NgorIFBRaW5zdGFuY2VEYXRhICAgICAgICAgICAgMTQ3CisgUFFzZXRJbnN0YW5jZURhdGEg ICAgICAgICAxNDgKKyBQUXJlc3VsdEluc3RhbmNlRGF0YSAgICAgIDE0OQorIFBRcmVzdWx0 U2V0SW5zdGFuY2VEYXRhICAgMTUwClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRl eDogc3JjL2ludGVyZmFjZXMvbGlicHEvZmUtY29ubmVjdC5jCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNT IGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL3NyYy9pbnRlcmZhY2VzL2xpYnBxL2Zl LWNvbm5lY3QuYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNTkKZGlmZiAtQzYgLXIxLjM1 OSBmZS1jb25uZWN0LmMKKioqIHNyYy9pbnRlcmZhY2VzL2xpYnBxL2ZlLWNvbm5lY3QuYwky OSBNYXkgMjAwOCAyMjowMjo0NCAtMDAwMAkxLjM1OQotLS0gc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtY29ubmVjdC5jCTUgU2VwIDIwMDggMTk6MzY6MzkgLTAwMDAKKioqKioqKioqKioq KioqCioqKiAxOTcxLDE5ODIgKioqKgotLS0gMTk3MSwyMDAxIC0tLS0KICAgKiByZWxlYXNl IGRhdGEgdGhhdCBpcyB0byBiZSBoZWxkIGZvciB0aGUgbGlmZSBvZiB0aGUgUEdjb25uIHN0 cnVjdHVyZS4KICAgKiBJZiBhIHZhbHVlIG91Z2h0IHRvIGJlIGNsZWFyZWQvZnJlZWQgZHVy aW5nIFBRcmVzZXQoKSwgZG8gaXQgdGhlcmUgbm90IGhlcmUuCiAgICovCiAgc3RhdGljIHZv aWQKICBmcmVlUEdjb25uKFBHY29ubiAqY29ubikKICB7CisgCWludCBpOworIAlQR0V2ZW50 Q29ubkRlc3Ryb3kgZXZ0OworIAorIAkvKiBMZXQgdGhlIGV2ZW50IHByb2NzIGNsZWFudXAg dGhlaXIgc3RhdGUgZGF0YSAqLworIAlmb3IgKGkgPSAwOyBpIDwgY29ubi0+bkV2ZW50czsg aSsrKQorIAl7CisgCQlldnQuY29ubiA9IGNvbm47CisgCQkodm9pZCljb25uLT5ldmVudHNb aV0ucHJvYyhQR0VWVF9DT05OREVTVFJPWSwgJmV2dCwgY29ubi0+ZXZlbnRzW2ldLnBhc3NU aHJvdWdoKTsKKyAJCWZyZWUoY29ubi0+ZXZlbnRzW2ldLm5hbWUpOworIAl9CisgCisgCS8q IGZyZWUgdGhlIFBHRXZlbnQgYXJyYXkgKi8KKyAJaWYgKGNvbm4tPmV2ZW50cykKKyAJewor IAkJZnJlZShjb25uLT5ldmVudHMpOworIAkJY29ubi0+ZXZlbnRzID0gTlVMTDsKKyAJCWNv bm4tPm5FdmVudHMgPSBjb25uLT5ldmVudEFyclNpemUgPSAwOworIAl9CisgCiAgCWlmIChj b25uLT5wZ2hvc3QpCiAgCQlmcmVlKGNvbm4tPnBnaG9zdCk7CiAgCWlmIChjb25uLT5wZ2hv c3RhZGRyKQogIAkJZnJlZShjb25uLT5wZ2hvc3RhZGRyKTsKICAJaWYgKGNvbm4tPnBncG9y dCkKICAJCWZyZWUoY29ubi0+cGdwb3J0KTsKKioqKioqKioqKioqKioqCioqKiAyMTUyLDIx NjUgKioqKgogIFBRcmVzZXQoUEdjb25uICpjb25uKQogIHsKICAJaWYgKGNvbm4pCiAgCXsK ICAJCWNsb3NlUEdjb25uKGNvbm4pOwogIAohIAkJaWYgKGNvbm5lY3REQlN0YXJ0KGNvbm4p KQohIAkJCSh2b2lkKSBjb25uZWN0REJDb21wbGV0ZShjb25uKTsKICAJfQogIH0KICAKICAK ICAvKgogICAqIFBRcmVzZXRTdGFydDoKLS0tIDIxNzEsMjIwMSAtLS0tCiAgUFFyZXNldChQ R2Nvbm4gKmNvbm4pCiAgewogIAlpZiAoY29ubikKICAJewogIAkJY2xvc2VQR2Nvbm4oY29u bik7CiAgCiEgCQlpZiAoY29ubmVjdERCU3RhcnQoY29ubikgJiYgY29ubmVjdERCQ29tcGxl dGUoY29ubikpCiEgCQl7CiEgCQkJaW50IGk7CiEgCQkJUEdFdmVudENvbm5SZXNldCBldnQ7 CiEgCiEgCQkJZm9yIChpID0gMDsgaSA8IGNvbm4tPm5FdmVudHM7IGkrKykKISAJCQl7CiEg CQkJCWV2dC5jb25uID0gY29ubjsKISAKISAJCQkJaWYgKCFjb25uLT5ldmVudHNbaV0ucHJv YyhQR0VWVF9DT05OUkVTRVQsICZldnQsIGNvbm4tPmV2ZW50c1tpXS5wYXNzVGhyb3VnaCkp CiEgCQkJCXsKISAJCQkJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFEOwohIAkJCQkJ cHJpbnRmUFFFeHBCdWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKISAJCQkJCQlsaWJwcV9n ZXR0ZXh0KCJQR0V2ZW50UHJvYyBcIiVzXCIgZmFpbGVkIGR1cmluZyBQR0VWVF9DT05OUkVT RVQgZXZlbnRcbiIpLAohIAkJCQkJCWNvbm4tPmV2ZW50c1tpXS5uYW1lKTsKISAJCQkJCWJy ZWFrOwohIAkJCQl9CiEgCQkJfQohIAkJfQogIAl9CiAgfQogIAogIAogIC8qCiAgICogUFFy ZXNldFN0YXJ0OgoqKioqKioqKioqKioqKioKKioqIDIxODcsMjE5OSAqKioqCiAgICogY2xv c2VzIHRoZSBleGlzdGluZyBjb25uZWN0aW9uIGFuZCBtYWtlcyBhIG5ldyBvbmUKICAgKi8K ICBQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlCiAgUFFyZXNldFBvbGwoUEdjb25uICpjb25u KQogIHsKICAJaWYgKGNvbm4pCiEgCQlyZXR1cm4gUFFjb25uZWN0UG9sbChjb25uKTsKICAK ICAJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwogIH0KICAKICAvKgogICAqIFBRY2Fu Y2VsR2V0OiBnZXQgYSBQR2NhbmNlbCBzdHJ1Y3R1cmUgY29ycmVzcG9uZGluZyB0byBhIGNv bm5lY3Rpb24uCi0tLSAyMjIzLDIyNTkgLS0tLQogICAqIGNsb3NlcyB0aGUgZXhpc3Rpbmcg Y29ubmVjdGlvbiBhbmQgbWFrZXMgYSBuZXcgb25lCiAgICovCiAgUG9zdGdyZXNQb2xsaW5n U3RhdHVzVHlwZQogIFBRcmVzZXRQb2xsKFBHY29ubiAqY29ubikKICB7CiAgCWlmIChjb25u KQohIAl7CiEgCQlQb3N0Z3Jlc1BvbGxpbmdTdGF0dXNUeXBlIHN0YXR1cyA9IFBRY29ubmVj dFBvbGwoY29ubik7CiEgCiEgCQlpZiAoc3RhdHVzID09IFBHUkVTX1BPTExJTkdfT0spCiEg CQl7CiEgCQkJaW50IGk7CiEgCQkJUEdFdmVudENvbm5SZXNldCBldnQ7CiEgCiEgCQkJZm9y IChpID0gMDsgaSA8IGNvbm4tPm5FdmVudHM7IGkrKykKISAJCQl7CiEgCQkJCWV2dC5jb25u ID0gY29ubjsKISAKISAJCQkJaWYgKCFjb25uLT5ldmVudHNbaV0ucHJvYyhQR0VWVF9DT05O UkVTRVQsICZldnQsIGNvbm4tPmV2ZW50c1tpXS5wYXNzVGhyb3VnaCkpCiEgCQkJCXsKISAJ CQkJCWNvbm4tPnN0YXR1cyA9IENPTk5FQ1RJT05fQkFEOwohIAkJCQkJcHJpbnRmUFFFeHBC dWZmZXIoJmNvbm4tPmVycm9yTWVzc2FnZSwKISAJCQkJCQlsaWJwcV9nZXR0ZXh0KCJQR0V2 ZW50UHJvYyBcIiVzXCIgZmFpbGVkIGR1cmluZyBQR0VWVF9DT05OUkVTRVQgZXZlbnRcbiIp LAohIAkJCQkJCWNvbm4tPmV2ZW50c1tpXS5uYW1lKTsKISAJCQkJCXJldHVybiBQR1JFU19Q T0xMSU5HX0ZBSUxFRDsKISAJCQkJfQohIAkJCX0KISAJCX0KISAKISAJCXJldHVybiBzdGF0 dXM7CiEgCX0KICAKICAJcmV0dXJuIFBHUkVTX1BPTExJTkdfRkFJTEVEOwogIH0KICAKICAv KgogICAqIFBRY2FuY2VsR2V0OiBnZXQgYSBQR2NhbmNlbCBzdHJ1Y3R1cmUgY29ycmVzcG9u ZGluZyB0byBhIGNvbm5lY3Rpb24uCkluZGV4OiBzcmMvaW50ZXJmYWNlcy9saWJwcS9mZS1l eGVjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL3Byb2plY3RzL2N2c3Jvb3QvcGdzcWwv c3JjL2ludGVyZmFjZXMvbGlicHEvZmUtZXhlYy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAx LjE5NgpkaWZmIC1DNiAtcjEuMTk2IGZlLWV4ZWMuYwoqKiogc3JjL2ludGVyZmFjZXMvbGli cHEvZmUtZXhlYy5jCTIzIEp1biAyMDA4IDIxOjEwOjQ5IC0wMDAwCTEuMTk2Ci0tLSBzcmMv aW50ZXJmYWNlcy9saWJwcS9mZS1leGVjLmMJNSBTZXAgMjAwOCAxOTozNjozOSAtMDAwMAoq KioqKioqKioqKioqKioKKioqIDYwLDcyICoqKioKICAJCQkJaW50IHJlc3VsdEZvcm1hdCk7 CiAgc3RhdGljIHZvaWQgcGFyc2VJbnB1dChQR2Nvbm4gKmNvbm4pOwogIHN0YXRpYyBib29s IFBRZXhlY1N0YXJ0KFBHY29ubiAqY29ubik7CiAgc3RhdGljIFBHcmVzdWx0ICpQUWV4ZWNG aW5pc2goUEdjb25uICpjb25uKTsKICBzdGF0aWMgaW50IFBRc2VuZERlc2NyaWJlKFBHY29u biAqY29ubiwgY2hhciBkZXNjX3R5cGUsCiAgCQkJICAgY29uc3QgY2hhciAqZGVzY190YXJn ZXQpOwohIAogIAogIC8qIC0tLS0tLS0tLS0tLS0tLS0KICAgKiBTcGFjZSBtYW5hZ2VtZW50 IGZvciBQR3Jlc3VsdC4KICAgKgogICAqIEZvcm1lcmx5LCBsaWJwcSBkaWQgYSBzZXBhcmF0 ZSBtYWxsb2MoKSBmb3IgZWFjaCBmaWVsZCBvZiBlYWNoIHR1cGxlCiAgICogcmV0dXJuZWQg YnkgYSBxdWVyeS4gIFRoaXMgd2FzIHJlbWFya2FibHkgZXhwZW5zaXZlIC0tLSBtYWxsb2Mv ZnJlZQotLS0gNjAsNzIgLS0tLQogIAkJCQlpbnQgcmVzdWx0Rm9ybWF0KTsKICBzdGF0aWMg dm9pZCBwYXJzZUlucHV0KFBHY29ubiAqY29ubik7CiAgc3RhdGljIGJvb2wgUFFleGVjU3Rh cnQoUEdjb25uICpjb25uKTsKICBzdGF0aWMgUEdyZXN1bHQgKlBRZXhlY0ZpbmlzaChQR2Nv bm4gKmNvbm4pOwogIHN0YXRpYyBpbnQgUFFzZW5kRGVzY3JpYmUoUEdjb25uICpjb25uLCBj aGFyIGRlc2NfdHlwZSwKICAJCQkgICBjb25zdCBjaGFyICpkZXNjX3RhcmdldCk7CiEgc3Rh dGljIGludCBjaGVja19maWVsZF9udW1iZXIoY29uc3QgUEdyZXN1bHQgKnJlcywgaW50IGZp ZWxkX251bSk7CiAgCiAgLyogLS0tLS0tLS0tLS0tLS0tLQogICAqIFNwYWNlIG1hbmFnZW1l bnQgZm9yIFBHcmVzdWx0LgogICAqCiAgICogRm9ybWVybHksIGxpYnBxIGRpZCBhIHNlcGFy YXRlIG1hbGxvYygpIGZvciBlYWNoIGZpZWxkIG9mIGVhY2ggdHVwbGUKICAgKiByZXR1cm5l ZCBieSBhIHF1ZXJ5LiAgVGhpcyB3YXMgcmVtYXJrYWJseSBleHBlbnNpdmUgLS0tIG1hbGxv Yy9mcmVlCioqKioqKioqKioqKioqKgoqKiogMTIxLDE0MSAqKioqCi0tLSAxMjEsMTcwIC0t LS0KICAjZGVmaW5lIFBHUkVTVUxUX0RBVEFfQkxPQ0tTSVpFCQkyMDQ4CiAgI2RlZmluZSBQ R1JFU1VMVF9BTElHTl9CT1VOREFSWQkJTUFYSU1VTV9BTElHTk9GCQkvKiBmcm9tIGNvbmZp Z3VyZSAqLwogICNkZWZpbmUgUEdSRVNVTFRfQkxPQ0tfT1ZFUkhFQUQJCU1heChzaXplb2Yo UEdyZXN1bHRfZGF0YSksIFBHUkVTVUxUX0FMSUdOX0JPVU5EQVJZKQogICNkZWZpbmUgUEdS RVNVTFRfU0VQX0FMTE9DX1RIUkVTSE9MRAkoUEdSRVNVTFRfREFUQV9CTE9DS1NJWkUgLyAy KQogIAogIAorIC8qIERvZXMgbm90IGR1cGxpY2F0ZSB0aGUgZXZlbnQgaW5zdGFuY2UgZGF0 YSwgc2V0cyB0aGlzIHRvIE5VTEwgKi8KKyBzdGF0aWMgUEdFdmVudCAqCisgZHVwRXZlbnRz KFBHRXZlbnQgKmV2ZW50cywgaW50IGNvdW50KQorIHsKKyAJaW50IGk7CisgCVBHRXZlbnQg Km5ld0V2ZW50czsKKyAKKyAJaWYgKCFldmVudHMgfHwgY291bnQgPD0gMCkKKyAJCXJldHVy biBOVUxMOworIAorIAluZXdFdmVudHMgPSAoUEdFdmVudCAqKSBtYWxsb2MoY291bnQgKiBz aXplb2YoUEdFdmVudCkpOworIAlpZiAoIW5ld0V2ZW50cykKKyAJCXJldHVybiBOVUxMOwor IAorIAltZW1jcHkobmV3RXZlbnRzLCBldmVudHMsIGNvdW50ICogc2l6ZW9mKFBHRXZlbnQp KTsKKyAKKyAJLyogTlVMTCBvdXQgdGhlIGRhdGEgcG9pbnRlciBhbmQgZGVlcCBjb3B5IG5h bWUgKi8KKyAJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisgCXsKKyAJCW5ld0V2ZW50 c1tpXS5uYW1lID0gc3RyZHVwKG5ld0V2ZW50c1tpXS5uYW1lKTsKKyAJCW5ld0V2ZW50c1tp XS5kYXRhID0gTlVMTDsKKyAJfQorIAorIAlyZXR1cm4gbmV3RXZlbnRzOworIH0KKyAKICAv KgogICAqIFBRbWFrZUVtcHR5UEdyZXN1bHQKICAgKgkgcmV0dXJucyBhIG5ld2x5IGFsbG9j YXRlZCwgaW5pdGlhbGl6ZWQgUEdyZXN1bHQgd2l0aCBnaXZlbiBzdGF0dXMuCiAgICoJIElm IGNvbm4gaXMgbm90IE5VTEwgYW5kIHN0YXR1cyBpbmRpY2F0ZXMgYW4gZXJyb3IsIHRoZSBj b25uJ3MKICAgKgkgZXJyb3JNZXNzYWdlIGlzIGNvcGllZC4KICAgKgogICAqIE5vdGUgdGhp cyBpcyBleHBvcnRlZCAtLS0geW91IHdvdWxkbid0IHRoaW5rIGFuIGFwcGxpY2F0aW9uIHdv dWxkIG5lZWQKICAgKiB0byBidWlsZCBpdHMgb3duIFBHcmVzdWx0cywgYnV0IHRoaXMgaGFz IHByb3ZlbiB1c2VmdWwgaW4gYm90aCBsaWJwZ3RjbAogICAqIGFuZCB0aGUgUGVybDUgaW50 ZXJmYWNlLCBzbyBtYXliZSBpdCdzIG5vdCBzbyB1bnJlYXNvbmFibGUuCisgICoKKyAgKiBV cGRhdGVkIEFwcmlsIDIwMDggLSBJZiBjb25uIGlzIG5vdCBOVUxMLCBldmVudCBzdGF0ZXMg d2lsbCBiZSBjb3BpZWQKKyAgKiBmcm9tIHRoZSBQR2Nvbm4gdG8gdGhlIGNyZWF0ZWQgUEdy ZXN1bHQuCiAgICovCiAgCiAgUEdyZXN1bHQgKgogIFBRbWFrZUVtcHR5UEdyZXN1bHQoUEdj b25uICpjb25uLCBFeGVjU3RhdHVzVHlwZSBzdGF0dXMpCiAgewogIAlQR3Jlc3VsdCAgICpy ZXN1bHQ7CioqKioqKioqKioqKioqKgoqKiogMTU3LDE3NSAqKioqCi0tLSAxODYsMjE5IC0t LS0KICAJcmVzdWx0LT5lcnJNc2cgPSBOVUxMOwogIAlyZXN1bHQtPmVyckZpZWxkcyA9IE5V TEw7CiAgCXJlc3VsdC0+bnVsbF9maWVsZFswXSA9ICdcMCc7CiAgCXJlc3VsdC0+Y3VyQmxv Y2sgPSBOVUxMOwogIAlyZXN1bHQtPmN1ck9mZnNldCA9IDA7CiAgCXJlc3VsdC0+c3BhY2VM ZWZ0ID0gMDsKKyAJcmVzdWx0LT5uRXZlbnRzID0gMDsKKyAJcmVzdWx0LT5ldmVudHMgPSBO VUxMOwogIAogIAlpZiAoY29ubikKICAJewogIAkJLyogY29weSBjb25uZWN0aW9uIGRhdGEg d2UgbWlnaHQgbmVlZCBmb3Igb3BlcmF0aW9ucyBvbiBQR3Jlc3VsdCAqLwogIAkJcmVzdWx0 LT5ub3RpY2VIb29rcyA9IGNvbm4tPm5vdGljZUhvb2tzOwogIAkJcmVzdWx0LT5jbGllbnRf ZW5jb2RpbmcgPSBjb25uLT5jbGllbnRfZW5jb2Rpbmc7CiAgCisgCQkvKiBjb3B5IGV2ZW50 cyBmcm9tIGNvbm5lY3Rpb24gKi8KKyAJCWlmIChjb25uLT5uRXZlbnRzID4gMCkKKyAJCXsK KyAJCQlyZXN1bHQtPmV2ZW50cyA9IGR1cEV2ZW50cyhjb25uLT5ldmVudHMsIGNvbm4tPm5F dmVudHMpOworIAkJCWlmICghcmVzdWx0LT5ldmVudHMpCisgCQkJeworIAkJCQlQUWNsZWFy KHJlc3VsdCk7CisgCQkJCXJldHVybiBOVUxMOworIAkJCX0KKyAKKyAJCQlyZXN1bHQtPm5F dmVudHMgPSBjb25uLT5uRXZlbnRzOworIAkJfQorIAogIAkJLyogY29uc2lkZXIgY29weWlu ZyBjb25uJ3MgZXJyb3JNZXNzYWdlICovCiAgCQlzd2l0Y2ggKHN0YXR1cykKICAJCXsKICAJ CQljYXNlIFBHUkVTX0VNUFRZX1FVRVJZOgogIAkJCWNhc2UgUEdSRVNfQ09NTUFORF9PSzoK ICAJCQljYXNlIFBHUkVTX1RVUExFU19PSzoKKioqKioqKioqKioqKioqCioqKiAxOTIsMjAz ICoqKioKLS0tIDIzNiw0OTQgLS0tLQogIAkJcmVzdWx0LT5jbGllbnRfZW5jb2RpbmcgPSBQ R19TUUxfQVNDSUk7CiAgCX0KICAKICAJcmV0dXJuIHJlc3VsdDsKICB9CiAgCisgLyogUFFz ZXRSZXN1bHRBdHRycworICAqIFNldCB0aGUgYXR0cmlidXRlcyBmb3IgYSBnaXZlbiByZXN1 bHQuICBUaGlzIGZ1bmN0aW9uIGZhaWxzIGlmIHRoZXJlIGFyZQorICAqIGFscmVhZHkgYXR0 cmlidXRlcyBjb250YWluZWQgaW4gdGhlIHByb3ZpZGVkIHJlc3VsdC4gIFRoZSBjYWxsIGlz CisgICogaWdub3JlZCBpZiBudW1BdHRyaWJ1dGVzIGlzIGlzIHplcm8gb3IgYXR0RGVzY3Mg aXMgTlVMTC4gIElmIHRoZQorICAqIGZ1bmN0aW9uIGZhaWxzLCBpdCByZXR1cm5zIHplcm8u ICBJZiB0aGUgZnVuY3Rpb24gc3VjY2VlZHMsIGl0CisgICogcmV0dXJucyBhIG5vbi16ZXJv IHZhbHVlLgorICAqLworIGludAorIFBRc2V0UmVzdWx0QXR0cnMoUEdyZXN1bHQgKnJlcywg aW50IG51bUF0dHJpYnV0ZXMsIFBHcmVzQXR0RGVzYyAqYXR0RGVzY3MpCisgeworIAlpbnQg aTsKKyAKKyAJLyogSWYgYXR0cnMgYWxyZWFkeSBleGlzdCwgdGhleSBjYW5ub3QgYmUgb3Zl cndyaXR0ZW4uICovCisgCWlmICghcmVzIHx8IHJlcy0+bnVtQXR0cmlidXRlcyA+IDApCisg CQlyZXR1cm4gRkFMU0U7CisgCisgCS8qIGlnbm9yZSByZXF1ZXN0ICovCisgCWlmIChudW1B dHRyaWJ1dGVzIDw9IDAgfHwgIWF0dERlc2NzKQorIAkJcmV0dXJuIFRSVUU7CisgCisgCXJl cy0+YXR0RGVzY3MgPSAoUEdyZXNBdHREZXNjICopIFBRcmVzdWx0QWxsb2MocmVzLAorIAkJ bnVtQXR0cmlidXRlcyAqIHNpemVvZihQR3Jlc0F0dERlc2MpKTsKKyAKKyAJaWYgKCFyZXMt PmF0dERlc2NzKQorIAkJcmV0dXJuIEZBTFNFOworIAorIAlyZXMtPm51bUF0dHJpYnV0ZXMg PSBudW1BdHRyaWJ1dGVzOworIAltZW1jcHkocmVzLT5hdHREZXNjcywgYXR0RGVzY3MsCisg CQludW1BdHRyaWJ1dGVzICogc2l6ZW9mKFBHcmVzQXR0RGVzYykpOworIAorIAkvKiByZXN1 bHRhbGxvYyB0aGUgYXR0cmlidXRlIG5hbWVzLiAgVGhlIGFib3ZlIG1lbWNweSBoYXMgdGhl IGF0dHIKKyAJICogbmFtZXMgcG9pbnRpbmcgYXQgdGhlIGNhbGxlcnMgcHJvdmlkZWQgYXR0 RGVzY3MgbWVtb3J5LgorIAkgKi8KKyAJcmVzLT5iaW5hcnkgPSAxOworIAlmb3IgKGkgPSAw OyBpIDwgcmVzLT5udW1BdHRyaWJ1dGVzOyBpKyspCisgCXsKKyAJCWlmIChyZXMtPmF0dERl c2NzW2ldLm5hbWUpCisgCQkJcmVzLT5hdHREZXNjc1tpXS5uYW1lID0gcHFSZXN1bHRTdHJk dXAocmVzLCByZXMtPmF0dERlc2NzW2ldLm5hbWUpOworIAkJZWxzZQorIAkJCXJlcy0+YXR0 RGVzY3NbaV0ubmFtZSA9IHJlcy0+bnVsbF9maWVsZDsKKyAKKyAJCWlmICghcmVzLT5hdHRE ZXNjc1tpXS5uYW1lKQorIAkJCXJldHVybiBGQUxTRTsKKyAKKyAJCS8qIEFsdGhvdWdoIGRl cHJlY2F0ZWQsIGJlY2F1c2UgcmVzdWx0cyBjYW4gaGF2ZSB0ZXh0K2JpbmFyeSBjb2x1bW5z LAorIAkJICogaXRzIGVhc3kgZW5vdWdoIHRvIGRlZHVjZSBzbyBzZXQgaXQgZm9yIGNvbXBs ZXRlbmVzcy4KKyAJCSAqLworIAkJaWYgKHJlcy0+YXR0RGVzY3NbaV0uZm9ybWF0ID09IDAp CisgCQkJcmVzLT5iaW5hcnkgPSAwOworIAl9CisgCisgCXJldHVybiBUUlVFOworIH0KKyAK KyAvKgorICAqIFBRY29weVJlc3VsdAorICAqIFJldHVybnMgYSBkZWVwIGNvcHkgb2YgdGhl IHByb3ZpZGVkICdzcmMnIFBHcmVzdWx0LCB3aGljaCBjYW5ub3QgYmUgTlVMTC4KKyAgKiBU aGUgJ2ZsYWdzJyBhcmd1bWVudCBjb250cm9scyB3aGljaCBwb3J0aW9ucyBvZiB0aGUgcmVz dWx0IHdpbGwgb3Igd2lsbAorICAqIE5PVCBiZSBjb3BpZWQuICBUaGUgY3JlYXRlZCByZXN1 bHQgaXMgYWx3YXlzIHB1dCBpbnRvIHRoZQorICAqIFBHUkVTX1RVUExFU19PSyBzdGF0dXMu ICBUaGUgc291cmNlIHJlc3VsdCBlcnJvciBtZXNzYWdlIGlzIG5vdCBjb3BpZWQsCisgICog YWx0aG91Z2ggY21kU3RhdHVzIGlzLgorICAqCisgICogVG8gc2V0IGN1c3RvbSBhdHRyaWJ1 dGVzLCBzZWUgUFFzZXRSZXN1bHRBdHRycy4gIFRoYXQgZnVuY3Rpb24gcmVxdWlyZXMKKyAg KiB0aGF0IHRoZXJlIGFyZSBubyBhdHRycyBjb250YWluZWQgaW4gdGhlIHJlc3VsdCwgc28g dG8gdXNlIHRoYXQKKyAgKiBmdW5jdGlvbiB5b3UgY2Fubm90IHVzZSB0aGUgUEdfQ09QWVJF U19BVFRSUyBvciBQR19DT1BZUkVTX1RVUExFUworICAqIG9wdGlvbnMgd2l0aCB0aGlzIGZ1 bmN0aW9uLgorICAqCisgICogT3B0aW9uczoKKyAgKiAgIFBHX0NPUFlSRVNfQVRUUlMgLSBD b3B5IHRoZSBzb3VyY2UgcmVzdWx0J3MgYXR0cmlidXRlcworICAqCisgICogICBQR19DT1BZ UkVTX1RVUExFUyAtIENvcHkgdGhlIHNvdXJjZSByZXN1bHQncyB0dXBsZXMuICBUaGlzIGlt cGxpZXMKKyAgKiAgIGNvcHlpbmcgdGhlIGF0dHJzLCBiZWluZyBob3cgdGhlIGF0dHJzIGFy ZSBuZWVkZWQgYnkgdGhlIHR1cGxlcy4KKyAgKgorICAqICAgUEdfQ09QWVJFU19FVkVOVFMg LSBDb3B5IHRoZSBzb3VyY2UgcmVzdWx0J3MgZXZlbnRzLgorICAqCisgICogICBQR19DT1BZ UkVTX05PVElDRUhPT0tTIC0gQ29weSB0aGUgc291cmNlIHJlc3VsdCdzIG5vdGljZSBob29r cy4KKyAgKi8KKyAKKyBQR3Jlc3VsdCAqCisgUFFjb3B5UmVzdWx0KGNvbnN0IFBHcmVzdWx0 ICpzcmMsIGludCBmbGFncykKKyB7CisgCWludCBpOworIAlQR3Jlc3VsdCAqZGVzdDsKKyAJ UEdFdmVudFJlc3VsdENvcHkgZXZ0OworIAorIAlpZiAoIXNyYykKKyAJCXJldHVybiBOVUxM OworIAorIAkvKiBBdXRvbWF0aWNhbGx5IHR1cm4gb24gYXR0cnMgZmxhZ3MgYmVjYXVzZSB5 b3UgY2FuJ3QgY29weSB0dXBsZXMKKyAJICogd2l0aG91dCBjb3B5aW5nIHRoZSBhdHRycy4g IF9UVVBMRVMgaW1wbGllcyBfQVRUUlMuCisgCSAqLworIAlpZiAoZmxhZ3MgJiBQR19DT1BZ UkVTX1RVUExFUykKKyAJCWZsYWdzIHw9IFBHX0NPUFlSRVNfQVRUUlM7CisgCisgCWRlc3Qg PSBQUW1ha2VFbXB0eVBHcmVzdWx0KChQR2Nvbm4gKilOVUxMLCBQR1JFU19UVVBMRVNfT0sp OworIAlpZiAoIWRlc3QpCisgCQlyZXR1cm4gTlVMTDsKKyAKKyAJLyogYWx3YXlzIGNvcHkg dGhlc2Ugb3Zlci4gIElzIGNtZFN0YXR1cyB1c2VmdWwgaGVyZT8gKi8KKyAJZGVzdC0+Y2xp ZW50X2VuY29kaW5nID0gc3JjLT5jbGllbnRfZW5jb2Rpbmc7CisgCXN0cmNweShkZXN0LT5j bWRTdGF0dXMsIHNyYy0+Y21kU3RhdHVzKTsKKyAKKyAJLyogV2FudHMgdG8gY29weSBub3Rp Y2UgaG9va3MgKi8KKyAJaWYgKGZsYWdzICYgUEdfQ09QWVJFU19OT1RJQ0VIT09LUykKKyAJ CWRlc3QtPm5vdGljZUhvb2tzID0gc3JjLT5ub3RpY2VIb29rczsKKyAKKyAJLyogV2FudHMg YXR0cnMgKi8KKyAJaWYgKChmbGFncyAmIFBHX0NPUFlSRVNfQVRUUlMpICYmCisgCQkgIVBR c2V0UmVzdWx0QXR0cnMoZGVzdCwgc3JjLT5udW1BdHRyaWJ1dGVzLCBzcmMtPmF0dERlc2Nz KSkKKyAJeworIAkJUFFjbGVhcihkZXN0KTsKKyAJCXJldHVybiBOVUxMOworIAl9CisgCisg CS8qIFdhbnRzIHRvIGNvcHkgcmVzdWx0IHR1cGxlczogdXNlIFBRc2V0dmFsdWUoKS4gKi8K KyAJaWYgKChmbGFncyAmIFBHX0NPUFlSRVNfVFVQTEVTKSAmJiBzcmMtPm50dXBzID4gMCkK KyAJeworIAkJaW50IHR1cCwgZmllbGQ7CisgCQlmb3IgKHR1cCA9IDA7IHR1cCA8IHNyYy0+ bnR1cHM7IHR1cCsrKQorIAkJCWZvciAoZmllbGQgPSAwOyBmaWVsZCA8IHNyYy0+bnVtQXR0 cmlidXRlczsgZmllbGQrKykKKyAJCQkJUFFzZXR2YWx1ZShkZXN0LCB0dXAsIGZpZWxkLCBz cmMtPnR1cGxlc1t0dXBdW2ZpZWxkXS52YWx1ZSwKKyAJCQkJCXNyYy0+dHVwbGVzW3R1cF1b ZmllbGRdLmxlbik7CisgCX0KKyAKKyAJLyogV2FudHMgdG8gY29weSBQR0V2ZW50cy4gKi8K KyAJaWYgKChmbGFncyAmIFBHX0NPUFlSRVNfRVZFTlRTKSAmJiBzcmMtPm5FdmVudHMgPiAw KQorIAl7CisgCQlkZXN0LT5ldmVudHMgPSBkdXBFdmVudHMoc3JjLT5ldmVudHMsIHNyYy0+ bkV2ZW50cyk7CisgCQlpZiAoIWRlc3QtPmV2ZW50cykKKyAJCXsKKyAJCQlQUWNsZWFyKGRl c3QpOworIAkJCXJldHVybiBOVUxMOworIAkJfQorIAorIAkJZGVzdC0+bkV2ZW50cyA9IHNy Yy0+bkV2ZW50czsKKyAJfQorIAorIAkvKiBUcmlnZ2VyIFBHRVZUX1JFU1VMVENPUFkgZXZl bnQgKi8KKyAJZm9yIChpID0gMDsgaSA8IGRlc3QtPm5FdmVudHM7IGkrKykKKyAJeworIAkJ ZXZ0LnNyYyA9IHNyYzsKKyAJCWV2dC5kZXN0ID0gZGVzdDsKKyAJCWlmICghZGVzdC0+ZXZl bnRzW2ldLnByb2MoUEdFVlRfUkVTVUxUQ09QWSwgJmV2dCwgZGVzdC0+ZXZlbnRzW2ldLnBh c3NUaHJvdWdoKSkKKyAJCXsKKyAJCQlQUWNsZWFyKGRlc3QpOworIAkJCXJldHVybiBOVUxM OworIAkJfQorIAl9CisgCisgCXJldHVybiBkZXN0OworIH0KKyAKKyBpbnQKKyBQUXNldHZh bHVlKFBHcmVzdWx0ICpyZXMsIGludCB0dXBfbnVtLCBpbnQgZmllbGRfbnVtLAorIAljaGFy ICp2YWx1ZSwgaW50IGxlbikKKyB7CisgCVBHcmVzQXR0VmFsdWUgKmF0dHZhbDsKKyAKKyAJ aWYgKCFjaGVja19maWVsZF9udW1iZXIocmVzLCBmaWVsZF9udW0pKQorIAkJcmV0dXJuIEZB TFNFOworIAorIAkvKiBJbnZhbGlkIHR1cF9udW0sIG11c3QgYmUgPD0gbnR1cHMgKi8KKyAJ aWYgKHR1cF9udW0gPiByZXMtPm50dXBzKQorIAkJcmV0dXJuIEZBTFNFOworIAorIAkvKiBu ZWVkIHRvIGdyb3cgdGhlIHR1cGxlIHRhYmxlICovCisgCWlmIChyZXMtPm50dXBzID49IHJl cy0+dHVwQXJyU2l6ZSkKKyAJeworIAkJaW50IG4gPSByZXMtPnR1cEFyclNpemUgPyByZXMt PnR1cEFyclNpemUgKiAyIDogMTI4OworIAkJUEdyZXNBdHRWYWx1ZSAqKnR1cHM7CisgCisg CQlpZiAocmVzLT50dXBsZXMpCisgCQkJdHVwcyA9IChQR3Jlc0F0dFZhbHVlICoqKSByZWFs bG9jKHJlcy0+dHVwbGVzLCBuICogc2l6ZW9mKFBHcmVzQXR0VmFsdWUgKikpOworIAkJZWxz ZQorIAkJCXR1cHMgPSAoUEdyZXNBdHRWYWx1ZSAqKikgbWFsbG9jKG4gKiBzaXplb2YoUEdy ZXNBdHRWYWx1ZSAqKSk7CisgCisgCQlpZiAoIXR1cHMpCisgCQkJcmV0dXJuIEZBTFNFOwor IAorIAkJbWVtc2V0KHR1cHMgKyByZXMtPnR1cEFyclNpemUsIDAsCisgCQkJKG4gLSByZXMt PnR1cEFyclNpemUpICogc2l6ZW9mKFBHcmVzQXR0VmFsdWUgKikpOworIAkJcmVzLT50dXBs ZXMgPSB0dXBzOworIAkJcmVzLT50dXBBcnJTaXplID0gbjsKKyAJfQorIAorIAkvKiBuZWVk IHRvIGFsbG9jYXRlIGEgbmV3IHR1cGxlICovCisgCWlmICh0dXBfbnVtID09IHJlcy0+bnR1 cHMgJiYgIXJlcy0+dHVwbGVzW3R1cF9udW1dKQorIAl7CisgCQlpbnQgaTsKKyAJCVBHcmVz QXR0VmFsdWUgKnR1cDsKKyAKKyAJCXR1cCA9IChQR3Jlc0F0dFZhbHVlICopIHBxUmVzdWx0 QWxsb2MocmVzLAorIAkJCXJlcy0+bnVtQXR0cmlidXRlcyAqIHNpemVvZihQR3Jlc0F0dFZh bHVlKSwgVFJVRSk7CisgCisgCQlpZiAoIXR1cCkKKyAJCQlyZXR1cm4gRkFMU0U7CisgCisg CQkvKiBpbml0aWFsaXplIGVhY2ggY29sdW1uIHRvIE5VTEwgKi8KKyAJCWZvciAoaSA9IDA7 IGkgPCByZXMtPm51bUF0dHJpYnV0ZXM7IGkrKykKKyAJCXsKKyAJCQl0dXBbaV0ubGVuID0g TlVMTF9MRU47CisgCQkJdHVwW2ldLnZhbHVlID0gcmVzLT5udWxsX2ZpZWxkOworIAkJfQor IAorIAkJcmVzLT50dXBsZXNbdHVwX251bV0gPSB0dXA7CisgCQlyZXMtPm50dXBzKys7Cisg CX0KKyAKKyAJYXR0dmFsID0gJnJlcy0+dHVwbGVzW3R1cF9udW1dW2ZpZWxkX251bV07Cisg CisgCS8qIE9uIHRvcCBvZiBOVUxMX0xFTiwgdHJlYXQgYSBOVUxMIHZhbHVlIGFzIGEgTlVM TCBmaWVsZCAqLworIAlpZiAobGVuID09IE5VTExfTEVOIHx8IHZhbHVlID09IE5VTEwpCisg CXsKKyAJCWF0dHZhbC0+bGVuID0gTlVMTF9MRU47CisgCQlhdHR2YWwtPnZhbHVlID0gcmVz LT5udWxsX2ZpZWxkOworIAl9CisgCWVsc2UKKyAJeworIAkJaWYgKGxlbiA8IDApCisgCQkJ bGVuID0gMDsKKyAKKyAJCWlmIChsZW4gPT0gMCkKKyAJCXsKKyAJCQlhdHR2YWwtPmxlbiA9 IDA7CisgCQkJYXR0dmFsLT52YWx1ZSA9IHJlcy0+bnVsbF9maWVsZDsKKyAJCX0KKyAJCWVs c2UKKyAJCXsKKyAJCQlhdHR2YWwtPnZhbHVlID0gKGNoYXIgKikgUFFyZXN1bHRBbGxvYyhy ZXMsIGxlbiArIDEpOworIAkJCWlmICghYXR0dmFsLT52YWx1ZSkKKyAJCQkJcmV0dXJuIEZB TFNFOworIAorIAkJCWF0dHZhbC0+bGVuID0gbGVuOworIAkJCW1lbWNweShhdHR2YWwtPnZh bHVlLCB2YWx1ZSwgbGVuKTsKKyAJCQlhdHR2YWwtPnZhbHVlW2xlbl0gPSAnXDAnOworIAkJ fQorIAl9CisgCisgCXJldHVybiBUUlVFOworIH0KKyAKKyB2b2lkICoKKyBQUXJlc3VsdEFs bG9jKFBHcmVzdWx0ICpyZXMsIHNpemVfdCBuQnl0ZXMpCisgeworIAlyZXR1cm4gcHFSZXN1 bHRBbGxvYyhyZXMsIG5CeXRlcywgVFJVRSk7CisgfQorIAogIC8qCiAgICogcHFSZXN1bHRB bGxvYyAtCiAgICoJCUFsbG9jYXRlIHN1YnNpZGlhcnkgc3RvcmFnZSBmb3IgYSBQR3Jlc3Vs dC4KICAgKgogICAqIG5CeXRlcyBpcyB0aGUgYW1vdW50IG9mIHNwYWNlIG5lZWRlZCBmb3Ig dGhlIG9iamVjdC4KICAgKiBJZiBpc0JpbmFyeSBpcyB0cnVlLCB3ZSBhc3N1bWUgdGhhdCB3 ZSBuZWVkIHRvIGFsaWduIHRoZSBvYmplY3Qgb24KKioqKioqKioqKioqKioqCioqKiAzNDks MzY1ICoqKioKLS0tIDY0MCw2NzIgLS0tLQogICAqIFBRY2xlYXIgLQogICAqCSAgZnJlZSdz IHRoZSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGEgUEdyZXN1bHQKICAgKi8KICB2b2lkCiAg UFFjbGVhcihQR3Jlc3VsdCAqcmVzKQogIHsKKyAJaW50IGk7CiAgCVBHcmVzdWx0X2RhdGEg KmJsb2NrOworIAlQR0V2ZW50UmVzdWx0RGVzdHJveSBldnQ7CiAgCiAgCWlmICghcmVzKQog IAkJcmV0dXJuOwogIAorIAlmb3IgKGkgPSAwOyBpIDwgcmVzLT5uRXZlbnRzOyBpKyspCisg CXsKKyAJCWV2dC5yZXN1bHQgPSByZXM7CisgCQkodm9pZClyZXMtPmV2ZW50c1tpXS5wcm9j KFBHRVZUX1JFU1VMVERFU1RST1ksICZldnQsIHJlcy0+ZXZlbnRzW2ldLnBhc3NUaHJvdWdo KTsKKyAJCWZyZWUocmVzLT5ldmVudHNbaV0ubmFtZSk7CisgCX0KKyAKKyAJaWYgKHJlcy0+ ZXZlbnRzKQorIAl7CisgCQlmcmVlKHJlcy0+ZXZlbnRzKTsKKyAJCXJlcy0+ZXZlbnRzID0g TlVMTDsKKyAJCXJlcy0+bkV2ZW50cyA9IDA7CisgCX0KKyAKICAJLyogRnJlZSBhbGwgdGhl IHN1YnNpZGlhcnkgYmxvY2tzICovCiAgCXdoaWxlICgoYmxvY2sgPSByZXMtPmN1ckJsb2Nr KSAhPSBOVUxMKQogIAl7CiAgCQlyZXMtPmN1ckJsb2NrID0gYmxvY2stPm5leHQ7CiAgCQlm cmVlKGJsb2NrKTsKICAJfQoqKioqKioqKioqKioqKioKKioqIDExOTIsMTIwNCAqKioqCiAg ICoJICBtZW1vcnkpLgogICAqLwogIAogIFBHcmVzdWx0ICoKICBQUWdldFJlc3VsdChQR2Nv bm4gKmNvbm4pCiAgewohIAlQR3Jlc3VsdCAgICpyZXM7CiAgCiAgCWlmICghY29ubikKICAJ CXJldHVybiBOVUxMOwogIAogIAkvKiBQYXJzZSBhbnkgYXZhaWxhYmxlIGRhdGEsIGlmIG91 ciBzdGF0ZSBwZXJtaXRzLiAqLwogIAlwYXJzZUlucHV0KGNvbm4pOwotLS0gMTQ5OSwxNTEx IC0tLS0KICAgKgkgIG1lbW9yeSkuCiAgICovCiAgCiAgUEdyZXN1bHQgKgogIFBRZ2V0UmVz dWx0KFBHY29ubiAqY29ubikKICB7CiEgCVBHcmVzdWx0ICAgKnJlcz1OVUxMOwogIAogIAlp ZiAoIWNvbm4pCiAgCQlyZXR1cm4gTlVMTDsKICAKICAJLyogUGFyc2UgYW55IGF2YWlsYWJs ZSBkYXRhLCBpZiBvdXIgc3RhdGUgcGVybWl0cy4gKi8KICAJcGFyc2VJbnB1dChjb25uKTsK KioqKioqKioqKioqKioqCioqKiAxMjY3LDEyNzggKioqKgotLS0gMTU3NCwxNjEzIC0tLS0K ICAJCQkJCQkJICBsaWJwcV9nZXR0ZXh0KCJ1bmV4cGVjdGVkIGFzeW5jU3RhdHVzOiAlZFxu IiksCiAgCQkJCQkJCSAgKGludCkgY29ubi0+YXN5bmNTdGF0dXMpOwogIAkJCXJlcyA9IFBR bWFrZUVtcHR5UEdyZXN1bHQoY29ubiwgUEdSRVNfRkFUQUxfRVJST1IpOwogIAkJCWJyZWFr OwogIAl9CiAgCisgCWlmIChyZXMgJiYgcmVzLT5uRXZlbnRzID4gMCAmJgorIAkJKHJlcy0+ cmVzdWx0U3RhdHVzID09IFBHUkVTX0NPTU1BTkRfT0sgfHwKKyAJCSByZXMtPnJlc3VsdFN0 YXR1cyA9PSBQR1JFU19UVVBMRVNfT0sgfHwKKyAJCSByZXMtPnJlc3VsdFN0YXR1cyA9PSBQ R1JFU19FTVBUWV9RVUVSWSkpCisgCXsKKyAJCWludCBpOworIAkJUEdFdmVudFJlc3VsdENy ZWF0ZSBldnQ7CisgCisgCQlmb3IgKGkgPSAwOyBpIDwgcmVzLT5uRXZlbnRzOyBpKyspCisg CQl7CisgCQkJZXZ0LmNvbm4gPSBjb25uOworIAkJCWV2dC5yZXN1bHQgPSByZXM7CisgCisg CQkJaWYgKCFyZXMtPmV2ZW50c1tpXS5wcm9jKFBHRVZUX1JFU1VMVENSRUFURSwgJmV2dCwg cmVzLT5ldmVudHNbaV0ucGFzc1Rocm91Z2gpKQorIAkJCXsKKyAJCQkJY2hhciBtc2dbMjU2 XTsKKyAKKyAJCQkJc3ByaW50Zihtc2csCisgCQkJCQkiUEdFdmVudFByb2MgXCIlc1wiIGZh aWxlZCBkdXJpbmcgUEdFVlRfUkVTVUxUQ1JFQVRFIGV2ZW50IiwKKyAJCQkJCXJlcy0+ZXZl bnRzW2ldLm5hbWUpOworIAorIAkJCQlwcVNldFJlc3VsdEVycm9yKHJlcywgbXNnKTsKKyAJ CQkJcmVzLT5yZXN1bHRTdGF0dXMgPSBQR1JFU19GQVRBTF9FUlJPUjsKKyAJCQkJYnJlYWs7 CisgCQkJfQorIAkJfQorIAl9CisgCiAgCXJldHVybiByZXM7CiAgfQogIAogIAogIC8qCiAg ICogUFFleGVjCkluZGV4OiBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1mZS5oCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9wcm9qZWN0cy9jdnNyb290L3Bnc3FsL3NyYy9pbnRlcmZh Y2VzL2xpYnBxL2xpYnBxLWZlLmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQyCmRpZmYg LUM2IC1yMS4xNDIgbGlicHEtZmUuaAoqKiogc3JjL2ludGVyZmFjZXMvbGlicHEvbGlicHEt ZmUuaAkxOSBNYXIgMjAwOCAwMDozOTozMyAtMDAwMAkxLjE0MgotLS0gc3JjL2ludGVyZmFj ZXMvbGlicHEvbGlicHEtZmUuaAk1IFNlcCAyMDA4IDE5OjM2OjM5IC0wMDAwCioqKioqKioq KioqKioqKgoqKiogMjUsMzYgKioqKgotLS0gMjUsNDUgLS0tLQogIC8qCiAgICogcG9zdGdy ZXNfZXh0LmggZGVmaW5lcyB0aGUgYmFja2VuZCdzIGV4dGVybmFsbHkgdmlzaWJsZSB0eXBl cywKICAgKiBzdWNoIGFzIE9pZC4KICAgKi8KICAjaW5jbHVkZSAicG9zdGdyZXNfZXh0Lmgi CiAgCisgLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgKiBPcHRpb25zIGZvciBQUWNv cHlSZXN1bHQKKyAgKi8KKyAKKyAjZGVmaW5lIFBHX0NPUFlSRVNfQVRUUlMgICAgICAgICAg MHgwMQorICNkZWZpbmUgUEdfQ09QWVJFU19UVVBMRVMgICAgICAgICAweDAyIC8qIEltcGxp ZXMgUEdfQ09QWVJFU19BVFRSUyAqLworICNkZWZpbmUgUEdfQ09QWVJFU19FVkVOVFMgICAg ICAgICAweDA0CisgI2RlZmluZSBQR19DT1BZUkVTX05PVElDRUhPT0tTICAgIDB4MDgKKyAK ICAvKiBBcHBsaWNhdGlvbi12aXNpYmxlIGVudW0gdHlwZXMgKi8KICAKICB0eXBlZGVmIGVu dW0KICB7CiAgCS8qCiAgCSAqIEFsdGhvdWdoIGl0IGlzIG9rYXkgdG8gYWRkIHRvIHRoaXMg bGlzdCwgdmFsdWVzIHdoaWNoIGJlY29tZSB1bnVzZWQKKioqKioqKioqKioqKioqCioqKiAx OTAsMjAxICoqKioKLS0tIDE5OSwyMjUgLS0tLQogIAkJaW50CQkgICAqcHRyOwkJLyogY2Fu J3QgdXNlIHZvaWQgKGRlYyBjb21waWxlciBiYXJmcykJICovCiAgCQlpbnQJCQlpbnRlZ2Vy OwogIAl9CQkJdTsKICB9IFBRQXJnQmxvY2s7CiAgCiAgLyogLS0tLS0tLS0tLS0tLS0tLQor ICAqIFBHcmVzQXR0RGVzYyAtLSBEYXRhIGFib3V0IGEgc2luZ2xlIGF0dHJpYnV0ZSAoY29s dW1uKSBvZiBhIHF1ZXJ5IHJlc3VsdAorICAqIC0tLS0tLS0tLS0tLS0tLS0KKyAgKi8KKyB0 eXBlZGVmIHN0cnVjdCBwZ3Jlc0F0dERlc2MKKyB7CisgCWNoYXIJICAgKm5hbWU7CQkJLyog Y29sdW1uIG5hbWUgKi8KKyAJT2lkCQkJdGFibGVpZDsJCS8qIHNvdXJjZSB0YWJsZSwgaWYg a25vd24gKi8KKyAJaW50CQkJY29sdW1uaWQ7CQkvKiBzb3VyY2UgY29sdW1uLCBpZiBrbm93 biAqLworIAlpbnQJCQlmb3JtYXQ7CQkJLyogZm9ybWF0IGNvZGUgZm9yIHZhbHVlICh0ZXh0 L2JpbmFyeSkgKi8KKyAJT2lkCQkJdHlwaWQ7CQkJLyogdHlwZSBpZCAqLworIAlpbnQJCQl0 eXBsZW47CQkJLyogdHlwZSBzaXplICovCisgCWludAkJCWF0dHR5cG1vZDsgIC8qIHR5cGUt c3BlY2lmaWMgbW9kaWZpZXIgaW5mbyAqLworIH0gUEdyZXNBdHREZXNjOworIAorIC8qIC0t LS0tLS0tLS0tLS0tLS0KICAgKiBFeHBvcnRlZCBmdW5jdGlvbnMgb2YgbGlicHEKICAgKiAt LS0tLS0tLS0tLS0tLS0tCiAgICovCiAgCiAgLyogPT09CWluIGZlLWNvbm5lY3QuYyA9PT0g Ki8KICAKKioqKioqKioqKioqKioqCioqKiA0MzQsNDQ1ICoqKioKLS0tIDQ1OCw0ODcgLS0t LQogICAqIE1ha2UgYW4gZW1wdHkgUEdyZXN1bHQgd2l0aCBnaXZlbiBzdGF0dXMgKHNvbWUg YXBwcyBmaW5kIHRoaXMKICAgKiB1c2VmdWwpLiBJZiBjb25uIGlzIG5vdCBOVUxMIGFuZCBz dGF0dXMgaW5kaWNhdGVzIGFuIGVycm9yLCB0aGUKICAgKiBjb25uJ3MgZXJyb3JNZXNzYWdl IGlzIGNvcGllZC4KICAgKi8KICBleHRlcm4gUEdyZXN1bHQgKlBRbWFrZUVtcHR5UEdyZXN1 bHQoUEdjb25uICpjb25uLCBFeGVjU3RhdHVzVHlwZSBzdGF0dXMpOwogIAorIC8qIG1ha2Vz IGEgY29weSBvZiBhIHJlc3VsdCAqLworIGV4dGVybiBQR3Jlc3VsdCAqUFFjb3B5UmVzdWx0 KGNvbnN0IFBHcmVzdWx0ICpzcmMsIGludCBmbGFncyk7CisgCisgLyogU2V0cyB0aGUgYXR0 cmlidXRlcyBvZiBhIHJlc3VsdCwgbm8gYXR0cmlidXRlcyBjYW4gYWxyZWFkeSBleGlzdC4g Ki8KKyBleHRlcm4gaW50IFBRc2V0UmVzdWx0QXR0cnMoUEdyZXN1bHQgKnJlcywgaW50IG51 bUF0dHJpYnV0ZXMsIFBHcmVzQXR0RGVzYyAqYXR0RGVzY3MpOworIAorIC8qIEFsbG9jYXRl IHN1YnNpZGlhcnkgc3RvcmFnZSBmb3IgYSBQR3Jlc3VsdC4gKi8KKyBleHRlcm4gdm9pZCAq UFFyZXN1bHRBbGxvYyhQR3Jlc3VsdCAqcmVzLCBzaXplX3QgbkJ5dGVzKTsKKyAKKyAvKgor ICAqIFNldHMgdGhlIHZhbHVlIGZvciBhIHR1cGxlIGZpZWxkLiAgVGhlIHR1cF9udW0gbXVz dCBiZSBsZXNzIHRoYW4gb3IKKyAgKiBlcXVhbCB0byBQUW50dXBsZXMocmVzKS4gIFRoaXMg ZnVuY3Rpb24gd2lsbCBnZW5lcmF0ZSB0dXBsZXMgYXMgbmVlZGVkLgorICAqIEEgbmV3IHR1 cGxlIGlzIGdlbmVyYXRlZCB3aGVuIHR1cF9udW0gZXF1YWxzIFBRbnR1cGxlcyhyZXMpIGFu ZCB0aGVyZQorICAqIGFyZSBubyBmaWVsZHMgZGVmaW5lZCBmb3IgdGhhdCB0dXBsZS4KKyAg KgorICAqIFJldHVybnMgYSBub24temVybyB2YWx1ZSBmb3Igc3VjY2VzcyBhbmQgemVybyBm b3IgZmFpbHVyZS4KKyAgKi8KKyBleHRlcm4gaW50IFBRc2V0dmFsdWUoUEdyZXN1bHQgKnJl cywgaW50IHR1cF9udW0sIGludCBmaWVsZF9udW0sIGNoYXIgKnZhbHVlLCBpbnQgbGVuKTsK ICAKICAvKiBRdW90aW5nIHN0cmluZ3MgYmVmb3JlIGluY2x1c2lvbiBpbiBxdWVyaWVzLiAq LwogIGV4dGVybiBzaXplX3QgUFFlc2NhcGVTdHJpbmdDb25uKFBHY29ubiAqY29ubiwKICAJ CQkJICAgY2hhciAqdG8sIGNvbnN0IGNoYXIgKmZyb20sIHNpemVfdCBsZW5ndGgsCiAgCQkJ CSAgIGludCAqZXJyb3IpOwogIGV4dGVybiB1bnNpZ25lZCBjaGFyICpQUWVzY2FwZUJ5dGVh Q29ubihQR2Nvbm4gKmNvbm4sCkluZGV4OiBzcmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1p bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvcHJvamVjdHMvY3Zzcm9vdC9wZ3NxbC9z cmMvaW50ZXJmYWNlcy9saWJwcS9saWJwcS1pbnQuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24g MS4xMzEKZGlmZiAtQzYgLXIxLjEzMSBsaWJwcS1pbnQuaAoqKiogc3JjL2ludGVyZmFjZXMv bGlicHEvbGlicHEtaW50LmgJMjkgTWF5IDIwMDggMjI6MDI6NDQgLTAwMDAJMS4xMzEKLS0t IHNyYy9pbnRlcmZhY2VzL2xpYnBxL2xpYnBxLWludC5oCTUgU2VwIDIwMDggMTk6MzY6Mzkg LTAwMDAKKioqKioqKioqKioqKioqCioqKiAxOSwzMCAqKioqCi0tLSAxOSwzMSAtLS0tCiAg CiAgI2lmbmRlZiBMSUJQUV9JTlRfSAogICNkZWZpbmUgTElCUFFfSU5UX0gKICAKICAvKiBX ZSBhc3N1bWUgbGlicHEtZmUuaCBoYXMgYWxyZWFkeSBiZWVuIGluY2x1ZGVkLiAqLwogICNp bmNsdWRlICJwb3N0Z3Jlc19mZS5oIgorICNpbmNsdWRlICJsaWJwcS1ldmVudHMuaCIKICAK ICAjaW5jbHVkZSA8dGltZS5oPgogICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICAjaWZuZGVm IFdJTjMyCiAgI2luY2x1ZGUgPHN5cy90aW1lLmg+CiAgI2VuZGlmCioqKioqKioqKioqKioq KgoqKiogOTcsMTIxICoqKioKICB1bmlvbiBwZ3Jlc3VsdF9kYXRhCiAgewogIAlQR3Jlc3Vs dF9kYXRhICpuZXh0OwkJLyogbGluayB0byBuZXh0IGJsb2NrLCBvciBOVUxMICovCiAgCWNo YXIJCXNwYWNlWzFdOwkJLyogZHVtbXkgZm9yIGFjY2Vzc2luZyBibG9jayBhcyBieXRlcyAq LwogIH07CiAgCi0gLyogRGF0YSBhYm91dCBhIHNpbmdsZSBhdHRyaWJ1dGUgKGNvbHVtbikg b2YgYSBxdWVyeSByZXN1bHQgKi8KLSAKLSB0eXBlZGVmIHN0cnVjdCBwZ3Jlc0F0dERlc2MK LSB7Ci0gCWNoYXIJICAgKm5hbWU7CQkJLyogY29sdW1uIG5hbWUgKi8KLSAJT2lkCQkJdGFi bGVpZDsJCS8qIHNvdXJjZSB0YWJsZSwgaWYga25vd24gKi8KLSAJaW50CQkJY29sdW1uaWQ7 CQkvKiBzb3VyY2UgY29sdW1uLCBpZiBrbm93biAqLwotIAlpbnQJCQlmb3JtYXQ7CQkJLyog Zm9ybWF0IGNvZGUgZm9yIHZhbHVlICh0ZXh0L2JpbmFyeSkgKi8KLSAJT2lkCQkJdHlwaWQ7 CQkJLyogdHlwZSBpZCAqLwotIAlpbnQJCQl0eXBsZW47CQkJLyogdHlwZSBzaXplICovCi0g CWludAkJCWF0dHR5cG1vZDsJCS8qIHR5cGUtc3BlY2lmaWMgbW9kaWZpZXIgaW5mbyAqLwot IH0gUEdyZXNBdHREZXNjOwotIAogIC8qIERhdGEgYWJvdXQgYSBzaW5nbGUgcGFyYW1ldGVy IG9mIGEgcHJlcGFyZWQgc3RhdGVtZW50ICovCiAgdHlwZWRlZiBzdHJ1Y3QgcGdyZXNQYXJh bURlc2MKICB7CiAgCU9pZAkJCXR5cGlkOwkJCS8qIHR5cGUgaWQgKi8KICB9IFBHcmVzUGFy YW1EZXNjOwogIAotLS0gOTgsMTA5IC0tLS0KKioqKioqKioqKioqKioqCioqKiAxNTksMTcw ICoqKioKLS0tIDE0NywxNjYgLS0tLQogIAlQUW5vdGljZVJlY2VpdmVyIG5vdGljZVJlYzsg Lyogbm90aWNlIG1lc3NhZ2UgcmVjZWl2ZXIgKi8KICAJdm9pZAkgICAqbm90aWNlUmVjQXJn OwogIAlQUW5vdGljZVByb2Nlc3NvciBub3RpY2VQcm9jOwkJLyogbm90aWNlIG1lc3NhZ2Ug cHJvY2Vzc29yICovCiAgCXZvaWQJICAgKm5vdGljZVByb2NBcmc7CiAgfSBQR05vdGljZUhv b2tzOwogIAorIHR5cGVkZWYgc3RydWN0CisgeworIAljaGFyCSAgICpuYW1lOwkvKiBmb3Ig ZXJyb3IgbWVzc2FnZXMgKi8KKyAJdm9pZAkgICAqcGFzc1Rocm91Z2g7IC8qIHBvaW50ZXIg c3VwcGxpZWQgYnkgdXNlciAqLworIAl2b2lkCSAgICpkYXRhOyAvKiBzdGF0ZSAoaW5zdGFu Y2UpIGRhdGEsIG9wdGlvbmFsbHkgZ2VuZXJhdGVkIGJ5IGV2ZW50IHByb2MgKi8KKyAJUEdF dmVudFByb2MgcHJvYzsgLyogdGhlIGZ1bmN0aW9uIHRvIGNhbGwgb24gZXZlbnRzICovCisg fSBQR0V2ZW50OworIAogIHN0cnVjdCBwZ19yZXN1bHQKICB7CiAgCWludAkJCW50dXBzOwog IAlpbnQJCQludW1BdHRyaWJ1dGVzOwogIAlQR3Jlc0F0dERlc2MgKmF0dERlc2NzOwogIAlQ R3Jlc0F0dFZhbHVlICoqdHVwbGVzOwkJLyogZWFjaCBQR3Jlc1R1cGxlIGlzIGFuIGFycmF5 IG9mCioqKioqKioqKioqKioqKgoqKiogMTgxLDE5MiAqKioqCi0tLSAxNzcsMTkyIC0tLS0K ICAJICogVGhlc2UgZmllbGRzIGFyZSBjb3BpZWQgZnJvbSB0aGUgb3JpZ2luYXRpbmcgUEdj b25uLCBzbyB0aGF0IG9wZXJhdGlvbnMKICAJICogb24gdGhlIFBHcmVzdWx0IGRvbid0IGhh dmUgdG8gcmVmZXJlbmNlIHRoZSBQR2Nvbm4uCiAgCSAqLwogIAlQR05vdGljZUhvb2tzIG5v dGljZUhvb2tzOwogIAlpbnQJCQljbGllbnRfZW5jb2Rpbmc7CS8qIGVuY29kaW5nIGlkICov CiAgCisgCS8qIHJlZ2lzdGVyZWQgZXZlbnRzLCBjb3BpZWQgZnJvbSBjb25uICovCisgCWlu dCBuRXZlbnRzOworIAlQR0V2ZW50ICpldmVudHM7CisgCiAgCS8qCiAgCSAqIEVycm9yIGlu Zm9ybWF0aW9uIChhbGwgTlVMTCBpZiBub3QgYW4gZXJyb3IgcmVzdWx0KS4gIGVyck1zZyBp cyB0aGUKICAJICogIm92ZXJhbGwiIGVycm9yIG1lc3NhZ2UgcmV0dXJuZWQgYnkgUFFyZXN1 bHRFcnJvck1lc3NhZ2UuICBJZiB3ZSBoYXZlCiAgCSAqIHBlci1maWVsZCBpbmZvIHRoZW4g aXQgaXMgc3RvcmVkIGluIGEgbGlua2VkIGxpc3QuCiAgCSAqLwogIAljaGFyCSAgICplcnJN c2c7CQkJLyogZXJyb3IgbWVzc2FnZSwgb3IgTlVMTCBpZiBubyBlcnJvciAqLwoqKioqKioq KioqKioqKioKKioqIDMwMCwzMTEgKioqKgotLS0gMzAwLDMxNiAtLS0tCiAgCS8qIE9wdGlv bmFsIGZpbGUgdG8gd3JpdGUgdHJhY2UgaW5mbyB0byAqLwogIAlGSUxFCSAgICpQZmRlYnVn OwogIAogIAkvKiBDYWxsYmFjayBwcm9jZWR1cmVzIGZvciBub3RpY2UgbWVzc2FnZSBwcm9j ZXNzaW5nICovCiAgCVBHTm90aWNlSG9va3Mgbm90aWNlSG9va3M7CiAgCisgCS8qIHJlZ2lz dGVyZWQgZXZlbnRzIHZpYSBQUXJlZ2lzdGVyRXZlbnRQcm9jICovCisgCWludCBuRXZlbnRz OworIAlpbnQgZXZlbnRBcnJTaXplOworIAlQR0V2ZW50ICpldmVudHM7CisgCiAgCS8qIFN0 YXR1cyBpbmRpY2F0b3JzICovCiAgCUNvbm5TdGF0dXNUeXBlIHN0YXR1czsKICAJUEdBc3lu Y1N0YXR1c1R5cGUgYXN5bmNTdGF0dXM7CiAgCVBHVHJhbnNhY3Rpb25TdGF0dXNUeXBlIHhh Y3RTdGF0dXM7IC8qIG5ldmVyIGNoYW5nZXMgdG8gQUNUSVZFICovCiAgCVBHUXVlcnlDbGFz cyBxdWVyeWNsYXNzOwogIAljaGFyCSAgICpsYXN0X3F1ZXJ5OwkJLyogbGFzdCBTUUwgY29t bWFuZCwgb3IgTlVMTCBpZiB1bmtub3duICovCg== --------------060602090600050205040608 Content-Type: application/x-compressed; name="libpq-events.tgz" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="libpq-events.tgz" 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 --------------060602090600050205040608--