From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8057 invoked by alias); 17 Feb 2016 01:07:53 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 8028 invoked by uid 89); 17 Feb 2016 01:07:52 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.0 required=5.0 tests=AWL,BAYES_50,MIME_BASE64_BLANKS,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 spammy=silence, sk:search, suggests, Regular X-HELO: mail-pa0-f73.google.com Received: from mail-pa0-f73.google.com (HELO mail-pa0-f73.google.com) (209.85.220.73) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Wed, 17 Feb 2016 01:07:40 +0000 Received: by mail-pa0-f73.google.com with SMTP id hj7so147317pac.0 for ; Tue, 16 Feb 2016 17:07:39 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:message-id:date:subject:from:to:cc :content-type:content-transfer-encoding; bh=5iMxwTrG3yp9rWqMCYKBEGzmsKdM9NyR+HfxY4tLWOk=; b=ZjE62NMt3tps22r/E6Cz30PST8j4wRMYXgnMFD6fY3oJY2qhwbxQRZDxX7tgzLdXXS fedXF/FVh+QguL95kZXXN4/ZIPP+37KHrN3f2LKkTQMniaB3aIVjyy4rDo3YWuhre8wa NjemkxeL+RZzJK68exzkQ1WKbXPM86yIFSRPXD+SO2OkscZWVrakX3MK/qBn5XJBeQbx qdeJ/mZOnCwGvf0KdyZjvznLnT59iOe2U4jXJfOKqL1hZlgPubkIlpe3BFX6lAWwlbF7 MrxvuAvtn5OKENKUOIdRCGXEmrFOyyekTc+DYplX57POmGGEerJFZLKD71pias4otZGx 310Q== X-Gm-Message-State: AG10YOQeSRDyU7eJ0g50X69gZXjKJnNTyskiWY8uG+x/0Yu5VNaxNJmrcYPti935VZcy44uC2g== MIME-Version: 1.0 X-Received: by 10.67.30.161 with SMTP id kf1mr24859119pad.21.1455671257980; Tue, 16 Feb 2016 17:07:37 -0800 (PST) Message-ID: <001a113452243e6481052bece0b3@google.com> Date: Wed, 17 Feb 2016 01:07:00 -0000 Subject: Re: [PATCH, doc RFA] Add "skip regexp" From: Doug Evans To: Pedro Alves , eliz@gnu.org Cc: gdb-patches@sourceware.org Content-Type: text/plain; charset=UTF-8; format=flowed; delsp=yes Content-Transfer-Encoding: base64 X-IsSubscribed: yes X-SW-Source: 2016-02/txt/msg00489.txt.bz2 RWxpOiBIZWFkcyB1cCwgcmV3cml0dGVuIGRvY3MsIG5lZWRpbmcgcmUtYXBw cm92YWwuDQoNClBlZHJvIEFsdmVzIHdyaXRlczoNCiAgPiBPbiAwMi8wMi8y MDE2IDAxOjAzIEFNLCBEb3VnIEV2YW5zIHdyb3RlOg0KICA+ID4gSGkuDQog ID4gPg0KICA+ID4gVGhlICJza2lwIiBjb21tYW5kIGlzIGdyZWF0LCBidXQg aXQgY2FuIGJlIHJlYWxseSBjdW1iZXJzb21lIHRvIHVzZSAgDQp3aXRoDQog ID4gPiBjKysuDQogID4gPg0KICA+ID4gRS5nLiwgY29uc2lkZXIgc3RlcHBp bmcgaW50byBmdW5jdGlvbnMgdGhhdCB0YWtlIHN0ZDo6c3RyaW5nIGFyZ3Vt ZW50cy4NCiAgPiA+DQogID4gPiAgICBmb28gKGJhciAoImFiYyIpKTsNCiAg PiA+DQogID4gPiB3aGVyZSBiYXIgdGFrZXMgYSBzdGQ6OnN0cmluZyBhcmd1 bWVudC4NCiAgPiA+DQogID4gPiBUaGVyZSBhcmUgZm91ciBmdW5jdGlvbnMg eW91IGdlbmVyYWxseSBhbHdheXMgd2FudCB0byBza2lwIGluIHRoaXMgY2Fz ZQ0KICA+ID4gKGN1dC1uLXBhc3RlZCBmcm9tIG15IGdkYiBzZXNzaW9uKToN CiAgPiA+DQogID4gPiBzdGQ6OmFsbG9jYXRvcjxjaGFyPjo6YWxsb2NhdG9y ICh0aGlzPTB4N2ZmZmZmZmZlNmJmKQ0KICA+ID4gc3RkOjpiYXNpY19zdHJp bmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFyPiwgc3RkOjphbGxvY2F0 b3I8Y2hhcj4NCiAgPiA+PiA6OmJhc2ljX3N0cmluZyAodGhpcz0weDdmZmZm ZmZmZTZiMCwgX19zPTB4NDAwYWQxICJhYmMiLCBfX2E9Li4uKQ0KICA+ID4g c3RkOjpiYXNpY19zdHJpbmc8Y2hhciwgc3RkOjpjaGFyX3RyYWl0czxjaGFy Piwgc3RkOjphbGxvY2F0b3I8Y2hhcj4NCiAgPiA+PiA6On5iYXNpY19zdHJp bmcgKHRoaXM9MHg3ZmZmZmZmZmU2YjAsIF9faW5fY2hyZz08b3B0aW1pemVk IG91dD4pDQogID4gPiBzdGQ6OmFsbG9jYXRvcjxjaGFyPjo6fmFsbG9jYXRv ciAodGhpcz0weDdmZmZmZmZmZTZiZiwgIA0KX19pbl9jaHJnPTxvcHRpbWl6 ZWQNCiAgPiA+IG91dD4pDQogID4gPg0KICA+ID4gV2l0aCB0aGlzIHBhdGNo IG9uZSBjYW4gc3BlY2lmeSB0aGUgc2tpcCBhczoNCiAgPiA+DQogID4gPiBz a2lwIHJlZ2V4cCBec3RkOjooYWxsb2NhdG9yfGJhc2ljX3N0cmluZyk8Lio+ Ojp+P1wxICpcKA0KICA+ID4NCiAgPiA+IFNraXBwaW5nIGV2ZXJ5IHRlbXBs YXRlZCBjbGFzcyBjb25zdHJ1Y3Rvci9kZXN0cnVjdG9yIGluIHN0ZA0KICA+ ID4gY291bGQgYmUgc3BlY2lmaWVkIGFzOg0KICA+ID4NCiAgPiA+IHNraXAg cmVnZXhwIF5zdGQ6OihbYS16QS16MC05X10rKTwuKj46On4/XDEgKlwoDQog ID4NCiAgPiBJIHRoaW5rIHRoaXMgaXMgZ3JlYXQuICBUaGFua3MgZm9yIHRh Y2tsaW5nIHRoaXMuICBUaGlzIHdhcw0KICA+IG9yaWdpbmFsbHkgZGlzY3Vz c2VkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBvcmlnaW5hbA0KICA+IGltcGxl bWVudGF0aW9uLCBidXQgd2FzIGxlZnQgb3V0Og0KICA+DQogID4gIGh0dHBz Oi8vc291cmNld2FyZS5vcmcvYnVnemlsbGEvc2hvd19idWcuY2dpP2lkPTgy ODcNCiAgPg0KICA+IEkgd29uZGVyIGFib3V0IHRoZSBVSSB0aG91Z2guICBU aGUgY29tbWFuZCBuYW1lIGRvZXNuJ3QgbWFrZSBpdA0KICA+IGNsZWFyLCBz byBJIHdhcyB3b25kZXJlZCB3aGV0aGVyICJza2lwIHJlZ2V4cCIgYWxzbyBt YXRjaGVzIHRoZQ0KICA+IGZpbGVuYW1lIHRoZSBmdW5jdGlvbiBpcyBpbXBs ZW1lbnRlZCBpbi4gIEkgZmlndXJlZCBvdXQgaXQgZG9lc24ndA0KICA+IGZy b20gdGhlIGRvY3VtZW50YXRpb24sIGJ1dCBpdCBnb3QgdG8gbWUgY29uc2lk ZXIgaG93IHdlJ2QgZXh0ZW5kDQogID4gdGhlIFVJIGlmL3doZW4gd2Ugd2Fu dCB0byBza2lwIGZpbGVzIHdpdGggYSByZWdleHAgdG9vLCBhcw0KICA+IHRo ZW4gInNraXAgcmVnZXhwIiBiZWNvbWVzIGFtYmlndW91cy4gIE1heWJlICJz a2lwIHJmdW5jdGlvbiIgaW5zdGVhZCwNCiAgPiBhbmQgdGhlbiB3ZSdkIGhh dmUgInNraXAgcmZpbGUiID8NCg0KSSBzdGFydGVkIG91dCB3aXRoIHNvbWV0 aGluZyBsaWtlIHRoYXQsIGJ1dCByZWd1bGFyIGV4cHJlc3Npb25zDQpvZiBm aWxlcyBydW5zIGludG8gYmFzZW5hbWVzX21heV9kaWZmZXIsIGFuZCBJIGRp ZG4ndCB3YW50IHRvIGdldA0KYm9nZ2VkIGRvd24gd2l0aCBob3cgdG8gZGVh bCB3aXRoIHRoYXQgKEkgZG9uJ3Qgd2FudCB0byBnaXZlIHVwDQpiYXNlbmFt ZXNfbWF5X2RpZmZlciBoZXJlLCBhbmQgdGhhdCBzdWdnZXN0cyBzZXBhcmF0 aW5nIHRoZSBkaXJlY3RvcnkNCnJlZ2V4cCBmcm9tIHRoZSBmaWxlbmFtZSBy ZWdleHApLiBJIGhhZG4ndCB0aG91Z2h0IG9mIGhhdmluZw0KYSBuYW1lIGxp a2UgInJmdW5jdGlvbiIgdGhvdWdoLiBGaW5lIGJ5IG1lIGlmIGl0J3Mgb2sg d2l0aCBldmVyeW9uZSBlbHNlLg0KDQogID4gQWxzbywgb3QgYXNraW5nIHlv dSB0byBpbXBsZW1lbnQgdGhpcywganVzdCB0aGlua2luZyBvdXQgbG91ZCwg YnV0DQogID4gSSBhbHNvIHdvbmRlcmVkIGlmIGl0IHdvdWxkbid0IGhhdmUg bWFkZSBtb3JlIHNlbnNlIHRvIGJlIGFibGUNCiAgPiB0byBtaXggZmlsZSBh bmQgZnVuY3Rpb24gbmFtZXMsIHVzaW5nIGNvbW1hbmQgb3B0aW9ucywgcmF0 aGVyIHRoYW4NCiAgPiBoYXZlIGRpc3RpbmN0IHNraXAgdHlwZXMuICBMaWtl Og0KICA+DQogID4gIHNraXAgLWZpbGUgZm9vLmMgLWZ1bmN0aW9uIGZvbw0K ICA+ICBza2lwIC1yZmlsZSBsaWJmb28vKi5jIC1yZnVuY3Rpb24gXmZvb18u Kg0KICA+DQogID4gSSBndWVzcyB3ZSBjb3VsZCBzdGlsbCBoYXZlIHRoYXQg YW5kIGxlYXZlICJza2lwIGZ1bmN0aW9uIiwgZXRjLg0KICA+IGZvciBjb21w YXRpYmlsaXR5Lg0KDQpJV0JOIGFscmlnaHQsIGJ1dCB0aGVuIChJTU8pIHdl IGhhdmUgdG8gZ28gYWxsIG91dCBpbnRvIHN1cHBvcnRpbmcNCmVtYmVkZGVk IHNwYWNlcywgcXVvdGluZywgZXRjLiBJZiB3ZSdyZSBvayB3aXRoIGltcG9z aW5nIHdoYXQgYnVpbGRhcmd2DQp3aWxsIHJlcXVpcmUgb24gdXNlcnMgdGhl biBvaywgSSBkb24ndCB3YW50IHRvIGhhdmUgdG8gY29kZSBhbnl0aGluZyBl bHNlLg0KSXQgd2lsbCBpbXBvc2Ugb24gdXNlcnMgdmFyaW91cyBxdW90aW5n IHJ1bGVzIChlLmcuLCBcIGJlY29tZXMgXFwsDQphbmQgc28gb24pIHdoZXJl YXMgInNraXAgcmZ1bmN0aW9uIGJsYWgiIGNhbiBqdXN0IHNheSB0aGF0IGJs YWggaXMNCnRha2VuICJhcyBpcyIgKHNldHRpbmcgYXNpZGUgbGVhZGluZy90 cmFpbGluZyB3aGl0ZXNwYWNlIHdoaWNoIEknbSBvayB3aXRoKS4NCg0KUGx1 cyB3ZSdsbCBoYXZlIHRvIHRoaW5rIGFib3V0IHRoZSBzeW50YXggZm9yIGZp bGUgcmVndWxhciBleHByZXNzaW9ucy4NClN1cHBvcnRpbmcgZm9vLiovYmFy LiogaXMgb3V0IElNTywgd2UgbmVlZCAtcmRpcmVjdG9yeSBmb28uKiAtcmZp bGUgYmFyLiouDQpBcyBkaXNjdXNzZWQgb24gSVJDLCBnbG9iLXN0eWxlIHBh dHRlcm5zIGZvciBmaWxlIG5hbWVzIGlzIG9rIHdpdGggeW91LA0Kc28gdGhl IHBhdGNoIGJlbG93IHVzZXMgLWdmaWxlLg0KSSBrbm93IHdlIHRhbGtlZCBh Ym91dCBoYXZpbmcgLWZpbGUgdGFrZSBlaXRoZXIsDQpidXQgaXQgd2FzIHNp bXBsZXIvY2xlYXJlciB0byBkaXN0aW5ndWlzaCAtZmlsZSBmcm9tIC1nZmls ZS4NCg0KICA+ID4gK3NraXAgcmVnZXhwIHJlZ3VsYXItZXhwcmVzc2lvbg0K ICA+ID4gKyAgQSB2YXJpYXRpb24gb2YgInNraXAgZnVuY3Rpb24iIHdoZXJl IHRoZSBmdW5jdGlvbiBuYW1lIGlzIHNwZWNpZmllZA0KICA+ID4gKyAgYXMg YSByZWd1bGFyIGV4cHJlc3Npb24uDQogID4gPiArDQogID4NCiAgPg0KICA+ DQogID4gPiArSWYgeW91IHdhbnRlZCB0byBza2lwIGV2ZXJ5IEMrKyBjb25z dHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciBpbiB0aGUNCiAgPiA+IEBjb2Rle3N0 ZH0NCiAgPiA+ICtuYW1lc3BhY2UgeW91IGNvdWxkIGRvOg0KICA+DQogID4g VXNpbmcgcGFzdCB0ZW5zZSByZWFkcyBhIGJpdCBvZGQgdG8gbWUuICBJJ2Qg c3VnZ2VzdDoNCiAgPg0KICA+ICBJZiB5b3Ugd2FudCB0byBza2lwIGV2ZXJ5 IEMrKyBjb25zdHJ1Y3RvciBhbmQgZGVzdHJ1Y3RvciBpbiB0aGUNCiAgPiAg QGNvZGV7c3RkfSBuYW1lc3BhY2UgeW91IGNhbiBkbzoNCiAgPg0KICA+ID4N CiAgPiA+ICsvKiBSZXR1cm4gdGhlIG5hbWUgb2YgdGhlIHNraXBsaXN0IGVu dHJ5IGtpbmQuICAqLw0KICA+ID4gKw0KICA+ID4gK3N0YXRpYyBjb25zdCBj aGFyICoNCiAgPiA+ICtza2lwbGlzdF9lbnRyeV9raW5kX25hbWUgKHN0cnVj dCBza2lwbGlzdF9lbnRyeSAqZSkNCiAgPiA+ICt7DQogID4gPiArICBzd2l0 Y2ggKGUtPmtpbmQpDQogID4gPiArICAgIHsNCiAgPiA+ICsgICAgY2FzZSBT S0lQX0ZJTEU6IHJldHVybiAiZmlsZSI7DQogID4gPiArICAgIGNhc2UgU0tJ UF9GVU5DVElPTjogcmV0dXJuICJmdW5jdGlvbiI7DQogID4gPiArICAgIGNh c2UgU0tJUF9SRUdFWFA6IHJldHVybiAicmVnZXhwIjsNCiAgPiA+ICsgICAg ZGVmYXVsdDoNCiAgPiA+ICsgICAgICBnZGJfYXNzZXJ0X25vdF9yZWFjaGVk ICgiYmFkIHNraXBsaXN0X2VudHJ5IGtpbmQiKTsNCiAgPiA+ICsgICAgfQ0K ICA+DQogID4gTGluZSBicmVha3MgYmVmb3JlIHJldHVybi4NCiAgPg0KICA+ ID4gK30NCiAgPiA+ICsNCiAgPiA+ICsvKiBDcmVhdGUgYSBTS0lQX0ZJTEUg b2JqZWN0LiAqLw0KICA+ID4gKw0KICA+ID4gK3N0YXRpYyBzdHJ1Y3Qgc2tp cGxpc3RfZW50cnkgKg0KICA+ID4gK21ha2Vfc2tpcF9maWxlIChjb25zdCBj aGFyICpuYW1lKQ0KICA+ID4gK3sNCiAgPiA+ICsgIHN0cnVjdCBza2lwbGlz dF9lbnRyeSAqZSA9IFhDTkVXIChzdHJ1Y3Qgc2tpcGxpc3RfZW50cnkpOw0K ICA+ID4gKw0KICA+ID4gKyAgZS0+a2luZCA9IFNLSVBfRklMRTsNCiAgPiA+ ICsgIGUtPnRleHQgPSB4c3RyZHVwIChuYW1lKTsNCiAgPiA+ICsgIGUtPmVu YWJsZWQgPSAxOw0KICA+ID4gKw0KICA+ID4gKyAgcmV0dXJuIGU7DQogID4g PiArfQ0KICA+ID4gKw0KICA+ID4gKy8qIENyZWF0ZSBhIFNLSVBfRlVOQ1RJ T04gb2JqZWN0LiAqLw0KICA+ID4gKw0KICA+ID4gK3N0YXRpYyBzdHJ1Y3Qg c2tpcGxpc3RfZW50cnkgKg0KICA+ID4gK21ha2Vfc2tpcF9mdW5jdGlvbiAo Y29uc3QgY2hhciAqbmFtZSkNCiAgPiA+ICt7DQogID4gPiArICBzdHJ1Y3Qg c2tpcGxpc3RfZW50cnkgKmUgPSBYQ05FVyAoc3RydWN0IHNraXBsaXN0X2Vu dHJ5KTsNCiAgPiA+ICsNCiAgPiA+ICsgIGUtPmtpbmQgPSBTS0lQX0ZVTkNU SU9OOw0KICA+ID4gKyAgZS0+ZW5hYmxlZCA9IDE7DQogID4gPiArICBlLT50 ZXh0ID0geHN0cmR1cCAobmFtZSk7DQogID4gPiArDQogID4gPiArICByZXR1 cm4gZTsNCiAgPiA+ICt9DQogID4gPiArDQogID4gPiArLyogQ3JlYXRlIGEg U0tJUF9SRUdFWFAgb2JqZWN0Lg0KICA+ID4gKyAgIFRoZSByZWdleHAgaXMg bm90IHBhcnNlZCwgdGhlIGNhbGxlciBtdXN0IGRvIHRoYXQgYWZ0ZXJ3YXJk cy4gICovDQogID4gPiArDQogID4gPiArc3RhdGljIHN0cnVjdCBza2lwbGlz dF9lbnRyeSAqDQogID4gPiArbWFrZV9za2lwX3JlZ2V4cCAoY29uc3QgY2hh ciAqcmVnZXhwKQ0KICA+ID4gK3sNCiAgPiA+ICsgIHN0cnVjdCBza2lwbGlz dF9lbnRyeSAqZSA9IFhDTkVXIChzdHJ1Y3Qgc2tpcGxpc3RfZW50cnkpOw0K ICA+ID4gKw0KICA+ID4gKyAgZS0+a2luZCA9IFNLSVBfUkVHRVhQOw0KICA+ ID4gKyAgZS0+ZW5hYmxlZCA9IDE7DQogID4gPiArICBlLT50ZXh0ID0geHN0 cmR1cCAocmVnZXhwKTsNCiAgPiA+ICsNCiAgPiA+ICsgIHJldHVybiBlOw0K ICA+ID4gK30NCiAgPiA+ICsNCiAgPg0KICA+IFNlZW1zIGxpa2UgYWxsIHRo ZXNlIHRocmVlIGZ1bmN0aW9ucyBjb3VsZCBiZSByZXBsYWNlZCBieQ0KICA+ IGEgc2luZ2xlOg0KICA+DQogID4gc3RhdGljIHN0cnVjdCBza2lwbGlzdF9l bnRyeSAqDQogID4gbWFrZV9za2lwbGlzdF9lbnRyeSAoZW51bSBza2lwX2tp bmQga2luZCwgY29uc3QgY2hhciAqdGV4dCkNCiAgPiB7DQogID4gICAgc3Ry dWN0IHNraXBsaXN0X2VudHJ5ICplID0gWENORVcgKHN0cnVjdCBza2lwbGlz dF9lbnRyeSk7DQogID4NCiAgPiAgIGUtPmtpbmQgPSBraW5kOw0KICA+ICAg ZS0+dGV4dCA9IHhzdHJkdXAgKHRleHQpOw0KICA+ICAgZS0+ZW5hYmxlZCA9 IDE7DQogID4NCiAgPiAgIHJldHVybiBlOw0KICA+IH0NCg0KVGhlIGZ1bmN0 aW9ucyBpbiBlYXJsaWVyIHZlcnNpb25zIG9mIHRoZSBwYXRjaCBkaWRuJ3Qg YWxsDQp0YWtlIHRoZSBzYW1lIGFyZ3VtZW50cywgYW5kIEkgbGlrZSB0aGUg ZXh0cmEgYml0IG9mDQphYnN0cmFjdGlvbi4gQnV0IG9rLg0KDQoyMDE2LTAy LTE2ICBEb3VnIEV2YW5zICA8ZGplQGdvb2dsZS5jb20+DQoNCglFeHRlbmQg InNraXAiIGNvbW1hbmQgdG8gc3VwcG9ydCAtZmlsZSwgLWdmaWxlLCAtZnVu Y3Rpb24sIC1yZnVuY3Rpb24uDQoJKiBORVdTOiBEb2N1bWVudCBuZXcgZmVh dHVyZXMuDQoJKiBza2lwLmM6ICNpbmNsdWRlICJmbm1hdGNoLmgiLCAiZ2Ri X3JlZ2V4LmgiLg0KCShza2lwbGlzdF9lbnRyeSkgPGZpbGU+OiBSZW5hbWVk IGZyb20gZmlsZW5hbWUuDQoJPGZ1bmN0aW9uPjogUmVuYW1lZCBmcm9tIGZ1 bmN0aW9uX25hbWUuDQoJPGZpbGVfaXNfZ2xvYiwgZnVuY3Rpb25faXNfcmVn ZXhwPjogTmV3IG1lbWJlcnMuDQoJPGNvbXBpbGVkX2Z1bmN0aW9uX3JlZ2V4 cCwgY29tcGlsZWRfZnVuY3Rpb25fcmVnZXhwX2lzX3ZhbGlkPjoNCglOZXcg bWVtYmVycy4NCgkobWFrZV9za2lwX2VudHJ5KTogTmV3IGZ1bmN0aW9uLg0K CShmcmVlX3NraXBsaXN0X2VudHJ5LCBmcmVlX3NraXBsaXN0X2VudHJ5X2Ns ZWFudXApOiBOZXcgZnVuY3Rpb25zLg0KCShtYWtlX2ZyZWVfc2tpcGxpc3Rf ZW50cnlfY2xlYW51cCk6IE5ldyBmdW5jdGlvbi4NCgkoc2tpcF9maWxlX2Nv bW1hbmQpOiBVcGRhdGUuDQoJKHNraXBfZnVuY3Rpb24sIHNraXBfZnVuY3Rp b25fY29tbWFuZCk6IFVwZGF0ZS4NCgkoY29tcGlsZV9za2lwX3JlZ2V4cCk6 IE5ldyBmdW5jdGlvbnMuDQoJKHNraXBfY29tbWFuZCk6IEFkZCBzdXBwb3J0 IGZvciBuZXcgb3B0aW9ucy4NCgkoc2tpcF9pbmZvKTogVXBkYXRlLg0KCShz a2lwX2ZpbGVfcCwgc2tpcF9nZmlsZV9wKTogTmV3IGZ1bmN0aW9ucy4NCgko c2tpcF9mdW5jdGlvbl9wLCBza2lwX3JmdW5jdGlvbl9wKTogTmV3IGZ1bmN0 aW9ucy4NCgkoZnVuY3Rpb25fbmFtZV9pc19tYXJrZWRfZm9yX3NraXApOiBV cGRhdGUgYW5kIHNpbXBsaWZ5Lg0KCShfaW5pdGlhbGl6ZV9zdGVwX3NraXAp OiBVcGRhdGUuDQoJKiBzeW10YWIuYzogI2luY2x1ZGUgImZubWF0Y2guaCIu DQoJKGNvbXBhcmVfZ2xvYl9maWxlbmFtZXNfZm9yX3NlYXJjaCk6IE5ldyBm dW5jdGlvbi4NCgkqIHN5bXRhYi5oIChjb21wYXJlX2dsb2JfZmlsZW5hbWVz X2Zvcl9zZWFyY2gpOiBEZWNsYXJlLg0KCSogdXRpbHMuYyAoY291bnRfcGF0 aF9lbGVtZW50cyk6IE5ldyBmdW5jdGlvbi4NCgkoc3RyaXBfbGVhZGluZ19w YXRoX2VsZW1lbnRzKTogTmV3IGZ1bmN0aW9uLg0KCSogdXRpbHMuaCAoY291 bnRfcGF0aF9lbGVtZW50cyk6IERlY2xhcmUuDQoJKHN0cmlwX2xlYWRpbmdf cGF0aF9lbGVtZW50cyk6IERlY2xhcmUuDQoNCglkb2MvDQoJKiBnZGIudGV4 aW5mbyAoU2tpcHBpbmcgT3ZlciBGdW5jdGlvbnMgYW5kIEZpbGVzKTogRG9j dW1lbnQgbmV3DQoJb3B0aW9ucyB0byAic2tpcCIgY29tbWFuZC4gIFVwZGF0 ZSBkb2NzIG9mIG91dHB1dCBvZiAiaW5mbyBza2lwIi4NCg0KCXRlc3RzdWl0 ZS8NCgkqIGdkYi5iYXNlL3NraXAuYyAodGVzdF9za2lwKTogTmV3IGZ1bmN0 aW9uLg0KCShlbmRfdGVzdF9za2lwX2ZpbGVfYW5kX2Z1bmN0aW9uKTogTmV3 IGZ1bmN0aW9uLg0KCSh0ZXN0X3NraXBfZmlsZV9hbmRfZnVuY3Rpb24pOiBO ZXcgZnVuY3Rpb24uDQoJKiBnZGIuYmFzZS9za2lwMS5jICh0ZXN0X3NraXAp OiBOZXcgZnVuY3Rpb24uDQoJKHNraXAxX3Rlc3Rfc2tpcF9maWxlX2FuZF9m dW5jdGlvbik6IE5ldyBmdW5jdGlvbi4NCgkqIGdkYi5iYXNlL3NraXAuZXhw OiBBZGQgdGVzdHMgZm9yIG5ldyBza2lwIG9wdGlvbnMuDQoJKiBnZGIucGVy Zi9za2lwLWNvbW1hbmQuY2M6IE5ldyBmaWxlLg0KCSogZ2RiLnBlcmYvc2tp cC1jb21tYW5kLmV4cDogTmV3IGZpbGUuDQoJKiBnZGIucGVyZi9za2lwLWNv bW1hbmQucHk6IE5ldyBmaWxlLg0KDQpkaWZmIC0tZ2l0IGEvZ2RiL05FV1Mg Yi9nZGIvTkVXUw0KaW5kZXggNDgyYmVjNi4uOTE3NWRkYmYgMTAwNjQ0DQot LS0gYS9nZGIvTkVXUw0KKysrIGIvZ2RiL05FV1MNCkBAIC0xMjcsNiArMTI3 LDE0IEBAIHNob3cgbWF4LXZhbHVlLXNpemUNCiAgICBhbGxvY2F0ZSBmb3Ig dmFsdWUgY29udGVudHMuICBQcmV2ZW50cyBpbmNvcnJlY3QgcHJvZ3JhbXMg ZnJvbQ0KICAgIGNhdXNpbmcgR0RCIHRvIGFsbG9jYXRlIG92ZXJseSBsYXJn ZSBidWZmZXJzLiAgRGVmYXVsdCBpcyA2NGsuDQoNCitza2lwIC1maWxlIGZp bGUNCitza2lwIC1nZmlsZSBmaWxlLWdsb2ItcGF0dGVybg0KK3NraXAgLWZ1 bmN0aW9uIGZ1bmN0aW9uDQorc2tpcCAtcmZ1bmN0aW9uIHJlZ3VsYXItZXhw cmVzc2lvbg0KKyAgQSBnZW5lcmFsaXplZCBmb3JtIG9mIHRoZSBza2lwIGNv bW1hbmQsIHdpdGggbmV3IHN1cHBvcnQgZm9yDQorICBnbG9iLXN0eWxlIGZp bGUgbmFtZXMgYW5kIHJlZ3VsYXIgZXhwcmVzc2lvbnMgZm9yIGZ1bmN0aW9u IG5hbWVzLg0KKyAgQWRkaXRpb25hbGx5LCBhIGZpbGUgc3BlYyBhbmQgYSBm dW5jdGlvbiBzcGVjIG1heSBub3cgYmUgY29tYmluZWQuDQorDQogICogVGhl ICJkaXNhc3NlbWJsZSIgY29tbWFuZCBhY2NlcHRzIGEgbmV3IG1vZGlmaWVy OiAvcy4NCiAgICBJdCBwcmludHMgbWl4ZWQgc291cmNlK2Rpc2Fzc2VtYmx5 IGxpa2UgL20gd2l0aCB0d28gZGlmZmVyZW5jZXM6DQogICAgLSBkaXNhc3Nl bWJsZWQgaW5zdHJ1Y3Rpb25zIGFyZSBub3cgcHJpbnRlZCBpbiBwcm9ncmFt IG9yZGVyLCBhbmQNCmRpZmYgLS1naXQgYS9nZGIvZG9jL2dkYi50ZXhpbmZv IGIvZ2RiL2RvYy9nZGIudGV4aW5mbw0KaW5kZXggOWRiMjM0ZS4uMjUwOTI5 MyAxMDA2NDQNCi0tLSBhL2dkYi9kb2MvZ2RiLnRleGluZm8NCisrKyBiL2dk Yi9kb2MvZ2RiLnRleGluZm8NCkBAIC01NTI4LDcgKzU1MjgsOCBAQCBkZWZh dWx0IGlzIEBjb2Rle29ufS4NCg0KICBUaGUgcHJvZ3JhbSB5b3UgYXJlIGRl YnVnZ2luZyBtYXkgY29udGFpbiBzb21lIGZ1bmN0aW9ucyB3aGljaCBhcmUN CiAgdW5pbnRlcmVzdGluZyB0byBkZWJ1Zy4gIFRoZSBAY29kZXtza2lwfSBj b21tYW5kIGxldHMgeW91IHRlbGwgIA0KQHZhbHVle0dEQk59IHRvDQotc2tp cCBhIGZ1bmN0aW9uIG9yIGFsbCBmdW5jdGlvbnMgaW4gYSBmaWxlIHdoZW4g c3RlcHBpbmcuDQorc2tpcCBhIGZ1bmN0aW9uLCBhbGwgZnVuY3Rpb25zIGlu IGEgZmlsZSBvciBhIHBhcnRpY3VsYXIgZnVuY3Rpb24gaW4NCithIHBhcnRp Y3VsYXIgZmlsZSB3aGVuIHN0ZXBwaW5nLg0KDQogIEZvciBleGFtcGxlLCBj b25zaWRlciB0aGUgZm9sbG93aW5nIEMgZnVuY3Rpb246DQoNCkBAIC01NTU1 LDEzICs1NTU2LDczIEBAIEEgbW9yZSBmbGV4aWJsZSBzb2x1dGlvbiBpcyB0 byBleGVjdXRlIEBrYmR7c2tpcCAgDQpib3Jpbmd9LiAgVGhpcyBpbnN0cnVj dHMNCiAgQGNvZGV7c3RlcH0gYXQgbGluZSAxMDMsIHlvdSdsbCBzdGVwIG92 ZXIgQGNvZGV7Ym9yaW5nfSBhbmQgZGlyZWN0bHkgaW50bw0KICBAY29kZXtm b299Lg0KDQotWW91IGNhbiBhbHNvIGluc3RydWN0IEB2YWx1ZXtHREJOfSB0 byBza2lwIGFsbCBmdW5jdGlvbnMgaW4gYSBmaWxlLCB3aXRoLCAgDQpmb3IN Ci1leGFtcGxlLCBAY29kZXtza2lwIGZpbGUgYm9yaW5nLmN9Lg0KK0Z1bmN0 aW9ucyBtYXkgYmUgc2tpcHBlZCBieSBwcm92aWRpbmcgZWl0aGVyIGEgZnVu Y3Rpb24gbmFtZSwgbGluZXNwZWMNCisoQHB4cmVme1NwZWNpZnkgTG9jYXRp b259KSwgcmVndWxhciBleHByZXNzaW9uIHRoYXQgbWF0Y2hlcyB0aGUgZnVu Y3Rpb24ncw0KK25hbWUsIGZpbGUgbmFtZSBvciBhIEBjb2Rle2dsb2J9LXN0 eWxlIHBhdHRlcm4gdGhhdCBtYXRjaGVzIHRoZSBmaWxlIG5hbWUuDQorDQor T24gUG9zaXggc3lzdGVtcyB0aGUgZm9ybSBvZiB0aGUgcmVndWxhciBleHBy ZXNzaW9uIGlzDQorYGBFeHRlbmRlZCBSZWd1bGFyIEV4cHJlc3Npb25zJycu ICBTZWUgZm9yIGV4YW1wbGUgQHNhbXB7bWFuIDcgcmVnZXh9DQorb24gQHNj e2dudX0vTGludXggc3lzdGVtcy4gIE9uIG5vbi1Qb3NpeCBzeXN0ZW1zIHRo ZSBmb3JtIG9mIHRoZSByZWd1bGFyDQorZXhwcmVzc2lvbiBpcyB3aGF0ZXZl ciBpcyBwcm92aWRlZCBieSB0aGUgQGNvZGV7cmVnY29tcH0gZnVuY3Rpb24g b2YNCit0aGUgdW5kZXJseWluZyBzeXN0ZW0uDQorU2VlIGZvciBleGFtcGxl IEBzYW1we21hbiA3IGdsb2J9IG9uIEBzY3tnbnV9L0xpbnV4IHN5c3RlbXMg Zm9yIGENCitkZXNjcmlwdGlvbiBvZiBAY29kZXtnbG9ifS1zdHlsZSBwYXR0 ZXJucy4NCisNCitAdGFibGUgQGNvZGUNCitAa2luZGV4IHNraXANCitAaXRl bSBza2lwIEBye1t9QHZhcntvcHRpb25zfUBye119DQorVGhlIGJhc2ljIGZv cm0gb2YgdGhlIEBjb2Rle3NraXB9IGNvbW1hbmQgdGFrZXMgemVybyBvciBt b3JlIG9wdGlvbnMNCit0aGF0IHNwZWNpZnkgd2hhdCB0byBza2lwLg0KK1Ro ZSBAdmFye29wdGlvbnN9IGFyZ3VtZW50IGlzIGFueSB1c2VmdWwgY29tYmlu YXRpb24gb2YgdGhlIGZvbGxvd2luZzoNCg0KICBAdGFibGUgQGNvZGUNCitA aXRlbSAtZmlsZSBAdmFye2ZpbGV9DQorQGl0ZW14IC1maSBAdmFye2ZpbGV9 DQorRnVuY3Rpb25zIGluIEB2YXJ7ZmlsZX0gd2lsbCBiZSBza2lwcGVkIG92 ZXIgd2hlbiBzdGVwcGluZy4NCisNCitAaXRlbSAtZ2ZpbGUgQHZhcntmaWxl LWdsb2ItcGF0dGVybn0NCitAaXRlbXggLWdmaSBAdmFye2ZpbGUtZ2xvYi1w YXR0ZXJufQ0KK0Z1bmN0aW9ucyBpbiBmaWxlcyBtYXRjaGluZyBAdmFye2Zp bGUtZ2xvYi1wYXR0ZXJufSB3aWxsIGJlIHNraXBwZWQNCitvdmVyIHdoZW4g c3RlcHBpbmcuDQorDQorQHNtYWxsZXhhbXBsZQ0KKyhnZGIpIHNraXAgLWdm aSB1dGlscy8qLmMNCitAZW5kIHNtYWxsZXhhbXBsZQ0KKw0KK0BpdGVtIC1m dW5jdGlvbiBAdmFye2xpbmVzcGVjfQ0KK0BpdGVteCAtZnUgQHZhcntsaW5l c3BlY30NCitGdW5jdGlvbnMgbmFtZWQgYnkgQHZhcntsaW5lc3BlY30gb3Ig dGhlIGZ1bmN0aW9uIGNvbnRhaW5pbmcgdGhlIGxpbmUNCituYW1lZCBieSBA dmFye2xpbmVzcGVjfSB3aWxsIGJlIHNraXBwZWQgb3ZlciB3aGVuIHN0ZXBw aW5nLg0KK0B4cmVme1NwZWNpZnkgTG9jYXRpb259Lg0KKw0KK0BpdGVtIC1y ZnVuY3Rpb24gQHZhcntyZWdleHB9DQorQGl0ZW14IC1yZnUgQHZhcntyZWdl eHB9DQorRnVuY3Rpb25zIHdob3NlIG5hbWUgbWF0Y2hlcyBAdmFye3JlZ2V4 cH0gd2lsbCBiZSBza2lwcGVkIG92ZXIgd2hlbiAgDQpzdGVwcGluZy4NCisN CitUaGlzIGZvcm0gaXMgdXNlZnVsIGZvciBjb21wbGV4IGZ1bmN0aW9uIG5h bWVzLg0KK0ZvciBleGFtcGxlLCB0aGVyZSBpcyBnZW5lcmFsbHkgbm8gbmVl ZCB0byBzdGVwIGludG8gQysrIHN0ZDo6c3RyaW5nDQorY29uc3RydWN0b3Jz IG9yIGRlc3RydWN0b3JzLiAgUGx1cyB3aXRoIEMrKyB0ZW1wbGF0ZXMgaXQg Y2FuIGJlIGhhcmQgdG8NCit3cml0ZSBvdXQgdGhlIGZ1bGwgbmFtZSBvZiB0 aGUgZnVuY3Rpb24sIGFuZCBvZnRlbiBpdCBkb2Vzbid0IG1hdHRlciB3aGF0 DQordGhlIHRlbXBsYXRlIGFyZ3VtZW50cyBhcmUuICBTcGVjaWZ5aW5nIHRo ZSBmdW5jdGlvbiB0byBiZSBza2lwcGVkIGFzIGENCityZWd1bGFyIGV4cHJl c3Npb24gbWFrZXMgdGhpcyBlYXNpZXIuDQorDQorQHNtYWxsZXhhbXBsZQ0K KyhnZGIpIHNraXAgLXJmdSBec3RkOjooYWxsb2NhdG9yfGJhc2ljX3N0cmlu Zyk8Lio+Ojp+P1wxICpcKA0KK0BlbmQgc21hbGxleGFtcGxlDQorDQorSWYg eW91IHdhbnQgdG8gc2tpcCBldmVyeSB0ZW1wbGF0ZWQgQysrIGNvbnN0cnVj dG9yIGFuZCBkZXN0cnVjdG9yDQoraW4gdGhlIEBjb2Rle3N0ZH0gbmFtZXNw YWNlIHlvdSBjYW4gZG86DQorDQorQHNtYWxsZXhhbXBsZQ0KKyhnZGIpIHNr aXAgLXJmdSBec3RkOjooW2EtekEtejAtOV9dKyk8Lio+Ojp+P1wxICpcKA0K K0BlbmQgc21hbGxleGFtcGxlDQorQGVuZCB0YWJsZQ0KKw0KK0lmIG5vIG9w dGlvbnMgYXJlIHNwZWNpZmllZCwgdGhlIGZ1bmN0aW9uIHlvdSdyZSBjdXJy ZW50bHkgZGVidWdnaW5nDQord2lsbCBiZSBza2lwcGVkLg0KKw0KICBAa2lu ZGV4IHNraXAgZnVuY3Rpb24NCi1AaXRlbSBza2lwIEBye1t9QHZhcntsaW5l c3BlY31AcntdfQ0KLUBpdGVteCBza2lwIGZ1bmN0aW9uIEBye1t9QHZhcnts aW5lc3BlY31AcntdfQ0KK0BpdGVtIHNraXAgZnVuY3Rpb24gQHJ7W31AdmFy e2xpbmVzcGVjfUBye119DQogIEFmdGVyIHJ1bm5pbmcgdGhpcyBjb21tYW5k LCB0aGUgZnVuY3Rpb24gbmFtZWQgYnkgQHZhcntsaW5lc3BlY30gb3IgdGhl DQogIGZ1bmN0aW9uIGNvbnRhaW5pbmcgdGhlIGxpbmUgbmFtZWQgYnkgQHZh cntsaW5lc3BlY30gd2lsbCBiZSBza2lwcGVkIG92ZXIgIA0Kd2hlbg0KICBz dGVwcGluZy4gIEB4cmVme1NwZWNpZnkgTG9jYXRpb259Lg0KQEAgLTU1Nzcs NiArNTYzOCwxMSBAQCB3aWxsIGJlIHNraXBwZWQuDQogIEFmdGVyIHJ1bm5p bmcgdGhpcyBjb21tYW5kLCBhbnkgZnVuY3Rpb24gd2hvc2Ugc291cmNlIGxp dmVzIGluICANCkB2YXJ7ZmlsZW5hbWV9DQogIHdpbGwgYmUgc2tpcHBlZCBv dmVyIHdoZW4gc3RlcHBpbmcuDQoNCitAc21hbGxleGFtcGxlDQorKGdkYikg c2tpcCBmaWxlIGJvcmluZy5jDQorRmlsZSBib3JpbmcuYyB3aWxsIGJlIHNr aXBwZWQgd2hlbiBzdGVwcGluZy4NCitAZW5kIHNtYWxsZXhhbXBsZQ0KKw0K ICBJZiB5b3UgZG8gbm90IHNwZWNpZnkgQHZhcntmaWxlbmFtZX0sIGZ1bmN0 aW9ucyB3aG9zZSBzb3VyY2UgbGl2ZXMgaW4gdGhlICANCmZpbGUNCiAgeW91 J3JlIGN1cnJlbnRseSBkZWJ1Z2dpbmcgd2lsbCBiZSBza2lwcGVkLg0KICBA ZW5kIHRhYmxlDQpAQCAtNTU5NCwyMCArNTY2MCwyMSBAQCBwcmludCBhIHRh YmxlIHdpdGggZGV0YWlscyBhYm91dCBhbGwgZnVuY3Rpb25zIGFuZCAgDQpm aWxlcyBtYXJrZWQgZm9yIHNraXBwaW5nLg0KICBAdGFibGUgQGVtcGgNCiAg QGl0ZW0gSWRlbnRpZmllcg0KICBBIG51bWJlciBpZGVudGlmeWluZyB0aGlz IHNraXAuDQotQGl0ZW0gVHlwZQ0KLVRoZSB0eXBlIG9mIHRoaXMgc2tpcCwg ZWl0aGVyIEBzYW1we2Z1bmN0aW9ufSBvciBAc2FtcHtmaWxlfS4NCiAgQGl0 ZW0gRW5hYmxlZCBvciBEaXNhYmxlZA0KLUVuYWJsZWQgc2tpcHMgYXJlIG1h cmtlZCB3aXRoIEBzYW1we3l9LiAgRGlzYWJsZWQgc2tpcHMgYXJlIG1hcmtl ZCB3aXRoICANCkBzYW1we259Lg0KLUBpdGVtIEFkZHJlc3MNCi1Gb3IgZnVu Y3Rpb24gc2tpcHMsIHRoaXMgY29sdW1uIGluZGljYXRlcyB0aGUgYWRkcmVz cyBpbiBtZW1vcnkgb2YgdGhlICANCmZ1bmN0aW9uDQotYmVpbmcgc2tpcHBl ZC4gIElmIHlvdSd2ZSBzZXQgYSBmdW5jdGlvbiBza2lwIG9uIGEgZnVuY3Rp b24gd2hpY2ggaGFzIG5vdCAgDQp5ZXQNCi1iZWVuIGxvYWRlZCwgdGhpcyBm aWVsZCB3aWxsIGNvbnRhaW4gQHNhbXB7PFBFTkRJTkc+fS4gIE9uY2UgYSBz aGFyZWQgIA0KbGlicmFyeQ0KLXdoaWNoIGhhcyB0aGUgZnVuY3Rpb24gaXMg bG9hZGVkLCBAY29kZXtpbmZvIHNraXB9IHdpbGwgc2hvdyB0aGUgZnVuY3Rp b24ncw0KLWFkZHJlc3MgaGVyZS4NCi1AaXRlbSBXaGF0DQotRm9yIGZpbGUg c2tpcHMsIHRoaXMgZmllbGQgY29udGFpbnMgdGhlIGZpbGVuYW1lIGJlaW5n IHNraXBwZWQuICBGb3IgIA0KZnVuY3Rpb25zDQotc2tpcHMsIHRoaXMgZmll bGQgY29udGFpbnMgdGhlIGZ1bmN0aW9uIG5hbWUgYW5kIGl0cyBsaW5lIG51 bWJlciBpbiB0aGUgIA0KZmlsZQ0KLXdoZXJlIGl0IGlzIGRlZmluZWQuDQor RW5hYmxlZCBza2lwcyBhcmUgbWFya2VkIHdpdGggQHNhbXB7eX0uDQorRGlz YWJsZWQgc2tpcHMgYXJlIG1hcmtlZCB3aXRoIEBzYW1we259Lg0KK0BpdGVt IEdsb2INCitJZiB0aGUgZmlsZSBuYW1lIGlzIGEgQHNhbXB7Z2xvYn0gcGF0 dGVybiB0aGlzIGlzIEBzYW1we3l9Lg0KK090aGVyd2lzZSBpdCBpcyBAc2Ft cHtufS4NCitAaXRlbSBGaWxlDQorVGhlIG5hbWUgb3IgQHNhbXB7Z2xvYn0g cGF0dGVybiBvZiB0aGUgZmlsZSB0byBiZSBza2lwcGVkLg0KK0lmIG5vIGZp bGUgaXMgc3BlY2lmaWVkIHRoaXMgaXMgQHNhbXB7PG5vbmU+fS4NCitAaXRl bSBSRQ0KK0lmIHRoZSBmdW5jdGlvbiBuYW1lIGlzIGEgQHNhbXB7cmVndWxh ciBleHByZXNzaW9ufSB0aGlzIGlzIEBzYW1we3l9Lg0KK090aGVyd2lzZSBp dCBpcyBAc2FtcHtufS4NCitAaXRlbSBGdW5jdGlvbg0KK1RoZSBuYW1lIG9y IHJlZ3VsYXIgZXhwcmVzc2lvbiBvZiB0aGUgZnVuY3Rpb24gdG8gc2tpcC4N CitJZiBubyBmdW5jdGlvbiBpcyBzcGVjaWZpZWQgdGhpcyBpcyBAc2FtcHs8 bm9uZT59Lg0KICBAZW5kIHRhYmxlDQoNCiAgQGtpbmRleCBza2lwIGRlbGV0 ZQ0KZGlmZiAtLWdpdCBhL2dkYi9za2lwLmMgYi9nZGIvc2tpcC5jDQppbmRl eCBkOTA5MTBkLi4xNTY4MWNjIDEwMDY0NA0KLS0tIGEvZ2RiL3NraXAuYw0K KysrIGIvZ2RiL3NraXAuYw0KQEAgLTMyLDE5ICszMiwzNSBAQA0KICAjaW5j bHVkZSAiYnJlYWtwb2ludC5oIiAvKiBmb3IgZ2V0X3NhbF9hcmNoICgpICov DQogICNpbmNsdWRlICJzb3VyY2UuaCINCiAgI2luY2x1ZGUgImZpbGVuYW1l cy5oIg0KKyNpbmNsdWRlICJmbm1hdGNoLmgiDQorI2luY2x1ZGUgImdkYl9y ZWdleC5oIg0KDQogIHN0cnVjdCBza2lwbGlzdF9lbnRyeQ0KICB7DQogICAg aW50IG51bWJlcjsNCg0KLSAgLyogTlVMTCBpZiB0aGlzIGlzbid0IGEgc2tp cGxpc3QgZW50cnkgZm9yIGFuIGVudGlyZSBmaWxlLg0KKyAgLyogTm9uLXpl cm8gaWYgRklMRSBpcyBhIGdsb2Itc3R5bGUgcGF0dGVybi4NCisgICAgIE90 aGVyZXdpc2UgaXQgaXMgdGhlIHBsYWluIGZpbGUgbmFtZSAocG9zc2libHkg d2l0aCBkaXJlY3RvcmllcykuICAqLw0KKyAgaW50IGZpbGVfaXNfZ2xvYjsN CisNCisgIC8qIFRoZSBuYW1lIG9mIHRoZSBmaWxlIG9yIE5VTEwuDQogICAg ICAgVGhlIHNraXBsaXN0IGVudHJ5IG93bnMgdGhpcyBwb2ludGVyLiAgKi8N Ci0gIGNoYXIgKmZpbGVuYW1lOw0KKyAgY2hhciAqZmlsZTsNCisNCisgIC8q IE5vbi16ZXJvIGlmIEZVTkNUSU9OIGlzIGEgcmVnZXhwLg0KKyAgICAgT3Ro ZXJ3aXNlIGl0IGlzIGEgcGxhaW4gZnVuY3Rpb24gbmFtZSAocG9zc2libHkg d2l0aCBhcmd1bWVudHMsDQorICAgICBmb3IgQysrKS4gICovDQorICBpbnQg ZnVuY3Rpb25faXNfcmVnZXhwOw0KDQotICAvKiBUaGUgbmFtZSBvZiB0aGUg bWFya2VkLWZvci1za2lwIGZ1bmN0aW9uLCBpZiB0aGlzIGlzIGEgc2tpcGxp c3QNCi0gICAgIGVudHJ5IGZvciBhIGZ1bmN0aW9uLg0KKyAgLyogVGhlIG5h bWUgb2YgdGhlIGZ1bmN0aW9uIG9yIE5VTEwuDQogICAgICAgVGhlIHNraXBs aXN0IGVudHJ5IG93bnMgdGhpcyBwb2ludGVyLiAgKi8NCi0gIGNoYXIgKmZ1 bmN0aW9uX25hbWU7DQorICBjaGFyICpmdW5jdGlvbjsNCisNCisgIC8qIElm IHRoaXMgaXMgYSBmdW5jdGlvbiByZWdleHAsIHRoZSBjb21waWxlZCBmb3Jt LiAgKi8NCisgIHJlZ2V4X3QgY29tcGlsZWRfZnVuY3Rpb25fcmVnZXhwOw0K Kw0KKyAgLyogTm9uLXplcm8gaWYgdGhlIGZ1bmN0aW9uIHJlZ2V4cCBoYXMg YmVlbiBjb21waWxlZC4gICovDQorICBpbnQgY29tcGlsZWRfZnVuY3Rpb25f cmVnZXhwX2lzX3ZhbGlkOw0KDQogICAgaW50IGVuYWJsZWQ7DQoNCkBAIC01 Miw3ICs2OCw2IEBAIHN0cnVjdCBza2lwbGlzdF9lbnRyeQ0KICB9Ow0KDQog IHN0YXRpYyB2b2lkIGFkZF9za2lwbGlzdF9lbnRyeSAoc3RydWN0IHNraXBs aXN0X2VudHJ5ICplKTsNCi1zdGF0aWMgdm9pZCBza2lwX2Z1bmN0aW9uIChj b25zdCBjaGFyICpuYW1lKTsNCg0KICBzdGF0aWMgc3RydWN0IHNraXBsaXN0 X2VudHJ5ICpza2lwbGlzdF9lbnRyeV9jaGFpbjsNCiAgc3RhdGljIGludCBz a2lwbGlzdF9lbnRyeV9jb3VudDsNCkBAIC02NSwxMCArODAsNjIgQEAgc3Rh dGljIGludCBza2lwbGlzdF9lbnRyeV9jb3VudDsNCiAgICAgICAgIEUgPyAo VE1QID0gRS0+bmV4dCwgMSkgOiAwOyAgICAgICBcDQogICAgICAgICBFID0g VE1QKQ0KDQorLyogQ3JlYXRlIGEgc2tpcCBvYmplY3QuICAqLw0KKw0KK3N0 YXRpYyBzdHJ1Y3Qgc2tpcGxpc3RfZW50cnkgKg0KK21ha2Vfc2tpcF9lbnRy eSAoaW50IGZpbGVfaXNfZ2xvYiwgY29uc3QgY2hhciAqZmlsZSwNCisJCSBp bnQgZnVuY3Rpb25faXNfcmVnZXhwLCBjb25zdCBjaGFyICpmdW5jdGlvbikN Cit7DQorICBzdHJ1Y3Qgc2tpcGxpc3RfZW50cnkgKmUgPSBYQ05FVyAoc3Ry dWN0IHNraXBsaXN0X2VudHJ5KTsNCisNCisgIGdkYl9hc3NlcnQgKGZpbGUg IT0gTlVMTCB8fCBmdW5jdGlvbiAhPSBOVUxMKTsNCisgIGlmIChmaWxlX2lz X2dsb2IpDQorICAgIGdkYl9hc3NlcnQgKGZpbGUgIT0gTlVMTCk7DQorICBp ZiAoZnVuY3Rpb25faXNfcmVnZXhwKQ0KKyAgICBnZGJfYXNzZXJ0IChmdW5j dGlvbiAhPSBOVUxMKTsNCisNCisgIGlmIChmaWxlICE9IE5VTEwpDQorICAg IGUtPmZpbGUgPSB4c3RyZHVwIChmaWxlKTsNCisgIGlmIChmdW5jdGlvbiAh PSBOVUxMKQ0KKyAgICBlLT5mdW5jdGlvbiA9IHhzdHJkdXAgKGZ1bmN0aW9u KTsNCisgIGUtPmZpbGVfaXNfZ2xvYiA9IGZpbGVfaXNfZ2xvYjsNCisgIGUt PmZ1bmN0aW9uX2lzX3JlZ2V4cCA9IGZ1bmN0aW9uX2lzX3JlZ2V4cDsNCisg IGUtPmVuYWJsZWQgPSAxOw0KKw0KKyAgcmV0dXJuIGU7DQorfQ0KKw0KKy8q IEZyZWUgYSBza2lwbGlzdCBlbnRyeS4gICovDQorDQorc3RhdGljIHZvaWQN CitmcmVlX3NraXBsaXN0X2VudHJ5IChzdHJ1Y3Qgc2tpcGxpc3RfZW50cnkg KmUpDQorew0KKyAgeGZyZWUgKGUtPmZpbGUpOw0KKyAgeGZyZWUgKGUtPmZ1 bmN0aW9uKTsNCisgIGlmIChlLT5mdW5jdGlvbl9pc19yZWdleHAgJiYgZS0+ Y29tcGlsZWRfZnVuY3Rpb25fcmVnZXhwX2lzX3ZhbGlkKQ0KKyAgICByZWdm cmVlICgmZS0+Y29tcGlsZWRfZnVuY3Rpb25fcmVnZXhwKTsNCisgIHhmcmVl IChlKTsNCit9DQorDQorLyogV3JhcHBlciB0byBmcmVlX3NraXBsaXN0X2Vu dHJ5IGZvciB1c2UgYXMgYSBjbGVhbnVwLiAgKi8NCisNCitzdGF0aWMgdm9p ZA0KK2ZyZWVfc2tpcGxpc3RfZW50cnlfY2xlYW51cCAodm9pZCAqZSkNCit7 DQorICBmcmVlX3NraXBsaXN0X2VudHJ5ICgoc3RydWN0IHNraXBsaXN0X2Vu dHJ5ICopIGUpOw0KK30NCisNCisvKiBDcmVhdGUgYSBjbGVhbnVwIHRvIGZy ZWUgc2tpcGxpc3QgZW50cnkgRS4gICovDQorDQorc3RhdGljIHN0cnVjdCBj bGVhbnVwICoNCittYWtlX2ZyZWVfc2tpcGxpc3RfZW50cnlfY2xlYW51cCAo c3RydWN0IHNraXBsaXN0X2VudHJ5ICplKQ0KK3sNCisgIHJldHVybiBtYWtl X2NsZWFudXAgKGZyZWVfc2tpcGxpc3RfZW50cnlfY2xlYW51cCwgZSk7DQor fQ0KKw0KICBzdGF0aWMgdm9pZA0KICBza2lwX2ZpbGVfY29tbWFuZCAoY2hh ciAqYXJnLCBpbnQgZnJvbV90dHkpDQogIHsNCi0gIHN0cnVjdCBza2lwbGlz dF9lbnRyeSAqZTsNCiAgICBzdHJ1Y3Qgc3ltdGFiICpzeW10YWI7DQogICAg Y29uc3QgY2hhciAqZmlsZW5hbWUgPSBOVUxMOw0KDQpAQCAtODUsMzcgKzE1 MiwzMSBAQCBza2lwX2ZpbGVfY29tbWFuZCAoY2hhciAqYXJnLCBpbnQgZnJv bV90dHkpDQogICAgICAgIGZpbGVuYW1lID0gc3ltdGFiX3RvX2Z1bGxuYW1l IChzeW10YWIpOw0KICAgICAgfQ0KICAgIGVsc2UNCi0gICAgew0KLSAgICAg IHN5bXRhYiA9IGxvb2t1cF9zeW10YWIgKGFyZyk7DQotICAgICAgaWYgKHN5 bXRhYiA9PSBOVUxMKQ0KLQl7DQotCSAgZnByaW50Zl9maWx0ZXJlZCAoZ2Ri X3N0ZGVyciwgXygiTm8gc291cmNlIGZpbGUgbmFtZWQgJXMuXG4iKSwgYXJn KTsNCi0JICBpZiAoIW5xdWVyeSAoXygiXA0KLUlnbm9yZSBmaWxlIHBlbmRp bmcgZnV0dXJlIHNoYXJlZCBsaWJyYXJ5IGxvYWQ/ICIpKSkNCi0JICAgIHJl dHVybjsNCi0JfQ0KLSAgICAgIC8qIERvIG5vdCB1c2UgU1lNVEFCJ3MgZmls ZW5hbWUsIGxhdGVyIGxvYWRlZCBzaGFyZWQgbGlicmFyaWVzIG1heSAgDQpt YXRjaA0KLSAgICAgICAgIGdpdmVuIEFSRyBidXQgbm90IFNZTVRBQidzIGZp bGVuYW1lLiAgKi8NCi0gICAgICBmaWxlbmFtZSA9IGFyZzsNCi0gICAgfQ0K KyAgICBmaWxlbmFtZSA9IGFyZzsNCg0KLSAgZSA9IFhDTkVXIChzdHJ1Y3Qg c2tpcGxpc3RfZW50cnkpOw0KLSAgZS0+ZmlsZW5hbWUgPSB4c3RyZHVwIChm aWxlbmFtZSk7DQotICBlLT5lbmFibGVkID0gMTsNCi0NCi0gIGFkZF9za2lw bGlzdF9lbnRyeSAoZSk7DQorICBhZGRfc2tpcGxpc3RfZW50cnkgKG1ha2Vf c2tpcF9lbnRyeSAoMCwgZmlsZW5hbWUsIDAsIE5VTEwpKTsNCg0KICAgIHBy aW50Zl9maWx0ZXJlZCAoXygiRmlsZSAlcyB3aWxsIGJlIHNraXBwZWQgd2hl biBzdGVwcGluZy5cbiIpLCAgDQpmaWxlbmFtZSk7DQogIH0NCg0KKy8qIENy ZWF0ZSBhIHNraXBsaXN0IGVudHJ5IGZvciB0aGUgZ2l2ZW4gZnVuY3Rpb24g TkFNRSBhbmQgYWRkIGl0IHRvIHRoZQ0KKyAgIGxpc3QuICAqLw0KKw0KICBz dGF0aWMgdm9pZA0KLXNraXBfZnVuY3Rpb25fY29tbWFuZCAoY2hhciAqYXJn LCBpbnQgZnJvbV90dHkpDQorc2tpcF9mdW5jdGlvbiAoY29uc3QgY2hhciAq bmFtZSkNCiAgew0KLSAgY29uc3QgY2hhciAqbmFtZSA9IE5VTEw7DQorICBh ZGRfc2tpcGxpc3RfZW50cnkgKG1ha2Vfc2tpcF9lbnRyeSAoMCwgTlVMTCwg MCwgbmFtZSkpOw0KKw0KKyAgcHJpbnRmX2ZpbHRlcmVkIChfKCJGdW5jdGlv biAlcyB3aWxsIGJlIHNraXBwZWQgd2hlbiBzdGVwcGluZy5cbiIpLCAgDQpu YW1lKTsNCit9DQoNCitzdGF0aWMgdm9pZA0KK3NraXBfZnVuY3Rpb25fY29t bWFuZCAoY2hhciAqYXJnLCBpbnQgZnJvbV90dHkpDQorew0KICAgIC8qIERl ZmF1bHQgdG8gdGhlIGN1cnJlbnQgZnVuY3Rpb24gaWYgbm8gYXJndW1lbnQg aXMgZ2l2ZW4uICAqLw0KICAgIGlmIChhcmcgPT0gTlVMTCkNCiAgICAgIHsN CisgICAgICBjb25zdCBjaGFyICpuYW1lID0gTlVMTDsNCiAgICAgICAgQ09S RV9BRERSIHBjOw0KDQogICAgICAgIGlmICghbGFzdF9kaXNwbGF5ZWRfc2Fs X2lzX3ZhbGlkICgpKQ0KQEAgLTEyOCwyNSArMTg5LDE2OSBAQCBza2lwX2Z1 bmN0aW9uX2NvbW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQ0KICAJ CSAgcGFkZHJlc3MgKGdldF9jdXJyZW50X2FyY2ggKCksIHBjKSk7DQogIAl9 DQogICAgICAgIHNraXBfZnVuY3Rpb24gKG5hbWUpOw0KKyAgICAgIHJldHVy bjsNCiAgICAgIH0NCi0gIGVsc2UNCisNCisgIHNraXBfZnVuY3Rpb24gKGFy Zyk7DQorfQ0KKw0KKy8qIENvbXBpbGUgdGhlIHJlZ2V4cCBpbiBFLg0KKyAg IEFuIGVycm9yIGlzIHRocm93biBpZiB0aGVyZSdzIGFuIGVycm9yLg0KKyAg IE1FU1NBR0UgaXMgdXNlZCBhcyBhIHByZWZpeCBvZiB0aGUgZXJyb3IgbWVz c2FnZS4gICovDQorDQorc3RhdGljIHZvaWQNCitjb21waWxlX3NraXBfcmVn ZXhwIChzdHJ1Y3Qgc2tpcGxpc3RfZW50cnkgKmUsIGNvbnN0IGNoYXIgKm1l c3NhZ2UpDQorew0KKyAgaW50IGNvZGU7DQorICBpbnQgZmxhZ3MgPSBSRUdf Tk9TVUI7DQorDQorI2lmZGVmIFJFR19FWFRFTkRFRA0KKyAgZmxhZ3MgfD0g UkVHX0VYVEVOREVEOw0KKyNlbmRpZg0KKw0KKyAgZ2RiX2Fzc2VydCAoZS0+ ZnVuY3Rpb25faXNfcmVnZXhwICYmIGUtPmZ1bmN0aW9uICE9IE5VTEwpOw0K Kw0KKyAgY29kZSA9IHJlZ2NvbXAgKCZlLT5jb21waWxlZF9mdW5jdGlvbl9y ZWdleHAsIGUtPmZ1bmN0aW9uLCBmbGFncyk7DQorICBpZiAoY29kZSAhPSAw KQ0KICAgICAgew0KLSAgICAgIGlmIChsb29rdXBfc3ltYm9sIChhcmcsIE5V TEwsIFZBUl9ET01BSU4sIE5VTEwpLnN5bWJvbCA9PSBOVUxMKQ0KLSAgICAg ICAgew0KLQkgIGZwcmludGZfZmlsdGVyZWQgKGdkYl9zdGRlcnIsDQotCQkJ ICAgIF8oIk5vIGZ1bmN0aW9uIGZvdW5kIG5hbWVkICVzLlxuIiksIGFyZyk7 DQorICAgICAgY2hhciAqZXJyID0gZ2V0X3JlZ2NvbXBfZXJyb3IgKGNvZGUs ICZlLT5jb21waWxlZF9mdW5jdGlvbl9yZWdleHApOw0KDQotCSAgaWYgKG5x dWVyeSAoXygiXA0KLUlnbm9yZSBmdW5jdGlvbiBwZW5kaW5nIGZ1dHVyZSBz aGFyZWQgbGlicmFyeSBsb2FkPyAiKSkpDQotCSAgICB7DQotCSAgICAgIC8q IEFkZCB0aGUgdW52ZXJpZmllZCBza2lwbGlzdCBlbnRyeS4gICovDQotCSAg ICAgIHNraXBfZnVuY3Rpb24gKGFyZyk7DQotCSAgICB9DQorICAgICAgbWFr ZV9jbGVhbnVwICh4ZnJlZSwgZXJyKTsNCisgICAgICBlcnJvciAoXygiJXM6 ICVzIiksIG1lc3NhZ2UsIGVycik7DQorICAgIH0NCisgIGUtPmNvbXBpbGVk X2Z1bmN0aW9uX3JlZ2V4cF9pc192YWxpZCA9IDE7DQorfQ0KKw0KKy8qIFBy b2Nlc3MgInNraXAgLi4uIiB0aGF0IGRvZXMgbm90IG1hdGNoICJza2lwIGZp bGUiIG9yICJza2lwIGZ1bmN0aW9uIi4gICANCiovDQorDQorc3RhdGljIHZv aWQNCitza2lwX2NvbW1hbmQgKGNoYXIgKmFyZywgaW50IGZyb21fdHR5KQ0K K3sNCisgIGNvbnN0IGNoYXIgKmZpbGUgPSBOVUxMOw0KKyAgY29uc3QgY2hh ciAqZ2ZpbGUgPSBOVUxMOw0KKyAgY29uc3QgY2hhciAqZnVuY3Rpb24gPSBO VUxMOw0KKyAgY29uc3QgY2hhciAqcmZ1bmN0aW9uID0gTlVMTDsNCisgIGNo YXIgKiphcmd2Ow0KKyAgc3RydWN0IGNsZWFudXAgKmNsZWFudXBzOw0KKyAg c3RydWN0IHNraXBsaXN0X2VudHJ5ICplOw0KKyAgaW50IGk7DQorDQorICBp ZiAoYXJnID09IE5VTEwpDQorICAgIHsNCisgICAgICBza2lwX2Z1bmN0aW9u X2NvbW1hbmQgKGFyZywgZnJvbV90dHkpOw0KKyAgICAgIHJldHVybjsNCisg ICAgfQ0KKw0KKyAgYXJndiA9IGJ1aWxkYXJndiAoYXJnKTsNCisgIGNsZWFu dXBzID0gbWFrZV9jbGVhbnVwX2ZyZWVhcmd2IChhcmd2KTsNCisNCisgIGZv ciAoaSA9IDA7IGFyZ3ZbaV0gIT0gTlVMTDsgKytpKQ0KKyAgICB7DQorICAg ICAgY29uc3QgY2hhciAqcCA9IGFyZ3ZbaV07DQorICAgICAgY29uc3QgY2hh ciAqdmFsdWUgPSBhcmd2W2kgKyAxXTsNCisNCisgICAgICBpZiAoc3RyY21w IChwLCAiLWZpIikgPT0gMA0KKwkgIHx8IHN0cmNtcCAocCwgIi1maWxlIikg PT0gMCkNCisJew0KKwkgIGlmICh2YWx1ZSA9PSBOVUxMKQ0KKwkgICAgZXJy b3IgKF8oIk1pc3NpbmcgdmFsdWUgZm9yICVzIG9wdGlvbi4iKSwgcCk7DQor CSAgZmlsZSA9IHZhbHVlOw0KKwkgICsraTsNCisJfQ0KKyAgICAgIGVsc2Ug aWYgKHN0cmNtcCAocCwgIi1nZmkiKSA9PSAwDQorCSAgICAgICB8fCBzdHJj bXAgKHAsICItZ2ZpbGUiKSA9PSAwKQ0KKwl7DQorCSAgaWYgKHZhbHVlID09 IE5VTEwpDQorCSAgICBlcnJvciAoXygiTWlzc2luZyB2YWx1ZSBmb3IgJXMg b3B0aW9uLiIpLCBwKTsNCisJICBnZmlsZSA9IHZhbHVlOw0KKwkgICsraTsN CisJfQ0KKyAgICAgIGVsc2UgaWYgKHN0cmNtcCAocCwgIi1mdSIpID09IDAN CisJICAgICAgIHx8IHN0cmNtcCAocCwgIi1mdW5jdGlvbiIpID09IDApDQor CXsNCisJICBpZiAodmFsdWUgPT0gTlVMTCkNCisJICAgIGVycm9yIChfKCJN aXNzaW5nIHZhbHVlIGZvciAlcyBvcHRpb24uIiksIHApOw0KKwkgIGZ1bmN0 aW9uID0gdmFsdWU7DQorCSAgKytpOw0KKwl9DQorICAgICAgZWxzZSBpZiAo c3RyY21wIChwLCAiLXJmdSIpID09IDANCisJICAgICAgIHx8IHN0cmNtcCAo cCwgIi1yZnVuY3Rpb24iKSA9PSAwKQ0KKwl7DQorCSAgaWYgKHZhbHVlID09 IE5VTEwpDQorCSAgICBlcnJvciAoXygiTWlzc2luZyB2YWx1ZSBmb3IgJXMg b3B0aW9uLiIpLCBwKTsNCisJICByZnVuY3Rpb24gPSB2YWx1ZTsNCisJICAr K2k7DQorCX0NCisgICAgICBlbHNlIGlmICgqcCA9PSAnLScpDQorCWVycm9y IChfKCJJbnZhbGlkIHNraXAgb3B0aW9uOiAlcyIpLCBwKTsNCisgICAgICBl bHNlIGlmIChpID09IDApDQorCXsNCisJICAvKiBBc3N1bWUgdGhlIHVzZXIg ZW50ZXJlZCAic2tpcCBGVU5DVElPTi1OQU1FIi4NCisJICAgICBGVU5DVElP Ti1OQU1FIG1heSBiZSBgZm9vIChpbnQpJywgYW5kIHRoZXJlZm9yZSB3ZSBw YXNzIHRoZQ0KKwkgICAgIGNvbXBsZXRlIG9yaWdpbmFsIGFyZyB0byBza2lw X2Z1bmN0aW9uIGNvbW1hbmQgYXMgaWYgdGhlIHVzZXINCisJICAgICB0eXBl ZCAic2tpcCBmdW5jdGlvbiBhcmciLiAgKi8NCisJICBkb19jbGVhbnVwcyAo Y2xlYW51cHMpOw0KKwkgIHNraXBfZnVuY3Rpb25fY29tbWFuZCAoYXJnLCBm cm9tX3R0eSk7DQogIAkgIHJldHVybjsNCiAgCX0NCisgICAgICBlbHNlDQor CWVycm9yIChfKCJJbnZhbGlkIGFyZ3VtZW50OiAlcyIpLCBwKTsNCisgICAg fQ0KKw0KKyAgaWYgKGZpbGUgIT0gTlVMTCAmJiBnZmlsZSAhPSBOVUxMKQ0K KyAgICBlcnJvciAoXygiQ2Fubm90IHNwZWNpZnkgYm90aCAtZmlsZSBhbmQg LWdmaWxlLiIpKTsNCisNCisgIGlmIChmdW5jdGlvbiAhPSBOVUxMICYmIHJm dW5jdGlvbiAhPSBOVUxMKQ0KKyAgICBlcnJvciAoXygiQ2Fubm90IHNwZWNp ZnkgYm90aCAtZnVuY3Rpb24gYW5kIC1yZnVuY3Rpb24uIikpOw0KKw0KKyAg LyogVGhpcyBzaG91bGRuJ3QgaGFwcGVuIGFzICJza2lwIiBieSBpdHNlbGYg Z2V0cyBwdW50ZWQgdG8NCisgICAgIHNraXBfZnVuY3Rpb25fY29tbWFuZC4g ICovDQorICBnZGJfYXNzZXJ0IChmaWxlICE9IE5VTEwgfHwgZ2ZpbGUgIT0g TlVMTA0KKwkgICAgICB8fCBmdW5jdGlvbiAhPSBOVUxMIHx8IHJmdW5jdGlv biAhPSBOVUxMKTsNCisNCisgIGUgPSBtYWtlX3NraXBfZW50cnkgKGdmaWxl ICE9IE5VTEwsIGZpbGUgPyBmaWxlIDogZ2ZpbGUsDQorCQkgICAgICAgcmZ1 bmN0aW9uICE9IE5VTEwsIGZ1bmN0aW9uID8gZnVuY3Rpb24gOiByZnVuY3Rp b24pOw0KKyAgaWYgKHJmdW5jdGlvbiAhPSBOVUxMKQ0KKyAgICB7DQorICAg ICAgc3RydWN0IGNsZWFudXAgKnJmX2NsZWFudXBzID0gbWFrZV9mcmVlX3Nr aXBsaXN0X2VudHJ5X2NsZWFudXAgKGUpOw0KDQotICAgICAgc2tpcF9mdW5j dGlvbiAoYXJnKTsNCisgICAgICBjb21waWxlX3NraXBfcmVnZXhwIChlLCBf KCJyZWdleHAiKSk7DQorICAgICAgZGlzY2FyZF9jbGVhbnVwcyAocmZfY2xl YW51cHMpOw0KICAgICAgfQ0KKyAgYWRkX3NraXBsaXN0X2VudHJ5IChlKTsN CisNCisgIC8qIEkxOE4gY29uY2VybnMgZHJpdmUgc29tZSBvZiB0aGUgY2hv aWNlcyBoZXJlICh3ZSBjYW4ndCBwaWVjZSB0b2dldGhlcg0KKyAgICAgdGhl IG91dHB1dCB0b28gbXVjaCkuICBPVE9IIHdlIHdhbnQgdG8ga2VlcCB0aGlz IHNpbXBsZS4gIFRoZXJlZm9yZSAgDQp0aGUNCisgICAgIG9ubHkgcG9saXNo IHdlIGFkZCB0byB0aGUgb3V0cHV0IGlzIHRvIGFwcGVuZCAiKHMpIiB0byAi RmlsZSIgb3INCisgICAgICJGdW5jdGlvbiIgaWYgdGhleSdyZSBhIGdsb2Iv cmVnZXhwLiAgKi8NCisgIHsNCisgICAgY29uc3QgY2hhciAqZmlsZV90b19w cmludCA9IGZpbGUgIT0gTlVMTCA/IGZpbGUgOiBnZmlsZTsNCisgICAgY29u c3QgY2hhciAqZnVuY3Rpb25fdG9fcHJpbnQgPSBmdW5jdGlvbiAhPSBOVUxM ID8gZnVuY3Rpb24gOiAgDQpyZnVuY3Rpb247DQorICAgIGNvbnN0IGNoYXIg KmZpbGVfdGV4dCA9IGdmaWxlICE9IE5VTEwgPyBfKCJGaWxlKHMpIikgOiBf KCJGaWxlIik7DQorICAgIGNvbnN0IGNoYXIgKmxvd2VyX2ZpbGVfdGV4dCA9 IGdmaWxlICE9IE5VTEwgPyBfKCJmaWxlKHMpIikgOiBfKCJmaWxlIik7DQor ICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX3RleHQNCisgICAgICA9IHJmdW5j dGlvbiAhPSBOVUxMID8gXygiRnVuY3Rpb24ocykiKSA6IF8oIkZ1bmN0aW9u Iik7DQorDQorICAgIGlmIChmdW5jdGlvbl90b19wcmludCA9PSBOVUxMKQ0K KyAgICAgIHsNCisJcHJpbnRmX2ZpbHRlcmVkIChfKCIlcyAlcyB3aWxsIGJl IHNraXBwZWQgd2hlbiBzdGVwcGluZy5cbiIpLA0KKwkJCSBmaWxlX3RleHQs IGZpbGVfdG9fcHJpbnQpOw0KKyAgICAgIH0NCisgICAgZWxzZSBpZiAoZmls ZV90b19wcmludCA9PSBOVUxMKQ0KKyAgICAgIHsNCisJcHJpbnRmX2ZpbHRl cmVkIChfKCIlcyAlcyB3aWxsIGJlIHNraXBwZWQgd2hlbiBzdGVwcGluZy5c biIpLA0KKwkJCSBmdW5jdGlvbl90ZXh0LCBmdW5jdGlvbl90b19wcmludCk7 DQorICAgICAgfQ0KKyAgICBlbHNlDQorICAgICAgew0KKwlwcmludGZfZmls dGVyZWQgKF8oIiVzICVzIGluICVzICVzIHdpbGwgYmUgc2tpcHBlZCINCisJ CQkgICAiIHdoZW4gc3RlcHBpbmcuXG4iKSwNCisJCQkgZnVuY3Rpb25fdGV4 dCwgZnVuY3Rpb25fdG9fcHJpbnQsDQorCQkJIGxvd2VyX2ZpbGVfdGV4dCwg ZmlsZV90b19wcmludCk7DQorICAgICAgfQ0KKyAgfQ0KKw0KKyAgZG9fY2xl YW51cHMgKGNsZWFudXBzKTsNCiAgfQ0KDQogIHN0YXRpYyB2b2lkDQpAQCAt MTc3LDE0ICszODIsMTcgQEAgTm90IHNraXBwaW5nIGFueSBmaWxlcyBvciBm dW5jdGlvbnMuXG4iKSk7DQogICAgICAgIHJldHVybjsNCiAgICAgIH0NCg0K LSAgdGJsX2NoYWluID0gbWFrZV9jbGVhbnVwX3VpX291dF90YWJsZV9iZWdp bl9lbmQgKGN1cnJlbnRfdWlvdXQsIDQsDQorICB0YmxfY2hhaW4gPSBtYWtl X2NsZWFudXBfdWlfb3V0X3RhYmxlX2JlZ2luX2VuZCAoY3VycmVudF91aW91 dCwgNiwNCiAgCQkJCQkJICAgbnVtX3ByaW50YWJsZV9lbnRyaWVzLA0KICAJ CQkJCQkgICAiU2tpcGxpc3RUYWJsZSIpOw0KDQotICB1aV9vdXRfdGFibGVf aGVhZGVyIChjdXJyZW50X3Vpb3V0LCA3LCB1aV9sZWZ0LCAibnVtYmVyIiwg Ik51bSIpOyAgICAgICANCi8qIDEgKi8NCi0gIHVpX291dF90YWJsZV9oZWFk ZXIgKGN1cnJlbnRfdWlvdXQsIDE0LCB1aV9sZWZ0LCAidHlwZSIsICJUeXBl Iik7ICAgICAgIA0KLyogMiAqLw0KLSAgdWlfb3V0X3RhYmxlX2hlYWRlciAo Y3VycmVudF91aW91dCwgMywgdWlfbGVmdCwgImVuYWJsZWQiLCAiRW5iIik7 ICAgICAgDQovKiAzICovDQotICB1aV9vdXRfdGFibGVfaGVhZGVyIChjdXJy ZW50X3Vpb3V0LCA0MCwgdWlfbm9hbGlnbiwgIndoYXQiLCAiV2hhdCIpOyAg ICANCi8qIDQgKi8NCisgIHVpX291dF90YWJsZV9oZWFkZXIgKGN1cnJlbnRf dWlvdXQsIDUsIHVpX2xlZnQsICJudW1iZXIiLCAiTnVtIik7ICAgLyogMSAg DQoqLw0KKyAgdWlfb3V0X3RhYmxlX2hlYWRlciAoY3VycmVudF91aW91dCwg MywgdWlfbGVmdCwgImVuYWJsZWQiLCAiRW5iIik7ICAvKiAyICANCiovDQor ICB1aV9vdXRfdGFibGVfaGVhZGVyIChjdXJyZW50X3Vpb3V0LCA0LCB1aV9y aWdodCwgInJlZ2V4cCIsICJHbG9iIik7IC8qIDMgIA0KKi8NCisgIHVpX291 dF90YWJsZV9oZWFkZXIgKGN1cnJlbnRfdWlvdXQsIDIwLCB1aV9sZWZ0LCAi ZmlsZSIsICJGaWxlIik7ICAgLyogNCAgDQoqLw0KKyAgdWlfb3V0X3RhYmxl X2hlYWRlciAoY3VycmVudF91aW91dCwgMiwgdWlfcmlnaHQsICJyZWdleHAi LCAiUkUiKTsgICAvKiA1ICANCiovDQorICB1aV9vdXRfdGFibGVfaGVhZGVy IChjdXJyZW50X3Vpb3V0LCA0MCwgdWlfbm9hbGlnbiwNCisJCSAgICAgICAi ZnVuY3Rpb24iLCAiRnVuY3Rpb24iKTsgLyogNiAqLw0KICAgIHVpX291dF90 YWJsZV9ib2R5IChjdXJyZW50X3Vpb3V0KTsNCg0KICAgIEFMTF9TS0lQTElT VF9FTlRSSUVTIChlKQ0KQEAgLTE5NywyNSArNDA1LDI3IEBAIE5vdCBza2lw cGluZyBhbnkgZmlsZXMgb3IgZnVuY3Rpb25zLlxuIikpOw0KDQogICAgICAg IGVudHJ5X2NoYWluID0gbWFrZV9jbGVhbnVwX3VpX291dF90dXBsZV9iZWdp bl9lbmQgKGN1cnJlbnRfdWlvdXQsDQogIAkJCQkJCQkgImJsa2xzdC1lbnRy eSIpOw0KLSAgICAgIHVpX291dF9maWVsZF9pbnQgKGN1cnJlbnRfdWlvdXQs ICJudW1iZXIiLCBlLT5udW1iZXIpOyAgICAgICAgICAgICAgDQovKiAxICov DQorICAgICAgdWlfb3V0X2ZpZWxkX2ludCAoY3VycmVudF91aW91dCwgIm51 bWJlciIsIGUtPm51bWJlcik7IC8qIDEgKi8NCg0KLSAgICAgIGlmIChlLT5m dW5jdGlvbl9uYW1lICE9IE5VTEwpDQotCXVpX291dF9maWVsZF9zdHJpbmcg KGN1cnJlbnRfdWlvdXQsICJ0eXBlIiwgImZ1bmN0aW9uIik7ICAgICAgICAg LyogMiAqLw0KLSAgICAgIGVsc2UgaWYgKGUtPmZpbGVuYW1lICE9IE5VTEwp DQotCXVpX291dF9maWVsZF9zdHJpbmcgKGN1cnJlbnRfdWlvdXQsICJ0eXBl IiwgImZpbGUiKTsgICAgICAgICAgICAgLyogMiAqLw0KKyAgICAgIGlmIChl LT5lbmFibGVkKQ0KKwl1aV9vdXRfZmllbGRfc3RyaW5nIChjdXJyZW50X3Vp b3V0LCAiZW5hYmxlZCIsICJ5Iik7IC8qIDIgKi8NCiAgICAgICAgZWxzZQ0K LQlpbnRlcm5hbF9lcnJvciAoX19GSUxFX18sIF9fTElORV9fLCBfKCJcDQot U2tpcGxpc3QgZW50cnkgc2hvdWxkIGhhdmUgZWl0aGVyIGEgZmlsZW5hbWUg b3IgYSBmdW5jdGlvbiBuYW1lLiIpKTsNCisJdWlfb3V0X2ZpZWxkX3N0cmlu ZyAoY3VycmVudF91aW91dCwgImVuYWJsZWQiLCAibiIpOyAvKiAyICovDQoN Ci0gICAgICBpZiAoZS0+ZW5hYmxlZCkNCi0JdWlfb3V0X2ZpZWxkX3N0cmlu ZyAoY3VycmVudF91aW91dCwgImVuYWJsZWQiLCAieSIpOyAgICAgICAgICAg ICAvKiAzICovDQorICAgICAgaWYgKGUtPmZpbGVfaXNfZ2xvYikNCisJdWlf b3V0X2ZpZWxkX3N0cmluZyAoY3VycmVudF91aW91dCwgInJlZ2V4cCIsICJ5 Iik7IC8qIDMgKi8NCiAgICAgICAgZWxzZQ0KLQl1aV9vdXRfZmllbGRfc3Ry aW5nIChjdXJyZW50X3Vpb3V0LCAiZW5hYmxlZCIsICJuIik7ICAgICAgICAg ICAgIC8qIDMgKi8NCisJdWlfb3V0X2ZpZWxkX3N0cmluZyAoY3VycmVudF91 aW91dCwgInJlZ2V4cCIsICJuIik7IC8qIDMgKi8NCg0KLSAgICAgIGlmIChl LT5mdW5jdGlvbl9uYW1lICE9IE5VTEwpDQotCXVpX291dF9maWVsZF9zdHJp bmcgKGN1cnJlbnRfdWlvdXQsICJ3aGF0IiwgZS0+ZnVuY3Rpb25fbmFtZSk7 CSAvKiA0ICovDQotICAgICAgZWxzZSBpZiAoZS0+ZmlsZW5hbWUgIT0gTlVM TCkNCi0JdWlfb3V0X2ZpZWxkX3N0cmluZyAoY3VycmVudF91aW91dCwgIndo YXQiLCBlLT5maWxlbmFtZSk7CSAvKiA0ICovDQorICAgICAgdWlfb3V0X2Zp ZWxkX3N0cmluZyAoY3VycmVudF91aW91dCwgImZpbGUiLA0KKwkJCSAgIGUt PmZpbGUgPyBlLT5maWxlIDogIjxub25lPiIpOyAvKiA0ICovDQorICAgICAg aWYgKGUtPmZ1bmN0aW9uX2lzX3JlZ2V4cCkNCisJdWlfb3V0X2ZpZWxkX3N0 cmluZyAoY3VycmVudF91aW91dCwgInJlZ2V4cCIsICJ5Iik7IC8qIDUgKi8N CisgICAgICBlbHNlDQorCXVpX291dF9maWVsZF9zdHJpbmcgKGN1cnJlbnRf dWlvdXQsICJyZWdleHAiLCAibiIpOyAvKiA1ICovDQorDQorICAgICAgdWlf b3V0X2ZpZWxkX3N0cmluZyAoY3VycmVudF91aW91dCwgImZ1bmN0aW9uIiwN CisJCQkgICBlLT5mdW5jdGlvbiA/IGUtPmZ1bmN0aW9uIDogIjxub25lPiIp OyAvKiA2ICovDQoNCiAgICAgICAgdWlfb3V0X3RleHQgKGN1cnJlbnRfdWlv dXQsICJcbiIpOw0KICAgICAgICBkb19jbGVhbnVwcyAoZW50cnlfY2hhaW4p Ow0KQEAgLTI3Myw5ICs0ODMsNyBAQCBza2lwX2RlbGV0ZV9jb21tYW5kIChj aGFyICphcmcsIGludCBmcm9tX3R0eSkNCiAgCWVsc2UNCiAgCSAgc2tpcGxp c3RfZW50cnlfY2hhaW4gPSBlLT5uZXh0Ow0KDQotCXhmcmVlIChlLT5mdW5j dGlvbl9uYW1lKTsNCi0JeGZyZWUgKGUtPmZpbGVuYW1lKTsNCi0JeGZyZWUg KGUpOw0KKwlmcmVlX3NraXBsaXN0X2VudHJ5IChlKTsNCiAgICAgICAgICBm b3VuZCA9IDE7DQogICAgICAgIH0NCiAgICAgIGVsc2UNCkBAIC0yODcsMjIg KzQ5NSw2IEBAIHNraXBfZGVsZXRlX2NvbW1hbmQgKGNoYXIgKmFyZywgaW50 IGZyb21fdHR5KQ0KICAgICAgZXJyb3IgKF8oIk5vIHNraXBsaXN0IGVudHJp ZXMgZm91bmQgd2l0aCBudW1iZXIgJXMuIiksIGFyZyk7DQogIH0NCg0KLS8q IENyZWF0ZSBhIHNraXBsaXN0IGVudHJ5IGZvciB0aGUgZ2l2ZW4gZnVuY3Rp b24gTkFNRSBhbmQgYWRkIGl0IHRvIHRoZQ0KLSAgIGxpc3QuICAqLw0KLQ0K LXN0YXRpYyB2b2lkDQotc2tpcF9mdW5jdGlvbiAoY29uc3QgY2hhciAqbmFt ZSkNCi17DQotICBzdHJ1Y3Qgc2tpcGxpc3RfZW50cnkgKmUgPSBYQ05FVyAo c3RydWN0IHNraXBsaXN0X2VudHJ5KTsNCi0NCi0gIGUtPmVuYWJsZWQgPSAx Ow0KLSAgZS0+ZnVuY3Rpb25fbmFtZSA9IHhzdHJkdXAgKG5hbWUpOw0KLQ0K LSAgYWRkX3NraXBsaXN0X2VudHJ5IChlKTsNCi0NCi0gIHByaW50Zl9maWx0 ZXJlZCAoXygiRnVuY3Rpb24gJXMgd2lsbCBiZSBza2lwcGVkIHdoZW4gc3Rl cHBpbmcuXG4iKSwgIA0KbmFtZSk7DQotfQ0KLQ0KICAvKiBBZGQgdGhlIGdp dmVuIHNraXBsaXN0IGVudHJ5IHRvIG91ciBsaXN0LCBhbmQgc2V0IHRoZSBl bnRyeSdzIG51bWJlci4gICANCiovDQoNCiAgc3RhdGljIHZvaWQNCkBAIC0z MjYsNiArNTE4LDk4IEBAIGFkZF9za2lwbGlzdF9lbnRyeSAoc3RydWN0IHNr aXBsaXN0X2VudHJ5ICplKQ0KICAgICAgfQ0KICB9DQoNCisvKiBSZXR1cm4g bm9uLXplcm8gaWYgd2UncmUgc3RvcHBlZCBhdCBhIGZpbGUgdG8gYmUgc2tp cHBlZC4gICovDQorDQorc3RhdGljIGludA0KK3NraXBfZmlsZV9wIChzdHJ1 Y3Qgc2tpcGxpc3RfZW50cnkgKmUsDQorCSAgICAgY29uc3Qgc3RydWN0IHN5 bXRhYl9hbmRfbGluZSAqZnVuY3Rpb25fc2FsKQ0KK3sNCisgIGdkYl9hc3Nl cnQgKGUtPmZpbGUgIT0gTlVMTCAmJiAhZS0+ZmlsZV9pc19nbG9iKTsNCisN CisgIGlmIChmdW5jdGlvbl9zYWwtPnN5bXRhYiA9PSBOVUxMKQ0KKyAgICBy ZXR1cm4gMDsNCisNCisgIC8qIENoZWNrIGZpcnN0IHNvbGUgU1lNVEFCLT5G SUxFTkFNRS4gIEl0IG1heSBub3QgYmUgYSBzdWJzdHJpbmcgb2YNCisgICAg IHN5bXRhYl90b19mdWxsbmFtZSBhcyBpdCBtYXkgY29udGFpbiAiLi8iIGV0 Yy4gICovDQorICBpZiAoY29tcGFyZV9maWxlbmFtZXNfZm9yX3NlYXJjaCAo ZnVuY3Rpb25fc2FsLT5zeW10YWItPmZpbGVuYW1lLCAgDQplLT5maWxlKSkN CisgICAgcmV0dXJuIDE7DQorDQorICAvKiBCZWZvcmUgd2UgaW52b2tlIHJl YWxwYXRoLCB3aGljaCBjYW4gZ2V0IGV4cGVuc2l2ZSB3aGVuIG1hbnkNCisg ICAgIGZpbGVzIGFyZSBpbnZvbHZlZCwgZG8gYSBxdWljayBjb21wYXJpc29u IG9mIHRoZSBiYXNlbmFtZXMuICAqLw0KKyAgaWYgKCFiYXNlbmFtZXNfbWF5 X2RpZmZlcg0KKyAgICAgICYmIGZpbGVuYW1lX2NtcCAobGJhc2VuYW1lIChm dW5jdGlvbl9zYWwtPnN5bXRhYi0+ZmlsZW5hbWUpLA0KKwkJICAgICAgIGxi YXNlbmFtZSAoZS0+ZmlsZSkpICE9IDApDQorICAgIHJldHVybiAwOw0KKw0K KyAgLyogTm90ZTogc3ltdGFiX3RvX2Z1bGxuYW1lIGNhY2hlcyBpdHMgcmVz dWx0LCB0aHVzIHdlIGRvbid0IGhhdmUgdG8uICAqLw0KKyAgew0KKyAgICBj b25zdCBjaGFyICpmdWxsbmFtZSA9IHN5bXRhYl90b19mdWxsbmFtZSAoZnVu Y3Rpb25fc2FsLT5zeW10YWIpOw0KKw0KKyAgICBpZiAoY29tcGFyZV9maWxl bmFtZXNfZm9yX3NlYXJjaCAoZnVsbG5hbWUsIGUtPmZpbGUpKQ0KKyAgICAg IHJldHVybiAxOw0KKyAgfQ0KKw0KKyAgcmV0dXJuIDA7DQorfQ0KKw0KKy8q IFJldHVybiBub24temVybyBpZiB3ZSdyZSBzdG9wcGVkIGF0IGEgZ2xvYmJl ZCBmaWxlIHRvIGJlIHNraXBwZWQuICAqLw0KKw0KK3N0YXRpYyBpbnQNCitz a2lwX2dmaWxlX3AgKHN0cnVjdCBza2lwbGlzdF9lbnRyeSAqZSwNCisJICAg ICAgY29uc3Qgc3RydWN0IHN5bXRhYl9hbmRfbGluZSAqZnVuY3Rpb25fc2Fs KQ0KK3sNCisgIGdkYl9hc3NlcnQgKGUtPmZpbGUgIT0gTlVMTCAmJiBlLT5m aWxlX2lzX2dsb2IpOw0KKw0KKyAgaWYgKGZ1bmN0aW9uX3NhbC0+c3ltdGFi ID09IE5VTEwpDQorICAgIHJldHVybiAwOw0KKw0KKyAgLyogQ2hlY2sgZmly c3Qgc29sZSBTWU1UQUItPkZJTEVOQU1FLiAgSXQgbWF5IG5vdCBiZSBhIHN1 YnN0cmluZyBvZg0KKyAgICAgc3ltdGFiX3RvX2Z1bGxuYW1lIGFzIGl0IG1h eSBjb250YWluICIuLyIgZXRjLiAgKi8NCisgIGlmIChnZGJfZmlsZW5hbWVf Zm5tYXRjaCAoZS0+ZmlsZSwgZnVuY3Rpb25fc2FsLT5zeW10YWItPmZpbGVu YW1lLA0KKwkJCSAgICBGTk1fRklMRV9OQU1FIHwgRk5NX05PRVNDQVBFKSA9 PSAwKQ0KKyAgICByZXR1cm4gMTsNCisNCisgIC8qIEJlZm9yZSB3ZSBpbnZv a2Ugc3ltdGFiX3RvX2Z1bGxuYW1lLCB3aGljaCBpcyBleHBlbnNpdmUsIGRv IGEgcXVpY2sNCisgICAgIGNvbXBhcmlzb24gb2YgdGhlIGJhc2VuYW1lcy4N CisgICAgIE5vdGUgdGhhdCB3ZSBhc3N1bWUgdGhhdCBsYmFzZW5hbWUgd29y a3Mgd2l0aCBnbG9iLXN0eWxlIHBhdHRlcm5zLg0KKyAgICAgSWYgdGhlIGJh c2VuYW1lIG9mIHRoZSBnbG9iIHBhdHRlcm4gaXMgc29tZXRoaW5nIGxpa2Ug IiouYyIgdGhlbiB0aGlzDQorICAgICBpc24ndCBtdWNoIG9mIGEgd2luLiAg T2ggd2VsbC4gICovDQorICBpZiAoIWJhc2VuYW1lc19tYXlfZGlmZmVyDQor ICAgICAgJiYgZ2RiX2ZpbGVuYW1lX2ZubWF0Y2ggKGxiYXNlbmFtZSAoZS0+ ZmlsZSksDQorCQkJICAgICAgIGxiYXNlbmFtZSAoZnVuY3Rpb25fc2FsLT5z eW10YWItPmZpbGVuYW1lKSwNCisJCQkgICAgICAgRk5NX0ZJTEVfTkFNRSB8 IEZOTV9OT0VTQ0FQRSkgIT0gMCkNCisgICAgcmV0dXJuIDA7DQorDQorICAv KiBOb3RlOiBzeW10YWJfdG9fZnVsbG5hbWUgY2FjaGVzIGl0cyByZXN1bHQs IHRodXMgd2UgZG9uJ3QgaGF2ZSB0by4gICovDQorICB7DQorICAgIGNvbnN0 IGNoYXIgKmZ1bGxuYW1lID0gc3ltdGFiX3RvX2Z1bGxuYW1lIChmdW5jdGlv bl9zYWwtPnN5bXRhYik7DQorDQorICAgIGlmIChjb21wYXJlX2dsb2JfZmls ZW5hbWVzX2Zvcl9zZWFyY2ggKGZ1bGxuYW1lLCBlLT5maWxlKSkNCisgICAg ICByZXR1cm4gMTsNCisgIH0NCisNCisgIHJldHVybiAwOw0KK30NCisNCisv KiBSZXR1cm4gbm9uLXplcm8gaWYgd2UncmUgc3RvcHBlZCBhdCBhIGZ1bmN0 aW9uIHRvIGJlIHNraXBwZWQuICAqLw0KKw0KK3N0YXRpYyBpbnQNCitza2lw X2Z1bmN0aW9uX3AgKHN0cnVjdCBza2lwbGlzdF9lbnRyeSAqZSwgY29uc3Qg Y2hhciAqZnVuY3Rpb25fbmFtZSkNCit7DQorICBnZGJfYXNzZXJ0IChlLT5m dW5jdGlvbiAhPSBOVUxMICYmICFlLT5mdW5jdGlvbl9pc19yZWdleHApOw0K KyAgcmV0dXJuIHN0cmNtcF9pdyAoZnVuY3Rpb25fbmFtZSwgZS0+ZnVuY3Rp b24pID09IDA7DQorfQ0KKw0KKy8qIFJldHVybiBub24temVybyBpZiB3ZSdy ZSBzdG9wcGVkIGF0IGEgZnVuY3Rpb24gcmVnZXhwIHRvIGJlIHNraXBwZWQu ICAqLw0KKw0KK3N0YXRpYyBpbnQNCitza2lwX3JmdW5jdGlvbl9wIChzdHJ1 Y3Qgc2tpcGxpc3RfZW50cnkgKmUsIGNvbnN0IGNoYXIgKmZ1bmN0aW9uX25h bWUpDQorew0KKyAgZ2RiX2Fzc2VydCAoZS0+ZnVuY3Rpb24gIT0gTlVMTCAm JiBlLT5mdW5jdGlvbl9pc19yZWdleHANCisJICAgICAgJiYgZS0+Y29tcGls ZWRfZnVuY3Rpb25fcmVnZXhwX2lzX3ZhbGlkKTsNCisgIHJldHVybiAocmVn ZXhlYyAoJmUtPmNvbXBpbGVkX2Z1bmN0aW9uX3JlZ2V4cCwgZnVuY3Rpb25f bmFtZSwgMCwgTlVMTCwgMCkNCisJICA9PSAwKTsNCit9DQoNCiAgLyogU2Vl IHNraXAuaC4gICovDQoNCkBAIC0zMzMsOCArNjE3LDYgQEAgaW50DQogIGZ1 bmN0aW9uX25hbWVfaXNfbWFya2VkX2Zvcl9za2lwIChjb25zdCBjaGFyICpm dW5jdGlvbl9uYW1lLA0KICAJCQkJICBjb25zdCBzdHJ1Y3Qgc3ltdGFiX2Fu ZF9saW5lICpmdW5jdGlvbl9zYWwpDQogIHsNCi0gIGludCBzZWFyY2hlZF9m b3JfZnVsbG5hbWUgPSAwOw0KLSAgY29uc3QgY2hhciAqZnVsbG5hbWUgPSBO VUxMOw0KICAgIHN0cnVjdCBza2lwbGlzdF9lbnRyeSAqZTsNCg0KICAgIGlm IChmdW5jdGlvbl9uYW1lID09IE5VTEwpDQpAQCAtMzQyLDQzICs2MjQsNDkg QEAgZnVuY3Rpb25fbmFtZV9pc19tYXJrZWRfZm9yX3NraXAgKGNvbnN0IGNo YXIgIA0KKmZ1bmN0aW9uX25hbWUsDQoNCiAgICBBTExfU0tJUExJU1RfRU5U UklFUyAoZSkNCiAgICAgIHsNCisgICAgICBpbnQgc2tpcF9ieV9maWxlID0g MDsNCisgICAgICBpbnQgc2tpcF9ieV9mdW5jdGlvbiA9IDA7DQorDQogICAg ICAgIGlmICghZS0+ZW5hYmxlZCkNCiAgCWNvbnRpbnVlOw0KDQotICAgICAg LyogRG9lcyB0aGUgcGMgd2UncmUgc3RlcHBpbmcgaW50byBtYXRjaCBlJ3Mg c3RvcmVkIHBjPyAqLw0KLSAgICAgIGlmIChlLT5mdW5jdGlvbl9uYW1lICE9 IE5VTEwNCi0JICAmJiBzdHJjbXBfaXcgKGZ1bmN0aW9uX25hbWUsIGUtPmZ1 bmN0aW9uX25hbWUpID09IDApDQotCXJldHVybiAxOw0KLQ0KLSAgICAgIGlm IChlLT5maWxlbmFtZSAhPSBOVUxMKQ0KKyAgICAgIGlmIChlLT5maWxlICE9 IE5VTEwpDQogIAl7DQotCSAgLyogQ2hlY2sgZmlyc3Qgc29sZSBTWU1UQUIt PkZJTEVOQU1FLiAgSXQgZG9lcyBub3QgbmVlZCB0byBiZQ0KLQkgICAgIGEg c3Vic3RyaW5nIG9mIHN5bXRhYl90b19mdWxsbmFtZSBhcyBpdCBtYXkgY29u dGFpbiAiLi8iIGV0Yy4gICovDQotCSAgaWYgKGZ1bmN0aW9uX3NhbC0+c3lt dGFiICE9IE5VTEwNCi0JICAgICAgJiYgY29tcGFyZV9maWxlbmFtZXNfZm9y X3NlYXJjaCAoZnVuY3Rpb25fc2FsLT5zeW10YWItPmZpbGVuYW1lLA0KLQkJ CQkJICAgICAgIGUtPmZpbGVuYW1lKSkNCi0JICAgIHJldHVybiAxOw0KLQ0K LQkgIC8qIEJlZm9yZSB3ZSBpbnZva2UgcmVhbHBhdGgsIHdoaWNoIGNhbiBn ZXQgZXhwZW5zaXZlIHdoZW4gbWFueQ0KLQkgICAgIGZpbGVzIGFyZSBpbnZv bHZlZCwgZG8gYSBxdWljayBjb21wYXJpc29uIG9mIHRoZSBiYXNlbmFtZXMu ICAqLw0KLQkgIGlmICghYmFzZW5hbWVzX21heV9kaWZmZXINCi0JICAgICAg JiYgKGZ1bmN0aW9uX3NhbC0+c3ltdGFiID09IE5VTEwNCi0JICAgICAgICAg IHx8IGZpbGVuYW1lX2NtcCAobGJhc2VuYW1lIChmdW5jdGlvbl9zYWwtPnN5 bXRhYi0+ZmlsZW5hbWUpLA0KLQkJCQkgICBsYmFzZW5hbWUgKGUtPmZpbGVu YW1lKSkgIT0gMCkpDQotCSAgICBjb250aW51ZTsNCi0NCi0JICAvKiBHZXQg dGhlIGZpbGVuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBGVU5DVElPTl9T QUwsIGlmIHdlIGhhdmVuJ3QNCi0JICAgICB5ZXQuICAqLw0KLQkgIGlmICgh c2VhcmNoZWRfZm9yX2Z1bGxuYW1lKQ0KKwkgIGlmIChlLT5maWxlX2lzX2ds b2IpDQorCSAgICB7DQorCSAgICAgIGlmIChza2lwX2dmaWxlX3AgKGUsIGZ1 bmN0aW9uX3NhbCkpDQorCQlza2lwX2J5X2ZpbGUgPSAxOw0KKwkgICAgfQ0K KwkgIGVsc2UNCiAgCSAgICB7DQotCSAgICAgIGlmIChmdW5jdGlvbl9zYWwt PnN5bXRhYiAhPSBOVUxMKQ0KLQkJZnVsbG5hbWUgPSBzeW10YWJfdG9fZnVs bG5hbWUgKGZ1bmN0aW9uX3NhbC0+c3ltdGFiKTsNCi0JICAgICAgc2VhcmNo ZWRfZm9yX2Z1bGxuYW1lID0gMTsNCisJICAgICAgaWYgKHNraXBfZmlsZV9w IChlLCBmdW5jdGlvbl9zYWwpKQ0KKwkJc2tpcF9ieV9maWxlID0gMTsNCiAg CSAgICB9DQotCSAgaWYgKGZ1bGxuYW1lICE9IE5VTEwNCi0JICAgICAgJiYg Y29tcGFyZV9maWxlbmFtZXNfZm9yX3NlYXJjaCAoZnVsbG5hbWUsIGUtPmZp bGVuYW1lKSkNCisJfQ0KKyAgICAgIGlmIChlLT5mdW5jdGlvbiAhPSBOVUxM KQ0KKwl7DQorCSAgaWYgKGUtPmZ1bmN0aW9uX2lzX3JlZ2V4cCkNCisJICAg IHsNCisJICAgICAgaWYgKHNraXBfcmZ1bmN0aW9uX3AgKGUsIGZ1bmN0aW9u X25hbWUpKQ0KKwkJc2tpcF9ieV9mdW5jdGlvbiA9IDE7DQorCSAgICB9DQor CSAgZWxzZQ0KKwkgICAgew0KKwkgICAgICBpZiAoc2tpcF9mdW5jdGlvbl9w IChlLCBmdW5jdGlvbl9uYW1lKSkNCisJCXNraXBfYnlfZnVuY3Rpb24gPSAx Ow0KKwkgICAgfQ0KKwl9DQorDQorICAgICAgLyogSWYgYm90aCBmaWxlIGFu ZCBmdW5jdGlvbiBtdXN0IG1hdGNoLCBtYWtlIHN1cmUgd2UgZG9uJ3QgZXJy YW50bHkNCisJIGV4aXQgaWYgb25seSBvbmUgb2YgdGhlbSBtYXRjaC4gICov DQorICAgICAgaWYgKGUtPmZpbGUgIT0gTlVMTCAmJiBlLT5mdW5jdGlvbiAh PSBOVUxMKQ0KKwl7DQorCSAgaWYgKHNraXBfYnlfZmlsZSAmJiBza2lwX2J5 X2Z1bmN0aW9uKQ0KICAJICAgIHJldHVybiAxOw0KICAJfQ0KKyAgICAgIC8q IE9ubHkgb25lIG9mIGZpbGUvZnVuY3Rpb24gaXMgc3BlY2lmaWVkLiAgKi8N CisgICAgICBlbHNlIGlmIChza2lwX2J5X2ZpbGUgfHwgc2tpcF9ieV9mdW5j dGlvbikNCisJcmV0dXJuIDE7DQogICAgICB9DQoNCiAgICByZXR1cm4gMDsN CkBAIC0zOTYsMjIgKzY4NCwzMSBAQCBfaW5pdGlhbGl6ZV9zdGVwX3NraXAg KHZvaWQpDQogICAgc2tpcGxpc3RfZW50cnlfY2hhaW4gPSAwOw0KICAgIHNr aXBsaXN0X2VudHJ5X2NvdW50ID0gMDsNCg0KLSAgYWRkX3ByZWZpeF9jbWQg KCJza2lwIiwgY2xhc3NfYnJlYWtwb2ludCwgc2tpcF9mdW5jdGlvbl9jb21t YW5kLCBfKCJcDQorICBhZGRfcHJlZml4X2NtZCAoInNraXAiLCBjbGFzc19i cmVha3BvaW50LCBza2lwX2NvbW1hbmQsIF8oIlwNCiAgSWdub3JlIGEgZnVu Y3Rpb24gd2hpbGUgc3RlcHBpbmcuXG5cDQotVXNhZ2U6IHNraXAgW0ZVTkNU SU9OIE5BTUVdXG5cDQotSWYgbm8gZnVuY3Rpb24gbmFtZSBpcyBnaXZlbiwg aWdub3JlIHRoZSBjdXJyZW50IGZ1bmN0aW9uLiIpLA0KK1xuXA0KK1VzYWdl OiBza2lwIFtGVU5DVElPTi1OQU1FXVxuXA0KKyAgICAgICBza2lwIFs8Zmls ZS1zcGVjPl0gWzxmdW5jdGlvbi1zcGVjPl1cblwNCitJZiBubyBhcmd1bWVu dHMgYXJlIGdpdmVuLCBpZ25vcmUgdGhlIGN1cnJlbnQgZnVuY3Rpb24uXG5c DQorXG5cDQorPGZpbGUtc3BlYz4gaXMgb25lIG9mOlxuXA0KKyAgICAgICAt Zml8LWZpbGUgRklMRS1OQU1FXG5cDQorICAgICAgIC1nZml8LWdmaWxlIEdM T0ItRklMRS1QQVRURVJOXG5cDQorPGZ1bmN0aW9uLXNwZWM+IGlzIG9uZSBv ZjpcblwNCisgICAgICAgLWZ1fC1mdW5jdGlvbiBGVU5DVElPTi1OQU1FXG5c DQorICAgICAgIC1yZnV8LXJmdW5jdGlvbiBGVU5DVElPTi1OQU1FLVJFR1VM QVItRVhQUkVTU0lPTiIpLA0KICAgICAgICAgICAgICAgICAgICAmc2tpcGxp c3QsICJza2lwICIsIDEsICZjbWRsaXN0KTsNCg0KICAgIGMgPSBhZGRfY21k ICgiZmlsZSIsIGNsYXNzX2JyZWFrcG9pbnQsIHNraXBfZmlsZV9jb21tYW5k LCBfKCJcDQogIElnbm9yZSBhIGZpbGUgd2hpbGUgc3RlcHBpbmcuXG5cDQot VXNhZ2U6IHNraXAgZmlsZSBbRklMRU5BTUVdXG5cDQorVXNhZ2U6IHNraXAg ZmlsZSBbRklMRS1OQU1FXVxuXA0KICBJZiBubyBmaWxlbmFtZSBpcyBnaXZl biwgaWdub3JlIHRoZSBjdXJyZW50IGZpbGUuIiksDQogIAkgICAgICAgJnNr aXBsaXN0KTsNCiAgICBzZXRfY21kX2NvbXBsZXRlciAoYywgZmlsZW5hbWVf Y29tcGxldGVyKTsNCg0KICAgIGMgPSBhZGRfY21kICgiZnVuY3Rpb24iLCBj bGFzc19icmVha3BvaW50LCBza2lwX2Z1bmN0aW9uX2NvbW1hbmQsIF8oIlwN CiAgSWdub3JlIGEgZnVuY3Rpb24gd2hpbGUgc3RlcHBpbmcuXG5cDQotVXNh Z2U6IHNraXAgZnVuY3Rpb24gW0ZVTkNUSU9OIE5BTUVdXG5cDQorVXNhZ2U6 IHNraXAgZnVuY3Rpb24gW0ZVTkNUSU9OLU5BTUVdXG5cDQogIElmIG5vIGZ1 bmN0aW9uIG5hbWUgaXMgZ2l2ZW4sIHNraXAgdGhlIGN1cnJlbnQgZnVuY3Rp b24uIiksDQogIAkgICAgICAgJnNraXBsaXN0KTsNCiAgICBzZXRfY21kX2Nv bXBsZXRlciAoYywgbG9jYXRpb25fY29tcGxldGVyKTsNCmRpZmYgLS1naXQg YS9nZGIvc3ltdGFiLmMgYi9nZGIvc3ltdGFiLmMNCmluZGV4IDk1YjNhMTEu LmUwNjEwNGIgMTAwNjQ0DQotLS0gYS9nZGIvc3ltdGFiLmMNCisrKyBiL2dk Yi9zeW10YWIuYw0KQEAgLTQxLDcgKzQxLDcgQEANCiAgI2luY2x1ZGUgInAt bGFuZy5oIg0KICAjaW5jbHVkZSAiYWRkcm1hcC5oIg0KICAjaW5jbHVkZSAi Y2xpL2NsaS11dGlscy5oIg0KLQ0KKyNpbmNsdWRlICJmbm1hdGNoLmgiDQog ICNpbmNsdWRlICJoYXNodGFiLmgiDQoNCiAgI2luY2x1ZGUgImdkYl9vYnN0 YWNrLmgiDQpAQCAtMzQyLDYgKzM0Miw0MCBAQCBjb21wYXJlX2ZpbGVuYW1l c19mb3Jfc2VhcmNoIChjb25zdCBjaGFyICpmaWxlbmFtZSwgIA0KY29uc3Qg Y2hhciAqc2VhcmNoX25hbWUpDQogIAkgICAgICAmJiBTVFJJUF9EUklWRV9T UEVDIChmaWxlbmFtZSkgPT0gJmZpbGVuYW1lW2xlbiAtIHNlYXJjaF9sZW5d KSk7DQogIH0NCg0KKy8qIFNhbWUgYXMgY29tcGFyZV9maWxlbmFtZXNfZm9y X3NlYXJjaCwgYnV0IGZvciBnbG9iLXN0eWxlIHBhdHRlcm5zLg0KKyAgIEhl YWRzIHVwIG9uIHRoZSBvcmRlciBvZiB0aGUgYXJndW1lbnRzLiAgVGhleSBt YXRjaCB0aGUgb3JkZXIgb2YNCisgICBjb21wYXJlX2ZpbGVuYW1lc19mb3Jf c2VhcmNoLCBidXQgaXQncyB0aGUgb3Bwb3NpdGUgb2YgdGhlIG9yZGVyIG9m DQorICAgYXJndW1lbnRzIHRvIGdkYl9maWxlbmFtZV9mbm1hdGNoLiAgKi8N CisNCitpbnQNCitjb21wYXJlX2dsb2JfZmlsZW5hbWVzX2Zvcl9zZWFyY2gg KGNvbnN0IGNoYXIgKmZpbGVuYW1lLA0KKwkJCQkgICBjb25zdCBjaGFyICpz ZWFyY2hfbmFtZSkNCit7DQorICAvKiBXZSByZWx5IG9uIHRoZSBwcm9wZXJ0 eSBvZiBnbG9iLXN0eWxlIHBhdHRlcm5zIHdpdGggRk5NX0ZJTEVfTkFNRSB0 aGF0DQorICAgICBhbGwgL3MgaGF2ZSB0byBiZSBleHBsaWNpdGx5IHNwZWNp ZmllZC4gICovDQorICBpbnQgZmlsZV9wYXRoX2VsZW1lbnRzID0gY291bnRf cGF0aF9lbGVtZW50cyAoZmlsZW5hbWUpOw0KKyAgaW50IHNlYXJjaF9wYXRo X2VsZW1lbnRzID0gY291bnRfcGF0aF9lbGVtZW50cyAoc2VhcmNoX25hbWUp Ow0KKw0KKyAgaWYgKHNlYXJjaF9wYXRoX2VsZW1lbnRzID4gZmlsZV9wYXRo X2VsZW1lbnRzKQ0KKyAgICByZXR1cm4gMDsNCisNCisgIGlmIChJU19BQlNP TFVURV9QQVRIIChzZWFyY2hfbmFtZSkpDQorICAgIHsNCisgICAgICByZXR1 cm4gKHNlYXJjaF9wYXRoX2VsZW1lbnRzID09IGZpbGVfcGF0aF9lbGVtZW50 cw0KKwkgICAgICAmJiBnZGJfZmlsZW5hbWVfZm5tYXRjaCAoc2VhcmNoX25h bWUsIGZpbGVuYW1lLA0KKwkJCQkgICAgICAgRk5NX0ZJTEVfTkFNRSB8IEZO TV9OT0VTQ0FQRSkgPT0gMCk7DQorICAgIH0NCisNCisgIHsNCisgICAgY29u c3QgY2hhciAqZmlsZV90b19jb21wYXJlDQorICAgICAgPSBzdHJpcF9sZWFk aW5nX3BhdGhfZWxlbWVudHMgKGZpbGVuYW1lLA0KKwkJCQkgICAgIGZpbGVf cGF0aF9lbGVtZW50cyAtIHNlYXJjaF9wYXRoX2VsZW1lbnRzKTsNCisNCisg ICAgcmV0dXJuIGdkYl9maWxlbmFtZV9mbm1hdGNoIChzZWFyY2hfbmFtZSwg ZmlsZV90b19jb21wYXJlLA0KKwkJCQkgRk5NX0ZJTEVfTkFNRSB8IEZOTV9O T0VTQ0FQRSkgPT0gMDsNCisgIH0NCit9DQorDQogIC8qIENoZWNrIGZvciBh IHN5bXRhYiBvZiBhIHNwZWNpZmljIG5hbWUgYnkgc2VhcmNoaW5nIHNvbWUg c3ltdGFicy4NCiAgICAgVGhpcyBpcyBhIGhlbHBlciBmdW5jdGlvbiBmb3Ig Y2FsbGJhY2tzIG9mIGl0ZXJhdGVfb3Zlcl9zeW10YWJzLg0KDQpkaWZmIC0t Z2l0IGEvZ2RiL3N5bXRhYi5oIGIvZ2RiL3N5bXRhYi5oDQppbmRleCBmNzg4 NGI5Li42ZjAwYmFmIDEwMDY0NA0KLS0tIGEvZ2RiL3N5bXRhYi5oDQorKysg Yi9nZGIvc3ltdGFiLmgNCkBAIC0xNjAwLDYgKzE2MDAsOSBAQCBleHRlcm4g aW50IGJhc2VuYW1lc19tYXlfZGlmZmVyOw0KICBpbnQgY29tcGFyZV9maWxl bmFtZXNfZm9yX3NlYXJjaCAoY29uc3QgY2hhciAqZmlsZW5hbWUsDQogIAkJ CQkgIGNvbnN0IGNoYXIgKnNlYXJjaF9uYW1lKTsNCg0KK2ludCBjb21wYXJl X2dsb2JfZmlsZW5hbWVzX2Zvcl9zZWFyY2ggKGNvbnN0IGNoYXIgKmZpbGVu YW1lLA0KKwkJCQkgICAgICAgY29uc3QgY2hhciAqc2VhcmNoX25hbWUpOw0K Kw0KICBpbnQgaXRlcmF0ZV9vdmVyX3NvbWVfc3ltdGFicyAoY29uc3QgY2hh ciAqbmFtZSwNCiAgCQkJICAgICAgIGNvbnN0IGNoYXIgKnJlYWxfcGF0aCwN CiAgCQkJICAgICAgIGludCAoKmNhbGxiYWNrKSAoc3RydWN0IHN5bXRhYiAq c3ltdGFiLA0KZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uv c2tpcC5jIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9za2lwLmMNCmluZGV4 IDM1NjgyOTYuLmI5ZGIyYTcgMTAwNjQ0DQotLS0gYS9nZGIvdGVzdHN1aXRl L2dkYi5iYXNlL3NraXAuYw0KKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFz ZS9za2lwLmMNCkBAIC0yMCw2ICsyMCw3IEBADQogIGludCBmb28gKHZvaWQp Ow0KICBpbnQgYmFyICh2b2lkKTsNCiAgaW50IGJheiAoaW50KTsNCit2b2lk IHNraXAxX3Rlc3Rfc2tpcF9maWxlX2FuZF9mdW5jdGlvbiAodm9pZCk7DQoN CiAgaW50DQogIG1haW4gKCkNCkBAIC0zMywzICszNCwyMiBAQCBmb28gKCkN CiAgew0KICAgIHJldHVybiAwOw0KICB9DQorDQorc3RhdGljIHZvaWQNCit0 ZXN0X3NraXAgKHZvaWQpDQorew0KK30NCisNCitzdGF0aWMgdm9pZA0KK2Vu ZF90ZXN0X3NraXBfZmlsZV9hbmRfZnVuY3Rpb24gKHZvaWQpDQorew0KKyAg YWJvcnQgKCk7DQorfQ0KKw0KK3ZvaWQNCit0ZXN0X3NraXBfZmlsZV9hbmRf ZnVuY3Rpb24gKHZvaWQpDQorew0KKyAgdGVzdF9za2lwICgpOw0KKyAgc2tp cDFfdGVzdF9za2lwX2ZpbGVfYW5kX2Z1bmN0aW9uICgpOw0KKyAgZW5kX3Rl c3Rfc2tpcF9maWxlX2FuZF9mdW5jdGlvbiAoKTsNCit9DQpkaWZmIC0tZ2l0 IGEvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9za2lwLmV4cCAgDQpiL2dkYi90 ZXN0c3VpdGUvZ2RiLmJhc2Uvc2tpcC5leHANCmluZGV4IDQwZjMxMDMuLjIy MGIxNDUgMTAwNjQ0DQotLS0gYS9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3Nr aXAuZXhwDQorKysgYi9nZGIvdGVzdHN1aXRlL2dkYi5iYXNlL3NraXAuZXhw DQpAQCAtMTQsNiArMTQsNyBAQA0KICAjIGFsb25nIHdpdGggdGhpcyBwcm9n cmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNl cy8+Lg0KDQogICMgVGhpcyBmaWxlIHdhcyB3cml0dGVuIGJ5IEp1c3RpbiBM ZWJhci4gKGp1c3Rpbi5sZWJhckBnbWFpbC5jb20pDQorIyBBbmQgZnVydGhl ciBoYWNrZWQgb24gYnkgRG91ZyBFdmFucy4gKGRqZUBnb29nbGUuY29tKQ0K DQogIGlmIHsgW3ByZXBhcmVfZm9yX3Rlc3Rpbmcgc2tpcC5leHAgInNraXAi IFwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7c2tpcC5jIHNraXAx LmMgfSBcDQpAQCAtMzAsNyArMzEsMjQgQEAgZ2RiX3Rlc3QgInNraXAgZmls ZSIgIk5vIGRlZmF1bHQgZmlsZSBub3cuIiAic2tpcCBmaWxlICANCihubyBk ZWZhdWx0IGZpbGUpIg0KICBnZGJfdGVzdCAic2tpcCBmdW5jdGlvbiIgIk5v IGRlZmF1bHQgZnVuY3Rpb24gbm93LiINCiAgZ2RiX3Rlc3QgInNraXAiICJO byBkZWZhdWx0IGZ1bmN0aW9uIG5vdy4iICJza2lwIChubyBkZWZhdWx0IGZ1 bmN0aW9uKSINCg0KLWlmICFbcnVudG9fbWFpbl0geyBmYWlsICJza2lwIHRl c3RzIHN1cHByZXNzZWQiIH0NCisjIFRlc3QgZWxpZGVkIGFyZ3MuDQorDQor Z2RiX3Rlc3QgInNraXAgLWZpIiAiTWlzc2luZyB2YWx1ZSBmb3IgLWZpIG9w dGlvbi4iDQorZ2RiX3Rlc3QgInNraXAgLWZpbGUiICJNaXNzaW5nIHZhbHVl IGZvciAtZmlsZSBvcHRpb24uIg0KK2dkYl90ZXN0ICJza2lwIC1mdSIgIk1p c3NpbmcgdmFsdWUgZm9yIC1mdSBvcHRpb24uIg0KK2dkYl90ZXN0ICJza2lw IC1mdW5jdGlvbiIgIk1pc3NpbmcgdmFsdWUgZm9yIC1mdW5jdGlvbiBvcHRp b24uIg0KK2dkYl90ZXN0ICJza2lwIC1yZnUiICJNaXNzaW5nIHZhbHVlIGZv ciAtcmZ1IG9wdGlvbi4iDQorZ2RiX3Rlc3QgInNraXAgLXJmdW5jdGlvbiIg Ik1pc3NpbmcgdmFsdWUgZm9yIC1yZnVuY3Rpb24gb3B0aW9uLiINCisNCisj IFRlc3Qgb3RoZXIgaW52YWxpZCBvcHRpb24gY29tYmluYXRpb25zLg0KKw0K K2dkYl90ZXN0ICJza2lwIC14IiAiSW52YWxpZCBza2lwIG9wdGlvbjogLXgi DQorZ2RiX3Rlc3QgInNraXAgLXJmdSBmb28uKiB4eXp6eSIgIkludmFsaWQg YXJndW1lbnQ6IHh5enp5Ig0KKw0KK2lmICFbcnVudG9fbWFpbl0gew0KKyAg ICBmYWlsICJDYW4ndCBydW4gdG8gbWFpbiINCisgICAgcmV0dXJuDQorfQ0K DQogICMgVGVzdCB8aW5mbyBza2lwfCB3aXRoIGFuIGVtcHR5IHNraXBsaXN0 Lg0KDQpAQCAtNjIsMzQgKzgwLDM5IEBAIGdkYl90ZXN0ICJpbmZvIHNraXAg OTk5IiAiTm8gc2tpcGxpc3QgZW50cmllcyBmb3VuZCAgDQp3aXRoIG51bWJl ciA5OTkuIg0KICAjIERvZXMgfGluZm8gc2tpcHwgbG9vayByaWdodD8NCg0K ICBnZGJfdGVzdCAiaW5mbyBza2lwIiBcDQotICAiTnVtXFxzK1R5cGVcXHMr RW5iXFxzK1doYXRcXHMqDQotMVxccytmaWxlXFxzK3lcXHMrLiokc3JjZmls ZVxccyoNCi0yXFxzK2Z1bmN0aW9uXFxzK3lcXHMrbWFpblxccyoNCi0zXFxz K2ZpbGVcXHMreVxccyskc3JjZmlsZTFcXHMqDQotNFxccytmdW5jdGlvblxc cyt5XFxzK2JhelxccyoiDQorICAgICJOdW1cXHMrRW5iXFxzK0dsb2JcXHMr RmlsZVxccytSRVxccytGdW5jdGlvblxccyoNCisxXFxzK3lcXHMrblxccysu KiRzcmNmaWxlXFxzK25cXHMrPG5vbmU+XFxzKg0KKzJcXHMreVxccytuXFxz Kzxub25lPlxccytuXFxzK21haW5cXHMqDQorM1xccyt5XFxzK25cXHMrJHNy Y2ZpbGUxXFxzK25cXHMrPG5vbmU+XFxzKg0KKzRcXHMreVxccytuXFxzKzxu b25lPlxccytuXFxzK2JhelxccyoiDQoNCiAgIyBSaWdodCBub3csIHdlIGhh dmUgYW4gb3V0c3RhbmRpbmcgc2tpcGxpc3QgZW50cnkgb24gYm90aCBzb3Vy Y2UNCiAgIyBmaWxlcywgc28gd2hlbiB3ZSBzdGVwIGludG8gdGhlIGZpcnN0 IGxpbmUgaW4gbWFpbigpLCB3ZSBzaG91bGQgc3RlcA0KICAjIHJpZ2h0IG92 ZXIgaXQgYW5kIGdvIHRvIHRoZSBzZWNvbmQgbGluZSBvZiBtYWluKCkuDQoN Ci1pZiAhW3J1bnRvX21haW5dIHsgZmFpbCAic2tpcCB0ZXN0cyBzdXBwcmVz c2VkIiB9DQoraWYgIVtydW50b19tYWluXSB7DQorICAgIGZhaWwgIkNhbid0 IHJ1biB0byBtYWluIg0KKyAgICByZXR1cm4NCit9DQogIGdkYl90ZXN0ICJz dGVwIiAiLioiICJzdGVwIGluIHRoZSBtYWluIg0KICBnZGJfdGVzdCAiYnQi ICJcXHMqXFwjMFxccyttYWluLioiICJzdGVwIGFmdGVyIGFsbCBpZ25vcmVk Ig0KDQogICMgTm93IHJlbW92ZSBza2lwLmMgZnJvbSB0aGUgc2tpcGxpc3Qu ICBPdXIgZmlyc3Qgc3RlcCBzaG91bGQgdGFrZSB1cw0KLSMgaW50byBmb28o KSwgYW5kIG91ciBzZWNvbmQgc3RlcCBzaG91bGQgdGFrZSB1cyB0byB0aGUg bmV4dCBsaW5lIGluDQotIyBtYWluKCkuDQorIyBpbnRvIGZvbygpLCBhbmQg b3VyIHNlY29uZCBzdGVwIHNob3VsZCB0YWtlIHVzIHRvIHRoZSBuZXh0IGxp bmUgaW4gIA0KbWFpbigpLg0KDQogIGdkYl90ZXN0ICJza2lwIGRlbGV0ZSAx Ig0KICAjIENoZWNrIHRoYXQgZW50cnkgMSBpcyBtaXNzaW5nIGZyb20gfGlu Zm8gc2tpcHwNCiAgZ2RiX3Rlc3QgImluZm8gc2tpcCIgXA0KLSAgIk51bVxc cytUeXBlXFxzK0VuYlxccytXaGF0XFxzKg0KLTJcXHMrZnVuY3Rpb25cXHMr eVxccyttYWluXFxzKg0KLTNcXHMrZmlsZVxccyt5XFxzKyRzcmNmaWxlMVxc cyoNCi00XFxzK2Z1bmN0aW9uXFxzK3lcXHMrYmF6XFxzKiIgXA0KKyAgICAi TnVtXFxzK0VuYlxccytHbG9iXFxzK0ZpbGVcXHMrUkVcXHMrRnVuY3Rpb25c XHMqDQorMlxccyt5XFxzK25cXHMrPG5vbmU+XFxzK25cXHMrbWFpblxccyoN CiszXFxzK3lcXHMrblxccyskc3JjZmlsZTFcXHMrblxccys8bm9uZT5cXHMq DQorNFxccyt5XFxzK25cXHMrPG5vbmU+XFxzK25cXHMrYmF6XFxzKiIgXA0K ICAgICAgImluZm8gc2tpcCAoZGVsZXRlIDEpIg0KDQotaWYgIVtydW50b19t YWluXSB7IGZhaWwgInNraXAgdGVzdHMgc3VwcHJlc3NlZCIgfQ0KK2lmICFb cnVudG9fbWFpbl0gew0KKyAgICBmYWlsICJDYW4ndCBydW4gdG8gbWFpbiIN CisgICAgcmV0dXJuDQorfQ0KICBzZXQgdGVzdCAic3RlcCBhZnRlciBkZWxl dGluZyAxIg0KICBnZGJfdGVzdCAic3RlcCIgImZvbyBcXChcXCkgYXQuKiIg IiR0ZXN0ICgxKSINCiAgZ2RiX3Rlc3QgInN0ZXAiICIuKiIgIiR0ZXN0ICgy KSIgOyAjIFJldHVybiBmcm9tIGZvbygpDQpAQCAtMTAwLDEwICsxMjMsMTQg QEAgZ2RiX3Rlc3QgInN0ZXAiICJtYWluIFxcKFxcKSBhdC4qIiAiJHRlc3Qg KDMpIg0KDQogIGdkYl90ZXN0ICJza2lwIGRpc2FibGUgMyINCiAgIyBJcyBl bnRyeSAzIGRpc2FibGVkIGluIHxpbmZvIHNraXB8Pw0KLWdkYl90ZXN0ICJp bmZvIHNraXAgMyIgIi4qXFxuM1xccytmaWxlXFxzK24uKiIgXA0KLSAgImlu Zm8gc2tpcCBzaG93cyBlbnRyeSBhcyBkaXNhYmxlZCINCitnZGJfdGVzdCAi aW5mbyBza2lwIDMiIFwNCisgICAgIjNcXHMrblxccytuXFxzKyRzcmNmaWxl MVxccytuXFxzKzxub25lPlxccyoiIFwNCisgICAgImluZm8gc2tpcCBzaG93 cyBlbnRyeSBhcyBkaXNhYmxlZCINCg0KLWlmICFbcnVudG9fbWFpbl0geyBm YWlsICJza2lwIHRlc3RzIHN1cHByZXNzZWQiIH0NCitpZiAhW3J1bnRvX21h aW5dIHsNCisgICAgZmFpbCAiQ2FuJ3QgcnVuIHRvIG1haW4iDQorICAgIHJl dHVybg0KK30NCiAgc2V0IHRlc3QgInN0ZXAgYWZ0ZXIgZGlzYWJsaW5nIDMi DQogIGdkYl90ZXN0ICJzdGVwIiAiYmFyIFxcKFxcKSBhdC4qIiAiJHRlc3Qg KDEpIg0KICBnZGJfdGVzdCAic3RlcCIgIi4qIiAiJHRlc3QgKDIpIjsgIyBS ZXR1cm4gZnJvbSBmb28oKQ0KQEAgLTExNSw5ICsxNDIsMTMgQEAgZ2RiX3Rl c3QgInN0ZXAiICJtYWluIFxcKFxcKSBhdC4qIiAiJHRlc3QgKDUpIg0KDQog IGdkYl90ZXN0ICJza2lwIGVuYWJsZSAzIg0KICAjIElzIGVudHJ5IDMgZW5h YmxlZCBpbiB8aW5mbyBza2lwfD8NCi1nZGJfdGVzdCAiaW5mbyBza2lwIDMi ICIuKlxcbjNcXHMrZmlsZVxccyt5LioiIFwNCi0gICJpbmZvIHNraXAgc2hv d3MgZW50cnkgYXMgZW5hYmxlZCINCi1pZiAhW3J1bnRvX21haW5dIHsgZmFp bCAic2tpcCB0ZXN0cyBzdXBwcmVzc2VkIiB9DQorZ2RiX3Rlc3QgImluZm8g c2tpcCAzIiBcDQorICAgICIzXFxzK3lcXHMrblxccyskc3JjZmlsZTFcXHMr blxccys8bm9uZT5cXHMqIiBcDQorICAgICJpbmZvIHNraXAgc2hvd3MgZW50 cnkgYXMgZW5hYmxlZCINCitpZiAhW3J1bnRvX21haW5dIHsNCisgICAgZmFp bCAiQ2FuJ3QgcnVuIHRvIG1haW4iDQorICAgIHJldHVybg0KK30NCiAgc2V0 IHRlc3QgInN0ZXAgYWZ0ZXIgZW5hYmxlIDMiDQogIGdkYl90ZXN0ICJzdGVw IiAiZm9vIFxcKFxcKSBhdC4qIiAiJHRlc3QgKDEpIg0KICBnZGJfdGVzdCAi c3RlcCIgIi4qIiAiJHRlc3QgKDIpIjsgIyBSZXR1cm4gZnJvbSBmb28oKQ0K QEAgLTEyNSw0NyArMTU2LDEyOSBAQCBnZGJfdGVzdCAic3RlcCIgIm1haW4g XFwoXFwpIGF0LioiICIkdGVzdCAoMykiDQoNCiAgZ2RiX3Rlc3QgInNraXAg ZGlzYWJsZSINCiAgZ2RiX3Rlc3QgImluZm8gc2tpcCIgXA0KLSAgIk51bVxc cytUeXBlXFxzK0VuYlxccytXaGF0XFxzKg0KLTJcXHMrZnVuY3Rpb25cXHMr blxccyttYWluXFxzKg0KLTNcXHMrZmlsZVxccytuXFxzKyRzcmNmaWxlMVxc cyoNCi00XFxzK2Z1bmN0aW9uXFxzK25cXHMrYmF6XFxzKiIgXA0KLSAgImlu Zm8gc2tpcCBhZnRlciBkaXNhYmxpbmcgYWxsIg0KKyAgICAiTnVtXFxzK0Vu YlxccytHbG9iXFxzK0ZpbGVcXHMrUkVcXHMrRnVuY3Rpb25cXHMqDQorMlxc cytuXFxzK25cXHMrPG5vbmU+XFxzK25cXHMrbWFpblxccyoNCiszXFxzK25c XHMrblxccyskc3JjZmlsZTFcXHMrblxccys8bm9uZT5cXHMqDQorNFxccytu XFxzK25cXHMrPG5vbmU+XFxzK25cXHMrYmF6XFxzKiIgXA0KKyAgICAiaW5m byBza2lwIGFmdGVyIGRpc2FibGluZyBhbGwiDQoNCiAgZ2RiX3Rlc3QgInNr aXAgZW5hYmxlIg0KICBnZGJfdGVzdCAiaW5mbyBza2lwIiBcDQotICAiTnVt XFxzK1R5cGVcXHMrRW5iXFxzK1doYXRcXHMqDQotMlxccytmdW5jdGlvblxc cyt5XFxzK21haW5cXHMqDQotM1xccytmaWxlXFxzK3lcXHMrJHNyY2ZpbGUx XFxzKg0KLTRcXHMrZnVuY3Rpb25cXHMreVxccytiYXpcXHMqIiBcDQotICAi aW5mbyBza2lwIGFmdGVyIGVuYWJsaW5nIGFsbCINCisgICAgIk51bVxccytF bmJcXHMrR2xvYlxccytGaWxlXFxzK1JFXFxzK0Z1bmN0aW9uXFxzKg0KKzJc XHMreVxccytuXFxzKzxub25lPlxccytuXFxzK21haW5cXHMqDQorM1xccyt5 XFxzK25cXHMrJHNyY2ZpbGUxXFxzK25cXHMrPG5vbmU+XFxzKg0KKzRcXHMr eVxccytuXFxzKzxub25lPlxccytuXFxzK2JhelxccyoiIFwNCisgICAgImlu Zm8gc2tpcCBhZnRlciBlbmFibGluZyBhbGwiDQoNCiAgZ2RiX3Rlc3QgInNr aXAgZGlzYWJsZSA0IDItMyINCiAgZ2RiX3Rlc3QgImluZm8gc2tpcCIgXA0K LSAgIk51bVxccytUeXBlXFxzK0VuYlxccytXaGF0XFxzKg0KLTJcXHMrZnVu Y3Rpb25cXHMrblxccyttYWluXFxzKg0KLTNcXHMrZmlsZVxccytuXFxzKyRz cmNmaWxlMVxccyoNCi00XFxzK2Z1bmN0aW9uXFxzK25cXHMrYmF6XFxzKiIg XA0KLSAgImluZm8gc2tpcCBhZnRlciBkaXNhYmxpbmcgNCAyLTMiDQorICAg ICJOdW1cXHMrRW5iXFxzK0dsb2JcXHMrRmlsZVxccytSRVxccytGdW5jdGlv blxccyoNCisyXFxzK25cXHMrblxccys8bm9uZT5cXHMrblxccyttYWluXFxz Kg0KKzNcXHMrblxccytuXFxzKyRzcmNmaWxlMVxccytuXFxzKzxub25lPlxc cyoNCis0XFxzK25cXHMrblxccys8bm9uZT5cXHMrblxccytiYXpcXHMqIiBc DQorICAgICJpbmZvIHNraXAgYWZ0ZXIgZGlzYWJsaW5nIDQgMi0zIg0KDQog IGdkYl90ZXN0ICJza2lwIGVuYWJsZSAyLTMiDQogIGdkYl90ZXN0ICJpbmZv IHNraXAiIFwNCi0gICJOdW1cXHMrVHlwZVxccytFbmJcXHMrV2hhdFxccyoN Ci0yXFxzK2Z1bmN0aW9uXFxzK3lcXHMrbWFpblxccyoNCi0zXFxzK2ZpbGVc XHMreVxccyskc3JjZmlsZTFcXHMqDQotNFxccytmdW5jdGlvblxccytuXFxz K2JhelxccyoiIFwNCi0gICJpbmZvIHNraXAgYWZ0ZXIgZW5hYmxpbmcgMi0z Ig0KKyAgICAiTnVtXFxzK0VuYlxccytHbG9iXFxzK0ZpbGVcXHMrUkVcXHMr RnVuY3Rpb25cXHMqDQorMlxccyt5XFxzK25cXHMrPG5vbmU+XFxzK25cXHMr bWFpblxccyoNCiszXFxzK3lcXHMrblxccyskc3JjZmlsZTFcXHMrblxccys8 bm9uZT5cXHMqDQorNFxccytuXFxzK25cXHMrPG5vbmU+XFxzK25cXHMrYmF6 XFxzKiIgXA0KKyAgICAiaW5mbyBza2lwIGFmdGVyIGVuYWJsaW5nIDItMyIN Cg0KICBnZGJfdGVzdCAiaW5mbyBza2lwIDItMyIgXA0KLSAgIk51bVxccytU eXBlXFxzK0VuYlxccytXaGF0XFxzKg0KLTJcXHMrZnVuY3Rpb25cXHMreVxc cyttYWluXFxzKg0KLTNcXHMrZmlsZVxccyt5XFxzKyRzcmNmaWxlMVxccyoi IFwNCi0gICJpbmZvIHNraXAgMi0zIg0KKyAgICAiTnVtXFxzK0VuYlxccytH bG9iXFxzK0ZpbGVcXHMrUkVcXHMrRnVuY3Rpb25cXHMqDQorMlxccyt5XFxz K25cXHMrPG5vbmU+XFxzK25cXHMrbWFpblxccyoNCiszXFxzK3lcXHMrblxc cyskc3JjZmlsZTFcXHMrblxccys8bm9uZT5cXHMqIiBcDQorICAgICJpbmZv IHNraXAgMi0zIg0KDQogIGdkYl90ZXN0ICJza2lwIGRlbGV0ZSAyIDMiDQog IGdkYl90ZXN0ICJpbmZvIHNraXAiIFwNCi0gICI0XFxzK2Z1bmN0aW9uXFxz K25cXHMrYmF6XFxzKiIgXA0KLSAgImluZm8gc2tpcCBhZnRlciBkZWxldGlu ZyAyIDMiDQorICAgICJOdW1cXHMrRW5iXFxzK0dsb2JcXHMrRmlsZVxccytS RVxccytGdW5jdGlvblxccyoNCis0XFxzK25cXHMrblxccys8bm9uZT5cXHMr blxccytiYXpcXHMqIiBcDQorICAgICJpbmZvIHNraXAgYWZ0ZXIgZGVsZXRp bmcgMiAzIg0KDQogIGdkYl90ZXN0ICJza2lwIGRlbGV0ZSINCiAgZ2RiX3Rl c3QgImluZm8gc2tpcCIgIk5vdCBza2lwcGluZyBhbnkgZmlsZXMgb3IgZnVu Y3Rpb25zXC4iIFwNCi0gICJpbmZvIHNraXAgYWZ0ZXIgZGVsZXRpbmcgYWxs Ig0KKyAgICAiaW5mbyBza2lwIGFmdGVyIGRlbGV0aW5nIGFsbCINCisNCisj IE5vdyB0ZXN0IHNraXAgLWZpLCBldGMuDQorDQorIyBDcmVhdGUgYSBza2lw bGlzdCBlbnRyeSBmb3IgYSBzcGVjaWZpZWQgZmlsZSBhbmQgZnVuY3Rpb24u DQorZ2RiX3Rlc3QgInNraXAgLWZpIHNraXAxLmMiICJGaWxlIC4qJHNyY2Zp bGUxIHdpbGwgYmUgc2tpcHBlZCB3aGVuICANCnN0ZXBwaW5nXC4iDQorZ2Ri X3Rlc3QgInNraXAgLWdmaSBzayoxLmMiICJGaWxlXFwoc1xcKSBza1xcKjEu YyB3aWxsIGJlIHNraXBwZWQgd2hlbiAgDQpzdGVwcGluZ1wuIg0KK2dkYl90 ZXN0ICJza2lwIC1mdSBiYXoiICJGdW5jdGlvbiBiYXogd2lsbCBiZSBza2lw cGVkIHdoZW4gc3RlcHBpbmdcLiINCitnZGJfdGVzdCAic2tpcCAtcmZ1IF5i LnokIiAiRnVuY3Rpb25cXChzXFwpIFxcXmJcXC56XFwkIHdpbGwgYmUgc2tp cHBlZCAgDQp3aGVuIHN0ZXBwaW5nLiINCisNCitpZiAhW3J1bnRvX21haW5d IHsNCisgICAgZmFpbCAiQ2FuJ3QgcnVuIHRvIG1haW4iDQorICAgIHJldHVy bg0KK30NCisNCitzZXQgdGVzdCAic3RlcCB1c2luZyAtZmkiDQorZ2RiX3Rl c3Rfbm9fb3V0cHV0ICJza2lwIGRpc2FibGUiDQorZ2RiX3Rlc3Rfbm9fb3V0 cHV0ICJza2lwIGVuYWJsZSA1Ig0KK2dkYl90ZXN0ICJzdGVwIiAiZm9vIFxc KFxcKSBhdC4qIiAiJHRlc3QgKDEpIg0KK2dkYl90ZXN0ICJzdGVwIiAiLioi ICIkdGVzdCAoMikiOyAjIFJldHVybiBmcm9tIGZvbygpDQorZ2RiX3Rlc3Qg InN0ZXAiICJtYWluIFxcKFxcKSBhdC4qIiAiJHRlc3QgKDMpIg0KKw0KK2lm ICFbcnVudG9fbWFpbl0gew0KKyAgICBmYWlsICJDYW4ndCBydW4gdG8gbWFp biINCisgICAgcmV0dXJuDQorfQ0KKw0KK3NldCB0ZXN0ICJzdGVwIHVzaW5n IC1nZmkiDQorZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJza2lwIGRpc2FibGUiDQor Z2RiX3Rlc3Rfbm9fb3V0cHV0ICJza2lwIGVuYWJsZSA2Ig0KK2dkYl90ZXN0 ICJzdGVwIiAiZm9vIFxcKFxcKSBhdC4qIiAiJHRlc3QgKDEpIg0KK2dkYl90 ZXN0ICJzdGVwIiAiLioiICIkdGVzdCAoMikiOyAjIFJldHVybiBmcm9tIGZv bygpDQorZ2RiX3Rlc3QgInN0ZXAiICJtYWluIFxcKFxcKSBhdC4qIiAiJHRl c3QgKDMpIg0KKw0KK2lmICFbcnVudG9fbWFpbl0gew0KKyAgICBmYWlsICJD YW4ndCBydW4gdG8gbWFpbiINCisgICAgcmV0dXJuDQorfQ0KKw0KK3NldCB0 ZXN0ICJzdGVwIHVzaW5nIC1mdSBmb3IgYmF6Ig0KK2dkYl90ZXN0X25vX291 dHB1dCAic2tpcCBkaXNhYmxlIg0KK2dkYl90ZXN0X25vX291dHB1dCAic2tp cCBlbmFibGUgNyINCitnZGJfdGVzdCAic3RlcCIgImJhciBcXChcXCkgYXQu KiIgIiR0ZXN0ICgxKSINCitnZGJfdGVzdCAic3RlcCIgIi4qIiAiJHRlc3Qg KDIpIjsgIyBSZXR1cm4gZnJvbSBmb28oKQ0KK2dkYl90ZXN0ICJzdGVwIiAi Zm9vIFxcKFxcKSBhdC4qIiAiJHRlc3QgKDMpIg0KK2dkYl90ZXN0ICJzdGVw IiAiLioiICIkdGVzdCAoNCkiOyAjIFJldHVybiBmcm9tIGJhcigpDQorZ2Ri X3Rlc3QgInN0ZXAiICJtYWluIFxcKFxcKSBhdC4qIiAiJHRlc3QgKDUpIg0K Kw0KK2lmICFbcnVudG9fbWFpbl0gew0KKyAgICBmYWlsICJDYW4ndCBydW4g dG8gbWFpbiINCisgICAgcmV0dXJuDQorfQ0KKw0KK3NldCB0ZXN0ICJzdGVw IHVzaW5nIC1yZnUgZm9yIGJheiINCitnZGJfdGVzdF9ub19vdXRwdXQgInNr aXAgZGlzYWJsZSINCitnZGJfdGVzdF9ub19vdXRwdXQgInNraXAgZW5hYmxl IDgiDQorZ2RiX3Rlc3QgInN0ZXAiICJiYXIgXFwoXFwpIGF0LioiICIkdGVz dCAoMSkiDQorZ2RiX3Rlc3QgInN0ZXAiICIuKiIgIiR0ZXN0ICgyKSI7ICMg UmV0dXJuIGZyb20gZm9vKCkNCitnZGJfdGVzdCAic3RlcCIgImZvbyBcXChc XCkgYXQuKiIgIiR0ZXN0ICgzKSINCitnZGJfdGVzdCAic3RlcCIgIi4qIiAi JHRlc3QgKDQpIjsgIyBSZXR1cm4gZnJvbSBiYXIoKQ0KK2dkYl90ZXN0ICJz dGVwIiAibWFpbiBcXChcXCkgYXQuKiIgIiR0ZXN0ICg1KSINCisNCisjIFRl c3QgLWZpICsgLWZ1Lg0KKw0KK2lmICFbcnVudG9fbWFpbl0gew0KKyAgICBm YWlsICJDYW4ndCBydW4gdG8gbWFpbiINCisgICAgcmV0dXJuDQorfQ0KKw0K K3NldCB0ZXN0ICJzdGVwIHVzaW5nIC1maSArIC1mdSINCitnZGJfdGVzdF9u b19vdXRwdXQgInNraXAgZGVsZXRlIg0KK2dkYl90ZXN0ICJza2lwIC1maSBz a2lwMS5jIC1mdSB0ZXN0X3NraXAiIFwNCisgICAgIkZ1bmN0aW9uIHRlc3Rf c2tpcCBpbiBmaWxlIHNraXAxLmMgd2lsbCBiZSBza2lwcGVkIHdoZW4gc3Rl cHBpbmdcLiINCitnZGJfYnJlYWtwb2ludCAidGVzdF9za2lwX2ZpbGVfYW5k X2Z1bmN0aW9uIg0KK2dkYl9icmVha3BvaW50ICJlbmRfdGVzdF9za2lwX2Zp bGVfYW5kX2Z1bmN0aW9uIg0KK2dkYl90ZXN0ICJjYWxsIHRlc3Rfc2tpcF9m aWxlX2FuZF9mdW5jdGlvbiAoKSIgInNpbGVudGx5IHN0b3AuIg0KKyMgVmVy aWZ5IHdlIGNhbiBzdGVwIGludG8gc2tpcC5jOnRlc3Rfc2tpcCBidXQgbm90 IHNraXAxLmM6dGVzdF9za2lwLg0KK2dkYl90ZXN0ICJzdGVwIiAidGVzdF9z a2lwIFxcKFxcKSBhdC4qIiAiJHRlc3QgKDEpIg0KK2dkYl90ZXN0ICJzdGVw IiAidGVzdF9za2lwX2ZpbGVfYW5kX2Z1bmN0aW9uIFxcKFxcKSBhdC4qIiAi JHRlc3QgKDIpIjsgIyAgDQpSZXR1cm4gZnJvbSB0ZXN0X3NraXAoKQ0KK2dk Yl90ZXN0ICJzdGVwIiAic2tpcDFfdGVzdF9za2lwX2ZpbGVfYW5kX2Z1bmN0 aW9uIFxcKFxcKSBhdC4qIiAiJHRlc3QgKDQpIg0KK2dkYl90ZXN0ICJzdGVw IiAiLioiICIkdGVzdCAoNSkiOyAjIFNraXAgb3ZlciB0ZXN0X3NraXAoKQ0K K2dkYl90ZXN0ICJzdGVwIiAidGVzdF9za2lwX2ZpbGVfYW5kX2Z1bmN0aW9u IFxcKFxcKSBhdC4qIiAiJHRlc3QgKDYpIjsgIyAgDQpSZXR1cm4gZnJvbSBz a2lwMV90ZXN0X3NraXBfZmlsZV9hbmRfZnVuY3Rpb24oKQ0KZGlmZiAtLWdp dCBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2tpcDEuYyBiL2dkYi90ZXN0 c3VpdGUvZ2RiLmJhc2Uvc2tpcDEuYw0KaW5kZXggOWEwNmU2Mi4uN2Q5NDMz MiAxMDA2NDQNCi0tLSBhL2dkYi90ZXN0c3VpdGUvZ2RiLmJhc2Uvc2tpcDEu Yw0KKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIuYmFzZS9za2lwMS5jDQpAQCAt MjYsMyArMjYsMTQgQEAgYmF6IChpbnQgYSkNCiAgew0KICAgIHJldHVybiBh ICsgMTsNCiAgfQ0KKw0KK3N0YXRpYyB2b2lkDQordGVzdF9za2lwICh2b2lk KQ0KK3sNCit9DQorDQordm9pZA0KK3NraXAxX3Rlc3Rfc2tpcF9maWxlX2Fu ZF9mdW5jdGlvbiAodm9pZCkNCit7DQorICB0ZXN0X3NraXAgKCk7DQorfQ0K ZGlmZiAtLWdpdCBhL2dkYi90ZXN0c3VpdGUvZ2RiLnBlcmYvc2tpcC1jb21t YW5kLmNjICANCmIvZ2RiL3Rlc3RzdWl0ZS9nZGIucGVyZi9za2lwLWNvbW1h bmQuY2MNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwLi41 ODIwZWY3DQotLS0gL2Rldi9udWxsDQorKysgYi9nZGIvdGVzdHN1aXRlL2dk Yi5wZXJmL3NraXAtY29tbWFuZC5jYw0KQEAgLTAsMCArMSw0NiBAQA0KKy8q IFRoaXMgdGVzdGNhc2UgaXMgcGFydCBvZiBHREIsIHRoZSBHTlUgZGVidWdn ZXIuDQorDQorICAgQ29weXJpZ2h0IChDKSAyMDE2IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLg0KKw0KKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5DQorICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgICB0aGUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRo ZSBMaWNlbnNlLCBvcg0KKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uDQorDQorICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YNCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlDQorICAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisN CisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyAgIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+LiAgIA0KKi8NCisNCit2b2xhdGlsZSBpbnQgZmxhZzsNCisN CitpbnQNCitmdW5jICgpDQorew0KKyAgcmV0dXJuIDQyOw0KK30NCisNCitj bGFzcyBjDQorew0KKyBwdWJsaWM6DQorICBpbnQgX3g7DQorICBjICgpIDog X3ggKDQyKSB7fQ0KK307DQorDQordm9pZA0KK2NhbGxfbWUgKGludCB4LCBj IHkpDQorew0KK30NCisNCitpbnQNCittYWluICgpDQorew0KKyAgd2hpbGUg KGZsYWcpDQorICAgIHsNCisgICAgICBjYWxsX21lIChmdW5jICgpLCBjICgp KTsNCisgICAgfQ0KKyAgcmV0dXJuIDA7DQorfQ0KZGlmZiAtLWdpdCBhL2dk Yi90ZXN0c3VpdGUvZ2RiLnBlcmYvc2tpcC1jb21tYW5kLmV4cCAgDQpiL2dk Yi90ZXN0c3VpdGUvZ2RiLnBlcmYvc2tpcC1jb21tYW5kLmV4cA0KbmV3IGZp bGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmQyNTE3MjUNCi0tLSAv ZGV2L251bGwNCisrKyBiL2dkYi90ZXN0c3VpdGUvZ2RiLnBlcmYvc2tpcC1j b21tYW5kLmV4cA0KQEAgLTAsMCArMSwxMzggQEANCisjIENvcHlyaWdodCAo QykgMjAxNiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisNCisj IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQorIyBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQ0KKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3INCisjIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uDQorIw0KKyMgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsDQorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyMgTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQ0KKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4NCisjDQorIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyMg YWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQorDQorIyBUaGlzIHRlc3QgY2Fz ZSBpcyB0byB0ZXN0IHRoZSBzcGVlZCBvZiBHREIgd2hlbiBpdCBpcyBzaW5n bGUtc3RlcHBpbmcNCisjIHdpdGggc2tpcCBkaXJlY3RpdmVzIGFjdGl2ZS4g VGhlcmUncyBubyBuZWVkIHRvIHRlc3Qgc2tpcCBkaXJlY3RpdmVzIHRoYXQN CisjIG1hdGNoIGZ1bmN0aW9ucyB3ZSdyZSBzdGVwcGluZyB0aHJvdWdoLiBU aGF0J3Mgbm90IHRoZSBpbnRlcmVzdGluZyBjYXNlLg0KKyMgVGhlIGludGVy ZXN0aW5nIGNhc2UgaXMgd2hlcmUgdGhlcmUgYXJlIDEwMHMgb3IgbW9yZSBj bGFzc2VzIG9yICANCmxpYnJhcmllcywNCisjIGVhY2ggcHJvdmlkaW5nIHRo ZWlyIG93biBzZXQgb2Ygc2tpcCBkaXJlY3RpdmVzLg0KKyMNCisjIFBhcmFt ZXRlcnM6DQorIyBTS0lQX1NURVBfQ09VTlQ6IHRoZSBudW1iZXIgb2Ygc2lu Z2xlIHN0ZXBzIEdEQiBwZXJmb3Jtcw0KKyMgU0tJUF9ESVJFQ1RJVkVfQ09V TlQ6IHRoZSBudW1iZXIgb2Ygc2tpcCBkaXJlY3RpdmVzIHRvIGNyZWF0ZQ0K Kw0KK2xvYWRfbGliIHBlcmZ0ZXN0LmV4cA0KKw0KK2lmIFtza2lwX3BlcmZf dGVzdHNdIHsNCisgICAgcmV0dXJuIDANCit9DQorDQorc3RhbmRhcmRfdGVz dGZpbGUgLmNjIHNraXAtZnVuY3MuY2MNCitzZXQgZXhlY3V0YWJsZSAkdGVz dGZpbGUNCitzZXQgc2tpcF9mdW5jX2ZpbGUgW3N0YW5kYXJkX291dHB1dF9m aWxlICRzcmNmaWxlMl0NCitzZXQgZXhwZmlsZSAkdGVzdGZpbGUuZXhwDQor DQorIyBtYWtlIGNoZWNrLXBlcmYgUlVOVEVTVEZMQUdTPSdza2lwLWNvbW1h bmQuZXhwIFNLSVBfU1RFUF9DT1VOVD0xMDAwIC4uLicNCitpZiAhW2luZm8g ZXhpc3RzIFNLSVBfU1RFUF9DT1VOVF0gew0KKyAgICBzZXQgU0tJUF9TVEVQ X0NPVU5UIDEwMDANCit9DQoraWYgIVtpbmZvIGV4aXN0cyBTS0lQX0RJUkVD VElWRV9DT1VOVF0gew0KKyAgICBzZXQgU0tJUF9ESVJFQ1RJVkVfQ09VTlQg MTAwMA0KK30NCisNCitwcm9jIGRlbGV0ZV9hbGxfc2tpcHMgeyB9IHsNCisg ICAgIyBGSVhNRTogc2tpcCBjdXJyZW50bHkgZG9lc24ndCBhc2sgZm9yIGNv bmZpcm1hdGlvbg0KKyAgICAjIEZJWE1FOiAic2tpcCBkZWxldGUiIHdpdGgg bm8gc2tpcHMgLT4NCisgICAgIyAgICJObyBza2lwbGlzdCBlbnRyaWVzIGZv dW5kIHdpdGggbnVtYmVyIChudWxsKS4iDQorICAgIGdkYl90ZXN0X25vX291 dHB1dCAic2V0IGNvbmZpcm0gb2ZmIg0KKyAgICBnZGJfdGVzdCAic2tpcCBk ZWxldGUiICIiDQorICAgIGdkYl90ZXN0X25vX291dHB1dCAic2V0IGNvbmZp cm0gb24iDQorfQ0KKw0KK3Byb2MgaW5zdGFsbF9za2lwcyB7IGtpbmQgdGV4 dCBucl9za2lwcyB9IHsNCisgICAgZ2xvYmFsIGdkYl9wcm9tcHQNCisgICAg c2V0IHRlc3QgImluc3RhbGxfc2tpcHMiDQorICAgIGRlbGV0ZV9hbGxfc2tp cHMNCisgICAgc3dpdGNoICRraW5kIHsNCisJImZ1bmN0aW9uIiB7IHNldCBz a2lwX2FyZyAiLWZ1bmN0aW9uIiB9DQorCSJyZWdleHAiIHsgc2V0IHNraXBf YXJnICItcmZ1bmN0aW9uIiB9DQorCWRlZmF1bHQgew0KKwkgICAgcGVycm9y ICJiYWQgc2tpcCBraW5kOiAka2luZCINCisJICAgIHJldHVybg0KKwl9DQor ICAgIH0NCisgICAgZm9yIHsgc2V0IGkgMCB9IHsgJGkgPCAkbnJfc2tpcHMg fSB7IGluY3IgaSB9IHsNCisJZ2RiX3Rlc3QgInNraXAgJHNraXBfYXJnIFtm b3JtYXQgJHRleHQgJGldIiAiIg0KKyAgICB9DQorICAgICMgVGhlcmUgY291 bGQgYmUgMTAwMCdzIG9mIHRoZXNlLCB3aGljaCBjYW4gb3ZlcmZsb3cgdGhl IGJ1ZmZlci4NCisgICAgIyBIb3dldmVyLCBpdCdzIGdvb2QgdG8gaGF2ZSB0 aGlzIGluIHRoZSBsb2csIHNvIHdlIGdvIHRvIHRoZSBlZmZvcnQNCisgICAg IyB0byByZWFkIGl0IGFsbCBpbi4NCisgICAgZ2RiX3Rlc3RfbXVsdGlwbGUg ImluZm8gc2tpcCIgJHRlc3Qgew0KKwktcmUgIlxbXlxyXG5cXSpcclxuIiB7 IGV4cF9jb250aW51ZSB9DQorCS1yZSAiXFtcclxuXF0qJGdkYl9wcm9tcHQg JCIgew0KKwkgICAgcGFzcyAkdGVzdA0KKwl9DQorCXRpbWVvdXQgew0KKwkg ICAgZmFpbCAiJHRlc3QgKHRpbWVvdXQpIg0KKwl9DQorICAgIH0NCit9DQor DQorcHJvYyB3cml0ZV9za2lwX2Z1bmNfc291cmNlIHsgZmlsZV9uYW1lIGZ1 bmNfbmFtZV9wcmVmaXggbnJfZnVuY3MgfSB7DQorICAgIHNldCBmIFtvcGVu ICRmaWxlX25hbWUgInciXQ0KKyAgICBwdXRzICRmICIvLyBETyBOT1QgRURJ VCwgbWFjaGluZSBnZW5lcmF0ZWQgZmlsZS4gIFNlZSAgDQpza2lwLWNvbW1h bmQuZXhwLiINCisgICAgZm9yIHsgc2V0IGkgMCB9IHsgJGkgPCAkbnJfZnVu Y3MgfSB7IGluY3IgaSB9IHsNCisJc2V0IGZ1bmNfbmFtZSBbZm9ybWF0ICIk e2Z1bmNfbmFtZV9wcmVmaXh9XyUwMmQiICRpXQ0KKwlwdXRzICRmICJpbnQg JGZ1bmNfbmFtZSAoKSB7IHJldHVybiAwOyB9Ig0KKyAgICB9DQorICAgIGNs b3NlICRmDQorfQ0KKw0KK3Byb2MgcnVuX3NraXBfYmVuY2ggeyBraW5kIHRl eHQgfSB7DQorICAgIGdsb2JhbCBTS0lQX1NURVBfQ09VTlQgU0tJUF9ESVJF Q1RJVkVfQ09VTlQNCisNCisgICAgaWYgIVtydW50b19tYWluXSB7DQorCWZh aWwgIkNhbid0IHJ1biB0byBtYWluIg0KKwlyZXR1cm4gLTENCisgICAgfQ0K Kw0KKyAgICBnZGJfdGVzdF9ub19vdXRwdXQgInNldCB2YXJpYWJsZSBmbGFn ID0gMSINCisNCisgICAgZm9yIHsgc2V0IGkgMCB9IHsgJGkgPCA1IH0geyBp bmNyIGkgfSB7DQorCXNldCBucl9za2lwcyBbZXhwciAkaSAqICRTS0lQX0RJ UkVDVElWRV9DT1VOVF0NCisJaW5zdGFsbF9za2lwcyAka2luZCAkdGV4dCAk bnJfc2tpcHMNCisJZ2RiX3Rlc3Rfbm9fb3V0cHV0ICJweXRob24gU2tpcENv bW1hbmRcKFwic2tpcC0ka2luZC0kbnJfc2tpcHNcIiwgIA0KJHtTS0lQX1NU RVBfQ09VTlR9XCkucnVuKCkiDQorICAgIH0NCisNCisgICAgZ2RiX3Rlc3Qg InNldCB2YXJpYWJsZSBmbGFnID0gMCINCit9DQorDQorUGVyZlRlc3Q6OmFz c2VtYmxlIHsNCisgICAgZ2xvYmFsIHNyY2RpciBzdWJkaXIgc3JjZmlsZSBi aW5maWxlIHNraXBfZnVuY19maWxlDQorICAgIGdsb2JhbCBTS0lQX0RJUkVD VElWRV9DT1VOVA0KKw0KKyAgICB3cml0ZV9za2lwX2Z1bmNfc291cmNlICRz a2lwX2Z1bmNfZmlsZSAic2tpcF9mdW5jIiBbZXhwciA0ICogIA0KJFNLSVBf RElSRUNUSVZFX0NPVU5UXQ0KKyAgICBpZiB7IFtnZGJfY29tcGlsZSBbbGlz dCAiJHNyY2Rpci8kc3ViZGlyLyRzcmNmaWxlIiAkc2tpcF9mdW5jX2ZpbGVd ICANCiR7YmluZmlsZX0gZXhlY3V0YWJsZSB7YysrIGRlYnVnfV0gIT0gIiIg fSB7DQorCXJldHVybiAtMQ0KKyAgICB9DQorICAgIHJldHVybiAwDQorfSB7 DQorICAgIGdsb2JhbCBiaW5maWxlDQorICAgIGNsZWFuX3Jlc3RhcnQgJGJp bmZpbGUNCisgICAgcmV0dXJuIDANCit9IHsNCisgICAgZ2xvYmFsIFNLSVBf U1RFUF9DT1VOVCBTS0lQX0RJUkVDVElWRV9DT1VOVA0KKw0KKyAgICB3aXRo X3Rlc3RfcHJlZml4ICJ0aW1lX3NraXBfZnVuYyIgew0KKwkjIE4uQi4gVGhl IGZ1bmN0aW9uIG5hbWUgbXVzdCBtYXRjaCB0aGUgb25lcyBpbiBza2lwLWNv bW1hbmQuY2MuDQorCXJ1bl9za2lwX2JlbmNoICJmdW5jdGlvbiIgInNraXBf ZnVuY18lMDJkIg0KKyAgICB9DQorDQorICAgIHdpdGhfdGVzdF9wcmVmaXgg InRpbWVfc2tpcF9jb25zdHJ1Y3RvciIgew0KKwlydW5fc2tpcF9iZW5jaCAi cmVnZXhwIiAiXihza2lwX2NsYXNzXyUwMmQpOjpcXDEgKlxcKCINCisgICAg fQ0KKw0KKyAgICByZXR1cm4gMA0KK30NCmRpZmYgLS1naXQgYS9nZGIvdGVz dHN1aXRlL2dkYi5wZXJmL3NraXAtY29tbWFuZC5weSAgDQpiL2dkYi90ZXN0 c3VpdGUvZ2RiLnBlcmYvc2tpcC1jb21tYW5kLnB5DQpuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KaW5kZXggMDAwMDAwMC4uMTJjMjhmMg0KLS0tIC9kZXYvbnVs bA0KKysrIGIvZ2RiL3Rlc3RzdWl0ZS9nZGIucGVyZi9za2lwLWNvbW1hbmQu cHkNCkBAIC0wLDAgKzEsMzQgQEANCisjIENvcHlyaWdodCAoQykgMjAxNiBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisNCisjIFRoaXMgcHJv Z3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5DQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0K KyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3INCisjIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uDQorIw0KKyMgVGhpcyBwcm9ncmFtIGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws DQorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyMgTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0K KyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4NCisjDQorIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQ0KKyMgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uDQorDQorZnJvbSBwZXJmdGVzdCBpbXBvcnQgcGVy ZnRlc3QNCisNCitjbGFzcyBTa2lwQ29tbWFuZCAocGVyZnRlc3QuVGVzdENh c2VXaXRoQmFzaWNNZWFzdXJlbWVudHMpOg0KKyAgICBkZWYgX19pbml0X18o c2VsZiwgbmFtZSwgc3RlcCk6DQorICAgICAgICBzdXBlciAoU2tpcENvbW1h bmQsIHNlbGYpLl9faW5pdF9fIChuYW1lKQ0KKyAgICAgICAgc2VsZi5zdGVw ID0gc3RlcA0KKw0KKyAgICBkZWYgd2FybV91cChzZWxmKToNCisgICAgICAg IGZvciBfIGluIHJhbmdlKDAsIDEwKToNCisgICAgICAgICAgICBnZGIuZXhl Y3V0ZSgic3RlcCIsIEZhbHNlLCBUcnVlKQ0KKw0KKyAgICBkZWYgX3J1bihz ZWxmLCByKToNCisgICAgICAgIGZvciBfIGluIHJhbmdlKDAsIHIpOg0KKyAg ICAgICAgICAgIGdkYi5leGVjdXRlKCJzdGVwIiwgRmFsc2UsIFRydWUpDQor DQorICAgIGRlZiBleGVjdXRlX3Rlc3Qoc2VsZik6DQorICAgICAgICBmb3Ig aSBpbiByYW5nZSgxLCA1KToNCisgICAgICAgICAgICBmdW5jID0gbGFtYmRh OiBzZWxmLl9ydW4oaSAqIHNlbGYuc3RlcCkNCisgICAgICAgICAgICBzZWxm Lm1lYXN1cmUubWVhc3VyZShmdW5jLCBpICogc2VsZi5zdGVwKQ0KZGlmZiAt LWdpdCBhL2dkYi91dGlscy5jIGIvZ2RiL3V0aWxzLmMNCmluZGV4IGUzNGMx MmUuLjk3NzMxNGIgMTAwNjQ0DQotLS0gYS9nZGIvdXRpbHMuYw0KKysrIGIv Z2RiL3V0aWxzLmMNCkBAIC0zMzgwLDYgKzMzODAsODMgQEAgZ2RiX2ZpbGVu YW1lX2ZubWF0Y2ggKGNvbnN0IGNoYXIgKnBhdHRlcm4sIGNvbnN0ICANCmNo YXIgKnN0cmluZywgaW50IGZsYWdzKQ0KICAgIHJldHVybiBmbm1hdGNoIChw YXR0ZXJuLCBzdHJpbmcsIGZsYWdzKTsNCiAgfQ0KDQorLyogUmV0dXJuIHRo ZSBudW1iZXIgb2YgcGF0aCBlbGVtZW50cyBpbiBQQVRILg0KKyAgIC8gPSAx DQorICAgL2ZvbyA9IDINCisgICAvZm9vLyA9IDINCisgICBmb28vYmFyID0g Mg0KKyAgIGZvby8gPSAxICAqLw0KKw0KK2ludA0KK2NvdW50X3BhdGhfZWxl bWVudHMgKGNvbnN0IGNoYXIgKnBhdGgpDQorew0KKyAgaW50IGNvdW50ID0g MDsNCisgIGNvbnN0IGNoYXIgKnAgPSBwYXRoOw0KKw0KKyAgaWYgKEhBU19E UklWRV9TUEVDIChwKSkNCisgICAgew0KKyAgICAgIHAgPSBTVFJJUF9EUklW RV9TUEVDIChwKTsNCisgICAgICArK2NvdW50Ow0KKyAgICB9DQorDQorICB3 aGlsZSAoKnAgIT0gJ1wwJykNCisgICAgew0KKyAgICAgIGlmIChJU19ESVJf U0VQQVJBVE9SICgqcCkpDQorCSsrY291bnQ7DQorICAgICAgKytwOw0KKyAg ICB9DQorDQorICAvKiBCYWNrdXAgb25lIGlmIGxhc3QgY2hhcmFjdGVyIGlz IC8sIHVubGVzcyBpdCdzIHRoZSBvbmx5IG9uZS4gICovDQorICBpZiAocCA+ IHBhdGggKyAxICYmIElTX0RJUl9TRVBBUkFUT1IgKHBbLTFdKSkNCisgICAg LS1jb3VudDsNCisNCisgIC8qIEFkZCBvbmUgZm9yIHRoZSBmaWxlIG5hbWUs IGlmIHByZXNlbnQuICAqLw0KKyAgaWYgKHAgPiBwYXRoICYmICFJU19ESVJf U0VQQVJBVE9SIChwWy0xXSkpDQorICAgICsrY291bnQ7DQorDQorICByZXR1 cm4gY291bnQ7DQorfQ0KKw0KKy8qIFJlbW92ZSBOIGxlYWRpbmcgcGF0aCBl bGVtZW50cyBmcm9tIFBBVEguDQorICAgTiBtdXN0IGJlIG5vbi1uZWdhdGl2 ZS4NCisgICBJZiBQQVRIIGhhcyBtb3JlIHRoYW4gTiBwYXRoIGVsZW1lbnRz IHRoZW4gcmV0dXJuIE5VTEwuDQorICAgSWYgUEFUSCBoYXMgZXhhY3RseSBO IHBhdGggZWxlbWVudHMgdGhlbiByZXR1cm4gIiIuDQorICAgU2VlIGNvdW50 X3BhdGhfZWxlbWVudHMgZm9yIGEgZGVzY3JpcHRpb24gb2YgaG93IHdlIGRv IHRoZSBjb3VudGluZy4gICovDQorDQorY29uc3QgY2hhciAqDQorc3RyaXBf bGVhZGluZ19wYXRoX2VsZW1lbnRzIChjb25zdCBjaGFyICpwYXRoLCBpbnQg bikNCit7DQorICBpbnQgaSA9IDA7DQorICBjb25zdCBjaGFyICpwID0gcGF0 aDsNCisNCisgIGdkYl9hc3NlcnQgKG4gPj0gMCk7DQorDQorICBpZiAobiA9 PSAwKQ0KKyAgICByZXR1cm4gcDsNCisNCisgIGlmIChIQVNfRFJJVkVfU1BF QyAocCkpDQorICAgIHsNCisgICAgICBwID0gU1RSSVBfRFJJVkVfU1BFQyAo cCk7DQorICAgICAgKytpOw0KKyAgICB9DQorDQorICB3aGlsZSAoaSA8IG4p DQorICAgIHsNCisgICAgICB3aGlsZSAoKnAgIT0gJ1wwJyAmJiAhSVNfRElS X1NFUEFSQVRPUiAoKnApKQ0KKwkrK3A7DQorICAgICAgaWYgKCpwID09ICdc MCcpDQorCXsNCisJICBpZiAoaSArIDEgPT0gbikNCisJICAgIHJldHVybiAi IjsNCisJICByZXR1cm4gTlVMTDsNCisJfQ0KKyAgICAgICsrcDsNCisgICAg ICArK2k7DQorICAgIH0NCisNCisgIHJldHVybiBwOw0KK30NCisNCiAgLyog UHJvdmlkZSBhIHByb3RvdHlwZSB0byBzaWxlbmNlIC1XbWlzc2luZy1wcm90 b3R5cGVzLiAgKi8NCiAgZXh0ZXJuIGluaXRpYWxpemVfZmlsZV9mdHlwZSBf aW5pdGlhbGl6ZV91dGlsczsNCg0KZGlmZiAtLWdpdCBhL2dkYi91dGlscy5o IGIvZ2RiL3V0aWxzLmgNCmluZGV4IDQ1NzFhYWYuLjA2ODdjODYgMTAwNjQ0 DQotLS0gYS9nZGIvdXRpbHMuaA0KKysrIGIvZ2RiL3V0aWxzLmgNCkBAIC0x MzUsNiArMTM1LDEwIEBAIGV4dGVybiB2b2lkIHN1YnN0aXR1dGVfcGF0aF9j b21wb25lbnQgKGNoYXIgKipzdHJpbmdwLCAgDQpjb25zdCBjaGFyICpmcm9t LA0KICAJCQkJICAgICAgIGNvbnN0IGNoYXIgKnRvKTsNCg0KICBjaGFyICps ZGlybmFtZSAoY29uc3QgY2hhciAqZmlsZW5hbWUpOw0KKw0KK2V4dGVybiBp bnQgY291bnRfcGF0aF9lbGVtZW50cyAoY29uc3QgY2hhciAqcGF0aCk7DQor DQorZXh0ZXJuIGNvbnN0IGNoYXIgKnN0cmlwX2xlYWRpbmdfcGF0aF9lbGVt ZW50cyAoY29uc3QgY2hhciAqcGF0aCwgaW50IG4pOw0KICAMDQogIC8qIEdE QiBvdXRwdXQsIHVpX2ZpbGUgdXRpbGl0aWVzLiAgKi8NCg0K >From gdb-patches-return-129606-listarch-gdb-patches=sources.redhat.com@sourceware.org Wed Feb 17 01:26:55 2016 Return-Path: Delivered-To: listarch-gdb-patches@sources.redhat.com Received: (qmail 31738 invoked by alias); 17 Feb 2016 01:26:55 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 31727 invoked by uid 89); 17 Feb 2016 01:26:54 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.8 required=5.0 tests=BAYES_50,RP_MATCHES_RCVD,SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=Identify, inspect, sk:break-i, UD:break-interp.exp X-HELO: mx1.redhat.com Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES256-GCM-SHA384 encrypted) ESMTPS; Wed, 17 Feb 2016 01:26:52 +0000 Received: from int-mx13.intmail.prod.int.phx2.redhat.com (int-mx13.intmail.prod.int.phx2.redhat.com [10.5.11.26]) by mx1.redhat.com (Postfix) with ESMTPS id 057EFC0EF882 for ; Wed, 17 Feb 2016 01:26:51 +0000 (UTC) Received: from localhost (unused-10-15-17-51.yyz.redhat.com [10.15.17.51]) by int-mx13.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id u1H1QoMe018658 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO) for ; Tue, 16 Feb 2016 20:26:50 -0500 From: Sergio Durigan Junior To: GDB Patches Subject: [PATCH] Improve analysis of racy testcases X-URL: http://blog.sergiodj.net Date: Wed, 17 Feb 2016 01:26:00 -0000 Message-ID: <87r3gcgm91.fsf@redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux) MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2016-02/txt/msg00490.txt.bz2 Content-length: 15041 This patch is a proposal to introduce some mechanisms to identify racy testcases present in our testsuite. As can be seen in previous discussions, racy tests are really bothersome and cause our BuildBot to pollute the gdb-testers mailing list with hundreds of false-positives messages every month. Hopefully, by identifying these racy tests in advance (and automatically) will contribute to the reduction of noise traffic to gdb-testers, maybe to the point where we will be able to send the failure messages directly to the authors of the commits. I spent some time trying to decide the best way to tackle this problem, and decided that there is no silver bullet. Racy tests are tricky and it is difficult to catch them, so the best solution I could find (for now?) is to run our testsuite a number of times in a row, and then compare the results (i.e., the gdb.sum files generated during each run). The more times you run the tests, the more racy tests you are likely to detect (at the expense of waiting longer and longer). You can also run the tests in parallel, which makes things faster (and contribute to catching more racy tests, because your machine will have less resources for each test and some of them are likely to fail when this happens). I did some tests in my machine (8-core i7, 16GB RAM), and running the whole GDB testsuite 5 times using -j6 took 23 minutes. Not bad. In order to run the racy test machinery, you need to specify the RACY_ITER environment variable. You will assign a number to this variable, which represents the number of times you want to run the tests. So, for example, if you want to run the whole testsuite 3 times in parallel (using 2 cores), you will do: make check RACY_ITER=3 -j2 It is also possible to use the TESTS variable and specify which tests you want to run: make check TEST='gdb.base/default.exp' RACY_ITER=3 -j2 And so on. The output files will be put at the directory gdb/testsuite/racy_outputs/. After make invokes the necessary rules to run the tests, it finally runs a Python script that will analyze the resulting gdb.sum files. This Python script will read each file, and construct a series of sets based on the results of the tests (one set for FAIL's, one for PASS'es, one for KFAIL's, etc.). It will then do some set operations and come up with a list of unique, sorted testcases that are racy. The algorithm behind this is: for state in PASS, FAIL, XFAIL, XPASS...; do if a test's state in every sumfile is $state; then it is not racy else it is racy IOW, a test must have the same state in every sumfile. After processing everything, the script prints the racy tests it could identify on stdout. I am redirecting this to a file named racy.sum. Something else that I wasn't sure how to deal with was non-unique messages in our testsuite. I decided to do the same thing I do in our BuildBot: include a unique identifier in the end of message, like: gdb.base/xyz.exp: non-unique message gdb.base/xyz.exp: non-unique message <<2>> This means that you will have to be careful about them when you use the racy.sum file. I ran the script several times here, and it did a good job catching some well-known racy tests. Overall, I am satisfied with this approach and I think it will be helpful to have it upstream'ed. I also intend to extend our BuildBot and create new, specialized builders that will be responsible for detecting the racy tests every X number of days, but that will only be done when this patch is accepted. Comments are welcome, as usual. Thanks. -- Sergio GPG key ID: 237A 54B1 0287 28BF 00EF 31F4 D0EB 7628 65FC 5E36 Please send encrypted e-mail if possible http://sergiodj.net/ gdb/testsuite/ChangeLog: 2016-02-17 Sergio Durigan Junior * Makefile.in (DEFAULT_RACY_ITER): New variable. (CHECK_TARGET_TMP): Likewise. (check-single-racy): New rule. (check-parallel-racy): Likewise. (TEST_TARGETS): Adjust rule to account for RACY_ITER. (do-check-parallel-racy): New rule. (check-racy/%.exp): Likewise. * README (Racy testcases): New section. * analyze-racy-logs.py: New file. diff --git a/gdb/testsuite/Makefile.in b/gdb/testsuite/Makefile.in index 38c3052..4bf6191 100644 --- a/gdb/testsuite/Makefile.in +++ b/gdb/testsuite/Makefile.in @@ -52,6 +52,8 @@ RUNTESTFLAGS = FORCE_PARALLEL = +DEFAULT_RACY_ITER = 3 + RUNTEST_FOR_TARGET = `\ if [ -f $${srcdir}/../../dejagnu/runtest ]; then \ echo $${srcdir}/../../dejagnu/runtest; \ @@ -140,7 +142,8 @@ installcheck: # given. If RUNTESTFLAGS is not empty, then by default the tests will # be serialized. This can be overridden by setting FORCE_PARALLEL to # any non-empty value. For a non-GNU make, do not parallelize. -@GMAKE_TRUE@CHECK_TARGET = $(if $(FORCE_PARALLEL),check-parallel,$(if $(RUNTESTFLAGS),check-single,$(if $(saw_dash_j),check-parallel,check-single))) +@GMAKE_TRUE@CHECK_TARGET_TMP = $(if $(FORCE_PARALLEL),check-parallel,$(if $(RUNTESTFLAGS),check-single,$(if $(saw_dash_j),check-parallel,check-single))) +@GMAKE_TRUE@CHECK_TARGET = $(if $(RACY_ITER),$(addsuffix -racy,$(CHECK_TARGET_TMP)),$(CHECK_TARGET_TMP)) @GMAKE_FALSE@CHECK_TARGET = check-single # Note that we must resort to a recursive make invocation here, @@ -190,6 +193,26 @@ DO_RUNTEST = \ check-single: $(DO_RUNTEST) $(RUNTESTFLAGS) $(expanded_tests_or_none) +check-single-racy: + -rm -rf cache racy_outputs temp + mkdir -p racy_outputs; \ + racyiter="$(RACY_ITER)"; \ + test "x$$racyiter" == "x" && \ + racyiter=$(DEFAULT_RACY_ITER); \ + if test $$racyiter -lt 2 ; then \ + echo "RACY_ITER must be at least 2."; \ + exit 1; \ + fi; \ + trap "exit" INT; \ + for n in `seq $$racyiter` ; do \ + $(DO_RUNTEST) --outdir=racy_outputs/ $(RUNTESTFLAGS) \ + $(expanded_tests_or_none); \ + mv -f racy_outputs/gdb.sum racy_outputs/gdb$$n.sum; \ + mv -f racy_outputs/gdb.log racy_outputs/gdb$$n.log; \ + done; \ + $(srcdir)/analyze-racy-logs.py \ + `ls racy_outputs/gdb*.sum` > racy.sum + check-parallel: -rm -rf cache outputs temp $(MAKE) -k do-check-parallel; \ @@ -201,6 +224,30 @@ check-parallel: sed -n '/=== gdb Summary ===/,$$ p' gdb.sum; \ exit $$result +check-parallel-racy: + -rm -rf cache racy_outputs temp + racyiter="$(RACY_ITER)"; \ + test "x$$racyiter" == "x" && \ + racyiter=$(DEFAULT_RACY_ITER); \ + if test $$racyiter -lt 2 ; then \ + echo "RACY_ITER must be at least 2."; \ + exit 1; \ + fi; \ + trap "exit" INT; \ + for n in `seq $$racyiter` ; do \ + $(MAKE) -k do-check-parallel-racy \ + RACY_OUTPUT_N=$$n; \ + $(SHELL) $(srcdir)/dg-extract-results.sh \ + `find racy_outputs/racy$$n -name gdb.sum -print` > \ + racy_outputs/gdb$$n.sum; \ + $(SHELL) $(srcdir)/dg-extract-results.sh -L \ + `find racy_outputs/racy$$n -name gdb.log -print` > \ + gdb$$n.log; \ + sed -n '/=== gdb Summary ===/,$$ p' racy_outputs/gdb$$n.sum; \ + done; \ + $(srcdir)/analyze-racy-logs.py \ + `ls racy_outputs/gdb*.sum` > racy.sum + # Turn a list of .exp files into "check/" targets. Only examine .exp # files appearing in a gdb.* directory -- we don't want to pick up # lib/ by mistake. For example, gdb.linespec/linespec.exp becomes @@ -214,9 +261,9 @@ slow_tests = gdb.base/break-interp.exp gdb.base/interp.exp \ gdb.base/multi-forks.exp @GMAKE_TRUE@all_tests := $(shell cd $(srcdir) && find gdb.* -name '*.exp' -print) @GMAKE_TRUE@reordered_tests := $(slow_tests) $(filter-out $(slow_tests),$(all_tests)) -@GMAKE_TRUE@TEST_TARGETS := $(addprefix check/,$(reordered_tests)) +@GMAKE_TRUE@TEST_TARGETS := $(addprefix $(if $(RACY_ITER),check-racy,check)/,$(reordered_tests)) @GMAKE_TRUE@else -@GMAKE_TRUE@TEST_TARGETS := $(addprefix check/,$(expanded_tests_or_none)) +@GMAKE_TRUE@TEST_TARGETS := $(addprefix $(if $(RACY_ITER),check-racy,check)/,$(expanded_tests_or_none)) @GMAKE_TRUE@endif do-check-parallel: $(TEST_TARGETS) @@ -226,6 +273,15 @@ do-check-parallel: $(TEST_TARGETS) @GMAKE_TRUE@ -mkdir -p outputs/$* @GMAKE_TRUE@ @$(DO_RUNTEST) GDB_PARALLEL=yes --outdir=outputs/$* $*.exp $(RUNTESTFLAGS) +do-check-parallel-racy: $(TEST_TARGETS) + @: + +@GMAKE_TRUE@check-racy/%.exp: +@GMAKE_TRUE@ -mkdir -p racy_outputs/racy$(RACY_OUTPUT_N)/$* +@GMAKE_TRUE@ $(DO_RUNTEST) GDB_PARALLEL=yes \ +@GMAKE_TRUE@ --outdir=racy_outputs/racy$(RACY_OUTPUT_N)/$* $*.exp \ +@GMAKE_TRUE@ $(RUNTESTFLAGS) + check/no-matching-tests-found: @echo "" @echo "No matching tests found." diff --git a/gdb/testsuite/README b/gdb/testsuite/README index 6b59027..efcd459 100644 --- a/gdb/testsuite/README +++ b/gdb/testsuite/README @@ -50,6 +50,29 @@ to any non-empty value: If you want to use runtest directly instead of using the Makefile, see the description of GDB_PARALLEL below. +Racy testcases +************** + +Unfortunately, GDB has a number of testcases that can randomly pass or +fail. We call them "racy testcases", and they can be bothersome when +one is comparing different testsuite runs. In order to help +identifying them, it is possible to run the tests several times in a +row and ask the testsuite machinery to analyze the results. To do +that, you need to specify the RACY_ITER environment variable to make: + + make check RACY_ITER=5 -j4 + +The value assigned to RACY_ITER represents the number of times you +wish to run the tests in sequence (in the example above, the entire +testsuite will be executed 5 times in a row, in parallel). It is also +possible to check just a specific test: + + make check TESTS='gdb.base/default.exp' RACY_ITER=3 + +After running the tests, you shall see a file name 'racy.sum' in the +gdb/testsuite directory. You can also inspect the generated *.log and +*.sum files by looking into the gdb/testsuite/racy_ouputs directory. + Running the Performance Tests ***************************** diff --git a/gdb/testsuite/analyze-racy-logs.py b/gdb/testsuite/analyze-racy-logs.py new file mode 100755 index 0000000..4f05185 --- /dev/null +++ b/gdb/testsuite/analyze-racy-logs.py @@ -0,0 +1,131 @@ +#!/usr/bin/env python + +# Copyright (C) 2016 Free Software Foundation, Inc. +# +# This file is part of GDB. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + + +# This program is used to analyze the test results (i.e., *.sum files) +# generated by GDB's testsuite, and print the testcases that are found +# to be racy. +# +# Racy testcases are considered as being testcases which can +# intermitently FAIL (or PASS) when run two or more times +# consecutively, i.e., tests whose results are not deterministic. +# +# This program is invoked when the user runs "make check" and +# specifies the RACY_ITER environment variable. + +import sys +import os +import re + +# The (global) dictionary that stores the associations between a *.sum +# file and its results. The data inside it will be stored as: +# +# files_and_tests = { 'file1.sum' : { 'PASS' : { 'test1', 'test2' ... }, +# 'FAIL' : { 'test5', 'test6' ... }, +# ... +# }, +# { 'file2.sum' : { 'PASS' : { 'test1', 'test3' ... }, +# ... +# } +# } + +files_and_tests = dict () + +# We are interested in lines that start with '.?(PASS|FAIL)'. In +# other words, we don't process errors (maybe we should). + +sum_matcher = re.compile('^(.?(PASS|FAIL)): (.*)$') + +def parse_sum_line (line, dic): + """Parse a single LINE from a sumfile, and store the results in the +dictionary referenced by DIC.""" + global sum_matcher + + line = line.rstrip () + m = re.match (sum_matcher, line) + if m: + result = m.group (1) + test_name = m.group (3) + if result not in dic.keys (): + dic[result] = set () + if test_name in dic[result]: + # If the line is already present in the dictionary, then + # we include a unique identifier in the end of it, in the + # form or '<>' (where N is a number >= 2). This is + # useful because the GDB testsuite is full of non-unique + # test messages; however, if you process the racy summary + # file you will also need to perform this same operation + # in order to identify the racy test. + i = 2 + while True: + nname = test_name + ' <<' + str (i) + '>>' + if nname not in dic[result]: + break + i += 1 + test_name = nname + dic[result].add (test_name) + +def read_sum_files (files): + """Read the sumfiles (passed as a list in the FILES variable), and +process each one, filling the FILES_AND_TESTS global dictionary with +information about them. """ + global files_and_tests + + for x in files: + with open (x, 'r') as f: + files_and_tests[x] = dict () + for line in f.readlines (): + parse_sum_line (line, files_and_tests[x]) + +def identify_racy_tests (): + """Identify and print the racy tests. This function basically works +on sets, and the idea behind it is simple. It takes all the sets that +refer to the same result (for example, all the sets that contain PASS +tests), and compare them. If a test is present in all PASS sets, then +it is not racy. Otherwise, it is. + +This function does that for all sets (PASS, FAIL, KPASS, KFAIL, etc.), +and then print a sorted list (without duplicates) of all the tests +that were found to be racy.""" + global files_and_tests + + total_set = dict () + for item in files_and_tests: + for key in files_and_tests[item]: + if key not in total_set: + total_set[key] = files_and_tests[item][key] + else: + total_set[key] &= files_and_tests[item][key] + + racy_tests = set () + for item in files_and_tests: + for key in files_and_tests[item]: + racy_tests |= files_and_tests[item][key] - total_set[key] + + for line in sorted (racy_tests): + print line + +if __name__ == '__main__': + if len (sys.argv) < 3: + # It only makes sense to invoke this program if you pass two + # or more files to be analyzed. + sys.exit ("Usage: %s [FILE] [FILE] ..." % sys.argv[0]) + read_sum_files (sys.argv[1:]) + identify_racy_tests () + exit (0)