From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1784BC3A5A3 for ; Fri, 30 Aug 2019 06:40:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id AEE9F21874 for ; Fri, 30 Aug 2019 06:40:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=fb.com header.i=@fb.com header.b="jydHygmS"; dkim=pass (1024-bit key) header.d=fb.onmicrosoft.com header.i=@fb.onmicrosoft.com header.b="f59QVwiG" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726791AbfH3GkS (ORCPT ); Fri, 30 Aug 2019 02:40:18 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:10488 "EHLO mx0b-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726005AbfH3GkR (ORCPT ); Fri, 30 Aug 2019 02:40:17 -0400 Received: from pps.filterd (m0109332.ppops.net [127.0.0.1]) by mx0a-00082601.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id x7U6dodV009100; Thu, 29 Aug 2019 23:39:51 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=facebook; bh=DUg0ghNkz88RVs7RR+p9MHpWtbCH1kxBDBSQlMinRxc=; b=jydHygmSfpC4svGXJyV+qpm9rJKwSOvY3Ws4NJns7VsDkmPdpNkT3+tkuzFJb6kYIUZl h6BAyGmhMch1v8dAure2HPW+1hDQwVNkS+ejkfjonJEgRdLZzT/fR4szQjR5qel+5btg gw72+mdHTbS1MMz+3Jui94ccUNMa9N7UEKc= Received: from mail.thefacebook.com (mailout.thefacebook.com [199.201.64.23]) by mx0a-00082601.pphosted.com with ESMTP id 2uprfd19g3-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-SHA384 bits=256 verify=NOT); Thu, 29 Aug 2019 23:39:50 -0700 Received: from prn-hub06.TheFacebook.com (2620:10d:c081:35::130) by prn-hub02.TheFacebook.com (2620:10d:c081:35::126) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.1.1713.5; Thu, 29 Aug 2019 23:39:49 -0700 Received: from NAM05-CO1-obe.outbound.protection.outlook.com (192.168.54.28) by o365-in.thefacebook.com (192.168.16.30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.1.1713.5 via Frontend Transport; Thu, 29 Aug 2019 23:39:49 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kn1u4psH/VfJDat8wyhQn8ImkU2G37LxiqyMTeuvJDMIRewbBHjgHVJDeYq2aFxA9jrpyCx7wgdphZqNL/aKKt+fS1B8+4eQxhrQTH1BB3mnm1qv/Gch4BQ7Q/1QJZ3KeEaW+5sJoIrIJIYnr1yIrGtgY9HZiBcrhPJ/8vLB0tYQjZs1fu7Q1sdVn3wzc8nn7KNYhRcnkkEDGjxtQ2OLYmYSumsmgPVDcaTfWQ5x5SJ1WgZM1YHkY90/oReHwtk2RCP2c+K6fguOkOx+bKQhL1l3Jb2uKCveSMiEfGiYL4DonI+/amFVHf0qvz7DPnWLJw6/ZbLyuKWYrbVTIr45WA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DUg0ghNkz88RVs7RR+p9MHpWtbCH1kxBDBSQlMinRxc=; b=ULNndnNe/wlg8OmqCAgfNIFnzWH23mgZ+pPhyl8e/o5W4/PeJUqb2XGIfAsimM1rCUO6h/imgPrSUGjjYAunluJS3pMeJCI7yw2iVzwPAxPLLH2wCMuCdzYl5pvZVbIo++DhUAfbbaLwlItk9GAt/or/WMBLHHuZo0VfzgfRDNipERub/Kincm7nGUzsYWWOH4D5ZKVgWsL/xgnKgtLp88jZOs54fZgmcQOUkY0kqDVfBWde+Byz6cIUWh3gsB7ggZnpIJDNLUjgdywM/N04f1Ih9YTil6FXWSn7dUzhs1t7YDzW4ktYMZPkTUycAkU9wlcnQ+zwiCYPBx7Ueo0PPA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fb.com; dmarc=pass action=none header.from=fb.com; dkim=pass header.d=fb.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fb.onmicrosoft.com; s=selector2-fb-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DUg0ghNkz88RVs7RR+p9MHpWtbCH1kxBDBSQlMinRxc=; b=f59QVwiGJYoWghvNVeKT5AGtbcf75Ja82VDXaxkKsJylXlTWZReR64BHDwqIAb4hX7YrhXpkpyPLc0iWU+4BrQ3y8B7JToR3DNs6f6WvLuv3SK2uoDtUQwIXsMrEJTlkSjfRdd/DZ48+jagoCo5fzOGFLrxcMuvlI5LjXr63anM= Received: from BYAPR15MB3384.namprd15.prod.outlook.com (20.179.59.17) by BYAPR15MB3464.namprd15.prod.outlook.com (20.179.60.12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2220.18; Fri, 30 Aug 2019 06:39:48 +0000 Received: from BYAPR15MB3384.namprd15.prod.outlook.com ([fe80::d95b:271:fa7e:e978]) by BYAPR15MB3384.namprd15.prod.outlook.com ([fe80::d95b:271:fa7e:e978%5]) with mapi id 15.20.2220.013; Fri, 30 Aug 2019 06:39:48 +0000 From: Yonghong Song To: Brian Vazquez CC: "bpf@vger.kernel.org" , "netdev@vger.kernel.org" , Alexei Starovoitov , Daniel Borkmann , Kernel Team Subject: Re: [PATCH bpf-next 05/13] bpf: adding map batch processing support Thread-Topic: [PATCH bpf-next 05/13] bpf: adding map batch processing support Thread-Index: AQHVXjVb273O5V9IwUydXk3nCcvtS6cSvu8AgACAEQA= Date: Fri, 30 Aug 2019 06:39:48 +0000 Message-ID: <2581bf69-2e35-fb10-7b84-3869286f6c85@fb.com> References: <20190829064502.2750303-1-yhs@fb.com> <20190829064507.2750795-1-yhs@fb.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: BYAPR07CA0059.namprd07.prod.outlook.com (2603:10b6:a03:60::36) To BYAPR15MB3384.namprd15.prod.outlook.com (2603:10b6:a03:10e::17) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2620:10d:c090:180::5364] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 72e2edef-9a22-4015-2986-08d72d14da2f x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600166)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:BYAPR15MB3464; x-ms-traffictypediagnostic: BYAPR15MB3464: x-ms-exchange-purlcount: 5 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:7691; x-forefront-prvs: 0145758B1D x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(136003)(39860400002)(366004)(376002)(346002)(396003)(189003)(199004)(478600001)(6512007)(25786009)(99286004)(6116002)(2906002)(36756003)(6246003)(66446008)(66556008)(4326008)(66476007)(64756008)(6306002)(86362001)(5024004)(14444005)(6436002)(30864003)(66946007)(256004)(81166006)(8936002)(31696002)(8676002)(81156014)(7736002)(54906003)(14454004)(305945005)(966005)(53936002)(5660300002)(6916009)(53946003)(71190400001)(71200400001)(76176011)(52116002)(446003)(2616005)(229853002)(46003)(102836004)(6506007)(386003)(11346002)(31686004)(486006)(6486002)(476003)(316002)(186003)(53546011);DIR:OUT;SFP:1102;SCL:1;SRVR:BYAPR15MB3464;H:BYAPR15MB3384.namprd15.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: fb.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: lZPOQx1a7sRNpyu6/RJogCRwxQe4NiF2o4sZ3JOhIbZTFzRdJ9lmMconorWRS+xr2zVxgx/2WVgkolyOsvGWNWRFjagpV5XHCi7gNauhWcp2sXXMOpZB1tynKCTgZBe7EXei6bCAlc3xLcN5qTPMfGBy02QNV2B2HVuh1YlMAuGnhA0GUHfnoyoLtmdcpp9LV8LmZmoVGGXt2o0hv7Tksu/SUiPmS3wlzidxFxs+YtJ0P5QU31IKLME5cqtB3JYrOBPyraoG7B2YUzmkIR2j6uChCrtzxWy0bIDiZKqiT1O5Nc9pKCy6Is6VLrW8pphjxI4aIC8doa2+gyLogXdUmMUjkCSNrxRal1QhCLLvlaNhc5oOs8OXgcfLjl4YWPA830dVxB32NdwpPFCZWaXwKdWr89ojuCCYaxhC2ZlYNyY= Content-Type: text/plain; charset="utf-8" Content-ID: <8C3673D9B531A045AEAB6926737D264B@namprd15.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 72e2edef-9a22-4015-2986-08d72d14da2f X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Aug 2019 06:39:48.3132 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: t/h6aS/gGKkohJyQbxJy6tvqrRh19VduUYf18cqsWYWKeIhvOHgnEIIe3kPl805v X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR15MB3464 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.70,1.0.8 definitions=2019-08-30_03:2019-08-29,2019-08-30 signatures=0 X-Proofpoint-Spam-Details: rule=fb_default_notspam policy=fb_default score=0 clxscore=1015 bulkscore=0 impostorscore=0 suspectscore=0 spamscore=0 phishscore=0 mlxscore=0 malwarescore=0 adultscore=0 lowpriorityscore=0 mlxlogscore=999 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-1906280000 definitions=main-1908300069 X-FB-Internal: deliver Sender: bpf-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: bpf@vger.kernel.org DQoNCk9uIDgvMjkvMTkgNDowMSBQTSwgQnJpYW4gVmF6cXVleiB3cm90ZToNCj4gSGkgWW9uZ2hv bmchDQo+IA0KPiBUaGFua3MgZm9yIHNlbmRpbmcgdGhpcyBzZXJpZXMgb2YgcGF0Y2hlcyBhbmQg c3RhcnRpbmcgdGhlIGRpc2N1c3Npb24uDQo+IA0KPiBPbiBXZWQsIEF1ZyAyOCwgMjAxOSBhdCAx MTo0NSBQTSBZb25naG9uZyBTb25nIDx5aHNAZmIuY29tPiB3cm90ZToNCj4+DQo+PiBCcmlhbiBW YXpxdWV6IGhhcyBwcm9wb3NlZCBCUEZfTUFQX0RVTVAgY29tbWFuZCB0byBsb29rIHVwIG1vcmUg dGhhbiBvbmUNCj4+IG1hcCBlbnRyaWVzIHBlciBzeXNjYWxsLg0KPj4gICAgaHR0cHM6Ly9sb3Jl Lmtlcm5lbC5vcmcvYnBmL0NBQkNncGFVM3h4WDZDTU14RCsxa25BcGl2dGMyakxCSHlzRFh3LTBF OWJRRUwwcUMzQUBtYWlsLmdtYWlsLmNvbS9ULyN0DQo+Pg0KPj4gRHVyaW5nIGRpc2N1c3Npb24s IHdlIGZvdW5kIG1vcmUgdXNlIGNhc2VzIGNhbiBiZSBzdXBwb3J0ZWQgaW4gYSBzaW1pbGFyDQo+ PiBtYXAgb3BlcmF0aW9uIGJhdGNoaW5nIGZyYW1ld29yay4gRm9yIGV4YW1wbGUsIGJhdGNoZWQg bWFwIGxvb2t1cCBhbmQgZGVsZXRlLA0KPj4gd2hpY2ggY2FuIGJlIHJlYWxseSBoZWxwZnVsIGZv ciBiY2MuDQo+PiAgICBodHRwczovL2dpdGh1Yi5jb20vaW92aXNvci9iY2MvYmxvYi9tYXN0ZXIv dG9vbHMvdGNwdG9wLnB5I0wyMzMtTDI0Mw0KPj4gICAgaHR0cHM6Ly9naXRodWIuY29tL2lvdmlz b3IvYmNjL2Jsb2IvbWFzdGVyL3Rvb2xzL3NsYWJyYXRldG9wLnB5I0wxMjktTDEzOA0KPj4NCj4+ IEFsc28sIGluIGJjYywgd2UgaGF2ZSBBUEkgdG8gZGVsZXRlIGFsbCBlbnRyaWVzIGluIGEgbWFw Lg0KPj4gICAgaHR0cHM6Ly9naXRodWIuY29tL2lvdmlzb3IvYmNjL2Jsb2IvbWFzdGVyL3NyYy9j Yy9hcGkvQlBGVGFibGUuaCNMMjU3LUwyNjQNCj4+DQo+PiBGb3IgbWFwIHVwZGF0ZSwgYmF0Y2hl ZCBvcGVyYXRpb25zIGFsc28gdXNlZnVsIGFzIHNvbWV0aW1lcyBhcHBsaWNhdGlvbnMgbmVlZA0K Pj4gdG8gcG9wdWxhdGUgaW5pdGlhbCBtYXBzIHdpdGggbW9yZSB0aGFuIG9uZSBlbnRyeS4gRm9y IGV4YW1wbGUsIHRoZSBiZWxvdw0KPj4gZXhhbXBsZSBpcyBmcm9tIGtlcm5lbC9zYW1wbGVzL2Jw Zi94ZHBfcmVkaXJlY3RfY3B1X3VzZXIuYzoNCj4+ICAgIGh0dHBzOi8vZ2l0aHViLmNvbS90b3J2 YWxkcy9saW51eC9ibG9iL21hc3Rlci9zYW1wbGVzL2JwZi94ZHBfcmVkaXJlY3RfY3B1X3VzZXIu YyNMNTQzLUw1NTANCj4+DQo+PiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhbGwgdGhlIGFib3ZlIHVz ZSBjYXNlcy4gVG8gbWFrZSB1YXBpIHN0YWJsZSwgaXQgYWxzbw0KPj4gY292ZXJzIG90aGVyIHBv dGVudGlhbCB1c2UgY2FzZXMuIEZvdXIgYnBmIHN5c2NhbGwgc3ViY29tbWFuZHMgYXJlIGludHJv ZHVjZWQ6DQo+PiAgICAgICAgICBCUEZfTUFQX0xPT0tVUF9CQVRDSA0KPj4gICAgICAgICAgQlBG X01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSA0KPj4gICAgICAgICAgQlBGX01BUF9VUERBVEVf QkFUQ0gNCj4+ICAgICAgICAgIEJQRl9NQVBfREVMRVRFX0JBVENIDQo+Pg0KPj4gVGhlIFVBUEkg YXR0cmlidXRlIHN0cnVjdHVyZSBsb29rcyBsaWtlOg0KPj4gICAgICAgICAgc3RydWN0IHsgLyog c3RydWN0IHVzZWQgYnkgQlBGX01BUF8qX0JBVENIIGNvbW1hbmRzICovDQo+PiAgICAgICAgICAg ICAgICAgIF9fYWxpZ25lZF91NjQgICBzdGFydF9rZXk7ICAgICAgLyogaW5wdXQ6IHN0b3Jpbmcg c3RhcnQga2V5LA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqIGlmIE5VTEwsIHN0YXJ0aW5nIGZyb20gdGhlIGJlZ2lubmluZy4NCj4+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCj4+ICAgICAg ICAgICAgICAgICAgX19hbGlnbmVkX3U2NCAgIG5leHRfc3RhcnRfa2V5OyAvKiBvdXRwdXQ6IHN0 b3JpbmcgbmV4dCBiYXRjaCBzdGFydF9rZXksDQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICogaWYgTlVMTCwgbm8gbmV4dCBrZXkuDQo+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQo+PiAgICAg ICAgICAgICAgICAgIF9fYWxpZ25lZF91NjQgICBrZXlzOyAgICAgICAgICAgLyogaW5wdXQvb3V0 cHV0OiBrZXkgYnVmZmVyICovDQo+PiAgICAgICAgICAgICAgICAgIF9fYWxpZ25lZF91NjQgICB2 YWx1ZXM7ICAgICAgICAgLyogaW5wdXQvb3V0cHV0OiB2YWx1ZSBidWZmZXIgKi8NCj4+ICAgICAg ICAgICAgICAgICAgX191MzIgICAgICAgICAgIGNvdW50OyAgICAgICAgICAvKiBpbnB1dDogIyBv ZiBrZXlzL3ZhbHVlcyBpbg0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqICAgb3IgZml0cyBpbiBrZXlzW10vdmFsdWVzW10uDQo+PiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogb3V0cHV0OiBob3cg bWFueSBzdWNjZXNzZnVsDQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICogICBsb29rdXAvbG9va3VwX2FuZF9kZWxldGUNCj4+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIC9kZWxldGUvdXBkYXRl IG9wZXJhdGlvbnMuDQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovDQo+PiAgICAgICAgICAgICAgICAgIF9fdTMyICAgICAgICAgICBtYXBfZmQ7 DQo+PiAgICAgICAgICAgICAgICAgIF9fdTY0ICAgICAgICAgICBlbGVtX2ZsYWdzOyAgICAgLyog QlBGX01BUF97VVBEQVRFLExPT0tVUH1fRUxFTSBmbGFncyAqLw0KPj4gICAgICAgICAgICAgICAg ICBfX3U2NCAgICAgICAgICAgZmxhZ3M7ICAgICAgICAgIC8qIGZsYWdzIGZvciBiYXRjaCBvcGVy YXRpb24gKi8NCj4+ICAgICAgICAgIH0gYmF0Y2g7DQo+Pg0KPj4gVGhlICdzdGFydF9rZXknIGFu ZCAnbmV4dF9zdGFydF9rZXknIGFyZSB1c2VkIHRvIEJQRl9NQVBfTE9PS1VQX0JBVENILA0KPj4g QlBGX01BUF9MT09LVVBfQU5EX0RFTEVURV9CQVRDSCBhbmQgQlBGX01BUF9ERUxFVEVfQkFUQ0gN Cj4+IHRvIHN0YXJ0IHRoZSBvcGVyYXRpb24gb24gJ3N0YXJ0X2tleScgYW5kIGFsc28gc2V0IHRo ZQ0KPj4gbmV4dCBiYXRjaCBzdGFydCBrZXkgaW4gJ25leHRfc3RhcnRfa2V5Jy4NCj4+DQo+PiBJ ZiAnY291bnQnIGlzIGdyZWF0ZXIgdGhhbiAwIGFuZCB0aGUgcmV0dXJuIGNvZGUgaXMgMCwNCj4+ ICAgIC4gdGhlICdjb3VudCcgbWF5IGJlIHVwZGF0ZWQgdG8gYmUgc21hbGxlciBpZiB0aGVyZSBp cyBsZXNzDQo+PiAgICAgIGVsZW1lbnRzIHRoYW4gJ2NvdW50JyBmb3IgdGhlIG9wZXJhdGlvbi4g SW4gc3VjaCBjYXNlcywNCj4+ICAgICAgJ25leHRfc3RhcnRfa2V5JyB3aWxsIGJlIHNldCB0byBO VUxMLg0KPj4gICAgLiB0aGUgJ2NvdW50JyByZW1haW5zIHRoZSBzYW1lLiAnbmV4dF9zdGFydF9r ZXknIGNvdWxkIGJlIE5VTEwNCj4+ICAgICAgb3IgY291bGQgcG9pbnQgdG8gbmV4dCBzdGFydF9r ZXkgZm9yIGJhdGNoIHByb2Nlc3NpbmcuDQo+Pg0KPj4gSWYgJ2NvdW50JyBpcyBncmVhdGVyIHRo YW4gMCBhbmQgdGhlIHJldHVybiBjb2RlIGlzIGFuIGVycm9yDQo+PiBvdGhlciB0aGFuIC1FRkFV TFQsIHRoZSBrZXJuZWwgd2lsbCB0cnkgdG8gb3ZlcndyaXRlICdjb3VudCcNCj4+IHRvIGNvbnRh aW4gdGhlIG51bWJlciBvZiBzdWNjZXNzZnVsIGVsZW1lbnQtbGV2ZWwgKGxvb2t1cCwNCj4+IGxv b2t1cF9hbmRfZGVsZXRlLCB1cGRhdGUgYW5kIGRlbGV0ZSkgb3BlcmF0aW9ucy4gVGhlIGZvbGxv d2luZw0KPj4gYXR0cmlidXRlcyBjYW4gYmUgY2hlY2tlZDoNCj4+ICAgIC4gaWYgJ2NvdW50JyB2 YWx1ZSBpcyBtb2RpZmllZCwgdGhlIG5ldyB2YWx1ZSB3aWxsIGJlDQo+PiAgICAgIHRoZSBudW1i ZXIgb2Ygc3VjY2Vzc2Z1bCBlbGVtZW50LWxldmVsIG9wZXJhdGlvbnMuDQo+PiAgICAuIGlmICdj b3VudCcgdmFsdWUgaXMgbW9kaWZpZWQsIHRoZSBrZXlzW10vdmFsdWVzW10gd2lsbA0KPj4gICAg ICBjb250YWluIGNvcnJlY3QgcmVzdWx0cyBmb3IgbmV3ICdjb3VudCcgbnVtYmVyIG9mDQo+PiAg ICAgIG9wZXJhdGlvbnMgZm9yIGxvb2t1cFtfYW5kX2RlbGV0ZV0gYW5kIHVwZGF0ZS4NCj4+DQo+ PiBUaGUgaW1wbGVtZW50YXRpb24gaW4gdGhpcyBwYXRjaCBtaW1pY3Mgd2hhdCB1c2VyIHNwYWNl DQo+PiBkaWQsIGUuZy4sIGZvciBsb29rdXBfYW5kX2RlbGV0ZSwNCj4+ICAgICAgd2hpbGUoYnBm X2dldF9uZXh0X2tleShtYXAsIGtleXAsIG5leHRfa2V5cCkgPT0gMCkgew0KPj4gICAgICAgICBi cGZfbWFwX2RlbGV0ZV9lbGVtKG1hcCwga2V5cCk7DQo+PiAgICAgICAgIGJwZl9tYXBfbG9va3Vw X2VsZW0obWFwLCBuZXh0X2tleXAsICZ2YWx1ZSwgZmxhZ3MpOw0KPj4gICAgICAgICBrZXlwLCBu ZXh0X2tleXAgPSBuZXh0X2tleXAsIGtleXA7DQo+PiAgICAgIH0NCj4+IFRoZSBzaW1pbGFyIGxv b3AgaXMgaW1wbGVtZW50ZWQgaW4gdGhlIGtlcm5lbCwgYW5kDQo+PiBlYWNoIG9wZXJhdGlvbiwg YnBmX2dldF9uZXh0X2tleSgpLCBicGZfbWFwX2RlbGV0ZV9lbGVtKCkNCj4+IGFuZCBicGZfbWFw X2xvb2t1cF9lbGVtKCksIHVzZXMgZXhpc3Rpbmcga2VybmVsIGZ1bmN0aW9ucw0KPj4gZWFjaCBv ZiB3aGljaCBoYXMgaXRzIG93biByY3VfcmVhZF9sb2NrIHJlZ2lvbiwgYnBmX3Byb2dfYWN0aXZl DQo+PiBwcm90ZWN0aW9uLCBldGMuDQo+PiBUaGVyZWZvcmUsIGl0IGlzIHRvdGFsbHkgcG9zc2li bGUgdGhhdCBhZnRlciBicGZfZ2V0X25leHRfa2V5KCksDQo+PiB0aGUgYnBmX21hcF9kZWxldGVf ZWxlbSgpIG9yIGJwZl9tYXBfbG9va3VwX2VsZW0oKSBtYXkgZmFpbA0KPj4gYXMgdGhlIGtleSBt YXkgYmUgZGVsZXRlZCBjb25jdXJyZW50bHkgYnkga2VybmVsIG9yDQo+PiBvdGhlciB1c2VyIHNw YWNlIHByb2Nlc3Nlcy90aHJlYWRzLg0KPj4gQnkgZGVmYXVsdCwgdGhlIGN1cnJlbnQgaW1wbGVt ZW50YXRpb24gcGVybWl0cyB0aGUgbG9vcA0KPj4gdG8gY29udGludWUsIGp1c3QgbGlrZSB0eXBp Y2FsIHVzZXIgc3BhY2UgaGFuZGxpbmcuIEJ1dA0KPj4gYSBmbGFnLCBCUEZfRl9FTkZPUkNFX0VO T0VOVCwgY2FuIGJlIHNwZWNpZmllZCwgc28ga2VybmVsDQo+PiB3aWxsIHJldHVybiBhbiBlcnJv ciBpZiBicGZfbWFwX2RlbGV0ZV9lbGVtKCkgb3INCj4+IGJwZl9tYXBfbG9va3VwX2VsZW0oKSBm YWlsZWQuDQo+Pg0KPj4gVGhlIGhpZ2gtbGV2ZWwgYWxnb3JpdGhtIGZvciBCUEZfTUFQX0xPT0tV UF9CQVRDSCBhbmQNCj4+IEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFUQ0g6DQo+PiAgICAg ICAgICBpZiAoc3RhcnRfa2V5ID09IE5VTEwgYW5kIG5leHRfc3RhcnRfa2V5ID09IE5VTEwpIHsN Cj4+ICAgICAgICAgICAgICAgICAgbG9va3VwIHVwIHRvICdjb3VudCcga2V5cyBpbiBrZXlzW10g YW5kIGZpbGwNCj4+ICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyB2YWx1ZXNbXSwgYW5k IGRlbGV0ZSB0aG9zZQ0KPj4gICAgICAgICAgICAgICAgICBrZXlzIGlmIEJQRl9NQVBfTE9PS1VQ X0FORF9ERUxFVEVfQkFUQ0guDQo+PiAgICAgICAgICB9IGVsc2UgaWYgKHN0YXJ0X2tleSA9PSBO VUxMICYmIG5leHRfc3RhcnRfa2V5ICE9IE5VTEwpIHsNCj4+ICAgICAgICAgICAgICAgICAgbG9v a3VwIHVwIHRvICdjb3VudCcga2V5cyBmcm9tIHRoZSBiZWdpbm5pbmcNCj4+ICAgICAgICAgICAg ICAgICAgb2YgdGhlIG1hcCBhbmQgZmlsbCBrZXlzW10vdmFsdWVzW10sIGRlbGV0ZQ0KPj4gICAg ICAgICAgICAgICAgICB0aG9zZSBrZXlzIGlmIEJQRl9NQVBfTE9PS1VQX0FORF9ERUxFVEVfQkFU Q0guDQo+PiAgICAgICAgICAgICAgICAgIFNldCAnbmV4dF9zdGFydF9rZXknIGZvciBuZXh0IGJh dGNoIG9wZXJhdGlvbi4NCj4+ICAgICAgICAgIH0gZWxzZSBpZiAoc3RhcnRfa2V5ICE9IE5VTEwg JiYgbmV4dF9zdGFydF9rZXkgIT0gTlVMTCkgew0KPj4gICAgICAgICAgICAgICAgICBsb29rdXAg dG8gJ2NvdW50JyBrZXlzIGZyb20gJ3N0YXJ0X2tleScsIGluY2x1c2l2ZSwNCj4+ICAgICAgICAg ICAgICAgICAgYW5kIGZpbGwga2V5c1tdL3ZhbHVlc1tdLCBkZWxldGUgdGhvc2Uga2V5cyBpZg0K Pj4gICAgICAgICAgICAgICAgICBCUEZfTUFQX0xPT0tVUF9BTkRfREVMRVRFX0JBVENILg0KPj4g ICAgICAgICAgICAgICAgICBTZXQgJ25leHRfc3RhcnRfa2V5JyBmb3IgbmV4dCBiYXRjaCBvcGVy YXRpb24uDQo+PiAgICAgICAgICB9DQo+Pg0KPj4gVGhlIGhpZ2gtbGV2ZWwgYWxnb3JpdGhtIGZv ciBCUEZfTUFQX1VQREFURV9CQVRDSDoNCj4+ICAgICAgICAgIGlmIChjb3VudCAhPSAwKSB7DQo+ PiAgICAgICAgICAgICAgICAgIGRvICdjb3VudCcgbnVtYmVyIG9mIHVwZGF0ZXMgb24ga2V5c1td L3ZhbHVlc1tdLg0KPj4gICAgICAgICAgfQ0KPj4NCj4+IFRoZSBoaWdoLWxldmVsIGFsZ29yaXRo bSBmb3IgQlBGX01BUF9ERUxFVEVfQkFUQ0g6DQo+PiAgICAgICAgICBpZiAoY291bnQgPT0gMCkg ew0KPj4gICAgICAgICAgICAgICAgICBpZiAoc3RhcnRfa2V5ID09IE5VTEwpIHsNCj4+ICAgICAg ICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWxsIGVsZW1lbnRzIGZyb20gbWFwLg0KPj4gICAg ICAgICAgICAgICAgICB9IGVsc2Ugew0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0 ZSBhbGwgZWxlbWVudHMgZnJvbSBzdGFydF9rZXkgdG8gdGhlIGVuZCBvZiBtYXAuDQo+PiAgICAg ICAgICAgICAgICAgIH0NCj4+ICAgICAgICAgIH0gZWxzZSB7DQo+PiAgICAgICAgICAgICAgICAg IGlmIChzdGFydF9rZXkgPT0gTlVMTCBhbmQgbmV4dF9zdGFydF9rZXkgPT0gTlVMTCkgew0KPj4g ICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAnY291bnQnIG51bWJlciBvZiBrZXlzIGlu IGtleXNbXS4NCj4+ICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzdGFydF9rZXkgPT0gTlVM TCBhbmQgbmV4dF9zdGFydF9rZXkgIT0gTlVMTCkgew0KPj4gICAgICAgICAgICAgICAgICAgICAg ICAgIGRlbGV0ZSAnY291bnQnIG51bWJlciBvZiBrZXlzIGZyb20gdGhlDQo+PiAgICAgICAgICAg ICAgICAgICAgICAgICAgYmVnaW5uaW5nIG9mIHRoZSBtYXAgYW5kIHNldCAnbmV4dF9zdGFydF9r ZXknDQo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcGVybHkuDQo+PiAgICAgICAgICAg ICAgICAgIH0gZWxzZSBpZiAoc3RhcnRfa2V5ICE9IE5VTEwgYW5kIG5leHRfc3RhcnRfa2VlZXkg IT0gTlVMTCkgew0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSAnY291bnQnIG51 bWJlciBvZiBrZXlzIGZyb20gJ3N0YXJ0X2tleScsDQo+PiAgICAgICAgICAgICAgICAgICAgICAg ICAgYW5kIHNldCAnbmV4dF9zdGFydF9rZXknIHByb3Blcmx5Lg0KPj4gICAgICAgICAgICAgICAg ICB9DQo+PiAgICAgICAgICB9DQo+Pg0KPj4gU2lnbmVkLW9mZi1ieTogWW9uZ2hvbmcgU29uZyA8 eWhzQGZiLmNvbT4NCj4+IC0tLQ0KPj4gICBpbmNsdWRlL3VhcGkvbGludXgvYnBmLmggfCAgMjcg KysrDQo+PiAgIGtlcm5lbC9icGYvc3lzY2FsbC5jICAgICB8IDQ0OCArKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysNCj4+ICAgMiBmaWxlcyBjaGFuZ2VkLCA0NzUgaW5zZXJ0 aW9ucygrKQ0KPj4NCj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgvYnBmLmggYi9p bmNsdWRlL3VhcGkvbGludXgvYnBmLmgNCj4+IGluZGV4IDVkMmZiMTgzZWUyZC4uNTc2Njg4ZjEz ZThjIDEwMDY0NA0KPj4gLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2JwZi5oDQo+PiArKysgYi9p bmNsdWRlL3VhcGkvbGludXgvYnBmLmgNCj4+IEBAIC0xMDcsNiArMTA3LDEwIEBAIGVudW0gYnBm X2NtZCB7DQo+PiAgICAgICAgICBCUEZfTUFQX0xPT0tVUF9BTkRfREVMRVRFX0VMRU0sDQo+PiAg ICAgICAgICBCUEZfTUFQX0ZSRUVaRSwNCj4+ICAgICAgICAgIEJQRl9CVEZfR0VUX05FWFRfSUQs DQo+PiArICAgICAgIEJQRl9NQVBfTE9PS1VQX0JBVENILA0KPj4gKyAgICAgICBCUEZfTUFQX0xP T0tVUF9BTkRfREVMRVRFX0JBVENILA0KPj4gKyAgICAgICBCUEZfTUFQX1VQREFURV9CQVRDSCwN Cj4+ICsgICAgICAgQlBGX01BUF9ERUxFVEVfQkFUQ0gsDQo+PiAgIH07DQo+Pg0KPj4gICBlbnVt IGJwZl9tYXBfdHlwZSB7DQo+PiBAQCAtMzQ3LDYgKzM1MSw5IEBAIGVudW0gYnBmX2F0dGFjaF90 eXBlIHsNCj4+ICAgLyogZmxhZ3MgZm9yIEJQRl9QUk9HX1FVRVJZICovDQo+PiAgICNkZWZpbmUg QlBGX0ZfUVVFUllfRUZGRUNUSVZFICAoMVUgPDwgMCkNCj4+DQo+PiArLyogZmxhZ3MgZm9yIEJQ Rl9NQVBfKl9CQVRDSCAqLw0KPj4gKyNkZWZpbmUgQlBGX0ZfRU5GT1JDRV9FTk9FTlQgICAoMVUg PDwgMCkNCj4+ICsNCj4+ICAgZW51bSBicGZfc3RhY2tfYnVpbGRfaWRfc3RhdHVzIHsNCj4+ICAg ICAgICAgIC8qIHVzZXIgc3BhY2UgbmVlZCBhbiBlbXB0eSBlbnRyeSB0byBpZGVudGlmeSBlbmQg b2YgYSB0cmFjZSAqLw0KPj4gICAgICAgICAgQlBGX1NUQUNLX0JVSUxEX0lEX0VNUFRZID0gMCwN Cj4+IEBAIC0zOTYsNiArNDAzLDI2IEBAIHVuaW9uIGJwZl9hdHRyIHsNCj4+ICAgICAgICAgICAg ICAgICAgX191NjQgICAgICAgICAgIGZsYWdzOw0KPj4gICAgICAgICAgfTsNCj4+DQo+PiArICAg ICAgIHN0cnVjdCB7IC8qIHN0cnVjdCB1c2VkIGJ5IEJQRl9NQVBfKl9CQVRDSCBjb21tYW5kcyAq Lw0KPj4gKyAgICAgICAgICAgICAgIF9fYWxpZ25lZF91NjQgICBzdGFydF9rZXk7ICAgICAgLyog aW5wdXQ6IHN0b3Jpbmcgc3RhcnQga2V5LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICogaWYgTlVMTCwgc3RhcnRpbmcgZnJvbSB0aGUgYmVnaW5u aW5nLg0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICovDQo+PiArICAgICAgICAgICAgICAgX19hbGlnbmVkX3U2NCAgIG5leHRfc3RhcnRfa2V5OyAv KiBvdXRwdXQ6IHN0b3JpbmcgbmV4dCBiYXRjaCBzdGFydF9rZXksDQo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpZiBOVUxMLCBubyBuZXh0IGtl eS4NCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq Lw0KPj4gKyAgICAgICAgICAgICAgIF9fYWxpZ25lZF91NjQgICBrZXlzOyAgICAgICAgICAgLyog aW5wdXQvb3V0cHV0OiBrZXkgYnVmZmVyICovDQo+PiArICAgICAgICAgICAgICAgX19hbGlnbmVk X3U2NCAgIHZhbHVlczsgICAgICAgICAvKiBpbnB1dC9vdXRwdXQ6IHZhbHVlIGJ1ZmZlciAqLw0K Pj4gKyAgICAgICAgICAgICAgIF9fdTMyICAgICAgICAgICBjb3VudDsgICAgICAgICAgLyogaW5w dXQ6ICMgb2Yga2V5cy92YWx1ZXMgaW4NCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqICAgb3IgZml0cyBpbiBrZXlzW10vdmFsdWVzW10uDQo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBvdXRwdXQ6 IGhvdyBtYW55IHN1Y2Nlc3NmdWwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqICAgbG9va3VwL2xvb2t1cF9hbmRfZGVsZXRlDQo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHVwZGF0ZS9kZWxl dGUgb3BlcmF0aW9ucy4NCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqLw0KPj4gKyAgICAgICAgICAgICAgIF9fdTMyICAgICAgICAgICBtYXBfZmQ7 DQo+PiArICAgICAgICAgICAgICAgX191NjQgICAgICAgICAgIGVsZW1fZmxhZ3M7ICAgICAvKiBC UEZfTUFQXypfRUxFTSBmbGFncyAqLw0KPj4gKyAgICAgICAgICAgICAgIF9fdTY0ICAgICAgICAg ICBmbGFnczsgICAgICAgICAgLyogZmxhZ3MgZm9yIGJhdGNoIG9wZXJhdGlvbiAqLw0KPj4gKyAg ICAgICB9IGJhdGNoOw0KPj4gKw0KPj4gICAgICAgICAgc3RydWN0IHsgLyogYW5vbnltb3VzIHN0 cnVjdCB1c2VkIGJ5IEJQRl9QUk9HX0xPQUQgY29tbWFuZCAqLw0KPj4gICAgICAgICAgICAgICAg ICBfX3UzMiAgICAgICAgICAgcHJvZ190eXBlOyAgICAgIC8qIG9uZSBvZiBlbnVtIGJwZl9wcm9n X3R5cGUgKi8NCj4+ICAgICAgICAgICAgICAgICAgX191MzIgICAgICAgICAgIGluc25fY250Ow0K Pj4gZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvc3lzY2FsbC5jIGIva2VybmVsL2JwZi9zeXNjYWxs LmMNCj4+IGluZGV4IDA2MzA4ZjAyMDZlNS4uODc0NmI1NTQwNWY5IDEwMDY0NA0KPj4gLS0tIGEv a2VybmVsL2JwZi9zeXNjYWxsLmMNCj4+ICsrKyBiL2tlcm5lbC9icGYvc3lzY2FsbC5jDQo+PiBA QCAtMzMsNiArMzMsMTcgQEANCj4+DQo+PiAgICNkZWZpbmUgQlBGX09CSl9GTEFHX01BU0sgICAo QlBGX0ZfUkRPTkxZIHwgQlBGX0ZfV1JPTkxZKQ0KPj4NCj4+ICsjZGVmaW5lIEJQRl9NQVBfQkFU Q0hfU1dBUF9LRVlTKGtleTEsIGtleTIsIGJ1ZjEsIGJ1ZjIpICAgICAgICBcDQo+PiArICAgICAg IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4+ICsg ICAgICAgICAgICAgICBpZiAoa2V5MSA9PSAoYnVmMSkpIHsgICAgICAgICAgICAgICAgICAgXA0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAga2V5MSA9IGJ1ZjI7ICAgICAgICAgICAgICAgICAg ICBcDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBrZXkyID0gYnVmMTsgICAgICAgICAgICAg ICAgICAgIFwNCj4+ICsgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAga2V5MSA9IGJ1ZjE7ICAg ICAgICAgICAgICAgICAgICBcDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBrZXkyID0gYnVm MjsgICAgICAgICAgICAgICAgICAgIFwNCj4+ICsgICAgICAgICAgICAgICB9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPj4gKyAgICAgICB9IHdoaWxlICgwKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+PiArDQo+PiAgIERFRklORV9QRVJf Q1BVKGludCwgYnBmX3Byb2dfYWN0aXZlKTsNCj4+ICAgc3RhdGljIERFRklORV9JRFIocHJvZ19p ZHIpOw0KPj4gICBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHByb2dfaWRyX2xvY2spOw0KPj4gQEAg LTExODMsNiArMTE5NCw0MzEgQEAgc3RhdGljIGludCBtYXBfbG9va3VwX2FuZF9kZWxldGVfZWxl bSh1bmlvbiBicGZfYXR0ciAqYXR0cikNCj4+ICAgICAgICAgIHJldHVybiBlcnI7DQo+PiAgIH0N Cj4+DQo+PiArc3RhdGljIHZvaWQgX19tYXBfYmF0Y2hfZ2V0X2F0dHJzKGNvbnN0IHVuaW9uIGJw Zl9hdHRyICphdHRyLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQg X191c2VyICoqc2tleSwgdm9pZCBfX3VzZXIgKipuc2tleSwNCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkIF9fdXNlciAqKmtleXMsIHZvaWQgX191c2VyICoqdmFsdWVz LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiAqbWF4X2NvdW50LCB1 NjQgKmVsZW1fZmxhZ3MsIHU2NCAqZmxhZ3MpDQo+PiArew0KPj4gKyAgICAgICAqc2tleSA9IHU2 NF90b191c2VyX3B0cihhdHRyLT5iYXRjaC5zdGFydF9rZXkpOw0KPj4gKyAgICAgICAqbnNrZXkg PSB1NjRfdG9fdXNlcl9wdHIoYXR0ci0+YmF0Y2gubmV4dF9zdGFydF9rZXkpOw0KPj4gKyAgICAg ICAqa2V5cyA9IHU2NF90b191c2VyX3B0cihhdHRyLT5iYXRjaC5rZXlzKTsNCj4+ICsgICAgICAg KnZhbHVlcyA9IHU2NF90b191c2VyX3B0cihhdHRyLT5iYXRjaC52YWx1ZXMpOw0KPj4gKyAgICAg ICAqbWF4X2NvdW50ID0gYXR0ci0+YmF0Y2guY291bnQ7DQo+PiArICAgICAgICplbGVtX2ZsYWdz ID0gYXR0ci0+YmF0Y2guZWxlbV9mbGFnczsNCj4+ICsgICAgICAgKmZsYWdzID0gYXR0ci0+YmF0 Y2guZmxhZ3M7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQNCj4+ICtfX21hcF9sb29rdXBf ZGVsZXRlX2JhdGNoX2tleV9pbl9rZXlzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwg dm9pZCAqdmFsdWUsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUz MiBtYXhfY291bnQsIHUzMiBrZXlfc2l6ZSwgdTMyIHZhbHVlX3NpemUsDQo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCBlbGVtX2ZsYWdzLCB2b2lkIF9fdXNlciAq a2V5cywNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCBfX3Vz ZXIgKnZhbHVlcywNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5p b24gYnBmX2F0dHIgX191c2VyICp1YXR0ciwNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYm9vbCBpZ25vcmVfZW5vZW50KQ0KPj4gK3sNCj4+ICsgICAgICAgdTMyIGNv dW50LCBtaXNzZWQgPSAwOw0KPj4gKyAgICAgICBpbnQgcmV0ID0gMCwgZXJyOw0KPj4gKw0KPj4g KyAgICAgICBmb3IgKGNvdW50ID0gMDsgY291bnQgPCBtYXhfY291bnQ7IGNvdW50KyspIHsNCj4+ ICsgICAgICAgICAgICAgICBpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBrZXlzICsgY291bnQgKiBr ZXlfc2l6ZSwga2V5X3NpemUpKSB7DQo+PiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAt RUZBVUxUOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+PiArICAgICAgICAg ICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIHJldCA9IGJwZl9tYXBfY29weV92YWx1 ZShtYXAsIGtleSwgdmFsdWUsIGVsZW1fZmxhZ3MpOw0KPj4gKyAgICAgICAgICAgICAgIGlmIChy ZXQpIHsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gLUVOT0VOVCB8fCAh aWdub3JlX2Vub2VudCkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 DQo+PiArDQo+PiArICAgICAgICAgICAgICAgICAgICAgICBtaXNzZWQrKzsNCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPj4gKyAgICAgICAgICAgICAgIH0NCj4+ICsNCj4+ ICsNCj4+ICsgICAgICAgICAgICAgICBpZiAoY29weV90b191c2VyKHZhbHVlcyArIGNvdW50ICog dmFsdWVfc2l6ZSwgdmFsdWUsIHZhbHVlX3NpemUpKSB7DQo+PiArICAgICAgICAgICAgICAgICAg ICAgICByZXQgPSAtRUZBVUxUOw0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ PiArICAgICAgICAgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICAgICAgICAgIHJldCA9IGJwZl9t YXBfZGVsZXRlX2VsZW0obWFwLCBrZXkpOw0KPj4gKyAgICAgICAgICAgICAgIGlmIChyZXQpIHsN Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gLUVOT0VOVCB8fCAhaWdub3Jl X2Vub2VudCkNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+PiAr DQo+PiArICAgICAgICAgICAgICAgICAgICAgICBtaXNzZWQrKzsNCj4+ICsgICAgICAgICAgICAg ICB9DQo+PiArICAgICAgIH0NCj4+ICsNCj4+ICsgICAgICAgY291bnQgLT0gbWlzc2VkOw0KPj4g KyAgICAgICBpZiAoKCFyZXQgJiYgbWlzc2VkKSB8fCAocmV0ICYmIHJldCAhPSAtRUZBVUxUKSkg ew0KPj4gKyAgICAgICAgICAgICAgIGVyciA9IHB1dF91c2VyKGNvdW50LCAmdWF0dHItPmJhdGNo LmNvdW50KTsNCj4+ICsgICAgICAgICAgICAgICByZXQgPSBlcnIgPyA6IHJldDsNCj4+ICsgICAg ICAgfQ0KPj4gKw0KPj4gKyAgICAgICByZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgaW50IG1hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLA0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pb24gYnBm X2F0dHIgKmF0dHIsDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bmlvbiBicGZfYXR0ciBfX3VzZXIgKnVhdHRyLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYm9vbCBkb19kZWxldGUpDQo+PiArew0KPj4gKyAgICAgICB1MzIgbWF4 X2NvdW50LCBjb3VudCA9IDAsIGtleV9zaXplLCByb3VuZHVwX2tleV9zaXplLCB2YWx1ZV9zaXpl Ow0KPj4gKyAgICAgICBib29sIGlnbm9yZV9lbm9lbnQsIG5leHRrZXlfaXNfbnVsbCwgY29waWVk Ow0KPj4gKyAgICAgICB2b2lkICpidWYgPSBOVUxMLCAqa2V5LCAqdmFsdWUsICpuZXh0X2tleTsN Cj4+ICsgICAgICAgdm9pZCBfX3VzZXIgKnNrZXksICpuc2tleSwgKmtleXMsICp2YWx1ZXM7DQo+ PiArICAgICAgIHU2NCBlbGVtX2ZsYWdzLCBmbGFncywgemVybyA9IDA7DQo+PiArICAgICAgIGlu dCBlcnIsIHJldCA9IDA7DQo+PiArDQo+PiArICAgICAgIGlmIChtYXAtPm1hcF90eXBlID09IEJQ Rl9NQVBfVFlQRV9RVUVVRSB8fA0KPj4gKyAgICAgICAgICAgbWFwLT5tYXBfdHlwZSA9PSBCUEZf TUFQX1RZUEVfU1RBQ0spDQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9UU1VQUDsNCj4+ ICsNCj4+ICsgICAgICAgX19tYXBfYmF0Y2hfZ2V0X2F0dHJzKGF0dHIsICZza2V5LCAmbnNrZXks ICZrZXlzLCAmdmFsdWVzLCAmbWF4X2NvdW50LA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJmVsZW1fZmxhZ3MsICZmbGFncyk7DQo+PiArDQo+PiArICAgICAgIGlmIChlbGVtX2Zs YWdzICYgfkJQRl9GX0xPQ0sgfHwgZmxhZ3MgJiB+QlBGX0ZfRU5GT1JDRV9FTk9FTlQpDQo+PiAr ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+PiArDQo+PiArICAgICAgIGlmICghbWF4 X2NvdW50KQ0KPj4gKyAgICAgICAgICAgICAgIHJldHVybiAwOw0KPj4gKw0KPj4gKyAgICAgICAv KiBUaGUgZm9sbG93aW5nIG1heF9jb3VudC9za2V5L25za2V5IGNvbWJpbmF0aW9ucyBhcmUgc3Vw cG9ydGVkOg0KPj4gKyAgICAgICAgKiBtYXhfY291bnQgIT0gMCAmJiAhc2tleSAmJiAhbnNrZXk6 IGxvb3AvZGVsZXRlIG1heF9jb3VudCBlbGVtZW50cyBpbiBrZXlzW10vdmFsdWVzW10uDQo+PiAr ICAgICAgICAqIG1heF9jb3VudCAhPSAwICYmICFza2V5ICYmIG5za2V5OiBsb29wL2RlbGV0ZSBt YXhfY291bnQgZWxlbWVudHMgc3RhcnRpbmcgZnJvbSBtYXAgc3RhcnQuDQo+PiArICAgICAgICAq IG1heF9jb3VudCAhPSAwICYmIHNrZXkgJiYgbnNrZXk6IGxvb3AvZGVsZXRlIG1heF9jb3VudCBl bGVtZW50cyBzdGFydGluZyBmcm9tIHNrZXkuDQo+PiArICAgICAgICAqLw0KPj4gKyAgICAgICBp ZiAoc2tleSAmJiAhbnNrZXkpDQo+PiArICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ PiArDQo+PiArICAgICAgIC8qIGFsbG9jYXRlIHNwYWNlIGZvciB0d28ga2V5cyBhbmQgb25lIHZh bHVlLiAqLw0KPj4gKyAgICAgICBrZXlfc2l6ZSA9IG1hcC0+a2V5X3NpemU7DQo+PiArICAgICAg IHJvdW5kdXBfa2V5X3NpemUgPSByb3VuZF91cChtYXAtPmtleV9zaXplLCA4KTsNCj4+ICsgICAg ICAgdmFsdWVfc2l6ZSA9IGJwZl9tYXBfdmFsdWVfc2l6ZShtYXApOw0KPj4gKyAgICAgICBidWYg PSBrbWFsbG9jKHJvdW5kdXBfa2V5X3NpemUgKiAyICsgdmFsdWVfc2l6ZSwgR0ZQX1VTRVIgfCBf X0dGUF9OT1dBUk4pOw0KPj4gKyAgICAgICBpZiAoIWJ1ZikNCj4+ICsgICAgICAgICAgICAgICBy ZXR1cm4gLUVOT01FTTsNCj4+ICsNCj4+ICsgICAgICAga2V5ID0gYnVmOw0KPj4gKyAgICAgICBu ZXh0X2tleSA9IGJ1ZiArIHJvdW5kdXBfa2V5X3NpemU7DQo+PiArICAgICAgIHZhbHVlID0gYnVm ICsgcm91bmR1cF9rZXlfc2l6ZSAqIDI7DQo+PiArICAgICAgIGlnbm9yZV9lbm9lbnQgPSAhKGZs YWdzICYgQlBGX0ZfRU5GT1JDRV9FTk9FTlQpOw0KPj4gKw0KPj4gKyAgICAgICBpZiAoIXNrZXkg JiYgIW5za2V5KSB7DQo+PiArICAgICAgICAgICAgICAgLyogaGFuZGxlIGNhc2VzIHdoZXJlIGtl eXMgaW4ga2V5c1tdICovDQo+PiArICAgICAgICAgICAgICAgcmV0ID0gX19tYXBfbG9va3VwX2Rl bGV0ZV9iYXRjaF9rZXlfaW5fa2V5cyhtYXAsIGtleSwgdmFsdWUsIG1heF9jb3VudCwNCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGtleV9zaXplLCB2YWx1ZV9zaXplLA0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbV9mbGFncywga2V5cywgdmFsdWVzLA0K Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdWF0dHIsIGlnbm9yZV9lbm9lbnQpOw0KPj4gKyAgICAgICAgICAgICAgIGdvdG8gb3V0 Ow0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIC8qIEdldCB0aGUgZmlyc3Qga2V5LiAq Lw0KPj4gKyAgICAgICBpZiAoIXNrZXkpIHsNCj4+ICsgICAgICAgICAgICAgICByZXQgPSBicGZf bWFwX2dldF9uZXh0X2tleShtYXAsIE5VTEwsIGtleSk7DQo+PiArICAgICAgICAgICAgICAgaWYg KHJldCkgew0KPj4gKyAgICAgICAgICAgICAgICAgICAgICAgbmV4dGtleV9pc19udWxsID0gdHJ1 ZTsNCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gYWZ0ZXJfbG9vcDsNCj4+ICsgICAg ICAgICAgICAgICB9DQo+PiArICAgICAgIH0gZWxzZSBpZiAoY29weV9mcm9tX3VzZXIoa2V5LCBz a2V5LCBrZXlfc2l6ZSkpIHsNCj4+ICsgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOw0KPj4g KyAgICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAg IC8qIENvcHkgdGhlIGZpcnN0IGtleS92YWx1ZSBwYWlyICovDQo+PiArICAgICAgIHJldCA9IGJw Zl9tYXBfY29weV92YWx1ZShtYXAsIGtleSwgdmFsdWUsIGVsZW1fZmxhZ3MpOw0KPj4gKyAgICAg ICBpZiAocmV0KSB7DQo+PiArICAgICAgICAgICAgICAgaWYgKHNrZXkpDQo+PiArICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIG91dDsNCj4+ICsNCj4+ICsgICAgICAgICAgICAgICBuZXh0a2V5 X2lzX251bGwgPSB0cnVlOw0KPj4gKyAgICAgICAgICAgICAgIGdvdG8gYWZ0ZXJfbG9vcDsNCj4+ ICsgICAgICAgfQ0KPj4gKw0KPj4gKyAgICAgICBpZiAoY29weV90b191c2VyKGtleXMsIGtleSwg a2V5X3NpemUpIHx8DQo+PiArICAgICAgICAgICBjb3B5X3RvX3VzZXIodmFsdWVzLCB2YWx1ZSwg dmFsdWVfc2l6ZSkpIHsNCj4+ICsgICAgICAgICAgICAgICByZXQgPSAtRUZBVUxUOw0KPj4gKyAg ICAgICAgICAgICAgIGdvdG8gb3V0Ow0KPj4gKyAgICAgICB9DQo+PiArDQo+PiArICAgICAgIC8q IFdlIHdpbGwgYWx3YXlzIHRyeSB0byBnZXQgbmV4dF9rZXkgZmlyc3QNCj4+ICsgICAgICAgICog YW5kIHRoZW4gZGVsZXRlIHRoZSBjdXJyZW50IGtleS4NCj4+ICsgICAgICAgICovDQo+PiArICAg ICAgIHJldCA9IGJwZl9tYXBfZ2V0X25leHRfa2V5KG1hcCwga2V5LCBuZXh0X2tleSk7DQo+IA0K PiBPbmUgb2YgdGhlIGlzc3VlcyBJIHNlZSBpbiB0aGlzIGltcGxlbWVudGF0aW9uIGlzIHRoYXQg aXMgc3RpbGwNCj4gcmVseWluZyBvbiB0aGUgZXhpc3RpbmcgZnVuY3Rpb25zIGFuZCBoYXMgdGhl IHNhbWUgY29uc2lzdGVuY3kNCj4gcHJvYmxlbXMgdGhhdCBteSBhdHRlbXB0IGhhZC4NCg0KUmln aHQuIFRoZSBhcHByb2FjaCBpcyB2ZXJ5IHNpbWlsYXIgdG8gd2hhdCB5b3UgcHJvcG9zZWQgZWFy bGllci4NCg0KPiANCj4gVGhlIHByb2JsZW0gaGFwcGVucyB3aGVuIHlvdSBhcmUgdHJ5aW5nIHRv IGRvIGJhdGNoIGxvb2t1cCBvbiBhDQo+IGhhc2htYXAgYW5kIHdoZW4gZXhlY3V0aW5nIGJwZl9t YXBfZ2V0X25leHRfa2V5KG1hcCwga2V5LCBuZXh0X2tleSkNCj4gdGhlIGtleSBpcyByZW1vdmVk LCB0aGVuIHRoYXQgY2FsbCB3aWxsIHJldHVybiB0aGUgZmlyc3Qga2V5IGFuZCB5b3UnZA0KPiBz dGFydCBpdGVyYXRpbmcgdGhlIG1hcCBmcm9tIHRoZSBiZWdpbm5pbmcgYWdhaW4gYW5kIHJldHJp ZXZlDQo+IGR1cGxpY2F0ZSBpbmZvcm1hdGlvbi4NCg0KUmlnaHQuIE1heWJlIHdlIGNhbiBoYXZl IGFub3RoZXIgYnBmX21hcF9vcHMgY2FsbGJhY2sgZnVuY3Rpb24NCmxpa2UgJ21hcF9iYXRjaF9n ZXRfbmV4dF9rZXknIHdoaWNoIHdvbid0IGZhbGwgYmFjayB0byB0aGUNCmZpcnN0IGtleSBpZiB0 aGUgJ2tleScgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgaGFzaCB0YWJsZT8NCg0KSWYgJ21hcF9i YXRjaF9nZXRfbmV4dF9rZXknIGZhaWxlZCBkdWUgdG8gJ2tleScgaXMgZ29uZSwgd2UganVzdA0K cmV0dXJuIHRvIHVzZXIgc3BhY2Ugd2l0aCB3aGF0ZXZlciByZXN1bHRzIHdlIGdvdCBzbyBmYXIu DQoNCldlIGNhbiBoYXZlIGEgZmxhZyB0byBjb250cm9sIHRoaXMgYmVoYXZpb3IuIFNvbWUgdXNl cnMgbWF5IG5vdA0KY2FyZSBhYm91dCBkdXBsaWNhdGlvbi4NCg0KPiANCj4gTm90ZSB0aGF0IHNv bWV0aW1lcyB5b3UgY2FuIGFsc28gc3RhcnQgZnJvbSB0aGUgc2FtZSBidWNrZXQgd2hlbiB0aGUN Cj4ga2V5IGlzIHVwZGF0ZWQgd2hpbGUgZHVtcGluZyBpdCBiZWNhdXNlIGl0IGNhbiBiZSBpbnNl cnRlZCBvbiB0aGUgaGVhZA0KPiBvZiB0aGUgYnVja2V0IHNvIHlvdSBjb3VsZCBwb3RlbnRpYWxs eSByZXZpc2l0IGVsZW1lbnRzIHRoYXQgeW91IGhhZA0KPiBhbHJlYWR5IHZpc2l0ZWQuDQoNCkRv IHlvdSB0aGluayAnbWFwX2JhdGNoX2dldF9uZXh0X2tleScgYXBwcm9hY2ggY291bGQgc29sdmUg dGhpcyBhcyB3ZWxsPw0KDQo+IA0KPiAgRnJvbSBwcmV2aW91cyBkaXNjdXNzaW9uIG15IHVuZGVy c3RhbmRpbmcgd2FzIHRoYXQgd2hhdCB3ZSB3YW50ZWQgd2FzDQo+IHRvIHB1cnN1ZSAnYXRvbWlj JyBjb21wb3VuZGVkIG9wZXJhdGlvbnMgZmlyc3QgYW5kIGFmdGVyIHRoYXQsIHRyeSB0bw0KPiBi YXRjaCB0aGVtLiBBbHRob3VnaCBJIGRvbid0IHRoaW5rIHRoZXJlJ3MgYW4gZWFzeSB3YXkgb2Yg YmF0Y2hpbmcgYW5kDQo+IGJlaW5nIGNvbnNpc3RlbnQgYXQgdGhlIHNhbWUgdGltZS4NCg0KWWVz LCBJIHRob3VnaHQgYWJvdXQgdGhpcyAnYXRvbWljJyBjb21wb3VuZGVkIGFwcHJvYWNoLiBGaXJz dCwNCmUuZy4sIGJhdGNoIGRlbGV0aW9uLCBhZnRlciBzb21lIG9mIGVsZW1lbnRzIGFyZSBkZWxl dGVkLCB3ZSBmb3VuZA0Kb25lIGtleSBpcyBnb25lLiB3ZSBjYW5ub3QgcmVhbGx5IGdvIGJhY2sg dG8gdGhlIHN0YXRlIHdoZXJlIG5vDQpkZWxldGlvbiBoYXBwZW5zLg0KDQpTZWNvbmQsIGV2ZW4g d2UgcGVybWl0IHBhcnRpYWwgd29yaywgYmF0Y2hlZCB1cGRhdGUvZGVsZXRlIGFuZCBlbGVtZW50 DQp1cGRhdGUvZGVsZXRlIGNvbmN1cnJlbmN5ICh1c2Vyc3BhY2Ugb3IgYnBmIHByb2dyYW0pIHN0 aWxsIGhhcmQgdG8gDQptYW5hZ2UuIFdlIGNhbm5vdCBwdXQgZ2lhbnQgYmF0Y2hlZCB1cGRhdGUv ZGVsZXRlIGluIGEgc3Bpbg0KbG9jay4uLiAoYnBmIHByb2dyYW0gdXNlcyBzcGluIGxvY2sgZm9y IG1heSB1cGRhdGUvZGVsZXRlIG9wZXJhdGlvbnMpLg0KDQpJIGFncmVlIHdpdGggeW91IGFzIEkg YWxzbyBkaWQgbm90IGZpbmQgYW4gZWFzeSB3YXkgdG8gaGF2ZSBib3RoDQpiYXRjaGluZyBhbmQg Z29vZCBjb25zaXN0ZW5jeS4NCg==